diff --git a/constraint/go.mod b/constraint/go.mod index 6727ea098..0b3d66733 100644 --- a/constraint/go.mod +++ b/constraint/go.mod @@ -5,37 +5,29 @@ go 1.16 require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/davecgh/go-spew v1.1.1 - github.com/go-openapi/spec v0.20.3 // indirect - github.com/go-openapi/swag v0.19.15 // indirect - github.com/golang/glog v0.0.0-20210429001901-424d2337a529 + github.com/go-openapi/spec v0.20.4 // indirect + github.com/golang/glog v1.0.0 github.com/google/go-cmp v0.5.6 github.com/google/gofuzz v1.2.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect - github.com/json-iterator/go v1.1.11 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mitchellh/mapstructure v1.4.1 // indirect - github.com/onsi/gomega v1.10.5 - github.com/open-policy-agent/opa v0.29.4 - github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.10.0 // indirect - github.com/prometheus/common v0.25.0 // indirect + github.com/onsi/gomega v1.13.0 + github.com/open-policy-agent/opa v0.35.0 + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/spf13/cobra v1.1.3 + github.com/spf13/cobra v1.2.1 github.com/spf13/pflag v1.0.5 - golang.org/x/net v0.0.0-20210525063256-abc453219eb5 - golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c // indirect - golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b // indirect + golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c + golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 // indirect golang.org/x/term v0.0.0-20210503060354-a79de5458b56 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect - k8s.io/apiextensions-apiserver v0.20.2 - k8s.io/apimachinery v0.20.2 - k8s.io/client-go v0.20.2 + golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect + k8s.io/apiextensions-apiserver v0.21.2 + k8s.io/apimachinery v0.21.2 + k8s.io/client-go v0.21.2 k8s.io/klog/v2 v2.9.0 // indirect - k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d // indirect - k8s.io/utils v0.0.0-20210527160623-6fdb442a123b // indirect - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19 // indirect - sigs.k8s.io/controller-runtime v0.8.3 - sigs.k8s.io/structured-merge-diff/v4 v4.1.1 // indirect - sigs.k8s.io/yaml v1.2.0 + k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect + k8s.io/utils v0.0.0-20210802155522-efc7438f0176 + sigs.k8s.io/controller-runtime v0.9.2 + sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect + sigs.k8s.io/yaml v1.3.0 ) diff --git a/constraint/go.sum b/constraint/go.sum index c4e9c135a..4f4a35ac5 100644 --- a/constraint/go.sum +++ b/constraint/go.sum @@ -1,5 +1,3 @@ -4d63.com/gochecknoglobals v0.0.0-20201008074935-acfc0b28355a/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -13,9 +11,13 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -29,105 +31,69 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/ashanbrown/forbidigo v1.1.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v0.0.0-20210308000810-4155955488a0/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bytecodealliance/wasmtime-go v0.27.0 h1:b/mvyw1YJSwF5zNxqLH9V24ENkZGAvp+KgIKHOFHk1c= -github.com/bytecodealliance/wasmtime-go v0.27.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/bytecodealliance/wasmtime-go v0.31.0 h1:AbMdV1pwjw/0Ito5yARcGzY366cq5NIiDk5vpy1c2Lw= +github.com/bytecodealliance/wasmtime-go v0.31.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.6/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20210405163807-87a70f3d418b/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -137,124 +103,99 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/daixiang0/gci v0.2.8/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= +github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= +github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/esimonov/ifshort v1.0.2/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= +github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.11.0+incompatible h1:glyUF9yIYtMHzn8xaKw5rMhdWcwsYV8dZHIq5567/xs= +github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897 h1:E52jfcE64UG42SwLmrW0QByONfGynWuzBvm86BoB9z8= +github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-critic/go-critic v0.5.6/go.mod h1:cVjj0DfqewQVIlIAGexPCaGaZDAqGE29PYDDADIVNEo= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= -github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= -github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-logr/zapr v0.4.0 h1:uc1uML3hRYL9/ZZPdgHS/n8Nzo+eaYL/Efxkkamf7OM= +github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.20.3 h1:uH9RQ6vdyPSs2pSy9fL8QPspDF2AMIMPtmK5coSSjtQ= -github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= +github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -268,7 +209,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -284,23 +225,16 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.40.1/go.mod h1:OyFTr1muxaWeGTcHQcL3B7C4rETnDphTKYenZDgH2/g= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210208091834-cd28932614b5/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -309,6 +243,7 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= @@ -319,17 +254,19 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= @@ -337,53 +274,32 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/gookit/color v1.3.8/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= +github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= +github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -395,55 +311,37 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jgautheron/goconst v1.4.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jingyugao/rowserrcheck v0.0.0-20210315055705-d907ca737bb1/go.mod h1:TOQpc2SLx6huPfoFGK3UOnEG+u02D3C1GeosjupAKCA= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5 h1:9O69jUPDcsT9fEm74W92rZL9FQY7rCdaXVneq+yyzl4= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -452,60 +350,30 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= -github.com/kunwardeep/paralleltest v1.0.2/go.mod h1:ZPqNm1fVHPllh5LPVujzbVz1JN2GhLxSfY+oqUsvG30= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.1/go.mod h1:sGicqkRgBOg//JfpXwkB9Hj0X5RyJ7mlACM5B9f6Me4= -github.com/ldez/tagliatelle v0.2.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.0.6/go.mod h1:Lj5gIVxjBlH8REa3icEOkdfchwYc291nShzZ4QYWyMo= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -513,167 +381,94 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210209181001-cf43108d6880/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.1.0/go.mod h1:S1j9110vxV1ECdCudXRkeMnFQ/DQk9ajLT0Uf2MYZQQ= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4= -github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ= -github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/open-policy-agent/opa v0.29.4 h1:rNa/Gd3Fs0xWgL0aZoyblRwCZLJsSLDQOhnck6DWpaA= -github.com/open-policy-agent/opa v0.29.4/go.mod h1:ZCOTD3yyFR8JvF8ETdWdiSPn9WcF1dXeQWOv7VoPorU= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/open-policy-agent/opa v0.35.0 h1:wsXkq/3JJucRUN4h46pn9Zv6cC6fnHWrVxjgoykxM7o= +github.com/open-policy-agent/opa v0.35.0/go.mod h1:xEmekKlk6/c+so5HF9wtPnGPXDfBuBsrMGhSHOHEF+U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v0.0.0-20170211195444-bf27d3ba8e1d/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v0.0.0-20210418123303-74da32850375/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= +github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.25.0 h1:IjJYZJCI8HZYtqA3xYwGyDzSCy1r4CA2GRh+4vdOmtE= -github.com/prometheus/common v0.25.0/go.mod h1:H6QK/N6XVT42whUeIdI3dp36w49c+/iMDk7UAI2qm7Q= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.4/go.mod h1:57FZgMnoo6jqxkYKmVj5Fc8vOt0rVzoE/UNAmFFIPqA= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.2/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20210203162857-b223e0831f88/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.0/go.mod h1:rNqbC4TOIdUDcVMSIpNNAzTbzXAZa6W5lnUepvuMMgQ= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign v1.0.0/go.mod h1:LGpq5Hsv74QaqM47WtIsRSF/ik9kqk07kchgv66tLVE= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.7.0/go.mod h1:xNbGArrGUspJLuz3LS5XCY1EBW/0vABAl/LWfSklmiM= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.21.4/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -683,20 +478,21 @@ github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic 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= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -704,17 +500,11 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/ssgreg/nlreturn/v2 v2.1.0/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -723,28 +513,10 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tetafro/godot v1.4.6/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= -github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.1.0/go.mod h1:crK5eI4RGSUrb9duDTQ5GqcukbKZvi85vX6nbhsBAeI= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.3.2/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= -github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= @@ -753,10 +525,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yashtewari/glob-intersection v0.0.0-20180916065949-5c77d914dd0b h1:vVRagRXf67ESqAb72hG2C/ZwI8NtJF2u2V76EsuOHGY= github.com/yashtewari/glob-intersection v0.0.0-20180916065949-5c77d914dd0b/go.mod h1:HptNXiXVDcJjXe9SqMd0v2FsL9f8dz4GnXgltU6q/co= -github.com/yeya24/promlinter v0.1.0/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -764,38 +532,31 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -803,12 +564,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -820,7 +580,6 @@ 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -833,6 +592,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -842,6 +602,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -853,7 +614,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -867,7 +627,6 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -875,36 +634,47 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211111083644-e5c967477495/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c h1:WtYZ93XtWSO5KlOMgPZu7hXY9WhMZpprvlm5VwvAl8c= +golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -919,10 +689,8 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -934,18 +702,16 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -953,32 +719,41 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210228012217-479acdf4ea46/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b h1:qh4f65QIVFjq9eBURLEYWqaEXmOyqdUyiBSgaXWccWk= -golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 h1:TyHqChC80pFkXWraUUf6RuB5IqFdQieMLwwCJokV2pc= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -988,31 +763,24 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= +golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1023,13 +791,9 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1037,12 +801,9 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1052,59 +813,37 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201011145850-ed2f50202694/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2-0.20210512205948-8287d5da45e4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.1.0 h1:Phva6wqu+xR//Njw6iorylFFgn/z547tw5Ne3HZPQ+k= -gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1117,28 +856,28 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1152,40 +891,48 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1199,8 +946,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1208,36 +956,33 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1245,57 +990,46 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.4/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.2 h1:y/HR22XDZY3pniu9hIFDLpUCPq2w5eQ6aV/VFQ7uJMw= -k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8= -k8s.io/apiextensions-apiserver v0.20.1/go.mod h1:ntnrZV+6a3dB504qwC5PN/Yg9PBiDNt1EVqbW2kORVk= -k8s.io/apiextensions-apiserver v0.20.2 h1:rfrMWQ87lhd8EzQWRnbQ4gXrniL/yTRBgYH1x1+BLlo= -k8s.io/apiextensions-apiserver v0.20.2/go.mod h1:F6TXp389Xntt+LUq3vw6HFOLttPa0V8821ogLGwb6Zs= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.2 h1:hFx6Sbt1oG0n6DZ+g4bFt5f6BoMkOjKWsQFu077M3Vg= -k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.2 h1:lGno2t3gcZnLtzsKH4oG0xA9/4GTiBzMO1DGp+K+Bak= -k8s.io/apiserver v0.20.2/go.mod h1:2nKd93WyMhZx4Hp3RfgH2K5PhwyTrprrkWYnI7id7jA= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.2 h1:uuf+iIAbfnCSw8IGAv/Rg0giM+2bOzHLOsbbrwrdhNQ= -k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= -k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= -k8s.io/code-generator v0.20.2/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.2 h1:LMmu5I0pLtwjpp5009KLuMGFqSc2S2isGw8t1hpYKLE= -k8s.io/component-base v0.20.2/go.mod h1:pzFtCiwe/ASD0iV7ySMu8SYVJjCapNM9bjvk7ptpKh0= +k8s.io/api v0.21.2 h1:vz7DqmRsXTCSa6pNxXwQ1IYeAZgdIsua+DZU+o+SX3Y= +k8s.io/api v0.21.2/go.mod h1:Lv6UGJZ1rlMI1qusN8ruAp9PUBFyBwpEHAdG24vIsiU= +k8s.io/apiextensions-apiserver v0.21.2 h1:+exKMRep4pDrphEafRvpEi79wTnCFMqKf8LBtlA3yrE= +k8s.io/apiextensions-apiserver v0.21.2/go.mod h1:+Axoz5/l3AYpGLlhJDfcVQzCerVYq3K3CvDMvw6X1RA= +k8s.io/apimachinery v0.21.2 h1:vezUc/BHqWlQDnZ+XkrpXSmnANSLbpnlpwo0Lhk0gpc= +k8s.io/apimachinery v0.21.2/go.mod h1:CdTY8fU/BlvAbJ2z/8kBwimGki5Zp8/fbVuLY8gJumM= +k8s.io/apiserver v0.21.2 h1:vfGLD8biFXHzbcIEXyW3652lDwkV8tZEFJAaS2iuJlw= +k8s.io/apiserver v0.21.2/go.mod h1:lN4yBoGyiNT7SC1dmNk0ue6a5Wi6O3SWOIw91TsucQw= +k8s.io/client-go v0.21.2 h1:Q1j4L/iMN4pTw6Y4DWppBoUxgKO8LbffEMVEV00MUp0= +k8s.io/client-go v0.21.2/go.mod h1:HdJ9iknWpbl3vMGtib6T2PyI/VYxiZfq936WNVHBRrA= +k8s.io/code-generator v0.21.2/go.mod h1:8mXJDCB7HcRo1xiEQstcguZkbxZaqeUOrO9SsicWs3U= +k8s.io/component-base v0.21.2 h1:EsnmFFoJ86cEywC0DoIkAUiEV6fjgauNugiw1lmIjs4= +k8s.io/component-base v0.21.2/go.mod h1:9lvmIThzdlrJj5Hp8Z/TOgIkdfsNARQ1pT+3PByuiuc= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d h1:lUK8GPtuJy8ClWZhuvKoaLdKGPLq9H1PxWp7VPBZBkU= -k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210527160623-6fdb442a123b h1:MSqsVQ3pZvPGTqCjptfimO2WjG7A9un2zcpiHkA6M/s= k8s.io/utils v0.0.0-20210527160623-6fdb442a123b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176 h1:Mx0aa+SUAcNRQbs5jUzV8lkDlGFU8laZsY9jrcVX5SY= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19 h1:0jaDAAxtqIrrqas4vtTqxct4xS5kHfRNycTRLTyJmVM= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao= -sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU= +sigs.k8s.io/controller-runtime v0.9.2 h1:MnCAsopQno6+hI9SgJHKddzXpmv2wtouZz6931Eax+Q= +sigs.k8s.io/controller-runtime v0.9.2/go.mod h1:TxzMCHyEUpaeuOiZx/bIdc2T81vfs/aKdvJt9wuu0zk= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.1 h1:nYqY2A6oy37sKLYuSBXuQhbj4JVclzJK13BOIvJG5XU= -sigs.k8s.io/structured-merge-diff/v4 v4.1.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.2.0 h1:kDvPBbnPk+qYmkHmSo8vKGp438IASWofnbbUKDE/bv0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/BUILD.bazel b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/BUILD.bazel deleted file mode 100644 index 12d32c8f9..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/BUILD.bazel +++ /dev/null @@ -1,101 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - -cc_library( - name = "wasmtime", - srcs = select({ - "@io_bazel_rules_go//go/platform:darwin_amd64": ["build/macos-x86_64/libwasmtime.a"], - "@io_bazel_rules_go//go/platform:linux_amd64": ["build/linux-x86_64/libwasmtime.a"], - "@io_bazel_rules_go//go/platform:windows_amd64": ["build/windows-x86_64/libwasmtime.a"], - }), - hdrs = glob(["build/include/*.h"]), - includes = ["build/include"], - visibility = ["//visibility:public"], -) - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "doc.go", - "engine.go", - "error.go", - "exporttype.go", - "extern.go", - "externtype.go", - "ffi.go", - "freelist.go", - "func.go", - "functype.go", - "global.go", - "globaltype.go", - "importtype.go", - "instance.go", - "instancetype.go", - "limits.go", - "linker.go", - "maybe_gc_no.go", - "memory.go", - "memorytype.go", - "module.go", - "moduletype.go", - "shims.c", - "shims.h", - "slab.go", - "store.go", - "table.go", - "tabletype.go", - "trap.go", - "val.go", - "valtype.go", - "wasi.go", - "wat2wasm.go", - ], - cdeps = [":wasmtime"], # add wasmtime dep - cgo = True, - clinkopts = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "-luserenv -lole32 -lntdll -lws2_32 -lkernel32 -lbcrypt", - ], - "//conditions:default": ["-lm -ldl"], - }), - copts = [ - "-Ibuild/include", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "-DWASM_API_EXTERN= -DWASI_API_EXTERN=", - ], - "//conditions:default": [], - }), - importpath = "github.com/bytecodealliance/wasmtime-go", - visibility = ["//visibility:public"], -) - -go_test( - name = "go_default_test", - srcs = [ - "config_test.go", - "doc_test.go", - "engine_test.go", - "exporttype_test.go", - "func_test.go", - "functype_test.go", - "global_test.go", - "globaltype_test.go", - "importtype_test.go", - "instance_test.go", - "linker_test.go", - "memorytype_test.go", - "module_linking_test.go", - "module_test.go", - "reftypes_test.go", - "slab_test.go", - "store_test.go", - "table_test.go", - "tabletype_test.go", - "trap_test.go", - "valtype_test.go", - "wasi_test.go", - "wasm2wat_test.go", - ], - embed = [":go_default_library"], -) diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/LICENSE b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/LICENSE deleted file mode 100644 index f9d81955f..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/LICENSE +++ /dev/null @@ -1,220 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ---- LLVM Exceptions to the Apache 2.0 License ---- - -As an exception, if, as a result of your compiling your source code, portions -of this Software are embedded into an Object form of such source code, you -may redistribute such embedded portions in such Object form without complying -with the conditions of Sections 4(a), 4(b) and 4(d) of the License. - -In addition, if you combine or link compiled forms of this Software with -software that is licensed under the GPLv2 ("Combined Software") and if a -court of competent jurisdiction determines that the patent provision (Section -3), the indemnity provision (Section 9) or other Section of the License -conflicts with the conditions of the GPLv2, you may retroactively and -prospectively choose to deem waived or otherwise exclude such Section(s) of -the License, but only in their entirety and only with respect to the Combined -Software. - diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/README.md b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/README.md deleted file mode 100644 index f008cf637..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/README.md +++ /dev/null @@ -1,153 +0,0 @@ -
-

wasmtime-go

- -

- Go embedding of - Wasmtime -

- - A Bytecode Alliance project - -

- - CI status - - - Documentation - - - Code Coverage - -

- -
- -## Installation - -```sh -go get -u github.com/bytecodealliance/wasmtime-go@v0.27.0 -``` - -Be sure to check out the [API documentation][api]! - -This Go library uses CGO to consume the C API of the [Wasmtime -project][wasmtime] which is written in Rust. Precompiled binaries of Wasmtime -are checked into this repository on tagged releases so you won't have to install -Wasmtime locally, but it means that this project only works on Linux x86\_64, -macOS x86\_64 , and Windows x86\_64 currently. Building on other platforms will -need to arrange to build Wasmtime and use `CGO_*` env vars to compile correctly. - -This project has been tested with Go 1.13 or later. It is not recommended to -use Go 1.14 earlier than Go 1.14.11 on macOS due to a [bug in the Go runtime][bug]. - -[api]: https://pkg.go.dev/github.com/bytecodealliance/wasmtime-go -[wasmtime]: https://github.com/bytecodealliance/wasmtime -[bug]: https://github.com/golang/go/issues/39079 - - -If you are a bazel user, add following to your WORKSPACE file: - -``` -go_repository( - name = "com_github_bytecodealliance_wasmtime_go", - importpath = "github.com/bytecodealliance/wasmtime-go", - version = "v0.27.0", -) -``` - -## Usage - -A "Hello, world!" example of using this package looks like: - -```go -package main - -import ( - "fmt" - "github.com/bytecodealliance/wasmtime-go" -) - -func main() { - // Almost all operations in wasmtime require a contextual `store` - // argument to share, so create that first - store := wasmtime.NewStore(wasmtime.NewEngine()) - - // Compiling modules requires WebAssembly binary input, but the wasmtime - // package also supports converting the WebAssembly text format to the - // binary format. - wasm, err := wasmtime.Wat2Wasm(` - (module - (import "" "hello" (func $hello)) - (func (export "run") - (call $hello)) - ) - `) - check(err) - - // Once we have our binary `wasm` we can compile that into a `*Module` - // which represents compiled JIT code. - module, err := wasmtime.NewModule(store.Engine, wasm) - check(err) - - // Our `hello.wat` file imports one item, so we create that function - // here. - item := wasmtime.WrapFunc(store, func() { - fmt.Println("Hello from Go!") - }) - - // Next up we instantiate a module which is where we link in all our - // imports. We've got one import so we pass that in here. - instance, err := wasmtime.NewInstance(store,module, []*wasmtime.Extern{item.AsExtern()}) - check(err) - - // After we've instantiated we can lookup our `run` function and call - // it. - run := instance.GetExport("run").Func() - _, err = run.Call() - check(err) -} - -func check(e error) { - if e != nil { - panic(e) - } -} -``` - -## Contributing - -So far this extension has been written by folks who are primarily Rust -programmers, so it's highly likely that there's some faux pas in terms of Go -idioms. Feel free to send a PR to help make things more idiomatic if you see -something! - -To work on this extension locally you'll first want to clone the project: - -```sh -$ git clone https://github.com/bytecodealliance/wasmtime-go -``` - -Next up you'll want to have a [local Wasmtime build -available](https://bytecodealliance.github.io/wasmtime/contributing-building.html). - -You'll need to build at least the `wasmtime-c-api` crate, which, at the time of -this writing, would be: - -```sh -$ cargo build -p wasmtime-c-api -``` - -Once you've got that you can set up the environment of this library with: - -```sh -$ ./ci/local.sh /path/to/wasmtime -``` - -This will create a `build` directory which has the compiled libraries and header -files. Next up you can run normal commands such as: - -```sh -$ go test -``` - -And after that you should be good to go! diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/WORKSPACE b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/WORKSPACE deleted file mode 100644 index f2dcd75d1..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/WORKSPACE +++ /dev/null @@ -1,16 +0,0 @@ -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -http_archive( - name = "io_bazel_rules_go", - sha256 = "7904dbecbaffd068651916dce77ff3437679f9d20e1a7956bff43826e7645fcc", - urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz", - ], -) - -load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains") - -go_rules_dependencies() - -go_register_toolchains(version = "1.16") \ No newline at end of file diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/empty.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/empty.go deleted file mode 100644 index 8e731cdfc..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/empty.go +++ /dev/null @@ -1 +0,0 @@ -package include diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasi.h b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasi.h deleted file mode 100644 index 92271496c..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasi.h +++ /dev/null @@ -1,213 +0,0 @@ -/** - * \file wasi.h - * - * C API for WASI - */ - -#ifndef WASI_H -#define WASI_H - -#include "wasm.h" - -#ifndef WASI_API_EXTERN -#ifdef _WIN32 -#define WASI_API_EXTERN __declspec(dllimport) -#else -#define WASI_API_EXTERN -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define own - -#define WASI_DECLARE_OWN(name) \ - typedef struct wasi_##name##_t wasi_##name##_t; \ - WASI_API_EXTERN void wasi_##name##_delete(own wasi_##name##_t*); - -/** - * \typedef wasi_config_t - * \brief Convenience alias for #wasi_config_t - * - * \struct wasi_config_t - * \brief Opaque type used to create a #wasi_instance_t. - * - * \fn void wasi_config_delete(own wasi_config_t *); - * \brief Deletes a configuration object. - */ -WASI_DECLARE_OWN(config) - -/** - * \brief Creates a new empty configuration object. - * - * The caller is expected to deallocate the returned configuration - */ -WASI_API_EXTERN own wasi_config_t* wasi_config_new(); - -/** - * \brief Sets the argv list for this configuration object. - * - * By default WASI programs have an empty argv list, but this can be used to - * explicitly specify what the argv list for the program is. - * - * The arguments are copied into the `config` object as part of this function - * call, so the `argv` pointer only needs to stay alive for this function call. - */ -WASI_API_EXTERN void wasi_config_set_argv(wasi_config_t* config, int argc, const char* argv[]); - -/** - * \brief Indicates that the argv list should be inherited from this process's - * argv list. - */ -WASI_API_EXTERN void wasi_config_inherit_argv(wasi_config_t* config); - -/** - * \brief Sets the list of environment variables available to the WASI instance. - * - * By default WASI programs have a blank environment, but this can be used to - * define some environment variables for them. - * - * It is required that the `names` and `values` lists both have `envc` entries. - * - * The env vars are copied into the `config` object as part of this function - * call, so the `names` and `values` pointers only need to stay alive for this - * function call. - */ -WASI_API_EXTERN void wasi_config_set_env(wasi_config_t* config, int envc, const char* names[], const char* values[]); - -/** - * \brief Indicates that the entire environment of the calling process should be - * inherited by this WASI configuration. - */ -WASI_API_EXTERN void wasi_config_inherit_env(wasi_config_t* config); - -/** - * \brief Configures standard input to be taken from the specified file. - * - * By default WASI programs have no stdin, but this configures the specified - * file to be used as stdin for this configuration. - * - * If the stdin location does not exist or it cannot be opened for reading then - * `false` is returned. Otherwise `true` is returned. - */ -WASI_API_EXTERN bool wasi_config_set_stdin_file(wasi_config_t* config, const char* path); - -/** - * \brief Configures this process's own stdin stream to be used as stdin for - * this WASI configuration. - */ -WASI_API_EXTERN void wasi_config_inherit_stdin(wasi_config_t* config); - -/** - * \brief Configures standard output to be written to the specified file. - * - * By default WASI programs have no stdout, but this configures the specified - * file to be used as stdout. - * - * If the stdout location could not be opened for writing then `false` is - * returned. Otherwise `true` is returned. - */ -WASI_API_EXTERN bool wasi_config_set_stdout_file(wasi_config_t* config, const char* path); - -/** - * \brief Configures this process's own stdout stream to be used as stdout for - * this WASI configuration. - */ -WASI_API_EXTERN void wasi_config_inherit_stdout(wasi_config_t* config); - -/** - * \brief Configures standard output to be written to the specified file. - * - * By default WASI programs have no stderr, but this configures the specified - * file to be used as stderr. - * - * If the stderr location could not be opened for writing then `false` is - * returned. Otherwise `true` is returned. - */ -WASI_API_EXTERN bool wasi_config_set_stderr_file(wasi_config_t* config, const char* path); - -/** - * \brief Configures this process's own stderr stream to be used as stderr for - * this WASI configuration. - */ -WASI_API_EXTERN void wasi_config_inherit_stderr(wasi_config_t* config); - -/** - * \brief Configures a "preopened directory" to be available to WASI APIs. - * - * By default WASI programs do not have access to anything on the filesystem. - * This API can be used to grant WASI programs access to a directory on the - * filesystem, but only that directory (its whole contents but nothing above it). - * - * The `path` argument here is a path name on the host filesystem, and - * `guest_path` is the name by which it will be known in wasm. - */ -WASI_API_EXTERN bool wasi_config_preopen_dir(wasi_config_t* config, const char* path, const char* guest_path); - -/** - * \typedef wasi_instance_t - * \brief Convenience alias for #wasi_instance_t - * - * \struct wasi_instance_t - * \brief Opaque type representing a WASI instance. - * - * \fn void wasi_instance_delete(own wasi_instance_t *); - * \brief Deletes an instance object. - */ -WASI_DECLARE_OWN(instance) - -/** - * \brief Creates a new WASI instance from the specified configuration. - * - * \param store the store which functions will be attached to - * \param name the WASI module name that is being instantiated, currently either - * `wasi_unstable` or `wasi_snapshot_preview`. - * \param config the configuration object which has settings for how WASI APIs - * will behave. - * \param trap a location, if `NULL` is returned, that contains information - * about why instantiation failed. - * - * \return a #wasi_instance_t owned by the caller on success or `NULL` on - * failure. - * - * Note that this function takes ownership of the `config` argument whether this - * function succeeds or not. Ownership of the #wasi_instance_t and #wasm_trap_t - * are transferred to the caller. - * - * With a #wasi_instance_t you'll likely call either - * #wasmtime_linker_define_wasi or #wasi_instance_bind_import afterwards. - */ -WASI_API_EXTERN own wasi_instance_t* wasi_instance_new( - wasm_store_t* store, - const char* name, - own wasi_config_t* config, - own wasm_trap_t** trap -); - -/** - * \brief Extracts a matching item for the given import from a #wasi_instance_t. - * - * \param instance the WASI instance an export is extracted from - * \param import the desired import type that is being extracted, typically - * acquired from #wasm_module_imports. - * - * \return a #wasm_extern_t which can be used to satisfy the `import` - * requested, or `NULL` if the provided `instance` cannot satisfy `import`. - * - * This function does not take ownership of its arguments, and the lifetime of - * the #wasm_extern_t is tied to the #wasi_instance_t argument. - */ -WASI_API_EXTERN const wasm_extern_t* wasi_instance_bind_import( - const wasi_instance_t* instance, - const wasm_importtype_t* import -); - -#undef own - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // #ifdef WASI_H diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasm.h b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasm.h deleted file mode 100644 index 325e618b6..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasm.h +++ /dev/null @@ -1,723 +0,0 @@ -// WebAssembly C API - -#ifndef WASM_H -#define WASM_H - -#include -#include -#include -#include -#include - -#ifndef WASM_API_EXTERN -#ifdef _WIN32 -#define WASM_API_EXTERN __declspec(dllimport) -#else -#define WASM_API_EXTERN -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/////////////////////////////////////////////////////////////////////////////// -// Auxiliaries - -// Machine types - -inline void assertions(void) { - static_assert(sizeof(float) == sizeof(uint32_t), "incompatible float type"); - static_assert(sizeof(double) == sizeof(uint64_t), "incompatible double type"); - static_assert(sizeof(intptr_t) == sizeof(uint32_t) || - sizeof(intptr_t) == sizeof(uint64_t), - "incompatible pointer type"); -} - -typedef char byte_t; -typedef float float32_t; -typedef double float64_t; - - -// Ownership - -#define own - -// The qualifier `own` is used to indicate ownership of data in this API. -// It is intended to be interpreted similar to a `const` qualifier: -// -// - `own wasm_xxx_t*` owns the pointed-to data -// - `own wasm_xxx_t` distributes to all fields of a struct or union `xxx` -// - `own wasm_xxx_vec_t` owns the vector as well as its elements(!) -// - an `own` function parameter passes ownership from caller to callee -// - an `own` function result passes ownership from callee to caller -// - an exception are `own` pointer parameters named `out`, which are copy-back -// output parameters passing back ownership from callee to caller -// -// Own data is created by `wasm_xxx_new` functions and some others. -// It must be released with the corresponding `wasm_xxx_delete` function. -// -// Deleting a reference does not necessarily delete the underlying object, -// it merely indicates that this owner no longer uses it. -// -// For vectors, `const wasm_xxx_vec_t` is used informally to indicate that -// neither the vector nor its elements should be modified. -// TODO: introduce proper `wasm_xxx_const_vec_t`? - - -#define WASM_DECLARE_OWN(name) \ - typedef struct wasm_##name##_t wasm_##name##_t; \ - \ - WASM_API_EXTERN void wasm_##name##_delete(own wasm_##name##_t*); - - -// Vectors - -#define WASM_DECLARE_VEC(name, ptr_or_none) \ - typedef struct wasm_##name##_vec_t { \ - size_t size; \ - wasm_##name##_t ptr_or_none* data; \ - } wasm_##name##_vec_t; \ - \ - WASM_API_EXTERN void wasm_##name##_vec_new_empty(own wasm_##name##_vec_t* out); \ - WASM_API_EXTERN void wasm_##name##_vec_new_uninitialized( \ - own wasm_##name##_vec_t* out, size_t); \ - WASM_API_EXTERN void wasm_##name##_vec_new( \ - own wasm_##name##_vec_t* out, \ - size_t, own wasm_##name##_t ptr_or_none const[]); \ - WASM_API_EXTERN void wasm_##name##_vec_copy( \ - own wasm_##name##_vec_t* out, const wasm_##name##_vec_t*); \ - WASM_API_EXTERN void wasm_##name##_vec_delete(own wasm_##name##_vec_t*); - - -// Byte vectors - -typedef byte_t wasm_byte_t; -WASM_DECLARE_VEC(byte, ) - -typedef wasm_byte_vec_t wasm_name_t; - -#define wasm_name wasm_byte_vec -#define wasm_name_new wasm_byte_vec_new -#define wasm_name_new_empty wasm_byte_vec_new_empty -#define wasm_name_new_new_uninitialized wasm_byte_vec_new_uninitialized -#define wasm_name_copy wasm_byte_vec_copy -#define wasm_name_delete wasm_byte_vec_delete - -static inline void wasm_name_new_from_string( - own wasm_name_t* out, const char* s -) { - wasm_name_new(out, strlen(s), s); -} - -static inline void wasm_name_new_from_string_nt( - own wasm_name_t* out, const char* s -) { - wasm_name_new(out, strlen(s) + 1, s); -} - - -/////////////////////////////////////////////////////////////////////////////// -// Runtime Environment - -// Configuration - -WASM_DECLARE_OWN(config) - -WASM_API_EXTERN own wasm_config_t* wasm_config_new(void); - -// Embedders may provide custom functions for manipulating configs. - - -// Engine - -WASM_DECLARE_OWN(engine) - -WASM_API_EXTERN own wasm_engine_t* wasm_engine_new(void); -WASM_API_EXTERN own wasm_engine_t* wasm_engine_new_with_config(own wasm_config_t*); - - -// Store - -WASM_DECLARE_OWN(store) - -WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*); - - -/////////////////////////////////////////////////////////////////////////////// -// Type Representations - -// Type attributes - -typedef uint8_t wasm_mutability_t; -enum wasm_mutability_enum { - WASM_CONST, - WASM_VAR, -}; - -typedef struct wasm_limits_t { - uint32_t min; - uint32_t max; -} wasm_limits_t; - -static const uint32_t wasm_limits_max_default = 0xffffffff; - - -// Generic - -#define WASM_DECLARE_TYPE(name) \ - WASM_DECLARE_OWN(name) \ - WASM_DECLARE_VEC(name, *) \ - \ - WASM_API_EXTERN own wasm_##name##_t* wasm_##name##_copy(const wasm_##name##_t*); - - -// Value Types - -WASM_DECLARE_TYPE(valtype) - -typedef uint8_t wasm_valkind_t; -enum wasm_valkind_enum { - WASM_I32, - WASM_I64, - WASM_F32, - WASM_F64, - WASM_ANYREF = 128, - WASM_FUNCREF, -}; - -WASM_API_EXTERN own wasm_valtype_t* wasm_valtype_new(wasm_valkind_t); - -WASM_API_EXTERN wasm_valkind_t wasm_valtype_kind(const wasm_valtype_t*); - -static inline bool wasm_valkind_is_num(wasm_valkind_t k) { - return k < WASM_ANYREF; -} -static inline bool wasm_valkind_is_ref(wasm_valkind_t k) { - return k >= WASM_ANYREF; -} - -static inline bool wasm_valtype_is_num(const wasm_valtype_t* t) { - return wasm_valkind_is_num(wasm_valtype_kind(t)); -} -static inline bool wasm_valtype_is_ref(const wasm_valtype_t* t) { - return wasm_valkind_is_ref(wasm_valtype_kind(t)); -} - - -// Function Types - -WASM_DECLARE_TYPE(functype) - -WASM_API_EXTERN own wasm_functype_t* wasm_functype_new( - own wasm_valtype_vec_t* params, own wasm_valtype_vec_t* results); - -WASM_API_EXTERN const wasm_valtype_vec_t* wasm_functype_params(const wasm_functype_t*); -WASM_API_EXTERN const wasm_valtype_vec_t* wasm_functype_results(const wasm_functype_t*); - - -// Global Types - -WASM_DECLARE_TYPE(globaltype) - -WASM_API_EXTERN own wasm_globaltype_t* wasm_globaltype_new( - own wasm_valtype_t*, wasm_mutability_t); - -WASM_API_EXTERN const wasm_valtype_t* wasm_globaltype_content(const wasm_globaltype_t*); -WASM_API_EXTERN wasm_mutability_t wasm_globaltype_mutability(const wasm_globaltype_t*); - - -// Table Types - -WASM_DECLARE_TYPE(tabletype) - -WASM_API_EXTERN own wasm_tabletype_t* wasm_tabletype_new( - own wasm_valtype_t*, const wasm_limits_t*); - -WASM_API_EXTERN const wasm_valtype_t* wasm_tabletype_element(const wasm_tabletype_t*); -WASM_API_EXTERN const wasm_limits_t* wasm_tabletype_limits(const wasm_tabletype_t*); - - -// Memory Types - -WASM_DECLARE_TYPE(memorytype) - -WASM_API_EXTERN own wasm_memorytype_t* wasm_memorytype_new(const wasm_limits_t*); - -WASM_API_EXTERN const wasm_limits_t* wasm_memorytype_limits(const wasm_memorytype_t*); - - -// Extern Types - -WASM_DECLARE_TYPE(externtype) - -typedef uint8_t wasm_externkind_t; -enum wasm_externkind_enum { - WASM_EXTERN_FUNC, - WASM_EXTERN_GLOBAL, - WASM_EXTERN_TABLE, - WASM_EXTERN_MEMORY, -}; - -WASM_API_EXTERN wasm_externkind_t wasm_externtype_kind(const wasm_externtype_t*); - -WASM_API_EXTERN wasm_externtype_t* wasm_functype_as_externtype(wasm_functype_t*); -WASM_API_EXTERN wasm_externtype_t* wasm_globaltype_as_externtype(wasm_globaltype_t*); -WASM_API_EXTERN wasm_externtype_t* wasm_tabletype_as_externtype(wasm_tabletype_t*); -WASM_API_EXTERN wasm_externtype_t* wasm_memorytype_as_externtype(wasm_memorytype_t*); - -WASM_API_EXTERN wasm_functype_t* wasm_externtype_as_functype(wasm_externtype_t*); -WASM_API_EXTERN wasm_globaltype_t* wasm_externtype_as_globaltype(wasm_externtype_t*); -WASM_API_EXTERN wasm_tabletype_t* wasm_externtype_as_tabletype(wasm_externtype_t*); -WASM_API_EXTERN wasm_memorytype_t* wasm_externtype_as_memorytype(wasm_externtype_t*); - -WASM_API_EXTERN const wasm_externtype_t* wasm_functype_as_externtype_const(const wasm_functype_t*); -WASM_API_EXTERN const wasm_externtype_t* wasm_globaltype_as_externtype_const(const wasm_globaltype_t*); -WASM_API_EXTERN const wasm_externtype_t* wasm_tabletype_as_externtype_const(const wasm_tabletype_t*); -WASM_API_EXTERN const wasm_externtype_t* wasm_memorytype_as_externtype_const(const wasm_memorytype_t*); - -WASM_API_EXTERN const wasm_functype_t* wasm_externtype_as_functype_const(const wasm_externtype_t*); -WASM_API_EXTERN const wasm_globaltype_t* wasm_externtype_as_globaltype_const(const wasm_externtype_t*); -WASM_API_EXTERN const wasm_tabletype_t* wasm_externtype_as_tabletype_const(const wasm_externtype_t*); -WASM_API_EXTERN const wasm_memorytype_t* wasm_externtype_as_memorytype_const(const wasm_externtype_t*); - - -// Import Types - -WASM_DECLARE_TYPE(importtype) - -WASM_API_EXTERN own wasm_importtype_t* wasm_importtype_new( - own wasm_name_t* module, own wasm_name_t* name, own wasm_externtype_t*); - -WASM_API_EXTERN const wasm_name_t* wasm_importtype_module(const wasm_importtype_t*); -WASM_API_EXTERN const wasm_name_t* wasm_importtype_name(const wasm_importtype_t*); -WASM_API_EXTERN const wasm_externtype_t* wasm_importtype_type(const wasm_importtype_t*); - - -// Export Types - -WASM_DECLARE_TYPE(exporttype) - -WASM_API_EXTERN own wasm_exporttype_t* wasm_exporttype_new( - own wasm_name_t*, own wasm_externtype_t*); - -WASM_API_EXTERN const wasm_name_t* wasm_exporttype_name(const wasm_exporttype_t*); -WASM_API_EXTERN const wasm_externtype_t* wasm_exporttype_type(const wasm_exporttype_t*); - - -/////////////////////////////////////////////////////////////////////////////// -// Runtime Objects - -// Values - -struct wasm_ref_t; - -typedef struct wasm_val_t { - wasm_valkind_t kind; - union { - int32_t i32; - int64_t i64; - float32_t f32; - float64_t f64; - struct wasm_ref_t* ref; - } of; -} wasm_val_t; - -WASM_API_EXTERN void wasm_val_delete(own wasm_val_t* v); -WASM_API_EXTERN void wasm_val_copy(own wasm_val_t* out, const wasm_val_t*); - -WASM_DECLARE_VEC(val, ) - - -// References - -#define WASM_DECLARE_REF_BASE(name) \ - WASM_DECLARE_OWN(name) \ - \ - WASM_API_EXTERN own wasm_##name##_t* wasm_##name##_copy(const wasm_##name##_t*); \ - WASM_API_EXTERN bool wasm_##name##_same(const wasm_##name##_t*, const wasm_##name##_t*); \ - \ - WASM_API_EXTERN void* wasm_##name##_get_host_info(const wasm_##name##_t*); \ - WASM_API_EXTERN void wasm_##name##_set_host_info(wasm_##name##_t*, void*); \ - WASM_API_EXTERN void wasm_##name##_set_host_info_with_finalizer( \ - wasm_##name##_t*, void*, void (*)(void*)); - -#define WASM_DECLARE_REF(name) \ - WASM_DECLARE_REF_BASE(name) \ - \ - WASM_API_EXTERN wasm_ref_t* wasm_##name##_as_ref(wasm_##name##_t*); \ - WASM_API_EXTERN wasm_##name##_t* wasm_ref_as_##name(wasm_ref_t*); \ - WASM_API_EXTERN const wasm_ref_t* wasm_##name##_as_ref_const(const wasm_##name##_t*); \ - WASM_API_EXTERN const wasm_##name##_t* wasm_ref_as_##name##_const(const wasm_ref_t*); - -#define WASM_DECLARE_SHARABLE_REF(name) \ - WASM_DECLARE_REF(name) \ - WASM_DECLARE_OWN(shared_##name) \ - \ - WASM_API_EXTERN own wasm_shared_##name##_t* wasm_##name##_share(const wasm_##name##_t*); \ - WASM_API_EXTERN own wasm_##name##_t* wasm_##name##_obtain(wasm_store_t*, const wasm_shared_##name##_t*); - - -WASM_DECLARE_REF_BASE(ref) - - -// Frames - -WASM_DECLARE_OWN(frame) -WASM_DECLARE_VEC(frame, *) -WASM_API_EXTERN own wasm_frame_t* wasm_frame_copy(const wasm_frame_t*); - -WASM_API_EXTERN struct wasm_instance_t* wasm_frame_instance(const wasm_frame_t*); -WASM_API_EXTERN uint32_t wasm_frame_func_index(const wasm_frame_t*); -WASM_API_EXTERN size_t wasm_frame_func_offset(const wasm_frame_t*); -WASM_API_EXTERN size_t wasm_frame_module_offset(const wasm_frame_t*); - - -// Traps - -typedef wasm_name_t wasm_message_t; // null terminated - -WASM_DECLARE_REF(trap) - -WASM_API_EXTERN own wasm_trap_t* wasm_trap_new(wasm_store_t* store, const wasm_message_t*); - -WASM_API_EXTERN void wasm_trap_message(const wasm_trap_t*, own wasm_message_t* out); -WASM_API_EXTERN own wasm_frame_t* wasm_trap_origin(const wasm_trap_t*); -WASM_API_EXTERN void wasm_trap_trace(const wasm_trap_t*, own wasm_frame_vec_t* out); - - -// Foreign Objects - -WASM_DECLARE_REF(foreign) - -WASM_API_EXTERN own wasm_foreign_t* wasm_foreign_new(wasm_store_t*); - - -// Modules - -WASM_DECLARE_SHARABLE_REF(module) - -WASM_API_EXTERN own wasm_module_t* wasm_module_new( - wasm_store_t*, const wasm_byte_vec_t* binary); - -WASM_API_EXTERN bool wasm_module_validate(wasm_store_t*, const wasm_byte_vec_t* binary); - -WASM_API_EXTERN void wasm_module_imports(const wasm_module_t*, own wasm_importtype_vec_t* out); -WASM_API_EXTERN void wasm_module_exports(const wasm_module_t*, own wasm_exporttype_vec_t* out); - -WASM_API_EXTERN void wasm_module_serialize(const wasm_module_t*, own wasm_byte_vec_t* out); -WASM_API_EXTERN own wasm_module_t* wasm_module_deserialize(wasm_store_t*, const wasm_byte_vec_t*); - - -// Function Instances - -WASM_DECLARE_REF(func) - -typedef own wasm_trap_t* (*wasm_func_callback_t)( - const wasm_val_vec_t* args, own wasm_val_vec_t* results); -typedef own wasm_trap_t* (*wasm_func_callback_with_env_t)( - void* env, const wasm_val_vec_t* args, wasm_val_vec_t* results); - -WASM_API_EXTERN own wasm_func_t* wasm_func_new( - wasm_store_t*, const wasm_functype_t*, wasm_func_callback_t); -WASM_API_EXTERN own wasm_func_t* wasm_func_new_with_env( - wasm_store_t*, const wasm_functype_t* type, wasm_func_callback_with_env_t, - void* env, void (*finalizer)(void*)); - -WASM_API_EXTERN own wasm_functype_t* wasm_func_type(const wasm_func_t*); -WASM_API_EXTERN size_t wasm_func_param_arity(const wasm_func_t*); -WASM_API_EXTERN size_t wasm_func_result_arity(const wasm_func_t*); - -WASM_API_EXTERN own wasm_trap_t* wasm_func_call( - const wasm_func_t*, const wasm_val_vec_t* args, wasm_val_vec_t* results); - - -// Global Instances - -WASM_DECLARE_REF(global) - -WASM_API_EXTERN own wasm_global_t* wasm_global_new( - wasm_store_t*, const wasm_globaltype_t*, const wasm_val_t*); - -WASM_API_EXTERN own wasm_globaltype_t* wasm_global_type(const wasm_global_t*); - -WASM_API_EXTERN void wasm_global_get(const wasm_global_t*, own wasm_val_t* out); -WASM_API_EXTERN void wasm_global_set(wasm_global_t*, const wasm_val_t*); - - -// Table Instances - -WASM_DECLARE_REF(table) - -typedef uint32_t wasm_table_size_t; - -WASM_API_EXTERN own wasm_table_t* wasm_table_new( - wasm_store_t*, const wasm_tabletype_t*, wasm_ref_t* init); - -WASM_API_EXTERN own wasm_tabletype_t* wasm_table_type(const wasm_table_t*); - -WASM_API_EXTERN own wasm_ref_t* wasm_table_get(const wasm_table_t*, wasm_table_size_t index); -WASM_API_EXTERN bool wasm_table_set(wasm_table_t*, wasm_table_size_t index, wasm_ref_t*); - -WASM_API_EXTERN wasm_table_size_t wasm_table_size(const wasm_table_t*); -WASM_API_EXTERN bool wasm_table_grow(wasm_table_t*, wasm_table_size_t delta, wasm_ref_t* init); - - -// Memory Instances - -WASM_DECLARE_REF(memory) - -typedef uint32_t wasm_memory_pages_t; - -static const size_t MEMORY_PAGE_SIZE = 0x10000; - -WASM_API_EXTERN own wasm_memory_t* wasm_memory_new(wasm_store_t*, const wasm_memorytype_t*); - -WASM_API_EXTERN own wasm_memorytype_t* wasm_memory_type(const wasm_memory_t*); - -WASM_API_EXTERN byte_t* wasm_memory_data(wasm_memory_t*); -WASM_API_EXTERN size_t wasm_memory_data_size(const wasm_memory_t*); - -WASM_API_EXTERN wasm_memory_pages_t wasm_memory_size(const wasm_memory_t*); -WASM_API_EXTERN bool wasm_memory_grow(wasm_memory_t*, wasm_memory_pages_t delta); - - -// Externals - -WASM_DECLARE_REF(extern) -WASM_DECLARE_VEC(extern, *) - -WASM_API_EXTERN wasm_externkind_t wasm_extern_kind(const wasm_extern_t*); -WASM_API_EXTERN own wasm_externtype_t* wasm_extern_type(const wasm_extern_t*); - -WASM_API_EXTERN wasm_extern_t* wasm_func_as_extern(wasm_func_t*); -WASM_API_EXTERN wasm_extern_t* wasm_global_as_extern(wasm_global_t*); -WASM_API_EXTERN wasm_extern_t* wasm_table_as_extern(wasm_table_t*); -WASM_API_EXTERN wasm_extern_t* wasm_memory_as_extern(wasm_memory_t*); - -WASM_API_EXTERN wasm_func_t* wasm_extern_as_func(wasm_extern_t*); -WASM_API_EXTERN wasm_global_t* wasm_extern_as_global(wasm_extern_t*); -WASM_API_EXTERN wasm_table_t* wasm_extern_as_table(wasm_extern_t*); -WASM_API_EXTERN wasm_memory_t* wasm_extern_as_memory(wasm_extern_t*); - -WASM_API_EXTERN const wasm_extern_t* wasm_func_as_extern_const(const wasm_func_t*); -WASM_API_EXTERN const wasm_extern_t* wasm_global_as_extern_const(const wasm_global_t*); -WASM_API_EXTERN const wasm_extern_t* wasm_table_as_extern_const(const wasm_table_t*); -WASM_API_EXTERN const wasm_extern_t* wasm_memory_as_extern_const(const wasm_memory_t*); - -WASM_API_EXTERN const wasm_func_t* wasm_extern_as_func_const(const wasm_extern_t*); -WASM_API_EXTERN const wasm_global_t* wasm_extern_as_global_const(const wasm_extern_t*); -WASM_API_EXTERN const wasm_table_t* wasm_extern_as_table_const(const wasm_extern_t*); -WASM_API_EXTERN const wasm_memory_t* wasm_extern_as_memory_const(const wasm_extern_t*); - - -// Module Instances - -WASM_DECLARE_REF(instance) - -WASM_API_EXTERN own wasm_instance_t* wasm_instance_new( - wasm_store_t*, const wasm_module_t*, const wasm_extern_vec_t* imports, - own wasm_trap_t** -); - -WASM_API_EXTERN void wasm_instance_exports(const wasm_instance_t*, own wasm_extern_vec_t* out); - - -/////////////////////////////////////////////////////////////////////////////// -// Convenience - -// Vectors - -#define WASM_EMPTY_VEC {0, NULL} -#define WASM_ARRAY_VEC(array) {sizeof(array)/sizeof(*(array)), array} - - -// Value Type construction short-hands - -static inline own wasm_valtype_t* wasm_valtype_new_i32(void) { - return wasm_valtype_new(WASM_I32); -} -static inline own wasm_valtype_t* wasm_valtype_new_i64(void) { - return wasm_valtype_new(WASM_I64); -} -static inline own wasm_valtype_t* wasm_valtype_new_f32(void) { - return wasm_valtype_new(WASM_F32); -} -static inline own wasm_valtype_t* wasm_valtype_new_f64(void) { - return wasm_valtype_new(WASM_F64); -} - -static inline own wasm_valtype_t* wasm_valtype_new_anyref(void) { - return wasm_valtype_new(WASM_ANYREF); -} -static inline own wasm_valtype_t* wasm_valtype_new_funcref(void) { - return wasm_valtype_new(WASM_FUNCREF); -} - - -// Function Types construction short-hands - -static inline own wasm_functype_t* wasm_functype_new_0_0(void) { - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new_empty(¶ms); - wasm_valtype_vec_new_empty(&results); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_1_0( - own wasm_valtype_t* p -) { - wasm_valtype_t* ps[1] = {p}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 1, ps); - wasm_valtype_vec_new_empty(&results); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_2_0( - own wasm_valtype_t* p1, own wasm_valtype_t* p2 -) { - wasm_valtype_t* ps[2] = {p1, p2}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 2, ps); - wasm_valtype_vec_new_empty(&results); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_3_0( - own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* p3 -) { - wasm_valtype_t* ps[3] = {p1, p2, p3}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 3, ps); - wasm_valtype_vec_new_empty(&results); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_0_1( - own wasm_valtype_t* r -) { - wasm_valtype_t* rs[1] = {r}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new_empty(¶ms); - wasm_valtype_vec_new(&results, 1, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_1_1( - own wasm_valtype_t* p, own wasm_valtype_t* r -) { - wasm_valtype_t* ps[1] = {p}; - wasm_valtype_t* rs[1] = {r}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 1, ps); - wasm_valtype_vec_new(&results, 1, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_2_1( - own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* r -) { - wasm_valtype_t* ps[2] = {p1, p2}; - wasm_valtype_t* rs[1] = {r}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 2, ps); - wasm_valtype_vec_new(&results, 1, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_3_1( - own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* p3, - own wasm_valtype_t* r -) { - wasm_valtype_t* ps[3] = {p1, p2, p3}; - wasm_valtype_t* rs[1] = {r}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 3, ps); - wasm_valtype_vec_new(&results, 1, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_0_2( - own wasm_valtype_t* r1, own wasm_valtype_t* r2 -) { - wasm_valtype_t* rs[2] = {r1, r2}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new_empty(¶ms); - wasm_valtype_vec_new(&results, 2, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_1_2( - own wasm_valtype_t* p, own wasm_valtype_t* r1, own wasm_valtype_t* r2 -) { - wasm_valtype_t* ps[1] = {p}; - wasm_valtype_t* rs[2] = {r1, r2}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 1, ps); - wasm_valtype_vec_new(&results, 2, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_2_2( - own wasm_valtype_t* p1, own wasm_valtype_t* p2, - own wasm_valtype_t* r1, own wasm_valtype_t* r2 -) { - wasm_valtype_t* ps[2] = {p1, p2}; - wasm_valtype_t* rs[2] = {r1, r2}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 2, ps); - wasm_valtype_vec_new(&results, 2, rs); - return wasm_functype_new(¶ms, &results); -} - -static inline own wasm_functype_t* wasm_functype_new_3_2( - own wasm_valtype_t* p1, own wasm_valtype_t* p2, own wasm_valtype_t* p3, - own wasm_valtype_t* r1, own wasm_valtype_t* r2 -) { - wasm_valtype_t* ps[3] = {p1, p2, p3}; - wasm_valtype_t* rs[2] = {r1, r2}; - wasm_valtype_vec_t params, results; - wasm_valtype_vec_new(¶ms, 3, ps); - wasm_valtype_vec_new(&results, 2, rs); - return wasm_functype_new(¶ms, &results); -} - - -// Value construction short-hands - -static inline void wasm_val_init_ptr(own wasm_val_t* out, void* p) { -#if UINTPTR_MAX == UINT32_MAX - out->kind = WASM_I32; - out->of.i32 = (intptr_t)p; -#elif UINTPTR_MAX == UINT64_MAX - out->kind = WASM_I64; - out->of.i64 = (intptr_t)p; -#endif -} - -static inline void* wasm_val_ptr(const wasm_val_t* val) { -#if UINTPTR_MAX == UINT32_MAX - return (void*)(intptr_t)val->of.i32; -#elif UINTPTR_MAX == UINT64_MAX - return (void*)(intptr_t)val->of.i64; -#endif -} - -#define WASM_I32_VAL(i) {.kind = WASM_I32, .of = {.i32 = i}} -#define WASM_I64_VAL(i) {.kind = WASM_I64, .of = {.i64 = i}} -#define WASM_F32_VAL(z) {.kind = WASM_F32, .of = {.f32 = z}} -#define WASM_F64_VAL(z) {.kind = WASM_F64, .of = {.f64 = z}} -#define WASM_REF_VAL(r) {.kind = WASM_ANYREF, .of = {.ref = r}} -#define WASM_INIT_VAL {.kind = WASM_ANYREF, .of = {.ref = NULL}} - - -/////////////////////////////////////////////////////////////////////////////// - -#undef own - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // #ifdef WASM_H diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasmtime.h b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasmtime.h deleted file mode 100644 index f163f923b..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/include/wasmtime.h +++ /dev/null @@ -1,1300 +0,0 @@ -/** - * @file - * - * Wasmtime-specific extensions to the WebAssembly C API. - * - * This file contains all of the Wasmtime-specific functions which will not be - * present in other engines. The intention of this file is to augment the - * functionality provided in `wasm.h`. - */ - - -#ifndef WASMTIME_API_H -#define WASMTIME_API_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define own - -#define WASMTIME_DECLARE_OWN(name) \ - typedef struct wasmtime_##name##_t wasmtime_##name##_t; \ - \ - WASM_API_EXTERN void wasmtime_##name##_delete(own wasmtime_##name##_t*); - -/** - * \typedef wasmtime_error_t - * \brief Convenience alias for #wasmtime_error_t - * - * \struct wasmtime_error_t - * \brief Errors generated by Wasmtime. - * - * This opaque type represents an error that happened as part of one of the - * functions below. Errors primarily have an error message associated with them - * at this time, which you can acquire by calling #wasmtime_error_message. - * - * \fn void wasmtime_error_delete(own wasmtime_error_t *); - * \brief Deletes an error. - */ -WASMTIME_DECLARE_OWN(error) - -/** - * \brief Returns the string description of this error. - * - * This will "render" the error to a string and then return the string - * representation of the error to the caller. The `message` argument should be - * uninitialized before this function is called and the caller is responsible - * for deallocating it with #wasm_byte_vec_delete afterwards. - */ -WASM_API_EXTERN void wasmtime_error_message( - const wasmtime_error_t *error, - own wasm_name_t *message -); - -/** - * \brief Specifier for how Wasmtime will compile code, values are in - * #wasmtime_strategy_enum - */ -typedef uint8_t wasmtime_strategy_t; - -/** - * \brief Different ways that Wasmtime can compile WebAssembly - * - * The default value is #WASMTIME_STRATEGY_AUTO. - */ -enum wasmtime_strategy_enum { // Strategy - /// Wasmtime will automatically determine whether to use Cranelift or - /// Lightbeam, and currently it will always pick Cranelift. This default may - /// change over time though. - WASMTIME_STRATEGY_AUTO, - - /// Indicates that Cranelift will unconditionally use Cranelift to compile - /// WebAssembly code. - WASMTIME_STRATEGY_CRANELIFT, - - /// Indicates that Cranelift will unconditionally use Lightbeam to compile - /// WebAssembly code. Note that Lightbeam isn't always enabled at compile - /// time, and if that's the case an error will be returned. - WASMTIME_STRATEGY_LIGHTBEAM, -}; - -/** - * \brief Specifier of what optimization level to use for generated JIT code. - * - * See #wasmtime_opt_level_enum for possible values. - */ -typedef uint8_t wasmtime_opt_level_t; - -/** - * \brief Different ways Wasmtime can optimize generated code. - * - * The default value is #WASMTIME_OPT_LEVEL_SPEED. - */ -enum wasmtime_opt_level_enum { // OptLevel - /// Generated code will not be optimized at all. - WASMTIME_OPT_LEVEL_NONE, - /// Generated code will be optimized purely for speed. - WASMTIME_OPT_LEVEL_SPEED, - /// Generated code will be optimized, but some speed optimizations are - /// disabled if they cause the generated code to be significantly larger. - WASMTIME_OPT_LEVEL_SPEED_AND_SIZE, -}; - -/** - * \brief Different ways wasmtime can enable profiling JIT code. - * - * See #wasmtime_profiling_strategy_enum for possible values. - */ -typedef uint8_t wasmtime_profiling_strategy_t; - -/** - * \brief Different ways to profile JIT code. - * - * The default is #WASMTIME_PROFILING_STRATEGY_NONE. - */ -enum wasmtime_profiling_strategy_enum { // ProfilingStrategy - /// No profiling is enabled at runtime. - WASMTIME_PROFILING_STRATEGY_NONE, - /// Linux's "jitdump" support in `perf` is enabled and when Wasmtime is run - /// under `perf` necessary calls will be made to profile generated JIT code. - WASMTIME_PROFILING_STRATEGY_JITDUMP, - /// Support for VTune will be enabled and the VTune runtime will be informed, - /// at runtime, about JIT code. - /// - /// Note that this isn't always enabled at build time. - WASMTIME_PROFILING_STRATEGY_VTUNE, -}; - -#define WASMTIME_CONFIG_PROP(ret, name, ty) \ - WASM_API_EXTERN ret wasmtime_config_##name##_set(wasm_config_t*, ty); - -/** - * \brief Configures whether DWARF debug information is constructed at runtime - * to describe JIT code. - * - * This setting is `false` by default. When enabled it will attempt to inform - * native debuggers about DWARF debugging information for JIT code to more - * easily debug compiled WebAssembly via native debuggers. This can also - * sometimes improve the quality of output when profiling is enabled. - */ -WASMTIME_CONFIG_PROP(void, debug_info, bool) - -/** - * \brief Enables WebAssembly code to be interrupted. - * - * This setting is `false` by default. When enabled it will enable getting an - * interrupt handle via #wasmtime_interrupt_handle_new which can be used to - * interrupt currently-executing WebAssembly code. - */ -WASMTIME_CONFIG_PROP(void, interruptable, bool) - -/** - * \brief Whether or not fuel is enabled for generated code. - * - * This setting is `false` by default. When enabled it will enable fuel counting - * meaning that fuel will be consumed every time a wasm instruction is executed, - * and trap when reaching zero. - */ -WASMTIME_CONFIG_PROP(void, consume_fuel, bool) - -/** - * \brief Configures the maximum stack size, in bytes, that JIT code can use. - * - * This setting is 2MB by default. Configuring this setting will limit the - * amount of native stack space that JIT code can use while it is executing. If - * you're hitting stack overflow you can try making this setting larger, or if - * you'd like to limit wasm programs to less stack you can also configure this. - * - * Note that this setting is not interpreted with 100% precision. Additionally - * the amount of stack space that wasm takes is always relative to the first - * invocation of wasm on the stack, so recursive calls with host frames in the - * middle will all need to fit within this setting. - */ -WASMTIME_CONFIG_PROP(void, max_wasm_stack, size_t) - -/** - * \brief Configures whether the WebAssembly threading proposal is enabled. - * - * This setting is `false` by default. - * - * Note that threads are largely unimplemented in Wasmtime at this time. - */ -WASMTIME_CONFIG_PROP(void, wasm_threads, bool) - -/** - * \brief Configures whether the WebAssembly reference types proposal is - * enabled. - * - * This setting is `false` by default. - */ -WASMTIME_CONFIG_PROP(void, wasm_reference_types, bool) - -/** - * \brief Configures whether the WebAssembly SIMD proposal is - * enabled. - * - * This setting is `false` by default. - */ -WASMTIME_CONFIG_PROP(void, wasm_simd, bool) - -/** - * \brief Configures whether the WebAssembly bulk memory proposal is - * enabled. - * - * This setting is `false` by default. - */ -WASMTIME_CONFIG_PROP(void, wasm_bulk_memory, bool) - -/** - * \brief Configures whether the WebAssembly multi value proposal is - * enabled. - * - * This setting is `true` by default. - */ -WASMTIME_CONFIG_PROP(void, wasm_multi_value, bool) - -/** - * \brief Configures whether the WebAssembly module linking proposal is - * enabled. - * - * This setting is `false` by default. - */ -WASMTIME_CONFIG_PROP(void, wasm_module_linking, bool) - -/** - * \brief Configures how JIT code will be compiled. - * - * This setting is #WASMTIME_STRATEGY_AUTO by default. - * - * If the compilation strategy selected could not be enabled then an error is - * returned. - */ -WASMTIME_CONFIG_PROP(wasmtime_error_t*, strategy, wasmtime_strategy_t) - -/** - * \brief Configures whether Cranelift's debug verifier is enabled. - * - * This setting in `false` by default. - * - * When cranelift is used for compilation this enables expensive debug checks - * within Cranelift itself to verify it's correct. - */ -WASMTIME_CONFIG_PROP(void, cranelift_debug_verifier, bool) - -/** - * \brief Configures Cranelift's optimization level for JIT code. - * - * This setting in #WASMTIME_OPT_LEVEL_SPEED by default. - */ -WASMTIME_CONFIG_PROP(void, cranelift_opt_level, wasmtime_opt_level_t) - -/** - * \brief Configures the profiling strategy used for JIT code. - * - * This setting in #WASMTIME_PROFILING_STRATEGY_NONE by default. - */ -WASMTIME_CONFIG_PROP(wasmtime_error_t*, profiler, wasmtime_profiling_strategy_t) - -/** - * \brief Configures the maximum size for memory to be considered "static" - * - * For more information see the Rust documentation at - * https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Config.html#method.static_memory_maximum_size. - */ -WASMTIME_CONFIG_PROP(void, static_memory_maximum_size, uint64_t) - -/** - * \brief Configures the guard region size for "static" memory. - * - * For more information see the Rust documentation at - * https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Config.html#method.static_memory_guard_size. - */ -WASMTIME_CONFIG_PROP(void, static_memory_guard_size, uint64_t) - -/** - * \brief Configures the guard region size for "dynamic" memory. - * - * For more information see the Rust documentation at - * https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Config.html#method.dynamic_memory_guard_size. - */ -WASMTIME_CONFIG_PROP(void, dynamic_memory_guard_size, uint64_t) - -/** - * \brief Enables Wasmtime's cache and loads configuration from the specified - * path. - * - * By default the Wasmtime compilation cache is disabled. The configuration path - * here can be `NULL` to use the default settings, and otherwise the argument - * here must be a file on the filesystem with TOML configuration - - * https://bytecodealliance.github.io/wasmtime/cli-cache.html. - * - * An error is returned if the cache configuration could not be loaded or if the - * cache could not be enabled. - */ -WASM_API_EXTERN wasmtime_error_t* wasmtime_config_cache_config_load(wasm_config_t*, const char*); - -/** - * \brief Converts from the text format of WebAssembly to to the binary format. - * - * \param wat this it the input buffer with the WebAssembly Text Format inside of - * it. This will be parsed and converted to the binary format. - * \param ret if the conversion is successful, this byte vector is filled in with - * the WebAssembly binary format. - * - * \return a non-null error if parsing fails, or returns `NULL`. If parsing - * fails then `ret` isn't touched. - * - * This function does not take ownership of `wat`, and the caller is expected to - * deallocate the returned #wasmtime_error_t and #wasm_byte_vec_t. - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_wat2wasm( - const wasm_byte_vec_t *wat, - own wasm_byte_vec_t *ret -); - -/** - * \brief Perform garbage collection within the given store. - * - * Garbage collects `externref`s that are used within this store. Any - * `externref`s that are discovered to be unreachable by other code or objects - * will have their finalizers run. - * - * The `store` argument must not be NULL. - */ -WASM_API_EXTERN void wasmtime_store_gc(wasm_store_t* store); - -/** - * \typedef wasmtime_linker_t - * \brief Convenience alias for #wasmtime_linker_t - * - * \struct wasmtime_linker_t - * \brief Object used to conveniently link together and instantiate wasm - * modules. - * - * This type corresponds to the `wasmtime::Linker` type in Rust. This - * Wasmtime-specific extension is intended to make it easier to manage a set of - * modules that link together, or to make it easier to link WebAssembly modules - * to WASI. - * - * A #wasmtime_linker_t is a higher level way to instantiate a module than - * #wasm_instance_new since it works at the "string" level of imports rather - * than requiring 1:1 mappings. - * - * \fn void wasmtime_linker_delete(own wasmtime_linker_t *); - * \brief Deletes a linker. - */ -WASMTIME_DECLARE_OWN(linker) - -/** - * \brief Creates a new linker which will link together objects in the specified - * store. - * - * This function does not take ownership of the store argument, and the caller - * is expected to delete the returned linker. - */ -WASM_API_EXTERN own wasmtime_linker_t* wasmtime_linker_new(wasm_store_t* store); - -/** - * \brief Configures whether this linker allows later definitions to shadow - * previous definitions. - * - * By default this setting is `false`. - */ -WASM_API_EXTERN void wasmtime_linker_allow_shadowing(wasmtime_linker_t* linker, bool allow_shadowing); - -/** - * \brief Defines a new item in this linker. - * - * \param linker the linker the name is being defined in. - * \param module the module name the item is defined under. - * \param name the field name the item is defined under - * \param item the item that is being defined in this linker. - * - * \return On success `NULL` is returned, otherwise an error is returned which - * describes why the definition failed. - * - * For more information about name resolution consult the [Rust - * documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Linker.html#name-resolution). - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_define( - wasmtime_linker_t *linker, - const wasm_name_t *module, - const wasm_name_t *name, - const wasm_extern_t *item -); - -/** - * \brief Defines a WASI instance in this linker. - * - * \param linker the linker the name is being defined in. - * \param instance a previously-created WASI instance. - * - * \return On success `NULL` is returned, otherwise an error is returned which - * describes why the definition failed. - * - * For more information about name resolution consult the [Rust - * documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Linker.html#name-resolution). - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_define_wasi( - wasmtime_linker_t *linker, - const wasi_instance_t *instance -); - -/** - * \brief Defines an instance under the specified name in this linker. - * - * \param linker the linker the name is being defined in. - * \param name the module name to define `instance` under. - * \param instance a previously-created instance. - * - * \return On success `NULL` is returned, otherwise an error is returned which - * describes why the definition failed. - * - * This function will take all of the exports of the `instance` provided and - * defined them under a module called `name` with a field name as the export's - * own name. - * - * For more information about name resolution consult the [Rust - * documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Linker.html#name-resolution). - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_define_instance( - wasmtime_linker_t *linker, - const wasm_name_t *name, - const wasm_instance_t *instance -); - -/** - * \brief Instantiates a #wasm_module_t with the items defined in this linker. - * - * \param linker the linker used to instantiate the provided module. - * \param module the module that is being instantiated. - * \param instance the returned instance, if successful. - * \param trap a trap returned, if the start function traps. - * - * \return One of three things can happen as a result of this function. First - * the module could be successfully instantiated and returned through - * `instance`, meaning the return value and `trap` are both set to `NULL`. - * Second the start function may trap, meaning the return value and `instance` - * are set to `NULL` and `trap` describes the trap that happens. Finally - * instantiation may fail for another reason, in which case an error is returned - * and `trap` and `instance` are set to `NULL`. - * - * This function will attempt to satisfy all of the imports of the `module` - * provided with items previously defined in this linker. If any name isn't - * defined in the linker than an error is returned. (or if the previously - * defined item is of the wrong type). - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_instantiate( - const wasmtime_linker_t *linker, - const wasm_module_t *module, - own wasm_instance_t **instance, - own wasm_trap_t **trap -); - -/** - * \brief Defines automatic instantiations of a #wasm_module_t in this linker. - * - * \param linker the linker the module is being added to - * \param name the name of the module within the linker - * \param module the module that's being instantiated - * - * \return An error if the module could not be instantiated or added or `NULL` - * on success. - * - * This function automatically handles [Commands and - * Reactors](https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md#current-unstable-abi) - * instantiation and initialization. - * - * For more information see the [Rust - * documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Linker.html#method.module). - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_module( - const wasmtime_linker_t *linker, - const wasm_name_t *name, - const wasm_module_t *module -); - -/** - * \brief Acquires the "default export" of the named module in this linker. - * - * \param linker the linker to load from - * \param name the name of the module to get the default export for - * \param func where to store the extracted default function. - * - * \return An error is returned if the default export could not be found, or - * `NULL` is returned and `func` is filled in otherwise. - * - * For more information see the [Rust - * documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Linker.html#method.get_default). - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_get_default( - const wasmtime_linker_t *linker, - const wasm_name_t *name, - own wasm_func_t **func -); - -/** - * \brief Loads an item by name from this linker. - * - * \param linker the linker to load from - * \param module the name of the module to get - * \param name the name of the field to get - * \param item where to store the extracted item - * - * \return An error is returned if the item isn't defined or has more than one - * definition, or `NULL` is returned and `item` is filled in otherwise. - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_linker_get_one_by_name( - const wasmtime_linker_t *linker, - const wasm_name_t *module, - const wasm_name_t *name, - own wasm_extern_t **item -); - -/** - * \brief Structure used to learn about the caller of a host-defined function. - * - * This structure is the first argument of #wasmtime_func_callback_t and - * wasmtime_func_callback_with_env_t. The main purpose of this structure is for - * building a WASI-like API which can inspect the memory of the caller, - * regardless of the caller. - * - * This is intended to be a temporary API extension until interface types have - * become more prevalent. This is not intended to be supported until the end of - * time, but it will be supported so long as WASI requires it. - */ -typedef struct wasmtime_caller_t wasmtime_caller_t; - -/** - * \brief Callback signature for #wasmtime_func_new. - * - * This function is the same as #wasm_func_callback_t except that its first - * argument is a #wasmtime_caller_t which allows learning information about the - * caller. - */ -typedef own wasm_trap_t* (*wasmtime_func_callback_t)(const wasmtime_caller_t* caller, const wasm_val_vec_t *args, wasm_val_vec_t *results); - -/** - * \brief Callback signature for #wasmtime_func_new_with_env. - * - * This function is the same as #wasm_func_callback_with_env_t except that its - * first argument is a #wasmtime_caller_t which allows learning information - * about the caller. - */ -typedef own wasm_trap_t* (*wasmtime_func_callback_with_env_t)(const wasmtime_caller_t* caller, void* env, const wasm_val_vec_t *args, wasm_val_vec_t *results); - -/** - * \brief Creates a new host-defined function. - * - * This function is the same as #wasm_func_new, except the callback has the type - * signature #wasmtime_func_callback_t which gives a #wasmtime_caller_t as its - * first argument. - */ -WASM_API_EXTERN own wasm_func_t* wasmtime_func_new(wasm_store_t*, const wasm_functype_t*, wasmtime_func_callback_t callback); - -/** - * \brief Creates a new host-defined function. - * - * This function is the same as #wasm_func_new_with_env, except the callback - * has the type signature #wasmtime_func_callback_with_env_t which gives a - * #wasmtime_caller_t as its first argument. - */ -WASM_API_EXTERN own wasm_func_t* wasmtime_func_new_with_env( - wasm_store_t* store, - const wasm_functype_t* type, - wasmtime_func_callback_with_env_t callback, - void* env, - void (*finalizer)(void*) -); - -/** - * \brief Creates a new `funcref` value referencing `func`. - * - * Create a `funcref` value that references `func` and writes it to `funcrefp`. - * - * Gives ownership fo the `funcref` value written to `funcrefp`. - * - * Both `func` and `funcrefp` must not be NULL. - */ -WASM_API_EXTERN void wasmtime_func_as_funcref(const wasm_func_t* func, wasm_val_t* funcrefp); - -/** - * \brief Get the `wasm_func_t*` referenced by the given `funcref` value. - * - * Gets an owning handle to the `wasm_func_t*` that the given `funcref` value is - * referencing. Returns NULL if the value is not a `funcref`, or if the value is - * a null function reference. - * - * The `val` pointer must not be NULL. - */ -WASM_API_EXTERN own wasm_func_t* wasmtime_funcref_as_func(const wasm_val_t* val); - -/** - * \brief Loads a #wasm_extern_t from the caller's context - * - * This function will attempt to look up the export named `name` on the caller - * instance provided. If it is found then the #wasm_extern_t for that is - * returned, otherwise `NULL` is returned. - * - * Note that this only works for exported memories right now for WASI - * compatibility. - */ -WASM_API_EXTERN own wasm_extern_t* wasmtime_caller_export_get(const wasmtime_caller_t* caller, const wasm_name_t* name); - -/** - * \typedef wasmtime_interrupt_handle_t - * \brief Convenience alias for #wasmtime_interrupt_handle_t - * - * \struct wasmtime_interrupt_handle_t - * \brief A handle used to interrupt executing WebAssembly code. - * - * This structure is an opaque handle that represents a handle to a store. This - * handle can be used to remotely (from another thread) interrupt currently - * executing WebAssembly code. - * - * This structure is safe to share from multiple threads. - * - * \fn void wasmtime_interrupt_handle_delete(own wasmtime_interrupt_handle_t *); - * \brief Deletes an interrupt handle. - */ -WASMTIME_DECLARE_OWN(interrupt_handle) - -/** - * \brief Creates a new interrupt handle to interrupt executing WebAssembly from - * the provided store. - * - * There are a number of caveats about how interrupt is handled in Wasmtime. For - * more information see the [Rust - * documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Store.html#method.interrupt_handle). - * - * This function returns `NULL` if the store's configuration does not have - * interrupts enabled. See #wasmtime_config_interruptable_set. - */ -WASM_API_EXTERN own wasmtime_interrupt_handle_t *wasmtime_interrupt_handle_new(wasm_store_t *store); - -/** - * \brief Adds fuel to this Store for wasm to consume while executing. - * - * For this method to work fuel consumption must be enabled via - * #wasmtime_config_consume_fuel_set. By default a Store starts with 0 fuel - * for wasm to execute with (meaning it will immediately trap). - * This function must be called for the store to have - * some fuel to allow WebAssembly to execute. - * - * Note that at this time when fuel is entirely consumed it will cause - * wasm to trap. More usages of fuel are planned for the future. - * - * If fuel is not enabled within this store then an error is returned. If fuel - * is successfully added then NULL is returned. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_store_add_fuel(wasm_store_t *store, uint64_t fuel); - -/** - * \brief Returns the amount of fuel consumed by this store's execution so far. - * - * If fuel consumption is not enabled via #wasmtime_config_consume_fuel_set - * then this function will return false. Otherwise true is returned and the - * fuel parameter is filled in with fuel consuemd so far. - * - * Also note that fuel, if enabled, must be originally configured via - * #wasmtime_store_add_fuel. - */ -WASM_API_EXTERN bool wasmtime_store_fuel_consumed(wasm_store_t *store, uint64_t *fuel); - -/** - * \brief Requests that WebAssembly code running in the store attached to this - * interrupt handle is interrupted. - * - * For more information about interrupts see #wasmtime_interrupt_handle_new. - * - * Note that this is safe to call from any thread. - */ -WASM_API_EXTERN void wasmtime_interrupt_handle_interrupt(wasmtime_interrupt_handle_t *handle); - -/** - * \brief Attempts to extract a WASI-specific exit status from this trap. - * - * Returns `true` if the trap is a WASI "exit" trap and has a return status. If - * `true` is returned then the exit status is returned through the `status` - * pointer. If `false` is returned then this is not a wasi exit trap. - */ -WASM_API_EXTERN bool wasmtime_trap_exit_status(const wasm_trap_t*, int *status); - -/** - * \brief Returns a human-readable name for this frame's function. - * - * This function will attempt to load a human-readable name for function this - * frame points to. This function may return `NULL`. - * - * The lifetime of the returned name is the same as the #wasm_frame_t itself. - */ -WASM_API_EXTERN const wasm_name_t *wasmtime_frame_func_name(const wasm_frame_t*); - -/** - * \brief Returns a human-readable name for this frame's module. - * - * This function will attempt to load a human-readable name for module this - * frame points to. This function may return `NULL`. - * - * The lifetime of the returned name is the same as the #wasm_frame_t itself. - */ -WASM_API_EXTERN const wasm_name_t *wasmtime_frame_module_name(const wasm_frame_t*); - -/** - * \brief Call a WebAssembly function. - * - * This function is similar to #wasm_func_call, but with a few tweaks: - * - * * An error *and* a trap can be returned - * * Errors are returned if `args` have the wrong types, if the args/results - * arrays have the wrong lengths, or if values come from the wrong store. - * - * There are three possible return states from this function: - * - * 1. The returned error is non-null. This means `results` - * wasn't written to and `trap` will have `NULL` written to it. This state - * means that programmer error happened when calling the function (e.g. the - * size of the args/results were wrong) - * 2. The trap pointer is filled in. This means the returned error is `NULL` and - * `results` was not written to. This state means that the function was - * executing but hit a wasm trap while executing. - * 3. The error and trap returned are both `NULL` and `results` are written to. - * This means that the function call worked and the specified results were - * produced. - * - * The `trap` pointer cannot be `NULL`. The `args` and `results` pointers may be - * `NULL` if the corresponding length is zero. - * - * Does not take ownership of `wasm_val_t` arguments. Gives ownership of - * `wasm_val_t` results. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_func_call( - wasm_func_t *func, - const wasm_val_vec_t *args, - wasm_val_vec_t *results, - own wasm_trap_t **trap -); - -/** - * \brief Creates a new global value. - * - * Similar to #wasm_global_new, but with a few tweaks: - * - * * An error is returned instead of #wasm_global_t, which is taken as an - * out-parameter - * * An error happens when the `type` specified does not match the type of the - * value `val`, or if it comes from a different store than `store`. - * - * This function does not take ownership of any of its arguments but returned - * values are owned by the caller. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_global_new( - wasm_store_t *store, - const wasm_globaltype_t *type, - const wasm_val_t *val, - own wasm_global_t **ret -); - -/** - * \brief Sets a global to a new value. - * - * This function is the same as #wasm_global_set, except in the case of an error - * a #wasmtime_error_t is returned. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_global_set( - wasm_global_t *global, - const wasm_val_t *val -); - -/** - * \brief Wasmtime-specific function to instantiate a module. - * - * This function is similar to #wasm_instance_new, but with a few tweaks: - * - * * An error message can be returned from this function. - * * The `trap` pointer is required to not be NULL. - * - * The states of return values from this function are similar to - * #wasmtime_func_call where an error can be returned meaning something like a - * link error in this context. A trap can be returned (meaning no error or - * instance is returned), or an instance can be returned (meaning no error or - * trap is returned). - * - * This function does not take ownership of any of its arguments, but all return - * values are owned by the caller. - * - * See #wasm_instance_new for information about how to fill in the `imports` - * array. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_instance_new( - wasm_store_t *store, - const wasm_module_t *module, - const wasm_extern_vec_t* imports, - own wasm_instance_t **instance, - own wasm_trap_t **trap -); - -/** - * \brief Wasmtime-specific function to compile a module. - * - * This function will compile a WebAssembly binary into an owned #wasm_module_t. - * This performs the same as #wasm_module_new except that it returns a - * #wasmtime_error_t type to get richer error information. - * - * On success the returned #wasmtime_error_t is `NULL` and the `ret` pointer is - * filled in with a #wasm_module_t. On failure the #wasmtime_error_t is - * non-`NULL` and the `ret` pointer is unmodified. - * - * This function does not take ownership of any of its arguments, but the - * returned error and module are owned by the caller. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_module_new( - wasm_engine_t *engine, - const wasm_byte_vec_t *binary, - own wasm_module_t **ret -); - -/** - * \brief Wasmtime-specific function to validate a module. - * - * This function will validate the provided byte sequence to determine if it is - * a valid WebAssembly binary. This function performs the same as - * #wasm_module_validate except that it returns a #wasmtime_error_t which - * contains an error message if validation fails. - * - * This function does not take ownership of its arguments but the caller is - * expected to deallocate the returned error if it is non-`NULL`. - * - * If the binary validates then `NULL` is returned, otherwise the error returned - * describes why the binary did not validate. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_module_validate( - wasm_store_t *store, - const wasm_byte_vec_t *binary -); - - -/** - * \brief Creates a new host-defined wasm table. - * - * This function is the same as #wasm_table_new except that it's specialized for - * funcref tables by taking a `wasm_func_t` initialization value. Additionally - * it returns errors via #wasmtime_error_t. - * - * This function does not take ownership of any of its parameters, but yields - * ownership of returned values (the table and error). - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_funcref_table_new( - wasm_store_t *store, - const wasm_tabletype_t *element_ty, - wasm_func_t *init, - own wasm_table_t **table -); - -/** - * \brief Gets a value in a table. - * - * This function is the same as #wasm_table_get except that it's specialized for - * funcref tables by returning a `wasm_func_t` value. Additionally a `bool` - * return value indicates whether the `index` provided was in bounds. - * - * This function does not take ownership of any of its parameters, but yields - * ownership of returned #wasm_func_t. - */ -WASM_API_EXTERN bool wasmtime_funcref_table_get( - const wasm_table_t *table, - wasm_table_size_t index, - own wasm_func_t **func -); - -/** - * \brief Sets a value in a table. - * - * This function is similar to #wasm_table_set, but has a few differences: - * - * * An error is returned through #wasmtime_error_t describing erroneous - * situations. - * * The value being set is specialized to #wasm_func_t. - * - * This function does not take ownership of any of its parameters, but yields - * ownership of returned #wasmtime_error_t. - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_funcref_table_set( - wasm_table_t *table, - wasm_table_size_t index, - const wasm_func_t *value -); - -/** - * \brief Grows a table. - * - * This function is similar to #wasm_table_grow, but has a few differences: - * - * * An error is returned through #wasmtime_error_t describing erroneous - * situations. - * * The initialization value is specialized to #wasm_func_t. - * * The previous size of the table is returned through `prev_size`. - * - * This function does not take ownership of any of its parameters, but yields - * ownership of returned #wasmtime_error_t. - */ -WASM_API_EXTERN wasmtime_error_t *wasmtime_funcref_table_grow( - wasm_table_t *table, - wasm_table_size_t delta, - const wasm_func_t *init, - wasm_table_size_t *prev_size -); - -/** - * \brief Create a new `externref` value. - * - * Creates a new `externref` value wrapping the provided data, and writes it to - * `valp`. - * - * This function does not take an associated finalizer to clean up the data when - * the reference is reclaimed. If you need a finalizer to clean up the data, - * then use #wasmtime_externref_new_with_finalizer. - * - * Gives ownership of the newly created `externref` value. - */ -WASM_API_EXTERN void wasmtime_externref_new(own void *data, wasm_val_t *valp); - -/** - * \brief A finalizer for an `externref`'s wrapped data. - * - * A finalizer callback to clean up an `externref`'s wrapped data after the - * `externref` has been reclaimed. This is an opportunity to run destructors, - * free dynamically allocated memory, close file handles, etc. - */ -typedef void (*wasmtime_externref_finalizer_t)(void*); - -/** - * \brief Create a new `externref` value with a finalizer. - * - * Creates a new `externref` value wrapping the provided data, and writes it to - * `valp`. - * - * When the reference is reclaimed, the wrapped data is cleaned up with the - * provided finalizer. If you do not need to clean up the wrapped data, then use - * #wasmtime_externref_new. - * - * Gives ownership of the newly created `externref` value. - */ -WASM_API_EXTERN void wasmtime_externref_new_with_finalizer( - own void *data, - wasmtime_externref_finalizer_t finalizer, - wasm_val_t *valp -); - -/** - * \brief Get an `externref`'s wrapped data - * - * If the given value is a reference to a non-null `externref`, writes the - * wrapped data that was passed into #wasmtime_externref_new or - * #wasmtime_externref_new_with_finalizer when creating the given `externref` to - * `datap`, and returns `true`. - * - * If the value is a reference to a null `externref`, writes `NULL` to `datap` - * and returns `true`. - * - * If the given value is not an `externref`, returns `false` and leaves `datap` - * unmodified. - * - * Does not take ownership of `val`. Does not give up ownership of the `void*` - * data written to `datap`. - * - * Both `val` and `datap` must not be `NULL`. - */ -WASM_API_EXTERN bool wasmtime_externref_data(wasm_val_t* val, void** datap); - -/** - * \brief This function serializes compiled module artifacts - * as blob data. - * - * \param module the module - * \param ret if the conversion is successful, this byte vector is filled in with - * the serialized compiled module. - * - * \return a non-null error if parsing fails, or returns `NULL`. If parsing - * fails then `ret` isn't touched. - * - * This function does not take ownership of `module`, and the caller is - * expected to deallocate the returned #wasmtime_error_t and #wasm_byte_vec_t. - */ -WASM_API_EXTERN own wasmtime_error_t* wasmtime_module_serialize( - wasm_module_t* module, - own wasm_byte_vec_t *ret -); - -/** - * \brief Build a module from serialized data. - * - * This function does not take ownership of any of its arguments, but the - * returned error and module are owned by the caller. - * - * This function is not safe to receive arbitrary user input. See the Rust - * documentation for more information on what inputs are safe to pass in here - * (e.g. only that of #wasmtime_module_serialize) - */ -WASM_API_EXTERN own wasmtime_error_t *wasmtime_module_deserialize( - wasm_engine_t *engine, - const wasm_byte_vec_t *serialized, - own wasm_module_t **ret -); - -/** - * \struct wasm_instancetype_t - * \brief An opaque object representing the type of a function. - * - * \typedef wasm_instancetype_t - * \brief Convenience alias for #wasm_instancetype_t - * - * \struct wasm_instancetype_vec_t - * \brief A list of #wasm_instancetype_t values. - * - * \var wasm_instancetype_vec_t::size - * \brief Length of this vector. - * - * \var wasm_instancetype_vec_t::data - * \brief Pointer to the base of this vector - * - * \typedef wasm_instancetype_vec_t - * \brief Convenience alias for #wasm_instancetype_vec_t - * - * \fn void wasm_instancetype_delete(own wasm_instancetype_t *); - * \brief Deletes a type. - * - * \fn void wasm_instancetype_vec_new_empty(own wasm_instancetype_vec_t *out); - * \brief Creates an empty vector. - * - * See #wasm_byte_vec_new_empty for more information. - * - * \fn void wasm_instancetype_vec_new_uninitialized(own wasm_instancetype_vec_t *out, size_t); - * \brief Creates a vector with the given capacity. - * - * See #wasm_byte_vec_new_uninitialized for more information. - * - * \fn void wasm_instancetype_vec_new(own wasm_instancetype_vec_t *out, size_t, own wasm_instancetype_t *const[]); - * \brief Creates a vector with the provided contents. - * - * See #wasm_byte_vec_new for more information. - * - * \fn void wasm_instancetype_vec_copy(own wasm_instancetype_vec_t *out, const wasm_instancetype_vec_t *) - * \brief Copies one vector to another - * - * See #wasm_byte_vec_copy for more information. - * - * \fn void wasm_instancetype_vec_delete(own wasm_instancetype_vec_t *out) - * \brief Deallocates memory for a vector. - * - * See #wasm_byte_vec_delete for more information. - * - * \fn own wasm_instancetype_t* wasm_instancetype_copy(const wasm_instancetype_t *) - * \brief Creates a new value which matches the provided one. - * - * The caller is responsible for deleting the returned value. - */ -WASM_DECLARE_TYPE(instancetype) - -/** - * \brief Returns the list of exports that this instance type provides. - * - * This function does not take ownership of the provided instance type but - * ownership of `out` is passed to the caller. Note that `out` is treated as - * uninitialized when passed to this function. - */ -WASM_API_EXTERN void wasm_instancetype_exports(const wasm_instancetype_t*, own wasm_exporttype_vec_t* out); - -/** - * \brief Converts a #wasm_instancetype_t to a #wasm_externtype_t - * - * The returned value is owned by the #wasm_instancetype_t argument and should not - * be deleted. - */ -WASM_API_EXTERN wasm_externtype_t* wasm_instancetype_as_externtype(wasm_instancetype_t*); - -/** - * \brief Attempts to convert a #wasm_externtype_t to a #wasm_instancetype_t - * - * The returned value is owned by the #wasm_instancetype_t argument and should not - * be deleted. Returns `NULL` if the provided argument is not a - * #wasm_instancetype_t. - */ -WASM_API_EXTERN wasm_instancetype_t* wasm_externtype_as_instancetype(wasm_externtype_t*); - -/** - * \brief Converts a #wasm_instancetype_t to a #wasm_externtype_t - * - * The returned value is owned by the #wasm_instancetype_t argument and should not - * be deleted. - */ -WASM_API_EXTERN const wasm_externtype_t* wasm_instancetype_as_externtype_const(const wasm_instancetype_t*); - -/** - * \brief Attempts to convert a #wasm_externtype_t to a #wasm_instancetype_t - * - * The returned value is owned by the #wasm_instancetype_t argument and should not - * be deleted. Returns `NULL` if the provided argument is not a - * #wasm_instancetype_t. - */ -WASM_API_EXTERN const wasm_instancetype_t* wasm_externtype_as_instancetype_const(const wasm_externtype_t*); - -/** - * \struct wasm_moduletype_t - * \brief An opaque object representing the type of a function. - * - * \typedef wasm_moduletype_t - * \brief Convenience alias for #wasm_moduletype_t - * - * \struct wasm_moduletype_vec_t - * \brief A list of #wasm_moduletype_t values. - * - * \var wasm_moduletype_vec_t::size - * \brief Length of this vector. - * - * \var wasm_moduletype_vec_t::data - * \brief Pointer to the base of this vector - * - * \typedef wasm_moduletype_vec_t - * \brief Convenience alias for #wasm_moduletype_vec_t - * - * \fn void wasm_moduletype_delete(own wasm_moduletype_t *); - * \brief Deletes a type. - * - * \fn void wasm_moduletype_vec_new_empty(own wasm_moduletype_vec_t *out); - * \brief Creates an empty vector. - * - * See #wasm_byte_vec_new_empty for more information. - * - * \fn void wasm_moduletype_vec_new_uninitialized(own wasm_moduletype_vec_t *out, size_t); - * \brief Creates a vector with the given capacity. - * - * See #wasm_byte_vec_new_uninitialized for more information. - * - * \fn void wasm_moduletype_vec_new(own wasm_moduletype_vec_t *out, size_t, own wasm_moduletype_t *const[]); - * \brief Creates a vector with the provided contents. - * - * See #wasm_byte_vec_new for more information. - * - * \fn void wasm_moduletype_vec_copy(own wasm_moduletype_vec_t *out, const wasm_moduletype_vec_t *) - * \brief Copies one vector to another - * - * See #wasm_byte_vec_copy for more information. - * - * \fn void wasm_moduletype_vec_delete(own wasm_moduletype_vec_t *out) - * \brief Deallocates memory for a vector. - * - * See #wasm_byte_vec_delete for more information. - * - * \fn own wasm_moduletype_t* wasm_moduletype_copy(const wasm_moduletype_t *) - * \brief Creates a new value which matches the provided one. - * - * The caller is responsible for deleting the returned value. - */ -WASM_DECLARE_TYPE(moduletype) - -/** - * \brief Returns the list of imports that this module type requires. - * - * This function does not take ownership of the provided module type but - * ownership of `out` is passed to the caller. Note that `out` is treated as - * uninitialized when passed to this function. - */ -WASM_API_EXTERN void wasm_moduletype_imports(const wasm_moduletype_t*, own wasm_importtype_vec_t* out); - -/** - * \brief Returns the list of exports that this module type provides. - * - * This function does not take ownership of the provided module type but - * ownership of `out` is passed to the caller. Note that `out` is treated as - * uninitialized when passed to this function. - */ -WASM_API_EXTERN void wasm_moduletype_exports(const wasm_moduletype_t*, own wasm_exporttype_vec_t* out); - -/** - * \brief Converts a #wasm_moduletype_t to a #wasm_externtype_t - * - * The returned value is owned by the #wasm_moduletype_t argument and should not - * be deleted. - */ -WASM_API_EXTERN wasm_externtype_t* wasm_moduletype_as_externtype(wasm_moduletype_t*); - -/** - * \brief Attempts to convert a #wasm_externtype_t to a #wasm_moduletype_t - * - * The returned value is owned by the #wasm_moduletype_t argument and should not - * be deleted. Returns `NULL` if the provided argument is not a - * #wasm_moduletype_t. - */ -WASM_API_EXTERN wasm_moduletype_t* wasm_externtype_as_moduletype(wasm_externtype_t*); - -/** - * \brief Converts a #wasm_moduletype_t to a #wasm_externtype_t - * - * The returned value is owned by the #wasm_moduletype_t argument and should not - * be deleted. - */ -WASM_API_EXTERN const wasm_externtype_t* wasm_moduletype_as_externtype_const(const wasm_moduletype_t*); - -/** - * \brief Attempts to convert a #wasm_externtype_t to a #wasm_moduletype_t - * - * The returned value is owned by the #wasm_moduletype_t argument and should not - * be deleted. Returns `NULL` if the provided argument is not a - * #wasm_moduletype_t. - */ -WASM_API_EXTERN const wasm_moduletype_t* wasm_externtype_as_moduletype_const(const wasm_externtype_t*); - -/** - * \brief Converts a #wasm_module_t to #wasm_extern_t. - * - * The returned #wasm_extern_t is owned by the #wasm_module_t argument. Callers - * should not delete the returned value, and it only lives as long as the - * #wasm_module_t argument. - */ -WASM_API_EXTERN wasm_extern_t* wasm_module_as_extern(wasm_module_t*); - -/** - * \brief Converts a #wasm_extern_t to #wasm_module_t. - * - * The returned #wasm_module_t is owned by the #wasm_extern_t argument. Callers - * should not delete the returned value, and it only lives as long as the - * #wasm_extern_t argument. - * - * If the #wasm_extern_t argument isn't a #wasm_module_t then `NULL` is returned. - */ -WASM_API_EXTERN wasm_module_t* wasm_extern_as_module(wasm_extern_t*); - -/** - * \brief Converts a #wasm_extern_t to #wasm_instance_t. - * - * The returned #wasm_instance_t is owned by the #wasm_extern_t argument. Callers - * should not delete the returned value, and it only lives as long as the - * #wasm_extern_t argument. - */ -WASM_API_EXTERN const wasm_module_t* wasm_extern_as_module_const(const wasm_extern_t*); - -/** - * \brief Converts a #wasm_instance_t to #wasm_extern_t. - * - * The returned #wasm_extern_t is owned by the #wasm_instance_t argument. Callers - * should not delete the returned value, and it only lives as long as the - * #wasm_instance_t argument. - */ -WASM_API_EXTERN wasm_extern_t* wasm_instance_as_extern(wasm_instance_t*); - -/** - * \brief Converts a #wasm_extern_t to #wasm_instance_t. - * - * The returned #wasm_instance_t is owned by the #wasm_extern_t argument. Callers - * should not delete the returned value, and it only lives as long as the - * #wasm_extern_t argument. - * - * If the #wasm_extern_t argument isn't a #wasm_instance_t then `NULL` is returned. - */ -WASM_API_EXTERN wasm_instance_t* wasm_extern_as_instance(wasm_extern_t*); - -/** - * \brief Converts a #wasm_extern_t to #wasm_instance_t. - * - * The returned #wasm_instance_t is owned by the #wasm_extern_t argument. Callers - * should not delete the returned value, and it only lives as long as the - * #wasm_extern_t argument. - */ -WASM_API_EXTERN const wasm_instance_t* wasm_extern_as_instance_const(const wasm_extern_t*); - -/** - * \brief Returns the type of this instance. - * - * The returned #wasm_instancetype_t is expected to be deallocated by the caller. - */ -WASM_API_EXTERN own wasm_instancetype_t* wasm_instance_type(const wasm_instance_t*); - -/** - * \brief Returns the type of this module. - * - * The returned #wasm_moduletype_t is expected to be deallocated by the caller. - */ -WASM_API_EXTERN own wasm_moduletype_t* wasm_module_type(const wasm_module_t*); - -/** - * \brief Value of #wasm_externkind_enum corresponding to a wasm module. - */ -#define WASM_EXTERN_MODULE 4 - -/** - * \brief Value of #wasm_externkind_enum corresponding to a wasm instance. - */ -#define WASM_EXTERN_INSTANCE 5 - -#undef own - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WASMTIME_API_H diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/empty.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/empty.go deleted file mode 100644 index da5524747..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/empty.go +++ /dev/null @@ -1 +0,0 @@ -package linux_x86_64 diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/libwasmtime.a b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/libwasmtime.a deleted file mode 100644 index 67b3c8187..000000000 Binary files a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/libwasmtime.a and /dev/null differ diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/macos-x86_64/empty.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/macos-x86_64/empty.go deleted file mode 100644 index 0aa17a7b5..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/macos-x86_64/empty.go +++ /dev/null @@ -1 +0,0 @@ -package macos_x86_64 diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/macos-x86_64/libwasmtime.a b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/macos-x86_64/libwasmtime.a deleted file mode 100644 index ab859f2d7..000000000 Binary files a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/macos-x86_64/libwasmtime.a and /dev/null differ diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/windows-x86_64/empty.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/windows-x86_64/empty.go deleted file mode 100644 index 0cd04cf85..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/windows-x86_64/empty.go +++ /dev/null @@ -1 +0,0 @@ -package windows_x86_64 diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/windows-x86_64/libwasmtime.a b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/windows-x86_64/libwasmtime.a deleted file mode 100644 index e821f2014..000000000 Binary files a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/build/windows-x86_64/libwasmtime.a and /dev/null differ diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/config.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/config.go deleted file mode 100644 index 96f96e897..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/config.go +++ /dev/null @@ -1,181 +0,0 @@ -package wasmtime - -// #include -// #include -// #include -import "C" -import ( - "runtime" - "unsafe" -) - -// Strategy is the compilation strategies for wasmtime -type Strategy C.wasmtime_strategy_t - -const ( - // StrategyAuto will let wasmtime automatically pick an appropriate compilation strategy - StrategyAuto Strategy = C.WASMTIME_STRATEGY_AUTO - // StrategyCranelift will force wasmtime to use the Cranelift backend - StrategyCranelift Strategy = C.WASMTIME_STRATEGY_CRANELIFT - // StrategyLightbeam will force wasmtime to use the lightbeam backend - StrategyLightbeam Strategy = C.WASMTIME_STRATEGY_LIGHTBEAM -) - -// OptLevel decides what degree of optimization wasmtime will perform on generated machine code -type OptLevel C.wasmtime_opt_level_t - -const ( - // OptLevelNone will perform no optimizations - OptLevelNone OptLevel = C.WASMTIME_OPT_LEVEL_NONE - // OptLevelSpeed will optimize machine code to be as fast as possible - OptLevelSpeed OptLevel = C.WASMTIME_OPT_LEVEL_SPEED - // OptLevelSpeedAndSize will optimize machine code for speed, but also optimize - // to be small, sometimes at the cost of speed. - OptLevelSpeedAndSize OptLevel = C.WASMTIME_OPT_LEVEL_SPEED_AND_SIZE -) - -// ProfilingStrategy decides what sort of profiling to enable, if any. -type ProfilingStrategy C.wasmtime_profiling_strategy_t - -const ( - // ProfilingStrategyNone means no profiler will be used - ProfilingStrategyNone ProfilingStrategy = C.WASMTIME_PROFILING_STRATEGY_NONE - // ProfilingStrategyJitdump will use the "jitdump" linux support - ProfilingStrategyJitdump ProfilingStrategy = C.WASMTIME_PROFILING_STRATEGY_JITDUMP -) - -// Config holds options used to create an Engine and customize its behavior. -type Config struct { - _ptr *C.wasm_config_t -} - -// NewConfig creates a new `Config` with all default options configured. -func NewConfig() *Config { - config := &Config{_ptr: C.wasm_config_new()} - runtime.SetFinalizer(config, func(config *Config) { - C.wasm_config_delete(config._ptr) - }) - return config -} - -// SetDebugInfo configures whether dwarf debug information for JIT code is enabled -func (cfg *Config) SetDebugInfo(enabled bool) { - C.wasmtime_config_debug_info_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetWasmThreads configures whether the wasm threads proposal is enabled -func (cfg *Config) SetWasmThreads(enabled bool) { - C.wasmtime_config_wasm_threads_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetWasmReferenceTypes configures whether the wasm reference types proposal is enabled -func (cfg *Config) SetWasmReferenceTypes(enabled bool) { - C.wasmtime_config_wasm_reference_types_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetWasmSIMD configures whether the wasm SIMD proposal is enabled -func (cfg *Config) SetWasmSIMD(enabled bool) { - C.wasmtime_config_wasm_simd_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetWasmBulkMemory configures whether the wasm bulk memory proposal is enabled -func (cfg *Config) SetWasmBulkMemory(enabled bool) { - C.wasmtime_config_wasm_bulk_memory_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetWasmMultiValue configures whether the wasm multi value proposal is enabled -func (cfg *Config) SetWasmMultiValue(enabled bool) { - C.wasmtime_config_wasm_multi_value_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetWasmModuleLinking configures whether the wasm module linking proposal is enabled -func (cfg *Config) SetWasmModuleLinking(enabled bool) { - C.wasmtime_config_wasm_module_linking_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetStrategy configures what compilation strategy is used to compile wasm code -func (cfg *Config) SetStrategy(strat Strategy) error { - err := C.wasmtime_config_strategy_set(cfg.ptr(), C.wasmtime_strategy_t(strat)) - runtime.KeepAlive(cfg) - if err != nil { - return mkError(err) - } - return nil -} - -// SetCraneliftDebugVerifier configures whether the cranelift debug verifier will be active when -// cranelift is used to compile wasm code. -func (cfg *Config) SetCraneliftDebugVerifier(enabled bool) { - C.wasmtime_config_cranelift_debug_verifier_set(cfg.ptr(), C.bool(enabled)) - runtime.KeepAlive(cfg) -} - -// SetCraneliftOptLevel configures the cranelift optimization level for generated code -func (cfg *Config) SetCraneliftOptLevel(level OptLevel) { - C.wasmtime_config_cranelift_opt_level_set(cfg.ptr(), C.wasmtime_opt_level_t(level)) - runtime.KeepAlive(cfg) -} - -// SetProfiler configures what profiler strategy to use for generated code -func (cfg *Config) SetProfiler(profiler ProfilingStrategy) error { - err := C.wasmtime_config_profiler_set(cfg.ptr(), C.wasmtime_profiling_strategy_t(profiler)) - runtime.KeepAlive(cfg) - if err != nil { - return mkError(err) - } - return nil -} - -// CacheConfigLoadDefault enables compiled code caching for this `Config` using the default settings -// configuration can be found. -// -// For more information about caching see -// https://bytecodealliance.github.io/wasmtime/cli-cache.html -func (cfg *Config) CacheConfigLoadDefault() error { - err := C.wasmtime_config_cache_config_load(cfg.ptr(), nil) - runtime.KeepAlive(cfg) - if err != nil { - return mkError(err) - } - return nil -} - -// CacheConfigLoad enables compiled code caching for this `Config` using the settings specified -// in the configuration file `path`. -// -// For more information about caching and configuration options see -// https://bytecodealliance.github.io/wasmtime/cli-cache.html -func (cfg *Config) CacheConfigLoad(path string) error { - cstr := C.CString(path) - err := C.wasmtime_config_cache_config_load(cfg.ptr(), cstr) - C.free(unsafe.Pointer(cstr)) - runtime.KeepAlive(cfg) - if err != nil { - return mkError(err) - } - return nil -} - -// SetInterruptable configures whether generated wasm code can be interrupted via interrupt -// handles. -func (cfg *Config) SetInterruptable(interruptable bool) { - C.wasmtime_config_interruptable_set(cfg.ptr(), C.bool(interruptable)) - runtime.KeepAlive(cfg) -} - -// See comments in `ffi.go` for what's going on here -func (cfg *Config) ptr() *C.wasm_config_t { - ret := cfg._ptr - maybeGC() - if ret == nil { - panic("Config has already been used up") - } - return ret -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/doc.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/doc.go deleted file mode 100644 index ef44184bc..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/doc.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Package wasmtime is a WebAssembly runtime for Go powered by Wasmtime. - -This package provides everything necessary to compile and execute WebAssembly -modules as part of a Go program. Wasmtime is a JIT compiler written in Rust, -and can be found at https://github.com/bytecodealliance/wasmtime. This package -is a binding to the C API provided by Wasmtime. - -The API of this Go package is intended to mirror the Rust API -(https://docs.rs/wasmtime) relatively closely, so if you find something is -under-documented here then you may have luck consulting the Rust documentation -as well. As always though feel free to file any issues at -https://github.com/bytecodealliance/wasmtime-go/issues/new. - -It's also worth pointing out that the authors of this package up to this point -primarily work in Rust, so if you've got suggestions of how to make this package -more idiomatic for Go we'd love to hear your thoughts! */ -package wasmtime diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/engine.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/engine.go deleted file mode 100644 index 47daf8667..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/engine.go +++ /dev/null @@ -1,44 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// Engine is an instance of a wasmtime engine which is used to create a `Store`. -// -// Engines are a form of global configuration for wasm compilations and modules -// and such. -type Engine struct { - _ptr *C.wasm_engine_t -} - -// NewEngine creates a new `Engine` with default configuration. -func NewEngine() *Engine { - engine := &Engine{_ptr: C.wasm_engine_new()} - runtime.SetFinalizer(engine, func(engine *Engine) { - C.wasm_engine_delete(engine._ptr) - }) - return engine -} - -// NewEngineWithConfig creates a new `Engine` with the `Config` provided -// -// Note that once a `Config` is passed to this method it cannot be used again. -func NewEngineWithConfig(config *Config) *Engine { - if config.ptr() == nil { - panic("config already used") - } - engine := &Engine{_ptr: C.wasm_engine_new_with_config(config.ptr())} - runtime.SetFinalizer(config, nil) - config._ptr = nil - runtime.SetFinalizer(engine, func(engine *Engine) { - C.wasm_engine_delete(engine._ptr) - }) - return engine -} - -func (engine *Engine) ptr() *C.wasm_engine_t { - ret := engine._ptr - maybeGC() - return ret -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/error.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/error.go deleted file mode 100644 index 026b9410e..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/error.go +++ /dev/null @@ -1,32 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -type Error struct { - _ptr *C.wasmtime_error_t -} - -func mkError(ptr *C.wasmtime_error_t) *Error { - err := &Error{_ptr: ptr} - runtime.SetFinalizer(err, func(err *Error) { - C.wasmtime_error_delete(err._ptr) - }) - return err -} - -func (e *Error) ptr() *C.wasmtime_error_t { - ret := e._ptr - maybeGC() - return ret -} - -func (e *Error) Error() string { - message := C.wasm_byte_vec_t{} - C.wasmtime_error_message(e.ptr(), &message) - ret := C.GoStringN(message.data, C.int(message.size)) - runtime.KeepAlive(e) - C.wasm_byte_vec_delete(&message) - return ret -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/exporttype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/exporttype.go deleted file mode 100644 index 393e23099..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/exporttype.go +++ /dev/null @@ -1,66 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// ExportType is one of the exports component. -// A module defines a set of exports that become accessible to the host environment once the module has been instantiated. -type ExportType struct { - _ptr *C.wasm_exporttype_t - _owner interface{} -} - -// NewExportType creates a new `ExportType` with the `name` and the type provided. -func NewExportType(name string, ty AsExternType) *ExportType { - nameVec := stringToByteVec(name) - - // Creating an export type requires taking ownership, so create a copy - // so we don't have to invalidate pointers here. Shouldn't be too - // costly in theory anyway. - extern := ty.AsExternType() - ptr := C.wasm_externtype_copy(extern.ptr()) - runtime.KeepAlive(extern) - - // And once we've got all that create the export type! - exportPtr := C.wasm_exporttype_new(&nameVec, ptr) - - return mkExportType(exportPtr, nil) -} - -func mkExportType(ptr *C.wasm_exporttype_t, owner interface{}) *ExportType { - exporttype := &ExportType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(exporttype, func(exporttype *ExportType) { - C.wasm_exporttype_delete(exporttype._ptr) - }) - } - return exporttype -} - -func (ty *ExportType) ptr() *C.wasm_exporttype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *ExportType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// Name returns the name in the module this export type is exporting -func (ty *ExportType) Name() string { - ptr := C.wasm_exporttype_name(ty.ptr()) - ret := C.GoStringN(ptr.data, C.int(ptr.size)) - runtime.KeepAlive(ty) - return ret -} - -// Type returns the type of item this export type expects -func (ty *ExportType) Type() *ExternType { - ptr := C.wasm_exporttype_type(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/extern.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/extern.go deleted file mode 100644 index 9aee69772..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/extern.go +++ /dev/null @@ -1,116 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// Extern is an external value, which is the runtime representation of an entity that can be imported or exported. -// It is an address denoting either a function instance, table instance, memory instance, or global instances in the shared store. -// Read more in [spec](https://webassembly.github.io/spec/core/exec/runtime.html#external-values) -// -type Extern struct { - _ptr *C.wasm_extern_t - _owner interface{} - freelist *freeList -} - -// AsExtern is an interface for all types which can be imported or exported as an Extern -type AsExtern interface { - AsExtern() *Extern -} - -func mkExtern(ptr *C.wasm_extern_t, freelist *freeList, owner interface{}) *Extern { - f := &Extern{_ptr: ptr, _owner: owner, freelist: freelist} - if owner == nil { - runtime.SetFinalizer(f, func(f *Extern) { - f.freelist.lock.Lock() - defer f.freelist.lock.Unlock() - f.freelist.externs = append(f.freelist.externs, f._ptr) - }) - } - return f -} - -func (e *Extern) ptr() *C.wasm_extern_t { - ret := e._ptr - maybeGC() - return ret -} - -func (e *Extern) owner() interface{} { - if e._owner != nil { - return e._owner - } - return e -} - -// Type returns the type of this export -func (e *Extern) Type() *ExternType { - ptr := C.wasm_extern_type(e.ptr()) - runtime.KeepAlive(e) - return mkExternType(ptr, nil) -} - -// Func returns a Func if this export is a function or nil otherwise -func (e *Extern) Func() *Func { - ret := C.wasm_extern_as_func(e.ptr()) - if ret == nil { - return nil - } - - return mkFunc(ret, e.freelist, e.owner()) -} - -// Global returns a Global if this export is a global or nil otherwise -func (e *Extern) Global() *Global { - ret := C.wasm_extern_as_global(e.ptr()) - if ret == nil { - return nil - } - - return mkGlobal(ret, e.freelist, e.owner()) -} - -// Memory returns a Memory if this export is a memory or nil otherwise -func (e *Extern) Memory() *Memory { - ret := C.wasm_extern_as_memory(e.ptr()) - if ret == nil { - return nil - } - - return mkMemory(ret, e.freelist, e.owner()) -} - -// Table returns a Table if this export is a table or nil otherwise -func (e *Extern) Table() *Table { - ret := C.wasm_extern_as_table(e.ptr()) - if ret == nil { - return nil - } - - return mkTable(ret, e.freelist, e.owner()) -} - -// Module returns a Module if this export is a module or nil otherwise -func (e *Extern) Module() *Module { - ret := C.wasm_extern_as_module(e.ptr()) - if ret == nil { - return nil - } - - return mkModule(ret, e.owner()) -} - -// Instance returns a Instance if this export is a module or nil otherwise -func (e *Extern) Instance() *Instance { - ret := C.wasm_extern_as_instance(e.ptr()) - if ret == nil { - return nil - } - - return mkInstance(ret, e.freelist, e.owner()) -} - -func (e *Extern) AsExtern() *Extern { - return e -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/externtype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/externtype.go deleted file mode 100644 index 622904c55..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/externtype.go +++ /dev/null @@ -1,84 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// ExternType means one of external types which classify imports and external values with their respective types. -type ExternType struct { - _ptr *C.wasm_externtype_t - _owner interface{} -} - -// AsExternType is an interface for all types which can be ExternType. -type AsExternType interface { - AsExternType() *ExternType -} - -func mkExternType(ptr *C.wasm_externtype_t, owner interface{}) *ExternType { - externtype := &ExternType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(externtype, func(externtype *ExternType) { - C.wasm_externtype_delete(externtype._ptr) - }) - } - return externtype -} - -func (ty *ExternType) ptr() *C.wasm_externtype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *ExternType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// FuncType returns the underlying `FuncType` for this `ExternType` if it's a function -// type. Otherwise returns `nil`. -func (ty *ExternType) FuncType() *FuncType { - ptr := C.wasm_externtype_as_functype(ty.ptr()) - if ptr == nil { - return nil - } - return mkFuncType(ptr, ty.owner()) -} - -// GlobalType returns the underlying `GlobalType` for this `ExternType` if it's a *global* type. -// Otherwise returns `nil`. -func (ty *ExternType) GlobalType() *GlobalType { - ptr := C.wasm_externtype_as_globaltype(ty.ptr()) - if ptr == nil { - return nil - } - return mkGlobalType(ptr, ty.owner()) -} - -// TableType returns the underlying `TableType` for this `ExternType` if it's a *table* type. -// Otherwise returns `nil`. -func (ty *ExternType) TableType() *TableType { - ptr := C.wasm_externtype_as_tabletype(ty.ptr()) - if ptr == nil { - return nil - } - return mkTableType(ptr, ty.owner()) -} - -// MemoryType returns the underlying `MemoryType` for this `ExternType` if it's a *memory* type. -// Otherwise returns `nil`. -func (ty *ExternType) MemoryType() *MemoryType { - ptr := C.wasm_externtype_as_memorytype(ty.ptr()) - if ptr == nil { - return nil - } - return mkMemoryType(ptr, ty.owner()) -} - -// AsExternType returns this type itself -func (ty *ExternType) AsExternType() *ExternType { - return ty -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/ffi.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/ffi.go deleted file mode 100644 index 0aa6f4cf8..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/ffi.go +++ /dev/null @@ -1,54 +0,0 @@ -package wasmtime - -// #cgo CFLAGS:-I${SRCDIR}/build/include -// #cgo !windows LDFLAGS:-lwasmtime -lm -ldl -// #cgo windows CFLAGS:-DWASM_API_EXTERN= -DWASI_API_EXTERN= -// #cgo windows LDFLAGS:-lwasmtime -luserenv -lole32 -lntdll -lws2_32 -lkernel32 -lbcrypt -// #cgo linux,amd64 LDFLAGS:-L${SRCDIR}/build/linux-x86_64 -// #cgo darwin,amd64 LDFLAGS:-L${SRCDIR}/build/macos-x86_64 -// #cgo windows,amd64 LDFLAGS:-L${SRCDIR}/build/windows-x86_64 -// #include -import "C" -import "runtime" -import "unsafe" - -// # What's up with `ptr()` methods? -// -// We use `runtime.SetFinalizer` to free all objects we allocate from C. This -// is intended to make usage of the API much simpler since you don't have to -// close/free anything. The tricky part here though is laid out in -// `runtime.SetFinalizer`'s documentation which is that if you read a -// non-gc-value (like a C pointer) from a GC object then after the value is -// read the GC value might get garbage collected. This is quite bad for us -// because the garbage collection will free the C pointer, making the C pointer -// actually invalid. -// -// The solution is to add `runtime.KeepAlive` calls after C function calls to -// ensure that the GC object lives at least as long as the C function call -// itself. This is naturally quite error-prone, so the goal here with `ptr()` -// methods is to make us a bit more resilient to these sorts of errors and -// expose segfaults during development. -// -// Each `ptr()` method has the basic structure of doing these steps: -// -// 1. First it reads the pointer value from the GC object -// 2. Next it conditionally calls `runtime.GC()`, depending on build flags -// 3. Finally it returns the original pointer value -// -// The goal here is to as aggressively as we can collect GC objects when -// testing and trigger finalizers as frequently as we can. This naturally -// slows things down quite a bit, so conditional compilation (with the `debug` -// tag) is used to enable this. Our CI runs tests with `-tag debug` to make -// sure this is at least run somewhere. -// -// If anyone else has a better idea of what to handle all this it would be very -// much appreciated :) - -// Convert a Go string into an owned `wasm_byte_vec_t` -func stringToByteVec(s string) C.wasm_byte_vec_t { - vec := C.wasm_byte_vec_t{} - C.wasm_byte_vec_new_uninitialized(&vec, C.size_t(len(s))) - C.memcpy(unsafe.Pointer(vec.data), unsafe.Pointer(C._GoStringPtr(s)), vec.size) - runtime.KeepAlive(s) - return vec -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/freelist.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/freelist.go deleted file mode 100644 index 54028335d..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/freelist.go +++ /dev/null @@ -1,123 +0,0 @@ -package wasmtime - -// #include -// #include -import "C" -import ( - "runtime" - "sync" -) - -// A structure used to defer deletion of C API objects to the main thread. -// -// The C API is not threadsafe and objects must be destroyed on the original -// thread that they came from. We also, however, want to use `SetFinalizer` to -// free objects because it's vastly more convenient than explicit free -// methods. The `SetFinalizer` routine will spin up a goroutine for finalizers -// that might run concurrently, however. To fix this we use this structure to -// collect pointers which need to be free'd. -// -// When a `SetFinalizer` finalizer runs it will enqueue a pointer inside of -// this freelist. This list is then periodically checked to clear out any -// pointers on the main thread with the store. Pointers contained here are -// basically those all connected to a `wasm_store_t`. -// -// This isn't really a great solution but at this time I can't really think -// of anything else unfortunately. I'm hoping that we can continue to optimize -// this over time if necessary, but otherwise this should at least fix crashes -// seen on CI and ensure that everything is free'd correctly. -type freeList struct { - // The freelist can be modified from both the main thread with a store - // and from finalizers, so because that can happen concurrently we - // protect the arrays below with a lock. - lock sync.Mutex - - // All the various kinds of pointers that we'll store to get deallocated - // here. - - stores []*C.wasm_store_t - memories []*C.wasm_memory_t - funcs []*C.wasm_func_t - tables []*C.wasm_table_t - globals []*C.wasm_global_t - instances []*C.wasm_instance_t - externs []*C.wasm_extern_t - linkers []*C.wasmtime_linker_t - wasiInstances []*C.wasi_instance_t - externVecs []*C.wasm_extern_vec_t - vals []*C.wasm_val_t -} - -func newFreeList() *freeList { - // freelists have their own finalizer which clears out all the contents - // once the freelist itself has gone away. If this happens that should - // be safe to do because no other live objects have access to the - // freelist, so whatever thread is running the freelist is "the thread - // which own things" so it's safe to clear everything out, we know that - // no other concurrent accesses will be happening. - ret := &freeList{} - runtime.SetFinalizer(ret, func(f *freeList) { f.clear() }) - return ret -} - -// Clears out this freelist, actually deleting all pointers that are contained -// within it. -func (f *freeList) clear() { - f.lock.Lock() - defer f.lock.Unlock() - - for _, p := range f.memories { - C.wasm_memory_delete(p) - } - f.memories = nil - - for _, p := range f.stores { - C.wasm_store_delete(p) - } - f.stores = nil - - for _, p := range f.funcs { - C.wasm_func_delete(p) - } - f.funcs = nil - - for _, p := range f.tables { - C.wasm_table_delete(p) - } - f.tables = nil - - for _, p := range f.globals { - C.wasm_global_delete(p) - } - f.globals = nil - - for _, p := range f.instances { - C.wasm_instance_delete(p) - } - f.instances = nil - - for _, p := range f.externs { - C.wasm_extern_delete(p) - } - f.externs = nil - - for _, p := range f.linkers { - C.wasmtime_linker_delete(p) - } - f.linkers = nil - - for _, p := range f.wasiInstances { - C.wasi_instance_delete(p) - } - f.wasiInstances = nil - - for _, p := range f.externVecs { - C.wasm_extern_vec_delete(p) - } - f.externVecs = nil - - for _, p := range f.vals { - C.wasm_val_delete(p) - } - f.vals = nil -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/func.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/func.go deleted file mode 100644 index d4a5c20ce..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/func.go +++ /dev/null @@ -1,620 +0,0 @@ -package wasmtime - -// #include "shims.h" -import "C" -import ( - "errors" - "reflect" - "runtime" - "sync" - "unsafe" -) - -// Func is a function instance, which is the runtime representation of a function. -// It effectively is a closure of the original function over the runtime module instance of its originating module. -// The module instance is used to resolve references to other definitions during execution of the function. -// Read more in [spec](https://webassembly.github.io/spec/core/exec/runtime.html#function-instances) -type Func struct { - _ptr *C.wasm_func_t - _owner interface{} - freelist *freeList -} - -// TODO -type Caller struct { - ptr *C.wasmtime_caller_t - freelist *freeList -} - -// Note that `newMapEntry` and `wrapMapEntry` here need to be careful to not -// close over any state that can retain the `freelist` or other wasmtime -// objects. Otherwise that'll create a cycle between the Rust and Go heaps -// which can't be garbage collected. -type newMapEntry struct { - callback func(*Caller, []Val) ([]Val, *Trap) - results []*ValType - caller_id C.size_t -} - -type wrapMapEntry struct { - callback reflect.Value - caller_id C.size_t -} - -type callerState struct { - freelist *freeList - lastPanic interface{} - cnt uint -} - -var gLock sync.Mutex -var gNewMap = make(map[int]newMapEntry) -var gNewMapSlab slab -var gWrapMap = make(map[int]wrapMapEntry) -var gWrapMapSlab slab -var gCallerState = make(map[C.size_t]*callerState) - -// NewFunc creates a new `Func` with the given `ty` which, when called, will call `f` -// -// The `ty` given is the wasm type signature of the `Func` to create. When called -// the `f` callback receives two arguments. The first is a `Caller` to learn -// information about the calling context and the second is a list of arguments -// represented as a `Val`. The parameters are guaranteed to match the parameters -// types specified in `ty`. -// -// The `f` callback is expected to produce one of two values. Results can be -// returned as an array of `[]Val`. The number and types of these results much -// match the `ty` given, otherwise the program will panic. The `f` callback can -// also produce a trap which will trigger trap unwinding in wasm, and the trap -// will be returned to the original caller. -// -// If the `f` callback panics then the panic will be propagated to the caller -// as well. -func NewFunc( - store *Store, - ty *FuncType, - f func(*Caller, []Val) ([]Val, *Trap), -) *Func { - gLock.Lock() - idx := gNewMapSlab.allocate() - gNewMap[idx] = newMapEntry{ - callback: f, - results: ty.Results(), - caller_id: C.size_t(uintptr(unsafe.Pointer(store.freelist))), - } - gLock.Unlock() - - ptr := C.c_func_new_with_env( - store.ptr(), - ty.ptr(), - C.size_t(idx), - 0, - ) - runtime.KeepAlive(store) - runtime.KeepAlive(ty) - - return mkFunc(ptr, store.freelist, nil) -} - -//export goTrampolineNew -func goTrampolineNew( - callerPtr *C.wasmtime_caller_t, - env C.size_t, - argsPtr *C.wasm_val_vec_t, - resultsPtr *C.wasm_val_vec_t, -) *C.wasm_trap_t { - idx := int(env) - gLock.Lock() - entry := gNewMap[idx] - caller_id := entry.caller_id - freelist := gCallerState[caller_id].freelist - gLock.Unlock() - - caller := &Caller{ptr: callerPtr, freelist: freelist} - defer func() { caller.ptr = nil }() - - params := make([]Val, int(argsPtr.size)) - var val C.wasm_val_t - base := unsafe.Pointer(argsPtr.data) - for i := 0; i < len(params); i++ { - ptr := (*C.wasm_val_t)(unsafe.Pointer(uintptr(base) + uintptr(i)*unsafe.Sizeof(val))) - params[i] = mkVal(ptr, freelist) - } - - var results []Val - var trap *Trap - var lastPanic interface{} - func() { - defer func() { lastPanic = recover() }() - results, trap = entry.callback(caller, params) - if trap != nil { - return - } - if len(results) != len(entry.results) { - panic("callback didn't produce the correct number of results") - } - for i, ty := range entry.results { - if results[i].Kind() != ty.Kind() { - panic("callback produced wrong type of result") - } - } - }() - if trap == nil && lastPanic != nil { - gLock.Lock() - gCallerState[caller_id].lastPanic = lastPanic - gLock.Unlock() - return nil - } - if trap != nil { - runtime.SetFinalizer(trap, nil) - return trap.ptr() - } - - base = unsafe.Pointer(resultsPtr.data) - for i := 0; i < len(results); i++ { - ptr := (*C.wasm_val_t)(unsafe.Pointer(uintptr(base) + uintptr(i)*unsafe.Sizeof(val))) - C.wasm_val_copy(ptr, results[i].ptr()) - } - runtime.KeepAlive(results) - return nil -} - -//export goFinalizeNew -func goFinalizeNew(env unsafe.Pointer) { - idx := int(uintptr(env)) - gLock.Lock() - defer gLock.Unlock() - delete(gNewMap, idx) - gNewMapSlab.deallocate(idx) -} - -// WrapFunc wraps a native Go function, `f`, as a wasm `Func`. -// -// This function differs from `NewFunc` in that it will determine the type -// signature of the wasm function given the input value `f`. The `f` value -// provided must be a Go function. It may take any number of the following -// types as arguments: -// -// `int32` - a wasm `i32` -// -// `int64` - a wasm `i64` -// -// `float32` - a wasm `f32` -// -// `float64` - a wasm `f32` -// -// `*Caller` - information about the caller's instance -// -// `*Func` - a wasm `funcref` -// -// anything else - a wasm `externref` -// -// The Go function may return any number of values. It can return any number of -// primitive wasm values (integers/floats), and the last return value may -// optionally be `*Trap`. If a `*Trap` returned is `nil` then the other values -// are returned from the wasm function. Otherwise the `*Trap` is returned and -// it's considered as if the host function trapped. -// -// If the function `f` panics then the panic will be propagated to the caller. -func WrapFunc( - store *Store, - f interface{}, -) *Func { - // Make sure the `interface{}` passed in was indeed a function - val := reflect.ValueOf(f) - ty := val.Type() - if ty.Kind() != reflect.Func { - panic("callback provided must be a `func`") - } - - // infer the parameter types, and `*Caller` type is special in the - // parameters so be sure to case on that as well. - params := make([]*ValType, 0, ty.NumIn()) - var caller *Caller - for i := 0; i < ty.NumIn(); i++ { - paramTy := ty.In(i) - if paramTy != reflect.TypeOf(caller) { - params = append(params, typeToValType(paramTy)) - } - } - - // Then infer the result types, where a final `*Trap` result value is - // also special. - results := make([]*ValType, 0, ty.NumOut()) - var trap *Trap - for i := 0; i < ty.NumOut(); i++ { - resultTy := ty.Out(i) - if i == ty.NumOut()-1 && resultTy == reflect.TypeOf(trap) { - continue - } - results = append(results, typeToValType(resultTy)) - } - wasmTy := NewFuncType(params, results) - - // Store our `f` callback into the slab for wrapped functions, and now - // we've got everything necessary to make thw asm handle. - gLock.Lock() - idx := gWrapMapSlab.allocate() - gWrapMap[idx] = wrapMapEntry{ - callback: val, - caller_id: C.size_t(uintptr(unsafe.Pointer(store.freelist))), - } - gLock.Unlock() - - ptr := C.c_func_new_with_env( - store.ptr(), - wasmTy.ptr(), - C.size_t(idx), - 1, // this is `WrapFunc`, not `NewFunc` - ) - runtime.KeepAlive(store) - runtime.KeepAlive(wasmTy) - return mkFunc(ptr, store.freelist, nil) -} - -func typeToValType(ty reflect.Type) *ValType { - var a int32 - if ty == reflect.TypeOf(a) { - return NewValType(KindI32) - } - var b int64 - if ty == reflect.TypeOf(b) { - return NewValType(KindI64) - } - var c float32 - if ty == reflect.TypeOf(c) { - return NewValType(KindF32) - } - var d float64 - if ty == reflect.TypeOf(d) { - return NewValType(KindF64) - } - var f *Func - if ty == reflect.TypeOf(f) { - return NewValType(KindFuncref) - } - return NewValType(KindExternref) -} - -//export goTrampolineWrap -func goTrampolineWrap( - callerPtr *C.wasmtime_caller_t, - env C.size_t, - argsPtr *C.wasm_val_vec_t, - resultsPtr *C.wasm_val_vec_t, -) *C.wasm_trap_t { - // Convert all our parameters to `[]reflect.Value`, taking special care - // for `*Caller` but otherwise reading everything through `Val`. - idx := int(env) - gLock.Lock() - entry := gWrapMap[idx] - caller_id := entry.caller_id - freelist := gCallerState[caller_id].freelist - gLock.Unlock() - - // Wrap our `Caller` argument in case it's needed - caller := &Caller{ptr: callerPtr, freelist: freelist} - defer func() { caller.ptr = nil }() - - ty := entry.callback.Type() - params := make([]reflect.Value, ty.NumIn()) - base := unsafe.Pointer(argsPtr.data) - var raw C.wasm_val_t - for i := 0; i < len(params); i++ { - if ty.In(i) == reflect.TypeOf(caller) { - params[i] = reflect.ValueOf(caller) - } else { - ptr := (*C.wasm_val_t)(base) - val := mkVal(ptr, freelist) - params[i] = reflect.ValueOf(val.Get()) - base = unsafe.Pointer(uintptr(base) + unsafe.Sizeof(raw)) - } - } - - // Invoke the function, catching any panics to propagate later. Panics - // result in immediately returning a trap. - var results []reflect.Value - var lastPanic interface{} - func() { - defer func() { lastPanic = recover() }() - results = entry.callback.Call(params) - }() - if lastPanic != nil { - gLock.Lock() - gCallerState[caller_id].lastPanic = lastPanic - gLock.Unlock() - return nil - } - - // And now we write all the results into memory depending on the type - // of value that was returned. - base = unsafe.Pointer(resultsPtr.data) - for _, result := range results { - ptr := (*C.wasm_val_t)(base) - switch val := result.Interface().(type) { - case int32: - *ptr = *ValI32(val).ptr() - case int64: - *ptr = *ValI64(val).ptr() - case float32: - *ptr = *ValF32(val).ptr() - case float64: - *ptr = *ValF64(val).ptr() - case *Func: - raw := ValFuncref(val) - C.wasm_val_copy(ptr, raw.ptr()) - runtime.KeepAlive(raw) - case *Trap: - if val != nil { - runtime.SetFinalizer(val, nil) - return val.ptr() - } - default: - raw := ValExternref(val) - C.wasm_val_copy(ptr, raw.ptr()) - runtime.KeepAlive(raw) - } - base = unsafe.Pointer(uintptr(base) + unsafe.Sizeof(raw)) - } - return nil -} - -//export goFinalizeWrap -func goFinalizeWrap(env unsafe.Pointer) { - idx := int(uintptr(env)) - gLock.Lock() - defer gLock.Unlock() - delete(gWrapMap, idx) - gWrapMapSlab.deallocate(idx) -} - -func mkFunc(ptr *C.wasm_func_t, freelist *freeList, owner interface{}) *Func { - f := &Func{_ptr: ptr, _owner: owner, freelist: freelist} - if owner == nil { - runtime.SetFinalizer(f, func(f *Func) { - f.freelist.lock.Lock() - defer f.freelist.lock.Unlock() - f.freelist.funcs = append(f.freelist.funcs, f._ptr) - }) - } - return f -} - -func (f *Func) ptr() *C.wasm_func_t { - f.freelist.clear() - ret := f._ptr - maybeGC() - return ret -} - -func (f *Func) owner() interface{} { - if f._owner != nil { - return f._owner - } - return f -} - -// Type returns the type of this func -func (f *Func) Type() *FuncType { - ptr := C.wasm_func_type(f.ptr()) - runtime.KeepAlive(f) - return mkFuncType(ptr, nil) -} - -// ParamArity returns the numer of parameters this function expects -func (f *Func) ParamArity() int { - ret := C.wasm_func_param_arity(f.ptr()) - runtime.KeepAlive(f) - return int(ret) -} - -// ResultArity returns the numer of results this function produces -func (f *Func) ResultArity() int { - ret := C.wasm_func_result_arity(f.ptr()) - runtime.KeepAlive(f) - return int(ret) -} - -// Call invokes this function with the provided `args`. -// -// This variadic function must be invoked with the correct number and type of -// `args` as specified by the type of this function. This property is checked -// at runtime. Each `args` may have one of the following types: -// -// `int32` - a wasm `i32` -// -// `int64` - a wasm `i64` -// -// `float32` - a wasm `f32` -// -// `float64` - a wasm `f64` -// -// `Val` - correspond to a wasm value -// -// `*Func` - a wasm `funcref` -// -// anything else - a wasm `externref` -// -// This function will have one of three results: -// -// 1. If the function returns successfully, then the `interface{}` return -// argument will be the result of the function. If there were 0 results then -// this value is `nil`. If there was one result then this is that result. -// Otherwise if there were multiple results then `[]Val` is returned. -// -// 2. If this function invocation traps, then the returned `interface{}` value -// will be `nil` and a non-`nil` `*Trap` will be returned with information -// about the trap that happened. -// -// 3. If a panic in Go ends up happening somewhere, then this function will -// panic. -func (f *Func) Call(args ...interface{}) (interface{}, error) { - params := f.Type().Params() - if len(args) > len(params) { - return nil, errors.New("too many arguments provided") - } - paramsVec := C.wasm_val_vec_t{} - C.wasm_val_vec_new_uninitialized(¶msVec, C.size_t(len(args))) - for i, param := range args { - var rawVal Val - switch val := param.(type) { - case int: - switch params[i].Kind() { - case KindI32: - rawVal = ValI32(int32(val)) - case KindI64: - rawVal = ValI64(int64(val)) - default: - return nil, errors.New("integer provided for non-integer argument") - } - case int32: - rawVal = ValI32(val) - case int64: - rawVal = ValI64(val) - case float32: - rawVal = ValF32(val) - case float64: - rawVal = ValF64(val) - case *Func: - rawVal = ValFuncref(val) - case Val: - rawVal = val - - default: - rawVal = ValExternref(val) - } - - base := unsafe.Pointer(paramsVec.data) - ptr := rawVal.ptr() - C.wasm_val_copy( - (*C.wasm_val_t)(unsafe.Pointer(uintptr(base)+unsafe.Sizeof(*ptr)*uintptr(i))), - ptr, - ) - runtime.KeepAlive(rawVal) - } - - resultsVec := C.wasm_val_vec_t{} - C.wasm_val_vec_new_uninitialized(&resultsVec, C.size_t(f.ResultArity())) - - var err *C.wasmtime_error_t - trap := enterWasm(f.freelist, func(trap **C.wasm_trap_t) { - err = C.go_wasmtime_func_call( - f.ptr(), - ¶msVec, - &resultsVec, - trap, - ) - }) - runtime.KeepAlive(f) - runtime.KeepAlive(args) - C.wasm_val_vec_delete(¶msVec) - - if trap != nil { - return nil, trap - } - - if err != nil { - return nil, mkError(err) - } - - if resultsVec.size == 0 { - return nil, nil - } else if resultsVec.size == 1 { - ret := mkVal(resultsVec.data, f.freelist).Get() - C.wasm_val_vec_delete(&resultsVec) - return ret, nil - } else { - results := make([]Val, int(resultsVec.size)) - base := unsafe.Pointer(resultsVec.data) - var val C.wasm_val_t - for i := 0; i < int(resultsVec.size); i++ { - ptr := (*C.wasm_val_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(val)*uintptr(i))) - results[i] = mkVal(ptr, f.freelist) - } - C.wasm_val_vec_delete(&resultsVec) - return results, nil - } - -} - -func (f *Func) AsExtern() *Extern { - ptr := C.wasm_func_as_extern(f.ptr()) - return mkExtern(ptr, f.freelist, f.owner()) -} - -// GetExport gets an exported item from the caller's module. -// -// May return `nil` if the export doesn't, if it's not a memory, if there isn't -// a caller, etc. -func (c *Caller) GetExport(name string) *Extern { - if c.ptr == nil { - return nil - } - ptr := C.go_caller_export_get( - c.ptr, - C._GoStringPtr(name), - C._GoStringLen(name), - ) - runtime.KeepAlive(name) - runtime.KeepAlive(c) - if ptr == nil { - return nil - } - - return mkExtern(ptr, c.freelist, nil) -} - -// Shim function that's expected to wrap any invocations of WebAssembly from Go -// itself. -func enterWasm(freelist *freeList, wasm func(**C.wasm_trap_t)) *Trap { - // First thing we need to do is update `gCallerState` with the actual - // pointer to `freelist` since when calling wasm we may call a Go - // function which needs the freelist. - // - // Note that if there's already an entry in the map we just increase - // the reference count. - gLock.Lock() - caller_id := C.size_t(uintptr(unsafe.Pointer(freelist))) - if _, ok := gCallerState[caller_id]; !ok { - gCallerState[caller_id] = &callerState{freelist: freelist} - } - gCallerState[caller_id].cnt++ - gLock.Unlock() - - // After `gCallerState` is configured we can actually enter the wasm - // code. We handle traps/panics here so we pass in the trap pointer. - // - // Note that it's assumed that this never panics. - var trap *C.wasm_trap_t - wasm(&trap) - - // After wasm has finished we need to remove `freelist` from the global - // `gCallerState` map to ensure it can eventually get GC'd. Here we - // also propagate any Go-originating panics if they're found. - gLock.Lock() - state := gCallerState[caller_id] - lastPanic := state.lastPanic - state.lastPanic = nil - state.cnt-- - if state.cnt == 0 { - delete(gCallerState, caller_id) - } - gLock.Unlock() - - // Take ownership of the return trapped pointer to ensure we don't leak - // it, even if Go panicked. - var wrappedTrap *Trap - if trap != nil { - wrappedTrap = mkTrap(trap) - } - - // Check to see if we called a Go host function which panicked, in - // which case we propagate that here. - if lastPanic != nil { - panic(lastPanic) - } - - // And otherwise if Go didn't panic we return whether the function - // trapped or not. - return wrappedTrap -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/functype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/functype.go deleted file mode 100644 index 8c071c362..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/functype.go +++ /dev/null @@ -1,91 +0,0 @@ -package wasmtime - -// #include -import "C" -import ( - "runtime" - "unsafe" -) - -// FuncType is one of function types which classify the signature of functions, mapping a vector of parameters to a vector of results. -// They are also used to classify the inputs and outputs of instructions. -type FuncType struct { - _ptr *C.wasm_functype_t - _owner interface{} -} - -// NewFuncType creates a new `FuncType` with the `kind` provided -func NewFuncType(params, results []*ValType) *FuncType { - paramVec := mkValTypeList(params) - resultVec := mkValTypeList(results) - - ptr := C.wasm_functype_new(¶mVec, &resultVec) - - return mkFuncType(ptr, nil) -} - -func mkValTypeList(tys []*ValType) C.wasm_valtype_vec_t { - vec := C.wasm_valtype_vec_t{} - C.wasm_valtype_vec_new_uninitialized(&vec, C.size_t(len(tys))) - base := unsafe.Pointer(vec.data) - for i, ty := range tys { - ptr := C.wasm_valtype_new(C.wasm_valtype_kind(ty.ptr())) - *(**C.wasm_valtype_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) = ptr - } - runtime.KeepAlive(tys) - return vec -} - -func mkFuncType(ptr *C.wasm_functype_t, owner interface{}) *FuncType { - functype := &FuncType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(functype, func(functype *FuncType) { - C.wasm_functype_delete(functype._ptr) - }) - } - return functype -} - -func (ty *FuncType) ptr() *C.wasm_functype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *FuncType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// Params returns the parameter types of this function type -func (ty *FuncType) Params() []*ValType { - ptr := C.wasm_functype_params(ty.ptr()) - return ty.convertTypeList(ptr) -} - -// Results returns the result types of this function type -func (ty *FuncType) Results() []*ValType { - ptr := C.wasm_functype_results(ty.ptr()) - return ty.convertTypeList(ptr) -} - -func (ty *FuncType) convertTypeList(list *C.wasm_valtype_vec_t) []*ValType { - ret := make([]*ValType, list.size) - - base := unsafe.Pointer(list.data) - var ptr *C.wasm_valtype_t - for i := 0; i < int(list.size); i++ { - ptr := *(**C.wasm_valtype_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) - ty := mkValType(ptr, ty.owner()) - ret[i] = ty - } - return ret -} - -// AsExternType converts this type to an instance of `ExternType` -func (ty *FuncType) AsExternType() *ExternType { - ptr := C.wasm_functype_as_externtype_const(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/global.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/global.go deleted file mode 100644 index fb1af01c2..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/global.go +++ /dev/null @@ -1,95 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// Global is a global instance, which is the runtime representation of a global variable. -// It holds an individual value and a flag indicating whether it is mutable. -// Read more in [spec](https://webassembly.github.io/spec/core/exec/runtime.html#global-instances) -type Global struct { - _ptr *C.wasm_global_t - _owner interface{} - freelist *freeList -} - -// NewGlobal creates a new `Global` in the given `Store` with the specified `ty` and -// initial value `val`. -func NewGlobal( - store *Store, - ty *GlobalType, - val Val, -) (*Global, error) { - var ptr *C.wasm_global_t - err := C.wasmtime_global_new( - store.ptr(), - ty.ptr(), - val.ptr(), - &ptr, - ) - runtime.KeepAlive(store) - runtime.KeepAlive(ty) - runtime.KeepAlive(val) - if err != nil { - return nil, mkError(err) - } - - return mkGlobal(ptr, store.freelist, nil), nil -} - -func mkGlobal(ptr *C.wasm_global_t, freelist *freeList, owner interface{}) *Global { - f := &Global{_ptr: ptr, _owner: owner, freelist: freelist} - if owner == nil { - runtime.SetFinalizer(f, func(f *Global) { - f.freelist.lock.Lock() - defer f.freelist.lock.Unlock() - f.freelist.globals = append(f.freelist.globals, f._ptr) - }) - } - return f -} - -func (g *Global) ptr() *C.wasm_global_t { - ret := g._ptr - maybeGC() - return ret -} - -func (g *Global) owner() interface{} { - if g._owner != nil { - return g._owner - } - return g -} - -// Type returns the type of this global -func (g *Global) Type() *GlobalType { - ptr := C.wasm_global_type(g.ptr()) - runtime.KeepAlive(g) - return mkGlobalType(ptr, nil) -} - -// Get gets the value of this global -func (g *Global) Get() Val { - ret := C.wasm_val_t{} - C.wasm_global_get(g.ptr(), &ret) - runtime.KeepAlive(g) - return takeVal(&ret, g.freelist) -} - -// Set sets the value of this global -func (g *Global) Set(val Val) error { - err := C.wasmtime_global_set(g.ptr(), val.ptr()) - runtime.KeepAlive(g) - runtime.KeepAlive(val) - if err == nil { - return nil - } - - return mkError(err) -} - -func (g *Global) AsExtern() *Extern { - ptr := C.wasm_global_as_extern(g.ptr()) - return mkExtern(ptr, g.freelist, g.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/globaltype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/globaltype.go deleted file mode 100644 index b948febaf..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/globaltype.go +++ /dev/null @@ -1,67 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// GlobalType is a ValType, which classify global variables and hold a value and can either be mutable or immutable. -type GlobalType struct { - _ptr *C.wasm_globaltype_t - _owner interface{} -} - -// NewGlobalType creates a new `GlobalType` with the `kind` provided and whether it's -// `mutable` or not -func NewGlobalType(content *ValType, mutable bool) *GlobalType { - mutability := C.WASM_CONST - if mutable { - mutability = C.WASM_VAR - } - contentPtr := C.wasm_valtype_new(C.wasm_valtype_kind(content.ptr())) - runtime.KeepAlive(content) - ptr := C.wasm_globaltype_new(contentPtr, C.wasm_mutability_t(mutability)) - - return mkGlobalType(ptr, nil) -} - -func mkGlobalType(ptr *C.wasm_globaltype_t, owner interface{}) *GlobalType { - globaltype := &GlobalType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(globaltype, func(globaltype *GlobalType) { - C.wasm_globaltype_delete(globaltype._ptr) - }) - } - return globaltype -} - -func (ty *GlobalType) ptr() *C.wasm_globaltype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *GlobalType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// Content returns the type of value stored in this global -func (ty *GlobalType) Content() *ValType { - ptr := C.wasm_globaltype_content(ty.ptr()) - return mkValType(ptr, ty.owner()) -} - -// Mutable returns whether this global type is mutable or not -func (ty *GlobalType) Mutable() bool { - ret := C.wasm_globaltype_mutability(ty.ptr()) == C.WASM_VAR - runtime.KeepAlive(ty) - return ret -} - -// AsExternType converts this type to an instance of `ExternType` -func (ty *GlobalType) AsExternType() *ExternType { - ptr := C.wasm_globaltype_as_externtype_const(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/go.mod b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/go.mod deleted file mode 100644 index 7f140bb0b..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/bytecodealliance/wasmtime-go - -go 1.14 diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/importtype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/importtype.go deleted file mode 100644 index a8f2fced5..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/importtype.go +++ /dev/null @@ -1,82 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// ImportType is one of the imports component -// A module defines a set of imports that are required for instantiation. -type ImportType struct { - _ptr *C.wasm_importtype_t - _owner interface{} -} - -// NewImportType creates a new `ImportType` with the given `module` and `name` and the type -// provided. -func NewImportType(module, name string, ty AsExternType) *ImportType { - moduleVec := stringToByteVec(module) - nameVec := stringToByteVec(name) - - // Creating an import type requires taking ownership, so create a copy - // so we don't have to invalidate pointers here. Shouldn't be too - // costly in theory anyway. - extern := ty.AsExternType() - ptr := C.wasm_externtype_copy(extern.ptr()) - runtime.KeepAlive(extern) - - // And once we've got all that create the import type! - importPtr := C.wasm_importtype_new(&moduleVec, &nameVec, ptr) - - return mkImportType(importPtr, nil) -} - -func mkImportType(ptr *C.wasm_importtype_t, owner interface{}) *ImportType { - importtype := &ImportType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(importtype, func(importtype *ImportType) { - C.wasm_importtype_delete(importtype._ptr) - }) - } - return importtype -} - -func (ty *ImportType) ptr() *C.wasm_importtype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *ImportType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// Module returns the name in the module this import type is importing -func (ty *ImportType) Module() string { - ptr := C.wasm_importtype_module(ty.ptr()) - ret := C.GoStringN(ptr.data, C.int(ptr.size)) - runtime.KeepAlive(ty) - return ret -} - -// Name returns the name in the module this import type is importing. -// -// Note that the returned string may be `nil` with the module linking proposal -// where this field is optional in the import type. -func (ty *ImportType) Name() *string { - ptr := C.wasm_importtype_name(ty.ptr()) - if ptr == nil { - return nil - } - ret := C.GoStringN(ptr.data, C.int(ptr.size)) - runtime.KeepAlive(ty) - return &ret -} - -// Type returns the type of item this import type expects -func (ty *ImportType) Type() *ExternType { - ptr := C.wasm_importtype_type(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/instance.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/instance.go deleted file mode 100644 index c8b105c09..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/instance.go +++ /dev/null @@ -1,160 +0,0 @@ -package wasmtime - -// #include -import "C" -import ( - "runtime" - "unsafe" -) - -// Instance is an instantiated module instance. -// Once a module has been instantiated as an Instance, any exported function can be invoked externally via its function address funcaddr in the store S and an appropriate list val∗ of argument values. -type Instance struct { - _ptr *C.wasm_instance_t - exports map[string]*Extern - exportsPopulated bool - freelist *freeList - _owner interface{} -} - -// NewInstance instantiates a WebAssembly `module` with the `imports` provided. -// -// This function will attempt to create a new wasm instance given the provided -// imports. This can fail if the wrong number of imports are specified, the -// imports aren't of the right type, or for other resource-related issues. -// -// This will also run the `start` function of the instance, returning an error -// if it traps. -func NewInstance(store *Store, module *Module, imports []*Extern) (*Instance, error) { - importsRaw := C.wasm_extern_vec_t{} - C.wasm_extern_vec_new_uninitialized(&importsRaw, C.size_t(len(imports))) - base := unsafe.Pointer(importsRaw.data) - for i, imp := range imports { - ptr := C.wasm_extern_copy(imp.ptr()) - *(**C.wasm_extern_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) = ptr - } - var ptr *C.wasm_instance_t - var err *C.wasmtime_error_t - trap := enterWasm(store.freelist, func(trap **C.wasm_trap_t) { - err = C.wasmtime_instance_new( - store.ptr(), - module.ptr(), - &importsRaw, - &ptr, - trap, - ) - }) - runtime.KeepAlive(store) - runtime.KeepAlive(module) - C.wasm_extern_vec_delete(&importsRaw) - if trap != nil { - return nil, trap - } - if err != nil { - return nil, mkError(err) - } - return mkInstance(ptr, store.freelist, nil), nil -} - -func mkInstance(ptr *C.wasm_instance_t, freelist *freeList, owner interface{}) *Instance { - instance := &Instance{ - _ptr: ptr, - exports: make(map[string]*Extern), - exportsPopulated: false, - freelist: freelist, - _owner: owner, - } - if owner == nil { - runtime.SetFinalizer(instance, func(instance *Instance) { - freelist := instance.freelist - freelist.lock.Lock() - defer freelist.lock.Unlock() - freelist.instances = append(freelist.instances, instance._ptr) - }) - } - return instance -} - -func (i *Instance) ptr() *C.wasm_instance_t { - ret := i._ptr - maybeGC() - return ret -} - -func (i *Instance) owner() interface{} { - if i._owner != nil { - return i._owner - } - return i -} - -// Type returns an `InstanceType` that corresponds for this instance. -func (i *Instance) Type() *InstanceType { - ptr := C.wasm_instance_type(i.ptr()) - runtime.KeepAlive(i) - return mkInstanceType(ptr, nil) -} - -type externList struct { - vec C.wasm_extern_vec_t -} - -// Exports returns a list of exports from this instance. -// -// Each export is returned as a `*Extern` and lines up with the exports list of -// the associated `Module`. -func (i *Instance) Exports() []*Extern { - externs := &externList{} - C.wasm_instance_exports(i.ptr(), &externs.vec) - runtime.KeepAlive(i) - freelist := i.freelist - runtime.SetFinalizer(externs, func(externs *externList) { - freelist.lock.Lock() - defer freelist.lock.Unlock() - freelist.externVecs = append(freelist.externVecs, &externs.vec) - }) - - ret := make([]*Extern, int(externs.vec.size)) - base := unsafe.Pointer(externs.vec.data) - var ptr *C.wasm_extern_t - for i := 0; i < int(externs.vec.size); i++ { - ptr := *(**C.wasm_extern_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) - ty := mkExtern(ptr, freelist, externs) - ret[i] = ty - } - return ret -} - -// GetExport attempts to find an export on this instance by `name` -// -// May return `nil` if this instance has no export named `name` -func (i *Instance) GetExport(name string) *Extern { - if !i.exportsPopulated { - i.populateExports() - } - return i.exports[name] -} - -// GetFunc attemps to find a function on this instance by `name`. -// -// May return `nil` if this instance has no function named `name`, -// it is not a function, etc. -func (i *Instance) GetFunc(name string) *Func { - f := i.GetExport(name) - if f == nil { - return nil - } - return f.Func() -} - -func (i *Instance) populateExports() { - exports := i.Exports() - for j, ty := range i.Type().Exports() { - i.exports[ty.Name()] = exports[j] - } -} - -func (i *Instance) AsExtern() *Extern { - ptr := C.wasm_instance_as_extern(i.ptr()) - return mkExtern(ptr, i.freelist, i.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/instancetype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/instancetype.go deleted file mode 100644 index 7164bcb05..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/instancetype.go +++ /dev/null @@ -1,49 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// InstanceType describes the exports of an instance. -type InstanceType struct { - _ptr *C.wasm_instancetype_t - _owner interface{} -} - -func mkInstanceType(ptr *C.wasm_instancetype_t, owner interface{}) *InstanceType { - instancetype := &InstanceType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(instancetype, func(instancetype *InstanceType) { - C.wasm_instancetype_delete(instancetype._ptr) - }) - } - return instancetype -} - -func (ty *InstanceType) ptr() *C.wasm_instancetype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *InstanceType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// AsExternType converts this type to an instance of `ExternType` -func (ty *InstanceType) AsExternType() *ExternType { - ptr := C.wasm_instancetype_as_externtype_const(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} - -// Exports returns a list of `ExportType` items which are the items that will -// be exported by this instance after instantiation. -func (ty *InstanceType) Exports() []*ExportType { - exports := &exportTypeList{} - C.wasm_instancetype_exports(ty.ptr(), &exports.vec) - runtime.KeepAlive(ty) - return exports.mkGoList() -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/limits.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/limits.go deleted file mode 100644 index 7655dc7b9..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/limits.go +++ /dev/null @@ -1,45 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// LimitsMaxNone is the value for the Max field in Limits -const LimitsMaxNone = 0xffffffff - -// Limits is the resource limits specified for a TableType and MemoryType -type Limits struct { - // The minimum size of this resource, in units specified by the resource - // itself. - Min uint32 - // The maximum size of this resource, in units specified by the resource - // itself. - // - // A value of LimitsMaxNone will mean that there is no maximum. - Max uint32 -} - -// NewLimits creates a new resource limits specified for a TableType and MemoryType, -// in which min and max are the minimum and maximum size of this resource. -func NewLimits(min, max uint32) *Limits { - return &Limits{ - Min: min, - Max: max, - } -} - -func (limits Limits) ffi() C.wasm_limits_t { - return C.wasm_limits_t{ - min: C.uint32_t(limits.Min), - max: C.uint32_t(limits.Max), - } -} - -func mkLimits(ptr *C.wasm_limits_t, owner interface{}) Limits { - ret := Limits{ - Min: uint32(ptr.min), - Max: uint32(ptr.max), - } - runtime.KeepAlive(owner) - return ret -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/linker.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/linker.go deleted file mode 100644 index 851ed4898..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/linker.go +++ /dev/null @@ -1,202 +0,0 @@ -package wasmtime - -// #include -// #include "shims.h" -import "C" -import "runtime" - -// Linker implements a wasmtime Linking module, which can link instantiated modules together. -// More details you can see [examples for C](https://bytecodealliance.github.io/wasmtime/examples-c-linking.html) or -// [examples for Rust](https://bytecodealliance.github.io/wasmtime/examples-rust-linking.html) -type Linker struct { - _ptr *C.wasmtime_linker_t - Store *Store -} - -func NewLinker(store *Store) *Linker { - ptr := C.wasmtime_linker_new(store.ptr()) - runtime.KeepAlive(store) - return mkLinker(ptr, store) -} - -func mkLinker(ptr *C.wasmtime_linker_t, store *Store) *Linker { - linker := &Linker{_ptr: ptr, Store: store} - runtime.SetFinalizer(linker, func(linker *Linker) { - freelist := linker.Store.freelist - freelist.lock.Lock() - defer freelist.lock.Unlock() - freelist.linkers = append(freelist.linkers, linker._ptr) - }) - return linker -} - -func (l *Linker) ptr() *C.wasmtime_linker_t { - ret := l._ptr - maybeGC() - return ret -} - -// AllowShadowing configures whether names can be redefined after they've already been defined -// in this linker. -func (l *Linker) AllowShadowing(allow bool) { - C.wasmtime_linker_allow_shadowing(l.ptr(), C.bool(allow)) - runtime.KeepAlive(l) -} - -// Define defines a new item in this linker with the given module/name pair. Returns -// an error if shadowing is disallowed and the module/name is already defined. -func (l *Linker) Define(module, name string, item AsExtern) error { - extern := item.AsExtern() - err := C.go_linker_define( - l.ptr(), - C._GoStringPtr(module), - C._GoStringLen(module), - C._GoStringPtr(name), - C._GoStringLen(name), - extern.ptr(), - ) - runtime.KeepAlive(l) - runtime.KeepAlive(module) - runtime.KeepAlive(name) - runtime.KeepAlive(extern) - if err == nil { - return nil - } - - return mkError(err) -} - -// DefineFunc acts as a convenience wrapper to calling Define and WrapFunc. -// -// Returns an error if shadowing is disabled and the name is already defined. -func (l *Linker) DefineFunc(module, name string, f interface{}) error { - return l.Define(module, name, WrapFunc(l.Store, f)) -} - -// DefineInstance defines all exports of an instance provided under the module name provided. -// -// Returns an error if shadowing is disabled and names are already defined. -func (l *Linker) DefineInstance(module string, instance *Instance) error { - err := C.go_linker_define_instance( - l.ptr(), - C._GoStringPtr(module), - C._GoStringLen(module), - instance.ptr(), - ) - runtime.KeepAlive(l) - runtime.KeepAlive(module) - runtime.KeepAlive(instance) - if err == nil { - return nil - } - - return mkError(err) -} - -// DefineModule defines automatic instantiations of the module in this linker. -// -// The `name` of the module is the name within the linker, and the `module` is -// the one that's being instantiated. This function automatically handles -// WASI Commands and Reactors for instantiation and initialization. For more -// information see the Rust documentation -- -// https://docs.wasmtime.dev/api/wasmtime/struct.Linker.html#method.module. -func (l *Linker) DefineModule(name string, module *Module) error { - err := C.go_linker_define_module( - l.ptr(), - C._GoStringPtr(name), - C._GoStringLen(name), - module.ptr(), - ) - runtime.KeepAlive(l) - runtime.KeepAlive(name) - runtime.KeepAlive(module) - if err == nil { - return nil - } - - return mkError(err) -} - -// DefineWasi links a WASI module into this linker, ensuring that all exported functions -// are available for linking. -// -// Returns an error if shadowing is disabled and names are already defined. -func (l *Linker) DefineWasi(instance *WasiInstance) error { - err := C.wasmtime_linker_define_wasi(l.ptr(), instance.ptr()) - runtime.KeepAlive(l) - runtime.KeepAlive(instance) - if err == nil { - return nil - } - - return mkError(err) -} - -// Instantiate instantates a module with all imports defined in this linker. -// -// Returns an error if the instance's imports couldn't be satisfied, had the -// wrong types, or if a trap happened executing the start function. -func (l *Linker) Instantiate(module *Module) (*Instance, error) { - var ret *C.wasm_instance_t - var err *C.wasmtime_error_t - trap := enterWasm(l.Store.freelist, func(trap **C.wasm_trap_t) { - err = C.wasmtime_linker_instantiate(l.ptr(), module.ptr(), &ret, trap) - }) - runtime.KeepAlive(l) - runtime.KeepAlive(module) - if trap != nil { - return nil, trap - } - if err != nil { - return nil, mkError(err) - } - return mkInstance(ret, l.Store.freelist, nil), nil -} - -// GetDefault acquires the "default export" of the named module in this linker. -// -// If there is no default item then an error is returned, otherwise the default -// function is returned. -// -// For more information see the Rust documentation -- -// https://docs.wasmtime.dev/api/wasmtime/struct.Linker.html#method.get_default. -func (l *Linker) GetDefault(name string) (*Func, error) { - var ret *C.wasm_func_t - err := C.go_linker_get_default( - l.ptr(), - C._GoStringPtr(name), - C._GoStringLen(name), - &ret, - ) - runtime.KeepAlive(l) - runtime.KeepAlive(name) - if err != nil { - return nil, mkError(err) - } - return mkFunc(ret, l.Store.freelist, nil), nil - -} - -// GetOneByName loads an item by name from this linker. -// -// If the item isn't defined then an error is returned, otherwise the item is -// returned. -func (l *Linker) GetOneByName(module, name string) (*Extern, error) { - var ret *C.wasm_extern_t - err := C.go_linker_get_one_by_name( - l.ptr(), - C._GoStringPtr(module), - C._GoStringLen(module), - C._GoStringPtr(name), - C._GoStringLen(name), - &ret, - ) - runtime.KeepAlive(l) - runtime.KeepAlive(name) - runtime.KeepAlive(module) - if err != nil { - return nil, mkError(err) - } - return mkExtern(ret, l.Store.freelist, nil), nil - -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/maybe_gc_actual.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/maybe_gc_actual.go deleted file mode 100644 index 7ef37c434..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/maybe_gc_actual.go +++ /dev/null @@ -1,11 +0,0 @@ -// +build debug - -package wasmtime - -// See `ffi.go` documentation about `ptr()` for what's going on here. - -import "runtime" - -func maybeGC() { - runtime.GC() -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/maybe_gc_no.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/maybe_gc_no.go deleted file mode 100644 index 5b8f39821..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/maybe_gc_no.go +++ /dev/null @@ -1,8 +0,0 @@ -// +build !debug - -package wasmtime - -// See `ffi.go` documentation about `ptr()` for what's going on here. - -func maybeGC() { -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/memory.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/memory.go deleted file mode 100644 index ce7bddd73..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/memory.go +++ /dev/null @@ -1,111 +0,0 @@ -package wasmtime - -// #include -import "C" -import ( - "runtime" - "unsafe" -) - -// Memory instance is the runtime representation of a linear memory. -// It holds a vector of bytes and an optional maximum size, if one was specified at the definition site of the memory. -// Read more in [spec](https://webassembly.github.io/spec/core/exec/runtime.html#memory-instances) -// In wasmtime-go, you can get the vector of bytes by the unsafe pointer of memory from `Memory.Data()`, or go style byte slice from `Memory.UnsafeData()` -type Memory struct { - _ptr *C.wasm_memory_t - freelist *freeList - _owner interface{} -} - -// NewMemory creates a new `Memory` in the given `Store` with the specified `ty`. -func NewMemory(store *Store, ty *MemoryType) *Memory { - ptr := C.wasm_memory_new(store.ptr(), ty.ptr()) - runtime.KeepAlive(store) - runtime.KeepAlive(ty) - return mkMemory(ptr, store.freelist, nil) -} - -func mkMemory(ptr *C.wasm_memory_t, freelist *freeList, owner interface{}) *Memory { - f := &Memory{_ptr: ptr, _owner: owner, freelist: freelist} - if owner == nil { - runtime.SetFinalizer(f, func(f *Memory) { - f.freelist.lock.Lock() - defer f.freelist.lock.Unlock() - f.freelist.memories = append(f.freelist.memories, f._ptr) - }) - } - return f -} - -func (mem *Memory) ptr() *C.wasm_memory_t { - ret := mem._ptr - maybeGC() - return ret -} - -func (mem *Memory) owner() interface{} { - if mem._owner != nil { - return mem._owner - } - return mem -} - -// Type returns the type of this memory -func (mem *Memory) Type() *MemoryType { - ptr := C.wasm_memory_type(mem.ptr()) - runtime.KeepAlive(mem) - return mkMemoryType(ptr, nil) -} - -// Data returns the raw pointer in memory of where this memory starts -func (mem *Memory) Data() unsafe.Pointer { - ret := unsafe.Pointer(C.wasm_memory_data(mem.ptr())) - runtime.KeepAlive(mem) - return ret -} - -// UnsafeData returns the raw memory backed by this `Memory` as a byte slice (`[]byte`). -// -// This is not a safe method to call, hence the "unsafe" in the name. The byte -// slice returned from this function is not managed by the Go garbage collector. -// You need to ensure that `m`, the original `Memory`, lives longer than the -// `[]byte` returned. -// -// Note that you may need to use `runtime.KeepAlive` to keep the original memory -// `m` alive for long enough while you're using the `[]byte` slice. If the -// `[]byte` slice is used after `m` is GC'd then that is undefined behavior. -func (mem *Memory) UnsafeData() []byte { - // see https://github.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices - const MaxLen = 1 << 32 - length := mem.DataSize() - if length >= MaxLen { - panic("memory is too big") - } - return (*[MaxLen]byte)(mem.Data())[:length:length] -} - -// DataSize returns the size, in bytes, that `Data()` is valid for -func (mem *Memory) DataSize() uintptr { - ret := uintptr(C.wasm_memory_data_size(mem.ptr())) - runtime.KeepAlive(mem) - return ret -} - -// Size returns the size, in wasm pages, of this memory -func (mem *Memory) Size() uint32 { - ret := uint32(C.wasm_memory_size(mem.ptr())) - runtime.KeepAlive(mem) - return ret -} - -// Grow grows this memory by `delta` pages -func (mem *Memory) Grow(delta uint) bool { - ret := C.wasm_memory_grow(mem.ptr(), C.wasm_memory_pages_t(delta)) - runtime.KeepAlive(mem) - return bool(ret) -} - -func (mem *Memory) AsExtern() *Extern { - ptr := C.wasm_memory_as_extern(mem.ptr()) - return mkExtern(ptr, mem.freelist, mem.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/memorytype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/memorytype.go deleted file mode 100644 index fb354cf7b..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/memorytype.go +++ /dev/null @@ -1,54 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// MemoryType is one of Memory types which classify linear memories and their size range. -// The limits constrain the minimum and optionally the maximum size of a memory. The limits are given in units of page size. -type MemoryType struct { - _ptr *C.wasm_memorytype_t - _owner interface{} -} - -// NewMemoryType creates a new `MemoryType` with the `limits` on size provided -func NewMemoryType(limits Limits) *MemoryType { - limitsFFI := limits.ffi() - ptr := C.wasm_memorytype_new(&limitsFFI) - return mkMemoryType(ptr, nil) -} - -func mkMemoryType(ptr *C.wasm_memorytype_t, owner interface{}) *MemoryType { - memorytype := &MemoryType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(memorytype, func(memorytype *MemoryType) { - C.wasm_memorytype_delete(memorytype._ptr) - }) - } - return memorytype -} - -func (ty *MemoryType) ptr() *C.wasm_memorytype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *MemoryType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// Limits returns the limits on the size of this memory type -func (ty *MemoryType) Limits() Limits { - ptr := C.wasm_memorytype_limits(ty.ptr()) - return mkLimits(ptr, ty.owner()) -} - -// AsExternType converts this type to an instance of `ExternType` -func (ty *MemoryType) AsExternType() *ExternType { - ptr := C.wasm_memorytype_as_externtype_const(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/module.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/module.go deleted file mode 100644 index 47f75136d..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/module.go +++ /dev/null @@ -1,260 +0,0 @@ -package wasmtime - -// #include -// -// wasmtime_error_t *go_module_new(wasm_engine_t *engine, uint8_t *bytes, size_t len, wasm_module_t **ret) { -// wasm_byte_vec_t vec; -// vec.data = (wasm_byte_t*) bytes; -// vec.size = len; -// return wasmtime_module_new(engine, &vec, ret); -// } -// -// wasmtime_error_t *go_module_validate(wasm_store_t *store, uint8_t *bytes, size_t len) { -// wasm_byte_vec_t vec; -// vec.data = (wasm_byte_t*) bytes; -// vec.size = len; -// return wasmtime_module_validate(store, &vec); -// } -// -// wasmtime_error_t *go_module_deserialize(wasm_engine_t *engine, uint8_t *bytes, size_t len, wasm_module_t **ret) { -// wasm_byte_vec_t vec; -// vec.data = (wasm_byte_t*) bytes; -// vec.size = len; -// return wasmtime_module_deserialize(engine, &vec, ret); -// } -import "C" -import ( - "io/ioutil" - "runtime" - "unsafe" -) - -// Module is a module which collects definitions for types, functions, tables, memories, and globals. -// In addition, it can declare imports and exports and provide initialization logic in the form of data and element segments or a start function. -// Modules organized WebAssembly programs as the unit of deployment, loading, and compilation. -type Module struct { - _ptr *C.wasm_module_t - _owner interface{} -} - -// NewModule compiles a new `Module` from the `wasm` provided with the given configuration -// in `engine`. -func NewModule(engine *Engine, wasm []byte) (*Module, error) { - // We can't create the `wasm_byte_vec_t` here and pass it in because - // that runs into the error of "passed a pointer to a pointer" because - // the vec itself is passed by pointer and it contains a pointer to - // `wasm`. To work around this we insert some C shims above and call - // them. - var wasmPtr *C.uint8_t - if len(wasm) > 0 { - wasmPtr = (*C.uint8_t)(unsafe.Pointer(&wasm[0])) - } - var ptr *C.wasm_module_t - err := C.go_module_new(engine.ptr(), wasmPtr, C.size_t(len(wasm)), &ptr) - runtime.KeepAlive(engine) - runtime.KeepAlive(wasm) - - if err != nil { - return nil, mkError(err) - } - - return mkModule(ptr, nil), nil -} - -// NewModuleFromFile reads the contents of the `file` provided and interprets them as either the -// text format or the binary format for WebAssembly. -// -// Afterwards delegates to the `NewModule` constructor with the contents read. -func NewModuleFromFile(engine *Engine, file string) (*Module, error) { - wasm, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - // If this wasm isn't actually wasm, treat it as the text format and - // parse it as such. - if len(wasm) > 0 && wasm[0] != 0 { - wasm, err = Wat2Wasm(string(wasm)) - if err != nil { - return nil, err - } - } - return NewModule(engine, wasm) - -} - -// ModuleValidate validates whether `wasm` would be a valid wasm module according to the -// configuration in `store` -func ModuleValidate(store *Store, wasm []byte) error { - var wasmPtr *C.uint8_t - if len(wasm) > 0 { - wasmPtr = (*C.uint8_t)(unsafe.Pointer(&wasm[0])) - } - err := C.go_module_validate(store.ptr(), wasmPtr, C.size_t(len(wasm))) - runtime.KeepAlive(store) - runtime.KeepAlive(wasm) - if err == nil { - return nil - } - - return mkError(err) -} - -func mkModule(ptr *C.wasm_module_t, owner interface{}) *Module { - module := &Module{_ptr: ptr} - if owner == nil { - runtime.SetFinalizer(module, func(module *Module) { - C.wasm_module_delete(module._ptr) - }) - } - return module -} - -func (m *Module) ptr() *C.wasm_module_t { - ret := m._ptr - maybeGC() - return ret -} - -func (m *Module) owner() interface{} { - if m._owner != nil { - return m._owner - } - return m -} - -// Type returns a `ModuleType` that corresponds for this module. -func (m *Module) Type() *ModuleType { - ptr := C.wasm_module_type(m.ptr()) - runtime.KeepAlive(m) - return mkModuleType(ptr, nil) -} - -type importTypeList struct { - vec C.wasm_importtype_vec_t -} - -func (list *importTypeList) mkGoList() []*ImportType { - runtime.SetFinalizer(list, func(imports *importTypeList) { - C.wasm_importtype_vec_delete(&imports.vec) - }) - - ret := make([]*ImportType, int(list.vec.size)) - base := unsafe.Pointer(list.vec.data) - var ptr *C.wasm_importtype_t - for i := 0; i < int(list.vec.size); i++ { - ptr := *(**C.wasm_importtype_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) - ty := mkImportType(ptr, list) - ret[i] = ty - } - return ret -} - -// Imports returns a list of `ImportType` items which are the items imported by this -// module and are required for instantiation. -func (m *Module) Imports() []*ImportType { - imports := &importTypeList{} - C.wasm_module_imports(m.ptr(), &imports.vec) - runtime.KeepAlive(m) - runtime.SetFinalizer(imports, func(imports *importTypeList) { - C.wasm_importtype_vec_delete(&imports.vec) - }) - - ret := make([]*ImportType, int(imports.vec.size)) - base := unsafe.Pointer(imports.vec.data) - var ptr *C.wasm_importtype_t - for i := 0; i < int(imports.vec.size); i++ { - ptr := *(**C.wasm_importtype_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) - ty := mkImportType(ptr, imports) - ret[i] = ty - } - return ret -} - -type exportTypeList struct { - vec C.wasm_exporttype_vec_t -} - -func (list *exportTypeList) mkGoList() []*ExportType { - runtime.SetFinalizer(list, func(exports *exportTypeList) { - C.wasm_exporttype_vec_delete(&exports.vec) - }) - - ret := make([]*ExportType, int(list.vec.size)) - base := unsafe.Pointer(list.vec.data) - var ptr *C.wasm_exporttype_t - for i := 0; i < int(list.vec.size); i++ { - ptr := *(**C.wasm_exporttype_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) - ty := mkExportType(ptr, list) - ret[i] = ty - } - return ret -} - -// Exports returns a list of `ExportType` items which are the items that will -// be exported by this module after instantiation. -func (m *Module) Exports() []*ExportType { - exports := &exportTypeList{} - C.wasm_module_exports(m.ptr(), &exports.vec) - runtime.KeepAlive(m) - return exports.mkGoList() -} - -// NewModuleDeserialize decodes and deserializes in-memory bytes previously -// produced by `module.Serialize()`. -// -// This function does not take a WebAssembly binary as input. It takes -// as input the results of a previous call to `Serialize()`, and only takes -// that as input. -// -// If deserialization is successful then a compiled module is returned, -// otherwise nil and an error are returned. -// -// Note that to deserialize successfully the bytes provided must have beeen -// produced with an `Engine` that has the same commpilation options as the -// provided engine, and from the same version of this library. -func NewModuleDeserialize(engine *Engine, encoded []byte) (*Module, error) { - var encodedPtr *C.uint8_t - var ptr *C.wasm_module_t - if len(encoded) > 0 { - encodedPtr = (*C.uint8_t)(unsafe.Pointer(&encoded[0])) - } - err := C.go_module_deserialize( - engine.ptr(), - encodedPtr, - C.size_t(len(encoded)), - &ptr, - ) - runtime.KeepAlive(engine) - runtime.KeepAlive(encoded) - - if err != nil { - return nil, mkError(err) - } - - return mkModule(ptr, nil), nil -} - -// Serialize will convert this in-memory compiled module into a list of bytes. -// -// The purpose of this method is to extract an artifact which can be stored -// elsewhere from this `Module`. The returned bytes can, for example, be stored -// on disk or in an object store. The `NewModuleDeserialize` function can be -// used to deserialize the returned bytes at a later date to get the module -// back. -func (m *Module) Serialize() ([]byte, error) { - retVec := C.wasm_byte_vec_t{} - err := C.wasmtime_module_serialize(m.ptr(), &retVec) - runtime.KeepAlive(m) - - if err != nil { - return nil, mkError(err) - } - ret := C.GoBytes(unsafe.Pointer(retVec.data), C.int(retVec.size)) - C.wasm_byte_vec_delete(&retVec) - return ret, nil -} - -func (m *Module) AsExtern() *Extern { - ptr := C.wasm_module_as_extern(m.ptr()) - return mkExtern(ptr, nil, m.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/moduletype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/moduletype.go deleted file mode 100644 index 8fb0ba71d..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/moduletype.go +++ /dev/null @@ -1,58 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// ModuleType describes the imports/exports of a module. -type ModuleType struct { - _ptr *C.wasm_moduletype_t - _owner interface{} -} - -func mkModuleType(ptr *C.wasm_moduletype_t, owner interface{}) *ModuleType { - moduletype := &ModuleType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(moduletype, func(moduletype *ModuleType) { - C.wasm_moduletype_delete(moduletype._ptr) - }) - } - return moduletype -} - -func (ty *ModuleType) ptr() *C.wasm_moduletype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *ModuleType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// AsExternType converts this type to an instance of `ExternType` -func (ty *ModuleType) AsExternType() *ExternType { - ptr := C.wasm_moduletype_as_externtype_const(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} - -// Imports returns a list of `ImportType` items which are the items imported by -// this module and are required for instantiation. -func (m *ModuleType) Imports() []*ImportType { - imports := &importTypeList{} - C.wasm_moduletype_imports(m.ptr(), &imports.vec) - runtime.KeepAlive(m) - return imports.mkGoList() -} - -// Exports returns a list of `ExportType` items which are the items that will -// be exported by this module after instantiation. -func (m *ModuleType) Exports() []*ExportType { - exports := &exportTypeList{} - C.wasm_moduletype_exports(m.ptr(), &exports.vec) - runtime.KeepAlive(m) - return exports.mkGoList() -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/shims.c b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/shims.c deleted file mode 100644 index 84ed37d79..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/shims.c +++ /dev/null @@ -1,133 +0,0 @@ -#include "_cgo_export.h" -#include "shims.h" - -static wasm_trap_t* trampoline( - const wasmtime_caller_t *caller, - void *env, - const wasm_val_vec_t *args, - wasm_val_vec_t *results -) { - return goTrampolineNew((wasmtime_caller_t*) caller, (size_t) env, (wasm_val_vec_t*) args, results); -} - -static wasm_trap_t* wrap_trampoline( - const wasmtime_caller_t *caller, - void *env, - const wasm_val_vec_t *args, - wasm_val_vec_t *results -) { - return goTrampolineWrap((wasmtime_caller_t*) caller, (size_t) env, (wasm_val_vec_t*) args, results); -} - -wasm_func_t *c_func_new_with_env(wasm_store_t *store, wasm_functype_t *ty, size_t env, int wrap) { - if (wrap) - return wasmtime_func_new_with_env(store, ty, wrap_trampoline, (void*) env, goFinalizeWrap); - return wasmtime_func_new_with_env(store, ty, trampoline, (void*) env, goFinalizeNew); -} - -wasmtime_error_t *go_wasmtime_func_call( - wasm_func_t *func, - const wasm_val_vec_t *args, - wasm_val_vec_t *results, - wasm_trap_t **trap -) { - wasmtime_error_t *ret = wasmtime_func_call(func, args, results, trap); - return ret; -} - -wasm_extern_t* go_caller_export_get( - const wasmtime_caller_t* caller, - char *name_ptr, - size_t name_len -) { - wasm_byte_vec_t name; - name.data = name_ptr; - name.size = name_len; - return wasmtime_caller_export_get(caller, &name); -} - -wasmtime_error_t* go_linker_define( - wasmtime_linker_t *linker, - char *module_ptr, - size_t module_len, - char *name_ptr, - size_t name_len, - wasm_extern_t *item -) { - wasm_byte_vec_t module; - module.data = module_ptr; - module.size = module_len; - wasm_byte_vec_t name; - name.data = name_ptr; - name.size = name_len; - return wasmtime_linker_define(linker, &module, &name, item); -} - -wasmtime_error_t* go_linker_define_instance( - wasmtime_linker_t *linker, - char *name_ptr, - size_t name_len, - wasm_instance_t *instance -) { - wasm_byte_vec_t name; - name.data = name_ptr; - name.size = name_len; - return wasmtime_linker_define_instance(linker, &name, instance); -} - -wasmtime_error_t* go_linker_define_module( - wasmtime_linker_t *linker, - char *name_ptr, - size_t name_len, - wasm_module_t *module -) { - wasm_byte_vec_t name; - name.data = name_ptr; - name.size = name_len; - return wasmtime_linker_module(linker, &name, module); -} - -wasmtime_error_t* go_linker_get_default( - wasmtime_linker_t *linker, - char *name_ptr, - size_t name_len, - wasm_func_t **func -) { - wasm_byte_vec_t name; - name.data = name_ptr; - name.size = name_len; - return wasmtime_linker_get_default(linker, &name, func); -} - -wasmtime_error_t* go_linker_get_one_by_name( - wasmtime_linker_t *linker, - char *module_ptr, - size_t module_len, - char *name_ptr, - size_t name_len, - wasm_extern_t **item -) { - wasm_byte_vec_t module, name; - module.data = module_ptr; - module.size = module_len; - name.data = name_ptr; - name.size = name_len; - return wasmtime_linker_get_one_by_name(linker, &module,&name, item); -} - -void go_externref_new_with_finalizer( - size_t env, - wasm_val_t *valp -) { - wasmtime_externref_new_with_finalizer((void*) env, goFinalizeExternref, valp); -} - -void go_init_i32(wasm_val_t *val, int32_t i) { val->of.i32 = i; } -void go_init_i64(wasm_val_t *val, int64_t i) { val->of.i64 = i; } -void go_init_f32(wasm_val_t *val, float i) { val->of.f32 = i; } -void go_init_f64(wasm_val_t *val, double i) { val->of.f64 = i; } - -int32_t go_get_i32(wasm_val_t *val) { return val->of.i32; } -int64_t go_get_i64(wasm_val_t *val) { return val->of.i64; } -float go_get_f32(wasm_val_t *val) { return val->of.f32; } -double go_get_f64(wasm_val_t *val) { return val->of.f64; } diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/shims.h b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/shims.h deleted file mode 100644 index 50fda7867..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/shims.h +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include - -wasm_func_t *c_func_new_with_env(wasm_store_t *store, wasm_functype_t *ty, size_t env, int wrap); -wasm_extern_t* go_caller_export_get(const wasmtime_caller_t* caller, char *name_ptr, size_t name_len); -wasmtime_error_t* go_linker_define( - wasmtime_linker_t *linker, - char *module_ptr, - size_t module_len, - char *name_ptr, - size_t name_len, - wasm_extern_t *item -); -wasmtime_error_t* go_linker_define_instance( - wasmtime_linker_t *linker, - char *name_ptr, - size_t name_len, - wasm_instance_t *item -); -wasmtime_error_t* go_linker_define_module( - wasmtime_linker_t *linker, - char *name_ptr, - size_t name_len, - wasm_module_t *item -); -wasmtime_error_t* go_linker_get_default( - wasmtime_linker_t *linker, - char *name_ptr, - size_t name_len, - wasm_func_t **func -); -wasmtime_error_t* go_linker_get_one_by_name( - wasmtime_linker_t *linker, - char *module_ptr, - size_t module_len, - char *name_ptr, - size_t name_len, - wasm_extern_t **item -); -void go_externref_new_with_finalizer( - size_t env, - wasm_val_t *valp -); -wasmtime_error_t *go_wasmtime_func_call( - wasm_func_t *func, - const wasm_val_vec_t *args, - wasm_val_vec_t *results, - wasm_trap_t **trap -); -void go_init_i32(wasm_val_t *val, int32_t i); -void go_init_i64(wasm_val_t *val, int64_t i); -void go_init_f32(wasm_val_t *val, float i); -void go_init_f64(wasm_val_t *val, double i); - -int32_t go_get_i32(wasm_val_t *val); -int64_t go_get_i64(wasm_val_t *val); -float go_get_f32(wasm_val_t *val); -double go_get_f64(wasm_val_t *val); diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/slab.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/slab.go deleted file mode 100644 index decc62250..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/slab.go +++ /dev/null @@ -1,20 +0,0 @@ -package wasmtime - -type slab struct { - list []int - next int -} - -func (s *slab) allocate() int { - if s.next == len(s.list) { - s.list = append(s.list, s.next+1) - } - ret := s.next - s.next = s.list[ret] - return ret -} - -func (s *slab) deallocate(slot int) { - s.list[slot] = s.next - s.next = slot -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/store.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/store.go deleted file mode 100644 index 2b2e4d0a0..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/store.go +++ /dev/null @@ -1,90 +0,0 @@ -package wasmtime - -// #include -// #include -import "C" -import ( - "errors" - "runtime" -) - -// Store is a general group of wasm instances, and many objects -// must all be created with and reference the same `Store` -type Store struct { - _ptr *C.wasm_store_t - freelist *freeList - Engine *Engine -} - -// NewStore creates a new `Store` from the configuration provided in `engine` -func NewStore(engine *Engine) *Store { - store := &Store{ - _ptr: C.wasm_store_new(engine.ptr()), - freelist: newFreeList(), - Engine: engine, - } - runtime.KeepAlive(engine) - runtime.SetFinalizer(store, func(store *Store) { - freelist := store.freelist - freelist.lock.Lock() - defer freelist.lock.Unlock() - freelist.stores = append(freelist.stores, store._ptr) - }) - return store -} - -func (store *Store) InterruptHandle() (*InterruptHandle, error) { - ptr := C.wasmtime_interrupt_handle_new(store.ptr()) - runtime.KeepAlive(store) - if ptr == nil { - return nil, errors.New("interrupts not enabled in `Config`") - } - - handle := &InterruptHandle{_ptr: ptr} - runtime.SetFinalizer(handle, func(handle *InterruptHandle) { - C.wasmtime_interrupt_handle_delete(handle._ptr) - }) - return handle, nil -} - -// GC will clean up any `externref` values that are no longer actually -// referenced. -// -// This function is not required to be called for correctness, it's only an -// optimization if desired to clean out any extra `externref` values. -func (store *Store) GC() { - C.wasmtime_store_gc(store.ptr()) - runtime.KeepAlive(store) -} - -func (store *Store) ptr() *C.wasm_store_t { - store.freelist.clear() - ret := store._ptr - maybeGC() - return ret -} - -// InterruptHandle is used to interrupt the execution of currently running -// wasm code. -// -// For more information see -// https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Store.html#method.interrupt_handle -type InterruptHandle struct { - _ptr *C.wasmtime_interrupt_handle_t -} - -// Interrupt interrupts currently executing WebAssembly code, if it's currently running, -// or interrupts wasm the next time it starts running. -// -// For more information see -// https://bytecodealliance.github.io/wasmtime/api/wasmtime/struct.Store.html#method.interrupt_handle -func (i *InterruptHandle) Interrupt() { - C.wasmtime_interrupt_handle_interrupt(i.ptr()) - runtime.KeepAlive(i) -} - -func (i *InterruptHandle) ptr() *C.wasmtime_interrupt_handle_t { - ret := i._ptr - maybeGC() - return ret -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/table.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/table.go deleted file mode 100644 index c05610fa5..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/table.go +++ /dev/null @@ -1,169 +0,0 @@ -package wasmtime - -// #include -// -// wasm_ref_t *go_get_ref(wasm_val_t *val) { return val->of.ref; } -// void go_init_ref(wasm_val_t *val, wasm_ref_t *i) { val->of.ref = i; } -import "C" -import ( - "errors" - "runtime" -) - -// Table is a table instance, which is the runtime representation of a table. -// -// It holds a vector of reference types and an optional maximum size, if one was -// specified in the table type at the table’s definition site. -// Read more in [spec](https://webassembly.github.io/spec/core/exec/runtime.html#table-instances) -type Table struct { - _ptr *C.wasm_table_t - _owner interface{} - freelist *freeList -} - -// NewTable creates a new `Table` in the given `Store` with the specified `ty`. -// -// The `ty` must be a reference type (`funref` or `externref`) and `init` -// is the initial value for all table slots and must have the type specified by -// `ty`. -func NewTable(store *Store, ty *TableType, init Val) (*Table, error) { - initPtr, err := getRefPtr(init) - if err != nil { - return nil, err - } - ptr := C.wasm_table_new(store.ptr(), ty.ptr(), initPtr) - runtime.KeepAlive(store) - runtime.KeepAlive(ty) - runtime.KeepAlive(init) - if ptr == nil { - return nil, errors.New("failed to create table") - } - return mkTable(ptr, store.freelist, nil), nil -} - -func mkTable(ptr *C.wasm_table_t, freelist *freeList, owner interface{}) *Table { - f := &Table{_ptr: ptr, _owner: owner, freelist: freelist} - if owner == nil { - runtime.SetFinalizer(f, func(f *Table) { - f.freelist.lock.Lock() - defer f.freelist.lock.Unlock() - f.freelist.tables = append(f.freelist.tables, f._ptr) - }) - } - return f -} - -func (t *Table) ptr() *C.wasm_table_t { - ret := t._ptr - maybeGC() - return ret -} - -func (t *Table) owner() interface{} { - if t._owner != nil { - return t._owner - } - return t -} - -// Size returns the size of this table in units of elements. -func (t *Table) Size() uint32 { - ret := C.wasm_table_size(t.ptr()) - runtime.KeepAlive(t) - return uint32(ret) -} - -// Grow grows this table by the number of units specified, using the -// specified initializer value for new slots. -// -// Returns an error if the table failed to grow, or the previous size of the -// table if growth was successful. -func (t *Table) Grow(delta uint32, init Val) (uint32, error) { - if t.Type().Element().Kind() != init.Kind() { - return 0, errors.New("wrong type of initializer passed to `Grow`") - } - ptr, err := getRefPtr(init) - if err != nil { - return 0, err - } - ok := C.wasm_table_grow(t.ptr(), C.uint32_t(delta), ptr) - runtime.KeepAlive(t) - runtime.KeepAlive(init) - if ok { - return t.Size() - delta, nil - } - - return 0, errors.New("failed to grow table") -} - -func (t *Table) nullValue() Val { - switch t.Type().Element().Kind() { - case KindFuncref: - return ValFuncref(nil) - case KindExternref: - return ValExternref(nil) - default: - panic("unsupported table type") - } -} - -// Get gets an item from this table from the specified index. -// -// Returns an error if the index is out of bounds, or returns a value (which -// may be internally null) if the index is in bounds corresponding to the entry -// at the specified index. -func (t *Table) Get(idx uint32) (Val, error) { - null := t.nullValue() - if idx >= t.Size() { - return null, errors.New("index out of bounds") - } - valPtr := C.wasm_table_get(t.ptr(), C.uint32_t(idx)) - runtime.KeepAlive(t) - if valPtr == nil { - return null, nil - } - C.go_init_ref(null.ptr(), valPtr) - ret := takeVal(null.ptr(), t.freelist) - runtime.KeepAlive(null) - return ret, nil -} - -// Set sets an item in this table at the specified index. -// -// Returns an error if the index is out of bounds. -func (t *Table) Set(idx uint32, val Val) error { - if t.Type().Element().Kind() != val.Kind() { - return errors.New("wrong type of initializer passed to `Grow`") - } - ptr, err := getRefPtr(val) - if err != nil { - return err - } - ok := C.wasm_table_set(t.ptr(), C.uint32_t(idx), ptr) - runtime.KeepAlive(t) - runtime.KeepAlive(val) - if !ok { - return errors.New("failed to set table index") - } - return nil -} - -// Type returns the underlying type of this table -func (t *Table) Type() *TableType { - ptr := C.wasm_table_type(t.ptr()) - runtime.KeepAlive(t) - return mkTableType(ptr, nil) -} - -func (t *Table) AsExtern() *Extern { - ptr := C.wasm_table_as_extern(t.ptr()) - return mkExtern(ptr, t.freelist, t.owner()) -} - -func getRefPtr(val Val) (*C.wasm_ref_t, error) { - switch val.Kind() { - case KindExternref, KindFuncref: - return C.go_get_ref(val.ptr()), nil - } - return nil, errors.New("not a reference type") -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/tabletype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/tabletype.go deleted file mode 100644 index a7a293006..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/tabletype.go +++ /dev/null @@ -1,63 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// TableType is one of table types which classify tables over elements of element types within a size range. -type TableType struct { - _ptr *C.wasm_tabletype_t - _owner interface{} -} - -// NewTableType creates a new `TableType` with the `element` type provided as well as -// `limits` on its size. -func NewTableType(element *ValType, limits Limits) *TableType { - valptr := C.wasm_valtype_new(C.wasm_valtype_kind(element.ptr())) - runtime.KeepAlive(element) - limitsFFI := limits.ffi() - ptr := C.wasm_tabletype_new(valptr, &limitsFFI) - - return mkTableType(ptr, nil) -} - -func mkTableType(ptr *C.wasm_tabletype_t, owner interface{}) *TableType { - tabletype := &TableType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(tabletype, func(tabletype *TableType) { - C.wasm_tabletype_delete(tabletype._ptr) - }) - } - return tabletype -} - -func (ty *TableType) ptr() *C.wasm_tabletype_t { - ret := ty._ptr - maybeGC() - return ret -} - -func (ty *TableType) owner() interface{} { - if ty._owner != nil { - return ty._owner - } - return ty -} - -// Element returns the type of value stored in this table -func (ty *TableType) Element() *ValType { - ptr := C.wasm_tabletype_element(ty.ptr()) - return mkValType(ptr, ty.owner()) -} - -// Limits returns limits on the size of this table type -func (ty *TableType) Limits() Limits { - ptr := C.wasm_tabletype_limits(ty.ptr()) - return mkLimits(ptr, ty.owner()) -} - -// AsExternType converts this type to an instance of `ExternType` -func (ty *TableType) AsExternType() *ExternType { - ptr := C.wasm_tabletype_as_externtype_const(ty.ptr()) - return mkExternType(ptr, ty.owner()) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/trap.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/trap.go deleted file mode 100644 index ce12bd831..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/trap.go +++ /dev/null @@ -1,151 +0,0 @@ -package wasmtime - -// #include -// #include -// #include -import "C" - -import ( - "runtime" - "unsafe" -) - -// Trap is the trap instruction which represents the occurrence of a trap. -// Traps are bubbled up through nested instruction sequences, ultimately reducing the entire program to a single trap instruction, signalling abrupt termination. -type Trap struct { - _ptr *C.wasm_trap_t -} - -// Frame is one of activation frames which carry the return arity n of the respective function, -// hold the values of its locals (including arguments) in the order corresponding to their static local indices, -// and a reference to the function’s own module instance -type Frame struct { - _ptr *C.wasm_frame_t - _owner interface{} -} - -// NewTrap creates a new `Trap` with the `name` and the type provided. -func NewTrap(store *Store, message string) *Trap { - cs := C.CString(message) - messageVec := C.wasm_byte_vec_t{ - data: cs, - size: C.size_t(len(message) + 1), - } - ptr := C.wasm_trap_new(store.ptr(), &messageVec) - C.free(unsafe.Pointer(cs)) - runtime.KeepAlive(store) - return mkTrap(ptr) -} - -func mkTrap(ptr *C.wasm_trap_t) *Trap { - trap := &Trap{_ptr: ptr} - runtime.SetFinalizer(trap, func(trap *Trap) { - C.wasm_trap_delete(trap._ptr) - }) - return trap -} - -func (t *Trap) ptr() *C.wasm_trap_t { - ret := t._ptr - maybeGC() - return ret -} - -// Message returns the name in the module this export type is exporting -func (t *Trap) Message() string { - message := C.wasm_byte_vec_t{} - C.wasm_trap_message(t.ptr(), &message) - ret := C.GoStringN(message.data, C.int(message.size-1)) - runtime.KeepAlive(t) - C.wasm_byte_vec_delete(&message) - return ret -} - -func (t *Trap) Error() string { - return t.Message() -} - -func unwrapStrOr(s *string, other string) string { - if s == nil { - return other - } - - return *s -} - -type frameList struct { - vec C.wasm_frame_vec_t -} - -// Frames returns the wasm function frames that make up this trap -func (t *Trap) Frames() []*Frame { - frames := &frameList{} - C.wasm_trap_trace(t.ptr(), &frames.vec) - runtime.KeepAlive(t) - runtime.SetFinalizer(frames, func(frames *frameList) { - C.wasm_frame_vec_delete(&frames.vec) - }) - - ret := make([]*Frame, int(frames.vec.size)) - base := unsafe.Pointer(frames.vec.data) - var ptr *C.wasm_frame_t - for i := 0; i < int(frames.vec.size); i++ { - ptr := *(**C.wasm_frame_t)(unsafe.Pointer(uintptr(base) + unsafe.Sizeof(ptr)*uintptr(i))) - ret[i] = &Frame{ - _ptr: ptr, - _owner: frames, - } - } - return ret -} - -func (f *Frame) ptr() *C.wasm_frame_t { - ret := f._ptr - maybeGC() - return ret -} - -// FuncIndex returns the function index in the wasm module that this frame represents -func (f *Frame) FuncIndex() uint32 { - ret := C.wasm_frame_func_index(f.ptr()) - runtime.KeepAlive(f) - return uint32(ret) -} - -// FuncName returns the name, if available, for this frame's function -func (f *Frame) FuncName() *string { - ret := C.wasmtime_frame_func_name(f.ptr()) - if ret == nil { - runtime.KeepAlive(f) - return nil - } - str := C.GoStringN(ret.data, C.int(ret.size)) - runtime.KeepAlive(f) - return &str -} - -// ModuleName returns the name, if available, for this frame's module -func (f *Frame) ModuleName() *string { - ret := C.wasmtime_frame_module_name(f.ptr()) - if ret == nil { - runtime.KeepAlive(f) - return nil - } - str := C.GoStringN(ret.data, C.int(ret.size)) - runtime.KeepAlive(f) - return &str -} - -// ModuleOffset returns offset of this frame's instruction into the original module -func (f *Frame) ModuleOffset() uint { - ret := uint(C.wasm_frame_module_offset(f.ptr())) - runtime.KeepAlive(f) - return ret -} - -// FuncOffset returns offset of this frame's instruction into the original function -func (f *Frame) FuncOffset() uint { - ret := uint(C.wasm_frame_func_offset(f.ptr())) - runtime.KeepAlive(f) - return ret -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/val.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/val.go deleted file mode 100644 index 9cb42f2e5..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/val.go +++ /dev/null @@ -1,230 +0,0 @@ -package wasmtime - -// #include -// #include "shims.h" -import "C" -import ( - "runtime" - "sync" - "unsafe" -) - -var gExternrefLock sync.Mutex -var gExternrefMap = make(map[int]interface{}) -var gExternrefSlab slab - -// Val is a primitive numeric value. -// Moreover, in the definition of programs, immutable sequences of values occur to represent more complex data, such as text strings or other vectors. -type Val struct { - _raw *C.wasm_val_t - freelist *freeList -} - -// ValI32 converts a go int32 to a i32 Val -func ValI32(val int32) Val { - ret := Val{_raw: &C.wasm_val_t{kind: C.WASM_I32}} - C.go_init_i32(ret.ptr(), C.int32_t(val)) - return ret -} - -// ValI64 converts a go int64 to a i64 Val -func ValI64(val int64) Val { - ret := Val{_raw: &C.wasm_val_t{kind: C.WASM_I64}} - C.go_init_i64(ret.ptr(), C.int64_t(val)) - return ret -} - -// ValF32 converts a go float32 to a f32 Val -func ValF32(val float32) Val { - ret := Val{_raw: &C.wasm_val_t{kind: C.WASM_F32}} - C.go_init_f32(ret.ptr(), C.float(val)) - return ret -} - -// ValF64 converts a go float64 to a f64 Val -func ValF64(val float64) Val { - ret := Val{_raw: &C.wasm_val_t{kind: C.WASM_F64}} - C.go_init_f64(ret.ptr(), C.double(val)) - return ret -} - -// ValFuncref converts a Func to a funcref Val -// -// Note that `f` can be `nil` to represent a null `funcref`. -func ValFuncref(f *Func) Val { - ret := Val{_raw: &C.wasm_val_t{kind: C.WASM_FUNCREF}} - if f != nil { - ret.freelist = f.freelist - C.wasmtime_func_as_funcref(f.ptr(), ret.ptr()) - runtime.KeepAlive(f) - ret.setDtor() - } - return ret -} - -// ValExternref converts a go value to a externref Val -// -// Using `externref` is a way to pass arbitrary Go data into a WebAssembly -// module for it to store. Later, when you get a `Val`, you can extract the type -// with the `Externref()` method. -func ValExternref(val interface{}) Val { - ret := Val{_raw: &C.wasm_val_t{kind: C.WASM_ANYREF}} - - // If we have a non-nil value then store it in our global map of all - // externref values. Otherwise there's nothing for us to do since the - // `ref` field will already be a nil pointer. - // - // Note that we add 1 so all non-null externref values are created with - // non-null pointers. - if val != nil { - gExternrefLock.Lock() - defer gExternrefLock.Unlock() - index := gExternrefSlab.allocate() - gExternrefMap[index] = val - C.go_externref_new_with_finalizer(C.size_t(index+1), ret.ptr()) - ret.setDtor() - } - return ret -} - -//export goFinalizeExternref -func goFinalizeExternref(env unsafe.Pointer) { - idx := int(uintptr(env)) - 1 - gExternrefLock.Lock() - defer gExternrefLock.Unlock() - delete(gExternrefMap, idx) - gExternrefSlab.deallocate(idx) -} - -func mkVal(src *C.wasm_val_t, freelist *freeList) Val { - ret := Val{_raw: &C.wasm_val_t{}, freelist: freelist} - C.wasm_val_copy(ret.ptr(), src) - ret.setDtor() - return ret -} - -func takeVal(src *C.wasm_val_t, freelist *freeList) Val { - ret := Val{_raw: &C.wasm_val_t{}, freelist: freelist} - *ret.ptr() = *src - ret.setDtor() - return ret -} - -func (v Val) setDtor() { - freelist := v.freelist - if v.Kind() == KindFuncref && freelist == nil { - panic("freelist not set") - } - // If we're deleting a funcref, that needs to happen on the thread with - // the original `Store`. Otherwise we can delete values on any thread, - // such as externrefs. - runtime.SetFinalizer(v.ptr(), func(ptr *C.wasm_val_t) { - if ptr.kind == C.WASM_FUNCREF { - freelist.lock.Lock() - defer freelist.lock.Unlock() - freelist.vals = append(freelist.vals, ptr) - } else { - C.wasm_val_delete(ptr) - } - }) -} - -func (v Val) ptr() *C.wasm_val_t { - ret := v._raw - maybeGC() - return ret -} - -// Kind returns the kind of value that this `Val` contains. -func (v Val) Kind() ValKind { - return ValKind(v.ptr().kind) -} - -// I32 returns the underlying 32-bit integer if this is an `i32`, or panics. -func (v Val) I32() int32 { - if v.Kind() != KindI32 { - panic("not an i32") - } - return int32(C.go_get_i32(v.ptr())) -} - -// I64 returns the underlying 64-bit integer if this is an `i64`, or panics. -func (v Val) I64() int64 { - if v.Kind() != KindI64 { - panic("not an i64") - } - return int64(C.go_get_i64(v.ptr())) -} - -// F32 returns the underlying 32-bit float if this is an `f32`, or panics. -func (v Val) F32() float32 { - if v.Kind() != KindF32 { - panic("not an f32") - } - return float32(C.go_get_f32(v.ptr())) -} - -// F64 returns the underlying 64-bit float if this is an `f64`, or panics. -func (v Val) F64() float64 { - if v.Kind() != KindF64 { - panic("not an f64") - } - return float64(C.go_get_f64(v.ptr())) -} - -// Funcref returns the underlying function if this is a `funcref`, or panics. -// -// Note that a null `funcref` is returned as `nil`. -func (v Val) Funcref() *Func { - if v.Kind() != KindFuncref { - panic("not a funcref") - } - ptr := C.wasmtime_funcref_as_func(v.ptr()) - runtime.KeepAlive(v) - if ptr != nil { - if v.freelist == nil { - panic("freelist not available") - } - return mkFunc(ptr, v.freelist, nil) - } else { - return nil - } -} - -// Externref returns the underlying value if this is an `externref`, or panics. -// -// Note that a null `externref` is returned as `nil`. -func (v Val) Externref() interface{} { - var data unsafe.Pointer - ok := C.wasmtime_externref_data(v.ptr(), &data) - runtime.KeepAlive(v) - if !ok { - panic("not an externref") - } - if data == nil { - return nil - } - - gExternrefLock.Lock() - defer gExternrefLock.Unlock() - return gExternrefMap[int(uintptr(data))-1] -} - -// Get returns the underlying 64-bit float if this is an `f64`, or panics. -func (v Val) Get() interface{} { - switch v.Kind() { - case KindI32: - return v.I32() - case KindI64: - return v.I64() - case KindF32: - return v.F32() - case KindF64: - return v.F64() - case KindFuncref: - return v.Funcref() - case KindExternref: - return v.Externref() - } - panic("failed to get value of `Val`") -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/valtype.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/valtype.go deleted file mode 100644 index 1ddb00a6a..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/valtype.go +++ /dev/null @@ -1,90 +0,0 @@ -package wasmtime - -// #include -import "C" -import "runtime" - -// ValKind enumeration of different kinds of value types -type ValKind C.wasm_valkind_t - -const ( - // KindI32 is the types i32 classify 32 bit integers. Integers are not inherently signed or unsigned, their interpretation is determined by individual operations. - KindI32 ValKind = C.WASM_I32 - // KindI64 is the types i64 classify 64 bit integers. Integers are not inherently signed or unsigned, their interpretation is determined by individual operations. - KindI64 ValKind = C.WASM_I64 - // KindF32 is the types f32 classify 32 bit floating-point data. They correspond to the respective binary floating-point representations, also known as single and double precision, as defined by the IEEE 754-2019 standard. - KindF32 ValKind = C.WASM_F32 - // KindF64 is the types f64 classify 64 bit floating-point data. They correspond to the respective binary floating-point representations, also known as single and double precision, as defined by the IEEE 754-2019 standard. - KindF64 ValKind = C.WASM_F64 - // TODO: Unknown - KindExternref ValKind = C.WASM_ANYREF - // KindFuncref is the infinite union of all function types. - KindFuncref ValKind = C.WASM_FUNCREF -) - -// String renders this kind as a string, similar to the `*.wat` format -func (ty ValKind) String() string { - switch ty { - case KindI32: - return "i32" - case KindI64: - return "i64" - case KindF32: - return "f32" - case KindF64: - return "f64" - case KindExternref: - return "externref" - case KindFuncref: - return "funcref" - } - panic("unknown kind") -} - -// ValType means one of the value types, which classify the individual values that WebAssembly code can compute with and the values that a variable accepts. -type ValType struct { - _ptr *C.wasm_valtype_t - _owner interface{} -} - -// NewValType creates a new `ValType` with the `kind` provided -func NewValType(kind ValKind) *ValType { - ptr := C.wasm_valtype_new(C.wasm_valkind_t(kind)) - return mkValType(ptr, nil) -} - -func mkValType(ptr *C.wasm_valtype_t, owner interface{}) *ValType { - valtype := &ValType{_ptr: ptr, _owner: owner} - if owner == nil { - runtime.SetFinalizer(valtype, func(valtype *ValType) { - C.wasm_valtype_delete(valtype._ptr) - }) - } - return valtype -} - -// Kind returns the corresponding `ValKind` for this `ValType` -func (t *ValType) Kind() ValKind { - ret := ValKind(C.wasm_valtype_kind(t.ptr())) - runtime.KeepAlive(t) - return ret -} - -// Converts this `ValType` into a string according to the string representation -// of `ValKind`. -func (t *ValType) String() string { - return t.Kind().String() -} - -func (t *ValType) ptr() *C.wasm_valtype_t { - ret := t._ptr - maybeGC() - return ret -} - -func (t *ValType) owner() interface{} { - if t._owner != nil { - return t._owner - } - return t -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/wasi.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/wasi.go deleted file mode 100644 index 14d716620..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/wasi.go +++ /dev/null @@ -1,216 +0,0 @@ -package wasmtime - -// #include -// #include -import "C" -import ( - "errors" - "runtime" - "unsafe" -) - -type WasiConfig struct { - _ptr *C.wasi_config_t -} - -func NewWasiConfig() *WasiConfig { - ptr := C.wasi_config_new() - config := &WasiConfig{_ptr: ptr} - runtime.SetFinalizer(config, func(config *WasiConfig) { - C.wasi_config_delete(config._ptr) - }) - return config -} - -func (c *WasiConfig) ptr() *C.wasi_config_t { - ret := c._ptr - maybeGC() - return ret -} - -// SetArgv will explicitly configure the argv for this WASI configuration. -// Note that this field can only be set, it cannot be read -func (c *WasiConfig) SetArgv(argv []string) { - ptrs := make([]*C.char, len(argv)) - for i, arg := range argv { - ptrs[i] = C.CString(arg) - } - var argvRaw **C.char - if len(ptrs) > 0 { - argvRaw = &ptrs[0] - } - C.wasi_config_set_argv(c.ptr(), C.int(len(argv)), argvRaw) - runtime.KeepAlive(c) - for _, ptr := range ptrs { - C.free(unsafe.Pointer(ptr)) - } -} - -func (c *WasiConfig) InheritArgv() { - C.wasi_config_inherit_argv(c.ptr()) - runtime.KeepAlive(c) -} - -// SetEnv configures environment variables to be returned for this WASI configuration. -// The pairs provided must be an iterable list of key/value pairs of environment variables. -// Note that this field can only be set, it cannot be read -func (c *WasiConfig) SetEnv(keys, values []string) { - if len(keys) != len(values) { - panic("mismatched numbers of keys and values") - } - namePtrs := make([]*C.char, len(values)) - valuePtrs := make([]*C.char, len(values)) - for i, key := range keys { - namePtrs[i] = C.CString(key) - } - for i, value := range values { - valuePtrs[i] = C.CString(value) - } - var namesRaw, valuesRaw **C.char - if len(keys) > 0 { - namesRaw = &namePtrs[0] - valuesRaw = &valuePtrs[0] - } - C.wasi_config_set_env(c.ptr(), C.int(len(keys)), namesRaw, valuesRaw) - runtime.KeepAlive(c) - for i, ptr := range namePtrs { - C.free(unsafe.Pointer(ptr)) - C.free(unsafe.Pointer(valuePtrs[i])) - } -} - -func (c *WasiConfig) InheritEnv() { - C.wasi_config_inherit_env(c.ptr()) - runtime.KeepAlive(c) -} - -func (c *WasiConfig) SetStdinFile(path string) error { - pathC := C.CString(path) - ok := C.wasi_config_set_stdin_file(c.ptr(), pathC) - runtime.KeepAlive(c) - C.free(unsafe.Pointer(pathC)) - if ok { - return nil - } - - return errors.New("failed to open file") -} - -func (c *WasiConfig) InheritStdin() { - C.wasi_config_inherit_stdin(c.ptr()) - runtime.KeepAlive(c) -} - -func (c *WasiConfig) SetStdoutFile(path string) error { - pathC := C.CString(path) - ok := C.wasi_config_set_stdout_file(c.ptr(), pathC) - runtime.KeepAlive(c) - C.free(unsafe.Pointer(pathC)) - if ok { - return nil - } - - return errors.New("failed to open file") -} - -func (c *WasiConfig) InheritStdout() { - C.wasi_config_inherit_stdout(c.ptr()) - runtime.KeepAlive(c) -} - -func (c *WasiConfig) SetStderrFile(path string) error { - pathC := C.CString(path) - ok := C.wasi_config_set_stderr_file(c.ptr(), pathC) - runtime.KeepAlive(c) - C.free(unsafe.Pointer(pathC)) - if ok { - return nil - } - - return errors.New("failed to open file") -} - -func (c *WasiConfig) InheritStderr() { - C.wasi_config_inherit_stderr(c.ptr()) - runtime.KeepAlive(c) -} - -func (c *WasiConfig) PreopenDir(path, guestPath string) error { - pathC := C.CString(path) - guestPathC := C.CString(guestPath) - ok := C.wasi_config_preopen_dir(c.ptr(), pathC, guestPathC) - runtime.KeepAlive(c) - C.free(unsafe.Pointer(pathC)) - C.free(unsafe.Pointer(guestPathC)) - if ok { - return nil - } - - return errors.New("failed to preopen directory") -} - -type WasiInstance struct { - _ptr *C.wasi_instance_t - freelist *freeList -} - -// NewWasiInstance creates a new instance of WASI with the given configuration. -// -// The version of WASI must be explicitly requested via `name`. -func NewWasiInstance(store *Store, config *WasiConfig, name string) (*WasiInstance, error) { - if config._ptr == nil { - panic("config already used to create wasi instance") - } - var trap *C.wasm_trap_t - namePtr := C.CString(name) - ptr := C.wasi_instance_new( - store.ptr(), - namePtr, - config.ptr(), - &trap, - ) - runtime.KeepAlive(store) - config._ptr = nil - runtime.SetFinalizer(config, nil) - C.free(unsafe.Pointer(namePtr)) - - if ptr == nil { - if trap != nil { - return nil, mkTrap(trap) - } - return nil, errors.New("failed to create instance") - } - - instance := &WasiInstance{ - _ptr: ptr, - freelist: store.freelist, - } - runtime.SetFinalizer(instance, func(instance *WasiInstance) { - freelist := instance.freelist - freelist.lock.Lock() - defer freelist.lock.Unlock() - freelist.wasiInstances = append(freelist.wasiInstances, instance._ptr) - }) - return instance, nil -} - -func (i *WasiInstance) ptr() *C.wasi_instance_t { - ret := i._ptr - maybeGC() - return ret -} - -// BindImport attempts to bind the `imp` import provided, returning an Extern suitable for -// satisfying the import if one can be found. -// -// If `imp` isn't defined by this instance of WASI then `nil` is returned. -func (i *WasiInstance) BindImport(imp *ImportType) *Extern { - ret := C.wasi_instance_bind_import(i.ptr(), imp.ptr()) - runtime.KeepAlive(i) - runtime.KeepAlive(imp) - if ret == nil { - return nil - } - - return mkExtern(ret, i.freelist, nil) -} diff --git a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/wat2wasm.go b/constraint/vendor/github.com/bytecodealliance/wasmtime-go/wat2wasm.go deleted file mode 100644 index eb6a62af0..000000000 --- a/constraint/vendor/github.com/bytecodealliance/wasmtime-go/wat2wasm.go +++ /dev/null @@ -1,41 +0,0 @@ -package wasmtime - -// #include -// -// wasmtime_error_t *go_wat2wasm( -// char *wat_ptr, -// size_t wat_len, -// wasm_byte_vec_t *ret -// ) { -// wasm_byte_vec_t wat; -// wat.data = wat_ptr; -// wat.size = wat_len; -// return wasmtime_wat2wasm(&wat, ret); -// } -import "C" -import ( - "runtime" - "unsafe" -) - -// Wat2Wasm converts the text format of WebAssembly to the binary format. -// -// Takes the text format in-memory as input, and returns either the binary -// encoding of the text format or an error if parsing fails. -func Wat2Wasm(wat string) ([]byte, error) { - retVec := C.wasm_byte_vec_t{} - err := C.go_wat2wasm( - C._GoStringPtr(wat), - C._GoStringLen(wat), - &retVec, - ) - runtime.KeepAlive(wat) - - if err == nil { - ret := C.GoBytes(unsafe.Pointer(retVec.data), C.int(retVec.size)) - C.wasm_byte_vec_delete(&retVec) - return ret, nil - } - - return nil, mkError(err) -} diff --git a/constraint/vendor/github.com/cespare/xxhash/v2/.travis.yml b/constraint/vendor/github.com/cespare/xxhash/v2/.travis.yml deleted file mode 100644 index c516ea88d..000000000 --- a/constraint/vendor/github.com/cespare/xxhash/v2/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: go -go: - - "1.x" - - master -env: - - TAGS="" - - TAGS="-tags purego" -script: go test $TAGS -v ./... diff --git a/constraint/vendor/github.com/cespare/xxhash/v2/README.md b/constraint/vendor/github.com/cespare/xxhash/v2/README.md index 2fd8693c2..792b4a60b 100644 --- a/constraint/vendor/github.com/cespare/xxhash/v2/README.md +++ b/constraint/vendor/github.com/cespare/xxhash/v2/README.md @@ -1,7 +1,7 @@ # xxhash -[![GoDoc](https://godoc.org/github.com/cespare/xxhash?status.svg)](https://godoc.org/github.com/cespare/xxhash) -[![Build Status](https://travis-ci.org/cespare/xxhash.svg?branch=master)](https://travis-ci.org/cespare/xxhash) +[![Go Reference](https://pkg.go.dev/badge/github.com/cespare/xxhash/v2.svg)](https://pkg.go.dev/github.com/cespare/xxhash/v2) +[![Test](https://github.com/cespare/xxhash/actions/workflows/test.yml/badge.svg)](https://github.com/cespare/xxhash/actions/workflows/test.yml) xxhash is a Go implementation of the 64-bit [xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a @@ -64,4 +64,6 @@ $ go test -benchtime 10s -bench '/xxhash,direct,bytes' - [InfluxDB](https://github.com/influxdata/influxdb) - [Prometheus](https://github.com/prometheus/prometheus) +- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) - [FreeCache](https://github.com/coocood/freecache) +- [FastCache](https://github.com/VictoriaMetrics/fastcache) diff --git a/constraint/vendor/github.com/cespare/xxhash/v2/xxhash.go b/constraint/vendor/github.com/cespare/xxhash/v2/xxhash.go index db0b35fbe..15c835d54 100644 --- a/constraint/vendor/github.com/cespare/xxhash/v2/xxhash.go +++ b/constraint/vendor/github.com/cespare/xxhash/v2/xxhash.go @@ -193,7 +193,6 @@ func (d *Digest) UnmarshalBinary(b []byte) error { b, d.v4 = consumeUint64(b) b, d.total = consumeUint64(b) copy(d.mem[:], b) - b = b[len(d.mem):] d.n = int(d.total % uint64(len(d.mem))) return nil } diff --git a/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s b/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s index d580e32ae..be8db5bf7 100644 --- a/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s +++ b/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s @@ -6,7 +6,7 @@ // Register allocation: // AX h -// CX pointer to advance through b +// SI pointer to advance through b // DX n // BX loop end // R8 v1, k1 @@ -16,39 +16,39 @@ // R12 tmp // R13 prime1v // R14 prime2v -// R15 prime4v +// DI prime4v -// round reads from and advances the buffer pointer in CX. +// round reads from and advances the buffer pointer in SI. // It assumes that R13 has prime1v and R14 has prime2v. #define round(r) \ - MOVQ (CX), R12 \ - ADDQ $8, CX \ + MOVQ (SI), R12 \ + ADDQ $8, SI \ IMULQ R14, R12 \ ADDQ R12, r \ ROLQ $31, r \ IMULQ R13, r // mergeRound applies a merge round on the two registers acc and val. -// It assumes that R13 has prime1v, R14 has prime2v, and R15 has prime4v. +// It assumes that R13 has prime1v, R14 has prime2v, and DI has prime4v. #define mergeRound(acc, val) \ IMULQ R14, val \ ROLQ $31, val \ IMULQ R13, val \ XORQ val, acc \ IMULQ R13, acc \ - ADDQ R15, acc + ADDQ DI, acc // func Sum64(b []byte) uint64 TEXT ·Sum64(SB), NOSPLIT, $0-32 // Load fixed primes. MOVQ ·prime1v(SB), R13 MOVQ ·prime2v(SB), R14 - MOVQ ·prime4v(SB), R15 + MOVQ ·prime4v(SB), DI // Load slice. - MOVQ b_base+0(FP), CX + MOVQ b_base+0(FP), SI MOVQ b_len+8(FP), DX - LEAQ (CX)(DX*1), BX + LEAQ (SI)(DX*1), BX // The first loop limit will be len(b)-32. SUBQ $32, BX @@ -65,14 +65,14 @@ TEXT ·Sum64(SB), NOSPLIT, $0-32 XORQ R11, R11 SUBQ R13, R11 - // Loop until CX > BX. + // Loop until SI > BX. blockLoop: round(R8) round(R9) round(R10) round(R11) - CMPQ CX, BX + CMPQ SI, BX JLE blockLoop MOVQ R8, AX @@ -100,16 +100,16 @@ noBlocks: afterBlocks: ADDQ DX, AX - // Right now BX has len(b)-32, and we want to loop until CX > len(b)-8. + // Right now BX has len(b)-32, and we want to loop until SI > len(b)-8. ADDQ $24, BX - CMPQ CX, BX + CMPQ SI, BX JG fourByte wordLoop: // Calculate k1. - MOVQ (CX), R8 - ADDQ $8, CX + MOVQ (SI), R8 + ADDQ $8, SI IMULQ R14, R8 ROLQ $31, R8 IMULQ R13, R8 @@ -117,18 +117,18 @@ wordLoop: XORQ R8, AX ROLQ $27, AX IMULQ R13, AX - ADDQ R15, AX + ADDQ DI, AX - CMPQ CX, BX + CMPQ SI, BX JLE wordLoop fourByte: ADDQ $4, BX - CMPQ CX, BX + CMPQ SI, BX JG singles - MOVL (CX), R8 - ADDQ $4, CX + MOVL (SI), R8 + ADDQ $4, SI IMULQ R13, R8 XORQ R8, AX @@ -138,19 +138,19 @@ fourByte: singles: ADDQ $4, BX - CMPQ CX, BX + CMPQ SI, BX JGE finalize singlesLoop: - MOVBQZX (CX), R12 - ADDQ $1, CX + MOVBQZX (SI), R12 + ADDQ $1, SI IMULQ ·prime5v(SB), R12 XORQ R12, AX ROLQ $11, AX IMULQ R13, AX - CMPQ CX, BX + CMPQ SI, BX JL singlesLoop finalize: @@ -179,9 +179,9 @@ TEXT ·writeBlocks(SB), NOSPLIT, $0-40 MOVQ ·prime2v(SB), R14 // Load slice. - MOVQ b_base+8(FP), CX + MOVQ b_base+8(FP), SI MOVQ b_len+16(FP), DX - LEAQ (CX)(DX*1), BX + LEAQ (SI)(DX*1), BX SUBQ $32, BX // Load vN from d. @@ -199,7 +199,7 @@ blockLoop: round(R10) round(R11) - CMPQ CX, BX + CMPQ SI, BX JLE blockLoop // Copy vN back to d. @@ -208,8 +208,8 @@ blockLoop: MOVQ R10, 16(AX) MOVQ R11, 24(AX) - // The number of bytes written is CX minus the old base pointer. - SUBQ b_base+8(FP), CX - MOVQ CX, ret+32(FP) + // The number of bytes written is SI minus the old base pointer. + SUBQ b_base+8(FP), SI + MOVQ SI, ret+32(FP) RET diff --git a/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go b/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go index 53bf76efb..376e0ca2e 100644 --- a/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go +++ b/constraint/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go @@ -6,41 +6,52 @@ package xxhash import ( - "reflect" "unsafe" ) -// Notes: +// In the future it's possible that compiler optimizations will make these +// XxxString functions unnecessary by realizing that calls such as +// Sum64([]byte(s)) don't need to copy s. See https://golang.org/issue/2205. +// If that happens, even if we keep these functions they can be replaced with +// the trivial safe code. + +// NOTE: The usual way of doing an unsafe string-to-[]byte conversion is: // -// See https://groups.google.com/d/msg/golang-nuts/dcjzJy-bSpw/tcZYBzQqAQAJ -// for some discussion about these unsafe conversions. +// var b []byte +// bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) +// bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data +// bh.Len = len(s) +// bh.Cap = len(s) // -// In the future it's possible that compiler optimizations will make these -// unsafe operations unnecessary: https://golang.org/issue/2205. +// Unfortunately, as of Go 1.15.3 the inliner's cost model assigns a high enough +// weight to this sequence of expressions that any function that uses it will +// not be inlined. Instead, the functions below use a different unsafe +// conversion designed to minimize the inliner weight and allow both to be +// inlined. There is also a test (TestInlining) which verifies that these are +// inlined. // -// Both of these wrapper functions still incur function call overhead since they -// will not be inlined. We could write Go/asm copies of Sum64 and Digest.Write -// for strings to squeeze out a bit more speed. Mid-stack inlining should -// eventually fix this. +// See https://github.com/golang/go/issues/42739 for discussion. // Sum64String computes the 64-bit xxHash digest of s. // It may be faster than Sum64([]byte(s)) by avoiding a copy. func Sum64String(s string) uint64 { - var b []byte - bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data - bh.Len = len(s) - bh.Cap = len(s) + b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)})) return Sum64(b) } // WriteString adds more data to d. It always returns len(s), nil. // It may be faster than Write([]byte(s)) by avoiding a copy. func (d *Digest) WriteString(s string) (n int, err error) { - var b []byte - bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data - bh.Len = len(s) - bh.Cap = len(s) - return d.Write(b) + d.Write(*(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))) + // d.Write always returns len(s), nil. + // Ignoring the return output and returning these fixed values buys a + // savings of 6 in the inliner's cost model. + return len(s), nil +} + +// sliceHeader is similar to reflect.SliceHeader, but it assumes that the layout +// of the first two words is the same as the layout of a string. +type sliceHeader struct { + s string + cap int } diff --git a/constraint/vendor/github.com/evanphx/json-patch/.travis.yml b/constraint/vendor/github.com/evanphx/json-patch/.travis.yml deleted file mode 100644 index 50e4afd19..000000000 --- a/constraint/vendor/github.com/evanphx/json-patch/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: go - -go: - - 1.14 - - 1.13 - -install: - - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi - - go get github.com/jessevdk/go-flags - -script: - - go get - - go test -cover ./... - - cd ./v5 - - go get - - go test -cover ./... - -notifications: - email: false diff --git a/constraint/vendor/github.com/evanphx/json-patch/README.md b/constraint/vendor/github.com/evanphx/json-patch/README.md index 121b039db..28e351693 100644 --- a/constraint/vendor/github.com/evanphx/json-patch/README.md +++ b/constraint/vendor/github.com/evanphx/json-patch/README.md @@ -39,6 +39,25 @@ go get -u github.com/evanphx/json-patch/v5 which limits the total size increase in bytes caused by "copy" operations in a patch. It defaults to 0, which means there is no limit. +These global variables control the behavior of `jsonpatch.Apply`. + +An alternative to `jsonpatch.Apply` is `jsonpatch.ApplyWithOptions` whose behavior +is controlled by an `options` parameter of type `*jsonpatch.ApplyOptions`. + +Structure `jsonpatch.ApplyOptions` includes the configuration options above +and adds two new options: `AllowMissingPathOnRemove` and `EnsurePathExistsOnAdd`. + +When `AllowMissingPathOnRemove` is set to `true`, `jsonpatch.ApplyWithOptions` will ignore +`remove` operations whose `path` points to a non-existent location in the JSON document. +`AllowMissingPathOnRemove` defaults to `false` which will lead to `jsonpatch.ApplyWithOptions` +returning an error when hitting a missing `path` on `remove`. + +When `EnsurePathExistsOnAdd` is set to `true`, `jsonpatch.ApplyWithOptions` will make sure +that `add` operations produce all the `path` elements that are missing from the target object. + +Use `jsonpatch.NewApplyOptions` to create an instance of `jsonpatch.ApplyOptions` +whose values are populated from the global configuration variables. + ## Create and apply a merge patch Given both an original JSON document and a modified JSON document, you can create a [Merge Patch](https://tools.ietf.org/html/rfc7396) document. diff --git a/constraint/vendor/github.com/evanphx/json-patch/merge.go b/constraint/vendor/github.com/evanphx/json-patch/merge.go index 14e8bb5ce..ad88d4018 100644 --- a/constraint/vendor/github.com/evanphx/json-patch/merge.go +++ b/constraint/vendor/github.com/evanphx/json-patch/merge.go @@ -38,7 +38,10 @@ func mergeDocs(doc, patch *partialDoc, mergeMerge bool) { cur, ok := (*doc)[k] if !ok || cur == nil { - pruneNulls(v) + if !mergeMerge { + pruneNulls(v) + } + (*doc)[k] = v } else { (*doc)[k] = merge(cur, v, mergeMerge) @@ -79,8 +82,8 @@ func pruneAryNulls(ary *partialArray) *partialArray { for _, v := range *ary { if v != nil { pruneNulls(v) - newAry = append(newAry, v) } + newAry = append(newAry, v) } *ary = newAry @@ -88,8 +91,8 @@ func pruneAryNulls(ary *partialArray) *partialArray { return ary } -var errBadJSONDoc = fmt.Errorf("Invalid JSON Document") -var errBadJSONPatch = fmt.Errorf("Invalid JSON Patch") +var ErrBadJSONDoc = fmt.Errorf("Invalid JSON Document") +var ErrBadJSONPatch = fmt.Errorf("Invalid JSON Patch") var errBadMergeTypes = fmt.Errorf("Mismatched JSON Documents") // MergeMergePatches merges two merge patches together, such that @@ -114,19 +117,19 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { patchErr := json.Unmarshal(patchData, patch) if _, ok := docErr.(*json.SyntaxError); ok { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } if _, ok := patchErr.(*json.SyntaxError); ok { - return nil, errBadJSONPatch + return nil, ErrBadJSONPatch } if docErr == nil && *doc == nil { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } if patchErr == nil && *patch == nil { - return nil, errBadJSONPatch + return nil, ErrBadJSONPatch } if docErr != nil || patchErr != nil { @@ -142,7 +145,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { patchErr = json.Unmarshal(patchData, patchAry) if patchErr != nil { - return nil, errBadJSONPatch + return nil, ErrBadJSONPatch } pruneAryNulls(patchAry) @@ -150,7 +153,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { out, patchErr := json.Marshal(patchAry) if patchErr != nil { - return nil, errBadJSONPatch + return nil, ErrBadJSONPatch } return out, nil @@ -207,12 +210,12 @@ func createObjectMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) { err := json.Unmarshal(originalJSON, &originalDoc) if err != nil { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } err = json.Unmarshal(modifiedJSON, &modifiedDoc) if err != nil { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } dest, err := getDiff(originalDoc, modifiedDoc) @@ -233,17 +236,17 @@ func createArrayMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) { err := json.Unmarshal(originalJSON, &originalDocs) if err != nil { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } err = json.Unmarshal(modifiedJSON, &modifiedDocs) if err != nil { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } total := len(originalDocs) if len(modifiedDocs) != total { - return nil, errBadJSONDoc + return nil, ErrBadJSONDoc } result := []json.RawMessage{} diff --git a/constraint/vendor/github.com/evanphx/json-patch/patch.go b/constraint/vendor/github.com/evanphx/json-patch/patch.go index f185a45b2..182985490 100644 --- a/constraint/vendor/github.com/evanphx/json-patch/patch.go +++ b/constraint/vendor/github.com/evanphx/json-patch/patch.go @@ -721,6 +721,10 @@ func (p Patch) Apply(doc []byte) ([]byte, error) { // ApplyIndent mutates a JSON document according to the patch, and returns the new // document indented. func (p Patch) ApplyIndent(doc []byte, indent string) ([]byte, error) { + if len(doc) == 0 { + return doc, nil + } + var pd container if doc[0] == '[' { pd = &partialArray{} diff --git a/constraint/vendor/github.com/go-openapi/jsonreference/go.mod b/constraint/vendor/github.com/go-openapi/jsonreference/go.mod index e6c2ec4d9..94727ab3e 100644 --- a/constraint/vendor/github.com/go-openapi/jsonreference/go.mod +++ b/constraint/vendor/github.com/go-openapi/jsonreference/go.mod @@ -5,8 +5,7 @@ require ( github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/go-openapi/jsonpointer v0.19.3 github.com/stretchr/testify v1.3.0 - golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect - golang.org/x/text v0.3.3 // indirect + golang.org/x/net v0.0.0-20210421230115-4e50805a0758 // indirect ) go 1.13 diff --git a/constraint/vendor/github.com/go-openapi/jsonreference/go.sum b/constraint/vendor/github.com/go-openapi/jsonreference/go.sum index b37f873e5..61714872d 100644 --- a/constraint/vendor/github.com/go-openapi/jsonreference/go.sum +++ b/constraint/vendor/github.com/go-openapi/jsonreference/go.sum @@ -14,7 +14,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -23,13 +22,13 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758 h1:aEpZnXcAmXkd6AvLb2OPt+EN1Zu/8Ne3pCqPjja5PXY= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= diff --git a/constraint/vendor/github.com/go-openapi/spec/.travis.yml b/constraint/vendor/github.com/go-openapi/spec/.travis.yml index e8ceca446..2281a07b0 100644 --- a/constraint/vendor/github.com/go-openapi/spec/.travis.yml +++ b/constraint/vendor/github.com/go-openapi/spec/.travis.yml @@ -1,7 +1,7 @@ after_success: - bash <(curl -s https://codecov.io/bash) go: -- 1.14.x +- 1.16.x - 1.x arch: - amd64 diff --git a/constraint/vendor/github.com/go-openapi/spec/go.mod b/constraint/vendor/github.com/go-openapi/spec/go.mod index 63d9e82e9..39aab5f7e 100644 --- a/constraint/vendor/github.com/go-openapi/spec/go.mod +++ b/constraint/vendor/github.com/go-openapi/spec/go.mod @@ -2,11 +2,10 @@ module github.com/go-openapi/spec require ( github.com/go-openapi/jsonpointer v0.19.5 - github.com/go-openapi/jsonreference v0.19.5 - github.com/go-openapi/swag v0.19.14 + github.com/go-openapi/jsonreference v0.19.6 + github.com/go-openapi/swag v0.19.15 github.com/stretchr/testify v1.6.1 - golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect - golang.org/x/text v0.3.5 // indirect + golang.org/x/text v0.3.7 // indirect gopkg.in/yaml.v2 v2.4.0 ) diff --git a/constraint/vendor/github.com/go-openapi/spec/go.sum b/constraint/vendor/github.com/go-openapi/spec/go.sum index 9e86ed981..3a2f52263 100644 --- a/constraint/vendor/github.com/go-openapi/spec/go.sum +++ b/constraint/vendor/github.com/go-openapi/spec/go.sum @@ -10,11 +10,11 @@ github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm7232 github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -37,20 +37,14 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758 h1:aEpZnXcAmXkd6AvLb2OPt+EN1Zu/8Ne3pCqPjja5PXY= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/constraint/vendor/github.com/go-openapi/spec/schema_loader.go b/constraint/vendor/github.com/go-openapi/spec/schema_loader.go index 0059b99ae..b81175afd 100644 --- a/constraint/vendor/github.com/go-openapi/spec/schema_loader.go +++ b/constraint/vendor/github.com/go-openapi/spec/schema_loader.go @@ -168,7 +168,14 @@ func (r *schemaLoader) load(refURL *url.URL) (interface{}, url.URL, bool, error) normalized := normalizeBase(pth) debugLog("loading doc from: %s", normalized) - data, fromCache := r.cache.Get(normalized) + unescaped, err := url.PathUnescape(normalized) + if err != nil { + return nil, url.URL{}, false, err + } + + u := url.URL{Path: unescaped} + + data, fromCache := r.cache.Get(u.RequestURI()) if fromCache { return data, toFetch, fromCache, nil } diff --git a/constraint/vendor/github.com/gogo/protobuf/proto/text_parser.go b/constraint/vendor/github.com/gogo/protobuf/proto/text_parser.go index 1ce0be2fa..f85c0cc81 100644 --- a/constraint/vendor/github.com/gogo/protobuf/proto/text_parser.go +++ b/constraint/vendor/github.com/gogo/protobuf/proto/text_parser.go @@ -318,7 +318,7 @@ func unescape(s string) (ch string, tail string, err error) { if i > utf8.MaxRune { return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) } - return string(i), s, nil + return string(rune(i)), s, nil } return "", "", fmt.Errorf(`unknown escape \%c`, r) } diff --git a/constraint/vendor/github.com/golang/glog/glog.go b/constraint/vendor/github.com/golang/glog/glog.go index 54bd7afdc..718c34f88 100644 --- a/constraint/vendor/github.com/golang/glog/glog.go +++ b/constraint/vendor/github.com/golang/glog/glog.go @@ -879,7 +879,7 @@ const flushInterval = 30 * time.Second // flushDaemon periodically flushes the log file buffers. func (l *loggingT) flushDaemon() { - for _ = range time.NewTicker(flushInterval).C { + for range time.NewTicker(flushInterval).C { l.lockAndFlushAll() } } @@ -994,7 +994,7 @@ type Verbose bool // // Whether an individual call to V generates a log record depends on the setting of // the -v and --vmodule flags; both are off by default. If the level in the call to -// V is at least the value of -v, or of -vmodule for the source file containing the +// V is at most the value of -v, or of -vmodule for the source file containing the // call, the V call will log. func V(level Level) Verbose { // This function tries hard to be cheap unless there's work to do. diff --git a/constraint/vendor/github.com/golang/glog/go.mod b/constraint/vendor/github.com/golang/glog/go.mod new file mode 100644 index 000000000..376dc05b9 --- /dev/null +++ b/constraint/vendor/github.com/golang/glog/go.mod @@ -0,0 +1,3 @@ +module github.com/golang/glog + +go 1.11 diff --git a/constraint/vendor/github.com/googleapis/gnostic/compiler/context.go b/constraint/vendor/github.com/googleapis/gnostic/compiler/context.go index 1250a6c59..1bfe96121 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/compiler/context.go +++ b/constraint/vendor/github.com/googleapis/gnostic/compiler/context.go @@ -14,30 +14,36 @@ package compiler +import ( + yaml "gopkg.in/yaml.v3" +) + // Context contains state of the compiler as it traverses a document. type Context struct { Parent *Context Name string + Node *yaml.Node ExtensionHandlers *[]ExtensionHandler } // NewContextWithExtensions returns a new object representing the compiler state -func NewContextWithExtensions(name string, parent *Context, extensionHandlers *[]ExtensionHandler) *Context { - return &Context{Name: name, Parent: parent, ExtensionHandlers: extensionHandlers} +func NewContextWithExtensions(name string, node *yaml.Node, parent *Context, extensionHandlers *[]ExtensionHandler) *Context { + return &Context{Name: name, Node: node, Parent: parent, ExtensionHandlers: extensionHandlers} } // NewContext returns a new object representing the compiler state -func NewContext(name string, parent *Context) *Context { +func NewContext(name string, node *yaml.Node, parent *Context) *Context { if parent != nil { - return &Context{Name: name, Parent: parent, ExtensionHandlers: parent.ExtensionHandlers} + return &Context{Name: name, Node: node, Parent: parent, ExtensionHandlers: parent.ExtensionHandlers} } return &Context{Name: name, Parent: parent, ExtensionHandlers: nil} } // Description returns a text description of the compiler state func (context *Context) Description() string { + name := context.Name if context.Parent != nil { - return context.Parent.Description() + "." + context.Name + name = context.Parent.Description() + "." + name } - return context.Name + return name } diff --git a/constraint/vendor/github.com/googleapis/gnostic/compiler/error.go b/constraint/vendor/github.com/googleapis/gnostic/compiler/error.go index 7db23997b..6f40515d6 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/compiler/error.go +++ b/constraint/vendor/github.com/googleapis/gnostic/compiler/error.go @@ -14,6 +14,8 @@ package compiler +import "fmt" + // Error represents compiler errors and their location in the document. type Error struct { Context *Context @@ -25,12 +27,19 @@ func NewError(context *Context, message string) *Error { return &Error{Context: context, Message: message} } +func (err *Error) locationDescription() string { + if err.Context.Node != nil { + return fmt.Sprintf("[%d,%d] %s", err.Context.Node.Line, err.Context.Node.Column, err.Context.Description()) + } + return err.Context.Description() +} + // Error returns the string value of an Error. func (err *Error) Error() string { if err.Context == nil { - return "ERROR " + err.Message + return err.Message } - return "ERROR " + err.Context.Description() + " " + err.Message + return err.locationDescription() + " " + err.Message } // ErrorGroup is a container for groups of Error values. diff --git a/constraint/vendor/github.com/googleapis/gnostic/compiler/helpers.go b/constraint/vendor/github.com/googleapis/gnostic/compiler/helpers.go index a580f40ac..48f02f395 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/compiler/helpers.go +++ b/constraint/vendor/github.com/googleapis/gnostic/compiler/helpers.go @@ -176,6 +176,8 @@ func StringForScalarNode(node *yaml.Node) (string, bool) { return node.Value, true case "!!str": return node.Value, true + case "!!timestamp": + return node.Value, true case "!!null": return "", true default: @@ -241,6 +243,15 @@ func InvalidKeysInMap(m *yaml.Node, allowedKeys []string, allowedPatterns []*reg return invalidKeys } +// NewNullNode creates a new Null node. +func NewNullNode() *yaml.Node { + node := &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!null", + } + return node +} + // NewMappingNode creates a new Mapping node. func NewMappingNode() *yaml.Node { return &yaml.Node{ diff --git a/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go b/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go index 4198fa17e..5aab58ebf 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go +++ b/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go @@ -14,17 +14,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.23.0 -// protoc v3.12.3 +// protoc-gen-go v1.26.0 +// protoc v3.15.5 // source: extensions/extension.proto package gnostic_extension_v1 import ( - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" ) @@ -36,10 +35,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // The version number of Gnostic. type Version struct { state protoimpl.MessageState @@ -191,7 +186,7 @@ type ExtensionHandlerResponse struct { // status code. Errors []string `protobuf:"bytes,2,rep,name=errors,proto3" json:"errors,omitempty"` // text output - Value *any.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Value *anypb.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } func (x *ExtensionHandlerResponse) Reset() { @@ -240,7 +235,7 @@ func (x *ExtensionHandlerResponse) GetErrors() []string { return nil } -func (x *ExtensionHandlerResponse) GetValue() *any.Any { +func (x *ExtensionHandlerResponse) GetValue() *anypb.Any { if x != nil { return x.Value } @@ -350,12 +345,13 @@ var file_extensions_extension_proto_rawDesc = []byte{ 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x42, 0x4b, 0x0a, 0x0e, 0x6f, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x42, 0x4d, 0x0a, 0x0e, 0x6f, 0x72, 0x67, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x47, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, - 0x01, 0x5a, 0x1f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x67, 0x6e, - 0x6f, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x47, 0x4e, 0x58, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x5a, 0x21, 0x2e, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x47, 0x4e, 0x58, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -376,7 +372,7 @@ var file_extensions_extension_proto_goTypes = []interface{}{ (*ExtensionHandlerRequest)(nil), // 1: gnostic.extension.v1.ExtensionHandlerRequest (*ExtensionHandlerResponse)(nil), // 2: gnostic.extension.v1.ExtensionHandlerResponse (*Wrapper)(nil), // 3: gnostic.extension.v1.Wrapper - (*any.Any)(nil), // 4: google.protobuf.Any + (*anypb.Any)(nil), // 4: google.protobuf.Any } var file_extensions_extension_proto_depIdxs = []int32{ 3, // 0: gnostic.extension.v1.ExtensionHandlerRequest.wrapper:type_name -> gnostic.extension.v1.Wrapper diff --git a/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.proto b/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.proto index 8ac1faffc..875137c1a 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.proto +++ b/constraint/vendor/github.com/googleapis/gnostic/extensions/extension.proto @@ -38,10 +38,11 @@ option java_package = "org.gnostic.v1"; // hopefully unique enough to not conflict with things that may come along in // the future. 'GPB' is reserved for the protocol buffer implementation itself. // -option objc_class_prefix = "GNX"; // "Gnostic Extension" +// "Gnostic Extension" +option objc_class_prefix = "GNX"; // The Go package name. -option go_package = "extensions;gnostic_extension_v1"; +option go_package = "./extensions;gnostic_extension_v1"; // The version number of Gnostic. message Version { diff --git a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go index af6c0eee0..727d7f4ad 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go +++ b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go @@ -39,7 +39,7 @@ func NewAdditionalPropertiesItem(in *yaml.Node, context *compiler.Context) (*Add m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewSchema(m, compiler.NewContext("schema", context)) + t, matchingError := NewSchema(m, compiler.NewContext("schema", m, context)) if matchingError == nil { x.Oneof = &AdditionalPropertiesItem_Schema{Schema: t} matched = true @@ -57,6 +57,10 @@ func NewAdditionalPropertiesItem(in *yaml.Node, context *compiler.Context) (*Add if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid AdditionalPropertiesItem") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -162,7 +166,7 @@ func NewApiKeySecurity(in *yaml.Node, context *compiler.Context) (*ApiKeySecurit pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -243,7 +247,7 @@ func NewBasicAuthenticationSecurity(in *yaml.Node, context *compiler.Context) (* pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -324,7 +328,7 @@ func NewBodyParameter(in *yaml.Node, context *compiler.Context) (*BodyParameter, v5 := compiler.MapValueForKey(m, "schema") if v5 != nil { var err error - x.Schema, err = NewSchema(v5, compiler.NewContext("schema", context)) + x.Schema, err = NewSchema(v5, compiler.NewContext("schema", v5, context)) if err != nil { errors = append(errors, err) } @@ -351,7 +355,7 @@ func NewBodyParameter(in *yaml.Node, context *compiler.Context) (*BodyParameter, pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -429,7 +433,7 @@ func NewContact(in *yaml.Node, context *compiler.Context) (*Contact, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -472,7 +476,7 @@ func NewDefault(in *yaml.Node, context *compiler.Context) (*Default, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -503,7 +507,7 @@ func NewDefinitions(in *yaml.Node, context *compiler.Context) (*Definitions, err pair := &NamedSchema{} pair.Name = k var err error - pair.Value, err = NewSchema(v, compiler.NewContext(k, context)) + pair.Value, err = NewSchema(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -555,7 +559,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v2 := compiler.MapValueForKey(m, "info") if v2 != nil { var err error - x.Info, err = NewInfo(v2, compiler.NewContext("info", context)) + x.Info, err = NewInfo(v2, compiler.NewContext("info", v2, context)) if err != nil { errors = append(errors, err) } @@ -621,7 +625,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v8 := compiler.MapValueForKey(m, "paths") if v8 != nil { var err error - x.Paths, err = NewPaths(v8, compiler.NewContext("paths", context)) + x.Paths, err = NewPaths(v8, compiler.NewContext("paths", v8, context)) if err != nil { errors = append(errors, err) } @@ -630,7 +634,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v9 := compiler.MapValueForKey(m, "definitions") if v9 != nil { var err error - x.Definitions, err = NewDefinitions(v9, compiler.NewContext("definitions", context)) + x.Definitions, err = NewDefinitions(v9, compiler.NewContext("definitions", v9, context)) if err != nil { errors = append(errors, err) } @@ -639,7 +643,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v10 := compiler.MapValueForKey(m, "parameters") if v10 != nil { var err error - x.Parameters, err = NewParameterDefinitions(v10, compiler.NewContext("parameters", context)) + x.Parameters, err = NewParameterDefinitions(v10, compiler.NewContext("parameters", v10, context)) if err != nil { errors = append(errors, err) } @@ -648,7 +652,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v11 := compiler.MapValueForKey(m, "responses") if v11 != nil { var err error - x.Responses, err = NewResponseDefinitions(v11, compiler.NewContext("responses", context)) + x.Responses, err = NewResponseDefinitions(v11, compiler.NewContext("responses", v11, context)) if err != nil { errors = append(errors, err) } @@ -661,7 +665,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { a, ok := compiler.SequenceNodeForNode(v12) if ok { for _, item := range a.Content { - y, err := NewSecurityRequirement(item, compiler.NewContext("security", context)) + y, err := NewSecurityRequirement(item, compiler.NewContext("security", item, context)) if err != nil { errors = append(errors, err) } @@ -673,7 +677,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v13 := compiler.MapValueForKey(m, "securityDefinitions") if v13 != nil { var err error - x.SecurityDefinitions, err = NewSecurityDefinitions(v13, compiler.NewContext("securityDefinitions", context)) + x.SecurityDefinitions, err = NewSecurityDefinitions(v13, compiler.NewContext("securityDefinitions", v13, context)) if err != nil { errors = append(errors, err) } @@ -686,7 +690,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { a, ok := compiler.SequenceNodeForNode(v14) if ok { for _, item := range a.Content { - y, err := NewTag(item, compiler.NewContext("tags", context)) + y, err := NewTag(item, compiler.NewContext("tags", item, context)) if err != nil { errors = append(errors, err) } @@ -698,7 +702,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { v15 := compiler.MapValueForKey(m, "externalDocs") if v15 != nil { var err error - x.ExternalDocs, err = NewExternalDocs(v15, compiler.NewContext("externalDocs", context)) + x.ExternalDocs, err = NewExternalDocs(v15, compiler.NewContext("externalDocs", v15, context)) if err != nil { errors = append(errors, err) } @@ -725,7 +729,7 @@ func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -768,7 +772,7 @@ func NewExamples(in *yaml.Node, context *compiler.Context) (*Examples, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -842,7 +846,7 @@ func NewExternalDocs(in *yaml.Node, context *compiler.Context) (*ExternalDocs, e pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -908,7 +912,7 @@ func NewFileSchema(in *yaml.Node, context *compiler.Context) (*FileSchema, error v4 := compiler.MapValueForKey(m, "default") if v4 != nil { var err error - x.Default, err = NewAny(v4, compiler.NewContext("default", context)) + x.Default, err = NewAny(v4, compiler.NewContext("default", v4, context)) if err != nil { errors = append(errors, err) } @@ -952,7 +956,7 @@ func NewFileSchema(in *yaml.Node, context *compiler.Context) (*FileSchema, error v8 := compiler.MapValueForKey(m, "externalDocs") if v8 != nil { var err error - x.ExternalDocs, err = NewExternalDocs(v8, compiler.NewContext("externalDocs", context)) + x.ExternalDocs, err = NewExternalDocs(v8, compiler.NewContext("externalDocs", v8, context)) if err != nil { errors = append(errors, err) } @@ -961,7 +965,7 @@ func NewFileSchema(in *yaml.Node, context *compiler.Context) (*FileSchema, error v9 := compiler.MapValueForKey(m, "example") if v9 != nil { var err error - x.Example, err = NewAny(v9, compiler.NewContext("example", context)) + x.Example, err = NewAny(v9, compiler.NewContext("example", v9, context)) if err != nil { errors = append(errors, err) } @@ -988,7 +992,7 @@ func NewFileSchema(in *yaml.Node, context *compiler.Context) (*FileSchema, error pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -1096,7 +1100,7 @@ func NewFormDataParameterSubSchema(in *yaml.Node, context *compiler.Context) (*F v8 := compiler.MapValueForKey(m, "items") if v8 != nil { var err error - x.Items, err = NewPrimitivesItems(v8, compiler.NewContext("items", context)) + x.Items, err = NewPrimitivesItems(v8, compiler.NewContext("items", v8, context)) if err != nil { errors = append(errors, err) } @@ -1120,7 +1124,7 @@ func NewFormDataParameterSubSchema(in *yaml.Node, context *compiler.Context) (*F v10 := compiler.MapValueForKey(m, "default") if v10 != nil { var err error - x.Default, err = NewAny(v10, compiler.NewContext("default", context)) + x.Default, err = NewAny(v10, compiler.NewContext("default", v10, context)) if err != nil { errors = append(errors, err) } @@ -1235,7 +1239,7 @@ func NewFormDataParameterSubSchema(in *yaml.Node, context *compiler.Context) (*F a, ok := compiler.SequenceNodeForNode(v21) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -1276,7 +1280,7 @@ func NewFormDataParameterSubSchema(in *yaml.Node, context *compiler.Context) (*F pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -1339,7 +1343,7 @@ func NewHeader(in *yaml.Node, context *compiler.Context) (*Header, error) { v3 := compiler.MapValueForKey(m, "items") if v3 != nil { var err error - x.Items, err = NewPrimitivesItems(v3, compiler.NewContext("items", context)) + x.Items, err = NewPrimitivesItems(v3, compiler.NewContext("items", v3, context)) if err != nil { errors = append(errors, err) } @@ -1363,7 +1367,7 @@ func NewHeader(in *yaml.Node, context *compiler.Context) (*Header, error) { v5 := compiler.MapValueForKey(m, "default") if v5 != nil { var err error - x.Default, err = NewAny(v5, compiler.NewContext("default", context)) + x.Default, err = NewAny(v5, compiler.NewContext("default", v5, context)) if err != nil { errors = append(errors, err) } @@ -1478,7 +1482,7 @@ func NewHeader(in *yaml.Node, context *compiler.Context) (*Header, error) { a, ok := compiler.SequenceNodeForNode(v16) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -1528,7 +1532,7 @@ func NewHeader(in *yaml.Node, context *compiler.Context) (*Header, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -1627,7 +1631,7 @@ func NewHeaderParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Hea v7 := compiler.MapValueForKey(m, "items") if v7 != nil { var err error - x.Items, err = NewPrimitivesItems(v7, compiler.NewContext("items", context)) + x.Items, err = NewPrimitivesItems(v7, compiler.NewContext("items", v7, context)) if err != nil { errors = append(errors, err) } @@ -1651,7 +1655,7 @@ func NewHeaderParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Hea v9 := compiler.MapValueForKey(m, "default") if v9 != nil { var err error - x.Default, err = NewAny(v9, compiler.NewContext("default", context)) + x.Default, err = NewAny(v9, compiler.NewContext("default", v9, context)) if err != nil { errors = append(errors, err) } @@ -1766,7 +1770,7 @@ func NewHeaderParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Hea a, ok := compiler.SequenceNodeForNode(v20) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -1807,7 +1811,7 @@ func NewHeaderParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Hea pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -1839,7 +1843,7 @@ func NewHeaders(in *yaml.Node, context *compiler.Context) (*Headers, error) { pair := &NamedHeader{} pair.Name = k var err error - pair.Value, err = NewHeader(v, compiler.NewContext(k, context)) + pair.Value, err = NewHeader(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -1912,7 +1916,7 @@ func NewInfo(in *yaml.Node, context *compiler.Context) (*Info, error) { v5 := compiler.MapValueForKey(m, "contact") if v5 != nil { var err error - x.Contact, err = NewContact(v5, compiler.NewContext("contact", context)) + x.Contact, err = NewContact(v5, compiler.NewContext("contact", v5, context)) if err != nil { errors = append(errors, err) } @@ -1921,7 +1925,7 @@ func NewInfo(in *yaml.Node, context *compiler.Context) (*Info, error) { v6 := compiler.MapValueForKey(m, "license") if v6 != nil { var err error - x.License, err = NewLicense(v6, compiler.NewContext("license", context)) + x.License, err = NewLicense(v6, compiler.NewContext("license", v6, context)) if err != nil { errors = append(errors, err) } @@ -1948,7 +1952,7 @@ func NewInfo(in *yaml.Node, context *compiler.Context) (*Info, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -1971,7 +1975,7 @@ func NewItemsItem(in *yaml.Node, context *compiler.Context) (*ItemsItem, error) errors = append(errors, compiler.NewError(context, message)) } else { x.Schema = make([]*Schema, 0) - y, err := NewSchema(m, compiler.NewContext("", context)) + y, err := NewSchema(m, compiler.NewContext("", m, context)) if err != nil { return nil, err } @@ -2079,7 +2083,7 @@ func NewLicense(in *yaml.Node, context *compiler.Context) (*License, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -2121,7 +2125,7 @@ func NewNamedAny(in *yaml.Node, context *compiler.Context) (*NamedAny, error) { v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewAny(v2, compiler.NewContext("value", context)) + x.Value, err = NewAny(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2159,7 +2163,7 @@ func NewNamedHeader(in *yaml.Node, context *compiler.Context) (*NamedHeader, err v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewHeader(v2, compiler.NewContext("value", context)) + x.Value, err = NewHeader(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2197,7 +2201,7 @@ func NewNamedParameter(in *yaml.Node, context *compiler.Context) (*NamedParamete v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewParameter(v2, compiler.NewContext("value", context)) + x.Value, err = NewParameter(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2235,7 +2239,7 @@ func NewNamedPathItem(in *yaml.Node, context *compiler.Context) (*NamedPathItem, v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewPathItem(v2, compiler.NewContext("value", context)) + x.Value, err = NewPathItem(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2273,7 +2277,7 @@ func NewNamedResponse(in *yaml.Node, context *compiler.Context) (*NamedResponse, v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewResponse(v2, compiler.NewContext("value", context)) + x.Value, err = NewResponse(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2311,7 +2315,7 @@ func NewNamedResponseValue(in *yaml.Node, context *compiler.Context) (*NamedResp v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewResponseValue(v2, compiler.NewContext("value", context)) + x.Value, err = NewResponseValue(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2349,7 +2353,7 @@ func NewNamedSchema(in *yaml.Node, context *compiler.Context) (*NamedSchema, err v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewSchema(v2, compiler.NewContext("value", context)) + x.Value, err = NewSchema(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2387,7 +2391,7 @@ func NewNamedSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) ( v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewSecurityDefinitionsItem(v2, compiler.NewContext("value", context)) + x.Value, err = NewSecurityDefinitionsItem(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2463,7 +2467,7 @@ func NewNamedStringArray(in *yaml.Node, context *compiler.Context) (*NamedString v2 := compiler.MapValueForKey(m, "value") if v2 != nil { var err error - x.Value, err = NewStringArray(v2, compiler.NewContext("value", context)) + x.Value, err = NewStringArray(v2, compiler.NewContext("value", v2, context)) if err != nil { errors = append(errors, err) } @@ -2491,7 +2495,7 @@ func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyPara // HeaderParameterSubSchema header_parameter_sub_schema = 1; { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewHeaderParameterSubSchema(m, compiler.NewContext("headerParameterSubSchema", context)) + t, matchingError := NewHeaderParameterSubSchema(m, compiler.NewContext("headerParameterSubSchema", m, context)) if matchingError == nil { x.Oneof = &NonBodyParameter_HeaderParameterSubSchema{HeaderParameterSubSchema: t} matched = true @@ -2502,7 +2506,7 @@ func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyPara // FormDataParameterSubSchema form_data_parameter_sub_schema = 2; { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewFormDataParameterSubSchema(m, compiler.NewContext("formDataParameterSubSchema", context)) + t, matchingError := NewFormDataParameterSubSchema(m, compiler.NewContext("formDataParameterSubSchema", m, context)) if matchingError == nil { x.Oneof = &NonBodyParameter_FormDataParameterSubSchema{FormDataParameterSubSchema: t} matched = true @@ -2513,7 +2517,7 @@ func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyPara // QueryParameterSubSchema query_parameter_sub_schema = 3; { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewQueryParameterSubSchema(m, compiler.NewContext("queryParameterSubSchema", context)) + t, matchingError := NewQueryParameterSubSchema(m, compiler.NewContext("queryParameterSubSchema", m, context)) if matchingError == nil { x.Oneof = &NonBodyParameter_QueryParameterSubSchema{QueryParameterSubSchema: t} matched = true @@ -2524,7 +2528,7 @@ func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyPara // PathParameterSubSchema path_parameter_sub_schema = 4; { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewPathParameterSubSchema(m, compiler.NewContext("pathParameterSubSchema", context)) + t, matchingError := NewPathParameterSubSchema(m, compiler.NewContext("pathParameterSubSchema", m, context)) if matchingError == nil { x.Oneof = &NonBodyParameter_PathParameterSubSchema{PathParameterSubSchema: t} matched = true @@ -2536,6 +2540,10 @@ func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyPara if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid NonBodyParameter") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -2596,7 +2604,7 @@ func NewOauth2AccessCodeSecurity(in *yaml.Node, context *compiler.Context) (*Oau v3 := compiler.MapValueForKey(m, "scopes") if v3 != nil { var err error - x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context)) + x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", v3, context)) if err != nil { errors = append(errors, err) } @@ -2650,7 +2658,7 @@ func NewOauth2AccessCodeSecurity(in *yaml.Node, context *compiler.Context) (*Oau pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -2719,7 +2727,7 @@ func NewOauth2ApplicationSecurity(in *yaml.Node, context *compiler.Context) (*Oa v3 := compiler.MapValueForKey(m, "scopes") if v3 != nil { var err error - x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context)) + x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", v3, context)) if err != nil { errors = append(errors, err) } @@ -2764,7 +2772,7 @@ func NewOauth2ApplicationSecurity(in *yaml.Node, context *compiler.Context) (*Oa pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -2833,7 +2841,7 @@ func NewOauth2ImplicitSecurity(in *yaml.Node, context *compiler.Context) (*Oauth v3 := compiler.MapValueForKey(m, "scopes") if v3 != nil { var err error - x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context)) + x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", v3, context)) if err != nil { errors = append(errors, err) } @@ -2878,7 +2886,7 @@ func NewOauth2ImplicitSecurity(in *yaml.Node, context *compiler.Context) (*Oauth pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -2947,7 +2955,7 @@ func NewOauth2PasswordSecurity(in *yaml.Node, context *compiler.Context) (*Oauth v3 := compiler.MapValueForKey(m, "scopes") if v3 != nil { var err error - x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context)) + x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", v3, context)) if err != nil { errors = append(errors, err) } @@ -2992,7 +3000,7 @@ func NewOauth2PasswordSecurity(in *yaml.Node, context *compiler.Context) (*Oauth pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3086,7 +3094,7 @@ func NewOperation(in *yaml.Node, context *compiler.Context) (*Operation, error) v4 := compiler.MapValueForKey(m, "externalDocs") if v4 != nil { var err error - x.ExternalDocs, err = NewExternalDocs(v4, compiler.NewContext("externalDocs", context)) + x.ExternalDocs, err = NewExternalDocs(v4, compiler.NewContext("externalDocs", v4, context)) if err != nil { errors = append(errors, err) } @@ -3130,7 +3138,7 @@ func NewOperation(in *yaml.Node, context *compiler.Context) (*Operation, error) a, ok := compiler.SequenceNodeForNode(v8) if ok { for _, item := range a.Content { - y, err := NewParametersItem(item, compiler.NewContext("parameters", context)) + y, err := NewParametersItem(item, compiler.NewContext("parameters", item, context)) if err != nil { errors = append(errors, err) } @@ -3142,7 +3150,7 @@ func NewOperation(in *yaml.Node, context *compiler.Context) (*Operation, error) v9 := compiler.MapValueForKey(m, "responses") if v9 != nil { var err error - x.Responses, err = NewResponses(v9, compiler.NewContext("responses", context)) + x.Responses, err = NewResponses(v9, compiler.NewContext("responses", v9, context)) if err != nil { errors = append(errors, err) } @@ -3181,7 +3189,7 @@ func NewOperation(in *yaml.Node, context *compiler.Context) (*Operation, error) a, ok := compiler.SequenceNodeForNode(v12) if ok { for _, item := range a.Content { - y, err := NewSecurityRequirement(item, compiler.NewContext("security", context)) + y, err := NewSecurityRequirement(item, compiler.NewContext("security", item, context)) if err != nil { errors = append(errors, err) } @@ -3211,7 +3219,7 @@ func NewOperation(in *yaml.Node, context *compiler.Context) (*Operation, error) pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3234,7 +3242,7 @@ func NewParameter(in *yaml.Node, context *compiler.Context) (*Parameter, error) m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewBodyParameter(m, compiler.NewContext("bodyParameter", context)) + t, matchingError := NewBodyParameter(m, compiler.NewContext("bodyParameter", m, context)) if matchingError == nil { x.Oneof = &Parameter_BodyParameter{BodyParameter: t} matched = true @@ -3248,7 +3256,7 @@ func NewParameter(in *yaml.Node, context *compiler.Context) (*Parameter, error) m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewNonBodyParameter(m, compiler.NewContext("nonBodyParameter", context)) + t, matchingError := NewNonBodyParameter(m, compiler.NewContext("nonBodyParameter", m, context)) if matchingError == nil { x.Oneof = &Parameter_NonBodyParameter{NonBodyParameter: t} matched = true @@ -3260,6 +3268,10 @@ func NewParameter(in *yaml.Node, context *compiler.Context) (*Parameter, error) if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid Parameter") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -3283,7 +3295,7 @@ func NewParameterDefinitions(in *yaml.Node, context *compiler.Context) (*Paramet pair := &NamedParameter{} pair.Name = k var err error - pair.Value, err = NewParameter(v, compiler.NewContext(k, context)) + pair.Value, err = NewParameter(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3304,7 +3316,7 @@ func NewParametersItem(in *yaml.Node, context *compiler.Context) (*ParametersIte m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewParameter(m, compiler.NewContext("parameter", context)) + t, matchingError := NewParameter(m, compiler.NewContext("parameter", m, context)) if matchingError == nil { x.Oneof = &ParametersItem_Parameter{Parameter: t} matched = true @@ -3318,7 +3330,7 @@ func NewParametersItem(in *yaml.Node, context *compiler.Context) (*ParametersIte m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewJsonReference(m, compiler.NewContext("jsonReference", context)) + t, matchingError := NewJsonReference(m, compiler.NewContext("jsonReference", m, context)) if matchingError == nil { x.Oneof = &ParametersItem_JsonReference{JsonReference: t} matched = true @@ -3330,6 +3342,10 @@ func NewParametersItem(in *yaml.Node, context *compiler.Context) (*ParametersIte if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid ParametersItem") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -3363,7 +3379,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v2 := compiler.MapValueForKey(m, "get") if v2 != nil { var err error - x.Get, err = NewOperation(v2, compiler.NewContext("get", context)) + x.Get, err = NewOperation(v2, compiler.NewContext("get", v2, context)) if err != nil { errors = append(errors, err) } @@ -3372,7 +3388,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v3 := compiler.MapValueForKey(m, "put") if v3 != nil { var err error - x.Put, err = NewOperation(v3, compiler.NewContext("put", context)) + x.Put, err = NewOperation(v3, compiler.NewContext("put", v3, context)) if err != nil { errors = append(errors, err) } @@ -3381,7 +3397,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v4 := compiler.MapValueForKey(m, "post") if v4 != nil { var err error - x.Post, err = NewOperation(v4, compiler.NewContext("post", context)) + x.Post, err = NewOperation(v4, compiler.NewContext("post", v4, context)) if err != nil { errors = append(errors, err) } @@ -3390,7 +3406,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v5 := compiler.MapValueForKey(m, "delete") if v5 != nil { var err error - x.Delete, err = NewOperation(v5, compiler.NewContext("delete", context)) + x.Delete, err = NewOperation(v5, compiler.NewContext("delete", v5, context)) if err != nil { errors = append(errors, err) } @@ -3399,7 +3415,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v6 := compiler.MapValueForKey(m, "options") if v6 != nil { var err error - x.Options, err = NewOperation(v6, compiler.NewContext("options", context)) + x.Options, err = NewOperation(v6, compiler.NewContext("options", v6, context)) if err != nil { errors = append(errors, err) } @@ -3408,7 +3424,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v7 := compiler.MapValueForKey(m, "head") if v7 != nil { var err error - x.Head, err = NewOperation(v7, compiler.NewContext("head", context)) + x.Head, err = NewOperation(v7, compiler.NewContext("head", v7, context)) if err != nil { errors = append(errors, err) } @@ -3417,7 +3433,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { v8 := compiler.MapValueForKey(m, "patch") if v8 != nil { var err error - x.Patch, err = NewOperation(v8, compiler.NewContext("patch", context)) + x.Patch, err = NewOperation(v8, compiler.NewContext("patch", v8, context)) if err != nil { errors = append(errors, err) } @@ -3430,7 +3446,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { a, ok := compiler.SequenceNodeForNode(v9) if ok { for _, item := range a.Content { - y, err := NewParametersItem(item, compiler.NewContext("parameters", context)) + y, err := NewParametersItem(item, compiler.NewContext("parameters", item, context)) if err != nil { errors = append(errors, err) } @@ -3460,7 +3476,7 @@ func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3565,7 +3581,7 @@ func NewPathParameterSubSchema(in *yaml.Node, context *compiler.Context) (*PathP v7 := compiler.MapValueForKey(m, "items") if v7 != nil { var err error - x.Items, err = NewPrimitivesItems(v7, compiler.NewContext("items", context)) + x.Items, err = NewPrimitivesItems(v7, compiler.NewContext("items", v7, context)) if err != nil { errors = append(errors, err) } @@ -3589,7 +3605,7 @@ func NewPathParameterSubSchema(in *yaml.Node, context *compiler.Context) (*PathP v9 := compiler.MapValueForKey(m, "default") if v9 != nil { var err error - x.Default, err = NewAny(v9, compiler.NewContext("default", context)) + x.Default, err = NewAny(v9, compiler.NewContext("default", v9, context)) if err != nil { errors = append(errors, err) } @@ -3704,7 +3720,7 @@ func NewPathParameterSubSchema(in *yaml.Node, context *compiler.Context) (*PathP a, ok := compiler.SequenceNodeForNode(v20) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -3745,7 +3761,7 @@ func NewPathParameterSubSchema(in *yaml.Node, context *compiler.Context) (*PathP pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3796,7 +3812,7 @@ func NewPaths(in *yaml.Node, context *compiler.Context) (*Paths, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3816,7 +3832,7 @@ func NewPaths(in *yaml.Node, context *compiler.Context) (*Paths, error) { pair := &NamedPathItem{} pair.Name = k var err error - pair.Value, err = NewPathItem(v, compiler.NewContext(k, context)) + pair.Value, err = NewPathItem(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -3872,7 +3888,7 @@ func NewPrimitivesItems(in *yaml.Node, context *compiler.Context) (*PrimitivesIt v3 := compiler.MapValueForKey(m, "items") if v3 != nil { var err error - x.Items, err = NewPrimitivesItems(v3, compiler.NewContext("items", context)) + x.Items, err = NewPrimitivesItems(v3, compiler.NewContext("items", v3, context)) if err != nil { errors = append(errors, err) } @@ -3896,7 +3912,7 @@ func NewPrimitivesItems(in *yaml.Node, context *compiler.Context) (*PrimitivesIt v5 := compiler.MapValueForKey(m, "default") if v5 != nil { var err error - x.Default, err = NewAny(v5, compiler.NewContext("default", context)) + x.Default, err = NewAny(v5, compiler.NewContext("default", v5, context)) if err != nil { errors = append(errors, err) } @@ -4011,7 +4027,7 @@ func NewPrimitivesItems(in *yaml.Node, context *compiler.Context) (*PrimitivesIt a, ok := compiler.SequenceNodeForNode(v16) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -4052,7 +4068,7 @@ func NewPrimitivesItems(in *yaml.Node, context *compiler.Context) (*PrimitivesIt pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4084,7 +4100,7 @@ func NewProperties(in *yaml.Node, context *compiler.Context) (*Properties, error pair := &NamedSchema{} pair.Name = k var err error - pair.Value, err = NewSchema(v, compiler.NewContext(k, context)) + pair.Value, err = NewSchema(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4190,7 +4206,7 @@ func NewQueryParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Quer v8 := compiler.MapValueForKey(m, "items") if v8 != nil { var err error - x.Items, err = NewPrimitivesItems(v8, compiler.NewContext("items", context)) + x.Items, err = NewPrimitivesItems(v8, compiler.NewContext("items", v8, context)) if err != nil { errors = append(errors, err) } @@ -4214,7 +4230,7 @@ func NewQueryParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Quer v10 := compiler.MapValueForKey(m, "default") if v10 != nil { var err error - x.Default, err = NewAny(v10, compiler.NewContext("default", context)) + x.Default, err = NewAny(v10, compiler.NewContext("default", v10, context)) if err != nil { errors = append(errors, err) } @@ -4329,7 +4345,7 @@ func NewQueryParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Quer a, ok := compiler.SequenceNodeForNode(v21) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -4370,7 +4386,7 @@ func NewQueryParameterSubSchema(in *yaml.Node, context *compiler.Context) (*Quer pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4418,7 +4434,7 @@ func NewResponse(in *yaml.Node, context *compiler.Context) (*Response, error) { v2 := compiler.MapValueForKey(m, "schema") if v2 != nil { var err error - x.Schema, err = NewSchemaItem(v2, compiler.NewContext("schema", context)) + x.Schema, err = NewSchemaItem(v2, compiler.NewContext("schema", v2, context)) if err != nil { errors = append(errors, err) } @@ -4427,7 +4443,7 @@ func NewResponse(in *yaml.Node, context *compiler.Context) (*Response, error) { v3 := compiler.MapValueForKey(m, "headers") if v3 != nil { var err error - x.Headers, err = NewHeaders(v3, compiler.NewContext("headers", context)) + x.Headers, err = NewHeaders(v3, compiler.NewContext("headers", v3, context)) if err != nil { errors = append(errors, err) } @@ -4436,7 +4452,7 @@ func NewResponse(in *yaml.Node, context *compiler.Context) (*Response, error) { v4 := compiler.MapValueForKey(m, "examples") if v4 != nil { var err error - x.Examples, err = NewExamples(v4, compiler.NewContext("examples", context)) + x.Examples, err = NewExamples(v4, compiler.NewContext("examples", v4, context)) if err != nil { errors = append(errors, err) } @@ -4463,7 +4479,7 @@ func NewResponse(in *yaml.Node, context *compiler.Context) (*Response, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4495,7 +4511,7 @@ func NewResponseDefinitions(in *yaml.Node, context *compiler.Context) (*Response pair := &NamedResponse{} pair.Name = k var err error - pair.Value, err = NewResponse(v, compiler.NewContext(k, context)) + pair.Value, err = NewResponse(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4516,7 +4532,7 @@ func NewResponseValue(in *yaml.Node, context *compiler.Context) (*ResponseValue, m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewResponse(m, compiler.NewContext("response", context)) + t, matchingError := NewResponse(m, compiler.NewContext("response", m, context)) if matchingError == nil { x.Oneof = &ResponseValue_Response{Response: t} matched = true @@ -4530,7 +4546,7 @@ func NewResponseValue(in *yaml.Node, context *compiler.Context) (*ResponseValue, m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewJsonReference(m, compiler.NewContext("jsonReference", context)) + t, matchingError := NewJsonReference(m, compiler.NewContext("jsonReference", m, context)) if matchingError == nil { x.Oneof = &ResponseValue_JsonReference{JsonReference: t} matched = true @@ -4542,6 +4558,10 @@ func NewResponseValue(in *yaml.Node, context *compiler.Context) (*ResponseValue, if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid ResponseValue") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -4573,7 +4593,7 @@ func NewResponses(in *yaml.Node, context *compiler.Context) (*Responses, error) pair := &NamedResponseValue{} pair.Name = k var err error - pair.Value, err = NewResponseValue(v, compiler.NewContext(k, context)) + pair.Value, err = NewResponseValue(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4603,7 +4623,7 @@ func NewResponses(in *yaml.Node, context *compiler.Context) (*Responses, error) pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4672,7 +4692,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v5 := compiler.MapValueForKey(m, "default") if v5 != nil { var err error - x.Default, err = NewAny(v5, compiler.NewContext("default", context)) + x.Default, err = NewAny(v5, compiler.NewContext("default", v5, context)) if err != nil { errors = append(errors, err) } @@ -4831,7 +4851,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { a, ok := compiler.SequenceNodeForNode(v20) if ok { for _, item := range a.Content { - y, err := NewAny(item, compiler.NewContext("enum", context)) + y, err := NewAny(item, compiler.NewContext("enum", item, context)) if err != nil { errors = append(errors, err) } @@ -4843,7 +4863,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v21 := compiler.MapValueForKey(m, "additionalProperties") if v21 != nil { var err error - x.AdditionalProperties, err = NewAdditionalPropertiesItem(v21, compiler.NewContext("additionalProperties", context)) + x.AdditionalProperties, err = NewAdditionalPropertiesItem(v21, compiler.NewContext("additionalProperties", v21, context)) if err != nil { errors = append(errors, err) } @@ -4852,7 +4872,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v22 := compiler.MapValueForKey(m, "type") if v22 != nil { var err error - x.Type, err = NewTypeItem(v22, compiler.NewContext("type", context)) + x.Type, err = NewTypeItem(v22, compiler.NewContext("type", v22, context)) if err != nil { errors = append(errors, err) } @@ -4861,7 +4881,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v23 := compiler.MapValueForKey(m, "items") if v23 != nil { var err error - x.Items, err = NewItemsItem(v23, compiler.NewContext("items", context)) + x.Items, err = NewItemsItem(v23, compiler.NewContext("items", v23, context)) if err != nil { errors = append(errors, err) } @@ -4874,7 +4894,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { a, ok := compiler.SequenceNodeForNode(v24) if ok { for _, item := range a.Content { - y, err := NewSchema(item, compiler.NewContext("allOf", context)) + y, err := NewSchema(item, compiler.NewContext("allOf", item, context)) if err != nil { errors = append(errors, err) } @@ -4886,7 +4906,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v25 := compiler.MapValueForKey(m, "properties") if v25 != nil { var err error - x.Properties, err = NewProperties(v25, compiler.NewContext("properties", context)) + x.Properties, err = NewProperties(v25, compiler.NewContext("properties", v25, context)) if err != nil { errors = append(errors, err) } @@ -4913,7 +4933,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v28 := compiler.MapValueForKey(m, "xml") if v28 != nil { var err error - x.Xml, err = NewXml(v28, compiler.NewContext("xml", context)) + x.Xml, err = NewXml(v28, compiler.NewContext("xml", v28, context)) if err != nil { errors = append(errors, err) } @@ -4922,7 +4942,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v29 := compiler.MapValueForKey(m, "externalDocs") if v29 != nil { var err error - x.ExternalDocs, err = NewExternalDocs(v29, compiler.NewContext("externalDocs", context)) + x.ExternalDocs, err = NewExternalDocs(v29, compiler.NewContext("externalDocs", v29, context)) if err != nil { errors = append(errors, err) } @@ -4931,7 +4951,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { v30 := compiler.MapValueForKey(m, "example") if v30 != nil { var err error - x.Example, err = NewAny(v30, compiler.NewContext("example", context)) + x.Example, err = NewAny(v30, compiler.NewContext("example", v30, context)) if err != nil { errors = append(errors, err) } @@ -4958,7 +4978,7 @@ func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -4981,7 +5001,7 @@ func NewSchemaItem(in *yaml.Node, context *compiler.Context) (*SchemaItem, error m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewSchema(m, compiler.NewContext("schema", context)) + t, matchingError := NewSchema(m, compiler.NewContext("schema", m, context)) if matchingError == nil { x.Oneof = &SchemaItem_Schema{Schema: t} matched = true @@ -4995,7 +5015,7 @@ func NewSchemaItem(in *yaml.Node, context *compiler.Context) (*SchemaItem, error m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewFileSchema(m, compiler.NewContext("fileSchema", context)) + t, matchingError := NewFileSchema(m, compiler.NewContext("fileSchema", m, context)) if matchingError == nil { x.Oneof = &SchemaItem_FileSchema{FileSchema: t} matched = true @@ -5007,6 +5027,10 @@ func NewSchemaItem(in *yaml.Node, context *compiler.Context) (*SchemaItem, error if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid SchemaItem") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -5030,7 +5054,7 @@ func NewSecurityDefinitions(in *yaml.Node, context *compiler.Context) (*Security pair := &NamedSecurityDefinitionsItem{} pair.Name = k var err error - pair.Value, err = NewSecurityDefinitionsItem(v, compiler.NewContext(k, context)) + pair.Value, err = NewSecurityDefinitionsItem(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -5051,7 +5075,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewBasicAuthenticationSecurity(m, compiler.NewContext("basicAuthenticationSecurity", context)) + t, matchingError := NewBasicAuthenticationSecurity(m, compiler.NewContext("basicAuthenticationSecurity", m, context)) if matchingError == nil { x.Oneof = &SecurityDefinitionsItem_BasicAuthenticationSecurity{BasicAuthenticationSecurity: t} matched = true @@ -5065,7 +5089,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewApiKeySecurity(m, compiler.NewContext("apiKeySecurity", context)) + t, matchingError := NewApiKeySecurity(m, compiler.NewContext("apiKeySecurity", m, context)) if matchingError == nil { x.Oneof = &SecurityDefinitionsItem_ApiKeySecurity{ApiKeySecurity: t} matched = true @@ -5079,7 +5103,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewOauth2ImplicitSecurity(m, compiler.NewContext("oauth2ImplicitSecurity", context)) + t, matchingError := NewOauth2ImplicitSecurity(m, compiler.NewContext("oauth2ImplicitSecurity", m, context)) if matchingError == nil { x.Oneof = &SecurityDefinitionsItem_Oauth2ImplicitSecurity{Oauth2ImplicitSecurity: t} matched = true @@ -5093,7 +5117,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewOauth2PasswordSecurity(m, compiler.NewContext("oauth2PasswordSecurity", context)) + t, matchingError := NewOauth2PasswordSecurity(m, compiler.NewContext("oauth2PasswordSecurity", m, context)) if matchingError == nil { x.Oneof = &SecurityDefinitionsItem_Oauth2PasswordSecurity{Oauth2PasswordSecurity: t} matched = true @@ -5107,7 +5131,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewOauth2ApplicationSecurity(m, compiler.NewContext("oauth2ApplicationSecurity", context)) + t, matchingError := NewOauth2ApplicationSecurity(m, compiler.NewContext("oauth2ApplicationSecurity", m, context)) if matchingError == nil { x.Oneof = &SecurityDefinitionsItem_Oauth2ApplicationSecurity{Oauth2ApplicationSecurity: t} matched = true @@ -5121,7 +5145,7 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu m, ok := compiler.UnpackMap(in) if ok { // errors might be ok here, they mean we just don't have the right subtype - t, matchingError := NewOauth2AccessCodeSecurity(m, compiler.NewContext("oauth2AccessCodeSecurity", context)) + t, matchingError := NewOauth2AccessCodeSecurity(m, compiler.NewContext("oauth2AccessCodeSecurity", m, context)) if matchingError == nil { x.Oneof = &SecurityDefinitionsItem_Oauth2AccessCodeSecurity{Oauth2AccessCodeSecurity: t} matched = true @@ -5133,6 +5157,10 @@ func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*Secu if matched { // since the oneof matched one of its possibilities, discard any matching errors errors = make([]error, 0) + } else { + message := fmt.Sprintf("contains an invalid SecurityDefinitionsItem") + err := compiler.NewError(context, message) + errors = []error{err} } return x, compiler.NewErrorGroupOrNil(errors) } @@ -5156,7 +5184,7 @@ func NewSecurityRequirement(in *yaml.Node, context *compiler.Context) (*Security pair := &NamedStringArray{} pair.Name = k var err error - pair.Value, err = NewStringArray(v, compiler.NewContext(k, context)) + pair.Value, err = NewStringArray(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -5223,7 +5251,7 @@ func NewTag(in *yaml.Node, context *compiler.Context) (*Tag, error) { v3 := compiler.MapValueForKey(m, "externalDocs") if v3 != nil { var err error - x.ExternalDocs, err = NewExternalDocs(v3, compiler.NewContext("externalDocs", context)) + x.ExternalDocs, err = NewExternalDocs(v3, compiler.NewContext("externalDocs", v3, context)) if err != nil { errors = append(errors, err) } @@ -5250,7 +5278,7 @@ func NewTag(in *yaml.Node, context *compiler.Context) (*Tag, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -5321,7 +5349,7 @@ func NewVendorExtension(in *yaml.Node, context *compiler.Context) (*VendorExtens pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -5416,7 +5444,7 @@ func NewXml(in *yaml.Node, context *compiler.Context) (*Xml, error) { pair.Value = result } } else { - pair.Value, err = NewAny(v, compiler.NewContext(k, context)) + pair.Value, err = NewAny(v, compiler.NewContext(k, v, context)) if err != nil { errors = append(errors, err) } @@ -6817,7 +6845,7 @@ func (m *AdditionalPropertiesItem) ToRawInfo() *yaml.Node { if v1, ok := m.GetOneof().(*AdditionalPropertiesItem_Boolean); ok { return compiler.NewScalarNodeForBool(v1.Boolean) } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of Any suitable for JSON or YAML export. @@ -6830,10 +6858,8 @@ func (m *Any) ToRawInfo() *yaml.Node { return node.Content[0] } return &node - } else { - return nil } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of ApiKeySecurity suitable for JSON or YAML export. @@ -7559,7 +7585,10 @@ func (m *NamedAny) ToRawInfo() *yaml.Node { info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } - // &{Name:value Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} + if m.Value != nil { + info.Content = append(info.Content, compiler.NewScalarNodeForString("value")) + info.Content = append(info.Content, m.Value.ToRawInfo()) + } return info } @@ -7716,7 +7745,7 @@ func (m *NonBodyParameter) ToRawInfo() *yaml.Node { if v3 != nil { return v3.ToRawInfo() } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of Oauth2AccessCodeSecurity suitable for JSON or YAML export. @@ -7944,7 +7973,7 @@ func (m *Parameter) ToRawInfo() *yaml.Node { if v1 != nil { return v1.ToRawInfo() } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of ParameterDefinitions suitable for JSON or YAML export. @@ -7976,7 +8005,7 @@ func (m *ParametersItem) ToRawInfo() *yaml.Node { if v1 != nil { return v1.ToRawInfo() } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of PathItem suitable for JSON or YAML export. @@ -8425,7 +8454,7 @@ func (m *ResponseValue) ToRawInfo() *yaml.Node { if v1 != nil { return v1.ToRawInfo() } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of Responses suitable for JSON or YAML export. @@ -8618,7 +8647,7 @@ func (m *SchemaItem) ToRawInfo() *yaml.Node { if v1 != nil { return v1.ToRawInfo() } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of SecurityDefinitions suitable for JSON or YAML export. @@ -8670,7 +8699,7 @@ func (m *SecurityDefinitionsItem) ToRawInfo() *yaml.Node { if v5 != nil { return v5.ToRawInfo() } - return nil + return compiler.NewNullNode() } // ToRawInfo returns a description of SecurityRequirement suitable for JSON or YAML export. diff --git a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go index 559ddea1a..8a5f302f3 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go +++ b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go @@ -16,17 +16,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.23.0 -// protoc v3.12.3 +// protoc-gen-go v1.26.0 +// protoc v3.15.5 // source: openapiv2/OpenAPIv2.proto package openapi_v2 import ( - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" ) @@ -38,10 +37,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type AdditionalPropertiesItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -127,8 +122,8 @@ type Any struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value *any.Any `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Yaml string `protobuf:"bytes,2,opt,name=yaml,proto3" json:"yaml,omitempty"` + Value *anypb.Any `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Yaml string `protobuf:"bytes,2,opt,name=yaml,proto3" json:"yaml,omitempty"` } func (x *Any) Reset() { @@ -163,7 +158,7 @@ func (*Any) Descriptor() ([]byte, []int) { return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{1} } -func (x *Any) GetValue() *any.Any { +func (x *Any) GetValue() *anypb.Any { if x != nil { return x.Value } @@ -6341,11 +6336,11 @@ var file_openapiv2_OpenAPIv2_proto_rawDesc = []byte{ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x3c, 0x0a, 0x0e, 0x6f, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x3e, 0x0a, 0x0e, 0x6f, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x32, 0x42, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x14, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4f, - 0x41, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x16, 0x2e, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x76, 0x32, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x32, 0xa2, 0x02, + 0x03, 0x4f, 0x41, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6422,7 +6417,7 @@ var file_openapiv2_OpenAPIv2_proto_goTypes = []interface{}{ (*TypeItem)(nil), // 57: openapi.v2.TypeItem (*VendorExtension)(nil), // 58: openapi.v2.VendorExtension (*Xml)(nil), // 59: openapi.v2.Xml - (*any.Any)(nil), // 60: google.protobuf.Any + (*anypb.Any)(nil), // 60: google.protobuf.Any } var file_openapiv2_OpenAPIv2_proto_depIdxs = []int32{ 50, // 0: openapi.v2.AdditionalPropertiesItem.schema:type_name -> openapi.v2.Schema diff --git a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto index 00ac1b0a0..1c59b2f4a 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto +++ b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto @@ -42,7 +42,7 @@ option java_package = "org.openapi_v2"; option objc_class_prefix = "OAS"; // The Go package name. -option go_package = "openapiv2;openapi_v2"; +option go_package = "./openapiv2;openapi_v2"; message AdditionalPropertiesItem { oneof oneof { diff --git a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/document.go b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/document.go index ddeed5c89..56e5966b4 100644 --- a/constraint/vendor/github.com/googleapis/gnostic/openapiv2/document.go +++ b/constraint/vendor/github.com/googleapis/gnostic/openapiv2/document.go @@ -14,7 +14,10 @@ package openapi_v2 -import "github.com/googleapis/gnostic/compiler" +import ( + "github.com/googleapis/gnostic/compiler" + "gopkg.in/yaml.v3" +) // ParseDocument reads an OpenAPI v2 description from a YAML/JSON representation. func ParseDocument(b []byte) (*Document, error) { @@ -22,5 +25,17 @@ func ParseDocument(b []byte) (*Document, error) { if err != nil { return nil, err } - return NewDocument(info.Content[0], compiler.NewContextWithExtensions("$root", nil, nil)) + root := info.Content[0] + return NewDocument(root, compiler.NewContextWithExtensions("$root", root, nil, nil)) +} + +// YAMLValue produces a serialized YAML representation of the document. +func (d *Document) YAMLValue(comment string) ([]byte, error) { + rawInfo := d.ToRawInfo() + rawInfo = &yaml.Node{ + Kind: yaml.DocumentNode, + Content: []*yaml.Node{rawInfo}, + HeadComment: comment, + } + return yaml.Marshal(rawInfo) } diff --git a/constraint/vendor/github.com/onsi/gomega/.travis.yml b/constraint/vendor/github.com/onsi/gomega/.travis.yml index 348e3014c..6543dc553 100644 --- a/constraint/vendor/github.com/onsi/gomega/.travis.yml +++ b/constraint/vendor/github.com/onsi/gomega/.travis.yml @@ -1,20 +1,18 @@ language: go arch: - - amd64 - - ppc64le + - amd64 + - ppc64le go: - - 1.14.x - - 1.15.x - gotip + - 1.16.x + - 1.15.x env: - GO111MODULE=on -install: - - go get -v ./... - - go build ./... - - go get github.com/onsi/ginkgo - - go install github.com/onsi/ginkgo/ginkgo +install: skip -script: make test +script: + - go mod tidy && git diff --exit-code go.mod go.sum + - make test diff --git a/constraint/vendor/github.com/onsi/gomega/CHANGELOG.md b/constraint/vendor/github.com/onsi/gomega/CHANGELOG.md index 16095fa3c..4783c0d43 100644 --- a/constraint/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/constraint/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,36 @@ +## 1.13.0 + +### Features +- gmeasure provides BETA support for benchmarking (#447) [8f2dfbf] +- Set consistently and eventually defaults on init (#443) [12eb778] + +## 1.12.0 + +### Features +- Add Satisfy() matcher (#437) [c548f31] +- tweak truncation message [3360b8c] +- Add format.GomegaStringer (#427) [cc80b6f] +- Add Clear() method to gbytes.Buffer [c3c0920] + +### Fixes +- Fix error message in BeNumericallyMatcher (#432) [09c074a] +- Bump github.com/onsi/ginkgo from 1.12.1 to 1.16.2 (#442) [e5f6ea0] +- Bump github.com/golang/protobuf from 1.4.3 to 1.5.2 (#431) [adae3bf] +- Bump golang.org/x/net (#441) [3275b35] + +## 1.11.0 + +### Features +- feature: add index to gstruct element func (#419) [334e00d] +- feat(gexec) Add CompileTest functions. Close #410 (#411) [47c613f] + +### Fixes +- Check more carefully for nils in WithTransform (#423) [3c60a15] +- fix: typo in Makefile [b82522a] +- Allow WithTransform function to accept a nil value (#422) [b75d2f2] +- fix: print value type for interface{} containers (#409) [f08e2dc] +- fix(BeElementOf): consistently flatten expected values [1fa9468] + ## 1.10.5 ### Fixes diff --git a/constraint/vendor/github.com/onsi/gomega/Dockerfile b/constraint/vendor/github.com/onsi/gomega/Dockerfile new file mode 100644 index 000000000..11c7e63e7 --- /dev/null +++ b/constraint/vendor/github.com/onsi/gomega/Dockerfile @@ -0,0 +1 @@ +FROM golang:1.15 diff --git a/constraint/vendor/github.com/onsi/gomega/Makefile b/constraint/vendor/github.com/onsi/gomega/Makefile index c92cd56e3..1c6d107e1 100644 --- a/constraint/vendor/github.com/onsi/gomega/Makefile +++ b/constraint/vendor/github.com/onsi/gomega/Makefile @@ -1,6 +1,33 @@ -test: - [ -z "`gofmt -s -w -l -e .`" ] - go vet - ginkgo -p -r --randomizeAllSpecs --failOnPending --randomizeSuites --race +###### Help ################################################################### -.PHONY: test +.DEFAULT_GOAL = help + +.PHONY: help + +help: ## list Makefile targets + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +###### Targets ################################################################ + +test: version download fmt vet ginkgo ## Runs all build, static analysis, and test steps + +download: ## Download dependencies + go mod download + +vet: ## Run static code analysis + go vet ./... + +ginkgo: ## Run tests using Ginkgo + go run github.com/onsi/ginkgo/ginkgo -p -r --randomizeAllSpecs --failOnPending --randomizeSuites --race + +fmt: ## Checks that the code is formatted correcty + @@if [ -n "$$(gofmt -s -e -l -d .)" ]; then \ + echo "gofmt check failed: run 'gofmt -s -e -l -w .'"; \ + exit 1; \ + fi + +docker_test: ## Run tests in a container via docker-compose + docker-compose build test && docker-compose run --rm test make test + +version: ## Display the version of Go + @@go version diff --git a/constraint/vendor/github.com/onsi/gomega/docker-compose.yaml b/constraint/vendor/github.com/onsi/gomega/docker-compose.yaml new file mode 100644 index 000000000..f37496143 --- /dev/null +++ b/constraint/vendor/github.com/onsi/gomega/docker-compose.yaml @@ -0,0 +1,10 @@ +version: '3.0' + +services: + test: + build: + dockerfile: Dockerfile + context: . + working_dir: /app + volumes: + - ${PWD}:/app diff --git a/constraint/vendor/github.com/onsi/gomega/env.go b/constraint/vendor/github.com/onsi/gomega/env.go new file mode 100644 index 000000000..62fd885a9 --- /dev/null +++ b/constraint/vendor/github.com/onsi/gomega/env.go @@ -0,0 +1,40 @@ +package gomega + +import ( + "os" + + "github.com/onsi/gomega/internal/defaults" +) + +const ( + ConsistentlyDurationEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_DURATION" + ConsistentlyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_POLLING_INTERVAL" + EventuallyTimeoutEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT" + EventuallyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL" +) + +func init() { + defaults.SetDurationFromEnv( + os.Getenv, + SetDefaultConsistentlyDuration, + ConsistentlyDurationEnvVarName, + ) + + defaults.SetDurationFromEnv( + os.Getenv, + SetDefaultConsistentlyPollingInterval, + ConsistentlyPollingIntervalEnvVarName, + ) + + defaults.SetDurationFromEnv( + os.Getenv, + SetDefaultEventuallyTimeout, + EventuallyTimeoutEnvVarName, + ) + + defaults.SetDurationFromEnv( + os.Getenv, + SetDefaultEventuallyPollingInterval, + EventuallyPollingIntervalEnvVarName, + ) +} diff --git a/constraint/vendor/github.com/onsi/gomega/format/format.go b/constraint/vendor/github.com/onsi/gomega/format/format.go index e59d7d75b..6e78c391d 100644 --- a/constraint/vendor/github.com/onsi/gomega/format/format.go +++ b/constraint/vendor/github.com/onsi/gomega/format/format.go @@ -7,6 +7,7 @@ Gomega's format package pretty-prints objects. It explores input objects recurs package format import ( + "context" "fmt" "reflect" "strconv" @@ -17,6 +18,10 @@ import ( // Use MaxDepth to set the maximum recursion depth when printing deeply nested objects var MaxDepth = uint(10) +// MaxLength of the string representation of an object. +// If MaxLength is set to 0, the Object will not be truncated. +var MaxLength = 4000 + /* By default, all objects (even those that implement fmt.Stringer and fmt.GoStringer) are recursively inspected to generate output. @@ -44,16 +49,7 @@ var TruncateThreshold uint = 50 // after the first diff location in a truncated string assertion error message. var CharactersAroundMismatchToInclude uint = 5 -// Ctx interface defined here to keep backwards compatibility with go < 1.7 -// It matches the context.Context interface -type Ctx interface { - Deadline() (deadline time.Time, ok bool) - Done() <-chan struct{} - Err() error - Value(key interface{}) interface{} -} - -var contextType = reflect.TypeOf((*Ctx)(nil)).Elem() +var contextType = reflect.TypeOf((*context.Context)(nil)).Elem() var timeType = reflect.TypeOf(time.Time{}) //The default indentation string emitted by the format package @@ -61,6 +57,14 @@ var Indent = " " var longFormThreshold = 20 +// GomegaStringer allows for custom formating of objects for gomega. +type GomegaStringer interface { + // GomegaString will be used to custom format an object. + // It does not follow UseStringerRepresentation value and will always be called regardless. + // It also ignores the MaxLength value. + GomegaString() string +} + /* Generates a formatted matcher success/failure message of the form: @@ -167,6 +171,33 @@ func findFirstMismatch(a, b string) int { return 0 } +const truncateHelpText = ` +Gomega truncated this representation as it exceeds 'format.MaxLength'. +Consider having the object provide a custom 'GomegaStringer' representation +or adjust the parameters in Gomega's 'format' package. + +Learn more here: https://onsi.github.io/gomega/#adjusting-output +` + +func truncateLongStrings(s string) string { + if MaxLength > 0 && len(s) > MaxLength { + var sb strings.Builder + for i, r := range s { + if i < MaxLength { + sb.WriteRune(r) + continue + } + break + } + + sb.WriteString("...\n") + sb.WriteString(truncateHelpText) + + return sb.String() + } + return s +} + /* Pretty prints the passed in object at the passed in indentation level. @@ -181,7 +212,7 @@ Set PrintContextObjects to true to print the content of objects implementing con func Object(object interface{}, indentation uint) string { indent := strings.Repeat(Indent, int(indentation)) value := reflect.ValueOf(object) - return fmt.Sprintf("%s<%s>: %s", indent, formatType(object), formatValue(value, indentation)) + return fmt.Sprintf("%s<%s>: %s", indent, formatType(value), formatValue(value, indentation)) } /* @@ -201,25 +232,20 @@ func IndentString(s string, indentation uint) string { return result } -func formatType(object interface{}) string { - t := reflect.TypeOf(object) - if t == nil { +func formatType(v reflect.Value) string { + switch v.Kind() { + case reflect.Invalid: return "nil" - } - switch t.Kind() { case reflect.Chan: - v := reflect.ValueOf(object) - return fmt.Sprintf("%T | len:%d, cap:%d", object, v.Len(), v.Cap()) + return fmt.Sprintf("%s | len:%d, cap:%d", v.Type(), v.Len(), v.Cap()) case reflect.Ptr: - return fmt.Sprintf("%T | %p", object, object) + return fmt.Sprintf("%s | 0x%x", v.Type(), v.Pointer()) case reflect.Slice: - v := reflect.ValueOf(object) - return fmt.Sprintf("%T | len:%d, cap:%d", object, v.Len(), v.Cap()) + return fmt.Sprintf("%s | len:%d, cap:%d", v.Type(), v.Len(), v.Cap()) case reflect.Map: - v := reflect.ValueOf(object) - return fmt.Sprintf("%T | len:%d", object, v.Len()) + return fmt.Sprintf("%s | len:%d", v.Type(), v.Len()) default: - return fmt.Sprintf("%T", object) + return fmt.Sprintf("%s", v.Type()) } } @@ -232,14 +258,21 @@ func formatValue(value reflect.Value, indentation uint) string { return "nil" } - if UseStringerRepresentation { - if value.CanInterface() { - obj := value.Interface() + if value.CanInterface() { + obj := value.Interface() + + // GomegaStringer will take precedence to other representations and disregards UseStringerRepresentation + if x, ok := obj.(GomegaStringer); ok { + // do not truncate a user-defined GoMegaString() value + return x.GomegaString() + } + + if UseStringerRepresentation { switch x := obj.(type) { case fmt.GoStringer: - return x.GoString() + return truncateLongStrings(x.GoString()) case fmt.Stringer: - return x.String() + return truncateLongStrings(x.String()) } } } @@ -270,26 +303,26 @@ func formatValue(value reflect.Value, indentation uint) string { case reflect.Ptr: return formatValue(value.Elem(), indentation) case reflect.Slice: - return formatSlice(value, indentation) + return truncateLongStrings(formatSlice(value, indentation)) case reflect.String: - return formatString(value.String(), indentation) + return truncateLongStrings(formatString(value.String(), indentation)) case reflect.Array: - return formatSlice(value, indentation) + return truncateLongStrings(formatSlice(value, indentation)) case reflect.Map: - return formatMap(value, indentation) + return truncateLongStrings(formatMap(value, indentation)) case reflect.Struct: if value.Type() == timeType && value.CanInterface() { t, _ := value.Interface().(time.Time) return t.Format(time.RFC3339Nano) } - return formatStruct(value, indentation) + return truncateLongStrings(formatStruct(value, indentation)) case reflect.Interface: - return formatValue(value.Elem(), indentation) + return formatInterface(value, indentation) default: if value.CanInterface() { - return fmt.Sprintf("%#v", value.Interface()) + return truncateLongStrings(fmt.Sprintf("%#v", value.Interface())) } - return fmt.Sprintf("%#v", value) + return truncateLongStrings(fmt.Sprintf("%#v", value)) } } @@ -379,6 +412,10 @@ func formatStruct(v reflect.Value, indentation uint) string { return fmt.Sprintf("{%s}", strings.Join(result, ", ")) } +func formatInterface(v reflect.Value, indentation uint) string { + return fmt.Sprintf("<%s>%s", formatType(v.Elem()), formatValue(v.Elem(), indentation)) +} + func isNilValue(a reflect.Value) bool { switch a.Kind() { case reflect.Invalid: diff --git a/constraint/vendor/github.com/onsi/gomega/gbytes/buffer.go b/constraint/vendor/github.com/onsi/gomega/gbytes/buffer.go deleted file mode 100644 index 336086f4a..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gbytes/buffer.go +++ /dev/null @@ -1,245 +0,0 @@ -/* -Package gbytes provides a buffer that supports incrementally detecting input. - -You use gbytes.Buffer with the gbytes.Say matcher. When Say finds a match, it fastforwards the buffer's read cursor to the end of that match. - -Subsequent matches against the buffer will only operate against data that appears *after* the read cursor. - -The read cursor is an opaque implementation detail that you cannot access. You should use the Say matcher to sift through the buffer. You can always -access the entire buffer's contents with Contents(). - -*/ -package gbytes - -import ( - "errors" - "fmt" - "io" - "regexp" - "sync" - "time" -) - -/* -gbytes.Buffer implements an io.Writer and can be used with the gbytes.Say matcher. - -You should only use a gbytes.Buffer in test code. It stores all writes in an in-memory buffer - behavior that is inappropriate for production code! -*/ -type Buffer struct { - contents []byte - readCursor uint64 - lock *sync.Mutex - detectCloser chan interface{} - closed bool -} - -/* -NewBuffer returns a new gbytes.Buffer -*/ -func NewBuffer() *Buffer { - return &Buffer{ - lock: &sync.Mutex{}, - } -} - -/* -BufferWithBytes returns a new gbytes.Buffer seeded with the passed in bytes -*/ -func BufferWithBytes(bytes []byte) *Buffer { - return &Buffer{ - lock: &sync.Mutex{}, - contents: bytes, - } -} - -/* -BufferReader returns a new gbytes.Buffer that wraps a reader. The reader's contents are read into -the Buffer via io.Copy -*/ -func BufferReader(reader io.Reader) *Buffer { - b := &Buffer{ - lock: &sync.Mutex{}, - } - - go func() { - io.Copy(b, reader) - b.Close() - }() - - return b -} - -/* -Write implements the io.Writer interface -*/ -func (b *Buffer) Write(p []byte) (n int, err error) { - b.lock.Lock() - defer b.lock.Unlock() - - if b.closed { - return 0, errors.New("attempt to write to closed buffer") - } - - b.contents = append(b.contents, p...) - return len(p), nil -} - -/* -Read implements the io.Reader interface. It advances the -cursor as it reads. - -Returns an error if called after Close. -*/ -func (b *Buffer) Read(d []byte) (int, error) { - b.lock.Lock() - defer b.lock.Unlock() - - if b.closed { - return 0, errors.New("attempt to read from closed buffer") - } - - if uint64(len(b.contents)) <= b.readCursor { - return 0, io.EOF - } - - n := copy(d, b.contents[b.readCursor:]) - b.readCursor += uint64(n) - - return n, nil -} - -/* -Close signifies that the buffer will no longer be written to -*/ -func (b *Buffer) Close() error { - b.lock.Lock() - defer b.lock.Unlock() - - b.closed = true - - return nil -} - -/* -Closed returns true if the buffer has been closed -*/ -func (b *Buffer) Closed() bool { - b.lock.Lock() - defer b.lock.Unlock() - - return b.closed -} - -/* -Contents returns all data ever written to the buffer. -*/ -func (b *Buffer) Contents() []byte { - b.lock.Lock() - defer b.lock.Unlock() - - contents := make([]byte, len(b.contents)) - copy(contents, b.contents) - return contents -} - -/* -Detect takes a regular expression and returns a channel. - -The channel will receive true the first time data matching the regular expression is written to the buffer. -The channel is subsequently closed and the buffer's read-cursor is fast-forwarded to just after the matching region. - -You typically don't need to use Detect and should use the ghttp.Say matcher instead. Detect is useful, however, in cases where your code must -be branch and handle different outputs written to the buffer. - -For example, consider a buffer hooked up to the stdout of a client library. You may (or may not, depending on state outside of your control) need to authenticate the client library. - -You could do something like: - -select { -case <-buffer.Detect("You are not logged in"): - //log in -case <-buffer.Detect("Success"): - //carry on -case <-time.After(time.Second): - //welp -} -buffer.CancelDetects() - -You should always call CancelDetects after using Detect. This will close any channels that have not detected and clean up the goroutines that were spawned to support them. - -Finally, you can pass detect a format string followed by variadic arguments. This will construct the regexp using fmt.Sprintf. -*/ -func (b *Buffer) Detect(desired string, args ...interface{}) chan bool { - formattedRegexp := desired - if len(args) > 0 { - formattedRegexp = fmt.Sprintf(desired, args...) - } - re := regexp.MustCompile(formattedRegexp) - - b.lock.Lock() - defer b.lock.Unlock() - - if b.detectCloser == nil { - b.detectCloser = make(chan interface{}) - } - - closer := b.detectCloser - response := make(chan bool) - go func() { - ticker := time.NewTicker(10 * time.Millisecond) - defer ticker.Stop() - defer close(response) - for { - select { - case <-ticker.C: - b.lock.Lock() - data, cursor := b.contents[b.readCursor:], b.readCursor - loc := re.FindIndex(data) - b.lock.Unlock() - - if loc != nil { - response <- true - b.lock.Lock() - newCursorPosition := cursor + uint64(loc[1]) - if newCursorPosition >= b.readCursor { - b.readCursor = newCursorPosition - } - b.lock.Unlock() - return - } - case <-closer: - return - } - } - }() - - return response -} - -/* -CancelDetects cancels any pending detects and cleans up their goroutines. You should always call this when you're done with a set of Detect channels. -*/ -func (b *Buffer) CancelDetects() { - b.lock.Lock() - defer b.lock.Unlock() - - close(b.detectCloser) - b.detectCloser = nil -} - -func (b *Buffer) didSay(re *regexp.Regexp) (bool, []byte) { - b.lock.Lock() - defer b.lock.Unlock() - - unreadBytes := b.contents[b.readCursor:] - copyOfUnreadBytes := make([]byte, len(unreadBytes)) - copy(copyOfUnreadBytes, unreadBytes) - - loc := re.FindIndex(unreadBytes) - - if loc != nil { - b.readCursor += uint64(loc[1]) - return true, copyOfUnreadBytes - } - return false, copyOfUnreadBytes -} diff --git a/constraint/vendor/github.com/onsi/gomega/gbytes/io_wrappers.go b/constraint/vendor/github.com/onsi/gomega/gbytes/io_wrappers.go deleted file mode 100644 index a41ad6232..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gbytes/io_wrappers.go +++ /dev/null @@ -1,85 +0,0 @@ -package gbytes - -import ( - "errors" - "io" - "time" -) - -// ErrTimeout is returned by TimeoutCloser, TimeoutReader, and TimeoutWriter when the underlying Closer/Reader/Writer does not return within the specified timeout -var ErrTimeout = errors.New("timeout occurred") - -// TimeoutCloser returns an io.Closer that wraps the passed-in io.Closer. If the underlying Closer fails to close within the allotted timeout ErrTimeout is returned. -func TimeoutCloser(c io.Closer, timeout time.Duration) io.Closer { - return timeoutReaderWriterCloser{c: c, d: timeout} -} - -// TimeoutReader returns an io.Reader that wraps the passed-in io.Reader. If the underlying Reader fails to read within the allotted timeout ErrTimeout is returned. -func TimeoutReader(r io.Reader, timeout time.Duration) io.Reader { - return timeoutReaderWriterCloser{r: r, d: timeout} -} - -// TimeoutWriter returns an io.Writer that wraps the passed-in io.Writer. If the underlying Writer fails to write within the allotted timeout ErrTimeout is returned. -func TimeoutWriter(w io.Writer, timeout time.Duration) io.Writer { - return timeoutReaderWriterCloser{w: w, d: timeout} -} - -type timeoutReaderWriterCloser struct { - c io.Closer - w io.Writer - r io.Reader - d time.Duration -} - -func (t timeoutReaderWriterCloser) Close() error { - done := make(chan struct{}) - var err error - - go func() { - err = t.c.Close() - close(done) - }() - - select { - case <-done: - return err - case <-time.After(t.d): - return ErrTimeout - } -} - -func (t timeoutReaderWriterCloser) Read(p []byte) (int, error) { - done := make(chan struct{}) - var n int - var err error - - go func() { - n, err = t.r.Read(p) - close(done) - }() - - select { - case <-done: - return n, err - case <-time.After(t.d): - return 0, ErrTimeout - } -} - -func (t timeoutReaderWriterCloser) Write(p []byte) (int, error) { - done := make(chan struct{}) - var n int - var err error - - go func() { - n, err = t.w.Write(p) - close(done) - }() - - select { - case <-done: - return n, err - case <-time.After(t.d): - return 0, ErrTimeout - } -} diff --git a/constraint/vendor/github.com/onsi/gomega/gbytes/say_matcher.go b/constraint/vendor/github.com/onsi/gomega/gbytes/say_matcher.go deleted file mode 100644 index 0763f5e2d..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gbytes/say_matcher.go +++ /dev/null @@ -1,106 +0,0 @@ -// untested sections: 1 - -package gbytes - -import ( - "fmt" - "regexp" - - "github.com/onsi/gomega/format" -) - -//Objects satisfying the BufferProvider can be used with the Say matcher. -type BufferProvider interface { - Buffer() *Buffer -} - -/* -Say is a Gomega matcher that operates on gbytes.Buffers: - - Expect(buffer).Should(Say("something")) - -will succeed if the unread portion of the buffer matches the regular expression "something". - -When Say succeeds, it fast forwards the gbytes.Buffer's read cursor to just after the successful match. -Thus, subsequent calls to Say will only match against the unread portion of the buffer - -Say pairs very well with Eventually. To assert that a buffer eventually receives data matching "[123]-star" within 3 seconds you can: - - Eventually(buffer, 3).Should(Say("[123]-star")) - -Ditto with consistently. To assert that a buffer does not receive data matching "never-see-this" for 1 second you can: - - Consistently(buffer, 1).ShouldNot(Say("never-see-this")) - -In addition to bytes.Buffers, Say can operate on objects that implement the gbytes.BufferProvider interface. -In such cases, Say simply operates on the *gbytes.Buffer returned by Buffer() - -If the buffer is closed, the Say matcher will tell Eventually to abort. -*/ -func Say(expected string, args ...interface{}) *sayMatcher { - if len(args) > 0 { - expected = fmt.Sprintf(expected, args...) - } - return &sayMatcher{ - re: regexp.MustCompile(expected), - } -} - -type sayMatcher struct { - re *regexp.Regexp - receivedSayings []byte -} - -func (m *sayMatcher) buffer(actual interface{}) (*Buffer, bool) { - var buffer *Buffer - - switch x := actual.(type) { - case *Buffer: - buffer = x - case BufferProvider: - buffer = x.Buffer() - default: - return nil, false - } - - return buffer, true -} - -func (m *sayMatcher) Match(actual interface{}) (success bool, err error) { - buffer, ok := m.buffer(actual) - if !ok { - return false, fmt.Errorf("Say must be passed a *gbytes.Buffer or BufferProvider. Got:\n%s", format.Object(actual, 1)) - } - - didSay, sayings := buffer.didSay(m.re) - m.receivedSayings = sayings - - return didSay, nil -} - -func (m *sayMatcher) FailureMessage(actual interface{}) (message string) { - return fmt.Sprintf( - "Got stuck at:\n%s\nWaiting for:\n%s", - format.IndentString(string(m.receivedSayings), 1), - format.IndentString(m.re.String(), 1), - ) -} - -func (m *sayMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return fmt.Sprintf( - "Saw:\n%s\nWhich matches the unexpected:\n%s", - format.IndentString(string(m.receivedSayings), 1), - format.IndentString(m.re.String(), 1), - ) -} - -func (m *sayMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { - switch x := actual.(type) { - case *Buffer: - return !x.Closed() - case BufferProvider: - return !x.Buffer().Closed() - default: - return true - } -} diff --git a/constraint/vendor/github.com/onsi/gomega/gexec/build.go b/constraint/vendor/github.com/onsi/gomega/gexec/build.go deleted file mode 100644 index 741d845f4..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gexec/build.go +++ /dev/null @@ -1,114 +0,0 @@ -// untested sections: 5 - -package gexec - -import ( - "errors" - "fmt" - "go/build" - "io/ioutil" - "os" - "os/exec" - "path" - "path/filepath" - "runtime" - "strings" - "sync" -) - -var ( - mu sync.Mutex - tmpDir string -) - -/* -Build uses go build to compile the package at packagePath. The resulting binary is saved off in a temporary directory. -A path pointing to this binary is returned. - -Build uses the $GOPATH set in your environment. If $GOPATH is not set and you are using Go 1.8+, -it will use the default GOPATH instead. It passes the variadic args on to `go build`. -*/ -func Build(packagePath string, args ...string) (compiledPath string, err error) { - return doBuild(build.Default.GOPATH, packagePath, nil, args...) -} - -/* -BuildWithEnvironment is identical to Build but allows you to specify env vars to be set at build time. -*/ -func BuildWithEnvironment(packagePath string, env []string, args ...string) (compiledPath string, err error) { - return doBuild(build.Default.GOPATH, packagePath, env, args...) -} - -/* -BuildIn is identical to Build but allows you to specify a custom $GOPATH (the first argument). -*/ -func BuildIn(gopath string, packagePath string, args ...string) (compiledPath string, err error) { - return doBuild(gopath, packagePath, nil, args...) -} - -func replaceGoPath(environ []string, newGoPath string) []string { - newEnviron := []string{} - for _, v := range environ { - if !strings.HasPrefix(v, "GOPATH=") { - newEnviron = append(newEnviron, v) - } - } - return append(newEnviron, "GOPATH="+newGoPath) -} - -func doBuild(gopath, packagePath string, env []string, args ...string) (compiledPath string, err error) { - tmpDir, err := temporaryDirectory() - if err != nil { - return "", err - } - - if len(gopath) == 0 { - return "", errors.New("$GOPATH not provided when building " + packagePath) - } - - executable := filepath.Join(tmpDir, path.Base(packagePath)) - if runtime.GOOS == "windows" { - executable += ".exe" - } - - cmdArgs := append([]string{"build"}, args...) - cmdArgs = append(cmdArgs, "-o", executable, packagePath) - - build := exec.Command("go", cmdArgs...) - build.Env = replaceGoPath(os.Environ(), gopath) - build.Env = append(build.Env, env...) - - output, err := build.CombinedOutput() - if err != nil { - return "", fmt.Errorf("Failed to build %s:\n\nError:\n%s\n\nOutput:\n%s", packagePath, err, string(output)) - } - - return executable, nil -} - -/* -You should call CleanupBuildArtifacts before your test ends to clean up any temporary artifacts generated by -gexec. In Ginkgo this is typically done in an AfterSuite callback. -*/ -func CleanupBuildArtifacts() { - mu.Lock() - defer mu.Unlock() - if tmpDir != "" { - os.RemoveAll(tmpDir) - tmpDir = "" - } -} - -func temporaryDirectory() (string, error) { - var err error - mu.Lock() - defer mu.Unlock() - if tmpDir == "" { - tmpDir, err = ioutil.TempDir("", "gexec_artifacts") - if err != nil { - return "", err - } - } - - return ioutil.TempDir(tmpDir, "g") -} diff --git a/constraint/vendor/github.com/onsi/gomega/gexec/exit_matcher.go b/constraint/vendor/github.com/onsi/gomega/gexec/exit_matcher.go deleted file mode 100644 index 6e70de68d..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gexec/exit_matcher.go +++ /dev/null @@ -1,88 +0,0 @@ -// untested sections: 2 - -package gexec - -import ( - "fmt" - - "github.com/onsi/gomega/format" -) - -/* -The Exit matcher operates on a session: - - Expect(session).Should(Exit()) - -Exit passes if the session has already exited. - -If no status code is provided, then Exit will succeed if the session has exited regardless of exit code. -Otherwise, Exit will only succeed if the process has exited with the provided status code. - -Note that the process must have already exited. To wait for a process to exit, use Eventually: - - Eventually(session, 3).Should(Exit(0)) -*/ -func Exit(optionalExitCode ...int) *exitMatcher { - exitCode := -1 - if len(optionalExitCode) > 0 { - exitCode = optionalExitCode[0] - } - - return &exitMatcher{ - exitCode: exitCode, - } -} - -type exitMatcher struct { - exitCode int - didExit bool - actualExitCode int -} - -type Exiter interface { - ExitCode() int -} - -func (m *exitMatcher) Match(actual interface{}) (success bool, err error) { - exiter, ok := actual.(Exiter) - if !ok { - return false, fmt.Errorf("Exit must be passed a gexec.Exiter (Missing method ExitCode() int) Got:\n%s", format.Object(actual, 1)) - } - - m.actualExitCode = exiter.ExitCode() - - if m.actualExitCode == -1 { - return false, nil - } - - if m.exitCode == -1 { - return true, nil - } - return m.exitCode == m.actualExitCode, nil -} - -func (m *exitMatcher) FailureMessage(actual interface{}) (message string) { - if m.actualExitCode == -1 { - return "Expected process to exit. It did not." - } - return format.Message(m.actualExitCode, "to match exit code:", m.exitCode) -} - -func (m *exitMatcher) NegatedFailureMessage(actual interface{}) (message string) { - if m.actualExitCode == -1 { - return "you really shouldn't be able to see this!" - } else { - if m.exitCode == -1 { - return "Expected process not to exit. It did." - } - return format.Message(m.actualExitCode, "not to match exit code:", m.exitCode) - } -} - -func (m *exitMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { - session, ok := actual.(*Session) - if ok { - return session.ExitCode() == -1 - } - return true -} diff --git a/constraint/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go b/constraint/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go deleted file mode 100644 index feb6620c5..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go +++ /dev/null @@ -1,55 +0,0 @@ -// untested sections: 1 - -package gexec - -import ( - "io" - "sync" -) - -/* -PrefixedWriter wraps an io.Writer, emitting the passed in prefix at the beginning of each new line. -This can be useful when running multiple gexec.Sessions concurrently - you can prefix the log output of each -session by passing in a PrefixedWriter: - -gexec.Start(cmd, NewPrefixedWriter("[my-cmd] ", GinkgoWriter), NewPrefixedWriter("[my-cmd] ", GinkgoWriter)) -*/ -type PrefixedWriter struct { - prefix []byte - writer io.Writer - lock *sync.Mutex - atStartOfLine bool -} - -func NewPrefixedWriter(prefix string, writer io.Writer) *PrefixedWriter { - return &PrefixedWriter{ - prefix: []byte(prefix), - writer: writer, - lock: &sync.Mutex{}, - atStartOfLine: true, - } -} - -func (w *PrefixedWriter) Write(b []byte) (int, error) { - w.lock.Lock() - defer w.lock.Unlock() - - toWrite := []byte{} - - for _, c := range b { - if w.atStartOfLine { - toWrite = append(toWrite, w.prefix...) - } - - toWrite = append(toWrite, c) - - w.atStartOfLine = c == '\n' - } - - _, err := w.writer.Write(toWrite) - if err != nil { - return 0, err - } - - return len(b), nil -} diff --git a/constraint/vendor/github.com/onsi/gomega/gexec/session.go b/constraint/vendor/github.com/onsi/gomega/gexec/session.go deleted file mode 100644 index 6a09140fb..000000000 --- a/constraint/vendor/github.com/onsi/gomega/gexec/session.go +++ /dev/null @@ -1,306 +0,0 @@ -/* -Package gexec provides support for testing external processes. -*/ - -// untested sections: 1 - -package gexec - -import ( - "io" - "os" - "os/exec" - "sync" - "syscall" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" -) - -const INVALID_EXIT_CODE = 254 - -type Session struct { - //The wrapped command - Command *exec.Cmd - - //A *gbytes.Buffer connected to the command's stdout - Out *gbytes.Buffer - - //A *gbytes.Buffer connected to the command's stderr - Err *gbytes.Buffer - - //A channel that will close when the command exits - Exited <-chan struct{} - - lock *sync.Mutex - exitCode int -} - -/* -Start starts the passed-in *exec.Cmd command. It wraps the command in a *gexec.Session. - -The session pipes the command's stdout and stderr to two *gbytes.Buffers available as properties on the session: session.Out and session.Err. -These buffers can be used with the gbytes.Say matcher to match against unread output: - - Expect(session.Out).Should(gbytes.Say("foo-out")) - Expect(session.Err).Should(gbytes.Say("foo-err")) - -In addition, Session satisfies the gbytes.BufferProvider interface and provides the stdout *gbytes.Buffer. This allows you to replace the first line, above, with: - - Expect(session).Should(gbytes.Say("foo-out")) - -When outWriter and/or errWriter are non-nil, the session will pipe stdout and/or stderr output both into the session *gybtes.Buffers and to the passed-in outWriter/errWriter. -This is useful for capturing the process's output or logging it to screen. In particular, when using Ginkgo it can be convenient to direct output to the GinkgoWriter: - - session, err := Start(command, GinkgoWriter, GinkgoWriter) - -This will log output when running tests in verbose mode, but - otherwise - will only log output when a test fails. - -The session wrapper is responsible for waiting on the *exec.Cmd command. You *should not* call command.Wait() yourself. -Instead, to assert that the command has exited you can use the gexec.Exit matcher: - - Expect(session).Should(gexec.Exit()) - -When the session exits it closes the stdout and stderr gbytes buffers. This will short circuit any -Eventuallys waiting for the buffers to Say something. -*/ -func Start(command *exec.Cmd, outWriter io.Writer, errWriter io.Writer) (*Session, error) { - exited := make(chan struct{}) - - session := &Session{ - Command: command, - Out: gbytes.NewBuffer(), - Err: gbytes.NewBuffer(), - Exited: exited, - lock: &sync.Mutex{}, - exitCode: -1, - } - - var commandOut, commandErr io.Writer - - commandOut, commandErr = session.Out, session.Err - - if outWriter != nil { - commandOut = io.MultiWriter(commandOut, outWriter) - } - - if errWriter != nil { - commandErr = io.MultiWriter(commandErr, errWriter) - } - - command.Stdout = commandOut - command.Stderr = commandErr - - err := command.Start() - if err == nil { - go session.monitorForExit(exited) - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - trackedSessions = append(trackedSessions, session) - } - - return session, err -} - -/* -Buffer implements the gbytes.BufferProvider interface and returns s.Out -This allows you to make gbytes.Say matcher assertions against stdout without having to reference .Out: - - Eventually(session).Should(gbytes.Say("foo")) -*/ -func (s *Session) Buffer() *gbytes.Buffer { - return s.Out -} - -/* -ExitCode returns the wrapped command's exit code. If the command hasn't exited yet, ExitCode returns -1. - -To assert that the command has exited it is more convenient to use the Exit matcher: - - Eventually(s).Should(gexec.Exit()) - -When the process exits because it has received a particular signal, the exit code will be 128+signal-value -(See http://www.tldp.org/LDP/abs/html/exitcodes.html and http://man7.org/linux/man-pages/man7/signal.7.html) - -*/ -func (s *Session) ExitCode() int { - s.lock.Lock() - defer s.lock.Unlock() - return s.exitCode -} - -/* -Wait waits until the wrapped command exits. It can be passed an optional timeout. -If the command does not exit within the timeout, Wait will trigger a test failure. - -Wait returns the session, making it possible to chain: - - session.Wait().Out.Contents() - -will wait for the command to exit then return the entirety of Out's contents. - -Wait uses eventually under the hood and accepts the same timeout/polling intervals that eventually does. -*/ -func (s *Session) Wait(timeout ...interface{}) *Session { - EventuallyWithOffset(1, s, timeout...).Should(Exit()) - return s -} - -/* -Kill sends the running command a SIGKILL signal. It does not wait for the process to exit. - -If the command has already exited, Kill returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Kill() *Session { - return s.Signal(syscall.SIGKILL) -} - -/* -Interrupt sends the running command a SIGINT signal. It does not wait for the process to exit. - -If the command has already exited, Interrupt returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Interrupt() *Session { - return s.Signal(syscall.SIGINT) -} - -/* -Terminate sends the running command a SIGTERM signal. It does not wait for the process to exit. - -If the command has already exited, Terminate returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Terminate() *Session { - return s.Signal(syscall.SIGTERM) -} - -/* -Signal sends the running command the passed in signal. It does not wait for the process to exit. - -If the command has already exited, Signal returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Signal(signal os.Signal) *Session { - if s.processIsAlive() { - s.Command.Process.Signal(signal) - } - return s -} - -func (s *Session) monitorForExit(exited chan<- struct{}) { - err := s.Command.Wait() - s.lock.Lock() - s.Out.Close() - s.Err.Close() - status := s.Command.ProcessState.Sys().(syscall.WaitStatus) - if status.Signaled() { - s.exitCode = 128 + int(status.Signal()) - } else { - exitStatus := status.ExitStatus() - if exitStatus == -1 && err != nil { - s.exitCode = INVALID_EXIT_CODE - } - s.exitCode = exitStatus - } - s.lock.Unlock() - - close(exited) -} - -func (s *Session) processIsAlive() bool { - return s.ExitCode() == -1 && s.Command.Process != nil -} - -var trackedSessions = []*Session{} -var trackedSessionsMutex = &sync.Mutex{} - -/* -Kill sends a SIGKILL signal to all the processes started by Run, and waits for them to exit. -The timeout specified is applied to each process killed. - -If any of the processes already exited, KillAndWait returns silently. -*/ -func KillAndWait(timeout ...interface{}) { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Kill().Wait(timeout...) - } - trackedSessions = []*Session{} -} - -/* -Kill sends a SIGTERM signal to all the processes started by Run, and waits for them to exit. -The timeout specified is applied to each process killed. - -If any of the processes already exited, TerminateAndWait returns silently. -*/ -func TerminateAndWait(timeout ...interface{}) { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Terminate().Wait(timeout...) - } -} - -/* -Kill sends a SIGKILL signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Kill returns silently. -*/ -func Kill() { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Kill() - } -} - -/* -Terminate sends a SIGTERM signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Terminate returns silently. -*/ -func Terminate() { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Terminate() - } -} - -/* -Signal sends the passed in signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Signal returns silently. -*/ -func Signal(signal os.Signal) { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Signal(signal) - } -} - -/* -Interrupt sends the SIGINT signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Interrupt returns silently. -*/ -func Interrupt() { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Interrupt() - } -} diff --git a/constraint/vendor/github.com/onsi/gomega/go.mod b/constraint/vendor/github.com/onsi/gomega/go.mod index 6f853a579..f74d9ea10 100644 --- a/constraint/vendor/github.com/onsi/gomega/go.mod +++ b/constraint/vendor/github.com/onsi/gomega/go.mod @@ -3,8 +3,8 @@ module github.com/onsi/gomega go 1.14 require ( - github.com/golang/protobuf v1.4.2 - github.com/onsi/ginkgo v1.12.1 - golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb - gopkg.in/yaml.v2 v2.3.0 + github.com/golang/protobuf v1.5.2 + github.com/onsi/ginkgo v1.16.2 + golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/constraint/vendor/github.com/onsi/gomega/go.sum b/constraint/vendor/github.com/onsi/gomega/go.sum index 54eeacd2b..1ae731a5c 100644 --- a/constraint/vendor/github.com/onsi/gomega/go.sum +++ b/constraint/vendor/github.com/onsi/gomega/go.sum @@ -1,66 +1,93 @@ -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.2 h1:HFB2fbVIlhIfCfOW81bZFbiC/RvnpXSdhbF2/DJr134= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e h1:N7DeIrjYszNmSW409R3frPPwglRwMkXSBzwVbkOjLLA= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/constraint/vendor/github.com/onsi/gomega/gomega_dsl.go b/constraint/vendor/github.com/onsi/gomega/gomega_dsl.go index 1bc5288b8..a05b34b27 100644 --- a/constraint/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/constraint/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -24,7 +24,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.10.5" +const GOMEGA_VERSION = "1.13.0" const nilFailHandlerPanic = `You are trying to make an assertion, but Gomega's fail handler is nil. If you're using Ginkgo then you probably forgot to put your assertion in an It(). diff --git a/constraint/vendor/github.com/onsi/gomega/internal/defaults/env.go b/constraint/vendor/github.com/onsi/gomega/internal/defaults/env.go new file mode 100644 index 000000000..bc29c63d5 --- /dev/null +++ b/constraint/vendor/github.com/onsi/gomega/internal/defaults/env.go @@ -0,0 +1,22 @@ +package defaults + +import ( + "fmt" + "time" +) + +func SetDurationFromEnv(getDurationFromEnv func(string) string, varSetter func(time.Duration), name string) { + durationFromEnv := getDurationFromEnv(name) + + if len(durationFromEnv) == 0 { + return + } + + duration, err := time.ParseDuration(durationFromEnv) + + if err != nil { + panic(fmt.Sprintf("Expected a duration when using %s! Parse error %v", name, err)) + } + + varSetter(duration) +} diff --git a/constraint/vendor/github.com/onsi/gomega/matchers.go b/constraint/vendor/github.com/onsi/gomega/matchers.go index 16218d4c5..667160ade 100644 --- a/constraint/vendor/github.com/onsi/gomega/matchers.go +++ b/constraint/vendor/github.com/onsi/gomega/matchers.go @@ -474,3 +474,11 @@ func Not(matcher types.GomegaMatcher) types.GomegaMatcher { func WithTransform(transform interface{}, matcher types.GomegaMatcher) types.GomegaMatcher { return matchers.NewWithTransformMatcher(transform, matcher) } + +//Satisfy matches the actual value against the `predicate` function. +//The given predicate must be a function of one paramter that returns bool. +// var isEven = func(i int) bool { return i%2 == 0 } +// Expect(2).To(Satisfy(isEven)) +func Satisfy(predicate interface{}) types.GomegaMatcher { + return matchers.NewSatisfyMatcher(predicate) +} diff --git a/constraint/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go b/constraint/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go index 1f9d7a8e6..9ee75a5d5 100644 --- a/constraint/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go +++ b/constraint/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go @@ -18,23 +18,9 @@ func (matcher *BeElementOfMatcher) Match(actual interface{}) (success bool, err return false, fmt.Errorf("BeElement matcher expects actual to be typed") } - length := len(matcher.Elements) - valueAt := func(i int) interface{} { - return matcher.Elements[i] - } - // Special handling of a single element of type Array or Slice - if length == 1 && isArrayOrSlice(valueAt(0)) { - element := valueAt(0) - value := reflect.ValueOf(element) - length = value.Len() - valueAt = func(i int) interface{} { - return value.Index(i).Interface() - } - } - var lastError error - for i := 0; i < length; i++ { - matcher := &EqualMatcher{Expected: valueAt(i)} + for _, m := range flatten(matcher.Elements) { + matcher := &EqualMatcher{Expected: m} success, err := matcher.Match(actual) if err != nil { lastError = err @@ -49,9 +35,9 @@ func (matcher *BeElementOfMatcher) Match(actual interface{}) (success bool, err } func (matcher *BeElementOfMatcher) FailureMessage(actual interface{}) (message string) { - return format.Message(actual, "to be an element of", matcher.Elements) + return format.Message(actual, "to be an element of", presentable(matcher.Elements)) } func (matcher *BeElementOfMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, "not to be an element of", matcher.Elements) + return format.Message(actual, "not to be an element of", presentable(matcher.Elements)) } diff --git a/constraint/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go b/constraint/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go index f72591a1a..100735de3 100644 --- a/constraint/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go +++ b/constraint/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go @@ -45,7 +45,7 @@ func (matcher *BeNumericallyMatcher) Match(actual interface{}) (success bool, er return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[0], 1)) } if len(matcher.CompareTo) == 2 && !isNumber(matcher.CompareTo[1]) { - return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[0], 1)) + return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[1], 1)) } switch matcher.Comparator { diff --git a/constraint/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go b/constraint/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go new file mode 100644 index 000000000..ec68fe8b6 --- /dev/null +++ b/constraint/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go @@ -0,0 +1,66 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type SatisfyMatcher struct { + Predicate interface{} + + // cached type + predicateArgType reflect.Type +} + +func NewSatisfyMatcher(predicate interface{}) *SatisfyMatcher { + if predicate == nil { + panic("predicate cannot be nil") + } + predicateType := reflect.TypeOf(predicate) + if predicateType.Kind() != reflect.Func { + panic("predicate must be a function") + } + if predicateType.NumIn() != 1 { + panic("predicate must have 1 argument") + } + if predicateType.NumOut() != 1 || predicateType.Out(0).Kind() != reflect.Bool { + panic("predicate must return bool") + } + + return &SatisfyMatcher{ + Predicate: predicate, + predicateArgType: predicateType.In(0), + } +} + +func (m *SatisfyMatcher) Match(actual interface{}) (success bool, err error) { + // prepare a parameter to pass to the predicate + var param reflect.Value + if actual != nil && reflect.TypeOf(actual).AssignableTo(m.predicateArgType) { + // The dynamic type of actual is compatible with the predicate argument. + param = reflect.ValueOf(actual) + + } else if actual == nil && m.predicateArgType.Kind() == reflect.Interface { + // The dynamic type of actual is unknown, so there's no way to make its + // reflect.Value. Create a nil of the predicate argument, which is known. + param = reflect.Zero(m.predicateArgType) + + } else { + return false, fmt.Errorf("predicate expects '%s' but we have '%T'", m.predicateArgType, actual) + } + + // call the predicate with `actual` + fn := reflect.ValueOf(m.Predicate) + result := fn.Call([]reflect.Value{param}) + return result[0].Bool(), nil +} + +func (m *SatisfyMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to satisfy predicate", m.Predicate) +} + +func (m *SatisfyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to not satisfy predicate", m.Predicate) +} diff --git a/constraint/vendor/github.com/onsi/gomega/matchers/with_transform.go b/constraint/vendor/github.com/onsi/gomega/matchers/with_transform.go index 8e58d8a0f..f3dec9101 100644 --- a/constraint/vendor/github.com/onsi/gomega/matchers/with_transform.go +++ b/constraint/vendor/github.com/onsi/gomega/matchers/with_transform.go @@ -40,15 +40,24 @@ func NewWithTransformMatcher(transform interface{}, matcher types.GomegaMatcher) } func (m *WithTransformMatcher) Match(actual interface{}) (bool, error) { - // return error if actual's type is incompatible with Transform function's argument type - actualType := reflect.TypeOf(actual) - if !actualType.AssignableTo(m.transformArgType) { - return false, fmt.Errorf("Transform function expects '%s' but we have '%s'", m.transformArgType, actualType) + // prepare a parameter to pass to the Transform function + var param reflect.Value + if actual != nil && reflect.TypeOf(actual).AssignableTo(m.transformArgType) { + // The dynamic type of actual is compatible with the transform argument. + param = reflect.ValueOf(actual) + + } else if actual == nil && m.transformArgType.Kind() == reflect.Interface { + // The dynamic type of actual is unknown, so there's no way to make its + // reflect.Value. Create a nil of the transform argument, which is known. + param = reflect.Zero(m.transformArgType) + + } else { + return false, fmt.Errorf("Transform function expects '%s' but we have '%T'", m.transformArgType, actual) } // call the Transform function with `actual` fn := reflect.ValueOf(m.Transform) - result := fn.Call([]reflect.Value{reflect.ValueOf(actual)}) + result := fn.Call([]reflect.Value{param}) m.transformedValue = result[0].Interface() // expect exactly one value return m.Matcher.Match(m.transformedValue) diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/builtins.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/builtins.go index 5ddde37ba..f38677811 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/builtins.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/builtins.go @@ -33,6 +33,10 @@ var DefaultBuiltins = [...]*Builtin{ // Assignment (":=") Assign, + // Membership, infix "in": `x in xs` + Member, + MemberWithKey, + // Comparisons GreaterThan, GreaterThanEq, @@ -126,6 +130,7 @@ var DefaultBuiltins = [...]*Builtin{ // Numbers NumbersRange, + RandIntn, // Encoding JSONMarshal, @@ -189,10 +194,12 @@ var DefaultBuiltins = [...]*Builtin{ // Crypto CryptoX509ParseCertificates, + CryptoX509ParseAndVerifyCertificates, CryptoMd5, CryptoSha1, CryptoSha256, CryptoX509ParseCertificateRequest, + CryptoX509ParseRSAPrivateKey, // Graphs WalkBuiltin, @@ -223,13 +230,14 @@ var DefaultBuiltins = [...]*Builtin{ // Tracing Trace, - // CIDR + // Networking NetCIDROverlap, NetCIDRIntersects, NetCIDRContains, NetCIDRContainsMatches, NetCIDRExpand, NetCIDRMerge, + NetLookupIPAddr, // Glob GlobMatch, @@ -244,6 +252,10 @@ var DefaultBuiltins = [...]*Builtin{ //SemVers SemVerIsValid, SemVerCompare, + + // Printing + Print, + InternalPrint, } // BuiltinMap provides a convenient mapping of built-in names to @@ -257,6 +269,8 @@ var IgnoreDuringPartialEval = []*Builtin{ NowNanos, HTTPSend, UUIDRFC4122, + RandIntn, + NetLookupIPAddr, } /** @@ -287,6 +301,34 @@ var Assign = &Builtin{ ), } +// Member represents the `in` (infix) operator. +var Member = &Builtin{ + Name: "internal.member_2", + Infix: "in", + Decl: types.NewFunction( + types.Args( + types.A, + types.A, + ), + types.B, + ), +} + +// MemberWithKey represents the `in` (infix) operator when used +// with two terms on the lhs, i.e., `k, v in obj`. +var MemberWithKey = &Builtin{ + Name: "internal.member_3", + Infix: "in", + Decl: types.NewFunction( + types.Args( + types.A, + types.A, + types.A, + ), + types.B, + ), +} + /** * Comparisons */ @@ -1038,6 +1080,18 @@ var Sprintf = &Builtin{ * Numbers */ +// RandIntn returns a random number 0 - n +var RandIntn = &Builtin{ + Name: "rand.intn", + Decl: types.NewFunction( + types.Args( + types.S, + types.N, + ), + types.N, + ), +} + // NumbersRange returns an array of numbers in the given inclusive range. var NumbersRange = &Builtin{ Name: "numbers.range", @@ -1755,6 +1809,23 @@ var CryptoX509ParseCertificates = &Builtin{ ), } +// CryptoX509ParseAndVerifyCertificates returns one or more certificates from the given +// string containing PEM or base64 encoded DER certificates after verifying the supplied +// certificates form a complete certificate chain back to a trusted root. +// +// The first certificate is treated as the root and the last is treated as the leaf, +// with all others being treated as intermediates +var CryptoX509ParseAndVerifyCertificates = &Builtin{ + Name: "crypto.x509.parse_and_verify_certificates", + Decl: types.NewFunction( + types.Args(types.S), + types.NewArray([]types.Type{ + types.B, + types.NewArray(nil, types.NewObject(nil, types.NewDynamicProperty(types.S, types.A))), + }, nil), + ), +} + // CryptoX509ParseCertificateRequest returns a PKCS #10 certificate signing // request from the given PEM-encoded PKCS#10 certificate signing request. var CryptoX509ParseCertificateRequest = &Builtin{ @@ -1765,6 +1836,16 @@ var CryptoX509ParseCertificateRequest = &Builtin{ ), } +// CryptoX509ParseRSAPrivateKey returns a JWK for signing a JWT from the given +// PEM-encoded RSA private key. +var CryptoX509ParseRSAPrivateKey = &Builtin{ + Name: "crypto.x509.parse_rsa_private_key", + Decl: types.NewFunction( + types.Args(types.S), + types.NewObject(nil, types.NewDynamicProperty(types.S, types.A)), + ), +} + // CryptoMd5 returns a string representing the input string hashed with the md5 function var CryptoMd5 = &Builtin{ Name: "crypto.md5", @@ -2065,7 +2146,7 @@ var GlobQuoteMeta = &Builtin{ } /** - * Net CIDR + * Networking */ // NetCIDRIntersects checks if a cidr intersects with another cidr and returns true or false @@ -2145,6 +2226,17 @@ var netCidrContainsMatchesOperandType = types.NewAny( )), ) +// NetLookupIPAddr returns the set of IP addresses (as strings, both v4 and v6) +// that the passed-in name (string) resolves to using the standard name resolution +// mechanisms available. +var NetLookupIPAddr = &Builtin{ + Name: "net.lookup_ip_addr", + Decl: types.NewFunction( + types.Args(types.S), + types.NewSet(types.S), + ), +} + /** * Semantic Versions */ @@ -2175,6 +2267,27 @@ var SemVerCompare = &Builtin{ ), } +/** + * Printing + */ + +// Print is a special built-in function that writes zero or more operands +// to a message buffer. The caller controls how the buffer is displayed. The +// operands may be of any type. Furthermore, unlike other built-in functions, +// undefined operands DO NOT cause the print() function to fail during +// evaluation. +var Print = &Builtin{ + Name: "print", + Decl: types.NewVariadicFunction(nil, types.A, nil), +} + +// InternalPrint represents the internal implementation of the print() function. +// The compiler rewrites print() calls to refer to the internal implementation. +var InternalPrint = &Builtin{ + Name: "internal.print", + Decl: types.NewFunction([]types.Type{types.NewArray(nil, types.NewSet(types.A))}, nil), +} + /** * Deprecated built-ins. */ diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/capabilities.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/capabilities.go index c7eec63f9..a6b162edf 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/capabilities.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/capabilities.go @@ -15,8 +15,18 @@ import ( // Capabilities defines a structure containing data that describes the capablilities // or features supported by a particular version of OPA. type Capabilities struct { - Builtins []*Builtin `json:"builtins"` // builtins is a set of built-in functions that are supported. + Builtins []*Builtin `json:"builtins"` + FutureKeywords []string `json:"future_keywords"` WasmABIVersions []WasmABIVersion `json:"wasm_abi_versions"` + + // allow_net is an array of hostnames or IP addresses, that an OPA instance is + // allowed to connect to. + // If omitted, ANY host can be connected to. If empty, NO host can be connected to. + // As of now, this only controls fetching remote refs for using JSON Schemas in + // the type checker. + // TODO(sr): support ports to further restrict connection peers + // TODO(sr): support restricting `http.send` using the same mechanism (see https://github.com/open-policy-agent/opa/issues/3665) + AllowNet []string `json:"allow_net,omitempty"` } // WasmABIVersion captures the Wasm ABI version. Its `Minor` version is indicating @@ -39,6 +49,11 @@ func CapabilitiesForThisVersion() *Capabilities { return f.Builtins[i].Name < f.Builtins[j].Name }) + for kw := range futureKeywords { + f.FutureKeywords = append(f.FutureKeywords, kw) + } + sort.Strings(f.FutureKeywords) + return f } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/check.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/check.go index 0a3a22f15..1e0971bc8 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/check.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/check.go @@ -13,7 +13,7 @@ import ( "github.com/open-policy-agent/opa/util" ) -type rewriteVars func(x Ref) Ref +type varRewriter func(Ref) Ref // exprChecker defines the interface for executing type checking on a single // expression. The exprChecker must update the provided TypeEnv with inferred @@ -26,8 +26,9 @@ type exprChecker func(*TypeEnv, *Expr) *Error type typeChecker struct { errs Errors exprCheckers map[string]exprChecker - varRewriter rewriteVars + varRewriter varRewriter ss *SchemaSet + allowNet []string input types.Type } @@ -55,6 +56,7 @@ func (tc *typeChecker) copy() *typeChecker { return newTypeChecker(). WithVarRewriter(tc.varRewriter). WithSchemaSet(tc.ss). + WithAllowNet(tc.allowNet). WithInputType(tc.input) } @@ -63,7 +65,12 @@ func (tc *typeChecker) WithSchemaSet(ss *SchemaSet) *typeChecker { return tc } -func (tc *typeChecker) WithVarRewriter(f rewriteVars) *typeChecker { +func (tc *typeChecker) WithAllowNet(hosts []string) *typeChecker { + tc.allowNet = hosts + return tc +} + +func (tc *typeChecker) WithVarRewriter(f varRewriter) *typeChecker { tc.varRewriter = f return tc } @@ -180,7 +187,7 @@ func (tc *typeChecker) checkRule(env *TypeEnv, as *annotationSet, rule *Rule) { if schemaAnnots := getRuleAnnotation(as, rule); schemaAnnots != nil { for _, schemaAnnot := range schemaAnnots { - ref, refType, err := processAnnotation(tc.ss, schemaAnnot, rule) + ref, refType, err := processAnnotation(tc.ss, schemaAnnot, rule, tc.allowNet) if err != nil { tc.err([]*Error{err}) continue @@ -311,27 +318,27 @@ func (tc *typeChecker) checkExprBuiltin(env *TypeEnv, expr *Expr) *Error { return NewError(TypeErr, expr.Location, "undefined function %v", name) } - maxArgs := len(ftpe.Args()) - expArgs := ftpe.Args() + fargs := ftpe.FuncArgs() if ftpe.Result() != nil { - maxArgs++ - expArgs = append(expArgs, ftpe.Result()) + fargs.Args = append(fargs.Args, ftpe.Result()) + } + + if len(args) > len(fargs.Args) && fargs.Variadic == nil { + return newArgError(expr.Location, name, "too many arguments", pre, fargs) } - if len(args) > maxArgs { - return newArgError(expr.Location, name, "too many arguments", pre, expArgs) - } else if len(args) < len(ftpe.Args()) { - return newArgError(expr.Location, name, "too few arguments", pre, expArgs) + if len(args) < len(ftpe.FuncArgs().Args) { + return newArgError(expr.Location, name, "too few arguments", pre, fargs) } for i := range args { - if !unify1(env, args[i], expArgs[i], false) { + if !unify1(env, args[i], fargs.Arg(i), false) { post := make([]types.Type, len(args)) for i := range args { post[i] = env.Get(args[i]) } - return newArgError(expr.Location, name, "invalid argument(s)", post, expArgs) + return newArgError(expr.Location, name, "invalid argument(s)", post, fargs) } } @@ -341,11 +348,13 @@ func (tc *typeChecker) checkExprBuiltin(env *TypeEnv, expr *Expr) *Error { func (tc *typeChecker) checkExprEq(env *TypeEnv, expr *Expr) *Error { pre := getArgTypes(env, expr.Operands()) - exp := Equality.Decl.Args() + exp := Equality.Decl.FuncArgs() - if len(pre) < len(exp) { + if len(pre) < len(exp.Args) { return newArgError(expr.Location, expr.Operator(), "too few arguments", pre, exp) - } else if len(exp) < len(pre) { + } + + if len(exp.Args) < len(pre) { return newArgError(expr.Location, expr.Operator(), "too many arguments", pre, exp) } @@ -561,10 +570,14 @@ func (tc *typeChecker) err(errors []*Error) { type refChecker struct { env *TypeEnv errs Errors - varRewriter rewriteVars + varRewriter varRewriter } -func newRefChecker(env *TypeEnv, f rewriteVars) *refChecker { +func rewriteVarsNop(node Ref) Ref { + return node +} + +func newRefChecker(env *TypeEnv, f varRewriter) *refChecker { if f == nil { f = rewriteVarsNop @@ -873,15 +886,15 @@ func causedByNilType(err *Error) bool { // ArgErrDetail represents a generic argument error. type ArgErrDetail struct { - Have []types.Type `json:"have"` - Want []types.Type `json:"want"` + Have []types.Type `json:"have"` + Want types.FuncArgs `json:"want"` } // Lines returns the string representation of the detail. func (d *ArgErrDetail) Lines() []string { lines := make([]string, 2) - lines[0] = fmt.Sprint("have: ", formatArgs(d.Have)) - lines[1] = fmt.Sprint("want: ", formatArgs(d.Want)) + lines[0] = "have: " + formatArgs(d.Have) + lines[1] = "want: " + fmt.Sprint(d.Want) return lines } @@ -995,7 +1008,7 @@ func newRefError(loc *Location, ref Ref) *Error { return NewError(TypeErr, loc, "undefined ref: %v", ref) } -func newArgError(loc *Location, builtinName Ref, msg string, have []types.Type, want []types.Type) *Error { +func newArgError(loc *Location, builtinName Ref, msg string, have []types.Type, want types.FuncArgs) *Error { err := NewError(TypeErr, loc, "%v: %v", builtinName, msg) err.Details = &ArgErrDetail{ Have: have, @@ -1024,7 +1037,15 @@ func getOneOfForType(tpe types.Type) (result []Value) { } result = append(result, v) } + + case types.Any: + for _, object := range tpe { + objRes := getOneOfForType(object) + result = append(result, objRes...) + } } + + result = removeDuplicate(result) sortValueSlice(result) return result } @@ -1035,6 +1056,18 @@ func sortValueSlice(sl []Value) { }) } +func removeDuplicate(list []Value) []Value { + seen := make(map[Value]bool) + var newResult []Value + for _, item := range list { + if !seen[item] { + newResult = append(newResult, item) + seen[item] = true + } + } + return newResult +} + func getArgTypes(env *TypeEnv, args []*Term) []types.Type { pre := make([]types.Type, len(args)) for i := range args { @@ -1158,7 +1191,7 @@ func getRuleAnnotation(as *annotationSet, rule *Rule) (result []*SchemaAnnotatio return result } -func processAnnotation(ss *SchemaSet, annot *SchemaAnnotation, rule *Rule) (Ref, types.Type, *Error) { +func processAnnotation(ss *SchemaSet, annot *SchemaAnnotation, rule *Rule, allowNet []string) (Ref, types.Type, *Error) { var schema interface{} @@ -1171,7 +1204,7 @@ func processAnnotation(ss *SchemaSet, annot *SchemaAnnotation, rule *Rule) (Ref, schema = *annot.Definition } - tpe, err := loadSchema(schema) + tpe, err := loadSchema(schema, allowNet) if err != nil { return nil, nil, NewError(TypeErr, rule.Location, err.Error()) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/compare.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/compare.go index bdffeb06d..685082da6 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/compare.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/compare.go @@ -23,17 +23,18 @@ import ( // ArrayComprehension < ObjectComprehension < SetComprehension < Expr < SomeDecl // < With < Body < Rule < Import < Package < Module. // -// Arrays and Refs are equal iff both a and b have the same length and all -// corresponding elements are equal. If one element is not equal, the return -// value is the same as for the first differing element. If all elements are -// equal but a and b have different lengths, the shorter is considered less than -// the other. +// Arrays and Refs are equal if and only if both a and b have the same length +// and all corresponding elements are equal. If one element is not equal, the +// return value is the same as for the first differing element. If all elements +// are equal but a and b have different lengths, the shorter is considered less +// than the other. // -// Objects are considered equal iff both a and b have the same sorted (key, -// value) pairs and are of the same length. Other comparisons are consistent but -// not defined. +// Objects are considered equal if and only if both a and b have the same sorted +// (key, value) pairs and are of the same length. Other comparisons are +// consistent but not defined. // -// Sets are considered equal iff the symmetric difference of a and b is empty. +// Sets are considered equal if and only if the symmetric difference of a and b +// is empty. // Other comparisons are consistent but not defined. func Compare(a, b interface{}) int { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/compile.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/compile.go index 6fbc26a0c..eddfbd21c 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/compile.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/compile.go @@ -94,20 +94,21 @@ type Compiler struct { metricName string f func() } - maxErrs int - sorted []string // list of sorted module names - pathExists func([]string) (bool, error) - after map[string][]CompilerStageDefinition - metrics metrics.Metrics - capabilities *Capabilities // user-supplied capabilities - builtins map[string]*Builtin // universe of built-in functions - customBuiltins map[string]*Builtin // user-supplied custom built-in functions (deprecated: use capabilities) - unsafeBuiltinsMap map[string]struct{} // user-supplied set of unsafe built-ins functions to block (deprecated: use capabilities) - comprehensionIndices map[*Term]*ComprehensionIndex // comprehension key index - initialized bool // indicates if init() has been called - debug debug.Debug // emits debug information produced during compilation - schemaSet *SchemaSet // user-supplied schemas for input and data documents - inputType types.Type // global input type retrieved from schema set + maxErrs int + sorted []string // list of sorted module names + pathExists func([]string) (bool, error) + after map[string][]CompilerStageDefinition + metrics metrics.Metrics + capabilities *Capabilities // user-supplied capabilities + builtins map[string]*Builtin // universe of built-in functions + customBuiltins map[string]*Builtin // user-supplied custom built-in functions (deprecated: use capabilities) + unsafeBuiltinsMap map[string]struct{} // user-supplied set of unsafe built-ins functions to block (deprecated: use capabilities) + enablePrintStatements bool // indicates if print statements should be elided (default) + comprehensionIndices map[*Term]*ComprehensionIndex // comprehension key index + initialized bool // indicates if init() has been called + debug debug.Debug // emits debug information produced during compilation + schemaSet *SchemaSet // user-supplied schemas for input and data documents + inputType types.Type // global input type retrieved from schema set } // CompilerStage defines the interface for stages in the compiler. @@ -120,6 +121,14 @@ type CompilerStageDefinition struct { Stage CompilerStage } +// RulesOptions defines the options for retrieving rules by Ref from the +// compiler. +type RulesOptions struct { + // IncludeHiddenModules determines if the result contains hidden modules, + // currently only the "system" namespace, i.e. "data.system.*". + IncludeHiddenModules bool +} + // QueryContext contains contextual information for running an ad-hoc query. // // Ad-hoc queries can be run in the context of a package and imports may be @@ -183,6 +192,10 @@ type QueryCompiler interface { // to Compile will take the QueryContext into account. WithContext(qctx *QueryContext) QueryCompiler + // WithEnablePrintStatements enables print statements in queries compiled + // with the QueryCompiler. + WithEnablePrintStatements(yes bool) QueryCompiler + // WithUnsafeBuiltins sets the built-in functions to treat as unsafe and not // allow inside of queries. By default the query compiler inherits the // compiler's unsafe built-in functions. This function allows callers to @@ -252,6 +265,8 @@ func NewCompiler() *Compiler { // stages that need to generate variables. {"InitLocalVarGen", "compile_stage_init_local_var_gen", c.initLocalVarGen}, {"RewriteLocalVars", "compile_stage_rewrite_local_vars", c.rewriteLocalVars}, + {"CheckVoidCalls", "compile_stage_check_void_calls", c.checkVoidCalls}, + {"RewritePrintCalls", "compile_stage_rewrite_print_calls", c.rewritePrintCalls}, {"RewriteExprTerms", "compile_stage_rewrite_expr_terms", c.rewriteExprTerms}, {"SetGraph", "compile_stage_set_graph", c.setGraph}, {"RewriteComprehensionTerms", "compile_stage_rewrite_comprehension_terms", c.rewriteComprehensionTerms}, @@ -280,6 +295,14 @@ func (c *Compiler) SetErrorLimit(limit int) *Compiler { return c } +// WithEnablePrintStatements enables print statements inside of modules compiled +// by the compiler. If print statements are not enabled, calls to print() are +// erased at compile-time. +func (c *Compiler) WithEnablePrintStatements(yes bool) *Compiler { + c.enablePrintStatements = yes + return c +} + // WithPathConflictsCheck enables base-virtual document conflict // detection. The compiler will check that rules don't overlap with // paths that exist as determined by the provided callable. @@ -539,6 +562,14 @@ func (c *Compiler) GetRules(ref Ref) (rules []*Rule) { } // GetRulesDynamic returns a slice of rules that could be referred to by a ref. +// +// Deprecated: use GetRulesDynamicWithOpts +func (c *Compiler) GetRulesDynamic(ref Ref) []*Rule { + return c.GetRulesDynamicWithOpts(ref, RulesOptions{}) +} + +// GetRulesDynamicWithOpts returns a slice of rules that could be referred to by +// a ref. // When parts of the ref are statically known, we use that information to narrow // down which rules the ref could refer to, but in the most general case this // will be an over-approximation. @@ -557,10 +588,25 @@ func (c *Compiler) GetRules(ref Ref) (rules []*Rule) { // // The following calls yield the rules on the right. // -// GetRulesDynamic("data.a[x].c[y]") => [rule1, rule2] -// GetRulesDynamic("data.a[x].c.r2") => [rule2] -// GetRulesDynamic("data.a.b[x][y]") => [rule1] -func (c *Compiler) GetRulesDynamic(ref Ref) (rules []*Rule) { +// GetRulesDynamicWithOpts("data.a[x].c[y]", opts) => [rule1, rule2] +// GetRulesDynamicWithOpts("data.a[x].c.r2", opts) => [rule2] +// GetRulesDynamicWithOpts("data.a.b[x][y]", opts) => [rule1] +// +// Using the RulesOptions parameter, the inclusion of hidden modules can be +// controlled: +// +// With +// +// package system.main +// +// r3 = 3 # rule3 +// +// We'd get this result: +// +// GetRulesDynamicWithOpts("data[x]", RulesOptions{IncludeHiddenModules: true}) => [rule1, rule2, rule3] +// +// Without the options, it would be excluded. +func (c *Compiler) GetRulesDynamicWithOpts(ref Ref, opts RulesOptions) []*Rule { node := c.RuleTree set := map[*Rule]struct{}{} @@ -571,6 +617,9 @@ func (c *Compiler) GetRulesDynamic(ref Ref) (rules []*Rule) { // under this "prefix". node.DepthFirst(func(descendant *TreeNode) bool { insertRules(set, descendant.Values) + if opts.IncludeHiddenModules { + return false + } return descendant.Hide }) } else if i == 0 || IsConstant(ref[i].Value) { @@ -591,7 +640,7 @@ func (c *Compiler) GetRulesDynamic(ref Ref) (rules []*Rule) { // This part of the ref is a dynamic term. We can't know what it refers // to and will just need to try all of the children. for _, child := range node.Children { - if child.Hide { + if child.Hide && !opts.IncludeHiddenModules { continue } insertRules(set, child.Values) @@ -601,6 +650,7 @@ func (c *Compiler) GetRulesDynamic(ref Ref) (rules []*Rule) { } walk(node, 0) + rules := make([]*Rule, 0, len(set)) for rule := range set { rules = append(rules, rule) } @@ -785,13 +835,13 @@ func (c *Compiler) checkRuleConflicts() { func (c *Compiler) checkUndefinedFuncs() { for _, name := range c.sorted { m := c.Modules[name] - for _, err := range checkUndefinedFuncs(m, c.GetArity) { + for _, err := range checkUndefinedFuncs(m, c.GetArity, c.RewrittenVars) { c.err(err) } } } -func checkUndefinedFuncs(x interface{}, arity func(Ref) int) Errors { +func checkUndefinedFuncs(x interface{}, arity func(Ref) int, rwVars map[Var]Var) Errors { var errs Errors @@ -803,6 +853,7 @@ func checkUndefinedFuncs(x interface{}, arity func(Ref) int) Errors { if arity(ref) >= 0 { return false } + ref = rewriteVarsInRef(rwVars)(ref) errs = append(errs, NewError(TypeErr, expr.Loc(), "undefined function %v", ref)) return true }) @@ -827,7 +878,7 @@ func (c *Compiler) checkSafetyRuleBodies() { func (c *Compiler) checkBodySafety(safe VarSet, b Body) Body { reordered, unsafe := reorderBodyForSafety(c.builtins, c.GetArity, safe, b) - if errs := safetyErrorSlice(unsafe); len(errs) > 0 { + if errs := safetyErrorSlice(unsafe, c.RewrittenVars); len(errs) > 0 { for _, err := range errs { c.err(err) } @@ -855,6 +906,9 @@ func (c *Compiler) checkSafetyRuleHeads() { safe.Update(r.Head.Args.Vars()) unsafe := r.Head.Vars().Diff(safe) for v := range unsafe { + if w, ok := c.RewrittenVars[v]; ok { + v = w + } if !v.IsGenerated() { c.err(NewError(UnsafeVarErr, r.Loc(), "var %v is unsafe", v)) } @@ -864,7 +918,9 @@ func (c *Compiler) checkSafetyRuleHeads() { } } -func compileSchema(goSchema interface{}) (*gojsonschema.Schema, error) { +func compileSchema(goSchema interface{}, allowNet []string) (*gojsonschema.Schema, error) { + gojsonschema.SetAllowNet(allowNet) + var refLoader gojsonschema.JSONLoader sl := gojsonschema.NewSchemaLoader() @@ -875,11 +931,52 @@ func compileSchema(goSchema interface{}) (*gojsonschema.Schema, error) { } schemasCompiled, err := sl.Compile(refLoader) if err != nil { - return nil, fmt.Errorf("unable to compile the schema due to: %w", err) + return nil, fmt.Errorf("unable to compile the schema: %w", err) } return schemasCompiled, nil } +func mergeSchemas(schemas ...*gojsonschema.SubSchema) (*gojsonschema.SubSchema, error) { + if len(schemas) == 0 { + return nil, nil + } + var result = schemas[0] + + for i := range schemas { + if len(schemas[i].PropertiesChildren) > 0 { + if !schemas[i].Types.Contains("object") { + if err := schemas[i].Types.Add("object"); err != nil { + return nil, fmt.Errorf("unable to set the type in schemas") + } + } + } else if len(schemas[i].ItemsChildren) > 0 { + if !schemas[i].Types.Contains("array") { + if err := schemas[i].Types.Add("array"); err != nil { + return nil, fmt.Errorf("unable to set the type in schemas") + } + } + } + } + + for i := 1; i < len(schemas); i++ { + if result.Types.String() != schemas[i].Types.String() { + return nil, fmt.Errorf("unable to merge these schemas: type mismatch: %v and %v", result.Types.String(), schemas[i].Types.String()) + } else if result.Types.Contains("object") && len(result.PropertiesChildren) > 0 && schemas[i].Types.Contains("object") && len(schemas[i].PropertiesChildren) > 0 { + result.PropertiesChildren = append(result.PropertiesChildren, schemas[i].PropertiesChildren...) + } else if result.Types.Contains("array") && len(result.ItemsChildren) > 0 && schemas[i].Types.Contains("array") && len(schemas[i].ItemsChildren) > 0 { + for j := 0; j < len(schemas[i].ItemsChildren); j++ { + if len(result.ItemsChildren)-1 < j && !(len(schemas[i].ItemsChildren)-1 < j) { + result.ItemsChildren = append(result.ItemsChildren, schemas[i].ItemsChildren[j]) + } + if result.ItemsChildren[j].Types.String() != schemas[i].ItemsChildren[j].Types.String() { + return nil, fmt.Errorf("unable to merge these schemas") + } + } + } + } + return result, nil +} + func parseSchema(schema interface{}) (types.Type, error) { subSchema, ok := schema.(*gojsonschema.SubSchema) if !ok { @@ -891,6 +988,61 @@ func parseSchema(schema interface{}) (types.Type, error) { return parseSchema(subSchema.RefSchema) } + // Handle anyOf + if subSchema.AnyOf != nil { + var orType types.Type + + // If there is a core schema, find its type first + if subSchema.Types.IsTyped() { + copySchema := *subSchema + copySchemaRef := ©Schema + copySchemaRef.AnyOf = nil + coreType, err := parseSchema(copySchemaRef) + if err != nil { + return nil, fmt.Errorf("unexpected schema type %v: %w", subSchema, err) + } + + // Only add Object type with static props to orType + if objType, ok := coreType.(*types.Object); ok { + if objType.StaticProperties() != nil && objType.DynamicProperties() == nil { + orType = types.Or(orType, coreType) + } + } + } + + // Iterate through every property of AnyOf and add it to orType + for _, pSchema := range subSchema.AnyOf { + newtype, err := parseSchema(pSchema) + if err != nil { + return nil, fmt.Errorf("unexpected schema type %v: %w", pSchema, err) + } + orType = types.Or(newtype, orType) + } + + return orType, nil + } + + if subSchema.AllOf != nil { + subSchemaArray := subSchema.AllOf + allOfResult, err := mergeSchemas(subSchemaArray...) + if err != nil { + return nil, err + } + + if subSchema.Types.IsTyped() { + if (subSchema.Types.Contains("object") && allOfResult.Types.Contains("object")) || (subSchema.Types.Contains("array") && allOfResult.Types.Contains("array")) { + objectOrArrayResult, err := mergeSchemas(allOfResult, subSchema) + if err != nil { + return nil, err + } + return parseSchema(objectOrArrayResult) + } else if subSchema.Types.String() != allOfResult.Types.String() { + return nil, fmt.Errorf("unable to merge these schemas") + } + } + return parseSchema(allOfResult) + } + if subSchema.Types.IsTyped() { if subSchema.Types.Contains("boolean") { return types.B, nil @@ -939,6 +1091,18 @@ func parseSchema(schema interface{}) (types.Type, error) { return types.NewArray(nil, types.A), nil } } + + // Assume types if not specified in schema + if len(subSchema.PropertiesChildren) > 0 { + if err := subSchema.Types.Add("object"); err == nil { + return parseSchema(subSchema) + } + } else if len(subSchema.ItemsChildren) > 0 { + if err := subSchema.Types.Add("array"); err == nil { + return parseSchema(subSchema) + } + } + return types.A, nil } @@ -1028,7 +1192,7 @@ func (c *Compiler) init() { // Load the global input schema if one was provided. if c.schemaSet != nil { if schema := c.schemaSet.Get(SchemaRootRef); schema != nil { - tpe, err := loadSchema(schema) + tpe, err := loadSchema(schema, c.capabilities.AllowNet) if err != nil { c.err(NewError(TypeErr, nil, err.Error())) } else { @@ -1160,11 +1324,199 @@ func (c *Compiler) rewriteExprTerms() { } } +func (c *Compiler) checkVoidCalls() { + for _, name := range c.sorted { + mod := c.Modules[name] + for _, err := range checkVoidCalls(c.TypeEnv, mod) { + c.err(err) + } + } +} + +func (c *Compiler) rewritePrintCalls() { + if !c.enablePrintStatements { + for _, name := range c.sorted { + erasePrintCalls(c.Modules[name]) + } + return + } + for _, name := range c.sorted { + mod := c.Modules[name] + WalkRules(mod, func(r *Rule) bool { + safe := r.Head.Args.Vars() + safe.Update(ReservedVars) + WalkBodies(r, func(b Body) bool { + for _, err := range rewritePrintCalls(c.localvargen, c.GetArity, safe, b) { + c.err(err) + } + return false + }) + return false + }) + } +} + +// checkVoidCalls returns errors for any expressions that treat void function +// calls as values. The only void functions in Rego are specific built-ins like +// print(). +func checkVoidCalls(env *TypeEnv, x interface{}) Errors { + var errs Errors + WalkTerms(x, func(x *Term) bool { + if call, ok := x.Value.(Call); ok { + if tpe, ok := env.Get(call[0]).(*types.Function); ok && tpe.Result() == nil { + errs = append(errs, NewError(TypeErr, x.Loc(), "%v used as value", call)) + } + } + return false + }) + return errs +} + +// rewritePrintCalls will rewrite the body so that print operands are captured +// in local variables and their evaluation occurs within a comprehension. +// Wrapping the terms inside of a comprehension ensures that undefined values do +// not short-circuit evaluation. +// +// For example, given the following print statement: +// +// print("the value of x is:", input.x) +// +// The expression would be rewritten to: +// +// print({__local0__ | __local0__ = "the value of x is:"}, {__local1__ | __local1__ = input.x}) +func rewritePrintCalls(gen *localVarGenerator, getArity func(Ref) int, globals VarSet, body Body) Errors { + + var errs Errors + + // Visit comprehension bodies recursively to ensure print statements inside + // those bodies only close over variables that are safe. + for i := range body { + if ContainsComprehensions(body[i]) { + safe := outputVarsForBody(body[:i], getArity, globals) + safe.Update(globals) + WalkClosures(body[i], func(x interface{}) bool { + switch x := x.(type) { + case *SetComprehension: + errs = rewritePrintCalls(gen, getArity, safe, x.Body) + case *ArrayComprehension: + errs = rewritePrintCalls(gen, getArity, safe, x.Body) + case *ObjectComprehension: + errs = rewritePrintCalls(gen, getArity, safe, x.Body) + } + return true + }) + if len(errs) > 0 { + return errs + } + } + } + + for i := range body { + + if !isPrintCall(body[i]) { + continue + } + + var errs Errors + safe := outputVarsForBody(body[:i], getArity, globals) + safe.Update(globals) + args := body[i].Operands() + + for j := range args { + vis := NewVarVisitor().WithParams(SafetyCheckVisitorParams) + vis.Walk(args[j]) + unsafe := vis.Vars().Diff(safe) + for _, v := range unsafe.Sorted() { + errs = append(errs, NewError(CompileErr, args[j].Loc(), "var %v is undeclared", v)) + } + } + + if len(errs) > 0 { + return errs + } + + arr := NewArray() + + for j := range args { + x := NewTerm(gen.Generate()).SetLocation(args[j].Loc()) + capture := Equality.Expr(x, args[j]).SetLocation(args[j].Loc()) + arr = arr.Append(SetComprehensionTerm(x, NewBody(capture)).SetLocation(args[j].Loc())) + } + + body.Set(NewExpr([]*Term{ + NewTerm(InternalPrint.Ref()).SetLocation(body[i].Loc()), + NewTerm(arr).SetLocation(body[i].Loc()), + }).SetLocation(body[i].Loc()), i) + } + + return nil +} + +func erasePrintCalls(node interface{}) { + NewGenericVisitor(func(x interface{}) bool { + switch x := x.(type) { + case *Rule: + x.Body = erasePrintCallsInBody(x.Body) + case *ArrayComprehension: + x.Body = erasePrintCallsInBody(x.Body) + case *SetComprehension: + x.Body = erasePrintCallsInBody(x.Body) + case *ObjectComprehension: + x.Body = erasePrintCallsInBody(x.Body) + } + return false + }).Walk(node) +} + +func erasePrintCallsInBody(x Body) Body { + + if !containsPrintCall(x) { + return x + } + + var cpy Body + + for i := range x { + + // Recursively visit any comprehensions contained in this expression. + erasePrintCalls(x[i]) + + if !isPrintCall(x[i]) { + cpy.Append(x[i]) + } + } + + if len(cpy) == 0 { + term := BooleanTerm(true).SetLocation(x.Loc()) + expr := NewExpr(term).SetLocation(x.Loc()) + cpy.Append(expr) + } + + return cpy +} + +func containsPrintCall(x Body) bool { + var found bool + WalkExprs(x, func(expr *Expr) bool { + if !found { + if isPrintCall(expr) { + found = true + } + } + return found + }) + return found +} + +func isPrintCall(x *Expr) bool { + return x.IsCall() && x.Operator().Equal(Print.Ref()) +} + // rewriteTermsInHead will rewrite rules so that the head does not contain any // terms that require evaluation (e.g., refs or comprehensions). If the key or -// value contains or more of these terms, the key or value will be moved into -// the body and assigned to a new variable. The new variable will replace the -// key or value in the head. +// value contains one or more of these terms, the key or value will be moved +// into the body and assigned to a new variable. The new variable will replace +// the key or value in the head. // // For instance, given the following rule: // @@ -1453,17 +1805,21 @@ func (c *Compiler) setRuleTree() { } func (c *Compiler) setGraph() { - c.Graph = NewGraph(c.Modules, c.GetRulesDynamic) + list := func(r Ref) []*Rule { + return c.GetRulesDynamicWithOpts(r, RulesOptions{IncludeHiddenModules: true}) + } + c.Graph = NewGraph(c.Modules, list) } type queryCompiler struct { - compiler *Compiler - qctx *QueryContext - typeEnv *TypeEnv - rewritten map[Var]Var - after map[string][]QueryCompilerStageDefinition - unsafeBuiltins map[string]struct{} - comprehensionIndices map[*Term]*ComprehensionIndex + compiler *Compiler + qctx *QueryContext + typeEnv *TypeEnv + rewritten map[Var]Var + after map[string][]QueryCompilerStageDefinition + unsafeBuiltins map[string]struct{} + comprehensionIndices map[*Term]*ComprehensionIndex + enablePrintStatements bool } func newQueryCompiler(compiler *Compiler) QueryCompiler { @@ -1476,6 +1832,11 @@ func newQueryCompiler(compiler *Compiler) QueryCompiler { return qc } +func (qc *queryCompiler) WithEnablePrintStatements(yes bool) QueryCompiler { + qc.enablePrintStatements = yes + return qc +} + func (qc *queryCompiler) WithContext(qctx *QueryContext) QueryCompiler { qc.qctx = qctx return qc @@ -1521,6 +1882,9 @@ func (qc *queryCompiler) runStageAfter(metricName string, query Body, s QueryCom } func (qc *queryCompiler) Compile(query Body) (Body, error) { + if len(query) == 0 { + return nil, Errors{NewError(CompileErr, nil, "empty query cannot be compiled")} + } query = query.Copy() @@ -1531,6 +1895,8 @@ func (qc *queryCompiler) Compile(query Body) (Body, error) { }{ {"ResolveRefs", "query_compile_stage_resolve_refs", qc.resolveRefs}, {"RewriteLocalVars", "query_compile_stage_rewrite_local_vars", qc.rewriteLocalVars}, + {"CheckVoidCalls", "query_compile_stage_check_void_calls", qc.checkVoidCalls}, + {"RewritePrintCalls", "query_compile_stage_rewrite_print_calls", qc.rewritePrintCalls}, {"RewriteExprTerms", "query_compile_stage_rewrite_expr_terms", qc.rewriteExprTerms}, {"RewriteComprehensionTerms", "query_compile_stage_rewrite_comprehension_terms", qc.rewriteComprehensionTerms}, {"RewriteWithValues", "query_compile_stage_rewrite_with_values", qc.rewriteWithModifiers}, @@ -1640,8 +2006,26 @@ func (qc *queryCompiler) rewriteLocalVars(_ *QueryContext, body Body) (Body, err return body, nil } +func (qc *queryCompiler) rewritePrintCalls(_ *QueryContext, body Body) (Body, error) { + if !qc.enablePrintStatements { + return erasePrintCallsInBody(body), nil + } + gen := newLocalVarGenerator("q", body) + if errs := rewritePrintCalls(gen, qc.compiler.GetArity, ReservedVars, body); len(errs) > 0 { + return nil, errs + } + return body, nil +} + +func (qc *queryCompiler) checkVoidCalls(_ *QueryContext, body Body) (Body, error) { + if errs := checkVoidCalls(qc.compiler.TypeEnv, body); len(errs) > 0 { + return nil, errs + } + return body, nil +} + func (qc *queryCompiler) checkUndefinedFuncs(_ *QueryContext, body Body) (Body, error) { - if errs := checkUndefinedFuncs(body, qc.compiler.GetArity); len(errs) > 0 { + if errs := checkUndefinedFuncs(body, qc.compiler.GetArity, qc.rewritten); len(errs) > 0 { return nil, errs } return body, nil @@ -1650,7 +2034,7 @@ func (qc *queryCompiler) checkUndefinedFuncs(_ *QueryContext, body Body) (Body, func (qc *queryCompiler) checkSafety(_ *QueryContext, body Body) (Body, error) { safe := ReservedVars.Copy() reordered, unsafe := reorderBodyForSafety(qc.compiler.builtins, qc.compiler.GetArity, safe, body) - if errs := safetyErrorSlice(unsafe); len(errs) > 0 { + if errs := safetyErrorSlice(unsafe, qc.RewrittenVars()); len(errs) > 0 { return nil, errs } return reordered, nil @@ -1719,8 +2103,8 @@ func (ci *ComprehensionIndex) String() string { func buildComprehensionIndices(dbg debug.Debug, arity func(Ref) int, candidates VarSet, rwVars map[Var]Var, node interface{}, result map[*Term]*ComprehensionIndex) uint64 { var n uint64 + cpy := candidates.Copy() WalkBodies(node, func(b Body) bool { - cpy := candidates.Copy() for _, expr := range b { index := getComprehensionIndex(dbg, arity, cpy, rwVars, expr) if index != nil { @@ -2650,16 +3034,8 @@ func outputVarsForTerms(expr *Expr, safe VarSet) VarSet { case *SetComprehension, *ArrayComprehension, *ObjectComprehension: return true case Ref: - if v, ok := r[0].Value.(Var); ok { - if !safe.Contains(v) { - return true - } - } else { - for k := range r[0].Vars() { - if !safe.Contains(k) { - return true - } - } + if !isRefSafe(r, safe) { + return true } output.Update(r.OutputVars()) return false @@ -2865,6 +3241,10 @@ func resolveRefsInExpr(globals map[Var]Ref, ignore *declaredVarStack, expr *Expr buf[i] = resolveRefsInTerm(globals, ignore, ts[i]) } cpy.Terms = buf + case *SomeDecl: + if val, ok := ts.Symbols[0].Value.(Call); ok { + cpy.Terms = &SomeDecl{Symbols: []*Term{CallTerm(resolveRefsInTermSlice(globals, ignore, val)...)}} + } } for _, w := range cpy.With { w.Target = resolveRefsInTerm(globals, ignore, w.Target) @@ -2997,7 +3377,23 @@ func declaredVars(x interface{}) VarSet { }) } else if decl, ok := x.Terms.(*SomeDecl); ok { for i := range decl.Symbols { - vars.Add(decl.Symbols[i].Value.(Var)) + switch val := decl.Symbols[i].Value.(type) { + case Var: + vars.Add(val) + case Call: + args := val[1:] + if len(args) == 3 { // some x, y in xs + WalkVars(args[1], func(v Var) bool { + vars.Add(v) + return false + }) + } + // some x in xs + WalkVars(args[0], func(v Var) bool { + vars.Add(v) + return false + }) + } } } case *ArrayComprehension, *SetComprehension, *ObjectComprehension: @@ -3508,8 +3904,8 @@ func rewriteDeclaredVarsInBody(g *localVarGenerator, stack *localDeclaredVars, u var expr *Expr if body[i].IsAssignment() { expr, errs = rewriteDeclaredAssignment(g, stack, body[i], errs) - } else if decl, ok := body[i].Terms.(*SomeDecl); ok { - errs = rewriteSomeDeclStatement(g, stack, decl, errs) + } else if _, ok := body[i].Terms.(*SomeDecl); ok { + expr, errs = rewriteSomeDeclStatement(g, stack, body[i], errs) } else { expr, errs = rewriteDeclaredVarsInExpr(g, stack, body[i], errs) } @@ -3564,14 +3960,48 @@ func checkUnusedDeclaredVars(loc *Location, stack *localDeclaredVars, used VarSe return errs } -func rewriteSomeDeclStatement(g *localVarGenerator, stack *localDeclaredVars, decl *SomeDecl, errs Errors) Errors { +func rewriteSomeDeclStatement(g *localVarGenerator, stack *localDeclaredVars, expr *Expr, errs Errors) (*Expr, Errors) { + e := expr.Copy() + decl := e.Terms.(*SomeDecl) for i := range decl.Symbols { - v := decl.Symbols[i].Value.(Var) - if _, err := rewriteDeclaredVar(g, stack, v, declaredVar); err != nil { - errs = append(errs, NewError(CompileErr, decl.Loc(), err.Error())) + switch v := decl.Symbols[i].Value.(type) { + case Var: + if _, err := rewriteDeclaredVar(g, stack, v, declaredVar); err != nil { + return nil, append(errs, NewError(CompileErr, decl.Loc(), err.Error())) + } + case Call: + var key, val, container *Term + switch len(v) { + case 4: // member3 + key = v[1] + val = v[2] + container = v[3] + case 3: // member + key = NewTerm(g.Generate()) + val = v[1] + container = v[2] + } + + var rhs *Term + switch c := container.Value.(type) { + case Ref: + rhs = RefTerm(append(c, key)...) + default: + rhs = RefTerm(container, key) + } + e.Terms = []*Term{ + RefTerm(VarTerm(Equality.Name)), val, rhs, + } + + for _, v0 := range outputVarsForExprEq(e, container.Vars()).Sorted() { + if _, err := rewriteDeclaredVar(g, stack, v0, declaredVar); err != nil { + return nil, append(errs, NewError(CompileErr, decl.Loc(), err.Error())) + } + } + return rewriteDeclaredVarsInExpr(g, stack, e, errs) } } - return errs + return nil, errs } func rewriteDeclaredVarsInExpr(g *localVarGenerator, stack *localDeclaredVars, expr *Expr, errs Errors) (*Expr, Errors) { @@ -3867,15 +4297,24 @@ func isVirtual(node *TreeNode, ref Ref) bool { return true } -func safetyErrorSlice(unsafe unsafeVars) (result Errors) { +func safetyErrorSlice(unsafe unsafeVars, rewritten map[Var]Var) (result Errors) { if len(unsafe) == 0 { return } for _, pair := range unsafe.Vars() { - if !pair.Var.IsGenerated() { - result = append(result, NewError(UnsafeVarErr, pair.Loc, "var %v is unsafe", pair.Var)) + v := pair.Var + if w, ok := rewritten[v]; ok { + v = w + } + if !v.IsGenerated() { + if _, ok := futureKeywords[string(v)]; ok { + result = append(result, NewError(UnsafeVarErr, pair.Loc, + "var %[1]v is unsafe (hint: `import future.keywords.%[1]v` to import a future keyword)", v)) + continue + } + result = append(result, NewError(UnsafeVarErr, pair.Loc, "var %v is unsafe", v)) } } @@ -3924,7 +4363,7 @@ func checkUnsafeBuiltins(unsafeBuiltinsMap map[string]struct{}, node interface{} return errs } -func rewriteVarsInRef(vars ...map[Var]Var) func(Ref) Ref { +func rewriteVarsInRef(vars ...map[Var]Var) varRewriter { return func(node Ref) Ref { i, _ := TransformVars(node, func(v Var) (Value, error) { for _, m := range vars { @@ -3937,7 +4376,3 @@ func rewriteVarsInRef(vars ...map[Var]Var) func(Ref) Ref { return i.(Ref) } } - -func rewriteVarsNop(node Ref) Ref { - return node -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/compilehelper.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/compilehelper.go index 37a81ddc9..ca75dfaba 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/compilehelper.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/compilehelper.go @@ -7,6 +7,17 @@ package ast // CompileModules takes a set of Rego modules represented as strings and // compiles them for evaluation. The keys of the map are used as filenames. func CompileModules(modules map[string]string) (*Compiler, error) { + return CompileModulesWithOpt(modules, CompileOpts{}) +} + +// CompileOpts defines a set of options for the compiler. +type CompileOpts struct { + EnablePrintStatements bool +} + +// CompileModulesWithOpt takes a set of Rego modules represented as strings and +// compiles them for evaluation. The keys of the map are used as filenames. +func CompileModulesWithOpt(modules map[string]string, opts CompileOpts) (*Compiler, error) { parsed := make(map[string]*Module, len(modules)) @@ -19,7 +30,7 @@ func CompileModules(modules map[string]string) (*Compiler, error) { parsed[f] = pm } - compiler := NewCompiler() + compiler := NewCompiler().WithEnablePrintStatements(opts.EnablePrintStatements) compiler.Compile(parsed) if compiler.Failed() { @@ -32,8 +43,14 @@ func CompileModules(modules map[string]string) (*Compiler, error) { // MustCompileModules compiles a set of Rego modules represented as strings. If // the compilation process fails, this function panics. func MustCompileModules(modules map[string]string) *Compiler { + return MustCompileModulesWithOpts(modules, CompileOpts{}) +} + +// MustCompileModulesWithOpts compiles a set of Rego modules represented as strings. If +// the compilation process fails, this function panics. +func MustCompileModulesWithOpts(modules map[string]string, opts CompileOpts) *Compiler { - compiler, err := CompileModules(modules) + compiler, err := CompileModulesWithOpt(modules, opts) if err != nil { panic(err) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/index.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/index.go index a54e378a5..bcbb5c176 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/index.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/index.go @@ -32,10 +32,11 @@ type RuleIndex interface { // IndexResult contains the result of an index lookup. type IndexResult struct { - Kind DocKind - Rules []*Rule - Else map[*Rule][]*Rule - Default *Rule + Kind DocKind + Rules []*Rule + Else map[*Rule][]*Rule + Default *Rule + EarlyExit bool } // NewIndexResult returns a new IndexResult object. @@ -52,16 +53,18 @@ func (ir *IndexResult) Empty() bool { } type baseDocEqIndex struct { - isVirtual func(Ref) bool - root *trieNode - defaultRule *Rule - kind DocKind + skipIndexing Set + isVirtual func(Ref) bool + root *trieNode + defaultRule *Rule + kind DocKind } func newBaseDocEqIndex(isVirtual func(Ref) bool) *baseDocEqIndex { return &baseDocEqIndex{ - isVirtual: isVirtual, - root: newTrieNodeImpl(), + skipIndexing: NewSet(NewTerm(InternalPrint.Ref())), + isVirtual: isVirtual, + root: newTrieNodeImpl(), } } @@ -80,8 +83,17 @@ func (i *baseDocEqIndex) Build(rules []*Rule) bool { i.defaultRule = rule return false } + var skip bool for _, expr := range rule.Body { - indices.Update(rule, expr) + if op := expr.OperatorTerm(); op != nil && i.skipIndexing.Contains(op) { + skip = true + break + } + } + if !skip { + for _, expr := range rule.Body { + indices.Update(rule, expr) + } } return false }) @@ -103,13 +115,11 @@ func (i *baseDocEqIndex) Build(rules []*Rule) bool { // Insert rule into trie with (insertion order, priority order) // tuple. Retaining the insertion order allows us to return rules // in the order they were passed to this function. - node.rules = append(node.rules, &ruleNode{[...]int{idx, prio}, rule}) + node.append([...]int{idx, prio}, rule) prio++ return false }) - } - return true } @@ -132,6 +142,7 @@ func (i *baseDocEqIndex) Lookup(resolver ValueResolver) (*IndexResult, error) { }) nodes := tr.unordered[pos] root := nodes[0].rule + result.Rules = append(result.Rules, root) if len(nodes) > 1 { result.Else[root] = make([]*Rule, len(nodes)-1) @@ -141,6 +152,8 @@ func (i *baseDocEqIndex) Lookup(resolver ValueResolver) (*IndexResult, error) { } } + result.EarlyExit = tr.values.Len() == 1 && tr.values.Slice()[0].IsGround() + return result, nil } @@ -170,6 +183,8 @@ func (i *baseDocEqIndex) AllRules(resolver ValueResolver) (*IndexResult, error) } } + result.EarlyExit = tr.values.Len() == 1 && tr.values.Slice()[0].IsGround() + return result, nil } @@ -179,9 +194,7 @@ type ruleWalker struct { func (r *ruleWalker) Do(x interface{}) trieWalker { tn := x.(*trieNode) - for _, rn := range tn.rules { - r.result.Add(rn) - } + r.result.Add(tn) return r } @@ -233,12 +246,15 @@ func (i *refindices) Update(rule *Rule, expr *Expr) { op := expr.Operator() - if op.Equal(Equality.Ref()) || op.Equal(Equal.Ref()) { - + if op.Equal(Equality.Ref()) { + i.updateEq(rule, expr) + } else if op.Equal(Equal.Ref()) && len(expr.Operands()) == 2 { + // NOTE(tsandall): if equal() is called with more than two arguments the + // output value is being captured in which case the indexer cannot + // exclude the rule if the equal() call would return false (because the + // false value must still be produced.) i.updateEq(rule, expr) - } else if op.Equal(GlobMatch.Ref()) { - i.updateGlobMatch(rule, expr) } } @@ -291,20 +307,19 @@ func (i *refindices) Mapper(rule *Rule, ref Ref) *valueMapper { func (i *refindices) updateEq(rule *Rule, expr *Expr) { a, b := expr.Operand(0), expr.Operand(1) - if ref, value, ok := eqOperandsToRefAndValue(i.isVirtual, a, b); ok { - i.insert(rule, &refindex{ - Ref: ref, - Value: value, - }) - } else if ref, value, ok := eqOperandsToRefAndValue(i.isVirtual, b, a); ok { - i.insert(rule, &refindex{ - Ref: ref, - Value: value, - }) + args := rule.Head.Args + if idx, ok := eqOperandsToRefAndValue(i.isVirtual, args, a, b); ok { + i.insert(rule, idx) + return + } + if idx, ok := eqOperandsToRefAndValue(i.isVirtual, args, b, a); ok { + i.insert(rule, idx) + return } } func (i *refindices) updateGlobMatch(rule *Rule, expr *Expr) { + args := rule.Head.Args delim, ok := globDelimiterToString(expr.Operand(1)) if !ok { @@ -314,26 +329,37 @@ func (i *refindices) updateGlobMatch(rule *Rule, expr *Expr) { if arr := globPatternToArray(expr.Operand(0), delim); arr != nil { // The 3rd operand of glob.match is the value to match. We assume the // 3rd operand was a reference that has been rewritten and bound to a - // variable earlier in the query. + // variable earlier in the query OR a function argument variable. match := expr.Operand(2) if _, ok := match.Value.(Var); ok { + var ref Ref for _, other := range i.rules[rule] { if _, ok := other.Value.(Var); ok && other.Value.Compare(match.Value) == 0 { - i.insert(rule, &refindex{ - Ref: other.Ref, - Value: arr.Value, - Mapper: &valueMapper{ - Key: delim, - MapValue: func(v Value) Value { - if s, ok := v.(String); ok { - return stringSliceToArray(splitStringEscaped(string(s), delim)) - } - return v - }, - }, - }) + ref = other.Ref + } + } + if ref == nil { + for j, arg := range args { + if arg.Equal(match) { + ref = Ref{FunctionArgRootDocument, IntNumberTerm(j)} + } } } + if ref != nil { + i.insert(rule, &refindex{ + Ref: ref, + Value: arr.Value, + Mapper: &valueMapper{ + Key: delim, + MapValue: func(v Value) Value { + if s, ok := v.(String); ok { + return stringSliceToArray(splitStringEscaped(string(s), delim)) + } + return v + }, + }, + }) + } } } } @@ -373,25 +399,33 @@ type trieWalker interface { type trieTraversalResult struct { unordered map[int][]*ruleNode ordering []int + values Set } func newTrieTraversalResult() *trieTraversalResult { return &trieTraversalResult{ unordered: map[int][]*ruleNode{}, + values: NewSet(), } } -func (tr *trieTraversalResult) Add(node *ruleNode) { - root := node.prio[0] - nodes, ok := tr.unordered[root] - if !ok { - tr.ordering = append(tr.ordering, root) +func (tr *trieTraversalResult) Add(t *trieNode) { + for _, node := range t.rules { + root := node.prio[0] + nodes, ok := tr.unordered[root] + if !ok { + tr.ordering = append(tr.ordering, root) + } + tr.unordered[root] = append(nodes, node) + } + if t.values != nil { + t.values.Foreach(func(v *Term) { tr.values.Add(v) }) } - tr.unordered[root] = append(nodes, node) } type trieNode struct { ref Ref + values Set mappers []*valueMapper next *trieNode any *trieNode @@ -433,9 +467,25 @@ func (node *trieNode) String() string { if len(node.mappers) > 0 { flags = append(flags, fmt.Sprintf("%d mapper(s)", len(node.mappers))) } + if l := node.values.Len(); l > 0 { + flags = append(flags, fmt.Sprintf("%d value(s)", l)) + } return strings.Join(flags, " ") } +func (node *trieNode) append(prio [2]int, rule *Rule) { + node.rules = append(node.rules, &ruleNode{prio, rule}) + + if node.values != nil { + node.values.Add(rule.Head.Value) + return + } + + if node.values == nil && rule.Head.DocKind() == CompleteDoc { + node.values = NewSet(rule.Head.Value) + } +} + type ruleNode struct { prio [2]int rule *Rule @@ -489,9 +539,7 @@ func (node *trieNode) Traverse(resolver ValueResolver, tr *trieTraversalResult) return nil } - for i := range node.rules { - tr.Add(node.rules[i]) - } + tr.Add(node) return node.next.traverse(resolver, tr) } @@ -682,28 +730,41 @@ func (node *trieNode) traverseUnknown(resolver ValueResolver, tr *trieTraversalR return nil } -func eqOperandsToRefAndValue(isVirtual func(Ref) bool, a, b *Term) (Ref, Value, bool) { - - ref, ok := a.Value.(Ref) - if !ok { - return nil, nil, false - } - - if !RootDocumentNames.Contains(ref[0]) { - return nil, nil, false - } - - if isVirtual(ref) { - return nil, nil, false - } - - if ref.IsNested() || !ref.IsGround() { - return nil, nil, false +// If term `a` is one of the function's operands, we store a Ref: `args[0]` +// for the argument number. So for `f(x, y) { x = 10; y = 12 }`, we'll +// bind `args[0]` and `args[1]` to this rule when called for (x=10) and +// (y=12) respectively. +func eqOperandsToRefAndValue(isVirtual func(Ref) bool, args []*Term, a, b *Term) (*refindex, bool) { + switch v := a.Value.(type) { + case Var: + for i, arg := range args { + if arg.Value.Compare(v) == 0 { + if bval, ok := indexValue(b); ok { + return &refindex{Ref: Ref{FunctionArgRootDocument, IntNumberTerm(i)}, Value: bval}, true + } + } + } + case Ref: + if !RootDocumentNames.Contains(v[0]) { + return nil, false + } + if isVirtual(v) { + return nil, false + } + if v.IsNested() || !v.IsGround() { + return nil, false + } + if bval, ok := indexValue(b); ok { + return &refindex{Ref: v, Value: bval}, true + } } + return nil, false +} +func indexValue(b *Term) (Value, bool) { switch b := b.Value.(type) { case Null, Boolean, Number, String, Var: - return ref, b, true + return b, true case *Array: stop := false first := true @@ -721,11 +782,11 @@ func eqOperandsToRefAndValue(isVirtual func(Ref) bool, a, b *Term) (Ref, Value, }) vis.Walk(b) if !stop { - return ref, b, true + return b, true } } - return nil, nil, false + return nil, false } func globDelimiterToString(delim *Term) (string, bool) { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/scanner/scanner.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/scanner/scanner.go index cb4bd3a59..9402749e3 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/scanner/scanner.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/scanner/scanner.go @@ -19,13 +19,14 @@ const bom = 0xFEFF // Scanner is used to tokenize an input stream of // Rego source code. type Scanner struct { - offset int - row int - col int - bs []byte - curr rune - width int - errors []Error + offset int + row int + col int + bs []byte + curr rune + width int + errors []Error + keywords map[string]tokens.Token } // Error represents a scanner error. @@ -52,12 +53,13 @@ func New(r io.Reader) (*Scanner, error) { } s := &Scanner{ - offset: 0, - row: 1, - col: 0, - bs: bs, - curr: -1, - width: 0, + offset: 0, + row: 1, + col: 0, + bs: bs, + curr: -1, + width: 0, + keywords: tokens.Keywords(), } s.next() @@ -80,6 +82,36 @@ func (s *Scanner) String() string { return fmt.Sprintf("", s.curr, s.offset, len(s.bs)) } +// Keyword will return a token for the passed in +// literal value. If the value is a Rego keyword +// then the appropriate token is returned. Everything +// else is an Ident. +func (s *Scanner) Keyword(lit string) tokens.Token { + if tok, ok := s.keywords[lit]; ok { + return tok + } + return tokens.Ident +} + +// AddKeyword adds a string -> token mapping to this Scanner instance. +func (s *Scanner) AddKeyword(kw string, tok tokens.Token) { + s.keywords[kw] = tok +} + +// WithKeywords returns a new copy of the Scanner struct `s`, with the set +// of known keywords being that of `s` with `kws` added. +func (s *Scanner) WithKeywords(kws map[string]tokens.Token) *Scanner { + cpy := *s + cpy.keywords = make(map[string]tokens.Token, len(s.keywords)+len(kws)) + for kw, tok := range s.keywords { + cpy.AddKeyword(kw, tok) + } + for k, t := range kws { + cpy.AddKeyword(k, t) + } + return &cpy +} + // Scan will increment the scanners position in the source // code until the next token is found. The token, starting position // of the token, string literal, and any errors encountered are @@ -97,7 +129,7 @@ func (s *Scanner) Scan() (tokens.Token, Position, string, []Error) { tok = tokens.Whitespace } else if isLetter(s.curr) { lit = s.scanIdentifier() - tok = tokens.Keyword(lit) + tok = s.Keyword(lit) } else if isDecimal(s.curr) { lit = s.scanNumber() tok = tokens.Number diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/tokens/tokens.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/tokens/tokens.go index 29229a5a3..ce053c18a 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/tokens/tokens.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/internal/tokens/tokens.go @@ -57,6 +57,7 @@ const ( Unify Equal Assign + In Neq Gt Lt @@ -103,6 +104,7 @@ var strings = [...]string{ Unify: "eq", Equal: "equal", Assign: "assign", + In: "in", Neq: "neq", Gt: "gt", Lt: "lt", @@ -126,13 +128,11 @@ var keywords = map[string]Token{ "false": False, } -// Keyword will return a token for the passed in -// literal value. If the value is a Rego keyword -// then the appropriate token is returned. Everything -// else is an Ident. -func Keyword(lit string) Token { - if tok, ok := keywords[lit]; ok { - return tok +// Keywords returns a copy of the default string -> Token keyword map. +func Keywords() map[string]Token { + cpy := make(map[string]Token, len(keywords)) + for k, v := range keywords { + cpy[k] = v } - return Ident + return cpy } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/parser.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/parser.go index 146a41bd1..0990a6a53 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/parser.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/parser.go @@ -34,6 +34,7 @@ type state struct { lit string loc Location errors Errors + hints []string comments []*Comment wildcard int } @@ -59,20 +60,52 @@ func (s *state) Text(offset, end int) []byte { // Parser is used to parse Rego statements. type Parser struct { - r io.Reader - s *state - po ParserOptions + r io.Reader + s *state + po ParserOptions + cache parsedTermCache +} + +type parsedTermCacheItem struct { + t *Term + post *state // post is the post-state that's restored on a cache-hit + offset int + next *parsedTermCacheItem +} + +type parsedTermCache struct { + m *parsedTermCacheItem +} + +func (c parsedTermCache) String() string { + s := strings.Builder{} + s.WriteRune('{') + var e *parsedTermCacheItem + for e = c.m; e != nil; e = e.next { + fmt.Fprintf(&s, "%v", e) + } + s.WriteRune('}') + return s.String() +} + +func (e *parsedTermCacheItem) String() string { + return fmt.Sprintf("<%d:%v>", e.offset, e.t) } // ParserOptions defines the options for parsing Rego statements. type ParserOptions struct { + Capabilities *Capabilities ProcessAnnotation bool + AllFutureKeywords bool + FutureKeywords []string } // NewParser creates and initializes a Parser. func NewParser() *Parser { - p := &Parser{s: &state{}, - po: ParserOptions{}} + p := &Parser{ + s: &state{}, + po: ParserOptions{}, + } return p } @@ -97,6 +130,35 @@ func (p *Parser) WithProcessAnnotation(processAnnotation bool) *Parser { return p } +// WithFutureKeywords enables "future" keywords, i.e., keywords that can +// be imported via +// +// import future.keywords.kw +// import future.keywords.other +// +// but in a more direct way. The equivalent of this import would be +// +// WithFutureKeywords("kw", "other") +func (p *Parser) WithFutureKeywords(kws ...string) *Parser { + p.po.FutureKeywords = kws + return p +} + +// WithAllFutureKeywords enables all "future" keywords, i.e., the +// ParserOption equivalent of +// +// import future.keywords +func (p *Parser) WithAllFutureKeywords(yes bool) *Parser { + p.po.AllFutureKeywords = yes + return p +} + +// WithCapabilities sets the capabilities structure on the parser. +func (p *Parser) WithCapabilities(c *Capabilities) *Parser { + p.po.Capabilities = c + return p +} + const ( annotationScopePackage = "package" annotationScopeImport = "import" @@ -105,11 +167,70 @@ const ( annotationScopeSubpackages = "subpackages" ) +func (p *Parser) parsedTermCacheLookup() (*Term, *state) { + l := p.s.loc.Offset + // stop comparing once the cached offsets are lower than l + for h := p.cache.m; h != nil && h.offset >= l; h = h.next { + if h.offset == l { + return h.t, h.post + } + } + return nil, nil +} + +func (p *Parser) parsedTermCachePush(t *Term, s0 *state) { + s1 := p.save() + o0 := s0.loc.Offset + entry := parsedTermCacheItem{t: t, post: s1, offset: o0} + + // find the first one whose offset is smaller than ours + var e *parsedTermCacheItem + for e = p.cache.m; e != nil; e = e.next { + if e.offset < o0 { + break + } + } + entry.next = e + p.cache.m = &entry +} + +// futureParser returns a shallow copy of `p` with an empty +// cache, and a scanner that knows all future keywords. +// It's used to present hints in errors, when statements would +// only parse successfully if some future keyword is enabled. +func (p *Parser) futureParser() *Parser { + q := *p + q.s = p.save() + q.s.s = p.s.s.WithKeywords(futureKeywords) + q.cache = parsedTermCache{} + return &q +} + // Parse will read the Rego source and parse statements and // comments as they are found. Any errors encountered while // parsing will be accumulated and returned as a list of Errors. func (p *Parser) Parse() ([]Statement, []*Comment, Errors) { + if p.po.Capabilities == nil { + p.po.Capabilities = CapabilitiesForThisVersion() + } + + allowedFutureKeywords := map[string]tokens.Token{} + + for _, kw := range p.po.Capabilities.FutureKeywords { + var ok bool + allowedFutureKeywords[kw], ok = futureKeywords[kw] + if !ok { + return nil, nil, Errors{ + &Error{ + Code: ParseErr, + Message: fmt.Sprintf("illegal capabilities: unknown keyword: %v", kw), + Location: nil, + }, + } + } + } + var err error p.s.s, err = scanner.New(p.r) if err != nil { @@ -122,6 +243,28 @@ func (p *Parser) Parse() ([]Statement, []*Comment, Errors) { } } + selected := map[string]tokens.Token{} + if p.po.AllFutureKeywords { + for kw, tok := range allowedFutureKeywords { + selected[kw] = tok + } + } else { + for _, kw := range p.po.FutureKeywords { + tok, ok := allowedFutureKeywords[kw] + if !ok { + return nil, nil, Errors{ + &Error{ + Code: ParseErr, + Message: fmt.Sprintf("unknown future keyword: %v", kw), + Location: nil, + }, + } + } + selected[kw] = tok + } + } + p.s.s = p.s.s.WithKeywords(selected) + // read the first token to initialize the parser p.scan() @@ -148,6 +291,9 @@ func (p *Parser) Parse() ([]Statement, []*Comment, Errors) { s = p.save() if imp := p.parseImport(); imp != nil { + if FutureRootDocument.Equal(imp.Path.Value.(Ref)[0]) { + p.futureImport(imp, allowedFutureKeywords) + } stmts = append(stmts, imp) continue } else if len(p.s.errors) > 0 { @@ -167,7 +313,6 @@ func (p *Parser) Parse() ([]Statement, []*Comment, Errors) { } p.restore(s) - p.save() // no need to save return value to s if body := p.parseQuery(true, tokens.EOF); body != nil { stmts = append(stmts, body) @@ -312,8 +457,10 @@ func (p *Parser) parseImport() *Import { path := imp.Path.Value.(Ref) - if !RootDocumentNames.Contains(path[0]) { - p.errorf(imp.Path.Location, "unexpected import path, must begin with one of: %v, got: %v", RootDocumentNames, path[0]) + if !RootDocumentNames.Contains(path[0]) && !FutureRootDocument.Equal(path[0]) { + p.errorf(imp.Path.Location, "unexpected import path, must begin with one of: %v, got: %v", + RootDocumentNames.Union(NewSet(FutureRootDocument)), + path[0]) return nil } @@ -325,14 +472,15 @@ func (p *Parser) parseImport() *Import { return nil } - alias := p.parseTerm() - - v, ok := alias.Value.(Var) - if !ok { - p.illegal("expected var") - return nil + if alias := p.parseTerm(); alias != nil { + v, ok := alias.Value.(Var) + if ok { + imp.Alias = v + return &imp + } } - imp.Alias = v + p.illegal("expected var") + return nil } return &imp @@ -449,7 +597,7 @@ func (p *Parser) parseElse(head *Head) *Rule { rule.Head.Value = BooleanTerm(true) case tokens.Unify: p.scan() - rule.Head.Value = p.parseTermRelation() + rule.Head.Value = p.parseTermInfixCall() if rule.Head.Value == nil { return nil } @@ -491,11 +639,8 @@ func (p *Parser) parseHead(defaultRule bool) *Head { }() if term := p.parseVar(); term != nil { - if v, ok := term.Value.(Var); ok { - head.Name = v - } - } - if head.Name == "" { + head.Name = term.Value.(Var) + } else { p.illegal("expected rule head name") } @@ -518,11 +663,14 @@ func (p *Parser) parseHead(defaultRule bool) *Head { if p.s.tok == tokens.LBrack { p.scan() - head.Key = p.parseTermRelation() + head.Key = p.parseTermInfixCall() if head.Key == nil { p.illegal("expected rule key term (e.g., %s[] { ... })", head.Name) } if p.s.tok != tokens.RBrack { + if _, ok := futureKeywords[head.Name.String()]; ok { + p.hint("`import future.keywords.%[1]s` for '%[1]s' keyword", head.Name.String()) + } p.illegal("non-terminated rule key") } p.scan() @@ -530,9 +678,9 @@ func (p *Parser) parseHead(defaultRule bool) *Head { if p.s.tok == tokens.Unify { p.scan() - head.Value = p.parseTermRelation() + head.Value = p.parseTermInfixCall() if head.Value == nil { - p.illegal("expected rule value term (e.g., %s[] { ... })", head.Name) + p.illegal("expected rule value term (e.g., %s[%s] = { ... })", head.Name, head.Key) } } else if p.s.tok == tokens.Assign { @@ -549,7 +697,7 @@ func (p *Parser) parseHead(defaultRule bool) *Head { p.scan() head.Assign = true - head.Value = p.parseTermRelation() + head.Value = p.parseTermInfixCall() if head.Value == nil { p.illegal("expected rule value term (e.g., %s := { ... })", head.Name) } @@ -671,7 +819,7 @@ func (p *Parser) parseWith() []*With { p.scan() - if with.Value = p.parseTermRelation(); with.Value == nil { + if with.Value = p.parseTermInfixCall(); with.Value == nil { return nil } @@ -692,13 +840,46 @@ func (p *Parser) parseSome() *Expr { decl := &SomeDecl{} decl.SetLoc(p.s.Loc()) - for { + // Attempt to parse "some x in xs", which will end up in + // SomeDecl{Symbols: ["member(x, xs)"]} + s := p.save() + p.scan() + if term := p.parseTermInfixCall(); term != nil { + if call, ok := term.Value.(Call); ok { + switch call[0].String() { + case Member.Name, MemberWithKey.Name: // OK + default: + p.illegal("expected `x in xs` or `x, y in xs` expression") + return nil + } - p.scan() + decl.Symbols = []*Term{term} + return NewExpr(decl).SetLocation(decl.Location) + } + } - switch p.s.tok { - case tokens.Ident: + p.restore(s) + s = p.save() // new copy for later + var hint bool + p.scan() + if term := p.futureParser().parseTermInfixCall(); term != nil { + if call, ok := term.Value.(Call); ok { + switch call[0].String() { + case Member.Name, MemberWithKey.Name: + hint = true + } } + } + + // go on as before, it's `some x[...]` or illegal + p.restore(s) + if hint { + p.hint("`import future.keywords.in` for `some x in xs` expressions") + } + + for { // collecting var args + + p.scan() if p.s.tok != tokens.Ident { p.illegal("expected var") @@ -719,14 +900,13 @@ func (p *Parser) parseSome() *Expr { func (p *Parser) parseExpr() *Expr { - lhs := p.parseTermRelation() - + lhs := p.parseTermInfixCall() if lhs == nil { return nil } if op := p.parseTermOp(tokens.Assign, tokens.Unify); op != nil { - if rhs := p.parseTermRelation(); rhs != nil { + if rhs := p.parseTermInfixCall(); rhs != nil { return NewExpr([]*Term{op, lhs, rhs}) } return nil @@ -742,14 +922,63 @@ func (p *Parser) parseExpr() *Expr { return NewExpr(lhs) } -// parseTermRelation consumes the next term from the input and returns it. If a +// parseTermInfixCall consumes the next term from the input and returns it. If a // term cannot be parsed the return value is nil and error will be recorded. The // scanner will be advanced to the next token before returning. -func (p *Parser) parseTermRelation() *Term { - return p.parseTermRelationRec(nil, p.s.loc.Offset) +// By starting out with infix relations (==, !=, <, etc) and further calling the +// other binary operators (|, &, arithmetics), it constitutes the binding +// precedence. +func (p *Parser) parseTermInfixCall() *Term { + return p.parseTermIn(nil, true, p.s.loc.Offset) } -func (p *Parser) parseTermRelationRec(lhs *Term, offset int) *Term { +func (p *Parser) parseTermInfixCallInList() *Term { + return p.parseTermIn(nil, false, p.s.loc.Offset) +} + +func (p *Parser) parseTermIn(lhs *Term, keyVal bool, offset int) *Term { + // NOTE(sr): `in` is a bit special: besides `lhs in rhs`, it also + // supports `key, val in rhs`, so it can have an optional second lhs. + // `keyVal` triggers if we attempt to parse a second lhs argument (`mhs`). + if lhs == nil { + lhs = p.parseTermRelation(nil, offset) + } + if lhs != nil { + if keyVal && p.s.tok == tokens.Comma { // second "lhs", or "middle hand side" + s := p.save() + p.scan() + if mhs := p.parseTermRelation(nil, offset); mhs != nil { + if op := p.parseTermOpName(MemberWithKey.Ref(), tokens.In); op != nil { + if rhs := p.parseTermRelation(nil, p.s.loc.Offset); rhs != nil { + call := p.setLoc(CallTerm(op, lhs, mhs, rhs), lhs.Location, offset, p.s.lastEnd) + switch p.s.tok { + case tokens.In: + return p.parseTermIn(call, keyVal, offset) + default: + return call + } + } + } + } + p.restore(s) + return nil + } + if op := p.parseTermOpName(Member.Ref(), tokens.In); op != nil { + if rhs := p.parseTermRelation(nil, p.s.loc.Offset); rhs != nil { + call := p.setLoc(CallTerm(op, lhs, rhs), lhs.Location, offset, p.s.lastEnd) + switch p.s.tok { + case tokens.In: + return p.parseTermIn(call, keyVal, offset) + default: + return call + } + } + } + } + return lhs +} + +func (p *Parser) parseTermRelation(lhs *Term, offset int) *Term { if lhs == nil { lhs = p.parseTermOr(nil, offset) } @@ -759,7 +988,7 @@ func (p *Parser) parseTermRelationRec(lhs *Term, offset int) *Term { call := p.setLoc(CallTerm(op, lhs, rhs), lhs.Location, offset, p.s.lastEnd) switch p.s.tok { case tokens.Equal, tokens.Neq, tokens.Lt, tokens.Gt, tokens.Lte, tokens.Gte: - return p.parseTermRelationRec(call, offset) + return p.parseTermRelation(call, offset) default: return call } @@ -852,6 +1081,12 @@ func (p *Parser) parseTermFactor(lhs *Term, offset int) *Term { } func (p *Parser) parseTerm() *Term { + if term, s := p.parsedTermCacheLookup(); s != nil { + p.restore(s) + return term + } + s0 := p.save() + var term *Term switch p.s.tok { case tokens.Null: @@ -873,7 +1108,7 @@ func (p *Parser) parseTerm() *Term { case tokens.LParen: offset := p.s.loc.Offset p.scan() - if r := p.parseTermRelation(); r != nil { + if r := p.parseTermInfixCall(); r != nil { if p.s.tok == tokens.RParen { r.Location.Text = p.s.Text(offset, p.s.tokEnd) term = r @@ -883,10 +1118,11 @@ func (p *Parser) parseTerm() *Term { } default: p.illegalToken() - return nil } - return p.parseTermFinish(term) + term = p.parseTermFinish(term) + p.parsedTermCachePush(term, s0) + return term } func (p *Parser) parseTermFinish(head *Term) *Term { @@ -1001,9 +1237,9 @@ func (p *Parser) parseCall(operator *Term, offset int) (term *Term) { p.setLoc(term, loc, offset, end) }() - p.scan() + p.scan() // steps over '(' - if p.s.tok == tokens.RParen { + if p.s.tok == tokens.RParen { // no args, i.e. set() or any.func() end = p.s.tokEnd p.scanWS() if operator.Equal(setConstructor) { @@ -1065,7 +1301,7 @@ func (p *Parser) parseRef(head *Term, offset int) (term *Term) { return term case tokens.LBrack: p.scan() - if term := p.parseTermRelation(); term != nil { + if term := p.parseTermInfixCall(); term != nil { if p.s.tok != tokens.RBrack { p.illegal("expected %v", tokens.LBrack) return nil @@ -1147,18 +1383,17 @@ func (p *Parser) parseArray() (term *Term) { } } // fall back to parsing as a normal array definition - fallthrough - default: - p.restore(s) - if terms := p.parseTermList(tokens.RBrack, nil); terms != nil { - return NewTerm(NewArray(terms...)) - } - return nil } + + p.restore(s) + + if terms := p.parseTermList(tokens.RBrack, nil); terms != nil { + return NewTerm(NewArray(terms...)) + } + return nil } func (p *Parser) parseSetOrObject() (term *Term) { - loc := p.s.Loc() offset := p.s.loc.Offset @@ -1190,7 +1425,6 @@ func (p *Parser) parseSetOrObject() (term *Term) { // // Note: We don't know yet if it is a set or object being defined. head := p.parseTerm() - if head == nil { return nil } @@ -1208,7 +1442,8 @@ func (p *Parser) parseSetOrObject() (term *Term) { p.restore(s) - if head = p.parseTermRelation(); head == nil { + head = p.parseTermInfixCallInList() + if head == nil { return nil } @@ -1218,10 +1453,9 @@ func (p *Parser) parseSetOrObject() (term *Term) { case tokens.Colon: // It still might be an object comprehension, eg { a+1: b | ... } return p.parseObject(head, potentialComprehension) - default: - p.illegal("non-terminated set") } + p.illegal("non-terminated set") return nil } @@ -1234,7 +1468,6 @@ func (p *Parser) parseSet(s *state, head *Term, potentialComprehension bool) *Te if terms := p.parseTermList(tokens.RBrace, []*Term{head}); terms != nil { return SetTerm(terms...) } - return nil case tokens.Or: if potentialComprehension { // Try to parse as if it is a set comprehension @@ -1251,7 +1484,6 @@ func (p *Parser) parseSet(s *state, head *Term, potentialComprehension bool) *Te if terms := p.parseTermList(tokens.RBrace, nil); terms != nil { return SetTerm(terms...) } - return nil } return nil } @@ -1260,18 +1492,31 @@ func (p *Parser) parseObject(k *Term, potentialComprehension bool) *Term { // NOTE(tsandall): Assumption: this function is called after parsing the key // of the head element and then receiving a colon token from the scanner. // Advance beyond the colon and attempt to parse an object. + if p.s.tok != tokens.Colon { + panic("expected colon") + } p.scan() s := p.save() - v := p.parseTerm() + // NOTE(sr): We first try to parse the value as a term (`v`), and see + // if we can parse `{ x: v | ...}` as a comprehension. + // However, if we encounter either a Comma or an RBace, it cannot be + // parsed as a comprehension -- so we save double work further down + // where `parseObjectFinish(k, v, false)` would only exercise the + // same code paths once more. + v := p.parseTerm() if v == nil { return nil } - switch p.s.tok { - case tokens.RBrace, tokens.Comma, tokens.Or: - if potentialComprehension { + potentialRelation := true + if potentialComprehension { + switch p.s.tok { + case tokens.RBrace, tokens.Comma: + potentialRelation = false + fallthrough + case tokens.Or: if term := p.parseObjectFinish(k, v, true); term != nil { return term } @@ -1280,17 +1525,19 @@ func (p *Parser) parseObject(k *Term, potentialComprehension bool) *Term { p.restore(s) - if v = p.parseTermRelation(); v == nil { - return nil - } + if potentialRelation { + v := p.parseTermInfixCallInList() + if v == nil { + return nil + } - switch p.s.tok { - case tokens.Comma, tokens.RBrace: - return p.parseObjectFinish(k, v, false) - default: - p.illegal("non-terminated object") + switch p.s.tok { + case tokens.RBrace, tokens.Comma: + return p.parseObjectFinish(k, v, false) + } } + p.illegal("non-terminated object") return nil } @@ -1321,7 +1568,7 @@ func (p *Parser) parseTermList(end tokens.Token, r []*Term) []*Term { return r } for { - term := p.parseTermRelation() + term := p.parseTermInfixCallInList() if term != nil { r = append(r, term) switch p.s.tok { @@ -1347,12 +1594,12 @@ func (p *Parser) parseTermPairList(end tokens.Token, r [][2]*Term) [][2]*Term { return r } for { - key := p.parseTermRelation() + key := p.parseTermInfixCallInList() if key != nil { switch p.s.tok { case tokens.Colon: p.scan() - if val := p.parseTermRelation(); val != nil { + if val := p.parseTermInfixCallInList(); val != nil { r = append(r, [2]*Term{key, val}) switch p.s.tok { case end: @@ -1388,6 +1635,21 @@ func (p *Parser) parseTermOp(values ...tokens.Token) *Term { return nil } +func (p *Parser) parseTermOpName(ref Ref, values ...tokens.Token) *Term { + for i := range values { + if p.s.tok == values[i] { + for _, r := range ref { + r.SetLocation(p.s.Loc()) + } + t := RefTerm(ref...) + t.SetLocation(p.s.Loc()) + p.scan() + return t + } + } + return nil +} + func (p *Parser) parseVar() *Term { s := p.s.lit @@ -1413,16 +1675,40 @@ func (p *Parser) error(loc *location.Location, reason string) { } func (p *Parser) errorf(loc *location.Location, f string, a ...interface{}) { + msg := strings.Builder{} + fmt.Fprintf(&msg, f, a...) + + switch len(p.s.hints) { + case 0: // nothing to do + case 1: + msg.WriteString(" (hint: ") + msg.WriteString(p.s.hints[0]) + msg.WriteRune(')') + default: + msg.WriteString(" (hints: ") + for i, h := range p.s.hints { + if i > 0 { + msg.WriteString(", ") + } + msg.WriteString(h) + } + msg.WriteRune(')') + } + p.s.errors = append(p.s.errors, &Error{ Code: ParseErr, - Message: fmt.Sprintf(f, a...), + Message: msg.String(), Location: loc, Details: newParserErrorDetail(p.s.s.Bytes(), loc.Offset), }) + p.s.hints = nil } -func (p *Parser) illegal(note string, a ...interface{}) { +func (p *Parser) hint(f string, a ...interface{}) { + p.s.hints = append(p.s.hints, fmt.Sprintf(f, a...)) +} +func (p *Parser) illegal(note string, a ...interface{}) { tok := p.s.tok.String() if p.s.tok == tokens.Illegal { @@ -1437,7 +1723,7 @@ func (p *Parser) illegal(note string, a ...interface{}) { note = fmt.Sprintf(note, a...) if len(note) > 0 { - p.errorf(p.s.Loc(), "unexpected %s %s: %v", tok, tokType, note) + p.errorf(p.s.Loc(), "unexpected %s %s: %s", tok, tokType, note) } else { p.errorf(p.s.Loc(), "unexpected %s %s", tok, tokType) } @@ -1703,3 +1989,52 @@ func convertYAMLMapKeyTypes(x interface{}, path []string) (interface{}, error) { return x, nil } } + +// futureKeywords is the source of truth for future keywords that will +// eventually become standard keywords inside of Rego. +var futureKeywords = map[string]tokens.Token{ + "in": tokens.In, +} + +func (p *Parser) futureImport(imp *Import, allowedFutureKeywords map[string]tokens.Token) { + path := imp.Path.Value.(Ref) + if len(path) == 1 { + p.errorf(imp.Path.Location, "invalid import, use `import future.keywords` or `import.future.keywords.in`") + return + } + + if !path[1].Equal(StringTerm("keywords")) { + p.errorf(imp.Path.Location, "invalid import, must be `future.keywords`") + return + } + + if imp.Alias != "" { + p.errorf(imp.Path.Location, "future keyword imports cannot be aliased") + return + } + + kwds := make([]string, 0, len(allowedFutureKeywords)) + for k := range allowedFutureKeywords { + kwds = append(kwds, k) + } + switch len(path) { + case 2: // all keywords imported, nothing to do + case 3: // one keyword imported + kw, ok := path[2].Value.(String) + if !ok { + p.errorf(imp.Path.Location, "invalid import, must be `future.keywords.x`, e.g. `import future.keywords.in`") + return + } + keyword := string(kw) + _, ok = allowedFutureKeywords[keyword] + if !ok { + p.errorf(imp.Path.Location, "unexpected keyword, must be one of %v", kwds) + return + } + + kwds = []string{keyword} // overwrite + } + for _, kw := range kwds { + p.s.s.AddKeyword(kw, allowedFutureKeywords[kw]) + } +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/parser_ext.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/parser_ext.go index 8d8c2809d..749dbd62e 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/parser_ext.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/parser_ext.go @@ -435,7 +435,11 @@ func ParseModuleWithOpts(filename, input string, popts ParserOptions) (*Module, // ParseBody returns exactly one body. // If multiple bodies are parsed, an error is returned. func ParseBody(input string) (Body, error) { - stmts, _, err := ParseStatements("", input) + return ParseBodyWithOpts(input, ParserOptions{}) +} + +func ParseBodyWithOpts(input string, popts ParserOptions) (Body, error) { + stmts, _, err := ParseStatementsWithOpts("", input, popts) if err != nil { return nil, err } @@ -556,11 +560,14 @@ func ParseStatements(filename, input string) ([]Statement, []*Comment, error) { // default return value from the parser. func ParseStatementsWithOpts(filename, input string, popts ParserOptions) ([]Statement, []*Comment, error) { - parser := NewParser().WithFilename(filename).WithReader(bytes.NewBufferString(input)) + parser := NewParser(). + WithFilename(filename). + WithReader(bytes.NewBufferString(input)). + WithProcessAnnotation(popts.ProcessAnnotation). + WithFutureKeywords(popts.FutureKeywords...). + WithAllFutureKeywords(popts.AllFutureKeywords). + WithCapabilities(popts.Capabilities) - if popts.ProcessAnnotation { - parser.WithProcessAnnotation(popts.ProcessAnnotation) - } stmts, comments, errs := parser.Parse() if len(errs) > 0 { @@ -580,7 +587,7 @@ func parseModule(filename string, stmts []Statement, comments []*Comment) (*Modu _package, ok := stmts[0].(*Package) if !ok { - loc := stmts[0].(Statement).Loc() + loc := stmts[0].Loc() errs = append(errs, NewError(ParseErr, loc, "package expected")) } @@ -749,7 +756,11 @@ func newParserErrorDetail(bs []byte, offset int) *ParserErrorDetail { func (d ParserErrorDetail) Lines() []string { line := strings.TrimLeft(d.Line, "\t") // remove leading tabs tabCount := len(d.Line) - len(line) - return []string{line, strings.Repeat(" ", d.Idx-tabCount) + "^"} + indent := d.Idx - tabCount + if indent < 0 { + indent = 0 + } + return []string{line, strings.Repeat(" ", indent) + "^"} } func isNewLineChar(b byte) bool { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/policy.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/policy.go index d175594e7..26b6d78e0 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/policy.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/policy.go @@ -33,6 +33,15 @@ var InputRootDocument = VarTerm("input") // SchemaRootDocument names the document containing external data schemas. var SchemaRootDocument = VarTerm("schema") +// FunctionArgRootDocument names the document containing function arguments. +// It's only for internal usage, for referencing function arguments between +// the index and topdown. +var FunctionArgRootDocument = VarTerm("args") + +// FutureRootDocument names the document containing new, to-become-default, +// features. +var FutureRootDocument = VarTerm("future") + // RootDocumentNames contains the names of top-level documents that can be // referred to in modules and queries. // @@ -406,6 +415,11 @@ func (mod *Module) Copy() *Module { cpy.Annotations[i] = mod.Annotations[i].Copy(nodes[mod.Annotations[i].node]) } + cpy.Comments = make([]*Comment, len(mod.Comments)) + for i := range mod.Comments { + cpy.Comments[i] = mod.Comments[i].Copy() + } + return &cpy } @@ -782,10 +796,10 @@ const ( CompleteDoc = iota // PartialSetDoc represents a set document that is partially defined by the rule. - PartialSetDoc = iota + PartialSetDoc // PartialObjectDoc represents an object document that is partially defined by the rule. - PartialObjectDoc = iota + PartialObjectDoc ) // DocKind returns the type of document produced by this rule. @@ -1220,12 +1234,12 @@ func (expr *Expr) NoWith() *Expr { // IsEquality returns true if this is an equality expression. func (expr *Expr) IsEquality() bool { - return isglobalbuiltin(expr, Var(Equality.Name)) + return isGlobalBuiltin(expr, Var(Equality.Name)) } // IsAssignment returns true if this an assignment expression. func (expr *Expr) IsAssignment() bool { - return isglobalbuiltin(expr, Var(Assign.Name)) + return isGlobalBuiltin(expr, Var(Assign.Name)) } // IsCall returns true if this expression calls a function. @@ -1237,11 +1251,21 @@ func (expr *Expr) IsCall() bool { // Operator returns the name of the function or built-in this expression refers // to. If this expression is not a function call, returns nil. func (expr *Expr) Operator() Ref { + op := expr.OperatorTerm() + if op == nil { + return nil + } + return op.Value.(Ref) +} + +// OperatorTerm returns the name of the function or built-in this expression +// refers to. If this expression is not a function call, returns nil. +func (expr *Expr) OperatorTerm() *Term { terms, ok := expr.Terms.([]*Term) if !ok || len(terms) == 0 { return nil } - return terms[0].Value.(Ref) + return terms[0] } // Operand returns the term at the zero-based pos. If the expr does not include @@ -1357,6 +1381,12 @@ func NewBuiltinExpr(terms ...*Term) *Expr { } func (d *SomeDecl) String() string { + if call, ok := d.Symbols[0].Value.(Call); ok { + if len(call) == 4 { + return "some " + call[1].String() + ", " + call[2].String() + " in " + call[3].String() + } + return "some " + call[1].String() + " in " + call[2].String() + } buf := make([]string, len(d.Symbols)) for i := range buf { buf[i] = d.Symbols[i].String() @@ -1573,7 +1603,7 @@ func validEqAssignArgCount(expr *Expr) bool { // this function checks if the expr refers to a non-namespaced (global) built-in // function like eq, gt, plus, etc. -func isglobalbuiltin(expr *Expr, name Var) bool { +func isGlobalBuiltin(expr *Expr, name Var) bool { terms, ok := expr.Terms.([]*Term) if !ok { return false @@ -1584,9 +1614,9 @@ func isglobalbuiltin(expr *Expr, name Var) bool { ref, ok := terms[0].Value.(Ref) if !ok || len(ref) != 1 { return false - } else if head, ok := ref[0].Value.(Var); !ok { - return false - } else { + } + if head, ok := ref[0].Value.(Var); ok { return head.Equal(name) } + return false } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/schema.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/schema.go index 1feea3570..76bd47567 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/schema.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/schema.go @@ -47,16 +47,16 @@ func (ss *SchemaSet) Get(path Ref) interface{} { return x } -func loadSchema(raw interface{}) (types.Type, error) { +func loadSchema(raw interface{}, allowNet []string) (types.Type, error) { - jsonSchema, err := compileSchema(raw) + jsonSchema, err := compileSchema(raw, allowNet) if err != nil { - return nil, fmt.Errorf("compile failed: %s", err.Error()) + return nil, err } tpe, err := parseSchema(jsonSchema.RootSchema) if err != nil { - return nil, fmt.Errorf("error when type checking %v", err) + return nil, fmt.Errorf("type checking: %w", err) } return tpe, nil diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/term.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/term.go index a97a24cff..1dc5bd1bb 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/term.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/term.go @@ -10,6 +10,7 @@ import ( "encoding/json" "fmt" "io" + "math" "math/big" "net/url" "regexp" @@ -108,7 +109,11 @@ func InterfaceToValue(x interface{}) (Value, error) { } return r, nil default: - return nil, fmt.Errorf("ast: illegal value: %T", x) + ptr := util.Reference(x) + if err := util.RoundTrip(ptr); err != nil { + return nil, fmt.Errorf("ast: interface conversion: %w", err) + } + return InterfaceToValue(*ptr) } } @@ -128,12 +133,12 @@ func As(v Value, x interface{}) error { // Resolver defines the interface for resolving references to native Go values. type Resolver interface { - Resolve(ref Ref) (value interface{}, err error) + Resolve(ref Ref) (interface{}, error) } // ValueResolver defines the interface for resolving references to AST values. type ValueResolver interface { - Resolve(ref Ref) (value Value, err error) + Resolve(ref Ref) (Value, error) } // UnknownValueErr indicates a ValueResolver was unable to resolve a reference @@ -390,12 +395,13 @@ func (term *Term) Get(name *Term) *Term { return nil } -// Hash returns the hash code of the Term's value. +// Hash returns the hash code of the Term's Value. Its Location +// is ignored. func (term *Term) Hash() int { return term.Value.Hash() } -// IsGround returns true if this terms' Value is ground. +// IsGround returns true if this term's Value is ground. func (term *Term) IsGround() bool { return term.Value.IsGround() } @@ -466,7 +472,7 @@ func IsComprehension(x Value) bool { // ContainsRefs returns true if the Value v contains refs. func ContainsRefs(v interface{}) bool { found := false - WalkRefs(v, func(r Ref) bool { + WalkRefs(v, func(Ref) bool { found = true return found }) @@ -540,7 +546,7 @@ func (null Null) Hash() int { } // IsGround always returns true. -func (null Null) IsGround() bool { +func (Null) IsGround() bool { return true } @@ -589,7 +595,7 @@ func (bol Boolean) Hash() int { } // IsGround always returns true. -func (bol Boolean) IsGround() bool { +func (Boolean) IsGround() bool { return true } @@ -681,7 +687,7 @@ func (num Number) Float64() (float64, bool) { } // IsGround always returns true. -func (num Number) IsGround() bool { +func (Number) IsGround() bool { return true } @@ -743,7 +749,7 @@ func (str String) Find(path Ref) (Value, error) { } // IsGround always returns true. -func (str String) IsGround() bool { +func (String) IsGround() bool { return true } @@ -797,7 +803,7 @@ func (v Var) Hash() int { } // IsGround always returns false. -func (v Var) IsGround() bool { +func (Var) IsGround() bool { return false } @@ -838,7 +844,10 @@ func PtrRef(head *Term, s string) (Ref, error) { return Ref{head}, nil } parts := strings.Split(s, "/") - ref := make(Ref, len(parts)+1) + if max := math.MaxInt32; len(parts) >= max { + return nil, fmt.Errorf("path too long: %s, %d > %d (max)", s, len(parts), max) + } + ref := make(Ref, uint(len(parts))+1) ref[0] = head for i := 0; i < len(parts); i++ { var err error @@ -945,7 +954,7 @@ func (ref Ref) Compare(other Value) int { return Compare(ref, other) } -// Find returns the current value or a not found error. +// Find returns the current value or a "not found" error. func (ref Ref) Find(path Ref) (Value, error) { if len(path) == 0 { return ref, nil @@ -1173,11 +1182,16 @@ func (arr *Array) MarshalJSON() ([]byte, error) { } func (arr *Array) String() string { - var buf []string - for _, e := range arr.elems { - buf = append(buf, e.String()) + var b strings.Builder + b.WriteRune('[') + for i, e := range arr.elems { + if i > 0 { + b.WriteString(", ") + } + b.WriteString(e.String()) } - return "[" + strings.Join(buf, ", ") + "]" + b.WriteRune(']') + return b.String() } // Len returns the number of elements in the array. @@ -1332,12 +1346,16 @@ func (s *set) String() string { if s.Len() == 0 { return "set()" } - buf := []string{} - sorted := s.Sorted() - sorted.Foreach(func(x *Term) { - buf = append(buf, fmt.Sprint(x)) - }) - return "{" + strings.Join(buf, ", ") + "}" + var b strings.Builder + b.WriteRune('{') + for i := range s.keys { + if i > 0 { + b.WriteString(", ") + } + b.WriteString(s.keys[i].Value.String()) + } + b.WriteRune('}') + return b.String() } // Compare compares s to other, return <0, 0, or >0 if it is less than, equal to, @@ -1351,8 +1369,6 @@ func (s *set) Compare(other Value) int { return 1 } t := other.(*set) - sort.Sort(termSlice(s.keys)) - sort.Sort(termSlice(t.keys)) return termSliceCompare(s.keys, t.keys) } @@ -1602,7 +1618,16 @@ func (s *set) insert(x *Term) { } s.elems[hash] = x - s.keys = append(s.keys, x) + i := sort.Search(len(s.keys), func(i int) bool { return Compare(x, s.keys[i]) < 0 }) + if i < len(s.keys) { + // insert at position `i`: + s.keys = append(s.keys, nil) // add some space + copy(s.keys[i+1:], s.keys[i:]) // move things over + s.keys[i] = x // drop it in position + } else { + s.keys = append(s.keys, x) + } + s.hash = 0 s.ground = s.ground && x.IsGround() } @@ -1784,9 +1809,6 @@ func (obj *object) Compare(other Value) int { } a := obj b := other.(*object) - // TODO: Ideally Compare would be immutable; the following sorts happen in place. - sort.Sort(a.keys) - sort.Sort(b.keys) minLen := len(a.keys) if len(b.keys) < len(a.keys) { minLen = len(b.keys) @@ -2036,12 +2058,19 @@ func (obj object) Len() int { } func (obj object) String() string { - var buf []string - sorted := objectElemSliceSorted(obj.keys) - for _, elem := range sorted { - buf = append(buf, fmt.Sprintf("%s: %s", elem.key, elem.value)) + var b strings.Builder + b.WriteRune('{') + + for i, elem := range obj.keys { + if i > 0 { + b.WriteString(", ") + } + b.WriteString(elem.key.String()) + b.WriteString(": ") + b.WriteString(elem.value.String()) } - return "{" + strings.Join(buf, ", ") + "}" + b.WriteRune('}') + return b.String() } func (obj *object) get(k *Term) *objectElem { @@ -2236,7 +2265,15 @@ func (obj *object) insert(k, v *Term) { next: head, } obj.elems[hash] = elem - obj.keys = append(obj.keys, elem) + i := sort.Search(len(obj.keys), func(i int) bool { return Compare(elem.key, obj.keys[i].key) < 0 }) + if i < len(obj.keys) { + // insert at position `i`: + obj.keys = append(obj.keys, nil) // add some space + copy(obj.keys[i+1:], obj.keys[i:]) // move things over + obj.keys[i] = elem // drop it in position + } else { + obj.keys = append(obj.keys, elem) + } obj.hash = 0 if k.IsGround() { @@ -2535,15 +2572,6 @@ func (c Call) String() string { return fmt.Sprintf("%v(%v)", c[0], strings.Join(args, ", ")) } -func objectElemSliceSorted(a objectElemSlice) objectElemSlice { - b := make(objectElemSlice, len(a)) - for i := range b { - b[i] = a[i] - } - sort.Sort(b) - return b -} - func termSliceCopy(a []*Term) []*Term { cpy := make([]*Term, len(a)) for i := range a { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/transform.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/transform.go index 0a23a4b20..c7fa4c8f1 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/transform.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/transform.go @@ -4,7 +4,9 @@ package ast -import "fmt" +import ( + "fmt" +) // Transformer defines the interface for transforming AST elements. If the // transformer returns nil and does not indicate an error, the AST element will diff --git a/constraint/vendor/github.com/open-policy-agent/opa/ast/unify.go b/constraint/vendor/github.com/open-policy-agent/opa/ast/unify.go index b05845409..80e8ae31d 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/ast/unify.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/ast/unify.go @@ -4,6 +4,25 @@ package ast +func isRefSafe(ref Ref, safe VarSet) bool { + switch head := ref[0].Value.(type) { + case Var: + return safe.Contains(head) + case Call: + vis := NewVarVisitor().WithParams(SafetyCheckVisitorParams) + vis.Walk(head) + unsafe := vis.Vars().Diff(safe) + return len(unsafe) == 0 + default: + for v := range ref[0].Vars() { + if !safe.Contains(v) { + return false + } + } + return true + } +} + // Unify returns a set of variables that will be unified when the equality expression defined by // terms a and b is evaluated. The unifier assumes that variables in the VarSet safe are already // unified. @@ -27,18 +46,6 @@ func (u *unifier) isSafe(x Var) bool { return u.safe.Contains(x) || u.unified.Contains(x) } -func (u *unifier) isHeadSafe(r Ref) bool { - if v, ok := r[0].Value.(Var); ok { - return u.isSafe(v) - } - for v := range r[0].Vars() { - if !u.isSafe(v) { - return false - } - } - return true -} - func (u *unifier) unify(a *Term, b *Term) { switch a := a.Value.(type) { @@ -57,7 +64,7 @@ func (u *unifier) unify(a *Term, b *Term) { case *Array, Object: u.unifyAll(a, b) case Ref: - if u.isHeadSafe(b) { + if isRefSafe(b, u.safe) { u.markSafe(a) } default: @@ -65,7 +72,7 @@ func (u *unifier) unify(a *Term, b *Term) { } case Ref: - if u.isHeadSafe(a) { + if isRefSafe(a, u.safe) { switch b := b.Value.(type) { case Var: u.markSafe(b) diff --git a/constraint/vendor/github.com/open-policy-agent/opa/bundle/bundle.go b/constraint/vendor/github.com/open-policy-agent/opa/bundle/bundle.go index 3dbafa6e0..13ec7fe56 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/bundle/bundle.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/bundle/bundle.go @@ -139,6 +139,10 @@ func (m Manifest) Equal(other Manifest) bool { } } + if !reflect.DeepEqual(m.Metadata, other.Metadata) { + return false + } + return m.rootSet().Equal(other.rootSet()) } @@ -153,6 +157,15 @@ func (m Manifest) Copy() Manifest { copy(wasmModules, m.WasmResolvers) m.WasmResolvers = wasmModules + metadata := m.Metadata + + if metadata != nil { + m.Metadata = make(map[string]interface{}) + for k, v := range metadata { + m.Metadata[k] = v + } + } + return m } @@ -684,6 +697,10 @@ func (w *Writer) writeWasm(tw *tar.Writer, bundle Bundle) error { func writeManifest(tw *tar.Writer, bundle Bundle) error { + if bundle.Manifest.Equal(Manifest{}) { + return nil + } + var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(bundle.Manifest); err != nil { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/bundle/file.go b/constraint/vendor/github.com/open-policy-agent/opa/bundle/file.go index db8beb119..040c0af3f 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/bundle/file.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/bundle/file.go @@ -24,6 +24,42 @@ type Descriptor struct { closeOnce *sync.Once } +// lazyFile defers reading the file until the first call of Read +type lazyFile struct { + path string + file *os.File +} + +// newLazyFile creates a new instance of lazyFile +func newLazyFile(path string) *lazyFile { + return &lazyFile{path: path} +} + +// Read implements io.Reader. It will check if the file has been opened +// and open it if it has not before attempting to read using the file's +// read method +func (f *lazyFile) Read(b []byte) (int, error) { + var err error + + if f.file == nil { + if f.file, err = os.Open(f.path); err != nil { + return 0, errors.Wrapf(err, "failed to open file %s", f.path) + } + } + + return f.file.Read(b) +} + +// Close closes the lazy file if it has been opened using the file's +// close method +func (f *lazyFile) Close() error { + if f.file != nil { + return f.file.Close() + } + + return nil +} + func newDescriptor(url, path string, reader io.Reader) *Descriptor { return &Descriptor{ url: url, @@ -130,10 +166,7 @@ func (d *dirLoader) NextFile() (*Descriptor, error) { fileName := d.files[d.idx] d.idx++ - fh, err := os.Open(fileName) - if err != nil { - return nil, errors.Wrapf(err, "failed to open file %s", fileName) - } + fh := newLazyFile(fileName) // Trim off the root directory and return path as if chrooted cleanedPath := strings.TrimPrefix(fileName, d.root) diff --git a/constraint/vendor/github.com/open-policy-agent/opa/bundle/keys.go b/constraint/vendor/github.com/open-policy-agent/opa/bundle/keys.go index 60e50e3c1..1f45ba80a 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/bundle/keys.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/bundle/keys.go @@ -6,6 +6,7 @@ package bundle import ( + "encoding/pem" "fmt" "io/ioutil" "os" @@ -106,6 +107,12 @@ func (s *SigningConfig) WithPlugin(plugin string) *SigningConfig { // GetPrivateKey returns the private key or secret from the signing config func (s *SigningConfig) GetPrivateKey() (interface{}, error) { + + block, _ := pem.Decode([]byte(s.Key)) + if block != nil { + return sign.GetSigningKey(s.Key, jwa.SignatureAlgorithm(s.Algorithm)) + } + var priv string if _, err := os.Stat(s.Key); err == nil { bs, err := ioutil.ReadFile(s.Key) @@ -118,6 +125,7 @@ func (s *SigningConfig) GetPrivateKey() (interface{}, error) { } else { return nil, err } + return sign.GetSigningKey(priv, jwa.SignatureAlgorithm(s.Algorithm)) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/bundle/sign.go b/constraint/vendor/github.com/open-policy-agent/opa/bundle/sign.go index 13d6667f5..cf9a3e183 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/bundle/sign.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/bundle/sign.go @@ -6,6 +6,7 @@ package bundle import ( + "crypto/rand" "encoding/json" "fmt" @@ -76,7 +77,11 @@ func (*DefaultSigner) GenerateSignedToken(files []FileInfo, sc *SigningConfig, k return "", err } - token, err := jws.SignLiteral(payload, jwa.SignatureAlgorithm(sc.Algorithm), privateKey, hdr) + token, err := jws.SignLiteral(payload, + jwa.SignatureAlgorithm(sc.Algorithm), + privateKey, + hdr, + rand.Reader) if err != nil { return "", err } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/bundle/store.go b/constraint/vendor/github.com/open-policy-agent/opa/bundle/store.go index 1753ffa3e..0dc779645 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/bundle/store.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/bundle/store.go @@ -9,7 +9,6 @@ import ( "encoding/base64" "encoding/json" "fmt" - "strings" "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/metrics" @@ -447,7 +446,7 @@ func erasePolicies(ctx context.Context, store storage.Store, txn storage.Transac } deleted := false for root := range roots { - if strings.HasPrefix(path, root) { + if RootPathsContain([]string{root}, path) { if err := store.DeletePolicy(ctx, txn, id); err != nil { return nil, err } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/format/format.go b/constraint/vendor/github.com/open-policy-agent/opa/format/format.go index be1ff2739..48d231832 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/format/format.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/format/format.go @@ -42,10 +42,10 @@ func MustAst(x interface{}) []byte { // Ast formats a Rego AST element. If the passed value is not a valid AST // element, Ast returns nil and an error. If AST nodes are missing locations // an arbitrary location will be used. -func Ast(x interface{}) (formatted []byte, err error) { +func Ast(x interface{}) ([]byte, error) { // The node has to be deep copied because it may be mutated below. Alternatively, - // we could avoid the copy by checking if mtuation will occur first. For now, + // we could avoid the copy by checking if mutation will occur first. For now, // since format is not latency sensitive, just deep copy in all cases. x = ast.Copy(x) @@ -68,7 +68,10 @@ func Ast(x interface{}) (formatted []byte, err error) { return false }) - w := &writer{indent: "\t"} + w := &writer{ + indent: "\t", + } + switch x := x.(type) { case *ast.Module: w.writeModule(x) @@ -438,20 +441,24 @@ func (w *writer) writeSomeDecl(decl *ast.SomeDecl, comments []*ast.Comment) []*a row := decl.Location.Row for i, term := range decl.Symbols { + switch val := term.Value.(type) { + case ast.Var: + if term.Location.Row > row { + w.endLine() + w.startLine() + w.write(w.indent) + row = term.Location.Row + } else if i > 0 { + w.write(" ") + } - if term.Location.Row > row { - w.endLine() - w.startLine() - w.write(w.indent) - row = term.Location.Row - } else if i > 0 { - w.write(" ") - } - - comments = w.writeTerm(term, comments) + comments = w.writeTerm(term, comments) - if i < len(decl.Symbols)-1 { - w.write(",") + if i < len(decl.Symbols)-1 { + w.write(",") + } + case ast.Call: + comments = w.writeInOperator(false, val[1:], comments) } } @@ -461,8 +468,14 @@ func (w *writer) writeSomeDecl(decl *ast.SomeDecl, comments []*ast.Comment) []*a func (w *writer) writeFunctionCall(expr *ast.Expr, comments []*ast.Comment) []*ast.Comment { terms := expr.Terms.([]*ast.Term) + operator := terms[0].Value.String() - bi, ok := ast.BuiltinMap[terms[0].Value.String()] + switch operator { + case ast.Member.Name, ast.MemberWithKey.Name: + return w.writeInOperator(false, terms[1:], comments) + } + + bi, ok := ast.BuiltinMap[operator] if !ok || bi.Infix == "" { return w.writeFunctionCallPlain(terms, comments) } @@ -470,13 +483,13 @@ func (w *writer) writeFunctionCall(expr *ast.Expr, comments []*ast.Comment) []*a numDeclArgs := len(bi.Decl.Args()) numCallArgs := len(terms) - 1 - if numCallArgs == numDeclArgs { - // Print infix where result is unassigned (e.g., x != y) + switch numCallArgs { + case numDeclArgs: // Print infix where result is unassigned (e.g., x != y) comments = w.writeTerm(terms[1], comments) w.write(" " + bi.Infix + " ") return w.writeTerm(terms[2], comments) - } else if numCallArgs == numDeclArgs+1 { - // Print infix where result is assigned (e.g., z = x + y) + + case numDeclArgs + 1: // Print infix where result is assigned (e.g., z = x + y) comments = w.writeTerm(terms[3], comments) w.write(" " + ast.Equality.Infix + " ") comments = w.writeTerm(terms[1], comments) @@ -484,21 +497,18 @@ func (w *writer) writeFunctionCall(expr *ast.Expr, comments []*ast.Comment) []*a comments = w.writeTerm(terms[2], comments) return comments } - return w.writeFunctionCallPlain(terms, comments) } func (w *writer) writeFunctionCallPlain(terms []*ast.Term, comments []*ast.Comment) []*ast.Comment { w.write(terms[0].String() + "(") - if len(terms) > 1 { - for _, v := range terms[1 : len(terms)-1] { - comments = w.writeTerm(v, comments) - w.write(", ") - } - comments = w.writeTerm(terms[len(terms)-1], comments) + defer w.write(")") + args := make([]interface{}, len(terms)-1) + for i, t := range terms[1:] { + args[i] = t } - w.write(")") - return comments + loc := terms[0].Location + return w.writeIterable(args, loc, closingLoc(0, 0, '(', ')', loc), comments, w.listWriter()) } func (w *writer) writeWith(with *ast.With, comments []*ast.Comment) []*ast.Comment { @@ -596,12 +606,17 @@ func (w *writer) formatVar(v ast.Var) string { } func (w *writer) writeCall(parens bool, x ast.Call, comments []*ast.Comment) []*ast.Comment { - bi, ok := ast.BuiltinMap[x[0].String()] if !ok || bi.Infix == "" { return w.writeFunctionCallPlain(x, comments) } + if bi.Infix == "in" { + // NOTE(sr): `in` requires special handling, mirroring what happens in the parser, + // since there can be one or two lhs arguments. + return w.writeInOperator(true, x[1:], comments) + } + // TODO(tsandall): improve to consider precedence? if parens { w.write("(") @@ -616,6 +631,31 @@ func (w *writer) writeCall(parens bool, x ast.Call, comments []*ast.Comment) []* return comments } +func (w *writer) writeInOperator(parens bool, operands []*ast.Term, comments []*ast.Comment) []*ast.Comment { + kw := "in" + switch len(operands) { + case 2: + comments = w.writeTermParens(true, operands[0], comments) + w.write(" ") + w.write(kw) + w.write(" ") + comments = w.writeTermParens(true, operands[1], comments) + case 3: + if parens { + w.write("(") + defer w.write(")") + } + comments = w.writeTermParens(true, operands[0], comments) + w.write(", ") + comments = w.writeTermParens(true, operands[1], comments) + w.write(" ") + w.write(kw) + w.write(" ") + comments = w.writeTermParens(true, operands[2], comments) + } + return comments +} + func (w *writer) writeObject(obj ast.Object, loc *ast.Location, comments []*ast.Comment) []*ast.Comment { w.write("{") defer w.write("}") @@ -810,10 +850,31 @@ func (w *writer) listWriter() entryWriter { } } -func groupIterable(elements []interface{}, last *ast.Location) (lines [][]interface{}) { +// groupIterable will group the `elements` slice into slices according to their +// location: anything on the same line will be put into a slice. +func groupIterable(elements []interface{}, last *ast.Location) [][]interface{} { + // Generated vars occur in the AST when we're rendering the result of + // partial evaluation in a bundle build with optimization. For those vars, + // there is no location, and the grouping based on source location will + // yield a bad result. So if there's a generated variable among elements, + // we'll render the elements all in one line. + vis := ast.NewVarVisitor() + for _, elem := range elements { + vis.Walk(elem) + } + for v := range vis.Vars() { + if v.IsGenerated() { + return [][]interface{}{elements} + } + } + sort.Slice(elements, func(i, j int) bool { + return locLess(elements[i], elements[j]) + }) + var lines [][]interface{} var cur []interface{} for i, t := range elements { - loc := getLoc(t) + elem := t + loc := getLoc(elem) lineDiff := loc.Row - last.Row if lineDiff > 0 && i > 0 { lines = append(lines, cur) @@ -821,7 +882,7 @@ func groupIterable(elements []interface{}, last *ast.Location) (lines [][]interf } last = loc - cur = append(cur, t) + cur = append(cur, elem) } return append(lines, cur) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/callgraph.csv b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/callgraph.csv index a9631aa42..0a92d7fda 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/callgraph.csv +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/callgraph.csv @@ -1,6 +1,5 @@ opa_agg_count,opa_value_type -opa_agg_count,opa_unicode_decode_utf8 -opa_agg_count,opa_abort +opa_agg_count,chartorune opa_agg_count,opa_number_int opa_agg_sum,opa_value_type opa_agg_sum,mpd_qnew @@ -34,6 +33,14 @@ opa_agg_all,opa_boolean opa_agg_any,opa_value_type opa_agg_any,opa_boolean opa_agg_any,opa_set_get +builtin_member,opa_value_iter +builtin_member,opa_value_get +builtin_member,opa_value_compare +builtin_member,opa_boolean +builtin_member3,opa_value_type +builtin_member3,opa_value_get +builtin_member3,opa_value_compare +builtin_member3,opa_boolean opa_arith_abs,opa_number_to_bf opa_arith_abs,mpd_qnew opa_arith_abs,mpd_max_ctx @@ -139,9 +146,9 @@ opa_bits_negate,qabs opa_bits_negate,opa_bf_to_bf_bits opa_bits_negate,opa_bf_bits_to_bf opa_bits_negate,qsub_one -opa_bits_negate,opa_bf_to_number opa_bits_negate,qadd_one opa_bits_negate,qneg +opa_bits_negate,opa_bf_to_number opa_bits_xor,opa_number_to_bf opa_bits_xor,mpd_isinteger opa_bits_xor,opa_mpd_del @@ -201,6 +208,12 @@ opa_cmp_lt,opa_boolean opa_cmp_lte,opa_value_compare opa_cmp_lte,opa_boolean opa_eval_ctx_new,opa_malloc +opa_eval,opa_abort +opa_eval,opa_heap_ptr_set +opa_eval,opa_value_parse +opa_eval,eval +opa_eval,opa_value_dump +opa_eval,opa_json_dump __force_import_opa_builtins,opa_builtin0 __force_import_opa_builtins,opa_builtin1 __force_import_opa_builtins,opa_builtin2 @@ -324,6 +337,7 @@ opa_json_writer_write,opa_json_writer_emit_value opa_json_writer_write,opa_free opa_json_dump,opa_json_writer_write opa_value_dump,opa_json_writer_write +opa_malloc,opa_abort opa_realloc,opa_malloc opa_realloc,memcpy opa_realloc,opa_free @@ -547,7 +561,7 @@ opa_set_union,opa_set opa_set_union,opa_set_add opa_sets_union,opa_value_type opa_sets_union,opa_set -opa_sets_union,opa_set_union +opa_sets_union,opa_set_add opa_sets_union,opa_value_free opa_strings_concat,opa_value_type opa_strings_concat,opa_malloc @@ -597,8 +611,8 @@ opa_strings_split,opa_array_append opa_strings_split,opa_unicode_decode_utf8 opa_strings_split,opa_abort opa_strings_startswith,opa_value_type -opa_strings_startswith,opa_boolean opa_strings_startswith,opa_strncmp +opa_strings_startswith,opa_boolean opa_strings_substring,opa_value_type opa_strings_substring,opa_number_try_int opa_strings_substring,opa_string_terminated @@ -685,8 +699,8 @@ opa_types_name,opa_string opa_value_hash,opa_value_hash opa_value_hash,opa_number_hash opa_value_compare,opa_value_compare_number -opa_value_compare,opa_strncmp -opa_value_compare,opa_value_compare +opa_value_compare,opa_value_compare_string +opa_value_compare,opa_value_compare_array opa_value_compare,opa_value_compare_object opa_value_compare,opa_value_compare_set opa_value_compare,opa_abort @@ -696,8 +710,8 @@ opa_set_get,opa_value_hash opa_set_get,opa_value_compare opa_number_try_int,opa_atoi64 opa_number_try_int,opa_abort -opa_value_get,opa_atoi64 opa_value_get,opa_abort +opa_value_get,opa_atoi64 opa_value_get,opa_value_hash opa_value_get,opa_value_compare opa_value_compare_number,opa_atoi64 @@ -705,14 +719,25 @@ opa_value_compare_number,opa_abort opa_value_compare_number,opa_number_to_bf opa_value_compare_number,mpd_qcmp opa_value_compare_number,mpd_del +opa_value_compare_string,opa_strncmp +opa_value_compare_array,opa_value_compare opa_value_compare_object,opa_object_keys opa_value_compare_object,opa_value_compare opa_value_compare_object,opa_value_hash +opa_value_compare_object,opa_value_compare_number +opa_value_compare_object,opa_strncmp +opa_value_compare_object,opa_value_compare_object +opa_value_compare_object,opa_value_compare_set +opa_value_compare_object,opa_abort opa_value_compare_object,opa_free opa_value_compare_set,opa_malloc opa_value_compare_set,opa_free -opa_value_compare_set,opa_array_append opa_value_compare_set,opa_value_compare +opa_value_compare_set,opa_value_compare_number +opa_value_compare_set,opa_strncmp +opa_value_compare_set,opa_value_compare_object +opa_value_compare_set,opa_value_compare_set +opa_value_compare_set,opa_abort opa_number_hash,opa_atof64 opa_number_hash,opa_abort opa_value_iter,opa_abort @@ -721,22 +746,37 @@ opa_value_iter,opa_value_hash opa_value_iter,opa_value_compare opa_object_keys,opa_malloc opa_object_keys,opa_free -opa_object_keys,opa_array_append opa_object_keys,opa_value_compare -opa_array_append,opa_malloc -opa_array_append,opa_free +opa_object_keys,opa_value_compare_number +opa_object_keys,opa_strncmp +opa_object_keys,opa_value_compare_object +opa_object_keys,opa_abort +opa_object_keys,opa_value_compare_set opa_value_free,opa_free opa_value_merge,opa_malloc opa_value_merge,opa_value_get opa_value_merge,opa_object_insert opa_value_merge,opa_value_merge +opa_value_merge,opa_abort +opa_value_merge,opa_atoi64 +opa_value_merge,opa_value_hash +opa_value_merge,opa_value_compare_number +opa_value_merge,opa_strncmp +opa_value_merge,opa_value_compare +opa_value_merge,opa_value_compare_object +opa_value_merge,opa_value_compare_set opa_object_insert,opa_value_hash opa_object_insert,opa_value_compare opa_object_insert,__opa_object_grow opa_object_insert,opa_malloc __opa_object_grow,opa_malloc __opa_object_grow,opa_value_hash +__opa_object_grow,opa_value_compare_number +__opa_object_grow,opa_strncmp __opa_object_grow,opa_value_compare +__opa_object_grow,opa_value_compare_object +__opa_object_grow,opa_value_compare_set +__opa_object_grow,opa_abort __opa_object_grow,opa_free opa_boolean,opa_malloc opa_number_ref,opa_malloc @@ -755,7 +795,12 @@ opa_set_add,__opa_set_grow opa_set_add,opa_malloc __opa_set_grow,opa_malloc __opa_set_grow,opa_value_hash +__opa_set_grow,opa_value_compare_number +__opa_set_grow,opa_strncmp __opa_set_grow,opa_value_compare +__opa_set_grow,opa_value_compare_object +__opa_set_grow,opa_value_compare_set +__opa_set_grow,opa_abort __opa_set_grow,opa_free opa_value_shallow_copy,opa_malloc opa_value_shallow_copy,opa_value_shallow_copy_object @@ -769,6 +814,8 @@ __opa_value_transitive_closure,opa_array_append __opa_value_transitive_closure,opa_value_iter __opa_value_transitive_closure,opa_value_get __opa_value_transitive_closure,__opa_value_transitive_closure +opa_array_append,opa_malloc +opa_array_append,opa_free opa_null,opa_malloc opa_number_size,opa_malloc opa_number_ref_allocated,opa_malloc @@ -804,7 +851,7 @@ node::re2\28std::__1::basic_string\2c\20st node::re2\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,escape\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29 node::re2\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,operator\20new\28unsigned\20long\29 node::re2\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,memcpy -node::re2\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const +node::re2\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,abort escape\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,std::__1::basic_string\2c\20std::__1::allocator\20>::push_back\28char\29 glob_translate\28char\20const*\2c\20unsigned\20long\2c\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20const&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,operator\20new\28unsigned\20long\29 glob_translate\28char\20const*\2c\20unsigned\20long\2c\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20const&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,lexer::lexer\28char\20const*\2c\20unsigned\20long\29 @@ -825,41 +872,33 @@ lexer::next\28token*\29,operator\20new\28unsigned\20long\29 lexer::next\28token*\29,memcpy lexer::next\28token*\29,operator\20delete\28void*\29 lexer::next\28token*\29,std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29 +lexer::next\28token*\29,abort lexer::next\28token*\29,lexer::fetch_item\28\29 -lexer::next\28token*\29,lexer::next\28token*\29 -lexer::next\28token*\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const lexer::fetch_item\28\29,opa_unicode_decode_utf8 lexer::fetch_item\28\29,operator\20new\28unsigned\20long\29 lexer::fetch_item\28\29,memcpy lexer::fetch_item\28\29,operator\20delete\28void*\29 lexer::fetch_item\28\29,lexer::fetch_range\28\29 lexer::fetch_item\28\29,lexer::fetch_text\28int\20const*\29 -lexer::fetch_item\28\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const -lexer::fetch_item\28\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const lexer::fetch_item\28\29,abort lexer::fetch_range\28\29,opa_unicode_decode_utf8 lexer::fetch_range\28\29,operator\20new\28unsigned\20long\29 lexer::fetch_range\28\29,memcpy lexer::fetch_range\28\29,operator\20delete\28void*\29 lexer::fetch_range\28\29,lexer::fetch_text\28int\20const*\29 -lexer::fetch_range\28\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const -lexer::fetch_range\28\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const lexer::fetch_range\28\29,abort lexer::fetch_text\28int\20const*\29,opa_unicode_decode_utf8 lexer::fetch_text\28int\20const*\29,operator\20new\28unsigned\20long\29 lexer::fetch_text\28int\20const*\29,memcpy lexer::fetch_text\28int\20const*\29,operator\20delete\28void*\29 -lexer::fetch_text\28int\20const*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const lexer::fetch_text\28int\20const*\29,opa_malloc lexer::fetch_text\28int\20const*\29,opa_free lexer::fetch_text\28int\20const*\29,abort -lexer::fetch_text\28int\20const*\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const node::~node\28\29,node::~node\28\29 node::~node\28\29,operator\20delete\28void*\29 node::insert\28node*\29,operator\20new\28unsigned\20long\29 node::insert\28node*\29,memcpy node::insert\28node*\29,operator\20delete\28void*\29 -node::insert\28node*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const node::insert\28node*\29,abort glob_parse\28lexer*\2c\20node**\29,operator\20new\28unsigned\20long\29 glob_parse\28lexer*\2c\20node**\29,std::__1::basic_string\2c\20std::__1::allocator\20>::compare\28unsigned\20long\2c\20unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29\20const @@ -888,7 +927,6 @@ opa_glob_match,opa_value_iter opa_glob_match,opa_value_get opa_glob_match,operator\20new\28unsigned\20long\29 opa_glob_match,memcpy -opa_glob_match,void\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>::__push_back_slow_path\2c\20std::__1::allocator\20>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>&&\29 opa_glob_match,operator\20delete\28void*\29 opa_glob_match,opa_builtin_cache_get opa_glob_match,opa_builtin_cache_set @@ -896,31 +934,31 @@ opa_glob_match,std::__1::basic_string\2c\2 opa_glob_match,std::__1::__hash_iterator\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::find\28cache_key\20const&\29 opa_glob_match,std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29 opa_glob_match,glob_translate\28char\20const*\2c\20unsigned\20long\2c\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20const&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29 +opa_glob_match,cache\28\29 opa_glob_match,std::__1::pair\2c\20std::__1::allocator\20>\20>::pair\2c\20std::__1::allocator\20>&\2c\20false>\28cache_key&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>&\29 opa_glob_match,std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29 +opa_glob_match,std::__1::pair\2c\20std::__1::allocator\20>\20>::~pair\28\29 opa_glob_match,opa_string opa_glob_match,opa_regex_match -opa_glob_match,std::__1::__basic_string_common::__throw_length_error\28\29\20const -opa_glob_match,std::__1::__vector_base_common::__throw_length_error\28\29\20const -void\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>::__push_back_slow_path\2c\20std::__1::allocator\20>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>&&\29,operator\20new\28unsigned\20long\29 -void\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>::__push_back_slow_path\2c\20std::__1::allocator\20>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>&&\29,operator\20delete\28void*\29 -void\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>::__push_back_slow_path\2c\20std::__1::allocator\20>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>&&\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const -void\20std::__1::vector\2c\20std::__1::allocator\20>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>::__push_back_slow_path\2c\20std::__1::allocator\20>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>&&\29,abort +opa_glob_match,abort std::__1::__hash_iterator\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::find\28cache_key\20const&\29,std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>::operator\28\29\28cache_key\20const&\29\20const std::__1::__hash_iterator\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::find\28cache_key\20const&\29,std::__1::equal_to::operator\28\29\28cache_key\20const&\2c\20cache_key\20const&\29\20const +cache\28\29,opa_builtin_cache_get +cache\28\29,operator\20new\28unsigned\20long\29 +cache\28\29,opa_builtin_cache_set std::__1::pair\2c\20std::__1::allocator\20>\20>::pair\2c\20std::__1::allocator\20>&\2c\20false>\28cache_key&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>&\29,std::__1::basic_string\2c\20std::__1::allocator\20>::basic_string\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29 std::__1::pair\2c\20std::__1::allocator\20>\20>::pair\2c\20std::__1::allocator\20>&\2c\20false>\28cache_key&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>&\29,operator\20new\28unsigned\20long\29 -std::__1::pair\2c\20std::__1::allocator\20>\20>::pair\2c\20std::__1::allocator\20>&\2c\20false>\28cache_key&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>&\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const +std::__1::pair\2c\20std::__1::allocator\20>\20>::pair\2c\20std::__1::allocator\20>&\2c\20false>\28cache_key&\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>&\29,abort std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29,std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>::operator\28\29\28cache_key\20const&\29\20const std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29,std::__1::equal_to::operator\28\29\28cache_key\20const&\2c\20cache_key\20const&\29\20const std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29,operator\20new\28unsigned\20long\29 -std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29,std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::rehash\28unsigned\20long\29 +std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29,std::__1::__next_prime\28unsigned\20long\29 +std::__1::pair\2c\20std::__1::allocator\20>\20>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\20>\20>\28cache_key\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\20>&&\29,std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29 +std::__1::pair\2c\20std::__1::allocator\20>\20>::~pair\28\29,operator\20delete\28void*\29 std::__1::equal_to::operator\28\29\28cache_key\20const&\2c\20cache_key\20const&\29\20const,memcmp -std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::rehash\28unsigned\20long\29,std::__1::__next_prime\28unsigned\20long\29 -std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::rehash\28unsigned\20long\29,std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29 std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29,operator\20new\28unsigned\20long\29 std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29,operator\20delete\28void*\29 -std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29,std::__1::equal_to::operator\28\29\28cache_key\20const&\2c\20cache_key\20const&\29\20const +std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29,memcmp std::__1::__hash_table\2c\20std::__1::allocator\20>\20>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\20>\20>\20>::__rehash\28unsigned\20long\29,abort opa_regex_is_valid,opa_value_type opa_regex_is_valid,opa_boolean @@ -929,7 +967,7 @@ opa_regex_is_valid,memcpy opa_regex_is_valid,re2::RE2::RE2\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29 opa_regex_is_valid,re2::RE2::~RE2\28\29 opa_regex_is_valid,operator\20delete\28void*\29 -opa_regex_is_valid,std::__1::__basic_string_common::__throw_length_error\28\29\20const +opa_regex_is_valid,abort opa_regex_match,opa_value_type opa_regex_match,operator\20new\28unsigned\20long\29 opa_regex_match,memcpy @@ -938,7 +976,7 @@ opa_regex_match,re2::RE2::PartialMatchN\28re2::StringPiece\20const&\2c\20re2::RE opa_regex_match,reuse\28re2::RE2*\29 opa_regex_match,opa_boolean opa_regex_match,operator\20delete\28void*\29 -opa_regex_match,std::__1::__basic_string_common::__throw_length_error\28\29\20const +opa_regex_match,abort compile\28char\20const*\29,opa_builtin_cache_get compile\28char\20const*\29,operator\20new\28unsigned\20long\29 compile\28char\20const*\29,opa_builtin_cache_set @@ -948,7 +986,7 @@ compile\28char\20const*\29,std::__1::__hash_iterator::__throw_length_error\28\29\20const +compile\28char\20const*\29,abort reuse\28re2::RE2*\29,opa_builtin_cache_get reuse\28re2::RE2*\29,operator\20new\28unsigned\20long\29 reuse\28re2::RE2*\29,opa_builtin_cache_set @@ -958,7 +996,8 @@ reuse\28re2::RE2*\29,operator\20delete\28void*\29 std::__1::__hash_iterator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20void*>*>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::find\2c\20std::__1::allocator\20>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,memcmp std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>&&\29,memcmp std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>&&\29,operator\20new\28unsigned\20long\29 -std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>&&\29,std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::rehash\28unsigned\20long\29 +std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>&&\29,std::__1::__next_prime\28unsigned\20long\29 +std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__emplace_unique_key_args\2c\20std::__1::allocator\20>\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\2c\20std::__1::pair\2c\20std::__1::allocator\20>\2c\20re2::RE2*>&&\29,std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__rehash\28unsigned\20long\29 opa_regex_find_all_string_submatch,opa_value_type opa_regex_find_all_string_submatch,opa_number_try_int opa_regex_find_all_string_submatch,operator\20new\28unsigned\20long\29 @@ -968,17 +1007,15 @@ opa_regex_find_all_string_submatch,opa_array opa_regex_find_all_string_submatch,memset opa_regex_find_all_string_submatch,strlen opa_regex_find_all_string_submatch,re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const -opa_regex_find_all_string_submatch,re2::fullrune\28char\20const*\2c\20int\29 -opa_regex_find_all_string_submatch,re2::chartorune\28int*\2c\20char\20const*\29 +opa_regex_find_all_string_submatch,fullrune +opa_regex_find_all_string_submatch,chartorune opa_regex_find_all_string_submatch,opa_array_with_cap opa_regex_find_all_string_submatch,opa_malloc opa_regex_find_all_string_submatch,opa_string_allocated opa_regex_find_all_string_submatch,opa_array_append opa_regex_find_all_string_submatch,reuse\28re2::RE2*\29 opa_regex_find_all_string_submatch,operator\20delete\28void*\29 -opa_regex_find_all_string_submatch,std::__1::__basic_string_common::__throw_length_error\28\29\20const -std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::rehash\28unsigned\20long\29,std::__1::__next_prime\28unsigned\20long\29 -std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::rehash\28unsigned\20long\29,std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__rehash\28unsigned\20long\29 +opa_regex_find_all_string_submatch,abort std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__rehash\28unsigned\20long\29,operator\20new\28unsigned\20long\29 std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__rehash\28unsigned\20long\29,operator\20delete\28void*\29 std::__1::__hash_table\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::allocator\20>\2c\20std::__1::__hash_value_type\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\2c\20std::__1::equal_to\2c\20std::__1::allocator\20>\20>\2c\20std::__1::hash\2c\20std::__1::allocator\20>\20>\2c\20true>\2c\20std::__1::allocator\2c\20std::__1::allocator\20>\2c\20re2::RE2*>\20>\20>::__rehash\28unsigned\20long\29,memcmp @@ -988,6 +1025,7 @@ _vsnprintf,_ntoa_format _vsnprintf,_ftoa _vsnprintf,_etoa _ntoa_format,memset +_ftoa,_out_rev _ftoa,_etoa _ftoa,memset _etoa,_ftoa @@ -995,7 +1033,8 @@ _etoa,memset fprintf,opa_abort fwrite,opa_abort fputc,opa_abort -abort,opa_abort +abort,opa_abort_ +opa_abort,opa_abort_ malloc,opa_malloc free,opa_free calloc,opa_malloc @@ -1076,10 +1115,13 @@ mpd_qresize,opa_abort mpd_qresize,mpd_switch_to_dyn mpd_qresize,mpd_realloc_dyn mpd_setdigits,opa_abort +mpd_zerocoeff,opa_abort +mpd_zerocoeff,mpd_realloc mpd_qmaxcoeff,opa_abort mpd_qmaxcoeff,mpd_switch_to_dyn mpd_qmaxcoeff,mpd_realloc_dyn mpd_isinteger,opa_abort +_mpd_isint,opa_abort mpd_setspecial,opa_abort mpd_setspecial,mpd_realloc mpd_seterror,opa_abort @@ -1097,10 +1139,12 @@ _mpd_fix_nan,mpd_realloc_dyn _mpd_check_exp,opa_abort _mpd_check_exp,mpd_realloc _mpd_check_exp,mpd_qmaxcoeff +_mpd_check_exp,mpd_setspecial _mpd_check_exp,abort _mpd_check_exp,mpd_qshiftl _mpd_check_exp,mpd_qshiftr_inplace _mpd_check_exp,_mpd_apply_round_excess +_mpd_check_exp,mpd_zerocoeff mpd_qshiftr_inplace,opa_abort mpd_qshiftr_inplace,_mpd_get_rnd mpd_qshiftr_inplace,mpd_realloc @@ -1113,10 +1157,13 @@ mpd_qset_i32,opa_abort mpd_qset_i32,mpd_realloc mpd_qset_i32,mpd_qsset_ssize _mpd_qget_uint,opa_abort -_mpd_qget_uint,memcpy -_mpd_qget_uint,_mpd_get_rnd -_mpd_qget_uint,mpd_realloc -_mpd_qget_uint,_mpd_baseshiftr +_mpd_qget_uint,_mpd_isint +_mpd_qget_uint,mpd_qsshiftr +mpd_qsshiftr,opa_abort +mpd_qsshiftr,memcpy +mpd_qsshiftr,_mpd_get_rnd +mpd_qsshiftr,mpd_realloc +mpd_qsshiftr,_mpd_baseshiftr mpd_qget_i32,_mpd_qget_uint mpd_qcopy,opa_abort mpd_qcopy,mpd_switch_to_dyn @@ -1133,20 +1180,22 @@ _mpd_apply_round_excess,mpd_switch_to_dyn _mpd_apply_round_excess,mpd_realloc_dyn mpd_qcmp,_mpd_cmp _mpd_cmp,opa_abort -_mpd_cmp,_mpd_basecmp -_mpd_basecmp,opa_abort +_mpd_cmp,_mpd_cmp_same_adjexp +_mpd_cmp_same_adjexp,_mpd_basecmp mpd_qshiftr,opa_abort +mpd_qshiftr,mpd_qcopy mpd_qshiftr,_mpd_get_rnd mpd_qshiftr,mpd_realloc mpd_qshiftr,_mpd_baseshiftr mpd_qshiftr,mpd_switch_to_dyn mpd_qshiftr,mpd_realloc_dyn -mpd_qshiftr,mpd_qcopy mpd_qand,opa_abort mpd_qand,mpd_realloc mpd_qand,mpd_switch_to_dyn mpd_qand,mpd_realloc_dyn +mpd_qand,mpd_setdigits mpd_qand,_mpd_cap +mpd_qand,mpd_seterror _mpd_cap,opa_abort _mpd_cap,mpd_switch_to_dyn _mpd_cap,mpd_realloc_dyn @@ -1155,7 +1204,9 @@ mpd_qor,opa_abort mpd_qor,mpd_realloc mpd_qor,mpd_switch_to_dyn mpd_qor,mpd_realloc_dyn +mpd_qor,mpd_setdigits mpd_qor,_mpd_cap +mpd_qor,mpd_seterror _mpd_qaddsub,opa_abort _mpd_qaddsub,mpd_qshiftl _mpd_qaddsub,mpd_realloc @@ -1174,7 +1225,9 @@ mpd_qxor,opa_abort mpd_qxor,mpd_realloc mpd_qxor,mpd_switch_to_dyn mpd_qxor,mpd_realloc_dyn +mpd_qxor,mpd_setdigits mpd_qxor,_mpd_cap +mpd_qxor,mpd_seterror mpd_qabs,mpd_qcopy mpd_qabs,_mpd_fix_nan mpd_qabs,mpd_qminus @@ -1189,14 +1242,14 @@ mpd_qplus,opa_abort mpd_qplus,mpd_qfinalize mpd_qadd,mpd_qcopy mpd_qadd,_mpd_fix_nan -mpd_qadd,_mpd_qaddsub_inf +mpd_qadd,opa_abort +mpd_qadd,mpd_realloc mpd_qadd,_mpd_qaddsub mpd_qadd,mpd_qfinalize -_mpd_qaddsub_inf,opa_abort -_mpd_qaddsub_inf,mpd_realloc mpd_qsub,mpd_qcopy mpd_qsub,_mpd_fix_nan -mpd_qsub,_mpd_qaddsub_inf +mpd_qsub,opa_abort +mpd_qsub,mpd_realloc mpd_qsub,_mpd_qaddsub mpd_qsub,mpd_qfinalize mpd_qdiv,_mpd_qdiv @@ -1206,11 +1259,15 @@ _mpd_qdiv,opa_abort _mpd_qdiv,mpd_realloc _mpd_qdiv,_settriple _mpd_qdiv,mpd_qshiftl +_mpd_qdiv,mpd_seterror _mpd_qdiv,mpd_switch_to_dyn _mpd_qdiv,mpd_realloc_dyn _mpd_qdiv,_mpd_shortdiv _mpd_qdiv,_mpd_basedivmod _mpd_qdiv,_mpd_base_ndivmod +_mpd_qdiv,mpd_setspecial +_mpd_qdiv,mpd_setdigits +_mpd_qdiv,mpd_trail_zeros _mpd_qdiv,mpd_qshiftr_inplace _mpd_qdiv,mpd_qfinalize _mpd_base_ndivmod,mpd_qnew @@ -1219,11 +1276,12 @@ _mpd_base_ndivmod,opa_abort _mpd_base_ndivmod,mpd_switch_to_dyn _mpd_base_ndivmod,mpd_realloc_dyn _mpd_base_ndivmod,_mpd_shortdiv +_mpd_base_ndivmod,_mpd_qmul_exact +_mpd_base_ndivmod,mpd_qshiftr _mpd_base_ndivmod,_mpd_qmul _mpd_base_ndivmod,mpd_qfinalize -_mpd_base_ndivmod,mpd_realloc -_mpd_base_ndivmod,mpd_qshiftr _mpd_base_ndivmod,mpd_qsub +_mpd_base_ndivmod,mpd_realloc _mpd_base_ndivmod,_mpd_qround_to_integral _mpd_base_ndivmod,fprintf _mpd_base_ndivmod,fwrite @@ -1240,37 +1298,31 @@ _mpd_qdivmod,mpd_realloc_dyn _mpd_qdivmod,_mpd_shortdiv _mpd_qdivmod,_mpd_basedivmod _mpd_qdivmod,_mpd_base_ndivmod +_mpd_qdivmod,mpd_setdigits _mpd_qdivmod,mpd_realloc _mpd_qmul,mpd_qcopy _mpd_qmul,_mpd_fix_nan _mpd_qmul,opa_abort _mpd_qmul,mpd_realloc +_mpd_qmul,_mpd_mul_2_le2 _mpd_qmul,memset _mpd_qmul,_mpd_shortmul _mpd_qmul,_mpd_basemul _mpd_qmul,mpd_switch_to_dyn _mpd_qmul,mpd_realloc_dyn _mpd_qmul,mpd_calloc -_mpd_qmul,_kmul_worksize -_mpd_qmul,_karatsuba_rec +_mpd_qmul,_mpd_kmul _mpd_qmul,_mpd_fntmul -_mpd_qmul,fprintf -_mpd_qmul,fwrite -_mpd_qmul,fputc -_mpd_qmul,abort -_mpd_qmul,_karatsuba_rec_fnt -_kmul_worksize,_kmul_worksize -_kmul_worksize,fprintf -_kmul_worksize,fwrite -_kmul_worksize,fputc -_kmul_worksize,abort -_karatsuba_rec,opa_abort -_karatsuba_rec,memset -_karatsuba_rec,_karatsuba_rec -_karatsuba_rec,_mpd_baseaddto -_karatsuba_rec,memcpy -_karatsuba_rec,_mpd_basesubfrom -_karatsuba_rec,_mpd_basemul +_mpd_qmul,_mpd_kmul_fnt +_mpd_qmul,mpd_seterror +_mpd_kmul,opa_abort +_mpd_kmul,mpd_calloc +_mpd_kmul,_kmul_worksize +_mpd_kmul,_karatsuba_rec +_mpd_kmul,fprintf +_mpd_kmul,fwrite +_mpd_kmul,fputc +_mpd_kmul,abort _mpd_fntmul,opa_abort _mpd_fntmul,fprintf _mpd_fntmul,fwrite @@ -1282,14 +1334,14 @@ _mpd_fntmul,fnt_autoconvolute _mpd_fntmul,fnt_convolute _mpd_fntmul,memset _mpd_fntmul,crt3 -_karatsuba_rec_fnt,opa_abort -_karatsuba_rec_fnt,_mpd_basemul -_karatsuba_rec_fnt,_mpd_fntmul -_karatsuba_rec_fnt,memcpy -_karatsuba_rec_fnt,memset -_karatsuba_rec_fnt,_karatsuba_rec_fnt -_karatsuba_rec_fnt,_mpd_baseaddto -_karatsuba_rec_fnt,_mpd_basesubfrom +_mpd_kmul_fnt,opa_abort +_mpd_kmul_fnt,mpd_calloc +_mpd_kmul_fnt,_kmul_worksize +_mpd_kmul_fnt,fprintf +_mpd_kmul_fnt,fwrite +_mpd_kmul_fnt,fputc +_mpd_kmul_fnt,abort +_mpd_kmul_fnt,_karatsuba_rec_fnt mpd_qmul,_mpd_qmul mpd_qmul,mpd_qfinalize _mpd_qround_to_integral,mpd_qcopy @@ -1305,6 +1357,10 @@ mpd_qrem,mpd_realloc mpd_qrem,abort mpd_qrem,_mpd_qdivmod mpd_qrem,mpd_qfinalize +_mpd_qmul_exact,_mpd_qmul +_mpd_qmul_exact,mpd_qfinalize +_mpd_qmul_exact,opa_abort +_mpd_qmul_exact,mpd_realloc mpd_qround_to_int,_mpd_qround_to_integral mpd_qround_to_intx,_mpd_qround_to_integral mpd_qtrunc,_mpd_qround_to_integral @@ -1328,6 +1384,27 @@ mpd_qimport_u16,mpd_realloc_dyn mpd_qimport_u16,_mpd_shortmul_c mpd_qimport_u16,_mpd_shortadd mpd_qimport_u16,mpd_qfinalize +_mpd_basecmp,opa_abort +_kmul_worksize,_kmul_worksize +_kmul_worksize,fprintf +_kmul_worksize,fwrite +_kmul_worksize,fputc +_kmul_worksize,abort +_karatsuba_rec,opa_abort +_karatsuba_rec,_mpd_basemul +_karatsuba_rec,memset +_karatsuba_rec,_karatsuba_rec +_karatsuba_rec,_mpd_baseaddto +_karatsuba_rec,memcpy +_karatsuba_rec,_mpd_basesubfrom +_karatsuba_rec_fnt,opa_abort +_karatsuba_rec_fnt,_mpd_basemul +_karatsuba_rec_fnt,_mpd_fntmul +_karatsuba_rec_fnt,memcpy +_karatsuba_rec_fnt,memset +_karatsuba_rec_fnt,_karatsuba_rec_fnt +_karatsuba_rec_fnt,_mpd_baseaddto +_karatsuba_rec_fnt,_mpd_basesubfrom _mpd_init_fnt_params,opa_abort _mpd_init_fnt_params,mpd_sh_alloc six_step_fnt,opa_abort @@ -1351,6 +1428,7 @@ squaretrans_pow2,memcpy swap_halfrows_pow2,opa_abort swap_halfrows_pow2,mpd_calloc swap_halfrows_pow2,memcpy +swap_halfrows_pow2,memmove swap_halfrows_pow2,fprintf swap_halfrows_pow2,fwrite swap_halfrows_pow2,fputc @@ -1361,37 +1439,29 @@ operator\20delete\28void*\29,opa_free operator\20new\5b\5d\28unsigned\20long\29,opa_malloc operator\20delete\5b\5d\28void*\29,opa_free __cxa_pure_virtual,opa_abort -std::__1::__basic_string_common::__throw_length_error\28\29\20const,abort std::__1::basic_string\2c\20std::__1::allocator\20>::basic_string\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,opa_malloc std::__1::basic_string\2c\20std::__1::allocator\20>::basic_string\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,memcpy std::__1::basic_string\2c\20std::__1::allocator\20>::basic_string\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,abort std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,memcpy std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,opa_malloc -std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,std::__1::basic_string\2c\20std::__1::allocator\20>&\20std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29 +std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,opa_free std::__1::basic_string\2c\20std::__1::allocator\20>::operator=\28std::__1::basic_string\2c\20std::__1::allocator\20>\20const&\29,abort -std::__1::basic_string\2c\20std::__1::allocator\20>&\20std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29,memcpy -std::__1::basic_string\2c\20std::__1::allocator\20>&\20std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29,opa_malloc -std::__1::basic_string\2c\20std::__1::allocator\20>&\20std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29,opa_free -std::__1::basic_string\2c\20std::__1::allocator\20>&\20std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29,abort std::__1::basic_string\2c\20std::__1::allocator\20>::resize\28unsigned\20long\2c\20char\29,std::__1::basic_string\2c\20std::__1::allocator\20>::append\28unsigned\20long\2c\20char\29 std::__1::basic_string\2c\20std::__1::allocator\20>::append\28unsigned\20long\2c\20char\29,opa_malloc std::__1::basic_string\2c\20std::__1::allocator\20>::append\28unsigned\20long\2c\20char\29,memcpy std::__1::basic_string\2c\20std::__1::allocator\20>::append\28unsigned\20long\2c\20char\29,opa_free std::__1::basic_string\2c\20std::__1::allocator\20>::append\28unsigned\20long\2c\20char\29,memset std::__1::basic_string\2c\20std::__1::allocator\20>::append\28unsigned\20long\2c\20char\29,abort -std::__1::basic_string\2c\20std::__1::allocator\20>::__shrink_or_extend\28unsigned\20long\29,opa_malloc -std::__1::basic_string\2c\20std::__1::allocator\20>::__shrink_or_extend\28unsigned\20long\29,memcpy -std::__1::basic_string\2c\20std::__1::allocator\20>::__shrink_or_extend\28unsigned\20long\29,opa_free std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29,memcpy std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29,opa_malloc std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29,opa_free std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29,abort std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\29,strlen std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\29,std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29 -std::__1::basic_string\2c\20std::__1::allocator\20>::push_back\28char\29,abort std::__1::basic_string\2c\20std::__1::allocator\20>::push_back\28char\29,opa_malloc std::__1::basic_string\2c\20std::__1::allocator\20>::push_back\28char\29,memcpy std::__1::basic_string\2c\20std::__1::allocator\20>::push_back\28char\29,opa_free +std::__1::basic_string\2c\20std::__1::allocator\20>::push_back\28char\29,abort std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_external\28char\20const*\2c\20unsigned\20long\29,memmove std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_external\28char\20const*\2c\20unsigned\20long\29,opa_malloc std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_external\28char\20const*\2c\20unsigned\20long\29,memcpy @@ -1402,7 +1472,6 @@ std::__1::basic_string\2c\20std::__1::allo std::__1::basic_string\2c\20std::__1::allocator\20>::assign\28char\20const*\29,std::__1::basic_string\2c\20std::__1::allocator\20>::__assign_external\28char\20const*\2c\20unsigned\20long\29 std::__1::basic_string\2c\20std::__1::allocator\20>::compare\28unsigned\20long\2c\20unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29\20const,memcmp std::__1::basic_string\2c\20std::__1::allocator\20>::compare\28unsigned\20long\2c\20unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29\20const,abort -std::__1::__vector_base_common::__throw_length_error\28\29\20const,abort void\20std::__1::__sort&\2c\20int*>\28int*\2c\20int*\2c\20std::__1::__less&\29,unsigned\20int\20std::__1::__sort5&\2c\20int*>\28int*\2c\20int*\2c\20int*\2c\20int*\2c\20int*\2c\20std::__1::__less&\29 void\20std::__1::__sort&\2c\20int*>\28int*\2c\20int*\2c\20std::__1::__less&\29,bool\20std::__1::__insertion_sort_incomplete&\2c\20int*>\28int*\2c\20int*\2c\20std::__1::__less&\29 void\20std::__1::__sort&\2c\20int*>\28int*\2c\20int*\2c\20std::__1::__less&\29,void\20std::__1::__sort&\2c\20int*>\28int*\2c\20int*\2c\20std::__1::__less&\29 @@ -1443,14 +1512,24 @@ re2::Compiler::Star\28re2::Frag\2c\20bool\29,opa_abort re2::Compiler::Quest\28re2::Frag\2c\20bool\29,re2::Compiler::AllocInst\28int\29 re2::Compiler::Quest\28re2::Frag\2c\20bool\29,re2::Prog::Inst::InitNop\28unsigned\20int\29 re2::Compiler::Quest\28re2::Frag\2c\20bool\29,re2::Prog::Inst::InitAlt\28unsigned\20int\2c\20unsigned\20int\29 +re2::Compiler::Nop\28\29,re2::Compiler::AllocInst\28int\29 +re2::Compiler::Nop\28\29,re2::Prog::Inst::InitNop\28unsigned\20int\29 +re2::Compiler::ByteRange\28int\2c\20int\2c\20bool\29,re2::Compiler::AllocInst\28int\29 +re2::Compiler::ByteRange\28int\2c\20int\2c\20bool\29,re2::Prog::Inst::InitByteRange\28int\2c\20int\2c\20int\2c\20unsigned\20int\29 +re2::Compiler::Match\28int\29,re2::Compiler::AllocInst\28int\29 +re2::Compiler::Match\28int\29,re2::Prog::Inst::InitMatch\28int\29 +re2::Compiler::EmptyWidth\28re2::EmptyOp\29,re2::Compiler::AllocInst\28int\29 +re2::Compiler::EmptyWidth\28re2::EmptyOp\29,re2::Prog::Inst::InitEmptyWidth\28re2::EmptyOp\2c\20unsigned\20int\29 re2::Compiler::Capture\28re2::Frag\2c\20int\29,re2::Compiler::AllocInst\28int\29 re2::Compiler::Capture\28re2::Frag\2c\20int\29,re2::Prog::Inst::InitCapture\28int\2c\20unsigned\20int\29 re2::Compiler::Capture\28re2::Frag\2c\20int\29,opa_abort +re2::Compiler::BeginRange\28\29,operator\20delete\28void*\29 re2::Compiler::UncachedRuneByteSuffix\28unsigned\20char\2c\20unsigned\20char\2c\20bool\2c\20int\29,re2::Compiler::AllocInst\28int\29 re2::Compiler::UncachedRuneByteSuffix\28unsigned\20char\2c\20unsigned\20char\2c\20bool\2c\20int\29,re2::Prog::Inst::InitByteRange\28int\2c\20int\2c\20int\2c\20unsigned\20int\29 re2::Compiler::UncachedRuneByteSuffix\28unsigned\20char\2c\20unsigned\20char\2c\20bool\2c\20int\29,opa_abort std::__1::pair\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__emplace_unique_key_args\2c\20std::__1::tuple<>\20>\28unsigned\20long\20long\20const&\2c\20std::__1::piecewise_construct_t\20const&\2c\20std::__1::tuple&&\2c\20std::__1::tuple<>&&\29,operator\20new\28unsigned\20long\29 -std::__1::pair\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__emplace_unique_key_args\2c\20std::__1::tuple<>\20>\28unsigned\20long\20long\20const&\2c\20std::__1::piecewise_construct_t\20const&\2c\20std::__1::tuple&&\2c\20std::__1::tuple<>&&\29,std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::rehash\28unsigned\20long\29 +std::__1::pair\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__emplace_unique_key_args\2c\20std::__1::tuple<>\20>\28unsigned\20long\20long\20const&\2c\20std::__1::piecewise_construct_t\20const&\2c\20std::__1::tuple&&\2c\20std::__1::tuple<>&&\29,std::__1::__next_prime\28unsigned\20long\29 +std::__1::pair\2c\20void*>*>\2c\20bool>\20std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__emplace_unique_key_args\2c\20std::__1::tuple<>\20>\28unsigned\20long\20long\20const&\2c\20std::__1::piecewise_construct_t\20const&\2c\20std::__1::tuple&&\2c\20std::__1::tuple<>&&\29,std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__rehash\28unsigned\20long\29 re2::Compiler::AddSuffixRecursive\28int\2c\20int\29,opa_abort re2::Compiler::AddSuffixRecursive\28int\2c\20int\29,re2::Compiler::FindByteRange\28int\2c\20int\29 re2::Compiler::AddSuffixRecursive\28int\2c\20int\29,re2::Compiler::AllocInst\28int\29 @@ -1461,8 +1540,10 @@ re2::Compiler::AddSuffixRecursive\28int\2c\20int\29,re2::Compiler::AddSuffixRecu re2::Compiler::FindByteRange\28int\2c\20int\29,opa_abort re2::Compiler::FindByteRange\28int\2c\20int\29,re2::Compiler::ByteRangeEqual\28int\2c\20int\29 re2::Compiler::ByteRangeEqual\28int\2c\20int\29,opa_abort +re2::Compiler::AddRuneRange\28int\2c\20int\2c\20bool\29,re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29 +re2::Compiler::AddRuneRange\28int\2c\20int\2c\20bool\29,re2::Compiler::AddRuneRangeLatin1\28int\2c\20int\2c\20bool\29 re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29,re2::Compiler::Add_80_10ffff\28\29 -re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29,re2::runetochar\28char*\2c\20int\20const*\29 +re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29,runetochar re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29,re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29 re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29,opa_abort re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29,std::__1::__hash_iterator\2c\20void*>*>\20std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::find\28unsigned\20long\20long\20const&\29 @@ -1483,22 +1564,23 @@ re2::Compiler::Add_80_10ffff\28\29,re2::Compiler::AddSuffixRecursive\28int\2c\20 re2::Compiler::Add_80_10ffff\28\29,re2::Prog::Inst::InitAlt\28unsigned\20int\2c\20unsigned\20int\29 re2::Compiler::Literal\28int\2c\20bool\29,re2::Compiler::AllocInst\28int\29 re2::Compiler::Literal\28int\2c\20bool\29,re2::Prog::Inst::InitByteRange\28int\2c\20int\2c\20int\2c\20unsigned\20int\29 -re2::Compiler::Literal\28int\2c\20bool\29,re2::runetochar\28char*\2c\20int\20const*\29 +re2::Compiler::Literal\28int\2c\20bool\29,runetochar re2::Compiler::Literal\28int\2c\20bool\29,re2::Compiler::Cat\28re2::Frag\2c\20re2::Frag\29 -re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::AllocInst\28int\29 -re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Prog::Inst::InitNop\28unsigned\20int\29 -re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Prog::Inst::InitMatch\28int\29 -re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Prog::Inst::InitEmptyWidth\28re2::EmptyOp\2c\20unsigned\20int\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Nop\28\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Match\28int\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::EmptyWidth\28re2::EmptyOp\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Cat\28re2::Frag\2c\20re2::Frag\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::AllocInst\28int\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Prog::Inst::InitAlt\28unsigned\20int\2c\20unsigned\20int\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Star\28re2::Frag\2c\20bool\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Quest\28re2::Frag\2c\20bool\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Literal\28int\2c\20bool\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,opa_abort -re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,operator\20delete\28void*\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::BeginRange\28\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::AddRuneRange\28int\2c\20int\2c\20bool\29 +re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::ByteRange\28int\2c\20int\2c\20bool\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::AddRuneRangeUTF8\28int\2c\20int\2c\20bool\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::AddRuneRangeLatin1\28int\2c\20int\2c\20bool\29 -re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Prog::Inst::InitByteRange\28int\2c\20int\2c\20int\2c\20unsigned\20int\29 re2::Compiler::PostVisit\28re2::Regexp*\2c\20re2::Frag\2c\20re2::Frag\2c\20re2::Frag*\2c\20int\29,re2::Compiler::Capture\28re2::Frag\2c\20int\29 re2::Compiler::Compile\28re2::Regexp*\2c\20bool\2c\20long\20long\29,operator\20new\28unsigned\20long\29 re2::Compiler::Compile\28re2::Regexp*\2c\20bool\2c\20long\20long\29,re2::Prog::Prog\28\29 @@ -1551,8 +1633,6 @@ re2::Compiler::Finish\28re2::Regexp*\29,re2::Regexp::RequiredPrefixForAccel\28st re2::Regexp::CompileToProg\28long\20long\29,re2::Compiler::Compile\28re2::Regexp*\2c\20bool\2c\20long\20long\29 re2::Regexp::CompileToReverseProg\28long\20long\29,re2::Compiler::Compile\28re2::Regexp*\2c\20bool\2c\20long\20long\29 std::__1::__deque_base\2c\20std::__1::allocator\20>\20>::~__deque_base\28\29,operator\20delete\28void*\29 -std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::rehash\28unsigned\20long\29,std::__1::__next_prime\28unsigned\20long\29 -std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::rehash\28unsigned\20long\29,std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__rehash\28unsigned\20long\29 std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__rehash\28unsigned\20long\29,operator\20new\28unsigned\20long\29 std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__rehash\28unsigned\20long\29,operator\20delete\28void*\29 std::__1::__hash_table\2c\20std::__1::__unordered_map_hasher\2c\20std::__1::hash\2c\20std::__1::equal_to\2c\20true>\2c\20std::__1::__unordered_map_equal\2c\20std::__1::equal_to\2c\20std::__1::hash\2c\20true>\2c\20std::__1::allocator\20>\20>::__rehash\28unsigned\20long\29,abort @@ -1585,9 +1665,9 @@ re2::DFA::DFA\28re2::Prog*\2c\20re2::Prog::MatchKind\2c\20long\20long\29,abort re2::DFA::~DFA\28\29,opa_abort re2::DFA::~DFA\28\29,operator\20delete\28void*\29 re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,operator\20new\28unsigned\20long\29 -re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,abort re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,opa_abort re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,void\20std::__1::__sort&\2c\20int*>\28int*\2c\20int*\2c\20std::__1::__less&\29 +re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,abort re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,re2::DFA::CachedState\28int*\2c\20int\2c\20unsigned\20int\29 re2::DFA::WorkqToCachedState\28re2::DFA::Workq*\2c\20re2::DFA::Workq*\2c\20unsigned\20int\29,operator\20delete\28void*\29 re2::DFA::CachedState\28int*\2c\20int\2c\20unsigned\20int\29,std::__1::__hash_iterator*>\20std::__1::__hash_table\20>::find\28re2::DFA::State*\20const&\29 @@ -1598,7 +1678,8 @@ re2::DFA::CachedState\28int*\2c\20int\2c\20unsigned\20int\29,std::__1::pair*>\20std::__1::__hash_table\20>::find\28re2::DFA::State*\20const&\29,opa_abort std::__1::pair*>\2c\20bool>\20std::__1::__hash_table\20>::__emplace_unique_key_args\28re2::DFA::State*\20const&\2c\20re2::DFA::State*\20const&\29,opa_abort std::__1::pair*>\2c\20bool>\20std::__1::__hash_table\20>::__emplace_unique_key_args\28re2::DFA::State*\20const&\2c\20re2::DFA::State*\20const&\29,operator\20new\28unsigned\20long\29 -std::__1::pair*>\2c\20bool>\20std::__1::__hash_table\20>::__emplace_unique_key_args\28re2::DFA::State*\20const&\2c\20re2::DFA::State*\20const&\29,std::__1::__hash_table\20>::rehash\28unsigned\20long\29 +std::__1::pair*>\2c\20bool>\20std::__1::__hash_table\20>::__emplace_unique_key_args\28re2::DFA::State*\20const&\2c\20re2::DFA::State*\20const&\29,std::__1::__next_prime\28unsigned\20long\29 +std::__1::pair*>\2c\20bool>\20std::__1::__hash_table\20>::__emplace_unique_key_args\28re2::DFA::State*\20const&\2c\20re2::DFA::State*\20const&\29,std::__1::__hash_table\20>::__rehash\28unsigned\20long\29 re2::SparseSetT::InsertInternal\28bool\2c\20int\29,opa_abort re2::SparseSetT::InsertInternal\28bool\2c\20int\29,re2::SparseSetT::create_index\28int\29 re2::DFA::AddToQueue\28re2::DFA::Workq*\2c\20int\2c\20unsigned\20int\29,opa_abort @@ -1705,8 +1786,6 @@ re2::Prog::SearchDFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\ re2::Prog::SearchDFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20bool*\2c\20re2::SparseSetT*\29,re2::DFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20bool\2c\20bool*\2c\20char\20const**\2c\20re2::SparseSetT*\29 re2::Prog::SearchDFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20bool*\2c\20re2::SparseSetT*\29,re2::hooks::GetDFASearchFailureHook\28\29 re2::SparseSetT::create_index\28int\29,opa_abort -std::__1::__hash_table\20>::rehash\28unsigned\20long\29,std::__1::__next_prime\28unsigned\20long\29 -std::__1::__hash_table\20>::rehash\28unsigned\20long\29,std::__1::__hash_table\20>::__rehash\28unsigned\20long\29 std::__1::__hash_table\20>::__rehash\28unsigned\20long\29,operator\20new\28unsigned\20long\29 std::__1::__hash_table\20>::__rehash\28unsigned\20long\29,operator\20delete\28void*\29 std::__1::__hash_table\20>::__rehash\28unsigned\20long\29,opa_abort @@ -1727,14 +1806,10 @@ re2::NFA::~NFA\28\29,operator\20delete\28void*\29 re2::NFA::~NFA\28\29,opa_abort std::__1::__deque_base\20>::~__deque_base\28\29,operator\20delete\28void*\29 re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29,opa_abort -re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29,re2::SparseArray::SetInternal\28bool\2c\20int\2c\20re2::NFA::Thread*\20const&\29 re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29,std::__1::deque\20>::__add_back_capacity\28\29 re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29,operator\20new\5b\5d\28unsigned\20long\29 re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29,memmove re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29,re2::Prog::EmptyFlags\28re2::StringPiece\20const&\2c\20char\20const*\29 -re2::SparseArray::SetInternal\28bool\2c\20int\2c\20re2::NFA::Thread*\20const&\29,opa_abort -re2::SparseArray::SetInternal\28bool\2c\20int\2c\20re2::NFA::Thread*\20const&\29,re2::SparseArray::create_index\28int\29 -re2::SparseArray::SetInternal\28bool\2c\20int\2c\20re2::NFA::Thread*\20const&\29,re2::SparseArray::SetExistingInternal\28int\2c\20re2::NFA::Thread*\20const&\29 std::__1::deque\20>::__add_back_capacity\28\29,memmove std::__1::deque\20>::__add_back_capacity\28\29,operator\20new\28unsigned\20long\29 std::__1::deque\20>::__add_back_capacity\28\29,operator\20delete\28void*\29 @@ -1743,24 +1818,28 @@ std::__1::deque\20>: std::__1::deque\20>::__add_back_capacity\28\29,std::__1::__split_buffer&>::push_back\28re2::NFA::Thread*&&\29 std::__1::deque\20>::__add_back_capacity\28\29,std::__1::__split_buffer&>::push_front\28re2::NFA::Thread*\20const&\29 std::__1::deque\20>::__add_back_capacity\28\29,abort -re2::NFA::Step\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\29,opa_abort re2::NFA::Step\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\29,memmove +re2::NFA::Step\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\29,opa_abort re2::NFA::Step\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\29,re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29 re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,operator\20new\5b\5d\28unsigned\20long\29 re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,memset re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,re2::NFA::Step\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\29 re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,opa_abort -re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,memchr -re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,re2::Prog::PrefixAccel_FrontAndBack\28void\20const*\2c\20unsigned\20long\29 +re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,re2::Prog::PrefixAccel\28void\20const*\2c\20unsigned\20long\29 re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,std::__1::deque\20>::__add_back_capacity\28\29 re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,memmove re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29,re2::NFA::AddToThreadq\28re2::SparseArray*\2c\20int\2c\20int\2c\20re2::StringPiece\20const&\2c\20char\20const*\2c\20re2::NFA::Thread*\29 +re2::Prog::PrefixAccel\28void\20const*\2c\20unsigned\20long\29,opa_abort +re2::Prog::PrefixAccel\28void\20const*\2c\20unsigned\20long\29,memchr +re2::Prog::PrefixAccel\28void\20const*\2c\20unsigned\20long\29,re2::Prog::PrefixAccel_FrontAndBack\28void\20const*\2c\20unsigned\20long\29 re2::Prog::SearchNFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29,re2::NFA::NFA\28re2::Prog*\29 re2::Prog::SearchNFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29,re2::NFA::Search\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20bool\2c\20bool\2c\20re2::StringPiece*\2c\20int\29 re2::Prog::SearchNFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29,re2::NFA::~NFA\28\29 re2::SparseArray::SetInternal\28bool\2c\20int\2c\20int\20const&\29,opa_abort re2::SparseArray::SetInternal\28bool\2c\20int\2c\20int\20const&\29,re2::SparseArray::create_index\28int\29 re2::SparseArray::SetInternal\28bool\2c\20int\2c\20int\20const&\29,re2::SparseArray::SetExistingInternal\28int\2c\20int\20const&\29 +re2::SparseArray::create_index\28int\29,opa_abort +re2::SparseArray::SetExistingInternal\28int\2c\20int\20const&\29,opa_abort std::__1::__split_buffer\20>::push_back\28re2::NFA::Thread*&&\29,memmove std::__1::__split_buffer\20>::push_back\28re2::NFA::Thread*&&\29,operator\20new\28unsigned\20long\29 std::__1::__split_buffer\20>::push_back\28re2::NFA::Thread*&&\29,operator\20delete\28void*\29 @@ -1777,10 +1856,6 @@ std::__1::__split_buffer&>::push_front\28re2::NFA::Thread*\20const&\29,operator\20new\28unsigned\20long\29 std::__1::__split_buffer&>::push_front\28re2::NFA::Thread*\20const&\29,operator\20delete\28void*\29 std::__1::__split_buffer&>::push_front\28re2::NFA::Thread*\20const&\29,abort -re2::SparseArray::create_index\28int\29,opa_abort -re2::SparseArray::SetExistingInternal\28int\2c\20re2::NFA::Thread*\20const&\29,opa_abort -re2::SparseArray::create_index\28int\29,opa_abort -re2::SparseArray::SetExistingInternal\28int\2c\20int\20const&\29,opa_abort re2::Prog::SearchOnePass\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29,memset re2::Prog::SearchOnePass\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29,re2::Prog::EmptyFlags\28re2::StringPiece\20const&\2c\20char\20const*\29 re2::Prog::SearchOnePass\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29,memcpy @@ -1796,7 +1871,7 @@ std::__1::vector\20>:: std::__1::vector\20>::insert\28std::__1::__wrap_iter\2c\20unsigned\20long\2c\20unsigned\20char\20const&\29,operator\20new\28unsigned\20long\29 std::__1::vector\20>::insert\28std::__1::__wrap_iter\2c\20unsigned\20long\2c\20unsigned\20char\20const&\29,memcpy std::__1::vector\20>::insert\28std::__1::__wrap_iter\2c\20unsigned\20long\2c\20unsigned\20char\20const&\29,operator\20delete\28void*\29 -std::__1::vector\20>::insert\28std::__1::__wrap_iter\2c\20unsigned\20long\2c\20unsigned\20char\20const&\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const +std::__1::vector\20>::insert\28std::__1::__wrap_iter\2c\20unsigned\20long\2c\20unsigned\20char\20const&\29,abort std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29,std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29 std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29,operator\20delete\28void*\29 re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29,re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29 @@ -1809,12 +1884,16 @@ re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29,re2::Regexp::ComputeSimple re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29,re2::Regexp::AddRuneToString\28int\29 re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29,operator\20delete\5b\5d\28void*\29 re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29,re2::Regexp::Decref\28\29 +re2::Regexp::ParseState::PushLiteral\28int\29,re2::CycleFoldRune\28int\29 re2::Regexp::ParseState::PushLiteral\28int\29,operator\20new\28unsigned\20long\29 re2::Regexp::ParseState::PushLiteral\28int\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 -re2::Regexp::ParseState::PushLiteral\28int\29,re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::PushLiteral\28int\29,re2::CharClassBuilder::CharClassBuilder\28\29 re2::Regexp::ParseState::PushLiteral\28int\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 +re2::Regexp::ParseState::PushLiteral\28int\29,re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::PushLiteral\28int\29,re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29 +re2::Regexp::ParseState::PushSimpleOp\28re2::RegexpOp\29,operator\20new\28unsigned\20long\29 +re2::Regexp::ParseState::PushSimpleOp\28re2::RegexpOp\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 +re2::Regexp::ParseState::PushSimpleOp\28re2::RegexpOp\29,re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29 re2::Regexp::ParseState::PushDot\28\29,operator\20new\28unsigned\20long\29 re2::Regexp::ParseState::PushDot\28\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::PushDot\28\29,re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29 @@ -1846,7 +1925,7 @@ re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29,operator\20n re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29,memcpy re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29,re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29 -re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const +re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29,abort re2::Regexp::ParseState::DoVerticalBar\28\29,re2::Regexp::ParseState::MaybeConcatString\28int\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::DoVerticalBar\28\29,operator\20new\28unsigned\20long\29 re2::Regexp::ParseState::DoVerticalBar\28\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 @@ -1876,10 +1955,6 @@ re2::Regexp::ParseState::DoFinish\28\29,re2::Regexp::ParseState::DoCollapse\28re re2::Regexp::ParseState::DoFinish\28\29,re2::CharClassBuilder::GetCharClass\28\29 re2::Regexp::ParseState::DoFinish\28\29,std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29 re2::Regexp::ParseState::DoFinish\28\29,operator\20delete\28void*\29 -re2::Regexp::RemoveLeadingRegexp\28re2::Regexp*\29,re2::Regexp::Decref\28\29 -re2::Regexp::RemoveLeadingRegexp\28re2::Regexp*\29,memmove -re2::Regexp::RemoveLeadingRegexp\28re2::Regexp*\29,operator\20new\28unsigned\20long\29 -re2::Regexp::RemoveLeadingRegexp\28re2::Regexp*\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::RemoveLeadingString\28re2::Regexp*\2c\20int\29,operator\20delete\5b\5d\28void*\29 re2::Regexp::RemoveLeadingString\28re2::Regexp*\2c\20int\29,memmove re2::Regexp::RemoveLeadingString\28re2::Regexp*\2c\20int\29,re2::Regexp::Decref\28\29 @@ -1893,19 +1968,19 @@ re2::Regexp::FactorAlternation\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseF re2::Regexp::FactorAlternation\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29 void\20std::__1::vector\20>::__emplace_back_slow_path\28re2::Regexp**&\2c\20int&\29,operator\20new\28unsigned\20long\29 void\20std::__1::vector\20>::__emplace_back_slow_path\28re2::Regexp**&\2c\20int&\29,operator\20delete\28void*\29 -void\20std::__1::vector\20>::__emplace_back_slow_path\28re2::Regexp**&\2c\20int&\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const void\20std::__1::vector\20>::__emplace_back_slow_path\28re2::Regexp**&\2c\20int&\29,abort re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29 re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::Incref\28\29 -re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::RemoveLeadingRegexp\28re2::Regexp*\29 +re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::Decref\28\29 +re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,memmove re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,operator\20new\28unsigned\20long\29 +re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,memcpy re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,operator\20delete\28void*\29 -re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::FactorAlternationImpl::Round2\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,abort re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::CharClassBuilder::CharClassBuilder\28\29 re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 -re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::CharClassBuilder::AddRangeFlags\28int\2c\20int\2c\20re2::Regexp::ParseFlags\29 +re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::AddFoldedRange\28re2::CharClassBuilder*\2c\20int\2c\20int\2c\20int\29 re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::Decref\28\29 re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::CharClassBuilder::GetCharClass\28\29 re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::NewCharClass\28re2::CharClass*\2c\20re2::Regexp::ParseFlags\29 @@ -1913,43 +1988,47 @@ re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::Pa re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,memcpy re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,operator\20delete\28void*\29 re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29 -re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::FactorAlternationImpl::Round3\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,abort re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::LiteralString\28int*\2c\20int\2c\20re2::Regexp::ParseFlags\29 re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,re2::Regexp::RemoveLeadingString\28re2::Regexp*\2c\20int\29 re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,operator\20new\28unsigned\20long\29 re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,memcpy re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,operator\20delete\28void*\29 -re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::FactorAlternationImpl::Round1\28re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20std::__1::vector\20>*\29,abort -re2::CharClassBuilder::AddRangeFlags\28int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::AddFoldedRange\28re2::CharClassBuilder*\2c\20int\2c\20int\2c\20int\29 -re2::CharClassBuilder::AddRangeFlags\28int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 re2::AddFoldedRange\28re2::CharClassBuilder*\2c\20int\2c\20int\2c\20int\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 re2::AddFoldedRange\28re2::CharClassBuilder*\2c\20int\2c\20int\2c\20int\29,re2::AddFoldedRange\28re2::CharClassBuilder*\2c\20int\2c\20int\2c\20int\29 -re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,re2::fullrune\28char\20const*\2c\20int\29 -re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,re2::chartorune\28int*\2c\20char\20const*\29 +re2::CharClassBuilder::AddRangeFlags\28int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::AddFoldedRange\28re2::CharClassBuilder*\2c\20int\2c\20int\2c\20int\29 +re2::CharClassBuilder::AddRangeFlags\28int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 +re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,fullrune +re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,chartorune re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,re2::StringPiece::find\28char\2c\20unsigned\20long\29\20const +re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,re2::IsValidUTF8\28re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29 re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,memcmp re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,strlen re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29,re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29 +re2::IsValidUTF8\28re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,fullrune +re2::IsValidUTF8\28re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,chartorune re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::AddRangeFlags\28int\2c\20int\2c\20re2::Regexp::ParseFlags\29 re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::CharClassBuilder\28\29 re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::Negate\28\29 re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::CharClassBuilder::AddCharClass\28re2::CharClassBuilder*\29 re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29,std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29 +re2::StringPieceToRune\28int*\2c\20re2::StringPiece*\2c\20re2::RegexpStatus*\29,fullrune +re2::StringPieceToRune\28int*\2c\20re2::StringPiece*\2c\20re2::RegexpStatus*\29,chartorune re2::Regexp::ParseState::ParseCCCharacter\28re2::StringPiece*\2c\20int*\2c\20re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29 -re2::Regexp::ParseState::ParseCCCharacter\28re2::StringPiece*\2c\20int*\2c\20re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,re2::fullrune\28char\20const*\2c\20int\29 -re2::Regexp::ParseState::ParseCCCharacter\28re2::StringPiece*\2c\20int*\2c\20re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,re2::chartorune\28int*\2c\20char\20const*\29 -re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29,re2::fullrune\28char\20const*\2c\20int\29 -re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29,re2::chartorune\28int*\2c\20char\20const*\29 +re2::Regexp::ParseState::ParseCCCharacter\28re2::StringPiece*\2c\20int*\2c\20re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,fullrune +re2::Regexp::ParseState::ParseCCCharacter\28re2::StringPiece*\2c\20int*\2c\20re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29,chartorune +re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29,fullrune +re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29,chartorune re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29,isalpha +re2::ParseEscape\28re2::StringPiece*\2c\20int*\2c\20re2::RegexpStatus*\2c\20int\29,re2::StringPieceToRune\28int*\2c\20re2::StringPiece*\2c\20re2::RegexpStatus*\29 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,operator\20new\28unsigned\20long\29 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::CharClassBuilder::CharClassBuilder\28\29 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::CharClassBuilder::AddRange\28int\2c\20int\29 -re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::fullrune\28char\20const*\2c\20int\29 -re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::chartorune\28int*\2c\20char\20const*\29 +re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,fullrune +re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,chartorune re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,strlen re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,memcmp @@ -1959,18 +2038,20 @@ re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::AddUGroup\28re2::CharClassBuilder*\2c\20re2::UGroup\20const*\2c\20int\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29,re2::Regexp::Decref\28\29 re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::StringPiece::find\28char\2c\20unsigned\20long\29\20const -re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::fullrune\28char\20const*\2c\20int\29 -re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::chartorune\28int*\2c\20char\20const*\29 +re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::IsValidUTF8\28re2::StringPiece\20const&\2c\20re2::RegexpStatus*\29 +re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::IsValidCaptureName\28re2::StringPiece\20const&\29 re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::Regexp::ParseState::DoLeftParen\28re2::StringPiece\20const&\29 +re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,fullrune +re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,chartorune re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,operator\20new\28unsigned\20long\29 re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29,re2::Regexp::ParseState::PushRegexp\28re2::Regexp*\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,operator\20new\28unsigned\20long\29 -re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::runetochar\28char*\2c\20int\20const*\29 +re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,runetochar re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,operator\20delete\28void*\29 -re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::fullrune\28char\20const*\2c\20int\29 -re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::chartorune\28int*\2c\20char\20const*\29 +re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,fullrune +re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,chartorune re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::PushLiteral\28int\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::DoFinish\28\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::ParsePerlFlags\28re2::StringPiece*\29 @@ -1982,6 +2063,8 @@ re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\2 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::PushDot\28\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::ParseCharClass\28re2::StringPiece*\2c\20re2::Regexp**\2c\20re2::RegexpStatus*\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::PushRepeatOp\28re2::RegexpOp\2c\20re2::StringPiece\20const&\2c\20bool\29 +re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::ParseInteger\28re2::StringPiece*\2c\20int*\29 +re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::ParseState::PushSimpleOp\28re2::RegexpOp\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::CharClassBuilder::CharClassBuilder\28\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::ParseUnicodeGroup\28re2::StringPiece*\2c\20re2::Regexp::ParseFlags\2c\20re2::CharClassBuilder*\2c\20re2::RegexpStatus*\29 re2::Regexp::Parse\28re2::StringPiece\20const&\2c\20re2::Regexp::ParseFlags\2c\20re2::RegexpStatus*\29,re2::Regexp::Decref\28\29 @@ -2033,23 +2116,27 @@ re2::ByteMapBuilder::Mark\28int\2c\20int\29,opa_abort re2::ByteMapBuilder::Mark\28int\2c\20int\29,operator\20new\28unsigned\20long\29 re2::ByteMapBuilder::Mark\28int\2c\20int\29,memcpy re2::ByteMapBuilder::Mark\28int\2c\20int\29,operator\20delete\28void*\29 -re2::ByteMapBuilder::Mark\28int\2c\20int\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::ByteMapBuilder::Mark\28int\2c\20int\29,abort re2::ByteMapBuilder::Merge\28\29,opa_abort -re2::ByteMapBuilder::Merge\28\29,re2::ByteMapBuilder::Recolor\28int\29 +re2::ByteMapBuilder::Merge\28\29,operator\20new\28unsigned\20long\29 +re2::ByteMapBuilder::Merge\28\29,memcpy +re2::ByteMapBuilder::Merge\28\29,operator\20delete\28void*\29 +re2::ByteMapBuilder::Merge\28\29,abort re2::ByteMapBuilder::Recolor\28int\29,operator\20new\28unsigned\20long\29 re2::ByteMapBuilder::Recolor\28int\29,memcpy re2::ByteMapBuilder::Recolor\28int\29,operator\20delete\28void*\29 -re2::ByteMapBuilder::Recolor\28int\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::ByteMapBuilder::Recolor\28int\29,abort re2::ByteMapBuilder::Build\28unsigned\20char*\2c\20int*\29,opa_abort re2::ByteMapBuilder::Build\28unsigned\20char*\2c\20int*\29,re2::ByteMapBuilder::Recolor\28int\29 re2::ByteMapBuilder::Build\28unsigned\20char*\2c\20int*\29,memset re2::Prog::ComputeByteMap\28\29,re2::ByteMapBuilder::Mark\28int\2c\20int\29 re2::Prog::ComputeByteMap\28\29,opa_abort +re2::Prog::ComputeByteMap\28\29,operator\20new\28unsigned\20long\29 +re2::Prog::ComputeByteMap\28\29,memcpy +re2::Prog::ComputeByteMap\28\29,operator\20delete\28void*\29 re2::Prog::ComputeByteMap\28\29,re2::ByteMapBuilder::Merge\28\29 +re2::Prog::ComputeByteMap\28\29,abort re2::Prog::ComputeByteMap\28\29,re2::ByteMapBuilder::Build\28unsigned\20char*\2c\20int*\29 -re2::Prog::ComputeByteMap\28\29,operator\20delete\28void*\29 re2::Prog::Flatten\28\29,operator\20new\28unsigned\20long\29 re2::Prog::Flatten\28\29,re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29 re2::Prog::Flatten\28\29,memmove @@ -2058,7 +2145,6 @@ re2::Prog::Flatten\28\29,re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29 re2::Prog::Flatten\28\29,re2::Prog::ComputeHints\28std::__1::vector\20>*\2c\20int\2c\20int\29 -re2::Prog::Flatten\28\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::Prog::Flatten\28\29,opa_abort re2::Prog::Flatten\28\29,operator\20delete\28void*\29 re2::Prog::Flatten\28\29,abort @@ -2067,9 +2153,7 @@ re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2 re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,operator\20new\28unsigned\20long\29 re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,operator\20delete\28void*\29 re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,re2::SparseSetT::InsertInternal\28bool\2c\20int\29 -re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,void\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>::__emplace_back_slow_path<>\28\29 re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,memcpy -re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::Prog::MarkSuccessors\28re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,abort void\20std::__1::__sort::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\2c\20re2::SparseArray::IndexValue*>\28re2::SparseArray::IndexValue*\2c\20re2::SparseArray::IndexValue*\2c\20bool\20\28*&\29\28re2::SparseArray::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\29,unsigned\20int\20std::__1::__sort4::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\2c\20re2::SparseArray::IndexValue*>\28re2::SparseArray::IndexValue*\2c\20re2::SparseArray::IndexValue*\2c\20re2::SparseArray::IndexValue*\2c\20re2::SparseArray::IndexValue*\2c\20bool\20\28*&\29\28re2::SparseArray::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\29 void\20std::__1::__sort::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\2c\20re2::SparseArray::IndexValue*>\28re2::SparseArray::IndexValue*\2c\20re2::SparseArray::IndexValue*\2c\20bool\20\28*&\29\28re2::SparseArray::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\29,void\20std::__1::__insertion_sort_3::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\2c\20re2::SparseArray::IndexValue*>\28re2::SparseArray::IndexValue*\2c\20re2::SparseArray::IndexValue*\2c\20bool\20\28*&\29\28re2::SparseArray::IndexValue\20const&\2c\20re2::SparseArray::IndexValue\20const&\29\29 @@ -2080,22 +2164,17 @@ re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,opa_abort re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,re2::SparseSetT::InsertInternal\28bool\2c\20int\29 re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,memcpy -re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,re2::SparseArray::SetInternal\28bool\2c\20int\2c\20int\20const&\29 -re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const +re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,re2::SparseArray::create_index\28int\29 +re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,re2::SparseArray::SetExistingInternal\28int\2c\20int\20const&\29 re2::Prog::MarkDominator\28int\2c\20re2::SparseArray*\2c\20re2::SparseArray*\2c\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,abort re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,operator\20new\28unsigned\20long\29 re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,operator\20delete\28void*\29 re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,opa_abort re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,re2::SparseSetT::InsertInternal\28bool\2c\20int\29 re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,memcpy -re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::Prog::EmitList\28int\2c\20re2::SparseArray*\2c\20std::__1::vector\20>*\2c\20re2::SparseSetT*\2c\20std::__1::vector\20>*\29,abort re2::Prog::ComputeHints\28std::__1::vector\20>*\2c\20int\2c\20int\29,opa_abort re2::Prog::ComputeHints\28std::__1::vector\20>*\2c\20int\2c\20int\29,re2::Prog::ComputeHints\28std::__1::vector\20>*\2c\20int\2c\20int\29::$_1::operator\28\29\28int\2c\20int\29\20const -void\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>::__emplace_back_slow_path<>\28\29,operator\20new\28unsigned\20long\29 -void\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>::__emplace_back_slow_path<>\28\29,operator\20delete\28void*\29 -void\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>::__emplace_back_slow_path<>\28\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const -void\20std::__1::vector\20>\2c\20std::__1::allocator\20>\20>\20>::__emplace_back_slow_path<>\28\29,abort re2::Prog::ComputeHints\28std::__1::vector\20>*\2c\20int\2c\20int\29::$_1::operator\28\29\28int\2c\20int\29\20const,opa_abort re2::Prog::PrefixAccel_FrontAndBack\28void\20const*\2c\20unsigned\20long\29,opa_abort re2::Prog::PrefixAccel_FrontAndBack\28void\20const*\2c\20unsigned\20long\29,memchr @@ -2112,9 +2191,10 @@ re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,re re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,re2::Regexp::CompileToProg\28long\20long\29 re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,re2::Regexp::NumCaptures\28\29 re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,re2::Prog::IsOnePass\28\29 -re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,std::__1::__basic_string_common::__throw_length_error\28\29\20const +re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,abort void\20std::__1::__call_once_proxy\20>\28void*\29,operator\20new\28unsigned\20long\29 re2::RE2::RE2\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29,re2::RE2::Init\28re2::StringPiece\20const&\2c\20re2::RE2::Options\20const&\29 +re2::RE2::ReverseProg\28\29\20const,std::__1::__call_once\28unsigned\20long\20volatile&\2c\20void*\2c\20void\20\28*\29\28void*\29\29 void\20std::__1::__call_once_proxy\20>\28void*\29,re2::Regexp::CompileToReverseProg\28long\20long\29 re2::RE2::~RE2\28\29,re2::Regexp::Decref\28\29 re2::RE2::~RE2\28\29,re2::Prog::~Prog\28\29 @@ -2130,7 +2210,7 @@ re2::RE2::DoMatch\28re2::StringPiece\20const&\2c\20re2::RE2::Anchor\2c\20unsigne re2::RE2::DoMatch\28re2::StringPiece\20const&\2c\20re2::RE2::Anchor\2c\20unsigned\20long*\2c\20re2::RE2::Arg\20const*\20const*\2c\20int\29\20const,re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const re2::RE2::DoMatch\28re2::StringPiece\20const&\2c\20re2::RE2::Anchor\2c\20unsigned\20long*\2c\20re2::RE2::Arg\20const*\20const*\2c\20int\29\20const,operator\20delete\5b\5d\28void*\29 re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const,memcmp -re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const,std::__1::__call_once\28unsigned\20long\20volatile&\2c\20void*\2c\20void\20\28*\29\28void*\29\29 +re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const,re2::RE2::ReverseProg\28\29\20const re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const,re2::Prog::SearchDFA\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20bool*\2c\20re2::SparseSetT*\29 re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const,re2::Prog::SearchOnePass\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29 re2::RE2::Match\28re2::StringPiece\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20re2::RE2::Anchor\2c\20re2::StringPiece*\2c\20int\29\20const,re2::Prog::SearchBitState\28re2::StringPiece\20const&\2c\20re2::StringPiece\20const&\2c\20re2::Prog::Anchor\2c\20re2::Prog::MatchKind\2c\20re2::StringPiece*\2c\20int\29 @@ -2183,14 +2263,12 @@ re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29,memcpy re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29,operator\20delete\28void*\29 re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29,opa_abort re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29,std::__1::vector\20>::__append\28unsigned\20long\29 -re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29,abort re2::TopEqual\28re2::Regexp*\2c\20re2::Regexp*\29,memcmp std::__1::vector\20>::__append\28unsigned\20long\29,memset std::__1::vector\20>::__append\28unsigned\20long\29,operator\20new\28unsigned\20long\29 std::__1::vector\20>::__append\28unsigned\20long\29,memcpy std::__1::vector\20>::__append\28unsigned\20long\29,operator\20delete\28void*\29 -std::__1::vector\20>::__append\28unsigned\20long\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const std::__1::vector\20>::__append\28unsigned\20long\29,abort re2::RegexpStatus::Text\28\29\20const,strlen re2::RegexpStatus::Text\28\29\20const,operator\20new\28unsigned\20long\29 @@ -2198,12 +2276,14 @@ re2::RegexpStatus::Text\28\29\20const,memcpy re2::RegexpStatus::Text\28\29\20const,std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\2c\20unsigned\20long\29 re2::RegexpStatus::Text\28\29\20const,operator\20delete\28void*\29 re2::RegexpStatus::Text\28\29\20const,std::__1::basic_string\2c\20std::__1::allocator\20>::append\28char\20const*\29 -re2::RegexpStatus::Text\28\29\20const,std::__1::__basic_string_common::__throw_length_error\28\29\20const +re2::RegexpStatus::Text\28\29\20const,abort re2::Regexp::NumCaptures\28\29,re2::Regexp::Walker::WalkInternal\28re2::Regexp*\2c\20int\2c\20bool\29 re2::Regexp::NumCaptures\28\29,re2::Regexp::Walker::~Walker\28\29 re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,std::__1::basic_string\2c\20std::__1::allocator\20>::resize\28unsigned\20long\2c\20char\29 -re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,re2::runetochar\28char*\2c\20int\20const*\29 -re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,std::__1::basic_string\2c\20std::__1::allocator\20>::__shrink_or_extend\28unsigned\20long\29 +re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,runetochar +re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,operator\20new\28unsigned\20long\29 +re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,memcpy +re2::ConvertRunesToBytes\28bool\2c\20int*\2c\20int\2c\20std::__1::basic_string\2c\20std::__1::allocator\20>*\29,operator\20delete\28void*\29 re2::Regexp::RequiredPrefix\28std::__1::basic_string\2c\20std::__1::allocator\20>*\2c\20bool*\2c\20re2::Regexp**\29,re2::Regexp::Incref\28\29 re2::Regexp::RequiredPrefix\28std::__1::basic_string\2c\20std::__1::allocator\20>*\2c\20bool*\2c\20re2::Regexp**\29,re2::Regexp::ConcatOrAlternate\28re2::RegexpOp\2c\20re2::Regexp**\2c\20int\2c\20re2::Regexp::ParseFlags\2c\20bool\29 re2::Regexp::RequiredPrefix\28std::__1::basic_string\2c\20std::__1::allocator\20>*\2c\20bool*\2c\20re2::Regexp**\29,operator\20new\28unsigned\20long\29 @@ -2221,7 +2301,6 @@ re2::CharClassBuilder::RemoveAbove\28int\29,void\20std::__1::__tree_balance_afte re2::CharClassBuilder::Negate\28\29,operator\20new\28unsigned\20long\29 re2::CharClassBuilder::Negate\28\29,memcpy re2::CharClassBuilder::Negate\28\29,operator\20delete\28void*\29 -re2::CharClassBuilder::Negate\28\29,std::__1::__vector_base_common::__throw_length_error\28\29\20const re2::CharClassBuilder::Negate\28\29,std::__1::__tree\20>::destroy\28std::__1::__tree_node*\29 re2::CharClassBuilder::Negate\28\29,void\20std::__1::__tree_balance_after_insert*>\28std::__1::__tree_node_base*\2c\20std::__1::__tree_node_base*\29 re2::CharClassBuilder::Negate\28\29,abort @@ -2243,14 +2322,13 @@ re2::CoalesceWalker::Copy\28re2::Regexp*\29,re2::Regexp::Incref\28\29 re2::CoalesceWalker::ShortVisit\28re2::Regexp*\2c\20re2::Regexp*\29,re2::Regexp::Incref\28\29 re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Incref\28\29 re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::CoalesceWalker::CanCoalesce\28re2::Regexp*\2c\20re2::Regexp*\29 +re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Decref\28\29 re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::CoalesceWalker::DoCoalesce\28re2::Regexp**\2c\20re2::Regexp**\29 re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,operator\20new\28unsigned\20long\29 re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 -re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,operator\20new\5b\5d\28unsigned\20long\29 -re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Decref\28\29 re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,opa_abort +re2::CoalesceWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,operator\20new\5b\5d\28unsigned\20long\29 re2::CoalesceWalker::CanCoalesce\28re2::Regexp*\2c\20re2::Regexp*\29,re2::Regexp::Equal\28re2::Regexp*\2c\20re2::Regexp*\29 -re2::CoalesceWalker::CanCoalesce\28re2::Regexp*\2c\20re2::Regexp*\29,opa_abort re2::CoalesceWalker::DoCoalesce\28re2::Regexp**\2c\20re2::Regexp**\29,re2::Regexp::Incref\28\29 re2::CoalesceWalker::DoCoalesce\28re2::Regexp**\2c\20re2::Regexp**\29,re2::Regexp::Repeat\28re2::Regexp*\2c\20re2::Regexp::ParseFlags\2c\20int\2c\20int\29 re2::CoalesceWalker::DoCoalesce\28re2::Regexp**\2c\20re2::Regexp**\29,opa_abort @@ -2263,12 +2341,16 @@ re2::SimplifyWalker::ShortVisit\28re2::Regexp*\2c\20re2::Regexp*\29,re2::Regexp: re2::SimplifyWalker::PreVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20bool*\29,re2::Regexp::Incref\28\29 re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Decref\28\29 re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Incref\28\29 +re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29 +re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29 re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,operator\20new\28unsigned\20long\29 re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,opa_abort -re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29 -re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29 re2::SimplifyWalker::PostVisit\28re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp*\2c\20re2::Regexp**\2c\20int\29,operator\20new\5b\5d\28unsigned\20long\29 +re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,opa_abort +re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,operator\20new\28unsigned\20long\29 +re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 +re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,re2::Regexp::Incref\28\29 re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::Regexp::Incref\28\29 re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::Regexp::Star\28re2::Regexp*\2c\20re2::Regexp::ParseFlags\29 re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::Regexp::Plus\28re2::Regexp*\2c\20re2::Regexp::ParseFlags\29 @@ -2279,10 +2361,6 @@ re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::R re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29,re2::Regexp::Quest\28re2::Regexp*\2c\20re2::Regexp::ParseFlags\29 re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29,operator\20new\5b\5d\28unsigned\20long\29 re2::SimplifyWalker::SimplifyRepeat\28re2::Regexp*\2c\20int\2c\20int\2c\20re2::Regexp::ParseFlags\29,abort -re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,opa_abort -re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,operator\20new\28unsigned\20long\29 -re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,re2::Regexp::Regexp\28re2::RegexpOp\2c\20re2::Regexp::ParseFlags\29 -re2::SimplifyWalker::SimplifyCharClass\28re2::Regexp*\29,re2::Regexp::Incref\28\29 re2::CoalesceWalker::~CoalesceWalker\28\29,re2::Regexp::Walker::~Walker\28\29 re2::CoalesceWalker::~CoalesceWalker\28\29,operator\20delete\28void*\29 re2::SimplifyWalker::~SimplifyWalker\28\29,re2::Regexp::Walker::~Walker\28\29 diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.go index 427e026a4..d6c9cd2cd 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.go @@ -11,26 +11,41 @@ import ( "bytes" "compress/gzip" "io/ioutil" + "sync" +) + +var ( + bytesOnce sync.Once + bs []byte + callGraphCSVOnce sync.Once + callGraphCSV []byte ) // Bytes returns the OPA-WASM bytecode. func Bytes() ([]byte, error) { - gr, err := gzip.NewReader(bytes.NewBuffer(gzipped)) - if err != nil { - return nil, err - } - return ioutil.ReadAll(gr) + var err error + bytesOnce.Do(func() { + gr, err := gzip.NewReader(bytes.NewBuffer(gzipped)) + if err != nil { + return + } + bs, err = ioutil.ReadAll(gr) + }) + return bs, err } // CallGraphCSV returns a CSV representation of the // OPA-WASM bytecode's call graph: 'caller,callee' func CallGraphCSV() ([]byte, error) { - cg, err := gzip.NewReader(bytes.NewBuffer(gzippedCallGraphCSV)) - if err != nil { - return nil, err - } - return ioutil.ReadAll(cg) + var err error + callGraphCSVOnce.Do(func() { + cg, err := gzip.NewReader(bytes.NewBuffer(gzippedCallGraphCSV)) + if err != nil { + return + } + callGraphCSV, err = ioutil.ReadAll(cg) + }) + return callGraphCSV, err } - -var gzipped = []byte("\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\xFF\xDC\xBD\x0B\x98\xA5\x57\x55\x20\xBA\x9F\xFF\xE3\xFC\xE7\x74\xFF\x81\x0E\xB6\x54\xAE\xEE\xF3\x9B\xEF\x9B\x8A\xA6\xC7\xCC\x8C\x76\x98\x00\x97\xDE\x35\x56\x57\x2A\x21\x06\x1F\x38\xF7\xFA\xE9\x25\x19\x8D\x03\x7F\x35\xD0\xD5\xA9\xB4\xF8\x4D\xD3\xA7\x3A\x09\x12\x84\x90\xA0\x80\xA0\xE3\x18\x79\x98\xC0\x04\x08\xC2\x40\xA2\x22\x11\x83\x44\x47\x05\x15\x10\x95\x47\x90\xB7\x02\x46\x09\x8A\xF2\xC8\xFD\xD6\x63\xEF\x7F\xFF\xE7\x9C\xAA\xAE\x22\x09\xE4\xDE\x56\x52\xE7\x7F\xED\xC7\x5A\x6B\xAF\xBD\xD6\xDA\xEB\x21\x2E\xBF\xF2\xE9\x52\x08\x21\xDF\x23\x17\x2E\xD3\x93\xC9\x44\x4E\x2E\x53\xE1\xBF\xE2\x32\x33\x99\xC0\x1F\x89\xFF\x93\x93\xCB\xEC\x84\x6E\x68\xFC\x6F\x3E\x99\xF0\x35\xBE\x27\x27\x97\x65\x74\x23\xBE\x29\x27\x97\x09\xF8\x9F\xB8\x4C\x4D\x4E\xCA\xC9\x65\xFA\x24\xDE\x93\x27\xB1\x83\x93\xE2\x32\x79\x42\x9E\xB8\xAC\x9A\x74\xFF\xE4\xE4\xB2\x02\xFE\x9E\xE8\x35\xD8\xF5\x05\x8D\x4C\xB0\x2D\xE8\x13\xFE\x96\x33\xDF\xD2\x6F\x75\x32\xD7\x57\x3C\xE3\x78\xF6\xF4\x2B\x9E\xFE\xCC\x63\x3F\xA3\x84\x82\xAB\xF2\x99\x47\x2F\x7F\xCA\xE5\xFF\xE5\x99\xC7\x36\x84\x81\xEB\x21\x5C\xFF\x97\xAB\x9E\x76\x64\xE3\x69\xCF\x38\x4F\xC8\xE9\x5B\xFF\x4E\x88\xE9\x5B\xFF\x5E\x94\xD3\xB7\xFE\x83\xA8\xA6\x6F\x7D\x8F\x18\xE8\x57\xDB\x57\xDA\xF4\x9F\xC4\x7F\x42\x4A\xFC\x25\x04\x5D\xCB\xA1\x52\xCA\x8E\xAC\x2D\xF1\xFF\xAD\xD5\xD2\x5A\x2B\x24\x3E\xDE\x03\xEF\x57\x70\x61\xED\xD0\x58\x23\xAD\x1A\x8D\x46\xCA\x8E\x86\x43\x13\x5A\xA5\x76\xAD\xA4\x1E\x42\xAB\x70\x2D\xAC\xB5\x7B\xB9\x1F\x11\x9F\xE1\xED\xF0\x4F\xC8\x52\x8A\x64\x74\xF4\xA1\x32\x32\x57\x56\xD6\xF0\x53\x59\x9B\x0F\xAD\x3C\xC3\xCA\xA1\x1D\x0E\xED\x19\x4A\x48\xA9\x6C\xAE\x32\x61\x95\x31\xCA\xCA\x5C\x29\xA1\xA4\xD0\x52\x28\x65\xA5\x35\x52\xC3\x0F\x6B\x1F\x51\x96\x5A\x3F\x72\xDF\x3E\x51\xCA\x91\x35\x30\x61\xF8\x67\xAB\x5C\xC8\x2C\xD7\x59\x39\xC8\xCA\xD2\x98\x52\xE8\x1C\xEE\x6B\x59\x96\x52\x96\x62\x28\xBA\xE1\x29\x23\x0C\xFC\x53\xB9\xCD\x73\x9D\xE7\xB9\xD4\x5A\x08\x29\x4A\x2D\x64\x55\x66\x2A\x3B\x33\xCB\xB4\xD6\x59\x96\x65\x67\x66\x67\x66\xF2\xCC\x6A\x90\xE1\x1D\xAD\x65\x55\x08\x01\x0D\xAB\xD2\x5A\x63\xCD\x08\x06\x90\x0B\x25\xA4\x12\x42\x56\x26\x1F\x88\x3C\x17\x8F\x7A\x94\xB4\xD6\xC0\xFB\x95\x3C\x53\x68\xA1\xB5\xC9\x75\xA6\x8B\x6F\x91\x32\x53\x72\xCF\x1E\x6B\xB2\x22\x57\xCA\x28\xA5\xD4\x7E\x5B\x96\x52\x0B\x7D\xA6\x50\x72\xFA\xDF\xB7\x4A\x18\xE5\xA3\x95\x52\x52\x59\x5B\x94\x66\xF0\xA8\x47\x95\xF0\x91\x12\x4A\x3C\xCA\x96\x0A\x10\x58\x96\x03\x51\x95\x80\x30\x80\x8E\x12\x39\x0E\xB4\xD4\x55\x59\x4A\x61\xA4\x29\x07\xD8\x4F\x9E\xE5\xD0\xA5\xB5\x46\xE6\xF0\xFF\xE6\x4C\x99\x17\x67\x6A\x93\x8B\x2A\x17\xB9\x11\xC6\x2A\x35\x78\x54\x69\x86\x66\x28\xAC\xB2\xC6\x28\x03\x28\x91\x95\x10\xA2\x14\x52\x49\xA9\x94\xD5\xA5\xB0\x42\x49\x65\xAC\x29\x05\x90\x95\x14\x03\xA9\xA4\x28\x07\xA5\x35\xA5\xB1\x66\x20\xB1\x33\xF8\xD0\x58\x79\x54\x5E\x74\x51\x56\xC8\x89\xF4\xB7\xDD\x9E\x57\xF9\xEB\xD5\xDE\x1A\x68\xF9\x8A\xE3\x97\x1F\x79\xCA\x4F\x6C\x3C\xEB\x29\xCF\xB8\xE2\xA7\xC5\x39\x03\xB8\xF5\xF4\xCB\x8F\x1C\x79\xE6\x4F\x88\x1F\x7A\x54\xEF\xF9\x95\x57\x6C\x3C\xE5\x69\xCF\x38\x7A\xD5\x86\xF8\xCE\x33\x67\x1E\xFC\xE4\xE5\x1B\x97\x8B\xEF\x5A\x98\xB9\x7F\xC5\x33\x36\x8E\xFD\xCC\xD1\x67\x3E\xED\x19\x1B\xE2\xDC\x6F\xE9\x3D\xFD\xAF\x57\x6C\x3C\xE5\xD8\x15\x57\x5E\x75\x64\x43\x1C\xD8\x03\x4F\xDA\x2B\x9F\xF9\x8C\xA7\x1C\xBD\xFC\xD8\x95\x57\x88\xA5\x51\xBC\xF1\x93\x57\x3D\xFD\xA8\xB8\x74\x2F\x5C\x1F\xBF\xFC\xC8\x55\x57\xF0\x1B\xFF\xA9\x80\x3B\x3F\x75\xEC\x8A\x2B\xC4\x0F\xEF\xE9\x1E\xE2\xDB\x4F\xC2\x79\x3D\xF5\x8A\xCB\x8F\x3E\xE5\xE8\xC6\x31\xE8\x48\xFC\x40\xFF\xD6\x95\x57\x6C\x88\x1F\x7C\x44\xF7\xD9\xE5\x3F\xF9\x93\x4F\x39\x7A\xF9\xC6\x53\xC5\x5F\xCA\x33\xBB\xBB\xC7\xAE\x78\xFA\x33\x8F\x5F\x41\x0F\xFE\x4A\x96\x2F\x91\x52\x78\x59\xAD\xDE\x26\x2F\xBC\xF8\x92\xBF\x95\x7F\x27\xAF\x55\xCF\x51\xD7\xEA\xFF\xA9\x5E\xA7\x9E\xA3\x6F\x55\xAF\x57\xD7\xAB\x1B\xD5\x0D\xEA\x85\xEA\x66\xFD\x1A\x7D\x87\xFE\x2D\xFD\x56\x7D\xBB\xBE\x45\xBF\x53\xFF\xBE\x7E\x97\xBE\x5B\xBF\x50\x7F\x5E\xFF\xBD\xBE\x57\xFF\xB5\xFE\x90\xFE\x88\xFE\xA8\xFE\x98\xFE\x84\xFE\x94\xFE\x8C\xFE\x45\xF3\x7A\xF3\xF3\xE6\x17\xCC\x1B\xCC\x8B\xCD\x6D\xE6\x8D\xE6\x37\xCC\x1F\x9A\xF7\x9B\x0F\x98\x8F\x98\x8F\x9A\x4F\x99\xE7\xDA\xEB\xEC\xF3\xEC\x0B\xEC\xCB\xED\x2F\xD9\x1B\xED\x0B\xED\x0D\xF6\x97\xED\x4B\xEC\x4B\xED\x2F\xD8\x17\xDB\x5F\xB1\xFF\xC3\xFE\xAA\x1D\xBC\xFA\xB5\x8F\x78\xA5\xFD\xAC\x54\x7A\x22\x4F\x7E\xC7\xE6\xE6\xE6\xA6\xF0\xF5\x5A\x23\xCF\xA6\x9F\x62\xAC\xD4\xA1\xEE\xFF\x9C\xA8\x5F\x7F\x0A\xEE\x9F\x68\xF7\x18\x21\x95\xB6\x15\xBC\xE2\xA4\x17\x07\xD5\x10\x9E\x2F\x2A\xD3\xE8\x91\x58\x12\x63\x33\x34\x15\xFC\xD1\x87\xE8\x7E\xE1\x94\xD3\x4E\xFA\x61\x5B\xDF\x82\x6D\x4C\x56\x46\xC2\x6F\x5E\xB7\xB9\x29\x6A\xEC\xAC\x72\x66\x49\x9E\x18\x1B\x27\x17\xD5\xD0\xA9\xB6\x51\xDC\xDC\xA5\x23\x33\x14\x55\xE5\xC4\xF7\xAA\xA2\xFE\x3D\xF8\x76\xAC\x86\x1A\xAF\x87\xF1\x5A\x4D\x5D\xCB\xCA\x99\x70\x51\x39\xE9\xEB\x96\xA6\xE4\x54\x75\x87\x96\x76\xB2\xCD\x5C\xE3\x2C\xFF\x5B\xBB\x47\xC3\x12\xA9\xEA\xB7\x5E\x0D\x0D\x69\x9A\x68\xE1\xB4\x17\xF5\x47\xB0\x35\xE9\x8B\xB6\x7E\x3F\x3C\x55\x87\x60\xE0\xC5\xF2\x48\xF8\x97\x25\x93\xE2\xC9\xC3\x6D\x31\x36\xDE\x8C\x55\x00\x88\x71\xAA\x5D\x54\xA1\x2F\x7D\x78\x24\x9C\xAE\xEF\xBA\x9A\x87\x32\x34\x95\xD3\xE9\x6B\x1F\x85\xE6\xEA\x4F\x6F\xD2\x40\x94\x2F\xDA\xB1\x72\xC6\xCB\xB6\x31\xD8\xC3\xEA\x08\x60\xA4\xEB\xBF\xD9\x0C\x00\xE8\x8F\x7A\xD8\x1B\xF5\xB0\x37\xEA\xE1\xEC\xA8\x79\xDC\x8D\xE5\x91\x77\xA3\x36\x5E\x6D\xC0\x88\x1A\xB5\x3C\x12\xFA\x90\x53\xC9\x24\x56\x46\xC6\x69\xBA\x33\x35\x5E\xC0\xA4\x1A\x89\x0A\x5B\x1D\xDB\x2A\x0C\xDD\xCE\x8E\x3B\x05\xC3\x43\x80\x3A\xF9\x4D\x42\xDD\xDF\x3E\x20\xD4\xC9\x6F\x38\xEA\xFE\xF6\xC1\x45\xDD\xBF\x48\x69\x26\x5E\x8C\xE5\x56\x98\x62\x60\x4B\xF8\xD6\x9B\xB1\x86\x77\x35\xBD\x2B\x97\x47\xC2\x49\x9A\x83\x46\x90\xDE\x46\x2C\xE4\xA2\x91\xAC\x92\xDB\x63\x18\x01\x80\x17\xA0\x2C\x99\x83\x00\x78\x87\xAA\xC2\xF7\x00\x5A\x04\x1C\x43\xC0\x51\xA1\x17\xC6\x57\x00\x90\x46\x00\xA5\x9D\xEB\xE9\x6E\x75\xE8\x90\x79\x1E\xC3\xC7\x54\xA1\x6F\x43\xF0\x91\x0F\xC9\xD4\xE5\x85\xDF\x94\xA9\x53\xB7\x3B\x9F\xFA\xAF\xF5\xA7\x3E\x35\x79\x10\x96\x68\x70\xF5\x9F\x23\xAB\x96\x34\x42\x45\xB0\xD0\xDD\xE8\x74\x18\x9D\x21\xCA\x95\xCE\xC0\xA0\x7E\x1B\xBE\x82\x9F\xA6\x31\x71\x18\x0A\x20\x21\xDB\x46\x3B\x15\xE7\x5F\xFF\x01\xB5\x0F\x44\x79\x0A\xC9\xFB\x03\xA7\x70\xCF\x91\xD5\xCF\xA9\xA9\x21\x4E\x0F\xD2\x08\x53\xF1\xB8\x46\xD2\xCB\xB1\x1E\xAA\xC0\x1B\x46\x82\xAF\x71\x94\x63\x03\x83\xF6\x66\x8C\x88\xD4\x87\x9C\x71\x32\xE1\x13\x6A\x65\xC4\x5B\x1A\xDF\x3F\x20\xE4\xF2\x48\x21\x23\x1A\xCB\x29\xB4\x55\xD8\xB0\xAC\xB6\x58\xC0\x12\xC1\xE0\x91\x45\xF4\x7A\xA0\x6B\x6C\x19\x7F\x9A\x46\x26\x80\x81\x46\xC3\xF2\x55\x61\xF9\xFE\x6E\x04\x4D\xF5\x71\x29\xF5\xEE\xF8\x6B\x8F\x49\xEA\xAD\x99\xA4\x5A\x21\xF2\xE3\xBB\x38\x40\xE1\x25\x77\x8E\x3C\x93\x19\x23\xE3\x2E\x32\x46\x2F\xE2\x4B\x92\xBB\x1B\x42\x6F\xC9\x5D\x27\xFD\xD5\xEA\xB1\x72\x8F\x03\xFE\xB8\xA7\xAD\x7F\x03\xBB\x14\x2B\xE1\x95\x29\x56\xF4\x5C\x29\xD5\xEC\x2C\x79\x7E\xC8\xFC\x1A\x81\xF3\x11\x1D\x2B\x0E\x42\x8E\x53\xAE\xB7\x8B\x7E\x0A\x9E\x3A\x41\x6C\x2F\x61\xC9\xB7\xA4\x82\x8D\x62\x16\x29\x7A\x03\x11\x0F\xEA\x40\xFE\x65\x8B\x81\xFC\xC1\x4E\x06\xF2\xDF\xE6\xA1\x7D\xCE\x38\xD2\xBD\x29\x91\xFC\x60\xBB\x4B\xC7\xF2\xD5\x74\x2C\x38\x12\xDC\x21\x79\x9F\x98\xC2\xC6\x83\xDC\xF7\x57\x76\xD3\xF7\x3B\xFA\x08\x50\x01\x20\xD4\xF1\x58\x38\xC9\xBF\x22\xEB\x46\x8E\x88\xAC\xB7\xBE\x87\x3A\xA5\xBF\x7D\x24\x01\x13\x0E\x83\x73\x61\xEB\x56\x30\xBC\xBF\xED\x0F\x8F\xFF\x2A\xD8\x65\x87\xFE\xED\x4F\x59\x6F\x82\x24\x0D\xB8\xFB\x4C\x8A\x3B\xDD\xE1\x4E\xA5\xB8\xBB\xBB\xBF\x66\xA7\xE7\xA0\xE3\x1C\x0C\xCE\x00\xD8\xBB\x03\x2E\xCA\x43\x15\x61\xA8\xC2\x69\x67\xD2\xA1\x7E\x16\x87\xC6\x3B\xBA\x33\xB3\x43\xD5\x34\x54\x68\xD1\x5F\xF7\xBC\x64\xA8\x82\x87\xAA\x49\x24\x20\x40\x19\xFE\x0B\xB3\xFE\x2A\x3D\xEE\xCD\x44\x7F\x13\xB0\xF1\x4F\xBB\xC1\xC6\x2D\xCF\xDB\x01\x36\xDE\xBD\x3D\x36\x76\x37\x07\xDD\xCD\x01\xB7\x96\x30\x0F\x83\xF3\xF8\x70\x37\x8F\xCF\xCD\x9F\xC7\xA2\x1A\x36\xC2\x9B\xF5\x11\xCC\x49\xCC\x4C\xE8\x7F\xA7\x13\x32\x01\x67\x53\x48\x79\xFB\xD7\x37\x21\x94\x36\xEA\x3F\x86\x71\xE0\x35\xFD\xFC\x7A\xA6\x99\xA0\xEB\x4B\x5B\x4E\x13\x68\x7A\x8B\x09\xFC\x2F\x98\x00\x6D\x61\x71\xFB\xB2\x2B\x38\xA6\xF4\x02\x34\x54\xD8\x73\x5A\x16\x45\xD4\xCC\xCE\x66\x40\x62\xE6\x7D\xB8\x4D\xA4\x0F\xD8\xB6\xCC\xCC\xB6\x15\x55\x0A\x31\x16\xF1\x63\xB9\xC5\xC7\x02\x3E\xA6\x41\xD0\xC7\xAA\x7A\xB3\x52\x6A\xA2\x12\x9D\x5C\xC7\xCD\xD8\x6C\x35\x13\x0D\x17\x2A\xB9\x80\x97\x41\x80\x03\x55\xE7\x4D\x70\x17\x29\x41\x87\xDF\xC4\x10\xCE\xD1\xA2\xB1\x4B\x93\x27\xA3\xDA\x6E\x9D\x5E\x12\xE7\x6B\x58\x3D\xCE\xA2\xCA\xDD\x64\xFF\x19\x38\xA8\xCB\xCE\xD7\xC2\x65\x63\x5B\x85\xAF\x8A\x26\x0B\x5F\x65\xF4\x55\x01\x5F\x65\xCE\xD2\x07\xF6\x7C\x5D\x38\x3B\xCE\xA0\xA1\xEC\xD9\x37\x33\x5C\x0D\x76\x18\xBE\x77\x3F\xBB\xE4\x9E\xDB\xE0\x07\xD9\xCD\x5E\x6F\x78\x73\x0C\x84\x52\x67\x08\xCE\x32\x01\x15\x8B\x49\xF8\xB5\x5D\x92\x27\x1A\xFB\x64\x12\x60\x3A\x64\x9B\xEA\x4B\x80\xEC\xAD\x88\x73\xF7\xA4\xB9\x17\xEE\xBD\x23\xEC\xBB\xFC\x4B\xC7\x7B\x80\x08\xE5\x00\xD0\xEA\x10\xF2\x54\x27\xEA\x4F\xA2\x74\xF9\x19\x6E\x27\xB9\xAA\xFF\x0E\xFF\xFB\x29\xFC\xEF\xDF\xE3\x7F\x91\x60\xA1\x0F\x27\xEB\xCF\x4D\xDF\x71\x66\xA1\xDF\x98\x13\x70\xEB\xB3\xF3\x5B\xA9\x3E\xFB\x30\x9E\xF9\xE7\xB6\x9D\xF9\xDF\xF5\xEE\xD0\x34\xE7\x00\x80\x67\x4E\xB3\x5D\x97\x92\x65\xF6\x4E\x4A\xE8\xCF\x0E\x9F\xBC\x23\x4C\x35\x8C\xEE\xE3\xE1\x55\xE9\x44\xFD\x89\xA4\xF1\x38\xA0\xD9\x61\x92\x68\xFC\x70\x86\xEF\xE7\x67\x60\xFA\xF9\x1D\xC2\xF4\xF3\x5B\x50\xD3\x5F\x48\x29\x67\xB9\x7E\x2A\x95\x05\x50\x32\x87\xE3\x09\x92\x88\xDE\xE3\x47\x12\x05\xFB\x8E\xFD\x9C\xA3\x8B\xA5\xC9\x7F\x8E\xF2\x87\x24\x6E\x6F\x70\x90\x6A\x51\x15\x91\xE1\x9B\xB6\xFE\xC4\x94\x50\xAB\x16\x15\x6A\xAF\x9F\x4D\x77\x2E\xC9\x88\xE4\x0D\x79\x88\xE0\x0E\x66\x88\xE9\xFD\xF9\xA5\x6A\x9E\x8C\x01\x1C\x7E\x5B\x52\x92\xA9\xAD\x87\x5B\xC7\xB9\xC2\xB3\x79\x13\x7C\xF2\xA8\x37\x0C\xCD\xBA\x4B\xA4\x48\xBC\x48\x31\x41\xE0\xD4\xB4\xDB\x80\x46\xA9\x09\x1A\xEF\x85\x0F\x1E\xED\x34\x4F\x72\x96\x3A\x63\xD3\xFD\x16\xE4\x56\x2D\xCC\xDF\x25\x7F\x51\x75\xDB\xFC\x7B\xC4\x2C\x60\x68\xFA\x26\xDD\x6D\x0C\x6D\x30\xB4\xE7\x05\x23\xC2\x62\x5B\xDF\xB4\xD9\x81\x0D\x9E\xE0\xA6\xA7\xEA\x5F\xDB\x24\xF8\xA4\xF7\xF8\x55\x06\xA4\x3A\x20\x16\x1B\x09\x7F\x04\x11\xBE\x44\xFD\xDA\x00\x34\xA0\x65\x7F\x46\x8B\xE2\xEA\x19\xED\x58\xEB\x43\x4E\x1F\x10\xC2\x4F\xAE\x74\xE2\x80\x10\x8D\x59\x87\x25\xED\x8F\xB6\x07\x84\x70\x9A\xFF\x9A\xF5\x15\xD4\xD8\x69\x83\x1D\x0B\xDC\xA4\xD1\xAA\x36\x69\x41\x85\x56\x43\xD4\x2F\xC7\x06\xC4\x1F\xD2\x15\x11\x2E\xEF\x11\x1D\x60\x7E\x5B\x29\xD3\xB3\x8D\xEB\x64\x2D\x48\xDA\x62\x49\x4F\xB7\xEA\x90\x3E\xE4\x84\xB3\x6D\x93\xC1\xD0\xBE\xFB\xF0\x48\x3A\xE9\x2C\xEC\xED\xB0\x4D\x57\xDD\xAB\x20\xD9\xD8\x00\x13\x36\xD3\xB9\xCC\xCB\xD6\x59\x98\x91\x6C\x69\xCB\xBE\x8E\xCC\x4D\x68\x5F\x84\xFD\x32\x5F\x12\x3F\x34\x12\x2E\x47\x10\x35\xD9\xEB\x96\xF4\xCF\x3E\x19\x01\x95\x31\xA0\x64\x45\xE0\xB1\x2E\xC3\x6D\xD4\xFA\x89\xDF\x3C\xE9\xF2\x9B\xAF\x72\xF9\x52\xFE\xE4\x46\x2C\x5C\x20\x84\xCB\x97\x9E\x75\x62\x49\x38\xB1\x30\xCE\x71\x74\x63\xCB\x10\x19\xA1\xD1\x73\xA6\x31\x6C\xE8\x68\xDB\x48\x27\x01\xAA\xF6\x80\x10\xEB\x17\x08\x7C\x29\x7C\x9F\xC1\xF7\xD9\xEC\x7E\xFC\x96\x52\x56\x81\xAC\xDC\x14\xEC\xBC\xBC\xB0\x33\x50\x12\x6B\x71\x06\xF0\xE6\x7F\xB0\xDD\x33\x12\xAA\xFB\x27\x91\x00\x26\x07\xC5\x19\xC0\x16\xA0\x6B\x14\x54\xBC\x80\xD9\xE8\x71\xE6\xC5\x38\xF7\x62\x5C\x10\x02\x00\x36\xE5\xF2\x08\x19\xB3\xFF\x32\x70\x0A\x57\xFA\xFD\x1B\x7E\xFF\x55\xBE\xAA\x7F\x1E\x16\x43\x33\x08\x30\xB7\xFE\x7E\xB9\xDE\x94\xCB\x2E\xF7\x62\x65\x7D\x54\xB8\x01\x7D\xB1\xE6\x4A\x3F\x38\xD2\x36\xF0\xFC\xE2\x51\x01\x42\xCD\x05\x02\x20\x9D\xA3\xD9\x62\x9C\x03\x4D\x16\x5E\x5F\x34\x2A\xE0\xCA\x15\x00\x86\x22\x20\xB7\xF0\xE6\xF0\x28\x87\x77\x73\x57\xFA\x7F\xBB\x32\xCA\x71\xC0\x19\x0C\x58\x22\x9E\x69\xCC\x55\xA0\xCB\x08\xFE\xF8\xFD\x85\x23\x03\x1B\xC0\xA2\x12\x07\x05\x92\x30\x5A\x48\x96\x26\xE7\x23\x0C\x6A\x98\xB8\xF2\xDF\xDA\xC2\x0D\xC1\xC2\x17\x4B\x6E\x44\x5E\x00\x84\x7C\x79\xA4\x9D\x18\x03\x4E\x73\x7F\x01\x1A\x60\x0E\x08\x09\xBF\x0C\x40\xFF\xF0\x88\xD7\x45\x45\x76\xBB\x31\xE8\x80\x30\x0D\x44\xE1\x78\xE4\x2A\x1C\x1C\xC1\x9A\xCC\x85\x5E\x8C\x33\x00\xB2\xBF\xF1\xE7\xA2\x46\xA9\xF8\xCA\xE5\x04\xE4\x66\xE0\xCF\x60\x30\x97\x23\xE1\x6F\xA3\x37\xE9\xAF\x4B\x9E\xC1\xB2\x77\x12\x40\x98\xB9\xD2\x99\x35\x97\x79\xB3\x71\x6C\x9C\xC1\xD0\x40\x26\xB6\xE3\x92\xE1\x89\xE3\x07\x3C\xE5\xFE\x02\x58\x0B\x39\x82\x14\x77\x88\x46\xB8\xD1\xC5\xA3\x9C\x68\xE1\x2C\x57\xB9\xE2\xF0\x28\x73\xDA\x9F\xD5\x8E\x4B\xA6\x0A\x50\x29\x06\x48\x19\x15\x00\x45\xF6\x29\x43\x4E\x51\x46\xB6\x8C\x1D\x40\x6F\x72\xD9\x19\xA4\x8A\x81\xCB\x02\x55\x48\xA4\x8A\x1C\xA9\x62\xE0\x4A\x97\x13\x55\x98\xE5\x8E\x53\x0D\x60\x4A\x03\x5C\x1C\x03\x98\xC9\x00\x16\xD2\x00\x28\xA2\x84\xF7\x4A\x27\x61\xF8\x38\x3A\x57\x12\x45\x94\xF0\x5E\x49\x8C\xA8\x40\xB0\x37\xD5\x0A\x2E\xA6\x81\xD7\x4F\x1C\x65\x44\x09\x67\x1D\x14\x62\xA8\xAB\x8E\xED\x38\x35\x2E\x01\xBF\xCE\x2E\x8F\xE4\x30\x07\x2C\x2A\x58\xA5\xA3\x8B\x47\x19\x52\x00\x4C\x63\x19\x3F\xCF\xFC\xFE\x0D\x97\xF9\x62\xC3\x6F\x6E\x7E\x25\x5F\x3F\xE6\xEB\xE3\x8F\x15\xBC\x04\xB8\x11\x89\x28\xCE\xA0\xFD\xC2\x89\xC3\x44\x2D\x30\x48\xA6\xD1\x72\x6C\x9D\x19\x4B\x97\x8F\x64\x05\x2F\x99\x11\xDD\x53\xB8\xE5\xD2\x78\xA0\x7F\xC4\x88\xD9\xB2\x4F\xF8\x86\xD8\xBD\xC5\x5D\xD6\x8D\x90\x0E\x9D\x5D\x6B\xC8\xBC\x0C\x4C\xAB\x1D\x03\x4A\xF7\x1E\x43\xB5\xC9\xB8\xDC\x89\xB6\x01\xDE\x03\x64\x2F\x69\xD9\x1B\x78\x0B\x08\x78\xD2\x82\x10\x32\x54\x55\x60\xAC\xA3\x95\x91\xA9\xDC\x10\x35\x05\x58\x1D\x43\x5F\xB4\xC8\x3F\xCF\x27\x9E\x35\xD4\x20\x11\x91\x15\x74\x65\x14\x77\x00\xED\x5D\xC7\xB7\x3E\xAA\xA4\x79\x90\xB7\xC3\x79\x1B\x9F\xE8\xF6\x3D\x93\xEC\x7B\x06\xA9\x49\xCE\xDB\xF7\x9C\xE1\x7D\xA6\xB7\xFB\xC9\x79\xBB\x9F\xE4\xDD\x4F\x4E\xED\x7E\x00\xDF\xC6\x2E\x8F\x34\x9E\xAA\xAA\xD0\x3A\xF5\x33\xB3\xB1\xEE\xAA\x69\x40\x4A\x63\xBA\x8D\x15\x56\xF8\x56\x1B\xEB\x23\xC9\x14\x84\xE7\x0A\xCB\xF4\x52\x75\x66\x72\x2F\xDA\x6F\xA7\xEE\x5E\xC4\x77\xF7\xA7\x77\x27\x57\xFA\x6F\x3F\x3E\xEF\xF5\xF9\x77\xE5\x85\x7C\xF7\xDB\x41\x8F\xA8\xEB\x3F\x27\xB1\x6F\x49\x9C\xAF\x84\x13\xBE\x68\xF9\x57\x55\xE2\x57\x07\x55\xF7\xCB\xC4\x5F\xC3\x2A\xA7\x13\x95\xEA\x12\xE1\x27\x5E\xD4\x78\xB0\xF0\x68\xF8\xE9\x45\x7D\x75\x72\xE1\x45\x7D\x4D\xEF\xD2\x8B\xFA\xDA\xA9\x1B\x5E\xD4\xCF\xC1\x5B\xD5\xCB\xB6\xB4\x0A\x4F\x19\xE1\x27\x78\x0A\x6F\x94\xAE\x96\x04\x9F\x75\x0B\x3C\x18\xFF\x77\x42\xC6\x6B\x55\xF9\xCE\x98\xC1\x5A\x35\xC8\x16\xCF\x63\x71\x35\xDE\xAE\xDF\x11\x8C\xE5\x71\x45\x4F\x9B\x89\x9F\x31\x6F\x60\x53\xA6\x15\x43\x24\x9C\xF6\x36\x6C\xFD\x7B\x80\xFB\xD7\x6F\x4C\xA5\xEB\x17\x5E\x4D\xB6\xC2\xAD\xED\xF4\x1F\xD1\xB2\x08\xFD\xDD\xA8\xD6\x1A\x13\x96\xA7\xAF\x5B\xBF\x29\xFD\xA6\xAA\x5F\x8A\xB2\x2D\x6C\x51\xC0\x28\x7C\xDD\x3A\xED\x2C\x90\x68\x8B\x1B\x36\x0B\x5F\xFE\x4E\xC1\xF2\x97\x05\x96\x7E\x81\xB8\x84\x0F\xB7\x3C\xD9\x92\xE1\x63\x4D\x9F\x0B\xFE\x1C\x96\xC0\xA6\x5C\x41\x69\xB1\x2F\xC2\x59\x32\x78\x0A\xA7\xD7\xBC\x5E\x6F\x32\xA7\x5B\xAF\x8E\x7B\x7D\xA4\xBE\x1E\x77\x90\x1C\x77\x10\x10\x46\x5C\xE6\x64\x0B\x1B\x1D\xF4\x33\x80\x7B\xC0\x60\xA9\x3F\xFF\x78\xE4\x24\xD6\xC9\x4B\x91\x0B\x62\xAF\x63\x4D\x9C\x91\x26\x82\x9B\x90\x86\xFB\x4D\xE5\x37\x25\x70\x64\xE3\x87\xAD\xCB\x5A\x57\xC1\xDC\x06\x4E\xFB\xC7\x1F\x6E\xC7\x03\x94\x28\x9A\x8C\xD8\x51\xE1\xCC\x01\x31\x6A\xB4\x37\xC7\xE1\xD7\xD0\xAB\x8D\x63\xF0\x36\xDE\xDF\xD3\x64\x5E\x1D\x77\x1A\x76\x5A\xD8\x78\x0A\x97\xF9\x6C\x03\x9E\xEC\x3D\x76\x81\x50\x6E\x30\x92\x20\xD5\x80\x0C\x30\x18\x67\x95\x2B\xE3\xD4\x81\x19\x55\x4C\x7F\x03\xA0\x3C\x25\x95\xA8\x5C\x4E\x68\x84\x39\x01\xE5\x15\x5E\x91\x18\xC4\x02\x51\xE5\x94\x2B\x5C\xBE\x76\x50\x01\x48\xF0\xE8\xF8\x46\x15\x10\x6C\xAB\xA7\x3F\x38\xF4\x14\x8F\x07\x1C\x19\xFC\xEB\x3F\x9D\x4B\x4E\x0F\xB4\xB7\x37\xEF\xAA\xB7\xE7\x6A\x3A\x56\x34\x28\xEA\x7E\xED\xFE\xFB\xEF\xD7\x17\xC3\x26\xE0\xD5\x86\xD7\xCF\xF0\xB6\x6D\xAC\x93\xAB\x23\xE1\x2C\xD3\x4D\x16\xB6\x03\xE9\xF5\xF7\x8F\x84\xCB\x48\x04\xCF\x78\x0F\xD4\xC4\x8E\xAD\x57\xC7\x5B\xDE\x09\x8D\xD7\x40\xEF\xC2\x2B\x24\x92\xDC\x3F\x61\xBD\x7B\x24\x71\x29\x78\xB3\x81\x2C\x9A\x3E\xDD\xBF\xE1\xCF\x3A\x7E\xAC\xF7\x9A\xA2\xD7\xD4\x06\x89\x6F\xDF\x36\xF5\xD8\xD0\x1E\xAB\x49\x48\x7D\x76\xDB\x48\xAF\x2E\x82\x3D\x33\x9C\x0E\xCF\x1B\x58\x10\xEF\x57\xF8\x39\x8C\xC2\x9F\xC7\xAD\x4A\xFF\x78\xD2\xD1\x4D\x1C\xDF\x01\x21\x1B\x31\x3D\x38\x49\x33\xDB\xF0\x8F\xC3\x1B\xC0\x8B\x8C\x7F\xFC\x05\x42\x3B\xE3\x04\xD0\x2A\x0D\xAE\xA2\x05\x8D\xC6\x81\x65\xB4\x6E\x1A\x97\x01\xBD\x21\xE4\x2A\x67\x1E\x00\xDA\x6F\x7A\xFE\x37\x92\xC8\xA8\xB7\xDD\x11\xD9\xB9\xA9\x19\x2C\x91\x49\x12\xA6\xDE\x59\xB0\xCE\x26\xA3\xC3\xBB\xBB\x1E\xD0\x58\x24\xEA\x5F\x04\xFA\xA3\x1E\xAA\xDF\x4C\x0C\x3F\xF7\x8A\x8E\xE7\xCA\x5B\x9D\xF1\x77\x8A\xD6\x0F\xEA\xE7\x9E\x42\x7B\x82\xBA\x95\x18\x71\xBC\x21\xEA\xAB\xD9\xA6\x7D\xA7\x68\xE9\x77\x8B\xAF\x84\xDF\x9A\x7F\x00\xF1\x4B\xDA\x73\xC7\x80\x2F\xCD\xC6\x7E\xE0\x12\x06\xBF\x38\xA8\x0A\xFC\x75\xA7\x68\x0F\x82\xBC\xE4\xA4\xFF\xE8\xF3\xE9\x10\xE9\x6A\xB2\x66\xA8\x3A\xEC\x05\xF7\x06\x99\xA2\x7A\xA5\x95\xC5\x24\x01\x45\x76\x78\x24\xEA\xF7\x9D\x42\x1B\x58\xFD\x67\xD1\xAA\x2F\x79\xA1\x25\x66\x9D\xCE\x19\x01\x84\xB4\x46\x2F\x8F\x54\x3C\x78\x97\xBD\x83\x77\xCB\x9E\x33\xCE\x76\x96\x69\xBB\xA8\x4C\x63\x47\x82\xBE\x06\x49\x87\x8F\xD8\x75\xF0\x3F\x08\xF7\x75\xE7\x4C\x64\xBB\x03\x01\x9B\x58\xB9\xAD\x2F\x5A\xDC\xA5\xB0\x81\x78\x20\x40\xD3\x40\x44\xAB\x78\xAE\x90\xD1\x51\x3B\x5A\xC5\x5C\xE6\x35\x8C\xD0\x34\x79\xFD\x66\x78\x17\x3D\x25\xA2\xC8\x60\xD2\x73\x7B\x2D\x71\x88\x05\xB0\x79\x03\x23\x2B\x71\x3D\xC2\xCC\x41\x2B\xE3\x47\xC9\x16\x89\xFD\x98\x9E\x1F\x86\x65\x2F\x11\xD8\x1D\x61\xF4\xBF\x11\x4F\x17\x3A\xC0\x54\x09\x64\x8A\x45\x25\xC6\x65\xF4\xCC\x28\x57\xA3\xC8\xBE\x75\xEB\x5B\x41\x79\x4E\x5B\x55\xE5\x4A\x36\x39\x75\x07\x36\x96\x07\x68\x22\x90\x9B\x32\x19\x68\x19\x47\x49\x30\xE7\xE6\xA0\xF5\x64\x74\x11\x55\x66\x0B\x54\xF1\x67\xA6\x3B\xF8\x71\x79\xFD\x2E\x6A\x99\x36\x66\x44\x59\xF0\x88\x79\x9D\x91\xD9\xC4\xE1\x12\xAD\x1B\x79\x50\x15\x44\x88\xC0\x42\x95\x3F\x80\x8B\x17\x35\x60\x78\x56\x93\x83\x07\xBC\x2B\xD6\x70\x3D\x5F\x3A\x22\x23\xCC\x58\xB1\xC9\x0C\x84\x04\x7F\xDE\xD4\x67\x64\x11\x54\xA4\xDA\xD6\xD7\xD2\x8C\x69\xB9\x63\xAF\xBD\x06\xD1\x9D\xE6\x5C\x21\xE8\xBD\x31\x9E\x70\xD5\x63\x09\xEC\x54\xA6\x8D\xF6\xC6\xB1\x4A\x7B\x00\x82\x57\xA0\x5F\x0E\xDD\x6F\x2C\x6C\x69\x32\xF8\x6A\xF0\xB4\xFE\xED\xD4\xF8\x08\x2B\x6B\x8D\x72\x76\xCB\xFE\x61\x02\xC1\xF5\x09\x9A\xA7\x07\x66\x6C\xD1\xDB\x66\x66\x58\x0D\x36\x17\x87\x80\x1B\x94\x72\x71\x34\xC0\x38\x03\xD8\x9C\xF2\xEE\x18\xC2\xED\x13\xA8\xE6\xCA\xC8\x68\xD1\x03\x27\x80\x5D\xC1\x08\x33\x18\xA1\x0C\x5A\x9A\xF0\x4F\x86\xF5\x23\x05\xBF\xAE\xE8\xF5\xE4\x55\x85\xE7\x5F\x34\x29\xD5\x4D\x4A\xD2\xA4\x14\x50\x27\xDA\xB9\x43\x4F\x74\xA0\x98\x02\x15\x9E\x1E\x54\x43\x6F\x91\x5F\x54\x6F\xD0\xD2\x4E\x82\x4F\x5F\x8D\x4A\xB0\x6F\xFA\xE0\x2C\x48\x1D\x89\x90\x50\x6B\xD1\x71\x36\x31\xAF\x11\x2E\xAC\xFF\x20\xCE\xD9\xFA\x06\xD4\x6E\xEB\xDD\xEA\x48\xF7\x28\x4E\x3A\xB8\xFD\x35\x71\xF1\x02\xC9\x1F\xFC\xCC\x42\x07\xD6\xA9\x35\xA7\x2F\x1D\x05\x6F\x20\x0B\xA3\xF9\x7F\xDA\x3D\x3F\x9C\xC6\x0B\xF4\x82\x07\x4E\xFB\x4F\xC4\xFF\x8A\xE4\x8E\xB0\x42\xDA\x08\x63\x26\xE9\xF4\xD2\x69\x27\xD7\x9C\x6A\xBD\xB9\x70\xA4\x89\x7C\x7E\x16\x15\xC9\x11\xEA\xDF\xF5\xB9\x42\x4E\xDF\x50\xD3\x37\x74\x72\x03\x6F\x79\xC3\x8D\x23\xA1\xE1\x6B\x82\x9C\xA6\x0C\xAC\x6A\x98\x3B\x7B\x24\xD1\x29\x0B\x79\x4D\x00\x78\x00\x70\xB9\xCF\x9C\x59\xA8\xAE\xB3\x20\xF7\x49\xDA\x93\x01\x65\x84\xE1\x46\x33\x56\x68\xC5\xA9\x2D\xFE\x0F\x89\xA6\x91\x00\xD4\x1F\x33\x55\xF8\x57\x56\xE9\xBF\x41\x75\x9A\x7F\x79\x55\x84\x9F\x8A\xFF\x0A\xF8\x8F\x96\x74\x61\xAB\x8C\xB4\x73\x67\x70\x52\x08\xC5\xA1\xFF\xC2\xF3\xF9\xDC\xA5\xBE\x06\x39\xC6\xB0\x03\x0B\xCC\x4F\xED\x9D\xF9\xA6\xF2\x5F\x9A\xFA\xA6\xEA\x7F\xA3\xA7\xBE\xB1\x17\x8E\x06\xFE\xAB\xFC\x8D\xE5\x6F\x06\xE1\x1B\x8B\xDF\x18\xFE\x46\x2C\xAA\x7D\xCB\xA3\x32\xED\xAF\xF4\x9F\x9F\xEA\xAF\x0C\x9C\x54\x51\x8F\x04\x41\x53\x3F\x87\x30\x2B\xD0\x20\xCF\x2F\x20\x9A\xE0\xB1\xA4\xC7\xB4\xDA\xF0\x19\xD0\xF1\x39\x2B\xD8\x1A\xBF\xE7\xF7\xE0\x09\xDD\x6F\xC7\x33\xB5\x70\xBF\xE8\x5D\x95\xBD\xAB\x41\xEF\xAA\xEA\x5D\x0D\x7B\x57\xA3\xBD\x95\x93\x81\xE3\xB1\xBC\x7C\x00\x16\xA6\x5A\xA6\x83\xA3\xDF\xA2\x8E\x51\x46\x79\x4E\xC7\xC0\xC9\xE6\x42\xE0\xEA\xB3\x90\x8E\xC0\xC2\x4E\xF3\x3B\x59\xCF\x59\x3A\xB5\xBD\x0B\x9F\x91\xAB\x00\x09\x61\x78\xDA\x88\xE6\x78\x67\xC6\xC2\x29\xDC\xF1\x84\xEB\x2C\x6E\xB2\xED\x4C\x3D\x64\x3E\xC2\x3E\x8C\x53\x2C\x98\x4A\x3E\x0C\x63\x31\x1C\xF4\x41\x2F\xC6\x41\x42\x20\x75\xFA\x83\xE1\x54\x07\xE0\x50\xFF\x3A\x09\x29\x18\x06\xD0\x35\x2D\xDB\xB1\xC5\xA5\xEE\x6D\x3B\x46\x53\x58\xFD\x6A\xDE\xB0\x2D\xE8\x96\xF8\xD0\x82\xE4\x6F\xAB\xE0\x35\x81\x8E\x8C\xC0\xEC\xD7\x78\x3A\x19\x4D\x46\xBA\xAC\x1B\x05\x8F\xA3\xC9\xF1\xB0\x88\xB8\x60\x27\x1D\x01\x1B\x04\x59\xB2\x59\x19\xC9\xCA\x5F\xF3\x82\x78\xBA\x88\x82\x11\x9B\x88\x05\xFA\xBE\x5A\x67\x00\x26\xFD\x11\xE3\xB6\x82\xF3\x72\x3A\x46\x38\xF0\xE4\xFC\xAF\xBE\x20\xF5\x1B\x5A\x04\xA6\x81\x9F\x02\xA3\xAD\x5F\x83\x12\x31\xCE\x6B\x0E\x37\xC8\xBD\x6C\xCF\xC5\x01\x23\x97\xCD\x93\x7F\xBD\x8B\xD3\xFD\xA3\x97\x65\x9E\xE7\x8A\xEF\xE8\x3C\xCF\x4D\x6E\xB3\x3C\xCC\x68\x98\xA3\x20\x04\xBF\x32\xF8\x35\x84\x5F\x16\x7E\x0D\xE0\x97\x81\x5F\xA3\x0B\xD0\x02\xED\xAC\x2F\xE1\x57\x37\xEB\x1E\x36\xFD\xEB\xD2\x09\x0B\x9F\xB5\xE3\x9C\x85\xD0\x80\xCB\x7C\x1C\x4E\x8A\x5D\x1E\xBF\xCE\xE7\x7E\x3D\x04\x58\x19\x97\xD7\x37\x93\xFB\x48\x35\x0D\x38\x55\xA5\x9F\x10\xF1\xA8\x0E\x37\xB8\xEA\x2E\x1C\xC1\xB8\xAB\x48\xF0\x59\x85\x9E\x2C\xB0\x57\xBB\x6C\x2D\xD0\x70\xEF\xEC\x4A\x56\x3F\xA7\xA3\xE3\xD0\x0C\x62\xA4\x3F\xD9\xEE\x19\x09\xA9\xB4\x31\x59\x61\x8B\xA2\xC8\x8B\xAA\xFE\x23\xD2\x35\x82\x5B\xEB\xDE\xE8\xBB\x4A\x92\xD7\x90\xBC\x88\xC5\x5A\xA3\x83\xF6\xA3\x0E\x81\xFC\x08\x0B\x4F\x8D\xA5\xD3\xA8\xEB\x4B\x54\xA8\x13\x22\xE3\xF5\x47\xC6\x55\x72\x0F\x72\xBA\xFE\x93\x53\xF1\x70\x1F\xBD\xBA\xA9\x07\xB3\x56\xFF\xCE\x26\x8F\x62\x2C\x83\xD6\xA3\x83\xE1\xF0\x6D\x9B\x84\xA7\xAB\xDA\x3D\xCA\x0A\x3C\x80\x91\xEB\x63\x8D\x6C\x45\xD3\x41\xAC\x03\x2D\xEB\xED\xF8\x9E\x64\xA9\x51\x39\x49\x32\x2F\x30\xE6\x21\x09\x57\xA1\x2D\xE9\xCB\x95\x91\xA8\xDF\x7B\x2A\xF0\x2B\xE1\x64\xFF\xF3\x00\xC2\xA4\xFB\x9F\x6E\xF7\x58\xA1\xB5\x00\x45\x04\xBD\x12\xEA\x3B\x13\xE7\x85\xDF\xA5\xDF\xAC\xF3\xA8\xCA\xA9\x6A\x13\xD4\xD2\x20\x06\xED\x5B\x0E\x7A\x5D\xA3\x9D\x24\x59\xDB\x29\x5F\x1E\x46\xD9\x8A\x7B\x09\x63\xA0\x4D\x20\xBE\xD7\x1B\xF9\x10\xC5\x3F\x98\x00\x05\x14\x4D\x7F\xCB\x87\x03\x28\x88\xFD\xAE\x94\x8A\x47\x30\xF5\x1A\x30\x3C\x9A\x3F\x0C\xC7\xA9\xFA\xED\xFD\x8E\x60\xB6\x46\x49\x96\x1A\xE7\x0E\x2F\xBC\x39\x5A\x99\x33\x05\x14\xC4\xE7\xB6\xBC\xCB\x29\xFC\x78\xA7\xDA\xBB\xCE\x93\x4F\x81\xE2\xBD\x1F\x70\xCC\x5E\xC5\x20\x51\xA2\x4F\xC6\x59\x4E\x2D\x89\xF3\x75\x8D\xFE\x0D\xE4\xE4\x90\xB4\x8D\x87\x06\xAE\x33\x0E\xEF\xAA\x75\xB9\xDB\xD6\x5F\xAE\xD1\xFD\x06\x63\x51\x48\x64\x46\xFB\xA9\x3C\x20\x24\x6E\x2A\xDA\xDB\xE0\x7E\xD7\xC8\x4B\xF8\x96\xDC\x68\x0C\xDB\xF6\xF5\x48\xF8\xC9\xDE\xAA\x53\x10\x15\x52\x85\x6A\xB1\x31\xA7\x82\xC9\x2B\xF8\xE1\xAF\xB0\x2C\x6E\x0E\x92\x25\x05\x15\x13\xA7\x0F\x2A\x81\x8E\xB2\x74\xBC\xB3\x86\x3B\x30\xBA\xAE\x7F\x92\x16\xEC\xA2\x32\xFE\xA3\x68\xBD\xC2\x9F\x9F\x45\x4B\x15\xFE\xFC\x82\xB8\x40\xD0\x77\xFE\x13\xE2\x02\x61\x1C\xBF\x0D\x42\x8F\xF1\xB4\x74\x34\x48\xA0\xDF\xC4\x49\xDC\xD7\x4D\xE2\x1F\xBB\x49\x7C\xB1\x9B\xC4\x27\x68\x12\x74\x61\x68\xE4\xD5\xAF\x29\x99\xCD\x39\x2B\xC3\x51\x04\xE3\x10\x49\x06\x64\xFF\xA1\x19\x1A\xE2\x58\x62\xAD\x6D\x2C\xCD\x38\xA3\x19\x5B\x98\x71\xCE\x33\xB6\x30\x63\x3C\x57\x55\x87\x5C\x16\x03\x9A\x60\x0F\xE0\x49\x9B\x30\xE9\x2C\x3D\xD2\x73\xC2\xE5\x71\xD2\x78\xBC\x48\x93\xB6\xEC\xBF\xB9\xD6\x36\x06\x26\x1D\x1D\xA2\x51\xBD\x23\x3B\xA2\xF6\xF2\x30\x1D\xE7\xEA\x10\x76\xD1\x82\x8A\x17\x3A\xD2\xFD\x8E\x30\xF0\x03\xA1\xEC\x34\x41\x84\x02\x61\xBA\xB3\x2E\x53\xFD\xBA\x62\x2D\x8E\x49\x16\x0D\xE8\x42\x92\x26\x7B\x8E\x2E\xEA\x77\x32\xFB\x43\x43\x91\x8A\x91\x94\xAC\x1C\x4A\x3F\xA4\xE0\x97\xB6\x61\x6E\x6F\x09\x56\x12\x60\x95\xCD\x50\x07\x47\x7E\x49\x62\x7C\x0C\x28\x19\xC6\x6F\x59\xDB\x0B\x80\xCA\x22\xA0\xE4\x0C\x75\xC8\xB5\xB6\xD1\x0C\x28\x74\x43\xD3\x09\xA0\x4C\x00\x94\x0C\x80\x92\x00\xA8\xD8\x91\xE9\x77\x84\x4A\x55\x45\x7E\xE6\x81\xE8\xFD\x1F\x77\x5B\xB7\x9F\x54\xAF\xDC\x23\xF3\xAD\xDC\xCE\x12\x80\x74\xA1\x73\x01\x10\x26\x05\x84\x41\xA2\x61\xF9\xC4\x46\x1B\x16\x22\x88\x60\xA1\x3B\x58\x90\xF9\x66\x16\x16\x9A\xD6\x8D\x40\xC4\x52\x0C\x52\x80\x85\xD3\xBE\xC1\x85\x42\xEB\x40\xD2\x6D\x15\x8C\x85\xD4\x61\x1E\xA4\xCE\x45\x55\xB8\x1C\x0D\xF0\x19\x89\x99\x19\xE8\xDE\xF0\x87\x85\x50\xB7\xFD\xAC\x8A\xA9\x59\xE5\xBB\x9F\x55\xB1\xB3\x59\xB9\x2C\x2E\x7F\xD9\x06\xBF\xB2\xDD\x0D\x2E\x7B\xC8\x06\xE7\x3F\x28\xE6\xC3\x3C\xCA\x64\x19\x6C\xB4\x8F\x36\xCA\x5A\x3D\xCF\xD2\x20\xD1\x1E\x07\x4A\x88\xD9\xFD\xBC\x06\xDF\x30\xA0\xEF\x60\x70\xD3\x74\x5E\x3E\x74\x74\xFE\x79\xD1\x1F\x9D\xDE\xFD\xE8\x8A\x87\x6E\x74\xFF\x38\x35\x3A\xB5\xFB\xD1\x7D\x1D\xAB\x69\xA7\xA3\xBB\x4F\x6C\xB3\x9C\xF4\x37\x7B\x39\x7D\xB1\x1B\xDD\x79\x71\xAB\x3F\x0F\x77\x7A\xFA\xAD\xF9\xE8\x25\x83\x26\x94\x1F\xB5\x5E\xFB\x7F\x7E\x01\xCA\x74\x7C\x08\x33\xCD\x95\x55\x6F\x4E\x53\xF0\x5E\x1E\x99\x87\x0A\xD2\xB0\x25\x8D\xC2\x6C\xE0\x62\x4F\x9C\x90\x6A\x79\xCB\x81\xB9\x80\x36\xDD\xE4\xC8\xA3\x83\x89\x78\x77\xC4\xA2\xBF\x51\x1B\x0A\x89\x11\xE8\x85\x31\x99\x71\x61\xDE\x87\xC6\x5F\xA7\xE8\x9C\xA7\xFE\x03\xD4\x94\xFF\x59\x81\xB2\x7A\x72\x56\x59\x8D\x67\x5C\x93\x76\x4F\x2E\xA4\x56\x26\xB3\x79\x15\x50\xC7\x36\xFD\x44\xEE\x54\xDB\xCA\x9D\x6A\x5B\xC9\x42\x4D\x49\x16\xE6\x34\x92\x05\xBA\xD3\x38\x99\x72\x99\x2F\xCE\x15\x9E\x3F\x3B\x47\xEE\x64\x65\xF1\xAE\x44\x71\x7C\x57\xF2\xFB\xF7\xBB\xDF\xFE\xAF\x85\xFF\x90\xF0\xE8\x91\x53\xFF\x61\x34\xAC\x51\x20\x69\xF2\xC2\x35\xE9\x0B\xD8\xC8\x1F\x25\x8D\x7C\x59\xF8\xAF\x0A\x7F\x6D\xF7\x0E\x69\xA6\xAF\x36\xD2\x4C\x02\x38\x6D\x47\x4E\x19\x81\x33\x27\x70\x66\xE9\xEA\xCE\x22\x38\x73\xB6\x95\xE9\x43\x2E\x73\x96\xC1\x69\x03\x38\xF3\xC4\xF1\xA4\xBF\xB4\x2D\x51\x16\x0C\x3E\x23\x70\xDA\x35\xB4\xD1\xA3\x79\x44\xCD\xA1\x25\x0B\xB4\x80\xC6\x05\x5B\xDF\x71\x2A\xA8\x95\x4C\xCE\x0F\xAB\xE1\xFB\x73\xA7\x87\x5F\x39\x85\x9F\x48\x90\xC2\xCF\xC0\x65\x40\x6E\x36\xE4\x93\xB2\x93\xB1\xAB\x07\x38\x76\xB5\x43\xD0\xEB\x39\xA0\xCF\x2B\x97\x57\x43\x81\x76\x32\x5A\xAC\xF7\x49\xA9\x27\xB8\x34\x7F\x33\x04\x62\xF5\x97\xA3\x0D\x91\xE0\x8D\xA6\x49\xA8\x74\x39\xAA\x38\x09\xDD\x2D\x47\x35\xBB\x1C\xF5\xB6\xCB\x51\xD1\x24\xD4\xEC\x72\xFC\x42\xB7\x1C\x3F\xD1\x2D\xC7\xFB\xBA\xE5\xB8\x18\x55\xD9\x73\xE6\x69\xB2\xC9\x72\x49\x96\x54\xF5\x49\xD5\xD9\xA3\xFB\xBE\xE0\xF1\x7C\x2B\x09\x5F\x33\x2B\x68\x08\x0F\x30\x83\x0D\x04\x1D\x22\xB5\xDF\xDF\x7A\x74\x15\xD0\xBE\x6E\xD1\xE3\x99\xFD\x9F\x91\x6B\x15\xAD\x53\xF5\x9F\x44\xDD\xF1\xD9\xE4\x93\x2B\x9C\xAD\xDF\x83\x54\x9F\x51\x73\x63\xE3\xB2\xFA\x6D\x74\x8C\x5B\xBF\x97\xB4\xB4\x91\x8C\xC4\x64\x66\x88\xC9\x26\xC4\x94\xA7\xC4\x14\x94\xD3\x2E\xDB\x06\x68\xA2\xD3\xCA\xA9\xDD\x56\x39\xED\xD3\x53\x54\x4E\x9D\xF1\x17\x4C\xD3\xD3\x2C\xEB\x9F\xF1\x5D\x65\xEA\xF2\x9B\x61\xC1\xA2\x63\x8C\xF0\x9B\x7D\xD1\xA0\x8F\x7F\xBD\x16\x5A\xA7\x56\x3B\x9A\x54\x1D\x2C\x12\xD3\xC4\xD4\x06\x41\xBC\xE4\xA1\xB1\x4A\x88\x59\x18\x2C\x2A\x36\xA9\x0A\x42\x9E\x17\xD5\x13\x7B\xE6\x27\x19\x6C\x10\x91\x5A\x64\xA4\x16\x49\xDE\xF2\x12\x68\x45\x10\xAD\xA0\x91\x35\xB1\x36\x5D\xB2\x45\x63\x75\xBB\x04\x3F\xEB\x5E\x33\xF2\xA0\xDA\xBF\x6D\x6B\x95\xF0\x62\x51\xDD\xFB\x96\x6B\x60\xE9\x2B\xE1\x85\xBF\xFD\xCD\xD7\x6C\x8A\x83\xEA\x6E\xF8\xE3\x85\xBF\x8B\x2E\xEF\xA4\x4B\x68\xF7\x76\x7E\xF2\x32\x7A\x72\x0B\x5F\xBE\x8A\x2E\x6F\xEA\x5E\x7C\x19\x3F\xF9\xD2\x9B\xF0\xC9\x75\x7C\x79\x2D\xBD\xB8\xD9\xBD\x88\x2F\x78\xE1\x3F\x40\x2F\x7E\x9A\x2F\x3F\x4E\x97\xF7\xBC\x29\xBE\xF8\x01\x7E\x72\x3B\x3D\xB9\x9B\x2F\xEF\xA2\xCB\x3B\xBB\x17\x6F\xA7\x9F\x4E\x1C\xA4\xB9\x79\x01\x90\xFE\xA3\x37\xC7\x9F\x77\x75\x3F\x6F\xED\x7E\xBE\xAA\xFB\xF9\x82\xEE\xE7\xB5\xDD\xCF\xCF\xBE\x29\xFE\xFC\x78\xF7\xF3\x8F\xBA\x9F\x77\x75\x63\x78\xD9\x5B\xE3\xCF\x1B\xBB\x9F\xD7\x75\x3F\x37\xE1\x67\xF5\xDC\x5C\x66\xEC\x28\xE5\xC5\x01\x71\x13\xDC\x04\x52\xF5\xB7\xDD\xFE\xDC\xCD\x6E\xFC\x87\x30\x2B\xCA\xFF\xBF\xB0\xA3\x7C\xBD\x71\x50\xDD\xF7\xF0\x46\x90\x17\x5E\x5E\x40\x68\xC1\x63\x30\x58\x2F\x6F\x86\x46\x9C\xB8\x94\x2C\x4C\x70\xE7\xBD\xDD\x1D\x45\x77\xEE\xEB\xEE\xE8\xB1\xF4\xB7\xC1\x18\x01\x85\x8B\xEA\xC5\x6F\xC6\x27\xAB\x14\x64\x62\x37\xFC\x6D\xF0\x6A\x8B\x32\x9B\xDF\x47\x69\x72\x6A\x4A\x9C\xD3\x9D\xBD\x1F\x10\x82\x33\xDE\x60\xE8\x16\x71\x3F\xB9\xA8\x90\x71\xA2\x21\x47\x61\xA4\x22\x06\x2C\x52\x18\x81\xA6\x43\x07\xB5\xA8\x4C\xEB\x87\x6D\xE7\x33\x26\x1A\x8B\x69\x70\xE8\xD8\x11\xFA\x64\x7F\x2E\x64\x46\xD0\x74\x86\x41\xED\xA0\x01\x14\x38\x18\xDA\x06\xB4\xB3\x4E\xAC\xF9\x8D\x16\xBD\xE1\x50\xB7\xE0\xE8\x48\xE2\x62\xD8\xB5\x49\x2C\x85\x16\x66\xC9\x4D\xB2\xA0\x42\xC1\xEC\xC9\x50\x51\x84\x92\x1C\x51\x8A\x1E\x69\x30\xE0\xB1\xA8\x7C\xC7\x9A\x40\xF8\x80\xF1\x58\xE4\xBC\x78\x0B\x05\x0F\x00\x33\x5C\xA0\xAF\xAA\xAF\x8F\x23\x0F\x3F\x24\x1E\x4D\x9F\xE2\x23\x24\xB2\x96\xA9\xAC\xE2\x4E\x79\xC8\x55\xC8\xBC\x25\xFD\xB0\xAD\xBE\x6C\x64\x19\x93\xED\x24\x58\xF6\x1B\x6D\xA3\xF0\x14\x7B\x06\xDF\x7A\x06\xDF\xBA\x8F\x6F\xD3\xE1\x5B\xCF\xE0\x1B\x77\xD1\x9A\x5C\xEA\xF6\xB5\xE3\xCC\x19\x0A\x6A\x31\xBE\x68\x9B\x02\xC6\x01\x42\xF1\xB8\x44\x4F\xB3\x46\x3A\x85\x1E\x56\xE4\xD9\x25\x5D\xB6\x12\xFC\x9C\x42\x0C\x12\xD0\x47\x09\xA0\xA7\x13\x6F\x57\xC2\x95\x68\x24\x20\xDF\x61\x92\x9B\x12\x35\x23\x3F\x24\x04\xFA\xFD\x94\xAF\xC7\x15\x87\x47\x2A\xC2\x1A\xC5\x4E\x49\x64\x52\xE2\xA7\x76\x65\xA4\x9D\xE1\x8C\x3D\xB8\xA1\xA0\xEA\xE8\x41\x74\x28\x81\x1C\x40\xC4\xC4\x6F\x9D\x74\xC5\x0A\x9F\x67\x96\xB8\x1D\xC3\xB6\x49\xB2\xAA\x13\xFE\x44\xDB\xA0\x4B\x1E\xD2\x59\xC9\x82\xAB\x7F\x56\xEB\x4A\x26\x3C\x41\x44\xAC\x80\xD2\x16\x95\x98\x3B\x52\xB9\xFD\x48\xD5\xEE\x46\x8A\x19\x98\x60\x60\x16\x43\x29\x66\x47\x65\xE3\xA8\x7A\xA3\x10\xDB\x8F\x42\xEE\x6A\x14\x55\x55\xFD\x7B\x29\x27\x8E\x1D\x4F\x1D\x11\x1D\xFA\x4B\xA1\x62\x21\x57\x17\xEA\x17\x73\x44\x32\x4B\x15\x4E\x56\xFF\x06\xC5\x20\x5F\xAC\x8E\x84\xFF\x4A\xFF\x60\x5A\x6D\x78\xE4\x5D\xD0\x46\x75\xCE\x0E\xDE\xA3\x38\x92\x03\x52\x4D\x7C\x90\xCC\x90\x5B\xF2\xE1\x21\x50\x38\xAC\x98\x57\xBD\xF5\x9A\xCD\x18\x6B\xF2\x18\x78\x5B\x2C\xD2\xCD\xB1\x88\x1F\xD2\xDA\xE2\x0F\x81\xCD\xCB\xF0\x21\x3E\x31\xD5\xB7\x08\x5A\x9F\x78\x73\x51\x85\x76\xAB\xEF\x10\x4E\xDC\x1A\x82\x43\x92\x17\x48\xF4\xC3\xF3\xC5\xEA\x47\x3B\x1F\xE6\x9E\xF4\x03\x12\xCE\xAD\xF5\xBB\xF9\x20\x58\xD0\x02\x8E\xDF\x63\x54\xC9\x1B\x4F\x45\x81\x93\x39\x4C\x5F\x14\x7A\x4B\x3F\xB6\x45\x04\x1D\x00\x76\xE5\x5B\x78\x57\xBE\x15\xFE\xD6\xAF\xA6\xB8\x02\x00\xD0\xED\xB8\x45\xBC\x07\x6F\xFF\x3A\xDF\x36\x07\xD5\xA7\xDF\x1A\x37\x9C\x0F\xD2\x4F\x0A\x29\x07\x7A\xB8\x8F\x80\x48\x79\x44\xA4\x97\xF4\x35\x32\xB8\x98\x3D\x8F\x93\xA2\xF9\x57\x5D\xDF\xE1\x8B\x36\x22\x1C\x09\xE0\x2E\x58\x5D\xAA\x82\x87\x05\x3F\xB0\xA9\xEA\x11\x22\x84\xFD\x73\x94\x77\x55\xFD\x93\x4A\xD3\x68\xDE\x29\xB6\xF2\xFF\xE6\xCC\x1C\x9C\xC1\xE8\x71\x9D\x06\x14\x4E\x86\xA4\xD0\x5D\xBA\x27\x18\xE6\x58\x3B\x8D\x86\x25\x8A\x15\x40\x31\xDC\x69\xA2\xD7\x46\xB4\x9E\xAD\x2F\x3C\x36\x27\xFD\xE3\xDA\xFA\x0D\x5D\x22\xA8\xC7\xC1\x34\x5F\x7F\x7D\x2F\x43\xCF\x0B\x39\x84\x3D\xF4\x03\xFD\x9F\xA3\x8B\xC6\xA0\x84\x5B\x9C\x58\xBA\xFF\xFE\xFB\xEF\xDF\xFB\x23\xE4\x52\x7F\x33\xCD\x9E\x1A\x7E\x3F\x7F\xE9\xA4\x33\xE7\x6B\x3A\x86\xAA\x5B\xEF\xFC\xBB\xAF\xA7\xD4\x04\x68\x1D\xF4\x0E\x66\xF9\x67\x49\xA7\x8C\x1D\x45\xAF\xDF\x3A\x35\xD2\x2A\x19\xEA\x0B\x5E\x98\xE6\xAC\x42\xF7\x4C\xFF\xB9\x74\xF8\xD2\xDF\x29\x3A\x2F\xF8\xEB\xB7\x49\xA3\x15\xD3\x67\x85\x74\x51\x9C\x26\xEA\x2F\xE3\xAC\x39\x45\x54\xC8\x2A\xA3\xE2\xEA\x20\x57\x12\x51\xDF\x16\x10\xD1\xA5\x07\xA2\x83\x4C\x8E\x98\x9A\x8E\x92\x7A\xF6\x83\x30\x9A\xAD\x46\x81\x7C\x6B\xDB\xDE\x6F\xD2\x5D\xE4\xE2\xDC\xEE\xB7\xC9\xA3\x15\xC9\x67\xD8\xD6\xFF\xDA\xCF\x23\x16\xF2\x40\x51\x5E\x01\x7E\xE7\x43\x31\x57\x45\xC8\x36\xF6\x86\x17\xF6\x88\x2C\xE4\x6D\x30\xFD\x16\x28\x83\x0C\xE5\x42\xE0\x50\x56\x9D\x24\x6C\x6A\x40\xBB\x4C\x86\xF2\xA9\xA9\x94\x66\xBD\x4E\x42\xC6\x49\x76\xD2\x14\x5E\xD5\x5F\xC3\x46\x40\x41\xA5\xE5\x42\xD2\x47\xD1\x3A\xED\x55\x18\xFA\xFD\x04\x80\xD3\x0C\xBD\x23\x59\x5C\x70\xCE\xF8\x41\x3A\xB0\xCD\x6B\xB6\x19\x18\x7C\x12\x82\xDC\x7A\x41\x1B\xB7\xA8\xD3\x60\x88\xA3\xEF\xBA\xBC\xBA\x5D\xE6\x08\x20\xD4\x24\x5F\x52\x33\x85\xB4\x6D\x21\x25\x22\xA4\x14\x4A\xAE\x7E\xC0\x90\x12\xB3\x90\x12\x7E\x10\xB2\xF5\xDE\xBF\x3D\x92\x75\x0F\x52\x1C\xE5\x8A\xA1\xC0\x0F\x14\x52\xA2\xBA\xEA\x34\x2B\x49\xCD\x4F\x8B\xB7\x1D\x44\xFE\x60\x0E\x44\xA6\xF0\x73\xF2\xEB\xEC\x15\xE4\xD3\x6E\xA7\xA2\xEE\xFF\x76\xAA\xFB\xBF\x39\x7D\xF7\x9B\x73\xB3\xA0\x85\xC8\xE3\x90\x67\x66\x6E\x6A\x33\xEE\x59\xA5\x3D\x2B\xEE\xF9\xBE\x39\x3D\x87\x14\x5A\x53\xB9\x40\x1E\x4C\x00\x7C\x76\x0A\x00\x57\xDF\xF0\x8D\x02\xC0\x3F\x4D\x01\xE0\xA5\x73\x7A\xDE\x02\x00\x5B\x26\xA2\xFB\x78\x30\xEF\xF0\xAF\x99\x24\x6E\xD3\x32\x81\xC7\xB7\x97\x41\xA7\x88\xDC\xEF\xB4\x23\xFF\xE8\xBC\x34\x67\xC9\x4C\x5E\x75\x43\x6F\xFD\x7D\x62\x73\x5E\x22\xBA\xF7\xF5\xF7\x81\xE9\x39\xE8\x38\x07\x3E\x44\x67\x3F\x18\x9A\x83\x4E\xF8\x35\x7B\x70\x63\x60\x50\xB7\x07\x84\xB1\x07\x26\x82\xDA\xA5\xE9\x58\x0A\x48\xEB\x4E\xAC\x2E\x34\xB6\xC7\x5C\xD0\xD7\xCB\xFA\x01\x72\x88\xC0\x5C\x1E\x9D\xCC\x2D\x65\x0C\x21\x47\x80\x42\x7D\xCB\xD9\x31\x86\x8A\x78\xF9\x58\x49\x91\x00\xE8\x93\x4C\xE1\xFF\x55\x60\x88\x12\xDF\x76\xD6\x8B\xC8\xAA\x55\xCA\x80\xE6\xF5\x43\x69\x72\x5E\xD8\x63\x63\xA6\x8F\x92\x4F\x4E\xA1\xE0\x8D\x37\xF4\x52\xE7\xF5\x30\x15\x47\xD2\x31\xE7\x04\xAD\x21\x9F\xA2\x98\x41\xEB\xEF\xDE\x30\x9B\xD4\x68\x2C\x7B\x68\x95\xDF\x6C\xD2\xFC\xD8\x69\x48\xF3\xCF\x76\x42\x9A\xDF\xE4\x39\x7C\xF2\x34\x73\xF8\xF0\x4E\xE6\xB0\x6D\xEA\xD6\x5E\x6A\xAC\xD3\xEF\x51\x9F\x9E\x22\x88\xC0\x2B\xFF\xEE\x86\x5E\xEA\xD6\x38\x90\xDE\x1E\x89\x8E\x91\x73\x5D\xA6\xD4\x6C\x0E\x55\xCC\x2C\x4D\x09\xB2\x38\xB9\x95\x0C\x89\xCC\x38\x31\x4A\x4C\x5A\x46\x59\xA4\x74\xD5\xA5\x07\x95\x04\xBE\x4E\xE8\x0B\x00\xFB\x52\x32\x4E\xF6\x38\xD6\xEC\x57\x2F\x2F\xE4\x30\x41\x51\x7F\x6C\x33\x1C\xA5\xBF\xF4\xC6\x14\xC0\xCE\x70\x3C\x1D\x67\xC2\x6A\x76\xD8\x93\x33\x7E\x72\x11\x59\x17\x76\xDE\xC3\xA7\x76\xD9\x03\x8C\xBF\x8A\xE9\xDB\xAA\x4E\x38\xD3\x94\xDD\x62\x2A\xAF\x5B\x7F\x1B\xB9\x41\xC9\x72\x12\x94\xFB\x5E\x3A\x49\x15\x72\x37\x73\x52\x56\xCE\x16\xC2\x11\x9C\x76\x51\x15\xC1\xB5\x2E\xF3\x66\x9C\x3B\x19\xA3\xB8\x0C\xC6\x41\xBA\x1C\x2D\x17\x05\x87\x7A\x6A\xF4\x60\x2C\x82\x13\x32\xA9\xF1\x5E\x8C\x0B\xA7\x43\xC6\xA9\x82\x65\xEE\xE8\x0B\x90\x09\xCE\xAC\xE4\xE5\xB8\xA8\xE0\x45\x0C\xD7\x2C\xFC\xA4\xC5\x8D\xB6\xC0\x3C\x38\x45\x3B\xCE\x5D\xE6\xF4\xEA\xB8\xE4\xBC\x45\xAE\x1C\xC9\xAA\x72\xC5\x08\x43\xB8\x2D\x85\x6D\xD2\xC0\xC9\xFF\x9D\x8D\x08\xD3\xF9\xAC\x2B\x27\xAB\x97\x2A\xA9\x27\x4C\x21\x32\xF5\xAC\x4F\x0B\x4B\xA0\xF6\xEB\xBA\x8C\xE8\x9C\x54\x3A\x24\x41\x57\x49\x04\xE6\xDC\x8C\xD1\x21\xE1\x39\x65\xCD\xF3\x6F\x46\x52\xC0\xC3\xBF\xFA\x25\xD8\x47\x7A\xE7\x45\x08\xB1\x99\x0C\xD6\xBD\xCE\xFC\x5B\xBA\x0F\x7A\x1F\xDF\x80\x77\xEE\x48\x9E\xFE\xF6\xF4\xD3\xED\x06\x5A\x61\xCE\x9D\xCA\xA9\xEA\x67\xA4\x89\x60\x41\x3B\x92\xE8\xCE\xE8\x85\x9E\x9B\x94\x5C\x09\x4C\xD4\xA1\x87\x7C\x48\xFA\x66\x5A\x76\xB8\x79\xD7\xFF\x18\x17\x02\x05\x08\x44\xFA\x77\x2A\x34\xCC\x18\xF9\x75\x8D\xD9\xCD\x28\xA7\x90\x4B\x9C\xF5\xE7\x3B\x90\x64\x19\x15\x0A\xAA\x1C\x29\xC4\x9D\x67\x09\x95\x25\x52\xA6\x82\x46\x98\xE6\x55\x32\x13\xBD\x3C\xE2\x74\xEE\x4E\xD3\x60\x41\x05\xE1\x73\xCC\xFB\x36\x43\xC0\x32\x9A\x25\x4D\x20\x21\x78\xF7\x8E\x40\xE1\x43\x13\xC3\xA0\xF9\x6C\xDC\x50\x98\xB6\xED\x32\x8E\xDB\x7E\x12\x7B\x4A\x54\x6F\x70\xD9\x00\x14\xE6\xF4\x66\x42\xA8\xEE\x6C\x2E\x7B\xF2\x00\x40\x23\xFE\x50\x57\x31\x82\x3C\x90\xE6\x92\xC0\xC5\x99\x26\xA9\x6F\xF1\xF8\xDD\x65\xA4\xBB\x2F\x0D\xE8\x6F\x7D\x3D\xFE\x77\x6E\xE7\x1C\x81\xCC\x99\xFB\xB3\x25\x79\xA2\xC9\x30\xEB\xEA\x0F\xC7\x08\x64\xA4\x90\x77\x6B\x65\x19\x4F\xBC\xCA\x6E\x3B\x35\x93\x9C\x30\x5B\x89\x81\xED\x29\x6A\xB0\x3E\x92\x90\x3A\xA2\x85\xA3\x76\x30\x5E\x04\xF6\x9A\xD5\x46\x2F\x34\x26\xA2\xCA\xC2\xD8\x38\x07\xA9\x5E\xE0\x09\x6A\x67\x69\x06\x94\xB4\xC9\x46\x1C\xF2\xAF\xFA\x8B\x9B\x31\x7D\x96\x72\xD6\x65\x01\x87\x26\x3A\x9C\x60\xEC\xB6\x8A\x71\x1D\x3A\xD4\xA9\x30\x20\x6B\x22\xE5\x65\x1D\x2C\xB3\xA9\x50\x70\x3B\x0F\x93\x5F\xEC\x80\xA9\x3B\x4C\x76\x81\xE2\x01\x93\x1C\x86\x8D\x5E\x5F\xD0\x55\xB7\x49\x39\xCA\xE2\x0F\x37\x97\xC4\x38\x8F\x41\xE3\x22\x06\x7B\x63\x38\xF7\xD6\xF8\x9C\x1A\x42\x3F\xA2\x3C\x07\x7C\xE6\x01\x9F\x15\xCF\x12\x06\x56\xDD\xC1\x85\x11\x52\xBB\x60\xB6\xD2\x47\xE7\xE1\x34\x49\x71\x7A\x91\xAF\x8C\x64\xB7\xC8\x64\xBA\xC8\x3A\x76\xD1\xCB\x6D\x20\x80\x5D\xD0\x66\xD0\xAD\xBB\xB1\x09\xE1\x3E\x64\xB6\xB5\x21\x81\x06\x40\x30\xE0\x4F\xA6\x6B\x10\x33\x13\x7F\x0F\x25\x9D\xD0\x53\x23\x07\x6E\x84\x46\x64\x6A\x4C\x70\xBD\x09\x43\xB1\x27\xFF\x3A\x27\x0B\xF3\x2E\xE7\xDB\x91\x4D\x37\x63\xB3\xFD\x8C\x0D\x97\x07\x08\x14\x33\xA6\xBC\x9A\x1C\x32\x04\xB7\xB9\x19\xD4\x20\x66\xB9\x56\x68\x1E\x71\x1B\x32\x07\x74\x00\x93\x01\x60\x32\x01\x98\xE8\xB7\xEA\x54\xF5\x1F\x08\x60\xD3\x53\xEF\xAD\x5B\x84\xDC\xBF\x6E\x46\xB7\xB2\x1B\x15\xEC\x09\xDD\x82\x15\x53\x48\x46\xDE\xF8\x46\xC2\x22\xE2\x88\x7E\x5B\x4C\x53\x30\x0E\xAE\x96\x88\xC9\xB1\x4D\x12\x40\x20\x90\x2D\x12\x02\xBC\x33\x7B\x17\x17\x2C\x0D\xC4\x54\x29\x3B\xEE\x73\xE3\x8A\xED\xB5\x53\x65\x66\xFA\xC9\x32\x02\x3D\xC2\xA7\xB0\x6B\xBF\xF9\x54\x4C\x41\x8D\x07\x9B\x09\xD4\x34\x3A\x3B\xC5\x1C\x1A\x33\x55\x66\x54\xF5\x23\xF3\xA1\x98\xE0\x7D\x96\x66\x9C\xAC\xBF\xB0\x19\x31\x05\x0F\xFF\x61\x33\x72\x61\x02\xF4\x83\xD9\xEC\x17\xBB\x66\x5F\x3C\x67\x7D\xE7\x2B\xFD\x86\x44\x7F\x3B\xD3\x5B\xD7\xEB\x39\x4D\xB6\x8D\xF9\x8C\xAF\x9F\x87\x04\x61\x78\xD7\x4E\x46\x85\x1B\x03\xD9\x3C\x87\x8D\x06\x64\xAD\x2E\xD4\xEF\x0F\xCC\x86\x13\xD2\xE0\x4B\xB4\x71\x04\x22\x08\x1B\x86\xDC\x22\xA9\x87\xE8\x26\x21\xE2\x24\x68\x05\x89\x64\x16\xE8\x74\x04\x2A\x3D\xE5\x26\xB1\x31\xCF\x47\xA4\x84\x3F\x95\xD2\xC6\x43\xE4\xFE\x3C\xE8\x4C\xA7\x2B\x23\x13\x95\x9E\x2D\x4A\xC9\x38\x89\xC9\xB8\xD0\xC2\xD1\x15\x2B\xC9\x57\x46\xA4\xC0\xD8\x80\x23\x7A\xBA\x49\x6B\x8C\x72\xA3\xE3\x9D\xAF\x11\xC6\x9D\x65\x67\x32\x35\xB6\x4E\x2D\x8F\x4C\x35\x53\x94\xC6\x59\x0A\x30\x8D\x85\x69\x40\xFE\x0A\x9B\x61\xF5\x81\xDD\x90\x4B\xD8\x38\x4F\x4B\x30\x3D\xFA\x38\x2D\x79\xE0\x6A\x16\x5B\xAF\xE6\xED\xDB\xC4\x65\x2B\x62\x9B\x22\x20\xEB\x35\x32\xBA\xDE\xF4\x66\x36\x33\x19\x92\x3A\xB6\x9D\x0F\xE2\xC9\xF6\xF1\x14\xC6\x43\xB8\xC9\x9C\x62\x4C\x64\xCB\x23\xED\xB2\xB1\x9A\x99\x36\xDC\x24\x77\x88\xA9\xE9\x57\xFF\x86\xB6\x28\x49\xC1\xEF\xED\x98\xDD\x99\xF5\x98\x72\x12\xE3\x0E\xEE\x27\x6D\xF5\x44\x8C\x04\x75\x2A\x72\xB7\x03\x02\x43\x3F\x31\xB4\xFC\xD2\xCE\x39\xD3\x99\x4B\x40\x87\xDB\x5B\x4D\x45\xD0\x2B\x3F\x69\x49\x02\xF7\xA2\xDA\x03\x4A\xCA\x93\x5A\xCC\x47\x32\x58\xAD\xCE\x8B\x51\xA6\xFE\x78\xDB\x48\xFF\xA8\x8B\x51\x0D\x54\x5E\x3A\xB9\xE1\x9F\xB7\xB9\xA9\xD6\xD1\x2F\xD2\x97\x87\x89\xD1\xE0\x41\xF6\x47\xE4\xBA\x7F\xFB\x84\x1A\xC9\x56\xD3\x06\x8F\x55\x7F\x23\x95\x3E\x69\x30\xE5\xCC\xD2\x13\x9E\xDB\xE8\x13\x4E\x3F\x67\xAC\x9D\xBA\x15\x36\x0E\x54\x76\xD0\x2F\xE1\x3D\xE4\x40\x01\xA3\x9E\x80\xD4\x7B\xF2\xD9\x37\x47\xB7\x6E\x8F\xC0\xB0\x63\xED\xEC\x92\x78\x32\x65\x09\x16\x98\xFB\xDF\x29\x7F\xA0\x7B\x05\x65\x38\xF6\xD8\x43\x25\x2A\x43\xF5\x11\x15\xC1\x71\xE6\x72\x02\x22\x7A\x95\xA8\xC3\x21\x85\x11\xBE\x86\x71\xF9\xE3\xC2\xE5\xA0\x99\xB7\xFE\x64\xDB\x94\xDC\x79\xE9\x0A\xEA\xE0\xD9\xD0\x16\x80\x6E\xAC\x82\x40\x97\x07\xCC\xFD\x9C\x54\xF2\x24\x22\x45\x7A\xF9\xFD\x84\x81\x25\x16\x51\x0E\x08\xE1\x0F\x1C\x6E\x8C\x83\x07\x98\x62\x78\x8C\x5B\xFF\xDA\x18\x44\x78\xDD\x61\xD0\x06\xA8\x95\x80\xB6\x93\x7B\x63\x76\x5E\xBD\x34\x38\xE9\xEC\xEB\x96\xEE\x97\xD7\x9C\x58\x7A\xD2\x89\x98\x40\x9A\x28\x7C\x49\x38\xFD\x6C\x00\xDB\x02\x26\xDF\xAD\xDE\x61\xAC\x9C\xA8\x13\xF0\x3F\xDD\x1F\xD1\xF7\x51\x7D\xD3\x7B\xDF\x1E\x7E\x3C\x21\x8E\x4E\x2F\x8C\x0D\xDF\x15\xEC\xAC\x8D\x14\x04\x9F\x26\xF7\x69\xDF\xC7\x6C\x0A\x4F\x6A\x9B\x8C\x46\x7B\xF1\x48\x3A\xCB\x2F\x9D\x7D\xE8\x15\x2E\x7B\xEB\x4D\xE8\xBC\xD2\x05\x22\x90\x50\xF7\x8A\xFF\xA8\x39\xF1\x9A\x7D\xC5\x38\xA7\xE6\x29\x00\x8D\xDB\x6C\x32\xCC\xD4\xD3\xF5\x47\x2E\xB5\xC8\xB1\x70\x20\xBF\xF4\x72\xF8\x77\xC7\x13\xC6\x36\x79\x67\xCB\x31\x15\xA0\x06\xBC\xF5\x15\x37\x8D\x8B\x64\x78\xAF\x9C\x1D\x5A\xEE\x8C\x2B\x5E\x71\x13\x8C\x4E\x57\xE1\x6A\x9C\xD3\xF0\x64\x68\x7C\x9C\x55\xFE\x24\x5A\x21\x62\xF2\x9E\x95\x91\xF2\x72\x3C\x08\x2A\x0F\xB5\x9A\xB5\x21\x4F\x0F\xE9\xC8\xDA\xAB\x76\x9C\xF9\x09\xE5\xE1\xA5\x2B\xA0\x53\x3A\x84\xCC\x70\x62\x70\x89\xD3\xC0\x8F\x1B\x1D\x09\x01\xA6\x51\xF9\xC1\x11\xA7\x5B\xFF\xA4\x76\x0C\x92\x24\x91\x5E\x70\x6B\xC9\x9C\x5C\x19\x69\xAC\xAB\xA5\x0E\xB9\x8A\x42\xF9\x31\x6F\x32\x56\x0A\x03\x15\xD4\x0F\x8E\x44\x8A\xF1\xF2\x22\x8E\xDF\x87\xE9\x0D\x8E\xBC\x35\xE0\x44\xB9\xFC\x3F\x6A\xB4\x2F\x95\x95\x2B\xAB\x77\x5A\x99\x4F\x6F\x07\x66\x25\xC9\x58\x21\x67\x0A\x94\x51\xE2\x32\xCC\xCA\xAA\x86\x9C\x1D\x4A\x76\x25\xCA\xE8\x44\xD1\x9B\xB1\x81\x4B\x76\x7C\xEF\xCA\x91\x34\x59\xD7\x8B\x09\x55\x49\x32\x52\x6A\x31\x65\x2C\xAA\xC2\xD8\x47\x86\x5A\x54\x16\xC4\x7B\x4C\xFD\x7D\x04\x5F\xAB\x5C\xC8\x6B\x90\x77\x25\x15\x1D\x05\xDC\xE0\x6E\x88\x47\x83\x20\xF4\x91\xA3\x4D\x86\xEF\x78\x85\xB9\x37\xA8\x7E\xDA\x70\x6C\x3D\x31\xA5\xE0\x44\xCD\x79\xEC\x5E\x4C\x69\xDF\x82\x8B\x74\xDB\x14\x6D\x92\x3C\x6D\xBA\xE9\x47\x93\xE8\x81\xB3\x60\x5D\x8C\xCD\x51\x5D\x89\x95\x1C\x99\x79\x63\xD8\x7B\x22\x77\x86\xF2\x40\xE0\x1E\xC4\xA3\x08\x7B\xA0\xED\x97\x9F\x23\xD1\x46\x34\xC1\x9C\x66\x0E\xB3\xA9\x45\x93\xD1\x68\xAC\x92\xED\x3F\xE4\x7E\x63\x18\xEA\xD5\x4E\x78\x1E\x92\x0C\xC2\x5B\x1D\x80\x51\x91\x87\x62\x48\x53\x11\x64\x6C\x8C\x29\x9D\x20\xDE\x8A\x6E\x54\xC5\xCC\xEE\x68\x70\xC1\x0A\x20\xC2\x8C\x63\x93\xFA\xF0\x63\x3B\x05\x2A\xC5\x00\x60\xF4\x7A\xD3\x78\xB8\x9D\xBC\xA5\x09\xC6\x63\x3D\xBD\xBF\x1B\x4A\xEC\xD9\x14\xA1\xC2\x5F\x46\x9B\x59\x00\x62\x16\x80\x48\x7B\xD3\xF5\x73\x94\xBE\xD9\x9C\xC9\x93\x18\xF0\x4C\xEE\x5C\xFA\xC2\xE8\x45\x4E\x75\x63\x5B\x3E\x7E\xA7\x9C\x3F\x20\xDE\xA9\xF4\xF5\xB5\x0B\x31\xF5\x34\xEE\x51\x00\x71\x68\x10\xF3\xC5\x77\x39\x81\x69\x38\x6F\xD8\xC9\x70\xBA\x68\x04\xD3\x70\x05\x3D\x24\x50\x85\xC6\x26\xA7\x38\x11\x59\x81\x50\x64\xA9\x07\x57\x57\xC8\xF4\x81\x1E\x85\x86\xDC\xDE\x91\xBF\x63\x4E\x87\xB0\xF3\xCB\xB6\x91\x4E\xAD\xA2\xED\x57\x39\x1D\x32\x25\xC7\x84\x21\x32\x1D\xF0\xDF\x29\xA5\x3A\x87\x22\xB7\x55\x1A\x6A\x3D\x5D\x03\x88\xD3\xC6\x29\xBF\xBF\x57\x96\x62\xFF\xD2\xC9\x13\x4B\x4F\x78\x5E\x63\x96\xF2\x1F\x19\x09\xFF\x72\xE9\xCC\xCD\x8D\x04\x4E\x77\xDC\x93\x67\x63\xAF\x00\x86\xF4\x6A\x63\x2C\xFB\xC7\x29\xFB\x92\x72\x6B\xCA\xEF\x6B\xEB\x2F\x77\x87\x27\xFB\x80\x48\xFF\xFA\xC6\x9E\x9B\xCE\x2D\x2F\xC2\x2C\x2D\x12\xB4\x6E\x78\x9D\x1C\x5D\xD2\x0F\xEE\xBB\xB1\xEF\x09\x20\xC6\xD2\x9F\xC9\xF4\xAF\x59\x12\x9A\x5C\x84\x01\x07\x2C\x69\x08\x27\xD6\x28\xFE\x43\xB6\xFE\x4C\x0C\x87\xA0\x78\x44\x62\xA4\x02\xD3\x83\xD1\x03\x4C\x3E\x89\xCF\x40\xEF\xE7\xFC\x93\x4C\xA1\x78\xB4\xE1\x3A\x6B\xFD\x73\xA7\x0B\x3D\xEC\x30\xE7\x77\x67\xC0\x47\x62\x31\x17\xC6\xF0\x40\x26\x13\x76\x89\x08\xD4\xAB\x62\x04\x1C\xBE\xBE\x76\x21\xE7\x10\x84\xD5\x06\x6B\x6A\x69\xC2\xAE\x3F\xCC\xB4\xB9\x40\xCA\x70\x89\xF8\x41\xA7\x53\x63\x3A\xF1\x70\x74\xD0\x2F\xAB\x7C\xFD\x8B\x12\xA0\x66\x4B\xF2\xC4\x18\x93\x10\x0E\x1D\x92\x9F\xA6\x43\x8D\x2C\xF4\x33\x75\xFA\x7D\xBF\x22\x1F\xDD\x6D\x67\x9D\xC6\xE9\x74\x31\xD9\x1C\x0F\x42\x02\x0C\xAD\xA1\x8C\xA2\xE1\xF9\x14\x82\x02\xE3\xBD\x1C\x97\xB4\xF9\xC2\x1B\x83\x35\x57\x00\xC7\x2A\xA0\xC7\x69\xB0\x0D\xE2\xA2\x87\x8F\x18\x74\x4D\xFC\xF2\xC2\x71\x15\x80\x57\x45\x8B\x69\xE9\xF4\x38\x03\xEE\x1E\x86\x36\xCE\xE0\x63\xCC\x61\xC0\xC9\x32\x5D\xB1\xD6\x0C\x5C\xDE\x36\xBA\xC5\x6C\xFB\x20\x1A\x5A\x57\xD5\xEF\xA3\xE1\xBB\x8A\x12\x0D\xE5\xCC\x42\x8B\xD6\x0D\x02\x73\x44\xD6\x9B\xB5\x7C\xA2\x52\xA2\xE5\x0F\xE7\xE7\x2C\x8C\x1A\x8F\x9F\x55\xC2\x4C\x15\xB3\xDC\xBC\x72\x05\x8F\x9E\x78\x27\x34\xEF\x39\x3A\x28\xEF\x88\x52\x57\x9F\xEB\x94\xC1\xAD\x4C\x46\x86\x6B\x96\x01\xD4\xD9\xA1\x35\xA6\x97\x87\x5B\x2F\xBE\x9A\x6F\x45\x7E\x7C\x5A\x95\x91\x53\xD1\x48\xB4\x18\x91\xAB\xAD\x4E\x85\x02\x9B\x5E\xA0\xF7\x30\x1D\x71\xC0\xDE\x1A\x42\xA9\xC6\xB4\xC1\x26\x35\x47\x35\xDC\x9C\x31\x44\xEC\xAD\xC2\x37\x5E\x54\x9F\xD0\x5D\xFE\x90\x9D\x2F\xBB\x60\xC3\x25\x04\xB3\x7B\x92\x09\xD6\xA8\x8C\x8E\xCA\x56\x89\xF8\x82\x69\x39\xAC\x9A\x9C\x89\x2B\x64\xA0\x83\xDD\x3F\x5B\x6B\x6C\x07\x4C\x7C\x2D\x6B\x9D\x65\x1F\x4B\x90\x33\x7C\xC8\xFE\xE1\x2C\x01\x35\x14\x26\xA3\xF0\xC3\xBC\x6D\x32\xA2\x83\x1C\x08\x32\x67\x48\x56\x21\xA2\xCC\xAE\x8E\x24\x4A\xB7\x76\xED\x12\xCE\x9E\x96\xAD\xCD\xF6\x48\x32\xD5\x1A\xF7\x9B\x87\xEB\xD8\x7B\xBC\x93\x8E\x01\xC5\xFA\x98\x77\x82\x19\x46\x9C\xAD\x3B\x0D\x83\xC0\x6A\x87\xFD\x81\xE4\x48\xC8\x43\x1E\x85\xC5\x8B\x38\x04\xBA\xEC\xC1\x00\x99\x4B\xDE\xF2\x78\x43\x0E\xBA\x1E\x5B\xF9\xF1\x59\x43\xDB\x1C\x5E\x9A\xB0\x46\x75\x69\x57\xE6\x95\xA2\xBD\x42\x10\x06\xF3\x84\x74\xAB\x7C\xBE\xCE\x60\xAB\x94\xFC\xBF\x99\x30\xC3\xA9\xB2\x79\x66\x67\x65\xF3\xF6\xF7\xCA\xE6\xC1\x6E\x12\x2E\xF5\x39\x7A\x7F\x63\xB1\x1E\x0F\x55\xC3\xAB\x97\xC4\x0F\x8E\x84\x7F\xF5\x8B\xE2\x09\x20\xE7\xCF\x44\xFE\x03\x52\xD9\x41\x35\xE4\x1A\x2A\x26\x49\x66\xB3\x24\x40\x45\x06\x9D\x16\x0D\x0F\xB9\xB3\x3F\x80\x7A\x97\x60\x3F\xBA\x24\xA1\xDC\x1C\xD4\xC1\x30\x8B\x05\xB6\x84\xE5\x3C\xAA\x1F\xA2\xF1\xD5\x4D\x09\xE3\x03\xA2\xB3\xCF\x76\xE5\x0F\x8C\x40\xBB\x82\xBD\x20\xA7\x2C\x74\x86\x63\xDE\x51\xC0\x91\x55\x48\x98\xED\xE4\x5A\x63\xA6\xC8\x41\xB6\xCE\x04\x6F\x63\x17\x84\x3D\x11\x85\xBD\xE9\x08\xC4\xE5\x1D\xA0\x1A\xCD\xA6\x2F\x39\xC5\xC7\xF1\xF5\x4B\x03\x97\x22\xB6\x00\x28\x7D\xAB\xEA\xE5\x2F\xDC\x79\x09\x0E\xC3\x22\x58\xC8\x82\x2A\xA7\x98\x83\xD6\x31\x31\x0B\x12\xF3\x36\x00\xA6\xB8\x20\x90\xD4\x43\xC6\x21\x73\x71\x28\xE5\x11\xE4\x6B\x10\xA3\x89\x22\x79\x97\x1D\x5B\x97\xE1\x7E\x62\x58\x44\x34\xC1\x66\xA8\xDB\x20\x53\x5A\x02\xB9\xC6\x40\x86\x2E\x3B\x8E\xC7\xBC\xB8\xF0\x62\x0A\x7E\xE8\x01\xDF\x08\x8C\x9D\xE3\x44\x53\x49\x26\x59\x69\x77\xAB\xAF\x87\xA1\x46\x46\xAA\xD9\x71\x23\xB8\x2C\x78\x40\xF4\x6B\x11\x53\x76\x0E\x09\x52\x2C\x53\x5A\xB1\x9B\x21\x9B\xED\x10\xB2\x21\xFC\x7A\x16\xB2\xB6\x75\x19\x43\x36\x27\xC8\x66\x2E\x47\x5F\x87\x6C\x2D\x40\x36\xA3\x9A\x93\x1D\x64\xB3\x00\x59\x0A\xDE\x71\xD3\xB4\x1C\x08\x59\x47\x42\xD6\x91\x90\xA7\x21\x89\x5E\x3E\xA7\x55\x60\xC4\xB4\x02\xB3\x1A\x52\xB0\xA7\x7A\x0B\x6F\xD8\x63\x2E\x16\xEE\xD4\x5A\x43\xE6\xC5\x74\x70\xAA\x0D\x6E\xFD\x4E\x4E\x69\x52\xA7\x1F\x48\x17\xB1\x3B\x35\x0C\xE5\xF4\x5A\x3B\x3D\x18\x7A\x6B\x8D\x74\xA5\x3E\x88\x54\x5C\xEB\x2A\xAE\x75\x95\x0E\xE7\xD7\xBA\x9A\xE9\xBD\xE1\xF8\xE8\xD7\xC1\x8B\x2F\x14\x9D\xC7\x2A\x4C\x64\x84\x37\x8E\x72\x5A\x2A\x12\xEB\xE9\xF4\xEA\x97\x82\xEE\x14\x72\x5A\x37\xCA\xFF\x74\xEB\x31\x7F\xB3\xF2\x8E\x0E\x5D\x48\x79\xC2\x18\x2F\xB2\xAF\xCA\x27\xC6\xE6\xB9\x69\xDD\xFA\xC9\x36\xAD\xCF\x6F\x5B\x91\x5D\x17\x08\xE8\x22\x54\x75\xE9\xD4\x50\xE3\x5C\x81\x1D\x4E\xC3\x47\xB6\x11\x44\x32\x82\x48\x76\xC9\x50\x2B\x27\xAB\x17\xA8\x9E\x5F\x56\x8C\x76\x07\x11\xAB\x31\x4E\x7D\xFF\x48\xF2\xA6\x40\x67\xB0\xFD\xD4\xA1\x72\xDE\x42\xAB\xFF\x27\xCB\x5B\xCC\xBE\xC7\x92\x34\x06\x6C\x54\x35\xD2\x99\x27\xD2\xA2\x85\x69\xF3\x8A\x55\xF3\x56\x1E\x86\x7D\x73\x59\xD8\x5B\xB6\x5C\xD8\x96\xFA\xE3\x9C\xE6\xA6\x0F\x06\xCC\x89\x16\x85\xA3\x00\x83\x2E\x21\xAC\xE9\xD7\x81\xFB\x13\xDD\x4B\xEC\xB5\x75\x5D\x04\x3E\xAF\x51\x9D\x02\x61\x22\x0D\xA1\x51\x06\x27\x6B\xA1\x47\x42\x74\x86\x79\x59\x9D\x72\x66\x15\xED\xC3\x68\x06\xC8\x49\xC1\xF1\x93\x27\x8E\xA4\x33\x7D\x12\x27\x39\x20\xE6\xE9\x52\xAC\xAD\x87\xF5\x47\x95\x34\x5C\xEB\x72\x97\x47\x9B\xFA\xA3\x57\x17\x82\x95\x3B\x64\x19\x67\x51\x16\x49\x8E\xE7\x2E\x12\x71\x9B\xF4\x9D\x9C\xB8\x0F\xBA\xBF\x62\xF9\xAC\xCC\x8B\xAE\x42\x3E\x89\x66\x72\x26\x61\xEC\x14\xB2\x4C\x7D\xEB\x36\x4F\x33\xAA\x83\xA6\x49\x83\xD1\x94\xA1\x20\x03\x8E\x78\xE1\x42\x93\x41\xEF\xAC\xD3\xA0\xE1\xD7\xA9\x96\x32\xA7\x92\x95\x4A\xCE\x11\xDB\x08\xB8\xAC\x97\xA8\x2D\x0A\x4F\xFC\x7F\x0D\x9F\x97\x11\x3E\x7F\xF5\xE1\x81\xCF\xD7\x3D\xEC\xF0\x79\xF6\x6C\x21\x11\x14\x84\x83\x39\x8A\x0A\x88\xCC\xAF\x36\x72\xDA\x97\xD4\x4E\x5E\xB2\x3B\x79\x29\xDF\xC9\x4B\xD9\x4E\x5E\x92\x33\x2F\xFD\x9A\x8C\x6F\x4D\x39\xC0\x89\x5E\x06\x25\xA5\x8D\xCD\xF2\xCA\xDF\xFD\x22\x04\x40\x7D\x17\x5B\xEE\xFE\x18\xAF\xF3\x78\xFD\x3E\xBC\xCE\xE2\xF5\x07\xA7\xAE\x3F\x86\xD7\x36\x5E\x7F\x66\xEA\xF9\xBD\x78\xAD\xE9\x9A\x86\x48\x69\x3C\x8E\xAE\xFB\xCD\xDB\xF4\xE1\xEA\x6D\x21\x8B\x8C\xCF\xF0\x4C\xF9\x89\xF1\xE4\x51\x38\xA0\x6B\xCA\xB9\x7D\xB8\xCB\xDD\x44\x75\x80\xFC\x17\xC3\x3D\x76\xA2\xEF\xEC\x01\x2E\x14\x0A\x7A\x52\xDB\x28\x3E\x40\xE4\x9C\x9C\x61\xE5\xD8\x8B\x31\x0C\xFC\x35\x93\x36\xD4\x78\xB0\x91\x4B\xDA\x4B\xB8\x5D\xEB\x57\x5B\xD2\xFA\xCD\x06\x6D\xB9\x28\x08\xFB\xCE\xFA\xE4\x4C\xF5\xBD\x30\x99\xC1\x86\xDF\xDC\xDC\xBC\xA2\x75\xD2\x6F\xDE\x2D\xDA\x63\xFE\xAB\xF7\x6B\xF8\xCD\x73\x5C\xC0\xEB\x6E\xCE\x0B\xD5\x0B\x33\x69\x27\x7E\x42\x0A\x3F\xEC\xA2\x22\xCC\xD7\xD2\x09\xD6\xA6\x5C\xA7\xEC\x24\x07\x95\x70\x19\x4E\x3C\xF3\xF7\xC8\x75\x7F\x27\xD6\x23\xE2\x41\xE0\xF6\x9B\xF9\xAF\xE1\xFD\xC3\x23\x09\x2D\x62\x33\x94\x7E\x7F\x72\x11\x46\x81\xC3\xA4\xDE\x2E\x2F\xC6\x9D\x1A\xD3\xA5\x64\x3E\xDB\xF0\x77\xEE\x5D\x77\xD2\x3F\x61\xFD\x18\x37\x7E\xAF\x5C\xF7\xF7\x70\xE3\x2A\x36\x6E\x09\xDA\x81\xF3\x31\x68\x25\xB4\xD7\xA0\x2C\xC8\x59\xC5\x51\x4C\xC9\xB8\x01\xE5\x2F\x5B\xC7\x5E\x6F\x82\x41\x55\x14\x71\xD3\x7F\x55\xC5\x51\xC1\x67\xDF\x4E\x90\xAF\x2E\xC6\x27\x49\x9E\x72\xA4\x8B\xB9\x7D\x51\x03\xBF\xCA\x0D\x7C\x8E\xFB\x4D\x53\x9C\x8B\x91\x4A\x3F\x51\x49\x9F\x8A\x81\xF6\x79\xB9\x82\xF7\xBB\x97\x40\x86\xD2\x94\x2A\xEE\x09\xEB\x3E\xDB\x70\x99\x1F\x6E\xF8\xCD\x7B\xF4\xFA\xB1\x00\x2D\x27\xBD\x06\xDE\xA4\xB0\xBC\x95\xFF\x92\x5C\xF7\xF7\x62\xF7\x01\x56\x05\x26\x79\x87\x5F\xEC\xDA\xC1\x89\x33\x55\x9C\x89\x4A\x67\x22\x13\x50\x4C\x81\x93\xDA\x2D\xFC\xBD\x82\x00\x74\xDE\x6A\x07\xCE\x9D\xB5\x51\xF4\xE0\xBC\x97\x9A\x51\x17\xE3\x93\x14\x58\x8A\x29\x24\x69\xB5\x4F\x3A\x32\x7D\x40\xAD\xDE\x80\x0F\x32\x7F\x9F\x5C\xC1\x7B\xDD\x0B\x00\x45\x4C\x12\x57\x00\x14\x87\x00\xC5\x47\xC0\x12\xB9\x57\x30\x18\x7D\xB6\x71\x0C\x41\x7C\x8C\xAA\x5B\xBD\x4D\x52\xE4\xF9\xFD\xE2\x62\xCA\x35\x81\x85\x79\x89\x0B\xF8\xFB\xF7\xF2\x4D\xF8\x70\x53\x62\xC9\x37\xB8\xCA\x8E\xFB\x3B\xE1\x4A\x78\x15\xDE\xE4\xEA\x64\xC9\xAB\xE8\xEB\xE3\x87\xC7\xFD\x3D\xF8\x6A\xF8\x30\xB6\xE4\x35\x25\x1F\x8F\x77\xB0\x52\x8D\x7F\xC4\x71\x7F\xEF\xDC\x0F\x62\x7B\x5D\x0B\xA6\x7A\x11\x1E\xC9\x4C\xC8\xAB\x8F\x08\x83\xB2\x15\xD1\xB9\x92\x86\xF5\x88\xF8\x60\xCD\xE0\x64\x38\x8B\x06\xE9\x9C\xE2\x90\x4E\xB4\x91\x7D\xD1\x29\xF4\x9D\x72\x9D\xCB\xE5\x69\xAA\xFC\xA2\xC9\x69\x00\xF5\x05\x09\xDA\xDE\x45\x58\xB6\x94\xED\xED\x18\xFD\xAF\x9C\xBC\x70\x81\xAC\xAF\x9B\x1A\xD9\x2A\x1F\x3D\xDC\x0F\x2A\x01\x57\xBA\xFC\x69\xE0\x8A\xDF\x72\xF1\x48\x7A\xE9\xD4\x86\xFF\xD5\xCD\x4D\xB3\x4E\x59\xA9\xA8\x60\x85\xDF\xBC\x47\x5C\x84\x87\x3D\xF7\xDF\xAF\x41\xCB\x28\x57\x43\xED\x18\x3F\xBA\x78\x24\xFC\x4F\x93\x2C\x14\xEC\xFA\xF1\x3D\xB7\x3A\x52\xF8\xD6\xCF\xCA\x4B\x47\xC2\x5F\x86\x09\xD9\xA9\x28\x4D\x78\xE5\x26\x19\xDE\x39\x75\x00\xDE\xB9\xE7\xE4\x58\x7B\x35\xF5\xD2\xE6\x9D\x22\xBC\xF5\xFC\x3B\x31\x2B\xCA\xE6\xA1\xB1\xF6\x7A\xEA\xB5\x5B\xBA\xD7\x5E\x4B\xAF\x7D\xE0\xED\x13\x72\x7D\xEF\xBD\xF7\x86\xEE\xBD\x7B\xE8\xBD\x3F\xC5\xF7\x6C\xFA\x1E\x4C\x7A\x65\xA4\xFC\xE6\x4D\xF0\x28\xA3\x7A\x29\xD2\xFF\xA5\x70\xEA\xB8\xC7\xE2\xA1\xDA\x89\xD6\x29\x9F\x1D\xF1\xD7\xFE\xFC\xE6\xA6\x68\xBF\x5B\x8A\x67\x2E\x73\x18\x8A\x7F\x0E\x22\x4A\x20\xC3\x63\x77\xF5\xEA\xE5\x52\xE6\x13\xFF\x36\x45\xBA\x24\x7A\x88\xA8\x35\xAF\x9E\xEE\x54\xDB\x68\x3E\xE3\xDC\x77\xA4\xB1\xFE\x36\x6C\x0F\x8F\xAF\x9D\xB8\xB8\xC9\xD1\x9F\xCB\x38\xEB\xDF\x1C\x1E\xA0\x1F\x12\x7F\xE0\x7F\x3B\xBE\xAE\xFC\xE6\xE6\x5D\x7C\x4C\x2A\x5C\xB6\xE6\x4F\xAE\xB7\x5E\xB6\x98\xEA\x5E\xC0\x1F\x43\x45\x4B\xF0\x6C\xC1\xE5\x0B\x0D\x16\xBD\x73\xA2\x7A\xE9\x43\x34\xB4\xDB\xE7\x0C\x8D\x07\xE6\xB2\x1D\x8C\xEB\x1C\x90\x5D\x4C\x17\x30\x05\x5C\x53\xF8\x67\xB5\x7B\x94\x12\xB2\xF2\xE8\xCE\x4D\x32\xC4\x1D\x5A\x99\x89\x3A\x39\x2B\xE8\x90\x2F\xCA\xC9\x76\x4F\x01\x12\x8E\x90\x46\x65\x55\xF4\xA3\xB3\xA7\xF1\xA3\xD3\x74\x22\x5E\xBF\x81\x2C\xE2\x2D\x9D\xC5\xE3\x55\x4B\xBE\x75\x45\xEA\x0C\xD7\x73\x84\x1B\x66\x55\xD7\x91\xD9\x65\x47\xD4\xB8\x99\xDF\xF8\xA5\x23\x8B\x35\x6E\x31\xB1\x82\xBC\x12\x2B\xBA\xDC\x7E\x2A\xC9\xFF\x88\x1E\xFF\xFE\x9D\xBF\xF5\x8F\xD7\x3D\x6B\x6F\x70\x17\xA7\x4B\x34\xC6\x4A\xFF\x0B\xD7\x6C\x16\x47\x30\x67\xCC\x95\xEC\x30\x86\x9A\x2D\xB0\xA6\x2E\xD2\xA4\xE0\x84\x17\xAF\x5B\x9A\x9C\xC0\x8A\x23\x49\x6C\x40\xB0\xF6\x3A\xF5\xBA\x1F\x0D\x47\xFD\x18\x27\x40\x45\xE7\x93\x69\x58\x97\xFD\x00\xEC\x0A\x74\x5A\xC7\x11\x01\x34\xA3\x21\x79\x39\xBD\xCC\xA8\x9C\x50\xA7\x48\xA4\xA0\x10\x21\x45\x79\xD7\x26\x63\x85\xC1\x71\xD0\xAF\x37\x31\xAC\x93\x5D\x9B\x3A\x52\x20\xB3\xB4\x45\xE7\x6F\x15\x0B\x43\x65\xE9\x1B\x9A\x0A\x4F\x6A\x54\x87\x56\x67\x9A\xCC\x66\x5A\xCB\xBA\xD6\xEC\x4C\x43\x16\xED\x9A\x54\xE9\x6F\x35\x98\xCB\x7A\x94\x67\x41\xB4\x2E\x59\xB6\x56\x22\x23\x8C\x61\xA6\xF4\x35\xCE\xC4\xF9\xBF\x66\x4E\x01\x64\x4C\x4E\x67\xA2\x97\xEA\x35\x64\xF3\x18\x19\x82\x06\xA5\x44\xA2\x1C\x31\xAB\x58\x65\x5A\x5E\xBC\x37\x3A\x2E\xE7\x84\xBB\xCC\xE5\x2E\x5B\x6D\x8A\x85\x14\x8B\xE5\x92\x18\x0F\x60\xDA\x2E\x63\x07\x51\xC5\x98\x1C\x38\x3B\x8B\x49\xBC\x2F\xBF\x57\x15\x3F\xCA\x56\x3E\x7E\xA2\xA8\x46\xCE\x6D\x3C\x2C\xEB\x4A\x37\x00\x24\x0F\x00\xC9\x83\x1E\x92\x91\x52\xFD\xC4\x15\x2E\x73\xF9\xEA\x02\x4F\xFB\x2D\xA7\xBA\x64\xA4\x6F\x65\xC5\xE0\xFA\xBB\xBA\x94\xE9\x6C\x8F\xBB\x84\x32\xDB\xBC\xE1\x54\xE2\x52\x69\xC8\x4B\xA2\x38\x3A\xE3\x7F\x4B\x59\x22\x69\x54\x14\xF5\x43\x90\x10\xEC\x92\xF8\x60\xB4\x66\x62\x6B\xAB\x62\x3A\xBD\x09\x26\xBE\x97\x98\x6E\x04\x5D\xE6\x02\x5A\x05\xA5\xB9\x77\xB2\xBE\x8E\xA7\xFA\xAE\xBB\xD2\xEC\xF0\x5F\xE8\xE5\x57\x99\x1B\x1A\x9E\xB2\x32\xAC\x75\x28\x95\xA6\xD2\x6F\xA0\xCF\x76\xF1\x66\x31\x09\xBF\xC2\x22\x28\x4C\x4F\x43\x2A\x43\x71\x1D\x1D\x4C\xAE\xE0\xD1\x7B\xD1\x62\x86\xC7\xDE\x50\x04\xE6\xE9\xA6\x34\x51\x68\xD8\xAC\xC8\xE3\x62\xA4\x9C\x39\x47\x0B\x3A\x17\x52\xCE\x62\xE4\xC7\xFF\x3D\x62\x6F\x15\x7B\x33\xC7\xC9\x61\xA6\xEA\x08\x60\x4E\x06\x6C\x66\xC0\x2B\xC3\x69\x78\x57\x26\x3B\x78\x36\x0B\xCE\xFF\x44\xA7\x06\x18\xE2\x70\xBA\xD6\xC4\x56\xAD\x99\x50\x3E\xDD\x51\x6A\xC8\x29\x13\xF8\x5B\x95\x52\x13\x35\xEB\x83\x32\xBD\x75\x04\xD4\x6A\xDC\xAB\x10\xB5\xFB\xF9\xFC\xAB\xC3\x2C\x7A\xA4\x20\x78\x47\xAA\x9A\x45\x86\x50\x92\xA1\x2A\xA6\x40\x3E\xD4\x01\x4B\xB1\xA5\x3A\xB6\x84\x17\x63\x74\xFC\xD1\xE8\xE7\xD2\x18\x18\x81\x68\xEC\x0F\x61\xAA\x2A\xFB\x64\x84\x78\xDA\x5E\x15\x5C\x5D\x30\xDA\x98\x7E\xC9\x2D\x42\x5D\x75\x9A\x45\xE1\xF7\xB6\x4F\x22\x90\xF8\x93\xFC\x9E\x91\xD5\xC4\x89\xFA\xB7\xC2\x32\x42\xB7\x3D\xBC\x42\x8F\xAB\x06\x7D\x11\x8A\x06\xCB\x19\xAD\x2E\x34\x59\x72\x7E\x8B\x21\x9E\x5E\x6F\x34\x45\x8B\xCC\x84\x9C\xD9\x60\x4B\x25\x56\x52\xC2\xA4\xE3\xCD\x66\xC0\xC8\x2F\xBD\x18\x03\x29\x0E\xC3\x9A\x2D\xFB\x64\x50\x06\x32\x28\x01\x84\x83\x8E\x0C\x30\x8F\x58\x49\xF5\xAD\x87\x80\xB5\x12\x08\x6B\x58\x25\x3D\x77\x9D\x04\xF7\xB3\x12\x31\xB2\xF3\xC6\x91\xC6\xB0\xE1\xAA\x72\x43\x57\x25\x73\xE1\xCC\xDC\x59\x28\xC7\x5F\x02\x4C\xD0\x4A\x41\xF5\x08\x2F\x5E\x20\x0B\x06\x8E\x83\x82\xDE\xB8\x0C\xAA\x1B\xC4\x24\xA0\x7C\x13\xFD\x09\x7D\x31\x1E\x78\x89\xCE\xA9\x08\xA7\x41\x1B\x5F\x73\x03\x20\xB0\x41\x70\x64\xEB\x6A\x73\x62\xC2\xAA\x41\xE5\x06\xF4\x5E\xE5\x54\x6C\x57\x27\x1D\xEB\x79\x1D\xEB\x39\x1D\xEB\xED\x3B\xD6\xB1\x63\x3D\xDD\xB1\xE6\x0F\xCA\xEA\x33\x39\x56\x0B\x5D\x54\xC3\xB1\x8A\x75\xEA\x35\x56\x88\x74\xDA\x63\x89\x73\xBD\x24\xCE\x57\x26\xD4\x3F\xD6\x98\x2A\x18\x83\xCC\xBD\xD9\x48\x2C\xA4\xBA\x0B\x3E\x0E\xE5\xD2\xF1\xB4\x89\x3C\x16\xCF\x51\x58\xF0\x9E\xE3\x54\x83\xAB\x62\x18\x61\x80\x00\x6D\x90\x71\x94\x2E\x94\x50\x11\xD1\x47\x71\x7E\x34\xA6\x0A\x45\x98\x54\x12\xBB\x8B\x0D\x6E\x11\x6F\x19\xBA\x64\xE7\x50\x04\x90\xF2\x43\xF4\xE3\x81\x05\x92\x93\x0B\x19\xAE\x11\x50\xCA\x4E\x10\x4F\x40\x41\x30\x96\xF8\xC7\x1A\xDA\x0A\xDE\x0D\xC8\x50\xD0\x3E\x08\x28\x98\x10\x0D\xA6\xFB\xAC\x16\xE3\xBD\x26\x54\x2F\xEC\x28\x36\x13\x5A\x10\x17\x45\xEC\x80\x9C\x01\x5D\xE1\x8C\x5D\x06\x50\xCA\x02\xD1\x76\x78\x94\x7D\x34\x51\x21\x4F\x27\x08\x4D\xA2\x87\x26\xB1\x15\x9A\xC4\x7C\x34\x89\x6D\xD0\x24\x12\x34\x89\x59\x34\x89\x88\x26\x39\x83\x26\x39\x0F\x4D\x62\x3E\x9A\xE4\x16\x68\xA2\xF4\xC8\x84\x28\x11\x10\x25\xBD\x44\xDF\xFE\x8C\x82\xEB\xA9\x3A\x71\x1F\x51\x79\x8A\x28\x89\x0E\x10\xB1\xE0\xCE\x16\x88\x32\x80\x28\x13\x11\x95\xF7\x11\xC5\x67\x9F\x06\x11\x95\x1F\xE4\x94\x74\xE3\xE0\xB2\xCD\x03\x5D\x4D\x32\x3A\x22\x1B\xCE\xA3\x83\x5A\xC8\xE1\x8C\x6E\xD2\x28\xF4\x59\xF4\xAA\x50\x97\x30\x0D\x92\xAF\xF4\xD8\x56\xB1\x8E\x10\xAE\x6E\xE2\x63\x19\xED\xF3\x45\xE7\x6B\x4C\xCD\x5F\x1A\x2A\x2A\x1B\x2E\x48\x0B\x62\x1E\x90\x0F\x55\xA7\xCD\x9D\xBD\x78\x6F\xE5\xB2\xEA\x06\xA5\xE5\x44\x9E\x48\xE5\x1B\x39\x9D\xCC\xA1\x5F\x3A\xE8\x1C\x5D\xDC\xC1\xCE\xDE\x53\x02\x14\x48\x31\xCF\x23\xFE\x2B\xFC\xA7\xD3\x6D\x4F\x7E\x97\x2E\xC8\x02\xF1\xBC\x77\xC6\xDB\x9D\x37\xFF\xD4\xB9\xC0\xDB\x1A\x7D\x73\x23\xC8\x60\xF8\x9B\x6F\x5C\xBC\x92\xF5\x21\xE1\x8B\xE3\x70\xB3\xBB\xAE\xA7\xAE\xF7\x1F\x0F\xBF\xF5\x92\xBB\xEE\xE6\xF4\xA1\x5E\x5A\x9C\xBE\x71\xDE\xF4\x8D\xC7\x5C\x77\xF3\x95\xD5\x2D\x56\xAB\x89\x3C\x39\x27\xBB\xC5\xE9\x04\xBE\x10\xCE\x8E\x6B\x89\x3C\xC4\x50\xB4\x19\x6E\x2F\x0B\x76\xE2\x87\x9C\x2F\xF1\x91\x94\x37\x47\x58\x1C\x69\x5A\x93\x41\x10\x04\xE1\xC3\x2C\x4D\x50\xFC\x58\x92\x27\x40\x1E\x49\x25\x41\xC3\x92\xA0\x08\x35\x4B\xC2\x68\x1B\xBB\xCC\xEF\x84\xCC\xA4\x68\x41\x40\x2B\x22\x9D\xF7\x62\xF1\xCD\xE5\x91\x41\x95\x30\x0B\x4D\x44\xF1\x8F\xE9\x92\x98\xC2\xD1\x26\x87\xA5\x8D\x5C\x04\x1D\xBD\x33\x72\x85\xCF\x7A\x12\x3B\xDA\xF0\x83\x03\x20\x79\xE0\x62\x93\x34\x1E\xE2\x72\xF2\x12\x96\x15\xC7\x19\x0E\x2B\x43\xE7\x60\x12\x2D\x71\x70\x68\x54\xB7\x97\x8E\xF4\x50\x44\x41\x92\x2B\x3C\x26\x53\x93\x3B\x99\x9A\x4E\xA7\x26\x77\x3E\x35\xB3\xC3\xA9\xC9\x99\xA9\x89\x1D\x4D\x4D\x25\x53\x9B\x92\x91\x1F\x4F\xCE\x19\x32\x10\xE2\x89\x70\x7C\x82\x2E\x2D\x9D\xC5\x59\x6D\xF8\x5B\xDF\xC9\x86\x1E\xCA\x3D\x8C\x15\xC1\x75\xDC\xE3\x65\xDC\x3C\x42\xC1\x3C\xDA\x3C\x54\xD8\x3C\x38\xE2\x58\xF2\xE6\x21\xBB\xCD\x43\xF7\x4A\xC3\xF3\xA1\x0E\x15\xE9\x50\x54\x9A\x8B\x37\x0F\x66\x8A\xEC\x91\xA9\x92\xCD\x03\xD9\x32\x81\x2A\x8A\x40\x4E\xA7\x7B\xFC\xE9\xDD\x47\xF1\x0C\x32\xF1\x8C\xEC\xF9\x82\x4E\xF9\x81\xA6\x02\x1B\x49\x5F\x92\x03\x40\x68\xEB\xA0\x62\xB1\xB4\x75\x48\xDE\x3A\xC8\xB3\x25\xDD\x3A\x2C\x70\x78\xDC\xE3\x79\x9E\x0D\x8C\x2A\x6E\x1D\x12\xB6\x0E\x19\xF6\x78\xC3\x5B\x87\xEE\x6F\x1D\x8A\x8B\x2F\xE0\xD6\x81\xF9\x96\x39\x6A\x64\xA6\x80\xBB\xAA\x3E\x24\x63\xC1\x8F\x82\xEC\x0F\x43\x76\xB5\xC1\x9C\xF8\x7E\xE0\xF4\x42\xA3\x49\x40\xD3\xC9\xD6\x1E\x93\x0D\x74\x26\x60\x1D\xB7\x78\xDD\x06\x83\x02\x63\x89\x4D\x03\xC9\x16\xDF\xA8\xDE\x26\xCF\x29\xBA\xDE\x1B\xBD\x52\xD0\xB1\x88\xF6\xFA\x58\x68\xB8\xF0\xFB\x3B\x99\xF1\x75\xE7\xEB\xC2\x69\x7F\x8D\x7A\xAC\x0C\xA5\x72\x10\xB4\x31\xF7\x3E\x66\x9C\xFD\x03\x8D\xD3\x9B\xB5\x0C\x52\x96\x0F\xB4\xD1\xB0\x81\xC6\xAB\x95\x91\x81\x5F\xF5\xF2\x88\x14\x4E\x1A\x0E\xE8\xC6\xF0\x9C\x79\x6F\xB8\xAB\x79\x8B\x96\xCB\x23\xD5\x49\x3A\x44\x2F\x41\x8E\x16\x89\x1C\x2D\x39\x12\x88\x1C\xAB\x12\x39\x9A\x29\x78\x26\xC1\x0C\x31\x97\x2A\x50\x6F\xB7\x31\x36\x32\x75\xFC\x9B\x35\x2A\x06\xB7\x01\xAA\x3A\xDF\x93\x9E\x64\x70\x69\xA6\x58\x9E\x14\xDE\x5D\x38\xAF\xEC\xFA\xE7\xAE\xE5\x83\xD7\xB5\xD9\x5D\xD7\x55\xC8\x5E\x5C\x55\x7F\xA6\x99\x52\x01\xCA\x64\xF2\xA4\xD3\x34\x0C\xF7\x0F\x0E\x51\x5F\x93\xEB\xBE\x58\x89\x37\xE4\x69\x5E\xE9\xB4\x10\x8F\x95\xCB\xB4\x77\x81\x65\x71\xF1\x43\x52\xA3\x49\x62\xA2\x4C\xE0\xE1\x57\x11\x7F\x0D\xE3\xAF\x3A\xFE\xDA\x17\x7F\xED\x77\x7A\xA9\x38\x3F\x79\xFD\xAC\xB8\x7C\xBA\x50\xF8\x3E\xFB\xE9\x32\xE5\x38\x49\xF2\x2B\xA5\x46\xB2\xA4\x13\x05\xA9\x93\xD2\x0D\x10\x7A\x90\x5D\xD8\xFA\x77\xC2\x7B\xB8\xC9\x67\x55\x78\xDD\xC6\x44\x46\xB8\xF8\x22\x17\x9B\x49\x4D\xB0\x33\xB1\x5A\x45\xC1\x3A\x64\x41\x98\x19\x56\xDA\xD5\x5C\x69\x1B\xA3\x54\xA4\xEE\x8C\x73\x3A\xD2\x54\x5F\xD1\xEF\x85\xA9\x25\xC6\x39\x83\x59\xB6\xF7\x56\x9D\x41\x9E\x0B\xB6\xA3\xFF\xF7\x9D\xC8\x12\x87\xA1\xF4\x26\x65\xE4\xE6\x9C\xDD\x16\xF1\xD7\xC5\xBA\x24\x1D\x36\x1A\xBB\xA4\x9D\x81\xD3\x6D\x44\xB1\x18\x83\xD1\x14\xD5\x1E\x32\x4D\x00\x15\x45\x71\x4F\xBD\xC6\xA1\x50\xE3\x60\x59\xD3\xE8\x1E\x8B\x9D\x73\xAD\x90\x30\xD2\x83\x6A\x58\xFD\x82\xC6\x92\x9A\xCC\x1A\x6F\xFF\xBE\x9F\xC2\x7F\x9F\x7C\xC2\x2B\x9C\xBC\xFD\xA7\x46\x62\x9A\x4C\x55\xC7\x8B\x83\xDF\x1D\xEB\xCA\x0D\x26\x23\xD7\xC8\xFD\xC2\x1A\x94\x9E\xD5\x8E\x49\x8B\xDA\x80\x0C\x1A\xA4\x8C\xD5\x44\x0C\xB1\xA0\x10\xC9\x3D\xB5\xDC\xB7\x89\xC9\xB7\x8D\x62\x2D\x21\x9E\x63\xF0\x71\x37\xF5\x80\x6A\x03\x01\x36\xC3\x8D\x95\x36\x74\x3C\xEC\xE4\x1D\x70\x0E\x6C\x25\xBC\x8C\xDD\xCB\x79\xAF\x05\xD8\xCA\x8A\xB5\x57\x0C\xDD\xC3\x39\xC2\xC4\x61\xFE\x3A\xC2\xD6\x75\xD1\xF2\x32\x12\xFB\x0C\xA3\x81\xFD\xEE\x1C\x65\xCE\x07\x62\x08\x1C\xE7\x2C\x29\x27\x5E\x75\x39\xCA\xF1\xC0\xD9\x63\x3D\x2A\x59\x7D\x17\x3C\x0C\xFB\x11\x06\x89\xD7\x33\x75\x81\xAF\x31\xB0\x39\xA9\xEA\xFF\x48\xDF\x95\x8E\x2B\xAD\xD0\xD6\x25\xAB\xEF\x80\xA7\xC3\x28\x29\xD1\xB7\x88\x40\x50\xA7\xA9\x85\xB7\x48\x2E\x18\x5C\xA4\x52\x15\x11\x03\x48\x78\x41\x6C\x0A\x46\x3F\x86\x03\x09\x3C\x41\xD2\xD2\x01\xDB\x92\xCA\x2C\x4F\x5A\x3C\x08\x91\x9D\xB0\xD1\x23\x87\x70\x30\x44\xE4\x10\x33\xB6\x74\xA2\x11\xDA\xF1\x29\x71\x50\xC8\xA9\x22\xC3\x4B\x2C\x5E\xDC\x3A\x7F\xDC\xF9\x37\x75\xDC\x9C\xED\x61\x76\xB4\xFF\x22\x53\x76\xA4\x92\x64\x76\x7D\x86\x94\xE4\xE3\xEA\xCC\xCF\xAA\x4B\xBA\x95\xB2\xA1\xBB\x91\x68\x63\x29\x44\xE2\x3F\xB4\x93\xCC\x6D\x9F\x0B\x47\x30\x03\xA7\x04\x47\x73\xD7\x88\x6E\x24\x4B\x4E\x92\x2B\x6B\xCC\x5D\x23\xA0\x24\x02\x5C\xD0\xFB\x17\x9D\x31\x0C\xC9\x84\x3D\xFE\xB3\x0B\x06\x94\x3F\x0C\x19\x90\x79\x48\x18\x90\xD9\x19\x03\x32\x33\x0C\xC8\x3C\x48\x0C\xE8\x6B\x68\x44\x39\xA9\x27\xD3\x4E\x7C\x89\x14\x5B\x16\x74\xD0\x58\x14\x39\xC9\xA9\x63\xB1\x15\xCF\x62\x8F\xF4\x24\x31\x7F\x46\x76\x97\xB1\xEA\xB8\x13\x71\x32\xE9\x14\x33\x29\x64\x40\x72\xEF\xEC\x8B\xF1\x0D\xD5\xBD\x41\xF6\xB2\xE4\x0D\x34\x5B\x75\x4D\x00\x4C\xF4\x46\x3F\x1E\x16\x53\xC4\xF3\x66\xCB\xBA\x9E\x4D\x0A\x32\xCE\xEA\x7A\x9D\x16\x31\x0C\xA1\x59\x08\xDC\x8E\x48\x25\x10\xFA\x90\x8A\x47\xC0\x10\x2D\x39\xF0\x50\xE9\x19\x3C\x37\x7F\x67\x38\x89\xAC\x7F\x9F\x0F\xE7\x7E\xF9\xAE\xB4\x6E\x02\xA5\x35\x7B\x22\x68\xC2\x75\x07\x19\x52\x52\xA9\x35\xD4\x61\x13\x96\x26\x66\x14\x5C\x74\xC5\x11\xF5\xFF\x26\xE5\xB1\xFA\x8C\x92\x76\x92\xAC\x23\x32\x77\x7B\x1C\x29\x59\xBD\x83\xEC\x39\x65\xE1\xB6\x9C\x59\xC4\x38\xCB\x16\x6E\x1B\x20\xD2\xD7\xEB\x66\x2C\xDC\x94\x34\xAB\x6F\xE1\x06\xC0\xB2\x42\xAB\x9D\x8A\xA9\x14\x35\xFD\xA2\x1A\x39\xCC\x16\xF3\x18\x43\x99\x60\x2D\x0B\xB9\x18\x7A\x58\xB3\x1C\x24\x8C\xD1\x2F\x72\xDE\x18\x83\x84\x9F\x60\x8D\x72\x09\x44\x90\x58\xC2\x9A\x75\x58\x43\xC8\x12\x80\xAC\xCB\x48\x6E\xCB\xE3\x50\xAD\x53\x2E\xE7\x7D\x87\x80\x0B\xD7\x3C\x64\x2C\x8D\x72\x26\xEC\xA8\x32\x56\x25\x91\x68\xB1\xAE\xBE\x6D\x6A\x17\x7E\x5D\x7F\x1B\x9E\xDA\xD0\xE5\x76\x1B\xFA\x19\xB8\x7B\xC0\xF7\x82\xBE\xA7\x42\x28\x91\xF2\x89\xE4\xB9\xB4\x01\xE5\x99\x42\x4A\xE4\x8A\x4B\xE4\xC2\xBB\xD5\x96\x7F\xAD\xA2\x4E\x50\x2E\xA8\xD3\xDA\x2A\x53\xE6\x77\x27\xAA\x5F\x41\x8F\xB3\x3A\xAD\xA3\x32\x45\xA2\x2A\x24\x1C\x76\x82\xCD\x2C\xA2\x33\xB3\xA8\x2E\xB3\x85\xC7\x0A\x2A\x88\x44\xE5\x04\x23\x51\x04\x24\x0A\x3C\xC6\x4C\x90\x58\x24\x89\x1F\x0C\xA7\xC7\x8B\xAA\x9E\xA3\x62\x77\xB2\x7A\x56\xBA\x80\x04\x89\x2B\x22\xAA\x58\x32\xD6\x74\x82\x19\xA1\x8A\x24\xA2\x96\x25\xA2\x96\x25\xA2\x96\x25\xA2\x96\x25\xA2\x96\x25\xA2\x96\x15\x7E\x9D\xE5\xC4\x74\xC7\xF9\x37\xAC\xE3\x5F\x92\x4A\x9E\x50\x13\x27\x6E\x1F\x4B\x5F\x50\x42\x22\x2C\x49\x30\x56\x4E\xF4\xB6\xD5\x9F\x18\x89\x6A\x7A\x5B\x15\x9D\x48\xA4\xBA\x6D\x95\x74\x4D\x04\x6A\xC0\x26\x2B\xA5\x22\xEC\xA8\xF1\x50\x48\xB4\xE1\x89\xE9\x27\x67\x72\xBA\xAA\x13\xAA\x95\x17\x08\x59\xBD\x4D\xCA\x6C\x92\xDA\x29\xBA\x23\x0F\xED\x31\x4B\xAF\xA3\x7C\x7B\x7C\x0E\xD1\x3F\xF2\xC8\x9C\x3C\xE3\x14\x8C\x95\x4D\x57\x7A\xAC\x9C\xA1\xAC\x3E\x7C\xEA\x91\xBB\x7C\xE6\xD4\xC3\xC2\x90\xAD\xCB\xD9\x74\x95\x34\xD2\x3F\xF8\xB0\x68\xBD\xC2\xC5\xCF\xD6\x23\xD3\xD5\x35\x46\xE2\xAB\xDE\xAB\x65\x36\xF1\x9A\xDC\x2D\x91\xC6\x31\x67\x15\x3A\xDF\x3B\x43\x7A\xFE\x61\x8E\xC2\x6B\xB8\x32\xAC\xF5\x0A\xCD\x6C\x30\x0A\x8A\xBB\x07\x40\x99\xA8\x5E\x92\xC1\x73\x8F\x15\x5A\x6B\x81\x26\x3E\x4A\x1E\x03\x70\xCC\x28\xD0\x9D\x0D\x75\xD0\x42\xCE\x0E\x3F\xE4\x7F\x3F\xB6\x8E\x19\xA2\xC1\xDC\x00\x19\xE5\x45\xC6\xAA\x66\xD9\x25\xC1\x97\xA6\x20\x53\x39\x79\xB6\x73\xEE\x4A\xD0\x37\xC3\x9E\x9E\x1D\x1E\xA1\x27\x6B\xA4\x0D\x43\xEB\x26\x6E\x0F\x58\x9E\x95\x54\x58\xE1\x0C\x91\xAF\x89\xE4\x6B\x22\xF9\x9A\x48\xBE\x26\x92\xAF\x89\xE4\x6B\x22\xF9\x9A\x8E\x7C\xD3\x74\xB5\x05\xCC\xBC\xE0\x04\x86\xCE\x8C\x31\xAC\x3C\xA4\x0B\x42\xE9\x27\xC3\x99\xE5\x71\x66\x79\xF0\x08\xC9\x30\x1C\x9C\x93\x54\x4A\xAF\x00\x79\x38\xB5\x15\x0A\x77\x74\x2A\x26\x75\xD6\x8C\xB9\x10\x28\xAB\xAB\xD7\x80\x24\xEA\x35\xF1\xA6\x88\x55\x4D\x58\xD5\x53\x58\x35\xCB\x5C\xDF\x1A\xB1\x6A\x88\xB6\x02\x56\x39\xD7\xEB\x1C\xAC\x46\x7B\xE4\xA4\x6D\x6C\x88\xAB\x8C\x2D\xD0\x16\x67\x02\x56\x4D\x30\x6F\x1A\xCE\x74\x6D\x29\x38\x2F\xCE\x5B\xF1\x39\x1A\x62\x94\x33\xC8\x36\xBC\x4C\x0B\x0E\x64\x29\x80\x88\x98\x7F\x1E\x1E\xA9\xA1\xA4\x6C\xB8\x21\x93\x51\x68\xB4\x23\x93\x2C\x00\xD3\x56\xCE\x06\x03\xC9\xAC\xB5\x42\x06\x7D\x84\x67\xEA\x6C\xCC\xA5\x1B\x74\x04\x34\x74\xAB\xDE\x53\xB4\xC9\xD0\x11\x0F\x4B\xC8\x64\x33\x45\x01\x6D\xD2\xB2\x45\x8B\xA3\x97\x29\x99\x0E\xFF\x0C\x15\x4A\xF7\x82\xBE\xF4\xA6\xED\x62\x9A\x77\xB8\x22\xBB\x35\x19\x17\x23\x99\xCC\xA7\x17\xA4\x31\x98\x19\x8A\x17\xA4\x4D\x68\x11\x16\xE0\xF7\x53\x3D\x5D\x5C\x8A\x32\xEC\x4B\x89\x9B\xA5\x48\x12\xED\x46\x04\xA9\xE9\xA4\xA9\xB4\x02\xF5\xCA\x68\xBE\x97\x17\xD9\xFD\xC3\x71\x12\x42\x2B\x3D\x36\xA3\x6A\x0D\x94\xE9\xA4\xE7\x9D\xD3\x3B\x5E\xF9\x0E\x2E\x35\xF6\xA5\x50\xB6\x13\x15\xD1\x77\x6C\x62\x4D\x09\xBC\x59\x55\x8F\x14\xF1\x0D\x27\xEA\xBF\xC6\xA5\x71\xFB\xA0\x17\x07\xAD\x43\xCE\xFC\xA5\xB8\x41\x23\x47\xE0\xA9\xA3\x1B\xF2\x9D\x78\x28\xFA\xCB\xD7\x60\xCA\x98\x59\x1D\x82\x4B\x3B\xC2\xFC\x48\x89\xC8\x6D\x56\x54\xD1\x29\x89\x16\xD8\xE1\x51\x0E\x64\x7B\x8C\xC4\x50\x76\xE9\xD1\x40\xAA\xB4\x13\xD4\x1F\x0E\x12\x24\xC6\x38\x3B\x4D\x18\x97\xEB\x4D\xB1\xC0\xC7\xCC\x5E\x1E\x77\xC5\x42\xFD\xD2\x6B\xB8\x3A\x06\xBC\xC2\x29\x7A\xE0\xA3\xFA\xF9\xD7\x50\x66\x17\xD4\xA4\x92\xBA\xF6\x43\x1E\xC2\x9A\x57\x57\xAD\x8E\xC4\xB0\xC0\xCA\x7B\xEF\xC0\x49\xFD\x62\x68\x4C\x1E\x10\x8F\x59\x4E\x66\x4B\x0F\x2A\xAC\xF7\xB3\xAF\xAD\x3F\x92\x8E\x0E\xE6\x41\x03\xCC\x60\x80\x8A\x07\x98\xC1\x00\xD5\xE9\x07\x28\xFC\x5D\x49\x17\xC3\x6C\x17\xA3\x01\xE5\x65\x91\x4F\xB3\xC7\x2D\xBC\xE6\xE2\x18\xA4\x3F\x9B\xB6\xC2\xDE\x30\x9C\xF0\xBF\x9F\x34\x81\x2D\x7C\x0F\xB7\x70\x00\x5B\x38\x37\x69\xE1\xBC\xF9\x2D\xF4\xC6\x6B\x1F\x00\x50\x3A\x90\x98\x04\x24\x43\x43\xAC\x94\x2D\xE4\x54\x90\x18\x4D\x32\x8A\xDB\x3B\xEE\xB0\xD1\x9C\x82\xFD\x1A\xE3\x8F\x5E\x3A\xA2\x63\x3A\xCA\x38\x83\x7C\xB6\x5A\xC5\xA8\x94\x33\x5A\x7F\x74\xBD\xB1\xF5\xCF\x5D\xC3\x21\xB7\xBC\xFB\xC3\xA2\x3E\x46\xC5\x44\xCD\x41\x55\x50\xCD\xAE\xCC\xCB\x0D\x52\xA0\xE4\x31\x60\xAD\xCB\x94\xC1\xBF\xC0\x73\x14\x97\x2F\xB8\x8C\x33\xD6\xE0\x56\x14\x42\xE3\xFD\xDD\xEF\xC4\x93\xB6\x08\xA1\xAF\x0B\x04\x3A\x05\x81\xAE\xC8\x12\xCE\x3D\xAB\xD8\x8A\x59\xE0\xEC\x3C\xD0\x8A\x09\xAD\x20\xF3\xF0\x7F\x3C\x45\x35\xE9\x8A\xC3\xB3\x0A\x4D\x67\xBF\x53\xAB\x0B\xC6\xD9\xD8\x64\xA4\x26\x1D\xA9\x39\x3D\x05\xC7\x45\x05\x4B\x8A\x4E\xA6\x28\x9D\x10\xFA\xAA\xF8\x77\xA7\x04\xC7\xBE\x01\xDB\x2D\xF3\x3C\x5D\xE6\xF9\xEE\x96\x79\xB0\x83\xA4\x23\x62\x65\xDE\xFF\x69\x4A\xB6\x18\x58\xF1\x87\xE9\x6A\x4A\x59\xDC\x9F\xF7\x17\x7D\x64\xB4\x7B\x2B\xA7\xEB\x1B\xE0\xB6\xA8\xFE\x26\x97\x76\xC2\x8C\xD2\x53\x4A\xEC\x22\x1A\x9E\x64\x4B\x89\x9A\x3A\xE7\x71\x64\x5E\x96\x72\x61\x7B\x79\xFC\xD2\x91\x0E\x1B\xB8\xA6\xFC\x0C\x74\x90\x75\xE9\x88\xCF\xD2\xC8\x5D\x1C\xA4\x9A\x24\xED\xA4\x13\xFE\x83\xA2\x7E\xD9\x35\xA8\xFB\x13\x20\x48\x32\x29\xE8\x6D\xA4\xEB\x05\xFA\xC4\x9F\xBB\xDB\x0F\x2E\xD8\xED\x07\xCD\x6E\x3F\x78\xFC\x6E\x3F\x78\xDC\x6E\x3F\xF8\x3F\x77\xFB\xC1\x5F\x8B\xDD\x7E\xF1\xA1\x5D\x7F\xF1\xE1\x5D\x7F\xF1\xDD\xBB\xFD\xE0\x83\xBB\xEE\xE2\xCB\xBB\xFE\xE2\xAB\xBB\xFE\xE2\x2B\xBB\xFE\xE2\x3B\x77\xFB\xC1\x77\xED\xF6\x83\x27\xF4\x3F\x00\x46\x9B\x91\xEF\x09\xB7\x40\xF1\xF4\x43\xD0\x05\xEF\xC9\xBA\x10\xFE\xF3\xD6\x1A\xCB\xA2\xE8\x79\xB4\x9B\x80\xAE\xEA\x54\xFD\x51\x52\x48\x48\x77\x3A\xD7\x59\xEF\x5A\x07\x57\xE7\xB6\xF5\x67\x4E\x45\xD7\x34\x67\x17\xD5\xD9\xCE\xC2\x16\xAD\x70\x07\xF0\x72\x7D\x01\x35\x3E\xD7\x7A\xE1\x27\xFE\x7D\xB8\x89\x88\xFA\xBF\x5F\x43\x3E\xC1\x95\x93\xF5\xDF\x9C\xA2\x8C\x9E\xC4\xE5\x90\xC3\xD0\x07\x45\xD0\x7F\x85\xB3\xE7\x68\x77\xBE\xC2\xF4\x56\x36\x56\xF2\xB7\xB0\x6B\xD6\x9D\x0B\x1F\x89\xDB\x14\x47\x5A\xB7\xFE\xFD\x89\x08\x47\x1F\xD6\xAD\xFF\x60\x72\x33\x18\xBA\xF1\xD8\x32\x3F\x4C\xF1\xA7\xC7\x50\xFF\x04\xB5\xA2\x64\xCE\x96\xA3\x3E\x0E\xFC\x69\xC0\x3C\x39\xF7\xE4\xFF\x37\xC0\xC2\x38\xF0\x0B\xBD\x06\x07\x5E\x1E\xC7\x7B\xB2\x1D\xE7\x64\x30\xCE\xBD\x70\x03\x67\xBB\xF4\x37\x18\xD0\x65\x17\xD5\x90\xD2\xD5\xD2\xB0\x43\xFB\xD5\x54\xFB\x15\xB4\x5A\x41\xAB\x55\xE5\x06\xAE\x3A\x3C\x92\x55\xC0\x0B\x68\x34\x4B\x6F\xDC\xDC\xDC\xBC\xCD\xA0\x10\x4B\xA6\x3F\x0D\xBB\xF5\x77\xC0\x9F\x73\xC4\x47\x60\xAA\xE7\x0B\xC1\x72\xC6\x39\xE2\x53\xDD\x8D\x1A\x6F\xFC\x7D\x77\x63\x3F\xDE\xF8\xE7\xEE\xC6\xB7\xB7\x5E\x2C\x8A\xAF\xC1\x8D\x83\x02\xC5\x15\xEB\x72\x16\x7F\x00\x92\x58\x23\xC8\x15\xCE\xC6\xDD\x6C\xB0\xC0\x25\x89\x00\xF3\x83\x64\x37\xB3\xDD\x6E\x66\x93\xDD\x4C\xF9\x21\x68\x78\x25\xEC\x66\x65\x8A\x89\x35\x3F\x7C\x3A\x67\xC6\x83\x81\xDE\xD5\xDB\xA7\x2C\xB4\x71\x2E\x3E\xA1\x8D\x15\x48\xBF\xEB\xC0\x24\x1D\x18\x20\x1B\x14\xF1\x0D\xD1\x54\x20\x28\x22\xD4\x73\x83\xEB\xCC\xA7\x50\xB5\x09\xFB\xFC\x2C\x3D\x8A\xC7\x4A\xF2\x20\x3B\x20\xEA\x6E\x1E\xFB\xC3\x17\x40\xEE\xDD\xED\xC5\x78\xDB\x9F\x17\x8A\x06\xAF\xB2\xAE\x31\x74\x22\x54\xBC\x26\x7B\x19\x1D\x69\x09\x7F\xCD\xEF\xA3\x0A\x73\xB6\x13\x7E\x5F\x1B\xB4\x92\x6F\x85\x5F\x68\xD9\x5A\x0C\xF7\xAA\x57\x4A\x3C\x6B\xC2\xD3\xB9\x7D\x5C\x20\x5B\x2C\xAA\xBA\xC1\x8A\xE3\x32\xF5\x27\x22\xC3\x8C\xA2\x00\xA4\x68\xC3\x39\x20\x4C\x18\x2B\x49\x4E\x71\xB8\x61\xBA\x8B\xAA\xA6\x90\xA9\x7D\xE4\x5D\x62\x12\x03\x12\x05\x39\x5E\x15\x9D\xB6\xD8\x83\xF9\xA0\xDA\xE7\x54\x14\xF5\xAB\x7F\xD1\xF3\x74\x5B\x15\xF3\xEE\x0D\x03\xE0\x7F\x91\x4B\xD9\x2A\x0A\xD2\x57\xDE\x80\x40\x2A\x40\xD2\x55\x31\xF0\x16\x45\x5C\x01\x84\x90\x88\xB8\x19\x15\x10\x64\xEB\xD8\x90\x4B\xE6\x2B\x96\x77\x0D\x27\x00\x45\x41\xD7\x50\xB4\x5E\xE6\x88\xDF\x64\x98\xB8\x34\x08\xB8\x99\x13\x5D\xD6\x9E\xE8\x28\x66\x5A\x72\x39\xEB\x80\x25\xFB\xC0\x12\xCE\x24\xD6\x5D\x24\x2F\xFA\x38\xFA\xFB\xD4\x8D\x09\x28\x42\xAD\x9D\xF2\x04\x9B\xA4\x0B\x07\x1A\x7B\xFD\xA2\xB0\x48\xE8\x9B\xE0\x40\xB7\x6D\xEF\x32\x45\x55\xF0\xC9\xDB\xD7\x64\xCE\x74\xB2\xA9\x88\x79\xA7\xA3\x27\x9C\x69\xD3\x09\xCA\xA4\x08\xD5\x3E\x72\x8A\xAE\xA3\xBE\x58\xD1\x86\x71\xA2\x3D\xA8\xF6\x51\x95\xB8\x8F\xC7\x73\xDF\x8F\x9D\x9A\x52\xCC\xF7\x56\xCE\x04\x79\xF1\xDE\x6F\x93\xC5\x64\xB6\xEE\x75\x30\x08\x38\x52\xF0\xC4\x05\xC2\x39\x76\x3D\x13\xA4\xDC\x35\xAA\x6D\xE8\x6C\xD5\x9F\x4B\xB1\x74\xF0\xF8\x6C\xCC\x97\xA6\x92\x3C\xBC\x74\xC8\x4A\xBB\x5B\x5C\x16\xE8\x8C\x89\xA5\xEF\x0F\xAA\xB3\x81\xF4\xD9\x3E\x84\x8D\xF9\xF0\x18\xCF\xAF\x29\x1F\x8B\x72\xCA\x8B\x0B\x1B\xB5\xD0\x18\x5A\x80\x8B\xF0\x1A\xD5\xC4\x5F\x68\xD4\xC1\xAE\x51\xEA\x96\x5A\x46\x75\x05\x13\x8C\x91\x2B\xE4\x6E\xFF\xCF\x19\xFF\x57\x02\x93\x51\xF9\x1F\x69\xF7\x3C\xCA\xE6\x32\x9F\xF9\x67\x32\xDC\xCB\xFD\x73\x26\xED\x1E\x2D\x72\xA5\xF9\x40\xFC\x2C\x3C\x10\x3D\xCB\xD7\xBC\x2B\x1B\xBF\x87\x68\xFF\xE8\xA5\xA3\x9C\x9B\x57\xB4\x56\x14\xAF\x95\x2C\x6E\x14\x86\xB8\x0E\x2A\x3B\xC7\xD0\xD2\x09\xBB\xC5\x90\x72\xC0\xAB\xB8\x4A\x2C\xAC\x74\x85\xAB\x04\xD3\xE1\xC5\x55\xA2\x43\xE2\x98\x84\xEF\xC0\xF2\xA2\x12\xFD\xFA\x52\x12\xF8\x09\x6A\xCA\x1B\xA4\x9A\x47\xD1\x0A\xAC\xDB\x26\x47\xFE\xB3\xD6\x64\x5E\x5D\xD5\x60\xCC\x8B\xF2\x40\x15\xE6\xD2\x11\xF9\x11\x61\x0E\xD1\xB5\x46\x7B\x79\x55\x93\xC3\x76\xBB\xBA\xE0\xEF\xBF\xFF\xFE\xFB\xB5\xD3\x40\xCF\xF0\x53\xAE\x2E\xF0\xC1\x3E\x65\xE4\x0A\x0D\xEC\x47\x27\x3A\x9E\x28\x9E\xD3\x63\x2E\xEC\xA6\xA0\xE1\x28\xF2\xB1\x1B\x1B\x57\x20\x1F\xC3\x98\x55\xB4\x56\x52\x69\xAA\x30\x41\x74\x97\xDC\x4F\x9B\xE8\x3E\xE2\x68\xB5\xB3\xCB\xA3\x33\x03\x5B\x1C\x9E\x59\x31\x16\x2E\x1C\xD9\x04\x09\x45\x44\x42\xF1\x70\x44\xC2\x99\x3B\x41\x42\xF9\x40\x91\xF0\x2D\x0F\x2D\x12\xF6\x45\x24\xEC\xEB\x90\x60\x12\x24\xEC\x8D\x48\x28\xBF\x81\x48\xD8\x05\x1A\xE4\x4E\xD0\x50\x3D\xCC\xD1\x20\x02\x1A\x22\x47\x9A\x00\x47\x1A\x3E\xB2\x72\x06\x15\x4C\x9D\xA0\xA4\x8C\x28\x19\x3C\x0C\xD7\x85\x13\xF5\x27\xD0\xFD\xF3\x91\xDF\x10\xC4\x9C\xF9\xD0\x21\x26\x96\xF7\x8A\xA8\xE1\x99\x3D\xA2\x4A\xB0\x91\x45\x6C\x54\x0F\x43\x6C\x0C\x1F\xB1\x13\x2C\x0C\x1F\x28\x16\xF6\x3D\xB4\xCB\xE3\x8C\xC8\xA5\xCE\xA8\xE6\x8B\x3B\x00\x1A\x74\x53\x40\x53\x18\xE6\xAD\xA4\x78\x49\x4A\x82\xCB\xD2\xCF\x8C\x50\x43\x22\x4D\x36\xAC\x41\x9C\x89\xB2\x8C\x89\xB2\x0C\xA0\x43\x5C\xD8\x98\x85\xA6\x00\xCD\x3C\x95\x65\xCC\x42\x93\x4D\xCB\x32\x00\xF2\xB3\x1D\x56\x68\x60\x89\xAB\xF0\xDF\xB9\x32\xDA\x9B\xD2\x0B\xFA\xDA\x66\xA0\x96\x22\xD1\x0C\x1F\x8E\x44\x73\xC6\x4E\x88\x66\xF4\x40\x89\xE6\x91\x0F\x2D\xD1\xD4\x91\x68\x6A\xCC\xDB\xBD\xA7\x72\xD2\xBB\x16\xD5\xF3\x45\x75\x1B\x69\x85\xE8\x04\x78\x8E\xBE\x05\xAE\xCE\xD7\x8B\x74\x75\x13\x5D\x39\x27\x51\x75\x5F\x54\x1F\xE8\x5E\x46\xE5\x5E\xBF\x87\xDE\xE0\xAF\xEF\xA6\xAB\x82\xAE\xEE\xE4\x67\x53\x84\x7A\x2D\xB5\x31\x24\xD1\x59\x46\xB2\x5D\xE3\x58\x12\x89\xA3\x23\xE6\x2F\x2E\x5A\xA8\x3F\x89\xAC\x66\x4F\x45\xAA\x0C\xAB\x00\x2E\xAF\x7F\x85\x7F\x7D\xE3\x6F\xEF\x6C\x42\x19\x4E\x28\x21\x78\x83\x46\x01\x24\xF1\xA3\x97\xC6\x13\xCC\x87\x15\xBD\x9B\x9D\xD0\xBB\x7C\xA0\xF4\x9E\x3D\xB4\xF4\xAE\x23\xBD\xEB\xAD\x30\x18\xB1\xA2\xBC\x78\xAC\x0C\x31\x24\x09\xA0\x4C\x1F\x50\xC6\xB1\xBA\x66\x3A\x61\xCB\x6C\x05\x28\xD3\x07\x94\x99\x02\x94\xD9\x0E\x50\xA6\x07\x28\x9D\x02\x0A\xB3\xA5\x07\x40\x29\x76\x14\x46\x40\xA9\x19\x40\x99\x29\x40\xA9\x1E\xA0\xCC\xAC\xB0\x25\xFD\x9D\xA2\xD3\xB4\x23\x9C\xEA\x17\x5C\x8D\x7F\xEF\x78\xA4\x1C\xCD\x26\x60\x45\x00\xA0\x15\x53\xB3\x3E\x6C\xFB\xBA\xA8\x3E\xB4\x9D\x4E\xBE\xA8\x16\x9B\xAC\x6D\x72\x76\xEA\x3A\x7B\x8C\x27\xF6\xE7\x8E\xCB\x9E\x36\x1E\xF2\xE6\xE0\xFE\x05\xBB\xD6\x62\xD8\x69\xF2\x16\x36\x23\xD8\xB7\x4A\xDC\xBB\x64\xB2\x77\xE5\x18\x59\x19\x13\x0E\x67\x2E\x83\xED\x2B\x5B\x68\x4A\xDA\xBE\x38\xF5\x77\x86\x7B\xD7\x62\x6F\xEF\xE2\x66\xD1\x38\x81\xD9\x4D\x39\x24\xB1\x24\x63\x77\x58\xEC\x45\x15\xBC\x50\xD6\xC9\x94\x52\xFA\x0F\x09\xCA\x2E\x76\x5F\x78\x67\xD0\x11\x5A\xE9\x07\x94\xD2\xF1\x28\xD3\x05\x22\x8B\x4F\x56\x69\xE9\xEB\x78\xB2\x5A\xBA\x0C\x96\x7E\x89\x07\x8A\x07\x31\xF9\x85\xE1\xA5\x5F\xF2\xC9\xAA\x71\x25\x2C\xFD\xF4\x64\x75\xCE\x89\x6A\x67\xB5\x11\x8B\x6A\x3F\xD1\x72\xE6\x4A\xA2\xE5\x8C\x69\x79\x80\xCE\xD1\x48\xF5\x6B\x4D\x01\x64\x8C\x47\xFC\x59\xA4\x42\x1A\x2C\xC8\x03\x4C\xC6\x16\xC8\x6B\x3B\x32\xCE\x7A\x64\x6C\x53\x32\x46\x57\x6C\x0C\xA7\x6D\x72\x1A\x49\xC6\x64\x5C\xA2\x49\x9A\xCA\xC1\x73\x42\x05\xAC\x33\xDF\x91\x71\xD9\x23\xE3\x0C\x1D\xA6\x96\x47\xA5\x33\xBC\xDE\xB1\xE8\x8A\x26\x8C\x24\x90\x1F\x46\xC8\xDB\x6F\x16\xE4\xCD\x3C\xC8\x63\x6D\x34\x39\x36\xC0\xA7\x18\x03\x05\x40\x78\x4B\x0C\x18\x57\x60\xB5\x84\xAB\x9A\x81\x1B\x24\x18\x30\x29\x06\x4C\x87\x01\xD3\x61\xC0\x6C\x8F\x01\x93\x62\x80\x12\xCB\x31\x06\x8A\x90\x22\x3E\xC5\x80\xE9\x30\x10\x26\xE1\x8A\xE5\x91\x72\x6C\x16\xC7\x59\x61\x40\xA4\x75\xA5\x1F\xAF\x1C\xF3\x72\xBD\x87\x92\x3C\xA2\x24\x7B\xB8\xA1\x24\x24\x9F\xFB\x7A\xD0\xD2\x5F\x18\xDF\x64\xB4\xC4\x89\xF4\x51\x23\x02\x6A\x98\xB3\x96\x87\x47\x91\x69\x96\x69\x3E\xE9\xD2\x4F\x9E\x38\x12\xAE\xF4\x07\xB8\x5E\x83\x18\xE7\xCC\xBC\x9B\x01\x39\x8A\x97\xA0\x6B\x24\x22\x4E\x15\xD1\x9A\xCF\x47\x6B\x95\x88\x37\x19\x89\x37\xD5\x1C\xF1\x26\xEB\x8B\x37\x19\x8B\x37\x29\x5A\x75\x87\xD6\x29\xC4\x16\x84\x58\xD3\xE7\x72\x32\x22\x53\xAF\x35\x15\x20\x73\xD8\x43\xA6\x61\x64\x16\x4E\x03\x17\x94\x57\x35\x23\x37\x4A\x90\x59\xA4\xC8\x2C\x3A\x64\x16\x9D\x54\x53\x4C\x21\x73\x88\xC8\x1C\xD2\x48\xE8\x31\x10\xE9\x10\x90\x59\x74\x05\x1C\x81\xB3\x56\xB3\x52\x4D\x91\x70\x39\x3E\xCA\xA0\xCD\x3A\xC2\x3B\xF3\x23\x68\xB9\x4C\x2D\x83\x25\xC1\xBB\x9C\x59\x46\x48\xE9\x05\xF9\x38\x22\xBC\xB3\xB8\x8C\x32\x57\x32\xBC\x33\x5A\x46\x25\x2F\xA3\xDC\x0D\x5A\x57\x26\x2B\xA9\xEC\xAF\xA4\x32\x59\x49\xA5\x63\x2D\xB0\x4C\x98\x1B\xAF\xA2\x72\xCE\x2A\x2A\xFB\xAB\xA8\x9C\x62\x6E\xE5\x76\xAB\xA8\xDC\x7A\x15\x95\xD0\x5B\x58\x45\x38\xA2\x92\x57\x51\x36\xB3\x8A\xCA\xA9\x55\x94\xF5\x56\x51\x09\xAB\x48\x50\x05\xCB\xDE\x0A\x0A\xF5\x2E\x4F\xA3\x01\x44\x21\x87\x15\x1B\xFF\xE2\x77\x6D\x6E\x0A\x52\x67\x80\x3F\x72\xFC\x58\x85\x00\x8B\x22\xAA\x9A\x16\xBD\xFA\x8F\x7B\x17\x3D\xD9\x36\x4B\x2F\xBA\xAC\x2A\xD5\xC7\xF7\xC8\x6A\xF6\x9C\x8C\x24\xDE\x02\x23\x61\x66\x34\xB4\x79\x27\x27\xBA\x6D\x4C\x7A\x72\x62\x49\x64\xCB\xE6\xC9\x6A\xC5\xDC\x93\x93\xBC\x05\x59\xEB\xEC\x10\x8C\x32\x7D\x72\x92\xA3\x6F\x58\x64\x3E\xB9\xCB\x41\x62\xCB\x17\x1A\x9B\x1C\x9E\x50\xE1\x27\x4C\x78\x20\xA6\x85\xB6\x8C\x85\x36\x0D\x3D\x99\x79\x87\x27\xCE\x62\x92\x26\xA4\x1E\x3C\x9E\x1A\x78\x2A\x87\x14\x0F\xE1\x59\x74\xA0\xA3\x76\xF6\x7D\xC5\xA4\xE6\x6E\x40\xAE\xD6\xA2\xC9\xB1\xF4\x4C\x4E\x2C\x34\x73\xE5\x5A\x53\xC4\x14\x61\x00\x01\x0C\xAA\x46\x41\x2B\x87\x25\x0C\x8B\x88\xEC\x94\x78\x8C\xCF\xC7\x86\x39\x2D\x08\x0B\x9C\x48\x5F\x85\x05\x90\x9A\x1C\xE9\x59\xB1\x90\x82\x25\x5B\x2D\x2F\x98\xA1\x1B\xBA\x9C\x17\x84\x74\xDA\x6B\x5A\x10\x22\xCA\x5B\x79\x27\x6F\xA9\x4B\x47\x25\xE5\x82\xA0\x05\x91\x63\x91\x5B\x8C\x0E\x30\x34\x20\x43\x03\xCA\xF1\xAD\x76\x5C\x90\xCB\x6E\x52\x51\x36\xC7\xE2\x74\x61\x5D\x28\xF8\x2A\x84\x7C\xC2\x34\xD0\x2B\x22\xD5\x1E\xBC\xE4\xBA\xCB\x2C\xBA\x53\x61\xA9\xC3\x23\xE9\x0A\xDA\x34\x50\x3D\x29\xB0\xAE\x42\x84\xED\xBC\xE5\xA3\x93\xE5\x63\x9C\x86\x85\x33\xBB\xD8\x66\x74\x88\x48\x9A\xA0\x3C\xCC\xA5\xCB\x82\x83\xF9\x67\x75\x88\x62\x1E\x51\x86\x67\xBD\x6A\x4D\x4D\xE1\x0A\xA0\xC8\x02\x29\x92\x74\x08\x24\xC7\x02\xC9\xB1\xAF\x43\x14\x29\x39\x16\x4C\x8E\xA1\x7C\xCA\x96\x54\x93\xED\x98\x6A\x0C\x50\x8D\xEE\x51\x4D\x28\xCA\x95\xB9\xA0\x8C\x4A\x27\x13\xAA\xC9\x52\xAA\xE9\xCA\x24\xBA\x2C\x92\x1D\xBA\xB4\xA7\x54\x83\xF4\xD1\x68\x1A\x90\x0E\x54\x93\x31\xD5\xA0\x8F\x7E\xA6\x0E\x05\xD7\x7C\xA0\x1A\x33\x4B\x35\xD9\x56\x54\x43\x93\xC9\x09\x02\xF6\x30\x66\xE9\xB0\x2E\x5F\x8B\x9B\xAB\x82\xCD\x75\x02\xFF\xBB\x08\xDD\x53\x51\xB9\x5D\x80\x7E\xD6\x1A\x8B\xD8\x29\x2E\x5A\xF0\xFA\xF8\x11\x0C\x57\x31\x2D\x56\xDE\xE3\xB8\x0E\x97\xA3\xBF\x2D\x71\xFD\xA2\x45\x1A\xC4\x3C\x78\x76\x95\x53\x03\x46\x46\xEB\xB2\x24\xAA\x8F\x9C\x63\x71\xB3\x3A\xCC\xC1\x7D\x06\xDB\xD5\x21\xC0\xAF\x40\xBD\x93\xE3\x6C\x80\xBE\x93\xCA\x8B\x40\x24\x39\x3E\xB0\x14\x43\x83\x3D\x87\xFC\xC0\x18\x5C\xB2\xE6\x35\x9D\x7D\xC7\x5D\x3C\x0F\xC9\xFE\x13\x87\x84\x29\xA9\x29\x38\x24\x14\x2E\x27\xA9\x29\x0F\x3E\x08\x44\x2E\x43\xA2\x8E\x20\x35\xE5\xB0\x8B\x17\x2C\x35\xA1\x05\x29\xA2\xA5\xE8\x4B\x4D\x6C\xED\x28\xA2\xB5\x03\x49\xB0\x20\x6C\x09\x5C\xB7\x2C\x3B\x15\x64\xED\x90\x4C\x80\xC8\x96\xD0\xA9\xA6\xE8\x0B\x50\x45\x20\x40\x49\x04\x58\xC4\x7D\x3C\x4B\xF7\x71\x22\xC0\xA2\x23\x40\xB4\x76\x64\xDD\x3E\x5E\x40\x97\x25\xEE\xE3\x25\x0D\xA7\xC0\xC7\x00\xD0\x12\x3D\x54\xBB\x7D\x1C\xFD\x5D\x93\x7D\x3C\xA7\x7D\x3C\xA3\x7D\xBC\x98\xB5\x76\x84\x90\x5E\x85\xEC\x09\x65\x61\xCA\x74\x84\xB6\x88\xBC\xF3\x1D\xEA\xBC\x0F\xE2\x76\x9C\xF7\xF6\xD9\x40\x44\x1F\x92\x1C\x9E\x4D\x4E\x14\x0D\x67\x4E\xE5\xBA\xF3\xF3\x3D\x65\x9C\x4D\x9D\x82\x28\x78\x81\x32\xFC\x9C\xD6\x27\x46\x1C\x10\xE7\x86\x22\xBA\xE4\x75\xCE\x63\x66\x4E\x19\x9F\x2D\xCE\x3C\xDB\x17\x9F\x9D\x35\xF5\x2C\xA4\x5C\x22\x0D\x7B\x18\xE5\x4D\x27\xAA\xFF\xA1\xFA\xD3\x23\x23\x21\xBB\x9D\x28\x76\x30\x62\x2B\x22\xC7\xF5\x1A\x17\x2B\x6C\xA1\xFF\x0A\xE7\xED\x58\x6B\x2C\x90\x4E\xD6\xB3\x28\xB2\x59\x14\x88\xFA\xAA\x46\x3B\x9D\x18\x13\xB3\x6D\x2D\x89\x6A\xC6\x92\x98\x51\x24\x39\x0D\x29\x58\x12\x35\x3B\x35\x53\x2C\x18\x59\x12\x4D\xA8\xB6\x89\x24\xA3\x31\x76\x10\x48\x26\xB8\x4F\x01\x63\x43\x5F\xAF\x68\x22\x8B\xB3\x72\x7A\x5A\x48\x7B\x97\x92\x66\x32\x5B\x05\xF2\x71\x51\x31\x12\x17\x88\xC7\x38\xE3\xC5\x63\xE5\xB9\xF4\xC7\x01\x66\x29\x40\x0C\x43\x45\x8D\x1F\xB2\xB8\x64\xFC\xBE\x16\xBD\xC1\xD8\x61\x2E\xBA\xEE\xD7\xFE\x39\x9B\x5C\x91\x8B\x7E\x51\xF4\xA1\x21\x97\xBC\x9A\xE3\xA2\x28\xF7\x80\x2F\xD0\x73\xF2\x8C\xAB\x31\x74\xCF\xE9\x45\xB5\xCF\xE9\x03\xA2\x6E\xAC\x97\xC7\x01\x08\xEB\x0B\x58\x13\x42\xF8\x89\xFF\xEF\xEF\x4A\xDC\x25\x47\x18\x6E\x34\xC4\xD4\x70\x98\x82\xCC\x10\x91\x3E\x3A\x00\x02\xA0\x54\xDF\x78\x4D\xF0\xB8\x27\x5F\x35\xAA\x5E\x19\xC9\x89\x4F\x9E\x3A\x4F\xB6\xDE\xD3\x8A\xBD\xDD\xD8\xFC\x9C\x56\x73\xAC\x9E\x93\xCB\x39\x19\xF8\x5C\xCF\x4C\x8B\xAE\xA2\x1F\xA3\xC0\x62\x6F\x8E\xCD\x96\xD0\x89\xF2\x1E\xAC\xEF\x3D\xB5\x90\x6A\xA0\x8D\x1D\x14\xD9\x60\x30\x18\xE4\xE5\xA0\x62\xD7\xB8\x61\xFC\x45\x1E\x56\x92\x1D\xA5\x86\x65\xC8\xBC\xD6\x61\x30\x60\x89\x32\x34\xF4\x90\xE5\x64\x80\xC7\x5C\x3C\x6B\x67\xEA\x4F\x9F\xE2\x80\x0F\xC6\x9B\x19\x16\xDC\x85\x89\x5D\x48\xFA\x58\xD2\xC7\x92\x3E\x96\x74\x4C\x26\x39\x60\x3D\xF6\x2B\x23\x91\x18\x27\xE7\x34\x9F\xEF\xB4\xF9\xEC\xEB\x6A\x3E\xDB\x69\xF3\xF9\xD7\xD5\xBC\x05\xBC\xFC\x6C\xB8\x32\xD5\xE9\x7A\x29\x4E\xD3\x0B\xE7\xA1\xA6\x8E\x1E\xE8\xAA\x94\xF3\xF0\x49\x6A\xA3\x18\xEA\xDE\x58\xD3\x41\x6E\x3D\x3A\x49\x5D\xF2\xDC\x60\xAC\x98\x55\x61\x6E\x27\xF0\x26\x85\xA8\x24\x37\xF9\x93\x45\x65\xC8\x39\x30\x25\x6A\xFF\x2B\xEF\xEA\xC5\x98\x39\xD5\x79\xFC\xA9\xBE\xC7\x5F\xB7\xDD\x55\x2F\x2F\xE5\x9E\xB0\x0C\xDF\x23\xD2\x75\x78\xA7\x68\x63\x70\x06\x2A\x8F\x87\x9C\xF2\xE7\x4D\xDD\x3B\x0F\x73\x53\xF7\xEF\x39\x8A\x51\xD7\xDC\x06\x46\x05\xE1\x97\xF2\x18\xE6\x30\xAD\x5B\x6F\x8F\xA1\xCB\x65\xDD\xC2\xAA\x0E\xC2\x5C\xE9\xC5\x78\x40\x55\x86\x1F\x2B\xF7\x11\x0B\xA8\x43\xB5\xF5\x8F\xB1\x32\x3D\xC7\x4F\x0E\x16\x7F\xBD\x67\x24\xA4\x2D\x8A\xA2\x50\x45\x91\x69\x53\x00\xAF\x79\x7D\x02\x10\x2F\xC6\x91\x19\xE4\x55\x72\x05\x5A\x64\xE0\x06\x19\x28\x38\xF0\xBF\xC1\xD0\xC6\x42\xA2\x67\xB9\x0C\x40\xB9\x0F\xDD\xA9\x9B\x72\x81\xB4\x81\xFD\xE8\x48\xED\xCA\x85\x54\x71\x28\xC9\x1F\x1B\x95\x05\x7C\x27\x7C\x77\x1C\xDE\x5E\x5F\x40\x87\xEB\xB4\x6B\xFF\xB6\x64\x88\xB0\x18\x10\x64\x71\x40\x30\x9A\xA1\xD9\x62\x24\x45\x7F\x24\x45\x6F\x24\xC5\xAE\x47\xF2\x91\x74\x24\xA6\x42\x8C\xC5\x81\x74\x80\xFE\x3E\x68\xE9\x50\xD7\x52\x33\x5C\x68\x50\xC0\xFF\x1E\x78\x70\x5E\x33\x82\x07\x23\x78\xB0\x67\xA1\x19\xB9\xCA\x8D\x56\x17\x9A\xBD\xCB\x34\x96\xC7\x38\xEB\xF6\x60\x30\xD6\x85\xCE\xB8\xE1\x82\xDB\x5B\xFF\x02\x56\x7A\x1C\x82\xFC\x3A\x72\xD5\xEA\x48\x42\xDF\x43\x3F\xB9\x68\xA4\xA7\x06\x78\xEA\xEE\x64\x80\x5C\x64\xBF\x0F\x29\x54\x23\xC4\x8A\x2B\xBD\x58\x59\x4F\x29\x05\x7A\x3C\x1B\xC6\xE7\xBA\xF1\x2D\xC0\x98\xAA\x91\x84\xA6\xA8\xB1\xD9\x2D\xD2\x8B\x95\x2B\x67\x00\xF5\x1B\x77\xF7\x01\x55\x2D\x07\x9B\xE9\x28\x72\x84\x8A\x78\x40\x45\x95\xAB\xAA\xC8\x0A\xAA\xC8\x0A\x2A\x18\x3D\x62\x3B\x6C\x29\x95\x3F\xB7\x45\xA8\xC7\x1B\x6E\xE0\xE5\x3A\x70\x8A\x91\xAB\x98\x47\x70\x96\xD1\xB9\x7D\xA9\xD9\xBE\x70\x5E\xB3\xED\x55\xC4\xB0\x2A\x62\x58\x5D\xEB\x29\xB7\xF1\x14\x2F\x00\x80\x65\x66\x12\xE4\x49\xA0\xC4\xC0\x49\x2A\x4A\x86\xAA\x3A\x49\x54\x75\x3E\xEB\xF4\xE0\xBC\xEE\xC1\x63\x7A\x0F\x0E\x75\x0F\x2E\xEC\x38\xD3\x7B\xC2\xE9\x64\xF5\xA6\x61\x17\x48\xB2\x29\xA7\x2A\x6E\x33\x62\xE7\xD6\xAC\xB5\x69\xDD\x6D\xB3\x12\xF2\x56\x1D\x25\xE1\xEA\xA9\xF8\xA1\x8C\xB9\x55\x2C\x89\x2D\x05\xF2\x27\x8A\x76\x96\x31\x76\xDC\x84\x56\x0E\xF3\xA1\xAD\xAE\xA8\x2E\x4C\x4E\xF1\x93\x26\x8D\x9F\xCC\x49\x97\xCB\x59\x97\x2B\x93\xF8\xC9\x9C\x24\xB8\x12\x75\xB9\x82\x64\xB9\x9A\xE2\x27\x73\xD4\xE5\x0A\x97\x8D\x0D\x28\x27\x7C\xAA\x91\x27\xB6\xD8\x3C\x51\xE4\xF4\xA2\x3A\x42\xC9\xC1\x8F\x92\x0D\x41\x9F\xA3\x0B\x40\x37\xA8\xA0\x34\x8D\x18\xE7\x02\x6D\x0F\xDB\x83\xEA\x08\x49\xD2\x9F\x16\xF4\x42\xFD\x39\x0A\x20\x3F\x20\x8A\x2E\x28\xB0\xEE\x84\x5F\x1B\x00\x43\x2A\x88\x97\xF5\xFB\x31\xD9\x01\x68\xEB\xFB\x98\xE8\x0A\xA2\x31\x54\x09\xBF\x82\x22\x75\xE1\x0B\x22\x3C\x2F\x5D\x51\xFF\x05\xA7\x8C\x8C\xA0\xE2\x6A\x24\x66\x3E\xA8\x82\xDA\x2B\x3B\x50\xD9\x08\x2A\x39\x03\xAA\x80\x2D\xC9\x00\x93\x00\xA4\x08\x30\x19\x00\xE6\x34\x50\x13\xCD\x39\xC8\xB1\xFE\xE3\x22\x91\xB4\xD5\x8F\x11\x40\x31\x54\xE4\xA9\x8D\x5C\x6B\x72\x3F\x7C\x3A\xA5\xE7\xA6\xA0\x86\xF7\xBF\xF6\x7D\xAF\x95\x78\xB0\xE9\xF2\xA0\xC6\x1F\x84\xCF\x60\x9C\x97\x61\xDD\x7C\xEB\x87\x47\xDA\x83\xEA\x27\x91\x70\x80\x50\xD0\x2A\xC6\xA2\x22\x1A\x07\x86\xA0\xCB\x92\x48\xD0\x48\x8E\x93\x87\x7B\x15\x37\xC3\x32\xF4\x3C\x74\x14\x34\x89\xFA\xF3\xA7\xA8\x5A\xB5\xF6\x77\xA7\x13\xD0\xE9\x3E\x98\x13\x25\xE3\x0E\x02\xEB\x9E\x77\x35\x44\xFE\x79\x6D\x8C\x94\x37\x91\x16\x80\xFB\xDC\x13\xC2\xAD\x60\x04\xE7\x61\xE8\x0D\x22\x46\x31\x2F\xD6\x8B\xEA\x7B\xB0\xA8\x46\xA4\x83\x3C\xA1\x83\x9C\xE8\x20\xEF\xE8\x20\x4F\xE8\x20\x0F\x74\xA0\xFD\x97\x60\x50\xA4\xAD\x04\xAC\x40\xEF\x7F\x4F\x94\xE6\x6C\x7D\x2F\x07\xDF\xD8\x03\x62\x7F\x0C\x29\x71\x7D\xC5\xD5\x62\xCA\xA2\x2E\x59\x41\xCD\x1A\x38\xAE\x71\x83\x56\x2E\x5A\xBF\x7E\x83\x42\xA0\x62\xC0\xC3\x89\x54\xFC\xC9\xB1\xD8\x55\x4E\x88\x00\x25\x3C\xAF\x28\x15\x64\x1D\x2D\x02\x7D\x84\xA4\x61\x46\xBA\xE3\x68\xBA\xE3\x68\xF0\xFB\x42\x9A\x13\x47\x30\x1F\xA2\x28\x26\x89\x31\xB9\xDF\x47\x51\x4C\x72\x81\xAA\x6E\x3A\x55\xFF\xD3\x29\xAA\xE4\xAF\xAA\xB4\x19\xCF\x45\x7F\x74\xC7\x1D\x75\xC7\x1D\x69\xF9\xFF\x58\x97\xAE\x41\x2F\xAA\xCB\x1A\xE9\x90\xDF\xD9\x5D\x4D\xDF\xF2\xF4\xA1\x3D\xA2\x43\x0B\xE4\x9C\x27\xB3\x7C\x52\x37\x80\xFF\x2B\x99\xE5\x53\x7B\xDD\x1F\x79\xC0\xDD\x3F\x35\x76\x7F\x24\xE9\xDE\x6F\xCA\x58\xE4\x79\x2F\x85\xB6\x47\x53\xCC\xD4\xC5\x7B\x44\x0B\x72\x0F\xEB\xE9\xAF\xD5\xCA\x4E\xE4\xC9\x6E\x83\x60\xE3\xB1\x68\xD4\x9A\x1F\x3E\x9D\x4C\xA9\x26\x2C\x6B\x11\xD3\x7D\x50\x55\x5F\x7C\x45\x85\xCA\xB8\x66\x75\xC1\xBF\x0F\x5E\x74\xCA\xBF\xF6\x7D\xAF\x7D\x9F\x58\x0D\xB5\x9C\xC2\xF7\x0A\x64\xAE\x23\xCC\xBC\x6C\xE5\xE4\x39\x68\x05\x97\x4B\x31\x4B\x1A\xDA\xD1\xC6\x59\xC8\x71\x04\x1A\xFD\xF0\x48\xDB\x18\x97\xC7\x40\xB2\x8C\x1E\x40\x4B\x64\x07\x1A\x62\x78\x11\xA7\x8E\xC6\xA1\x1F\x1E\x61\x32\x5F\x8F\xA6\x7D\x84\xAF\xE4\x80\x21\x6C\x01\x3B\xB2\x21\x1C\x67\x89\x93\x7D\x09\xCE\x82\x87\x90\xE6\x80\x3E\x41\x19\xFA\x04\x19\x6B\x51\x92\x50\xAC\xD1\xC0\x10\x0E\x8F\x28\x53\x8B\xC5\x2E\x92\x38\xBB\x3E\x0A\x25\xC8\xF1\xD8\xF0\xD0\x54\x95\x13\x33\x27\x59\xA1\x37\xEE\x86\xB4\xFF\x2E\x11\x31\x35\x53\xBD\x4C\xC9\x7C\x82\x96\x26\x27\xEB\x7F\xA0\x04\x5D\xBE\x4B\x3E\xDB\xAD\x74\xF3\xB4\xC6\x7A\xAC\x98\x69\xFC\xA4\x75\x6A\x9D\xA3\xBF\x41\x89\xC0\x14\xB6\xF0\xE7\xE8\x98\x75\x55\xB2\x0C\xA1\xC9\x19\xA3\x1F\xE3\x2F\x74\x62\x2A\x98\x77\xA8\xD5\x98\xD8\x37\xA7\x7A\x5E\xEA\x30\x17\x7D\x35\x94\x75\xDB\x1C\x1D\x53\xA4\xEB\xCA\xC8\x92\x61\x34\x27\xDB\xC1\x3F\x52\x6A\xFE\x8A\x9B\xE6\x9A\x49\x54\x44\x62\xB6\x49\x68\x69\x1D\x1A\x31\x73\x1A\x51\x49\x23\xAA\x82\xC5\x81\xB5\x22\xDF\x4D\xC9\x3A\x3B\x7B\x43\x88\xF7\x43\xF9\x31\xB8\x65\x72\xA2\x82\xE1\x5A\xA3\x61\xD7\x22\xB3\x2C\xDA\xF5\x22\x81\x4B\xCC\x6C\x44\xBC\x9A\x2D\x5F\x48\x61\x47\xC8\x6F\x1D\xCD\x7F\x9C\x44\x8E\x52\x00\xD4\x8D\x3C\xCC\x45\x55\x4C\xDC\xC1\x34\x90\xA4\x86\xDD\x0D\x76\x30\xD3\xED\x60\x3A\x58\xD4\x2A\xB4\x2B\x3B\x15\xC7\xBB\xB7\x42\xC4\x06\xCA\x78\x7E\xA6\xF3\x89\x39\xA9\x9E\x8D\x9B\xA0\x53\x8C\xEE\x20\x0E\x60\xEA\x32\x3B\x12\xF1\x2C\xEE\x69\x4D\x46\x08\xB7\x80\x70\xB3\x4E\x27\x18\x06\xB7\x51\x2C\x6F\x61\x9C\x3D\x0A\x9C\x03\x1D\x93\xF3\x80\x70\x4A\xFC\x0D\x68\x2E\xD1\xB6\x4E\x48\x46\xE3\x3D\x3C\x53\x0A\x7F\x9B\x26\xC3\x7D\x1A\x0F\x68\xB0\xB5\x0C\x5A\x23\xB7\x8C\x95\x11\x1E\x63\x83\x38\xE3\x14\x61\x69\x99\x4E\xB3\x2C\xA5\xB5\x99\xB4\xA8\xA5\x86\x36\x65\xBF\x4D\x97\xB9\xC1\x3A\xB4\xA2\xB6\x6C\x45\x56\xFE\xDC\x68\xE6\xD7\xC0\x31\x2A\x12\x46\x48\x0C\x6D\x14\xDC\x1A\x52\xEA\x42\x0A\xAE\xA5\x5B\xA3\xEE\x96\xA3\xE4\xA4\xA8\x44\x93\x2C\x70\x8E\xDA\x3F\xDE\x43\xCD\xEC\x77\x05\xE5\x17\x2C\xE8\x59\xE1\xEB\xD6\x0D\x51\x5C\x73\xD5\xF9\x18\x65\x3B\xA2\xB7\xF6\x9C\xAF\x9C\x2B\xFC\x22\xF3\x20\xF9\x9D\xAA\x1E\xEF\xA5\x2C\x83\xB2\x7D\xD3\xB8\x26\x5C\x00\x4C\xF7\x3A\xFB\xA6\x17\xBB\xFA\xC7\xBD\x04\x85\x08\x84\xB3\x0D\x67\xBD\x5E\x75\x16\x21\xB2\xEE\xC5\xCA\xB1\x63\xE4\x14\xE8\x6A\xB7\xF7\x25\xD7\x37\x7B\xFF\x93\x10\x9B\x97\xFE\xB8\x83\xBF\x42\x5C\x86\x6C\x64\xEF\x6B\x28\x25\x0F\xE5\x42\x45\x2F\x56\x8B\xF5\xF5\xBE\xC0\x9B\x3F\xD1\x01\x35\x39\x85\x7C\xE4\xD2\xF6\xD2\xB8\xD1\x07\x0A\xE8\x28\x88\xE9\x20\xA6\x8D\x76\x94\x32\x8B\xEC\x88\x05\xCB\x92\x78\xC6\x46\xC7\x39\xC0\x5F\x14\x4A\xF3\xBC\x74\xA8\xE3\x46\xAF\x23\x7D\xE9\x75\xF2\xD1\x4C\x09\xCE\x30\xC1\x91\x9F\x01\x2F\x68\x8E\xC2\x44\xB9\x1D\xFE\x62\xFA\x31\x19\xC0\x78\x50\x0D\x61\x91\xD8\x0B\x84\xA1\x23\x0A\x51\x5D\x6D\x80\xEF\x71\xD9\x31\xD9\x86\xD4\xE8\x72\xBD\xD1\x0B\x3C\x14\xCA\x66\x05\x32\x83\x5E\x68\xB4\x47\xBF\x0B\x2E\xB7\xAA\x29\xB1\xFB\xA2\x10\xFE\x25\x7F\xFE\xAE\x0F\xDB\x23\x8D\xF5\xFB\x8F\x3B\x7B\x25\x5F\x3A\xC5\x3F\xAE\xC4\xCA\x36\x86\x2A\x4B\x9E\x68\x1B\xED\xF5\xC5\x5D\x91\x1A\x3C\x54\x99\xB4\x7B\xB4\x92\x98\x5D\xED\x80\x50\xBE\xDE\x70\xEA\x4A\x2C\x2E\x78\x40\x48\x5F\x84\x2B\x45\x85\x2A\xB9\x59\xAA\x92\x3F\x3A\xEE\x54\xB8\xD3\x18\xBF\xF7\xB8\x33\x57\xA2\xD9\x9D\x19\x13\x27\x14\xA1\x38\x78\xE3\x30\x08\x1B\xAD\x3C\x92\xA4\x63\xDC\x05\xA7\x92\xB5\x68\x4C\xF7\x11\x40\xA0\x48\x52\x95\xC7\x9D\x7D\x38\x82\x20\xA3\x5A\xD4\xEA\x78\xBB\x05\x34\x5A\x7F\xC7\x17\x3E\xF4\x0F\x3F\xD3\xBA\xEC\x4A\xDC\xFF\xB1\xDE\x07\x57\x14\xC8\xAA\x37\x71\x96\x5F\x44\x34\xE7\x55\x93\xC7\x1B\x9C\x31\x00\x81\x8A\x43\x98\x08\x98\xE3\xF4\x40\x2F\x84\x72\xB6\x1D\xEC\xF4\x02\xF0\x66\xCC\x12\xD0\xF9\x3E\x2C\x8F\xA8\xD2\x29\xC8\x61\x98\xFF\x25\x7C\xA7\x31\xCF\x0A\x67\x15\xC0\x4D\x0B\xD6\x0A\x6E\x3E\x19\x97\x4D\xC0\x53\xC7\x05\xA7\x5D\x46\xE6\x99\x65\xFA\x34\x41\x6E\xC6\xC8\x5D\x43\xE3\x1C\xE7\x21\x1C\x36\x66\xED\x70\x7C\x95\xAA\xAE\x79\xB9\x97\x84\xC2\x1C\x43\xF9\xE3\x3C\x65\x98\x4E\x63\x71\x05\x22\x78\xBB\x24\x0F\x8D\x8A\xF3\x04\x0D\x1B\xCF\xC6\x9C\x5A\x08\x05\x3E\x9D\x1E\xE1\x11\xB3\x4C\xF2\x9D\xE6\x4E\xB7\x54\xEE\x1B\x8F\xDE\x0E\x08\xB1\x32\x82\x2D\x8B\xCE\x64\x57\x78\x8A\x96\x25\x82\x02\x01\xE0\xF4\x82\x53\xCE\xF6\x66\x49\xF2\x97\xC1\x45\x0C\x9A\x1B\x95\x8F\x93\xF0\x6D\xF5\x11\xA9\xD5\x44\x3E\x5B\x4E\xBC\xA2\xA4\x78\x98\x07\x1B\xF5\x3E\xC9\x2C\x8B\xEB\x2B\xCB\xFA\x79\x7C\x52\x45\xC7\x62\x28\xCC\x5D\x42\xE1\xED\xF5\x7D\xA7\x42\xA9\x58\xE5\x40\x08\x75\xD2\xEB\xD5\x24\x09\xEF\x9B\x9C\xF8\x4E\x55\xBF\xE4\xFA\xC6\x30\x0F\x35\x09\x0F\x35\xAF\xA1\x2D\x84\xD2\xDC\x31\x2C\xE4\xD3\xC2\x6E\x29\xBD\x43\x2E\xF6\x5F\xD7\x36\x50\xC8\x59\xC0\xB7\x9D\xE5\xF1\x60\x89\x29\x85\x05\xA3\x16\x1A\xEE\x3D\x0E\xA9\xAA\xFE\xCA\xCA\x41\x4C\x71\xCC\x79\xE3\xA2\x8F\x3B\xA5\x09\xE7\x13\x38\x3E\x36\xA1\x23\x34\x11\xE4\x8E\xEE\x20\x11\x53\xA8\xF2\x81\xA8\x0A\x05\x22\x75\xD0\x5C\xE9\xC4\x93\x0B\x6D\x60\x02\x66\x17\x6A\xBD\xE9\x60\x3D\x46\xC6\x4C\x3B\x8A\xEC\xC4\x01\x02\x34\x4F\x0A\x3F\x85\x3F\x47\x61\x62\xD8\x05\x56\x47\xA0\xC2\x23\x86\x8B\x24\x68\x12\xFC\x72\x92\x07\x94\x0E\xCC\x85\xAB\x5C\xC0\xAE\x70\x14\xB3\x40\x62\x0C\x15\x19\x8F\x90\xB7\x77\x2A\x84\xC0\xE3\x45\x74\xF6\x58\x54\x44\x29\x63\x76\x75\x1B\x8C\x24\x86\x60\x01\x4B\xE0\xA8\x06\xCC\x4F\x84\xD2\x02\x66\x1D\x44\x41\x15\x29\xB4\xC2\x52\x7D\x24\x0E\x8C\x07\x5C\x8B\x48\x1D\x72\x03\x64\x6D\x25\x2A\x83\xE3\x8C\xD2\x56\x0C\x50\x3F\xA2\x04\x8E\xEC\x23\xCA\x7E\x2C\x78\x06\x40\x89\x4C\xE2\x0D\xC4\x42\xC5\x53\x0E\x62\x39\x63\x28\x44\x3C\x4C\x61\x88\x6C\xE1\xAA\x13\xDA\x31\x9D\x7B\xA1\x0F\x75\xDC\xB7\x58\x6F\xB6\x07\x48\x45\xFA\x4D\x0F\x20\x19\x02\x04\x73\x00\xCA\xF9\x00\x19\xC0\x73\x04\xC8\x00\xAB\x06\x30\x40\x32\xAE\xA4\x04\x62\x59\x0A\x10\x4A\xBB\x8E\x39\x3F\xE1\x2A\x02\x84\x94\x23\x57\x4D\x03\xA4\x9A\x03\x90\xAA\xAA\xAE\xD7\xDD\xC9\xED\x6D\x72\xAA\x08\x5A\x67\x48\x44\xBE\x53\xFF\x2E\x8E\x48\xB0\xB9\xD5\x50\xE0\x9A\xE4\xB4\x83\x6A\x6E\x3C\x8F\xE1\xA5\x21\x28\xEB\xEE\xAB\x24\xCA\xCB\xF2\xD8\x41\x75\x93\xA4\x23\xE5\x5B\x60\x09\xDD\x24\xDB\x50\xCD\x82\x42\x7B\x6E\xE2\xBB\x5E\x1E\x83\x6F\xE9\x05\x8E\xF3\xA1\xCC\xD0\x49\x74\x47\xC8\x2E\xB1\x04\x63\xAF\xCF\xD7\x2F\x93\xF4\xDB\x9C\xAF\x6F\xC4\xA2\x52\x17\x88\x17\x4A\x3A\x89\x7A\x81\xA4\xF3\xA6\xEB\x24\x09\x23\xB7\x50\x6D\x26\xD8\x6C\x6E\x92\x8D\x20\x2E\x4B\xB9\x90\xE5\x22\x0C\x57\x50\x92\x35\xCA\x5B\x5C\x93\x56\xE9\xA4\xBF\x4E\xB6\xF5\x5F\x5C\x8B\x21\x34\x8B\xEA\xBC\xE5\x00\x1A\xA7\xEA\xBF\xBC\x16\x65\x7D\x6C\x30\xE8\xFA\xD0\x4F\x17\x6A\x72\x5B\xD4\xE2\xB1\x02\x3B\xCC\x2D\x68\xEE\xAF\x32\x1D\x3A\xCE\x9B\xCA\x58\xB9\xB5\x69\xD7\xB0\x83\xB2\xA1\x04\x76\x53\x18\xE1\x04\x76\x66\xCA\xAA\xC8\xE7\xCF\x67\xC5\x84\x1E\xFB\x29\x8F\xB4\xC3\xBA\xB1\xC4\x4B\x30\xC3\xD8\xC6\x05\x62\x3F\xDE\x23\x5C\xD0\x53\x67\x22\x2A\xA2\xD3\x93\x27\xD6\x67\xA2\x93\xAC\x5A\x54\x0E\xD3\xA1\xC3\x86\xBD\xDF\xCB\xF5\x85\xFA\x9F\xC9\x80\xCC\x50\x31\x8D\x20\x33\x28\x65\x71\x55\x73\xD3\x91\xC8\xE8\x33\xAD\x5C\x28\xC2\xC0\x66\x50\x45\x8E\x0B\x54\x0D\x2E\xCD\x47\x52\xE0\x3D\x18\x70\xA8\x15\xC7\x99\x49\x40\xBA\x16\x89\x13\x75\xC8\x4C\xA2\x16\x55\x8D\x20\xA1\xC3\xA1\x03\xA2\xE8\xC9\x17\x07\xD5\xB9\xD0\x36\x49\xA6\x70\xB9\xE8\x14\x68\x08\xC6\xC3\xBA\xF8\xF0\xB5\x04\x50\x53\x7F\x89\x32\x78\x30\x39\x68\x6C\xA8\x33\xE8\x47\xFB\xA5\xEA\xCC\x79\x00\xA3\xCE\xCE\x7F\x5E\xCC\xC3\x09\xC2\x8C\xDF\x9F\x38\xC6\x26\xF6\x9D\xD7\x25\xB9\x5F\x5C\xB2\x66\xBD\x60\x63\xA4\x4A\x8C\x91\xAC\x1E\xA9\xCE\x18\xA9\xA2\x31\x12\xE8\x95\x8C\x91\x48\x5A\x98\x2A\xA6\xD1\x69\x78\x9E\x26\x5C\xE8\xA9\xE5\x6C\x29\x5D\xFD\x30\xAE\x66\x58\x30\x96\x4D\xD2\x28\x5E\x20\x12\x24\x23\xC1\x02\x9B\xC5\xBD\x49\x24\x9E\x4A\x16\xB7\x3E\x84\x3E\x05\x2B\xFD\x4B\x2C\xB3\x23\x3B\xB8\xC9\x0E\x6E\x9D\x2A\xAF\x17\xD5\x3E\x2E\x3F\x11\x16\xFD\xFE\xB8\xE6\x6B\xCA\xDB\x0B\xCB\x7D\x48\xAB\xBD\xA0\xD3\xE5\x3D\xFE\x4B\x22\x6E\xD5\xC8\x7C\x44\x48\x58\xCD\x93\x67\x15\x8C\x7C\xF6\x24\x8D\x0A\x97\xF9\x18\x1D\xD8\xCE\xA3\xCD\x82\x97\xB8\x8A\x11\x05\x9A\x42\x4A\x13\xDC\xC9\x04\x5D\x37\xC9\xCE\xA9\xE3\x41\x42\x17\xB1\x21\xC1\xB6\x08\x4D\x93\xD9\x87\x71\xAA\x18\x99\x88\xDD\xFF\x6B\xD0\x1F\xE7\x02\x33\x19\x71\xF5\x7A\xCB\xBA\x97\x89\x6A\x17\x8B\x9C\x7A\xA1\x31\x9C\x21\x38\x10\x7F\x63\xC7\xD2\x19\x44\x93\xF1\x68\x15\x32\x63\xED\xE8\xA6\xC2\x7C\xFC\x9D\x06\x92\x81\x06\x92\xCD\xD5\x40\x62\x82\x9C\xD3\x69\x20\xB2\xA7\x81\xC8\x29\x0D\x44\xF6\x35\x10\x2F\x40\xDE\x27\x66\x98\x91\x55\xB2\xA7\x86\x48\x50\x43\xE4\x95\x2C\x57\x66\x4F\x83\xA9\x5E\x4C\x09\x2D\x51\x84\xA2\xF4\x9D\x63\xD0\x8A\x33\x12\x83\xB2\xA3\x63\x76\x56\xA1\x08\x86\x5E\x85\x43\xCE\x23\x84\xFB\x5E\x62\x3B\xE3\x6A\xF9\x9A\xE4\x60\x45\x4D\x29\x68\x8A\xC2\x3D\xD9\x76\x46\xC9\x25\x81\xD7\x00\xC0\x1B\x11\xA4\x7C\x34\xDD\xC3\x87\x00\xDB\xE5\x91\x61\x69\x51\xC2\x4E\x57\xA2\x30\x6F\x29\x05\xDD\xCA\x48\x71\xF5\x39\x4C\xD7\x33\xB4\x15\x46\x38\x23\x3F\xAD\x79\xF5\x81\x8A\x80\xAE\xA9\x2C\xCF\x53\x6D\x6F\x2C\x34\x82\x16\xBA\x0C\x6B\xF5\xCD\x0E\x1C\xF8\xDD\xBA\x2B\x0E\xD3\x81\xC7\xD4\x50\xB3\x99\xA1\x2E\xD3\x58\xB7\xE9\x9A\x4E\x95\xCD\xF2\x48\x6D\x33\x1F\xE9\xB2\x64\x3E\xBA\x4A\x06\x0B\x9A\x8A\x44\xCF\xDC\xEA\xCB\x85\x2E\x27\xEA\xA4\x7A\x76\xA2\x0E\x62\x1A\x5F\x13\xF4\xC4\xB1\x49\x74\x41\xBB\xD0\xE4\x58\xF2\xD6\xA2\xFD\x0B\x69\x36\x03\x4D\x26\xD6\xC1\x55\x09\xCD\x16\x40\xB3\x45\xA4\x59\x13\x69\x16\xEB\x1D\x51\x8E\xF8\x13\x6D\x63\xA7\x69\xD6\x26\x34\xAB\x98\x66\xCD\x95\x63\x83\x57\x48\xB3\x74\x45\xE3\x8D\x34\x8B\x39\xA3\x47\xA0\x1B\x87\x01\x28\xA0\x51\x75\x65\x3C\x41\x9D\x63\x07\x34\x44\xB5\x05\x19\x85\xC8\xA5\xBF\x18\x97\x8E\x1C\x7C\xE1\xCF\xD1\x71\xC9\x66\x99\x32\x2D\x8D\x46\xD2\xA8\x8A\x69\xC9\x99\x66\xB9\x9A\x33\xA0\x5B\x90\x4D\x29\xB5\xEE\x18\x57\xAE\x8C\x34\x57\x71\xE3\xDD\x11\xC0\xDD\x0C\x08\xE0\xD5\x02\xAA\xB5\x38\xB8\x0A\x60\x8B\x3A\xA8\x19\x66\x78\x74\x03\x1A\x34\x96\xBF\xA9\x79\x53\x6E\x5D\xB5\x00\x9A\x70\xA0\x48\xD6\xDC\x10\x0F\x20\x3D\x10\x49\xE4\xCE\x04\x92\x18\xB0\x1B\xE8\x0A\x19\x0B\x0D\x7A\x62\xF0\x3C\xC8\x4B\x0F\x0D\x90\xC3\xE9\x99\x38\xE3\x86\xEB\x30\x76\xB5\x83\xB1\xA3\xCB\x42\x18\xAF\xD9\x6E\xBC\x24\xF4\xBB\x8C\x0F\xBF\xCD\x2E\x07\xAF\xC3\xE0\xD1\x0D\x7A\x7F\xDC\x90\x34\x99\x33\x53\xA3\xA7\x81\x5B\x7B\xA8\x1C\x93\x20\x9F\xF2\xE8\x05\x08\x12\xB6\xDB\x83\x7B\x85\x1B\x9D\x0F\xEC\xF9\x81\x1A\x2A\xCD\xE9\x0D\x95\x51\xC9\x86\xED\xDE\x19\x2A\xA6\x5F\x7F\x65\x1B\x43\x65\xB1\xCE\x51\x11\x40\x94\xE8\x5D\xCD\xD4\x4A\x24\x9A\x1A\x2A\xC9\xDD\xB9\x08\x86\x4A\x95\x18\x2A\x31\x15\x40\x11\x0D\x95\x6A\x1B\x43\x65\x41\x86\xCA\x62\x67\x86\x4A\x95\x1A\x2A\x15\x1B\x2A\xCD\x8C\xA1\xD2\x90\xA1\x12\x5F\xB8\x23\xD3\xD5\x44\x9E\x54\xA9\xC3\x2B\xE8\x72\x51\x56\xB7\xA7\x91\xD4\x83\x13\x86\x5E\xA1\xA3\x36\x14\xB3\xF7\xB7\xF5\x9B\x28\xF5\xFD\xAC\x6E\x65\xE7\xEB\x56\x59\x94\xE4\xCD\xFF\xCB\xDE\xBB\x00\xDB\x75\x5D\x05\x82\x67\xEF\xB3\xCF\x77\x9F\x73\xEF\x79\xD2\x53\xA2\xF8\x7A\xF0\x3A\xA7\x4C\x8D\x32\xB1\x40\x55\x83\x65\xDA\x0D\x58\x5B\x6D\x7D\x9E\xE4\xC4\x9E\xAE\xA6\xA6\x7B\xA6\xAB\x86\x9E\xD0\x54\x71\xAE\x62\xFC\x9E\x84\x63\x88\xF2\xEE\xB3\xEC\x24\xE6\x3B\x99\x26\x05\x84\x0E\x13\x59\x66\x78\x26\xF0\x2A\x01\x12\x62\x3A\x1F\x8B\x4F\x20\x71\x42\xEC\xC4\xA4\x09\x90\x81\x24\x6D\x68\xA7\xC3\x40\x02\x04\xC2\x2F\x9A\x5A\x6B\xED\x7D\x3E\xF7\xF3\xF4\x2C\x7F\x06\x07\xBB\x20\x7A\xF7\x9C\x7D\xF6\x67\xED\xB5\xD7\x5E\xFF\xC5\xC5\xCF\x5D\xAE\x84\x18\x14\x70\x39\x05\x8A\x51\xE8\xA6\x4C\xE0\x68\x17\xE6\xE4\xF9\x6D\x23\x54\x75\x92\x27\xD0\xAC\xBC\x4E\x02\x05\x85\xA7\x21\xC4\xA3\xA0\x98\x99\x70\x9C\x7C\x74\x24\xF7\x8A\x8F\xDF\x6D\x2D\x22\x74\x6F\x46\xFB\xE4\xBF\x66\xDF\xF8\xD4\xF8\x67\xCC\x10\xE7\xDA\x49\x50\x48\xC1\x6D\x5C\x22\x04\x12\x6C\x10\xD7\xC5\x8F\x9E\xEB\x26\x4E\xAE\x6C\x06\x4F\xAE\x0D\x00\x5E\x5D\x6A\x4A\x60\x59\x66\xC6\x2B\x73\xFF\x10\xF8\x94\x39\x50\xBD\xD4\xDF\x5B\x0D\x0E\x4F\xFE\xA7\xDC\x83\x01\x04\xD7\xCB\xF8\x7F\xCE\x25\xAE\x94\xBF\x73\xD9\x26\xBA\x11\xD9\x96\xC9\xE3\xFA\x0F\x1C\x3E\x80\xDB\xEA\x8F\x39\xB9\x3F\xE2\x5C\x5A\xFC\x3F\xF7\x72\xDA\x54\xEB\x40\x0B\xF9\x31\x5B\x30\xD7\x52\xB8\x68\x9F\x2C\xA8\xF6\x02\x78\xA0\xC1\x1B\x57\xBE\x51\xE0\x1B\x75\x7C\x54\x3C\xF8\x3A\x56\x99\xA1\x14\x82\x3D\x17\x3F\xFD\x3A\x32\xD6\x22\xBA\x0E\xCD\xA5\x4B\xBF\xE6\x9D\xA8\x8A\x51\x15\xB2\x4B\xB6\x40\xF2\x50\xC0\xD0\xFC\xC3\x25\xFF\xE8\x1A\xEF\x02\xE9\x21\x51\x30\xD1\x2F\xE7\x8A\x01\x69\xF1\x38\x41\x77\x08\xB2\xF4\x21\x23\x6D\x32\x7B\xD4\x91\x9F\x33\xE7\x30\xA5\x60\x30\x23\x6A\x8E\xE4\xE0\x7C\xA7\x56\xCA\xA9\x72\xCB\x63\x0F\x21\x07\xAF\xF8\x18\x79\xDC\xDB\xFA\x4A\xAC\x52\xEA\xD6\x0E\x81\x61\x5B\x89\x9E\x17\x5D\x57\x3E\x12\x25\x9C\x0F\xB6\x88\xAC\x88\x13\x5F\xA5\x1D\x2A\xD8\x8C\xA0\x0D\x5F\xA9\x5A\x4E\x38\x18\x72\x41\x04\xC7\x09\x3F\x43\xAA\xC2\x7F\xF8\xC7\xA7\x2A\xFC\x07\x56\x15\xFE\x41\x28\x86\x93\xB9\x8A\x42\xF9\xDC\x28\x0A\xC5\x7C\x45\xA1\xBC\x42\x45\x61\x78\x24\xE7\xAD\x29\x23\x1C\xEF\x64\x19\xFB\x87\x20\xC4\xAE\x19\xDA\x31\xB1\xC8\xD1\x2A\xCB\x62\x8B\x55\x87\x61\x47\x53\xD6\xD3\x95\x25\x6C\xB3\x63\x7E\x24\xB4\x2A\x3E\x08\x4B\x4D\xD1\xE7\x78\x63\x87\x4E\x16\xAF\x32\x27\x8D\x97\xB9\xDD\xB6\xD0\x24\x75\x39\xC0\xE6\xFE\x21\xC8\x21\xC5\xF6\xE9\xB4\xEC\x7E\x2C\x47\xB6\x2F\x47\x00\xA7\x48\xC6\x52\x7B\xA9\x93\x85\x60\x50\x4A\xC8\xCA\xA1\x4F\xBE\x77\x6C\x13\x38\xC6\x15\x25\x1C\x88\x4B\x09\x43\x3C\x21\x43\xC2\xFF\xB4\xD4\xD8\x8B\x57\xF9\x65\x8A\x53\x20\x9D\xE2\xBC\x71\x87\x23\x92\x90\x72\x5E\x59\xCE\x2C\x35\xAE\x2B\x60\x7D\x27\x76\x7B\xA4\x1C\xE2\x1A\x8B\xB2\xC0\x37\x90\x72\xED\x0E\xFC\xD3\xCF\x7D\xFF\x10\xA4\x95\x26\x88\x20\x5B\x3D\x67\x8C\x91\x2D\x4C\x6F\xD3\xD8\x84\x56\xA1\xE8\xB3\x6D\xA1\xB0\x76\x10\x5C\xF2\x10\x5B\x43\xDE\xA8\xF4\xC1\x2F\xD3\xCC\xB7\xAE\x33\x34\x80\xE7\x26\x45\x43\x64\xE4\xAA\x8A\xD3\xF3\x79\x5E\x0E\xB8\x19\x8E\x3D\x18\x1D\xCB\x39\x74\xD7\x2F\xA9\x4C\x4C\x8A\xF4\x94\xF2\x7B\x58\x34\x4A\xA6\xB5\x8F\x09\xD7\x7F\x68\xB5\x8F\xA1\x65\xE8\x77\xA2\x8E\xD5\x6D\xF8\xD1\x00\xE9\xDC\xFF\xB6\x6A\x1E\x9E\xD4\xE6\xAA\x15\xAD\xF1\xA7\xFD\xFB\x80\x90\x2E\x69\xEF\xAB\xEB\x4A\x98\x17\x9F\xA4\xEA\x38\xD2\x08\x10\x67\xCC\x7F\xDC\xD8\x50\xAB\x4C\x61\xF5\x51\x92\xC2\xF4\x5F\xFA\xBE\x58\xF7\x27\xE1\x59\xF0\xDE\x57\x89\xCD\xC6\xCB\x42\x1C\x86\xFB\x36\x2B\x65\x2E\x5D\xBA\xE9\x84\x65\x93\x2F\x5D\xBA\x74\x29\x5A\x05\xB9\x96\x7B\x37\x7B\xF4\xDF\x6D\xBF\x66\xBC\x97\xF9\x1B\x0F\xDD\xB3\xE1\x3D\x30\xE4\x6C\xA2\x93\x13\x44\x0B\xBC\xFB\x6D\x13\x0F\xDF\x40\xF3\xC1\xBF\xB8\x50\x79\xEF\xC3\xAE\x4B\x65\x4E\x70\x7D\x25\x65\x36\x36\x2E\x5E\x8A\x8E\xF3\x77\xE7\x5D\xBC\x50\x33\x88\x87\x97\x2A\x37\xF2\x8F\x92\x0F\xA4\x59\xFE\x6E\xF0\x6B\x9A\xD1\x4D\xAB\x95\x32\x4F\xBC\xFF\x6B\xEB\x4A\x9A\xE5\x3B\x6B\x73\xF7\x5D\xF5\xBB\xAB\xF0\x66\xEF\xDB\xDE\x7A\xDB\xEE\x9B\x1F\xBF\xE9\x42\x15\x91\x12\xE1\xA2\xB7\x0A\x6A\x8D\xFB\x38\xBD\x75\x18\x5E\x0F\xDE\xFB\x0E\xE3\x7A\x86\xF7\xDC\xFB\xB0\x1D\xE7\x0B\x0F\x9F\xAF\x68\x0A\xF6\xF7\xA7\x6F\xBA\x70\xA1\x0A\xEE\x7F\x1F\xA9\x56\xEE\xB8\xE7\xE1\x2A\xBE\xD9\xF3\x60\xCF\x6B\x3E\xFC\xFB\x37\x5D\xA8\x92\xF3\x55\x0A\x09\x44\x90\xDE\x7F\x1E\x3C\x88\xEF\x87\xE0\xFE\xCE\xB7\xDE\xA1\xF3\x0F\x54\x1E\x69\x7A\x3C\x9C\x43\x74\xC1\x76\xFD\xD6\xDF\xB8\xEB\xB1\xE4\x27\x7E\xED\xA6\x0B\x37\xBF\xFD\xAE\x1F\xFE\xEF\x3E\xB0\xFA\x91\x9B\xCE\x5F\xB8\x59\xFD\xED\x8F\xBD\xF9\xCD\x6F\xFE\xDD\x9B\xCE\x5F\x00\xCA\xAD\x00\xDE\xCD\x37\xFF\xCB\x6F\xF9\xC3\x5D\x5F\xFC\xD5\x9B\x2E\xDC\xFC\x07\xFE\x87\x7F\xF4\xDB\x8F\xFE\x26\xB6\xFB\x37\x3F\x52\xBD\xE9\xDA\x95\x8F\xE3\x9F\x3F\xF2\xAD\xF8\xDF\x1F\xDD\x74\xFE\xC2\xF9\xF3\x17\xCE\x57\x5E\x3B\x35\x08\x6F\x3E\xF8\xB2\x2F\x2E\xFD\xC5\x57\xFE\xCD\x37\x5F\xC0\x99\x9D\xBF\xF9\x13\x5B\x3F\xF1\xC8\x37\xBE\xE9\x3D\xDF\x7C\xE1\xFC\xF9\xF3\xE7\x89\x76\xEB\x7F\x26\x44\x27\xC0\x46\x39\x77\x2A\xD6\x66\x11\xAB\x09\x7E\x71\xCF\x39\x9B\xA4\xA1\x5B\x18\xE7\x2F\x5E\x12\xA4\x13\xB1\x2E\x26\xFE\x7A\x57\x9D\x63\xBB\x30\x6F\xA0\xFF\xBD\x8F\xF5\xBA\x23\x5B\x15\x71\x02\xD2\xC8\xBA\x8C\xB8\x44\x26\x0B\xAA\xE4\x8E\x11\x9B\xAF\x3D\x46\x52\x52\x2C\x0F\xF9\x87\x10\x4F\xBB\x2E\x8B\x48\x6F\x92\xEB\x28\x19\xFA\xB7\xD5\x83\x25\x19\x86\x7E\xC8\xFF\x89\xD0\x0B\x43\x15\x6A\xBC\x40\x33\x5F\x1B\x55\xCA\x4C\x6A\x13\x73\x52\xEA\x02\x31\xDB\x1A\x31\x63\x90\x6B\x65\x9C\x59\x09\x15\x52\x73\x5B\x6D\x2E\x89\x55\x93\x9C\x6C\xEA\xA0\x4B\x93\x9E\x82\x14\x9F\xD6\xE6\xB6\x36\x4D\x38\x67\x61\xB7\xCD\x53\xBA\x5E\x12\xF2\x2E\x30\x5C\x91\x2F\x35\xFF\x03\x12\x33\x7E\x06\xB1\x91\x6B\x10\x33\x21\x91\xC6\x3B\x3E\x2A\x63\xBC\x20\xCD\x35\xDF\x5D\xA5\x35\xA4\xA7\xA9\x52\x1C\x5D\x58\xD1\x7E\x0F\x69\x85\xF1\x4A\x37\x25\x1C\xE0\xEB\xB0\xAF\x88\x85\x02\x9A\x7A\x02\xB1\xD9\x88\xD7\x28\x45\x44\xB4\xDF\x13\xD5\xF4\xD4\x91\xD8\xEB\xFE\xD4\xF5\xA2\xA9\x13\x91\xE1\x81\xA8\x20\x00\xD3\x3B\x83\xE4\xCE\x3B\x31\x2A\x71\x48\x89\x43\xB6\x53\x94\x38\x45\x51\x66\x66\x43\x96\x51\x67\x53\x52\x4E\xED\x6F\x7E\x7C\x52\x9B\x6B\x5E\x3D\x48\x85\xF4\x94\x52\x3E\xFE\x1F\xA5\x47\xE2\x99\xFE\x09\x85\x04\x26\xCD\x3A\x68\x0F\x14\x6E\x57\x66\x36\x42\x17\x37\x6F\x1B\x3F\x39\xD5\x58\x60\x63\x9F\x1B\x5F\x14\x0C\xF2\x0D\x55\x46\xE4\x20\xB5\x56\xC6\x90\x40\xC6\x8B\x2C\xD3\xF9\xF5\x92\xEC\x24\xAB\xC8\xFC\xAF\xF5\xE0\x5F\x85\xB3\xA9\x8F\x7B\xFF\x49\x21\xA7\x1F\x79\xED\x5F\xBE\x87\xEF\xF9\x81\x17\x44\x91\xC2\xBF\xBD\x08\x91\x2D\x33\xC5\x14\x6C\x2E\x89\xD5\x2A\x35\x0F\x4E\xEA\x41\x29\x1C\xF1\xF2\xA4\xD7\xF9\xCF\x77\x7F\x08\x2A\xDE\xF6\x5D\xAB\x65\x6C\x52\x5A\x9B\x01\x44\xA0\xD4\x7C\xD2\x3B\x8A\xC8\x13\x95\x19\xA4\xE6\x2D\x93\x7A\x10\x4A\x21\x84\x90\x82\x20\x82\x0D\x4F\xAF\x96\x31\x64\xFC\xD1\xFA\x2A\xC4\x84\x29\xAB\x23\xEB\xBE\x66\x3F\xF2\xF0\x23\x8F\x45\x4E\xB3\xA1\x88\xE9\x8B\x69\x44\xF0\x4D\x54\x9B\xBB\x56\xAB\xFC\xA5\xBE\x57\x0D\x0E\x7B\xFF\xB2\x4A\x47\xE5\x90\x3F\x26\xD4\x4A\x61\x88\x3D\x22\xAD\x8D\xB6\xCA\x02\x06\x30\x38\x7C\xD3\x1B\xAA\xA5\xB3\xB0\xF4\xBA\x72\x09\x86\x06\x56\xCD\x67\xBC\xD3\xE6\xAF\xAC\x34\x12\x53\x58\x74\x5C\x9B\x03\x90\xC1\x12\x2C\x41\xB1\x51\xED\x82\x62\xFD\xB5\x9B\x55\x4A\xE5\xC4\xD2\x95\x11\xA4\x35\xF2\xDF\x31\x6E\x73\x0A\xB1\xF9\x9A\x93\xB9\xC0\x96\xFF\x4B\xE9\x53\x5A\x85\x5D\xE5\x12\x70\x55\xE6\xDC\x96\x7D\xA3\xD4\x5B\x28\x40\xA4\x38\xFC\x7D\x9B\x64\x24\x95\x30\x2C\x5E\xCF\xE2\x0B\xA3\x8C\xCC\x06\x76\x8D\xB2\xB7\x46\xC4\xF0\xDD\xA3\x72\x99\x96\xB5\x9B\x96\x95\xC1\xB2\x5B\xD6\x6E\xD8\x8D\x47\x33\xAE\x21\x3E\x5D\xA6\xB0\xDC\x5D\xD1\x9E\xFE\x8A\xF6\x40\x0A\x29\x44\xB7\x57\x43\x88\x4E\x8D\xAB\xAC\x59\x50\xD6\x2E\x28\x73\x0B\x4A\x21\xBA\xB5\xCC\x21\x2B\x63\x18\x96\x29\xE4\x5C\xD3\x91\x4F\x55\xBB\xA0\x0C\x47\xBF\xD3\xAE\x67\x79\xDE\x7A\x68\x45\x17\x3D\x76\xB2\xBD\xCE\xF3\xCA\xDD\xC4\x59\x22\x9B\xB0\x9B\xCE\x08\xBD\xD9\x6D\x8A\x33\xA6\xF8\xEE\x72\xB7\x76\xCB\x7E\x7E\xAE\x38\xBF\x2C\x96\x2E\xED\x00\x4B\x9F\x73\xB4\x34\xDE\x22\x94\xCC\x17\xA2\x64\x3A\x2A\x77\x77\xD6\x80\x70\x71\x1B\xF4\x1C\xEF\x48\x33\xFB\xDD\xF3\x66\xDF\x43\x40\x22\xB5\x0E\x01\xAB\xD4\x5C\xBA\xE4\xAF\x42\xCA\x78\x38\x42\xBE\xD7\xAE\xF0\xF9\xB0\xB8\x4C\x37\x98\x15\xF5\x77\x34\x7A\x99\xEF\x01\xE7\xA1\xB4\xA4\x18\xEF\xCB\xDF\xF0\x8E\x8E\x8A\x37\xF4\xFB\xA0\xA8\xA7\xD4\xC0\x1A\xB5\xF8\xAF\x54\x94\x27\x36\x1B\xC5\x5A\x19\x77\xEF\xF4\xF7\x50\x62\x7D\x24\xC2\xD4\x65\x19\xEF\x60\xE8\xE2\xBE\xFE\x50\x74\x0B\xA7\xB4\x1B\x72\xB5\xD2\xB9\x67\x64\x99\x5A\x33\x0B\x97\x6A\x67\xED\x3E\x67\xB1\xF1\x0F\x19\xB0\x19\x0B\x29\xF0\xFB\x1E\x0E\xFC\x8E\x6D\xB9\x3E\x72\xCE\xC5\x97\x65\xA8\x89\xAC\xD8\xE1\x9B\x86\x21\x97\xAF\xB0\xF0\xD4\x47\xF2\x00\x52\xA0\xAC\x20\x12\xD2\x71\xA7\xFF\xD9\x6F\x88\x5B\x8B\x72\x2F\x0B\xB5\xC5\x93\x21\xD9\xA0\x86\xC8\x8C\x64\x14\x50\x67\x26\xA0\x47\xE4\x23\x0B\x43\x2A\x50\x68\x79\xB4\x14\xC5\xEB\x94\x5F\x50\x6C\xC0\x25\xB1\xCA\x6A\x16\x18\x8E\x2B\xDC\xC7\x08\xF4\xCA\x08\x22\xBE\xE8\xAA\x3D\xA3\x16\x22\x79\xCE\xCA\x34\x82\x47\x4A\x80\x60\x85\x66\x3A\xBE\x42\xC8\xD0\x8C\xCB\x0C\xB7\x38\xC3\x99\xB0\xE8\xBA\x87\x54\xBF\x34\x5F\x9F\x94\xE4\x12\x32\xE6\x32\x16\xC0\x43\xE3\x7A\x34\x73\x7B\x99\x5B\x69\x66\x59\xB1\xA6\xA3\xED\xFB\x98\xF9\xB8\xC5\xF5\xFC\x48\xAE\x78\x6F\xD4\x53\xD8\x9B\x40\x23\x2A\x96\x6B\x94\x58\xC9\x91\xA4\x68\x54\x72\xC6\xEB\x88\xD3\x71\x40\x66\x4F\xAD\xE5\x8F\x15\xC8\xDA\x1C\x30\x37\x40\x64\x06\x7C\x30\x23\x33\x5C\xA5\xB3\x49\xF0\x45\x30\xD3\xD9\x8C\xCC\xF0\x24\x12\xD1\x52\x42\x64\xD4\x9D\xB8\xB3\xF3\x8F\x67\x6C\x3C\x53\x80\x36\x31\x64\xD3\xC7\x33\xD2\xE6\x6B\xA7\x56\xC1\x69\x4D\xFA\xCF\xB4\x5D\x9A\x76\xDF\xF9\xDA\x58\x6C\x36\x93\x1A\xFF\x59\x19\x75\x01\xD1\xD1\xC6\x85\x43\x84\xC1\x5C\xB0\x5B\x40\x5B\x7D\x07\x8F\x40\x75\xAB\x5E\xC4\x06\x4C\x4A\xE8\x24\x40\xD6\xE0\xDD\xE8\xA1\x48\x41\x36\x63\x94\x6A\x20\xB5\xC7\x93\x00\x99\xB4\xF9\xC9\x5C\x1D\xA7\x04\x52\x93\xAD\x1A\xEF\x18\x84\x6B\x63\xD2\xF8\x43\x00\x94\xA3\x2E\x30\xD7\x9C\x64\xD5\x3C\x12\xC3\xC0\x4C\x4E\x43\x5C\x57\x99\xB9\x06\x82\x71\x95\x43\x46\x51\xB2\x99\x11\x4E\x3F\x0C\x19\xB6\x14\x75\x19\xB4\xBD\x07\x90\xB4\x5D\x51\xEE\x07\xEE\x8E\x6A\xB3\x23\x82\x67\xD8\x40\x60\x83\x15\xA2\x9E\x81\xA5\x9C\x99\x53\xFF\xA5\xA6\xB0\x98\x9E\xD2\xEE\x73\x9A\x1E\x9E\xE5\x51\x1E\xE1\x18\x1B\x4D\xD6\x6B\xB6\x30\x64\x90\x8D\x00\x91\xB3\x38\x3A\x72\xBD\x44\xA6\x38\x66\x3B\x81\xD5\x2A\x9B\x5A\xDD\x97\x3D\x37\x1F\x76\xF8\xCA\x8E\xF0\x94\x10\x77\xA8\xC1\x27\xBB\x0D\x48\x10\x92\xC7\xA6\xFA\xF8\x6C\xA7\x89\xEE\x7D\x7C\x60\xE6\x05\x29\xD3\x8E\xB8\x2F\xF7\xF7\xFA\xA6\x39\x32\xBF\x41\x6F\x5F\xD6\x1F\x39\x35\x71\xFB\x0E\xBA\x3D\x4B\x3C\x2C\x90\x1A\xF2\x04\x97\x65\xE6\x60\x9F\x40\x30\x2E\x73\x7C\x42\x07\x51\x00\xD5\x04\x77\x98\x95\xF1\x25\x96\x23\xE0\x72\x9B\xBE\x25\x38\xE2\x4A\x19\xE7\xA4\xB7\x0B\xEA\xEB\xA8\x38\xD0\xBC\x0F\xDB\x1A\xC8\xD6\x44\x07\x19\xC8\x31\x8D\x6C\x3C\x90\xE3\x32\x98\x37\x6A\x40\x9F\x57\x59\x4D\xB6\x06\xDC\x6E\xFD\xE4\x20\x50\x13\x71\x56\x4C\xE4\xD9\xAE\xF3\x4C\xDC\x29\x9E\xA3\x40\xFD\x3B\x0E\xF3\x5B\x2D\x13\x90\x5D\x73\xB1\x24\xC7\x57\x5A\x7A\x68\x5E\xCB\xDE\x7A\x6E\xE4\xA0\x37\x32\x41\x8B\x88\x3A\x79\x2B\x6A\xF3\xA7\xDE\x54\x1B\xF3\x19\x7A\x42\xDA\xB9\xF6\x21\x37\x33\xB2\xEE\xF7\xE6\x63\x6F\x09\xE1\x0B\xAE\x3B\xBC\x35\x17\xBC\xEE\x74\xDE\xE8\x29\x23\x7D\x50\x93\xCB\x01\x52\x5C\x5C\xD6\xCD\x97\xE8\xBF\x3F\xBB\xF4\x4A\x23\x4E\xCF\x2E\x30\x98\x59\xE0\xD9\xA7\xB4\xC0\xFD\xD3\xEB\xFB\xDC\x4E\xD7\x67\xFE\x98\x1F\xFA\x53\x8B\x56\xCF\xE0\xA2\x27\xDF\x4E\x8B\x36\xCA\xF8\x48\x9C\xC9\x97\x3E\x35\xE7\x3F\x84\xFB\xFF\x7F\x7F\x88\xAC\x14\x23\xF2\x46\xA5\xF8\x56\x87\xDD\x78\xFD\x87\x9C\x48\x33\x1D\x33\xAC\xB6\x01\x46\x42\x0A\x1B\xBE\xB9\x11\xB6\x11\x5F\x82\x89\x7F\x08\xC9\x9F\xC5\xEE\x6D\xA1\x48\x31\xBB\x57\xBC\x5A\x5A\x2F\xCA\xD6\xFF\xFE\xB7\x7E\xCB\x7C\x3B\x1E\x2E\xF7\xEB\x57\x5E\x69\x6D\xBE\x56\xB5\xC5\xA9\xB1\x21\xB2\xDC\x16\x1E\xF9\x46\xD9\x08\xEA\x7E\x3C\x02\xCD\xEF\x57\x8E\x48\x98\x48\xC9\xB7\x01\xEF\x52\x94\xB5\xAB\x9C\xF4\x2A\x10\x9B\x03\x90\x9B\x3B\xEB\x2A\x40\x7A\x6D\xAE\x59\x19\x55\x34\xAF\xD4\x11\xEB\x9C\x28\x7A\x5D\x5A\x9E\x3A\x7B\xB3\x53\x2E\x9A\x57\xD2\x29\x7E\x1B\x9B\x61\xF0\xF4\xDD\xE5\xA8\x68\x06\xC1\xBB\xEF\x87\xDC\xF8\x67\xCC\x63\x1F\xDC\xD8\xF0\xEA\x97\xA1\x9C\x7E\xA1\x1A\x3A\x45\xA5\x79\x25\x0C\x9B\xF9\x7D\x07\x5B\xA5\x7F\x96\xEE\x1B\xBC\x76\xB8\x93\x21\x24\x0F\xDD\xDF\x7C\xF2\xE9\x9B\x78\xFF\x61\x60\x55\x44\x0F\xFD\x7B\x82\x88\xDD\x01\x77\x5B\xB5\xCD\x5F\xC9\x2A\x99\x55\x48\x8E\xAC\x41\x52\xBB\x5E\xF3\x23\xB9\x67\xA0\x2C\x0C\x20\x42\x2C\x21\x97\x5C\x97\xBB\x58\x1B\x25\x0F\xC1\x12\xE8\x63\xD4\x20\xCD\x7C\x0D\xBB\x40\xD7\x90\x40\x62\xD2\xDB\xAB\xDD\x26\x3D\x35\x36\x07\xD6\x90\x94\x6A\x1C\x13\x6F\xEE\xE4\x64\xB9\x0C\xBB\xCB\x04\x96\x71\xEF\x53\xD0\x75\x45\x38\xB4\x1B\xAF\xA9\x65\x94\x62\x91\xB1\xF0\x20\x07\x8D\x77\x10\xF6\x67\x0E\x20\x52\x9D\x86\xBC\xAE\x96\xCD\x35\xFC\xCD\xEE\x71\x95\xC2\x32\xA4\x2B\xA3\xF6\x96\xE4\x1D\xF3\x0F\x31\x4F\x98\xC0\x6E\x48\xEB\xAA\x60\x3E\x65\x19\xD2\x63\x38\x7E\x99\x52\x8E\x02\x0D\x05\x8D\x07\xBB\x3B\x0B\x5D\x26\xD5\x5E\xCA\x36\xFA\xA4\x36\x5F\x87\x13\x27\x5E\x23\xC5\xDB\x01\xF0\xFF\x4F\x8E\xCA\x82\x4D\x48\x01\xEF\x59\x0B\x3D\x23\x4E\xAF\x22\x5C\xA1\x2C\x34\x67\x40\x87\x02\x52\xBC\xCC\x8A\x32\xA5\x64\x14\x90\xD6\x64\xAB\x4F\x5F\x55\x25\x0C\x1B\xE2\xA8\x98\x85\x85\xC0\x24\x04\xA2\x32\x00\x6D\x76\x59\x0F\x1B\x3A\x97\x55\x42\x56\x57\x76\xDC\x6A\x8D\xBA\x61\x17\x63\x21\x62\x5E\x63\x6D\x8C\x1C\x92\x3D\xC2\x29\xDF\xA2\x38\xB0\x39\x80\x07\x1A\xF1\x92\xF0\x36\x1D\x57\xB8\x08\x6D\x91\xD7\xA1\x6E\x6A\xF9\x8C\x94\x2F\x4B\x7B\xA1\x76\x86\x61\x8C\xA2\x0E\xF7\xB7\x73\xE7\xCB\x35\x32\x4E\x98\x4F\xED\xE5\xDA\x32\xE7\x91\xBD\x5C\xE9\x1D\xB4\xEF\x1C\xF9\x49\x9E\x01\xDA\x43\x73\x66\x15\xF3\x53\x23\x41\x36\x69\x87\xA3\x41\xDE\x8E\x69\x10\xB1\xD6\xAD\xCD\x57\xBF\x27\x8E\x04\xDE\xB4\xEB\x78\xDB\x8A\xB3\xE1\xFC\xDB\xB6\x7F\x31\x11\xC7\xA1\xFE\x77\x22\x5D\x3D\xC2\x3D\x87\x74\xBD\xA1\x21\x5D\xDC\xCB\x4F\x4C\x51\xAD\x2A\x79\x5F\x95\x1E\xE6\x5E\x2E\x45\xF7\x90\x15\x63\x63\x63\xE3\xCB\x37\x35\x06\x8F\x2F\x3F\x7C\xFE\xE6\x7F\xF7\x2F\xBE\xEB\x95\x9B\x6F\xF8\xF8\x4D\x17\x20\x3D\xFC\x0D\xF7\x6D\x9A\x4B\xC3\x55\xB2\xA1\xDC\xFC\x77\xDF\x63\x2D\x28\x37\xFF\xE2\x07\xBF\xED\x07\xF6\x7D\xFF\x6F\xDC\x74\xFE\x7C\xA5\xA7\xC8\x97\x7E\x5B\x99\xB5\xE4\x2B\xD3\x90\xBD\xBB\xD2\x37\xBF\xE8\x5B\xDF\xF5\x9E\x9F\x1F\xCB\x43\x17\x4A\x2E\x8A\xA2\x6F\x5E\x7D\xE0\x7B\x92\x5B\x7F\x24\x3D\x74\xA1\x39\x21\x73\xFB\x1A\xB4\x7D\x0D\x34\x53\xDA\x72\x48\x69\x81\x73\x18\xBC\xFB\xE6\x3F\xFB\x67\x7F\xFB\x95\xC3\x5F\xF7\xC7\x0F\x5F\x38\x5F\x69\xD0\xE7\x1B\x53\x0B\xE8\xFB\x41\x83\xBE\x80\x4F\xC1\x11\xF2\xEB\x0E\x3D\x60\xFF\xBA\xF6\xD0\x79\xF7\xE7\xDE\x43\xE7\x1F\x68\x7E\x7C\xE1\xA6\xF3\x30\x30\x97\xA2\x7A\xEB\xF0\x37\xBC\xFE\xE1\x0B\x95\xB6\x08\xAD\x9B\xEF\x1E\x28\x29\xDF\x4C\x8D\x2B\x43\xDA\x3F\x1C\x95\x81\x51\x06\xD9\xAA\xFF\xE2\xD5\xE6\x37\xC5\xCA\xA8\x2C\x08\xD9\x37\x1C\xF7\x9C\xDC\xBC\xFF\x5F\x5C\xFD\xF9\xCF\x1E\xBC\xEA\xA6\xEF\xE0\xDE\x12\xEA\x6D\xE3\xDE\xAF\x33\xB6\xFB\x00\xB2\x13\xE5\x00\xFB\x3D\x5D\x0E\x49\x4B\x12\xC0\xB0\x36\x1E\x0C\x46\xC4\x7C\x6C\xC4\x9C\xF6\xA8\xE0\x83\x14\xB0\x77\x0C\xD3\x99\xA1\xF1\x8E\x8D\xCB\x00\xC9\xFC\xA0\x41\x88\x04\xF4\x03\x90\x40\x36\xAA\xF4\x4F\x80\xEE\xE1\x00\x04\x06\x11\x38\x84\x62\x5C\x0D\x61\x08\xE1\xC9\x51\x35\x84\x62\x04\x43\x3A\x25\xD5\x92\x11\x77\xA2\x38\x77\xE9\xBB\x56\x1D\x3E\x41\xC1\x65\x61\x61\xD5\xFC\x91\x77\x7A\x1A\xE5\x33\xC8\xCC\x35\xDF\x5D\x45\x35\x44\xA7\x51\xBC\xF7\x0F\x41\x0C\x83\x6A\x58\x03\x4A\x94\xE9\xED\xD5\xAE\x0E\x9D\x27\x29\x77\x00\x43\x27\x1D\x26\x27\xCB\xDD\xB0\xAB\x8C\x60\x37\x9D\x96\x21\x52\xDD\x5D\x84\x21\x03\x28\xCC\x7A\x5D\xED\xC6\x2B\x75\xE0\x42\x3A\x87\xE6\x6B\x5E\xDE\xFC\xC6\x61\x90\x6E\x15\x30\x18\x9B\xD7\xD6\x55\x64\xAE\x81\x01\x2E\x2A\x82\x61\x97\xEE\xFB\x87\x60\x40\xFD\xC2\x80\x04\x7B\xD8\x8D\x72\x0F\x3D\x1A\x42\x84\xB3\xB1\xB4\x74\x17\x53\xA0\xA8\x36\xFB\xCD\xCB\x20\x33\xDE\xF1\xD1\x8D\x8D\x08\xA8\x1D\x59\x20\xEA\x31\xC0\x4E\x21\xDA\x86\x7A\x38\x01\x5B\xC3\xD2\x1C\xE2\x31\x98\x47\x3C\x06\xDB\x12\x8F\xC2\x33\x3F\x83\x5C\x59\x61\xBD\xA9\xF0\xC1\xAF\x4E\x3F\xF8\xBD\xDE\x83\xDD\x9E\x7F\xC8\x7C\xB1\x7D\x84\x82\x6B\xEA\x81\xC7\xDE\x30\xFC\x27\x25\xBC\xD4\xCB\x1E\x08\x7E\x6A\xF0\x2F\x02\x9C\xCE\xB8\xE4\xE6\x27\xA8\xC5\x5F\xFB\x42\x4F\x80\x83\xE7\x48\xFB\xA7\x38\x56\x2E\x28\x7D\x50\xC5\x06\xF9\xB1\x92\x1F\x5F\x28\xDB\x82\x93\xDF\x5A\x0F\x7C\xE1\xB1\xEF\x58\x48\x49\x1F\x24\xFD\x69\x81\x19\x51\x71\xDE\xB2\x4D\xC8\x0C\xD2\x7C\x17\x79\xA9\x91\xB2\xEC\x00\x0B\x8E\xA4\xFF\x81\x35\xF3\x65\x4E\x2A\x79\x84\x25\xC5\x68\xBF\x27\x4A\x65\x8A\x32\x66\x4B\x55\x44\xEE\x83\x47\xCA\xC0\xA4\x64\x9F\xB4\x1D\x08\x6D\xE2\xD2\x37\x07\x4A\x45\x85\x6F\x90\xA5\x8D\x35\x9B\xAD\x99\xAC\x40\x38\xAA\x12\x88\x6F\x27\x9D\x90\x2B\xDD\xB1\xE1\xD2\x3D\xDB\x6A\x02\x29\xC4\xA7\x50\x94\xA3\x6E\xC9\xF7\x24\xE3\xD6\xFE\x21\xF2\x95\xD5\xD6\xA1\xC4\x37\xB7\xD5\x64\x8C\x03\x65\x6E\xAB\xAD\xEF\x47\xF1\x15\x8E\xE7\x96\x66\xC5\xFC\xCC\x04\xFC\xE2\x12\xFE\x1E\x81\x22\x87\xA6\x18\x7C\xB2\x11\xF9\xB7\xD8\x4C\xBD\x01\xA4\xD8\x41\x46\xAE\x4C\xFC\xFB\x18\xE5\x99\xD6\x66\x82\xF2\x22\xF8\xC7\x73\x89\x27\x3F\x3E\x05\x7E\x4D\xF9\xC7\x68\x96\x01\x37\xD0\xAC\xAB\x88\x6C\x28\x28\x6D\x13\x2F\x87\xB3\xDB\x22\xD0\x39\x47\x13\xBB\xE1\x10\xA2\x82\x07\xD9\x88\x7C\x10\x12\xD0\xC6\x03\x3D\x86\x70\xC4\x27\x40\xDF\xD0\x78\x31\x0B\x5A\x3D\x07\x8A\x7A\xFB\x11\xF3\xC9\xD7\x6B\x68\xBD\xB3\x58\xF9\x68\xBD\x37\x3D\xBD\x42\x6E\x07\x88\x41\xBC\x6D\xD6\x9F\xD6\xA3\x69\xD9\x82\xFD\x47\xC9\x29\x46\x8D\x29\x2E\x40\x50\x30\xCA\x9C\x9E\x0E\x0A\x31\x69\xEA\xFD\x32\x02\xD2\xF7\x14\xDA\xC4\x9F\x35\x6E\x29\xEE\x33\xF0\xF4\x6B\x85\x3F\x01\x69\x73\xF8\xFA\xAE\x03\x84\x08\xF1\x0D\xA0\xA6\x3B\xA1\x4A\xBD\xAA\x15\xAC\xDD\x07\x02\xD8\x8D\x75\xD1\x07\x9D\x51\x7D\x9B\x40\xD6\xD3\xD7\xCD\x9B\x34\x67\x19\x9A\x9D\xEA\x7F\x2F\xFC\x89\x0D\x76\xF6\x80\x34\x4D\x14\x00\x8C\x43\xE3\x36\x52\x28\x9B\x99\xD4\xFA\x37\xA4\x08\x27\x16\x47\x27\x35\xF8\x2B\xB9\x67\xFE\xBC\x3D\xDF\xA0\x6C\x6A\x62\xAE\x17\x44\xCE\x8A\x78\xF0\xBC\x32\x02\x45\xFA\xF5\x88\x5D\x89\x12\x08\x6A\xF2\x64\xAB\xAB\xD4\x6C\xFC\xC9\x9B\x1E\x38\x5B\x03\x27\xD7\x87\xD4\x5C\xFA\x91\xCF\x7F\xCA\x3F\xB9\x56\x05\x23\x4E\x3F\xAC\xC8\x17\x92\x1D\xBC\x39\x9D\x32\xD1\xC0\x2A\xE6\xBC\x0E\xE2\x34\x28\xF0\x6F\x5D\xE3\x3A\xC3\x46\x9E\xA9\x02\x64\x57\x29\xD5\xB1\x34\x82\x40\x2D\x0D\xB9\x18\xE1\x33\x2A\xB9\xB3\xF1\xA6\xCF\x7F\xCA\x3F\x6A\x47\xB0\x50\xB4\x4F\xC9\x33\x98\x72\xB0\xBB\x31\x15\xAD\x53\xDB\x2A\xF3\xB7\x5A\x94\x29\x43\x37\x9C\xE4\xE1\x64\xCD\xA6\x7B\x1A\x08\xFB\xED\xF7\xD2\x75\xE6\xD3\x5B\x36\x2B\xAF\xE4\x53\xEE\xE3\x06\x37\x58\xC1\x6E\x38\xE0\xD7\xE4\x13\x4B\x99\xB4\x19\x42\x11\x82\x6F\xA5\x42\x81\xCF\xC1\xC8\xB7\x2B\xA0\x98\x71\x1B\xB8\xD1\xE0\x8F\x8D\x4C\x8C\x78\x61\x2B\xCC\xB1\x49\x76\xB1\xA5\xFC\x2C\xEC\x4B\xC6\x97\x52\xE4\x80\x12\x75\xBB\x8C\x28\x16\xF1\x01\xC1\x67\x49\xE4\x9E\x39\xF7\x48\xB3\xDD\xB6\x14\x26\x1E\x27\x2A\x96\x67\xA7\x29\x91\x05\x58\x01\xD9\x4C\x52\x8D\xD8\x85\x48\x1D\x21\x5B\x81\x0F\x82\x6D\x05\x1E\x41\xC6\x6E\x0F\xF9\x35\xAA\xBA\xC2\xC7\x76\x26\xF4\x9D\xFB\x89\xFB\x62\x41\xE9\x83\x58\x29\x1B\x44\xF6\x08\xA6\x4A\x9F\x62\xAD\x27\x52\x15\xF6\x2E\xC2\x33\x87\x08\x6D\xDA\x0A\xC9\x0A\x69\x2B\x77\xEE\x20\xD7\x74\x4E\xB3\x21\xE7\xE6\x15\x3A\x53\x74\x0C\x14\x9F\xAA\xA1\x36\xF7\xB5\xEB\x36\x42\x3F\x24\x45\xE4\xDC\x09\x39\x85\x09\x52\xFA\x1F\x7E\x64\xFA\x28\x5C\xEE\x18\x48\x8B\x94\x28\xEF\xF0\x54\x6A\x20\x82\xBF\xB2\x33\xF4\x4F\x20\xE5\x32\x60\x56\x0F\xEC\x10\x32\x64\x84\x8C\xCC\x84\x04\x8D\x08\x12\x1E\x51\xD6\xBC\x2B\x14\x38\xD9\xA0\xBE\xCC\x85\xF1\xCC\x04\xE4\xA8\x4C\xDC\x88\x76\xA8\x05\xC8\x1F\xB9\xB1\xC2\x9A\x32\xF2\x84\x35\xC5\x0C\x87\x4D\x19\xF1\x06\xEB\x55\x57\xDB\xAF\xB5\x7E\x93\x20\x12\xB2\x2D\xEA\x0B\xBB\x5D\xD1\xB8\x8A\x1D\x54\x62\x94\x30\x56\xB6\x47\x78\x6C\x62\xFD\x3E\x5B\x2C\xE7\x4E\x85\x99\xB8\xA5\x8B\x5E\x17\x47\x2C\x86\x2B\xB1\x2E\xC9\x89\xC8\xB9\x7A\xF5\x76\xDC\xE3\x28\x46\x7F\x8B\xCB\x63\x00\x39\x87\xD3\x92\x91\x83\x12\xD7\x63\x87\xEB\x55\xB4\x59\x57\x31\xDE\xA8\x2B\xE4\xCF\x15\x9D\xB5\x7E\x5A\x10\x6F\xDD\x7B\x98\xD6\xB1\x51\x45\x9B\x95\xCF\x27\xE5\x54\xDD\x29\x47\x6E\x55\x6B\x0D\x95\x80\x68\xB3\x6C\xCF\x2B\xA5\x57\xD5\x7F\x25\xFC\xB8\x99\xE2\x76\xA8\x47\x79\x8F\x8F\xE4\xD2\xBA\x8B\xD3\x3C\x25\xBB\x90\xE2\xCE\x95\x31\x84\x65\x02\x3E\xB3\x1C\x24\x87\x26\x08\xA3\x0C\x22\x5C\x48\x7C\xBD\xF4\xD6\xAB\x7C\xB3\xAE\x06\xA0\xEB\x4A\x43\x7E\x18\xEE\x83\x01\x64\x2B\x5B\x67\x41\xC3\x60\x65\xEB\x2C\xAE\x4E\xB7\x6B\xCA\x37\x11\x7B\xDB\x35\xD9\xB2\x0A\x94\x0E\x3D\xE9\xA8\xD2\x3C\x8E\x2C\xC4\x05\xE5\xDF\xD2\x22\x37\x73\x9D\x14\xB0\xA4\xF5\x90\x0B\x1D\x50\xE5\x14\xEB\x7D\x7E\xBF\x50\x82\xD6\x2D\xD6\xE7\x6D\xCD\x90\x83\x93\xE5\x19\x73\xB6\xAE\x08\x98\x48\x48\x90\x40\x6C\xF1\x55\xC4\xB7\x1A\xA3\x96\xDA\xE2\x49\xF3\x66\x29\x08\x7B\x5B\xF5\x05\xAA\x43\x70\x0F\xA8\xAD\x7B\x21\xD8\xD8\xE4\xFA\xA1\x0A\x42\xF0\x4F\x8D\x09\xDF\xCE\x32\x8F\x70\xB6\xC7\x23\x80\xD2\x9F\xC8\x82\x70\x22\xD6\xFD\x89\x58\x6F\x2A\xC0\xBF\x51\x8D\xAB\xB0\xA3\xC4\xE6\x24\x4E\x9C\x16\x46\x68\xF3\x93\x1D\x42\xDA\x44\xF6\x98\x49\x69\x09\x31\xE5\x14\xC4\x63\x6E\x83\x84\x8C\xA8\x6F\xA7\xD3\xF9\x46\xBC\x6F\xEC\x1D\x7C\xD1\xE3\x00\x62\x51\x1B\x55\xFC\x22\x79\x95\xA7\x5C\xE7\xDF\x14\x35\x29\x1C\x02\xDB\x26\xE8\xB6\xD1\xA4\x7B\xF1\xF6\xC9\x87\x7E\xE9\x9E\x0D\x6F\xE9\x5E\x56\xF9\x4E\xDA\xE2\x22\x6A\x06\xFD\xC9\xF7\x3B\xD9\x62\x4F\x7F\x48\xCB\x01\x28\x72\xCE\x1D\x40\x0E\x12\xB1\x26\x5B\xAF\x8A\x4D\xBA\x48\x20\x67\x98\x16\x7D\x98\x46\x2D\xBE\x14\x9B\x55\xDE\xC5\x17\x4B\x2C\x06\xF8\xCF\xA0\x75\xEA\x85\x62\x93\x52\x9B\x40\x80\x04\x27\xE5\xE8\x10\xEB\x97\x6D\xC5\xD0\xFE\x24\xFD\xCE\x24\x91\x29\xCE\x21\xA0\x49\xE6\x78\x23\x75\x26\x39\x80\x01\xC8\xB9\x93\x1C\xF4\x26\x29\xBB\x93\x74\x56\x4E\xFC\x27\xEF\x4F\x92\x72\xB2\xE2\xF1\xAA\x96\xD8\x47\x9B\x5D\x05\xA9\x3C\x8B\x8D\x69\xD9\x05\x29\xE7\xFB\x29\x77\x83\xB6\x15\x97\x96\x81\x8D\x57\xD5\x1E\xFA\xF9\x22\xFF\x10\x36\xAA\x5E\x8C\x1D\xED\xAD\x61\xC9\xE6\x06\xCA\x61\x99\x48\xF7\xED\xD5\x80\x51\xE3\x14\xC5\x66\x72\x91\x0A\x5C\xDA\xE0\xD4\xB8\xC1\x6A\x5C\x9E\x0F\xD1\xDC\xC5\xF9\x5B\xF7\x82\xDC\xDA\xD8\xAC\x72\xAA\xFE\x00\x12\xF2\x53\xE3\xD2\x87\x14\xF6\xC0\x8B\xE9\x58\x96\x03\xAB\x19\x74\x1C\x06\xD1\xFB\x17\x21\xE8\xA2\xAD\x0A\xA1\x67\xA1\xB3\x59\xE5\xEC\x50\x9E\x1F\xCB\x25\xB8\xCD\x84\x62\xB3\x86\xC1\x3E\xE9\xBD\x9C\x32\x85\x91\x77\xBA\xAD\x2D\x80\x3C\x02\xC7\x2B\x37\xCC\x08\xF9\xC8\x64\x48\xA3\x86\xB4\x57\xBB\x1B\xA7\x7A\x9F\xAD\xC0\x0A\x24\x64\x90\x13\x39\xE2\x6D\xEB\x6F\xDA\x1D\xDD\xFD\x6A\x77\x0B\x06\x75\x35\xE8\xDD\x1C\x0A\x06\x2B\xD5\x80\xC8\xFE\x80\xF8\x34\xB7\x8B\x76\x4F\x87\x48\x80\x86\x10\xBC\x9C\x89\xD4\x5E\x02\x21\x6F\x23\xB3\xE0\xB4\x16\x7E\x10\xB8\x7B\x2B\x28\x07\x36\xEA\x65\x37\xAE\x4F\xBA\xB2\x21\x39\xDE\xE0\x54\x4C\x61\x8A\x27\x8A\xBA\x3C\x51\x3E\xEA\xE0\xD4\x00\x91\x69\x80\x83\xE7\x47\x72\x61\x44\x39\x80\x5D\x34\x02\x01\xC3\xD8\xB8\x91\x41\x5D\xE5\x08\x6A\xE6\x5F\x78\x39\x12\x89\x89\xEC\x06\x1E\xD0\xE2\xB8\x0D\x8B\x5C\x5D\x06\x5D\xC3\x2E\xA4\x5D\xBB\x60\x37\xFE\xB3\x1B\x5E\xCC\x01\x04\x2F\x76\xE1\x92\xC8\xE1\xB1\x68\xCC\xD7\x05\xA4\x35\x36\x64\x46\x8A\xE9\x9D\x11\xC7\x39\x15\x3F\x85\xC4\xD1\x5B\x52\xC1\xA3\x6C\x67\xBC\x13\x4E\x53\x32\x7B\x38\x49\x65\x92\x52\xB7\x48\xA8\x25\xA7\x68\xA3\xDD\xB0\x47\x36\xB2\xF0\x94\xBC\xFD\x03\xC8\x7B\x68\x9D\xE3\xD5\x33\x07\xAD\xF3\xAD\x7B\x21\xDB\xD8\xAC\x06\x08\x90\x1C\x12\x3C\x0F\xED\xDC\x24\xFE\x23\xFB\xD6\xCA\x94\xC9\xE8\xD1\x79\x64\x10\x8F\x32\x52\xCF\xA3\xE4\x1E\x32\xF3\x32\x34\x6F\x54\x4E\x27\x12\x0D\xF1\xF7\xEF\x3D\x62\x4B\x0F\x87\xE6\x53\x8A\x82\x43\xF6\xC9\xDF\x7E\xE7\x3D\x1B\x9E\xF9\xF0\x23\x64\xDC\x2F\xBE\x8F\xD5\xFF\x7F\x81\x3F\xCD\x4B\x8D\x68\x5A\x14\xDF\xCF\x6F\xD2\xF6\xC9\x0F\xD0\x13\xE7\x55\xFF\xE7\xB1\x88\x27\x36\xEA\xBA\x0A\xE8\x04\x99\x5F\xE8\xDD\x1B\x74\x0D\x24\xB7\x57\xA1\x79\xF5\x29\x64\x9F\x23\x44\x57\xAE\x7B\x20\xCF\x80\xA0\xED\x53\x5C\x93\x4E\x9E\x01\x8F\x7E\xB3\x98\xA2\x1A\x4E\x8D\x00\xA4\x6C\x4B\x4A\x29\x66\x85\x75\xDF\xAC\xB3\x2F\xC5\x04\xEF\x71\xC1\x1C\x04\xA7\xD7\xDF\x40\xA8\x34\x99\xEC\xCA\xB4\xF5\x39\x35\x09\x44\xC8\xCD\xA6\x38\xD9\x9F\xFC\x70\xAB\xFC\x11\x1A\xB4\x51\x27\x73\xAF\x5B\x8F\x95\xEC\x71\x03\xE5\x09\xE9\x07\x1A\x94\x49\x6F\xAF\x22\x73\x27\x2E\x85\xC2\x80\x29\xA2\x54\x99\x27\x3C\x7C\xFC\x96\x49\xE7\x39\x95\xD0\x7D\x32\xC2\xE7\x3F\x7E\x57\xE7\x39\x5E\x18\xE6\x8D\x1F\xA5\x0F\xBE\xF0\xF3\xDD\x2F\x3A\x61\x2E\xDA\xBC\xA6\x3B\xE8\xF9\x1F\x0A\xB1\xF9\xA7\xFF\xFC\x7B\xA6\x07\xB8\x78\xEF\x37\xE3\x9B\x8B\x7F\x77\x78\x7A\x88\x8D\xAD\xCF\x2A\x7C\xB5\xF1\xF8\x4F\xBE\xA6\x37\x08\xBE\xFB\xD5\xDF\xF9\x7A\x7A\xF7\xFE\x07\x6F\x6B\xDF\xE9\x8E\x4C\x00\x36\xA8\xD2\x66\x9C\x41\x38\x27\xCE\xC5\x6D\xC2\x09\x4A\x25\x1F\x24\x06\x24\xED\x4B\x99\x81\xB0\x57\x87\xEF\x3A\x20\x8B\xE6\x6B\xD8\x9C\x40\x87\x52\x74\x61\xDE\x73\x41\x4E\x06\x01\xAE\x58\x05\x94\xDA\x04\x97\xAC\x78\xC9\xE4\xAD\xA2\xA8\xD6\x2E\x2E\x57\xF1\x72\xAD\x0F\x0B\x08\xBB\x54\x65\x97\x4A\xCF\x25\x3D\xA7\x65\x2A\xBB\x4C\x7A\x4E\x05\xCC\xE8\xCC\xD2\x0B\xA6\xC7\xF8\x86\x8A\x7D\x41\x00\xA9\xBB\x4C\xCF\x72\x5A\xAF\xB3\xA4\x2A\x2A\x03\x52\x6A\x57\x59\x83\x78\xDB\xAC\x36\x58\x29\x13\x5E\x74\x6C\x49\x24\x7E\xCF\x8B\x77\xBE\x2E\x9D\x65\xC7\x83\x40\xF9\x52\x78\xE1\xA2\xA9\x65\xC1\x82\xC5\xA8\x05\x8B\xF7\xE7\x82\x4A\xCE\x05\xAB\xE8\xE6\x75\xD7\x76\x2A\x34\x20\xE1\xA8\x62\x1C\x6D\x87\x43\x8C\x56\x84\xD1\xED\x50\x4F\x50\xC3\xB7\x4C\xBA\x03\xA5\xF8\xE8\xCE\x66\x10\x62\x78\x04\xE2\xD8\x36\x60\x76\x20\xD6\x94\x26\x94\x99\x29\x48\x4F\x91\xDE\x0D\xE9\xD4\xAF\x91\xD6\xF5\x8F\xB5\xD0\x13\xCB\x67\xFF\xEA\x14\xAD\xB1\x4A\xC6\x04\x07\x7F\xF5\x29\xBC\xF6\x82\x23\x8D\xDC\x49\x84\x20\x64\xCA\x60\x12\x08\xC6\xEE\x59\x44\x7C\xE8\x0C\x3D\xA0\xF4\x94\xEA\xA4\x0B\xB6\x90\xBD\x70\x7D\x3A\x9C\x0A\xE9\x6B\x7A\x7B\x15\xE3\x4A\xC3\x9A\x4B\x2E\x64\x21\x3E\x45\x98\xC4\x04\x93\xB0\xAE\xA8\x51\x62\x1B\xA5\xB8\x9F\x21\x01\x32\x26\x40\x52\x03\x6C\x9F\xD8\xF6\x65\x9A\x51\xCF\xB4\x03\x9A\x77\x20\x44\x6C\xD2\x65\x88\xBC\x19\x7E\x9A\xD0\xA7\x94\xFD\x29\x2C\xE3\x8C\x44\xA9\xC4\xDA\xDC\x7D\x93\x30\xDB\x4D\x14\xB6\x72\xCC\x58\x6C\x71\x28\xB1\x38\x14\x93\xD4\x03\xBE\xB9\x8B\x6A\xD9\xD9\x5B\x94\x09\x2C\xDF\xA2\x31\x27\xC5\x8C\x71\x7B\xA8\x2C\x16\xBB\xA6\x79\x27\xC8\xF0\x48\x55\x8D\x8F\xE4\xD2\x81\x97\x34\x07\x9C\x0B\xB2\x23\x64\x59\xB5\x45\x43\xB7\x7D\x3D\xAF\xE6\x44\x80\x04\x2F\xF0\x02\x07\x54\xC2\xD3\x98\xF1\x94\xE0\x43\xB0\x48\x1A\x58\xA4\x59\x4C\x05\xB0\x08\xF9\x63\x46\xFE\x32\x63\xB0\xF1\x2A\x63\x5E\x65\x49\xC5\xF1\x42\x77\xB0\x62\x7B\xB0\xCA\xCC\x65\x1F\xC5\x9B\xE0\x56\xCA\x2C\xC1\xBB\x47\x5D\xD0\xE1\x89\xE9\xF0\xB0\x21\x8B\x1C\x13\x33\x1E\x19\x65\xA3\x0F\x77\x39\x07\x8A\x4C\x49\xE6\x10\x6F\xA5\x21\xE5\xA5\x24\xBC\x94\xB4\x66\x33\x7F\xCA\x23\x24\x7C\x3C\xE9\xA9\xC4\xA7\xBC\x9E\xC4\x1E\xE6\xD4\x1A\x7F\xD3\xA9\x8D\x4B\xAD\x81\xD9\xEE\x73\x6A\x45\xAC\x32\x74\x5B\xDE\xF2\x44\x2C\xAF\x77\x78\x22\xED\xCE\x9C\xE6\xDD\x0C\x79\x37\x91\xB3\xE1\x8A\x74\xC4\x09\xDF\xCA\x6E\x56\xA7\x91\xFD\xC9\x9B\xD3\x01\xA2\x29\x0B\x85\xFB\x55\x06\x90\x97\xCA\x8A\xEF\xDC\xF9\x42\xDA\x1E\xB4\xB4\x5D\x33\x44\x24\x43\x44\xD7\x25\xA5\x09\xD1\x0C\x11\xC9\x10\xA1\xA7\x28\xB5\x58\x88\x48\x0B\x11\x7A\x2E\xE9\x39\x41\x44\x5A\x88\x68\x9B\xC5\x49\xBB\x7D\x6E\x78\x6D\x7C\xA3\xD9\x61\x18\x31\xBE\xA3\xB2\x72\x3C\x29\xD5\x71\xE4\xB4\x8D\x1A\x7F\xB9\x44\x44\x6E\xA1\xC1\x0A\x39\x93\xBD\x06\x45\x3F\x3C\x0D\x39\x09\xEC\x71\x29\xED\x9A\xD9\xFF\xA4\x47\xD2\x07\x2D\x49\xD7\xD3\x98\xC7\x73\x0D\xDA\x35\xC4\xDD\x35\xA8\x76\xCD\x71\x77\xCD\x7E\x03\xA1\xB8\x03\x21\xD9\x40\x33\xEE\x40\xB3\x47\xD2\x83\x96\xA4\x6B\x3E\x44\x31\x1F\xA2\x76\xB8\x96\x12\xB5\x43\xB5\xE4\xAB\x1D\xC8\x11\x3A\x3B\x88\xF1\x4A\x01\xBA\x8C\x1B\xE8\xCA\x39\xD0\x6D\x20\xAB\x21\xE6\x0A\x69\x39\xD1\xF5\x98\x33\x58\xD3\xAD\xDF\xC4\xDD\x90\xC7\xA7\x77\xAC\xA6\x5A\xB4\xFA\x9C\x90\x72\x5D\x4C\x16\x68\x54\x9C\xA6\x8B\x48\x4E\xAB\xE1\x0A\x36\x49\x81\xEE\x34\x5C\x41\x23\x88\x85\xAD\xE0\x1C\xCC\xD7\x70\x39\xFD\x6A\xA3\x35\x09\x36\xF5\x37\x79\xE0\x99\x8B\x6F\xF8\xB9\x77\xAD\x53\xFE\xED\xC3\xFF\x01\x7B\xBB\xEF\xE1\xB7\xBD\x84\xCA\xB3\xDA\x04\x52\xF2\x6A\xFB\xE7\x45\xEF\x06\xB9\x0C\xDE\xE1\xF7\xFF\x98\xB8\x41\x66\x33\x1F\x5F\xFC\xF2\xE3\x8F\xDC\xBD\xF0\xE3\x4F\xF7\x3F\xFE\x3D\x3F\xF0\xAD\x4E\x49\x4D\x8C\x28\x95\x3C\x64\x3E\x89\x1C\x38\x63\x26\x95\xC2\x43\xD1\x9C\x9C\x35\x83\xAD\x32\xA2\xEC\x13\xB2\x49\x38\x18\x72\xE1\x81\x78\xCB\x26\xCD\xD8\xAA\x12\x50\x5B\xEB\x10\x9D\xDB\xC4\x5B\x38\x81\x84\xFF\x8E\xB1\xE5\x9D\xAC\xF8\xB7\xD7\x07\x97\x7F\xFB\x3E\x02\xF5\xF7\xDB\xEA\x45\x1B\x70\xB2\x8A\x47\xE6\x07\xF8\xE7\x77\x1A\x71\xB4\xD2\xA3\x2A\x5C\xA2\x0D\xF1\xF8\x8E\x95\xC8\xC6\xB7\x4F\xCC\x0F\x52\x0F\x3F\x44\x9F\xC4\x23\xF3\xC3\xF4\x87\x26\xCF\x69\x86\x72\x6E\xE7\x9E\x90\x0B\x35\xD3\x11\xDC\x8C\xEB\x29\xEB\x7B\xC8\x9B\x1A\xA2\x78\x0D\xC9\x39\xA7\x8F\xAB\xC8\xB5\xBD\xF7\x90\x92\x51\x08\x4E\xD6\x16\x1B\x59\x57\x31\xE4\x2B\x96\x8D\xC0\x49\x65\x9D\x49\x09\xB2\x78\xBC\xB6\xE6\x4C\x4C\x38\x38\xA8\x2D\x92\xEC\x42\x42\x25\x8F\x74\x09\xAE\x6F\xCF\x64\xA4\x31\x9D\x7A\x18\xCF\x7B\xA8\xE6\x3D\x2C\x10\xA5\x68\xDA\x21\xC7\xDB\x6B\x48\xF5\x2F\x4D\xED\xAD\xDF\xEC\xAD\x74\x7B\xAB\x70\x6F\xD9\xDB\x75\xAB\x0C\xA9\x92\xB2\x28\x23\xDF\x5D\x96\x5C\x54\x62\x8B\x89\x55\xB4\x55\xC5\xE0\x6F\xAD\x43\x78\x6E\x93\x2D\xA6\x31\xFF\x4D\xC5\x2E\xEF\x64\xA9\x92\x6F\x28\x76\x80\xE8\xED\xAD\xA0\xBD\x0D\xDC\xDE\x0A\xDA\xDB\x68\xB4\x60\x1F\x03\xB7\x8F\x11\x07\x14\x08\xBA\x41\xED\x3C\x63\xAA\x0A\xEC\x91\xAE\x3C\x80\xE0\x7A\x52\x68\x86\xEB\x10\x13\x30\x02\x84\x42\x06\xD9\xCC\xE3\x98\xDD\x01\x64\x5D\x45\xA0\xDD\xBE\x21\x3A\xA5\xBD\x7D\x4B\x40\xE0\xBE\x65\x6E\x30\x24\x01\xA1\xE1\xD1\xEC\xBE\x35\x9D\x7A\x9C\x69\x36\x9A\x7A\x18\xCF\x7B\xA8\xE6\x3D\xA4\x7D\xA3\x19\x07\x90\xF1\x9C\x12\xFD\x57\xBE\x92\x13\xB1\x1E\x4E\xE4\xBA\x6C\x13\x84\x20\x19\x72\xFE\x26\xC6\xBB\x5E\xD2\x4E\xF2\xCC\xAC\xCE\xC0\x9D\xC9\x80\x55\x30\x09\x1B\xA5\x52\x56\xF9\x6A\xE3\xF1\xE6\x73\xF6\x21\x0D\x6A\x65\x34\xAE\x34\x85\x4A\x29\x48\xF9\x67\x36\x26\x6B\x98\x86\x6C\x65\x54\x6F\xE1\x28\x5F\xC0\x4F\xD6\x41\x6D\x9D\x83\x90\x95\xE1\xCA\x75\x13\x57\x14\x55\xBF\x42\x7A\xF1\xCD\xBA\x4A\x41\xDF\x41\xD4\x50\x6D\xDD\x0B\x7A\xAB\xCA\x37\x36\x4F\x51\x97\xDA\x78\x90\xB4\x5D\xFE\x25\x77\x99\x9F\xAB\x72\xFC\xF9\xF7\xF4\xB3\x1A\x50\x27\x30\xD8\xAC\x34\xD0\xF3\x2F\xF3\x73\xDB\x79\x00\x7A\xA5\x46\x86\xBE\x06\x05\x38\x0D\x5C\x40\x5D\xE1\xF8\x35\xC5\x13\xC5\x34\x81\x95\x1A\xF8\xE8\xE2\x3B\xBE\x12\x6F\x6D\xBD\x74\x94\xBB\x24\x03\x77\x49\xAA\x1A\xA9\x14\x6E\xF4\xAC\x2A\x3F\x6A\x6F\x52\x7A\x9B\xB6\x6F\x07\x9B\xED\x3D\x9B\xD6\x07\xED\xFE\x96\x0D\x8D\x77\x06\x3A\xCB\x8C\x6A\x18\x6C\x96\x38\xED\x92\xF3\x18\x82\x5A\x83\x60\x0D\xD1\xED\xA7\x5B\x3E\x46\xEB\x5F\x88\x23\x35\x61\xF3\x0B\xFE\xFF\x80\xCC\x78\xDF\x49\x19\x48\xCC\x7F\xFE\x70\x4F\x4B\x2E\x28\xB7\x97\xF9\x6C\xE7\xA9\x3B\xDA\xFB\xA4\xE7\x04\x0E\x9F\x33\x98\xDC\xC9\xE9\x2C\xA5\xC9\x28\x2F\xA6\x91\x67\xF0\xE2\xDC\xA2\x33\x44\x15\xDC\xF0\x1C\x59\x7A\x98\x52\x05\x5A\x4A\xEB\x80\xEC\xC8\xF5\xA4\xDE\x42\x16\xBB\x1A\x80\xC6\x7F\x86\x88\x4C\x05\x69\x37\xAB\x41\x5D\x2D\x91\x5E\x6E\x09\x0A\x44\x9F\x25\x83\x77\xE4\x12\xF8\x2B\xA3\x31\x57\x84\xCD\x38\x65\xFB\x52\x5D\xED\xA2\x86\xBB\x10\x0D\xC6\xD5\x2E\x6A\xB8\xAB\x69\x38\x84\x14\x06\x50\x8C\xA9\xCD\x00\x3B\xAB\xE9\x0E\xF9\x16\xCA\xD8\x90\xC3\x12\x64\x63\x3B\x50\xD6\x7D\x67\x0F\x75\x8C\xFF\x50\x35\xDA\x1A\xAF\x1F\x67\xA8\x13\xEC\x19\x4F\x5B\xB3\x1B\x17\x9C\x1A\x59\x2E\x93\xC5\x57\x9E\xA9\x76\x01\x65\xD9\xDA\x63\xAD\x77\x2F\xA2\x1A\xDC\xE5\x8B\x29\xA1\x68\xB9\xD7\x82\x66\x40\x5E\x54\x2F\xAA\xAB\x25\x06\x48\x0C\xBB\xEA\x2A\xE1\xFA\xEA\x31\x83\xCA\x02\x84\xD6\xA9\xEB\xEA\x25\x34\xCF\x97\x30\x40\x5E\x42\xEB\x7C\x49\xB3\xCE\x84\x22\x44\x9A\x36\xD9\xBC\x36\x43\xD0\x0E\x12\x9A\x20\x81\x0F\x97\x20\x70\x20\x08\x08\x04\x0C\xDE\x17\xE3\xB2\x07\xB0\x17\x77\x87\xD3\xAC\x50\xC2\x43\x01\x7B\x8C\xC4\xFF\x3F\x39\x2A\xAF\x32\xA2\xDC\xCB\x8B\x7A\x09\x28\xD8\x53\xE3\xF6\xBF\x08\x76\x97\x23\xD2\x7E\xED\x85\xE5\x53\x88\x2E\x26\xE3\xEB\x90\xDC\xD7\x46\x24\x62\xD9\xF5\x2D\xB1\x49\x8C\xD6\x57\xE0\x41\x6C\x26\x31\xAE\x02\x9A\x7B\xD0\xD9\xF0\x5D\x78\xFA\x08\x62\x64\x4A\x0B\x40\x5B\xB8\x0C\xE9\xBB\x21\x04\xF8\xDD\x90\xBE\x1B\x36\xDF\x2D\x41\xE1\x96\x57\xF0\x0E\xE3\xE5\x96\xD2\x1E\x27\xA0\x21\x70\xF0\x08\xFA\xEF\x1A\x08\xBC\xA4\x85\xC0\x08\xB7\x7B\x04\x7B\x51\xC4\xD8\x0B\x57\x51\xF8\xD8\x32\x2E\x7F\x19\x77\xF8\x64\x19\xC3\x9E\x52\x41\x6C\x2F\x2B\xE4\x07\x32\x66\xF0\x28\x03\x98\xFF\xF2\xDC\x83\x8C\x37\x38\x03\x9B\x51\xB1\x2A\xAC\xAC\x59\x40\x40\x5A\x02\x01\xC2\x0C\xCD\x35\x36\x4B\x39\x05\x5D\x56\xC1\xA8\x2A\xCC\x5D\x35\x14\xE0\x83\x6F\x0A\xCA\x7F\x1F\x90\x4B\x91\xC6\x37\x67\xF1\x4D\x80\x18\x7B\x27\x68\x7C\x33\xB4\x2F\xD6\xDD\x0B\x65\x5F\xF8\x94\xF3\x0D\x9F\x48\x7C\x62\xC4\xEA\xD8\x88\xFA\xCE\x31\xC4\xA7\x29\x02\x4C\xD5\x65\x66\x33\xD9\x68\xBD\x21\xD8\xBF\xC5\xD1\x89\xCF\x75\x29\xC2\x97\x3E\x6C\x5D\x6E\x9A\xC3\x60\xFE\xFE\xC3\x36\x1F\xA7\xB9\x7B\x63\xE3\x00\xF9\x42\xF8\x5D\xB2\x32\x01\x59\x9C\xE3\xBA\x23\x36\xB1\x3A\x89\x63\xC5\xDB\xCE\x71\x42\xA6\x69\x63\x99\x78\xC6\x67\x20\x9E\xF2\x0C\x1E\x0D\x43\x45\x3C\x8E\xA4\x3B\xB3\x4D\x9E\x61\x33\x9E\x21\xB5\xBC\xBD\x54\xE6\xC7\x3E\x42\x6E\x94\x76\x32\x07\x70\x32\x6F\xFD\x88\x4D\x16\xDB\x4E\x26\x98\xA2\xA7\x8E\x98\x06\x66\x62\xE5\x0D\x02\xD2\x3D\xF7\x74\xDC\x84\x8D\x77\xC2\xB2\xC7\x16\x84\x77\x73\x9D\x10\xD6\x70\x2A\xCE\x23\x54\xA6\x4C\x62\x34\x37\xF4\xAF\x97\x19\x6E\xE4\xF5\x32\x2E\x73\xCB\x95\xA2\x48\x91\xD4\x15\x11\xD7\x21\x7B\x2A\xC4\x75\x55\x40\x40\x07\x63\x88\x47\xA7\xA0\xD3\x57\xF0\x39\x2A\x20\x04\x6D\x8F\xE8\xAE\xBA\xDA\x4D\x0D\x77\x33\xED\xE9\x36\xE4\x33\x16\xC3\x70\xAB\x5A\x86\x8C\x38\x72\x32\xF4\xD0\x89\x8C\xDD\x89\x0C\x9A\xE3\x09\xBB\xB6\xAA\x3D\x90\xDB\x86\xBD\xF1\xBB\x0D\xD9\x90\x14\xC3\x72\xD3\xB4\xD7\x67\x4C\x4D\x63\xEE\x33\x86\x3D\xF3\x47\xEE\xB6\x72\x82\x5D\x15\x02\xA7\xF5\xE8\x41\x93\xA5\xBC\xD0\x66\x83\x63\x5D\x50\x80\x22\xC7\x1E\x88\xCE\x21\xCB\x87\xDD\x97\xF9\x61\x51\x2E\xDB\x30\xE6\x00\x96\x6D\x2A\x99\x6A\x99\x2E\xB3\xF6\xE2\xC0\xAB\x0C\x32\xF7\x36\x83\x61\xEF\x2D\x5D\x2B\xB9\xED\x31\x73\x0B\x2C\x97\x1D\xDF\x1F\x72\x4E\x2B\xDA\x50\x6C\xBA\x07\xF6\x60\x83\x2A\xB7\x0D\x33\xBC\xEC\xE3\xC3\xA2\xCC\x8D\x47\xA6\xD7\x00\x72\x37\x56\x3E\x3B\x93\x01\x0C\xC8\xE3\x60\xAB\x5A\x5E\x30\x87\x1C\x32\x58\x76\xA2\xD4\x10\x27\x31\xB4\xDE\xA9\x46\x50\x22\x12\xC1\x75\xB3\x3D\xCA\xE2\xD5\xDE\xF3\xEC\xEB\x07\x0A\x64\x71\x2F\x95\x8F\xE6\xB2\xEE\x92\x34\x9D\x75\xE5\x91\xB5\x9D\xB4\x6D\x4D\x22\x99\x58\xBF\x2B\x8C\x43\x76\xB0\x20\xE1\x01\x85\x88\x9D\x1C\xAA\x9D\x1D\x2C\x9E\x29\x71\x63\xC4\x88\xB8\x19\x5B\x8E\x9E\xF8\x57\x9C\xEE\xEB\x3A\xD3\xF5\x35\x04\x38\xDD\x00\x22\x5E\xF3\x94\x18\x43\xC2\x9D\x28\x63\x4B\x3E\x18\x5F\x58\x6E\xF0\x6D\x55\x28\x1A\x23\x84\x14\x82\x3B\xAA\x68\xAB\xD2\xA0\x51\x7A\x2A\xF5\x61\x41\xF4\x5F\xD0\xE9\xEB\xE0\xC3\x8C\x3C\x98\x93\x05\x16\xA5\xA0\xC1\x94\x48\x98\xD9\xBE\x32\xD0\x40\xEF\x36\x89\x0E\xC8\xBA\x12\xCC\x8C\x34\x88\x12\x42\xDA\x0C\xCD\x08\x8B\x53\x80\x6C\xB3\x8C\x9E\x8B\x79\x70\xBC\x2F\x81\x88\xC8\x17\xB2\x05\xC7\x3B\xE0\x19\xF2\x9E\x14\x4C\xA7\x96\x98\x44\x69\x26\x51\x19\x8B\x3F\x50\xD4\x55\xC4\x46\x69\x92\x2E\x42\xEC\x1C\x4F\xB3\x60\x09\x42\xD0\x69\x16\x7C\xE6\x05\x78\xB0\x54\x57\x39\x7B\x5C\x55\x29\x35\x4C\x41\x4C\x37\x64\x83\x65\x08\x6A\x0B\xB9\x4C\x9A\x39\xB2\xF6\x01\x89\x26\x21\xB6\x56\xD4\x5A\x71\xB7\x0A\xE4\x56\xB5\x8B\xA1\xB7\x39\x35\x7E\xB7\x21\x76\x8B\xF2\xFD\xA0\x69\xDA\xEB\x33\xA4\xA6\x21\xF7\x19\xC2\xAE\xF9\x23\x77\x5B\x39\x46\xBF\xF2\x60\x38\xE7\xD8\xFC\xD6\xB0\xAD\x7C\xDA\xA6\x6E\x62\xDF\x23\xE3\x15\x1F\xA6\x0B\xAC\x29\xFD\xEC\x51\x0D\x2F\x3E\x33\xFB\x3D\xAF\x0A\xD9\x4B\x5B\x7A\x78\x36\x8B\x0F\x9E\xE3\xC2\xC9\x01\x27\x94\xB6\xA5\x68\x4A\x31\x37\xAB\x8E\xD5\xC4\x20\xAF\x11\x99\x77\x4F\xEA\xC1\xCB\x82\x30\x0C\x43\x0F\xFF\x47\x85\xF3\xFE\xEB\xBC\x17\x36\x65\x35\xAC\x99\xCF\x78\x47\x39\xA7\x63\x94\x53\x01\x74\x4A\x6C\x0D\x6B\xE6\x4F\x3D\x4E\x26\x19\x18\x55\x7C\x94\x56\x21\xF6\x7B\x3E\x52\x62\x3C\x71\x3E\x17\xE9\x38\x70\x34\x57\x54\x7F\xB9\x37\x13\x2D\x7D\xF7\x9F\xE0\x20\xC2\x10\x22\xF3\x39\xEF\x58\x6E\xED\x7A\x6E\x6C\x1E\xC3\x8D\xF8\x19\xF7\xCB\xEF\x8F\x1F\xB7\xE3\x53\xFA\xEC\x88\x25\xAE\x88\x46\x3D\x70\x8C\x8B\x78\x92\x23\x27\x83\xF4\xC0\x51\xD6\x3E\x93\xE5\x51\x50\x2B\xE7\x19\x1E\xD1\x59\xE3\x02\x3F\xD8\x38\xC0\x37\x29\x6F\x6B\x90\x87\x80\xBD\x13\x83\x28\x20\x1A\x73\x5D\x1F\x2E\xA2\x3B\x7E\x79\x1E\xB0\xF1\x85\x96\x79\x24\x0F\x20\x32\x1F\x22\xA7\x78\x5E\x59\x07\xA2\xFD\x55\xFD\xB1\xC7\x9E\xF4\x0E\x7A\x14\x05\x6D\x3F\x0D\xE9\xD3\x90\x3E\x55\xEE\xD3\x00\x7F\x05\xF8\xEB\x73\xEE\x57\x88\xBF\xFE\xD2\xFD\x8A\xF0\xD7\xDF\xB8\x5F\x71\x1E\x90\x73\x99\x91\x0C\xA6\x8C\xC2\x51\x62\xA7\x22\xF0\x67\xD1\x25\x31\x7F\x64\x47\xE7\xB4\x4C\xA1\xF9\x00\x2F\x20\xC0\xAD\xB5\xFE\x9A\xB4\x18\x42\x4E\x5F\x90\x91\xE3\xEB\x8E\xE5\x02\x6F\xEC\x35\x52\xA9\x05\xE4\x49\x87\x0D\x93\x23\xB9\xCC\x22\xEB\x43\x1E\xE2\xF7\xE4\x88\x64\x41\xDE\x94\x67\x15\x14\x17\x67\x13\xA1\x07\xBD\x27\xCC\x9C\x25\xB4\x95\xDC\xF5\x7E\x4F\x54\xA1\xDD\x1A\xC1\x63\x5B\x80\xDA\x67\x9A\xE7\xC8\x7E\x15\x82\x14\x22\x91\xCD\x41\x20\x20\xA4\xCF\x6D\xF8\xAA\xDF\xB8\xAD\xE0\xE1\xFB\xFB\x77\xE3\x15\x42\x3E\x77\x09\x55\x0F\x32\x69\xF1\x7F\x72\xC6\x03\x79\x08\xB9\x4C\x6A\x50\x09\x8E\x1D\xDA\xCF\xDA\x47\xB5\x4F\x66\xE4\x08\xEE\x8A\x24\x06\xA4\xB5\x36\x9E\x79\x91\xEB\x91\x5F\x50\x89\x7C\x6E\x22\x4C\x75\x2C\xA7\x96\x10\xE2\x6D\xB8\x71\x57\x6D\xC4\xC9\x5C\x51\xC9\xDB\x31\xE5\x4B\xE5\x02\x78\x10\x53\xDC\x9F\x30\x17\xBF\xFC\xF8\x23\xD8\x02\x3C\x1B\x1B\xE1\x71\xDE\x62\x31\xA6\x04\x99\xF4\x6C\xED\xF8\x08\x3B\x0F\x21\x86\xE8\x24\x05\x13\x86\xEE\xBB\xA6\x12\xA3\x30\xE7\xDE\xF4\xF9\x4F\xF9\x44\xE2\xCD\xDD\xF8\x27\xCE\x8C\x6D\xD9\xD8\x07\x65\x67\xE7\x29\x71\x51\x99\x67\xEA\xF4\x08\x3C\x3D\x72\xFE\xE9\x39\xC9\x7E\x79\xC9\xAB\x2A\x94\xA2\x5E\x4D\x76\x37\x61\xBC\x63\xB5\xAD\x50\xCA\xDE\x91\xC5\x07\xCE\xD9\x5C\xC3\x66\x43\x81\x5F\x3C\x7A\xCE\x9A\x4A\x3D\x14\xC1\x32\x5C\xDF\xB2\xBD\xE1\xF1\x0A\x33\x1E\xDF\xED\xE4\x1F\x42\x22\x5B\x42\x09\x1B\xC9\xA9\x33\x34\xE9\x29\x2E\x1C\x15\x41\x04\xF1\xD1\x51\x15\x5D\xE7\x79\xB5\xB9\xAD\x66\xC7\x46\x9B\x5B\x82\x74\x8C\xA2\x9B\x01\xA0\xE3\xFA\xC3\xAB\xE5\x1A\x8E\xFD\xBE\xC2\xEB\x3C\x0F\xBB\x8A\xDC\xBB\xF4\x14\x84\x46\x1A\x41\x38\x58\x61\xA3\x2A\x19\xD5\x6E\xC4\x94\x9B\x85\x46\x62\x17\xC9\xA8\x9A\xDF\x16\x52\x93\x9E\x7A\xE1\x83\x9D\x7E\xC0\x82\x83\x6D\xEC\xB6\xF3\x6C\xCF\x29\x1A\x6F\xD5\xDF\xE0\x2B\x98\x52\x28\x7E\xEC\x9C\x75\xC6\xF1\x8C\x74\x08\xA6\x3B\x09\x15\xB5\xE9\x25\x62\xB4\xE9\xA1\x49\x8B\x46\x3C\xAB\x77\xCC\xC8\x35\x23\x8A\x9F\xE7\x90\x5C\xB9\x4F\x66\x25\xA7\xBE\x76\xB5\x73\xF4\xE7\x96\xC9\x85\x80\xEF\xF8\xE2\xA2\x2B\x57\xA6\x4B\x45\x0F\xDE\xE7\x92\x9D\x72\x2A\x6F\x97\x51\xDA\xE8\x9A\x73\xEE\x0B\xEB\xA6\x1A\xE0\x59\xDA\xCF\x01\x5D\x20\x8A\xF7\xF3\xC9\x30\x40\xFE\xF0\x17\xBD\xD5\xDC\x33\x2F\xA3\xB0\x2E\x1F\x24\xC7\x18\x51\x44\x62\xD8\xE4\xC6\xA0\x5C\x9E\xED\x78\xB6\x9F\x87\x9B\x5C\xAB\xE6\xA3\xBF\xFA\xCB\xF2\xA0\xE7\x19\x9F\xE9\xB0\x72\x82\xAE\xB7\xDF\x7B\x3F\x32\xF2\x1C\x2F\xE3\xED\xF3\xFE\x13\xFE\x3A\x48\x15\x7C\xC9\xD7\xBD\x99\xBA\x04\x51\xBC\xC7\x26\xA5\x0C\xC1\x07\xBF\xF8\x4F\xE7\xB8\x24\xFF\x2F\x9C\x6B\x6A\xA6\xEC\x93\x19\x6E\xE4\x2B\x28\x9A\x27\x64\x83\xF9\xC4\x96\xF8\x3A\x43\xEE\x01\x54\x9D\x43\x2E\x73\x75\x2C\xCA\x7A\x98\xD4\xC8\x82\xD1\x04\x20\xB1\xA6\xCC\xD4\x46\x64\xFB\x78\x0E\x13\x6B\xB7\x3E\x35\xAE\x12\x6B\xD2\x4C\x6D\x94\xA3\x8F\x18\x91\x58\x7B\x37\xBD\x27\xD3\x66\xFB\xB9\xCF\xAF\x2F\xDE\xFB\xCD\xF4\x96\x4C\x9C\xED\xC7\x8A\xDF\x9E\xFF\xA1\x90\xDE\x92\x55\xB3\x7D\x1B\xF0\xDB\x37\x7E\xD4\xA3\xB7\x97\x2E\xF9\xAB\x64\xE2\x6C\x7B\x0F\xB9\xC5\x93\x51\xDB\xE0\x89\x5E\x17\x11\x37\x78\xC2\xF6\x20\x56\x4D\xDA\x7D\x1D\xF3\xEB\x36\x6A\xD3\x39\x48\x94\xBE\x8D\x24\x20\xBD\x03\xBB\x3A\x80\x28\xDE\xDB\x6E\x68\x4C\x50\xDB\xEF\xFD\x66\x67\xF7\x5E\xEA\x3D\x8C\xBF\x6E\xF0\xBC\x4E\xF9\x30\xBB\x2D\xD4\x91\xF9\xE0\x47\x3A\x1E\x92\x82\xAB\xA3\x22\x46\xD6\xD6\xFA\x2C\x4D\xBC\xCA\x86\x11\x9F\xAF\x5B\x4D\x29\x79\x8A\x55\xCB\xC9\x90\x16\x44\x93\x73\xD2\xF7\x9E\xC8\x89\xBD\x93\x46\xAD\x36\xED\x69\x96\xBF\xD2\xC1\x7A\x65\x64\x6D\xFC\xEF\xAA\x7C\x4E\xB0\xE1\x1B\xEF\x38\x65\xA1\xE2\xCE\xCD\x84\x5E\x86\xF8\x32\xC4\xEE\x8F\x8F\xC0\xAF\x6D\xF9\xD8\xB8\xF2\x21\x1A\x73\xB6\x8E\x08\xFF\xFF\xC4\x08\xE9\xF2\xF1\x91\x59\xAA\xAB\xDE\xD9\x11\x66\xBF\xD3\x40\x75\xCE\x8E\xDF\x39\x3B\x3E\x04\x74\x96\xDA\xB3\xE3\x37\x67\x27\x74\xE9\x73\x68\x71\xA1\x79\xC7\xA7\xBC\x7F\xEE\x31\xB1\x21\x83\x9A\x07\x14\x9D\x41\xA7\xD7\x37\x07\x20\x76\x31\xFA\x21\x4F\x8F\x4A\xEF\xD8\xA3\x81\x07\x23\x84\x70\x07\x47\x43\xDA\xA3\x91\x3E\xD5\xA3\x91\xF7\x8F\x46\x3E\x7D\x34\xF2\xFE\xD1\xC8\xA7\x8E\x46\xDE\x3F\x1A\x79\xFF\x68\xE4\xFD\xA3\x91\xF7\x8F\x46\xDE\x3F\x1A\xF9\xEC\xD1\xC8\xFB\x47\x23\x9F\x39\x1A\x79\xFF\x68\xE4\x53\x47\x23\xEF\x1F\x8D\x7C\xFE\xD1\xE0\x38\x0B\x3E\x1A\x9C\x6A\x25\x22\x84\x21\xFA\x7A\x39\x22\x35\x67\x2F\xC4\x0B\x7B\xF1\x4C\xEC\x05\x25\x8D\xC3\x7D\xB8\x85\x3C\xDD\x7C\x52\x74\xF8\x36\x39\x14\x2B\xD2\x6D\x83\xF1\x71\x8E\x61\xF2\x6D\x69\x08\xB7\x69\x31\x71\xBB\x31\x6F\x1A\xA5\x84\xAB\x7C\xBB\x73\xB6\xB2\x69\x62\xE4\x71\xCA\x8E\x32\x61\xAF\x76\x61\xCD\x42\xB4\x6B\x89\xDB\xB5\xC4\xB9\xEA\xE2\x18\x94\x73\x97\x73\x88\xC4\x5C\x4B\xDA\xB9\x41\x0D\x5C\xDE\x0F\x18\xD8\x9D\xE3\x6F\x70\xAA\x8B\x3E\xA4\x7D\x1D\x58\x38\xD0\x87\xB4\xA5\x97\xFD\x90\x36\xBC\x3B\x20\xED\xF5\x65\x3F\x23\x4C\xE8\x0E\x47\x48\x70\xD9\xCF\x08\x45\xBA\x9F\x11\x76\x5C\xF6\xB3\x06\x77\xBA\x13\x45\xB4\xD9\xD9\x97\x4F\x4C\x0D\xFA\xC4\x8E\xC6\x64\x6C\xEB\x7E\x97\x5E\xEE\x33\x3C\x87\x82\xBE\xE6\x8F\x12\xC4\xC7\xC4\x65\xDC\xE3\x44\x5F\x16\x25\xD9\xA5\x0A\x34\x44\x47\x59\x2C\xF9\x80\x67\xFE\x88\xCB\x5C\x51\xCE\x81\x90\x52\x10\x68\xA4\xF1\x3E\xE7\x21\x10\x74\x4F\x5D\xF3\xDD\x95\xA8\xA9\x4C\x17\xB3\x9D\xB3\xB4\x24\xE4\xDB\x0F\x28\x9D\x4A\x68\xBE\xF6\xC6\x26\xE7\x9F\xE6\x02\xE6\xA0\xEA\x95\xDC\x33\x9F\xF8\x48\xCF\xB0\x1B\x42\x30\x26\x8B\xD2\xA5\x4B\x11\xCA\xC0\x4F\x76\xAF\x64\x4B\x61\x48\x04\xE2\x2A\x6E\x9C\x96\xDE\x4C\xF4\xDF\x29\x6F\xAE\x56\x48\x9A\xF5\x7A\x90\xC4\x51\xC8\xEE\x59\x09\xDB\x9F\x09\x66\x1E\xC3\x8C\x23\xBD\xC9\xCA\xD2\x7A\xB5\x31\xE0\x6C\x10\xB8\xC0\xAB\x91\x02\x6E\xC6\xA4\x80\x72\x1D\x58\xA0\xFB\xDD\x0E\xAC\xBB\x1C\xE3\x47\xF7\x7B\x3E\x40\x97\xFB\xDC\x7A\xE1\xCD\x7E\xCE\xC7\xE8\x32\x9F\x5B\xD7\xBE\x99\xAF\xF9\x30\x5D\xE6\x63\xEB\x2D\x38\xF3\x31\x1F\xA9\xCB\x7C\x4C\x27\x6A\xCE\xC7\x7C\xB0\x2E\xF3\x31\x1E\xA9\x39\xDF\xD2\xC9\xBA\xCC\xA7\x4F\xCC\x1F\xF6\x89\x1D\x8C\x9A\xCE\xFD\x32\xBD\xCC\x87\x7C\xB6\xF0\xFB\xF6\x53\xFD\x3F\x4A\x31\x11\xEB\x36\xF9\xBA\xD8\x02\x6F\x6B\xBD\xF2\x0F\xC3\x7D\x9B\xD8\xC1\xA6\xF1\xF6\xC9\x9F\x23\x8B\xDD\xEB\xC8\x62\xC7\xC5\x0D\x0E\x08\x31\xE9\x7D\x61\xDB\x93\x68\xB5\x4F\xBE\x93\x3E\xB8\xBB\xF3\xC1\x4D\x42\xB0\x3B\x8C\xDC\x02\xB1\xB5\x5E\xA9\xE6\x03\x45\x43\xBC\xA3\xF3\x45\x25\xC9\xAC\x68\x28\xD0\xDF\x7E\x6F\xDC\x24\xFD\xD9\x3E\xD4\x66\x25\xC1\xAB\x2B\xC1\xC1\x59\x62\x66\xCA\xBE\x06\x5F\xFF\x94\xE0\xF4\x00\x1E\xBE\x7E\x10\x5F\x97\x42\x1E\x32\x7B\xA7\x5B\xDB\xEA\x65\xD6\x1C\x82\x47\xD9\x5F\xB5\xD9\x17\xF0\xB8\x2E\x73\x16\x54\x81\xD7\xD2\xF4\x97\x54\x24\xD1\xC3\xC9\xCB\x19\x43\x27\x95\x0F\x07\xC1\x15\x17\xB9\xCE\xE8\x61\xEF\x06\xAE\xB7\x45\x19\x3F\x69\x83\xF4\x2F\x08\x21\x27\xAC\x1F\xB1\x8A\xA0\x02\xC4\x2D\xB9\x67\x5E\xF7\x5B\x53\x01\x33\xED\xDC\x8E\x35\x96\xA3\x99\x19\x29\x9C\x91\xB2\xA5\x54\x69\x76\xC5\x6F\xB2\x14\x5D\x7C\xA8\x55\x68\x67\xE0\xD9\xB9\xB0\x03\xCA\x86\x5A\x43\xBA\x44\x85\xB9\xC1\xA7\x49\x18\x79\xC6\x56\x6F\xE2\xEA\x31\x05\x78\xC5\x23\xAC\xE5\xD6\x3F\xD2\x9F\x73\x7F\x62\x7E\x33\xB1\xDE\x16\x2B\xF6\xF3\xE4\x9E\x00\xA7\x69\xC4\xD0\xCD\x92\xBD\xDD\xEC\xE2\x5F\x41\xE5\x33\x7B\xB3\x36\x4D\x4D\x8F\xF9\x33\xC7\xED\x7E\xAB\xF0\xE4\x21\x76\xE3\xC7\x6E\xBC\x97\xE7\x9D\xDF\x31\xFD\x36\xC2\x48\xF7\x44\x81\x77\x72\x34\xD4\xC6\x37\xCA\x3D\xCA\xF8\x51\xFB\xD5\x5E\xFE\x2A\x30\xA1\x7B\xB2\x3C\xDD\x04\xB8\x49\x64\x62\xF7\xE4\x6A\xDB\x71\x62\x52\xF7\xE8\x5A\x7C\xA4\x6F\x60\xC3\x3B\x0E\x54\x09\x96\xE0\x7E\xB2\xDD\x63\x7A\x5E\x52\x20\x8A\x3C\x43\xB0\xAD\xD9\x41\x9F\xF2\xCD\xEC\xF7\x3C\x23\x57\x9B\x3F\xB3\xF6\x4F\xD1\xFE\xA9\xDA\x3F\x07\xAB\xFA\xE5\x7C\x62\x85\x4D\x1E\x62\x06\x2C\xF6\x3D\xD5\xE1\x8F\xD0\xC3\xEE\x70\x57\x79\x2E\x0B\x0A\x65\xBD\xE9\x44\x3C\xEB\x93\x76\x89\xFB\x3D\xAF\x12\x9C\x25\x0D\xBB\x9A\x3E\x1B\xD4\x80\xE9\x96\x20\x71\x14\xBC\x99\x90\x35\xFD\x7E\xC1\x99\x11\xBC\xEB\xA8\x9C\xFD\x04\x27\xFC\xB6\xEE\x84\xF7\xD3\x41\x27\x87\x77\x4E\xAF\x6D\x7E\xBD\x77\x64\x9A\x63\x5F\x31\x46\x57\x0A\x8F\xD5\x1F\xF6\xD7\x5C\x94\xAA\x25\x0F\xBE\x36\x82\xF2\xA6\x11\xD7\x00\xE2\xF8\xA8\xF2\x41\x71\x45\x29\x5A\x3D\xB3\x07\x3E\xA8\x5B\x72\x61\xCB\x46\x3F\x74\x8E\x6A\x47\xD9\x5F\xBF\x7C\xCE\x15\x75\xD2\x5F\xB2\xD9\x27\x2E\x03\x70\x8A\x3D\x6B\xB0\x76\x1A\xFA\x95\x9C\x42\x63\x39\x83\xC6\xF2\xE4\x88\x6B\x76\xF4\x30\x99\x9F\x8A\x1E\x32\xCB\x19\x64\x9E\x6D\x05\xDC\xAA\x87\xCF\xAE\x55\x1F\xA5\xE9\x29\xFB\xD2\x0A\x93\x9C\xAA\xCD\xAB\xEB\x83\x32\xD6\xBB\xA9\xEA\x0A\x02\xEB\x8B\x62\xD5\x28\x64\x4C\xF4\xB0\x79\x26\xE8\x77\xD1\xFC\xFE\x8A\x58\xED\x37\xB8\x86\x7E\xB7\x9D\x7C\x41\xAC\x02\x7F\xF4\xFF\x4A\xA1\x26\xEC\x1C\xE9\x9B\xE4\x55\x2E\x94\x87\xF6\xEB\x32\x38\x02\x81\xF1\x8E\x91\xE6\x7E\x2E\xAA\x80\x82\xD0\x6A\x07\x1C\xC6\x28\xC6\x98\x70\x2E\xC6\x84\x2D\xC6\x28\x57\x95\x4A\x21\xE1\x3C\x3E\xAA\x14\x84\x47\xAD\xCA\xAE\x83\x31\x0A\xC2\x5B\xA8\xB4\xAA\x72\x18\xE3\xC2\xE9\x54\x83\x34\x4A\xB7\x35\xB0\x6D\xED\x18\x72\x63\x8A\x39\xAC\x4C\xB1\x87\xEF\x71\x7B\xA4\xD8\x04\x6C\xE3\x19\x5D\x80\x23\x47\xFB\x72\xFC\x23\xA9\x24\xA9\xEC\x9D\xB2\x09\x47\x9A\xAF\x4A\x8F\xF2\x8B\x50\x4C\x2F\xDB\x48\xCF\xB6\xB1\x38\x96\xD3\xD6\x17\x85\x50\x0B\xE9\x87\x5C\x80\xCE\x5C\x5D\xCD\xE1\x70\x25\x2C\x16\x23\xCA\xBA\x62\x44\x4E\xFF\xCF\x1E\x5C\xC2\x16\x5E\xC4\x59\xA6\x77\x50\x91\x2A\x9B\x1F\x45\x71\xAC\x58\x7A\xC7\x11\x5B\x14\xAB\xA9\xEF\x9B\xF4\xF3\x00\x71\xB9\x64\x3A\x0A\x7E\x6D\x26\xA7\xCD\x35\x77\x32\xC9\xFA\x54\xA7\x4C\x72\xEB\x08\xE1\xB0\x45\x2D\xC0\x16\xA5\x6D\x8A\x82\x69\x34\xE9\xBD\x86\x55\xDE\x87\xA2\x45\x99\xE0\x16\xE2\xBF\xBC\x1B\xBD\x21\xD8\x3D\x0A\xA8\x90\xDF\xB0\x2E\xDE\x75\x8E\x82\x6D\x97\x25\x25\x01\x1B\x3A\x82\x47\x1F\x1E\x94\x85\x76\x7D\x4F\xDD\x71\x74\xB6\xD6\x40\xE1\x29\xB0\xD2\x7B\xA3\xEE\xFE\xE3\xAF\x82\xD5\xD1\xC2\x98\x46\xD8\xFB\x1C\xC4\x1A\x63\x70\xB3\xCE\x0F\x29\x61\x8B\x1D\x09\x5B\x11\xCB\x5A\xE4\x11\xC1\x14\x5E\x40\xE3\x2A\x70\x92\x10\x19\xF0\x28\x27\x92\x8D\x93\xB4\x3E\x00\xC2\x48\xB0\x8D\x56\x46\x95\xE0\xE3\xE5\xE8\x0B\x13\xA5\x2E\x15\x56\xEC\xE3\x62\x49\xB0\x9A\x22\xC1\x6A\x86\x04\xAB\x93\x23\x8A\xBC\xED\x93\x60\x7E\x2A\x7B\x24\x58\xCD\x90\xE0\xD9\x56\xC0\xAD\x7A\x24\xD8\xB5\xEA\x93\x60\x7E\x2A\x74\x1F\x26\xAD\x60\x18\x30\x38\x82\x36\x6C\xB4\x05\x87\x58\x04\x8E\x67\x04\x16\xD3\xD7\x91\x9B\xE9\x4E\x60\x21\x76\x04\x8B\xE9\xEB\x88\x9E\xB2\xA8\x94\x9C\x02\x65\xAF\xA3\xAE\xF1\x48\x7F\x38\xB0\xA8\xD4\xE4\x53\x33\x03\xBE\xD0\x4D\xB6\x4A\xA5\x0E\x39\x85\x8F\x30\x57\xE3\x62\x8B\x8F\x37\x57\xBB\x00\x59\x3C\x7E\xCE\x1D\x13\x22\x85\x5C\x21\xD1\xB7\x14\xEC\x16\x62\x6E\x7D\x50\xE3\x4A\x15\xBF\x6D\x75\x96\x5C\x79\x15\x54\x7D\x50\xAA\xB9\xD2\xBE\x30\x7B\x71\xA0\x41\x1C\x24\xD2\xF7\x94\x08\x13\x72\xF9\x39\x49\xA5\x8E\xC1\x37\xC1\xC9\x3C\xC4\x7F\x8E\xE5\x11\xED\x2D\xE5\x53\x59\x2D\xC9\x5A\xED\x1F\xC9\x63\x9E\xCD\xE4\x34\x3F\x54\xF4\x30\x72\x7C\x1A\xC7\x82\x63\x27\x1C\xFB\xED\xE3\x1D\x48\xD8\x82\x7F\x35\xFD\xA5\x77\x54\xEA\x08\x28\x13\x1C\x5D\x5B\x6D\xEE\x20\x69\x8B\x2A\x2E\x13\x59\x2F\xFE\xA3\xB3\x01\xE0\xAF\x2E\x87\xD2\x6C\x13\xE1\x15\x2D\x97\x6A\xDC\xDA\x8A\xC6\x74\x57\xA8\x05\x77\x85\x9A\x62\x7D\xD4\x34\xEB\x13\x4C\xE1\x5A\x30\x83\x6B\xC1\xC9\x11\x65\x35\xEC\xE3\x1A\x3F\xED\xE3\x5A\x30\x83\x6B\xB3\xAD\x80\x5B\xF5\x70\xCD\xB5\xEA\xE3\x1A\x3D\x65\x37\xB1\xE4\x14\x04\x88\x6B\x28\x78\xC5\x5C\x2B\xD6\x23\xE6\xD0\x08\xC6\x83\xAB\x3A\x17\x79\x17\x42\x3D\xB4\xD2\x96\xFC\x55\x9E\xD9\x00\xA6\x80\x47\xB8\x62\xBA\xB9\x48\xBF\xF5\x50\x37\x12\x0F\x3F\xF8\xAF\xE1\x22\xFA\xDF\x58\x27\x09\x6A\x02\xE4\xB8\x42\x81\x92\xD3\x64\xB8\x0B\x42\x2C\xB8\x20\x2C\x53\xBE\xE8\x82\xB0\xAF\xE7\x5C\x10\x62\xF6\x82\x10\xD3\x17\xC4\xA2\xEB\x01\xEF\x03\x0E\xB0\x44\xC6\x4E\x82\x44\xD6\x4E\xD4\xC8\x66\x1C\xAB\x6D\x74\xBC\xB4\x8C\x0F\xA3\x70\xC3\x27\x57\xAA\xA6\xE2\xE9\x10\x10\x6C\x7E\xA9\xEB\x67\x78\x07\x3B\x7F\x1B\x41\x5E\x07\x23\x72\x6F\x94\x67\x40\x71\x36\x09\x0A\x84\x15\x46\x1E\x77\x15\x49\x05\xC1\x97\x92\xA8\x71\x6A\x89\x23\xEC\xD2\x4A\xD5\x0A\xAE\x18\x6E\x3D\x41\x44\x30\x5B\x29\xE7\xB2\x95\xB2\xA3\xA7\xE0\xAA\x16\x02\x04\x04\xC7\x47\x95\x00\x39\x23\x84\x08\x90\x2C\x84\x08\xD2\xE9\x33\x57\x79\x55\x66\xD3\x1B\xD3\xA3\x5F\x66\xA9\xCC\xFA\x60\x10\xFF\x38\xFF\x28\x06\x53\x47\x91\x00\x6B\x93\x8F\xB8\x10\x79\xAA\x96\xDB\x3D\x8E\x62\xE6\x38\x8A\x93\x23\x76\xAF\xE9\x1D\x47\x7E\xDA\x3F\x8E\x62\xE6\x38\xCE\xB6\x02\x6E\xD5\x3B\x8E\xAE\x55\xFF\x38\xD2\x53\xF6\xA4\x4A\x10\x6F\x98\xF4\x2F\x5E\x2F\xB1\xD3\x8C\x4C\x92\x02\xD6\xED\x12\x11\xC3\x08\x15\xBB\x8E\x82\xFA\xF7\x07\x42\xCD\x3B\x68\xCE\x6B\x87\x7A\x8A\x6B\x4E\x75\xC2\x56\xD8\x5B\x5A\x4E\x79\x3B\xEA\x37\x43\xF2\x58\x43\x42\x9D\xD2\x95\x81\x7F\x5F\xCD\x7A\x13\xA6\x2C\x63\x4B\x3B\x9E\x83\x53\xAC\xFB\xA7\x58\xF7\x4F\xB1\x9E\x77\x8A\xEF\xE6\xD0\xD5\xD8\xCA\xFC\x9C\xE8\x87\x68\x16\x71\x75\xC4\xE4\x74\x6F\xBF\x7D\x72\xEF\x20\xF1\x94\x90\x9E\xE7\x29\x8F\x44\x79\xBA\x96\x95\xF5\x6E\xBB\xE2\xD5\x51\x25\x7E\xF6\xDA\xD8\x9E\x97\xCD\xFA\xBC\x6C\x36\xCD\xCB\x66\x0B\x78\x59\xE1\x88\x16\xEF\x0C\xF1\xE7\x46\x22\x1B\x49\x29\xF7\x54\x67\x29\x5C\x56\x86\x69\xFD\x47\xD8\x19\x92\xCE\x8A\xDD\x4D\xD7\xFA\x69\xAF\x79\xD1\x62\x55\xB3\xD8\x1C\x1A\xD1\x11\x17\x9B\x4F\x2F\x36\xDF\xC1\x62\x69\xA9\x9D\x95\xFA\xBD\x95\x5E\x66\xA1\xFE\x73\xB4\xD0\x41\x7F\xA1\x83\xE9\x85\x0E\x76\xBC\x50\xBF\x59\x68\xEB\x82\xB1\xDD\x12\x5D\xA5\x6D\x87\xF7\x17\x0F\x10\xE2\x0B\xDD\x39\xCB\x0A\xC2\xE6\x0B\x22\x15\xC0\xE7\x3B\x24\x4F\xE9\xE2\xF7\x99\xD7\x12\x0D\xF7\x38\xEE\xF4\x47\xE7\xE8\xF2\xA4\x65\x86\xB0\x70\x2D\x10\xB1\x4F\xC6\xAF\xC8\x45\xC3\x48\x5C\xF4\xEC\xEC\xEC\xBB\x4A\xBD\x22\x6F\x28\x0D\x1D\x1F\x1A\x67\xF1\xAD\x61\x13\x71\x72\x92\xC0\x19\x4A\x46\xB3\x7F\x05\xAD\xC4\x92\xB3\x7F\x84\x9C\xC7\xE5\x68\x96\xD0\x53\xE0\x02\x65\xDD\x3B\x6F\xB1\x74\x39\x18\x5B\x86\x3F\xB0\x0B\x05\xAE\x8B\x4E\xAC\x3D\xC8\xE2\x53\x84\x28\x96\xBF\x13\x8E\xBF\x0B\x98\xBF\x13\xE6\xE2\xF9\xDE\xA6\x3E\x05\xCD\xEC\x73\xC2\xCC\xA5\x7D\x90\xA6\x7D\x90\xA6\x57\x00\xD2\xDE\xE5\xFA\x59\x25\x82\x59\xAF\xBD\x56\xE5\x84\xF3\xFE\xD1\x8F\x4E\xC5\xD2\xD2\x62\xFF\x8F\xCE\x53\x6B\x25\xBA\xFC\x85\x2B\x8E\xB8\x04\x38\xC4\xE2\x04\xCD\xF1\xB0\xF0\x27\x81\x8E\x62\xC3\xC8\x0E\x22\x8E\x16\x9F\x6C\x7C\x7E\x9E\x45\x48\xCB\x19\xE4\x95\x3D\xE4\x95\x3B\x46\x5E\x57\x44\x45\x81\x28\x1E\xE8\x8A\xA1\x31\x88\x31\x4A\xFA\x31\x69\x4C\x28\x29\x68\xF2\xAA\x2A\x30\xAF\x3E\x45\x7A\xD1\xCB\x2C\x0E\x42\x50\xC7\xEC\x85\x3A\x4F\x81\x1A\x80\x22\x3E\x7D\x46\x81\x1A\xCC\xE5\x74\x83\xBE\x02\x95\x2A\xD9\x29\x52\xB7\x2B\x08\x66\x38\x5D\x05\x01\x73\xBA\x08\x96\x29\x4E\xD7\x3E\x6A\x39\x5D\x71\x50\x52\x2E\xF7\x4E\x9D\xED\xDF\xF5\x7B\x92\x92\xEA\x6B\xCA\x82\x05\x8B\x0E\x5C\x1A\xD2\xF9\x3B\x6A\x5F\xCF\xD9\x51\x22\xE9\xAA\xB7\xA3\xA1\x51\xA0\xA6\x34\x65\x6A\xB1\xA6\x2C\xB0\x3A\x60\xAB\xD0\xF1\x9D\x3D\xDF\xEA\xB7\xFC\x56\xBF\x25\x3B\x0A\x1D\xD9\x28\x74\x24\x2B\x74\x82\x56\x79\xDE\x67\xEF\x7D\x96\x90\x9E\x3F\x62\xB6\x6C\xC4\x6C\x12\xB2\x5B\xF2\xF1\x2B\x42\xC8\xE7\x70\x6B\x83\xD9\xAD\x0D\xA6\xB7\x76\xD1\xC6\xDA\x4A\xF0\x8F\x9D\xE3\x40\xAE\x66\x09\x5F\x8A\x65\xD0\x06\xEC\x1D\xE8\x09\x18\x36\xD6\xC8\x6A\xA9\xDC\x3D\x24\xED\xC5\x64\xBC\x52\x39\xFF\xB7\x39\x77\xB4\xB0\x77\x34\x5D\xCD\x02\x11\x29\x74\x5B\x1E\x1D\xC9\x49\xAD\x7F\x84\x63\x33\x3C\xCB\xA4\x4E\x0F\xC0\x9D\xA3\x84\x43\xDC\x81\x57\x1B\x7D\x7C\x7E\x33\xAB\x6E\xF6\x4A\xAF\x93\xBA\x6B\x7A\x46\xED\x5C\xA7\x27\x64\xBD\x4B\xCB\x20\x53\x9A\x8D\x1C\x82\xAB\x60\x85\xB3\xE6\x01\xEB\xFC\x30\x63\x1E\xB0\x09\x86\x3C\x93\x70\x8E\x0E\xE7\x46\x8E\x93\xD2\x66\x52\x2A\x5E\x4B\x00\x5E\xCD\x7A\xE4\xFE\x32\x48\x55\x26\x0F\x4A\x00\xDF\x1C\xB8\xD1\x2B\x08\x2E\x94\x82\x12\x45\xE9\x83\xF2\x5A\x5A\x25\x5F\x48\xFF\xD0\x93\xEE\xAD\x55\xA6\x77\x21\xB9\xA5\xCE\xB9\x8C\x84\x65\xD1\x10\x00\xAE\xE8\x87\x2B\x60\x28\xCF\x40\x03\x12\xC1\xF7\x24\x88\xA3\x9C\xA3\xEB\x5A\xE0\x3C\x5E\xCE\x28\xEF\x83\x78\xA9\x8C\x6F\xF0\xF7\xE2\x14\xF7\x7B\x05\x1F\x76\xDC\xCC\xE1\xEA\xDA\x8D\x5E\xE1\x72\x22\xF3\xD6\x19\x0F\x82\x71\x15\x91\x4F\x2C\x72\x30\x10\xD9\xAB\xED\x2A\x64\x89\xAF\xF3\x8A\x79\x16\x03\xEC\x76\x1B\x8B\x41\xF7\x35\x1D\x16\x7F\x9F\x84\x79\xFC\xF8\xD7\x73\x66\xDC\x6B\x2D\x3F\xFE\xF5\xCD\x61\xB9\x16\xFB\xF8\xFA\xDC\x86\x89\xDB\xC3\x02\x1A\x7C\x7B\xB3\xE1\xE2\xF6\xC9\x6B\x9B\x9B\xCD\xA7\xF2\x08\x55\x70\x50\xEE\x6D\x40\x02\x11\x5F\x74\x57\x51\xE6\xE9\xE4\x55\x94\x2C\xFF\xD5\xA7\x68\xC1\xC7\xEA\x83\xF2\x6A\xBD\x00\x40\x74\x7E\x70\x64\xE2\x65\xF6\xC9\xAB\x19\x31\xB1\xDF\x06\x31\xCB\x08\x7F\xEF\x65\x57\x9A\xE4\x0E\x32\x86\x05\xEC\xB4\x18\xD8\xDD\xBA\xAB\x66\x95\x71\x02\x62\x44\x3D\x30\xFD\xB2\x1D\xDC\x4E\xB7\x22\xE7\x16\x4C\x6D\x6E\x41\x0E\x07\x5D\xAF\x62\xEB\xCD\x22\x20\xA6\x0C\xD4\xE2\xD6\xBC\xC3\x6D\xF6\x4E\x17\xF9\x44\x44\x3D\x3B\x01\x6B\x2D\xA6\xFB\x8A\x37\x59\xD9\xDB\xEB\x85\xD0\x1F\xD1\xE9\x80\xBB\x14\x95\xDE\x08\xC8\x9A\xDA\x66\x57\xF5\x9D\x07\x5A\xEE\xEA\x74\x58\x05\xD9\xA4\xAE\x44\x27\x53\x9C\x6C\x32\xD4\x1E\xB1\xC7\x0B\x79\x09\xEF\x04\x65\xB1\x9E\xBA\x67\x76\x6E\xC0\x9E\xBD\x5E\xE4\x9C\xEB\x65\xBE\x01\x7B\xFA\x7A\x99\x6F\xC0\x9E\xBD\x5E\xE8\xA9\x6E\x72\x37\x56\xA1\xCB\xF2\xEA\x33\x65\x6D\x63\xEF\x6C\x96\xBA\x50\x83\x64\xE5\xBB\x6C\x12\x59\xCA\xBA\xF4\x91\x6A\xC9\x4E\xBA\x4B\x7A\xE6\x6B\xF2\x09\x73\x69\x31\xE9\x19\x6E\x4C\x2F\x81\xA6\xE4\x62\x37\x36\x5D\x90\xDF\xCB\x7C\xF8\xBD\x75\x9B\x1C\x4F\xF6\x32\x74\xB6\x63\x76\xB3\x79\xB6\xA3\xF6\x73\x7F\xB6\x23\xF7\x73\x85\xDA\xB1\x5B\xE6\x42\xB5\x5C\x85\x0D\x41\x61\x4C\xF7\x73\xAF\x41\x94\xBB\x5C\x06\xC1\xCB\xE1\x85\xC5\x09\x0D\xAA\x93\xC8\x8D\x8E\xDB\x31\xB6\x4D\xEB\xBB\xC8\x3B\x8B\x4A\x25\xFD\x0E\x71\xAA\x92\xDD\x28\x9D\x83\xBD\x87\x13\x92\x74\x09\x5B\x83\x06\x25\xB6\x26\x9B\x36\x55\x83\x02\x09\xDE\x68\xE8\xCA\x9C\x91\x9B\x98\x8B\x93\xF3\xD8\x29\x4B\x80\xB2\x47\xC0\x75\xAD\xC1\xD7\x6F\x91\xD6\xB1\x84\x9D\xBC\x88\x20\xFB\x57\x6C\x38\xD5\x57\xCC\xF5\x76\x9D\x06\x82\xB9\x4E\x03\xC1\x8E\x9C\x06\xDA\xB4\x1B\x78\x21\xB0\xF6\x62\x9F\xB4\x92\x68\xEB\x44\xD1\x50\x3E\x27\x66\xD8\xFF\xC9\xDA\x4B\x45\x1B\xA1\xDF\xE3\x0B\x35\xE9\x31\x1E\xD3\xF7\x9D\x9C\x15\xC0\x2E\x7F\xDF\x31\x6D\x69\xAE\x39\xD1\x11\x63\x9D\xCA\xBA\xF8\x3D\xB6\xB7\x19\x8E\xAB\x02\x59\x57\x6A\x4C\x99\x11\x92\x57\x51\xA2\x68\x0A\x40\xBD\xCC\x2E\x41\x04\xC1\x31\xF2\x09\x99\xBB\x59\x10\x42\x40\x1A\x8B\x0E\x53\xB7\x43\x57\x8F\xC0\x96\x3B\x40\x61\xE7\xF8\xA8\x0A\xE6\x3A\x7A\x04\xCE\xD1\x23\x00\xDF\xEE\x59\xC0\x7B\x86\x0F\x5A\xEF\x20\xB7\x67\xCD\x46\x10\x7B\x92\x81\x2C\x2E\xD8\x98\x37\xD5\xF8\x80\xD8\x9D\xB4\x30\xB1\x76\xA4\x39\xDB\x6A\x84\xBE\x10\x90\xCF\xD1\x3C\xC7\xE2\x9E\x91\x51\x18\x75\xB2\x94\x19\xE5\x16\x26\x23\xA3\x98\x31\x32\x72\x7E\xE1\x23\x79\xD8\x35\x32\x72\xB6\xDF\x23\x79\xD0\x9C\x49\x9B\xEB\x37\x38\xE9\x32\xFC\x7A\xC7\x5C\x3E\xE5\xBE\x91\x51\x1E\x01\xC9\x46\x46\x49\x15\xA2\x84\x9E\x36\x30\x96\xC2\x3A\x91\x58\x41\xFD\xCA\x4D\x2E\x9C\x51\x5E\xCD\xB1\xBC\x5C\xF6\x64\x0A\x27\x8F\x0A\x90\x27\x46\x95\x9C\x7B\x32\xA5\x3B\x99\xB2\xD9\x65\xC9\xBB\x2C\x9B\x5D\xE6\x55\xCA\xCE\x2A\x49\xE6\x12\x8D\xA5\x94\x0A\x4A\xA3\xA8\xC6\x67\x6A\xB1\x43\x4D\xF7\x4A\x95\xD3\x46\xD2\xE7\x81\x55\x46\x76\xAD\x32\x5A\x7F\xAB\xB0\xC5\x6A\x1A\x13\xBC\x93\x42\x06\xAB\x6C\x7B\x26\x7B\xBC\x7B\x98\x71\x8C\x57\x8F\xA1\x61\x6A\xCE\x34\xAF\xF8\x03\x32\xA0\x7E\x46\x71\x7D\x1E\xAE\xAE\xC6\xD5\x55\xB0\x7F\x69\xE4\x2A\x53\x77\x56\x52\x4B\x5B\x5D\x92\xED\xAB\x46\xAC\x92\xAD\x60\x3C\xD4\x86\xEA\x92\xAD\x1A\x71\x66\x3C\xD4\xDD\x06\x46\x9C\x31\x93\x7A\xA8\x2F\xEF\xFB\xD4\x5C\x25\x5D\x27\xA8\xD6\x05\x8A\xA4\x23\xF0\x17\x90\x48\x16\x40\x7A\x94\xF1\x48\x2E\x9C\x78\xD6\x99\xC4\x36\x1D\x34\x87\x92\x9A\x39\x29\x2B\xE8\x78\x61\xE1\x8A\xEC\x02\xA5\xEB\x9B\xEB\xC9\x29\x90\x63\xB7\xC8\xC6\xA8\xC5\x01\x85\xAA\xE2\x40\x9F\xBA\xA2\x8C\x51\x1E\x77\x52\x72\x10\xE1\xA4\x26\x5E\x80\x9C\x76\xCD\xE4\x34\x57\xB5\x5B\xB3\xDE\x5E\x0A\xA2\xA3\xB9\xD3\x60\x5A\x8B\x1B\x3F\x1E\x57\xCA\x7A\x82\x41\x40\xD9\x38\x05\xA8\xE2\x0F\x71\x2B\xC7\x9C\x58\x56\x92\xFD\xD3\x37\x1E\xA8\x31\xBF\xE0\x5C\xBE\x56\x4B\x4A\x3E\x62\x82\x8B\x32\xD8\xDA\x7A\x2E\x45\xF5\x2B\x72\xA7\xB2\xC7\x2E\xA8\xD0\x13\xE1\x72\xDD\x96\xC2\x51\xB6\x4E\x07\x31\xA8\x47\x73\xE4\x90\x71\xFF\x41\xAE\x20\xCE\x1A\xE1\x20\x89\xEB\x04\x71\x8A\x3D\xB5\xDF\x90\x52\x55\x83\x06\x37\xA8\xC4\x14\x97\x31\x7A\xEB\xA3\xD3\x09\xC7\xB9\xBC\x41\x60\xCB\x1B\x84\xB9\xF5\xC9\x97\xD3\x05\x0E\x82\x4E\x81\x83\xB0\xA9\x56\x71\x24\xE7\x42\x07\xA5\x4F\x22\x30\xD5\xCC\x3B\xCB\xD5\xDE\xCE\x52\x18\x2F\xF8\xCD\xAC\x05\xF8\x2B\xC4\x06\x91\x54\x10\x36\xD9\xCB\x3B\x23\x91\x59\x5B\x76\x4B\x1D\x84\xE3\x2A\xE6\xD4\xE6\xEF\x7D\xB4\x57\xEA\x20\x76\x4C\x70\x5B\x8F\x32\x9E\x29\x75\x90\xD8\x52\x07\x21\x24\xDD\x52\x07\x89\x2B\x75\xC0\xCF\x9B\x52\x07\x89\x2B\x75\xC0\xCF\xDB\x52\x07\x49\x53\xEA\x80\xDF\x74\x4A\x1D\xC4\x73\x4A\x1D\x24\x4D\xA9\x83\xCE\x00\xDD\x8C\xD9\xFD\x21\xFA\x59\xB3\x3B\x83\x34\xA5\x0E\x92\xB6\xD4\x01\xBD\xD3\xB6\x66\x84\x2D\x25\xE4\x71\x4F\x36\x89\x3F\xE7\xE8\xC4\xB3\x42\x60\x4F\x40\x21\xD8\x7B\x45\x10\x7C\xB3\x5E\x57\x92\x2B\x21\x84\x4D\x16\x7D\x88\x3B\xB5\x10\x52\x5B\xF4\xA9\x5B\x1D\x40\xD0\x6A\x29\x4C\x91\x58\xE9\xA4\xBB\x29\xBD\x5B\x3C\x6E\x45\x82\xA4\x27\x12\x24\x36\x13\x7F\xD2\x13\x09\x12\x9B\x8B\x3F\x99\x12\x09\x12\x9B\x8F\x3F\x99\x12\x09\x12\x5B\x0B\x21\x99\x11\x09\x92\xDA\xD2\x37\x82\x01\x84\x10\x9D\xAA\xAB\xF0\x58\xDE\x70\xFD\xF6\x60\xC9\x32\x6C\x0A\x67\x65\xBE\x2B\x89\xB0\x68\xD1\xC1\x4A\xA9\x79\xED\x59\xB3\x76\x5A\xA7\xEE\xE5\xCD\xCE\xDA\xBC\xD9\xF3\x67\x96\x05\x0B\xD6\xA2\x16\xAC\xDD\x9F\x0B\x29\x39\x17\xAA\xBD\xBC\xD9\x71\x9B\x37\x3B\xE9\x49\x72\xED\x70\xAD\xCC\xD7\x0E\xD5\xCA\x86\xED\x40\x4E\x82\x4C\x3A\xA5\x10\x12\xAB\x19\x9A\x82\xB2\xD8\x0E\xCA\x52\x6B\x8B\x90\x21\x21\x64\xEB\x0E\x4C\x95\x88\xA2\x53\xD4\x83\x2D\x1D\x1B\x5A\x4B\x1D\xD3\x9F\x99\x5C\xF0\x8A\x25\x39\x4B\x6C\x64\x9B\x0B\x7E\xE8\x28\x64\xB8\x32\xD2\x7F\x1B\xF6\x8C\x36\xAD\xD6\xF5\x8A\x64\x86\xC5\xAA\x4B\x27\x31\xCC\x2A\x0C\x3B\x01\x3B\xFB\x64\x5C\x45\x20\x59\xB3\x15\x40\x04\xD2\x19\x6D\xE4\x3F\x4A\x3D\xF0\x02\xA3\x8D\x87\x33\x1F\x57\x11\xB2\xF7\x11\x0A\x3C\x31\xC4\xAC\xC6\x8A\xC6\xC7\x28\x63\x52\xC3\xDC\x50\xDA\xC1\x00\xA4\x35\xF0\x10\xBB\xBC\x60\x99\x62\xDB\x65\xEA\xBE\x18\x24\xE6\x8A\x41\x62\x46\x0C\x42\x11\x0B\x21\xED\x84\x20\xE1\x76\xBE\x27\x02\x89\x56\x04\xBA\x8A\x24\x83\x56\x02\xBA\xCA\x7A\x07\x5E\xD1\xDE\xE8\x2B\x96\xDD\xA6\xA6\xFD\x74\x64\xB7\x09\x1F\xEC\xBE\x1C\xDD\xEE\x08\x6D\x27\x19\xA2\x2E\x27\x8A\x77\x33\x98\x80\x1C\xF6\x24\x61\xBA\xF5\xDD\x4B\x2A\x74\x29\x46\xFA\x8D\xCB\x62\xA9\x73\xF6\x82\x19\x63\x41\x15\x32\x47\x4D\x75\x8C\x23\x64\x70\x43\xFC\x9F\xC8\x0C\x56\xD7\xD6\xAC\xA2\x3D\xA7\xDC\x3E\xD6\xD3\xF3\x59\x32\x6C\xCA\x5B\xE8\xE4\x76\xCF\x88\x34\x0A\x82\x29\x33\x58\xB0\xD8\x0C\x26\x66\x1D\xC6\x45\xC7\x61\x9C\x2B\x64\xB6\x8A\x52\x64\x68\x71\x59\x31\xD1\x84\x13\x55\x3C\xAA\x12\xA4\x23\x8D\xD2\x20\x5C\xB0\x44\x8E\xF0\xBD\x1C\xAA\x85\x8C\x6A\xE9\x5C\x54\x4B\x5B\x54\x0B\x19\xD5\xF0\x8C\x22\xAA\x85\x90\xCE\x41\xB5\x10\x52\x46\xB5\x10\x94\x45\xB5\x90\x51\x0D\x1F\xFC\xB2\x8D\x48\x06\xCE\x9D\x99\x20\xDB\x4C\xC5\x22\x21\x1E\x55\x19\xFE\xCA\x8D\x57\x0E\xF8\x6E\x24\xC1\xD2\xA6\x54\xB2\x19\x90\x35\x84\x2C\x1B\x72\xD8\x68\x64\xD2\x53\xE3\x2A\x85\xDC\x3E\x96\xAC\xBE\x8C\xE9\xF1\x70\x0D\xD1\x45\x52\x5F\x29\x0C\x57\xA9\xA3\x82\xEE\xA3\x7D\x92\x58\xCA\xB2\xB0\xC5\x7C\x28\x45\x3E\xFE\x3B\x84\x08\x25\xFA\x08\x19\x9B\x3B\xAA\xB8\xD3\x43\x04\x31\xF7\xB0\x84\x3D\x38\x11\xB4\x5C\xB2\x25\x82\x28\xFD\x08\xFE\x1B\x43\x8A\x9F\xA6\x30\xC4\x7F\xE6\xCE\x61\x57\xA7\x87\xB8\xDC\xE5\x4A\x0F\xD1\x24\xE8\x8F\x1D\xCC\x62\x77\xA7\x8F\xAC\xDC\xED\x2A\x1D\xD1\x34\xE8\x8F\x1D\xCC\x63\xB9\xD3\x47\x51\x2E\xBB\x1A\x4A\x34\x0F\xFA\x63\x07\xF3\xD8\xD3\xE9\x63\xB9\xDC\xD3\xD4\x67\xA2\x89\xF0\x5F\x3B\x98\xC9\xB0\xD3\xCB\xDE\x72\xD8\x54\x7F\x2A\x5D\xC0\xF6\xED\x54\x6A\xB7\x9D\x4B\xDA\x9B\x4B\xCA\xBD\x44\x9D\x5E\xAE\xA6\xE4\x2C\xD8\x94\x62\x89\xEF\xA8\x24\x7F\x01\x11\x0C\x61\x0F\x2C\xC3\x6E\xD8\x05\x4B\x50\xD4\xFC\x9F\xBD\x85\x04\xC8\xD5\xDC\xD5\x96\x6D\xF4\x02\xA5\x53\xE8\x84\x35\x08\x88\xBA\x45\x3F\x06\x46\xD4\xD5\x80\x51\x75\x52\x1F\x27\xA6\x42\xC3\xC0\xC8\x33\x95\x20\x47\xDC\xAE\x86\x23\x07\xF1\x14\x14\x1B\xE1\x5C\xC5\x46\xB8\x23\xC5\x46\xB8\x23\xC5\x46\x38\x57\xB1\x11\x6A\x76\x16\x96\x48\x5D\xF1\xFF\x4F\x8E\xAA\x1C\x59\xDD\xC2\x78\xA5\x6D\x5B\x46\x90\x13\x53\x6F\x0F\x5C\x48\x07\x4E\x82\x3D\x96\x43\xFA\x29\x08\xE2\xD6\xC5\x19\x44\x0B\x58\x88\x48\xF0\xD3\xAE\xA2\xB1\xA0\xFA\x3E\x28\x56\xC0\x90\x98\x67\x57\x4B\x99\x7C\x04\x86\x04\xCE\x1A\x52\x76\x25\x2A\x4C\x74\x32\xF7\x20\x37\xAF\xAE\x6D\x8A\xD2\x90\x03\xC8\xD3\x53\x63\x23\x4E\xE6\xB6\x50\x7A\x08\x62\xA5\x8C\x20\xB4\x2C\x65\x74\xC4\xE6\x58\x18\xF0\x4B\x24\x9F\x55\x8C\x92\x3D\x76\x0E\xBA\x6E\x0A\x5F\xB3\x2B\x13\xD3\x96\x3B\x88\xBD\x8F\xDA\xAE\x53\x37\xC2\x13\xDE\xED\x26\xBD\xC3\xFD\x7A\x32\xEA\xFE\xC2\x23\xDC\xF9\x89\xA7\xB1\xF3\x13\x0F\x56\xE7\x27\x1D\x91\xEE\x6F\x44\xF6\xE6\x77\x53\xB3\x99\x26\x1D\x33\x7E\xB9\x88\x18\x22\xFD\xE6\x8E\xD5\x2A\xC5\x3B\x23\xB3\xCA\x03\xEB\x10\x1E\xB1\x5D\x63\xB8\xBD\x43\x78\xE8\x1C\xC2\xC3\xD6\x21\x3C\x72\x57\x3C\x1E\xD0\x05\xF7\x0A\x15\x63\x4A\x9F\x51\x97\xF0\x88\x5C\xC2\xA3\xCB\xBB\x84\xAB\x29\x7F\x70\xE5\x5C\x64\x9E\x76\x40\xEA\xF3\x30\x02\xC8\x2F\x3E\x6B\x93\xC7\x3D\x07\xDC\xCE\xA0\xCF\xED\x0C\xA6\xB9\x9D\xED\x9C\x4F\x77\xCA\xED\xA0\x30\xD7\xFA\xA7\x07\x3D\xFF\x74\xD9\x0B\x04\xE1\x92\x6D\xCE\x03\x8C\x8E\xED\x2D\x64\xCE\x6B\x0C\xE5\x20\xEA\x4A\x75\xE2\x2C\x94\x8B\xB3\x08\xFA\x71\x16\xA4\x45\xAC\xB8\xC4\x6D\xD7\x02\x3D\x27\xCE\x82\x15\x73\x10\x74\x84\xCC\xFE\xB1\x52\x9C\xB0\xDF\x8A\x99\x41\x7B\xAC\xFC\x67\x36\xCE\xE2\xB2\x01\xDF\xAC\x6D\xA6\x43\xE5\xD3\xA1\x9A\x0D\xF6\x16\x2E\xD8\x5B\x50\x2E\xC1\xA9\x73\x45\x8F\x5A\xEF\x33\x9F\x29\xC2\x1C\x15\xAD\xC7\x2A\xDA\x29\x03\xF9\xF3\x50\x9B\xEF\xF7\xB4\xF9\x53\xC1\xC1\x8B\x17\x3E\xB3\xD6\xBC\x8D\x09\x5F\x35\xEC\x2D\x5C\x7C\xC2\xC6\x42\xB5\xC8\xFD\x63\x2F\x88\x3B\x2F\x88\x3B\x57\x20\xEE\x4C\x0B\x3B\x94\x96\x71\xAD\x8A\x5B\x86\x38\x6E\x79\xEA\x46\xD2\x19\x3A\x49\x27\xB6\x92\x4E\x41\xFC\x34\xB1\xE6\x6B\x55\xD4\xE1\xA6\x77\x22\xE4\xA4\xC4\x85\x43\x41\x1F\xCF\x8C\xBC\x48\xBE\x89\x9D\x7C\xB3\xFD\xD8\x97\x15\x6D\xB6\x1F\x7D\x91\x54\x13\x3B\xA9\x66\xFB\xD1\x77\x20\xD0\x6C\x3F\x7E\xDC\x93\x65\xE2\xC5\xB2\xCC\xA2\x19\xCC\x15\x63\x48\x88\x59\xAB\x84\x13\x62\xE2\x8E\x10\x33\x74\x42\x0C\xF7\x22\x2E\x27\xC1\xC8\x7F\xAA\x12\x4C\x76\x19\x09\xC6\xC9\x2F\x05\x1F\x29\xD1\xCA\x2F\x62\x27\xC2\x4B\xD1\x15\x5E\xF0\x44\x77\x45\x15\xCB\x58\x50\x31\x48\x92\x34\xAC\xE0\xC2\x2A\x8C\xD0\xF2\xFB\xFB\x70\x63\xB8\xDE\x69\x23\xC7\xDC\x4A\xA8\xCB\x82\x40\x29\x20\x2A\x43\xAE\x19\xC4\xCC\x4B\xC1\x7B\x25\x1B\x01\x69\xC0\x99\x89\x49\xC2\x21\xE7\xBA\x82\xBE\xAE\x48\x45\xAE\xC9\x6A\xD8\x93\x73\x10\x0B\x29\x3B\x76\xDA\xCA\x39\xF1\x73\x2C\xE7\x84\x20\x3A\x28\x69\x17\x1B\x75\x17\xB2\x9D\xE8\x33\x23\xF5\x14\x2F\x48\x3D\x2F\x48\x3D\xCF\x5B\xA9\xE7\xD7\x0B\x91\x3A\xC6\xF0\x31\x39\xAE\x42\xAB\x43\x0F\xA9\x6A\xEA\x46\x7C\x83\xFC\x06\x08\xB1\xCB\xEB\x20\x34\x07\x6E\xF4\xF6\x11\x29\xB9\xE8\xD5\x07\xE5\x37\x21\xB5\x3B\x28\xAF\x85\xD0\xD9\x62\x96\xED\x67\xC5\x0D\x32\x83\xD0\xBC\x51\xDC\xE8\xC5\xC4\x32\x96\x11\x3B\xA6\xC7\xF4\xF5\xB5\xF5\x41\x79\x75\x5B\xD3\x19\x62\x88\xA8\xBA\x01\xDD\x66\xAC\xBF\xC1\x4B\xE7\x44\x95\x8C\xAA\x88\x74\x27\xB3\xE8\x86\xCF\xE9\xBE\x03\x09\xC9\x88\x8C\x37\x31\x22\x5B\xD4\xE3\x8C\x23\xDB\xA5\x24\x1A\xA4\xAA\x94\x38\xBD\xDA\x4C\x6A\x6C\xA8\x2A\x6D\xA8\xA7\xB8\x8A\xD9\x95\x21\x33\x93\xD3\x35\xC4\x90\x9D\x18\x51\x20\x72\x86\x32\x5F\x5A\x66\x94\x0C\xD7\x39\x53\x17\x10\x42\x86\xA0\x0E\x89\x5B\x36\xC3\x55\xF3\x46\xB1\x76\xA3\x17\xF3\x28\x8B\xA6\xAB\x4A\xCD\xD9\xD2\xA9\xA4\x2F\x4D\x56\xB6\x93\x35\xDE\x31\x02\xA5\x89\xC9\x42\x1C\x9A\x7D\x94\x4B\xD6\xEC\xE3\x32\x8F\xD9\x18\x02\x0E\x69\x6C\xFD\xB9\xE4\x02\x34\xB4\xC9\x83\x16\xA1\xA1\x74\x19\x3A\x67\xD0\x30\xBA\x85\x72\x76\x7A\x37\x7A\x8F\x4A\x87\x87\x91\x51\x10\x9A\x47\x65\x0F\x11\xC3\xFD\xDE\xA3\x72\x01\x26\xCA\x39\xC9\x77\x3A\x98\xE8\x12\x0C\xA8\xB5\xC6\x60\x27\xAD\x65\x47\x42\x0C\x31\xD9\x7F\xF6\xC9\xEC\x78\x15\x8D\x10\x58\x99\x5B\xAD\x5E\xB0\x5A\x52\xB4\xE9\xCB\xD1\x49\xBD\x43\x36\x9C\x53\xA3\x02\x72\x25\xD9\xF1\x51\xA5\xE7\xB2\xE1\xDA\xB1\xE1\x1A\x02\xCB\x86\x6B\x5E\x0A\x3E\x60\x36\x1C\x19\x1B\x62\xC3\x63\xB3\x5C\x23\xDE\xE1\x3F\x39\x44\x23\xB2\xD4\x53\xD9\x5B\x94\x79\x2B\x89\x8F\x06\x90\x43\x4A\x35\x5F\x09\x08\xD1\xA8\xCC\xDB\xA0\x15\xB1\x4A\x29\x29\x5D\x22\x91\x14\x6F\x6D\x8D\xFF\x93\xE3\xFF\x0C\xF6\x49\xAF\xF8\x71\xCA\xF9\x4D\x75\x62\x73\xE2\x45\x1C\xD0\xA2\x05\x40\x8B\xE8\x3A\x58\xEC\xF2\x97\x75\x61\x17\x31\xEC\xE2\xB9\xB0\x8B\x5B\xD8\x71\xA7\x90\x41\x44\x2E\x7F\x11\xC4\x73\x60\x17\x41\xCC\xB0\x8B\x1A\xD8\x45\xCE\x6E\xEB\x60\x17\x51\xD9\x12\xA5\x1D\x25\x94\x67\x6A\xD0\x44\xB8\x3C\x3E\x78\x1D\x1B\x20\x45\x16\x23\x31\x97\x46\x40\x32\x82\x04\xA1\x37\xA4\x51\x73\xB6\xFF\x53\x55\x39\x79\x8C\xF2\x23\x53\x85\x84\xC4\x7A\x3B\xF1\x95\x6D\x33\xCA\x93\xD9\x9E\xC0\x2A\xF1\xE0\xA5\xF6\xAF\xCC\xDD\xDE\x59\xA7\x1C\x24\xAE\x4B\x43\x06\xF1\xAD\xB9\x07\x43\xEC\x74\x08\x49\x29\x21\x2D\x23\x72\x49\xC0\x33\xA0\xCB\x08\xD2\x52\x43\x5E\x0E\xEC\x3A\xA8\x73\xE4\xE7\x20\x01\x59\xBC\x85\xDC\x53\x79\x6E\xEC\x4E\x76\x7C\x44\xA3\x75\x2E\x4C\x94\x41\xC9\x95\x89\x98\x0A\x72\xA9\x91\xCC\x11\xC6\x10\xD1\x7B\xAA\xA0\xE2\xF6\x4C\x5F\x31\x61\xE8\x1D\x15\xC9\xDB\x1D\xCD\xDD\xEE\xA8\xDD\x6E\xC9\x47\x45\x82\xA4\xA3\x22\xC9\x45\x6D\xDA\xBF\x33\x62\x96\x42\xBA\xCD\xBE\xCA\xB9\x77\x06\x1D\x6D\x4F\xC6\x9C\xD0\x90\x23\xDF\x2D\xD2\x93\x1F\xDE\xD4\x3E\x13\x9B\x3B\x9F\xF3\xC8\x34\x64\x8B\x34\x23\x95\xB4\xF9\xF1\x90\xC8\xEF\x35\x9C\x05\x18\x81\x46\x96\xE3\x6D\x3B\xED\xB3\x33\xD3\x23\x3C\x1F\xB2\x0A\x66\xC8\xCE\xC8\x8E\x9E\x29\xDC\xEF\xED\xAB\x24\x27\x95\x0C\xF7\xC9\x6F\x9A\x49\x2A\x89\x0D\x1C\xAE\x50\x52\x49\xBC\x85\x66\xF2\x4A\x42\x68\x1E\x93\x8E\x8B\xF8\x80\xDF\x8B\x1F\xEC\xA8\x97\x5A\xE5\x92\xAB\xFB\x94\x59\xA7\x7C\xB5\x8F\x4B\xB8\xAD\x9A\xE0\xCC\x1A\x7B\xF3\x22\xA7\xF9\x7B\x2E\xD9\x4F\x3F\xF7\x21\x50\x58\x94\x07\x7E\x37\xA7\x14\x7B\x95\xB5\x5F\x51\x6C\x13\x31\xDD\xD6\x77\x94\xF2\xF6\x85\x40\xE7\x87\x23\x07\x15\xDF\xA2\x57\x75\x18\x3B\x89\x5C\x40\x38\x66\xDF\x97\x4E\x77\x9C\x3C\xC0\xB6\x02\x8E\x95\xB0\xB9\x88\x9E\x4D\x66\xD0\x9F\xD5\x80\xF9\xCF\x9E\x06\xAC\xC7\x0C\xFE\xD8\xB2\xD8\xF5\x82\x96\xF0\x05\x2D\xE1\x53\xD0\x12\x92\x1C\x5F\xC5\xD3\x7A\x42\x36\xCA\x16\x6C\x06\xB7\x25\xCF\x0A\x62\x08\x5A\x2D\x61\x34\xAB\x25\x24\xDB\xFD\x52\xCF\x76\x6F\xB8\x64\xC1\x10\x96\xF0\xE3\x46\x4B\x98\x3A\x2D\xE1\xD0\x6A\x09\x97\xD8\x56\xBF\x8B\x34\x65\x9D\x91\x63\x1A\x79\x57\xE7\xE3\x98\xF5\x64\x56\x39\x68\xB5\x84\xBB\x78\xD0\xDD\xB0\x44\x53\x68\x3E\x1F\xCA\x43\xB0\x04\xBB\x3B\x9F\x67\xAC\xDE\x24\xE5\xE0\x92\xD3\x12\xEE\xE6\x61\x97\x61\x17\x4D\xA2\xF9\xBC\x90\x87\x60\x17\x2C\x77\x3E\x2F\xD8\x0F\x84\x94\x83\xBB\x9C\x96\x70\x99\x87\xDD\x03\xBB\x69\x12\xCD\xE7\x4B\xF2\x10\xEC\x86\x3D\x9D\xCF\x97\x59\x3F\xCA\xBA\xC1\xDD\x8D\x96\x70\x0F\x0F\xFC\x22\x58\xA6\x69\x34\x1D\xEC\x92\x87\x60\x19\x5E\xD4\xE9\x60\x2F\xEB\x48\x59\x37\xB8\xDC\xD1\x12\xF2\xD0\xB0\x87\x26\xD2\x74\x20\xE4\x21\xD8\xD3\x5B\xFF\xD5\x78\x76\x96\xB9\x71\xCF\xD9\x41\xB0\x93\x03\x0C\x21\x46\x6E\xB6\x71\x76\xB0\xBD\xC8\x5E\x2F\x2F\xF8\x39\x54\x4B\xC8\xD0\xED\xC2\xC3\x61\xB5\x84\x29\x2C\x5D\xD6\xCF\x81\x11\x5B\x58\x98\x16\xA4\xC7\x21\x6E\x15\xE1\x99\x22\xFC\xC8\x8B\x80\xAA\x4B\x4D\xBB\x38\x20\x2E\xB2\x96\x70\xA9\xAB\x25\x5C\x9A\xD6\x12\xA6\xF3\xB4\x84\x11\x17\x17\x9B\xAB\x25\x4C\xFB\x5A\xC2\x61\xA3\x25\x8C\x16\x68\x09\x87\xFF\xE4\xB4\x84\x2F\xF8\x46\xBC\xA0\x25\x7C\xFE\x6A\x09\xEF\x71\xC5\xEE\x39\xF8\x2B\xB3\xE9\xDB\x89\x23\x57\x53\x2C\xBC\xBF\x0D\x0B\xCF\xE5\x30\xFB\x69\x61\x39\x30\xBF\xCD\xEE\x06\x7E\xF1\x64\x37\x61\x2C\xF8\xC5\xE7\xC8\x9E\xFD\x37\xCF\xEA\x24\x6C\x5E\x8A\xDC\xDB\x41\xCE\x89\x99\xD0\x5B\xEA\x74\xAF\xF1\x8F\xE6\xBD\xE1\x6D\xFA\xB1\x36\x41\x7B\x37\x8D\x6E\xDF\x49\xF9\x48\xC7\x8E\x7F\xFA\x46\x4E\x8F\xD6\x66\xDC\xFD\x6F\x5F\xCD\x4B\xBF\xAA\xBF\xD6\xDF\xB7\xF5\x0A\xB8\xBE\x2A\x8B\x1A\x21\x5B\x2E\x59\x84\x8C\x78\xFD\x36\xBC\x3F\xEE\x88\x93\xBD\x6C\x0F\xE1\xBC\x57\x20\xD9\xAE\x86\x78\x15\x18\xB5\x6A\x9D\x31\x9E\xAA\xE0\xC9\xE1\x21\x20\x59\xFC\x51\xC5\xE7\x7B\x08\x4B\x0F\x7D\x50\xC5\x13\x36\x06\x19\xFF\xE6\xC5\xFD\x54\xB0\x58\x50\x6E\x62\x2A\x85\x11\xAB\x55\x48\xA1\x69\xAC\x61\x76\x2F\x9E\x6D\x81\x73\xD0\x17\x38\x9F\x15\xBA\x42\xA9\x37\x9E\x4F\xA2\x73\xD8\xCB\x4B\x69\x2D\x14\xBC\x2B\xB9\x67\x3E\xD0\x8B\x58\x7C\xD6\x29\x7F\xDE\xA7\xFC\xF9\xF4\xBA\xB6\xCB\x3D\x39\x6F\x87\xC0\xB7\xEB\xEA\x91\xFB\xCF\x3C\xBF\x8E\x20\xC5\xD4\xCF\x39\x85\xFC\x7C\xFE\x41\x5C\xF6\x8C\x53\x09\xE1\xC3\x3F\xA5\x87\x7F\xF5\x35\x22\x6B\x8C\x61\x6A\x9E\x31\xEC\x9D\x92\xAD\x61\x3F\x27\xD9\x1C\xF6\xA0\x04\x9F\x14\xEA\x04\x24\x6B\xDF\xBA\x28\xEB\x83\xF2\xBD\xD2\xD9\xB6\xD6\xAA\xA4\x01\x5C\xD2\x01\x5C\x6C\xA1\xE3\x4C\x22\x1D\xC0\x45\xF3\x5E\x81\xCF\x51\x85\x38\xE3\x98\x00\x27\x2D\x14\x1D\xE0\x6C\x98\x73\x0B\x38\x76\x11\x04\x35\xAD\x34\x8B\x8C\x5C\xA5\xF0\xCC\xB8\xA1\x2D\x89\xA5\x3D\x0B\x14\xC8\x62\x7B\xCB\x92\x98\xB6\x2C\x89\xD9\x83\x49\x96\x25\xC0\x49\xBA\x83\x19\x1A\x98\xB6\x2B\x81\xAB\x43\xD5\x22\xB0\xED\x9B\xEB\x50\x67\x20\x18\x81\xC5\x5C\xB3\x92\x4B\x42\x75\xF9\x95\x40\x04\xF1\x69\x9B\xED\x64\xF1\x82\xC0\x27\x55\xF4\xA2\x75\xC5\xB3\xEB\x8A\x9F\xF6\xBA\x7C\x5E\x99\x23\x38\x04\xD5\xA4\x4F\x6A\xFA\x48\x87\x58\x10\x43\x74\x9A\x3D\x00\x15\x71\xCC\x36\x31\x2A\xBB\x02\x3A\xF0\x88\x16\xC3\x7C\xAE\x1B\x39\x73\xCF\xE3\xF3\x32\x41\x0C\x11\xAB\xE4\x7B\x24\x56\x1B\xBB\x25\xE1\x2F\xA7\x76\xEA\xE5\xCE\x9C\x63\xEF\xB4\x86\x4E\x67\x95\x95\x53\x5F\x3C\xBF\xB1\xAC\x68\xEF\xB1\xA7\xB7\x10\x48\x41\x9F\xFE\xFF\x15\xBB\xDC\x92\x54\x8B\x19\xDB\xED\xE6\xDC\xFD\x44\x39\x1D\xF4\x69\xC3\x7A\x5F\xC4\x0E\x35\x66\xBC\xB3\xFA\x78\x55\x66\xEC\x05\x90\xE3\x2F\xF2\x08\x88\xC7\x84\xA2\x75\x95\x98\xC9\xE9\x72\xC0\xA6\xB9\xA1\xD5\x34\x27\x56\x6F\x6F\x1E\x94\x6C\x04\x7F\x50\xD6\x20\x61\xD8\x98\xC0\xC5\xF3\x1E\x85\xAC\xFD\x9B\xCF\x36\x07\xBA\x4B\xF2\x55\xB0\xAB\xF5\x61\xE0\x56\x4B\x75\xC2\x11\x12\x3E\x36\x81\xE8\xAB\xE0\x00\xB5\xD6\x7F\xB2\xF7\x13\x2D\x2A\xC6\x55\x64\x9C\x7A\x8F\x72\xC6\x56\x4B\x10\x41\xF1\x0A\x9C\xE6\x12\xC4\x20\x8E\xAE\xB1\x49\x81\xD6\x5E\x2C\x58\x7B\xA1\x29\x6C\xE7\x32\x0A\x91\x82\x83\x74\x97\xE6\x06\xE9\x2E\xB5\x0A\x91\x42\x43\x01\x12\x0A\x88\xC8\xA0\xBD\xE4\xB4\xED\xA2\x6B\xD0\x5E\xE2\x30\xDD\x29\x83\xB6\x98\x32\x68\x7F\x35\x6D\x1B\x6F\x11\xEE\x5A\x64\x28\x92\x9A\x69\x93\xFD\x1F\xDA\xD0\x65\xE4\x37\xCE\xD3\xEA\x0B\xC7\xD3\x6C\xC4\x27\x6C\x5B\xE3\x71\x6B\xBF\xF9\x24\x2A\xEE\x27\x27\x06\xDA\xD7\xAF\xA2\xF3\xDD\xE1\x1D\x97\x99\x75\xCC\x98\x73\x64\x56\x11\xEA\x83\xF2\x6A\x10\xE4\xF7\x03\x31\xF8\x10\x14\x7F\x76\xAE\x67\x3A\x95\x6C\x71\x0B\xF7\x7B\xB1\xAD\xB3\x63\x0B\xCC\x73\xFA\xF7\x67\x11\x42\x8F\xAA\x3E\x88\x1E\x55\x33\x4E\x40\xEA\x8A\x80\xC4\x1F\xC7\x1D\x23\xF4\xD5\xF3\x8C\xD0\x31\xE5\x7E\x32\xC5\x6A\x2E\x09\x3E\xD3\x6D\x98\x7A\x86\x54\x63\x63\xF6\xCE\xA2\x0E\x28\xED\x0B\x57\xA7\xA0\x34\x93\xFB\xE4\xD5\x55\xEC\x32\xB9\x70\x76\x9F\x4B\x62\x95\xA7\x11\xCF\x9F\x83\xAD\x8C\x68\x0D\xE1\xB3\xB3\xA0\x92\xA5\xC7\xCA\x82\x35\x24\x52\x43\x0E\xD9\x18\x06\x75\x39\x80\xD6\xB1\x23\xE2\xF1\x9D\xDE\xC4\xE6\xFE\xEB\x3B\x76\xF8\xEC\xD8\x61\x33\x54\x74\x1C\x3B\xA2\x2B\x67\x34\xA6\x1C\x3B\x88\xE8\xF9\x73\x89\x9E\x3F\xE5\xD8\x11\x91\x63\x47\x44\x8E\x1D\x3E\x6B\x81\x45\xD7\xB1\xC3\xBF\x25\x17\x56\xF8\x68\xB5\xC0\xA2\xE7\xD8\x21\x48\x79\xED\x84\x12\x14\x36\x91\x4D\xB0\x08\x10\x2D\x50\x31\x45\x53\xBA\xE1\xA8\xC9\x59\x21\x9D\x76\xD8\x9F\xD2\x0E\xFB\x33\xDA\x61\xFF\xE4\x88\x72\x35\xF6\xB5\xC3\xFC\xB4\xAF\x1D\xF6\x67\xB4\xC3\xB3\xAD\x80\x5B\xF5\xB4\xC3\xAE\x55\x5F\x3B\x4C\x4F\x69\xE1\x26\x39\x05\x7E\x53\x40\x05\xAF\x24\x16\xAF\x24\x97\x5D\x4C\xEF\x18\x84\x9E\x94\x52\x7A\x94\xA1\xC9\xA7\x72\x24\xEC\x0E\x67\x38\xEF\x56\xE9\x5B\x36\x88\x60\xD5\xAB\xF5\x47\x7D\x20\x7E\x90\xC5\x33\x97\x6D\xAD\xBF\xD8\xC6\xA3\x53\x32\x5F\x5F\x6B\x67\xB6\xB0\xB5\xFE\xD8\xD5\x29\xF7\x6C\xA9\x3F\x01\x43\x2A\xCF\x39\x3C\x31\xAA\xA4\x2B\xB2\x24\x09\x75\xF1\xE5\xC0\x16\x48\x09\xF7\x7B\x0F\xCA\xCE\x59\x7D\xEF\x4C\x89\x5E\x6E\xD2\x9C\x56\xCB\xB9\xCD\x1E\x14\x01\x0A\x02\x2B\x7F\x43\x68\x1E\x53\x4E\xDF\xB0\xF5\xD2\xD6\x09\xF5\x1D\x51\xA3\x16\x83\xC0\x50\x72\xDB\x80\x49\x49\x00\x92\x32\xF5\xEE\xE3\xBF\x8A\x1B\xFC\x03\x10\x80\x4F\xCF\x0A\xFE\x8B\x52\xDD\xB2\xC2\xC2\x7C\xCD\xAA\xB9\xE8\xAD\x21\xA1\x0F\x48\x5C\x6A\x1E\xC4\x4D\x16\x1A\x8F\xCD\x67\x5E\x19\x72\xDD\x67\xA1\x8B\x77\xD3\x2D\x14\x76\x94\x16\xDD\x4B\x8F\xA3\xB6\x29\xDB\x25\x79\xE3\x77\xBF\x89\xA6\xBF\xB1\xD1\x15\x10\x98\x6F\xAC\x8B\x9F\xB6\x72\x18\xF2\xBE\x15\x1D\xF6\x78\x5C\xF9\x46\xD5\x07\xE5\x37\x5A\x67\x95\x8B\x5F\x7E\xFC\x11\x4A\x9A\xEF\x9B\xF7\xE1\x9F\xC7\x73\x4A\xF5\x49\x3D\xC6\x6D\x85\x89\x00\x49\x67\x6C\x86\xAB\xE6\x31\x6F\xAD\x92\x37\x7A\x17\x43\xBE\x75\xB2\x2A\x39\x28\x7F\xDD\xFE\x28\xAA\xF4\xA0\xFC\xA0\xFD\xB1\x5C\xF9\x07\xE5\x47\xEC\x8F\xBD\x07\xE5\x63\xF6\xCF\xAB\x2B\x7D\x50\xFE\x76\x08\x41\xAB\xDF\x50\x10\x90\x7E\x43\x41\x40\xFA\x0D\x4A\xD4\x68\x2E\xE2\x3C\xDF\xAB\x3A\x0D\xDF\x24\xB9\xE1\x0F\x4A\x6E\x78\x9F\xA4\x86\xE7\x65\x7D\x50\xBE\x05\x9F\xC9\x83\xF2\x5E\x6C\x63\x5D\x83\xFF\x52\xD8\x8F\x8B\x1B\xE4\x9F\x08\x08\xC8\x39\xF8\x49\x41\x1F\xDD\x8B\x1F\xFD\xBD\xE0\xD4\x22\x26\xAE\xF1\x00\x7C\xE1\xB1\x96\x30\x04\xFB\xE4\x47\xC2\xD2\xC7\x7F\x7F\x3B\x2C\x35\xFE\xFB\xEB\x61\x99\xE0\xBF\x1F\x0C\xCB\x14\x21\x72\x31\x44\xF4\x0B\x8C\x07\xE9\xD8\x02\x41\x72\x11\x3E\x84\x0E\xE2\xCF\xB7\x41\xD0\x1C\xDF\x2A\x3B\x28\xBF\x9D\x23\xE9\x74\xE7\x36\x20\x53\x5A\x72\x47\x95\x9B\x04\xF2\x11\xFE\xB3\x42\xB4\x2E\xEF\x64\x23\xFE\xB7\x9C\x8D\x58\x72\xFD\x37\xCE\xEB\x6A\xFB\xA1\x0C\xC6\xDD\xC8\x0B\x6C\xC9\xBF\xB1\xC3\xB1\x7D\x04\xF2\x54\x3D\x9B\x8F\x70\x9E\x23\xD9\xC4\xAC\xF7\x1D\xC9\x88\xA6\xBD\xD6\x9C\xED\x3B\x92\x4D\xD3\x34\xFA\xF6\x35\xE6\x7B\xFB\x8E\x64\xD3\x34\x8D\x5A\x7D\x8F\xB9\x0B\xDA\x4E\xCC\xAB\xCD\x9D\x7D\x0F\x32\x1B\x6F\xE8\x16\x7F\x2D\x41\x2A\xC3\x8D\x5A\x50\x28\x36\x7A\x2A\xC5\x84\x23\x44\x53\x3D\x7D\x1D\xE1\xD3\x52\x77\x8B\x09\x43\x60\x3E\xE8\xD5\x65\x8E\x53\x3D\xE5\x92\xF2\xE1\xFF\x9F\x18\x55\x3E\x68\xBE\x9D\xA2\x6E\x5D\x61\x8D\xB7\x53\x04\x3E\xE4\x9D\xDB\x89\x7F\xBB\xDB\x29\xE2\x6C\x43\x9F\xF6\x6A\x23\x41\x32\xAB\x7A\x15\x44\xE6\x7B\x0E\x4A\x85\xB7\x8E\x11\xD4\xA4\x42\xC1\x75\x54\x51\x25\xD9\x88\x07\x71\xB5\x1D\x7B\xFB\x47\x70\x7A\xDE\xB8\x05\x46\x1C\x7E\xEA\xDC\x02\xF1\x68\x44\x0D\x8D\x32\x9F\x0C\xDB\xBF\xE3\x83\xF2\xC7\x23\xFE\xF7\x0B\x78\x92\x3E\xF5\xFA\x9F\x7B\xD7\xFA\x41\xF9\x69\x24\x1A\x3F\xF5\x37\x8F\x3F\xF2\x2B\x9F\xBF\xF8\x89\xEF\xB8\x41\xDE\x1B\xB9\xDF\x6F\x7A\xF8\x6D\x2F\xB9\xC1\xFF\x24\x7B\xE0\x05\xFB\xE4\x37\x56\xD2\xAC\x23\x9A\xFC\xFD\x63\xBD\x04\x79\xD2\x04\x94\x04\xDF\xC8\x1A\x8F\xB4\xF9\x94\x57\x97\x92\xEF\x38\x76\x0E\x90\xA0\x8D\xA8\x8D\x7C\x15\x9E\x56\xCF\x5D\x71\xDA\x64\x27\xCA\x01\x64\xA5\x86\x41\xEE\x69\xFF\x10\x9F\xEE\x07\x71\x8E\x0F\xAA\x1A\xF7\x88\x57\x80\xBF\xA3\xBA\xF8\xA2\x5D\x07\xBE\xEB\x3E\xFF\x58\xAB\x17\x3B\x8E\xFF\xF3\x60\x54\xE9\xB5\x83\xF2\x38\x39\x93\xFF\x0A\x58\xA5\x68\x70\x9D\xF7\xA0\x9A\xE7\x7A\x1E\xEC\xF7\x1E\x54\x8B\x7D\xCF\xFB\xEF\x89\xCB\x0E\xF6\xC9\x87\xDA\x88\xE9\x2A\x6B\x54\xFA\x6F\x8F\x78\x1A\xEF\x55\x90\x91\x52\xFF\xED\x51\xC3\x67\xBF\x57\xB1\x5A\xFF\xED\x11\xB7\x6E\x18\xED\x87\x94\x6E\xC6\x60\x08\x74\x29\x37\xAD\x8A\x95\xA1\xC7\x21\x00\xDD\xB0\xDE\x0F\xE2\x67\xB6\x86\xCC\x19\x13\xD4\x48\xFF\x37\x10\x60\x17\x43\x72\xFA\x66\x92\x5A\x0D\xF0\x00\xE1\x80\xF7\xC9\x9A\x5F\xC2\x00\xF4\x18\xF2\xE2\xD3\x7C\x4C\x90\xD0\x06\xFB\xE4\x46\x34\x3E\xC8\x37\xC0\x7D\xB2\x2E\x33\x6D\xBF\xC8\x1A\x78\x6F\x44\x35\xE4\xCD\x1E\x70\x6F\xFC\xCC\xC2\x7F\x6A\xEF\x02\xF3\xA4\xA8\x5F\xD8\xBF\xED\xF7\xCF\xC2\x2C\x6A\xA0\xC2\x70\x6D\x61\xF3\x27\x3B\x82\x4D\xB4\x20\xAA\x22\xDA\x36\xAA\xA2\xF7\x9A\x00\x13\xF5\xC4\xC7\x1E\x5C\x22\xA6\xB2\x33\x60\x59\xEE\x40\x25\xEA\x8B\x8F\xB6\x7B\x7C\x4C\x24\x97\xC5\xC7\xA8\x03\x03\xAF\x0F\x1F\xED\x3C\x67\x7A\x65\xB7\xED\x85\xE0\xA4\xE7\x88\xB9\x01\x52\x67\x53\x17\x34\x33\x05\x29\x24\xF5\xD8\xF2\xB9\xB4\x1D\x8E\xCF\xA5\xFD\x9C\xE1\x73\x79\xC7\xBA\xAE\xD1\xB4\x05\x33\x9C\x2E\xF7\x76\x9F\xEC\xF4\xF6\x96\x59\xAE\x99\x9A\x4C\xF5\x76\xDF\x3C\xBE\x39\x22\x16\xB2\x39\x34\x48\x86\xA1\x6E\x9F\xD2\x11\x31\x92\xD3\xD9\xF1\xA3\xBF\x66\x0C\x38\xFC\x6B\x5F\x7E\xFC\x91\x8F\xFD\x35\x51\xE8\x6F\x62\xB0\xED\x33\x3E\xB2\x9C\x96\xD3\x6A\xBF\xF8\x62\x7B\x1E\x2F\x2A\x7A\xDB\x0E\x41\xFC\xDF\x0C\x56\x5D\x54\x95\xBF\x56\x49\xC6\x2B\x7F\x0A\xAF\xE6\x48\xAA\xD1\xF6\x6A\x89\x68\x5A\x2D\x11\x2D\x30\xED\x9E\x97\x0E\xAF\xD8\xB6\x7B\x5E\x4E\xE3\xD5\x79\xB9\x00\xAF\xE4\x2C\x5E\xCD\xE8\x6E\x08\xAF\x68\x59\x56\xF8\xB1\x65\x8A\x23\xF7\x97\x51\x56\x0E\x63\x84\xA3\x69\x3D\xF9\x28\x8D\x8F\x7F\xBE\xFE\xC6\x83\x92\x30\xE7\xB7\xDF\x89\x8C\xDF\xEF\x3C\x4A\x50\x2B\xBE\x8F\x08\xA7\xB9\x1B\x2F\x41\xF3\x4D\x46\x34\x2D\x8A\xEF\xE7\x37\x69\xFB\xE4\x07\x98\xC8\xF6\x0D\xAA\x7E\x27\x7D\xA6\xB9\xF8\x18\x81\x8C\x73\x36\xB3\x0A\xAE\xDD\x3A\xBB\xB5\x9D\xAD\xFB\x6F\xB3\x5B\x27\x2D\x41\x90\xCF\xF6\xC6\xE9\x39\x1B\xA7\x9F\xB5\x8D\x23\x82\xE0\x40\x11\x42\x68\x3E\xF9\x18\xE3\xF5\x76\xB0\xD0\xBC\xDF\x8E\x38\x22\x83\x19\x2E\x80\x45\xB8\x3D\x2C\xC2\x69\x58\x84\x8B\x61\x11\x92\x6E\x6A\x7B\x58\x84\x7D\x58\xD8\xEE\xF1\x31\xC5\x1F\x32\x2C\xC2\x3E\x2C\x2C\x24\x58\x44\x61\x5C\xB0\x78\x32\x39\x9A\xCB\x6D\xF1\x64\xCE\x11\xFF\xA7\x82\x27\xEF\xF8\xE8\x53\xC6\x13\xF1\x55\x82\x27\xC4\x12\x12\x40\xC2\x26\x7B\x3C\x9B\xD0\x43\xF0\xD8\xAD\x2B\x6C\x63\x62\x94\xA5\x8A\x1D\x8D\xD0\xF2\x3C\x85\x90\xD7\xD3\x07\xCD\xB9\x21\x23\x5B\x36\x04\xA2\x7E\xE7\x51\xA7\xF3\x68\x5E\xE7\x51\xBF\xF3\x68\xF6\xC2\xB4\xC1\x45\xB4\xC4\xF7\x47\xAB\x44\x3F\x03\xED\x48\x38\x67\xE3\xB5\x6D\xA4\x6B\x40\xEB\xE5\xF0\x09\x8F\x25\xCA\xA7\xBF\x4A\xCA\x04\x67\x17\xFA\x8C\xAC\xEC\x8A\xE3\x3A\x7B\xAF\xB7\xF5\x30\xBA\xA8\xFA\x2E\x46\x17\xD5\x34\xC6\x5D\x54\x0B\x9C\x8C\xD8\x61\xB9\x83\x63\x3D\x97\x23\xA7\xC4\x9E\x33\x77\xB1\xFD\xDC\xC5\xF4\xDC\xC5\xE2\xB9\x5B\x8B\xC5\xB6\x73\x9F\x67\xB1\x88\x66\x2D\x16\x9D\x95\x20\xAD\x78\x47\xE4\xD4\x95\xDF\xBF\x47\xC4\x8D\xBA\x72\x6E\xCC\xFC\xB4\xA9\x47\xDA\x98\xC6\x88\x35\x91\x62\xB5\xE4\xB8\xF8\x2A\x21\xFB\x78\x95\x9E\x70\x4E\x16\x59\x6B\x16\x9A\x1F\x98\x28\x6D\xB4\x63\x0C\xD1\xE9\x32\x47\x0E\x16\xF4\xC8\x85\xD2\xD3\x27\x73\xEC\xF3\x8D\x8F\x10\x95\x42\x80\x84\x3D\xD6\x73\xE3\x19\xCF\x5A\xEA\xE9\xBC\x4B\x6B\x9D\x57\x55\x56\xF3\xC4\xE2\xB1\x55\x55\xB2\x03\x3A\x8F\x00\xE4\x98\x80\xBD\x66\x10\x37\x81\xE9\x47\x72\xDF\x76\xDD\x9A\x02\xEC\x98\x14\xA6\x37\x33\x5A\x4A\x27\xF0\x96\xD6\xCD\x29\xEE\x9A\x17\x33\x88\xD9\x2A\x9E\xB1\xF9\x10\x87\xAA\x62\xCE\xC2\x46\x51\xF2\x19\x1B\xCD\x24\xC4\xAD\x5F\x00\x19\xDC\xF0\xA9\x6F\xBC\xCE\xD4\xC8\x89\x20\x66\x0B\x7A\x06\x31\x05\x3E\x51\x0A\xC3\x98\xAD\x98\xE9\xB8\xD2\xAD\xED\x39\x03\x8F\x46\x86\xF8\xB8\x2D\xA3\xE1\x1E\xA4\xC7\x3B\x41\x6D\xF1\x82\x33\x68\xBD\x5E\x2E\xA3\xFD\x8A\x77\x18\xF1\x15\xE3\x4E\xE3\x1A\xF5\x89\x51\x15\xCF\x8D\xF7\x8A\x5D\xBC\x57\xDC\x58\xA0\x63\xF6\xC9\x8F\x1B\x0B\x34\x76\x43\xCB\xF6\xAD\x27\x0F\xAD\x93\x18\xC7\xB8\x4C\x21\x26\x70\x1C\xEF\xD8\xD7\xE7\x04\x1C\x88\x9D\x07\x1C\xA4\x6C\x6A\x9A\xD1\xED\x89\x29\xDD\x1E\xF5\x16\x43\x0A\x29\xC4\xC7\x47\x55\x6A\x95\x79\x7D\x63\x53\x0A\x9A\x2D\xEC\x69\xB3\xBE\x94\x51\x2C\x6D\xD6\x97\x6A\x48\x09\xCF\x68\x7D\xA9\xB6\xCA\x5C\x5A\x20\x45\x4D\xA5\x36\x9C\x0D\x37\xFA\x18\x75\x9A\xB1\x91\xBA\x6A\xCC\xD5\x95\x7F\x7B\xA5\x91\x89\x27\x0A\x92\x81\x06\xFF\xD4\xD8\x5A\x71\xB9\x39\xE8\x29\xD3\xB6\x6F\xED\xA3\x8D\xF3\x4C\x6A\x8D\xDC\x6D\x46\xEB\xAC\xB1\x73\xE3\xF0\x90\xB2\x9D\xDB\x4C\x8E\x51\x29\xE9\x29\x63\x31\x9E\xAA\xAC\xB5\x02\x37\x39\xE1\x84\x4B\x09\x9F\x0B\x36\x93\xC5\x4D\xAD\x94\xD6\xC8\x98\x4E\x45\x8F\x2F\x34\x32\x66\xCE\xC8\x98\xB5\x46\xC6\xF4\x99\x8D\x1E\x9F\x31\x32\x7A\xF3\x8C\x8C\x29\x19\x19\xD3\xAE\x91\xD1\x9B\x31\x32\x5E\x2E\x7A\x3C\x75\x11\x32\xF3\x83\x4D\xD2\x29\x4D\x7B\xFA\xFC\x8B\xE1\x76\x11\x46\x69\xA3\xB3\x45\x3E\xB4\x57\xBE\x2A\xB7\x66\x55\xB9\x88\xA6\x42\x6C\x04\xFE\x3F\xA5\x95\x8C\x7B\xC6\x68\x0E\x4A\x8A\x19\x4F\x62\xC4\x93\x98\x83\x92\x3C\xA7\x5A\xF1\x08\x4F\xE2\x26\xB3\xE4\x33\x67\x8C\xF6\xE6\x52\x08\x6F\x0A\x4F\x7C\xC2\x13\x9F\xF0\xC4\x9B\x63\x8C\xF6\x76\x62\x8C\x5E\x9C\x53\x52\x2C\xCC\x29\x29\x9E\x4F\x78\x22\xA6\x94\xFA\x1D\xC3\x7B\xD4\xBA\xAE\x3F\x3B\xA9\x63\x5A\xAF\x91\xB7\xCB\xAE\xEB\x7D\x68\xDE\x3E\x93\x3A\xE6\xED\xDB\xA5\x8E\xE9\xC9\x28\x73\xF9\xC7\x67\xDC\xE3\xC5\xEB\xCE\xDD\xF2\x8F\xDE\x76\x73\x5F\xE4\xF1\x82\xD3\x8C\xFB\xAE\x2E\xC6\x2B\x13\x6D\xD9\xA2\xA7\xEC\xF6\xB2\xC8\xE1\x24\x34\xEF\x68\x32\x2F\xDC\x7F\x8D\x1F\x4E\xC4\xBA\xEC\xE6\x70\x9A\x4D\xBF\x60\x03\xF6\x39\x81\xE0\x11\xEB\xB4\xDB\x7A\xA2\xCF\xF5\xD3\xEF\x7B\xA2\x2F\x74\xE1\x0F\xAF\xDC\x85\xDF\x3A\xF0\x38\x17\x74\x1A\xCD\x86\x21\x51\x1E\xA5\x70\x01\xF7\x1B\x6A\x2A\xCF\xD4\xE5\x72\x91\xAF\x95\xEC\x13\x2D\x9A\xB0\x7B\x6F\x81\x91\xD2\x63\x23\x25\x84\xC8\x42\x87\x0B\x6C\x95\x6D\x2B\x64\xD7\xB9\xD5\xA2\xBA\xF3\x24\x7C\xDC\xD6\xAD\x3B\x1F\x98\xC7\xBC\x69\xD9\xE3\xB6\x05\x68\xEF\xCF\x8B\x39\xF1\xBB\x2E\xE0\x6D\x3A\xDF\xA7\x9C\x66\xA0\xF7\x7A\xDB\x90\x99\xDB\xFA\x21\x33\x3B\x9F\x7F\x38\x67\xFE\xDB\x47\xFF\x44\x33\xB1\x33\xED\xAE\xD1\x44\xBB\xC1\x68\x73\xB0\x40\x74\xB1\x60\x4E\xA1\x37\x0A\xB7\xA6\xB0\x97\x1D\x60\x81\x80\xF0\xF9\x81\x05\xF2\xAB\x07\x0B\xC8\x91\x45\x70\x31\xC2\x8C\xB6\xF3\x44\x15\x72\x4A\x8D\x2A\xA6\x5C\x1B\xE1\xA8\x4A\x29\xEF\x76\x5D\x85\x07\xE5\x2D\x9D\xD2\x51\x7E\xCB\xD5\x73\x28\xF6\xF2\xF5\x92\x42\xE0\xF1\xDF\xF5\x4A\x1F\xA6\xCA\x56\x1B\x9B\x15\x55\xFE\x8F\xC0\x77\x15\xAE\xF4\x66\xDD\x89\x4C\xBA\xE8\x9D\xB4\x44\xC7\x37\x94\x1D\x2A\xA0\xBE\x2A\xDF\xF5\x56\x45\x53\xFD\x65\x07\xE5\xBF\x82\x00\xB2\x5E\x7F\xB7\x41\x00\xF4\x49\x74\xBD\x54\xEB\x95\xDE\xAC\x72\xC8\xEA\x2A\x83\x7C\x65\xEB\x30\xBC\x1E\xF4\x59\x52\x0A\xDC\x71\x0F\x64\x5B\xF7\x36\x5D\xE5\x07\xE5\xBF\x86\x00\x72\xD7\x15\x7E\x81\xBD\xC7\x86\xCA\x94\x07\x28\x04\x5C\x8F\xB3\xE7\x29\x6C\xD6\x55\x0C\xD9\x74\x87\x71\xA7\xC3\xEC\xA0\xFC\xB7\xDD\xB9\xC5\x35\x4F\xD6\xF5\x82\x53\x3B\x0C\xF7\x81\xDE\xAC\x62\xC8\xEB\xCA\x87\x78\x65\xEB\x2C\xF8\x40\x99\xC8\xFC\x95\xAD\xB3\xD8\x77\xB7\x47\x9F\x7B\xF4\xBB\x3D\xFE\x6B\x0B\x3C\x2E\x26\xF5\x98\x57\x1B\x2E\x94\x57\xFC\x68\x13\xF8\x1D\x3B\x6B\xC4\x63\x5E\x4D\x60\x04\x9F\xE0\x8A\x44\xFF\xFF\x72\x31\x01\xFC\x36\xB1\xE9\xCC\x96\x21\x06\xBF\x78\xEB\xB9\x6E\x08\xDD\xE2\xF3\xBA\x33\xD7\x92\x9D\x65\x2C\xB3\x4A\x4E\x1F\x7C\x08\x8F\x8F\x10\x28\x73\xC4\x6B\xDF\x65\x2C\xF3\x9B\x74\x2A\x3E\xCB\x21\x7E\x93\x4E\xC5\xD7\xE0\x1F\xC9\x43\xCE\x7F\x40\xC9\x4E\x42\x4E\x9A\x42\xC9\x85\x4A\x1F\x42\x4A\xEC\x10\x81\x5F\xDB\xC5\xFB\x48\xAF\xD8\xAF\x41\xB1\xEB\x1E\x27\x69\xC8\xA4\x76\x71\x16\x1B\x5C\x8C\xCB\xA8\xE2\x9D\xEC\x60\x76\x24\xF7\xE5\x21\x4E\x3E\x10\x32\x98\x23\x86\x1F\x9E\x94\x29\x28\x93\x93\x47\x0B\xE1\x90\xDA\x30\x90\x7B\x95\xD8\x2C\xC1\xDD\x88\x91\x25\xA1\x64\x30\x19\x7D\x51\xE6\x04\x68\xFF\x64\xEE\x99\x1F\xFF\x58\x2F\xC6\xD1\xA7\xC4\x67\xE6\x42\xE7\x29\x45\xA4\x4D\x4E\x9F\xA4\x0A\x6B\xA2\x36\xE2\x4E\x23\xEA\xAD\xC3\x3E\x63\xDD\x66\x2E\x21\x40\xD4\x8B\x5C\x71\x89\x08\xC2\x93\x23\x3A\xD8\xFD\xF5\x25\xEC\x6B\x5B\xFC\x79\xE3\x85\x17\x41\x0E\x99\xA1\x5D\x28\xFE\x82\x66\xCF\x49\xAC\x9A\xAF\xC2\x79\x8A\xD2\x2C\xD5\xFC\x25\xED\xAE\xFD\x72\x56\x41\x9B\x45\x7A\x66\xCD\xA1\xD9\xD8\xD8\x38\x40\xA9\x74\x49\x14\x8F\x21\x30\x1F\xF1\xEA\xE2\x2F\xAD\x6B\x7F\xA4\xAF\x08\x30\x14\x8F\x78\x34\xF7\xE7\xC3\x47\xED\x10\x3E\x31\x8D\xBD\xB1\xB1\xB1\xB7\x05\x11\xA1\x19\x5D\x86\x2D\x48\x82\x39\x20\x89\xF1\xDC\xBD\xFF\x63\x8D\xA1\xF2\x71\xD5\x33\x54\xBE\xFD\x63\x3D\x43\xE5\xEF\xE0\x4F\xF3\xD2\x9D\x18\x2A\x8B\x1F\x3C\xC7\x7C\x69\xD3\x7D\x01\x81\xF9\x13\x75\x90\x35\xDC\xBD\xEE\x4D\x51\x37\xA6\xD0\x8F\x3F\x8D\x11\xC0\x2E\xE0\xDA\xD9\x11\xA0\x7E\x46\xD6\x70\xC0\x8E\xF0\x0D\xB3\x23\x1C\x78\x66\x46\x38\x64\xA1\x74\xF3\xEC\x08\x17\xBD\xA7\x03\x26\x32\xAE\xB4\xC8\xFF\x25\xD2\x8D\xCE\x39\x25\x86\xD4\xDE\x6C\xF4\x98\x6B\xBB\x10\x6D\x75\x61\x12\x59\xBC\x79\x46\x8B\x86\x7B\x81\xE8\x20\x4A\x4E\x10\xEC\x93\xB7\x20\xEE\x16\x54\xE5\xE0\x9A\x55\x9B\xCD\x20\x21\x87\x8B\x7D\x52\xD5\x9D\x32\x6E\x77\xAC\x12\xA3\x46\x5C\xDB\x69\x23\x56\xD7\x2A\x1F\xB9\x05\x9F\xA3\x1B\x48\x6F\x4B\xE9\x72\x8E\x8F\x28\x75\x8E\x3C\x03\x51\x47\xB7\x15\xB2\xCE\x22\x34\x93\xBA\x0C\x59\xB7\xD5\x96\x78\x24\x9D\x45\x48\x6A\x5D\x92\x2B\x59\xFC\x7F\x7A\x5A\xDB\x70\x87\xDA\x2D\xE4\x3F\xC9\x1F\x43\x52\x96\x2E\xFF\x28\x5E\x20\xEE\x4A\x11\xB8\x2F\x53\x19\xBA\xAE\xFA\xEA\xE0\xEE\x3A\x8A\xCC\x70\x36\x1F\xCC\x1C\x4E\xDE\x63\x4E\xBE\xAF\x7A\x09\xA7\x55\x74\xFF\xE8\x3D\xFE\x11\x1A\x1D\x8F\x7F\xE2\x70\x1A\x11\xFD\x41\xD9\xE6\x7C\x80\xA6\xB0\x0C\xB2\x05\x8D\x1B\xBA\x78\x39\xC1\xDD\xDD\x0C\x95\x07\x1E\xF2\x68\xDE\x0A\x5E\xA8\x54\x9D\x9B\xC9\xBD\x67\xEF\x12\x0F\xFC\x1A\xC7\x95\x06\x5C\xD1\x43\x9F\x6A\xE8\x36\xF4\x5D\x12\x69\x99\xA1\xEF\xF2\xE9\x50\x5F\xD9\xD2\x77\x49\xB4\x71\x86\xBE\xCB\x0E\x7D\xBF\x02\xDA\xF8\x21\xE5\x2A\x43\x2B\x08\x56\x10\x69\x73\xA1\xCD\xCF\x7E\xBC\x7F\xCB\x52\xCD\xD0\xA5\x95\xDC\x33\xEF\xEF\xBF\x51\xA6\x20\x44\x01\x45\xB7\xA8\x11\x77\x56\x11\xF5\x63\xBB\x8C\xC6\x95\x82\xE0\x56\x72\xD9\xC6\x03\xE1\x9F\x31\x6A\xAD\x8A\x99\x7B\xAD\x12\xCE\x3B\x4D\xD9\x66\x13\x88\x6B\x08\x40\x59\x96\x83\x7C\xBD\x71\xD4\xE9\x2F\x5C\x7B\xC9\x5F\x28\x08\xF8\x0B\x36\x84\xE2\x1B\x1F\x1F\xD6\xC5\x9B\x89\x01\xF1\x2D\xBF\xDC\xED\x44\x71\x5A\x4A\xFC\x3C\x72\x9F\x03\x9E\xA8\xA8\xF9\x6E\xA8\xA9\xB6\x0E\x76\x58\xC5\xC5\x9B\xE8\x33\x1F\xE2\xDA\x30\x03\x09\x02\xE2\xBA\x4A\x79\x81\x89\x1B\x8A\x73\x55\x29\x3B\x3D\xFB\x59\xA9\x69\x42\x51\x4D\xCE\xCA\xF4\x39\x52\xAA\x18\x05\x96\x00\x3F\xCF\xED\xE7\x1E\x3E\x8B\xC1\x07\xFA\xC0\xF8\x67\x70\x71\x16\x1C\xB4\x8C\xC4\xC2\x42\xD9\x65\x04\x90\x02\xF6\xA1\x10\x78\x79\xB3\x8C\xD0\xAC\xAF\xDA\x49\x04\xF8\xA2\xAE\x7C\x3B\x42\x4C\xD5\x40\x7F\xD2\xB9\x9D\x35\x70\xF1\x9B\x0E\x49\x81\x8B\x1C\x73\x04\x51\xD3\x21\x6E\x4A\xDB\x81\xE2\x0E\x9A\x9C\x0F\xB8\x01\x2C\x48\x5C\x8C\x44\xB2\x30\x95\xA5\x6F\x26\xA7\x41\x52\xD5\x71\xF0\x41\x92\x88\xC9\xC9\x49\x89\xAD\x7B\xB2\x83\x56\x10\x9A\xE2\xCE\x2A\x32\xDE\x31\xA3\xCE\x54\xB1\x89\xD7\x20\xA6\x0C\x8C\xD1\xA8\x4A\x4C\x7C\x67\x15\x8D\xAA\xD8\x28\x7E\x9A\xF0\x53\x65\x9F\xCA\xDE\x53\x89\x4F\xDD\xCF\x98\x90\xD3\x78\xC7\x6A\x2A\xAF\x11\x51\xBA\x71\x5B\x17\xD0\x72\xE3\x46\x40\x74\xA6\x8A\x70\xB0\x63\x67\x28\x92\xC4\xBD\xDD\xD8\x28\x3A\xEF\xA9\xAE\x71\x58\x46\x99\xD2\xC4\x19\x52\xBC\xF0\xDD\x1B\x1B\x7B\x57\x72\x62\x15\x0F\x50\x06\xBE\xB8\x61\x6C\xA9\xDE\x77\x84\xE3\xC7\x06\xA1\x18\xD5\xD8\xC9\xCA\x88\x32\xBC\xE1\x9B\xC9\x31\xCA\x2F\x17\x53\xE1\xF7\x67\x95\x63\x24\x55\x90\xE3\x5A\xD3\xB6\xA0\x89\x87\x42\x5A\x99\xB8\xEA\xE9\x9D\x46\xDA\xE5\x1F\xE9\xB2\xFF\x9A\x9B\xE2\x31\x4D\x49\x83\x2C\xCF\x54\xD2\x22\x7C\x06\x74\xF9\xDB\x5F\x09\x84\x9D\x5F\xB2\xA5\xBF\x28\x4C\x65\xC8\x21\x15\x0F\x5A\x93\x35\xEE\x93\x11\xED\x4F\x89\xE7\xAF\xF9\x99\x71\x4D\x8E\x76\x56\xC2\xE6\x0D\x17\x64\x38\xA8\x3C\x7B\x4C\xC9\x1F\xA9\xD8\xB4\x1C\x98\x9E\x13\xC2\x48\xDF\xB4\xCD\xBD\x9A\xA4\x90\x08\xFC\x71\x45\xE5\xF1\x73\xC3\x11\x26\x1D\x19\x3B\x01\xDA\xC0\x1D\x77\x5B\x7A\xAE\xD6\xFE\x74\x67\x20\x99\x50\x71\x57\x65\xC4\x77\x7F\xDF\x27\x85\xAD\xE5\x90\x58\xDB\x52\xF1\x33\x74\xFA\x92\x32\x81\x8C\x71\x24\x29\x13\x0D\xE9\x3C\x5F\x95\xE4\x08\x65\xDD\x9E\x55\x60\x2F\x60\x39\xDB\x14\x34\x10\xEB\xAF\x04\x6D\x50\x58\xD1\x38\x59\xEC\xEC\x76\x60\xF4\xF7\xCC\x5F\xF4\x5E\xDA\x4C\x57\x78\x48\x4E\xB2\x7B\xB8\xB9\x28\x4E\x72\x32\x68\xAA\xAB\xAC\x98\x78\x18\x51\x46\x99\xAF\x1D\x45\x81\xD0\x64\x56\xFE\xC3\x2D\xA1\xA4\xC0\x44\xE9\x10\x90\x6F\x62\x7D\xB7\x3F\xC3\x5B\x0B\x4A\x06\xEE\x2E\x23\x3A\xEF\x49\xF7\x32\x4A\xDC\x65\x84\x5C\x78\xEF\x42\x4A\x2D\x05\xE4\xA4\xB3\x09\xA7\x3F\x87\x94\x2F\xA4\x2F\x59\x47\x07\xA5\x9B\xEF\xD4\xCC\x77\xEE\x2B\xC9\xDF\x21\x55\xFC\x92\x75\xD1\x68\xCA\xF0\xF7\x6E\xA6\xA6\xAF\xD8\x52\xE1\x74\xEA\x76\x4A\x91\xAC\x37\xBD\x48\xBA\xA0\x92\xF6\x73\x5E\x2C\xF7\x62\x47\xAF\xD2\xE6\xA6\x4A\x3B\x37\x55\x8A\x57\x0D\xAD\x3E\x6F\x6E\xAA\xA4\x7B\x53\xA5\xBD\x9B\x2A\x99\xBA\xA9\xD2\xBA\x1A\xE0\x4D\x32\xAE\x86\xCD\x4D\x95\xE2\xE5\x37\x7D\x53\xD9\x99\x8A\x66\x65\xF9\xCC\x85\x95\xC1\x80\x2F\xAC\x1C\x86\x4D\x7B\xBC\xF9\xBA\x77\x56\x0E\xC3\xF6\xCE\x4A\xDB\x3B\x8B\xFA\x0D\x3A\x10\x9B\x73\x6F\x25\x90\x74\xFB\x6D\xAF\xAE\xB4\xBD\xBA\x08\x74\x44\xF2\x22\xBA\x6B\x1C\xFE\x47\xFA\x6B\xBC\x4E\x7E\xA2\x2F\xDA\xB5\xB6\x09\x8C\x2E\x4A\x4E\x09\x47\x96\x9D\xA0\x31\xEB\x04\xFD\xFC\xDA\x41\x27\x39\x1C\xA7\xBF\x5E\x9C\x2A\x68\x6E\x8E\xA5\xEE\x47\x43\xEB\x23\xA4\x38\x3F\xC7\xBC\x57\x73\xCB\xD0\xCB\xA6\x0C\x7D\x30\xD7\x39\xC9\x15\xAF\x73\xEE\x41\xD4\x99\x00\x69\x33\x8A\x8C\x41\x71\xDC\x49\x25\xCD\xE4\x28\xDB\xDF\x48\x84\x34\x74\x78\x09\x44\x66\x2F\x85\xD6\xA9\xE2\x53\x0C\xA8\x06\x02\x95\x30\x1B\xC0\x36\x2B\x06\x8B\x30\x17\xE9\xB7\xD6\xBF\x13\xB7\x05\x1F\xDF\x21\x3B\x51\xA7\x1D\x37\xAE\x80\xDD\xB8\x82\xD6\x8D\xAB\x0C\xAD\xC3\x18\x85\x2E\x5A\x47\x2D\x5B\x1A\x38\x5C\x64\x60\x9B\x6B\x45\xDB\x61\x8E\xAC\xE8\x69\x18\xD8\x7C\x67\x6D\x79\x36\xF3\xC7\xB5\xFE\x77\xAD\xED\x97\xFD\xEF\xDE\x3E\xE3\xAD\xBA\xD0\xF6\xFB\x94\x52\xC8\xF9\x1D\xBB\x61\x3F\x01\xBC\xD4\x1D\xDE\x42\x72\x86\x8A\xF9\xF8\x68\xFD\x09\xE7\x25\x27\x5A\xF0\x99\x8D\x4F\x27\x28\x52\x14\x62\x34\x93\x0B\x91\x4C\xCC\xCF\xB0\x69\x5D\xCC\x01\xAF\x78\xAA\xE0\xBD\x4C\x55\x16\x0B\xDE\xA2\x85\xEE\xF3\x79\x19\x8D\xA9\x91\x1D\xDC\x5B\x2A\xFA\x85\x73\x5C\xD1\x95\x42\xA8\x45\x13\x9B\x33\x6B\x86\xC7\x06\x25\x95\x6D\xB5\x71\x39\xF3\xCC\xF0\x5D\x6A\x0C\x41\xC7\x26\xBF\xAB\x93\x5B\x8E\x43\x71\xF0\x91\x37\xFB\x48\x4E\x3D\xFA\x0F\xA2\xD5\x14\x1C\x18\x57\xCA\x12\x24\x85\xC3\xEF\xAD\xAB\x00\xA4\xD9\x5B\xBF\x54\x7A\x37\xF8\xF6\x21\xD4\xA4\x02\xB0\xA6\x04\x7A\x54\xD4\x24\x85\x77\x5B\xC5\xF8\x28\x76\x8F\x02\xE3\x53\x63\x90\xF4\x20\xB6\x73\x55\xE4\x36\x69\x23\x87\x94\x39\xE0\x16\xF3\x1C\xCD\x49\x3E\x95\x39\xFD\xB0\x2F\xD5\x44\x9C\x6D\x2D\x35\xD6\x5E\x4C\x5A\xA6\x39\xB9\x40\x5A\x5F\x39\x57\x85\xD7\x6F\x2D\xC6\x36\xFA\xDE\xA6\x58\x50\xBE\xCD\x6D\xE3\x55\x01\x9B\xB9\xD2\x3B\x72\xDF\x67\x36\xAE\x44\x74\x4D\x6F\xAF\x02\x9B\x62\x41\x69\xED\xEC\x37\xCA\x24\xF8\x5A\x9A\x49\x5D\xC9\xDC\xD3\x78\xA3\x73\x05\x1B\x85\x9C\xE2\xE4\x04\xF2\xAA\x1F\xFC\x68\x8F\x57\x15\x74\x81\x99\xDF\xED\x3F\x9D\x59\xD0\x53\x2A\x06\x6B\xC4\xD0\xEA\xDB\x14\x15\x2B\xA6\x08\x25\xF3\x5F\x3E\xDA\x35\x49\x3C\x04\xE2\xA1\xE2\x6E\x04\xEA\x03\x55\x78\xB3\xE7\x5D\xBC\x74\xE9\xD2\x9F\x99\x6F\x67\x7D\x14\xE0\x13\xFC\xEF\x0B\xE6\x95\xCD\xDF\x9E\xF7\x1D\x5C\x5A\xE0\x67\x39\x27\x32\xAE\xCD\x4C\x08\x26\xE0\x8F\xF4\x66\xD4\x77\x88\xBE\xFC\x4D\xDA\xB9\x3B\x41\x9A\xBB\x37\x14\x72\xEB\x7F\xFA\xD1\x19\x6E\xDD\xEF\x16\xC5\x5D\xA0\x43\xF4\xBB\xDE\x00\x3E\x59\x6E\xA7\x76\x37\x74\xBB\x1B\xD3\xEE\x46\x54\x18\x88\x65\x13\xBB\xBB\xE4\xDB\x16\xE3\xEF\xDB\xAB\xA4\xB3\xBB\xB6\xEE\x62\x8C\xBB\x1B\x93\xA2\x19\x25\x4E\xDA\xDD\x98\x73\x9B\x41\x6C\x77\xB7\x4F\x7D\xCC\xA4\x4C\xDA\xA4\x11\x1E\x8E\x88\x02\xEE\x84\xB2\x2E\xFA\x20\x8B\xAF\x10\x47\x23\x38\xF7\x57\x9F\x70\xD9\x04\xD3\xB2\xF8\x45\x6A\x13\xE1\xD1\x88\x6C\xDE\x9F\x19\x80\xCC\xB9\xA8\x7C\x7B\x51\x45\x33\xC9\xFA\x68\x22\xC6\xFB\xE7\x02\xF9\xCE\xA4\x89\x29\x63\x5F\xEF\x88\xD9\x3A\xA2\x99\x3E\x45\x65\x74\xBC\xAA\x03\xE7\x55\x1D\x35\xEC\x18\x32\x63\x82\xB2\x31\x2C\x23\x37\xB4\x4F\x5E\x6D\x31\x48\x1C\x61\x6B\x03\xE1\xFC\xF9\xC7\x7B\xD8\xDD\x6C\xF6\xBB\x1E\xEF\xA2\xA4\x39\x5B\x97\x9A\x37\x88\xF7\x82\x92\x53\x82\x58\x99\xBE\x34\x48\x7A\xE9\x5F\x1A\x28\x8C\x0A\x7B\x6D\x48\x4D\xD6\xDC\xC8\x45\xF4\x97\x21\x7F\x14\x1B\x71\xA6\x86\xF0\x9F\x0B\x9C\x98\xA0\x8C\x2A\x23\xD2\x0D\x90\x96\xAE\x8C\xE5\x21\xC6\x0C\x43\x09\x38\xC8\x87\xDE\x91\x88\x32\x84\x8C\x0B\x3B\x45\xA4\xA3\xA1\x1A\x50\x65\x08\x31\xCE\x39\xE6\x84\xED\x46\x94\x21\x29\xDC\x10\xEC\x09\x3E\xCD\x3D\xCD\x89\xDD\xA4\x86\xB4\x01\xFC\xB4\xE9\x84\x04\x1B\x3D\x95\x36\x64\x52\x26\xDA\x5D\x52\xD1\xE5\x2E\x29\xDA\xE6\x6D\x2E\xA9\xCE\xBD\x04\x89\xFE\xC1\xC2\x17\x13\x71\x36\xEA\xC8\xD5\x51\x53\xE7\x5C\xE6\x9E\xD9\x78\x74\x4A\xA3\x6A\x77\xEB\x07\xFA\xCF\xE7\x36\x9D\x43\xCC\xF0\xB9\x25\x35\x96\x92\x54\x87\x1E\x00\xF9\xD0\x85\x2A\x7E\xB3\x7D\xF0\x69\xF3\x4A\x72\x62\x7F\x1B\x9D\x17\x14\xCE\x37\xEE\x22\x00\xB0\x15\x1C\x5B\x9D\xB9\xFD\xDE\x1F\x35\xDF\x61\x0B\x78\x55\xA9\xB9\x74\xE9\xD2\xA5\xE8\xD8\xB3\x59\x5F\x86\x02\xB0\xA2\x5E\x4A\x64\x6D\x14\x44\x53\x29\x91\xA3\x2B\x4E\x89\x4C\x41\x5D\x3D\x41\xA0\x31\xC6\x4B\xA3\xEC\xC1\xCF\x6C\xCE\x20\x84\x4F\x56\x6A\x90\x65\x4E\x05\x58\xC4\xD7\x0B\x42\x7B\x61\x64\x5D\x0A\x9C\x59\x5D\x6A\xC8\x91\x38\xE5\x36\xF8\xF9\x99\xAB\xFD\x3E\xE3\xC3\xEF\x4D\xF9\xF0\x5B\x4F\x7C\x01\xC9\x89\x51\x25\x40\x1F\xCD\xFD\xAE\xAD\x4B\x80\xBE\x25\x27\x1B\x06\x84\xD6\x7D\x42\x3C\x9B\x39\xA0\xDB\xAD\x1B\xF6\xB7\x6E\x38\xBD\x75\x57\x58\x1A\xC8\x6D\x9D\xEA\xD0\x6A\x08\xAD\x23\x08\x02\x83\x29\xB5\xDB\xB8\xC4\xDE\xFD\x53\x74\xB0\x39\x59\xBF\xD9\xA5\x83\xC4\x9B\x68\xC8\x98\x8F\x10\x36\x63\x0C\x29\xA7\x6D\x5D\x60\xC1\x82\xA1\x34\xEB\x75\x99\x30\x43\x93\xD5\xE6\xAE\xBA\xCC\xF1\x95\xCF\x28\xC4\xDA\x3F\x55\xFC\x14\xA1\xD1\xC0\xC5\x40\x48\x10\x5C\xA8\x90\xCA\x4B\xB0\x90\x9D\x1E\x6F\x25\xC3\xA7\x57\x64\xC2\x7A\xFE\x0F\xE7\xE2\xCB\xB0\xEB\xD1\x0D\x9A\x0A\x1D\x92\x7E\xEB\xC4\xA8\x92\x30\x9C\x57\x64\x91\xDA\x0C\xD9\x4E\x2A\x1B\xDC\x91\x2E\x04\xC0\x41\xDC\x75\xD7\x14\x0C\xAC\x24\x15\x94\xA8\x61\xC0\x51\x7D\xE4\x15\xAF\xA9\x1A\x60\xF1\x13\xAC\x46\xA0\xEE\x09\x8E\x14\xF6\x23\x08\x64\xCF\x1C\x24\x06\x3B\x84\xC4\x40\x83\x28\x53\x18\x80\x80\x01\xC5\xF7\x0C\xE6\x42\x82\xDB\x58\x48\x0C\x1A\x48\x0C\x18\x12\x83\x06\x12\xAE\xBB\xB6\x74\xA2\x66\x9D\x9A\x8D\x6E\x4C\x58\x03\x7C\xB6\x2E\x73\xC4\x4A\xC4\x1F\x42\x0B\x44\x09\xC4\x09\xBE\xCE\x3D\x10\x84\xFA\x4D\x59\x93\xE9\x0A\x7C\x57\x5C\xD5\x43\x4F\x59\x71\xF5\x8C\x15\x57\x9F\x1C\x95\x7A\xC6\x8A\xCB\x4F\xFB\x56\x5C\x3D\x63\xC5\x9D\x6D\x05\xDC\xAA\x67\xC5\x75\xAD\xFA\x56\x5C\x7A\xDA\x54\xF5\xD0\x4D\xDE\xB6\x67\xB0\xF2\x68\x3E\x17\x19\x72\xD3\xAF\x3C\x2A\xF8\xE8\x52\xED\x95\x7C\x4E\xED\x95\xDC\xD5\x5E\x09\xA7\x6A\xAF\x84\x9D\x80\x98\x00\x42\x27\x95\x66\x73\xDC\x3A\xDA\x34\xEF\x9F\x15\xD2\x9F\xC8\x75\xF3\xC9\x77\xDE\xB3\xE1\xCC\x26\x6C\x6F\x47\xEA\xA3\xC0\xBB\xBD\x0C\xCC\x13\xFC\xB2\x93\x23\x8B\x79\x56\x56\xC3\x8F\xAB\x80\x65\x0E\xF0\xB7\xCA\xB0\x43\x82\x02\x2E\xE6\x28\xB7\x38\x07\x9A\xDC\xAA\x22\x10\x5B\xEB\x10\x9E\xDB\xA4\x7A\xE6\x10\xF1\xDF\xC8\xCB\x89\x3B\xB1\x97\x4C\x6A\xE4\xA3\x04\x28\xF0\x90\xED\x7B\xDA\x1D\x22\x52\xEB\x0B\xBE\x0C\x27\x72\x1D\x01\xF9\x9D\x46\x1C\x45\x0E\xE5\xF1\x29\x0E\x05\xA9\xE1\xC0\x17\x9E\xF0\xB4\xF9\xA3\x69\x6E\xD5\x47\x1A\xFD\x0F\xBD\xA7\x06\x4F\x87\xB8\xB3\xF2\x8D\x2A\x7E\x89\xB5\xE4\x28\x5C\x0C\x75\x17\x90\x01\x01\x92\x04\x86\x08\x01\x19\x5B\x40\xD2\xF3\x32\xE8\x03\x32\xA2\xD8\x46\x4B\xDD\xA5\x86\x70\xAB\x4C\x3A\x4B\x8F\x79\xE9\xC1\x16\xC7\xBD\x05\x5B\x55\x4A\x4B\x4F\x78\xE9\x29\xA4\xFC\x77\x00\x64\x66\x88\x3B\xB0\x8C\x18\x96\x4F\xBB\x43\x0A\x98\x16\x07\x65\x0C\x0A\x42\x24\x0C\x8A\xC8\x8A\xB3\x2B\x29\x93\xD5\x65\x80\xC3\x60\x47\x34\x16\x72\xF2\x01\xC4\x6C\x39\x54\xF8\x36\xDE\x82\x64\x1D\xD2\x73\x9B\x94\xE5\x92\x73\x67\x60\xBF\xFA\x9C\xDC\x16\x0F\x8D\xBF\x63\x3C\x64\xF0\x3D\x83\xA8\x48\xFB\xFF\x8C\xA0\x22\xD1\x55\x52\x5A\xDB\x42\x2D\xF8\x55\xB4\x0E\xFE\xD6\xB9\x6F\x91\xB1\xFE\xCF\xFF\x1F\x7B\x6F\x03\x6C\xD9\x55\x9D\x07\xEE\xBF\xF3\x77\xCF\x39\xEF\x9D\xD7\xFD\x24\x1A\x5E\x53\xAC\x73\x4A\x53\xF5\x94\x52\x17\x9D\x1A\xA5\x5B\xA3\x50\x43\xEF\x1E\x77\xBF\x6E\x49\xB4\x94\x4C\x79\x8A\x54\x39\x55\xAA\x29\x4D\x0D\x9C\xD7\xC6\xBC\xD6\xA3\x8B\xAA\x91\xFA\x3E\xE8\x06\x2B\x8E\x89\x35\x36\xD8\xD8\x63\x3B\x72\xE2\x49\x63\x1B\xD9\x8C\xB1\x63\x0F\xC1\x58\x76\xA8\x98\x19\xE3\x58\x06\xE1\x60\x2C\x83\x20\xB6\x8B\xC1\x38\x51\x26\x38\xC6\xC6\x43\x4F\xAD\x9F\x7D\x7E\xEE\xBD\xEF\x47\x20\x30\x60\x41\xA9\xDF\xBD\xF7\xEC\xB3\x7F\xD6\x5E\x7B\xED\xB5\xD7\x5E\xEB\x5B\x91\xCB\xA6\xFA\x8A\x9D\x5A\xE4\x55\x2D\xBC\xFA\x23\x4F\xF5\x8C\xE7\xFF\xC5\x53\xE4\x6A\x2A\x63\xAF\x90\x31\x7F\xF6\x29\x89\x42\xF4\x6F\xDA\xD9\xA9\xCE\x53\x80\x67\x28\xAE\x6A\x87\x5C\x4F\x89\xA8\x2A\xE4\x56\xBE\xC2\x8E\x7C\x7A\x09\x22\xBA\x8B\xB1\x6B\x4D\xEC\xD3\xCB\x8D\x5D\x6B\x22\xEF\xF8\xD7\x98\x7F\x75\xF2\xAB\x19\xFD\x6A\xF0\xD7\xF0\x35\xE2\x35\xA0\x36\x5A\xBA\x0E\xB3\x9C\x31\x9B\x1C\x1C\x2F\x37\xC9\x66\x13\x6D\x37\x29\xDF\x51\x67\xD5\x5B\xAF\x4A\x8A\x9B\xD4\x4F\xC1\x54\x6F\xBE\x4A\x17\xBE\x62\xBD\xA5\x13\x98\xD8\x43\xCE\x95\x7C\xA3\x52\x3B\x60\x28\x30\x0B\x29\x4C\xAA\x9F\x96\x9B\x22\x87\x0D\xE4\xE7\x83\x92\x0B\x19\xA4\x5C\x77\xA9\xE6\x6F\x20\x67\x96\x64\xFB\x77\x28\xF4\x51\x53\x0F\xDE\x84\x2F\xD1\x4D\x6B\xC4\xDD\x32\xF8\xDF\xDD\x6B\xF5\x92\xD7\xF5\xB2\x3D\xE5\x75\xED\xA0\xAC\x23\x58\x66\xB0\x17\xF6\x3B\x97\x45\x53\xC9\xA2\xA9\xC0\x3D\x7E\x05\x8A\x37\x5F\xAF\x5D\x0E\x15\x54\xFC\x39\x62\x0A\x20\x73\x83\x82\x65\x48\xB6\x69\x80\x16\x1C\xBE\x41\x85\xEA\xEA\xB4\xAE\x57\xBC\xAA\x23\x1A\xE1\xCA\x69\x3C\xD1\x2C\x5F\x6D\x56\xC8\x95\x1C\x4B\xFC\xB7\xE2\x19\xDC\xC4\x10\xFF\x1D\xA3\xF0\xDD\x43\xFD\xEF\x14\xCA\xBC\x22\x75\xAD\x40\x05\x87\xA4\x1B\x10\x79\xD3\x36\x11\x64\x48\x22\x4A\x4D\xDC\x2C\xC3\xD2\x86\xD0\x2B\x93\x04\x8C\xB5\x9B\x27\x16\x6A\x04\xC3\x99\xD1\xB8\x00\x5C\x3F\x29\x19\x4E\x0A\x4E\x08\x12\x3D\x4C\x88\x02\xDB\x36\x4A\x26\x64\xC1\x15\x30\xB8\xFC\xE9\xAF\x0D\x5F\x7F\xBD\xB9\x9A\x78\x9A\x19\x3A\x10\x29\x63\xE7\xF0\x64\xB3\x8E\x3A\x2E\x9E\xEC\xC1\xC5\xD9\x98\x8B\x27\x44\x34\xAF\x21\xDA\xAE\x17\xB2\xA9\x9E\x67\xD3\xDC\x1B\xFC\xEF\x5B\x86\x4D\xD3\x85\x6C\xAA\x20\x1F\x2C\xEB\x39\xF7\x01\xCF\xF7\x83\x79\xCF\xCC\x73\x45\x50\xAD\x1F\xCE\x93\x1E\x48\x97\x7C\x3C\x2F\xF9\xE2\x79\x59\x50\xA7\x82\x14\x72\xEE\x96\x57\x1B\x94\x0B\x2B\xFF\x4D\x67\xF5\x30\xFA\xEE\xF8\x66\x63\x87\x9E\x46\x7C\xFA\x78\x1C\x77\x87\xC6\x91\xA7\xB7\x1A\xAC\x82\xDF\x78\x6A\xAC\x6C\xC8\xCF\xBF\x3B\xF3\x33\x7B\xA7\x28\x30\xD5\x77\x63\xE3\x78\xE4\xD4\xA0\x91\x7E\xFA\x7C\xA9\xC1\x5D\xA7\xB8\xA4\x08\x0C\x03\x07\x47\x7C\xA9\xE0\x55\xF5\x08\x4B\x5D\xFA\x81\xDF\x25\x8F\x2C\xBD\xED\x1F\xDA\x6A\xC3\x4F\x58\x9D\x01\x9A\x0E\x73\x9E\xB0\x8F\xA2\x99\x06\x87\x2F\xF5\x3F\xE1\x29\x4B\x73\x13\xA5\xC3\x66\x8B\xA8\xBB\x7B\x03\xEB\xBF\xF0\x94\xD8\xE6\xEC\xAC\x23\xE2\x1F\x3D\x45\xD4\x0E\x6E\x43\x6F\xFB\xD8\x73\x77\x44\xEC\xAA\xAF\xA4\xFA\xD5\xB9\xEA\x07\x8E\x88\x5F\x55\x0B\x20\x2D\xDC\x32\xDF\x02\x7C\x35\x2D\x78\x5D\x47\xD8\x4C\xB8\xD3\x80\x28\x7F\x73\xAC\x8F\x04\x46\xDA\xD9\x49\x3B\x4F\x51\xD0\xCC\xAB\x8D\xF3\xFA\x32\x5D\x35\xEC\xE8\xBB\x39\x9D\xA7\x66\xE5\x6B\x8A\xEA\x15\x4A\xA0\x26\x06\x77\xB1\x4E\x28\x4B\x5B\x93\xA2\xDA\x95\x51\x06\x4B\xFC\x75\x42\x8E\x7E\x75\x0E\xC6\xEF\xEC\xB8\x16\x52\xCE\x6E\xEF\x2E\xD5\xA5\xFC\x84\x9F\x97\xBC\x42\xC1\x02\xAA\xAE\x40\xD5\x2B\xB0\x5C\x1F\x22\xCB\xA8\xA3\x48\x6B\x2A\x56\x1F\x86\x15\xEC\x46\xBD\x6A\x4F\xC1\x61\x72\x31\x7F\x3B\x7B\xE4\xE1\x23\x0B\x31\x2E\xFB\x55\x14\x9B\xAB\xB8\xBC\xF1\x4D\xAF\xEA\x9B\xA0\xA8\x6F\x86\xA5\xFA\x45\x10\xD5\x47\xA8\xCA\x9B\x70\xDD\xDF\x04\xEE\xDE\x52\xC1\xCD\xB5\x85\x17\xD5\x87\xE1\x08\x57\x8A\x4A\xDE\x8B\xB1\xEE\x10\x24\x03\x2F\xE6\x3F\x24\x52\x0E\x7B\xEA\x44\xD7\x44\x0E\x37\x43\xD6\xD6\x37\xC3\x8B\xF0\xCF\x8B\xE0\x08\x12\xE4\x08\xDC\x04\x4E\x44\x0A\xE5\x0F\x3E\x44\x86\x76\x0A\x14\xE5\x61\x58\x58\xA9\x0F\x2F\x18\x46\xCC\xC3\x48\x87\xC3\x40\x8D\x50\x68\x50\x1F\x86\xEA\x2B\x19\x7E\x5E\xDF\x0C\xE5\xD7\x7F\xF8\xA3\x99\xB3\x50\x1D\x78\xC8\xDD\x78\x9F\x0B\x9D\x72\xDC\x61\x92\xB6\xAE\x60\x05\x1F\xAC\xC0\x21\x94\xAA\x87\xC8\x90\x4F\x60\x0D\x6D\x8D\x9B\x8D\x43\x81\xAF\x59\xD2\x62\xD7\xD2\x70\x24\x7D\x32\x8E\x92\xA9\xB9\xE2\xA6\xFA\x4A\x97\x89\xEB\xD1\x1D\xD3\xDD\x3B\xD2\x19\x39\xC8\x3E\xC5\x62\x0F\x65\xE6\x2F\x7D\x6C\xEE\x50\x67\x2E\x7B\xDD\x0E\xFD\x04\x49\x48\xE9\x6E\xD9\x18\xAF\xB7\x09\x98\x9F\x3C\x21\xCD\x36\x99\xD3\xA6\x6D\x33\x79\xBC\xC6\x7D\x16\x15\x89\xC7\x71\x85\x90\x65\x6D\xC9\x92\x6D\xE3\x17\x71\x97\x5E\xF2\x2F\xDB\xC2\xBD\xB2\x59\xA6\xD4\xB8\xB0\xE4\xED\x65\xFF\x57\x37\x6E\xDC\xD0\x5B\x6D\x53\xAD\x1B\x85\xFB\x2F\xE1\xB3\x2F\x3D\x0E\xC5\x95\x66\xE5\x3A\x4C\x60\x05\xF2\x9D\xEB\x17\x37\x9B\x43\x60\x2E\xE2\x32\x3E\x4C\x89\xA1\x97\x18\x5E\x6B\x89\x7E\x24\x09\x5B\xAF\x92\x08\x77\xFE\xD1\x1D\xCD\xF7\x8A\x55\x5B\xDF\x44\x5B\xD5\x2A\xB9\xCF\x34\x37\xB7\x7E\x67\x47\x43\x0A\xD1\xA6\x37\xDB\x10\xF9\x1D\x68\x9B\x17\x41\x7A\xBE\x39\xB2\xD6\xBC\x38\x38\xA4\x29\xB8\xB9\xAD\x5F\x02\x87\xEB\x35\x38\x54\x47\x70\x53\x7D\xD4\x9E\x82\xA3\xCD\x4D\xF0\x12\x58\xA3\xCE\xAF\x81\x94\xAD\x5F\x0A\x6B\x60\x9B\xA3\xD0\xBD\x1B\x43\x34\x1C\x12\xE7\x99\x94\xC1\x47\x32\xF8\x75\xA3\xC8\x51\x25\x9A\x1F\x62\x24\x43\x5C\x83\x97\xD6\xA8\x43\xD1\xC6\x0E\x8A\xDB\x85\x9B\x5B\x78\x69\xDF\x54\x05\x48\x30\x58\x0E\xD5\xBD\xA8\x8E\xE0\x68\x6D\xE1\x88\x2C\x39\x05\x65\x20\x0C\x6E\x63\x87\x49\x47\xB9\xD9\xAB\xDA\xFA\x1D\xA8\x5F\x1C\xE8\x74\x94\xE9\xF4\x52\xC8\xEA\x35\x7B\x0A\x5E\x5A\xDF\x04\x37\x33\x22\x33\x1C\x45\x0A\xED\x68\x58\x83\x17\x23\x8D\x5E\xB2\xD6\xBC\x54\x1C\xD3\x8E\xC2\x4B\x77\xEB\xC6\x8B\x91\xA8\xF5\x8B\x61\xCD\xEF\xEC\x4C\xDB\x7A\x8D\xEB\x68\x49\x69\xC2\x27\x16\x8E\xD6\x2F\x45\xA2\xC2\x4B\x88\x87\x4B\xE4\xF9\x12\x96\x50\xAD\x59\x22\x6F\xFE\x3C\x9F\x77\x70\x64\x99\x8F\x5D\xEE\xAE\x64\xA2\x65\xFC\xA1\xDB\x2C\xDD\xE2\xCD\xD2\x7D\x15\x1B\xCD\x8F\x2D\x93\x4F\x3D\x28\xFF\x51\xBA\xA0\x39\x5E\x6B\xFF\xCC\xC7\xC8\x72\x4A\xA9\xA6\x35\x2B\xBC\xC8\x12\x0E\x77\x0A\xF6\xF2\x04\x75\xBE\x71\x6B\x35\x2D\x03\x3F\x7D\x90\xBC\x05\xD7\x1A\x4D\x70\x31\xEB\x86\x35\x30\xE5\x1F\xBA\x97\xB3\x96\xFA\x8F\xE8\xD7\x35\x91\xFF\x88\xBE\xD8\xC4\x9B\x35\xB7\xF1\xD8\xBF\xFB\x6A\xDA\xE0\xD7\x37\xBD\x79\x43\x9D\x50\xA8\x4F\xE2\xCD\x36\xFF\x48\x8E\x5E\x71\x5B\x1B\xBF\x4A\x62\x38\x66\x35\x8B\x1A\x8A\xC9\x17\x8C\x86\xC7\x49\xC1\x5F\xD7\xA4\xA0\xCF\x37\x6A\xAD\x76\x90\x82\xBE\x58\x6B\x50\xB8\x03\x00\xC5\xD9\xBA\x3A\x66\xF5\xD5\xFA\xF7\xA3\xCE\x93\xFB\x7F\x6E\xF1\x94\x4F\x5D\x7E\xCF\x95\xB6\xB1\xAF\x6B\x14\xD8\xF3\x65\x44\x8E\xB2\xF6\xE2\x59\x72\x04\xD6\xFE\x7D\x57\xDA\x46\xBD\xAE\xC1\xB7\x27\x6D\x23\x05\x62\x50\x5D\x81\xF7\xF7\x05\xCC\xC2\x02\x4F\xF4\x05\xDC\xC2\x02\xBF\xBE\x5F\x0D\xFF\x66\xBF\x1A\x3E\xDC\x17\x88\x17\x16\xF8\xB7\xFB\x35\xF1\xD4\x7E\x35\x7C\x7C\xBF\x3E\x7C\x62\xBF\x26\x3E\xB9\x5F\x0D\x7F\xB8\x5F\x1F\x3E\xB7\x5F\x81\xCF\xEF\xD7\x87\xFF\x77\xBF\x1A\xFE\xCB\x7E\x9D\xFC\xE2\x7E\x4D\x7C\x79\xBF\x26\xDE\x3C\xDD\xA7\x89\x47\xA6\xFB\xD4\xF0\x68\x5F\x20\x5D\x58\xE0\xED\xFB\x35\xF1\x83\xD3\x7D\x46\xF1\x23\xFB\xD5\xF0\xA3\xFB\xD5\xF0\xD8\x7E\x35\xBC\x6B\xBF\x51\xFC\xEC\x7E\x74\xF8\xF9\xFD\x9A\xF8\xE5\xFD\x6A\x78\xDF\x7E\xA3\xF8\xC0\x7E\x4D\x7C\xDB\x3E\x2D\x9C\xDD\xA7\x81\x7B\xF6\x79\xFF\xEF\xEF\xF3\xFC\x7F\xD8\xA7\x7F\xAF\xDE\xA7\xFD\xEF\xD8\xE7\xFD\xFF\x71\x9F\xF6\x1F\xD8\xA7\xFE\x76\x9F\xF7\x5F\xB7\x4F\xFB\xAF\xDF\xA7\xFE\xED\x7D\xDE\xBF\xBC\xF7\xFB\x24\xF5\xFD\xA4\x3D\xCF\x67\xE7\x8B\x64\x89\xFA\x88\xA6\x6C\xFD\x60\x37\x82\x6E\xC2\x1B\xC9\x46\xA9\x73\xAF\x38\xDC\xCA\x80\xF1\xC7\xCF\x36\x66\x8D\xDC\x83\xF1\x50\x8D\x9B\x22\x85\xA6\x70\x44\xA8\x22\xA4\x26\xB3\xDC\x1D\x95\x27\x0A\x54\xF5\x51\xD2\x5B\xE9\xE3\x53\xFD\xC7\xB9\x5F\x97\x94\x7F\xE6\xE3\xBD\x9E\x9B\xA9\x50\xC9\xBB\x06\xF9\x7A\xD9\xFC\xA3\x40\xDF\x6A\xD4\x49\xDC\x64\x7D\xDA\x82\xF6\x69\x70\xC8\x23\xA7\xEE\x75\x93\x76\xD1\x2F\x7A\xDD\xB8\x46\xFB\xC9\xDD\x62\x8D\xD5\xDB\x0C\xBD\x84\xEA\x27\x5F\x16\xBF\xFE\xDE\x92\xCC\x6D\xAD\x7F\xFD\x56\xE3\xB8\x5F\xB5\xED\x2C\xDA\xE0\x38\xB1\x28\xEE\x90\x14\xFC\x68\x79\xCB\x6F\x3B\x5D\xB4\x1F\xEE\x0F\x19\x6D\xA6\x21\xE8\x86\x7C\xB9\x19\x13\x55\x92\xAC\xAA\x30\x00\x89\xE4\x38\xC0\x30\xEC\x6E\x43\x08\x7A\xBE\x22\x27\x35\xD0\xD2\x1B\xB2\xC4\xB7\x78\x34\x50\x34\x4E\xAC\xC7\x5F\x6E\xFD\xFF\x74\x6F\x89\xBD\x5E\xC5\xFF\xEE\x5E\x93\xC1\x1A\x1E\x6C\xFF\xFA\x70\xD8\x66\x34\x6C\x2C\x33\xA8\x93\xDC\x85\x53\x22\x03\xD8\x35\xEA\x21\x1D\x35\xC0\xAE\x55\xDF\x4F\x56\x3D\xD4\x89\x7B\xC2\x7C\x89\xA7\xB0\xF7\x16\xB3\x14\x85\x40\x18\x60\x1C\xBD\xCC\xFE\x7C\xB5\x03\x83\x67\x58\x0A\xCC\x90\x21\x15\x3A\xF7\xDF\x05\x6E\x13\xF5\xAA\x4D\xAF\x5B\xB2\x0A\xE1\x21\xD0\x75\x16\xC1\x33\xEC\x03\x90\xD2\x09\x88\x27\x37\xCA\xFD\x77\x11\xF5\x9C\xFF\xE3\x1B\x37\x6E\x24\xA8\x1C\xA2\x32\xAA\xB7\xB1\x59\x20\x38\xB3\xC6\x31\x21\xC0\xF9\xFC\x3C\xA7\x83\x91\xE9\x77\xC1\xBF\x61\xD8\x91\x1C\x22\x66\xD5\xAE\xC7\xD8\xB8\x10\xC9\x11\x6F\x38\x30\x3D\x95\xC2\xE0\x5F\x47\xA1\x0C\xDD\xBD\x77\x23\x36\x4C\x36\x50\xB2\x95\x6B\x3C\x69\x61\x8E\x97\xD9\xC3\x12\x0B\xDD\x2B\x97\xD7\x60\x37\xB1\x3F\x57\x39\x2A\x81\x06\x0D\x83\xF7\x4E\x18\x97\xFF\x91\xD1\xF1\xB4\xF3\x54\x1B\x37\xDB\x38\x21\x15\xCF\x00\x9B\x56\xB0\x0D\x8E\x2F\xC3\x2E\xD5\xB1\x9F\x48\x38\x03\xC4\x9B\xD8\xB2\xF2\xDF\x05\xD1\x26\xC4\x78\x32\x4D\x20\xDA\x24\x3B\x5A\x30\x9A\x10\xD9\xD3\x8E\xEC\x69\x20\x7B\x34\x24\x7B\x84\x64\xB7\x04\xCA\x6D\xCF\xAF\x35\x56\xC8\x6E\x17\x91\x3D\x66\xB2\xA7\x10\x07\xB2\x53\x6D\x13\x5C\x4E\xA9\x88\x0A\xA1\xB7\x4C\x40\x63\x3B\x57\x88\x5D\x99\x01\x07\x83\x9A\xB9\x96\xD8\x30\x1A\x4D\xAD\x7B\x67\x04\x1D\xBC\xED\x05\xE1\xB5\x9B\x04\xC2\xF2\x61\x0A\x8F\x58\xFA\xB1\x8E\xCC\x2A\x2C\xF2\x8E\xB6\x46\x68\x6B\x99\xB6\x8E\x7D\x5A\xF4\xE5\xDA\xF9\x49\xDD\xB9\x25\x6A\x3F\xD9\xA0\x6B\x3D\x2B\xBD\xE4\x6E\xC7\xC1\x87\x45\x88\x12\x71\xC2\x50\xF2\x15\x3C\x53\x9A\x7C\x41\x8B\x29\x5D\xE0\xD9\x6E\xBC\xB1\x57\xD2\x0C\x0C\x4A\x39\x49\xB0\xED\xBF\xAC\xB7\xB0\x33\xE2\xCD\x4E\xB3\x4A\xE1\xA2\x11\xC4\x90\x0C\xA8\x4E\x97\x9F\xB1\xD0\x9C\x3B\xCC\x27\xFA\x88\x89\xEF\x4E\x88\xFB\x10\x32\x2F\xAE\x03\x92\x0C\x4E\xE8\x96\xFF\x23\x3B\xA2\xD0\x98\xFF\xC6\xDC\x67\x3B\xEE\xB3\xC2\x7D\x42\xA3\x88\x18\x9E\x12\x55\x9D\x99\x63\xBB\x99\x09\xB6\xED\x60\xB1\x52\xE4\xEB\x50\xEA\xF2\xF4\x12\x6A\x52\x44\xF1\xE5\x1C\xC8\x6F\x65\x47\x90\xDF\x74\xEE\x5F\x87\xCC\xCE\x71\xB3\x0B\x99\x3D\xE9\x5A\x4D\x90\xD9\xD3\x85\xCC\x4E\xB0\xEB\xE0\xCE\xCF\xCA\x98\x34\x87\x74\xC0\xEC\x7C\xBD\x8C\xCB\xA2\x93\x31\x6E\x3C\x8E\x9E\xF9\x93\x9E\xF9\x63\xD9\x99\x78\x1A\x52\x11\x42\x8E\x8C\x73\x14\xCC\x3D\xCB\xAC\xAB\xEC\x9E\xAF\xAB\x1F\xC2\xEF\xD5\x0F\xA2\xFC\xC8\x7F\x2C\x70\xF0\xC0\x9A\x3F\xCB\x59\x8E\xD1\x86\x64\xBA\x1A\xB7\x51\x6A\xFF\x5D\xC4\x92\xCE\x7F\xD7\x46\xD9\xED\xD1\xC2\x85\xBD\xB4\x75\x85\xCD\xFD\xA4\xE6\x6D\xA1\xB1\x38\x04\xCD\xD1\xAB\x2D\xF2\x5F\xB7\x09\x9B\x22\x92\x97\x4D\x61\x3B\xF6\xC5\x55\x12\xC4\xB5\xE1\x18\xC3\x08\x55\x8E\xF3\x6B\x8D\x11\x7A\x1A\xA2\x27\x4E\x3C\xD3\xB3\x31\x04\xCA\xC0\xFB\x58\x42\x1D\x24\xB2\xC5\x3D\xD9\x12\xA6\x57\xC4\xF4\x92\xD9\x6F\x51\x66\xA2\xE2\xD3\x36\x0A\x09\x47\xC2\x18\xE9\xF7\x41\xD3\xED\x59\x33\x04\x92\x0B\x72\xDC\x91\xED\x40\x95\x10\x3A\x35\x8E\x6F\x8A\x0D\x09\x76\xDA\xC4\xF3\xB0\x9D\x58\x9A\xD9\x77\xC8\x54\xDB\xB0\x5B\xCC\x72\x29\xEF\x2E\xCB\x0C\x18\x29\x1A\xCB\x32\x32\x5B\x14\x76\x42\xBB\x79\x2F\x85\x49\x82\xC1\xDD\xFD\x81\xAE\x23\x24\x60\xA4\x33\xB8\x9B\xDA\x30\x1F\x1A\xE9\x89\xCC\xDE\x44\x14\xC0\x87\xDB\x5F\x24\xA4\x8C\x66\x48\xD9\xB3\x1F\x39\x8F\x59\x26\xA4\xEB\x09\x29\xBB\x9F\x1E\xD1\x13\xDF\x9A\xDF\xFC\x96\x24\x30\xA4\xFA\x61\xE2\xB9\x19\x46\xE4\x1F\x1F\xD7\xA2\x36\xF5\x2C\x28\x4E\x08\x2E\x64\x75\xD0\x97\xD9\x28\x8A\x5D\xD7\x9B\x61\x0C\xE7\xD7\x6A\xC3\xE3\x26\x14\x03\x2A\xAD\x99\x6D\xE5\xFA\x68\xBE\x34\xD2\x85\x9C\x92\x51\x17\x76\x77\x37\xF1\x5A\x13\x9D\x91\x2D\x98\xB0\x89\x7F\x80\x5D\xD7\xC9\xBB\xB3\x1F\x87\x9F\x92\xF9\xC5\x9D\x5F\x1B\x68\xA6\x3F\x50\xEA\xC9\xD4\xA2\x60\x7C\x23\x81\xB2\xF8\x87\xDA\xDA\xD1\xF5\x42\xC4\x2E\xD7\x23\xD6\xD1\x10\x6D\x36\xCA\x9B\x37\x34\xF1\x52\x9C\xA6\x4A\x1B\x67\x73\x7A\xA9\xA1\x5D\x23\x26\x4C\xDB\x26\xB9\x50\xA2\x7A\x1D\xB3\x5E\x91\xB0\x58\xA5\x52\x09\xC1\xD6\x72\x1E\x2B\x17\x8A\xA7\xE7\x38\x87\x01\xBF\xA5\x18\x15\x8E\x5E\xA6\x52\x8A\x4B\xC5\x5D\xA5\x8E\x4B\x89\x91\x0B\xDF\x53\xF2\x0B\x24\xE4\xD0\xB2\x9C\xB3\x67\x8B\x0B\x9D\xA0\x80\x02\x05\xE9\x85\x32\xEE\x5B\x48\xFB\x7E\xD5\x29\xB6\x91\xD6\x5D\x52\xB4\xAE\xD5\x84\x9D\x0E\x63\xE0\x8C\xE7\x35\x47\x2D\x61\x15\x69\xE8\x4C\x0C\xC9\x05\x9A\xA7\xA4\x6F\xB1\x03\x03\x00\xC5\xBD\x4B\xBA\x17\x04\x5C\x2F\xE9\xC7\x41\xE5\x92\x51\xFD\x7D\x71\x97\x43\x82\xB3\x9D\x32\x7D\xD5\x85\x32\xE2\x07\x29\xA4\x3C\x66\xEC\x79\x23\xB4\x8A\x07\x8F\x65\xA0\x3D\xF9\xA2\x45\xE4\xF3\x5F\x52\x77\xB1\x03\x7B\x5A\xAB\x7E\xF8\xF1\x68\xF8\x0A\xE2\x73\x9C\x87\x93\xBB\x37\xAE\x7F\x3C\x7C\x35\x18\x7E\x37\x39\x49\xF7\xC2\x78\xF8\x82\xEB\xA0\x78\xF8\x5D\xFD\x7D\x71\x1A\x7E\x8C\x5B\x52\xD1\x36\x19\x1E\x49\x22\x9F\xD6\x13\xBA\xA0\xC9\x88\x79\xB8\x89\x09\x76\x9E\x3C\x9A\x54\xDB\x24\xDE\xB5\x5D\xD5\xD8\x3E\x93\x55\xE1\x4C\x13\xA2\x82\x38\x3C\xE2\xA0\x68\x36\x5B\xEF\x5A\xD2\xF7\x89\x29\x72\xC8\xF0\x58\x4A\x07\xA0\x18\x26\xF8\x6C\x42\x8D\xD5\x31\xA8\x3A\x2B\x54\x4E\x34\xF0\xE6\x3B\x83\x4F\x01\x11\xF2\xC7\x5E\x76\x8E\x61\x9D\x21\xF6\xEE\x3B\x09\x64\xA0\x25\xE4\x74\xD5\xE2\x5A\xAD\xFE\x29\x9D\x2A\xC8\xBF\xD7\xC9\x32\x30\xA7\x60\x32\x5C\x37\x1C\x04\x93\x33\xDD\x0C\xBE\x2A\xBB\xE2\x09\x83\x5A\x56\xCE\xA5\xFB\x19\x35\x81\xEF\x27\x3D\xD7\xCD\xAC\x08\x47\xEB\x0F\x5F\xEE\xA6\x0E\x8B\x87\x1F\x39\x06\x57\xE6\x70\x32\x7C\x25\xF7\xA6\x96\xBB\x39\x6A\x2E\xE3\xC6\x13\xAC\x3B\x28\xDB\xB5\xB2\xAC\xE2\x28\xC6\x14\x64\x4A\x71\x9D\xC9\xB9\x32\x82\x09\xB8\xB3\x25\xE7\xB1\x09\x93\x06\x93\x5E\x5C\x5C\x28\x83\x80\x90\x41\x16\x09\x39\xAB\x23\xF9\x51\xB3\x2C\xD2\x9C\x37\x25\xA4\x3C\xBE\x96\xD6\x8A\xD7\x9B\xEA\xC6\x92\xB2\x7B\x43\x46\x11\xE8\xE4\x37\x9D\x53\x4F\x9A\x02\xE2\x7B\x4B\x6D\x4F\x41\xC1\xF3\x8E\xDD\xAF\x13\x94\x6D\x34\xBB\xCC\x3C\x09\xB1\x00\xFE\x52\x17\x04\x58\xF5\x50\xDB\xC4\x3C\x5C\x6A\x85\xE9\x49\x67\xBC\xBA\x28\x38\x3A\xFF\x04\xDD\x2A\xA5\xFC\x87\x26\xF8\xEC\x5A\x3D\x91\xC6\x85\x3B\xB0\x07\x21\x7D\x4F\xD1\x92\x90\x09\x2C\xF0\x12\x0E\xE0\x2C\x80\xF6\x24\x99\xD1\xA2\xA3\x47\x31\x9C\xD1\x30\x22\x73\x0A\x72\x9A\xD3\x02\x4C\xF5\x18\x31\x52\x4C\xB9\x24\x98\x4F\xC3\x8F\x1C\x88\xA0\x91\xE1\xF1\x14\x12\xE3\xF6\x1A\x97\x8E\x9B\x8B\x36\x41\x43\xB1\x79\xA1\xAB\xE7\xC7\xC9\x53\xA0\x20\xDE\xC7\x92\xF8\x89\xEA\x92\x07\x5C\x11\x3E\xA1\x69\x24\x73\xBC\x3D\x45\xF3\x57\x33\x0F\x12\x39\x93\x21\x41\x2F\x74\xE4\x9C\xD0\xA3\x01\x41\xCF\x75\xE4\x3C\x4F\xE4\x8C\x58\x7D\x1D\x90\x13\x69\x87\xFF\xFB\x63\xAB\xDD\x94\x21\xCE\xE3\x60\x02\x51\x4D\xC2\x27\x93\x94\x17\x49\x36\x94\x9A\x14\xFD\xA3\x99\x62\x26\xF0\x76\xC6\xAF\xC5\x10\x7A\xA6\x59\xEF\x44\x7A\xD1\xE4\x51\x03\x89\x37\x5D\x20\x98\xB0\x56\x28\x66\xA8\x18\x05\x62\xE9\x3C\xF0\xA9\xEE\x7E\xE4\x3C\xCF\x09\x50\xCD\x9A\x9F\xCA\x2B\xA6\xCE\x72\x48\x39\x84\xD9\x72\x27\xA8\x62\xC3\x15\x5B\x2A\x1C\x32\x45\x27\xD2\xCF\x73\x12\x40\xC3\xCD\x75\x15\x8A\x1C\x1B\x92\x40\x8A\x9A\x76\xA6\x67\x54\x79\xE6\x6D\xCB\x01\x4A\xBC\x0C\xA5\x03\x17\xCA\xD0\xAE\x2C\xB5\xD0\xB5\x84\x7B\xD1\x35\xBF\x9C\x0B\x09\xC1\x86\x72\xC3\x6E\xDA\xD0\xF6\xF2\xA0\x8F\x76\xD0\x47\xC3\x7D\x4C\xB8\x9C\x6D\x97\x45\xDD\x52\xA1\x78\x46\x6E\x0F\x39\x64\xF9\x8F\x27\x3A\x9E\xE2\xB1\x6F\x4E\xCD\xA0\x9B\xA5\xA5\x38\x8A\x94\x36\xD6\xE5\x74\xC2\x24\x05\x82\xBA\xE2\xB8\x89\xE8\x42\x29\x67\x08\x4A\x39\x40\xD3\xE2\xF5\x56\xD0\x35\xA2\x90\x43\x9E\xB4\x29\xD7\x93\x8E\x6A\x33\xE0\xF8\x75\xC3\x3B\x91\xE3\x59\xE5\xF3\x6E\x18\x84\xEB\x5A\x90\x92\xA1\x05\x46\xF2\xBF\x10\x54\x5D\xCA\x5E\x34\x3C\xD4\x70\x55\x11\xD3\x23\xBE\x40\xF1\x35\xD8\x10\xF9\x06\xE1\xFA\x91\x93\xB2\x0D\xF6\xA4\xBE\x49\xDE\x71\x2D\x70\xEA\x62\xC2\xAB\xE7\x97\xD3\x70\xF8\xB3\xD8\xB2\xEE\xFB\x65\x07\x3B\xAE\x05\xC3\xBD\x72\xDD\x0B\x9C\xB6\x7C\x38\x08\x2A\xE7\x46\xF5\xF7\xC5\x5D\x0E\xAE\x36\x79\x3F\x00\x87\x55\x9A\x50\x26\x12\x32\x30\xA5\x52\xEE\xB6\x43\x4A\x99\xBE\x1A\x1C\xAA\x50\x39\xD0\xD1\x2C\xA4\x23\x5D\x4E\xBA\x96\xAD\x87\x6A\x4E\x52\x76\xA5\xBE\xB1\x69\x25\x0A\x40\x81\xFB\x90\x66\xA7\xB7\xC4\xA7\x5D\xD0\x22\x89\xBF\x88\x1B\x4B\x05\x19\x91\x3C\x33\xF9\xAE\x55\x1A\x21\x99\x48\x47\x7A\x01\x48\x8C\xC0\x85\xCC\x06\xBC\x49\x81\x25\x3D\x05\xCF\xC7\xC4\xED\x6C\xD2\x4E\x7C\x7A\xB6\xA4\xB4\x3A\xE4\x1E\xA7\xF1\xB4\x41\x9E\x45\x29\x35\x5C\x1B\xB0\x75\x5C\xF0\x7D\x37\xCA\xF7\xB3\x9C\xC5\xB7\x20\x07\x52\xAA\xCB\x5C\xE2\x33\x37\x91\x3A\x12\x65\xC3\xEB\xAD\xFC\xBF\x92\x10\x67\xC5\x56\x5A\x39\x21\xF5\xC1\x91\x53\x82\xE9\x78\x93\x19\x59\x46\xEF\xC0\xF3\xB6\xBF\xBD\x0D\x13\xC4\x47\xE0\xC8\xFF\xEE\x4F\x7F\xEC\xA7\xF5\xBD\xCC\x07\xFE\xC8\xC5\xEA\x7B\xAE\x4A\x94\xC5\xF1\x06\x0F\x79\xC5\x45\x3E\x54\x9E\x30\xC7\x83\xAD\xC2\x55\xFF\x38\x94\xB9\x83\x41\xFC\xA2\x13\xE6\x76\x1C\xFC\x85\xE0\x31\xA8\x38\xBF\x37\x39\x0E\x62\x55\xE4\xB7\xEE\x8B\x8B\x6D\x43\x17\xD8\xE4\x27\xE7\xE8\x30\xC5\x41\x89\x67\xF9\x7B\x0A\x51\xEB\x75\x4B\x1E\x79\xE0\x78\xAB\xA6\x0C\xFF\xCB\xFD\x91\xFA\x8E\x50\x21\xD6\x16\x98\x2A\x04\xDD\x20\x2D\xF2\xFE\x68\xF5\xFF\x4C\xAC\x9B\x9A\x2B\xD1\x94\xB0\x84\xA9\xD4\x1D\xE6\xD4\x69\x0D\x61\x75\x6C\x12\x87\x13\x1F\x60\xBB\x48\xD3\x75\x73\x8E\x0C\x74\xED\xCB\xB5\xBA\xD8\x36\xB1\x7F\xE5\xD6\xE3\x6F\x65\x09\x0F\x84\x22\xF9\x9D\xDE\x6E\xB7\x4D\x7C\xAB\x55\x4D\x7A\xF5\xB4\xFA\xFB\x94\xFA\x2C\x81\xF4\xDA\x49\x1B\x4E\xA4\xFF\xAC\xA3\x4F\xC3\x01\xF2\x04\x19\x54\x67\xC4\x8C\xF5\x44\xB2\x35\x2B\x89\x7A\xEF\xC6\x64\x68\x4C\x86\xCE\xD7\x6C\x62\x93\x58\x88\xBB\x90\x77\x21\xDE\x0C\x62\x53\xAD\x9B\xFB\x1A\x0D\xB1\xB7\xDB\x9B\xEB\x46\xF9\x64\xCB\x5B\xE4\xEF\xEF\xFF\xBD\x71\x4C\xDC\x3A\x39\x34\xDA\xED\x76\xDD\x30\x2E\x8F\xEB\xB4\x51\x4A\x15\xCD\x1B\x03\xF7\x90\x53\xDD\xF0\xD1\x10\x7B\x2E\xC4\x76\x60\xDA\x1A\x35\x15\x7B\x0A\xD7\xD4\xBC\xD5\x42\x7A\x93\x43\xDC\x44\x44\x19\xAA\xD4\x61\x9F\xA6\xED\x52\x82\x1B\x45\xEC\x26\x5D\x60\x2A\x9E\xA5\xDD\xE5\x26\xE6\x5E\xA9\xA6\xC0\x82\x57\xDA\xA5\x48\x1B\x63\x14\xE1\x6F\x15\x5E\x5F\xF6\x5F\x44\xB6\xD8\x6A\x65\x74\x46\xA2\x56\x9D\x8F\x29\x68\xE8\xE7\x86\x03\xD5\x64\x65\x86\xAC\x76\x45\x9A\xE3\x1F\x3C\xE8\xDF\x54\x26\x45\x9C\xFB\x29\xE9\x63\x06\xB2\x7B\x71\x9B\x17\x44\xCE\xD8\x43\x0B\x31\x68\x1F\xE3\x24\x37\xCE\xEB\xAD\x35\x4A\x1F\xF6\xAB\xD3\xD6\xBF\xE4\xFC\x5A\x43\x50\x35\x0E\x15\x65\x2C\x15\xB5\xC7\x94\xBA\xAB\x64\xD3\x14\x59\x0C\x09\x93\xC8\xEB\xCB\x6D\x98\x6B\x49\x06\x64\x58\x85\x74\x3E\xE5\xBB\x24\x62\xAA\xC0\x0E\x7A\xD7\x99\xA2\x6B\x98\x18\x17\x8D\x01\x8D\x22\xC2\xC9\xA6\xBD\xA8\x38\x1F\x52\x70\x14\x48\xFB\xDB\x2E\x94\xC6\x2B\x88\x36\xC9\x72\xB6\xEF\x3B\x74\xFC\x40\xBE\x88\xC5\x17\x89\xFB\xB6\xC7\xAB\xC2\x47\x14\x67\x1D\x82\xE2\x48\xAB\xE3\x34\xC0\xA6\xFA\xF5\x6B\x14\xD2\xFE\xE0\x56\x69\xF9\x1E\x2D\xDD\x62\xD4\xA6\xC1\xD8\xD9\x84\xB2\x80\x28\x79\x68\x19\x59\x82\xC1\xCD\xEC\x76\xE0\xA9\xD6\xBF\xB1\x95\x0A\x95\xFF\xD3\xC1\x05\x5E\xB7\x80\x37\x69\x07\x1A\xAE\xDC\xB8\x5F\xB9\x7A\xB4\x72\x75\xB7\x72\x75\xBF\x72\x29\x5B\x9D\xAC\x5C\x53\x3B\x0E\xAF\x35\x90\x9D\x6D\xCA\x92\x82\xD5\x6E\xF6\x37\xF4\x96\x04\x4C\xAF\x9B\xA3\x14\xB0\xD4\xEF\x7D\xEB\xB4\xA1\xF6\x0B\xE1\x08\x6B\xD4\xF9\x19\x7E\xF9\x26\x86\xBF\xCB\x51\xDE\xBB\xF6\x55\xA5\x01\x47\xB1\xFD\x48\x3E\x87\x8B\x8E\x8D\x69\xEB\x28\x13\x5D\x8D\x13\x4A\x9A\xA1\x63\xC5\x3B\x07\xB7\x29\x97\x57\x47\xBD\x61\xF5\xC8\xF9\x82\x54\x7D\x9E\xC2\xB6\xC9\x39\x2B\x15\x45\xF6\xC5\x6D\x83\x1B\x14\xE4\x21\x6A\x90\x55\xC5\x02\xF2\x4D\xAA\x10\x8F\x7A\x31\x1B\x3C\xB9\xD2\x73\xEC\x47\x5F\x5B\x28\xCB\x88\xFA\x8B\x83\x3D\x53\x46\x79\x37\x8F\x64\x1F\xC3\xD7\x90\x38\x8C\xDE\xC0\xC6\x6D\x96\x6C\x9C\x32\x9A\x76\xA8\xFC\xF3\x91\xD1\x57\xDC\xB4\xBB\x79\xA4\x7D\xFA\x56\x54\x38\x4F\x12\x7E\x70\x72\x9D\xC2\x47\xF9\x31\xFD\x08\xC9\x75\xD9\xA3\xC3\xD5\x5D\x7A\x4C\x71\x78\x80\x57\x35\x65\x42\x53\x10\x16\x7E\x7A\x4C\x69\x22\x2C\x3D\x32\x90\x9C\x86\x47\xAE\xB7\x5C\x06\x59\xB1\xDD\xE0\x6B\xAC\xF8\x84\x39\xCA\x1B\xD2\x11\x50\x90\xDF\xA9\x6E\x06\xC2\xF9\xDB\x00\x77\xE9\x4E\x75\x13\x81\xB8\xA9\x0D\x8A\xC9\x5C\xED\x00\x2E\x18\x63\x43\x36\x55\x21\x76\x51\x1B\x09\xC6\xE2\xC4\x43\xAD\x7F\xA8\xA5\x52\x04\xBF\x52\x1B\x42\x5B\xE0\x6C\x74\x4C\x49\x3E\x0F\xA7\xBC\x32\x90\x25\xD3\x75\x73\xCB\x45\xFF\xCA\x16\x19\xAF\x49\x29\x40\xDF\xDC\x4B\x99\xA2\xEC\x76\x13\xF1\x3E\xCB\x66\x43\xA8\x27\xAC\xD5\x80\x39\x05\x14\xDD\x33\xE9\xB7\x58\x60\xF0\x9E\x5B\x5A\x39\x1C\xE1\x6A\xEF\xAE\x9A\xC8\x8A\xED\x0D\x18\x6F\xEE\x5A\x93\x46\x1C\x37\x62\xB6\x9B\x78\xD8\xC8\x7A\x68\x64\x7D\x41\x23\xEB\xDC\xC8\x6D\x83\x46\x62\x69\xC4\xEF\x84\x6A\x68\xB0\xC7\x6B\xC3\xE6\x98\xE3\xC1\xF2\x6C\xB8\x9A\x9C\xB4\x0B\xFF\x84\x92\x4C\x70\xA2\xE3\x1F\x53\xAB\x62\xF0\x5F\xE7\xD3\x86\x92\xB5\x9A\x52\xA1\xEA\x9F\x5F\x25\xE0\xB2\x30\xE3\xAE\x49\x59\x79\x20\x9F\x6B\x86\x1D\x31\x04\x0F\xCF\x2C\xA2\x71\x95\x4D\x38\x7B\x9F\xD9\x94\x63\xA8\xE4\xAB\xA3\xD4\x58\x47\x21\xAE\xBE\xBF\x8F\x78\xA6\x4C\x3B\xD5\xEF\x5C\x93\x88\x67\x83\xAF\x71\x72\xB0\x05\x1D\x32\xDC\x9B\x66\x52\x6A\xBE\x2C\x36\xEC\x9B\x90\xB2\x5F\xE2\xA4\x57\x2C\x3E\x66\xB4\xEE\x32\x07\xA9\x0E\x0C\x82\xB2\xE7\xDA\x73\x90\xF8\x55\x61\x96\xC4\xAF\xB5\x5E\x9D\x50\xF8\x69\x1D\x7F\xB3\xF8\xE9\x78\xF7\xE9\x8E\xEE\xD3\x13\x4A\xE0\xFA\x12\x06\x7C\x49\xD8\x98\x49\x35\x82\x67\xEB\x6C\x42\x97\xF9\xE4\xAB\xA7\xCF\xE2\x66\x74\xB6\xB1\x97\x50\xAA\x6C\x40\xE2\x3F\xA4\x5A\x8E\xCE\xF1\xFA\xDC\x56\x63\xD7\x3C\xE1\x65\xAF\x55\x3F\x29\x16\x08\xDE\xBE\x38\xD6\x41\x75\xE5\x09\x23\x9C\xB5\x32\x14\x43\xB3\x4B\xCA\xEB\x5A\xE5\x90\xA0\xA6\xE7\x38\x45\xF0\x1D\x33\x6A\x20\x3D\x3D\x1E\x9E\xCE\x2A\x89\xF4\x74\x3D\x3C\x5D\x9F\x7F\xEA\x9F\x54\xC1\xA7\x53\xE5\x57\x8D\x8E\xBA\x7B\xBD\x75\x9E\xF3\x57\x34\x06\x74\xCB\x97\x45\xA7\xEE\x29\xF9\x86\xEC\x4E\xB5\xEE\xA7\xCB\xE1\xB8\xA0\xFC\x1D\xAC\xD6\xDE\x43\x6A\x63\x0A\x6E\x8D\x42\x6F\x22\xDC\xDA\xB7\x6B\x24\x8A\xBB\x8B\x1C\xB3\xFB\x55\xE8\xBC\xDD\x16\xBE\x8E\x82\x04\xBA\x9D\x50\x51\x23\x56\x99\x3C\xC1\x2A\x6D\x62\xB1\x1F\x0C\xAE\xC1\xA8\xE7\xB2\x9D\x34\xA6\x42\x8D\x65\xE5\xB8\x89\xF0\x0C\xB0\xCB\x0B\x10\xF7\xEB\x8C\x07\xC3\x4A\xB3\x3B\x61\xEE\xC8\xF9\xBC\xF2\x8A\xA1\x67\xCB\x8F\x6A\x6D\xA6\xA0\xFC\xE7\x7F\x8F\x9D\x5B\xB9\x6F\xB7\x34\xE4\x94\xA1\xAB\x27\x90\x97\x85\x7C\x74\xBC\xF9\xB8\xB8\x6C\x9E\x29\x95\x3D\x25\x2B\x0F\xB4\xB4\x69\x6A\x0D\x26\x88\xA7\xFB\x6A\xCD\x4A\xF0\x7D\xC1\xC7\x43\x77\x6B\x77\xDD\xDC\x1E\x9E\xDE\x3E\xFF\xB4\x7A\xD7\x55\x1E\x51\xFE\xA7\x5A\xC7\xD8\xBB\x9D\xA7\xFB\xDE\x31\x88\xA0\xF4\x80\xBB\x9B\x12\x9A\xC0\x54\xE6\x6D\xB5\x71\x6D\x13\xF9\x8F\xA9\xD7\x35\x41\xF1\x20\xD6\xFB\x98\xBA\xB8\xE9\x8F\x5F\x6C\xD7\xCD\x6D\x82\x1A\x55\xBD\x2D\x90\xEA\x48\xA3\xBB\x8B\xEE\x94\x45\xD8\x2A\x21\x43\x21\xC1\x8E\x04\x8C\xA7\x08\xCC\x26\x4A\xC0\x37\x60\x5D\x78\xC6\x50\x60\xD6\xC0\x81\x6E\x37\xBD\x6E\xFD\x4F\x0B\x10\x0E\x6D\x89\x61\x1A\xE8\x4D\xFF\x50\x4B\xE1\xFA\xEB\xE6\x08\x9D\xB2\x6A\x0D\x1C\x56\x8B\xE7\xDE\xEA\x83\x61\xB8\x95\x02\x55\x5D\xBF\xDA\x93\xFC\x47\x5C\x60\x51\x36\x79\xD0\xDD\x1B\x1D\x20\x88\x35\x05\xF8\xC2\x77\x86\x7C\x4D\x6C\xC5\x00\x9B\x64\x7F\x41\x25\x2B\xA6\x1C\x24\x7E\xF9\xEE\x92\x91\x1A\xE9\x2C\xB6\x11\x12\x78\x39\x9E\xEA\xC8\xBB\x6D\xBA\xF3\x89\xC9\x0F\x98\x74\x17\x82\xD0\x49\x42\xF4\x75\xC8\x2B\x2E\x4A\xF1\xF7\xFE\xFE\x40\x6B\x4B\x51\xA7\x20\x6F\x77\x71\x3B\x48\x09\x4C\x11\xDC\x25\xC0\x2E\x5C\xE2\x73\xAA\xBB\x4C\xC8\x1B\x12\x68\x6B\x87\x3E\x43\xB6\xF3\x19\xE2\x71\x1C\x53\xC7\xCF\x04\xF4\x24\xE9\xA1\xC3\x1E\xDA\xAF\xBA\x87\x6E\xDC\x43\xBB\x47\x0F\x23\x16\xD8\xE6\x56\xE3\x4E\x1A\xD7\xE1\x6A\x0E\x08\x66\x9E\x6F\x82\x99\x3D\xBA\xE3\xC4\x8D\x89\xBB\x93\xBF\xDF\x18\xCA\x29\x47\x6D\x55\xFF\x82\xF6\x12\x47\xA7\xB7\x59\xC6\x20\xB6\x60\xA6\x20\xF8\xCE\x5F\xBE\x26\x50\x42\x74\x26\x3E\xC3\xA9\xF6\x6E\x27\x7D\xCD\x6D\x93\x35\x37\xA6\xAB\xCA\x7E\x4C\x59\x17\x51\xCD\x63\xCA\x76\x1D\x53\x34\x22\x71\x86\x63\x4A\x2E\x41\x16\xC6\x94\xE1\x98\xA2\x1C\x22\x89\x22\xB4\x67\x82\xED\x45\x0D\x7A\x49\xDC\x2E\x66\xB4\xC7\x4F\xD7\x6F\x25\x8E\x7D\xFC\x1A\x4D\x42\x4F\x08\xFC\xD1\xEB\x4B\x8F\x37\x93\xD3\xF0\x56\x98\x5C\xA3\x7C\xD0\x5D\x1D\x0D\xA7\xD6\x6C\x22\x22\x2B\x69\xFD\xDB\x97\x20\x92\x8E\xE4\x9F\x32\x46\xA2\x5D\x79\x65\x71\xC8\x5F\x47\x48\xB3\x07\x21\x45\x60\x57\xBF\x72\x4D\x7C\xA8\xA8\x8B\x26\x74\x51\x4C\x46\xCB\xF9\xA8\xC2\x68\x8F\x0A\xE9\x24\x2B\xDA\x85\x15\xD0\x65\x70\x3C\x4D\xE4\x86\xC1\x57\xE1\x38\x3F\x6A\xF0\xAB\xD7\x64\xB2\x41\xF6\x14\xA6\xB3\xB8\xD0\xD9\x8B\xC9\x3E\xDE\x64\x48\x96\xEC\x1A\x79\x76\x88\x42\x2C\x5E\x1F\x34\xDD\x1A\xE7\xF1\xB4\xBE\x7A\x1F\x1D\xC7\x23\xA6\x7B\x97\x17\x5A\x4E\xD7\x6C\xCD\xD5\x44\x43\x22\xA0\x0E\x04\xEC\xD7\x47\xD2\xA5\xBA\x92\xD0\x53\xA4\x42\xFE\x0E\xA3\xDD\x74\x40\xDE\x45\xD2\xCA\x9B\x83\x52\x87\xAF\xFC\x2D\xB8\xEA\x7D\xD7\xE4\x78\x7B\x3B\x1D\x17\xF8\x6C\x4F\xFE\x53\x5E\xF1\xC3\xC0\xD9\xA6\xE3\x6C\x07\x71\xE0\x6C\x76\xE4\xA0\xC1\x71\x26\x92\xA1\x77\x11\xF5\x69\x01\x67\x5B\x72\x3A\x62\x53\x38\xD1\xC7\x82\x16\xCE\x0E\xF4\xC0\xA3\xF4\x65\x52\xFA\xC6\xC2\x23\x26\xE6\x88\x03\x73\xE4\x9F\x33\xC6\x4C\xCD\x15\xDF\x29\x02\x1D\x87\xC4\x5E\x5D\x28\xD5\x69\x25\x8E\x39\x38\x40\x1E\x1B\xAB\x60\xAA\xFA\x3F\x69\xE4\xC3\x0A\xEB\x04\xE2\x3A\x92\xFD\x74\xE0\xDF\x93\x5C\x6F\x08\xCD\xB8\x13\x99\xE4\x5D\x70\xB9\x33\x98\x90\x99\x42\x75\x63\x8E\x17\x8D\x99\xEC\x1C\x04\xEF\x48\x0B\xB1\xD4\x8C\xB5\x1D\x8B\xD0\x8C\xC3\xB8\x29\x5E\x5B\x0D\x52\x62\x29\xFF\x59\xD5\xE2\xB1\x2B\xBD\xDE\xB1\x23\x73\x60\xDC\x73\x60\x7A\xBA\x7E\xE4\x3A\xB1\x60\x4A\xDC\x53\x11\x1B\xE2\x2E\x8E\x23\x0E\x64\x96\xEF\x23\x36\x8C\xE7\xD8\x30\xB0\x5D\xC7\x88\xD7\x4E\x9A\xD7\xE4\x10\xE5\x9F\x30\xD6\x50\xDC\xAF\x1F\x5C\x01\xD0\x02\xA3\x53\xB9\xBB\xEE\xDF\xF1\xD1\xDF\xF8\x64\x74\xB1\xD1\xFE\xC8\x65\xD0\x0F\xCA\x57\xFF\xAE\x1F\xFE\x95\x2F\x3C\x1C\xBE\x01\x45\x04\x2F\x2E\xF9\x60\xA3\x7D\x39\xF8\xDE\x68\xBF\x8C\x5F\x85\xAB\xEC\x6B\x9B\x28\xA0\x1F\x5B\x3F\x6D\xB7\xC4\x27\xAE\x8E\xF1\x87\xF3\xFC\xFB\xEB\x6B\x4E\x48\xA6\x3A\x2B\x49\xA3\x3A\x07\x3C\x15\x3C\x1F\x23\x6F\x38\x23\x06\x2A\x29\xF6\x54\x6F\x04\x8F\xD8\x41\x37\x02\xBB\x05\xF1\x46\xC9\xAE\x64\xB7\xDA\x14\xDC\xDF\x23\x18\x71\xAA\xA5\x54\x85\xCD\xF3\xF9\xD7\xD8\x31\x8D\x5D\xE6\xEC\xEB\xC5\xBD\x70\xA3\x74\xC3\x4A\xCC\xA0\x12\xF2\xA7\x26\x26\xCF\x3F\x17\x59\x7D\x25\x9A\x9A\x87\xC1\x20\x2D\xE3\x8E\x42\x06\x29\x64\x76\xA1\x65\x3C\xA4\xE5\xB8\xE4\x83\x8D\x41\x5A\x76\xDF\x1B\x83\xB4\x34\x0F\xB2\x68\x0B\xEE\xC3\x69\xD9\x19\xEE\xD3\xD7\x36\x19\x1B\xC8\x12\x8A\xE8\x4F\x28\x50\x1D\xFF\xBC\xBE\x9E\xE4\x7C\xB2\x98\x04\x92\x1A\xCA\x15\x80\xC5\x29\x70\x48\x7E\xB2\x41\x54\x64\x90\x30\x39\x32\xAE\x24\xC3\x4A\xB2\x1C\x32\x98\x6C\x94\x0E\x65\xAC\x4D\x21\xFE\xFB\x25\x01\x1B\xA4\xB4\x12\xD6\xD9\xD1\x04\xA7\xB5\x19\x36\x43\x49\x9C\xA7\x6D\x9D\x0F\xDA\xD1\xE3\x76\x20\x83\x7C\x0B\x6B\x36\x73\x35\xEB\xDC\x1F\xE1\x83\x42\x63\x3C\xE7\x70\x61\x2F\x09\xC3\xC7\x35\x8E\xC9\xBA\xD5\xAA\x93\x36\x05\xFD\xB7\x4C\x55\x73\x62\x46\xAF\xDB\xF7\xD6\x25\xD3\x85\xEE\x7F\x21\x7D\xEF\xDB\xA1\xFC\x87\x5E\x3F\xC8\x3D\xD2\xDB\x90\x7A\x7B\x1E\x52\xEE\xB2\x57\x1B\x97\x2E\x49\x86\xF9\x12\x8A\x77\xBC\xAD\x29\xFE\x3B\xA5\x76\xEE\xFD\x87\x80\x7F\x95\xBA\x9F\x3C\xB8\x8A\x9F\x22\xE8\x19\x4F\x99\xDB\x35\x4C\xF0\x6D\x98\x9C\x5F\xAB\xFE\xAF\xDE\x8E\xE7\x1A\xA9\x92\x71\x43\x5A\x48\xB6\xE8\x25\x9E\x91\x7B\x79\x7A\x28\x11\x03\x4F\x4C\x3F\x9B\x32\x3D\x0D\x7B\x14\x84\x23\x75\x2A\x17\x0C\x78\x1C\x9D\x90\x2F\x79\xB8\xA5\x6D\x12\x9C\xC4\x64\xBD\xDB\xEE\xB8\xE1\x66\xB2\xC5\x39\xF6\xB6\x58\xB4\x0C\xF9\x20\x09\x13\x45\x3E\x1A\x8C\x03\x43\x7E\x40\x24\x3A\x12\x06\xDD\xF2\xBA\x4E\x39\xA3\x70\x41\x66\xE8\x82\x84\xCA\x9D\x2A\xEC\xE4\xF9\x5B\x53\x9B\x90\x61\xBF\x4F\x0F\x34\xC0\x0F\x60\x51\xAD\x45\xE5\xF6\xC9\x56\x40\x29\xBA\xF6\x89\x11\x76\x66\xC0\x38\xAE\x7E\xFE\x6A\x78\xD3\xE2\xD1\xC5\x05\x3C\x80\xE1\x4E\x70\x8E\xFD\xBF\x06\x5B\x80\x6C\xFC\x31\x7B\x8B\x6A\xCE\x72\x4A\xD0\xA2\x22\x2D\x6E\x6F\xA2\x4E\xF1\xA7\xA7\xC9\xDE\x02\xBE\x2B\x2D\x7E\x1C\x28\xC8\x45\x16\x71\xB3\x4D\x8A\xC7\x28\x8A\x4E\x8F\xFE\xB6\x72\xF5\x04\x22\x1F\xB5\x7F\x5B\x29\x82\x81\x11\xE5\x2A\xD9\xF2\x14\xDA\xFB\xA7\x9F\x18\x81\x66\xDD\x0E\x29\x43\x28\xE1\x5E\x99\x9F\xD6\x6F\x85\xC9\xE9\xEC\xAD\xD7\x20\xFB\xAF\xB5\x39\xAD\xAF\x5E\x43\xF5\xF9\xF2\xE3\xA7\x57\xDE\x7A\xED\xA4\x3D\x22\xDB\xC6\x93\x8A\x92\xD9\xF8\x23\x6D\xF5\x73\x02\x2B\x11\x33\xDC\xE4\x98\x3C\x59\x4F\x9E\x26\xA2\x14\x37\x6D\x5D\x0C\x3C\x6D\xA9\xEF\x65\xDB\x2C\x61\x0F\x97\xC5\xA0\xAF\x60\xE9\x98\x72\x04\xC7\x36\xEA\x2B\xFF\x1A\x2A\x2B\xDB\xE1\x3B\x1A\x22\x91\x89\xA4\xF1\x91\x65\xBE\x2E\x67\x6B\x90\x06\xAB\xAE\x40\xA8\xAC\x1A\x54\xB6\x90\x44\x54\xA0\x5E\xCE\x29\xC7\x41\xE9\x6F\xE8\xAD\xAE\x2D\xBA\x2B\xF0\x7A\x0B\x96\xBD\xBB\xCC\x3B\x3F\xCE\x68\x49\x28\xAA\x41\x3F\x18\xCE\x32\xC8\xA9\x8F\x72\x58\x07\x6D\x91\xAE\x8E\xF8\xE6\x91\xF6\xED\x8C\xF6\xCE\xB8\xDF\x3B\x83\x3A\xDB\x2C\xA3\x22\x45\xF8\x4F\x31\x4F\x75\x1C\xA6\x9A\x5F\xA7\x6B\x94\x84\x1A\x74\xBB\x0F\x68\xB9\x65\xEB\x3A\xB2\xD1\x68\xDA\xA3\x30\xED\x71\x3F\xE7\x30\x9E\x6B\x5E\x48\xAF\x40\x09\x42\x95\xFF\xF6\x27\xC6\xB7\x02\xA2\x77\xB3\x58\xEC\xE4\xA1\x0A\x2F\x9D\x30\xAF\x60\xBF\x12\x2A\x8A\x4C\xC1\xE8\x54\xDE\x5D\x86\xA4\xFA\x3F\xAE\x8E\xA3\xCB\xA5\x42\x4A\xE1\x45\x9B\x5B\xAF\x59\xA8\x4E\xA1\x63\xE8\x07\xE8\xA1\x1F\xFE\x15\x9E\x19\xF8\xC4\x85\x33\xEC\xC2\x6D\xD7\x60\x1D\x70\x84\x6B\x1D\xD3\x41\x83\xE4\x7E\xB4\x60\xED\x91\x77\x83\x63\xBE\x89\x5A\xCA\x8C\x56\xBD\x37\xB8\xEE\xA8\xE0\x32\x19\x87\xF3\x4D\x82\x8A\x7C\x72\x2D\x9C\x41\xF1\x70\xBC\x8B\xB2\xDC\x38\xBA\xFB\x93\x3B\x8E\x51\xF7\xCE\x08\x16\x05\x01\x99\x2F\x68\x6C\xAC\xA7\x2E\xCF\x59\x17\x16\xE9\xEF\x33\x75\x75\x60\xEF\x0B\x5E\xC8\xFF\x90\x2F\x88\x79\x71\x58\x51\xEC\x5C\xB8\x71\x5B\xC4\x4E\x78\xB8\x71\xB8\x3C\x39\x72\xC0\xF4\x12\x76\xAE\x7C\xC0\xD1\x8A\x68\x11\x49\xD9\x63\xCA\x6D\x04\xD1\x68\x43\xF8\xC1\x1E\x95\x70\xA3\x51\x1E\x8A\xC9\x7A\xB6\x8C\x5F\xC0\x67\xCA\xDD\xDA\x07\xCB\xCB\x97\xDF\xD9\x08\xEC\xDC\x8F\x54\xEF\x37\x52\xB9\x1F\xAC\xD5\xFE\x83\x0D\xCF\xF9\x0D\xA0\x94\x8C\x67\x18\xEA\xE6\x17\x97\x08\x48\x6F\x01\x12\x3C\xEF\xA8\x04\x0F\x57\xF0\xDC\xDD\x55\xAA\xD9\x0B\x56\x31\x5D\xEC\xB0\x85\xDB\xDF\xB8\xF1\xAF\xD5\xD9\x52\xE7\xFE\x06\x87\x6F\x68\x7F\x83\xFC\x44\x0D\xFD\xCD\x72\x7F\x63\x39\xFC\xBE\xCC\xBF\xEF\x54\x17\xE8\xF7\x1B\x36\x3C\xB8\x61\xE5\x0D\xFC\x90\x11\x90\x84\x3E\x57\x26\xA0\xFD\x29\x3C\x53\x9E\xDA\x6A\xA2\xB3\xA5\xF1\xAF\x44\xA5\xD8\xBF\x72\xEB\x0C\x1F\x34\x54\xF5\x2F\xAF\x72\x1A\x59\x30\xFE\x95\x5B\xFE\x95\x1B\xEC\xC0\xA6\xFD\xCE\xFD\xF8\xDA\xCE\xFD\xF4\x9E\xF2\x37\x5E\x46\x2F\xDE\x78\xD9\x16\x59\xD0\x6F\xBC\x6C\xCB\xDF\x78\x59\x5F\x78\x87\x3C\xEC\xF1\x8F\x14\xBF\xB1\xCC\xE5\x6F\x2C\xCB\x0B\x37\x96\xB7\xF0\x1F\x52\xF3\xC8\x09\xC0\xF9\xA2\xAD\xAE\xBF\x85\x5D\xF1\x1D\xA1\xDB\xF3\xD7\x0D\xBE\x4C\x23\x1F\x2B\xD0\x97\x9A\x08\x6C\xF5\x0B\x62\xE4\xE3\x6B\xC6\xF0\x43\x11\xE5\xFE\x33\x9F\x98\xC1\xBA\x50\x9D\x4D\xCB\x78\x7D\x81\x44\x11\x5F\xCE\x11\x93\x37\xF6\xF1\xD3\x37\xF4\xD5\xD3\xD9\x5B\xF1\xAB\x6A\x22\xFE\xAA\x51\x58\x56\x83\x0D\x32\x21\x0C\x05\x16\x9A\x62\xA4\x5D\x37\x95\xEC\x09\x1D\x17\xDE\x90\x44\x2D\x3F\x4B\x26\x67\x4D\xC3\xA8\xDA\x13\x06\xC0\xF9\xF5\x16\xB8\x12\xFF\xCE\xA7\x19\xB1\x1F\x70\xD0\x47\xDA\xEA\x3D\x57\xE5\xF6\x76\xDD\x57\x2D\x7B\x37\x60\x5F\xCF\x96\x7C\x5B\x5F\x1B\x22\x90\x17\xC4\x0B\xDD\x32\xE2\x14\x67\x5B\x89\x28\x3D\x67\x38\x4C\x53\xC0\x02\xF6\xA2\xC9\x20\xC5\xBF\x0C\x9F\x1E\xD3\xA0\x1A\xDC\x13\x40\xBF\x1B\x77\x02\x98\x74\x43\x84\xD1\xD0\xF8\x7E\x96\x87\xC6\x1E\x82\x90\x79\x05\xFA\xAB\x1E\x12\x13\x8A\x3A\xC7\x5D\x1B\xD6\x4A\xD7\x8B\xE4\x76\xC3\x81\x4C\x21\x51\x00\x1F\x6E\x87\x13\xC7\x48\xF2\xE4\xBA\x43\x20\xC0\x2D\x85\x06\xF5\x73\x08\xFC\xCB\x6E\xD3\x98\x3D\x1F\xD3\x98\x3D\x97\x69\x24\xEF\x28\x02\x24\xA6\x3C\x09\x60\x1B\xC3\xE2\x4D\x46\x41\x5F\xD8\x26\x61\xD8\xBE\x89\xD3\x17\x73\x5F\x1A\x52\xE4\x1D\x44\xDD\x00\x65\xFA\xEC\x78\x7C\x30\x1A\x97\x15\x73\x75\x37\x87\x31\xA4\x7B\xCD\xE1\x81\xC7\xC3\x54\x12\x61\x3F\x3F\x87\x86\x4D\xF9\xDD\x95\x31\x5D\xEF\x74\x8E\x63\x0F\x90\x25\x4C\xD3\x8D\x1D\xFF\x72\x9B\x0F\x50\x5A\xA0\x59\x55\xA0\x87\x5E\x71\x54\x86\xA8\x9D\x96\xAF\x0A\x49\x73\xB0\xA4\x6A\x61\x65\xA0\x45\x31\xB7\x5D\x02\xDB\x07\xD8\x43\x58\x43\x84\xCA\xCC\x40\x46\x0C\x04\x04\xA5\xE1\x8A\x67\x2C\x40\x51\xB0\x00\xE5\x9D\x8A\xC2\xC6\x2F\x4D\x23\x35\x32\xDE\x60\x09\x8A\x68\xCB\x8E\xD8\x12\x94\x43\x24\x19\x5A\x7B\x03\xCC\xE4\x3A\x23\x34\xF3\x40\xF3\xEB\x8D\x26\x1F\xF9\xAE\xF6\xDA\xC0\x84\xEC\x30\xB8\xC5\x4D\x46\x76\x18\x1E\xA0\xEE\xEC\x30\x96\x75\x2F\x39\xD1\xA2\xB6\xA4\x49\x5B\x32\x03\x3B\xCC\x24\xD8\x61\xF2\x81\x1D\x86\x89\xAF\x03\xE9\x75\xD0\x39\x1E\x10\x74\xF1\x01\xF5\x19\x21\x97\xE8\xCF\xCF\x3D\xC7\xED\xA8\x81\x55\xB6\x9F\x02\xD3\x4F\x41\x2C\x53\x60\xEA\x80\x8C\xFC\x40\x40\xDC\xDD\x5D\x46\xE7\xC3\x54\x25\x5F\x66\xAB\x1C\xEF\x58\x94\x5C\x80\xF7\x47\x56\x2B\x16\x4F\x52\xBC\xEB\x24\xD1\x3F\xE7\xD6\xF6\x9A\xAE\x18\x22\xF2\x73\x1A\x4E\x57\x72\x5D\xDC\x98\x39\xE3\x14\x4F\x57\xD2\xB7\x53\x1B\x48\x68\xBA\x70\x67\x4D\x46\xD3\x15\xCD\x4C\x57\x74\x80\xE9\x4A\xC2\x74\xC5\x73\xD3\xA5\xC6\xD3\xE5\x4E\x98\x07\x96\x17\xCD\x96\xEB\x66\x6B\xF9\xC0\x93\xE5\xE6\x27\x2B\xCF\x7F\x60\xC9\x12\xFD\xA7\xB4\x4B\xD2\xD5\xA0\x54\x13\x50\x64\xD9\x19\x23\x58\x6B\x65\x0A\x6C\xAF\xCA\x93\x3E\xF4\xEB\xDA\x7F\x4A\x93\xC4\x64\x92\x0F\x2D\xF3\x28\x10\x6A\x3D\x43\x72\x77\x9D\x5C\x3A\x1D\x93\xDC\xB2\x91\xDC\xF5\xF5\xD6\x11\x38\x22\x39\x1D\x7C\x06\x24\x97\x73\x5A\x67\x30\x97\xEF\xE3\x4B\x87\xF1\x8D\x03\x12\x32\x90\xDC\x0E\x48\x2E\xA7\xDB\x1D\xED\x7F\x55\x0F\xE4\x98\xE9\xEE\xA5\x7B\xC1\xA5\xCB\x90\x73\x6C\x66\x32\x34\x18\x11\x5C\x9A\x05\x97\x9E\x35\x27\xA8\xA1\x39\x81\x26\xA2\xB7\x28\xF4\x13\x31\xC3\xEB\xBB\x12\xFA\x19\xED\xFF\xE3\x9E\x84\x8E\xA4\xAA\x5B\xCD\x6B\xF6\x27\xB2\xDE\x85\xC8\x7A\x86\xC8\xF2\x7D\x9F\x5B\x89\xDD\x88\xAC\x07\x44\xEE\x3F\x45\x4C\xEE\x3D\x88\x1E\x11\xD1\xA3\x79\xA2\x47\x1D\xD1\xA3\x79\x23\xC5\xBE\x44\x8F\xE4\x92\xE0\xE0\x44\x7F\x56\xFB\x2F\x1C\x88\xBB\x0F\x44\xF4\xAF\x03\x67\x2F\x24\xF8\x1C\xA7\x8F\x27\x60\xE1\x7E\x61\x76\x13\x40\x66\x2F\x01\x14\x0D\xA6\x20\x9A\x9F\x82\xA8\xE7\xFB\xF0\xF2\x5E\xB2\x45\x7A\xFD\xCD\x25\x5B\x40\x05\x99\xB8\xA7\x5C\xF9\x9A\xB3\x38\xA8\x20\x32\xE6\xE7\xBF\x31\x41\x73\xDB\xA5\x67\x7A\x71\xCF\xF4\x73\xEE\x99\x5E\xDC\x33\x59\x57\x83\x9E\x99\x45\x3C\xA9\xBE\xBE\x3C\x99\xE7\x2F\x9A\xB1\xF1\x80\x26\x57\xA4\x5D\x7F\x5F\x53\x6C\x1C\x5A\x67\x6F\x09\xCD\xC1\xF3\xE4\x19\x96\xBF\x39\x22\xD3\x95\xD8\x05\x9E\x51\x33\x86\x81\xEF\xE8\x0F\xFF\x38\x9A\x69\xBB\x64\xB4\x32\xFB\xDF\x60\xCB\x4D\x48\x18\x8B\x19\xDD\x54\x8E\x55\x1E\x36\x0D\x45\xEC\xD0\x4B\x0B\x8D\x6C\x09\x5F\xB3\x26\xC0\xF9\x8F\x2B\x3C\x41\x3C\xAD\xE4\xFC\x8E\x0B\xEE\x98\x7A\x35\xA1\x4A\x04\x6C\xFA\x81\x72\x3F\xB8\x7C\xD5\xBD\x8E\x1F\x43\x3C\x58\xF4\x96\x5A\xB3\xE1\xF2\xD5\x32\xF6\x44\xC4\x87\x2B\x54\xF7\xC9\x89\xE2\xE3\x8A\x0F\xC9\x74\xCE\x4A\x4E\x9A\x57\x30\x91\xEF\xE0\xB3\x72\x34\xD3\xB4\xB8\x1A\x38\x72\x59\x1B\xF5\x80\xB5\xA6\x08\xA2\x41\x0F\xA8\xA6\xF5\xB1\xF4\x49\x72\x3A\x28\xF9\x14\x87\x7B\x47\xDB\xC3\xEF\x50\xEB\xB7\x75\xA9\xFC\xF0\x90\x35\x7C\xE8\x6E\xB5\x77\x9C\xB4\x47\xF8\xD3\xFA\x49\x9B\x82\x23\x3F\x3D\x4D\xD5\xB1\xE5\xE3\xA7\xAF\x32\x8C\x2E\x1F\xFA\x6F\x35\xF7\xD4\x09\x1E\xC5\xCE\xD5\x66\x90\x67\x0D\xB5\xC9\xDE\xF4\x57\xE8\x8E\xED\xC0\xF9\x67\x82\xC7\x5D\xFE\xBE\x97\x90\x92\x67\xC3\x35\xCA\x63\x66\x90\xD7\x6A\xC0\xBA\xE3\xE9\x1F\x66\x5D\x3A\xD8\xFF\x39\x55\xED\xB4\x5D\xBA\x49\xE9\x34\xB3\x2E\x8A\x93\xD5\x72\x92\x2F\x2D\x1F\x3A\x5C\xAD\x14\x66\x75\xC6\x32\x59\xBC\x28\xDF\xD7\xF5\xA3\x78\xD1\x73\xF2\xFD\x28\x6E\x26\x00\xC6\x2A\xB0\xDA\x88\xC5\x39\x2B\x6F\xCF\xD1\x71\xF5\x7E\x59\xFB\x26\x1F\xDB\x50\xB1\xD4\xEB\xBD\xD9\x28\x6F\x5A\xCC\x32\xE4\xBB\xF9\x05\xCD\xDE\x8E\xCF\xEA\x31\xDF\xF8\xD4\xAB\xEA\x5F\x51\xCD\xC9\x4C\x37\xF1\x15\x6C\xE0\x59\xCD\x89\x46\x90\x37\x12\xFF\xAC\x1E\x30\x47\x02\xC9\xAD\xF6\x59\x7D\xD2\x56\xEC\x06\xAA\x7C\xCA\x61\x77\xFC\x50\x49\x46\xC8\xC4\x3F\x6A\x90\x5F\xB0\x16\x48\x84\x59\x0C\xFF\x3C\x40\x81\xC2\xCA\x1E\x35\x27\x8D\x2A\x6E\x22\xC1\x3B\xF0\xFC\x6A\x52\x0A\x90\x95\x92\x31\xAE\xA4\x55\x8A\x96\x15\x06\x23\x1B\x53\xE2\x8F\x53\x27\xD3\x99\x0E\x1C\x87\xC4\x43\x97\xA5\xB2\x7B\xC8\xE9\x29\x61\xD0\xBB\xE3\x2D\x95\x94\x0E\xA6\xBB\x77\x10\x0C\x37\x8D\x6B\x99\x72\x4C\xDC\x94\xCF\xF6\x78\xAE\xBF\x87\x29\x23\x7A\xE8\x6F\x8A\x7D\x73\x9C\xB5\x87\x31\xD9\x4D\x97\xA1\x0E\x3B\x26\x91\xE2\x51\x93\xD3\x61\x3C\x93\x1B\x3D\x3C\xF1\xD1\x69\x3D\x80\xDF\xCE\x1F\x38\xB3\x70\x79\x31\x60\x9E\x3C\x1C\x7E\xA9\xD2\xEC\x3A\xD7\xC9\x55\x4C\xD8\xE3\x22\xE3\xEB\x57\x72\x84\xC9\x21\x23\x95\xA3\x20\xDF\x9F\x5E\xE5\xC8\xA1\x18\x39\x5E\xC8\xF7\x26\x87\x9C\xBC\xFB\xFB\xEB\x91\xBC\x53\x39\x26\xC1\xED\x27\x0B\x6E\x3F\x75\x46\x86\xBA\x5E\x0C\x07\x6A\xD2\x35\x6D\x5A\xAA\x62\x95\x92\x35\x3E\x43\x9C\x16\xE8\xD8\x70\x98\xED\xCB\xB5\x41\xBA\x23\x85\x32\x71\x50\x4E\x5B\x01\x6E\x80\xEC\xA4\x7D\x46\xF3\x5F\xC2\x24\xE3\x02\x9C\xE1\xD6\xC7\x97\xAB\x9F\x21\xA3\xCA\x21\xF2\xF0\x5D\x50\x79\x42\xF5\x36\xD9\x49\xFB\xA4\x0E\x2D\x25\x7E\xC7\x0C\x9A\xF0\x4F\xCE\x36\xB8\x63\xF8\xEF\x7D\x03\x3E\x7A\x72\xAE\x51\xE2\x1D\xF3\x76\xC3\x83\x4E\xD6\xCD\x0E\x09\x80\x15\xEC\xCA\x13\x07\x18\xE7\x33\xB3\xCD\x3E\x21\xE3\xBC\x5F\xC6\xF9\xCC\xB0\xC9\x77\xD3\x38\x2B\xB6\x6D\xA0\x84\xA1\xFA\xBC\xDE\xAA\xDE\x47\x4F\x96\x59\xEE\x9C\x29\x4B\xE4\x15\xEF\x28\x5B\x63\xE1\x55\x8D\xDF\x63\x72\x97\xCD\xC9\x5E\xE6\xCE\x96\xCA\x7F\x60\x7C\x25\x15\xD3\xBB\x0C\xC3\x51\xB0\xF7\x5D\x79\x22\x30\x3D\x45\x66\x57\x79\x90\xAE\x73\xEF\x77\x44\x32\xEB\x66\x95\xAF\xA0\xC6\x7D\x63\xAE\x2F\x89\x46\xEF\x34\x75\x8A\x7F\xDF\x6E\xEA\x02\xFF\x3E\x6A\xE8\x5A\x15\x12\xFF\x1E\x26\x59\xCA\x73\xB2\x33\xFA\xF6\xAC\x12\x49\x35\x5A\xBB\x09\xF6\xF5\x17\x90\x68\xE5\x09\xF3\x1E\xCD\x92\xEB\x51\x73\xD2\xBE\x9E\x3F\xBE\x47\x9F\xB4\x3B\x9A\xA7\x9B\x08\xBA\xA3\x5B\xAE\x4C\xA4\x41\xB2\x6E\x1E\x91\xFE\x5C\x93\xFE\xEC\x98\xBA\xCC\x43\x42\x9C\x58\x82\x52\x28\x99\x54\xC1\x6E\x8B\x1A\xB5\x0A\x4A\x5D\xCA\x0A\x8C\x78\x45\x1B\xF6\x8A\xA6\x90\xF2\x28\x84\x2A\xA0\x60\x07\x49\x74\x84\x82\xFA\xD5\xF4\xC6\x53\xFC\x46\xC4\x76\x0D\xC3\xBE\xD4\xF7\x11\xF2\x0C\x2F\x1C\x37\x14\x43\xE1\xDD\xEF\x90\xBF\x0F\x80\xC6\x63\x86\x04\x92\x04\xB5\xCD\x48\xDA\x75\xBA\xB7\xF1\x4A\x4C\x8D\x84\xC2\xD5\xFD\xF6\x8B\xE2\x63\x0D\xFA\x56\xF3\xC0\x00\xB2\xEF\xF3\x4A\x08\x5A\x94\x07\xD8\x0E\xCB\xF1\x76\xE8\x6F\x0C\x4F\x46\xBB\xEE\x8A\x85\x78\xD0\x56\x4D\xB4\x6E\xE6\x5C\x02\x45\x8D\x2D\x8A\xBC\xBB\x4C\x38\x08\x9D\xE3\x8E\xCE\x31\x8A\xE0\x5D\xE8\x1C\xEF\x4D\xE7\x81\x2A\xD3\xD3\x39\x10\x38\x90\x3C\x5A\x37\xC5\x99\x32\x63\x94\x14\xC3\x97\x07\x65\x6A\x39\xBA\x51\xBA\x42\x51\x39\xB3\x33\x02\x29\x2A\x91\x83\xE9\x90\x1F\x7E\x31\x04\xF3\xE1\xDE\x4A\xD5\x52\x1B\x48\xD3\x8D\x52\x15\x93\xBC\xA3\x57\x98\x84\xDD\x36\xA2\x82\xE4\xEA\x63\x0B\xE4\x4D\x27\x68\x1E\xD5\x33\x82\xE6\x31\x11\x34\x8F\x6A\x91\x34\x8F\x52\xA4\xDC\xE3\xD4\xCB\x09\x85\x65\x1D\x97\x4B\xBC\x3D\x79\x61\x32\xE2\x05\xE3\x35\x1B\xE6\xD7\x3A\xF5\x63\x57\x7E\xC8\x0E\xDE\x48\x36\x6A\x44\x53\x72\xD9\x83\x35\x92\x1E\xBC\x91\x74\x46\x7F\x72\x07\x6E\x24\x39\x78\x23\xC9\xA8\x11\xE7\xD3\x03\x37\x12\x1F\x60\x61\xC6\xA3\xDA\xAB\xFD\x2B\x8D\x0E\x50\x69\x34\xAA\x14\xF6\xAF\xD4\xE5\x8B\x97\xB6\xCD\xED\x48\x4F\x67\xC7\x94\x5F\xE3\x10\x2C\xEF\xD8\xD9\xDC\xFF\xBE\x3A\x57\x3A\x88\xFD\xAF\xD3\xEF\xE4\x7F\x9E\x32\xE0\x1F\x2D\xB3\x26\xF5\x7F\x41\x49\x8B\x21\xF6\x7F\x49\xD7\xD1\x29\x57\x41\x48\x36\x31\xBD\xAE\x21\xF5\xCF\x70\x66\xE3\x90\xB3\x6F\xB0\x1C\x63\xCA\x11\x33\x58\x8E\xFC\xC3\xDE\xCB\x31\xDF\x53\x68\xEA\x03\x90\x51\x3F\xA7\x33\x04\x2D\xE8\x2E\x59\xFD\x3F\x9B\xF4\xB9\xBB\xF1\xDC\x24\xFE\x67\x60\xFD\x2F\x04\xD8\x4C\xEB\xDF\xAD\x45\x60\x59\xFF\x93\xFD\xC7\x67\xB5\x44\x7D\x59\xD2\x78\x24\xDD\xCB\x17\x75\x8B\xFA\xDB\x5F\x59\x7A\x82\x65\x7F\x54\xD3\x5F\xFB\x59\x0D\x36\x84\x03\xBD\x53\xFB\x2F\x1A\xF1\x47\x74\xD5\xAF\x5E\x63\x44\x42\x6C\xEF\x43\x58\x4A\x9F\x30\x1F\xD4\xFC\xFD\x09\x0D\x16\xDC\x09\xF3\x7E\xED\x9F\x50\xE1\x8D\xD0\x85\x77\xEA\xD6\xDF\xD1\x9E\x7E\x04\xF5\x4D\xCE\x2D\x7F\x87\x74\xCF\x71\x74\x1A\x7D\x5A\xEF\x3E\x41\xF7\xE9\x48\xF7\xA9\xEA\x3E\xA5\x61\x68\xD8\xDE\x87\x35\xB8\xEA\x03\xE2\x1F\xA5\x8E\x29\x23\x59\x18\xAD\x37\xD8\x39\xF2\x95\x40\xE5\x91\x19\xEE\xB4\xFE\x07\xA5\xF2\x8F\xBD\x2D\xEE\xAD\x46\xE6\xBA\xFF\x0B\x73\xBE\x54\x7E\x67\x67\x27\x05\x73\xFA\x91\x87\x1F\x3A\x9D\x4E\xAF\x83\x39\xFD\xE7\x6F\xDE\x79\x42\x7D\xFB\x5A\x1D\x91\x77\x09\x0E\xF3\x84\x79\xC4\x30\xEC\xC2\xC7\x71\xB8\x9A\xC9\x00\xAA\xFA\x1E\x72\x17\x88\x4E\x98\xB7\x73\x43\xB2\xAD\xE3\x4B\x6F\xD7\x34\xD7\x57\x39\xCD\x75\xF8\xFE\x01\xFA\x4E\xB0\x2C\x6F\xD7\x75\x84\x7F\x3F\xAE\x29\xE3\xDE\x87\x58\xCB\xB1\x63\x2D\xC7\x72\xA8\x1F\xFD\x79\x14\xFB\x90\x7A\xBD\x7D\xC2\xFC\x32\x52\xFF\x11\xDD\x32\x8D\x21\x92\xF7\x55\xF5\xAB\xAC\x79\x54\x9F\x65\xB3\xC5\x31\xF5\x84\x26\xA2\x7C\x31\xD4\xFE\xC8\xF0\xB4\xD7\xCD\x28\xD8\x5B\xED\x23\xFA\xA4\x7D\x63\xB7\x46\xED\xBA\x79\x4A\x37\x29\x77\x50\x70\x16\x70\xB6\x0B\xF6\x2A\x0D\x29\xC0\xED\xBA\x79\x52\x07\xA4\x87\xF9\x90\x38\x07\xE9\x3D\xA3\x90\xB8\x68\x3E\x24\xCE\xAE\x9B\x0F\xEB\x66\x42\x06\xD0\xB4\x8B\x89\x4B\x87\x21\x6E\x44\xFA\x0F\x6B\x36\x8A\x4E\x38\xB6\x35\xEB\x82\xE2\xB2\xDD\xDF\xE8\xA2\x4F\x65\x38\xD4\xF1\x9C\x39\xE8\x49\x62\x92\xEC\x84\x79\x0A\xA5\x06\x27\x89\xA7\xB9\x7E\x0D\x79\xFA\x63\xAF\x42\x7F\xE4\xA4\x6E\x51\x23\x7D\x0D\x96\xBA\x43\xA8\xC9\x64\x1D\xCC\x95\xB9\x08\x96\xAD\x2D\x60\x51\x91\x18\x3C\x45\x1A\xBF\xF1\xA4\xBD\x83\x3F\xBD\xE6\xA4\x5D\xE7\xC9\x96\x39\xC4\x4A\xE9\xDD\xCE\xF4\xC2\x53\x45\xAE\x91\xCC\x13\x4D\x36\xAC\x0B\x75\xDD\x47\x34\x76\xF4\xFD\x9A\xF0\x3A\x13\xD0\x6B\x77\x2A\x4D\x78\x9C\x31\xE8\xB5\x26\x46\xF1\xE0\x90\x5D\x0D\x38\x2C\xF8\x88\x46\x5E\x4D\xE5\xCC\x69\xC9\x50\x46\xAD\x57\x4F\x48\x9B\x47\xA4\xEB\x1F\x1F\x75\x5D\xEC\x48\xE9\xB0\xF9\x57\x9F\xB4\x47\x7A\xC6\x49\x67\xC6\x72\x84\x43\xBB\xBA\x83\xF7\x4C\xCF\x1B\xEE\xBB\xB9\x4E\x6E\x57\x38\x02\x9C\xAF\x42\x5E\x57\xD5\xAF\x11\x7F\xB8\x5C\x7A\x77\xFD\xAA\x08\xA0\x4E\x30\x82\xEB\x43\x19\x1F\x75\x7A\x98\x32\x5D\xF2\x32\x79\xF6\xE0\xD2\x9E\xFC\x90\x54\x08\xA3\x1B\x6C\x43\x0E\x0F\x34\xFF\x4B\xBB\xB4\xA4\x22\xFC\x9F\xA6\x7F\x23\x13\xD0\x5B\xC1\xBD\x5C\xC7\x4B\x26\x51\x0C\x2B\xD0\xF2\x19\xDC\x11\x70\x2B\xDD\xB5\xAE\x1B\x55\xFD\xF1\x35\x92\x97\x05\x19\x36\x09\xC0\x46\xB7\xBC\xE8\xC9\x18\xFB\x72\x1D\x7B\x23\xEC\xDE\x90\x9A\x58\x70\x34\x23\x3E\x69\x22\x76\x63\xA7\xCA\x13\xEF\x6A\x2B\xB1\xE0\x49\xCD\x0E\x84\x37\x6E\xD8\x2D\x29\x82\xAD\x92\x73\x27\x81\xAB\xDA\x76\xD0\x36\xE7\x78\xAB\x6D\x88\x15\xE7\xAA\xCF\xCB\xCE\x15\x43\x84\xBF\x98\xEA\x3F\x85\xD2\x4E\x84\x83\x04\x8C\x12\x08\xE7\xBA\x29\xF8\xD7\x42\x2E\xA7\xA9\xE7\x14\xC2\xB0\xEF\xD0\x67\x07\x5E\xD3\x59\xB0\x60\x9D\x48\xA8\x60\x18\xCA\x1A\x09\x9E\xE3\x09\xF2\x93\xC3\x13\x24\x45\x21\x60\xED\x55\xF5\x9F\xA5\x93\x84\x56\x27\x3D\x22\x54\x55\xE5\xB9\x9E\xEA\xCF\xA4\x44\x1E\xC6\x21\x40\x36\xA6\x4B\x9C\x0B\x36\x7F\xD7\x57\xC9\x11\xCB\x23\x8E\x98\x61\x89\x26\x1A\x32\x45\xDC\x51\x26\xE6\x0B\x78\xB3\x0D\xB1\xE4\x54\x5E\xCC\x1D\x1F\x58\xCC\x1D\x49\xC7\x13\xDB\x2D\xA1\x20\x75\xBC\x32\x64\x93\x94\x92\xEB\xD0\x99\x1E\xD2\x5D\xD9\x24\xD9\x8B\x4D\x62\x8A\x9E\x0A\xAD\x4D\xDB\x73\xC1\x92\xBB\x2B\xA7\x24\xCF\x3F\xA7\x7C\xE0\x1B\x84\x53\x9E\x5E\x36\x69\xEF\x37\xF9\x1E\xBD\xD9\x44\x7D\x2A\x2B\x89\x38\x8E\x43\xC4\xB1\x5E\x37\x69\x93\xF0\xA1\x91\x80\x05\x56\x9B\xAC\x6D\x26\x14\x71\x9C\x87\x88\xE3\x09\xE4\xA3\x88\x63\x01\x41\xE0\x88\x63\x02\x16\x10\x73\x21\xE1\xE3\x13\xAE\xDA\x2A\xEE\x49\x04\x2D\x77\x84\x5B\x29\x9A\x09\x24\x9B\x4D\x32\x8A\x38\x4E\xD6\x20\x83\x78\x18\x71\x3C\x19\x45\x1C\x4B\x24\x03\x47\x1C\x63\x43\x04\xD6\x5C\xC7\x90\x76\x69\xD6\x18\x1B\x63\x97\x00\x5C\xDA\x5D\xC3\x59\xB2\xFF\x19\x49\x4E\x76\xD5\xC7\xB4\x57\xD8\x6D\x42\x4B\x24\xF2\x14\x2D\x63\x25\xEA\x70\xF0\x5C\xD0\x65\xED\x57\x39\x22\x79\xA3\x54\x50\x54\xBF\x19\xC8\xB0\x4A\x5D\x6C\x99\x00\x05\xC3\xF5\xA5\xE4\xC9\x84\xA3\x3C\xCB\x70\x47\x44\xD9\x34\x50\x36\x81\xB4\xA3\x2C\x8D\xCD\x4F\x4F\x18\x07\x29\xDB\xCC\x53\x88\x6E\xB5\x8F\xE9\x93\x26\x85\x14\x77\xF1\xDB\x20\xC5\xFD\x18\xF8\xCF\x2A\xA4\xBE\x6A\xBB\xF1\x51\xEC\x09\x07\x9C\x60\x37\x48\x70\x9E\x30\x47\xD8\x4A\x90\x02\x4F\x2E\xE5\x16\x4D\xC7\xF1\xE4\xE9\x20\x9E\x9C\x53\xF8\x25\x7C\x52\x91\x3C\x47\x14\x0C\x4B\x99\x8F\xB9\x6A\x68\x32\x72\x52\x07\x0A\x9E\xA5\x53\x0B\x9D\x89\x8E\x42\x14\x4E\xE6\xD8\x31\xA2\x10\x8D\xE2\x56\x93\xD6\x25\xF9\x39\x20\x5F\xB0\x91\x9C\x91\xF3\x22\x28\xE9\xD0\x4E\x7F\x15\x0F\x85\xCE\x30\x11\xA4\x2B\x57\x03\x2A\x57\xDA\xC2\xA4\xB3\x6E\x0B\x45\x78\x91\xA0\xAE\xF7\x7D\x78\x48\xDF\x19\xB7\x9B\xCD\xB5\x9B\xD6\x58\x5C\x2C\xB1\x59\xD7\xF6\x8E\xB4\x7D\x6A\xD8\x36\xD9\x63\x23\xFF\x7D\xBA\x85\x7C\xE5\xAD\xDC\x8B\xD4\x1F\xED\x7B\xD1\xCD\xCB\x2A\x0A\xAB\x63\xEA\xFB\x38\xED\x03\xA4\x7E\xB5\x6D\xD2\x21\x2B\xA6\x3D\x2B\x9A\x9C\x2F\x37\x54\x37\x97\xFE\xB6\x56\x30\xE0\x62\x14\x5C\xD9\x92\x31\x9A\xB0\x5A\x8B\x8B\x4D\x56\x7D\x2F\x9F\xBE\x20\xA3\x0C\x8A\x75\x66\x4F\x41\xC6\x87\x85\x8C\xA1\x63\x73\xCA\x72\x66\xBB\x7B\x2A\xDC\x2D\xA1\x0D\xB8\xFB\xA3\x7A\xAD\xA2\x23\x66\x2A\xA8\xD8\x31\x23\x60\x33\x8A\x70\x0E\xD9\x05\xB9\xA6\xCE\x05\x72\x8B\xD4\x46\x08\xCB\xBF\xCE\x0A\xCB\xDF\xA7\x6D\xCF\x35\xFD\xF3\x26\xDB\x20\xBC\x1B\xB1\x69\xA6\xEB\xE6\x36\x88\x09\x90\x2B\x96\x45\xC4\x88\x98\xB7\x1A\xD5\x4D\x47\x45\x61\x05\xD5\xCC\x6C\xBC\x9E\xFF\x54\xDD\x64\x60\x11\x88\x57\xBE\x5B\xE6\x00\x6B\xC6\x3E\x53\xE5\xDD\x24\x28\xA2\x72\x37\x39\x09\x17\x21\xF4\x33\x91\x19\xD8\xFF\x28\x98\xA7\x47\x3C\x12\x11\x97\x34\xE5\x49\x7B\x3F\x44\xC1\x6E\x8E\x73\xDD\x01\x01\x51\x89\xD5\x66\xE9\xA4\xBD\x8F\x3A\x50\x5B\x19\x42\x51\x73\xF8\x55\x9D\x40\x24\x77\x3A\x5C\xA5\x5C\xE3\xE4\xDD\xB0\x8E\x43\x04\x4B\x27\x2D\x8C\x78\xEC\x78\x4B\x25\xC1\x42\x02\x66\xE5\x91\x3D\x79\x9D\xE6\x91\xB7\x43\xEC\x42\x43\x61\x71\x29\xCB\xDF\x5C\xD6\x3B\x67\x7E\x1F\xCA\x5B\x96\x3F\x0B\xE4\x57\xCC\xA2\x60\x20\x75\xB3\x03\x48\xDD\x80\xF5\xFF\x9C\xA4\x09\xF6\x96\xDD\x9F\x59\x8A\x14\x17\x45\xBD\x40\x56\x15\x2C\x2E\x59\x2F\x71\xB8\x9B\xEB\x16\x59\xCA\x78\x40\x27\x38\x16\xFE\x08\x5B\x4E\x26\x61\x7A\xFA\xC9\x41\x39\x1E\x06\x9D\xF0\x8E\x96\x6E\x62\x8F\x06\xC3\x8E\x29\x23\xCA\x11\xEE\x76\x13\xEF\x22\xB9\x63\x96\xDC\x5C\x49\x9D\xF2\x0E\x93\x40\xCA\xD8\x2F\x29\x03\x01\xC4\x34\xE0\x24\x0C\x98\x65\xFA\x02\x11\x9E\x1D\x58\x84\xCF\x49\xEE\x13\xDC\x53\x1C\x32\xA1\xEF\xFA\xF7\xE8\x60\x3D\xB9\x6E\x74\x4A\x41\xC0\x9D\xEA\xD7\x03\x26\xF4\xD7\xB1\x6E\x91\x31\x9B\x0E\xB0\x06\x1C\x83\xDF\x1F\x3C\x9E\xBF\x89\x07\x58\x0B\x7C\xF9\x96\xF4\xAE\xD5\x6E\x9B\x15\xFC\x3E\x18\x9D\x90\xA5\xDD\x4C\x30\xBA\x5B\x14\xB7\x97\x71\x30\x7A\xD6\x41\x47\x64\x84\x76\x06\xE9\x25\x0A\xCD\xE2\x14\x0A\x83\x60\x74\x69\xBC\x8B\x49\x4F\x20\x6E\x19\x16\x73\xCE\x7B\x22\xFF\x5D\x6B\x5C\xEF\x26\x02\xB3\x2A\xF3\xD0\x0F\xE6\x96\xC6\xAE\x9B\x94\x1D\xBC\x8B\x00\x0D\xF9\x0A\x71\x6D\x12\x8A\xDC\x8E\x0F\xEF\x63\x48\x1C\xC6\x81\x11\xDC\x15\x41\x7A\xB1\xFE\x29\xD5\x06\x40\x1D\x5A\xBE\x54\x2F\xC5\x74\x51\xDA\xE0\xEA\xD7\xAE\x49\x8C\xCC\x2D\xD5\x87\xFA\x8F\xBF\x11\xEC\x3D\xEB\xE6\x96\x63\xCA\x90\xF5\xF0\x48\xB0\xE8\x9F\x56\x28\x0D\x35\xE9\x77\x60\xFC\x72\x5B\xDD\xB8\x26\x4A\xE6\x31\x55\x11\x22\x3F\x33\xC1\x19\x06\xE9\x5B\x26\x3B\xBE\xEA\xD1\x17\x18\xFF\x86\x2E\xB2\x1A\x87\x5C\x65\x90\xAB\x42\xD8\x18\x3E\x22\x1C\x7F\x7E\x84\xF2\x58\x5F\x42\x25\x57\x43\x74\x9B\x52\x27\xCC\x51\x72\x3B\x76\xB8\xCE\xE9\x3B\xE4\x5C\x2D\xD6\xD2\x21\xE9\x90\x9B\x9E\x3D\xD7\xC4\xA7\xD5\xB7\x4B\x93\xB5\x3D\xBD\xB3\xF3\x84\xF8\x15\xC7\x1D\x89\xAB\x46\x7B\xBB\xFD\xF8\xC3\x04\x13\xF9\xF8\x69\xA2\xF7\xB9\xB5\x87\x4F\x3F\xF2\xF0\x43\xF8\x36\x60\x0D\x6B\x14\xB7\x89\xE3\xBF\x05\x2C\xC4\x27\xED\xFD\xA8\xDE\x42\xAF\xDE\x2E\xE1\xFC\x28\xD0\xD5\xFB\xAF\x72\x8A\x2A\x9C\xAE\xEE\xEB\x33\x5A\xBB\x29\xBF\xBF\x1A\x00\x75\x24\xFD\x80\xD9\xF4\xE6\x0D\x8D\xF5\xF6\x7C\x77\xE3\x32\x04\xB6\x71\xDE\x11\xA4\xA4\x0B\x2F\x85\xF2\xE6\x6E\xC2\x7B\xFB\x5B\x75\x00\xAC\xB3\x9D\x53\x91\xFF\x98\x62\x64\x1D\x77\xC2\x54\x92\x3A\xFB\xEC\x6C\xED\x9A\xED\xC1\x86\x93\x92\x0E\x20\x66\xF5\x59\xF1\xD4\x37\xA0\x37\xFD\x43\xAD\x37\x97\xFD\xF4\x41\x94\x2B\x27\x4C\x9A\x07\x6C\xB7\x19\xA8\xB0\xDC\x29\xA5\xF2\xA3\x7B\x28\xBD\xFC\xD0\x0D\x1F\xBA\x99\x87\x66\xF8\xB0\xF7\x37\xC8\x3F\xA5\xAD\x99\xEA\x87\xF5\xD4\x9B\xE0\xEB\xC1\xB1\xE4\x9A\x30\x89\xB6\xBA\x60\x03\xD0\xD5\x3F\x62\x87\x32\x1E\x35\x8F\x47\x32\x47\x55\xFF\xF7\x55\x82\x26\x63\x7A\xDC\x4B\xFA\xA1\x3D\xDF\xC3\xDD\x16\xEF\x05\xF5\xB7\x4C\xF5\x8E\xB7\x35\x4E\x02\xB5\xDD\x20\x50\xDB\xFD\x54\x67\xD0\x14\x98\x2A\xAC\xE0\xB5\x7C\x1E\x8B\xBC\xF6\x40\x57\x89\xFF\xF3\xE6\x36\x9D\x22\xD7\x98\x9B\x23\xE9\x0F\xC5\xB8\x22\x45\xA3\xF3\x6B\x8D\xB4\xDE\x75\x29\xCF\x3F\x89\xA7\xE8\xDE\x41\x8C\x82\x55\x7A\xEC\x37\xDD\x1D\x5D\x19\x36\x89\x93\x6F\x05\x3C\x5B\x32\xC5\x76\xF3\x40\x1E\xEA\x72\x72\x35\x0C\x76\x47\x78\xB6\xC3\x63\xA9\xA0\xA0\x49\x2A\x62\x0A\x90\x3E\x43\x59\x41\x28\x83\x31\x81\x17\x8A\x07\xD5\x6B\x1B\x23\x03\x64\x42\xCB\xA0\x24\xC5\x10\xE8\xD7\x0B\x34\x86\xA2\xD3\x38\xC9\x3C\xC6\xA6\x6C\x2C\xD6\x68\x50\x39\x30\xF6\x54\x00\x19\x8A\xF9\xC5\x18\x5F\x8C\x03\x12\x78\xB4\xD1\x39\x71\x82\xED\x00\x51\x09\xAA\xA1\x49\xF8\xBE\x82\xD0\xE1\x08\x92\xC6\xD6\xAE\xF3\xE6\x40\x76\x66\x80\x46\xC2\x76\xB3\xB7\xDA\x94\x62\xFD\xFF\x1E\x9D\xB2\x1D\x9F\x55\x18\x95\x1C\x92\x96\x94\xA3\x20\x01\xE5\x07\xEA\xAF\x40\xF3\xDB\x12\xCF\xD9\x79\x47\x5F\xAF\x16\xD2\x97\x42\x63\x0B\xD3\x67\x78\x27\x50\xAB\xC4\x76\xA6\x5C\x07\xC9\x16\xCA\xAF\xC5\xA3\xE2\xDC\xE4\x3C\xAA\x33\x21\x96\x55\x60\x5B\x77\x1F\x84\x16\x92\xCC\x0E\x22\xEE\x06\xC1\x2A\x40\x47\x22\xCE\xAF\x2B\xC3\xCA\xF3\xFC\xE9\x4C\xE7\x83\xD0\x7A\x3D\x97\x9A\x5F\xF1\x15\xE8\xC7\x14\xA3\xA1\x1A\xFF\x33\x78\x94\xAA\x44\x42\x75\x2C\x17\x64\x91\xE9\x50\xC1\x48\x2C\x15\x04\xF7\x1B\xFC\x6A\x04\x34\x9A\xC0\xFC\x91\xE5\x63\x14\x58\xA8\xD4\x5D\xF9\x4E\x1E\x3D\xE7\xDC\x01\xB3\xC9\x68\x5B\x09\x18\x70\x92\xE9\x06\x38\xF9\x14\x1B\x49\x5C\xDB\x48\xFA\x28\x03\x71\x2B\x5B\xB1\x03\x3A\xFB\xEA\x37\x78\x0D\xC9\x5A\x93\x84\x65\x62\x08\x81\x20\xE0\x30\xA2\x1A\xDE\xD6\x19\xE7\xA0\xD8\x6A\x9B\x09\x27\x22\xC2\x36\x29\x98\x7F\x02\x49\x5B\x47\x90\xF8\x29\xFE\x77\xD7\x5A\x93\x7B\x4D\xE7\x8C\x35\xEE\xCE\x66\xE3\xB0\x03\x77\xAD\x79\x73\xF9\xA2\x37\xDB\x75\x02\x13\xC2\xEE\x72\x10\x5C\xB4\xE4\x5E\xDB\x11\xBE\x2B\xA5\xBA\x68\x12\xB1\xEF\x64\x84\x44\x16\x72\x5F\x4D\x58\x11\xE0\x3C\x06\x9C\x27\xAB\xC3\x8F\x4B\x25\x1F\x55\x17\x68\x8D\x07\xDD\x13\x26\x25\x93\xCF\x80\xC2\x8E\x84\x7E\x12\x30\xD2\x90\xC0\x0C\x93\x76\xAF\x40\x8C\x38\x76\x4C\x78\xF6\x65\x3C\x7E\x6E\x59\xFB\xB4\xAD\x3E\x7C\x95\xC3\x25\x17\x3F\xFD\xAD\xD0\x93\x17\xA6\xF9\xAF\x67\x9A\xC9\xF6\x45\x38\xD2\xDC\x1A\x8D\xD8\xAC\x35\x26\x8C\x98\x77\x6A\xB3\xDD\xB8\x80\x5A\x82\xED\x69\x60\x4A\xB4\x4D\x82\xEB\x14\xBF\x62\x8D\xAB\x0C\xFE\x5F\x8C\x26\xDB\xD1\x54\x93\x39\xA9\xFA\xB7\x57\x3B\xBD\x2E\x6C\xF8\x14\x88\x5C\x3B\xBA\x3A\xE6\x92\x86\x32\x00\x54\xBF\x2D\xBE\x86\x52\xA8\x30\x79\x3E\x4E\xE2\xE5\xE4\xC2\xB6\x38\xC9\xEA\x09\x1E\x3A\x55\x87\x30\x42\x87\xD1\x88\x7F\x58\xA5\x3E\x71\xBE\x19\xBA\x80\x58\x65\xD8\xA3\x8A\x71\x48\x0A\x9E\x35\xBE\x3B\x76\x0C\xBB\x38\x56\x3C\xAA\x1C\x68\x46\x93\x20\x89\x75\xA7\x7C\xE5\x5F\x34\x3A\x1B\x00\xA3\xCB\xB8\x88\x5B\x0D\x59\x16\x66\x72\x13\x44\xAF\xA2\x48\x4B\x47\x89\xE3\x07\x2C\x1B\xB5\x02\x2E\xED\x36\x59\xBD\x89\x29\x9F\xCC\x90\x65\x1D\x1B\xFA\x4D\xDB\x58\x49\x6C\x07\x51\xDB\xC7\x84\xE1\xF1\x8E\x26\x30\x5E\x6B\xE2\x7E\x03\xA7\xBD\xCC\x76\xD6\x67\xDB\xD6\x29\xA7\xEC\xD8\x6A\x9B\x8C\x34\x65\x6A\x93\xB8\x26\xA3\xD4\x6C\x10\xFB\x29\xFE\x77\xD7\x5A\x33\xF1\x1A\x26\xC4\xB2\xC4\xD7\x9C\xDB\x3B\xEE\x59\x36\x86\x4C\xB2\x8B\xBB\xE0\x76\xCC\xBC\xDA\x39\xDE\x3C\xD4\xFB\x10\xA7\xCC\xB2\xD2\xF9\x4C\xF2\x0A\xD1\x99\x75\x70\x6C\x00\xC9\x45\x06\x6C\x54\x98\xE5\xDA\xFE\x3E\xE8\xCD\x96\x72\xAA\x9B\x99\x84\x01\xB3\x94\x0F\xF2\xA3\x89\x24\xC6\x15\x5C\xA0\xBC\x09\xC2\xC2\x86\x85\x1B\x71\xF6\xB3\x68\xB3\xB1\x48\xD2\x01\xF9\xD3\x0E\x2E\x92\x60\xEB\x48\x58\xA4\xAC\x90\xE0\x7B\x4C\xF9\x68\xAD\x89\x7A\xCA\x47\x03\xD8\xDC\x06\x8F\x65\x44\xF9\xC8\xDB\x96\x88\x6F\xE9\x6E\x75\xD4\x2C\x61\xB1\xF8\x29\xFE\x77\x17\x4E\xA2\x66\x44\xD5\x20\x2D\x22\xEC\xFE\x90\xF8\xB8\xDD\x1A\xBA\x8A\x75\x64\x82\x67\x5B\x0B\xB9\xB5\xC9\x3C\x2C\x9A\x80\x6C\x90\x3A\x41\x26\x60\xA8\x50\x33\xB3\x59\x4E\x51\x30\x9E\x03\x47\x06\x90\xC1\x9D\xDC\x0B\xDC\xFF\x02\xF7\xFF\xCD\xE5\xFE\xFF\xD5\x11\x7C\x2D\x43\x2C\xD3\x9F\xE3\xA0\x3A\xB4\x66\xD5\x79\xC1\x28\xFF\x41\xD5\x7D\xFC\x70\xFF\xF1\xA9\xFE\xE3\xD3\xFD\x47\x75\xA7\x4A\x47\xC9\x0B\xF1\xC7\x27\x54\xEB\xC9\x9F\x47\x40\x42\x09\x4F\xA0\x71\xE0\x3C\xED\xDB\x67\xD7\x1A\xCA\x73\xED\xB6\x1F\x7F\x98\x60\xF5\x28\x35\x07\x6E\xBB\x77\x84\x0F\x4F\x90\x33\x53\xCB\x98\x8A\x78\xBC\x79\xFC\xE1\xD3\xEF\x9C\x3E\xD4\xD8\x93\x16\xF0\xF4\x70\x7A\xFA\xED\x6C\xE6\xA1\xE6\x39\x47\xC6\x49\xBB\xCE\xB0\x2A\xEB\x66\x15\x0C\x91\xE3\x96\xD6\x9B\x6D\x5F\xB5\x8F\x9F\x5E\xBD\xF2\x0F\x46\x2F\xF8\x5B\x64\xB2\x75\x38\xBE\x44\xBD\x1A\x41\xDC\x90\xCA\x41\x32\xE3\x6D\x18\x77\x63\x5A\x07\x83\xDF\xB1\x36\xE0\xED\xF9\x28\x6F\xCF\x47\xF8\xDB\x2A\xBF\x53\xF1\x3B\x05\x53\xA6\x98\x69\x13\xF6\x6B\x21\x3D\x58\x0B\x69\xD7\x42\x05\x71\x3F\x88\x44\x6A\x91\x1C\x53\x47\xB8\xC8\xEA\x30\x8F\xE4\x1F\x38\x86\xC5\xA4\x35\xA7\xC5\xAF\x95\xA3\xB4\x29\xF1\xC6\x63\x7F\xD0\x43\xC3\x30\xBA\x72\x1E\x2C\xC8\x05\x9E\x97\xBC\xE2\x63\x9B\x66\x8B\x3C\x05\x91\xE3\x02\xB8\xA7\x54\xFE\x67\xC6\xEF\x16\x0C\x2B\x23\x17\xCF\xE3\xA3\x22\xA1\x3B\x5A\x7E\xEA\xE6\x9F\x0E\x10\x9F\xC9\x02\xF5\x4D\xD0\x4F\x41\xE5\x1E\x02\x53\x13\x5F\xA6\xC1\xF3\x27\x60\x2E\x53\xE1\x57\xF4\x5E\xC5\x94\x5E\x60\xE6\xB5\xD9\x77\xBA\x6C\x2E\x5D\x52\x1B\x2B\x01\xE9\x6C\xC5\x38\x4E\xA9\x95\x05\x06\xB4\xAD\x19\xEE\xB1\x19\xBC\xFA\x8A\xFC\xC0\x2D\xAD\x9B\xE3\x01\x1B\xFB\xF8\x22\xE4\xEC\xD5\xF0\x74\x75\xFE\x69\xFE\xB9\x54\xAF\x0C\x3C\x1E\xDC\xF8\x2C\xDD\x9B\xF3\x9B\xA8\x6D\x06\x8C\xDB\xFB\x1F\xD0\xB9\x88\x26\x3A\xE5\x0C\x6B\x5E\xD5\x13\x89\xC1\x2B\x68\x60\x3B\x66\xEB\x8C\x60\xFE\x77\xE1\x05\x13\x29\x59\x7A\x55\x2F\xE1\xE8\x80\xEE\x84\xC9\x87\xBB\x1C\x64\xE1\x3D\x53\xA2\x98\x4E\xEF\x29\xC5\x69\x20\x82\xF4\x2E\xBA\xC0\xD6\xE7\x4A\x4D\x70\x80\x90\xB4\x4D\xCA\x37\x2B\x9C\x05\x95\xAE\x06\x94\xD7\xF5\x12\x16\x6B\x03\x9A\x05\x69\x0B\xCB\xEB\xE6\xBE\xA6\x62\xEF\xAC\x66\x05\x7F\x39\xE4\x93\x2D\x0A\xC6\x1C\xEE\x7C\x87\x97\x9C\xD2\xDA\xEA\x1C\x8A\xD2\x78\x53\x1F\x86\x0A\x0E\x8D\xD3\xBE\x34\xAB\x21\x33\x4C\x6A\x8C\xD1\x26\x87\x25\x3F\x7D\x10\x0E\x7B\xBD\x71\x89\xFA\xAF\xF1\xBD\x22\xC9\xE5\xF5\xD5\x05\x59\x63\xCE\x96\x74\x6D\xBD\xD2\x25\x12\xE1\x83\x25\x81\x1C\xF2\xC9\x8B\x07\x00\xD8\xD3\xFA\x10\x53\x80\x3A\xFC\x50\xBB\x64\x14\x36\xBA\xB2\x6E\x1C\x64\x97\x38\xA3\x5B\x09\xCB\xC7\x94\x3E\x73\xA9\x2E\x39\x20\xC7\xB5\x4D\xB1\xC1\x50\x9E\xDD\x49\x87\x66\x61\x34\x03\x81\xB7\xE6\x49\x6F\x98\xF4\xE6\x39\x92\x7E\x9E\xEC\x87\xD6\xCD\x7D\x81\xE8\xFB\x0D\x96\x1B\x5B\x11\x1A\xED\x36\xD0\x43\xDD\x40\x65\xFD\x14\xB8\x31\x17\xB2\x5C\x27\x10\xA3\xD8\xF8\xE1\xA7\x07\x78\x5F\xBA\x3E\xCC\xB9\x18\xCE\xD1\x20\xA6\x6D\xA3\xF1\x40\x4D\x36\x2C\x19\xC1\x5A\x3D\xC9\x61\x02\x96\x79\x16\xB2\xB5\xA6\xBC\x74\xA6\x0F\x2E\x76\x8D\xE6\xB0\x5D\xE9\x75\x13\x41\xF2\xAA\x52\x43\x52\x17\xF6\x14\xB9\x38\x14\xE4\x58\x53\x00\xA9\x46\x05\xAD\x75\xCD\x55\x37\x29\x59\x3E\x1D\xB6\x2A\x2E\x56\x05\x85\x4D\xA6\xAD\xE4\x4D\xD4\x9C\x46\x31\x5D\x6B\x0A\x2E\xC1\x7A\x03\x49\x44\xCB\xAD\x06\x6A\x39\x7E\xA5\x4B\xAE\x2C\xBF\xFB\x2B\x03\x96\x31\x41\xB6\xD1\x00\xEB\x94\x1D\x66\xD8\xF4\xB6\x6E\xEE\xC3\x2E\x53\x57\xA9\x7F\x43\xA4\xB2\x68\x30\x42\x4A\xEA\x3A\x98\x9A\x40\xEC\x94\x92\x6A\x76\xEE\x3F\x13\x28\x21\xF3\xD5\xF6\xA5\xEA\xA3\x24\x11\x0E\xE7\xE1\x60\x4B\x6E\xB8\x72\xA9\x70\x38\xFF\xA2\x71\x76\xAA\xAF\xD8\xD1\x85\x51\x1F\x56\x6C\x71\x73\x24\x1B\x61\xC1\xB0\x63\xA9\xA0\x69\xD1\x75\x2B\x89\xD2\xE3\x2D\x61\x56\x1E\x69\xAB\xA7\xAE\x0E\x41\x9F\xD2\x3A\x64\x31\xBD\xD5\x42\x93\xB0\x85\x21\x95\xC1\xAE\x36\xE4\xB9\x94\x31\x76\xA8\xBF\xBD\x7D\x77\x93\x93\xA2\x71\x7A\x2A\xB9\x2B\x24\x1D\x22\xE4\x0F\x9F\xB4\x00\x0E\x26\xBE\x68\x45\x0D\x90\x6D\x24\xA3\x55\xE1\x0B\xBA\xE5\x44\x7D\xC5\xB5\x7D\x96\x13\x8E\xD0\x0E\xFB\x11\x45\x8E\x54\x35\xCA\x6C\x87\x4C\x1B\x12\x67\x50\x7A\x4B\x35\x8C\x1C\x21\xDB\x34\x99\xB9\x29\x37\xE2\x76\x2B\x66\x13\xFC\x7D\x9D\x93\x46\x06\x8D\xD9\x71\x72\x61\xDB\x27\xCA\xE3\x90\xDB\x28\x40\x90\xB9\xB6\xFA\xD8\x55\x81\x3D\xA2\x4A\x5D\x7F\x9D\xA3\xF2\xCF\x45\x3A\x9F\x76\x1B\x72\xA9\xFC\x6F\x7D\x72\x70\x41\x68\xF0\x34\xF0\x51\xC5\x7A\x3B\xC1\xCE\x3A\x5E\x26\x64\x43\x33\x72\xD1\x82\xAB\x62\xE7\x99\x9F\x8C\x2F\xB6\x60\xFD\x0F\xFC\xF0\xE3\x67\x2E\xFA\xF2\x32\x1B\xE0\xC5\xA6\x34\x6D\x1B\x57\x72\x1E\x9E\x28\x2C\x99\x98\x7D\xAB\x43\xF9\xAE\x92\x4B\x12\x51\x1D\xBF\x16\x1B\xBB\x9B\xB3\x5C\x92\x51\x9E\x41\x57\xEB\x04\x7F\x38\xCF\xBF\x13\x2E\xAB\xEA\x70\x59\xC3\x76\xCA\x99\x0D\x6C\x58\xA2\x9C\xFD\x6A\x60\xBB\x6E\xD8\x08\x43\xA7\x02\xAA\xCA\x61\x55\x2E\x07\x07\x89\x20\x1F\x6B\xB9\x45\x65\x64\x55\x35\x43\x19\x7C\xB3\x54\xFE\xF7\x3E\x39\x72\x25\x73\x67\x4B\x4E\xFB\x40\xEE\x6A\x1B\x21\x5F\x3C\x7D\x25\xF3\x53\x8A\xD4\xE3\xF4\xF1\x94\xDF\x54\x12\x27\xAD\x1B\x15\x12\xC7\xD1\x7D\x27\xB2\x83\xD7\x78\x6A\xB1\xA7\x20\x85\xAC\xA1\x54\xF1\xB4\xD4\x38\x19\x6E\x2D\xF6\xFB\x62\xFC\x0E\x14\x90\x9F\xE5\x94\x2F\x90\x5E\x28\x6D\x2E\x74\x60\x49\x2F\x41\xA5\xF3\x64\x00\x07\xE9\x16\x0E\xDC\x7D\x15\x03\x37\x0B\x06\x5E\x74\x03\x2F\x70\xE0\xE6\xA0\x03\x8F\x69\xE0\x05\xC4\x4D\x86\x03\xCF\x38\x6C\x8E\x06\x3E\xE1\x81\xE7\x33\x03\xCF\x61\xC2\x03\xCF\xA0\xB8\x50\x9A\xC1\xC0\x4D\x9E\x83\x25\xB3\x64\xFE\x1F\x53\x53\x4E\xCD\xC3\x03\x24\xF9\x31\xB7\xBB\xC0\xED\x11\x27\x3B\x75\x8D\xA4\x59\xA2\x96\x1D\x2F\x5B\x45\x47\x0D\xE6\xF6\x68\xC0\xED\x83\x83\x60\xB7\x8C\xFB\xE7\xDD\x4B\x97\xC6\x20\xD4\xAE\x07\xA1\x76\xAF\x6D\xC4\xEB\x31\xA1\x15\xB3\xC5\x0E\x0F\x09\x9D\x65\x1D\xE3\x10\xBB\xD7\x4B\xA2\x26\x05\xC1\x87\x4D\xF2\x8F\x84\x4F\x04\xD1\x1B\xB8\x3D\xA4\xDE\x16\x44\xEA\x98\xAB\x89\xB1\x1A\xF2\xFD\x48\x37\x90\x47\x42\x5E\x5C\x4E\xFC\x9D\xCD\x4F\x78\x3C\x33\xE1\x94\xF3\x88\x5C\xEA\x2C\x67\xCD\xA6\xCC\x90\x34\xED\x19\x36\xC8\x89\xC3\xF0\x2B\x79\x34\x39\x4E\xAC\x9D\xD1\x4D\x0E\x99\xD2\x65\xDA\x09\x26\x36\x96\xFC\xAD\x5E\xD7\x05\x4D\x7B\x0E\x45\x53\xE2\xB4\x97\x38\xED\x05\x27\x9D\x5C\xE2\x7C\xD9\xCB\xE3\x77\x60\x19\x96\x78\xDA\x4B\xC8\x2F\x94\x2E\x17\x3A\xC8\xB4\x23\x15\xEB\x6A\x96\x10\x10\x43\xB5\x85\x43\x37\x5F\xD5\xD0\xCD\x41\x86\x6E\xBF\x5E\x43\xB7\xFD\xD0\xF3\xDC\x17\xB2\x45\x85\xB4\xE8\x3E\x78\x5D\x92\x89\x41\xD0\xBE\x57\x7A\xB4\xEF\x43\xA6\xC3\xFB\x5F\x01\xF7\xDE\xB7\xC3\xA1\x80\xF6\xED\xBC\xDE\x06\xE7\xED\x79\xDA\x70\x3B\xB4\x6F\xBE\x31\x39\x04\x2B\xEF\x78\x5B\xB3\x22\x97\xC8\x2B\x83\x4B\xE4\x95\x9F\x22\xDF\x03\x4F\xB9\xFB\x34\x59\xD8\x50\xD0\xAE\x55\x5F\xB8\x3A\x40\xFB\x96\x2A\x49\x00\x30\xDA\x77\x00\xF8\x07\x3E\x03\xCB\x0A\x60\xB6\x37\x03\xB4\x6F\x62\x7E\x22\xAB\x64\x3E\xEA\xD1\xBE\xE9\x28\x9E\x75\x68\xDF\x91\xB8\xDB\x1A\x9A\x18\xC1\xC9\xE3\x86\x9B\x6C\x8B\xB8\x21\xDB\x0A\x8E\x12\xA3\xE5\xA1\x3B\x20\x7D\x7E\x1C\xD1\x74\xD0\x45\x6A\x4C\xEE\x2F\xA8\x39\x4E\xE6\xD0\xBE\x27\x8C\xF6\x4D\x05\x7E\xD6\x75\x40\xB5\xAA\xB1\xF3\xA7\x5D\xBE\x83\xCD\xBB\x8B\xF9\x00\xE0\x4D\x5A\x87\x9C\x76\x29\xAA\xCE\x42\x34\x7B\xDA\xA5\x5B\x87\xE0\x30\xCD\x3A\x48\xC5\xA1\xD2\x77\x97\x3A\xF7\x9F\x9A\x29\xBA\xDC\xD1\x4F\xF6\x44\x39\x7C\xFF\xD2\x27\xC7\xE5\xA4\x0B\xCE\xF7\xB0\x45\x15\x3B\x2C\x59\x86\xB1\xFB\xC0\x27\xE7\xFA\x80\xED\x93\xFE\x58\x81\x79\x15\x7F\x72\xA4\x68\xF1\x7E\x4C\xC3\xA4\xD4\x55\x60\x83\xD7\x96\xD9\x28\xB5\xFF\x62\xDF\xC7\x20\x04\x9F\xE7\x5E\xA9\xAE\x57\x6A\x97\x5E\xA9\x51\xAF\xCE\x72\x32\x3E\x53\xFD\xE7\x81\xD1\xE2\xB9\x4F\x1D\xF6\x6E\x9F\x79\x03\x37\xEE\x10\xFE\xC9\x3F\xCC\x46\x3E\xF2\x16\xE2\x1B\x71\xEB\xA7\x0F\xD6\x91\xD7\xB5\x91\x8C\x72\x6A\xDD\x1C\xC1\x2A\xDF\xFD\xF4\x70\xE3\x12\x74\xD1\xE0\x31\x6A\x39\x51\x30\xF9\xCA\xE8\xB6\x89\x97\x8C\xC2\x23\xAB\x3E\xA6\x80\x32\x75\x2A\x36\x4B\xE9\x75\x73\xB4\xE1\xE4\xB4\x47\xF1\x57\xB0\xD5\xEF\x52\x58\x0C\xC3\xEA\xD8\xB9\xB9\x18\xD8\x65\x92\xDE\x25\x8F\xE0\x46\xC9\x61\x26\x05\x3B\x3B\x19\xEC\xD0\x47\x8B\x3A\x40\x93\x82\x7D\x15\x7F\xEA\x29\xCF\xBE\xEF\x34\x1D\x49\xB7\xB3\x81\xA5\x3C\xC4\xA1\xBB\x83\xFE\x8D\x2F\xF4\x49\xBE\xDE\x27\xB8\x92\x69\x97\xAB\x6A\xDA\x2E\xC5\x46\x69\xAB\x74\x9C\x53\x46\xA4\x26\xF1\xF6\xB2\xD7\x0F\x82\x45\xDD\x34\x39\x53\x3A\x0E\x59\x4D\x38\xC1\xA7\xCC\x85\xA4\x6A\xA7\xAC\xA8\xEC\x87\x9D\xE4\x10\x92\x5F\x19\xF1\x10\x44\x5D\x86\x64\x7B\xB1\x11\x3E\xA5\xA8\x02\x49\x1D\x7C\xD8\x95\xCC\xAA\x26\xB4\x81\xDA\xFF\xBF\x19\x4E\x5B\x4C\x49\x29\xF7\xEF\x01\x36\x4E\x28\x09\xBF\xFA\x07\x33\x39\x92\x20\xDA\x42\x12\xA5\x82\x95\x6E\xC9\x5D\x31\x80\x95\x7E\x36\xD6\xC9\xB4\xCF\xF6\x60\xE8\x76\xF2\xA8\x88\x50\x99\x8C\x82\xC1\xFF\x25\x81\x6C\xC9\x91\x9D\x67\x3B\x3F\x0F\x32\xC6\xD2\xC6\x45\x27\xFC\xE8\x98\x52\xA5\x03\x83\x7C\xA4\xB1\x66\x9C\x18\xAA\xF9\x28\x05\xC2\x21\x1F\x19\xAF\x20\x0D\x7C\xA4\xF3\x99\x49\xE2\xA3\xFE\x84\x63\x6F\xD9\x4C\xE2\x14\x5B\x49\x26\xC7\x94\x43\xFE\x41\x45\x97\xA0\xAF\xC1\xB2\x39\x81\xB6\x3B\x4A\xAC\xE8\xDD\x65\x70\xD5\xBF\x93\x3D\x64\x32\x04\xB5\x7E\xE7\x78\xDF\xCE\x5E\xAE\x0D\x76\xE9\x6E\x66\x53\x8B\x27\xFF\x94\x6E\xD0\x7D\xDA\x36\x79\x9D\x42\xD6\xD9\x1A\x50\x9E\xE7\xFE\x8D\xAD\xD7\x6F\x40\x51\x4F\x33\xB2\x5B\xDD\x54\x31\xBB\x99\x7E\xF9\x86\xDD\xC2\xDD\x91\x42\x73\x3A\x68\x4D\xC7\x39\x92\x50\x1F\x38\xA6\x34\x27\x26\xC5\xFD\xCA\x52\x0E\x00\x42\xD2\xE2\xA8\x08\xFC\x04\xE9\x19\xDC\xB9\x29\xD3\x36\xFB\xBE\xF2\xA9\xDB\x70\xD4\x3E\xA9\xAE\x1E\xDA\x3A\x91\x69\x29\xF6\x98\x16\xFB\x35\x9A\x96\x04\x2C\x4C\x7C\x4C\xA6\x19\xBD\xB5\xD6\x64\x34\x51\x38\x33\x59\x98\xA8\xBB\xBE\x59\xA7\xA9\x38\xF8\x34\x99\x5D\xA7\x29\xCF\xF3\xFF\x10\xE9\x6C\x60\x2A\x95\x88\x6A\x6F\x44\x4F\xD2\xE4\xC3\x88\x1F\x96\xAC\x52\x86\x21\xE6\xA5\x23\xBD\xA7\xEE\x8E\x91\xE4\xE2\xAB\xB5\x78\x86\x98\xD6\x3F\xAB\x08\x4C\xD9\xE5\x64\x12\x62\x43\x40\x38\xBB\x28\x4E\xFA\x5F\x34\x31\x2F\x71\x4A\xCF\xD0\x2F\x71\x3E\xA9\xCB\xAE\x99\xD8\x53\x43\xFD\x29\x44\xBF\x9B\x76\xC9\x38\x0A\x4E\x60\xDE\x89\x99\x77\xA8\xA6\x9E\x77\xE2\x31\xEF\x30\xFA\x32\xEE\x26\x29\x4F\x72\xDE\x7B\x8D\xE8\x96\x5D\xC0\x1D\x87\x80\x91\x33\x38\xA3\x77\x27\xDE\x5C\x22\x2F\xE5\xC9\xD9\x26\x5B\x6B\x9C\x9F\x5C\x22\x81\xB7\x63\xCE\x36\xE9\x1A\xA5\x89\xA8\x2E\x53\x3A\x90\x94\xE2\xEF\x23\x30\xFE\x53\x7A\x8B\x24\xD3\x0D\xBD\xC5\xD2\x89\x70\x8B\xFD\xA7\xD4\x59\x30\xFE\x3E\xFE\x7D\x72\xFE\x92\x38\xE7\x55\x9C\xE8\xB5\xA0\xC3\x2B\xCA\xEC\xE9\x83\x5B\x1E\x3C\x5D\xAB\xB8\xAD\x33\x10\x3D\xB8\x06\x93\x4B\xCD\x44\xA6\xBA\xF7\x72\x17\x9A\x39\x11\x8B\x8E\xC4\x22\xA1\x03\x71\xCA\xFB\x26\xF1\x53\x9A\x18\x48\xEE\x5A\x83\x09\x0F\x3A\xB0\x03\x96\xEE\xB2\x4C\x6F\x04\xBB\x7B\x85\x47\x53\x9E\x9D\x94\xFC\xCB\xC0\x91\x7E\x48\xE1\xD1\xCB\x74\xAF\x99\x82\x81\x0C\xAC\x5F\x6E\xAB\x8F\x87\xDB\xC0\xC1\x6B\x71\xFF\x1A\x64\x7E\xC7\x5C\xC2\xC2\xC7\xD4\x72\x93\x50\xBE\x5C\x77\x09\x52\x88\xD6\x04\x21\x24\x24\x6E\x71\xDE\x9E\x2D\x83\xDE\x4D\x56\x0D\x48\xAB\x8F\x70\xE4\x2B\x73\x5B\x3C\xE2\x36\x64\x98\xA0\xFC\xF6\xDC\xC6\x3A\xBB\x70\x1B\x39\xDB\x61\xC7\x3B\x73\x9D\xCB\x7F\xDE\x68\x33\x1F\x0C\xC9\xB8\x6B\x2E\xC4\x23\xB9\xBC\x7A\x26\x78\x4B\x83\x22\x54\x38\x72\xB2\xE1\x0B\x13\xD4\xD2\x0D\xE8\x3E\xF7\xFF\xD3\x0B\xEF\x2A\x07\x37\x98\x1F\xEC\x40\x6A\x9E\xE3\x0D\xCD\xBA\x79\xC5\xD7\xF5\x7A\x06\x67\x90\x86\x0B\x83\xC0\xC0\xBC\x20\x48\xC7\xEA\x69\x5A\x30\x7F\x31\xD1\x87\xA6\x62\x73\xE3\xB3\x90\x6D\xC3\x0C\x45\x38\x7B\xBE\xBB\x3D\x59\x6D\x52\x9F\x89\xF4\x0D\xF6\x2C\xBD\x6E\x6E\x39\x43\xAB\x24\x06\x57\x27\x32\xF3\x1B\xA5\xE9\x7E\x49\x29\x45\x14\x29\x2A\xF4\x5B\xC6\xB6\xDF\xCC\x9B\x6D\x14\x83\x99\xA5\xB0\x32\x05\x19\x47\xDA\xF8\x2B\x67\x59\xB7\xB9\xC5\x6B\xC8\x65\xA9\x53\x58\x4A\x9D\xB1\x49\x7C\xE2\xF5\x5D\x92\x77\x3B\xCE\xB1\x89\x3E\xCA\xC9\x12\xD6\xB4\x64\x77\x2A\x20\xC5\xDA\x19\x43\x0C\x22\x70\x0D\x11\x88\x12\x11\xE4\x81\xC3\x06\x82\x8C\x63\x19\x03\xCE\x18\xE5\xB3\xAA\x7E\x8F\x0E\xAF\xE3\x27\x05\xCD\xC2\x31\xF5\xC4\xBF\xBC\xBA\xA3\x82\xBC\x76\x50\x50\x26\xF5\x57\xF8\xC9\xC5\x7B\x07\x2B\x20\x44\xC4\x21\x25\x0B\xC2\x5C\x90\x7C\x56\xDE\x9E\xA7\x7A\xBD\xAA\x97\xE4\xBE\x69\x99\x5C\x4A\xD7\x4D\x5A\x2F\xFB\x29\xD3\x6D\xC9\x9B\xED\xA6\x82\x25\x7F\xE3\xC6\x8D\x1B\x76\x0B\x96\x36\xD6\x24\x1C\xAC\x60\xAA\x55\x62\x7C\xC5\x3D\x8B\xB7\xD2\x0C\x6B\xAE\xB8\xE6\x15\xAF\xEA\x43\x14\x4D\x81\xB5\x96\x7E\xCA\xA6\x81\x15\xAC\xF5\x30\xAC\x84\x5A\x57\xBA\x5A\x0F\xD1\x09\x1F\x0E\xF7\xB5\x12\xFA\x19\xAA\x9A\xD5\x27\xC2\x2E\xCA\x58\x5A\xB0\x04\xCB\x62\x4B\x97\x96\x53\xE6\xED\x8A\x9E\x1F\x82\x15\x28\xE5\x79\x96\x93\x6D\x9A\xAE\xBB\x86\x74\xCD\x4A\xBA\x39\x10\xFA\x2C\x51\x6B\x52\xC1\x21\x24\xEA\x21\x09\x6C\x92\x46\x0B\xCA\xDE\x15\x82\x9D\x5C\x5D\xC0\x12\x8D\x32\x66\xD7\xCD\x8C\xF6\x36\xE4\xAF\xB3\xA5\xE5\x3B\x6E\x40\x1E\x09\x4F\x07\xAC\xCB\x86\xBD\xC0\xBC\x1D\xD3\x32\x1B\x13\x89\xBA\x3B\x18\xDD\xD6\x39\x5D\x34\x20\x07\x4E\xEC\x29\x26\xD0\x44\x12\xD1\x5E\x39\x5B\xEA\xC0\xAC\x49\x60\xD6\x09\x15\xE5\x28\xB9\x9C\x99\x95\x79\xD5\x12\xA8\x25\xB0\xFF\xBF\x21\xBF\xEA\x09\x64\x81\x7C\x5A\xE2\x4D\x49\x81\x17\x77\xE3\xCC\x4F\xDB\x11\xBF\xF2\xDD\x92\xDC\x19\xD4\x28\x8D\x19\x09\x26\xED\x8C\xF3\x54\x0B\x07\x21\x0E\x08\xDD\xDF\x96\xA6\x4C\xA6\xE1\xA4\x22\x0D\x71\xB1\x74\xFC\x67\x03\xFF\x65\xE4\xA6\x04\x59\xE0\x94\xAC\xE3\x94\x98\xF9\x4F\xDC\x65\x82\xD3\xA1\x54\x48\xB1\xCC\x19\x58\x9E\xFF\x26\x3B\xC3\x69\xB0\xED\x1E\xB3\x6F\xC3\xEC\xA7\x14\x96\x11\xFC\x39\x79\xB2\xA9\x83\xF6\x0C\xDD\xF2\xC9\x3C\xCB\x14\x66\x7C\xDB\x45\x7E\x8E\x00\x93\x3A\xE6\x84\x8E\x38\xF7\x05\x6A\xF2\x24\x70\x76\x11\x5A\xBB\xCE\xBB\xA6\xEF\x07\x98\x7B\x73\x90\xB9\x1F\x08\x2A\xE9\x27\x2A\x70\x7A\x2B\xC8\xE1\x4F\xD2\x10\x9F\xC8\x45\x0E\xBB\xDA\x84\x2D\x81\x95\x32\x2F\x82\x38\x08\xE1\x64\x3C\x9E\x6E\x34\x96\x4E\xE7\x71\x37\x2A\x1E\x85\xAD\x23\xCA\x2E\xD7\xA4\xFD\xC8\x18\x29\x84\x4E\xB7\xD8\x5D\x4E\x11\x9F\x90\x35\x8B\x25\xA1\xBF\xC2\xBE\xF4\x91\xDC\x91\xE3\x10\x27\x61\x88\x29\xBD\x43\xAC\x89\x72\x9D\xB3\x51\x48\xE3\x14\x85\xDA\xD6\xBD\x44\x36\xC3\x7C\x67\x05\x24\xA4\x59\xDB\x86\x8E\x94\x1C\x06\x92\x02\x1D\xE3\x54\x33\x59\x20\x93\xE9\x4A\x2B\x0B\xC6\x38\x64\xE9\x49\xE0\x9E\xD1\x93\x85\x32\xD9\x3E\x47\x99\x9C\xA0\xE4\xCC\x58\x72\x16\x22\x90\x48\x26\x27\x41\x26\x27\xFB\xC9\xE4\x64\x46\x26\x27\x79\x2F\xED\x67\x65\x72\x1A\x64\x72\xBA\x9F\x4C\x4E\x67\x64\x72\x3A\x27\x93\xB3\x39\x99\x2C\x2D\x27\xBB\xC9\x64\x0E\xE4\x0C\x32\xB9\xA7\x6B\x3A\x27\x93\xD3\xDD\x64\x72\x36\x27\x93\xED\xAC\x4C\x16\x61\x93\x06\x99\x9C\x8F\x64\x72\xBA\x8B\x4C\x9E\x01\xEE\x96\x49\xE3\x9F\xA4\x58\xD0\x2A\x2E\x74\x0F\x16\x28\x16\x66\xA4\x5A\x44\xCC\xD5\x58\xDA\x74\x5C\x1D\xED\xA1\x61\x60\xD1\xC0\xD4\x1C\x62\x1D\xE3\xAA\xA9\x13\xC8\x83\xBD\xAD\xCF\xF4\xCF\x76\xA3\x34\x00\x07\xB4\x9D\x08\x4F\x47\xBC\xCD\x76\xAA\x20\xBF\x53\x94\xDF\x13\xC9\x2A\x39\x60\xFB\x94\xA6\x2B\x19\x4C\x4A\x2F\xBF\x93\x5D\xE4\x77\x30\x51\x13\x8E\x5F\xE0\xD5\x94\xBC\xD8\x21\x0D\x5C\x95\x0E\xE4\x37\xF1\xAA\x84\x07\x90\xB2\x3F\x92\xDF\x74\x2A\x10\xF9\x9D\x8A\xFC\x36\x7B\x70\x8A\x09\x9C\x92\xEC\x26\xBF\x8D\xC8\xEF\x74\x28\xBF\xD3\x20\xBF\x23\x94\xDF\x59\x90\xDF\xB9\xC8\xEF\x8C\xA4\xD5\x62\x79\x37\x92\xDE\x33\x2C\x61\x69\x92\x77\xD1\x37\x17\xB2\xC5\x58\xD8\xED\xC5\x16\x03\x61\xC7\xDD\x1E\x8B\xF3\x67\x68\xC4\x9F\x9F\xE8\xC3\x33\xE2\x3C\xC8\x6F\xD7\x8D\x47\x58\xA4\x8E\x38\x05\x2E\xA9\xDA\x60\x09\x06\x25\x03\x87\x3B\xCE\xC0\xBC\x68\xC2\xDD\x19\x39\x1B\xE1\x19\x09\xB7\x18\x64\xAE\x62\x81\xE0\x2C\x59\x3C\xE6\x50\xD6\x4E\x92\xD2\xA0\x8E\x2A\x53\x37\xFF\x34\x5B\x24\x40\x0D\xC4\x2D\x64\xFB\xC8\x50\xC2\x83\x5F\xA2\x2E\x4E\x06\x02\x74\x59\x1C\xA7\x2A\x0A\xD5\x46\xA6\xAC\xFC\x14\x3F\xB8\x66\x19\x99\x72\x05\x96\x03\x53\x2E\x77\x4C\x59\x92\x19\x05\x56\x7A\x51\x27\xAE\x36\x0E\x6B\x5E\xE1\x9A\x0F\x79\x55\x1F\xEE\x80\x58\x96\xF8\x40\xEC\x9A\x43\x58\xEB\x2A\x1C\x0A\xB5\x1E\xEA\x6A\x3D\xCC\x97\xA5\xAB\x7D\xAD\x6E\x17\x01\x5A\xC2\x32\x54\x22\x20\xA5\xE5\x09\x33\xDD\x0A\x3D\x3F\x0C\x87\x60\x49\x9E\x8B\x59\xDF\xEB\x7A\x79\x44\x5B\x37\x5A\x16\xCB\x5E\xBC\x04\xB1\x82\xC3\x48\xD4\xC3\x63\x01\x4A\x53\x51\x06\x01\xBA\x5C\x6A\xAF\x96\x07\xFA\x60\x32\xD6\x07\x13\xD1\x07\xD3\x4E\x9E\x24\x43\x79\x92\xA0\x3C\x11\x75\xD2\xB1\x1F\x82\xF0\x43\x52\xCA\xA2\x96\x5E\x26\x03\x89\xE2\x16\x4A\x14\x83\x1A\x4B\x47\xE6\x3C\x90\x99\x62\x81\x32\x48\x02\x99\x93\x8E\xCC\xEC\x0F\x0E\x02\x5D\x46\x16\xB8\x91\x44\xC9\x20\x81\x5C\x24\x4A\x22\x12\x85\x5D\x5A\xFA\x4E\x0D\x49\x97\xCB\xFE\x49\x93\x5F\x76\xFE\xCA\x9D\x44\x31\x90\x63\x2D\xBD\x48\x4C\xC2\x2E\x63\x69\x97\x21\xC6\x34\x92\x43\x31\x39\x90\x12\xC8\x89\x78\xD9\xB3\x44\xD3\x77\xCA\x08\x97\x92\xC1\x0B\x25\x81\xB3\xA2\x28\xB9\xBD\x4E\xAB\x8E\x8A\x0A\x40\x74\xAF\x04\x1A\x94\x1C\x6C\x3F\x23\xA9\x61\x96\x73\xA6\x3D\x35\xB3\xC1\x83\x57\xD8\x77\x0A\xBA\xEF\x86\x41\xC6\xAC\x9A\xA1\x79\x48\x1E\x12\xC2\x4E\x8E\x32\x62\x38\xAA\x9C\xA5\x82\x6E\x39\x60\x77\x76\x78\x61\xFA\xE8\x5C\x93\xF0\xB0\x12\x19\x56\x12\x1C\x0A\x92\x7E\x58\x7A\x6E\x58\x09\x15\x1D\x0F\xAB\x3B\x67\x2D\x8B\xEA\xF7\xD7\xD1\x76\x10\xBD\x9F\x21\xD6\xF8\x93\xCE\xA2\x11\x3A\xB3\xDA\xD8\xA1\xCC\x15\x3B\x07\xB9\xCC\x2B\x81\xB8\x65\x0A\x53\x8E\x35\x16\xBF\x96\x21\xCD\xE9\x32\xDC\x51\xB2\x6B\xBA\x44\x63\xE5\xB9\x31\xBB\x19\x11\x58\x1F\xEA\x42\x11\x50\x73\x10\xE6\x1E\x3F\x59\x28\x6F\x93\x83\x09\xDB\xB2\x17\xB6\xAC\xF7\x92\x8F\x64\xA7\xAD\x4E\x82\xB6\x3A\xD9\x5B\x5B\xCD\x58\xD8\x56\x73\xC2\xD6\x2E\xD2\x56\x6D\xD0\x56\xED\x7E\xDA\xAA\x9D\xD1\x56\xED\x9C\xB0\x25\x64\x05\xC8\x06\xDA\xEA\x58\xD8\xCE\x6B\xAB\x96\xE1\x06\x44\x5B\xED\x89\x6A\xE7\xB4\x55\xBB\x9B\xB6\x4A\x16\x76\xDA\xF7\x82\xB0\x5D\x3A\x53\x5A\xD4\x46\x5A\x3E\x78\x72\x7C\x3F\x58\x94\x22\x4E\xB6\x76\xE2\x6B\x72\xDE\x70\x61\x15\x1A\x02\xB4\x1C\xAE\xBB\x85\x1C\x6F\x07\x2E\x6A\x0B\x84\x88\xED\x85\xC8\x2E\x56\x84\x45\x42\x64\xB0\xDA\x66\xD5\x4F\xB7\x8B\xFA\xE9\xC6\xDB\x85\x1B\x6E\x17\x6E\xB0\x5D\xD8\x59\xA3\x3E\xD1\x39\xED\x36\xB5\x7E\xBB\xB0\xBB\x6C\x17\x21\xF4\x9A\x90\xBF\x02\xA3\x60\xA5\x4D\x01\x2E\x30\x8A\x1B\x6C\x17\x44\x83\x42\xB6\x8B\x62\x76\xBB\x28\x70\x07\x93\xED\xC2\xC9\x76\x91\x8C\xF6\xB0\xF1\x4E\x9B\x84\x9D\xD6\xEE\xB6\x5D\x24\xB2\x5D\xC8\x7E\xE7\xC2\x76\x11\xF5\xDB\x85\x95\xD4\x16\xEE\x00\x3A\xA7\x09\xAE\x59\x96\x75\xCE\x88\xEE\x50\x69\xD7\xB0\x3C\xE1\x56\x26\xDC\x92\xCE\xE9\x18\x17\x40\xA6\x7C\x43\xDE\xE8\x75\xCE\x6E\xE6\x2D\xBD\x33\x33\xF3\x11\x01\x28\x9A\xB0\x2F\xD0\xEE\xC1\xFB\x44\xB7\x65\xFC\x35\xF0\x61\x90\xBC\x7F\x48\x54\x7E\x36\xFF\x96\xB6\x25\x77\xAE\x0C\x19\xA4\x67\xBB\xB4\x57\xE1\xF6\x32\x5F\x37\x47\x9A\x49\xA9\xFC\x1F\x0D\x2E\xFF\xF0\xC7\x7A\x92\x53\x30\x97\xD8\x3B\x26\x7C\xE2\x71\xF8\xEC\x28\xD8\xEA\xFB\x89\xFD\x2D\x27\xA8\x70\x60\xAB\xDF\xB9\x16\x24\x9E\xF4\x40\x7C\xDB\x33\xE0\x73\xC2\x5F\xA7\x05\x3B\x7E\xC1\x82\xFD\xB5\xB1\x60\x47\xB3\x16\x6C\x37\xB4\x60\x47\xDF\x90\x16\xEC\x60\xBD\x06\x13\xBC\xBF\x5E\x30\x61\xFF\xCD\x34\x61\xFF\x31\x0D\xF1\x97\x8A\xBF\x21\x26\xEC\x6E\x23\x48\xD9\x8D\xD7\x8E\x02\x89\x26\xB8\x11\x64\x33\x1B\x01\xFE\x88\x52\x24\x07\xBB\x29\x51\x05\x32\xEF\x16\x9F\x1D\x05\x23\x1B\xC1\x84\xA1\xED\x2C\x18\xD9\x08\x26\x39\x89\x0E\xEC\x01\x72\xC3\xD8\x70\x3E\xC1\x95\x65\x0E\x64\x38\x37\xCF\xB3\xE1\x3C\x7E\xC1\x70\x3E\xA2\xEB\xF3\x66\x38\x8F\x66\x0D\xE7\x6E\x68\x38\x8F\xF6\x31\x9C\x4F\xE6\x0D\xE7\x93\xDD\x0C\xE7\x93\x81\xE1\xDC\xEC\x6B\x21\x9D\xEC\x69\x38\x17\xB7\x4F\x36\x9C\x4F\x76\x31\x9C\xE7\x2F\x58\xCE\xBF\x85\x2C\xE7\x66\x91\x8C\x35\x5F\xB9\xE5\xFC\xB3\x34\xE2\xFF\x2D\xD7\xD5\xE8\x10\xD1\xEE\x69\x3A\x27\x02\xB9\xDE\xAB\x4C\x0E\xB3\x1C\x53\xC5\x66\x50\x16\xD1\xE9\x40\x44\x67\x28\xA2\xD3\x19\x11\x9D\x09\xBE\xA9\x41\x11\x3D\x11\xF1\x23\x22\x3A\x43\x11\x3D\x11\x11\x9D\x32\x3E\xA5\x85\x89\x88\x68\x16\x09\x7C\xB6\xA4\x3C\x0F\xD3\xB6\xB1\xFB\x5C\x69\x0E\xAC\xF2\x33\x57\x9A\xF2\x24\x5E\x2C\x99\xE3\x83\x58\x88\xF2\x85\x62\x19\x8F\x5F\x65\xC7\xE9\x65\xE0\xF4\x02\x39\x7D\x09\x8A\xC0\xE9\xC5\x2C\xA7\x2F\xCD\x89\x65\x32\xC7\x2F\xF5\x86\xFE\x6A\xDE\x4E\xBC\xBB\x91\xBF\xE2\x93\xF0\xCA\xFE\xE6\xF8\x18\x8A\x4E\xEC\x8E\xC5\xF2\x12\x3D\xAF\x60\x39\x58\x94\x07\xE6\xF8\x62\x44\xD4\xB1\x91\xA0\x08\x46\x02\xAC\x00\xF7\x15\xA8\xC6\x62\x79\xB4\xF8\xC0\xD6\x31\x14\xB3\x26\x79\x3B\xD6\x6F\xED\x9C\x49\xDE\x0E\x05\x95\x1D\x99\xE4\xED\x80\x11\xEC\x8C\x49\xDE\xEE\x6B\x92\xCF\x42\xA6\x65\x17\x6C\x2C\x62\x7F\x30\xDB\xCD\x04\x6C\x20\xB5\x1D\x98\xF8\x88\xD4\x13\x11\x55\x93\x59\x51\x85\x7A\x46\xB0\xB1\xD8\x81\x8D\xC5\x0E\x3A\x35\x6B\x63\xB1\x03\x93\xFC\xC8\x9E\x46\x1D\x0C\x36\x96\xA1\x31\xCD\x0E\xCC\x56\x62\xAC\xA4\xA0\xBE\x03\x29\xB5\xD9\xC0\x82\xA1\xE9\xFB\x01\xAC\x18\xF3\x4A\xED\x2E\x26\xF9\x8C\x0F\x2F\x9D\x49\x3E\xDB\xC7\x24\x6F\x7A\x9B\xE0\xBE\x16\xC0\x60\x1B\x92\xFC\x32\xEC\x3B\xDD\x19\x84\x86\xE6\x20\x33\x3A\x85\x99\x19\x3B\x50\x82\x7D\x4E\x7A\xCB\x4B\xDA\x59\x00\x77\x6B\x34\xE5\x46\x53\x6E\x74\xA0\x23\x73\xA3\xE9\x5E\x8D\x8A\x6A\x3C\xDB\xA8\x1D\x99\x7B\x3E\x47\x13\xFE\xBE\x4E\x52\xEF\x69\x68\x1F\x9B\x80\xF0\x08\x39\x73\xAF\xE9\x82\xAC\xB6\x2C\xAB\xCD\x48\x56\xA7\x8B\xD4\xE9\x54\xD4\x69\x07\x26\xC8\x6A\x51\xA7\x29\x4E\x61\x46\x56\xA7\x60\xE6\x64\x35\x53\xC7\x70\x64\xCC\x8C\xAA\x31\x2F\xAD\x6D\x90\xD6\x76\x56\x5A\xDB\x3D\xA4\xB5\xF9\x4A\xA5\x75\x1C\x12\x5C\x3E\x2F\xD2\xDA\x2E\x92\xD6\x36\x48\x6B\xBB\x9F\xB4\xB6\x33\xD2\x7A\xDE\x9E\xFF\xDC\xA5\x75\x6F\xCF\x2F\x46\x44\xB5\x73\xD2\xDA\x1E\x5C\x5A\x9B\x05\xD2\x5A\x54\x4C\xB3\x8B\x8A\x69\xC6\x92\xDB\x0C\x25\xB7\x19\x59\xC7\xCD\x80\x29\xCC\x8C\x75\xDC\xEC\x6B\x1D\xCF\xC0\x72\xE5\x63\xEB\xB8\x61\xC9\x6D\x02\xD9\xCD\x40\x72\xDB\x7D\x24\xB7\xE9\x24\xB7\x19\x48\x6E\x33\xE8\xD4\xAC\xE4\x36\x03\xEB\xF8\xEE\x92\xDB\xF0\x00\x4C\x90\xDC\x6E\x6C\x1D\xCF\xA8\xC8\xFE\x7A\x65\x16\xC2\xF4\xC5\x3A\xEE\x82\x75\x3C\x5B\x6C\x1D\x37\x73\xD6\x71\xF7\x1C\xAC\xE3\x9C\x5E\x28\xEB\xAD\xE3\x28\xC8\x2D\x0B\x72\xBB\x48\x90\xBB\xEE\xD2\xF2\x80\x57\x39\x46\xD0\x06\xC2\x45\x21\xF7\xDD\x84\xCD\xC7\x50\xCF\xD5\x48\xA6\xAA\xD0\x65\x43\x45\x9F\x9B\x20\xB7\x7B\x0B\x72\xDB\x0B\xF2\x5D\x1A\xDD\x45\x90\x8B\xDD\xFE\x31\x46\x6C\xEA\xE0\x16\x38\x3E\x82\x2F\x4E\xBA\x1B\x25\xDB\x2D\x98\x26\x7A\x95\xB0\xD3\x09\xB3\x1A\xAE\x9F\x3A\x9E\xD7\xC7\xD4\x61\x96\x77\x16\x4F\xAB\x46\x34\x22\xE3\x27\x67\x09\x92\x78\x26\x78\x42\xE3\x4F\xEA\x2C\xFD\x95\xD0\x89\xEC\x55\xA5\xA6\xF4\xF6\x10\xE1\x2B\xAE\x7B\xDD\x2C\x8E\xBD\xF8\x14\x43\xBE\x75\xAF\x53\xA0\xE9\x0E\x72\x81\xAB\x4D\x61\x99\x59\x63\x0A\x79\xF3\xBA\xB6\xDE\xD0\xEA\xF3\x11\x5F\xF0\x48\xCC\x11\x8E\x94\xC0\xD3\x2F\xD1\xDA\xFE\xA0\x6A\x09\x06\x80\x97\xF7\xBA\x29\x9A\xD9\x80\x35\x10\x68\x4E\xE5\x53\x5F\x40\xB4\xC6\xA1\x81\x5D\x78\x11\xBF\x45\xC1\x81\x1F\x09\x72\x61\xBC\x6E\xA5\x7A\x7D\x90\xEA\xB1\x6B\xA3\x16\x16\xD4\x4F\xC1\x40\x4E\x32\x2B\xD2\xDC\xAE\xE2\x70\x65\xEB\x5C\x37\x47\x68\x56\x78\xC5\x63\x7D\x0C\x0A\xCF\x58\x1A\x37\x6E\x58\x3E\x4C\x5A\x96\x12\x2B\x39\xD8\xE5\x5E\x62\xE4\xFF\x7E\x10\x59\x71\x7C\xB3\xC9\x3A\xCC\xFC\x89\x64\x2F\x61\x22\x1E\x53\x94\x83\x22\x0E\x81\x4A\x54\x20\xE6\xE4\x8D\x19\xFE\xB9\x0D\x32\x50\xFE\x68\x7B\xC2\xAC\x53\xDA\x12\x5B\xE1\xEF\x74\x66\xC5\xC7\x47\x21\xC3\x85\x70\x0B\x64\xA0\x25\xFF\x7A\x26\xB9\xCE\x53\x3C\x64\xDD\xA9\x2A\xC8\xC0\xDD\xA9\x0E\x41\x06\xD1\x9D\xEA\x30\x64\x90\xF9\x75\xC6\x5B\x01\x94\x61\x7F\x82\xB4\x18\x76\x81\xD5\x81\x75\xB3\x4A\xE8\xEC\x46\x51\xE0\x36\xB1\xB9\x6C\x07\x0C\xA3\xF8\xE0\x1A\x43\x30\x4D\x38\x90\x28\x3B\xA6\x0E\x79\xBD\x8D\x7F\x57\xBC\xD9\xBE\x84\x1F\x0E\x5F\x22\xF6\xB2\xDB\x8D\xF6\x7F\xF8\xF4\xCE\x0E\x81\xC9\x79\xFD\x86\x96\xC2\xBA\x9F\x09\xBF\xAC\xBC\x89\x42\x47\x6A\xDA\x0B\x8F\xA9\xA3\x23\x82\x40\x82\x7D\x01\x42\x57\xA9\x27\x39\x64\xFE\x78\x08\x5F\x99\xE4\xBF\x6C\xB4\x9E\xCE\x25\x26\xE8\x17\x56\x17\xFB\x66\x40\x40\x5E\xD4\xBA\x79\xD6\xF8\xE9\x59\x86\x00\x26\x7C\xC4\xA3\xF4\x89\x20\x68\xE8\xD3\x11\xC6\x91\xF6\xCF\x9A\x96\xA1\xFC\xFF\x29\x56\x5A\xFD\xC4\x55\xC1\xD3\xFE\xAC\x6A\x6B\xCA\x42\xF3\x55\x55\xFA\xD8\xA2\x4A\xF5\xB8\xD2\x2F\x1C\xB0\xD2\x2F\x84\x4A\x7F\x62\x5C\xE9\xE7\xB1\x52\x09\x4E\x53\x43\xF0\x7F\x95\xFF\x37\x5A\x4F\x79\xB1\x38\xC1\xE8\xAE\xB1\x13\x01\x18\x8F\x32\x03\xA8\x5B\xED\xFD\xA7\xCD\xB4\x7A\x92\x25\x22\xE1\xD6\xBD\x26\x3F\xB1\xEF\x9B\x96\xDE\x9C\x79\x6D\xC3\x98\xA9\xBE\x32\x7E\xB1\x51\xC7\x94\xA9\x75\xFF\xB6\xA1\x14\x04\xF8\x76\x63\xC1\x9E\x36\x53\xD0\x6B\x7D\x3D\xE6\x84\xB9\x98\x1F\x51\x3D\xC2\xD9\xEF\xE0\x13\xC1\x39\xCB\xFF\xCC\x5A\x3D\xD5\x57\xDC\x20\x9C\x29\x95\xE1\xCA\x7A\x4A\x69\x61\x34\xD9\x49\x9B\x52\x5E\x7C\xCA\x2B\x99\xD2\xBA\xA1\x1F\x21\xBB\x1E\x3C\x29\xD4\x31\xA5\x9B\x1C\xFF\xA8\xA6\xA0\x14\xA2\x4D\xB9\x26\x7A\x29\x5D\x86\x93\x72\x34\xD9\xE0\x3D\xBF\x80\x1C\xC6\x8F\x27\x90\x9D\x86\x47\xAE\xB7\x03\x25\x6A\x83\xC3\xB9\x4A\xC2\x1A\xC0\x83\x1D\x9E\x94\xCE\xA2\x26\xAA\x05\x8B\xA1\x18\xEC\x09\xCE\x5F\x69\x25\x8D\x11\x25\x67\x47\xBD\x8C\xEE\x32\x21\x39\x53\x1B\x6F\xC9\xCC\xE1\x75\xED\x72\xB9\x72\x8F\xF8\x82\x1A\x26\x6B\xB5\x83\x89\xD7\x0F\xD6\x74\xF9\x51\x52\xF4\x58\xF5\xA7\x57\x39\x81\x02\x25\xF8\x29\x90\xC9\x8E\x29\x73\x86\xDC\x71\x5C\x0B\x49\xF5\x79\x36\x02\xA0\x26\x7E\x4C\x51\xEC\x5C\x5A\x7D\x06\x15\x7E\x09\xEB\xF2\xAC\xDC\xB1\x5F\x1B\x6B\x2D\xE4\x79\x47\xA1\xCB\x24\x1B\x62\xCE\x86\x83\xD2\xE1\x98\x32\x6B\x1B\xC1\x70\x27\x50\x26\xD4\x9E\x04\x8B\xD7\x82\x0E\xA8\xF1\xE4\x40\x70\x1E\x0C\x6A\xA1\x41\xB5\x10\x6F\x0A\x3C\x6B\x24\x32\x47\xD2\xD3\x10\xCC\x12\x3E\xCB\x29\xD5\x8B\xCC\xAC\xC9\x7F\xC1\x30\x32\x83\xDE\x25\xC6\x9D\xB7\x0A\x9A\x16\x3B\x44\x63\x10\xCC\x01\xBD\x10\x73\xC0\x8C\xAF\x2F\x18\x22\xA0\x0B\xB6\x15\x78\x06\xDD\x61\x11\xE8\x79\x2C\x02\xD3\x63\x11\x68\xC6\x22\xE0\x3A\x4C\x3E\x04\x4B\x00\xD5\x5D\xF3\x14\xA4\x71\x06\x97\xBB\x61\x4F\xD9\x2B\x03\xDC\xB9\x52\xF9\xB7\xCC\xF5\x34\xE0\x17\x0C\x7A\xC2\xA8\xDD\xB2\x17\xE2\x77\xDD\xA1\x91\x4A\x3A\xA7\xE7\x2B\x3F\xC5\x9F\x5D\xFD\x86\xCB\x4F\xF1\x67\x2C\x0D\x7E\x38\xD5\xC5\xB7\x56\x7E\x8A\x78\x26\x3F\x45\x4C\xA7\x03\x7E\xD1\xE2\x8B\x36\x9C\xB5\x08\xDE\x2D\x26\x26\x32\x3D\xB6\x02\x31\x64\x93\xB4\x84\x9A\x2F\x98\x6A\x74\x62\xC4\xB1\x41\x5C\xA7\xBC\xA5\x11\x16\x5C\x5C\x3B\xB1\x64\xE3\x03\xD6\x97\x53\x52\x8C\x62\xC2\x6B\x9E\x87\xD7\xB1\x33\xF0\x3A\x62\x9B\xE0\xC8\x03\x3C\x3B\x5A\x02\xD7\xD1\x7C\xA8\x61\xAB\xD4\x06\x23\x42\x05\x14\xB2\x86\xCF\x30\xD4\x2B\x02\xD7\xD1\x3D\x79\x5D\x5B\x1B\x14\x9C\xE4\x4F\x98\xC1\xA4\xC9\x51\xFF\xCD\xD9\xC2\x6E\x19\x40\x8B\x20\x80\xCA\xF1\x3B\x50\x42\xC1\xE0\x3A\x39\x64\xE7\x4A\xBE\xFD\x52\x8C\x2D\x81\x87\x65\xFE\x8E\xCB\xC7\x31\xA9\x53\xD8\x2B\xFB\x46\xDC\x67\xDF\x88\x9F\x8F\xEC\x1B\xB1\x64\xDF\xD8\x7B\xCE\xD2\x5D\xE7\x4C\xEF\x36\x67\xFA\x5B\x6A\xCE\x68\x23\xD0\xFD\x9C\xE9\xF1\x9C\x49\xB2\x91\x74\x76\xCE\xD2\x05\x73\x96\xE7\xF9\x67\xB4\x36\x53\x50\x94\x1C\xCA\x7F\x48\x31\xC6\x1F\x5D\x31\xB1\x9C\x3C\xAD\x4E\x92\x56\xA5\xFE\xAE\x2E\x78\x02\xD3\x2E\x47\x80\xE3\xE3\x5D\x55\xFD\x39\x1F\x29\xFC\x6D\xAD\x9C\x15\xE4\xA7\x60\x76\x13\x0C\xE5\x00\xAA\xEC\xF5\xF6\x0C\x9C\xB2\x0E\x59\xAF\x49\x68\x06\x69\x44\x5B\xC1\x29\xEA\x8C\x3D\xC1\xF3\x71\x66\x94\xB5\x08\x3B\x77\x3F\xC7\x50\x07\x94\xE7\xCF\x2A\x49\xF6\x3E\x40\x14\x7E\x97\xD5\x51\x87\x57\x24\x50\x3C\x37\x9E\x99\xD9\x77\xCC\x60\x87\x1C\xA0\xF3\xAA\x05\xE8\xBC\xDF\xF3\xE9\x99\x7D\xC7\x8E\x3C\xBD\x58\x25\xF2\xEA\x2E\x3E\x86\x4A\x0D\x28\x11\x2F\xF0\xB9\x77\x91\xE4\x8D\xA0\xA3\x81\x1E\xD2\x80\xFD\x17\x48\x19\xE1\xCC\x68\x02\xA7\x12\x70\x12\x63\x32\x27\xD9\xF0\x5D\x72\x98\xB9\x80\x9E\xE4\x7A\x48\xEE\x82\x8D\x6D\x31\x01\x33\x53\x42\x89\xC5\x6B\xB4\xE2\x27\x3D\x4A\x10\xE8\x7B\xF8\xEC\x49\xEC\x25\xBA\xC2\x2E\x54\x1C\x40\x07\x11\x21\xD4\x90\x86\xBC\xCE\x40\xCD\xD0\x30\xEF\x67\xEA\xF1\x1E\xFB\xF9\x01\x01\xF3\xEC\x8D\x74\xCA\x3F\x49\x1C\xC3\xF1\xF3\x44\x52\x3E\x0F\x28\xFF\x71\xFE\x6E\x7D\x72\xD9\xFF\xD5\x8D\x1B\xCB\x5B\x7C\xFA\x06\xEB\x6F\xD8\x2D\x02\x01\xA1\x68\x7D\xFF\x34\x57\x60\xDB\x61\xD1\x71\x41\x7B\xB6\xCF\x61\xEB\x9A\x91\xE3\xA7\xE1\xFC\x1A\x8D\xA6\x05\xB4\xE9\x77\x20\x58\xC9\x6B\x2D\x58\x11\x64\x34\x12\xB8\x04\xFF\x21\xD5\x56\x7F\x71\x35\x00\xC0\x9F\x0A\xA8\xC4\xA7\x66\x51\x89\x79\xC0\xB7\x35\x6E\x21\x51\x6F\x0B\x0E\x51\x1D\x3C\x40\x19\x34\xD0\x80\x3A\xC0\xFA\x88\x03\xB3\x80\x3B\xEF\xA8\xF5\x20\xFA\x7F\x06\x0D\xD9\x1F\x67\x42\x51\xFF\x45\x66\x2F\xE8\xDA\x91\x5D\xBA\x76\xA4\xEF\xDA\x2D\xF3\x5D\x5B\xDF\xAF\x6B\xB7\x74\x5D\xBB\x65\x41\xD7\x8E\xEE\xD3\x35\x50\xF9\xA7\xBF\x66\x69\xD9\x76\xCC\xA2\xBC\x6C\x3B\xEE\xEB\x9E\x97\xED\x4D\x85\x9E\x0C\x0E\x71\x49\x87\x49\x61\xC4\xC4\x77\xAA\x21\xCC\x8F\x2E\xBB\x2F\xB1\x1D\x19\x46\x81\xB6\x16\xC1\x40\xAA\xF1\x00\x12\x30\x70\xD5\xBA\xF9\x36\x9C\x8F\x2F\x0D\x61\x22\x53\x28\xFC\xB4\x6D\x0A\x5A\x05\xB8\xC9\xD5\x65\x87\x87\x2A\x27\x1C\x41\x0E\xFC\xA5\x4F\x0D\xD1\x9E\x78\x1B\x5E\xC2\x77\x97\x79\x9A\x96\xC8\x42\x68\x4E\xC1\x32\x9E\x00\xFF\xF5\xB8\xB4\x5A\x37\xF7\xB3\x06\x1E\x9F\x30\xF7\xE7\x50\x72\x2A\x63\xC3\xD5\xA3\x74\x6E\x96\x4B\xE5\x7F\xFC\xD3\x8B\xE0\xB9\x4A\xF6\x10\xED\xE0\xB9\x96\xC8\xA0\xCF\x58\x69\xFF\xFB\xA7\x67\xE0\xB9\xCA\x3C\x1C\xCC\x74\x87\x96\xA6\x47\x68\x69\x4B\x10\xE0\xB9\x4A\x58\xC2\x71\xF7\x68\x69\x64\x96\x2A\x08\x9E\xCB\x40\xE2\x8B\xB6\xFA\xD2\x55\xC6\xE8\x82\xE7\xB1\x7B\x5F\x79\x07\xFD\x7F\x18\xD7\xD7\xBF\x54\x2F\x85\xFA\xC3\x4B\x28\x99\x96\x87\x46\x56\x33\x84\x19\x5B\x37\xF7\xD1\x0E\xD2\x36\x25\x4F\xA4\x80\x8C\x29\x6B\x62\xA7\x27\xF9\xEE\x93\x2E\xD9\x70\x97\x19\xD9\xAB\x0C\x90\x46\xA9\x7F\x47\x5F\xB6\x48\x73\x58\xF2\xE9\x56\x19\x13\x83\x61\x33\x4B\xCC\xAF\x4B\x74\x50\xC0\x37\x0B\x82\x85\x64\x6F\xA4\x25\xC6\x0C\xDB\xA7\x2C\x94\x82\x90\x84\xD2\xDA\x7F\x74\xD8\xB5\x92\xBC\xC3\x68\xE5\x5D\x28\x5D\x57\x91\xC1\x4E\x3A\x81\x0D\x0B\x63\xBF\x9F\x97\x9B\x92\x6C\x51\xF7\x63\x2B\xA2\x30\xA5\xE4\x74\xC6\xC5\xEE\xC3\x7F\xEE\x69\x96\x37\x1B\xE3\x93\x6D\xCE\xFC\x6A\xD6\xF0\xC7\xEF\xC0\x7F\x5E\xCD\xAB\x1D\xB2\xEA\xAF\xC2\x5E\xFB\x6A\x7A\xD8\xF2\x79\xEA\x9E\x7A\x39\x87\x65\x30\xE3\x1D\xC7\x84\x1D\x47\x80\x60\xE8\x8D\x86\x87\x49\xD5\xDE\xC3\x07\x4C\xAC\x7D\x97\x37\x1B\xE9\xAE\xF1\x53\x96\x34\xCB\xDE\x6C\x2F\xB8\x77\x23\x3B\x81\x10\x0E\x17\x36\x6B\xDA\xCB\x03\x2D\x82\x7E\x5D\x62\x04\x6C\xAA\x91\xA2\xAA\xE9\x4A\xBF\xEC\x41\xB2\xC0\x42\xBE\xD6\x54\x38\xD3\x84\x94\x55\x41\xD9\x21\x65\x2D\xE2\x92\x12\x19\x6F\x69\x11\xB3\x20\xDF\x0F\x31\xAE\x9E\x1D\xBE\xB6\xF4\x72\x6D\x70\x28\xE7\xCB\x78\x8F\x72\x54\x0C\x29\x6B\x60\x59\xD0\xB0\x2E\xB7\x64\x2F\x28\x8B\xE4\xE0\x4C\x4B\x0B\x46\x58\xD4\x15\xF6\x2B\x60\x41\x82\xB0\xFB\xBE\x67\x66\x58\x10\x1C\x44\xD5\xAF\x5F\x43\xB1\x3D\x7D\x70\xAB\xB4\xF9\xA0\x29\x77\x59\xFA\x89\xE7\x15\xBA\x39\x96\xEB\x59\x9A\xA5\x0B\xA4\x3D\x24\x3D\xC4\xCE\x6F\xDA\x01\xDC\xE6\xE2\x8D\x58\x75\x1B\x31\x25\xAA\x11\xE7\xBF\x81\xEA\x15\xF3\x2E\x1C\x2F\x54\x5F\xC5\xE2\x10\xCD\xC3\x6D\xFE\xC2\xA7\x0F\x06\xB7\xF9\xE3\x33\xE5\xA4\x0B\xD1\x00\x11\xAC\x62\x15\xDA\xCD\x4B\x43\xE9\x03\xB6\xBF\x3B\xDC\xA6\x83\x00\xB7\x19\x71\x1A\xE2\x0E\x6E\xF3\xB7\x3E\xBD\x1B\xDC\xE6\xF3\xD5\xAB\xDD\xE1\x36\x5D\x67\xE2\x1A\xF6\xAA\x83\xDB\x7C\xCB\x35\xB1\x9A\x18\xB0\xD5\x5B\xE9\xCB\x41\x53\x39\xEE\xB8\x90\xCA\x71\xE7\xA1\x17\x52\x39\x7E\x13\xA6\x72\xDC\x81\xB9\x64\x8D\x6F\xBA\xD6\xA5\x72\x5C\xF0\xF4\xCD\xD7\x5E\x48\xE5\xF8\xAD\x99\xCA\xB1\x9F\xEC\x61\x2A\xC7\xAB\xD7\x0E\x9E\xCA\xF1\xDA\xB5\x6F\x8E\x54\x8E\x7F\x9A\xE9\xC9\x94\xDD\x8C\x7B\x45\x2B\xE0\xB2\x46\x64\xEC\x63\x4D\x59\xD0\xD4\x08\xF5\x3B\x44\x9B\x85\xBB\xA6\xA2\xC9\x49\xE6\x1E\x53\xAF\x11\xD9\xFB\x00\xDD\x2F\x71\x92\x88\x7B\x89\x99\x04\xD3\x73\xDA\x36\x39\x19\x2A\xF1\xC4\x61\xCC\x29\xC8\xE7\x4E\x1C\x93\x70\xE2\xE8\x8C\x89\xBD\xDE\xDB\x14\x0C\x64\x5E\xF2\x46\x8F\x1F\x97\x45\xFD\x8D\x94\xB1\x56\xDB\x1C\x32\xC2\x54\x97\xF7\x0A\x58\x9E\xC9\x8A\xB3\x1C\xB2\xE2\x18\xAD\xB5\xD2\x39\xE4\xA5\x9E\x2F\x26\x0A\x8C\x46\x2E\xCB\x09\x1C\x15\x47\x45\x43\x62\x1E\xEC\x55\x31\xCA\x06\xF6\x9A\x30\xC4\x2C\x0C\x91\x9D\xD2\xF8\x58\xB5\xC7\x20\x99\xFB\xEF\x67\x07\xEF\x94\x6E\xDC\xFA\x94\x27\x67\xC9\xFD\xA3\x08\xDE\xD7\x59\x1F\xE6\xB7\x90\x9E\x07\x6C\x8A\x91\xDB\x27\x90\x79\x82\x38\x9D\x8C\xDB\x64\x5B\x88\xE4\x16\x23\xC6\x9C\xA0\x8A\xC5\x63\x4B\xB6\xE8\xA6\xC5\xFF\xDC\x40\x9B\xC1\x47\x14\xF9\xC4\x38\xA8\xF7\x35\x58\xB3\xBB\xDC\xC4\xB2\xBD\x36\x2A\x50\x5C\x67\x59\xA6\x32\xEA\xD1\x02\x6A\x6F\x94\x29\x47\x47\xC5\x74\x0F\xF9\x5B\x43\x05\xAD\x80\x92\x6B\x73\x74\x5D\x13\x09\x97\xED\x35\x1F\xF8\x3C\x98\xAF\x99\x4D\x4B\x16\xA5\x6A\xDD\xAC\x6E\xB0\x4B\x7D\x3E\x60\xE2\xD7\x94\xCC\xB1\x9C\xD2\xE2\x01\xF6\x1D\xA4\x20\xFA\x9C\xD8\x86\x4D\x5C\x64\x7A\x2F\x70\xA7\x5F\x86\x62\xA3\xB4\xC0\x61\xA9\xAF\x42\x0E\x49\x21\xDF\xA3\x2F\x04\x81\x4F\xE6\xC5\x03\x74\x9C\xF1\xF2\x67\x67\x99\x7D\xD2\x9F\x0B\x4B\x8D\x66\xD6\xBF\xB1\x85\xEC\x2C\x85\x18\xFE\x35\xB0\x94\x44\xB7\xD0\x56\xB5\xEC\xDD\x65\xB0\xE4\x2E\x3F\xA9\xFE\xF2\xAA\xD4\xB9\xA8\x7D\xBD\x77\xFB\xF9\xA0\x03\x69\xCB\xC1\x87\x85\x80\x78\x0F\x98\x59\xAC\xE8\x71\xFE\x43\xB9\x35\x53\x7D\x25\x5A\x64\xA0\x91\xA8\x99\x1E\x4F\x3C\x19\x5E\xB8\xF7\x57\xEE\xC9\xE8\xCA\xBD\x31\x21\x4A\x38\x0D\xCE\x54\x93\xF3\xA5\xFC\x10\x9C\xA9\xF2\xEE\x46\xBD\x29\xEE\x96\x1B\xD9\x06\x8F\xDF\xF5\x12\xE5\x82\x22\xE9\xBD\xC4\x17\xE5\x64\x03\x39\xA6\xC8\x72\x56\x40\xCE\x61\x70\x8E\x99\xA3\xE4\x6A\x25\x9F\xCF\x92\xDC\xBD\xB3\xCF\xFB\x9D\x0A\xFF\xC4\x5E\x6F\x37\xE9\x09\x93\xCA\x79\xCA\xD4\x29\x28\x8F\xDB\x1E\x2E\x22\x7B\x09\xCB\xFA\x29\xEC\x1E\xDF\x92\x9E\x30\x0F\x40\xEA\x15\xB8\x90\x3D\x88\xAC\x75\xB7\xF1\x9F\x23\xA0\x20\xA7\xF4\x7F\x48\xF6\x8A\x33\x37\xBE\x46\x4C\x58\x4B\x74\xA1\x50\x4F\xE8\x72\x82\x01\x61\xE9\xF2\x64\x52\x3B\x3F\x25\x29\x62\x20\xA7\xDB\x65\x1C\xF9\x84\xF2\x53\x02\x72\x79\x42\x1B\x67\xF5\xFF\x91\xFD\x7C\x22\x61\x26\x38\xE9\x3F\x31\x9C\xF4\xB4\x13\x49\xAB\x04\xCF\x3B\x39\xD3\xA5\xD2\x09\x56\x91\x49\x0F\xBD\x6E\x50\xA6\x3C\xDC\x2E\x39\x15\x47\x3A\x66\x94\x72\xCE\xB7\x94\x5E\x08\xD2\x83\x42\x87\x70\x3C\x0A\x8F\x75\xEE\x72\x3D\x61\xDC\x72\xC8\xEF\xA6\xBD\x89\xA5\x02\xEF\x23\x67\x82\x6F\x9C\x3A\x5B\xCA\xBD\x15\x8D\xC5\x71\xBA\xFC\x3E\xF6\x8F\xAC\xF3\x39\x98\xCD\x3A\xF8\xDF\x8A\x67\x32\x05\xFA\xE5\xE2\x99\x6C\x38\xD0\xCF\x40\x2E\x9E\xC9\x58\x63\x29\xA3\xEB\x6F\x36\xEE\xE7\xB5\x49\x92\x89\xEC\x1D\x93\x81\xBD\x23\x9F\xB5\x77\xE4\x9B\xCD\xA4\xB3\x77\x4C\x46\xF6\x8E\x09\xF6\x61\x69\xDE\xDE\x31\x61\x7B\x07\xDD\x56\x4D\xC6\x56\x8B\xC9\x42\x7B\xC7\x64\x68\xEF\x98\x84\xDA\x77\x79\xB3\x91\xEE\x4E\x82\xBD\x23\xF7\x66\x1B\xF2\xC0\x75\xF9\xC8\xDE\x11\x44\xE2\x03\x90\x0F\x84\x22\xFD\x6A\x64\xCC\xAE\xB6\x7E\x5A\x77\x1A\xF4\x6A\xC7\x4C\x39\xA3\x0C\x5B\x82\x5B\x46\x66\x0A\x72\x25\x88\x15\x8A\x67\x25\x1D\x32\x0F\x62\xCD\x1E\x40\xAC\x31\x14\xB3\xE9\x2E\xB2\x38\x56\x8E\x59\x10\xD2\x7A\x02\x8E\x44\x05\xB7\x9E\x7A\xC5\xE3\x5C\x5D\xA3\x5E\x78\xC5\x2C\xFD\x92\x1E\xD3\x79\xCC\xD1\x6C\x26\xE7\x2B\xA7\x5E\xF4\xE7\x44\x0D\x27\x99\x0C\x44\x15\x4B\xC9\x5B\x82\x7D\x65\x45\x03\x63\xDB\x3A\x0B\x1D\x8A\xB3\x0A\x79\xD0\x78\x78\x6E\x6E\x78\x7A\x30\x3C\x4D\xC3\x33\x28\x34\xC9\x67\x9E\xC3\xF1\x3B\x91\x29\xCC\xCF\xA7\x8F\x38\x00\x78\x8B\xFF\xC0\x03\x60\xDA\x26\xE5\x5E\x90\x17\x8C\x69\x9B\x89\xDC\x4C\x73\x17\x38\x4F\xDC\x26\x6B\xE5\x29\xA7\x05\xEE\x73\x8A\xA1\xC8\x4A\x87\x06\x13\x48\xF3\xF7\xEA\xDE\xDF\x70\x47\x77\x52\x99\x0A\x81\xAA\xFE\x0B\x89\x06\x05\xC9\x69\x75\xD2\xA6\x9E\x53\x01\x92\x76\xDF\xFB\x22\x35\xF6\x12\xD5\xCD\x1C\x10\x81\x85\xF8\xCC\x56\x63\xD7\xBC\x86\x18\xEC\x5A\xF5\x65\xAC\x83\x8D\xD6\xCE\x93\xFD\x2F\xE2\xA2\xF1\x1A\xDF\x3D\x39\xF2\xFF\x99\x71\x79\xD2\x14\x36\x5A\x7D\xF1\xAA\x00\x11\xED\xE8\xBE\xD3\x2F\xD8\x79\xBE\x59\xED\x3C\xDF\x3D\xB4\xF3\x3C\x72\xED\x85\xA4\xF6\x2F\xA4\xF5\xFE\x9B\x9D\xD6\xFB\x05\xEE\x7F\x81\xFB\xFF\xE6\x72\xFF\x7B\xC7\x5E\xB8\x73\x77\xC5\x07\xF1\xC2\x9D\xDB\xA2\x9E\x1F\x2F\x5C\xBB\xD8\x0B\xF7\xB7\x3E\xFD\x95\x7B\xE1\xFE\xFE\x5C\x4F\x61\x37\x2F\x5C\x39\xD8\x58\xB9\x48\x93\x0E\xB1\xBB\xD1\xDB\xED\x7C\x52\xB9\x7D\xDD\x8B\x16\x76\x6A\xD6\xBD\x68\xBF\x99\xD8\xCD\xDB\xCB\xED\x32\x13\xC1\xB5\x74\xA8\x46\x2D\x20\x7C\x24\x8A\xDC\xBD\xCC\xC5\x23\xD2\x8F\x6E\xEF\x47\xAF\x05\x18\x49\x17\xDA\x0A\xEF\x8A\x19\x9C\x3C\xBB\x0E\xA0\x1B\xDA\x5D\x52\xEE\x39\x4E\xDD\xB6\xC0\x85\x0D\xEC\xB8\x27\xD8\xE8\x0B\xAC\xFC\x95\xB0\xF2\x3B\x5E\x60\xE5\x03\xB2\xF2\x5E\xCC\x3C\x1C\x91\x7D\x3E\x78\xF9\xB7\x33\xEB\xA6\xFA\x4A\x77\xFD\xFA\xAC\x1A\x9B\xEB\x2C\x1B\xA3\x15\xE3\x01\x48\x34\x0B\x59\xC0\x32\x8F\x9B\xB6\xA6\xAD\x5F\xDD\x43\xB0\xB3\x4F\x28\xB2\x8A\xB0\x1A\x21\xA6\x2D\x3C\x5D\x52\x44\xDD\x0F\x8A\x2F\xA6\x98\xFC\x72\x8E\xB1\xC9\xAF\x13\x4C\x83\x18\xFC\xF0\x47\xC8\xAF\xF3\x4A\x51\x1C\x67\xD2\x99\xFD\xC0\x72\xF3\x12\x7C\x13\x42\x45\xAC\x04\xC8\x07\x0B\xA1\x85\xBC\x0F\xAC\xE9\x61\x12\x37\x28\x17\xBF\xA3\xF6\x4F\x98\x8A\xFF\x10\x87\xBC\xBA\x0F\xAB\x01\x8E\xA5\xF5\xAA\x2E\xA1\x60\xAC\x33\x83\x7A\x10\xB9\xCE\xAC\x72\xC6\x6F\xCA\xCE\x6A\xCE\xD5\x55\x7F\xC8\xE5\x91\xA7\x97\xEA\x15\x7C\x8B\x8D\xBE\xC0\x66\x93\x51\xC4\x7B\x48\xC5\xF5\xCA\xAD\x60\x59\x10\xB3\x5C\xE7\x13\x21\xE3\x2D\x62\x01\x54\x95\x2F\x50\x40\xEA\xAB\xCB\xB0\x7C\xB1\x25\x55\x00\x3B\x00\xA9\xDF\xB9\xA1\xB7\xCE\x5C\x82\xEA\x12\x59\x21\x35\xAC\x48\xA8\x6F\x0A\xFA\xB2\x07\xC1\x33\x31\x92\xD3\x89\xFC\xA7\x27\xA0\xC9\xB5\x98\x8D\xB6\x12\x94\xB0\x74\xBE\xA4\x10\xE5\x92\xB1\x8A\x2C\xFE\x87\xBA\xC3\xB6\x7F\x63\x5B\x1F\xEA\x47\x77\x98\x27\x33\xBD\x54\xAF\x42\x81\x34\x5F\x09\x84\xEA\x60\x1B\xBF\xE2\x41\x1F\xAF\x6F\xF2\x02\x5C\xD7\x8F\x95\xB2\xBE\xD6\x37\x11\xBA\xB7\x3F\x8E\xEA\xDA\x4D\xFE\x95\x5B\x90\xFA\x27\xD4\x56\x73\xF3\x25\x01\x0E\xDF\xA3\xE6\xC0\xAE\xE6\x5C\x83\xFC\xB2\x0A\x87\xE1\x50\xF5\x76\xC6\x83\x04\x0D\x2B\x73\x14\xB4\x42\xC1\x95\x03\x52\x30\x09\x21\xA1\x25\xB8\x52\xC1\xCD\xA5\x23\x1C\x43\xB3\xFB\x1C\x1D\x7E\x8E\x73\x74\x53\xBD\x32\x9A\xA7\x9C\xEF\x13\x52\xA2\x07\xDD\x56\x1C\x64\xF8\x74\xC9\xB5\x23\xE1\x67\xD8\x0D\xF9\xB1\x9B\xDB\xE7\xD4\x29\x06\x47\xE6\xF7\x89\x21\xBA\x7A\x18\x09\xEF\x8D\x2D\x13\xF9\x25\x81\x40\x61\x6D\x96\x14\x05\xCE\x26\x1F\xB1\x79\x51\x15\x14\x8D\x20\xE1\x5C\x36\xA8\xA6\x74\x23\x4C\xEB\x7E\x93\x73\x70\xA5\x6D\x8D\xAA\x72\x8A\x4A\xEB\xC0\xD8\x95\x20\xB7\x75\x06\xA3\x5F\x7C\x91\xBE\x39\x08\xB3\x27\xD5\x8C\x33\x09\x0A\x8E\x90\x2A\xF6\xD5\x5E\x6D\x04\xAF\x5C\x7D\xA7\x72\x5E\x22\x7D\xD2\x46\x24\xFF\x71\xB6\x72\xF8\x3F\xFA\x92\xBD\xAB\x94\x58\x47\x37\x1D\x48\x82\x26\x7A\xF7\x14\x45\x40\xDB\xC4\xEF\xFE\xEF\xE9\x95\xDB\xC5\x15\x9B\x7C\x92\x5B\x50\x43\x77\x7E\xD3\xBB\xB2\x9B\xDE\x95\x9D\xEE\xCA\xAA\xFE\x3A\x7D\x7C\x99\xEE\x6F\xE8\x70\x49\x80\x42\xD0\xAB\x13\xE6\x1C\xE8\xD3\xEA\x24\x5D\x85\xAB\x13\x66\x1D\xA4\x64\x9D\x81\xF6\xEB\x2D\x31\x00\x47\x3C\x64\x27\xCC\x6D\xB3\x4F\xAB\xE1\xD3\xDB\xB9\x8A\x6A\x54\xA8\x9A\xA9\x62\xB5\x7B\xEA\xF8\x69\x5F\x85\xE3\x54\x7A\xB2\x97\x7F\xF7\x67\x46\x3B\xB2\xE1\xF4\xB0\xFF\x64\xF0\x2B\xA7\x50\xC6\x6E\xE8\x2E\xBB\x2B\x47\xD3\x30\xBE\x18\x67\x5A\x5B\x37\xDF\x56\x4B\xDE\xDA\x65\x8E\x87\xC0\xE3\x15\x68\xBF\xDC\x56\xFF\xF8\x5A\xC8\x08\x8B\xE5\xD6\x79\x9A\xFE\x93\xC2\xD3\x8B\x5E\x37\xB7\x93\x3B\xEF\x84\x13\xBE\x21\x2F\xE7\x7C\xA1\x2A\x41\x76\xD1\xC5\xA6\x68\xEB\x92\x65\xFE\x2A\xF3\x5E\xC9\x21\x28\x8A\xF0\x62\x8C\x3F\x3E\xF0\xA8\xA0\x6C\xBA\xB4\x63\xAE\x72\x7E\xC3\x92\x1E\x7B\x55\x2F\xB1\x1F\xAC\x83\x04\x09\xA4\x84\x8A\x5E\xD7\xCB\xF6\x14\x24\xB0\x4C\x4E\xBF\xBD\xC3\x70\xC5\x0E\xC3\x5D\x9E\xDE\xA0\x98\xDC\x07\xB6\x59\xA1\x62\x87\xBA\xCB\x14\x72\x31\xD5\xD6\x1A\x1B\x31\x52\x04\x67\x92\xFD\xD2\xA7\x47\x59\xC9\x2D\xAC\xB0\x40\x58\x39\x4F\x59\xD9\x57\xFC\x95\x05\x33\xA0\xD7\x0D\x34\x99\x27\x92\x1E\x6D\xEC\x1A\x5B\xF9\x06\x13\x42\x25\x6A\xBA\xCF\x3B\x2A\xBA\x29\x9F\xEC\x83\xCF\xED\x6A\x6F\xEB\xA3\x52\x15\xAB\x3A\xD9\x20\xB1\x33\x7B\xB6\x67\x39\xF3\xC6\x00\xE5\xC6\x10\xB6\x84\x61\xA1\x62\xBC\xBB\xCC\x20\x4A\x01\xD7\x6C\xCA\xB0\x79\x72\xF6\x9E\x40\x7C\xAE\xAB\x4A\xFA\x61\xBA\x14\x96\xB7\x37\x87\xC5\x1D\xF8\x8E\x86\xD8\x4A\xE7\xB3\xC3\xA0\x22\x64\xA7\xBF\x83\x6E\x79\xBA\xB4\xC3\xB7\x05\x24\x35\x62\x18\xEC\xFF\xE1\x6E\x50\x40\xF9\x13\x67\x39\x32\x87\x14\x0E\x51\x58\x24\x5D\xB7\xDC\xB0\x5B\x2D\x4C\x0E\xC8\x99\x02\x1E\xC9\xFC\x27\xCC\x76\x68\xE8\xAA\xF9\xFE\xCF\x0C\xAF\x42\x38\x5F\xC1\x04\x8C\xAF\xB6\xA1\xBA\xD4\x18\xFF\x84\xBA\x04\x06\x96\xBC\xDE\x5A\xAB\x57\xE1\x10\x72\xE2\x61\x38\x74\x4C\x39\x91\xCF\xBB\x56\x26\x71\x7D\x87\x8F\x29\x7D\x17\x63\xA7\xF4\x60\xB0\x74\x41\x68\x1B\xE3\x6F\x68\x86\x84\xA0\x3E\x3A\x30\x94\x78\x37\x3B\x2B\x12\xBD\x14\x74\x58\xD7\x52\xA0\x56\x93\xF9\xE3\x5B\xFE\x38\xA3\xB3\xAD\xCA\x1D\x4A\x06\xAB\x67\x29\xB4\xCC\x14\xE4\x03\xBD\x47\x7F\xB0\x2F\x66\x00\x3D\x75\xA8\xF7\x41\x50\xF8\x0C\xB9\xE0\xD3\xB8\xDA\x3E\xAD\xEE\x5E\x63\xED\x6D\x50\xC1\x82\x12\x7B\x50\xD2\xD0\xC0\x1B\xEB\xFF\x52\x01\xFE\x73\x7E\xAD\x21\x91\x6D\xFD\xFD\x6D\x7D\x13\x18\xFC\x43\xB6\x27\x94\xA7\xF8\xCF\x5D\x6B\x9C\xBF\xB6\x23\xD2\x61\x09\x41\x33\x67\x29\x77\xB9\xE9\x42\x36\x6F\x46\x51\x80\x74\x3A\x8C\x74\x82\x9B\xFD\xB4\x0D\x8E\x18\x25\x1C\x0E\x04\x33\x7C\xA8\x09\x04\x33\x4C\x30\x8D\x2A\xF7\xEA\x59\xE1\xEC\xA2\xC7\x81\x84\x9B\x58\xA4\x1C\x62\xEF\xF0\x32\x9A\x59\xD4\xEE\x1B\x61\x51\x4F\x16\x2F\x6A\x27\xEE\xB9\x94\x7F\x9A\xE3\x1A\x42\x4C\x7B\x91\xE4\x50\x42\xC5\xA0\x0F\x4B\xDD\xE8\xCC\xCC\xE8\xF4\x37\xC2\xE8\x92\x9C\xFA\xB8\x68\x84\x3A\x88\x5E\x51\x2F\x69\x1F\x58\x39\x2F\xDF\xF6\xEF\xB7\x59\x9B\xDB\xFB\x46\xFD\x36\x21\xB4\x03\xB2\x4E\x4E\xAD\xF6\xE9\xD1\xFB\x7E\x9B\xBE\xDF\x36\xF4\x3B\xED\x66\xA5\xDB\x42\x0F\x71\x44\x11\x6D\x3D\xB8\x9D\x64\x38\x05\x0E\x2B\x27\x9F\x6E\x9C\xAC\xEE\xEA\x2A\x5C\xD9\x1B\xA5\x4D\x8E\x6F\xBA\xC6\xFA\xEC\xAE\x52\x7B\x00\x8B\x42\x88\xB1\xAB\xF0\x01\x7D\xE1\xED\x86\xE4\xB7\x19\x09\xE5\xA3\x0C\xCF\x45\x23\xA7\xBC\xFC\xF3\x42\x99\x8A\x68\x1E\x3A\x9D\x3E\x17\x4C\x92\xED\x06\x9B\x0D\x52\xF3\x87\xC1\xC6\xF3\x2C\x78\x68\x94\xFE\x7C\x99\x3D\xC3\x21\xF7\xE4\x01\x82\x3B\x01\x09\xFA\x41\x7E\x5E\xD2\xDB\x60\x82\xDB\xBF\x79\xF7\xC3\x27\xED\xFD\x60\x86\x91\x94\xAF\x26\x78\x51\x7B\xC2\xBC\x7A\x41\x74\xE0\xAB\xC9\xC8\xE1\x9F\x56\xA2\xF3\x88\x64\x0F\xB6\x76\x4A\x17\xC0\xE4\xA8\xC2\xDD\xE4\x8F\x8D\x69\xD0\x5D\xB1\x21\x15\x7A\xC6\xC6\x13\xFA\xBB\x66\xA8\x85\x6D\x91\x2A\x71\x74\x2E\xFE\x50\x13\xCE\x21\x3F\x5D\x9D\x7D\x2A\xCA\xD0\x2E\x1D\x58\x1F\x74\xE0\x0E\x2F\x9B\xE5\xC2\x0E\xDC\xDE\x75\xE0\xF6\x45\x1D\xB8\x2D\x74\xE0\xB6\xC5\x1D\x38\xC5\x6A\x33\xC1\x43\x7D\x5B\xFF\x66\xC8\xD2\x3B\x70\x8C\x7C\xB2\xD3\xD6\x4D\x6F\x1E\xFE\x15\x47\x26\x7A\xB2\x7D\x31\x62\xD3\xC0\xBB\xB8\x89\x36\xC1\x50\xF8\x7B\x1D\x83\x21\xC7\xDD\x08\xF4\x66\x93\x02\x45\xC7\x46\x72\x1F\x92\x6E\x32\x53\x46\x90\xB5\x75\x0C\x91\xB8\xCA\xA2\xF8\xBE\x53\x49\x72\x06\x27\x98\xD4\xC2\x1C\x31\x1B\x0F\x53\x6E\x95\x11\x74\x63\xD0\x60\xDA\x4D\x3C\xA1\x30\xDE\x05\x98\xCD\x26\x03\xBA\x14\x88\xA5\xCE\x6C\xB6\x4E\x8D\xEB\x2E\x3A\x2F\xD5\x3A\xA9\x96\x6F\x67\xD2\x4D\xD0\x90\x86\x60\x54\x82\x50\xB0\x77\xF3\x11\xAB\x0D\x46\x19\x7B\xF7\x5A\x4D\xA8\x4A\x58\xBF\x06\xD7\x76\xDD\x4E\xA8\x91\xC6\x51\xEC\x1C\x93\x46\x4C\x4F\xF1\x26\x98\xB6\xC9\xFC\xF4\x1E\x22\x7C\xBC\x89\x94\xA1\x63\x38\xB9\x27\x3B\xF2\x53\x82\x14\xB2\xF3\x6B\xE4\x0E\x92\x84\x2C\x21\xE7\xD7\x28\x8F\x82\xF8\x60\x4D\x64\x3D\xA4\xA8\xFA\x24\x6D\x93\x10\x3A\x37\x98\x3A\x83\x64\x1F\x12\x42\x22\xA1\xD5\x8D\xDB\x6C\xEC\x26\xD9\x26\x04\x90\x31\xA3\x54\x0B\xE1\x18\x98\xC2\x84\xEF\x4E\x22\x8A\x0E\x04\xC2\xA7\x05\xBD\x29\x05\x20\x25\xA8\x86\x78\xB3\x6D\xD9\xCF\x44\x6E\x7E\x72\xBE\x78\xC8\xD8\x31\x6F\xB8\x3C\x73\x48\x96\x73\x50\xD5\x8F\x5D\x25\xF6\xB9\xAD\x8B\x84\x64\xE4\x90\xEA\x7B\xD9\x71\x9C\xAC\x3F\xF2\x25\xC4\x48\xE6\x6F\x32\x1C\xDE\x3D\xF5\xAA\xFA\x27\x72\xA4\x00\x8D\xBB\xD5\x2A\x01\xFE\xFA\xD5\xB6\x8F\x3A\xC4\xE1\x1D\xA9\xAE\xBD\x25\x18\xC4\x08\x84\x91\xF0\x9D\xA6\x41\x8C\x9A\x75\x53\xE0\x52\x37\xA0\xAB\xCF\xD2\xD9\xFB\x88\x5C\xE5\x58\xCF\xE6\xD9\xEA\xDF\x4B\x76\x6C\x3A\x55\x93\x88\x95\x97\x1A\x8E\x45\x7C\xF1\xDD\x62\xC0\x85\xB6\xB1\xD5\xD5\xB7\xB0\x1B\xC5\x5C\x7D\x46\xEA\xF3\xFA\x52\x57\xA5\x41\x62\x51\xE4\x25\x0D\xE1\xA6\xBB\xD9\x65\xA5\x7A\x1B\x56\x72\xA7\xD2\xE2\x94\x52\xF1\x8D\x8E\xA6\xA3\x4A\xFE\x11\xA3\xA3\xA9\x57\x01\xC9\xAA\x62\x2F\x14\x47\x97\x5F\xF4\x09\xD5\xAF\xD8\x3F\xCC\xE8\x5F\x0C\x47\x81\x3F\x25\xE3\x9F\x5E\xAE\x0D\xB8\x97\x6B\xF3\x20\xC1\x51\x12\xC6\x22\xC1\x39\x91\xE7\x87\x77\xC8\x32\x91\x5F\x95\xA3\x5D\x84\x34\xB2\x10\xF1\xA1\x33\x02\x5B\xFD\x09\xCD\x8B\x93\x3C\xE4\x8E\x9E\x33\xEA\x01\x57\xC3\x16\x0E\x1B\x7C\x63\xAC\x57\x94\xAB\x3D\xE2\x04\xED\x84\x65\x27\x75\x88\x95\x22\xC6\x95\x42\x79\xDA\xAB\x73\xC1\x11\xE6\x84\x61\x4B\x1D\x4F\xAA\x48\xAE\x90\x20\x82\x24\x2A\xDF\xCD\x49\x77\x72\xA1\x8A\x66\x07\x40\x47\x14\x03\xE7\x2D\xF1\x3F\x98\xBF\xAB\x0D\xC1\xDA\x91\x63\x3D\x9E\x9D\x3F\xCB\x7E\x0E\x36\xFF\x9D\x68\x08\x28\x22\x71\xF5\xA2\x1C\xAD\x9B\xCF\xBE\xF3\x4D\xC4\x10\x34\x96\xC7\xFE\x9C\x4F\xD4\xB6\x8E\xF8\x58\x08\x0E\x22\xAF\x2F\x37\xB1\x2F\x2E\x36\x89\xF8\xD7\x65\xA0\xEF\x22\x77\x48\x47\xE0\x12\x0E\xF4\x05\x86\x23\x73\x3C\xD0\xC4\x17\x17\x5B\x86\xF3\x89\x21\x82\x64\x13\x26\x6B\x4D\xE4\x15\x21\x84\x3B\x6E\x04\x2C\x16\xBA\xB7\xE4\xF0\x6C\x02\xB8\x4D\x51\x8F\x67\x0F\x26\x3E\x9F\x91\xA0\x25\x03\xC4\x43\x81\xA5\x35\x64\x9B\xD4\x77\x5B\xF4\xDF\x04\x41\x8E\xAD\x4A\xDA\x93\xBF\x9B\xF1\x3B\x15\x0D\x51\x58\x94\xF6\x6A\x66\xCD\x9C\xBC\xAE\x50\x98\xF2\x2A\x2B\x4D\xC7\xC7\x6E\xBC\x2E\x72\x21\x33\x1E\x02\x42\x91\xC2\xA3\x9A\xF0\xE5\x1B\x6A\x2B\x14\xEA\xDF\xAE\x76\xDE\x42\x52\xA3\x40\x41\xBB\x3A\x1C\x68\x5D\x82\xEE\xCD\x91\xDC\x45\x5A\x30\x3B\xD5\x16\x1E\xF6\x8A\xFF\x9F\xBD\xF7\x0F\xB6\xE4\xB8\xCE\xC3\xBA\x7B\x7A\x7E\xDD\x99\xFB\xDE\xEC\xF2\x81\x5E\xEB\x6D\xE2\xBE\x13\x24\x7E\xA8\xE2\x16\xF0\x07\x6B\x81\x10\xB4\x85\x46\x71\xDF\xDB\x5D\x40\x00\x2A\xC5\xAA\x28\x15\xA6\xC2\x3F\xF4\x07\x33\x0F\x74\xF0\x16\x0B\x14\x6C\xC3\x78\x4B\x71\xA1\x50\xB2\x14\xD1\x12\x25\xCA\x0A\x15\xC1\x0E\x65\x50\xB0\x59\x25\x47\xB4\xC3\xFC\x2A\xC2\x16\x1C\x47\xB6\x6C\x33\x0E\xE9\x24\x12\xE5\x58\x96\x6C\xD3\x8E\x28\x82\x2E\xD1\x92\x29\x93\x9B\xEA\xEF\x3B\xDD\x33\x73\xDF\x7D\x8B\x65\x48\x49\xAE\x58\x8B\xC2\xEE\xBD\x77\x66\x7A\xFA\xC7\xE9\xEE\x73\x4E\x9F\xF3\x7D\x41\x70\x6A\x57\x77\xEF\x43\x09\xCD\x7C\x24\x36\x8F\x05\x94\xFB\xCA\xD5\xF3\xB1\xA8\xBF\x9E\xB1\x70\xCB\x34\x02\x95\x43\x66\x49\xED\xAA\xCB\xCB\x69\x8A\x93\xE1\x28\xE8\x61\x2B\xD3\x36\x53\xC4\x00\x8E\x63\x62\x94\xC5\x23\x18\x85\xC8\xC5\xFD\x9F\xC3\x35\x8F\xC5\x78\x55\x07\xBD\x1C\xE6\x45\xDD\x66\xE3\xAD\xC2\x85\x41\xB0\x54\xB9\xD1\xA4\x1B\x91\xC7\x52\x0F\xE0\x5E\x71\x3A\xEA\x4B\x4D\xF7\x7D\x37\xD9\x37\xBA\xF9\x10\x73\xC9\x11\x84\x16\xBB\x5F\xD0\x80\x3E\xD0\x1D\xF9\xEA\x40\xD2\xB1\x5A\xA7\x39\x4A\xF2\x2C\x66\x88\xF1\x3B\x4E\x4F\x47\x50\x8F\xEB\x22\x47\x70\x65\xB9\x7A\xED\x84\x89\xE8\xE3\xA0\x00\xAD\xCF\x37\x5C\x78\xE5\x27\x60\x1E\x48\xD1\xCD\xDF\x08\xEB\xF7\x98\x17\x66\xD3\x82\x95\xFB\x37\x5F\x91\x83\xAF\xB6\x57\xBE\xE6\x99\x14\xB0\xEE\x8C\x05\x2E\xA5\xCC\xCA\x57\xD5\xD3\xE1\xCD\xBB\x42\x14\x91\xA3\xF5\x40\xEA\xE3\x7A\xB6\x1F\x0F\x1A\x72\xFF\x47\x07\x81\xEB\xC4\x05\x60\x1B\xF8\x52\x90\xF8\x92\x40\xBA\x51\xEA\x83\xF9\x48\x97\xDE\x9E\x69\xC3\x9A\x6B\xBD\x7E\x50\x4B\xEE\x47\x1B\x07\x3B\x6D\x36\x66\xBA\x2E\xE1\x9E\x1D\x26\xC6\xBD\x88\x98\xCD\x2E\x88\xF5\xE0\x32\x9E\xF0\xC8\x46\x26\xCA\x55\xA8\x50\x11\x16\xE2\x30\x8E\xC0\x11\x4A\xC8\xD5\x54\xB7\xE1\xB5\xE0\x3E\x00\xBC\x10\x24\xB4\x58\x67\xC2\xA6\x10\x1A\x1B\x16\xAD\xB7\x69\x7D\x1C\xB7\x8E\x30\x5B\xE6\xEA\x6C\xDC\x0B\x01\xFE\x2D\x98\x2E\xCE\xBE\x17\x3E\x96\xE6\xAD\x7C\x34\xC7\xEF\x02\x7D\xDC\x17\xA0\xF0\xCB\x2E\xEF\xAE\xB2\x18\x58\x90\x07\x6D\x21\x27\x3A\x7D\x63\x95\x57\xCD\x87\xAC\xB6\x13\xE4\xC3\x7C\x0D\x94\x2F\x61\xDA\x69\x62\xBB\xF8\xCF\x97\x57\xD1\x3B\xFF\xB4\xBC\x9C\x86\xD7\xF8\x85\x9C\x31\xC6\xE1\x4D\xD0\x38\xEC\x7F\x26\x39\x85\x76\x4D\x84\xC2\x50\x28\xD6\x9F\xA2\x88\x97\x69\x40\x0B\xBF\x80\x4B\xFB\xE9\xA0\x7D\xED\xCA\xC8\x96\x41\x13\x0C\x5D\x58\x84\xC5\x6A\x87\x69\xFB\x5D\x6F\x65\x9C\x0B\x8E\xB3\x9D\x8E\xB3\x4D\xE3\x1C\xF7\x1F\xA8\x84\xDC\x76\x80\x4C\x9E\xC6\xB9\x0A\xE3\x5C\xCD\xC6\x39\xEA\xCE\xC5\x38\xCE\x45\x18\x67\x68\x6D\x45\x18\x67\xA8\x6C\x88\x49\x2D\x65\x9C\x2D\x95\xDA\x50\x49\xFB\x36\x85\xB8\x76\x82\x77\xB1\x07\xCD\x65\x9E\xF8\x86\x51\xB9\x5B\x40\x61\x72\x7F\x5E\xE2\x8F\xC3\x5E\x2D\x9F\xC2\x3F\xAD\xCB\xFD\xAB\x37\xFF\xD0\x45\xB3\xE7\x72\xFF\x2B\xFF\x90\x99\x79\x18\xF1\x6A\x70\xA5\xFF\x7C\xE9\x75\xF7\xC3\x37\x89\x0D\xB9\x71\x4C\x70\x67\xF7\x61\xCC\x5B\x6C\xB2\xE3\x57\x00\xD3\xB9\x7C\x84\x6A\xB4\xCD\xDF\x5C\xE8\x72\x92\x34\x60\x13\xAA\x83\xF2\xE7\x78\xE2\x2A\xD1\xE8\x34\x0D\x0A\x0A\x16\x93\x4D\xFA\x2A\x28\xC2\xAF\xE8\x3F\xD2\x2F\xA2\x15\x59\xBB\x85\x7F\x45\x3F\x79\xE8\xCF\x3D\x39\x84\x3B\xA6\x80\xBC\x58\x5B\x7A\xC9\xBD\x42\xC8\x0E\x06\x73\x87\xFC\x25\xA5\x40\x5F\x86\x26\xD5\x41\x93\x2E\xBC\x79\x26\x94\xC5\xA8\xEF\x62\x37\xA8\xAB\xC3\xA1\xD7\x83\xFF\x0C\xCC\x92\xDA\x3F\x3F\xAC\x61\x69\xB4\x88\x7F\x01\xAA\xC4\xB9\x60\x54\x94\xAB\xDC\x95\xE2\x69\xD3\xF4\x97\x94\x4E\x21\xA3\x03\x2D\x14\x72\x0D\x80\xD0\xA0\xAD\x1B\xDE\xAA\x44\x86\x0A\x90\x85\x74\x3F\x1D\x73\x23\x77\xF0\x96\x81\x6D\x68\x57\x74\xA9\xF3\x34\xB8\x72\xF9\x3E\x2C\xA2\x02\x9D\x53\xC6\xCE\x29\x5C\x99\x3A\x07\xD5\xA3\x44\xE2\xB4\x06\x90\xB6\xF4\x6F\x8F\xB0\x70\xE7\xB0\xC9\x5D\x34\xE7\x18\x9F\x5C\x49\x92\xCF\x40\xF0\xDB\x50\x76\x1E\xCB\x2E\x5D\x9E\xCA\xEE\xCB\xD0\x44\x02\x67\x73\x87\x25\x8B\x90\xF5\xC7\xDC\x3B\xD4\x9E\x71\x48\x48\xB9\x68\x1C\x4E\xB3\x14\xFC\x97\xC0\x48\x05\x43\x54\x19\x5E\x26\x88\xD1\x67\x20\x11\x0A\xA8\xB3\x61\x12\xBD\x4D\x6D\x87\x7A\xC4\xBB\xAC\xDF\x8E\x58\x4B\xD5\x99\xEF\xC6\xAD\xBD\xC1\x12\x7C\x41\x6D\x23\xBE\x0D\x7A\x68\x6C\xAB\xDF\x91\x0C\x8A\xA0\xC7\x16\xBD\x11\x24\xD3\x0A\x27\x52\xE2\xBF\xAB\x88\x2B\x24\x11\xF4\x6A\x82\xCA\x9B\x1E\xCA\x94\x48\x36\x77\xD4\x3C\xF4\x7D\xDD\x10\x00\xA4\x72\xE6\x31\x61\x36\x15\xA4\x61\xE0\x6F\x93\x56\x09\x0B\x2B\x72\x2C\x6B\x80\x2D\x33\xB6\x8F\xA2\x1B\xAF\xF7\xD5\xC1\x32\x0B\x22\x19\x46\x99\x17\x05\x4C\x2A\x42\xA2\xE6\xBC\x56\x44\x24\x3F\x40\x15\xCC\xB2\xFA\x29\x82\xE1\x3D\x05\xDE\xD8\x8C\x3D\x56\xEE\x99\x96\xCF\xC7\x3E\x6E\xCF\x7C\x8F\xF4\x31\x1A\xE8\x21\xDF\x25\x28\xA5\x98\xDF\xF8\x7D\x11\xF4\x2E\x4D\xA1\x7E\x3A\x5F\x28\x7C\x1B\x84\x37\xA7\xBC\x4C\x66\x4D\x75\x07\xB3\xE6\x12\xB3\x0C\x4F\x88\x5C\x0E\x91\x2B\xD2\xD9\x0E\xE4\x5B\x44\x2E\x0F\xB5\xE5\xEA\x1F\x46\x03\xAC\x9B\x0C\x08\xCF\x7D\x37\x04\x4B\xA3\xE0\xDE\x98\xF3\xB2\x8E\x91\x91\x25\xA2\x5B\x62\x4B\x0A\x2E\x33\xE5\x61\x90\xEC\x49\x5B\x72\x24\x7D\x9C\x63\x5D\xFA\xFC\x94\xB9\x98\x73\x2E\xB2\x90\x88\xD6\x5E\xB8\x92\xAE\xAD\x92\xB9\x4F\xB7\x69\xC5\x6D\x26\x65\x75\x72\x52\xB6\xB4\x75\x26\xA0\x97\x5F\xD0\xBA\x08\x36\xEE\xCD\x5F\xA6\xE4\x4E\x96\x51\x3D\x5B\x46\x0D\xF0\xE6\xE4\xA4\xAB\xB7\xB7\xED\xDA\x70\x87\x04\x60\x4E\x96\x51\xE0\xD5\x65\x6C\xA8\x24\x6E\xC4\x00\xC8\x24\x16\x08\x7D\x34\xB3\x7E\x34\xBB\x41\xEB\x9F\x0A\x44\xFE\x06\x02\x11\x14\x96\x60\x43\x0B\x92\x94\x1D\xBA\x1F\xE1\xB1\xCB\x6F\x27\xE8\xD1\x67\xD5\x26\xD0\xA3\x57\xF4\xEF\x38\xE8\xD1\x3F\x08\x23\x3A\xF1\x04\xBC\x79\x6A\x41\x65\x92\xAD\x03\x4F\x11\xB2\xC6\x60\x1A\xA5\x54\x63\x0C\x9B\x6F\xC7\xA3\x5C\xD4\xC3\x3F\xF5\x38\x57\x27\xA8\x08\x0D\x40\xAC\x7D\x37\xF8\xA7\x8E\x62\x30\xEA\xAA\xA4\x69\x26\x76\xCE\x35\xC4\xED\x22\x4F\x9A\xD6\x83\xF6\xFA\x7A\x72\x0C\x95\x61\x67\xA3\x60\x3B\x3D\x89\x00\xD0\xA2\x68\x00\x86\x70\x07\xA2\x31\xB5\x13\x6C\xF7\xFD\x74\xE2\xFC\x35\xA3\xF3\x75\xBF\x4C\xD4\xE6\x18\xE1\x30\xD1\xE6\x92\xC1\x69\x26\xFD\x10\x4D\x17\xA7\x7C\xDE\xFD\x57\x37\x37\x80\x48\x68\xF1\x5A\xB7\xD2\xBF\xA1\xC4\xDF\x77\x40\xAC\xC2\x36\x68\xE1\x3C\xEE\x09\x5D\x44\x8B\xA2\xC5\x89\x90\x6F\x0F\x96\xC6\xE5\xFE\x4F\x0C\x5B\x67\xAD\x59\xFB\x63\xCD\xB4\x3E\xBF\xEF\x64\x7D\x84\xD0\x24\x3C\xAC\x95\xFC\x31\xF2\xAF\x56\x82\xA9\xDF\x12\x5F\xB4\x0B\x52\x71\xD1\xB4\x78\x46\xBB\x4C\xB4\xCB\xD9\x35\x97\x89\x5F\x88\x8E\x08\x5C\x89\xAE\x22\xDD\x7C\xCE\xEA\xC5\xB1\x39\x81\x69\xD4\xA1\xC5\xE2\x46\xB1\x24\x66\xC8\xFD\x5D\x8F\xE0\x7C\xC6\x02\xDD\x86\xAA\xA1\x57\x71\xEC\x5B\xD3\x64\x00\x87\x6C\x81\xFE\x4F\xDD\xEF\x96\x3E\x82\xB9\x04\xB5\x54\x34\xD0\x81\x7C\x33\xF0\xAD\xAC\x0A\xF4\xA0\x94\xDD\x6A\xA4\xA5\xCA\x51\x30\xFB\x3C\x6C\x3A\xC0\xB1\xA7\x81\x6B\xAF\x2C\x75\x9B\x37\xD1\x39\xF9\xC8\xD2\x92\x89\x67\xC4\x01\x2C\xB9\xDF\x8F\xDF\x59\xFB\x8C\xCE\xAE\x92\x74\x8A\x16\x30\xA4\xA1\xF0\x55\x2D\xD3\xF5\x96\x3E\xEA\x33\x54\x36\x5A\x16\x61\xCF\x96\x4D\xCD\xC4\xFC\x3E\x57\x5C\xC2\xB1\x68\x05\xDF\x63\xB0\xE6\x57\xB9\x5B\x70\x0B\x5E\x65\xA0\xD0\x32\xD7\x87\xF0\x92\x22\x03\x43\x79\x18\xDE\x7F\x7C\x93\xEB\x6A\x64\x4B\x28\x70\x3D\x52\xC7\xD3\xE4\x89\x9C\x00\x86\x43\x03\xAF\x9F\x58\x07\x2E\xFB\x86\xCD\xBF\xC6\x25\xB6\xF6\xB0\xEF\x33\x5A\x07\x27\x2E\xF5\xCA\xC0\x41\xCD\x0E\x32\x2D\x33\x83\xC1\xDD\x50\xD2\x3A\x55\x5E\x77\xAF\xDF\xA4\x25\x4E\xBB\x21\xD8\x6D\x00\x8C\xC8\x5C\xF1\x36\xA5\xB9\x7C\x77\xC9\x6D\x3F\x3A\xEA\xFF\x27\xA3\xB3\x63\xA7\xBA\x1F\x95\xA5\x57\xA6\x15\xC4\x34\x49\xA1\x53\xBE\x18\xE7\xDF\x28\x7D\x9C\x65\x93\xB9\xBC\x9F\x2C\x33\xED\x4B\x41\xEA\xBC\xC7\xD8\x64\xAE\xBB\x58\xB0\x72\xFA\x5E\x6D\x26\xE8\x09\x1D\xF5\x29\xED\x9B\xB0\xB4\xE8\xDF\x36\x23\x5B\x8F\xC6\x97\x4E\x46\xB6\x5E\x33\xB2\x27\xEE\x56\x22\x22\xB3\x17\x0C\xB0\xFC\xA6\xAE\x8B\xD7\x34\xB0\xD1\xEF\xBC\xF7\xE4\x06\xE8\xC4\x08\x33\x99\x70\xAF\xB4\x4B\x09\x3E\x11\x10\xD2\x2E\x39\xB1\x75\x72\x62\x2B\x1C\xC1\xB1\xC9\xDA\xA9\xB1\xC9\xC1\xE4\x88\x91\xA3\xD1\x5B\x1E\x9B\xBC\x9D\xC6\xA4\x58\x1B\x93\xD0\x20\xDD\xFC\xCF\x5A\x1C\x30\x12\xA5\xE9\x5F\x18\xB6\xAC\x21\xD4\x83\x4A\x5A\x23\xF7\x53\x6C\x65\x88\x05\x44\xF0\x81\xB4\x50\x47\xF4\x42\x05\x2D\x9A\x51\x01\x91\xD8\x94\xD1\x35\x2A\x76\x22\xD7\x38\xB0\x1F\x86\x31\xD6\x88\x0B\x03\xA5\x4B\x76\x34\x4D\xED\xDF\xC6\xCB\xCD\x4A\xC7\x47\x27\x5B\x84\xB8\xA7\x80\x75\xDF\x7C\x64\xE2\x7E\xE8\x12\x27\x00\xFD\xBE\xC9\x09\x08\x60\x77\xEB\x61\x3E\x61\xE9\x36\x26\x8B\xEC\xE7\x8F\x8C\xF0\xDD\x4E\x16\x01\x3D\x48\xD0\xAA\x88\x8B\x8A\x96\x9C\xA0\x7D\xEE\x99\x8A\x5F\xA8\xBB\x18\xA0\xB1\x62\xD0\x52\xFA\x49\xD7\x5B\x71\xCB\x26\x4B\x4F\x4E\x3C\xBE\x6F\x02\xED\xDA\xC9\xD3\xAD\x30\xAD\x1F\x0F\x5C\x8D\xC3\x23\x64\xD7\xC8\xC7\x60\x63\x3D\x6A\x6A\xD1\x8F\xCD\x14\x0D\xB8\xB3\x49\xCB\x60\x9D\x3E\x14\x9D\x21\xCA\x0C\xD0\x77\x42\xE3\xEC\xD8\xBF\xE9\xB0\x5D\x1A\x2E\xCC\x60\x74\x73\xE0\xA9\x59\xCB\x57\x3A\x36\x3B\x88\x4C\x06\x15\x31\xE9\x22\x10\x07\x9C\x11\xAC\x89\x03\x25\x2A\x88\x44\xBE\x95\x29\x78\xA2\xA7\x7D\x55\x09\x3D\xA6\x05\x32\x2C\xA5\xC4\xE5\xDD\x6F\xA0\x8C\x7C\x5C\x65\x95\x2C\xC0\x13\x71\xC9\xD7\xC4\xA5\x89\x84\x65\x99\x44\xC2\x26\x64\xB1\x1F\xAB\xF4\x72\x02\x46\x95\x89\x4A\x9D\x85\x0E\x3C\xE7\xB2\x30\xE0\xE7\x5D\xC6\xF9\x96\x21\x57\xD6\x65\xBE\x0A\xCB\xC7\xF9\xF0\xD7\xB9\xA1\xFB\x33\xA1\x1E\x84\x57\x6E\x7B\xC5\xD7\x28\xFF\x24\x8C\x02\xFF\x1E\xD8\xE9\xFE\x3B\x88\x3F\xA4\xFC\x53\xC9\xD9\xAF\xFC\xF5\xA1\x47\x26\xB5\xDE\x4F\x3B\x16\xBA\x56\x3C\xF0\xF6\x99\xCB\x02\xF0\xEC\xF5\x63\x08\xC3\xD1\x0C\xCA\x69\xBC\xBD\x3E\xF4\x58\x9E\x1A\x34\x77\xA5\xC9\xA5\x25\x67\xEB\x82\xA5\xDF\x84\x7F\x44\x8C\x26\xA7\x6B\x02\x12\xDC\x89\xEB\x27\x13\x32\x91\x36\x58\x8C\x68\x99\x76\x0D\xDB\x44\xDE\x97\x30\x53\x74\xA2\x03\xEE\x31\x44\xD7\xFB\x76\xE8\x97\xA4\x47\xDE\x22\x62\xB1\xB9\x8E\x80\xB8\xC6\x6D\x0F\x80\x79\x63\x30\x02\xE2\xA7\x75\x98\x2E\x7A\x7C\x5C\x0F\x3D\x8C\xD7\xD5\xD2\x35\xAE\x0D\x4A\x73\x3B\x48\x59\x57\xE8\x33\xA1\xC5\x1D\x5A\x7E\x3C\x44\xC9\x00\x69\x24\xA7\x9F\xDB\x0A\x9F\x5B\x67\xBA\x7F\x7E\x53\x30\x85\x32\x6F\x9C\xE9\xBE\x24\xE7\x0B\x25\x91\x96\x23\x16\x41\xAC\x41\x0D\xE7\x82\xF0\x6A\x34\x72\x43\x2C\x75\xFD\x1E\xB1\x9F\x97\x70\xA9\x77\x43\x5F\x23\xED\x9D\x6E\x8C\xE5\x63\xB1\xCD\xEC\x0E\xC6\x02\x02\xC8\xC4\x35\x83\x6B\xDD\xF6\x20\xA5\x36\xA1\x0B\x9A\xB5\x9E\x60\x17\xB8\xE5\x65\xF1\xC1\xE3\x03\x81\xC7\xEB\x86\xFE\x46\xE5\x16\x38\x07\x6D\x68\xB6\xAA\x5E\xCC\xFB\xB9\x9A\xB7\x65\x33\xA5\x8D\x95\x06\x17\xF0\x17\xB8\xAA\xFB\xB3\x32\x7A\x93\x9F\x8D\xAB\xBA\xFF\x06\x3F\x1B\x69\x58\x23\x02\x0B\x50\xEF\x5E\x1F\xFA\xF3\xFB\x84\x68\xF0\x4F\x8D\xC9\xF0\x41\x48\x05\xF4\x78\x44\xA5\x7D\xF7\xD0\x4B\x92\xBC\x8E\x3E\x07\xFF\x4E\x01\xB7\xB6\xEC\xF2\x16\x72\xF5\x1D\x90\xAB\x6C\xBD\x7A\x1F\xE5\x11\x9A\x25\x8E\x80\x62\x9E\xBB\x0E\x02\xDF\x37\xAE\xF1\x8A\x23\x9F\xED\xEF\x06\x69\xDD\xDF\xA5\x6F\x26\x7A\xD2\xD8\x70\x2E\x82\x1A\x23\x99\x3D\xC4\x09\xB6\x3D\xA9\x7C\x99\x2A\x5F\xD2\x5D\x2A\x95\xDF\x5E\x85\xFD\x6D\x1B\x36\x1A\xE0\xD0\x55\xC3\xA9\xDE\xC6\xED\xB0\xC1\xA9\xAC\xAC\x02\x4D\xF3\x83\x36\x65\x71\xC6\x6C\xC2\x2C\x1E\x81\xFB\xF3\xEF\x0D\x5A\xDF\xD0\x17\xFE\x6F\x7C\xF4\x07\x7E\x56\x3D\x2E\xB5\xA3\x17\xC0\xF1\x86\x32\x1E\xCB\x17\x57\x76\xFD\xCF\x86\xDB\x5C\xE9\x3F\xFA\x03\x3F\x7B\xF7\x95\xDD\xBE\x18\xBD\x03\xA9\x08\xE3\x0A\x7F\xFE\xC9\xA8\xF9\xD2\x6D\x70\xFE\xC9\xA1\xAF\x38\x8D\xAB\x98\x38\xE2\xAA\x94\x81\x57\xA5\xC9\x5C\xE2\x61\x12\x79\x9F\x07\xF4\xAD\xB3\xFB\x4B\xE3\xAC\xCB\x0E\x57\x61\x32\x97\xD9\x43\x3C\xF5\xB7\xFE\x3B\xC2\x28\x66\xE1\x73\x11\x3E\xF3\xD8\x84\xE8\x02\x88\x30\x72\x36\x2C\x50\x39\x0B\xD6\x29\x4C\xD8\x86\x25\x4C\xB0\x8C\x72\x57\xF8\xEB\x51\xD2\xB5\x2B\xC2\x25\x93\xD2\x3D\x9F\x1B\x5C\xE1\x9F\x1B\x7A\x9D\x7E\x79\x7E\x80\xE2\x9C\x26\x1C\x21\xCD\xF8\x86\xC6\x95\xA1\x1A\x25\xCD\x67\x49\x45\x44\x72\x6B\x42\x33\x8B\x88\x70\xA1\x01\xB4\x4C\xB3\xFD\x25\xA8\x1F\xC3\xF0\x17\xD8\x1F\x27\xC3\x6F\x4F\x0E\x3F\x20\xF1\x5D\x71\x10\xA1\xFA\x63\x3C\xC1\x08\x24\x16\x73\x20\x27\xF8\x69\xCD\x7A\x04\x4C\xF3\xB3\xE3\xD1\xAF\x1C\x1C\xFB\x09\x29\x7B\xF6\x90\xCB\x25\x34\x03\x67\xB8\x18\xE3\x28\x40\xD8\x63\xE9\xEA\x5B\xD3\xA4\xAA\xA8\x49\x79\xCC\x08\x82\x3F\x80\x48\xD1\x9B\xFD\x5D\x4A\x09\x02\x56\x84\x40\x05\x07\xF4\x95\xBF\x3E\xF8\x9A\xEE\xB5\xC5\x01\x52\x4B\x77\xE8\xC7\xD9\x33\xDD\x81\xF8\x22\xF3\xB4\x55\xE7\x7B\xA6\xE2\x63\x3B\x8F\x2C\xB5\xD7\xAE\xBA\xEE\x3F\xF0\xD2\xAB\xEA\xE8\x12\x0F\x7B\x73\xBE\x37\xDD\xA2\x26\xB7\x90\xE3\x71\x09\xEA\xB7\xDC\x95\xDD\x6F\xE2\x28\x40\x48\x7A\x0B\xE8\x4D\xB0\xA6\xE0\x80\xA6\xC1\x24\x79\xAC\x05\xB1\xD3\x61\x57\xAD\x72\x21\x90\xE0\xB2\xD6\xFD\xD7\xD1\xB0\x8A\xD9\xA9\x20\x67\xEB\x2B\x1E\x4F\x5A\x57\x1C\x82\xAB\x8F\xCF\x62\x24\x10\x20\xC4\x45\xAB\x7A\x9C\x90\x6A\x61\xFA\xE6\x61\xC8\x2A\x97\x73\x9B\xCB\x19\xAB\x9D\xC1\x07\x98\xF8\x63\x10\xE8\xDA\x1E\xF6\xCB\xB0\xD4\x6C\x85\xF7\x30\x29\x57\x3F\xBE\xB4\x72\x32\x58\xB9\xF6\xB0\xAF\x7C\xF6\x4C\xBF\xED\xB6\x5D\x2E\xA1\x34\xA1\x7B\xED\x33\xE1\xE3\xB7\x5E\xD9\x05\x36\xB3\x04\xD3\x6C\xC7\xE7\x8B\xB0\xC4\x5F\x9F\x86\xD6\x6C\x61\x97\xBE\x5D\xED\x2A\x3C\xC3\xD4\xDE\x6E\x00\x58\xE0\x52\x08\xEA\x40\xFD\x18\x5D\x2A\x19\x85\x32\x03\xAA\xBD\xCB\xE8\x11\x14\xBE\x73\x11\x6C\x8B\xAC\x70\x7D\x79\x17\xF4\xDB\x39\x7C\x35\xFB\x48\xE2\x42\x04\x4F\x75\x29\x74\xE7\x76\xE3\xB2\x75\x89\xFF\x6A\xAE\xB7\x26\xEA\x8F\x4D\xCA\x71\x3E\x93\x6F\x1C\x68\x81\x46\xB3\x0C\x4D\x8F\xA1\xED\x61\x11\x42\x52\x07\x9D\xE1\x6A\x74\x74\xD7\x91\xAB\xB2\x0C\x02\xFC\x27\x86\xAD\xB3\x4A\xAF\xFD\x09\x42\x5F\xC7\xAB\xC9\x51\xA2\x46\x47\xC9\x78\xA0\x11\x4C\x6C\x4A\x96\xF5\xD5\x20\xA7\xC9\x0B\x97\xAF\xE4\x9E\x47\x23\x6E\x11\xA6\x58\x13\xA7\x58\x9B\x4A\x5F\xF7\xE1\x28\x83\xE0\x80\xAE\x5F\xEE\x99\x36\xD8\x4C\x4B\xF8\x6D\xB3\x87\xDC\x82\x9B\x55\xC9\x64\x94\x78\x20\x5D\xFA\x6A\xE8\x4B\xDC\x15\xFE\x6A\x05\xD6\xA5\x35\x4D\xE3\x16\x2C\xA9\x74\xA5\x6B\xEF\xD5\xA6\xFB\x09\x6E\x6F\xAD\x28\xBB\x4D\x90\xB3\xC6\x89\x44\x57\x2E\x3F\x04\xBA\x54\x4E\x89\x76\x0B\xDA\x68\xCE\x74\xFF\x02\x53\x66\x8B\xCE\x8C\x20\xE5\x25\xA5\x7C\xF9\x38\xBC\x1E\x90\xA3\xD2\xB5\x70\x0E\x53\x8E\x4A\xB7\x45\x29\x2F\x47\x29\x2F\x29\xE5\x8B\xC3\x7E\x3B\x48\x79\xC7\x68\x05\x91\x52\x72\xCE\x94\x6E\xE9\x16\x61\x16\x64\xCF\xF4\x67\xDC\x19\x57\x26\x29\x5F\x4E\xA4\xFC\x0C\x13\xE3\x42\x99\x67\xE2\xF3\xA5\x3B\x33\x4A\x39\xC0\xB5\x3B\x48\xF9\xED\x6A\xB7\xC4\x33\xC3\xAA\x65\xEA\x4F\x50\x83\xB7\x25\x1D\xC3\x2D\xDC\xF6\x44\xCA\x5B\x4A\x79\x49\x29\x5F\x42\x09\x02\x8E\x5A\x5A\xBE\x83\x7E\x7C\x8E\xE6\x2B\xBA\x12\xF2\xB7\xBB\xCA\x5D\x1D\x16\xC6\x2A\xC8\xFC\x92\xEC\x8E\x15\x40\xC5\xE1\x26\x8F\xBB\xF9\x26\xF1\xFF\xF1\x42\x9F\x3D\xF6\xA3\xCF\x37\xAD\xE6\xB9\xB0\xC6\x8A\xB8\x0B\xCD\xF2\x22\xB1\xCB\xDA\xBE\x75\xFA\xB1\x7E\x99\x14\x92\x36\xE1\xA4\x84\xD5\x73\xCB\xE7\x07\xA3\x4C\x86\xFB\xEF\xD5\x85\x04\xDB\xD8\x60\xB5\xA6\xD2\xE8\x0A\xAB\x06\x1E\x4C\x5B\xC1\x13\xB0\xD3\x92\xC8\x7D\x32\x7F\x0C\x85\x6E\x8D\xB1\xBD\x36\xF4\x6D\x13\xD9\xF7\xE4\xF8\x79\x25\x51\x56\x8B\xB0\xF8\xD5\x5E\x1F\xF5\x35\xCF\xFC\x25\x17\x6B\x21\xFF\xB8\x02\xB4\xF2\xC8\xB2\xBA\xB2\x4B\x42\x69\x0F\x51\x44\x8A\x0B\xD3\xB2\x1A\xFE\x7B\xB0\x8C\x3C\x0F\xAE\x76\x58\x43\xB7\xB0\x65\xD7\xAB\xAD\xC6\xE5\xAB\xDA\x6D\x85\xE9\xB4\xB5\x2A\xB0\x9F\x20\x78\xDE\xB5\x0E\xF4\xDE\x2D\x86\x66\x1F\xF9\x9F\x85\xCB\xBB\x2F\x43\xE0\xB7\x79\x03\xF7\x08\x7A\xE1\xAC\xAB\x56\x5B\x91\x5D\xB9\xE8\x7E\x9C\x71\x63\x7C\x69\x3B\x79\x29\x92\x07\x0F\x57\x5D\x7A\xF0\x4C\x9C\x3A\x96\x53\x07\xB6\x89\xA5\x70\x5A\xD7\x05\xF9\xB2\xEE\x0C\xFD\xDB\xDB\x9C\x3A\x76\x9C\x3A\x96\x53\xE7\xEC\x61\xFF\xA6\x30\x75\xE8\x5D\x9F\x6F\x10\xD6\x6D\xB9\xB3\x87\xFD\x56\x98\x3A\x77\xB9\xBB\x9C\x4D\x53\x67\x6B\x32\x75\xEE\x1A\x31\xF0\xEF\x1A\x37\x88\xBB\xC6\xA9\xB3\xD5\xB8\x2D\xB7\x83\xA9\x73\xBB\xDA\x6D\xE1\x99\x60\x38\x60\x78\xAD\x79\xC8\xBD\x89\x43\xB6\xE5\xCE\xBA\x37\x4D\xA6\xCE\x36\xA7\x8E\xE5\xD4\xC1\xBC\x3B\x1B\xA6\xCE\xD9\x38\x75\x96\xA1\xFF\x57\x95\x6B\x00\x2A\x5B\xB8\x3A\x6C\x12\x2D\x77\x87\x56\xA2\x81\x36\x4D\x90\x9F\xD4\x11\xFC\x68\x41\xFF\xDB\x82\x99\x16\x37\x3B\xA2\x7E\x63\xCE\xD4\x57\x63\xE4\xDE\x91\xC4\x64\xFA\xDA\xAB\xEE\xCF\x8D\x06\xBA\x4E\xE1\x3E\xC1\xF8\x6E\x2E\x23\x2B\x20\xDD\xEF\xE1\x29\xE5\xFD\xDB\x0D\xBF\xCB\xED\xDB\xCD\xBC\xE0\xF9\x8D\x08\xC4\x91\x72\x9B\xBF\x4B\xC0\x15\x97\xB1\x8E\x93\x8B\x8C\x54\x46\x76\x41\x0A\xCD\xB3\x13\x22\xF1\x5C\x62\xCA\x2C\x62\xCA\x82\x02\xA7\x57\xA5\xC4\x8A\x65\xCE\xAE\x2A\x71\x12\x65\x41\x80\x9F\xED\x6B\xDF\x3E\xD9\x2F\x06\xA2\x58\x6A\x57\x5E\xED\x5B\x84\xF7\x2E\x10\x29\x56\x22\x52\x2C\x43\x1A\x82\x1E\xFA\x05\x22\xC5\xDA\xDD\x55\xE6\x6A\x57\xB9\xC5\xA1\x6B\x77\xFB\x4A\x22\xC5\x32\x57\x04\x8D\x3F\xA3\xC1\x9E\xAD\x60\xE5\x94\xDC\x53\x1B\xDA\x1A\xC6\x65\xCE\x5C\xDE\x5D\x21\xBF\xAD\x22\x36\x48\xCC\x5D\x0E\xB6\x31\xD8\x2C\x2B\x86\x87\x85\x5D\xD7\xEB\x23\x78\x5F\x5A\xDD\xF8\x63\x1F\x36\x0E\x5C\xDA\x25\xC5\xEF\xD3\x5E\x1F\x05\x1B\x13\x9B\xC6\x10\x6A\x34\xB8\x9C\xFD\x89\x17\xC2\x3E\x05\xF5\xE9\xA3\xA0\x46\xFA\xAD\x6A\x46\xBD\x11\xD5\x03\x03\x65\x45\xFB\x1B\x95\x64\x98\xE6\x34\x8D\x46\x57\xA0\xEA\xB1\xF1\x7F\x0E\x06\xB3\x0D\x5A\x80\xEE\x2B\x7F\xEE\xBA\x3F\xF7\x4C\x5F\x5F\x34\x16\xCF\x54\xA0\xA2\xFD\xB4\x18\xD5\x85\x7F\x01\xD8\xCB\xC0\x1E\xF1\x66\xE8\x17\xD1\xFF\xBB\x08\xDA\x61\xF8\xFF\xCA\x6E\xF7\xB1\x38\xA0\x61\x3D\xE0\xD9\xCB\x9F\x83\x3A\xD0\xD0\x7D\x62\xFB\xD6\xDF\xB8\xF1\x1A\x96\xF1\xAF\xDE\xCA\x70\xB2\xF0\xD5\x5B\x19\xA7\xB8\xD7\xA8\x78\x03\x00\x41\xB9\xDC\x86\x7F\xF7\x97\x7A\xC6\x87\x17\x0F\x0B\x8F\xC3\xDA\x80\xDC\x70\x23\x87\xE0\xCA\x35\x93\x1B\x5C\x73\x28\x37\xB8\xE6\xD2\x92\x8C\xD4\x0F\x2F\xE1\x57\x01\x5C\xDD\x3C\x88\x20\xED\x06\xB5\xFF\x2D\xB5\x9F\x50\x2B\xDD\xE2\x70\xD5\x8A\x5F\xD0\x7F\x55\x79\xD5\xFD\xC4\x8B\x8C\x89\x3C\x26\x09\x58\xEE\xCA\x95\xC2\x62\x4C\xDC\xB0\x93\xDD\x61\x83\xEC\x0E\x2E\xF6\x85\x66\x6C\xAF\xF1\xB7\x6E\xFD\x8C\xBA\x2A\x6B\x17\x29\xFD\x10\x87\x4D\x20\xE4\x48\x30\xCA\x0E\xC8\x09\x4E\x9C\xC3\x3B\xB1\x22\x31\x59\x10\xD2\xD0\x67\xED\xA2\x49\x1B\xB3\xB7\x17\xA5\x79\xC0\x00\xC5\xE5\x3A\x76\x4E\xBF\xC0\xA2\xD2\xE7\xD3\x3E\xCA\xA5\x8F\xF2\xB0\xF2\x8C\xCD\x28\x36\x37\x23\x94\x2B\xCD\xA8\xB1\x1F\xF6\xCD\xAC\x19\x75\x6C\x46\x1D\x9A\x51\x20\xF8\x1F\xFE\x9C\xB5\x66\xE0\x64\xA7\x68\x5C\x3D\x69\x46\x2D\xA1\x5F\xCB\x30\x37\xB4\xAB\xFC\xA7\xD5\xFE\xEE\xAA\x09\xCA\xB4\xF1\xCA\x35\x87\xAE\x71\x8B\x20\xB7\x7F\x5F\xED\xF7\x79\xB8\xB2\xF0\x7A\x08\xF2\xB7\x8B\xC0\x9D\xD6\xE5\xB0\x0E\x82\xF4\xBC\xF6\x97\xDF\x0F\xCE\xAA\x85\xFF\xC8\x2F\xDF\xB8\xA1\xF6\x97\xA5\xCF\x56\x55\xFC\xEA\xB3\xEE\x07\xBF\x13\x6D\x2A\xC3\x9A\xF3\xD2\x4F\xBF\xFF\x86\xEA\x95\x57\x8F\x2E\x8B\x36\x6F\xD6\x7E\xCA\x5D\x05\xE2\x85\x13\xB2\x83\x4A\x17\xA7\xFC\x7E\xA2\x18\xD3\xF8\x97\xBE\x1F\x95\xCA\xE8\x3D\x23\x45\x20\x09\x3C\x83\x29\xC4\x40\x05\x7F\x3C\xF4\x8A\xBA\xEB\x78\x7F\xF2\xB8\x89\x53\x02\xFA\x7C\xD1\x7D\x18\xB9\xC8\xD8\xC4\x01\x02\xAD\x82\xAA\xB0\x1F\x0A\x75\x0B\x57\xC5\x26\x66\xCD\x7A\xE1\xCD\x46\x79\x59\xBA\xF2\x30\xD6\x9E\xD0\x54\xAE\x71\xBA\xFB\xD8\x4D\x31\x39\x66\x41\x0D\x79\xF3\xB7\x72\x5D\x9C\xB4\x4D\x64\x3B\xD2\x29\x7A\xB1\x8D\x01\xE3\xB9\x37\x04\x54\xC4\x81\x8D\x33\x43\x1F\x96\x94\x7B\x35\xCE\x2E\x83\xF9\xFE\x13\x3C\x61\x60\xC6\x2F\x3C\x37\x48\x42\x6F\xE9\x87\xD3\x92\x27\xAC\x51\x94\x1D\x8B\xEA\x58\xD4\xF3\x43\xF2\x62\x8D\x45\x55\xF3\xA2\x76\x2E\xB3\x63\xC7\x35\xFA\x28\x1E\x40\x97\xD1\x8B\x2B\xE1\x4C\xC9\x8E\xC9\xD7\x9A\x61\x52\xDC\x7B\x6C\x46\x15\xAA\x5F\x79\x33\x6C\x68\x86\xC4\xC0\xA7\x66\x48\xCE\xC2\xC6\xC2\xD0\x90\x0A\x4C\x78\x31\xD7\x7E\xDE\x90\xB1\xB0\x9D\x58\xD8\xB8\xD5\xBB\xDC\x2F\xFC\x22\x6D\xE3\x79\xF7\xE2\x8B\x3C\x6A\xC8\xBB\xEF\xC4\xA7\x3C\x2C\x41\xF9\xF4\x8C\x49\x1C\xF8\x15\x54\xE9\xA0\x52\x57\x3E\x72\x29\x99\x30\xFF\x43\x83\xFA\x5A\x98\x3A\x11\xB1\x9C\x6A\x04\xFE\x9E\x52\x9E\x6E\x70\x33\x3B\x80\x49\x95\xE2\x2E\xA0\xB3\xC0\x95\xD3\xA6\x87\x9E\xBE\x2C\x84\x42\xE3\x8B\x27\x2F\x85\xFF\xFD\xB1\x53\x5E\xBA\xC3\x97\x76\xE9\xA5\x04\xB4\xA8\xE3\x6B\xAB\xF5\xD7\xBA\x1A\xCB\xD3\x63\x02\x84\x88\x2F\xB1\xC0\xA9\xF9\xD1\xBC\xAE\x25\xF8\x16\x1E\x0C\xEC\x60\xB9\xB8\xB1\xC6\x90\xE5\x78\x68\x92\x8D\xBB\x27\xD0\xF4\x19\x1E\xFD\xCA\xCD\x48\xAF\x9A\x6D\xDA\x12\x89\xA6\x2B\x8B\x67\xCE\x28\x73\xD5\x67\x71\x3F\xE4\x4A\x1F\x61\xE0\x83\xD4\xEE\x27\xBC\x53\xC7\x15\x1B\x5F\xE2\x8A\x9D\xFB\xE3\xAB\x60\xF4\xC7\xC2\x1A\xEF\x94\x0D\x92\x77\x72\x83\x64\xC0\x03\xD7\x28\x9B\xD6\x28\xD5\xFC\xD0\xB6\xAE\x37\x85\x78\x8E\xBE\xD4\x88\x38\xA9\xFA\x82\x0D\xC6\x09\xB1\x79\x58\xDF\x8F\xDC\xFB\x1C\x82\x49\x4C\xD7\x58\x67\x9C\xF0\x3E\x5C\x6D\xBA\x21\x9D\x04\x51\x89\x28\x24\x5E\x0A\x6E\x88\xCD\x2A\x44\x3B\x53\x21\x4A\xAA\x10\x6D\x5F\xA5\x2E\x13\xE5\xA1\x8D\xB1\xC6\x25\x2B\x50\xB1\x4F\xCC\xA8\x34\xF4\xF5\x4C\x6D\x08\xCA\x0B\x43\x8D\x9D\xD0\x85\x4E\x6F\x70\xE5\x21\x6E\x40\x0B\xCA\x60\x73\x9A\x0D\x6A\xC2\x09\xB5\xA1\xF2\x4F\x0C\x5B\x57\x4C\xF4\x9F\xDC\xE9\x9F\x3A\xFC\xB5\x90\x2F\x85\x52\xAA\x54\x95\x6A\x54\x0E\x04\xE8\x5B\xEA\xEA\xB2\x71\x55\xF7\xB5\xF7\x11\x0F\x36\xBC\xC3\x2F\xAE\x2C\x1B\xA7\x96\x41\x11\xAC\xE2\x82\x7D\xA6\x09\xD6\xF8\x82\x2E\x9B\xDF\xD4\xC8\x7D\x5E\xE0\xF6\xC4\xDA\x1B\x6E\x60\x96\x01\x93\x87\xA8\xEE\x01\x5C\xAE\x8C\x8F\x00\x09\x58\x10\xC9\x91\xEC\x15\x07\x09\xB8\x48\xAE\x1A\x50\x60\x50\xD2\x46\xBF\x12\xF4\x47\x95\xF4\xC7\x86\x31\x15\x15\x8B\xDC\x9F\xFA\x9F\x16\xFE\x85\x21\x96\x6B\xA4\xCB\x51\x6E\xC3\x72\xE1\x05\xBC\xBA\x2C\x49\xFB\xC0\x86\x2D\xD1\xB0\x02\x11\xC4\x36\xFC\x3F\x8A\xC8\xE2\xEB\x12\x91\x66\x93\x88\xB4\xDF\x34\x11\x59\x92\xD1\xE0\xB7\xB0\x28\xDC\x51\x65\x17\xB1\xB2\xE5\xA9\x95\x5D\xB0\xB2\xE5\x1B\x56\xB6\x9A\x57\x76\x31\xAF\xEC\xE2\x10\x37\x50\x08\x42\x65\xB7\x82\x40\xB4\xF4\x54\xF0\xF0\xD0\x3F\x31\xF4\xB9\x5F\x5C\x21\xE2\xBB\xFF\x4F\x8F\x90\x09\x97\x3F\x12\xAC\xA5\xC6\xDB\xEB\x44\x20\x97\xB4\x32\xB9\x14\x6E\xBC\x42\xF9\x72\xA5\xFF\x49\x04\x12\x96\xFE\xC7\x8F\x07\x5F\x5C\xD9\xE5\x68\x36\x43\xDF\x84\x21\xAD\x5D\x75\x69\x59\x23\x96\xD6\x86\xFF\xC7\x7E\x69\xBE\xAE\x7E\x69\x53\xBF\xEC\xC7\x88\xE5\x49\x6B\xD9\x56\x01\xB3\x3F\xAD\xCF\xD8\x63\x8C\xBC\x05\x45\x6C\x1B\xBE\xB6\xB1\x73\x1E\x5B\xAA\x76\xBB\x81\xD2\x59\x86\x42\xD4\x01\xE4\xB1\xB9\x03\x79\x2C\xA9\x1F\x4F\x9A\x92\xB1\x29\xD5\xC9\xA6\x54\x6D\x35\x83\x4B\x97\xEA\xD6\xA7\x0E\xF1\x7C\x80\xB3\xF9\x00\x67\x87\x71\x78\xB3\x24\x8B\x96\x07\xDE\x32\xAE\x30\xE4\xC7\x51\x05\xFF\x18\x06\x3D\xE3\xC5\x72\xFD\x22\x1F\x82\xD1\x93\x86\x5B\xA5\xE1\x56\x32\xDC\x6A\x36\xDC\x41\x4E\xE8\x6A\x90\x67\xD7\x45\x25\xDB\x2C\x2A\x19\x82\xEB\x9C\x1A\x62\x27\xB7\xC1\xBE\x59\xC4\x6F\xA0\xE7\x58\xC6\x6F\x80\x42\xA8\x27\xB6\x0D\x83\x95\xF0\x0D\x09\xF9\x6D\xFC\x56\x86\x6F\xCD\x44\x51\x4F\x14\x7B\x26\x22\x75\xBB\x1A\x0C\xF6\x44\x22\xCC\xC3\xDE\xB6\x3C\xB9\x75\xD9\x53\x7E\xCF\x4E\xF9\xDD\x9C\xF2\xBB\xDE\xFC\xFB\x9A\x5E\xFD\x2B\x4D\xA6\x8F\xF5\x0B\x67\x4E\x6E\xCD\xCE\x12\x98\x2D\x17\x82\x06\xD1\x56\x10\x03\xFC\x72\x58\xF7\x7F\x81\x1B\x74\x16\x37\xE8\x62\xB4\x49\xA6\x19\x52\xA5\xDF\xA1\x90\x4D\xD2\xC1\xAA\x74\xB5\x4E\x0E\xFC\x92\x98\x43\x72\x9A\x5C\x24\x99\xA4\x72\x41\x88\xF9\x36\xA2\xE4\xB5\x3C\x50\xC0\xDE\xB2\xF4\x7F\x5F\x74\xA3\xC6\xBF\xC0\x7B\x70\x00\x69\x06\x89\x33\x0A\x2F\x4F\x8A\xEB\x62\xA2\xB8\x32\xA0\xA4\xC5\xF4\x83\xA7\xD4\x5E\x5B\x6D\x05\x43\xEA\xF5\x5F\x81\x37\x32\x7C\x7C\xF5\x0B\xE1\x63\xE7\x35\x7D\x41\xD0\xFF\x80\x89\xBF\xB6\x1F\x17\x54\xEF\x1B\xA4\xAF\xFE\xA2\x4A\x69\x64\x05\x7F\xEA\x1B\x7F\xE1\xE0\x1A\xEF\x09\xF3\x0D\x47\x79\x47\x70\x7D\xB5\x92\xCC\x77\x41\x69\x3C\x38\x81\x83\xAC\xA9\x83\x83\x88\xB4\xF6\xD6\xD5\x6B\x3A\xCB\x68\x1D\xC7\x78\x91\x62\x7D\xEA\x2B\x22\xBB\xE9\x03\x64\x41\x7C\xF5\x56\x76\x00\x97\x14\x25\x5C\xAD\x34\xEC\x3B\x24\x06\xAA\xCB\xCB\xB6\x89\x36\x1A\xF3\x04\x25\x7C\x64\x72\xEC\xA4\xC3\xCA\xB0\x60\xD3\x5A\x9F\x5D\xE9\xCF\xA0\xD1\xBF\xC0\x8D\x28\x34\xE1\x6D\xE1\x53\x4B\x8C\xB1\xD6\xDB\xCB\x92\x44\xB0\x3A\x4B\x73\xFB\x4D\xAE\x75\xF5\xE0\x5F\x18\x56\x3B\x34\x47\x60\x4E\x16\x43\xBF\xF0\x40\xA5\xE1\xF3\x0B\x9F\xE1\x4B\xE8\x0F\x24\x35\xD2\x1A\x09\x6A\xBF\xDB\xF9\x36\x98\x68\x67\xC0\x17\xFE\x39\x38\xA1\xF1\x62\x77\xCD\xBF\x8E\x6F\x42\xF9\x8D\xE4\x86\xAC\x7B\x39\x48\xDC\x96\x29\x17\x50\x1A\x25\x76\xB0\xF0\xCF\xEF\x2F\xAD\x2B\x82\xE5\x70\x97\x7F\xE9\xF3\x0C\x15\xE9\x56\x6F\x16\xEB\x17\xEE\x3C\x9E\x7A\x20\x47\xF8\x8C\x58\xBF\x3B\xA1\x8C\x1D\x1C\x5E\x87\x6A\x9E\x71\xF5\xFE\xB2\x0A\xFF\xB8\xBB\xA2\x01\x5C\x85\x2D\xEC\xDC\xB0\x22\x62\x4C\xFF\xE6\x60\x16\xE0\x3D\x88\x74\x95\x4F\x36\xC5\x7A\x2F\xFC\x0D\x3A\x34\x21\xE5\x67\xE8\x34\x83\x98\x35\xA3\xDA\xCF\x43\x12\xFF\x0F\x7E\x99\x9E\x90\x6D\x61\xAE\xAD\xC5\xAE\x57\xD1\x3A\x67\x68\x55\xE1\x1A\x34\xEE\x5E\xA5\x5C\x73\xAF\x52\xFB\x80\xA6\x0B\x75\xAA\x85\xD3\x96\x87\x08\x0F\xAB\xFB\x33\x89\x10\x42\x7E\xB8\x13\x97\x4B\xD6\xFD\xE4\x4D\x36\x25\xCD\xFA\xBE\x9E\x54\x0C\xEA\xF9\x85\x03\xE6\xD8\x51\x66\x79\xE4\x1F\xAD\x81\x5A\x7C\x65\xE1\xF3\xD6\x5A\x99\x0B\x3A\xE6\x6A\x11\xD7\xC7\x48\x0A\x2F\x28\x4B\xCC\x93\x6F\xE9\xB9\xD6\xAE\x3D\x0C\x5B\xD7\x02\xB9\xB6\x98\x78\x00\x37\x09\xD6\x18\x13\x5F\x5C\xCD\xC9\x6D\xAF\xD1\xC4\x02\x97\x1C\x9A\x08\x43\x64\x55\xA0\x2E\x12\x2B\xE3\xE2\x3A\x11\x9E\xA5\xBD\x1A\xD6\xE8\xB0\x9A\x63\x25\x77\x67\x44\x5F\x0C\x62\x85\xB5\x83\x6F\xA9\x23\x29\x97\x5B\xD0\x3B\xD1\x66\xCD\x44\x62\x76\xB2\x28\x2D\x97\x96\xC6\x9D\x81\x7F\xC5\x44\x09\xD8\x09\xBD\xBD\x43\x88\x45\x2D\xD1\x25\x15\x27\x53\xF4\x86\x80\x68\x0D\xA4\x0E\xEC\xBB\xD6\x15\x87\x04\x50\x76\x67\x5D\x03\x47\xAC\x7B\x13\x5F\x0C\x92\x1F\x0E\x47\x2B\x6E\x95\xFC\x7E\x14\x94\x63\x61\xAF\x24\xF6\x91\x29\xF5\xE3\x2A\x5F\x34\xDF\xCB\x55\x7E\x31\xF1\xA0\x98\x98\x2F\xC2\x55\x3E\xBB\x3F\xEB\xE6\x41\xE3\xAA\xB7\xFE\x86\x25\x20\xE0\xC3\xEE\x03\x2F\xF7\x39\x45\x20\x7B\x99\x02\xB0\x97\x04\xE0\x5B\x53\x28\x2F\xF8\x48\xC4\x9D\x23\x1E\xDC\x9D\xB0\x0F\x06\xFD\xBB\x44\x36\x3E\x7D\x4B\xC8\xC8\xE0\x71\x30\x3D\xBE\xC5\x05\x95\xF9\xB7\x1F\x08\xE7\x71\x37\xF8\x3F\xEC\x8D\x78\x3E\x2B\x7A\x3E\x63\xEC\xDF\x04\x41\xB5\x1A\xFD\x87\xF6\xA4\x49\xC7\x3D\xCF\x59\x59\x21\x0B\xA6\x59\x97\xE2\x3F\xCC\xE3\xA2\x2D\x39\x72\x87\x88\x37\x28\xE4\xE8\x4D\xF4\xA3\x22\xFA\x0F\x79\x74\xDE\x00\xEF\x7C\xA9\xDA\xA2\x49\x89\xC6\x5B\x42\xF8\x41\xAB\x1D\x9B\xF7\x9E\xE9\x56\xB5\x33\xAE\x0A\x3D\xB0\x08\x06\x8F\xA1\x05\x62\xC3\xE0\x57\x3E\x0B\x92\x51\x87\x15\xB0\x65\x3B\x96\x6E\x41\x30\x80\x53\xDB\x92\x39\xE3\xCF\xAF\xB5\xE5\x7C\x6A\x4B\x76\x27\x6D\xB1\xA7\xB4\x25\x8F\xCA\xBF\x38\xEF\xC3\xB4\x11\x35\xBD\x76\x60\xB3\xED\x6D\x30\x03\xC3\xB6\x06\xDD\xCD\x42\x91\x0A\x5F\xBF\x85\x5F\xC3\xC7\xFF\x5B\xF1\x40\xFE\x53\x72\xE9\xF7\x43\x95\x0F\x6F\x74\x8B\x2B\xAB\x42\x0E\xED\x91\x32\xD5\xC0\xFD\x8A\xFD\xF2\xD2\x98\xB1\xCD\x49\x1F\xFB\x33\x0C\x5C\x23\x93\x83\xAA\x53\xF7\xA7\x6F\xC6\x1D\x5B\xAD\x38\x4F\x1A\xE1\x64\xD1\x4E\x39\x7B\x08\x01\x81\xDE\x8A\xEC\xC7\x5C\xE0\x54\xBD\x02\x2C\x20\xFA\xB9\xC6\xD8\x9C\x2A\x29\xE1\x62\xEC\xE0\x98\x95\x5F\xAE\xFB\x4B\x88\xCF\xCA\xEE\x9E\x68\xD2\xA5\x33\x78\x1E\x8B\x4D\xC7\x2F\x3B\x58\x87\x76\x38\x1D\xF0\xE6\x62\x72\x11\x9A\xE0\x0E\x74\x33\x10\x4E\x95\xA7\x1A\xFD\xAE\xF4\x7F\xFE\x78\xD8\xFA\x03\x76\x79\xF2\x8F\x5E\x2E\x97\x06\x9F\x32\x15\x86\xFA\x3F\x1C\xB6\xCE\x96\x6D\xDB\x56\xED\xE4\x4F\xD1\x06\xE3\x1E\x90\x0E\xCE\x42\x0D\x5B\xD9\x96\xFC\x37\x72\x98\x66\x7D\x77\x0D\xBF\x39\xEB\xBF\x88\xEB\x38\x3D\xCE\xE6\xF7\xFC\x06\x9F\x2C\xE1\xB1\xBC\x26\xF7\x98\xF9\x3D\x9F\xE2\x3D\x58\x80\x5E\x55\xF1\x26\x4D\x04\x48\xEB\xF5\xB5\x95\x05\x1E\x68\x6B\x47\x0D\x31\x9F\x27\x34\x15\x0C\xE3\xE9\x5C\xD8\xD6\x12\x20\x81\x24\x66\x1C\x3F\x7D\x0D\xEF\xB2\x4C\x73\x82\x47\xEC\x9E\xAC\xBB\xDF\xA8\xA0\x9C\x87\x7A\xC0\xC5\xB7\x00\xCC\x68\x98\x4E\x61\xB5\xD6\xAB\x2A\xBC\x1F\x73\x73\x47\xF2\xD1\x65\xFE\xB6\x32\x7F\x11\x9C\x4C\x11\x14\x51\x80\xE3\x0B\xEA\xF5\x92\xDE\xAC\xE5\x54\xB5\xAE\xF8\x5B\x95\xD4\xEA\x88\xC8\x5C\x8F\x3A\x77\x3D\xEA\xDC\x66\x8C\x23\xCC\x9B\x9F\xFB\xB7\xB2\x6C\xBA\x1A\x7F\x5A\x4D\x62\x8D\xFD\x03\x83\xAF\x06\x6E\xCD\x88\x31\x7E\x20\xC5\x1F\xFB\x5B\x9A\x1E\x45\xED\xDD\x51\x6F\x77\x2F\x9A\xFB\x78\xCB\x9E\xC3\xD9\xA0\x7F\x60\x70\x66\x37\x34\xE3\xEE\x60\xDF\x84\x65\xBD\xB8\xDF\x9C\x77\x99\x2B\xEE\xCF\x3A\x57\x84\x55\x7C\xA5\x5C\xF1\x32\x3D\x17\x93\xB4\xB0\xDE\x32\xF0\x2E\x39\xEC\x9C\xF5\xEA\x41\x0D\xED\x99\x88\xB0\x61\xAD\xBE\x68\x1E\x75\x36\x46\x3C\xE3\xAF\x9F\x53\x43\xF7\x72\x98\x31\xDD\x0F\x13\xA3\x2B\x03\x42\xEA\x15\x20\x2A\x20\x0E\x1A\x81\xC8\x0E\x48\x7B\x77\xF0\xB8\x04\xC3\x86\x52\xAE\x48\x70\x36\xB2\x33\x1E\x18\xC2\xBF\x66\x97\xF8\x4F\x18\x39\x1A\x00\x8A\x54\xDC\xE2\x39\xAC\x52\x5C\xEA\x98\x27\x63\xE5\x68\x1F\x1C\xD4\x61\x35\x53\x5E\x3F\x1B\x5E\x74\xD4\x97\xBB\x3D\x92\x23\x70\x95\xF1\x51\x60\x74\x65\x62\x5F\x8A\x02\x31\x47\xF2\x2E\x21\x38\xF4\x41\x48\x26\xCB\x87\x09\xED\x44\x83\xC6\x05\x44\x22\x69\xE7\x2B\xB4\x9A\x2D\x19\xB9\x74\x8E\x2C\x19\x19\xFB\x2E\x2D\x19\xA9\xE7\xC6\x8B\x4E\x1D\x82\x1C\x2E\x2C\x17\x79\x83\x80\x73\x57\x76\xDF\x7F\x33\xF5\x3C\x53\x3E\xF8\xDC\xBC\x96\xCB\xA0\xB5\xF0\x91\xEE\xC7\x08\x56\xC1\xD9\xAD\x04\xA3\x86\x16\x4F\x15\x63\x5B\xB2\x87\x7C\x19\x03\x61\xEE\xFC\x3F\x57\xBE\x45\x29\xFF\xAE\x61\xEB\x3F\xCA\x95\x52\x3A\x5B\x54\xF4\x31\x9E\xF4\x40\x9E\xF2\xA7\x6C\x95\xBD\x9D\xF7\xB2\x31\x18\xD3\x13\x43\xD0\xBE\xD1\x00\xB4\x1B\x06\x60\xEB\x1B\x1A\x80\xDD\xB5\x01\x68\x77\x10\x45\x7C\x0E\x91\x19\x8A\xAA\x52\x52\xA0\x4A\xA8\x49\x4C\x00\x86\xC5\xC5\x67\x33\xDF\x0D\xDD\x5F\x40\xEC\xE4\x5D\xED\xAE\x04\x13\xF9\x1B\x6E\x8A\xAA\xD3\x2B\xFF\x66\x67\x13\x0E\x85\xE2\xD2\x28\xAF\xFE\xBE\x84\xAF\x90\xD2\x11\xCE\x71\x76\xC9\x7E\xD9\xAC\xB5\x91\x2D\x5C\xA9\xF6\x8C\x08\x83\x64\x23\x9D\x72\x57\x27\x77\x7D\x84\xBA\xFB\xEF\x3B\xED\xBE\x6D\x69\xBB\xC2\xED\x29\xF9\xE6\xAC\xDF\x72\xCA\x77\x47\xBB\x6E\x9E\x14\x79\x5A\x31\x5B\x4D\x0C\x78\x3B\xD7\x87\xE7\xB8\xF4\x28\x7F\xE3\x55\x75\x0D\xC9\xCE\xF3\xE2\xDF\xE4\xCA\xF5\x62\xD5\x45\x73\x0E\xDD\x31\xBD\x6F\xDB\xAD\xE7\x88\x9E\xF2\xFE\xA5\x34\xF7\x83\xB7\xAD\x65\xDB\x8C\xA3\x47\xB9\xCB\xBB\x3F\xCF\x0E\x7A\x93\x5C\x09\x4B\x91\x8C\xCD\xB2\xF1\x15\x14\x31\x5F\x07\xAD\x2B\x73\xD9\x3D\x59\xD7\x17\x18\x2C\x57\x22\x1E\x90\x02\x86\xE3\x52\x4D\x9D\x00\x69\x82\x17\xD4\xEF\xE7\xDA\x23\x3F\x20\x08\x1F\x46\xE1\xB7\x1E\x48\xC7\xBC\x30\x70\xFD\x42\x88\x44\x43\x28\xE2\x16\xA9\x80\x3C\x13\xE4\xD2\x69\xAF\x39\xB3\x4B\x24\xDB\x1C\x1E\x2A\x9C\xB5\x2E\x60\x5C\x9D\x41\xE0\xC9\xCB\xBD\x18\x26\x8D\xD3\x87\x3D\x93\x01\x43\x43\x64\xB9\x6E\xBB\x3F\x05\x21\x6D\x20\x10\x63\x0B\x82\x1A\xF4\x72\x8F\xCC\x33\x7A\xA2\xD1\x86\x52\x72\xFC\x34\x14\xC7\xBE\xF5\xF5\x23\xE2\x9E\x93\x49\x01\xCF\xBF\xBE\xA0\x8C\x1C\x2F\xE8\xC6\x67\x4E\x1D\x22\x7F\xE2\x85\x61\xB5\x94\x50\x3B\x1B\x2C\xAB\x55\xB0\x1F\x6F\xFD\x95\xFF\xE3\xDE\xAB\x4B\xED\x96\xAE\xDC\x87\x7D\x5F\x32\x0E\x6A\xF1\xA4\x6B\x87\x95\x45\x14\xD8\xAA\x41\x6F\xAE\x4A\xB7\x4D\x47\x42\xBF\xCD\xB7\x07\xA5\xB5\xE1\x33\x5C\x05\xB6\xFD\x5B\xF6\x19\x45\xF9\xB4\x53\xE1\x39\x84\x3E\x29\x67\x19\x57\x2D\x2F\x51\xAE\x3C\x0C\xB5\x09\x97\xCD\x00\x47\x63\x2B\x05\xD3\x4F\xAB\xFC\xF1\xAA\x0C\x4A\x07\x1C\x9B\xCB\xD0\x4A\xD0\xA9\x0A\x6E\x02\x5B\xD9\x8A\x1F\x83\x0D\x35\x31\xEC\xBE\x94\x26\x19\xB7\xE5\x8F\xF7\x41\x1D\xBE\x78\xD2\x2D\x43\xED\xD1\x96\x2D\x06\x5E\xB4\xDC\x10\xBB\x95\x72\x6D\x6A\xD1\x92\x2D\xF2\xCA\x6D\x1D\xC2\x02\x55\x8D\xDB\xF6\x5F\x55\xFB\xCB\x52\xE4\xFE\xB7\x54\xDA\x14\x4E\x5D\xE0\xEA\xC9\x54\xB3\xFE\x86\x91\xE0\x2B\x73\x45\xE2\xC4\x11\xA4\xA3\xFD\x5F\xA5\x6D\xEF\xFF\xA1\x3A\x18\x31\xBC\x7C\x97\x16\xA4\xA9\xA7\xCF\x9F\x19\x7F\x96\x29\xB2\x3E\xE1\xCD\x38\x95\x5E\x08\x53\xA9\x4A\x6B\x9E\x1D\x2B\x60\xC6\xED\x84\x95\xF8\xD4\xF1\xB0\x75\x46\xE5\x26\x9F\xFE\xC9\xD6\x67\xF9\xD9\xF8\xF6\x37\x78\x27\xBC\xBD\x5F\x51\x07\xCB\x6C\x7D\x35\xB9\xB3\xE7\x9B\xB5\xF7\x2E\xEF\xF0\x39\x84\xCD\x04\x01\xC7\x24\x97\x49\x7B\xD1\x74\x29\x58\x59\x6F\x99\x5A\x33\x17\xA5\x1B\x23\xA6\x34\x37\x8F\xBF\x86\x8F\x99\xD3\xA1\x00\x35\x2B\x00\xCB\x56\x30\x3A\x91\x21\xA2\xBD\x0D\xFF\x4F\xAD\x9B\x37\xD8\x1B\xF3\x0D\x7B\x63\xF9\x0D\xED\x8D\x6F\xDA\xA4\x9C\xAC\x74\x4C\x80\xBC\x22\x8D\x42\x74\x99\x77\xD7\x60\x31\xBE\x8E\x29\x35\x6E\x7A\x3B\x62\xAA\x9C\x00\x10\x2B\x13\x80\x18\xE0\x7A\x76\xE4\x5C\xA3\x43\x13\xCF\x05\xEB\x59\x5C\x7E\x99\x2A\x90\x2B\x16\x6A\x12\xF3\x70\xE1\xCF\x17\xDC\xBE\x28\xFE\x75\xF4\xC0\x41\x85\x5A\x88\x97\x03\xB9\xB7\xA3\x07\xAE\x9A\x7A\xE0\x94\xAB\x98\x00\x29\xD1\x6D\x84\x47\x99\x78\xE0\x4A\xA7\x43\x1F\x96\xF7\x2A\xE5\x34\x3C\x70\x65\x43\xDE\x5E\x84\xA0\x0E\xBD\xA5\xFF\x66\xDC\x41\xC2\x0B\xEF\xE3\x99\xFE\xA5\xA0\x99\xA4\x6D\x44\xB4\x8B\xAA\x59\x5F\xD0\x25\xED\x06\x8E\x5C\x22\x2B\x56\x41\x12\xEE\xE0\xAE\x30\x03\x56\x75\xB0\xD1\x24\x5B\x96\xB2\xB9\x48\xDB\x89\xA6\x60\xCD\x5C\xF8\xF5\x74\x34\x6C\xBA\xA4\x65\x34\x6A\x42\x06\xED\x80\x08\x44\xC5\x88\x92\x3D\x73\x8E\xAE\x2B\xD9\x4E\xE2\x28\x20\x7F\x1A\x1E\xFD\x6D\xBE\x11\xEB\xDC\x16\x92\x9C\x37\x6F\x7E\xDB\xA1\x8F\xB7\x26\x9B\x5F\x93\x6A\xAB\xC2\xE6\xB7\xF5\xF5\x6C\x7E\x5B\xB2\xF9\xD5\x13\x97\xDC\xD6\xFA\xCE\x57\xC6\xBD\xEF\x87\xB0\xF7\x65\x61\x08\xA0\x60\xEC\x34\x13\xBF\x79\xFC\xD8\x50\xC6\x83\xED\x11\x75\xF0\x55\xE9\xB4\x70\x1E\xCF\xF4\x6E\x73\x27\x83\x44\x8F\x21\x45\x74\x0F\x12\x16\xB6\x8D\x5E\x31\x12\x46\x45\x2C\x01\xD8\x3F\x6F\x8E\x49\xC0\x31\x6F\x38\xC2\x8F\x89\x51\x3E\x31\x8C\xEC\x68\x21\x31\x23\x21\x02\x53\x65\x7B\xE6\x1D\x77\x6A\x54\x65\x13\x1C\x5F\xDD\xBC\x49\x39\x25\xC8\x5E\xE9\x16\x1B\x2E\x04\x4D\x3E\x7C\x32\xE1\xAF\xAC\xF9\x5C\xAD\x9B\x89\xFF\x51\xCF\x91\xDF\x12\x54\x80\x7F\x45\x5F\x11\x68\xC1\xBF\xF7\x02\xD6\x17\x42\xB9\xC4\x84\x2F\x13\x41\x5B\xCC\x43\x73\xEA\x3E\x38\xA0\x60\x83\x47\x02\x63\xD5\x17\xDF\xB6\x24\xD8\x4A\x31\xE7\x51\x2C\x98\x7B\x00\x5A\x3D\x4B\xB3\xCE\x38\x3B\xE3\x51\x44\x8C\x67\xE9\x2C\x9C\x98\x15\xC2\x83\x8A\x31\x38\xBC\x38\xEC\x4B\xB2\xF9\x05\x83\x31\x32\x78\x84\x7D\xDC\x5C\xEF\x73\x99\x1B\x15\xB9\xFA\x2A\x57\x82\xCA\x0F\x4E\x3E\xBE\xB3\x24\x25\x7C\x39\xE0\x3C\xFF\x38\xFC\x7F\x75\xB7\x6F\xBC\x76\x0D\xA8\xFC\xCA\x48\xE6\x57\x3A\x3B\x52\xF9\x95\x6E\x21\xA0\xBC\x31\xB1\x4E\xE2\xBE\x24\x1C\xBE\xF4\xCF\x0F\x7D\x29\x79\xA4\x35\xA1\x43\xF2\x13\x29\x6C\x4E\x0E\x0C\x26\x3C\x8A\x0C\x85\x58\x27\x51\x4C\x87\x14\x11\x8B\x19\xE8\x38\x65\x44\xF5\x09\x1D\x4C\x60\x9F\xC7\x99\x83\xE6\x2C\x75\x85\xD7\xFF\x00\xDB\xCF\x37\xEB\x60\x8C\x7C\x22\x79\xE7\x37\x5D\xFD\x4B\x11\x41\xE9\xF7\x86\xF9\x77\x67\x98\x9D\x86\xB2\xE6\x5B\x72\xB7\xB1\xC5\x66\x77\xA4\xA6\x61\xB0\xFD\x48\x4E\xD3\x03\x96\x4A\x3B\xF6\x04\x7D\xFB\x8C\x4D\x1B\x78\x86\x5B\x86\x6A\x4D\x07\xDB\x32\x6D\x54\x7B\x3B\x74\x7F\x79\xC4\xB7\x88\xC0\x48\x08\xE4\x5A\xD9\x36\x6B\x40\x6F\x53\x0D\xCE\x84\x56\x9A\xEE\xBF\x63\x48\x62\xBC\xA9\x35\xCD\x24\x41\x33\x11\x6E\xEA\x7B\x4C\x7B\x7F\x4C\x0B\x2D\x25\xE8\x53\xE2\x2F\x5A\x06\x38\xEF\x99\x1D\xD4\x09\x08\x46\x0C\xF9\xD9\x21\x93\x0D\x6A\xCE\xE5\xD4\x3A\xC3\xB3\x2C\x8B\x01\x5C\x03\x68\xEA\x80\x4A\x36\x03\x34\x4F\x01\x7D\xBF\xC7\xF0\xFA\x7B\x0C\xAF\xFF\xE6\x32\xBC\xFE\x9E\xF4\xFF\x9E\xF4\xFF\x9B\x2B\xFD\x1E\xB1\xDC\x62\x0D\x26\xEE\x57\xFF\xB9\x2F\xCC\x29\x3C\x7D\x75\x04\x52\x11\x47\xC8\x41\xD8\x59\xF6\xFA\xB5\x8B\x46\x35\xFF\xF1\x89\x12\xF2\xD3\x4A\xC8\xB1\xDF\xBD\x4D\x59\xA7\x7C\x31\x20\xAB\xE0\x41\x1D\xD4\xFF\x7C\x70\x84\xCB\x09\xAD\xBE\xEE\xF2\x6B\xDE\xA0\xEC\x77\x7C\x9D\xB5\xD3\xAC\x9D\x09\x85\x64\xD7\x7C\xF6\xCD\x28\xC4\xA2\x90\x3F\xBC\x56\x48\x4E\xEE\xA7\x13\x85\x3C\x77\xE4\xF3\x6B\xD4\xCC\x62\x39\xE1\xF1\xFB\x54\x7A\x34\xB4\xFD\xA2\x51\xDB\x6B\x0F\xA7\xC7\x0B\xBC\xEF\xC2\xEC\x81\xF2\xD4\x07\x4A\xDC\xFD\x47\x05\x69\x48\x01\x25\x27\xAB\x08\x96\xF3\xBA\xE1\xAF\x77\x3B\xF5\xF0\xF1\xFD\xE6\x3C\x7F\xBD\x0C\x13\x97\xD0\x86\x02\x9F\x93\x29\x18\xF8\x11\x64\xE9\xD3\x4A\x60\x38\x94\xFF\x3F\xC7\x8F\xFF\x60\xFC\xF8\xF9\xF4\xB1\xF9\x63\x00\x06\x0B\x75\x79\xB2\xFB\xD2\x08\x4F\xF9\x9E\xF8\x65\xCF\x7C\x3B\x80\x62\x14\xA9\x6A\x88\xA1\x96\xAC\xB2\x3D\xF3\x44\xBC\xFA\xC4\xA6\xAB\x97\xE3\xD5\xCB\x27\xAF\x36\xFF\xB2\x1A\xA3\xF2\xD7\x8D\x32\x37\xA7\x27\x54\xD4\x00\xB3\x19\x27\xE0\x84\x10\xB0\x75\x59\x62\xD7\x81\x3E\x29\x97\x32\xBA\xB4\x05\xDC\xAB\x8A\xEB\x51\x16\x11\xCC\xAA\x36\x23\xBE\xDA\x94\xD8\x28\xE8\x6F\xC2\x20\xB4\x83\xA9\x1D\x9A\xD9\x67\x82\x06\x73\x7D\xE8\x81\xB1\x5B\xAE\x8C\x84\x2A\x98\xDE\x82\xA8\x08\x1E\xAC\xED\x23\xE6\xD5\x64\x60\x5B\x1C\x12\xC5\x5E\x01\x1E\xAF\x70\xDD\x59\xFF\xD4\x11\x44\x8C\x78\xB0\x88\x3A\xB1\xCF\x0A\x8F\xCD\x5A\x5D\x0A\x92\x2C\x09\x85\x92\x84\xA8\x14\xF0\x4D\x7C\xFE\x8B\x13\x2A\x32\x84\x76\x11\xEB\xA3\xC0\x4A\x2C\x54\x46\x5A\x06\x49\x74\xFA\x58\xA5\x0C\x55\x3A\x60\xFC\x13\xAA\x0E\x3E\x66\xE1\xCD\x44\x66\x76\xB0\xC3\x4F\xBC\x88\x80\xCA\xA6\xE1\x72\x25\x95\x35\x89\xC2\x2E\x07\x3B\x25\xB9\x96\xB4\xF0\x2B\xAE\x29\xCE\x93\xD1\x70\x23\xEB\xE5\xE6\x21\x90\x3C\x98\x82\x22\xBD\x2A\x13\xF8\x13\x51\x8E\x39\x18\x96\x5D\x7C\x5A\x07\xDA\x3B\xEC\x40\x04\x86\x6D\x6C\x55\x8C\x6E\xE4\xF3\x18\x2B\xA2\x1F\xAB\xBE\xE2\xEE\x7D\x5A\x3F\x65\x2C\x16\xBB\x4C\x45\xBA\xE5\x3E\x4F\x12\x61\x0E\xA4\x34\x07\x27\x5F\x7E\x41\x59\xD2\x97\x0C\x17\x94\xF6\xB7\xE0\x11\xAD\x13\x51\xC7\x48\xF5\xDC\xE7\x42\xA6\x65\x55\x66\x14\x52\xDE\x42\x8D\x88\xC5\x8B\xAA\x86\x55\x08\x98\xA9\xD8\x82\x29\xA3\x6B\xCF\x80\x66\xEE\x59\xFF\x9B\xB7\x6E\xDD\x2A\x8F\x88\xB3\x43\x67\x91\xAB\x51\xCD\xEC\xB4\x6A\x66\xAC\x66\x36\xAB\xE6\xDA\x6B\x29\x8E\x92\xBF\x85\xB1\xEC\x4D\xA4\xC6\x72\x86\x7C\x51\x3F\xFB\xC5\x19\x0B\x54\x25\x63\x14\x3E\x9F\x23\x5F\xD4\x8E\xF0\x45\x7D\x66\x7E\xE7\x4E\xE2\x8B\x3A\x41\x49\xC5\x5C\x2D\x11\xAF\x36\xE1\x7E\x6E\xB0\x98\x6E\x19\x6D\x8F\xD7\x43\xCE\x8C\xD3\x07\x61\x69\x48\xFA\x22\xD3\xB5\xED\xB0\x0A\xDB\x85\x6D\x4D\xE3\xB7\x57\x96\x26\xEB\xF1\x40\xAC\xD1\xC5\x3E\xC8\x24\xC2\xFD\x43\x2F\x2C\xDC\xC4\x85\x82\x96\xE9\xCD\x35\x67\x85\xE5\x60\x7F\x17\x67\x70\x38\xA8\x01\xC8\xAB\x46\xD6\xF1\xA7\xA6\x01\x4D\x5A\x82\x99\x74\x8C\x7A\xAA\x1F\x59\x66\x4D\x0C\x91\x31\x8C\x56\x3F\xF1\x54\x2E\x4F\xE5\xE9\x29\xBE\x7C\xC1\x87\x9C\xF5\xDF\x72\x6D\x25\x69\xC7\xCA\x6B\x61\xD2\x60\x13\xB2\x93\xC5\x65\xA1\x38\x97\x8D\x81\x57\xD7\x84\x6F\xEC\x76\x95\x1E\xAB\x1C\xEE\x67\xA4\x77\x68\xBB\x71\xEA\xE9\x5D\xE1\x71\xB8\x1E\xAC\x59\x77\xE4\xEC\xB5\xE6\x95\x4C\x17\x13\x2E\xFB\x2F\x7D\x61\xCE\xE2\xCA\x5F\xBF\xFA\x85\x35\xB6\xF5\x1B\xE6\xF2\x52\xF9\xEF\xFE\xB5\xB5\x9B\xF9\xF3\x87\xE7\x3F\x33\x75\xDC\xFF\xC4\xAF\xCD\xD9\x2A\x79\xDA\x01\x91\xBE\x95\x46\xCB\x7F\xA2\x8A\xA4\xF6\xFE\x93\xFC\x28\xFC\xEA\x46\xC2\x41\xA9\x80\x65\xBE\x1A\x2E\x9A\x4F\x54\xDB\x3C\x4E\xF9\xA9\x4A\xE6\x33\x5C\x35\xD9\x33\x3D\xD2\xF1\xB2\x44\xB8\xCB\xD3\x81\xC8\x8A\x65\x9E\xE9\x73\x97\xBB\x4C\x90\x1A\xB4\xB3\x3E\x7B\x86\xA0\x0D\x57\x76\x7B\x3B\xF2\xF6\xDB\x58\x40\x16\x6E\x89\x50\x0D\x98\xB4\x15\x26\x67\xC5\x6A\x55\xAC\x16\xEF\x1A\x56\x1A\x01\x41\x18\x5C\x49\x3C\xCC\x5C\xE1\xCA\x04\xCE\x00\x85\xE6\x93\x15\x35\x9A\x4F\x88\xFE\xF9\x53\xD5\xCC\x57\xD3\x6C\x37\x2E\x5F\x87\x5E\xF8\x81\xCA\x54\xC7\xE6\x05\x4E\x8B\x9F\x02\xC0\xB5\x74\x18\x32\x53\xBC\x23\xCB\x25\x59\xD1\x63\xDE\xA0\xC0\x1A\x20\x01\x05\x3E\x29\xFF\x3E\x73\x19\x39\xBD\x7F\x67\x32\xAA\x48\x94\x7B\x55\xBD\x37\x74\x5F\x68\xD8\x3D\x99\xEA\xEB\x87\xB5\xCB\x5D\xE9\x8B\xEB\x87\x1F\xFF\xAE\x7E\xF1\xFE\x87\xD5\x7F\x90\x60\x09\xD7\x9E\x77\x95\x0B\x8F\xB8\xC5\xCD\xFB\x33\xC1\xCD\xAF\xF9\x25\x74\x22\x68\xE3\x67\xAF\x33\x11\xFA\xAA\x78\xB6\x47\x57\xDE\x93\xA9\x87\x8F\x9D\xF5\xDF\x7A\xF4\xF1\xEF\x7A\x7F\xBF\x78\x02\x35\x7E\xE8\xC8\x2D\xFE\xD8\xCB\xD7\x70\x22\xEB\x8F\x13\x64\x56\xB5\x95\x29\x6D\x82\x86\x79\x4F\x56\xF1\xDE\xC5\x1F\x7B\x19\x81\x66\x00\x0A\x56\xF7\x64\xDD\xF8\xF3\x0D\xCD\x02\xC2\xCF\xE7\x26\x77\x87\x9F\x19\xA2\x0A\xF4\x5C\x17\xA9\x11\xC6\x04\x7D\x24\xB6\x80\xB0\xC3\xBF\x86\xF8\x7F\xA8\xE3\x7F\x87\x1F\x5D\x06\x69\x0F\x56\xCF\x28\xEA\x41\x30\x43\x27\x72\x87\x29\x63\x27\x86\x2D\x63\x43\x27\x0A\xEF\x9C\x14\x34\xEB\xCE\xD2\x95\xA9\x3B\x05\x91\x22\xAC\x7A\xAF\xDD\xFE\x16\x97\xE1\x1C\x79\x7A\x5B\x0B\x55\x42\xC6\xC2\xDF\x30\xB8\xE9\x16\x62\x44\xA5\xD8\x0D\x23\xF3\xF0\xB1\xCB\x93\x38\x14\xD7\xFB\xEA\xF0\xE3\xDF\x05\x08\x06\x0E\x94\x8C\x4F\xC5\xC1\xC9\x39\x38\x89\xDB\xE1\xF4\xC1\xC9\x37\x0F\x4E\xBE\x79\x70\xF2\x26\x41\xAC\xCA\x20\xA5\xC1\x01\xC0\xDB\x2D\x7D\x15\x2B\xB8\xD0\x1E\xBE\xB6\x49\xBA\x92\x40\x8B\x78\x41\x98\xFB\xFC\x30\xC9\x58\xFE\xDB\xDE\x06\xC1\x75\x0A\x73\xD3\x3A\xD8\xCB\x7B\x46\x75\x7F\x6D\x04\x39\x03\xE0\x4A\x0E\x82\xCF\x86\x2A\x30\x81\xEB\x3F\x51\x45\xDC\xF8\x9F\xAA\x04\x46\x98\xAB\x85\xFF\x18\x13\xBE\x3E\x0A\x28\xBA\xEF\xCE\x74\x79\xCC\xAF\xBD\x11\xF6\x34\xC3\x9B\x30\xFB\xC5\x07\x40\x34\x52\xEE\x8B\xD0\x19\x26\x5F\xAA\xA1\xCF\x5C\xF4\xAB\x12\x20\x10\xA7\x76\x76\x5B\x72\xBF\x5E\xAA\xFA\x0C\x67\xC0\x2F\x55\x30\xD3\x95\xFF\x0B\x42\x52\x42\x3F\x42\x46\x84\x1A\x59\x9B\x2D\xD6\xE6\x8F\x55\x2E\x13\xA4\x62\xD8\xF5\x45\x58\x96\xCB\x11\x40\xC7\x44\x6C\x44\x1B\xDD\x06\xE6\x19\xA0\x22\xDA\xB4\x2C\xE7\xD3\x65\x39\x27\xA4\x1E\x59\x1C\xA4\x00\x03\x55\x2C\x9A\x22\xC8\x0A\xE5\xC4\x63\x8D\x84\xBE\xC4\x52\x61\x5B\x91\x1E\x1F\x6B\xA0\xA0\x1D\x85\x4D\xB1\x98\x2F\xCB\x7F\xA1\xA2\x1F\xFD\x63\x15\x43\x4B\x3F\x5A\x9D\xD0\x5E\x32\x00\xD2\x7C\xB4\x1A\xD6\x97\xE7\xFF\xC2\x98\xEC\x58\xBF\x00\xC6\x54\xD8\x5A\x2F\x31\xC7\x3C\x3B\x55\x42\xB9\x5A\xD8\x51\x42\xC3\x16\x92\x24\xB4\xA0\x84\x16\x1B\x24\xD4\xCE\x24\x14\x37\x16\x27\x24\x34\xFD\x3C\x97\xD0\xF1\xEE\x28\xA1\xA3\x8C\x26\xD9\x24\x9E\xBB\xCB\xAF\x92\xD2\x73\x20\x27\x5A\xB0\x29\xB2\x43\xF2\xD1\x7F\x8B\xCB\xE9\x19\xB9\xA5\x1F\x85\x3A\x49\x49\x09\x32\xF9\xC9\xC5\x88\x11\xF3\x6A\x95\x0C\x4A\xD8\x8A\x92\x6E\x92\xA2\x5B\x75\x90\xA5\x08\x29\xF9\x89\xF1\xE3\x47\xAA\xE1\xE1\x1B\xDF\x79\xE3\xC6\x07\x1D\xBE\xCB\xCD\xE1\xEA\x47\x2B\xA7\x1F\xBE\x11\xFF\x1C\xDF\x9F\x09\xC9\x44\x37\x45\x38\xC8\x18\x3A\x34\x6A\x95\x4F\x60\x73\xEE\x73\x1A\x8D\x41\x9F\x7E\x21\x81\xE5\xE8\x60\x64\xD9\xBE\x74\x85\x67\xAC\x7B\xD5\xFD\x8C\x9C\x4E\x14\x53\xCE\xE9\x57\xBE\x38\x53\x6C\x2A\xFF\x4B\x8A\x51\x3E\x5F\x51\x8F\x20\x9D\xC8\x0E\xF7\x6A\xA1\xFC\x73\xA5\xFF\x25\xFE\xF5\xC8\x6E\x5F\xBA\xCA\x7F\x45\xE1\xAF\x2B\xBB\x7D\xC5\x4E\x2D\xFD\xBB\x07\x57\xF9\x77\x0F\x7C\x59\x23\x6F\xEB\x0B\x30\x0F\x93\x2F\xE5\x89\x21\xD2\x01\x25\x0B\x20\x77\xC5\xD3\xBE\xBB\xB2\x0C\xF5\xEE\x5E\x8B\x80\x4A\x30\x3B\x73\x02\x1A\x5C\x50\xD6\x67\x47\x97\x24\xCF\x4C\x23\xD5\xED\x67\x88\x66\xC0\x07\x82\xE6\x99\x5A\x16\x66\xBB\xFF\xD1\xD7\x27\xAA\x40\x06\x24\x49\x7F\x5F\x2C\x42\xE8\xF1\xB1\x5F\x94\xFE\x96\x5E\x55\x69\xFF\xCA\xFC\xD7\xC2\xE8\xBB\x72\x55\x84\x0B\x79\x4C\x8A\xCF\x62\x6A\x27\x75\xD3\xBE\xC6\x7E\x23\x39\x02\x73\x8D\x76\x31\x92\x20\x32\x9D\x7F\xE8\x8B\x99\x6A\x0B\x6A\xCC\xC5\x52\xBB\x7C\x55\x85\x17\x31\x81\x2A\x96\x55\x4C\xCA\x72\x0B\xA4\xB5\x95\x63\x45\x45\x68\x69\x1D\x35\x61\xFF\x13\x14\x32\xF8\x2B\x47\xF6\xC5\x0D\xAF\x85\x46\x5D\x4C\xF2\x1A\x8A\x89\x29\x60\x9A\x53\x8B\xD7\x28\x1E\x85\xBB\x1A\xFA\xC1\xA4\x8C\x7C\x52\x86\x66\x06\xAA\xC8\x5A\xE3\x0A\xB8\x9B\xA1\x42\xA7\xA1\x15\xAC\x8E\xA2\x3F\xD1\xF9\x9B\xBA\x3E\x92\x18\x7E\xDD\xDD\x9F\x26\xCA\x1B\xF6\xC3\x89\xFE\x46\x24\xC3\x74\x74\x2C\xBB\x37\x7B\xC3\x71\x48\x26\xF1\xEF\x78\xE7\x23\x83\x65\xDE\xF7\xEB\xFD\x0E\x76\x3C\xF2\xEE\x62\x6D\x11\x40\x18\xA7\xFC\xEB\x6A\x40\x98\x45\xF7\xBF\xC8\x12\xA1\xA1\x8B\x17\xF4\x58\x7C\x42\x40\x90\x92\x1E\xCF\x1B\x3E\x9A\x6E\xF8\xD8\xFA\x0D\x4E\xFB\x57\xAB\x68\x0E\xFF\x93\x1D\x9D\x92\x70\x3F\xA8\x67\xAE\x38\xA7\x2E\xA8\x2C\x52\x63\x09\x15\xF3\x73\x6B\xDE\x39\x7D\xD2\x3B\xF7\x9B\x6A\x48\x48\xBD\xF0\xD0\x3D\xEF\xA6\x97\x3F\xA0\xA7\xD7\x6E\x0A\x55\xC0\x53\x5C\x70\xDF\x13\xF7\x3E\x1D\x9F\xE9\xED\x45\xF3\x24\xEF\x7D\x0F\x0E\x48\xB3\xE1\xA2\x79\x4A\xDC\x00\x4F\xCC\x4A\xFE\xF4\xFA\x8B\xDF\xE9\x4C\x32\xC8\xE0\x00\x8B\xE7\xC8\x00\x73\x0F\xB7\x8F\x9E\xC4\xFC\xA2\x79\x17\x0B\x7D\x60\xE6\x50\x7C\x55\x4D\x3D\x8A\x6F\x77\x76\x72\xED\x81\x69\x01\x20\xA1\x46\x01\xF7\xB1\x2D\x7B\x88\x33\xF8\xB4\x1A\x70\xA7\xD3\x7E\x6F\x60\xEF\x38\xED\x3F\xAF\x86\xEE\x67\x23\xDC\xCB\x13\xAB\x22\x26\x3C\xBE\xAB\xCF\x88\xD5\x9B\x18\x51\x00\xB1\xFC\x6E\xBA\xF3\xC2\xA7\xB1\xEB\x0D\x89\xC2\xE2\x6D\x66\x55\x8E\xCD\xC5\x9A\x94\x14\x95\x3A\x01\xE9\x5F\x82\x16\xAD\xF7\xD0\x35\x23\x91\x41\x2D\x3E\xCB\x84\x54\xAF\xFD\x4F\xDF\x80\xBE\x78\xCE\xD5\xC8\x82\x0D\x4A\x8E\x81\x7F\xB5\xFB\x9B\x22\x85\xC6\x3F\x37\xB8\x9A\x53\x25\xBB\xEE\x9F\x1B\x04\x55\xA7\x76\x26\x5A\xD4\x72\x16\x47\xA6\x26\x62\x19\x64\xB7\xED\x93\x9F\xE3\xE4\x08\x45\xC3\x33\x49\xE2\x40\xF4\xAA\x63\xAF\x9E\x8B\xDB\xED\x68\xD1\xEF\x99\x27\x84\x23\x6A\x94\x4A\x39\x00\x5A\x44\xF6\xCF\xD0\x12\x0D\x7C\xBC\xDE\x84\xB2\x32\xAF\xDC\x22\xAA\x15\x38\x87\x3F\x2F\x32\xD5\xF1\x3D\x55\x74\x44\x13\xFE\x33\x76\x6C\x8E\xA4\xC9\x6C\x2C\xD9\xF2\x74\xDF\xF2\x74\xDF\xBA\xC5\x20\xFC\x4C\xB9\x04\x8C\x64\x18\xB7\x77\xAD\x4C\xF8\x86\xD4\x14\xC4\x98\x2C\x12\x7B\x9A\xB3\x87\x3E\x7B\x86\x9A\xAC\x21\x82\x39\x3B\xA8\x9A\xF7\xCD\xDF\x4A\x98\x44\x7D\x16\xFA\x47\x3C\x6F\xD5\x35\xC9\x56\xC7\xFD\x7B\xE6\x9C\x8B\x45\xEF\x45\xFE\xF8\x2A\xBC\xA0\xFB\xDB\x09\x65\xA9\x87\xAF\xED\x5D\xE8\xB9\x30\xB2\xFB\x4B\x3A\xDF\x56\xBC\x9B\x64\x4D\xAD\xF8\x15\x31\xE6\xA2\x77\xCE\x2F\x4F\x9E\x39\x8F\x63\x13\xBF\x97\x8E\x19\xEE\x4B\x9F\x1E\x48\x9F\x5E\x4D\x47\x0F\xC1\xCE\x3A\xF4\xE6\x99\x8B\xE6\x6E\x19\x4E\x00\x8A\x0A\x5C\xC7\xD2\xAB\xD5\x96\x47\x1E\xFC\xAA\x63\x84\xCF\x61\x7F\xC6\xAB\x47\xA1\x8B\xE0\xF3\xB1\x3B\x83\x53\x3A\xE3\xC3\xC4\xE6\x11\x69\x7E\xD8\x1B\x77\xC6\x19\x77\xE6\xEA\xAE\xCF\x9E\x7D\x12\x09\x59\xC6\xEB\x08\xB5\xA1\xFA\xC6\x97\x47\xBD\xA4\xBD\x5B\xD7\xF8\xED\x23\x04\xF4\x99\x67\xFD\xBF\xBA\x75\xEB\x56\x06\x67\xA8\x1C\x8D\x45\x34\x55\xBF\x27\x48\xE4\xED\x6A\x41\x70\x17\xFE\x18\xDE\x2A\xF9\xBD\x39\x73\xCE\x6D\xC2\xE1\x0A\xFF\x5F\xDD\x85\xF7\x23\x7B\x48\xE8\x30\x0D\x73\xAE\xCB\xA3\xBE\xE1\xFB\x8D\x5B\xF0\xFD\x8B\xCD\xEF\x6F\x84\xED\x4B\xDE\x17\x47\x5B\x0F\x11\xD4\x01\xEF\x4A\x34\xA7\xCA\xBF\xA6\xA4\xA6\xE8\xE8\xF0\x71\xE1\x94\x7F\xBB\x60\xB0\x86\x71\x90\x84\x6B\xFF\x56\x7C\x5A\x62\x94\xC2\xA7\x2D\xA7\xFC\x5B\xF0\x69\x1B\x63\x18\x3E\x09\xC5\xD8\xC2\x35\xAE\x75\x4B\xB7\xE5\xB6\x5D\x37\xF0\x8F\x3B\xE3\xB3\x67\x82\x0A\xF7\xDF\xFE\xDA\xD4\x9B\x03\x47\x6E\xD4\x7D\x5B\x9C\xB3\x98\x4B\x4B\xED\x7F\x71\xBC\x4B\x70\x38\x11\xFB\xBD\x67\xAC\xD0\x12\x39\x43\x44\x1E\xFE\x54\x09\x45\x08\x02\x69\xAA\xC8\xC7\x43\x4F\x72\x76\xD8\x9B\x60\xD4\x81\x06\xDB\xF8\xE3\x47\x41\xEF\x22\x14\xC1\x72\xD8\x41\x1F\xD7\x13\xB4\x59\xC0\xD4\xCF\x98\xAA\xF1\x78\xB5\x63\x1E\xEF\x13\x2B\x93\x48\x75\x94\xFF\x8C\x12\x1E\x43\x23\x4E\x35\x59\x0A\x27\xC7\x51\x96\x7C\xA6\xC7\x8F\x62\xE5\xD5\xE3\x66\x92\xF1\xB8\x2B\xA7\x5B\xED\xB2\x64\x81\x4E\x8F\xD4\x3B\xAF\xAF\xF3\xAD\x97\xF9\xBA\x9F\x8B\xBB\x4A\xD0\x91\x9C\x8D\x0B\x91\xDA\x33\x77\x0B\x61\x37\x6F\xB6\x1E\x59\xA7\x61\x9E\x99\x14\x9A\xE5\xF5\xF5\xC1\xA9\x07\x75\x0A\xD0\x92\x38\x56\x75\x30\x22\x90\x55\xBD\x20\x8E\xAA\x29\xAF\x00\xAF\x9D\x9B\x5C\x3B\x3F\xBD\x56\x9C\xF0\xCF\x37\xA4\x10\x5C\xF3\xC5\x37\xAE\x96\xB6\x49\x90\x26\xCB\xDD\x93\x20\x50\x7E\x7B\x4B\x6F\x60\xE2\x3B\x2B\x0C\x09\xD8\x32\xAE\x0F\xBD\x9A\xF0\x22\x3D\x37\x30\x30\x2C\xB9\xF1\x01\xFA\x8F\xE3\x06\x2C\x36\x7B\x00\x81\x0C\xAB\xEB\x5B\xD6\x1A\xF1\x40\xBF\xF9\x34\xE1\x81\xC9\x69\xC2\x65\x9E\x26\xBC\xA3\x57\x9B\x4E\x13\xDE\x41\x80\x49\x75\xD1\xBC\x23\x66\xD9\xA9\xC9\x69\xC2\xDB\x57\x72\x50\xF8\xF6\xF5\xAB\x71\xCF\xD9\x5C\x81\x27\x26\x15\x78\x37\x2B\xF0\xAE\xCD\x15\x78\x57\xAA\xC0\xBB\x36\x55\xE0\x9D\xB1\x02\xEF\xDC\x5C\x81\xF7\x4C\x86\xF1\xC9\xB5\x6B\xCF\x9D\x52\xB9\xE7\x26\x95\xFB\x80\x66\xED\x6E\xEA\xCD\xD5\xBB\xA9\x53\xFD\x6E\xEA\x4D\x15\x7C\x3E\x56\xF0\xF9\xF5\x6B\xFE\x83\x3A\x01\x5E\x47\x5F\xC5\x2F\xEF\xE8\x76\x82\xF6\x52\x44\x90\x00\x09\x72\x68\x41\x4F\xAB\xBD\xF2\x41\x9F\x68\x87\xEE\xC6\xCD\x71\xFE\xB5\x7D\xC5\xE6\xFC\xF5\xD7\xE7\x8E\x7E\xF0\xE5\x5E\x12\x12\x41\x04\xE1\x11\xBD\x36\x18\xBC\xFE\x6F\xBF\x3E\x6B\x4F\xBB\x92\xE4\x93\xE9\x03\xAE\xFA\x36\x49\xF2\x1F\x09\x50\x01\xBE\xA7\x1E\x47\x48\x4E\x29\x27\x6F\xAE\x4A\x60\x03\xAB\x6A\xAC\x74\xA8\xB0\xAB\xA6\x15\x4E\x81\x2F\x1B\x6B\x9C\xEA\x3C\xB2\x6E\xFC\xCE\xD5\xBC\x7A\x83\x9A\x47\xAA\x26\x61\x7B\xA9\x85\xF0\xA2\x1D\xAD\x6F\x26\xE7\x23\x89\x83\x2F\xA9\x88\xD9\x62\x85\x21\xBA\x74\xF5\x24\x72\x95\xE4\x7A\xAE\xF4\x86\x4E\x35\x7D\x65\x12\xCC\x4A\x47\xFF\x44\x45\x23\x4B\x06\x4B\xCC\x5D\x09\x45\xAA\xC2\x4D\x96\xC8\x5F\x4E\xE8\x94\xB9\xF2\xE4\xC2\x30\x61\xFB\x6A\x7F\x89\xF0\xCD\x1C\xF4\xAE\xBC\x15\x3C\x36\xF4\x85\x9D\x36\x0E\x76\x6D\x1C\x2C\x53\x59\x36\x0F\x82\x1D\x07\x61\x2D\xF5\xB4\x96\x50\xF7\x8E\xE3\x61\xD7\xC6\xC3\x4E\xC6\xC3\x4C\xC7\xC3\x86\xEE\x97\x73\xE6\xD1\x63\xC4\x43\x9E\x92\x68\x8F\xE5\xD1\x56\xA9\x94\xD6\xDA\xD4\xC2\xAA\xBF\xE1\xF0\xBA\xF6\xF6\xD9\x55\x0D\x82\xE3\xA0\xE8\x48\xAD\x40\x7A\xD7\x08\xFD\x5D\xE7\xEA\xAB\x4B\xDD\xCC\x1A\x14\x6F\xD0\x8D\xDC\xF1\x6D\xBC\xD7\xBA\x3A\x31\x17\x60\xB3\x09\x95\x6F\x5C\x1B\x85\xA9\x46\xE5\x0B\x38\x6B\xE1\xDF\x3D\xF4\xED\x7B\x81\x35\xE1\x11\xC1\x36\x9B\xB9\x80\x41\x27\xC9\x0D\x8A\xE1\xD1\x7F\x13\x49\x9F\x1A\x04\xFE\x62\x7B\xCE\xBA\xBF\x73\x73\x76\x4C\xF7\xDB\xDB\x00\xFF\x3F\xCC\x4B\x1A\x1F\x5A\xB5\xE4\x73\x6C\x1A\x7A\xAF\xD3\x93\xC0\xE5\xEE\x21\xEA\x4B\x23\x20\x38\xA1\x71\x75\xC2\x78\x6F\x28\xBB\x4B\xF0\x2D\x49\xBA\x7E\x43\xAC\x9C\xF6\xB0\xDF\xF6\x46\x98\x10\x9A\x38\x05\xE8\x39\x69\xDC\x96\x6B\x0F\xFB\x2D\xAF\xC9\x84\xD0\x5C\x89\x13\x67\x6B\x3A\x71\xB6\x20\xA9\x20\x8F\xDC\x8A\x05\x2C\xC3\x2D\xD1\xC8\x6B\x1A\x24\xFE\xAF\xCE\xB8\xC6\x75\x88\x8E\xEE\x58\xA1\x06\x77\x0D\xAB\x2D\xD7\x85\xDA\x77\x23\xF9\x41\xD0\xED\x46\xF2\x83\xA5\xEB\x30\x9B\x49\x57\x75\x86\x08\xEE\x33\x8A\x0F\x60\xD2\x1D\x5F\xED\x9B\xB5\xF9\xC4\xC1\xA8\x41\xEB\x09\xAE\x25\x08\xE5\x04\xBD\x2B\x2E\xD2\xB0\xA7\xC2\xEC\x5A\x1B\xCC\x78\x8B\x26\xEC\xE9\xA2\x71\x8B\x4D\xCB\xDB\x62\xB2\xBC\x2D\x26\xCB\x5B\x49\x76\xA7\x93\xCB\x9B\xB7\xCF\x4E\x45\xB2\x2D\x9A\xE9\xBA\x71\xB0\xAC\xDA\x46\x80\x53\x5A\x72\x04\x2C\xD6\x27\xBE\x59\x5F\x7D\x21\x6C\x8B\x24\x6C\x8B\x93\xC2\x56\x8F\xC2\xB6\xB8\xDD\x6C\x59\x6C\x9A\x2D\x35\x66\x0B\x8E\xE2\x39\x25\x08\xA3\x85\x89\x53\xC7\x89\x53\x73\xE2\x34\x44\xA8\x3C\xB9\xB4\x99\x71\x69\x83\xC0\xA0\x85\xD0\x0C\x9B\x6F\xA0\x85\xCD\xA4\x85\xCD\xAC\x85\x27\xA7\x53\x7C\x68\xD5\xC4\xF2\x39\x9D\xD2\x93\x93\xE9\xD4\x8E\xD3\x69\xC1\xE9\xB4\xBC\x82\xFC\x05\x4C\x9D\x26\x4C\x0D\xF3\x4C\xBF\x4D\x20\x7B\xE1\x6B\xA5\xA1\xB1\x08\x93\xED\xB0\x5F\x86\xA9\xD3\xB9\xCE\x2D\xD2\xD4\x59\x4E\xA7\xCE\x12\x3D\x01\x52\x8A\x65\x2C\x60\x11\x6E\x89\x53\x67\x21\x53\xA7\x73\x0B\xB7\x8D\xA9\xB3\xCD\xA9\xC3\xBB\x86\x55\x45\xF2\xB4\x25\xF8\x2E\x84\xAF\xA2\x71\x5B\x69\xEA\xB4\x64\x0A\xA9\x99\xEF\x15\xE7\x5D\x90\xE7\x86\x53\x27\xBC\x7B\x21\xA4\x39\x11\x74\xA9\xC1\xD6\xB6\xAA\x88\x47\x54\x1C\xD1\xB1\x59\x47\x5B\x7B\xBE\xCC\x63\x43\x5B\x10\x85\xC2\xF6\x15\x37\xE1\xE6\x71\x1E\x8A\x72\xCB\x64\x8C\xAE\xE5\x59\x38\x77\xF0\xC3\xBE\x0D\x7D\xB7\x04\x54\xF0\x7C\xD9\xA9\xC2\xDA\x74\x18\xAC\xD1\x67\xFA\x2D\xB7\xE5\xAA\xD4\x77\xCD\xB4\xEF\x9A\x91\x67\x68\x5C\xB7\xC0\x6E\x33\xE5\x19\x42\x2F\xF5\x4B\xD6\xA4\x22\xF9\xCD\x2A\x74\x9E\x25\x61\x52\x1B\x29\x85\x6A\xD7\xA6\x4E\x5B\xE7\x23\xA2\x2E\x31\xD9\xE3\x65\x56\xD7\x71\x3D\x69\x55\x33\xC9\xC2\x48\xB1\x0A\xAE\x18\x99\x14\x05\xC9\x17\xAB\xC0\xE5\xE6\xBF\xDC\xCA\xED\xB1\x7E\xC1\x1C\xEB\x17\xF4\x31\x12\x3C\x9E\x1A\xE0\xB8\x7B\x0E\x44\x92\x4E\x8D\xC7\x00\x93\x1D\x5D\xBB\xFC\xB0\x57\xC1\xCE\x2C\xB6\x8A\xAA\x52\xDA\x1A\x84\x1D\x3D\x37\xF4\xA1\x9B\xC3\x24\x10\x26\xFC\x4B\xCB\xD2\xE5\xF7\x20\xF5\x23\x07\xEE\x09\x9D\x1B\xE5\xFD\x46\x6D\x93\xA0\x7F\xFD\x89\x55\xC1\x82\x2A\xF1\xF5\xC4\x9F\x6B\x06\x38\x84\xE6\xA3\xC8\x0A\x45\x56\x28\xB2\x72\x15\x8A\x74\x9B\xDF\xCE\x5B\x73\xB9\x35\x4F\x6F\x47\xBD\xE2\x9C\x8E\x65\x29\x29\x8B\x37\x54\xAB\x05\x1F\x08\xCF\x2D\x78\x55\xCD\x5F\x51\xA0\x5D\xC8\x6D\x39\x59\x02\x9B\x48\xEA\xA8\x20\x93\xFE\x5C\x68\xB0\xE9\xFE\xAE\x60\x26\x85\x96\x16\xEB\x25\xE6\x63\x89\x85\x94\x58\xC4\xF6\x55\xEB\xB7\x56\xBC\xB5\x5A\xEB\x5D\x48\xD2\xDA\xAD\xF9\x3D\x48\x7D\xC4\x87\xEA\x7E\xD3\xC5\x96\xD5\xEB\xBD\x96\x9F\xDE\x6B\x08\x08\xFA\x0D\x7D\x95\x14\x05\xCE\x74\xFF\xBB\xB0\x7C\xE4\xAE\xF0\xE6\xBD\x38\xD4\xAD\x24\x6D\xF9\xBF\xFF\xC3\x97\x71\x5B\xB8\x64\xC3\xA5\x5E\x85\xD6\x86\xD1\x52\x93\x6E\x58\x35\x38\x83\x9F\xD5\x40\x8F\x5D\x60\xA5\x5D\x16\x35\xC0\x11\xED\xAC\x13\x96\x24\x6F\x5A\x35\x61\x6D\x38\xA5\x37\x30\x9B\x8B\x13\x4F\x19\x79\xAA\xE0\x53\xC5\xDA\x00\xC2\xB2\xCF\x4F\x3C\x95\xC9\x53\x49\xAE\xD7\x06\x89\x64\x92\xB2\xC8\xCC\x64\x38\x34\xA2\x9A\x0B\x3B\xBB\x8A\x1B\x91\x2B\x2E\x2D\xCD\xD8\x84\x79\xC3\xBD\x5E\x9D\x28\x30\xDC\x9E\x6A\x31\xAF\x3B\x4E\x5D\xA2\x80\x17\x14\xF0\x93\x05\xA2\x19\x6B\x4F\xE2\x45\x76\x5D\xD0\xF4\x69\xF5\x6A\xBC\x59\x09\x50\x59\xBE\xFE\x90\x72\x96\xE7\x3F\xD9\x4A\xF1\x54\x49\xA2\x39\xC3\x56\x52\x20\x5F\x60\xDA\xB9\xB9\x2B\x9C\xDD\x0F\x73\xD6\x77\x83\x00\x50\xE6\x64\x27\x54\xEB\x05\x9F\x22\x1E\xC0\x7A\x75\x45\x98\x74\xE0\x0F\xAC\x98\x58\xB0\xB6\xC0\xA8\x50\x64\xBD\x62\x26\xDE\x64\x20\x6B\x3C\xB7\x3E\x9A\x1A\x14\xE4\x32\x91\x8B\xC7\x97\x3A\x0B\x86\xC6\x73\x03\x60\x94\x14\x97\xB0\x35\x89\x6C\x48\xB7\x5B\x67\x0F\xB1\xFA\xC5\x89\x9E\x61\x64\x12\xD2\x23\xD5\xAA\x6E\x11\x35\xB0\x79\xCE\xCB\x84\xD9\x07\xB9\x0C\x05\x5D\x35\x71\x69\x41\x57\x61\x19\x49\x8B\x0A\xD1\x83\x6A\x92\x39\x9D\x58\x05\x94\xAB\xF9\x9E\x7A\x6D\xD8\x63\x43\x05\xD3\x3B\x0F\x0F\x76\x9F\x21\x26\x2C\x2C\x2B\xB4\x53\xC7\x1F\x51\xD2\x4A\xBB\x7C\xA5\x5C\x75\x69\x89\x23\xC6\x6A\x69\xF9\xEA\xFC\x10\xDC\xB8\x8F\xA5\x72\x70\x20\x42\x0D\x02\xC8\x71\x35\x19\x6C\xD3\x05\x16\x14\xAE\x40\x02\xB4\xF0\xC6\x17\xB1\x97\xF3\xD8\xCF\x6B\x9D\xC8\x6E\x2E\xC4\xB4\xC5\xAE\x31\x1F\x07\x2E\x17\x48\x5B\x8E\x41\x18\x1B\xD7\x6A\x6C\x9C\x4D\xD3\x7C\x6A\x6B\x86\x85\x5F\x46\x64\x30\x9A\xFD\x05\x83\x01\x2A\x49\x7E\x8D\xF1\x62\xE1\x57\xE9\x6D\x7D\x51\x68\x1B\x84\x9A\xC3\xC7\xB4\xCC\x9A\xDA\x8F\x66\x31\x41\xAB\xEB\x91\xE7\x52\x30\xD1\x08\xF1\xDC\xE2\x2A\x24\x79\x05\x02\xD5\x61\x8A\x85\x8E\x70\x75\x30\xDC\x89\xB2\x89\x1D\x9F\xE7\x48\xC1\xD4\x58\x6C\xD2\x6F\x81\xC4\x55\x8D\xFA\x6D\x3E\xD1\x6F\xEB\x75\xFD\x36\x87\x07\x83\x0F\xA2\x22\x79\x32\x17\xF3\x99\xB9\x48\xDB\x80\x2A\x55\xA4\xEF\x13\x7B\x37\x0F\xC6\x6D\x32\xD6\x43\x4B\x49\x3B\xB5\xB1\x76\x66\xAD\x76\xE6\x76\xB5\x33\xAC\x1D\x6B\x76\x9A\x21\x3B\x6A\xDE\xD5\xA8\x79\xD7\x09\xEA\x17\x9E\x03\xC6\x6E\x57\x53\xCF\x81\x31\xC6\xE8\xD3\x3D\x07\x55\x72\x19\xC8\x70\x60\xA4\xFB\x56\xEC\xAB\x71\x2C\x45\xA9\xAC\x29\x1F\x50\xB8\x8D\x70\x57\xD6\x51\x27\x2C\xC4\x39\xD4\x06\x85\xBC\x0D\x4A\xE5\xB6\xDB\x76\x75\x52\x2A\xDB\xA9\x52\xD9\x8E\xF4\x2E\x6D\x2C\xA0\xC2\x79\x4B\x3C\xB0\x6C\x40\xEC\x16\x94\xCA\x2D\xD6\xA4\xE6\x71\xCC\x6A\xE1\xB6\xC4\x66\x88\x3C\x95\xB5\x6B\x26\x3C\x95\x05\x95\xCA\x82\xB8\x8E\x05\x49\x2E\xE1\x47\x68\xA2\x52\x59\x4D\x95\xCA\x50\x89\x66\x2A\x93\xD1\x87\x1E\x64\x41\xA4\xA5\x8D\x9E\x24\x76\xEE\x69\x52\x09\x2A\xE3\x62\x1C\xF7\xEC\x76\xE3\x1E\x6E\x5E\x15\x4D\xDC\xBE\xB2\x34\xF2\x59\x1C\xF9\x5E\xC9\xD8\x67\x32\xF6\xC5\x64\xEC\x0F\xC4\xCF\xBE\x56\x91\x69\x1D\x8A\xAF\xAF\x1E\xA7\xD4\xE4\x76\x95\x38\x61\xFA\x8D\x4F\x08\xB3\x33\x00\x61\xD1\xB7\x73\xBB\x0F\xC0\xB5\x05\xE9\xC5\xE2\x54\xBA\x44\xAE\x42\x11\xB2\x53\x9C\x76\x98\xF9\x0B\xA2\x73\xA4\x99\x2F\xB6\x7B\xB3\x71\xE6\x2F\x46\x98\x51\xCE\xFC\x26\xCD\xFC\x91\xA3\x33\xCD\xFC\x45\xE2\x50\x74\x4D\x9A\x5F\x74\x35\x8D\x46\xA4\xA1\x8F\x02\x06\xE8\xE6\x09\xCD\xDE\xDE\x30\xA5\x95\xF8\x31\x46\xC7\xD4\x62\xEE\x59\x2B\x25\xF9\x3E\x3A\xD4\xCA\xA9\x7F\x56\x4B\x72\x85\x04\x4E\xFE\xEB\xD7\x5D\xD3\x1A\xFC\x6B\xDB\x75\x4D\x83\x3D\x8C\x46\x34\xDB\x12\x33\x54\x1A\xF0\x83\x26\xAA\xCE\xE2\x04\x13\xE1\x59\x5D\x1F\xAF\xB9\xC9\x8B\xD9\x7E\x49\xAD\x5A\x76\x4C\x61\x51\x67\x82\x16\xE3\x48\xED\xDC\xDB\xAD\xC5\xDB\x1D\xEA\x53\x8A\xBF\x1B\x0B\xD7\x14\x44\x61\x74\x59\x95\xB2\x63\xE6\x02\xC6\x80\x98\xD3\x3D\x23\xDC\xCE\xC2\x71\x71\x7C\x15\xBB\xCF\x66\x87\xF7\x84\x59\x0B\x0E\x6F\xA1\xD5\x2A\x37\x3A\xBC\xC7\xF5\x09\x0E\xEE\x32\x39\xB8\xA3\x2F\x5B\xE0\xB4\xB9\x30\xC4\xED\xCA\x95\xFB\x4C\x5C\x51\xAE\x1C\xF7\xCC\x32\xEE\x99\x1B\xEB\x66\xD6\xEA\x66\x6E\x57\x37\x23\x2B\x4B\x91\xA4\xA4\x4C\x52\xC2\x23\x05\xA9\x9B\x99\xD4\x4D\x44\xA5\x8C\x2B\x27\xBC\x6D\x05\x11\xA9\xC0\xFE\x54\x44\xEF\x1A\xF5\x6B\xD9\xF4\x0A\xF2\x71\x62\x53\xCB\xC4\x93\x52\xC4\x60\x10\x49\xBA\x0B\x5B\xD0\x61\x5F\x63\x53\x74\x5B\x20\x59\x67\x38\x71\x3D\x0D\x27\x9E\x72\x9A\xC5\x02\x18\x59\x33\xDD\xF4\x96\xD8\xC6\x97\xAC\x8B\x04\xDE\xAC\xB6\x80\x01\x8B\x14\xF5\x76\xDC\xF4\xDA\x09\xF7\xE6\x16\xC1\x84\x0A\xA6\xAC\x9C\xD8\xF4\xD0\x5A\x74\x19\x6C\x03\x68\x59\x29\x5F\xF5\x0E\xC6\xA4\x4A\x63\x42\xF8\xDE\x53\xC7\x64\xDC\x47\xD6\xC6\x85\x43\x52\x4D\x86\xA4\x4A\x43\x72\x8A\x0B\x71\xA0\x4B\x37\x8E\x36\x6B\xDD\x97\xBE\x3A\x1A\x9F\xB6\xDE\x5E\xBF\xE6\x4A\x5F\x1E\x5D\x23\x57\x85\x99\x05\xE0\x96\x93\x9C\xCD\xA0\x14\x55\x5A\x65\x59\x96\x9B\x5C\x37\xA3\x10\x94\x13\x21\x28\xA3\x10\x90\x6C\x79\xCE\x67\x5C\x1D\xF6\x8B\x20\x04\xCD\xC8\x67\x1C\xC6\x90\x01\xFC\xC1\xE4\x10\x21\x68\x5D\x9B\xF8\x8C\xD7\x84\xA0\x1C\x85\x20\x15\x30\x0F\xD5\x6A\xA2\x8F\xB4\x6F\xA2\x10\xA0\x15\xAB\xD6\x35\x41\x08\x4A\x12\xC3\x50\x08\x2A\xB7\x38\x95\xBB\x98\xF4\xDE\x53\xCD\x1B\x42\x50\x86\xD7\x41\x08\xD8\x2A\xA6\x2F\x21\xAE\xC4\x4A\x1F\x87\x1E\x2E\xBD\xBE\x7E\x8D\x29\x7D\x4C\x44\x15\x2E\x95\x4D\xF9\xA7\xA1\xD8\x2A\xEE\x37\xA1\x3F\xE1\x9C\x5C\xA0\x3F\xD3\x79\xDE\xA8\x47\x96\xC9\x39\xD9\xA0\xB7\xC6\xDE\xB4\x8F\x2F\x17\xD2\x9B\x0B\x57\x87\xDE\xD6\xCF\xF4\x4B\xB7\x4C\xBD\x89\x68\x99\x51\x8F\x5C\x8C\xA7\x77\x8B\x54\x00\x7C\xCF\xD2\x9B\x40\xA6\xC3\x16\xD5\xB7\xAC\x49\x49\xD7\xF4\x2A\xA8\x9B\x76\x80\x47\xB5\x61\x6F\x86\x11\x6C\x26\xCE\xC9\x8A\xCB\xF1\x82\xCE\xC9\xF2\xA4\x73\x52\xBA\x25\x34\xED\x59\x54\xE2\x9B\x27\x53\xF9\x37\x2A\x53\xE5\xEF\x86\x4C\x8D\xB6\x3D\xE2\x98\x9E\x5D\x95\xBC\x5C\xCD\x4F\xF5\xD2\xF2\xD0\x63\x6D\xDF\x74\xAE\x57\x5C\x5A\xEA\xB8\x07\x84\xCA\xCE\x96\xF7\xDB\x2C\xEE\x9B\x57\x92\x72\x24\x84\x8F\x8B\x09\xCC\xE9\x92\x99\xBC\xB2\xA2\xD4\x1B\x57\x94\x6F\xE2\x42\x61\xBF\xD1\x41\x2D\x7E\x37\x07\x75\x7A\x72\x56\x9E\x4A\xD5\x3C\x7A\xE5\xFF\x37\x9B\x15\xF0\xBB\x4F\xB2\x32\x12\xC3\x8F\xFF\x64\x4C\xC6\xB0\xCC\xA4\x8C\x5F\x3E\x16\xB6\x5E\xF9\x12\xFE\x79\xA9\x62\xB2\xCF\x79\x06\x8A\x31\xDB\xA2\x74\xD9\x8C\xFE\x9F\xC4\x80\xA4\x94\x0C\xFD\x51\x8F\x19\x14\x23\x63\xDE\x51\xD0\x5D\xEE\xC9\x3E\x59\x41\x11\x7D\x18\xD4\xFD\x7C\xD1\xFC\x7D\xF0\x0E\x5E\x34\x1F\x09\x2F\x5E\x4C\x92\x3E\x6E\xDE\x9F\x7D\xB2\xC2\xCB\xAB\x48\x08\x87\xA0\xD2\x9A\xBB\x94\x75\xD6\x9F\x07\x08\x55\xF8\x74\x0E\x00\x72\x16\xCC\x8B\x64\xD6\xB6\xFE\xA5\x6A\x00\x0C\x01\x42\x12\x62\x6A\x05\x43\x27\x5C\x7D\x41\x11\x05\x76\x9A\xF0\x31\xBF\xE8\xEA\xD3\xF2\x42\x48\x74\x52\x92\xED\xC7\x55\x17\x94\xEE\xCB\xEE\xD3\x12\xA4\x7B\xEA\x53\xE8\x15\x66\x93\x34\x92\x4D\x52\x8D\xA9\x24\x8D\xFF\x25\xFE\xF5\xC8\x6E\x98\xA5\xFE\x2B\xCC\x39\x09\x82\x79\x55\x62\x1D\x5D\xED\xDF\x3D\x20\xA5\x84\x2F\x93\x64\xF9\x73\x7D\xCD\x01\xA9\x1C\x94\xC3\xF3\x41\xD6\x29\xDE\xB7\x6E\xE9\xCB\xBB\x5E\x5F\xC7\x8B\xAE\x3D\xA8\x4D\xE3\xF5\x0A\x21\x12\xE7\x83\x38\x5B\xF0\xB7\xF4\xD5\x45\x73\xDE\xD5\x60\xCA\x06\x75\xFE\x18\xAA\xFE\xE1\x4C\x97\xC7\xD3\x0D\xDE\x32\x6F\x4D\xF5\xE6\xD0\xB7\xEF\x45\xC6\x42\x6F\xFD\xDF\x7B\xE5\xB3\xAF\xE8\xC7\x89\x66\xC2\xE4\x31\x50\x98\xE2\x96\xC2\xEB\xEB\x61\xDE\x23\xE7\xEB\xB3\xE1\x46\x57\xF8\x57\x3E\xFB\xCA\x67\xA1\xA1\x41\xE9\x8E\xCF\x1B\x57\xF8\xF6\xC9\x18\x2F\x0E\x08\x33\xD8\xAE\x96\x87\xB1\x82\x5C\x9F\xE3\xAE\x61\x95\x81\xE0\x6D\x55\x3A\xED\xCC\x3E\xA0\xD9\xAD\xBF\x4E\x59\x06\x2E\xCF\xF3\xF2\x20\x8C\x82\x70\x25\x4F\x9E\x5D\x1D\x2E\x46\xA4\x17\x2D\xB6\x05\x9F\x2B\x56\xD6\xE5\x2B\xED\x8C\xCB\x99\x9A\x27\xF8\x3D\x00\x24\x22\x7C\x8C\x80\x8F\x69\xA7\x18\xE4\x6F\x83\x9E\x9D\x65\x84\xB7\x8D\xA0\x03\xD4\xE1\x31\x9B\x67\x89\x00\xF9\xCA\x3A\x8D\xB2\x5B\xDB\x34\x4E\x9D\x98\xCE\x09\x30\xA8\x14\xE8\x1D\xA6\x43\xCE\xF1\x3C\x9A\x5F\x2F\x41\x2C\x40\x66\x51\x21\x3E\x05\x01\x38\xEB\x66\xF1\xF3\xFB\x30\x7B\x67\x19\xC0\x76\x9A\xBC\x7A\x4F\xA6\x66\x89\xAB\x05\x13\x57\x53\x11\x3C\x9B\x3B\x59\x4C\xCC\xB6\xEB\x73\x97\xDF\x13\xA6\x33\xD2\x53\xF9\x14\xE7\xE9\x86\xCB\xFA\xD4\x14\xE1\x30\x1E\xC5\xB3\xD3\x1C\x4E\x2D\x29\xC2\xC8\x62\xD3\xFE\xA1\xA3\x8D\xF9\x71\x29\x83\xD3\x6E\xCE\x8F\xB3\x9B\xF3\xE3\xEC\xC6\xFC\x38\x42\x56\x31\x15\xD5\xCE\x52\x51\xD9\xB0\xF8\x52\x03\x26\x3F\xC9\x15\xCE\xC6\x5C\xE1\x4C\x32\xE3\x11\x59\x93\xE6\x7B\xEE\x0C\xBA\x3B\x1B\xBB\xDB\xB8\x6C\x53\x77\x6F\x2C\xDF\x8E\xE5\xDB\xB1\x7C\x1B\x07\x33\xCC\x0F\xC0\x47\xB8\x6C\xEC\x67\xE3\x75\x12\x83\x3C\x96\x23\x45\x1F\xA7\x81\x44\x79\xB7\xF4\xAC\x3C\x39\x73\x39\x2D\x5F\xB1\x1C\xF3\x15\x4B\x8E\x07\xD9\xE6\x63\x5E\xC0\x98\xAF\x98\x9F\x18\x8F\x8C\xE7\x5B\xEB\xE3\x91\xF1\x54\x69\x7D\x3C\x32\x19\x8F\x1C\x19\x13\x80\xCC\x5D\x4F\x0D\xD6\x4C\x0D\x4E\x7D\x17\xA1\x0D\x4E\xE4\x5F\xE6\x48\x28\x99\xB5\x47\xB3\x3D\xD9\xD8\x9E\xEC\x77\xA2\x3D\x15\x97\x4E\x11\x32\xAE\x12\x96\xE9\xFB\x3A\xCC\x81\xCB\xBB\xD4\xDB\xD5\x9E\x69\x65\x69\x42\x42\x98\x96\x78\xED\xA6\x69\xFE\x8C\xD6\xD9\x31\x17\xE2\x73\x61\xED\x7D\x64\xA9\xFC\xAF\xFD\xDA\x0C\x53\xE9\xDC\x2A\x43\x06\x07\x77\xEF\x47\x96\x12\xF8\x0F\x1A\x63\xBD\xCA\x84\x0F\x39\x73\xFA\x10\x89\xBD\xFE\xE6\x17\x67\x49\x81\x6A\xCF\x9C\x07\xB8\x5A\xF7\x03\xDF\x89\x2C\x8E\x4B\xC8\xBF\x56\x7B\xC6\xA1\x74\x97\x0D\xFE\x78\x78\x8B\x22\x3A\x09\x01\x2F\x50\xCB\x8C\x88\x28\xCD\x07\x33\x63\x8E\xF5\x0B\xA4\xEA\x99\x1C\x92\xE5\xCE\x38\x3D\xFB\xA5\x88\xE9\x68\xDC\x37\x78\x58\xA9\x79\x9C\xA2\x9D\x91\xC5\xDA\xC4\x33\xC4\x7C\xBD\xC8\x70\x7B\x3A\x7D\xD1\x72\xBB\x4E\x87\x95\x6A\x76\x58\xA9\x36\x14\x48\x72\xFF\xF9\x93\x78\xD1\x5A\x4D\x11\x24\xB5\xB9\x5E\x8D\x37\xAB\x9C\xC4\xCC\x66\xFE\x08\x5F\xB8\x2A\x43\x67\xCB\x23\x59\x3C\x04\x5E\x2B\x7F\xC9\x0C\xF1\xED\xE6\xB4\xB7\x20\x42\x42\x9D\x78\xC4\x84\x47\x4E\xE9\x01\xC0\xAE\x61\x0F\x6D\xFE\xC7\xCC\xE4\xC7\xE6\x85\xF1\x10\x2A\x12\xD0\xE0\x08\x6C\xED\xA4\x1C\x64\xEE\xDD\xD0\x17\xF3\xA3\x54\x01\x3B\xCA\xC3\xDC\x97\xC3\xF4\x6E\x15\x36\x29\x25\x27\xFF\xCA\x55\xF7\x87\x2D\x7A\xE3\xB9\x7B\x15\x6F\xC5\xC9\x3F\x6E\x1D\x87\xA8\x0A\x2B\xB9\x9C\xC0\x76\xAB\x9A\x97\x43\x81\xF5\x78\x57\x15\x7F\xAF\xE4\x77\xB7\x56\x3F\x6C\xB6\xF7\x88\x5A\x38\x9E\x77\x86\x17\x31\xC2\xE0\x5C\x68\xA9\xDE\xA7\x32\xCB\xAD\xBA\xCF\xE7\x27\xF8\x82\x49\x17\x1E\xCE\x90\xE5\x88\x85\x46\xB9\x22\xE8\x11\xE7\x06\xD0\xAC\xB1\x64\xC4\xED\x3F\x85\x14\x0A\xA6\x9A\xE2\x5C\x91\xA4\x98\x54\xD4\xD6\x0F\x6F\x5D\x31\xF8\x73\x03\xC9\xC5\xB3\x7B\x32\xD4\x8B\x99\xEA\xA5\xCB\x41\x83\x84\xA1\xD0\x07\x09\x2C\x5C\x14\xB0\xCF\x55\x39\xF7\x79\xFD\x82\x39\x3E\x31\x84\xCC\x74\x99\x05\xD2\xA8\x43\x9F\x3D\xB3\x55\xE4\x79\x58\xBA\x6C\x50\xF7\x2C\xA3\x42\xF2\xF5\xA1\xB1\xEC\xFF\xC2\x29\x17\x35\xA3\xDC\x15\x9C\x03\xC0\xDD\x81\x7C\xAC\x3D\x16\x4B\x2B\xD7\x22\x11\x34\x73\x3F\xF8\x3A\x29\xBB\x42\xD9\xA5\x0C\x7B\x99\xCA\x76\x9B\xAB\xC2\xDB\x47\x29\x99\x55\x05\x35\x8D\x5A\x50\x2C\x54\x4D\x0A\x95\xBB\x28\x6A\xC5\x28\x67\x78\x61\xB9\x1E\xE6\xC0\x71\x46\xC8\xC0\x86\xA2\x80\x6B\x07\x76\x28\x75\xE2\x34\x1C\x37\x98\x78\x43\x5F\x73\xBA\x94\x14\xB1\x7C\x76\x1B\x7B\x4A\xAF\xBF\x5B\x8F\xEF\x1E\xE7\xEC\xA4\x6F\xCA\xF5\xDB\x4B\xDE\x5E\x6E\x18\x26\xD8\xB6\x27\x27\x5C\x17\xBB\x52\xA6\x52\xE8\x0F\xDC\x5E\x9F\x32\x3F\x4F\xE9\x79\x7D\x8A\x10\x94\x6C\xB5\x5D\x13\x02\xF1\xCB\x31\xA8\xEA\xD4\x8A\x9C\x1C\xFE\x53\x2B\x91\x16\x89\x22\x46\x55\xA5\x85\xA7\x48\xAB\xCE\xB8\x48\xAC\x0D\xBD\xB3\xEB\x5D\xAF\xC6\xAE\x1F\xC3\x3C\x8A\xFB\x4D\xC4\x6A\xE0\x18\xCA\x32\x01\x76\xA4\x98\xBD\xDC\x97\x27\x17\x9C\x8C\xB2\x93\x55\xAE\x0E\xD3\x10\x8B\x85\x1D\xFA\x3C\x2C\x16\xF9\x74\xB1\xB0\x71\xB1\x10\x7C\xA8\xE7\x86\x95\xD0\xAD\xE4\x1B\x17\x0B\x8B\xC5\x02\x58\x17\xB2\x58\xB8\x05\x63\x31\xAB\xFD\xA5\x91\xC8\xC9\xDA\x95\x40\x88\xAE\xA4\xCA\x44\x14\x2B\x11\x08\xB1\x8F\x44\x3C\xC1\xA0\x42\x39\xF9\x35\xC0\x61\x8D\x4C\x91\xD6\xEB\xA3\xE6\x63\xB5\xB6\x71\x55\xB9\x2F\xAD\x2A\xE6\x21\xAF\xF6\xCC\xF7\x7E\xF2\xFD\x37\x94\x3F\x66\x32\x69\xE6\xF7\x06\x90\xF2\x00\xDF\xFE\xA2\xA9\x3C\x2E\x93\x06\xF8\x13\xE1\xA1\xEE\xCF\x48\x36\x11\xDD\x02\x7A\xCF\xD8\xEE\x47\x23\xD5\x97\x1B\x40\xF5\x78\x4F\x96\xC0\x13\x91\x4F\x17\xBF\x3B\x83\x4F\x1D\x01\x35\xF6\xF8\xCF\x7D\x0E\x6C\x55\x1F\x0C\xEF\x41\x2E\x92\x7F\xEB\xB0\x22\xC8\x93\xBA\xA0\xDE\x1A\x51\xEB\x99\x6E\x17\xF1\x19\x1F\x18\x69\xDB\x34\x68\xCD\x1A\xE6\xE6\x89\x06\xAC\x2E\xA8\x87\xD2\x83\xFF\xAB\x9A\x3E\xF9\x9A\x1A\x1F\xB5\xE9\x51\x75\xD1\xBC\x87\x20\x91\xEF\x76\xB8\xF5\x5D\xA4\x65\xFA\x76\xFE\xF8\x04\x7F\x7C\x94\x34\x21\x33\x2E\xB7\x73\x92\x82\x8B\x3C\x31\xE0\xEC\xF7\xC1\xD2\xEF\xF3\x5D\x7A\x82\xA0\x09\x1A\xAF\x9F\x75\xE1\x97\x56\xE0\xAE\xFC\xDD\x9E\xA9\xE8\xDE\xEC\xEF\xF6\xC6\x19\xFF\xA1\xED\x6B\xC8\x44\xBF\xA0\xD4\x6E\x6F\xBC\xB9\x06\xE0\x17\x17\xBF\xDF\xE8\xF8\xC3\x2A\xFE\x50\xF1\x7B\x9F\x6E\x70\xFC\xE1\xDF\xC1\x0F\x4E\xF9\xBB\xC1\x52\xA3\x9F\xBE\x16\x2E\x6A\x5E\xFC\x77\xD3\xDD\x52\xFE\xBF\x17\x7F\x90\xE2\xFF\x20\x9F\x06\xB9\xC1\xC7\x6F\x0A\x2C\xF8\x5E\x34\x59\x26\xEC\x72\x86\xF7\xFC\x16\x71\xDE\x9D\xC1\xC8\x91\x7C\x83\x89\xA3\xDB\x57\x76\x2F\x9A\xFB\xA2\x87\xEF\x7C\x9F\x03\xB5\xA0\x13\x34\x4D\x72\x5B\x91\xD6\xC9\x09\x9C\xE3\x53\x8F\x2F\xB3\x64\x1C\x35\x57\x90\xC4\xD6\x0D\xFE\xA9\xA3\x88\x35\x1B\x26\x13\x60\xBD\x71\x92\xA4\xAF\xB1\x83\xED\x45\xD3\x91\xC0\xC4\x78\x7D\xFD\x6D\xAA\x62\x07\xEB\x6B\xC1\xF4\x21\x09\x74\x58\x1E\x92\x8F\xCE\x3A\x43\x98\xCF\x08\xBE\x36\x97\xB0\x94\x68\x95\xA6\xA4\x8E\xF4\x76\x44\xEF\x98\xB8\x2E\x91\x4F\x87\x84\x43\xF0\x73\x7D\x2D\xC6\x37\x65\x48\xD8\x14\x94\xC8\xBD\xEE\x1F\x23\x18\xCA\x08\x4E\xEC\x13\xC8\xD1\x0D\x73\x03\x76\xE2\x77\x3D\x9C\x1D\x77\x7F\x35\x22\xB0\xBF\x73\xDE\xCD\x2B\xED\xEF\x4B\x49\x98\xFA\xE1\xBF\x78\xE3\xC6\x8D\x97\x2C\x37\x12\xC0\xB5\x9B\xD0\x90\xDE\x29\xBF\x8D\x79\xE4\x74\x18\x06\xE3\xD5\x3D\xEA\x17\x5F\xBF\x71\x43\xDD\xAF\x94\xB0\x84\xDF\xA3\xFE\xD1\xF8\x43\x87\x1F\xBE\x30\xFE\x70\x0E\x3F\x7C\x79\xFC\xC1\x0D\x5E\xDD\xAB\xBE\x1A\x7E\x78\x50\xA9\x44\x1B\xFF\x44\xF7\xAF\x08\x75\xF4\xED\xFC\xFE\xCE\xEE\x7B\xC2\xF7\xB7\xA9\x77\x09\xDF\xC4\xDD\x77\xCE\x37\x71\xDF\x78\x16\x8C\xCE\xFB\x7E\xBA\x47\x9E\xD2\xFA\x38\x09\x19\x10\x62\x94\x47\xBB\xB0\x3E\x10\x45\x32\x0C\xC1\xFC\x1E\xCB\x7B\x3E\xC4\x7B\x00\x49\x7F\xDA\x3D\x3F\x32\xBF\xA7\x79\x9F\x26\x3A\xAC\x11\xAC\xD8\xEB\xFC\xF6\x64\x98\xCF\xA0\xAA\x08\xDF\xDE\x8A\xED\x31\x02\xC1\xBA\x01\xCE\xCB\x2E\xAE\x71\xE1\x9B\xE5\x97\x37\x0F\x5E\x73\x9D\xD9\x19\xB0\xB8\x40\xAC\x62\xF1\xAF\x8D\x59\xDA\xDA\x99\xEE\xB3\x9C\x3C\xCD\x05\x01\xAD\x05\x8E\x13\xC9\x50\xD9\xDD\x49\x4A\xB2\xE3\xEE\x67\x08\xBA\xFF\xEE\xE6\x33\x06\x98\xBB\x84\x4F\x15\x67\x51\x62\xBF\x09\xF2\xB6\xE9\xC7\x77\xC6\x1F\x5F\x05\xAD\x51\xCA\x39\x51\x7B\xE6\xDD\xA7\x5F\x7A\x8B\x5C\x4A\xEB\x33\x8F\x99\x27\x93\x46\x4F\x06\x57\xCF\x9E\xFD\x8E\xC9\xB3\x1F\x92\x67\x85\xF8\xBD\xFB\x79\xC1\xAF\x99\xDE\xFF\x9E\xC9\xFD\x3F\xB2\x76\xFF\x2F\x9C\xB8\xFF\xE4\xFA\x3E\xBB\xF8\xD6\x8D\x73\xFA\x36\x72\xD9\x5C\x56\xA3\xD2\x19\x36\x36\xA9\xA3\x9A\x54\x98\x2D\xEF\x62\xCB\xFD\xB9\xD9\x72\x11\x1D\x76\x8F\xAC\x17\xF4\x0B\xD3\x82\x7E\x21\x16\xC4\x95\x3E\x95\x75\x7E\x63\x59\x3F\x6F\xC6\x6D\xFB\x83\x3A\x25\x76\x7A\xDA\xBB\x6A\xCF\xDC\xC7\x76\x7C\xBB\xCB\xC9\x80\xAE\xFC\x07\x34\x13\x9E\xC9\xFB\x28\x78\x2C\x1E\x06\xCF\xB5\xDD\xBE\xF4\x67\x2F\x2F\x15\x68\x2B\xB2\xEB\xF0\x3E\xE3\x7C\xE4\xC8\x95\x07\xBB\xDD\xF7\xBE\x9F\xDC\xCC\xCA\xD5\x52\x46\x1D\xA1\xAD\x24\x9D\xD5\x3A\xE3\x2A\x57\x76\xBF\x28\x0B\x5D\x42\x0A\x45\xFC\x16\xA2\xDE\x08\xAC\x7D\x28\xBE\x4C\x60\x7D\x22\x63\x1B\x20\x8A\x88\x87\x0C\xFF\x5F\xDD\x05\x5C\x5D\xF6\x90\xE4\xD9\x43\x35\x04\x8D\x3A\x1D\x3D\x19\x01\x66\xCB\x88\xF6\xAD\xF8\x34\x91\xD3\x89\x55\x5B\xEE\x19\x7B\xE6\x46\x74\x10\xB4\xE4\x20\x2E\x83\xF2\x08\x04\x6A\xC5\xCF\xBA\x71\x75\xF7\x7D\x72\xA8\x38\xA6\xCE\xBA\xB2\xF9\xF2\x02\x8E\xD5\x2A\x1D\xA2\xA8\x14\xB5\xE9\x69\xAC\x1A\x97\x3D\xC2\xFE\xBD\x2F\x72\xB9\xD7\x8E\x2C\xD7\x24\xD8\x5E\xBC\xEC\xC8\xD1\x77\xCE\x95\x6E\xF1\xB0\xFB\xC0\xCB\xCE\x1C\xBA\xCC\xD5\x87\x43\xDF\x5E\x34\xE7\x71\x92\x95\x75\x44\x7B\x5E\x72\x1A\x6E\x5D\x50\x2A\xA5\x6F\x11\x33\xC4\xDF\xD2\x47\xF1\x34\x65\xEB\x82\xD2\xFD\x36\x21\xEB\xB3\x83\xA5\xF1\x66\xD5\xA5\x3B\xBC\x76\x96\x5F\x76\x71\xEC\x61\x0E\x76\x57\x5D\x93\x14\x9E\x3E\xA8\x7A\xFD\x19\xCA\xBD\x40\x16\x08\xF2\xA5\x7E\x76\x95\xC9\x69\x1B\x54\xDE\xB3\xEC\xA2\xCA\x19\xE1\x31\x9D\x3F\x75\x36\x3D\x75\xB6\x71\xAD\x3B\x7B\x65\x99\x89\x7A\x95\xC5\xB7\x3D\x1A\xD3\xD1\xCF\x4C\x27\x21\xDF\x47\x3F\x51\xE3\xCE\x7A\x7D\x19\x0C\x67\x67\x91\x3A\x87\xBC\x90\xEC\x82\x52\x24\x6D\x35\xD0\x16\x9D\x99\xC0\x04\xED\x86\x7F\x0F\x96\x85\x10\x5A\xA3\xA0\x3E\x73\x67\xAE\x30\x28\xEB\x8D\xDE\x97\xB9\xC6\x9D\x25\x67\xFF\xD2\xE2\x78\xDA\x9D\x3D\xC4\x38\x84\x0B\x41\xAF\xF5\x41\x37\x81\xCE\xB5\xEA\x1A\xAF\x9C\xBA\x68\x3E\x82\xFD\x40\xF9\xBB\xC2\x7C\x5C\x19\xB7\xB5\x67\x2E\xAF\xDA\xF0\xCF\xDD\xC1\xCE\xB8\xA0\xDE\x05\xED\x5B\xBD\x4D\x6D\xBB\x65\x50\xF1\x0A\xB7\x74\xC5\xE5\xDD\x3E\xF3\xC5\xE5\xA0\x41\x1E\x1C\xAD\x96\xFE\xC6\x8D\xCE\x55\xEF\x05\xCC\x46\xB5\x96\xF3\xD2\x01\x98\xAC\x66\xFC\x93\x57\xAE\xD8\xC5\xBC\xC4\x20\x97\xA1\x06\x77\x73\x2E\x3F\x49\x1D\xBC\x74\xA5\xBF\x7B\xB8\x68\xDE\x8E\x4F\x41\x1B\x7F\x00\x9F\x1E\x18\xA8\x2A\xFF\xAA\x1A\x5C\xE9\xEF\x1B\xFC\x5F\x9A\x68\xE3\x71\x25\xDF\x12\x5C\x3D\x10\x32\x5B\x10\x26\x6F\xB9\x12\x6C\x69\x5E\x7B\x8D\x73\xCC\xED\xC1\xAB\xEE\x9F\xBF\x1F\x9D\xE4\xCA\x0B\x6A\x7B\x99\xB5\xA5\x54\x7C\xBC\x3B\xE8\x28\x6B\x77\x83\xF3\x74\xFB\xD2\xB2\xC6\x2B\x10\x2C\x5E\xC0\x13\x00\xD6\xAD\x6F\x76\x53\xAC\x34\x25\xA3\xA0\x5A\x74\x9F\x34\x03\x1F\x37\xB4\xE4\xD2\xB2\xF2\x34\xBE\xBC\x59\xE1\x08\xCC\x22\x42\xF7\x86\x7B\x24\x8C\xDD\xD3\xD7\x70\x2C\x58\x5F\x01\x50\xA2\xBE\x4A\x98\x5A\xA4\x61\x66\x00\x1A\x11\xD3\xB9\xF9\xB6\x25\xA7\x07\xBE\x8F\x1D\x08\x5C\xD1\xF5\x37\x1B\x79\x73\xD1\xE0\xBE\x55\x05\x3F\xD1\xA5\xA5\x8D\xAF\xC7\x9B\xE0\xE2\x3D\x58\x66\xF0\x43\x90\xDB\x3A\x43\x25\x51\xE2\xAA\x0A\xFD\x57\xC1\x38\x7A\x80\xE1\xB7\x4F\x3B\x7B\xE9\x1A\x57\x9F\x77\xA2\xCB\xA4\x02\xB9\xCB\xBA\xEF\x06\x7B\x59\xD4\x2F\xDF\x49\x22\x4B\x88\xD3\x9E\x79\xBB\x6B\x1E\xA1\xE7\x04\xCF\x00\x15\x31\x3C\xF3\x13\xEF\x1F\x9F\x59\xBF\x76\x0B\xD7\xD8\x64\x9A\x92\xD5\x08\xAB\x78\x96\x29\x20\x08\x53\x3C\x3B\x30\x62\x03\xC7\xD5\x67\xB1\xC8\x07\x55\x9C\xE1\xFA\x38\xA2\x08\xF2\xED\xB2\x43\x9F\x5D\x17\xDC\x8D\xD0\x2B\xAF\x26\x6A\xB1\xAA\xD9\x01\xAA\x02\xA0\x08\x8C\xCB\xBA\xCF\x51\x47\x51\x4D\x03\x23\xF0\xF3\x7F\xF9\xFD\xD3\xAF\xBF\x8A\xAF\x0F\x52\x41\xD3\x45\x50\xC9\x1E\xD4\x70\x3D\x3E\xA8\x0D\x4D\x32\x4D\xEA\x84\x30\x83\xB7\x82\x72\xA5\x45\x0B\xA3\xEE\xD5\x7C\x42\x0B\x41\x41\x5C\xB7\x94\x7F\x7E\xD8\x3A\xA3\x33\xFC\x51\x99\xFC\x01\xF8\xA2\xB0\xAD\xE9\x4B\x4B\xF3\x86\x4A\x8E\x53\xDB\xB3\x27\xB4\xD3\xDC\x66\x9C\xA4\x3A\x81\x6B\x90\x7A\x95\x6C\x3F\x93\xBB\xC3\x86\xDA\x0E\x11\x6D\xA0\xFB\xDE\x99\x7A\xE3\x54\xF3\x17\xAD\xCE\x8E\x83\xF2\xE3\xD4\x7E\x6F\xDE\xA6\x5A\x5A\x05\x99\xC0\x8F\x64\x17\x54\x1B\x61\x90\x81\x02\xCE\x13\x86\xEC\x80\x38\xEC\x09\x64\xDB\x86\xFB\x14\x4F\x4F\x09\x73\x6D\x22\x70\x68\xF4\xEA\x47\xE2\x47\x4B\xC0\x77\x8D\x80\x4B\x39\x82\xE4\xF9\x24\x6D\x19\x98\x4D\xF1\x6B\x6F\x08\xA6\x94\x1D\xF0\x14\x4D\xE0\x92\x71\x74\x4B\xCC\x11\x1B\x1F\x0A\xDA\x70\x4B\x33\xA5\x25\x4B\xBE\xEA\xF9\x3A\x46\xC7\xB1\x9E\x28\x1A\x16\x1C\xA1\x69\xF0\xAF\xC0\xF2\x38\xC3\xB7\x64\x82\x20\x43\xA3\xCF\x80\xAD\x23\x15\x30\x6B\xA8\x9E\x36\x14\x6E\x8D\x95\x66\x43\xF5\xC9\x37\xCF\xDA\xA8\x4F\x6D\xA3\x40\x42\x6B\x42\x51\x01\x90\x54\xC7\x87\x4E\xB6\xD1\x12\xE8\xDD\xB2\x37\xBF\x81\x36\x2A\x39\x76\x91\x92\x9D\xDA\x0F\x9F\x2C\x6D\x0C\x83\xD3\x6B\x22\xD3\x34\x37\x73\x9D\x6F\x66\x7D\x70\xEA\x5E\x6D\x7B\xE3\xBF\x76\x2B\xE8\x2E\xF4\xF9\x7C\x6C\xF4\xF9\x10\xDD\x8A\x18\x5E\x9A\xD1\x15\xFE\x63\x62\x6B\x75\x83\xFF\xE4\xB8\x34\xA3\xA0\xB0\xAC\xAA\x3D\xF3\xD1\x70\x47\x9F\x51\x3B\x43\x4C\x0B\xE0\x2A\xFD\xAD\x5B\xD9\x51\xF8\x2B\x86\x82\x92\x00\x06\xB7\x45\x4C\x48\x40\xFE\x38\x25\xB1\xCF\xAA\x37\x80\x1B\x84\x5F\xD7\x38\xF5\x78\x58\x23\x59\x6C\x2E\xDC\x01\x99\xB3\x38\xE0\x20\x27\x0C\x8F\x9F\x78\x18\x43\x02\x81\x09\xC7\xA8\x21\x6B\x9A\x79\x58\x0E\x55\x14\x63\x45\x0C\x81\x9D\x54\xA2\x16\xA5\x9D\x05\x9F\x84\x11\xB0\x45\x42\x14\x41\xED\xCC\x1B\x86\xDB\xE7\xDD\x3F\x22\xD1\x25\x24\x02\x71\x7C\xE0\xEC\xDC\xC1\x89\x77\x82\x8C\x8A\x33\xEB\xFF\x87\x6D\x55\x61\x2C\xC3\x92\x1B\x1A\x1D\x3E\x8B\xE3\x8C\xA7\xCF\x0F\x6A\x3B\x85\xFF\x77\xAA\xF9\xF7\x83\xF5\xAE\xBC\x8E\x14\x71\x2F\x41\xCE\x36\x99\xE1\x1F\x5D\x33\xC3\x7F\xB0\x00\x72\x7D\x14\x57\x3D\x11\x22\x8A\x2C\x25\x0E\x93\x4B\x5F\x12\x3A\x50\x1E\x73\x12\x07\xA1\xEB\x2D\x3B\x9A\x38\xE9\x4B\xDD\xC2\x1F\xAA\x1E\x5F\x82\x3C\x77\x58\xC5\xE9\x7F\x69\x69\xC3\x8A\xD0\x38\x1D\xCC\x0C\xA1\xB0\x45\x69\xFC\x4D\x5C\x19\x0A\x1A\x48\xEC\x6C\xCB\xA9\x2F\x91\x29\x96\x9D\x9D\x71\xE9\xB3\x63\x67\x1B\xE9\x6C\x8D\x0C\x46\x4D\x02\x2B\xAE\x1D\x88\x24\x69\x18\x35\xA7\xA5\xB3\xB1\x58\xA4\xCE\xB6\x71\x83\xF0\xC7\x83\x90\x09\xDC\xBA\x95\x5D\xE5\xA1\xE6\x83\xDA\xAE\xF5\x42\x7E\x09\x60\x59\x76\xE8\x8B\x55\xE6\xF2\x95\x06\x00\x1E\x61\x1E\x9C\xBA\xD2\xDB\xDD\xD0\x64\xA2\x9C\x49\x9D\xB0\x5B\xEF\x2F\x8D\x50\xFD\xC6\x5C\x7F\x2C\xC8\x5A\xFC\x56\xC0\x90\x72\x59\x04\x93\x26\xC5\x09\xAB\x15\xBE\xF1\x05\xBC\x2B\xE5\x4A\x38\xDD\xC7\x66\x23\xC7\x40\x56\xCE\xA5\x88\x25\xF0\x84\xD1\xD2\x63\x01\x9E\xC9\xBA\x7F\x4A\x69\xE3\x9E\xB7\xDD\xAC\x8F\x73\x9E\xC6\x39\xFF\xA6\x8E\x73\xFE\xCD\x19\xE7\xFC\xE4\x38\xE7\xF3\x71\xCE\xA7\xE3\x8C\xD5\x62\x36\xCE\x98\xA6\x40\xE4\xD6\xE0\x88\x0F\x73\x0C\xC3\x7D\x04\xB0\xA7\x7F\x06\xB5\xA8\xF9\x93\x0B\x5D\x1C\x3B\xBD\x1A\xE9\xB3\x75\x02\xF8\x8A\x8D\x0C\xC3\x6E\x45\x05\xC0\xA1\x22\xF7\x9F\xA5\x06\x6E\xB2\x9C\x7E\xEB\x95\x99\x6C\x3D\x5E\x61\x49\xE1\x40\x55\x8C\xE1\xB6\x84\x8A\x2B\xB0\x07\x11\x75\xFC\x80\x1A\xB8\xCB\x56\xD8\x86\x10\x8B\x1C\x03\xF7\x2F\x9A\xB0\x84\x5D\x50\xAD\x90\xBB\x09\xEE\x1E\x44\x03\xC9\x16\x80\x4B\xAA\xA8\x6B\x10\xF6\xFD\xA2\x60\x07\xF4\xA5\xF8\x2E\x85\xA1\x8B\x2D\x29\xB9\x57\x92\x8C\x51\xF6\x4A\x13\x94\xB0\x96\x7B\x1F\x3C\x28\xFB\xBB\xAB\x09\x8E\x0D\x10\x65\x61\x0D\xD2\x15\x91\x93\x51\x37\x28\x03\x72\x7E\x60\xA3\x76\x04\x14\x74\xCE\x28\x46\x2B\x6E\xDA\xB3\xD9\xB7\xAC\x87\xB8\x35\x58\x0F\x3D\xDF\xB3\x33\xAA\x16\x66\xA2\x19\x68\x59\x76\x45\x7A\x9C\x60\xEE\xA9\x3E\x58\x9A\x0C\x95\x5D\xD9\x94\x2A\xA2\xC8\x88\x13\xBA\xEF\x12\x6D\x10\x9B\xC4\x5D\xE3\xC7\x12\x67\x13\x50\xFC\x62\x33\x88\xDC\xE6\x62\xE4\x55\xD0\x78\xB2\xA8\x60\x6D\x0B\xD1\x8E\x5E\xE6\xAD\x24\x0A\xE8\xD8\x39\x22\x9E\xEB\x2D\xE6\xFD\x1C\x6B\x51\xF7\xD8\x58\x1B\x1B\x3B\x0A\x88\x34\x77\xA9\xE2\x4C\x00\xA5\xAB\xE8\x54\x96\xA2\x10\xD5\x3F\x43\xF4\x78\xAC\x59\x69\xB8\x38\xEE\xA9\xD1\xE1\x6D\xA3\x9E\xA6\x67\xFA\x2A\x5C\x36\x5A\xDA\x4E\x79\xB2\x0E\xBE\xC0\x70\x15\xC3\x37\x69\xB6\xF8\x50\xC2\x3F\x63\xB9\xA6\x21\x69\x86\x4D\xAD\x66\x79\x12\x8C\x21\x14\xB4\x82\x03\x8F\x11\x0B\xAD\xD6\x32\xC4\x7A\xA2\xFC\xE9\x89\x82\xAB\x63\x0B\x39\xE0\x54\x89\x31\x32\x4A\x84\x54\xF1\x65\x74\xE6\xF6\xA9\x83\xC3\x56\x29\xAD\x49\x98\x72\x78\xA3\x92\x37\xAA\xC9\x1B\xD5\xE4\x8D\x2A\xBE\x51\x41\xD9\x15\x69\x76\x22\xCF\x31\xF0\xDA\x0A\x1B\x75\x78\x47\xB3\xDD\x40\x80\x30\xEC\xB0\xF5\xF8\x6E\x11\x26\x8E\xAD\xED\x15\x87\x9D\xE9\xF0\x78\x49\x43\x89\x40\x75\xD8\x26\x62\x7D\xD8\xC9\xDC\xB5\x71\xDA\x5A\x0C\x31\x36\x33\x51\x62\xA5\x03\xA4\xB7\xAD\xB0\x3E\x81\x4C\x8A\x34\xB1\xD2\x01\xDF\xC0\x1B\x55\xF3\x8A\x99\x68\x08\x05\x96\x5E\xD5\xFD\xCA\xE8\xB3\xE6\x21\xB6\xC0\xDD\x99\x6C\x12\x2B\x81\x75\x75\xCB\x64\x4A\x8E\xB9\xE9\x35\x12\x3A\x46\x59\xE2\x74\x96\xE4\x34\x8F\xAE\xAD\x3C\x68\x22\x85\x68\x22\x2E\x17\x7A\xED\xF0\xAB\x80\x53\xBB\x22\x2C\xDE\x05\xF4\xA0\x42\x56\x6F\x3E\x57\xE0\x81\xB5\xDA\xE5\x3C\xBC\xCA\x69\x35\xC0\xDB\x19\x41\xA9\x43\x8B\xF2\x2B\xCC\x3B\xCF\x85\xAE\x7E\x34\x1C\xD5\x83\x1A\xCC\xEE\x93\xF2\x9C\xA1\xD7\x34\xBC\x6B\xA5\x99\x60\x68\x90\x0B\x1F\xAC\x81\xAF\xC4\xF8\xB1\x60\xC4\x02\x13\xFE\xC6\x97\xD6\xF9\x0A\xA0\x9B\x0A\xCB\xB8\x77\xF4\xFE\x5E\x34\x89\xDF\xCC\xF8\x2A\x98\xFF\xE6\x3F\x43\xF4\x19\xEE\xC2\x42\x00\xB7\xDC\x31\x20\x8D\x09\xD5\x19\x2C\x8B\xD0\x74\x67\x92\x0F\x59\x16\x43\xA1\xCE\x8C\x80\xFE\xF0\xB0\x58\xC0\xC6\x66\xA4\x7F\xDB\x71\x66\xC0\x79\xDC\x9C\x14\x59\xDC\x7E\x23\x52\xB7\x8D\xB6\xF5\x9E\xE9\xE4\x1C\x0D\x9B\x69\x17\x8D\x6A\x89\x1F\x0C\xD3\xAD\xB9\x45\x93\x9F\xBC\x4A\x19\x57\x4D\x7D\xAF\x36\x5C\xC1\xF4\xF6\xC8\x07\x53\x92\x38\xE5\x6B\xFA\xC8\x57\x07\x4B\x23\x77\xED\x13\x2C\x28\x3E\xA2\xC3\x23\x49\x3F\xC8\x1E\x56\xF7\xEB\x36\xEC\x0C\x0F\xEA\x50\xD1\xF2\x41\x1D\x8A\x78\xDF\x0D\x4C\x8A\x0C\xA7\x3E\x17\xB5\x00\x75\xDE\xAB\x0B\x76\x1E\x54\xA7\x08\x33\x5D\xA5\xBD\x58\xF1\x64\x10\xAB\x8E\x08\x57\x76\x9B\x77\xC1\xDB\x91\x39\x9C\x63\x47\x8E\xFB\x13\x6F\x76\x59\xB3\xA5\x3C\x78\xB8\xBB\x5F\x85\x16\xB1\xA5\x7C\x39\xFF\x5A\x4F\xBE\x7E\x29\x1F\xC9\x46\xCD\x96\xD1\x8A\xAB\xA7\x1A\xEB\x01\x27\x96\xF2\x05\xF0\x46\xE9\x87\xB1\xF4\xC3\x58\x97\x85\x9A\xE1\x5B\xD8\x53\xA3\x03\xC6\x26\x07\x0C\x96\xAD\xCD\xCF\x98\xDB\x3C\xE3\x53\x98\xEC\xE4\xD5\x54\xFA\x25\x15\x29\x9B\x73\x57\xE7\x61\x79\xE6\x09\x6F\x6F\x57\xF4\x6C\x65\xDD\x4B\x3C\xC0\xF6\x24\x53\x0B\xB2\x5B\xA4\x93\x5B\x7F\xE3\x86\xBD\x3C\x51\xFC\x0A\x76\x76\xC1\x5A\x16\xAC\x65\xC1\x3E\x2F\xD8\xE7\x45\xEA\x63\x18\xD3\xB0\x87\xDE\xDB\x07\xFD\x9A\x62\x0F\x20\x18\xFB\xA0\x2E\x5C\x41\x46\x6A\xB0\x34\x55\xAE\x5C\xD5\x4E\x13\x85\x39\x7B\x68\xD4\x34\xF9\xC2\xF5\x6E\xC1\x0B\x2D\x5F\x68\xE3\x0B\xFD\xBF\xBA\xB5\x2D\xEF\x08\x4F\xC0\x26\x2B\x9C\x65\xB2\x49\xEB\x16\xB8\xFE\xA1\x88\x37\x6E\x13\x70\x64\xCD\x4B\xC3\x6A\x01\x90\x8E\xBE\x71\x15\x70\xF1\x4B\xE2\xBE\xE1\x18\xB2\x0A\xC5\x3D\x89\x66\x0C\xE0\x63\x0D\x92\xD6\xBD\x2E\x94\x36\xAD\x6E\xE6\x5D\x54\xCD\xBB\x08\xAB\xE7\x7A\x37\x75\x1C\xD3\xB1\xA3\xAF\x2C\x95\xFF\xD3\xFF\x7C\x86\x55\x6C\x88\xEC\x5C\x10\x2B\xFD\x7B\x23\xDE\x77\x05\xFA\xC6\xD0\x3A\x43\xF7\x63\x81\x50\xBB\xE8\x59\x30\x57\x76\x85\x73\x71\x0C\xEA\x97\x75\x54\xD8\x79\x8F\x05\xDC\x3C\x68\x83\xA0\x73\x8A\x19\x65\x23\x5A\xEA\x59\xE5\x73\x9E\xC0\xC6\x86\x86\x9F\x8A\xB5\x9F\xDE\x11\x4C\xD9\x13\x53\x51\x73\x2A\x36\x98\xF6\xD8\xC9\x27\x73\x30\x2C\xEF\xDD\x6C\x2A\xFA\x69\x21\xC1\x7E\x08\x23\xCE\x42\xAC\x5F\x40\xDA\xC3\x43\x3B\xDC\xE4\x83\xC4\x48\x59\x70\x4C\x75\xCE\x36\xFF\x22\xAE\x66\x5E\x5D\x9D\x88\xEB\x29\x0E\x51\xC3\x13\xE7\x0D\x9E\xD0\x6D\x52\xBD\x61\x2A\x30\xAB\x61\x2C\x6B\xBC\x7F\x73\xA9\xD9\x83\xF3\xB2\x1C\x0F\xC6\xD7\x97\xAA\x22\x2C\xDC\xE1\xC1\xB4\x62\x59\xAE\x8E\xB1\xF8\x2C\x16\x01\x4B\x35\xD4\xA2\xFB\x7F\x78\x38\x1A\x46\x2F\x9A\x42\x30\x53\x9B\x4B\xD3\x9E\x33\xA9\x08\xC3\x17\x19\xBE\xC8\xB0\x2B\x8D\xDF\x21\x62\x73\xAC\xA1\x38\x43\x4C\xF3\x7C\xA1\x99\x3C\x81\xC0\xCA\xE4\x1E\xFB\x16\xF8\xB6\x7A\x73\x8F\x22\xD9\x40\x35\xF4\xF6\x1E\xC6\xC4\xDE\x43\x9C\x1F\xA7\xEF\x51\x88\x85\x40\x58\x5C\x19\x7E\x05\xC7\xF1\xFD\xC2\x0E\xDB\x2B\xB9\xDF\x65\xE1\x27\xED\x8A\xF0\x8F\x75\x15\xE2\x27\x70\x5F\xF3\xE7\xAA\x19\x2A\xAF\x99\x12\xB1\x72\x65\x83\x3E\xB8\x24\x72\xF7\x3E\xA3\xD2\x01\x79\xED\x74\xF7\x2F\xE5\x88\x35\x6C\x96\x8C\x2A\xB2\xFE\x8F\x0F\xBE\x40\xA0\x37\xD3\x64\x0C\xA2\x90\xCC\x43\x1B\x70\xD6\x2C\x0E\xD4\xFE\xF8\x10\xA1\x4A\x4C\x78\x07\x74\x8C\x4B\x71\x3B\x2A\xA8\x0A\x95\x42\xAF\x53\x65\x0F\xB9\x12\x4B\x7D\x1E\xA7\x9A\x9C\x91\x4B\x7C\x1A\x95\x4D\x57\x30\x08\x3F\x6C\x6D\xB8\x03\x1B\x5A\xCE\x18\x9B\x8C\xE9\x83\xB1\xEE\x59\xB4\x20\x10\xE0\x2F\x79\xFB\xB9\x58\x10\x24\x35\xB5\x92\xDC\xC7\xF0\xBD\x7E\x31\xCD\x5B\x4D\x8C\x03\xAD\xC4\xF7\x37\x31\x65\x35\x9F\x40\x9F\xCC\x81\x08\x73\x02\x11\xCA\x83\x5B\x53\x20\x42\xA4\x19\xC5\x7C\x55\xCB\x08\x7C\x22\x10\x2E\x99\xAF\x6A\xC7\x7C\xD5\xDC\x2D\x26\xF9\xAA\xC6\x2D\x27\x8A\xAF\xA1\xF3\x8C\xD4\x05\x51\x17\x9B\xDA\x77\xA9\xA9\x96\xE9\x7F\x06\x8B\x93\x34\x94\xB1\x85\x7D\x23\x14\x59\xCB\x91\x42\x2B\x35\x14\xDC\x4C\xCF\xF4\x0B\xB7\x48\xEC\x59\x99\x80\x2B\x8E\x89\xB9\x76\x96\x98\xBB\x35\x4D\xCC\xC5\x70\x45\xD4\xC0\x9A\x7A\x34\x13\x73\x6B\xA2\x06\x2E\x18\x15\x40\xCE\xAC\xB0\x44\x8E\x0D\xAD\xD9\xD0\x05\x1B\x6A\x4F\x02\xBC\x64\xF4\xB0\x80\x91\xB1\x9A\xA8\xAD\xE2\xD8\xA2\xCE\x7F\x18\x9A\x66\x57\x99\xB3\x5B\xA6\x30\x72\xF0\xAC\x92\x36\xC4\xC3\xFC\xA4\x82\xC7\xC4\x9B\x8D\x4A\x93\x4D\x4A\x93\x6D\xA2\x4D\x2D\x93\x63\x99\x71\xB6\xC0\x18\x55\x6D\xDE\xF8\x8F\x7C\x69\x2D\x3B\x75\xAC\x0E\x09\x60\xCC\x75\xA7\x06\xFF\xFC\x10\xB3\xBA\xAC\x7F\x61\xE0\xCE\x87\x2C\x0D\x1C\xA4\x59\x97\x21\x25\x36\x7C\x38\xEC\xBE\xC2\xF5\xE9\x82\x8A\x31\x9D\x2E\x03\x6D\x72\x10\x82\x50\x23\x5E\x60\xF0\x41\xD6\x70\x46\x63\xF5\xB1\x63\xAC\x93\x19\x83\x31\xB3\xED\xC6\x99\x13\x44\x90\x99\x36\xC7\xE9\x7C\xAA\x87\xD7\x03\xCE\x17\x3D\x32\x71\x4C\xE6\x76\xD8\xE3\xB6\xEE\x5A\x2C\xB4\xC9\x32\x6B\x6D\x5E\x2C\xF8\x47\x55\x65\x2D\x6A\xAB\xBA\x57\x9B\xA7\xFD\x8D\x57\xD5\xD1\xA5\x6D\x59\x52\xF6\x4C\x07\xEF\xD9\xC1\xB2\x9A\xDE\xA3\xC3\x1D\x62\x0B\xC8\xF5\x02\x0F\xCC\xEE\x59\x96\x49\xD1\xD6\x13\x85\x9B\x47\xED\x28\xE0\x5E\x5D\x60\xE8\xF6\xB7\x67\x55\x60\x0D\xD6\x7E\x59\x66\x42\xAA\x36\x2B\xF1\x60\x69\xC7\x5A\xEE\x9F\xAC\xF6\x89\x07\xF6\xA5\xE2\xF1\x01\xB6\x02\xE1\x96\x70\x13\xEA\x3D\x63\xE9\xC2\x22\x5B\x8A\xCF\xAE\xB3\x8D\xE1\xD3\x01\x53\x8A\x68\xEE\x3B\x93\x5A\xE2\xC9\x08\xDA\xFC\x79\x83\x7C\xC8\x68\x9B\x23\x4B\x09\xB4\x1A\x4E\x5F\x59\x8E\x3E\x13\x6F\xAE\xAF\xB4\xD3\xA0\x3C\x91\xC0\x9B\x81\x6C\xE9\x99\x1C\x50\x99\xB8\xD5\xF5\x56\xE6\x7C\xE1\xA6\x49\xF9\x8A\x7C\x2B\xAE\x24\x17\xBE\x09\x53\x1F\xA8\x94\x69\xEA\x9B\x69\x5A\xBE\x99\x69\xC1\x33\x9A\x1A\x00\x69\xC6\xFA\xB8\x02\xE4\x16\x93\x5A\x21\xBB\x08\xCB\x80\x19\xE7\x7F\x16\x56\x9B\x09\x67\x9E\x61\x46\xA2\x50\xB4\x67\xD3\x93\xB2\x91\xC9\xF4\x44\x2A\xE3\x8F\xD9\xD9\xD9\xD3\xDA\x46\x87\x89\x4C\x76\x78\x1D\xB3\xA0\xB4\xDF\x7A\x64\xD7\x9B\xEB\xFE\xA7\xC2\x94\x25\xA5\x4D\xF7\x61\xA8\xEF\xDA\x3F\xF5\xF8\xD2\xA4\x47\x9B\x2B\x02\xCB\xEE\x9F\x3A\x9A\x50\x0C\xA5\x3A\x5A\x01\x52\x00\xCF\x9F\x10\x5C\x68\xC4\x81\x82\x5C\x69\x58\xE5\x61\xA8\xB0\xC5\x64\x4E\x4F\x30\x08\x34\x83\x40\xA9\x8B\x76\x43\x0A\xEF\xC3\xAE\xDA\xC5\xAA\xE6\x2E\x3F\x59\xD5\x42\xAA\x9A\x4F\xAB\x9A\xB3\xAA\xF9\x5A\x55\x33\x59\x2B\xB0\x0D\xB0\xAA\x72\xC0\x67\xB8\xB8\x81\xD6\x04\xD5\x35\x5E\x5F\x0B\xF7\xAF\xAC\x28\xAF\x99\x2B\x26\xA3\x93\xB9\x5C\xE8\xE9\x0D\xA8\x91\xF6\xA0\x2F\xEA\xC1\x19\x72\x26\xEB\xA3\x3E\xDB\xE5\xBA\x97\x7B\xFD\xAC\xCB\x76\xBB\x1F\x8E\x08\x31\x66\x3C\xCC\x36\x93\xC3\x6C\x34\xFC\x57\xB1\x6A\x7E\x98\x21\xDC\x28\x5A\xCB\x1C\xAA\xA4\x00\xA6\x48\x48\x2F\x89\xDE\x8D\x58\xEE\x0E\xE9\x2D\x26\x9D\x00\x41\x38\x24\x90\xD3\x99\xF8\xE9\x46\x50\x61\xC7\xE0\xF3\x91\x3F\xF0\x6E\x69\x8F\xF6\xE7\x13\x53\xE0\x4E\xFC\x14\xFE\x69\x9D\xF6\xBF\xFE\xEB\xD1\x44\x7E\xF8\xD5\x9B\x7F\xE8\xFE\x6C\x8F\xF1\xB8\x0A\xC7\x4C\x3F\x7C\x33\xF2\x9A\xBF\x65\xC5\x1D\xA3\xFB\x70\x04\x48\xBD\x6F\x3C\x96\xFA\x67\x06\xEE\x10\x51\xB9\xC0\xFB\x91\x41\xD5\xFF\x41\x6E\xDF\x12\xA7\x84\xA0\x23\x1E\xB2\x07\x19\xB3\xF0\x6D\x67\x63\xD7\xE1\x98\x18\xA9\x3D\x6A\x70\x39\x6B\x0E\xEB\xC3\x8C\x24\x21\xC2\xBA\x19\x66\x5A\x2C\x9F\x8B\x40\x18\xA4\x62\x5A\x90\x4A\xA1\x4B\xC2\xB7\x1C\x66\x24\x72\x0B\xC2\xAC\x7D\xF9\x45\xCC\xDA\xF1\x15\xD1\xB2\x41\x49\x09\x0E\x66\x5A\xA0\x4E\x05\x42\x76\x94\xD3\x87\x27\xAB\xA0\x49\x02\xB8\x00\x9F\xB7\x7E\x36\x8C\xE9\xEB\xFA\xC8\x1F\x0F\x7E\xE1\xB4\xBF\xEB\x91\x5D\x29\x06\xDE\x4B\xCA\x72\xBC\xB8\x08\x17\xE1\xFB\xF6\x2F\x1C\xE1\x8C\xAA\x61\x4A\x36\xDC\x11\xDD\x0F\x31\x66\xF1\x07\xAD\x38\x14\xD6\x23\x28\xE2\x58\x2B\x51\x85\x24\x6E\x9F\xFE\x37\x99\x7B\xB8\x27\xFA\xAD\x72\xD8\x2A\x49\x6B\x25\x62\x23\x08\xBC\x10\xA0\x92\x3D\xE4\x0A\x51\x58\x71\xFA\x30\xEA\xAA\x65\x10\xD2\x50\xC2\xD9\xB0\xCC\x03\x09\xBA\x74\x95\xCB\xAF\xAC\x2C\x34\x97\x55\xE5\x2C\xA8\xF9\xB7\xF9\x76\x1C\x3A\x14\x31\x5A\x32\x95\x45\x7C\x0C\x42\x63\x85\xD2\xFE\x04\xC3\xD4\x82\x72\x62\x88\x8E\x00\xC6\xD4\x92\xA6\x67\xB5\x02\xDE\xA2\x94\xB2\xA6\x42\xA3\x28\x84\xF7\xD2\xE5\xF3\x2D\xD1\x60\x15\xB3\x7C\x93\xFF\x4F\x89\xB4\x65\x3E\x77\x85\x2B\x07\x6F\x07\x97\xBB\xEA\x10\x1B\xE9\x29\x26\x7A\x49\xF3\xA8\xA4\x79\x54\xD2\x1E\xCC\x9C\x20\x62\x85\x07\x83\xBD\x54\x26\x73\xAA\x8C\x26\x53\xE3\x16\xA1\x54\x77\x24\x09\x80\x68\x30\xDC\x9E\x0B\xC4\x27\xC5\x2C\xA1\x05\xF7\xDE\x55\xE5\x16\x60\xFB\x69\x5C\xE9\xD5\x81\x83\x5F\xBC\xFB\xAA\x90\xED\x85\xC5\x6E\x71\x41\x19\xAF\x8F\xDE\x16\x56\x02\xDB\xFC\x63\x1D\x27\xE0\x1D\x0B\x45\x96\xA4\x21\x2A\x46\x16\x12\x11\x6D\xA7\x7B\x75\xB1\x65\x6C\x72\xE9\x9E\xD0\x27\x7B\xEA\x66\x41\xED\x9B\x0C\x1C\x3B\xCF\x1D\x49\x20\x23\xED\x24\xB4\x33\x58\x75\x08\x99\x23\xB7\xAA\xB4\x93\x3A\x09\x4E\xC9\x43\x3B\x83\x95\x33\xB6\x33\xAC\xED\x6A\xD2\xCE\xAC\xF9\x83\x5A\x1F\xD3\x09\x5D\x8D\x41\xE5\xDD\x20\x81\xEC\xDC\xB5\x5A\xA7\x9A\x9F\x5E\xE8\xF2\x58\x76\x7E\xE3\xC2\xC4\xC7\x66\xF7\x15\x45\x1E\xA4\xBF\xA2\xF8\x8B\xF1\x3F\xAF\xF0\xD7\xE5\xDD\xDE\x3A\xED\xFF\x8A\xC2\x5F\x57\x77\x7B\xC4\xFB\x4A\xD8\xF8\x31\x08\xBA\xBC\x1E\xAE\xFB\xE3\xA7\x5D\xEE\x3F\x75\x3C\x80\xE7\x2A\xAC\xCC\x5F\x51\xF8\x4B\x9E\xFF\x25\x85\xBF\x66\xCF\xDB\x13\xCF\xFF\x38\x9F\xB7\x4C\xA8\xEC\x22\xC8\x13\x27\x89\x75\x25\xE2\x76\x11\x06\x16\x15\xB2\xCB\x7D\xB5\x8B\x94\xB6\x44\x27\x90\x53\x94\xAD\x2B\xF6\x23\xC4\x19\xA2\xE0\x2C\x9C\xBE\x8F\x2D\x19\x37\x73\x99\x69\xA6\x09\xD2\x60\x73\xF1\xD9\xE6\xE2\xE7\x85\x3F\x16\x79\xAE\xBA\x1E\xC7\x3C\x3B\x7D\xED\x8F\x9F\x06\xB5\xF2\x08\x0E\x82\x73\x89\x9C\xCF\x54\x00\xF4\x14\xD0\x58\x1C\x0A\x08\xAB\x72\x0F\x90\xE1\x4C\x0E\x6D\x71\xD7\x78\xD0\x9D\x13\x06\x94\xC4\x60\xB5\x33\x57\x61\x0E\x07\xF5\x92\x84\x4C\xCA\x55\x17\x4D\x8B\x4B\x2E\xDF\x05\x63\xD8\x18\x2D\x72\x3C\x70\x1E\x5A\x39\xFD\xB6\x63\x5C\xBA\xF1\x5F\xBB\xF5\x33\x18\xFD\xB1\xB3\x25\xC1\x7F\xEC\x94\x1C\xB6\xE1\x4E\x84\xFB\xBA\x2A\x9D\xE2\xCC\xA3\x9B\xFA\x05\x31\xD4\xDD\xE5\xD4\x2F\xEC\x15\xF3\xDB\xDD\x2B\x1B\xBB\xE3\xCE\x7A\x21\x39\x7C\x3B\x02\xCD\xB0\x1B\xCA\x4B\xA8\xC4\xD7\x25\x7A\xEC\x03\xC3\x33\x88\xEE\xF2\xD2\x4C\xFB\xE0\x77\xA7\x07\x70\xDE\x81\xC6\xEF\x9C\x6C\x3C\x6D\x97\xD0\x52\x57\x92\x73\x2E\x2C\x0B\x87\xAC\x25\xE3\x06\x24\xEC\x66\xED\xD7\xB0\xDF\x1F\x2D\x27\x4E\x20\x67\x5C\xB9\x67\xBA\xC7\x18\x0D\x1A\x6A\xA4\x41\xE4\x8A\xF0\x54\xE9\xB3\xC7\x96\x59\xDC\xB5\xCA\x14\x49\x42\x54\xA2\x55\xED\xF2\x55\xC9\x0C\xC3\x55\x11\x7E\x04\xE7\xFC\xAA\x70\x35\xC1\xC0\x8A\x55\x09\x5B\x17\xA5\x4F\x1C\x92\xB9\x2B\x10\xDA\x11\xA1\x5B\xCC\xC7\x1F\x76\xDF\xE5\xF4\xC7\x6F\xDE\x6F\x3A\x57\xC2\x67\x22\xFD\x02\x5B\x28\x1D\x04\xB6\x04\x59\xCC\xC5\x96\x93\x30\x24\x7A\xBD\xD8\x65\xA1\x9D\x3B\x61\x71\xFD\x1E\x39\xD4\x02\xA3\x89\xA1\x0B\x2F\xDB\x17\x9D\xC9\xF4\x69\x7C\xBB\xF7\xBD\x98\x98\x7F\x6C\x0C\x6D\x99\x85\x02\xC8\xC8\x9E\x12\xDA\x62\xD6\x42\x5B\x4C\x0A\x6D\x09\xAA\x3B\xC3\xED\xFE\x93\xA4\x50\xC2\x91\x88\xFD\xE6\xD2\x48\xCE\xEE\xD4\x68\xAD\x5E\x66\x24\x8E\x1A\x23\x71\x14\x23\x71\xCC\x7E\xC4\x84\xD5\x8F\x82\x6B\x87\x31\xEC\xE6\xA0\xF9\xB3\x39\xC8\x15\x32\xF8\x2D\xB1\x33\xC8\xEA\x80\xCF\xFF\x32\x7D\xFA\x25\x35\x59\xC6\x6F\xDD\xBA\xF5\x07\xC2\x7A\xAF\x0F\x9F\x3D\x92\xDD\x14\x3B\x51\x58\xF8\xFF\xAF\xF4\xC8\xAB\x58\x64\x54\x4A\x81\x94\x3D\x04\x0F\xFF\x7C\x7C\x18\x87\x8E\xB1\x5D\x8C\x36\x61\x40\x3E\x36\xC9\xDC\xE9\x30\xB8\x40\xCF\x36\x11\x31\x2A\x98\xAC\xAE\x92\xC5\xA9\x76\xFA\xEA\x2E\x74\xAE\xDA\xE9\xB4\x38\x55\x3C\x7A\x30\xA1\xFF\x83\x8C\xFA\x5B\x68\x14\xF2\x9E\xBB\x7E\xF1\xB0\xFB\xC0\x4A\x20\xA5\xC0\xC3\x41\x09\xAE\xB0\x12\x00\x7E\x8C\x79\xF4\x6D\xF6\x90\x83\x0C\x21\xA3\xA4\x75\x95\xAB\xE2\x5D\xE3\xA0\xF1\x3B\xDE\xD8\xB8\xE6\xE5\xA0\xAE\xBC\x0C\x60\x63\x4C\xCC\x92\x13\xB3\x3E\x39\x31\x33\x57\xCA\xC4\x2C\xE3\xC4\x74\x55\xD8\x15\x5B\x59\x31\xFA\x0C\x6B\x86\x6B\xB1\x9D\xA5\x98\x2F\xD4\xD6\x90\x29\x96\xB4\xC5\xA5\x4C\xC7\x4A\xC6\x57\x09\xC4\xF1\x52\xBB\x6A\x55\xB6\x59\x13\x3B\xCB\xB5\x8F\x2D\x0D\x91\xBF\x4B\x64\xD0\xF4\x75\x98\x8E\x25\x90\xAB\x57\xA5\xAB\x49\xCE\xC1\x6E\x99\xCE\xB8\x9A\x30\x7A\x75\x44\x28\x5B\x3C\x7C\xEB\xD6\xAD\x5B\xDB\xEF\x77\x85\xCC\xB9\x7A\x3E\xE7\xAA\x4B\x69\x39\x4A\xE4\x1F\x98\x73\xB5\x44\x29\x4D\xE7\x5B\x3C\x1D\x0F\x62\xEB\xDA\x43\x30\x03\x57\x8D\xC4\xEF\x62\x06\xFC\x58\x6B\x96\xA3\x4F\xBD\x4B\x76\x9D\x47\xAA\xA2\x17\x93\x2D\x7A\xA8\x67\x1E\xAC\x18\x09\x4D\x50\x29\xA6\xD4\xD8\x11\x89\x4D\x93\xDC\x7D\x42\x52\x6C\x19\x7D\xA1\x84\xA4\x38\x0E\x02\xD8\xEB\x22\x8E\xC5\xBE\x04\x3D\xE0\x70\xD5\x3E\xB2\x34\x2E\x5B\x99\x98\x08\x11\x7D\x40\x93\xBB\xE1\x3D\x2C\x25\x48\x93\xF1\x99\x3B\xA0\xB8\x36\x09\x6D\xD1\xF2\xE7\x0A\xB1\xD1\x2E\x3F\x00\xBC\x7C\xDE\x9A\x06\x21\x57\xB9\x84\x5C\xC1\xE2\xC3\xDE\x80\x69\x80\x5F\xF1\x2D\xC6\x87\xE4\x14\x4D\x42\x5F\x63\x6F\xCE\xF8\x56\x1C\x0F\xCA\xA2\x2D\x6E\xC5\x0A\xCB\x66\x19\x96\x4D\x1E\x47\x55\x20\xD5\x15\x4F\x81\x16\x3F\x52\xED\xB3\x67\x7A\x64\x8A\x9B\x39\x02\x1E\x18\x36\x0F\xFB\xCC\x9B\x67\xFA\xC6\x35\xCE\x24\x04\xBC\x6C\x8A\x80\x67\xE8\x76\xA2\xEF\x43\x0A\xA8\xC8\x52\x9C\x7C\x49\x19\x31\x80\xFB\xC5\xBC\x4E\x24\x33\x0E\xB2\xBA\xC0\xA1\x36\xF2\x2B\x92\x2F\xA9\x4E\xDE\x0A\xCD\x23\x50\xCD\x80\x20\x2D\x61\xE1\x53\x4F\x12\x7A\x7C\xDA\xDD\xD9\xBC\xBB\xC3\x8C\x47\xB7\xE6\xEC\xAE\x20\x2F\xE1\x9B\x84\xA8\xE2\xAE\x71\xC6\x67\x0C\x60\xCF\x04\x69\x38\x0C\x24\x95\x00\x2D\x4C\xA4\x18\x3A\x5E\xE4\xBA\x93\x45\xB2\xC6\xAA\x97\xCE\x2F\x3F\x8E\xBC\xCE\xD7\x6F\x7D\xAA\x3A\xD1\xFF\x76\xDA\xFF\x55\xE8\x7F\x33\x1E\x52\x98\xC7\x25\x1C\x3F\x9F\xF4\x7F\xED\xEA\x74\x52\xB1\xD6\xFF\xF9\xD8\xFF\xF9\xC8\x7E\x9C\xAF\xF5\xBF\x11\x66\xE8\xF5\x6A\x65\x44\xDD\x5A\xE5\xC2\x55\x0B\xD4\xBB\x34\x04\xD5\x64\x08\xF2\x8D\x43\x90\xC5\x21\x08\xAB\x90\x4D\x65\xB3\xC5\x36\xB5\x38\xA8\xE8\x89\x07\xC8\xC4\x66\x79\xED\xB2\x8D\x6D\xCA\x46\x3A\xF0\x2C\x4C\xDF\x3C\x1D\x0D\xCE\x5F\x90\x09\xA5\xB7\xCB\x07\x09\xA6\x8F\x6F\x5C\x13\x0F\xE5\xDB\xA1\x6F\xA1\x0F\x4B\x86\x04\x60\xD8\x5A\x71\x1E\xAB\xB0\x4A\x15\xE2\x37\xE0\xC8\x34\xFB\x48\x23\xEC\x06\xD0\x1C\xD7\x19\x50\xD9\xD1\x55\x84\x3E\xCD\x60\xC1\x40\xA3\x86\x2D\x0B\x28\x46\x50\x3A\xAF\x2A\xB7\x4C\x51\xDB\x40\x9A\x84\x06\x95\x45\x0D\x2A\x23\x58\x48\x26\x4B\x76\x15\x96\xEC\x49\xF0\x7B\xD4\xA0\xC2\x2D\x80\x95\xCB\x64\xC9\xB6\xB3\x25\x7B\x95\xBB\xC5\x3D\x20\x05\xCE\xE9\x02\x4C\xDA\xD2\xD6\xFD\x88\xDD\x16\x2D\xA9\x95\xE8\x52\xEC\xBC\x6D\xCA\xA8\x38\xA1\x25\xCD\x57\x6C\x4D\x6C\x78\x84\xBE\x09\x33\x81\x1E\xFA\x60\x88\x34\x87\x3E\x7B\x06\x68\x84\x2B\x13\x9A\x51\x30\x73\x4E\x4D\x18\x9F\x94\xBF\x71\xE3\x35\xFA\x1C\x0E\xE9\x03\xA6\x69\xF9\x34\x34\x83\x23\x7A\xFC\x68\x2D\xA6\x9F\xC6\x20\xBA\x91\x9C\x34\xE1\xD9\xFC\x59\xA3\x8B\x60\xE1\xEA\xB4\xDA\x07\x71\xF6\xDD\x20\x67\xFD\xF0\xF8\xB4\x74\xFC\x58\x06\xB7\x10\x7F\xA2\xC3\xA9\xE0\xA6\xE5\x3D\x94\xC6\xB3\xFF\x30\xA6\x20\x25\x02\xEC\xC6\x89\xE5\xDA\x9C\xB2\x7E\x58\xAE\x1F\x76\x54\x06\xC7\xF5\x63\x16\x42\x0B\x6D\x47\x63\x7D\x28\xF6\xA3\x7B\xCD\x4A\xF8\x3C\xC6\x60\x87\x41\x3C\x9A\x3C\xCB\xDA\x99\x47\x97\xCA\x7F\xF1\x4B\xEB\x10\x5B\x15\xE3\x02\x70\x28\x11\x3A\x54\xFA\xEE\x12\x1A\xDB\xBC\x49\x39\x15\xFD\x95\xF1\xB4\xE8\xDF\x4E\x09\xD6\xCD\x41\xD4\xED\xEE\xC6\x08\xDF\xDD\x38\xD3\x58\xE5\x4C\xF3\xA3\x46\x67\xD1\xA1\xFA\x69\xB5\xBE\xF3\x02\xE0\x82\x5E\x95\xB7\x27\xB7\xEA\x5B\xA7\x6E\xD5\xB7\x04\x3D\xF0\xE6\x1F\xBA\x68\x2E\x3B\xED\x3F\xF4\x65\xB8\x91\xF6\xA0\x1D\xEE\x45\xC7\xEA\x9F\x7C\x11\x91\x01\x97\x62\xBE\xF7\x3B\xA0\x3C\x30\x48\x89\xC7\xD4\x06\x6E\xDB\xF8\xA6\xE4\xB6\xF5\xED\xF4\x4D\x36\xBE\xC9\x39\xED\x3F\xC1\x37\xC5\x04\x30\x79\x49\x98\xCC\x2C\x57\xC2\x6E\xF9\xC2\xF3\xC8\xDB\x31\x24\xB0\x64\x26\xBB\xD3\xDD\xF7\xBE\x18\x39\xF4\xF7\x06\xF9\x42\x4A\x77\x71\xF5\x9A\xE6\xE7\x16\xBA\x9C\x1C\xBA\xDB\x78\x16\x81\x54\xFA\x18\xDD\x97\x3D\x14\x8F\x76\x0A\x26\x20\x97\x18\xD3\xBE\x1A\xFA\xDA\xBF\xA2\xFF\x48\xBF\x48\x1C\x25\x6E\xE1\x5F\xD1\x4F\x1E\xFA\x73\x4F\x0E\x70\x2A\x10\xA6\x38\x85\xA3\x9D\xEB\xC3\xF3\xAB\x52\xBC\x75\x14\x0D\x50\x6B\x97\x17\xCD\xB9\x28\xC4\xB5\x2B\x0E\xFB\x22\xAC\x9E\xAF\xE8\x27\xFD\x31\xB3\x40\x5D\xE5\xF2\xE1\xD0\xEB\xC1\x7F\x06\xFE\xBE\x9A\x07\x93\x49\xEF\xC4\x99\xD5\xF3\xC0\x38\x05\xDC\x1B\xCC\xB3\x9C\xF6\xA1\x1C\x40\x79\x22\xF4\xC8\x99\x6E\x58\x30\xE9\x1A\x50\xF4\xD3\xF7\xF9\x86\xB7\xC6\xE9\x88\xA0\xAA\x45\xF7\xD2\x8B\xD2\x12\xA8\x7C\xE7\x06\xB6\xA1\x5D\x31\x2C\x95\xA9\x27\x55\x98\x4C\xC4\xE3\x0C\x9D\x93\xD8\x56\x0B\x57\xA6\xCE\x21\xA6\xAD\xA2\x75\x8B\x63\xA4\xD2\x1F\x03\x43\x9F\x01\xB3\xEC\x2D\x80\xF6\x5E\x34\xE7\x18\xFE\x17\x4C\x86\xF0\xE6\x01\x43\x80\xB2\xF3\x04\x74\xEF\xF2\x54\x76\x0F\x63\xB5\x10\x4B\x51\x94\xC8\x12\x8B\x51\x9A\x23\xAE\x67\x76\x81\xC3\x6E\x28\x46\x8E\x7E\x9B\x3A\x0F\x6A\xB7\x72\x8F\x71\xB6\xE1\x6D\x92\x34\x4E\x55\xD1\x32\xB1\xB7\x1C\xEF\xB2\x7E\x7B\x90\x5B\xAB\x33\xDF\x8D\x5B\x7B\x84\x6D\xDA\x0B\x6A\x7B\xA9\xE3\x96\x13\xDB\xEA\x77\xA2\x0E\x97\xDF\xAB\x8B\xDE\x6C\x19\xA3\x40\xE0\x55\xFA\x2E\x32\x95\x56\x93\x20\xA7\x8B\x46\x4D\xA8\x6E\xD3\x43\x88\x4D\xC5\x6A\x55\x0B\x99\x04\x9C\xC6\x85\xB8\x7A\x1E\x13\xFD\x22\xEE\xF3\xC8\x6B\x4F\x2E\x8F\x55\x05\x6A\xA4\x60\xA9\x0C\xDE\x5C\xEF\x73\x11\xDD\xE4\x12\xA9\x70\x7C\x1A\xDA\xB7\xE3\x78\x91\x0D\xEC\x46\x30\xB8\xC8\x50\x24\x2C\xF8\xB8\x95\x41\x62\x08\x77\xA0\x04\x82\x67\x09\x2F\x6C\xC6\x0E\x2B\xF7\x68\x50\xEC\xB8\xD8\xC5\xED\x99\xEF\x91\x2E\x46\xFB\xE8\xCE\x0E\x77\x88\x43\x27\x05\xB6\x8E\x33\xA8\x9F\x4E\x17\xCA\xDE\x06\xD9\xCD\x29\x2E\x93\x49\x53\xDD\xC1\xA4\xB9\xB4\x4C\xDC\xF9\x33\x89\xCB\x21\x71\x45\x94\x38\x8A\xB7\x48\x5C\x8E\xE5\x00\xE9\xF9\xDC\x5C\x8A\x14\x96\x9C\x22\x79\x3B\x5C\x59\x15\x0C\x04\xD6\x09\x83\x1D\xA1\xB8\xB1\x2D\x05\xD7\x99\x92\x87\xBF\x63\x6B\xF2\x5D\x54\x90\xB5\xE9\xF3\x53\x26\x23\x41\x22\x39\x27\x2B\xE0\xC4\x93\x34\xFE\x60\x44\x67\xE7\x44\x39\xA5\x1D\xB7\x99\x95\xD5\xC9\x59\xC9\x74\xB3\x31\x5A\xC1\x34\x5F\xD0\xBA\x38\x76\xCA\x7F\x46\x96\xEE\xC9\x3A\xAA\x67\xEB\xA8\x61\xF0\x56\xC6\x75\xD4\xDE\xB6\x73\xC3\x1D\xC2\xE2\x3F\x59\x47\x47\x54\xDB\x6A\x65\xB8\x8E\x5A\x39\x48\x3F\x37\x2A\x03\xE6\xB0\x37\xB3\x7E\x34\xBB\x41\x21\x98\x8A\x44\xFE\x06\x22\x01\x25\x4D\x3B\x5A\x0A\x61\xF1\xEC\x3E\xC2\x8D\x04\xE7\x84\xF6\xD8\x6B\x66\x8F\xCC\x4D\xD6\xB0\x23\x1F\x0F\x5B\x77\x95\x65\x59\x2A\x95\x65\x99\x35\xA5\xFC\xD1\xA5\x1D\x43\x5C\x42\xF5\xD2\xE9\x0D\x4F\x97\x2F\x21\x7C\xA2\x92\x73\x3E\x85\xB3\x29\x1D\x06\x70\xBB\x91\xC8\x37\xBE\x32\x83\x3D\xD2\x4B\xEA\x95\x4E\x60\x18\x36\xC6\xC7\x59\x3C\xC7\xF3\xC5\xC7\x57\xBA\x2D\x26\x49\xC5\x12\x3D\x81\xF0\x7E\xAF\x0E\x44\xA1\x3B\x38\xDA\xBE\xB3\xE8\x9B\x0B\x4A\x7B\x75\x70\x87\x37\xF7\x68\x80\xE6\x01\x9A\x0E\xD5\x64\xEF\x00\x26\x5B\xF9\xFA\xF1\xA5\xF6\x6F\x77\xEA\x59\xAF\x8F\xB6\x1B\x49\x17\x9B\xD7\xC9\xE9\x66\xA1\x9C\xE6\x61\xD8\xF4\xE3\x4F\xD6\x08\xF2\x47\x2C\x49\x5F\x2C\xD3\x85\x14\xB5\x8D\xA8\xEE\x12\x27\x41\xC4\x05\x58\xD5\xAE\xA0\x15\x39\xFE\x27\xE4\xE4\x88\x51\x22\x9B\xFA\x9E\x84\xC4\x06\xC1\xF8\x53\x2F\x32\x58\x37\xBC\x23\xEC\x2A\x38\xD8\x00\xC1\x72\xDD\x82\xAE\x16\x91\xB3\x95\x44\xF4\xF7\xE5\x95\xA5\x8A\xE1\xFD\x7D\x71\x69\x59\x84\xC9\x8E\xB8\x70\xB1\xF2\x61\x69\xD4\x02\x80\xA2\x0E\x96\x79\x2A\x82\x20\xE3\x4C\x12\x58\xAA\xB6\x68\x82\xE2\x54\x93\xA3\x6E\x54\xD0\x8B\xC7\xC5\x3B\x44\xEE\x9C\x22\xD5\x91\xCB\x4F\xD1\xFD\xC0\x8B\x24\xD7\x12\xCC\x72\xE9\x9C\xC7\x05\x09\x4E\x93\x7D\xDE\x62\xE7\x40\xF9\xC5\xA5\x65\x2E\x44\x78\x35\x0A\x0E\xC3\x63\xF6\x4F\xA9\xD2\xBC\xF2\x3A\xBD\x86\x6D\xE0\x9D\x11\x61\x25\xFA\x9E\x2A\x8C\x03\xE2\x7A\xBA\x5F\x06\xBA\xD5\x22\x45\x6F\xF5\xB5\x17\x7D\x26\x05\x46\x17\xAE\x72\xF5\x83\x3A\xFC\x53\x88\x2B\x5B\x7E\xA8\xC1\x44\x8A\x93\xDD\x46\xA2\x10\x8B\x98\x37\x10\xCF\x48\x0B\xEE\xFE\x32\x9E\xF5\x95\xA5\x6A\x73\xF4\x64\x21\xFE\x5B\x89\x9D\x4F\xB7\xEB\xA1\x67\x34\x12\x23\xD3\xD6\x45\xA8\x60\x14\xEC\x69\xC3\x67\x4E\x1B\xBE\x6C\xD6\xD9\xFF\x5F\xBA\xAD\x76\xE5\x89\x3E\x8B\xBD\x56\x79\xD9\xD0\x26\xBD\x56\xBB\x0A\x9D\x94\x7A\x4D\x7E\xA8\x2E\x2D\x35\xC1\x01\x8B\xE6\xB6\x3D\x76\x3C\xD0\x07\x3A\x1E\xBD\x3E\x3B\x6C\x19\xA5\xA1\x2E\x68\x18\x50\x9D\x5B\x6C\xE3\xDB\x9E\xE9\x2E\xF2\xDB\x9D\x76\xED\xD8\xB3\xB7\x17\x0C\x3C\xE0\xEA\x43\xB0\xFB\x20\x18\xFC\x57\xBF\x3C\x43\xCB\x2F\x18\x0C\x5E\xF9\x63\xC4\x2D\x61\xB2\x21\xA5\xA4\x88\x29\x25\xF0\x3E\x56\xAE\x40\xEB\x43\xC3\xF9\x18\x8E\xD9\xF5\xB7\x05\xD3\x16\xD6\x6F\x23\x12\x28\xBA\x31\x1B\x62\x52\xDA\x5D\x85\x89\x70\x00\x3A\x06\x36\x0C\x6B\x40\x4D\x3A\x79\xE8\xB5\x42\x65\x02\x07\x52\xB3\xD6\xEE\x1A\xEF\xA3\x50\x2D\x9A\xCF\x65\xE9\x0C\x20\x14\xFB\x47\x07\x9F\x3D\x32\x3B\x9E\xEE\x8D\x2C\xA2\x82\xD9\x10\x0C\xD0\x9D\x47\x96\xDA\x6B\x67\xAF\xFB\x0F\xBC\xF4\xAA\x3A\xBA\xC4\x5C\x13\x15\xB3\xEC\xD2\x4D\x6A\x72\x13\x20\xEC\xFC\xF2\x80\xA9\x82\x7A\xF6\x32\x27\xDB\x0D\x32\x73\x24\xD2\xF2\x76\x21\x94\x04\x56\xEA\x7E\x73\x8C\x2E\xB6\xEB\xF1\x7A\x4B\xB3\x71\x17\x98\xE5\x4C\x69\x3A\x3E\xC2\xF2\x8C\xA2\x44\x3D\x45\xAB\xB3\xC9\x43\x36\x3D\x64\xC9\x56\x97\xC2\x0A\xD0\x0C\xCB\x79\x28\x47\xED\x92\x95\xB3\xF9\x95\x74\x80\xD8\x98\xB3\x8B\xA8\x9C\x6C\x7F\xA9\xFC\x3F\xF9\x17\x73\xD4\x7B\x04\x0B\xAA\x37\xDA\xC7\x26\x0D\xDF\x33\x29\x14\x92\x18\x28\xA1\xAA\xCD\x97\xCB\x94\x6D\x06\xE7\x45\x2A\xCA\xA4\x9A\x19\xA9\x99\x96\xAC\xA8\x14\xDD\xE1\x0C\x22\x34\xBC\xEA\x7E\x1D\x53\x20\x9B\xC7\x6F\x72\x00\xB7\xAC\xD2\x26\xCB\x9B\x98\x2F\x60\x94\x3F\x5E\xE5\xD1\xCB\xE4\x75\xFC\xC1\x4C\xEF\x90\xE8\x84\x0C\x19\xC4\xEC\x37\x49\xD7\x0D\x85\x2E\x42\x7F\x7C\x68\xDA\x1F\x26\x06\x2F\x04\x2D\xBE\x3B\xA1\xD5\x58\x86\xB5\x6C\x9D\xB5\x79\x55\x85\xEA\x54\xD6\x56\xF8\x63\xAB\xF0\x96\xE3\x8B\xA6\x6B\xF3\xF8\x09\xAF\x9D\x23\x1F\x20\x46\x20\xDB\xF4\x6E\x52\x23\xE6\xC1\xA8\x39\xDE\x5F\x66\x70\x5A\x22\x65\x2B\xB6\x50\x0A\x8A\x59\xEF\x83\xC4\x1A\x6E\x6C\x07\xE7\x6F\x47\x73\x4F\xAA\x95\x9D\xFA\x6A\xD2\x32\xF6\x78\xB1\x39\xAD\xCC\x54\xBF\xCC\xE5\x28\x1C\x75\x93\xCE\xEE\x69\x0D\xB1\x91\x77\xD6\x42\x3D\x69\x61\xCC\x31\x9A\xCB\x4C\x9E\x64\x26\x8F\x24\x98\x7D\xBE\x59\x8C\xC1\x25\x58\x7A\xBB\x2A\xC2\x88\x67\x69\xA8\x90\xC9\xF7\xD7\xE7\x1D\xC3\xDA\x3F\xB6\x54\xA7\xDE\xC4\xA0\x8B\x22\x71\xB4\xC5\xED\x21\x47\x78\x24\x3C\x5A\x68\x34\x39\x7B\xE0\x97\x3D\xB5\xD1\x92\x34\xDF\xF5\x65\x44\x8C\x2D\xF1\x40\xD7\xDC\xF6\xF5\x1D\x3D\x08\x31\xA4\x34\xDD\x7B\x10\x43\x42\x0A\xCE\xA9\xE9\x83\xE3\x85\xD3\x0A\xCE\xA4\xE8\x43\x67\xC3\x7E\xF3\xE5\x9B\x89\xAA\x21\x9D\x4A\x7B\xE3\x15\x37\xA2\x6F\x61\x88\x28\x91\x3D\xE1\x34\x8E\x7B\x1B\x2C\x02\xF1\x31\x6D\xD6\x4A\xA3\x53\x2E\x6A\xED\x19\x01\x58\xE2\xE5\x9F\x2A\xB4\x3D\x3E\x19\xA9\x3D\xEA\xAB\x05\x4C\x87\x3C\xCF\x73\xA4\x63\x64\x3A\x97\x3F\x36\x2F\x64\xCB\x2A\x2F\x2D\xEB\xB0\xED\x1C\x2C\x8B\x53\x35\x93\x6A\x4D\x33\x29\x61\x38\x2F\x55\x5B\x37\xB2\x3E\x96\x6F\xB4\x01\xC0\xBD\x2D\x27\x27\xAE\x8C\x9B\x60\x68\x8E\xDE\xB0\x9B\x5B\xDF\x4C\xB7\x72\xA0\x70\x31\x4D\x49\x3F\xA8\x8B\xE4\xA8\x0C\x03\xF3\xF1\xD9\x88\xB3\x40\x9B\x94\x8A\x6A\x3B\x41\x98\x58\x2A\xF0\xD8\x85\x63\x84\xF4\x5A\x85\xAB\x54\xE1\x8A\x41\x44\x12\x6B\xE1\xEC\x29\x15\x4E\x46\x31\x97\xF4\x20\x0D\x52\xFC\x18\x19\xE7\x8A\x69\x53\x74\xE8\x06\xDA\xC3\xA1\x29\xE1\x1F\x94\x38\xAF\x67\xAA\x25\x9C\xCE\x72\x9E\x8F\x03\xDD\x50\xD2\x87\x5F\x64\x49\xEB\xB5\x0A\xE6\x4D\xF7\x23\x2F\xB2\x03\xD9\x11\xDB\x02\x13\xA4\x27\x3A\xD3\x1D\xEB\x92\x1C\xE6\x93\x2A\xF8\xAC\x41\xF5\x54\x97\x2C\xC5\xE5\x32\xEA\x92\xDA\x55\xAE\xA4\x06\xAE\x93\x06\x8E\x1F\x00\xF3\x0F\x95\x0A\xF4\x97\x7A\x5D\x97\x94\xF8\xD3\x28\x6B\x60\xF8\x44\xA3\x6A\x28\x8A\xE5\x46\x45\xB1\x84\x4B\x61\xAA\x83\xCF\x46\xAC\xF9\x47\x56\xE7\xC7\x63\x3E\xC3\x18\xD6\xA7\x83\x76\x1A\x34\x22\xD9\x49\xB3\xEE\xD7\x6E\xC6\xC0\xE2\xF8\xCB\x17\x62\xFF\xC5\x30\x78\xCD\xF8\x31\x83\xF8\xF7\x28\xBA\xAB\xDC\x6B\x21\xF8\x4E\x79\xB6\x82\x26\x92\x83\xB2\x54\x0B\x65\x29\xB2\x0B\x91\x0D\x39\x7F\x83\x30\xFE\xB8\xAC\xFB\xD2\x4D\x1E\xDE\xC4\x60\x9D\x9C\xC0\x03\x4E\x5F\x1B\xCF\x76\xBC\x71\x19\x87\x62\x9A\x69\x27\xB9\xA7\x6A\x6A\x81\x84\x6B\x8F\x8D\xFE\x9B\x59\x2B\xA6\xD5\x77\xA7\x57\x3F\x9A\x24\xCD\xAC\x82\xE5\x2C\x94\x2A\xD4\xEF\x6A\x10\x02\x09\x68\x4C\x8D\xFB\xE2\xCD\x98\xD4\xAB\x11\x3D\xFE\x18\xE3\xEF\x9E\x76\x66\xC0\xF9\x8A\x8A\x78\xC5\x63\xE2\xA7\xCF\x63\xE3\x56\x95\xAF\x44\xA4\x42\x35\x0C\xB3\x5D\x73\xA2\xBA\x58\xA2\xC3\x21\xFB\xBB\x1A\xDF\x34\xE6\xF5\x35\xAE\xC4\x39\x19\x37\xC0\x49\xE7\xE9\x54\x7E\xD8\x4F\xC7\x54\xCD\x49\x8E\xE2\x58\x85\x62\x52\x05\xC5\x2A\xA8\xB5\x2A\x20\xE0\xB5\x68\xDE\x2B\x48\xB9\x61\x2A\xEF\x84\x55\xEA\x7D\xBF\xB1\x21\x0B\x9E\xA1\xCE\x37\x6E\xBC\x46\xC8\xD9\xA5\x9E\x54\x4B\xA5\x19\x36\xAE\x25\xBE\x9D\xFD\x1C\x3B\x8C\xC7\x39\x72\x28\x11\x8F\x73\x70\x5E\xB3\xE9\xC2\x2F\x69\x6D\x25\x54\x74\x27\x3A\xD1\x48\x1B\xD3\x1B\xE4\x4F\x65\x3E\xBB\x82\x48\x01\xB3\xE6\xCC\x0A\x53\x8C\xE7\xA5\xF2\x50\xBC\xDF\x3C\x12\xBA\xD8\x7F\x76\xA4\x74\xCA\xC2\xBE\x83\x9C\x6E\xFF\x8A\x96\x0C\x2A\xD9\xAB\x09\xD9\x32\x2F\x5E\x13\x4E\xC8\x90\x0F\x6B\x92\xF9\xC2\x98\x68\x20\x90\xE9\x43\xFF\xFC\xE0\xCD\xB3\xFE\xF8\xE9\x30\x69\x82\x5D\x96\x74\xE4\xD9\x59\x60\x68\xBB\x42\x07\x64\xE1\x2F\xDD\x7C\xAE\xD6\xCD\x66\x84\x32\x93\x58\xC7\xBA\xDE\xF8\x57\xF4\x15\xBE\xCD\xFF\xBD\x17\x98\xE3\x1F\xD1\x24\x10\x45\x65\x62\xF3\x93\x4F\xB7\x47\x4F\xB4\x0C\x00\xC9\xA1\x7D\x39\xEA\xF5\x7D\xC1\x54\x2E\xE3\x8A\x43\x9C\x5D\x0F\xFE\x85\xF7\x7A\x73\xBD\x2F\xC8\xE1\x67\x9D\x39\x64\x2C\x1A\xD2\x6F\xBA\x1F\x62\x0A\xB5\xE2\x11\xAA\x43\x94\xE2\xD0\xE7\x3C\x10\x35\xAE\x18\xB3\xF8\x8A\xC3\xBE\xF4\xFA\xFF\x65\xEF\x3D\xE0\xA3\xA8\xD6\xBF\xF1\xEF\x33\x33\x1B\x92\x4D\x21\x24\x40\x12\x48\xCE\xEE\x22\x48\x80\x09\x6C\xC0\x46\xA4\x85\x5E\x15\xC5\x0A\x62\x58\x92\x25\x59\xD8\xEC\x2E\x9B\x0D\x45\x51\xA2\x58\xB0\x82\x7A\xBD\x5E\xAF\x05\xBC\xEA\x0E\x49\x2C\x60\x2F\x20\x58\xB1\x5C\x14\x94\x62\x37\xD8\x6B\x44\x2C\x94\x00\xF3\xFF\x9C\x99\x33\xC9\x64\x41\xBD\xF7\xFE\xDE\xF7\xFF\xBE\x9F\xCF\x7B\xCF\x87\x2F\x67\xE7\x39\xCF\x29\x73\xE6\xCC\xA9\xDF\x67\x52\x5B\x4A\xEE\x0E\xDD\xDB\x8C\x79\x24\xF3\x6F\xE4\x3A\x5A\xBB\x68\x87\xB9\x93\xD4\xA1\x74\xC9\xFC\xB9\x3D\x9C\xE2\x6F\xA6\x49\xF3\xCC\x7D\x70\xA7\xBB\x03\x7F\x99\x3B\x18\x9F\xE3\x5D\x3A\xB1\x7B\x8F\xD4\x52\x32\x2C\x10\xBB\x5B\xD6\x40\x0A\x2F\xC0\xC4\xEE\xA5\xD2\x82\x60\xA9\x14\xF3\x74\x70\x3B\x85\xF5\xB3\xD4\xFE\x83\x09\xAD\xBD\xEE\x12\xAB\x8F\x36\xD9\x4D\xD6\x7B\x01\xD3\xA2\x0F\xE6\xE2\xB6\xDD\x1F\x40\x16\xA7\x3C\xE6\x89\xB4\x68\x61\xC9\x86\xBD\x62\xB2\x39\xBB\x6F\xAB\x61\xC5\x68\x67\x1D\x5A\xCF\x65\x8D\xBF\x70\x2A\x95\x4A\xB5\xA7\x9B\x5F\xBD\x30\x3E\xB2\xE3\xA6\xD2\x3D\x2E\xEB\xF3\x5F\x86\x2D\x51\x69\xF2\xDC\xCC\x7B\x78\xE3\xE7\x2B\x89\x63\x86\xFE\xC3\xDA\xF6\xFE\xEF\x63\xFE\x3F\xF3\x98\x8D\x0F\xFF\x19\xE7\x87\xE2\x7B\x35\xFC\x8E\xA5\xEE\x3D\x5A\x0D\xCD\xCC\xBE\xC1\xF6\xC1\x05\x49\x30\x4B\xCC\x4D\x93\x1E\x1D\xF8\x7B\xCA\x2F\x15\x93\x8A\xC0\x3B\xE0\xB4\x76\x0F\x5B\x31\xCD\x76\xF8\x6C\x22\xF3\xDE\x2B\xC5\x91\x6C\x5B\x17\x63\x0C\x96\x06\xC9\x42\x36\x0D\xC6\xDC\x12\xBF\x4B\x29\xF3\xBE\x2B\xCD\x0F\xA5\x09\xA5\x34\xC9\x4E\x5A\x68\xB5\x0B\xA5\x3E\x52\xDA\xC9\xD6\xDF\xEB\xEB\x60\x7E\x6C\x3B\x59\x9C\x5B\xA5\x99\xE6\x62\x85\x52\x67\xA3\x4C\x16\x2F\xC9\x61\x16\x54\x11\x25\x37\x0F\xF2\x15\x93\x94\xC9\xA7\xAE\xFC\x01\x26\x74\x75\x99\xA9\xE2\xFB\x54\x6D\x7C\x07\xCB\xF2\x29\x75\xBF\x44\x29\x4B\xDB\x3A\x32\x71\x5F\x46\x6B\x95\x8C\x35\x89\xF5\x67\x15\xCD\x42\xF6\x70\x18\x7F\xF0\xDB\x64\xDE\xDB\x9B\xAC\x63\xAE\xF8\xA2\x96\x32\xCF\xEC\x50\x8D\x3F\x80\xD4\xAE\xC9\x1A\x77\x9C\xE4\x96\x4C\x1E\x9C\xC1\xD0\x73\xCC\x6D\xE5\x88\x19\x67\xBE\xC6\x03\x4C\xEA\x2E\xFE\x9C\xB6\x31\xB9\x48\xE2\xA9\xCB\xAD\xB3\x61\xD9\x58\x40\xB8\x93\x8C\x26\x9B\x22\x0C\x11\x94\x79\xE6\x9F\x33\x4C\x31\x97\x5D\x49\xC6\x7E\x1C\x6F\xB2\xCE\x52\x32\xFE\xE0\x69\x77\xB3\x5D\x4B\x3C\x7B\x77\x52\x5B\x93\x4D\x72\xA7\x78\x24\xE3\xFC\x22\x61\xF6\x28\x5A\x6E\x12\x7F\x98\x49\xA2\xC9\x26\x8B\x3F\x83\x61\x16\x3E\xC5\x6C\xB2\xC6\x88\x2D\x4E\x85\x6C\x4D\x56\x16\x9F\xED\x44\x62\xAB\x6D\x9B\x23\x5C\x2E\xB7\x7D\xC1\xC4\xEC\x43\x8C\x1A\x4E\xAC\x79\xAB\xFF\x30\xFE\x1A\x9A\xC1\x21\x57\xAC\x9A\x97\xAC\xCE\x42\xB6\x5E\x5C\x87\xF8\x1B\x51\xF3\x7A\x18\xF6\x7B\xB6\xEA\x4F\x6E\x3D\x95\x32\xAC\x0F\x8D\xCE\x22\x59\x1C\x09\xCE\xEB\xE1\x30\x6B\xDE\xD1\xBD\xCD\x7A\x9D\x8C\xBF\x31\x68\xFD\x09\x0B\xBE\x0E\x31\x6B\xDE\x51\x2A\xCF\x35\x2A\x5F\x36\x4C\x86\xDA\x65\xCB\xBB\x13\x47\xE9\x52\x8E\x89\xFC\x21\x1A\xD3\xD5\xF1\xDD\xAD\xDE\xC2\xB0\x03\xB0\x57\xBE\x6C\x92\x53\x4C\x6E\xBC\xA8\x2C\x31\x55\x6C\xDD\xC1\x3C\xFA\x01\xA4\x98\x0F\x40\xB6\x3D\x00\xFB\x10\x6E\x36\x36\x63\xB7\x66\xC9\xDC\xF6\xCF\x40\x31\xCE\xD3\x94\xB6\x67\xF0\xDF\xD6\xFF\xDF\xD6\xFF\xFF\x6E\xEB\x0F\x91\xBC\xD4\xFC\x73\x92\x56\x23\x97\xCC\xF6\x2D\xCD\x13\x7F\xA0\xB3\x87\xC3\x6D\x7E\xE6\x95\x2F\xB2\x24\xF3\xE3\x7C\x1E\x98\x47\xBE\x45\x80\x1B\x63\xD3\xC9\xB4\xF7\x91\x8C\x49\xBB\xC1\x63\x75\x1B\x1F\xDB\x5D\x6A\xB4\x6A\x7E\xF3\x63\xBB\x9B\xB6\xE9\x87\x88\x1C\x4B\xDD\xA4\x1A\xDF\xD0\xE7\x09\xC9\xE2\x4B\xE3\x92\xF1\xA7\x31\xC5\x56\x55\x69\x1D\xD5\xF4\x70\x94\x6E\x32\xCD\x43\x8C\x3F\x02\x3A\xBF\x87\x52\xFA\x89\xB1\xCD\xA2\x94\x6E\xA2\x09\xE9\x54\x2A\x19\xB6\x97\x49\xB1\xD2\x4D\x1D\xE7\xBB\x1D\xD1\x1E\x72\x69\x1D\x97\x1B\xDC\xCF\x22\x48\x46\x1A\x49\x47\xA5\xF1\xA3\xF1\xF7\x28\x0D\xA6\x63\x69\x52\xCC\x2D\x97\xA6\xC5\x4A\xEB\x9A\xE4\xF9\x51\x77\x92\x91\x44\xA6\x48\x42\x29\xDD\x67\x6E\xEA\x14\x41\x36\x92\x22\x33\xA9\x52\xC5\x1E\x95\xC7\x32\x8A\xA0\xEB\x98\xEF\x26\x9E\x82\xAE\xCB\x93\xD2\x29\xB5\xF4\xB0\x2E\x9B\x37\x27\x1A\x1D\xDC\x4A\xEA\x36\x82\xF5\xA1\x36\x2A\xD5\x61\x7E\xEC\x9C\x4A\x80\x52\x12\x2B\x6F\xBD\xA3\x10\x96\x0E\x9F\x5F\x5A\x47\x51\xF1\x91\xF0\xD2\xA4\x05\xA5\x9B\xF8\x15\x4A\x25\xAE\xC9\x53\x37\x3E\x40\xAB\xEB\x2F\x62\x52\x77\xF3\x93\xB3\x89\x31\x25\xE3\x2A\x6D\x41\x69\x93\x11\xD3\x4A\xA7\x35\xE1\x52\x59\x7C\xC4\xD3\x92\x18\x76\xB7\xA5\x59\x0B\x4A\xF7\x1C\x33\x42\x6B\x7A\x6D\x29\x28\xA9\x67\x11\x2D\x2D\x15\x5F\xF9\xB4\xCC\xE2\xC0\x1F\x2F\xF8\x03\x35\xF6\x05\x0C\x91\x61\xAC\xD8\xC4\x1F\x90\x9B\x4A\x65\xF3\x4F\x01\xCB\xC6\x97\x0C\x8C\x90\x3D\x3C\xC4\xA0\xE6\xA5\xBA\xA5\xD4\xD4\xA7\xD7\xCA\x32\x4A\xEB\x92\x53\xEF\x6B\x94\x6B\x62\xD1\x40\xA8\xB2\xC4\x1D\x08\x2D\xF0\x05\x03\x15\xEE\xDA\x50\xA0\x3C\x5C\xE1\x87\xAF\xB2\x32\xEA\xAF\xF4\xC5\xFC\x35\x3C\x2C\x86\x70\xC4\x57\x16\xAA\xAD\x9E\xED\x8F\x96\xC5\xC2\x65\xB3\xE7\xB4\xC5\x30\xA5\x86\x82\x2F\x1A\x88\x55\x95\x45\xC3\xB5\xA1\x8A\x3F\x08\x8F\x04\x6B\x6B\xFE\x20\xB8\x3A\x10\xFA\xE3\xF0\xDA\x60\x2C\x10\x09\x2E\xFE\x03\x95\x8A\xC0\x82\x40\x85\xFF\x98\x0A\xB3\x03\xB1\x9A\xB2\x9A\xAA\xC0\x9C\x18\xBC\xC5\x03\x07\x9D\x70\xE2\x49\x27\x9F\x32\x18\x6D\xAE\x4D\xE8\x9B\x5D\x5E\xE1\x9F\x83\x04\xD7\x16\x5E\x3A\x72\xD4\xE8\x31\x63\x13\xC3\x4D\xE9\xB8\xF1\x13\x26\x4E\x9A\x3C\xE5\xB4\xD3\xA7\x9E\x71\xE6\xB4\xB3\xCE\x3E\xE7\xDC\xF3\xCE\x9F\x6E\xA6\x57\x59\x15\x98\x3B\x2F\x58\x1D\x0A\x47\xE6\x47\x6B\x62\xB5\x0B\x16\x2E\x5A\x7C\x51\x5B\x9A\xFD\x06\xFC\xAF\x4D\xAF\xA8\x0C\xBD\x6A\x4A\xCC\x7F\xEE\x5E\x35\xA8\xF1\xC7\x0A\x11\xAA\x0D\x06\x11\x8B\xD6\xFA\x31\xC7\x17\xAC\xF1\x23\x10\x0C\xFA\x2B\x7D\x41\x77\x6D\xC8\x5F\x53\xEE\x8B\xF8\x2B\xDC\xE5\x55\xBE\xA8\xAF\x3C\xE6\x8F\xB6\x85\xC5\xE6\x14\x9D\xD2\x7A\x65\x36\x1A\xB7\xA9\x6E\xD3\xE6\x15\x3C\xB7\x26\x1C\x2A\x5B\x18\x0D\xC4\xFC\xD1\x32\x7F\x75\x20\x26\x5A\x4D\x89\xDB\x8A\x1C\xF5\x47\xA2\xE8\xE5\x1D\xB8\xC8\x50\xAF\xF6\x05\x83\xE1\xF2\xB6\xD0\xD9\xB5\x81\x60\x2C\x10\x72\x97\xFB\xCA\xAB\xFC\xEE\x40\xA8\xC2\xBF\x08\xD5\x11\xA3\x39\x05\xFE\x85\x56\xD8\xAB\xE2\x18\x3A\xE1\x05\xFE\xE8\x9C\x60\x78\xE1\xB1\xA2\xDB\x0B\xF5\x67\xA9\xBB\x17\xB5\x36\xA1\x12\x37\xFF\xDF\x5D\x1E\x0E\x2D\xF0\x47\x6B\x02\xE1\x90\x2D\xC4\x37\xFB\xF7\x02\x2A\x2A\xDC\xE1\x90\xBF\xBD\xC4\x76\x65\xB4\xFC\x04\x8D\xEA\xDA\x60\x5B\xBB\xF5\x85\xDA\xD4\xCB\x42\xC6\xEB\xD9\x2E\xB0\x2C\x14\x8E\xB5\x09\xC2\xB6\x16\xBF\xC8\x7E\x11\xF2\x57\xDA\xEE\xB5\xA6\x2C\xEA\x0B\x55\xFA\x4B\xDC\xE5\xE1\xEA\x88\x2F\x1A\xA8\x11\x65\x3E\x2A\xB4\xF5\x8E\x06\xE0\xD2\x62\x5C\xEA\xC5\xA5\x47\xBF\x2D\xBD\x66\xA3\x57\x98\x3F\x85\x5E\x8B\x60\xB6\x92\x9A\x12\x77\x2C\x5A\x1B\x2A\xF7\xC5\xFC\xEE\x39\xBE\x40\xD0\x5F\xD1\x16\x50\xE9\x8F\xB9\x6B\x03\xA1\x58\xFB\x80\xA3\x3B\x23\x00\xA7\x27\xB7\xE1\xCC\x64\xE0\x6C\xDB\xF5\x79\xC9\x30\x1B\xF5\xEC\x70\x38\xE8\xF7\x85\x20\x1A\x83\x99\x1C\x7C\xD1\xA8\x6F\x31\xC2\xB3\xE7\xFA\xCB\x63\xFC\x0D\x68\xF7\x7E\xA5\x20\x1D\x04\x37\xAE\x84\x1F\xAB\x51\xD7\xB5\xA9\x0B\x5F\x97\x13\x0A\xDD\x7D\xDC\x84\x01\xEE\x32\xB7\x17\xF0\xC2\x4B\xD6\xFB\x08\x60\xBA\xF8\xED\x16\xBE\x0F\xC0\x45\x00\x9A\x74\x5D\x87\xF0\x1F\x07\xC0\xF1\x95\x64\xEA\x70\x7F\x13\x80\x9D\x09\x71\xDF\x05\xF0\x71\x82\xAC\x09\xC0\x6F\x09\xE9\xED\x07\x70\x24\x41\xC6\x7F\x70\x2C\x16\xF1\x0C\x9F\x80\x01\x46\x61\x3B\xB5\x82\x17\xDE\xBA\x81\xC1\x22\x7E\x31\x99\xC8\x15\xD7\xDC\x1F\x48\xC0\xC9\x09\x71\x07\x13\x30\x3E\x41\x36\x91\x80\x85\x09\xB2\x45\x04\x03\xDC\x5D\x2D\xD2\x5C\x4C\xC0\xA5\x09\x7A\x4B\x09\x06\xB6\x1F\x31\x75\xB8\x5F\x47\x00\xC7\x8B\xE2\x3E\xB8\x7F\x19\x99\xE0\xEE\x6D\x21\xBF\x9C\x80\x2B\x13\xD2\xBB\x8A\x60\x80\xBB\x37\x85\xDE\xD5\x04\x2C\x4F\xD0\xBB\x86\x80\x6B\x85\xDE\x16\xA1\x77\x1D\x01\xD7\x27\xE8\xDD\x48\x30\x60\xB4\x39\xA1\xB7\x82\x4C\x70\xF7\xBA\x90\xAD\x24\x13\xDC\xBD\x21\x64\x37\x11\x70\x73\x42\x7A\xB7\x10\x0C\xD8\xF3\xFD\x0B\x99\xE0\xEE\x2D\x21\xBB\x95\x4C\xF8\x6C\x6D\xEA\xAF\x64\x82\xBB\x77\x84\xFC\x36\x32\xC1\xDD\x36\x21\xFB\x1B\x01\xB7\x27\xE4\xFB\x77\x82\x81\x7B\x85\x0E\xF7\xEF\x24\x13\xF6\xF4\xEE\x22\x13\xDC\xED\x10\xB2\xBB\xC9\xC4\xE5\x56\xBD\x03\x58\x45\x26\x60\x6B\xC3\xAB\x09\xB8\x3F\x21\xDF\x38\xC1\x00\x77\xEF\x0B\x3D\x8D\x80\x35\x09\x7A\xF5\x04\x03\x76\xBD\x07\x08\x78\x30\x41\xEF\x21\x82\x01\xBB\xDE\xC3\x04\xAC\x4D\xD0\x5B\x47\xC0\x23\x42\xEF\x3D\xA1\xF7\x28\x01\x4F\x24\xE8\x3D\x49\x30\xC0\xDD\x07\x42\xEF\x29\x02\x9E\x4E\xD0\x5B\x4F\xC0\x86\x04\xD9\x46\x82\x81\x53\x44\x3C\xEE\xBF\x44\x26\xB8\x93\xCC\xD7\x0F\x2F\x93\x09\xC3\x16\x4A\xE8\xBE\x42\x26\x8E\x88\x77\x83\x87\x6D\x26\x60\x73\x42\xDC\x57\xC9\x84\x3D\xEE\x6B\x64\xC2\x1E\xF7\x75\x02\x5E\x4F\x88\xFB\x06\x99\xB0\xC7\xFD\x27\x99\xB0\xC7\xDD\x42\xC0\x87\x09\xF7\xF6\x11\xC1\xC0\x3A\xA1\xC7\xFD\x8F\x09\xF8\x31\x41\xEF\x27\x82\x01\x7B\xBE\x7B\xC9\x84\x3D\xDF\x9F\xC9\x84\x3D\xDF\x5F\x08\xF8\x35\x21\xBD\xDF\x08\x06\xB8\x5B\x25\x74\xF7\x91\x09\xEE\x5E\x15\xB2\xFD\x04\xB8\xA4\xF6\x71\xDD\x12\x0C\x70\x77\xA9\xD0\xEB\x21\x01\x83\x12\xF4\x4A\x24\x18\xE0\xAE\x5F\x5F\xD3\x3F\x55\x02\x86\x24\xE8\x0D\x95\x60\x80\xBB\x99\x22\xBD\x61\x92\x09\xEE\x0A\x45\xDC\xE1\x12\x30\x42\x02\x86\x5B\xD7\x7D\xF9\xCA\x01\x18\x99\x90\xDE\x28\x09\x06\xB8\x1B\x2A\xD2\x1B\x2D\x99\xE0\x6E\x8C\xA8\xAB\x31\x92\x09\xEE\xC6\x09\xD9\x58\x09\x38\x3D\x21\xBD\xA9\x12\x0C\xB8\x44\xBE\xDC\x3F\x43\x32\x91\x2F\x64\xDC\x3F\x53\x32\xC1\x84\x8C\xFB\xD3\x24\x13\xFD\x45\x39\xB8\x7F\x96\x04\x70\x0C\x14\x32\xEE\x9F\x23\x01\xE7\xF2\x3A\x14\x32\xEE\x9F\x2F\x01\x1C\x27\x09\x19\xF7\x67\x48\x00\xC7\x89\x42\xC6\xFD\x0B\x24\x80\xE3\xF4\xFB\xCD\x7C\xB9\x3F\x4B\x32\x61\x4F\xCF\x27\x01\x1C\x93\x84\x1E\xF7\xCB\x25\x13\xC5\xD6\xF8\xA4\xEB\xBA\x5F\x02\x38\x0A\x85\x1E\xF7\xE7\x48\x26\x46\x0B\x19\xF7\xAB\x24\x13\x03\x44\x5C\xEE\x07\x24\x80\xA3\x48\xC8\xB8\x3F\x57\x02\xE6\x26\xC4\x9D\x27\x99\xD8\xD7\xC7\x94\x71\x3F\x28\x99\x28\x15\x7A\xDC\x0F\x4B\x26\xEC\xE9\xCD\x97\x00\x8E\xC3\x22\x2E\xF7\xA3\x92\x89\x7E\x42\x8F\xFB\xB5\x12\xC0\xD1\x57\xC8\xB8\x7F\x89\x04\x70\x7C\x25\xE2\x72\xBF\x4E\x32\x71\xBC\xD0\xE3\xFE\xE5\x12\xC0\x31\x4A\x94\x85\xFB\xCB\x24\x13\x76\xBD\xAB\x25\x80\xA3\xAF\xD0\xE3\xFE\x72\xC9\x84\x5D\xEF\x1A\x09\xE0\x78\x56\xC8\xB8\x7F\xAD\x04\x5C\x27\x01\xBD\x85\x8C\xFB\xD7\x4B\x00\xC7\xD3\x42\xC6\xFD\x9B\x25\x80\xA3\x97\x90\x71\xFF\x2E\x09\xE0\xE8\x22\xF2\xE5\xFE\xDD\x92\x89\x2C\x21\xE3\xFE\x18\xD9\xC4\x59\xA2\x7D\x73\x3F\x22\x03\x35\x72\xFB\x36\xBE\x40\x06\x16\x26\xC8\x2E\x96\x81\x4B\xE4\xF6\xE3\xD1\x52\xD9\x04\x77\xD6\x8C\xEE\x2A\xD9\x84\x71\xAF\x42\xB6\x5C\x06\xAE\x15\xB2\x5E\x42\x76\xBD\x6C\x82\xBB\x11\x42\x76\xA3\x0C\xAC\x10\xB2\xE1\x42\x76\x93\x0C\xDC\x23\x64\xD6\xDC\xEC\x5E\x19\x68\x4C\x90\x3D\x20\x9B\x78\x5F\xD4\x0B\xF7\x1F\x94\x81\x87\x65\xE0\x03\x21\xE3\xFE\x3A\x19\x78\x5E\x6E\x3F\x87\x7B\x41\x06\x38\x76\x0B\x19\xF7\x5F\x94\x81\x37\x12\xF4\xFE\x29\x03\x1C\x9B\x84\x8C\xFB\x5B\x64\xE0\x4D\x9E\xA6\x90\x71\xFF\x2D\x19\x78\x4B\x94\x2F\x59\x94\x6F\xAB\x6C\xE2\x05\xA1\xC7\xFD\x6D\x32\xC0\xB1\x59\xC8\xB8\xBF\x43\x06\x38\xB6\x09\x19\xF7\x77\xCA\x00\xC7\xEB\x42\xC6\xFD\x5D\x32\xC0\xB1\xDF\xEA\x9B\x75\x5D\x7F\x57\x06\x7E\x4C\x78\x6E\x7B\x64\x18\x68\x10\x7A\xDC\xFF\x49\x06\x38\xD6\x0A\x19\xF7\xF7\xCA\x00\x47\x07\x51\x5E\xEE\xFF\x2C\x9B\xB8\x5E\xE8\x71\xFF\x17\x19\xF8\x45\xDC\xDB\x4B\x42\xFE\xAB\x6C\x62\xB5\xB8\xE6\xFE\x3E\x5E\xB6\x84\xB2\x1C\x90\x61\x80\xBB\x03\x42\xF7\xA0\x0C\xB4\x24\xE8\x1D\x96\x01\x5D\xE8\x59\x63\x0A\x14\xA0\xA3\x62\xCA\xA6\x8A\x32\x66\x2A\xC0\x00\xA5\x7D\x3B\xF0\x2A\xC0\xE9\x4A\xFB\xE7\x36\x55\x01\xCA\x94\xF6\xF7\x3B\x4B\x01\x2E\x53\xDA\xE7\x7B\xAD\x02\x6C\x4C\x90\x6D\x52\x60\x80\xBB\x8E\x22\x8F\xE7\x15\xE0\xCD\x04\xBD\xB7\x14\x18\xF8\x49\xE4\xC1\xFD\xAD\xBC\x7C\x8E\xF6\x7A\xC5\x0E\xE0\x1C\x87\x28\xAB\x48\xCF\xE7\x00\xAE\x72\x00\x5B\x45\x5C\xEE\xAF\xCE\x04\x5E\xCE\x34\xC3\x67\xE5\x9B\xFE\xE6\x4C\x13\x76\xD9\x96\x4C\x13\x76\xD9\xD6\x4C\xE0\x60\x26\xB0\x29\x15\xAD\xEE\x70\x26\xA0\x27\xC8\x56\x67\x03\x3F\x66\x8B\x38\xB7\x99\xFE\x9E\x6C\xE0\xD7\xEC\xF6\x6D\x77\x7F\x36\x70\x38\xBB\x7D\x5B\xAB\xCB\x07\x38\x6E\xFE\xCA\x94\x71\xFF\xB2\x7C\x80\xE3\x16\x21\xE3\xFE\xE5\xF9\x00\xC7\x9D\x42\xC6\xFD\x65\xF9\xC0\x15\xF9\xC0\xDD\x42\xC6\xFD\x2B\xF3\x01\x8E\xBB\x84\x8C\xFB\x57\xE5\x03\x1C\xF7\x09\x19\xF7\xAF\xCE\x07\x38\x3E\x10\x32\xEE\x2F\xCF\x07\x38\x5E\xB8\xC6\x2C\x2F\xF7\x57\xE6\x03\xCF\x88\xFA\x18\xF1\x8B\xA9\xBB\x21\x1F\xD8\x98\x20\x5B\x5C\x60\x42\xB9\xD6\x94\x73\xFF\x92\x02\x13\x5F\x66\x98\x32\xEE\xDF\x58\x60\xE2\x14\xA1\x67\xF8\x0C\xB8\x95\xB5\x7F\xBE\x77\x30\x18\x78\x59\xD4\x15\xF7\xEF\x66\xC0\xDD\xCC\x8C\x57\xFA\xA9\x78\x47\x18\xA0\x27\xC4\x85\x0B\xE8\xE0\x6A\xAB\x77\xEE\x27\xBB\x80\x8E\x2E\xF1\x1C\x44\x9A\x99\x2E\xA0\x4B\x82\x5E\xAE\x0B\x28\x48\xD0\x73\xBB\x80\xDE\x09\x7A\x85\x2E\x60\x40\x82\x9E\xD7\x05\x9C\x9C\xA0\x77\x8A\x0B\x18\x9E\xA0\x37\xC2\x05\x8C\x49\xD0\x1B\xEF\x02\xA6\x24\xE8\x9D\xE1\x32\x61\xD7\x9B\xE6\x32\x61\x97\x9D\xED\x32\x61\x97\x9D\xEB\x32\x61\x97\x9D\xEF\x32\x61\xCF\x63\x86\xCB\x84\x5D\x36\xD3\x65\xC2\x2E\x2B\x73\x99\xB0\xCB\x66\xB9\x80\xCA\x84\x3C\xAA\x5C\x40\x38\x41\x2F\xE2\x02\xE6\xBB\x80\x89\x42\x8F\xFB\x51\x17\x50\xEB\x02\xCE\x11\x32\xEE\x2F\x70\x01\x0B\x5D\x40\x85\x90\x71\x7F\x91\x0B\x58\xEC\x02\xEA\x84\x8C\xFB\x17\xB9\x80\x8B\x5D\x40\x44\xC8\xB8\xBF\xC4\x05\x5C\xE2\x02\x2E\x15\x32\xEE\xD7\xB9\x80\xAB\x13\xCA\xB7\xDC\x05\xAC\x48\x28\xDF\x4A\x17\x70\x5B\x82\xDE\xDF\x5C\xC0\xAA\x04\xBD\xD5\x2E\x40\x4B\xD0\x5B\xE3\x02\x1E\x4E\xD0\x5B\xEB\x02\xD6\x25\xE8\x3D\xEA\x32\x91\x22\x64\xDC\x7F\xCA\x05\x3C\x9D\x10\xF7\x19\x17\xF0\xAC\x90\x3D\x21\x64\xEB\x5D\x26\xB8\xDB\x27\x64\xCF\xB9\x4C\x7C\xF0\x99\x78\x7F\x3F\xD3\xF5\x17\x5D\xC0\x8B\x09\x79\xBC\xEA\x02\xDE\x10\x71\xAD\xB1\xEB\x9F\x2E\x13\xF6\xF4\xB6\xBA\x80\x6D\x09\x65\x7E\xD7\x05\xBC\x97\x50\xBE\xF7\x79\x9E\x42\x76\xA7\x35\x36\xB8\x80\xDD\x09\x71\xBF\x70\x99\xB0\x8F\x83\x5F\xBB\x80\x6F\x12\xD2\xFB\xD6\x05\x7C\x27\x64\x2B\x85\xEC\x7B\x97\x09\xD8\xC6\xB7\x9F\x5D\x26\xEC\xF7\xB6\xDF\x05\x1C\x10\x7A\x75\xD6\x38\xE8\x02\x5A\x84\xEC\x72\x21\x3B\xE4\x32\x61\xBF\xDF\xE3\x3D\x26\xB8\xBB\x57\xF4\x25\x7D\x3D\x26\xB8\x2B\xFD\x44\xCC\x79\x3D\x26\x8C\x67\x23\x64\x03\x3D\x26\xB8\x13\xDD\x20\x4E\xF3\x98\xF8\x5C\xA4\xCF\xFD\x59\x1E\x20\x2C\xF4\xC4\xD0\x82\x88\x07\x58\xEA\x01\xF6\x08\x3D\xEE\x2F\xF3\x00\x57\x18\x7A\x6D\x7D\xD8\x13\x3D\x81\xB7\x7A\x9A\x71\xBA\x89\xB8\x5B\x7B\x02\xDF\xF4\x04\xBE\x14\x71\x0D\x5F\x05\xFA\xAB\x66\xB8\x35\x0E\x7A\x55\xE0\x42\xB5\xFD\x38\x38\x4B\x05\x7C\x6A\xFB\x3C\x66\xAB\x30\x60\xD4\xE7\x4E\x53\xB7\x5C\x35\x61\xE4\xFB\x93\x29\xAB\x50\x4D\x70\x97\x27\xF4\xFC\xAA\x89\x1D\x3B\xCC\x6B\xEE\xCF\x51\x01\x8E\x77\x85\x8C\xFB\x95\x2A\x10\x4C\xC8\xB7\x5A\x85\x01\xA3\x9E\x84\x6E\x48\x35\xC1\x9D\x2C\xF2\x08\xAB\x26\xB8\xDB\x2D\xF4\x22\xAA\x09\xEE\x3E\x15\xB2\xA8\x0A\xD4\x24\xE4\x51\xAB\x02\x0B\x12\x64\x97\xAA\xC0\x52\x11\xF7\x79\x11\xB7\x4E\x05\x3E\x4B\xD0\xFB\x4E\x05\x9A\x13\x64\x7B\x55\xE0\xE7\x04\x19\x8A\x80\x5E\x45\xC0\x6A\xF1\x0E\x72\xBF\x77\x11\xD0\x3B\x41\x56\x54\x04\x14\x25\xC8\x46\xC4\x81\xEA\x78\xFB\xF4\xEA\xE2\xC0\x1D\x09\xB2\x1E\x1A\x30\x40\x6B\x2F\x1B\xA8\x01\xE1\x04\xD9\x62\x0D\x58\x92\x20\xBB\x44\x83\x01\xE3\x1D\xA8\x35\xF3\xBE\x54\x03\xAE\x4E\xD0\xBB\x4E\x03\xAE\x4F\x90\xDD\xA0\xC1\x80\xF1\x1C\xA7\x8B\x7E\x52\x03\x6E\x49\xD0\xFB\x8B\x06\x03\xAD\x6D\x0F\xC0\x5F\x35\xA0\x3E\x41\xAF\x41\x83\x01\xEE\xD6\x8B\xF4\x1A\x35\x13\xDC\xAD\x13\xB2\x07\x34\x13\xDC\x3D\x2E\x64\x0F\x6A\x26\xB8\xDB\x28\x64\x0F\x69\x26\xEC\xE9\xAD\xD5\x4C\x70\xD7\x2C\x64\xEB\x34\x13\xDC\xED\x14\xB2\x47\x34\x13\xDC\x7D\x27\x64\x8F\x6A\x26\x8C\xE7\x23\xE6\xCC\x8F\x69\xC0\xC6\x84\xFB\x78\x41\x03\x5E\x4C\x90\xBD\xA4\xC1\x80\xF5\xAE\x71\xFF\x65\xCD\x04\x77\x1B\x44\x1E\xAF\x68\x26\xB8\x7B\x55\x3C\x8F\x69\x8D\x26\x66\x1D\x12\x63\xEA\x21\x5D\x8F\x34\x02\x1B\x1B\x01\x6F\x95\x98\x57\x54\xE9\xBA\x47\x07\x4A\xCC\x19\x7C\xEB\x1C\xBD\x54\x07\xA6\xEB\xED\xE7\xE8\x50\x08\xBD\x15\x73\xC3\xA9\x50\xE8\x15\x2A\x84\xD3\x15\xC2\xBB\x42\x8F\xFB\x6B\x15\xC2\x3B\x09\x7A\xEF\x2A\x84\x96\x04\xBD\xBA\x34\xC2\x23\x69\xA6\x9E\xB5\xBE\xDC\x94\x46\xD8\x9B\x46\xED\xD6\x6F\xAB\x73\x09\x1B\x73\xA9\x5D\xF9\x36\xE5\x12\x3E\xC9\xA5\x76\xE5\x1B\x11\x22\x94\x85\xDA\xEB\xCD\x0A\x11\x96\x86\xDA\xEB\xE1\x1B\x82\xE7\x1B\x53\xAF\x87\xD0\xEB\xF1\x0D\x61\xD4\x37\x84\x8F\x85\x1E\xF7\xC3\x11\x5F\xD9\x02\x5F\xB0\xD6\x5F\x66\x1E\xF9\xF8\xC5\x59\x4F\xEB\xF9\x9E\x11\x88\x36\xB5\x9A\x2A\x5F\x30\x18\x5E\x58\x56\x1E\x8E\x2C\x3E\xF6\x79\x9E\xFD\xE8\x2C\xBA\xB8\x2C\x10\x8A\xFD\xBE\x82\xAF\xA6\x6C\x4E\x30\xEC\x6B\xA7\x31\xE7\xCF\x14\x22\x51\x63\x19\x66\x8C\x93\x69\x02\xFC\xFA\x42\xCC\xC0\x4C\x14\xA1\x2F\xFA\xF7\x45\x21\x96\xA0\x0F\x7A\x02\x33\x2E\xBC\xA0\xFF\x4C\xCC\xB8\x10\x15\xFE\x60\xA0\x3A\x10\xF3\x47\xDD\x81\x1A\x77\x28\x1C\x73\xFB\xDC\x35\x81\x50\x65\xD0\x7E\x6A\x89\xF2\x70\x6D\xB0\xC2\x08\xAD\x0D\x45\xFD\xBE\x0A\x77\xB4\x36\xE4\x17\xF5\x37\x9C\x8F\x71\x7C\xCE\x07\xE0\x62\x1C\xED\x12\xC3\x2F\x01\x20\xBA\x4B\xD4\x86\xFC\x8B\x22\xFE\xF2\x98\xBF\xC2\xED\x0F\x55\xB8\xC3\x73\xDC\x81\x50\xA4\x36\x86\x56\x69\x79\x30\x5C\xE3\x77\x1B\x07\x6C\xF6\xF2\xCC\xC4\xD1\x09\xC4\xC2\xF3\xFC\xA1\x84\x14\xED\x97\x41\x7F\xA8\x32\x56\xC5\xF3\x08\x86\x6D\x69\x1D\x53\xA3\x2A\x60\xD3\xB0\x5F\xB8\x6B\xAA\x8C\xAA\x98\xED\x77\x57\x46\xFD\x3E\x2E\x89\x55\xF9\x42\xED\x93\x6C\xAB\xAD\x88\x2F\x6A\x15\x3F\xA1\x56\xF6\x88\x2D\x94\x9E\xA2\xF9\x9F\x6F\xFA\x23\x56\x98\xFE\xF2\x17\x4D\x7F\xEE\x7E\xC3\xAF\xBB\xA2\x7F\xA9\xD1\x0F\x64\x95\x1B\xFE\x15\xBB\x6E\x33\x7C\xFF\x96\x2D\xA5\x73\x42\x81\x7E\x98\x13\x0A\x60\x4E\x24\x1A\x08\xC5\xE6\x94\x18\x39\x07\xAA\x23\x41\x7F\xB5\x3F\x14\xF3\x57\x60\x8E\x71\xD8\x7C\x0C\x79\xA4\x36\x56\x7E\xB4\x18\x21\xF7\x30\xB7\xD7\x7D\xFC\xF1\xEE\x6A\xF7\xB0\xA1\xEE\x10\xAA\xF9\xB5\x29\x35\x7F\xF3\xB0\x50\xAB\xB0\xD8\xB8\x8C\x04\x6B\x6B\xEC\xFA\x42\x67\xA8\xBB\x1A\x35\x41\xBF\xA9\xDD\xAB\xA6\xA4\x57\x45\x89\xDB\x1F\x8D\x86\xA3\x25\x6E\xD4\x44\xCB\x07\x04\x03\xB3\xAB\x23\x15\xFE\xF2\x01\xB1\xC5\x11\xBF\xC1\x4D\xE8\x5F\x85\x9A\xDA\xD9\x65\x35\x81\x8B\xFC\x65\xB1\xC2\x3E\x6D\x87\xD3\x25\xEE\xF2\x2A\x7F\xF9\x3C\x77\xAC\xCA\xEF\x2E\x0F\x87\x62\xFE\x45\x46\x43\x71\x0F\x19\xEA\x1E\x8C\x72\x5F\x34\xBA\x78\x86\x77\xA6\x7B\xE8\x50\x33\x6F\x53\x50\x9C\x28\x18\x68\x0A\x10\xA8\x89\x84\x17\xFA\xA3\x03\x0B\x43\x7D\x60\x14\xF3\x84\x63\x89\x42\x3C\xF1\x41\x7D\xA7\x4C\x1D\x5D\x36\xA5\xF4\xBC\xB3\xCE\x2C\x3D\x6D\xDA\xD8\xD3\xCF\x9C\x52\x36\xF0\x34\xA1\x71\xCA\x1F\xA9\xD4\x9C\xE6\x3B\x0D\x13\x42\x73\x02\xA1\x40\x6C\x31\x2A\xFC\xE5\x45\xC3\xAC\x9A\x28\x8F\xB8\x87\xB8\x2B\xFC\xE5\xE6\x01\x6C\xBF\x6A\x7F\x35\xCA\x23\x45\xAD\x02\xF7\x10\x37\x4F\x70\xDA\xB4\x09\xD3\xC7\xF0\x64\x11\x5A\x18\x8E\x56\xD4\xF0\x2C\xA3\xFE\x9A\xDA\x60\xAC\x68\x98\xC1\x0A\x68\x9F\xA8\xA7\x3A\x52\x51\x16\xA8\x29\x0F\x87\x6A\x62\x65\x15\xBE\x98\xAF\xD0\x54\xEE\x63\x85\xD4\x54\xF9\xA2\xFE\x8A\xF6\x41\x46\xC1\x27\x9C\x56\x3A\x79\xF2\xE9\xA3\xF8\xAD\xB4\x4F\xDF\x8A\x18\xF1\x97\x07\x7C\xC1\x42\x9F\xA8\x19\x6F\x62\x80\x95\x1A\x1F\xCF\x45\x0B\x27\x1B\x86\x7C\x00\x98\x11\x02\xA1\x98\xBF\xD2\x1F\xE5\x29\xCD\xF6\xD5\xF8\x79\x62\x03\x51\x11\xA8\x0C\xC4\x6A\x8C\x7B\x88\x1A\xD2\x21\x43\xDD\x85\xC5\x67\x0F\x19\x52\x7C\x52\x1F\xDE\x4A\xAC\x1B\xAC\x89\x96\x1F\x15\x9C\xD0\xD8\xF8\x2F\x83\xBC\x62\x44\x68\x6D\x1E\x56\xE6\xC6\xB3\xF0\x17\xCE\xEE\x63\xB5\xC5\x85\xBE\x68\xC8\x38\x51\x6F\xDF\x1A\x8D\xFF\x03\xD5\xBE\x60\xFF\x72\x58\x42\x83\xE6\xE3\x8F\x86\x7C\x41\xB3\x05\xBB\x03\x21\x77\x19\x4F\x98\x97\xA9\x2C\x54\x11\x58\x50\x1D\xAE\x28\x71\x47\x82\x7E\x5E\xC6\xA8\x3F\x12\x8E\xC6\x7E\xA7\x3E\x92\x3F\x04\x6E\xFA\x9D\x7A\x32\xAB\xD2\xED\x19\xEA\xF6\xA1\xDA\xB7\x28\x12\xF5\x97\x5B\xB7\xC8\x0B\x6F\x5D\xA3\xD6\xA8\x15\xDE\x4A\xAD\x5F\x0B\x82\xFE\xD0\xBF\xFC\x8E\xF9\x2A\x2A\xFE\xC5\x77\xAC\xBA\x36\xF8\x2F\x6A\x06\x7D\xBC\x18\xC1\xD9\xBC\xAC\xC1\xD9\x46\x29\x83\x3E\xFE\x00\x78\x23\x9B\x54\x7A\x66\xE9\x59\xD3\xCE\x1E\x59\x5A\x36\xB2\x74\xDA\x98\x51\xA5\xD3\xC6\xB8\x97\x2C\x71\x2F\xE4\x37\x7A\xDA\xD9\x93\x27\x23\xCA\xF3\x30\x6F\xC8\x8C\x34\xA8\x6F\xE1\x31\xDE\xAA\x01\x03\xFB\xB4\x8F\xB7\x50\xB4\x0E\x9E\x69\xAD\xD5\x52\x16\x1E\xD5\x4E\x6A\x8F\x92\xD8\xDF\xF7\x9A\x40\x65\x88\x77\x0C\x45\xC5\x3C\x71\xEB\xAA\x18\x53\x8B\x79\x94\xEA\x70\x45\xA8\xD6\x68\x5A\xE2\xD7\x90\xA1\xEE\xA9\x83\x8E\xEE\x30\x8A\x4F\x32\xBB\x83\x63\x75\x06\xAD\xCA\xD1\xF0\xC2\x1A\x5B\xE6\xE5\xE1\x60\x4D\x9F\x7F\xF9\xA9\xFD\xEB\xCF\x82\xA7\xCB\xEF\xC1\x16\x63\xA0\xEA\x36\x33\x3F\xCA\x49\x7C\x7D\x04\xC0\x21\xD6\xD4\xA9\x00\xD2\xC5\x4C\x34\x1B\x40\x0E\x80\x02\x18\x5B\x60\xC6\x19\x01\x4F\xA2\x1F\x80\x01\x00\x4E\x04\x70\x2A\x80\xA1\x00\x46\x89\xF3\xB9\x09\x82\x1B\x30\x8D\x8F\x6C\xE2\xAC\x9E\x8F\x80\x95\x00\xE6\x01\xA8\x06\x30\x1F\xC0\x52\x00\xCB\x00\x5C\x03\xE0\x3A\x00\xB7\x02\xB8\x0D\xC0\x5D\xE2\x3C\x9E\x4F\x6B\x1F\xE4\xF3\x68\xC1\x15\xD9\xC8\xD7\x58\x7C\x1E\x0C\x60\xB3\x38\xA3\xA7\xFF\x1F\xCB\xBB\xF8\x18\x65\x5E\xF1\x3B\xE5\xAE\x4F\x28\xFB\xB3\xC7\x28\xFF\x36\xBE\xF6\xAC\x8D\xFA\xDD\x0B\x02\xD1\x58\xAD\x2F\x88\x40\x85\x39\x5E\x2D\x59\xE2\x8E\x44\xC3\x95\x65\x45\xC3\x02\xA1\x9A\x58\x61\xA0\xA2\xA8\xB8\x4F\xD1\xB0\xA0\xAF\x26\x56\xD8\x07\x85\xE1\x48\x79\xB8\xC2\x5F\xD8\xA7\x0F\x57\x2E\x9C\x37\x21\x54\x13\x1B\xE5\x8B\xC4\x6A\xA3\xFE\x3E\xB0\xC2\x78\x90\x11\x52\x1A\x8C\xF1\xE4\x8E\x25\x9F\xE2\x8B\x95\x57\xD9\xDB\x01\xAF\xBB\xCE\x00\xBA\x00\xE8\x2A\xEA\x31\x17\x00\x2F\x44\xD9\x8C\x68\x38\x1C\x9B\xD9\xFF\xF7\x32\xF8\x43\x9D\x91\x8B\x63\xFE\x33\x8D\x69\x50\x61\xA0\xC2\x2C\x76\xC8\x88\x50\x54\xDC\x07\x85\x21\x53\x52\x7D\xEC\x5B\x6B\x8D\xFB\x9F\xDC\x5C\x61\x38\x52\x26\xD2\x3A\xD3\x5F\xE9\x5F\x14\x99\xCC\xE7\xBA\xBE\xE0\x34\x63\x9C\xED\x73\x74\x78\x6B\x45\x5A\x2E\x4F\xEC\x95\x74\x17\xFB\x32\x05\xE6\xD6\x32\x8C\x62\xF3\xFE\x64\x7E\xD1\x30\xFE\x82\x15\xF6\xE1\x77\x52\x13\x9B\x67\x4A\x6B\x62\xBE\xF2\x79\x65\xFD\xAD\x10\x4F\x20\xD2\xFA\xFC\xDA\x3B\x6B\x1D\x72\x9C\xF0\xC5\xF6\x4C\xEB\x59\x9C\x75\x4E\xD7\x5B\xF8\xD6\xBA\xCA\x4A\xC7\xCB\xB3\x33\xDE\x70\x18\xFF\x1B\x1D\x96\x6F\x51\x99\x99\xF3\x31\x6B\x74\x4C\x75\x24\xB6\xF8\xDC\x40\x45\xAC\xAA\x8F\xC9\x70\xE4\x5D\x5B\x0F\x6B\x29\x61\x50\x0A\x7B\xC0\xC3\x7B\x12\x5F\x20\x54\x53\x18\xE8\x63\xA5\xFC\x67\x09\xDB\x1E\x55\xC0\x9C\x27\x04\xDA\x47\xF2\xF1\x6E\xBB\xAC\xCC\xE4\xA2\xD9\x7E\x17\x46\xA2\xFE\x39\x01\x53\xAD\xAC\x0F\x8F\x5A\x58\xFC\xAF\x56\x67\x61\xB4\x36\xD4\xF6\x0C\x8C\xC2\x78\xFB\x20\x66\x4F\x3D\x56\x34\x2C\xEA\x9F\xD3\x1A\xF6\x87\x2F\xD0\x9F\xDC\xD7\x9F\xD5\xE7\xB1\xC2\xAD\xD6\xF8\x9F\x34\xE0\x3F\x79\xBC\xC7\xAE\xE6\xDF\x7F\xA8\x55\xBE\x9A\x32\xE3\xF7\xEF\x3C\xD5\x76\xE1\xF6\x5A\x3E\x76\x46\xFF\x41\xE3\xB3\xD5\x65\xAB\xEB\x2B\xFA\x67\xBE\x2E\x2C\x02\xD0\x5F\xF4\xD5\xF6\x70\x2F\x80\x62\x00\x03\x45\x38\x7F\x07\x4B\x43\x8B\x71\x41\x05\x0F\x1B\x8C\x0B\x46\xE3\x82\x1A\xA4\xC0\x89\x34\x98\x5F\xB6\xBC\x60\x1A\x2E\x58\x68\x84\x95\x62\x3A\xCA\x50\x06\x1F\x2E\xC2\x05\xE7\xB6\x7F\xFF\x56\x17\x9B\x63\xC8\x7D\xC2\xB7\xDC\x9A\x62\x93\x93\x93\x28\x6F\x14\xD7\x0F\x15\x9B\x63\xA6\xE5\x9E\x11\xFA\x89\xF2\x0D\x42\x7F\x53\xB1\xB9\x1E\xB7\xDC\x56\xA1\x9F\x28\x4F\xE2\x6B\xE5\x12\x5F\x30\x54\x5B\x5D\x32\xB3\xB5\xF4\xBC\xE4\x33\x4A\x2E\xB4\xC4\x5C\x21\x52\xE5\x2B\x99\x89\xF6\xA1\xA6\x6C\x46\x89\xAF\xA6\x3C\x10\x28\x31\x96\xC9\x4B\x8D\x10\x71\x3D\xA3\x64\x76\xD0\x17\x9A\xC7\x43\x52\x90\x62\xD4\xD2\x8C\x92\x0B\x2D\xD9\x8C\x92\xF2\x50\x2C\x1A\x34\xE3\xB9\xB0\xD4\x8C\x6B\xC9\x66\x94\x18\xF3\x74\x1E\xCA\x4B\x35\xA3\xE4\x42\xEB\x7A\x46\x49\x65\xD4\x17\xA9\xE2\x21\x1E\x5C\xCA\x43\xAC\xEB\x19\x25\x41\x3E\xCD\xE1\x21\xA2\x8C\xD6\xF5\x8C\x12\x63\xB9\xCA\x43\xDC\x66\x1C\xEB\x7A\x46\x49\xA4\x36\x54\x1E\x2B\x11\x8B\x7C\x0F\x06\xA0\x04\x23\x30\x03\xB3\x70\xB1\xD0\x14\xE1\x33\x4A\x6A\x22\xBE\x72\xBF\x79\x37\xE9\xD6\xDD\x58\xB2\x19\x25\xB5\x91\x88\x99\x37\xAF\xA3\x19\x25\x17\x5A\xD7\x33\x4A\xF8\x72\x4A\x64\x90\xD8\x3E\x66\x94\x5C\x28\x42\x67\x94\x2C\x6A\x77\xC7\xA5\x18\x0B\x1F\xE6\x70\x8D\xB6\x00\xC4\x06\x9A\xCF\xF7\xD2\x81\xED\x9F\xFB\xB5\x03\xCD\xE7\x9B\x28\xBF\x55\xE8\xAF\x1E\x68\xCE\xBB\x5A\xDB\x9B\xD0\x4F\x94\x3F\x2A\xF4\x9F\x1B\xD8\xBE\x1D\xBE\x20\xF4\x13\xE5\x5B\xC4\xF5\xBB\x09\xE9\x34\x09\xFD\x44\xF9\x77\x42\xFF\xB7\x04\xF9\x11\xA1\x9F\x28\x4F\x19\x64\xEA\x77\x1E\xD4\x3E\xDF\xDC\x41\xA6\x7E\xA2\xFC\x38\x71\xDD\x3F\x41\x3E\x50\xE8\x27\xCA\x87\x8A\xEB\xF1\x09\xF2\xC9\x42\x3F\x51\x7E\xAE\xB8\x9E\x9D\x20\x9F\x23\xF4\x13\xE5\xF3\xC5\x75\xDD\xA0\xF6\xEF\xDD\x4A\xA1\x9F\x28\xBF\x43\xE8\xC7\x07\xB5\xAF\x87\x87\x84\x7E\xA2\xFC\x69\xA1\xFF\x52\x42\xBE\xAF\x0A\xFD\x44\xF9\x3B\xE2\xBA\x29\x21\xDF\x3D\x42\x3F\x51\x7E\x50\xE8\x27\x9D\xD0\xBE\x5D\x65\x9D\x60\xEA\x27\xCA\xF9\x9C\xA5\xB0\xDC\x1C\x53\xF9\xD8\x57\x6E\x0E\xA8\x03\x4F\x3C\x91\xF7\xCF\xB5\xB1\x32\xB3\x8F\x2E\x6B\x1B\x1D\x83\xE1\x36\xED\xAA\x40\xDB\x6F\x2E\x6F\x8B\xCA\x43\xDA\xAE\xAC\xB0\xAA\x40\x1F\x14\xC6\xC2\x31\x5F\xD0\x4C\xAF\x26\xE6\x8B\x05\xCA\xCB\xCA\x7D\x35\xB1\x21\x81\x50\x6C\x58\xE1\x9C\xA0\x2F\x66\x0D\xE3\x7D\xC0\xC3\xA3\x31\xDB\xB0\x7D\x8C\x89\xC0\x40\xAE\x16\xB8\xC8\x6F\x5E\xD9\x13\x34\xD7\x35\xC3\x0A\x23\x45\x11\x6F\x9F\x3F\x1D\x6D\xFE\x64\xAC\xFA\x8F\xE6\x96\x7F\x38\x15\x68\x37\x96\x1E\x7B\xFC\x8C\xF8\x62\x31\x7F\x34\xE4\x8E\x85\xC3\xEE\xA0\x2F\x5A\xE9\x77\x17\x19\x56\x06\x81\x60\xAB\x2D\x40\x38\x52\x66\x64\x7D\x8C\xE9\xAB\x31\x05\x15\x55\xD4\xEA\x4A\x07\x03\x13\x07\x03\x33\x06\x03\x35\x83\x81\xEB\x06\x03\xF5\x83\x81\x47\x07\x03\x1B\x06\x03\xAF\x0F\x06\x76\x0C\x06\x0E\x0C\x06\x3A\x95\x00\x7D\x4A\x80\xE1\x25\xC0\x94\x12\xA0\xC4\xDD\x3A\xAB\x3D\xEA\xC1\x19\xBB\x98\x35\x65\x6D\xCF\xCE\xDC\x09\x32\x36\x5C\x6C\xBA\xB5\x81\x50\xAC\xF8\x24\xFE\x54\xCC\x59\x7D\x08\xA1\xB0\xB9\xAE\x6D\xB7\x37\x6B\x08\x2C\x2B\x06\x61\x26\x53\xE3\x9F\x5F\xEB\x0F\x95\xFB\x5B\xE5\x6D\xDB\xAE\xE5\x41\x5F\x4D\xCD\xEF\xC9\xC5\x06\x6B\x75\xA0\xA6\x26\x10\xAA\x74\xCF\x6C\xFD\xD5\xC7\x9E\x65\x1F\xC4\xA2\xBE\x40\x90\xCB\x2F\xE0\x65\xF2\x45\x2B\x6B\xAB\xFD\xA1\x98\x7B\x4E\x38\xEA\x8E\xFA\x23\xFE\x58\x20\x16\x08\x87\xDC\xE1\x88\x3F\xEA\x8B\xD9\x4A\x67\x0B\xE3\xF7\x8E\xD9\xBE\x8A\x3F\xD4\x8F\xF8\xA3\xC1\xA3\xA5\x67\x9F\x35\xB6\xE8\x94\xD6\xAB\x90\xAF\xDA\x5F\xE1\x2E\x37\xE7\x9C\xEE\xCA\x68\xB8\x36\x62\x7B\x65\x8D\xF9\xCE\x60\x00\x25\xB6\xF9\xCE\xA9\xB6\xF0\x21\x62\xFD\x3A\x4C\xEC\xAF\x8F\x10\x76\x17\xF6\xF0\x91\x62\x7D\x3B\x5A\xF0\x68\xC7\x26\x84\x8F\x13\xF1\xC7\x8B\xF5\x2F\x9F\x4F\xFD\xAB\x8F\xF4\xA8\x55\xD3\x99\xFE\x88\xDF\x17\xFB\xA3\xE5\xD4\xBF\xBD\x10\x13\xE1\xC7\x4A\xB3\xCA\x17\x1D\xC5\x1F\xBC\xD1\xEA\x2D\x7B\x13\xB7\x58\xB7\xCF\x15\x67\x3D\xF3\xC4\xDA\x7D\xA3\x1B\x08\x02\x88\x0A\x79\x0D\x00\x8E\x34\x32\x79\x91\x17\x1D\xC3\x1E\xC5\xB2\x43\x71\xDB\xEC\x4F\xF8\xEF\x4F\x04\x36\x16\x98\x36\x28\x9F\x8B\xB8\x5F\x00\xE0\x18\xEB\x06\xBE\xB4\xD9\xA6\xD8\x6D\x52\x74\xBB\x2D\x8A\xB0\x41\xE1\xFD\xB8\x65\x53\xC2\x7F\x5B\xB6\x24\x5C\xDD\xB2\x21\xE1\x72\xCB\x76\xE4\x6A\x5D\xD7\x2D\x9B\x11\xAE\x63\xB7\x15\xB1\xDB\x88\x58\xB6\x21\x6F\xDB\x6C\x42\x78\x3A\x96\x2D\xC8\x9B\x36\x1B\x10\x9E\x8E\x65\xFB\xB1\xC5\x66\xF3\xC1\xE5\x96\xAD\xC7\xE9\x36\x1B\x8F\xD7\x6D\xB6\x1D\x6F\xD8\x6C\x3A\xB8\xBE\x65\xCB\xB1\xC5\x66\xC3\xF1\x56\x82\xED\x86\x65\xB3\xF1\x8E\xCD\x56\x63\x9B\xCD\x46\x83\x97\xD3\x6E\x9B\x61\xD9\x64\xBC\x63\xB3\xC5\xD8\x91\x60\x83\x61\xD9\x5E\xEC\xB4\xD9\x5C\x18\x63\xB6\xB0\xB5\x78\xDF\x66\x63\xC1\xCB\x69\xD9\x56\xBC\x6F\xB3\xA9\x30\xE6\xF4\xC2\x96\xE2\x7D\x9B\x0D\x05\xD7\xB7\x6C\x27\xDE\xB3\xD9\x4C\x70\xB9\x65\x2B\xF1\x81\xCD\x46\x82\xA7\x63\xD9\x46\xF0\xDF\x76\x9B\x08\xCB\x16\x22\xD1\x06\xC2\x6E\xFB\x60\xD9\x3C\x70\xB9\x65\xEB\x40\x09\x36\x0E\x96\x6D\x43\xA2\x4D\x83\xDD\x96\xC1\xB2\x61\xE0\x72\xBB\xED\x82\x65\xB3\xC0\xE3\x5A\xB6\x0A\x5C\xC7\xB2\x51\xA0\x04\xDB\x04\xCB\x26\xC1\x98\x23\x0A\x5B\x84\x55\xBA\xAE\x5B\x36\x08\xAF\xF2\x76\x2E\x6C\x0F\xB8\x8E\x65\x73\x70\xA9\xAE\xEB\x96\xAD\x01\x97\x5B\x36\x06\xFD\xFA\xB6\xD9\x16\xF0\x7C\x2D\x9B\x82\x99\xBA\xAE\x5B\xB6\x04\x85\x7D\xDB\xDB\x10\x58\xB6\x03\x5C\xDF\xB2\x19\x18\xAA\xEB\xBA\x65\x2B\x30\xC6\x66\x23\x30\xCE\x66\x1B\xC0\xF3\xB5\xDB\x04\xD8\x6D\x01\xEC\x36\x00\x76\xEE\xBF\x9D\xF3\x6F\xE7\xFA\xDB\x39\xFE\x76\x6E\xBF\x9D\xD3\x6F\xE7\xF2\xDB\x39\xFC\x76\xEE\xBE\x9D\xB3\x6F\xE7\xEA\xDB\x39\xFA\x76\x6E\xBE\x9D\x93\x6F\xE7\xE2\xDB\x39\xF8\x76\xEE\xBD\x9D\x73\x6F\xE7\xDA\xDB\x39\xF6\x76\x6E\xBD\x9D\x53\x6F\xE7\xD2\xDB\x39\xF4\x76\xEE\xBC\x9D\x33\x6F\xE7\xCA\xDB\x39\xF2\x76\x6E\xBC\x9D\x13\x6F\xE7\xC2\xDB\x39\xF0\x76\xEE\xBB\xC5\x79\xE7\xCF\xCE\xE2\xBA\xF3\xDF\x76\x8E\xBB\xC5\x6D\x8F\xD9\x38\xED\xC7\xDB\xB8\xEC\xBD\x6C\x1C\xF6\x11\x36\xEE\xFA\x70\x1B\x67\xDD\x2D\xB8\xEA\x1C\x2E\xBE\xFE\x17\xBC\x75\x77\x02\x5F\xDD\xCE\x53\x5F\x27\x03\xEB\x04\xEF\xFC\x11\x19\xE0\xE0\xE3\xE6\xA3\x32\xF0\x98\x90\x3F\x2E\x03\x8F\x8B\x7C\x9F\x90\x81\x27\x85\xFC\x29\x19\xE0\xC8\xE3\x6B\x04\xD9\x84\x23\x1F\x78\x46\x36\x71\x12\x80\x67\x65\x13\x5C\x7F\xBD\x0C\x70\x1C\x38\xA4\xEB\x1B\x64\x60\xA3\x90\x6F\x92\x01\x8E\xAE\x30\xB9\xF2\x1C\x5E\x98\x1C\xF9\x17\x44\x5D\xBD\x28\x03\x2F\x0B\xFD\x57\x64\x80\xA3\x23\x80\xCD\x32\xF0\xAA\x90\xBF\x26\x03\x1C\x33\x0B\x80\xD7\x6D\x7C\x7A\x3B\x8F\xDE\xCE\x9F\xB7\x78\xF3\xC9\x09\x7C\x79\x8B\x27\x7F\x1C\x4C\x6E\xBC\xC5\x8F\xB7\xF3\xE2\xED\x7C\x78\x8B\x07\xCF\xCB\x69\xE7\xBF\xDB\x79\xEF\x76\xBE\xBB\x9D\xE7\x6E\xF1\xDB\xEF\xD3\x75\xDD\xCE\x6B\xB7\xF8\xEC\xBC\x7F\xB0\x78\xEC\x07\x74\x5D\xB7\xF8\xEB\x3C\x2F\x8B\xB7\x6E\x70\xD6\x05\x5F\x7D\xAA\x8D\xA7\xEE\x16\xFC\xF4\x62\xC1\x4F\x1F\xA8\x00\x1C\xA7\xE5\x02\x83\x14\x13\x5C\x7E\x82\x02\x70\x4C\xC9\x05\x4E\x54\x80\xA1\x42\x3E\x4C\x01\x38\x46\xE7\x02\xC3\x15\x60\x84\x90\x97\x2A\xC0\x48\x8E\x5C\x60\x94\x02\x4C\x10\xF2\x89\x0A\xC0\x31\x24\x17\x98\x64\xE3\xC5\xDB\xF9\xF0\xB3\x14\x60\xB6\x62\x96\xBF\x5C\x31\xD1\x33\x17\xA8\x10\xFC\x78\x2E\xB7\x78\xF1\xC6\x1E\x93\xE0\xC3\x77\xB4\xF1\xE0\x79\x9D\xD8\xF9\xEF\x16\xEF\x9D\xEB\x5B\x7C\x77\x6F\x02\xCF\xDD\xE2\xB7\xCF\xCA\x6F\xE3\xB5\xF3\xDF\x16\x9F\x9D\xFF\xB6\xF3\xD8\xED\xFC\x75\x8B\xB7\xBE\xF5\xB6\x36\xBE\x7A\x72\x02\x4F\xDD\xCE\x4F\xB7\xF3\xD2\xED\x7C\xF4\x65\xF9\xC0\x32\xC1\x43\xBF\x42\x70\xD2\x79\x99\xED\x5C\x74\x3B\x07\xDD\xCE\x3D\xB7\x73\xCE\x2D\xAE\xF9\x88\x5F\x74\xDD\xE2\x98\xF3\xDF\x76\x6E\xB9\x9D\x53\xDE\x8E\x4B\xCE\x80\x59\xCC\xCC\xD7\xC7\x4C\xF0\x39\xF9\x6C\xC1\x2D\xE7\x72\x3B\xA7\xDC\xE2\x92\x97\x7E\xAA\xEB\x16\x87\xDC\x58\xEB\xDB\xB8\xE3\x16\x67\x9C\xD7\x83\x9D\x2B\x6E\x71\xC4\xB9\xDC\xCE\x0D\xB7\x38\xE1\x5C\x6E\xE7\x82\x5B\x1C\x70\x2E\xB7\x73\xBF\x2D\xCE\x37\x97\xDB\xB9\xDE\x76\x8E\xB7\x9D\xDB\x6D\xE7\x74\x5B\x5C\x6E\x1E\xD7\xE2\x70\xF3\xDF\x16\x77\x9B\xFF\xB6\x38\xDB\xFC\xB7\x9D\xAB\x6D\x71\xB4\xB9\xDC\xCE\xCD\xB6\x73\xB2\xED\x5C\x6C\x3B\x07\xDB\xCE\xBD\xB6\x73\xAE\xED\x5C\x6B\x8B\x63\xCD\xD3\xB7\x73\xAB\x2D\x4E\x35\x97\xDB\xB9\xD4\x16\x87\x9A\xCB\xED\xDC\x69\x3B\x67\xDA\xE2\x4A\x73\x1D\x8B\x23\xFD\x04\xEF\x7B\x05\x37\x7A\x9F\xAE\xEB\x16\x27\xFA\xEA\x04\x2E\xB4\xC5\x81\xE6\x7D\x97\xC5\x7D\xE6\xFA\x76\xCE\xB3\xC5\x75\xE6\xE9\x5B\x1C\xE7\x3B\x75\x5D\xB7\x73\x9B\xED\x9C\x66\x8B\xCB\xCC\xF5\x2D\x0E\xF3\x4A\x5D\xD7\x2D\xEE\x32\xEF\xD3\xEC\x9C\x65\x8B\xAB\x5C\xC7\xFB\x3A\xC1\x51\xBE\x5C\xD7\x75\x8B\x9B\xCC\xCB\x63\x71\x92\x97\x7D\xAA\xEB\x16\x17\xD9\xF3\x89\xAE\x5B\x1C\xE4\xBF\x7F\xA2\xEB\x16\xF7\x38\x3F\x81\x73\x6C\x71\x8D\x33\x13\x38\xC6\x16\xB7\x98\xF7\x2D\x16\xA7\xB8\x5B\x22\x97\x58\x70\x88\xBD\x09\xDC\x61\x8B\x33\x6C\xEC\xD9\x09\xAE\x70\xCA\x4E\x5D\xB7\x38\xC2\xDD\x7E\xD2\x75\x8B\x1B\x9C\xB7\x53\xD7\xED\x9C\x60\x3B\x17\xD8\xE2\x00\xF3\x32\x58\xDC\xDF\xCF\x77\xE8\xBA\xC5\xF9\x95\x77\xEA\xBA\xC5\xF5\xDD\xBD\x43\xD7\x2D\x8E\xEF\xA7\x3B\x74\xDD\xE2\xF6\xF2\x32\x58\x9C\x5E\x63\xAF\x56\x70\x79\x9F\xDF\xA1\xEB\x16\x87\x97\xEB\x58\xDC\x5D\x63\x9E\x2C\x38\xBB\xC6\x7B\x6D\xE3\xEA\xDA\x39\xBA\x76\x6E\xEE\x88\x38\x30\x31\x6E\xEA\x4F\x8A\x9B\x18\xBA\x40\xD7\x27\x0B\xAE\xAE\xB1\x17\x29\x38\xBA\xFC\xB7\xC5\xCD\x35\xD6\x86\x82\x93\xCB\x7F\x5B\x5C\x5C\x5E\x06\x8B\x83\x7B\xA8\x56\xD7\x2D\xEE\x2D\xD7\xB1\x38\xB7\x5C\xC7\xE2\xDA\xBE\x3B\x5D\xD7\x2D\x8E\x2D\xD7\xB1\x73\x6B\x2D\x4E\x2D\x97\x5B\x5C\xDA\xF5\xD3\x75\xDD\xE2\xD0\xAE\x9B\xAE\xEB\x16\x77\xF6\xF1\xE9\xBA\x6E\x71\x66\x37\x4E\xD7\x75\x8B\x2B\xCB\xF5\x2D\x8E\x6C\xF3\x74\x5D\xB7\xB8\xB1\x3B\xA7\xEB\xBA\xC5\x89\xFD\x6E\xBA\xAE\x5B\x5C\xD8\xD5\x72\x1B\x07\x96\xE7\x6B\x71\x5F\x8D\x3D\x53\xC1\x79\xE5\xED\xC4\xE2\xBA\x6E\x98\xAE\xEB\x16\xC7\xF5\xD5\x5A\x5D\xDF\xAC\x01\xAF\x8B\x7B\xFC\x55\x03\x7E\x13\xBF\xED\x9C\x57\x3B\xD7\xD5\xE2\xB8\xBA\x13\xB9\xAD\x82\xD3\x5A\x98\xC0\x65\xB5\x38\xAC\x85\x09\xDC\x55\x8B\xB3\x3A\x22\x81\xAB\x6A\x71\x54\xDD\x09\xDC\x54\x8B\x93\xEA\x4E\xE4\xA2\x0A\x0E\x6A\x8F\x04\xEE\xE9\x1C\x02\x4A\x2B\x82\xBE\x6A\x24\xB8\x6F\x08\x93\xBE\x21\x4C\xFD\x86\x70\xFE\x37\x84\x0B\xBF\x21\x94\x7D\x43\x28\xAD\x0A\x9B\xAA\x39\x84\x6E\x39\x84\x82\x1C\x42\xBF\x1C\x82\x37\x87\x30\x3C\x87\x50\x1A\xF2\xC5\xC2\xC1\x80\x2F\x54\x36\x3E\xE0\x8F\x86\x2B\x83\x8B\x23\x55\x35\x5C\x7F\x34\x61\xEC\x58\x42\x69\xD4\x37\x3B\x50\x0E\x20\x49\x49\x4A\x4A\x4A\x4D\x4A\x4F\xEA\x96\x94\x9F\x94\x9F\xC4\x92\x58\x92\x3B\x69\x78\x52\x69\xD2\xC4\xA4\x73\x92\xC2\x49\xF3\x93\x3E\x4C\xFA\x38\x49\x4F\x9A\xDA\x61\x69\x87\xD5\xC9\x8F\x25\x3F\x91\xBC\x39\xF9\x9D\xE4\xDD\xC9\x9F\x25\xEB\xC9\x53\x5B\x9E\x6F\x79\xA7\x65\xE8\xE1\xA9\x87\x57\x1C\xBE\xF9\xF0\xE6\xC3\x7B\x0E\x1F\x3E\x1C\x39\x12\x3B\xB2\xE0\xC8\xA1\x23\x56\xF1\x67\x65\x10\x2E\xCD\x20\xA0\x99\x20\x37\x13\x1C\xCD\x04\x57\x33\xC1\xD3\x4C\xE8\xD1\x4C\xE8\x29\xD0\x5B\xA0\x4F\x33\x61\x60\x33\xE1\x84\x66\xC2\xC9\xCD\x84\xC1\x02\xA7\x0A\x8C\x14\x18\x27\x30\x41\x60\x92\xC0\x94\x66\xC2\xE9\xCD\x84\x33\x9A\x09\x67\x36\x13\xCE\x12\x38\x57\xE0\x7C\x81\x19\x02\x33\x05\xCA\x04\x7C\xCD\x84\xD9\xCD\x84\x0A\x81\xCA\x66\xC2\xDC\x66\x42\xB0\x99\x10\x6D\x26\xC4\x9A\x09\x0B\x9B\x09\x8B\x9B\x09\x4B\x9A\x09\x97\x0A\xD4\x35\x13\xAE\x69\x26\x5C\xD7\x4C\xB8\xA3\x99\x70\x4F\x33\xE1\xDE\x66\xC2\xFD\xCD\x84\xFA\x66\x42\x63\x33\xE1\xD9\x66\xC2\x9E\x66\xC2\x4F\xCD\xBC\xFE\xAB\xFD\xA1\x80\x2F\x94\xF8\xB8\x8B\x1D\xE7\x38\xCE\x77\x5C\xEB\xB8\xC1\xB1\xC2\x91\xDD\x92\xD3\x52\xBA\xC0\x5F\x13\xB3\xAB\xA5\x12\x4E\x4C\x25\x0C\x4E\x25\x0C\x4F\x25\x8C\xF4\x05\x03\x21\x7F\x8D\x1F\x40\xF7\x49\xDD\xA7\x76\x5F\xD2\x7D\xA4\xAF\xBA\xB6\x1A\xAB\xE3\xFB\xE2\xA8\x22\x9C\x32\x97\xEB\xD4\xD4\xF8\xCA\xCE\xF1\x55\xF1\x3E\x7A\x2E\xE1\x87\xB9\x84\x3D\x73\x09\xBF\x1A\x61\x31\xDF\x3C\x6C\xEA\xFE\x73\xF7\x43\xDD\xF5\xEE\x23\xFD\xA1\x4A\x5F\x30\x60\x2B\x4F\x5D\xCA\xB2\x94\x2B\x53\xAE\x4F\x59\x91\xB2\x32\xE5\x96\x94\x35\x29\x0D\x29\x6B\x53\x1E\x49\x79\x24\xE5\x89\x94\xA7\x53\xD6\xA7\xBC\x94\xB2\x39\xE5\xD5\x94\x37\x52\xDE\x4C\xD9\x95\xB2\x2B\xE5\xC3\x94\x8F\x52\x3E\x49\xF9\x2C\xE5\xCB\x94\x23\x29\x23\xAB\x7C\x81\x79\x35\xB5\xF3\x02\x89\x37\x98\x4F\x48\xCE\x27\x38\xF3\x09\x27\xE5\x13\x4E\xC9\x27\x8C\xC9\x27\x4C\xCD\x27\x04\xF3\x09\x23\xC3\x91\x70\x75\x78\x4E\x18\xF8\x56\xFA\x4E\x72\x14\x0F\x28\x5E\x5D\xBC\xB1\x78\x64\xD4\x57\x55\x6D\x26\x95\x49\x98\x92\x49\x38\x33\x93\x10\xCE\x24\x2C\x15\x18\x19\xF5\x05\x82\x41\x3F\x50\xA8\x17\x8E\xAC\xAD\xB4\xEA\xA4\x5B\xF7\x6E\xAC\x9B\xAB\xDB\xC8\xDA\xAA\x40\x05\x46\xE4\x4C\xCB\x19\x95\x58\x1E\xE3\xA4\x73\x15\x1E\xC4\x83\x40\x92\xC3\x78\x07\x3E\x4A\xFA\x28\xA9\x63\x87\x8E\x1D\x3E\x4D\xFE\x34\x39\x23\x37\x23\x37\xD5\xDD\xD1\xDD\xD7\xDD\xDF\x3D\xCB\x5D\xE1\x9E\xE3\x0E\xBB\xF1\xAE\xBE\x5F\x3F\xA2\x1F\x39\xA0\xB7\xE8\x1B\x32\x09\x1C\x5B\x04\xBC\x27\x10\x4E\x39\x81\xB0\x7A\x3D\xE1\xDE\xF5\x84\x9A\x6D\x84\x8B\xB6\x11\x08\x19\x06\xDC\xC8\xC0\x52\x64\x18\x16\xAB\x87\xF5\x8E\x86\x15\xCF\x61\x3D\x13\xA3\x7C\x21\x5F\x05\x7F\x5D\x4B\x67\x87\xA3\x81\xCA\x40\xC8\x17\x04\x3A\x2F\xED\xBA\x36\xF7\xD7\xDC\x51\xBE\xA8\xD1\x52\x56\x4B\x84\xAD\x12\x61\x94\xAF\xB6\xDC\x57\x63\x28\x07\x67\xFB\xDA\xB7\x22\xAF\x83\x50\xEE\x20\x84\x05\x46\x95\xB7\xDD\xE3\xA8\x39\xF8\xB7\xEE\xD3\xBA\x47\x7B\x6D\xFD\xA7\xF7\x3B\xAA\xCA\x37\xAF\xDA\x07\xA0\x13\xE1\x84\x4E\x84\x93\x3A\x11\xC6\x75\x22\x2E\x6F\xDF\xE5\x35\x9C\xD4\x30\xA2\x61\x4A\xC3\xD4\x86\xF3\x1B\x2E\x68\x28\x6B\x18\x55\xE5\x8F\x86\xE7\xF9\xFD\x7C\x65\xF1\x6B\xF6\xFE\xEC\xC3\xD9\x91\xC6\x8D\x8D\xA3\xAA\xC2\x51\x5F\x4D\xB5\xB8\xF3\xB5\x1D\x09\x6F\x74\x24\x8C\x0A\x1B\x9B\xAD\xFB\xDB\x3F\xDF\x84\x7A\x0E\x57\x57\x87\xDB\xBD\x75\xD6\xD9\x72\x3D\x1A\xF1\x34\x9E\xC5\x46\xEC\xC2\x2E\xEC\xC3\x3E\x3C\x2D\x7D\x22\x7D\x21\x7D\x23\x7D\x2F\xE9\x52\x4C\x8E\xC9\x97\xCA\x97\xCA\x57\xCA\x57\xCA\x57\xCB\x57\xCB\x8E\x24\x47\x52\x5A\x52\x5A\x52\xF7\xA4\xEE\x49\xAE\x24\x57\xD2\x88\xA4\x11\x46\x7D\xF2\xBA\xAC\x48\xF1\xA7\x0C\xCF\x18\x9E\xB1\xA3\xE3\xBB\x1D\x5B\x32\x5B\x32\xBF\xEB\xFA\x43\xD7\x13\x73\x4E\xCA\x91\x72\xE5\x5C\x47\xAE\x23\xF7\x9D\xFC\x77\xF2\x77\xE7\xEF\xCE\xFF\x26\xFF\xFB\xFC\xE6\xFC\x9F\xF3\x7F\xCD\xDF\x97\x7F\x30\xFF\x60\x3E\xDC\xA9\xEE\x0C\xA3\xEE\x23\xEE\x98\xFB\x52\x77\x9D\xFB\x46\xF7\x6A\xF7\x46\x37\x3C\xBD\x3C\xBD\x3D\x7D\x3C\xAA\xA7\xD8\x33\xC8\x33\xC5\x73\xBA\xA7\xCC\x73\x8D\xE7\x3A\xCF\x4A\xCF\xF1\x3D\x47\xF4\x9C\xD8\x73\x56\x4F\xBD\x37\xFA\xD4\xF4\x5B\xD0\xEF\xD6\x7E\xB7\xF5\xD3\xFB\xA1\xFF\x99\xFD\xF7\x0C\x68\x19\x00\xAF\xE2\x4D\xF2\x26\x79\x93\xBD\x6E\xAF\xD7\x7B\xB2\x77\x88\x77\xB8\xF7\x0E\xEF\x9D\xDE\xD5\xDE\xD5\xDE\x16\xEF\x21\xEF\xCA\xE2\x55\xC5\x9B\x8A\x3F\x2B\x76\x0F\x2C\x1B\xB8\x74\xE0\x5B\x03\xF5\x81\xFA\xC0\xF3\x06\xE9\x83\x36\x4D\xD1\xA7\x40\xF3\x68\xCB\xB5\x6B\x35\xEF\x9A\xC1\x6B\xFA\xD7\xF7\xAF\x7F\xAB\xFE\xAD\xFA\x19\x8D\x33\x1A\xE7\x36\xCE\x6B\x1C\x76\x78\xF8\xE1\xCC\x23\x79\x47\xBC\x47\xCE\x3C\x72\xD6\x91\x39\x47\xAA\x8E\xCC\x3B\xC2\xDB\x0A\xE9\x6E\xFD\x54\x7D\x84\x3E\x43\xF7\xEB\x11\x3D\xA2\xDF\xAD\xAF\xD2\x9B\xF4\x2F\xF5\xAF\xF5\x66\xFD\x80\x7E\xD8\x6C\x47\x44\x90\x88\xD0\x81\x08\x83\x88\x70\x32\x11\x86\x13\x61\x25\x11\xEE\x24\xC2\x56\x22\x1C\x22\xC2\x6E\x89\xD0\x22\x11\x3E\x0D\x13\x3E\x0B\xB7\xB5\x2F\x6C\x25\xFC\xBA\x95\x80\x6D\x84\xE3\xB7\x11\xFA\x6C\x23\xCC\xD9\x46\x98\x2B\xDA\xDD\xB2\x6D\x84\x2B\xB6\x11\xAE\xDF\x46\xA8\xDF\x46\x78\x68\x1B\xE1\xEB\x6D\x84\xA6\xB7\x09\x3F\xBF\x4D\xC0\x3B\x84\x73\xDE\x21\xCC\x7A\x87\xB0\xE8\x1D\x02\xB6\x13\xCE\xDA\x4E\x38\x67\x3B\xE1\xCE\xED\x84\xBB\xB7\x13\x56\x6D\x27\xFC\x43\xE0\xFE\xED\x84\xF8\x76\x42\xFD\x76\xC2\x03\xDB\x09\x0F\x6D\x27\x3C\xBD\x9D\xF0\xAC\xC0\x86\xED\x84\x17\xB7\x13\x5E\xDE\x4E\x70\xEC\x20\x74\xD8\x41\x70\xEE\x20\xA4\xEF\x20\x74\xDE\x41\xE8\xBA\x83\x90\xBF\x83\xC0\x76\x10\x06\xEF\x20\x9C\xBA\x83\x30\x6C\x07\x61\xC4\x0E\xC2\xE8\x1D\x84\xB1\x02\x13\x77\x10\xA6\xEE\x20\x9C\xB9\x83\x70\xFF\x4E\xC2\x9A\x9D\x84\x37\x76\x11\xDE\xDC\x45\xD0\x77\x11\xE6\x7F\x4F\x78\xEC\x7B\x02\xFD\x40\x18\xFA\x03\x01\x7B\x08\xFD\xF6\x10\xBC\x7B\x08\xB7\xEC\x21\xAC\xDE\x43\x78\x68\x0F\x61\xDD\x1E\xC2\xC6\x3D\x84\xE7\xF7\x10\xDE\xDA\x43\xD8\xB6\x87\xF0\xEB\x1E\x73\xA3\xF7\xC1\x9F\x08\x5F\xFE\x44\xD0\x7F\x22\xD0\x5E\x82\xB4\x97\x90\xB9\x97\x70\xEA\x5E\xC2\x88\xBD\x84\xF1\x7B\x09\x53\xF7\x12\xCE\xD8\x4B\x98\xB5\x97\xE0\xDF\x6B\x6E\x04\xEF\xFA\x8D\xD0\xF4\x1B\xE1\xFB\xDF\x08\x7B\x7E\x23\x1C\xFA\xCD\xDC\xFC\xAD\xD9\x47\xA8\xDB\x47\x78\x77\x1F\xA1\x69\x1F\xE1\xBB\x7D\x64\x7C\x88\x26\x75\x3F\x21\x73\x3F\x61\xDC\x7E\xC2\xD4\xFD\x84\xF3\xF7\x13\x66\xED\x27\x5C\xBD\x9F\xB0\x72\x3F\xE1\xC1\xFD\x84\xB5\xFB\x09\xEB\xF6\x13\x70\x80\xB0\xE8\x00\xE1\xA2\x03\x84\x37\x0E\x10\xB6\x1C\x20\x4C\x3B\x48\x98\x75\x90\x50\x7D\x90\x10\x39\x48\x88\x1D\x24\x2C\x3A\x48\xB8\xE8\x20\xA1\xEE\x20\xE1\xAA\x83\x84\x95\x07\x09\x6B\x0E\x12\xD6\x1E\x24\x3C\x71\x90\xB0\xE9\x20\xE1\x85\x83\x84\xAD\x07\x09\x3B\x0F\x12\xD0\x42\xB8\xB9\x85\xF0\x97\x16\xC2\xEB\x2D\x84\x3D\x2D\x84\x03\x2D\xC7\xE8\x97\xC2\x91\x18\x9F\x07\x7D\x2A\xFF\x28\xD7\xA9\x3F\xAB\x07\x54\x5D\x1D\x55\x63\x18\x2A\x7D\x32\xAA\x36\xE4\x0F\xCC\x09\x47\xDB\x75\x50\x6E\xC2\xED\xC7\x11\xD0\x93\x10\xEA\x49\x88\xF4\x24\xC4\x7A\x12\xEA\x7A\x12\x46\xF5\x22\x8C\x5A\x1C\x89\x06\xC2\xB6\x6F\xA8\x25\x13\x1C\xC9\x84\x64\x01\x67\x32\xE1\xC4\x64\xC2\xC9\xC9\x84\x53\x92\x09\x43\x04\x86\x0B\x8C\x5A\x1C\x0D\x04\x83\xC6\xCC\xCC\x74\xCA\x15\xCA\xD5\xCA\x00\x47\x5D\xFE\xF2\xFC\x7E\x05\xFD\x0A\x16\x15\x2C\x2A\x68\x2A\xD2\x8B\x46\xC4\x57\xC5\xFB\x1F\x19\x70\x64\xB4\xBF\xC6\x1F\xF5\xC7\x00\x31\x87\x1D\xED\x5F\xE0\x0B\xF9\x2A\x7D\x51\x6B\xE0\x4D\x99\x9A\x72\x76\x4A\x79\xCA\x9C\x94\xA5\x29\x4D\x6B\xF4\x35\xA3\x03\x0B\xFC\x35\x65\xA5\xF3\x6A\xA3\xB5\x66\x78\x1E\x21\x29\x8F\x90\x22\x90\x96\x47\xC8\xCE\x23\x74\xC9\x23\x74\xCD\x23\xE4\xE6\x11\x4E\xCC\x23\x9C\x9C\x47\x38\x25\x8F\x70\x6A\x1E\x61\x6C\x1E\x61\x6A\x1E\xE1\xFC\x3C\xC2\xE8\x70\x65\xD4\xF8\x26\x57\x2E\xE1\xD4\x5C\xC2\xE8\xDA\x48\x30\xBC\xD8\x36\x22\xAD\x27\xCC\x5D\x4F\x88\xAC\x27\x2C\x59\x4F\xA8\x5B\x4F\x58\xBE\x9E\xB0\x72\x3D\xE1\xF6\xF5\x84\x3B\xD7\x13\x56\xAD\x27\x8C\xA9\x5C\x1C\x89\x1D\x63\xBA\x0A\x2F\xA1\xFF\x09\x6D\xE3\xCC\x98\xE0\x6C\x5F\x0D\x4F\xDE\x41\xE8\xED\xE0\xD7\x8B\xAB\x7D\x81\x72\x34\x75\x24\xFC\xD6\x91\x30\x26\x56\x15\x08\x47\x6C\xF5\x97\x35\x3E\x6B\x62\xD6\x94\xAC\xA9\x59\xE7\x64\x9D\x97\x75\x5E\xD6\xF4\xAC\x99\x59\xB3\xB2\x96\x67\x5D\x9B\x75\x43\xD6\xCA\xAC\xB5\x59\x8F\x64\x3D\x9E\xF5\x54\xD6\x73\x59\x9B\xB2\x36\x65\xBD\x90\xF5\x72\xD6\xAB\x59\x3B\xB3\xDE\xCD\xCA\xCC\xCE\xCA\xEE\x92\x9D\x9B\x3D\x3D\x7B\x66\xF6\x92\xEC\xBA\xEC\xDB\xB3\xEB\x8A\xFE\x5A\xB4\xBA\x28\x5E\xB4\xA6\xE8\xA1\xA2\xB5\x45\x4F\x14\x3D\x55\xF4\x5C\xD1\xA6\xA2\x57\x8A\x5E\x2D\x7A\xB3\x68\x6B\xD1\xCE\xA2\x77\x8B\x3E\x2E\xA2\xC6\xA4\xC6\x94\xC6\x8C\xC6\x4E\x8D\x5D\x1B\xDD\x8D\xC7\x37\x16\x36\xF6\x6F\x1C\xE7\x0F\x47\x2B\x6D\x23\xF4\xEA\xCC\x97\x33\x37\x67\x6E\xCE\xDC\x92\xB9\x25\x73\x6B\xE6\xC1\xCC\x43\x99\x7A\xE6\xCA\xFC\x67\xF2\x37\xE4\x6F\xCC\x47\x51\xAF\xA2\xDE\x45\xBD\x8B\xB8\x1B\x17\xF4\x55\x86\x83\x01\xA3\x6D\x42\xED\xAF\x7A\xD5\x0B\x4D\xB3\xA9\x26\x42\x52\x13\x21\xB9\x89\x90\xDB\x44\xE8\xDE\x44\xF0\x34\x11\x8E\x6B\x22\xF4\x6C\x22\x1C\xDF\x44\xE8\xDB\x44\x18\x17\x8E\x55\xF1\xB8\x5E\x99\x30\x51\x26\x8C\x8B\xFA\x42\xB1\x2A\x1F\x90\x4D\x90\xB3\x09\x8E\x6C\x42\x5A\x36\xA1\x63\x36\x21\x33\x9B\x90\x9D\x4D\x28\xCC\x26\xF4\xCD\x26\x78\xB3\x09\x03\xB3\x09\x83\xB2\x09\x27\x66\x13\x06\x67\x13\x86\x64\x13\x46\x67\x13\xC6\x65\x13\xC6\x67\x13\x26\x65\x13\xA6\x64\x13\xA6\x0A\x9C\x2B\x30\x33\x9B\x50\x9E\x4D\x98\x93\x4D\x08\x66\x13\x22\xD9\x84\x18\x8F\x17\xF5\xFB\xE7\x19\xFB\xFB\x35\x72\xAD\xBC\x50\xBE\x48\xBE\x44\x5E\x2A\x2F\x95\xAF\x90\xAF\x90\xAF\x92\xAF\x92\x97\xCB\xD7\xCA\xD7\xCB\xD7\xCB\x37\xCA\xF7\xC8\xF7\xCA\xBB\xE5\x3D\xB2\x2E\x1F\x5F\xD0\xB7\x60\x66\x81\xAF\x60\x4E\xC1\xDC\x82\x8D\x05\x1B\x0B\xE0\xEA\xE2\xCA\x75\x15\xB8\xDC\xAE\x31\xAE\xF1\xAE\x29\xAE\xA9\xAE\x73\x5D\xE7\xBB\xCE\x77\xCD\x70\xCD\x70\xCD\x74\xCD\x74\x95\xB9\x2E\x71\xD5\xB9\x1E\x73\x3D\xE1\x7A\xC9\xF5\x8A\xEB\x1D\xD7\x4E\xD7\x07\xAE\x8F\x5C\x3F\xBA\xF6\xBA\x7E\x71\xFD\xE6\x3A\xE2\x3A\xDE\x73\xBC\xC7\xDF\xE8\x6F\x6C\x37\xFA\x13\xE1\x46\x22\xAC\x16\xC0\xDB\x84\x31\x6F\x13\xC6\xD5\xCE\xF5\x45\x7D\xB1\xA3\xA6\xAF\x97\x39\x97\x39\xAF\x74\xDE\xE0\x5C\xE1\xBC\xC9\x79\x8B\x73\x8D\xB3\xC1\xB9\xD6\xF9\x88\xF3\x51\xE7\xE3\xCE\xA7\x9D\xEB\x9D\x2F\x3B\x37\x3B\x5F\x73\xBE\xE1\xDC\xE2\xDC\xEA\xDC\xEA\x6C\x72\x7E\xE6\xFC\xD2\xF9\x93\xF3\x80\x53\x77\x8E\xAB\x0D\xCD\xF5\x05\x7D\x65\xE3\xC2\xA1\x0A\x7B\xA2\xB3\x0A\x08\xFE\x02\x42\x65\x01\xA1\xAA\x80\x30\xB7\x80\x70\x63\x01\x61\x65\x01\xE1\xA6\x02\xC2\x2D\x05\x84\xBF\x15\x10\x56\x17\x10\xEA\x0B\x78\xB9\xA2\xD5\xB5\xF3\xAA\x5A\x93\x20\xA7\xEC\x74\x38\x9D\xCE\x8E\xCE\x4C\x67\xB6\xB3\xD0\xD9\xD7\xE9\x75\x0E\x74\x0E\x72\x9E\xE8\x3C\xC9\x79\x8A\x73\xB0\x73\x88\x73\x88\x73\x98\x73\xA4\x73\x9C\x73\xBC\x73\x92\x73\x8A\xF3\x0C\xE7\x19\xCE\xF3\x9D\x17\x38\x2F\x74\x5E\xE8\x9C\xE3\x5C\xE0\x1C\x9F\xB0\x04\xA9\xEB\x7F\x7B\xFF\x3B\xFA\xFF\xDC\x1F\x03\x76\x0C\x70\x78\x1D\xDE\x0E\xDE\x0E\x5E\x8F\xB7\x8F\xF7\x14\xEF\xA9\x5E\x9C\xB0\x71\x0A\x4E\x3B\xB4\x0A\x07\xAA\x0F\x46\x0E\xBE\x77\x90\xEB\xEF\x09\x13\x7E\x0A\x93\x61\x45\xF0\x51\x5C\x02\x34\x09\x27\x3C\x29\x61\xC4\x93\x12\x0A\x9E\x92\xE0\x7E\x4A\xC2\x3D\x6F\x4A\x58\xFB\xA6\x84\xA6\xEF\x24\x60\xBF\x84\x82\x83\xA6\xC5\xC1\xC4\x6C\x19\xE3\x7D\xA1\xCA\xDA\xA0\xAD\x00\x9D\xF4\x4E\xFD\xBD\x03\xBC\xC5\xC5\x37\x16\x63\x20\x1B\x38\x6B\xE0\xA5\x03\x67\xD5\x2F\xA9\xC7\x03\xF7\xEE\x5A\xBB\xEB\x95\x5D\x6F\xEC\x6A\xD9\xB5\x5A\x7F\x4E\x7F\x41\xDF\xAC\xBF\xAE\xBF\xA5\xBF\xAD\xEF\xD2\xDF\xD7\x3F\xD4\xC7\xFB\x42\x81\x39\x81\xB2\x33\xC3\x55\x81\x50\xE5\x62\x5F\x5B\x7A\xE9\x84\xDE\xE9\x04\x6F\x3A\x61\x70\x3A\xF1\xFC\x6A\x43\xE1\x30\xDC\x39\x27\xE4\x8C\xF7\xC5\xA2\x89\x2B\xB0\xA6\x64\xC2\xDE\x64\xC2\x2F\xC9\x84\x5F\x93\x09\x2D\xC9\x04\x3D\x99\x30\xDE\x3F\x3B\xEA\x5F\x08\xDC\xE4\xD8\xEC\xD8\xEA\xF8\xD6\xF1\xA3\xE3\x17\x47\x41\xCB\x49\x2D\xA7\xB4\x0C\x69\x19\xD6\x32\xAC\x65\x44\x4B\x69\xCB\xA8\x96\xD1\x2D\x63\x5B\x4E\x6F\x19\x1F\x88\xFA\x2A\x7D\x21\x1F\x50\xEA\xFD\xAB\xF7\x2E\xEF\x2A\x6F\x5B\xFA\xB4\x96\xC0\xD6\x11\xA6\xAE\x23\x9C\xB9\x8E\x5A\x3F\x0E\x37\xA1\x3A\xE2\x8F\x06\x7C\xC1\xB2\xD2\xA8\xCF\xE8\xD0\xAC\xF6\x99\x4C\x38\x3B\x99\x70\x6E\x32\xA1\x2C\x99\x30\x21\x54\xE5\x8F\x06\x0C\x43\x3D\xD3\xC9\x61\xF9\x4A\xE5\x2A\x65\x52\xD2\xD9\x49\x91\xA4\x48\xD2\x19\x29\x67\xA5\xAC\xED\xB6\xA9\xDB\xD6\xFC\xB7\xF3\xB7\xE7\x37\xE5\x7F\x9A\xFF\x75\xFE\x0F\xF9\x3F\xE4\xFF\x92\xFF\x4B\xFE\xFE\xFC\x03\xF9\x9B\x0A\x0E\x14\xB4\x14\xE8\x05\x69\xEE\x74\xF7\x56\xF7\x1E\x77\x5F\x6F\x91\xF7\x76\xEF\xDF\xBD\x38\xD2\xF1\x88\xFB\x48\xD1\x91\xC3\x44\xE0\x68\x92\x4C\x9C\x9A\x6D\xA2\x72\x1B\x21\xB0\x8D\x70\xF1\x36\xC2\xE5\xDB\x08\x57\x6E\x23\x5C\xB7\x8D\xD0\xB0\x8D\xF0\xE0\x36\x02\x28\x03\x3F\x52\x06\x26\x84\x6A\xCA\xA3\x81\x48\x2C\x10\x0E\xF9\x82\x65\x53\x7D\x55\x41\xDF\x82\x76\xED\x3D\x95\x10\x4D\x25\x2C\x4A\x25\x2C\x4D\xA5\xA3\xF4\xA3\xB1\xAA\x76\xEB\x99\x11\xA9\x84\xB3\x53\x09\xE7\xA5\x12\xCA\x52\x09\x13\x7D\x0B\x7C\xE6\xDA\xAE\xAE\x7E\x4B\xFD\xD6\xFA\xF7\xEA\x3F\xAE\xFF\xA4\x7E\x92\x2F\x10\x33\xDF\x89\xBA\x4C\xC2\xF3\xB6\xF5\xC9\x24\x5F\x28\xE4\xAB\x68\x6B\x0F\x75\x69\xD7\xA7\xDD\x98\xB6\x32\xED\xE6\xB4\x35\x69\x0D\x69\x8F\xA6\x3D\x9E\xF6\x74\xDA\xFA\xB4\x97\xD2\x5E\x49\x7B\x35\xED\xF5\xB4\x2D\x69\x3B\xD2\x76\xA6\x7D\x9C\xF6\x71\x5A\x53\xDA\x67\x69\x5F\xA6\xFD\x98\xF6\x53\xDA\xDE\xB4\x49\x7C\x8D\x6C\x3C\x4F\xE0\x1E\xEF\x41\xEF\x61\xAF\xEE\xDD\x53\xAC\x17\x6F\x1D\x78\x64\x20\x06\x9D\x3B\x68\x8E\x1E\xD6\xE7\xEB\x77\x99\xF3\xDB\xB5\x26\x71\xA0\x62\x1D\xA1\x72\x1D\xCF\x7F\xB1\xAF\xAA\x6C\x32\x2F\x5B\x7D\x51\xFD\x80\xFA\x01\xF5\x93\xAA\x7C\xD1\x70\x4D\x95\x28\x2F\x9C\x04\xD9\x49\x70\x38\x09\x49\x4E\x42\x9A\x93\x90\xED\x24\x74\x71\x12\x72\x9C\x84\x3C\x27\xE1\x44\x27\xE1\x14\x27\xA1\xC4\x49\x18\xEE\x24\x8C\x77\x12\xA6\x3A\x09\xE7\x39\x09\x93\xAA\x02\x31\x5F\xA8\x6C\x5A\xB5\x2F\x18\x2C\x9B\x66\x54\x65\xBB\xF6\xFC\x79\x98\x0C\xE0\x3A\xC2\x8E\xEB\xB9\x7E\xB5\x3F\x6A\x7F\xDF\x73\x3E\xCA\x69\xCA\xF9\x26\x67\x4F\xCE\x81\x9C\xA6\x3C\x3D\x6F\x52\x55\x78\x6E\xBB\x45\x7B\x16\xA1\x53\x16\x21\x3B\x8B\x30\x2C\x8B\xC7\xAF\xAD\xF0\x2D\xF4\xB5\xF6\x61\x6B\xB3\x08\xDF\x66\x11\xF6\x64\x11\x0E\x64\x11\x26\xB7\x7F\x9D\x5A\xF9\xC9\x0D\x68\xC0\xE3\x78\x1C\xCF\xE0\x19\x6C\xC2\x4E\xBC\x8B\xDF\xB0\x1F\xCF\x4B\xAF\x48\xDB\xA4\x26\xE9\x73\xE9\x7B\xE9\x7B\xA9\x59\x6A\x96\x22\x72\x4C\x5E\x60\x1B\x1F\x8E\x1E\x1B\x7E\x95\xF7\xC9\x97\x29\xD7\x2A\x03\x1C\xE6\x5E\xC9\xF9\x8E\x59\x8E\xE5\xE2\x9D\xDC\xEB\x70\x27\x4D\x4C\x0A\x19\xFB\x56\xEF\x24\xED\x48\xDA\x91\xF4\x45\xD2\x97\x49\xCD\x49\x3F\x26\x1D\x4C\x3A\x94\xA4\x27\xE9\x49\x99\x1D\x32\x3B\x64\x75\x18\xD0\x61\x4A\x87\xFB\x3B\xAC\xEB\xB0\xAE\xC3\xEB\x1D\xBE\xED\xF0\x4B\x87\x5F\x3B\x1C\xEC\x70\xB0\x03\x92\xBB\x24\x77\x4B\xEE\x96\xDC\x33\xB9\x67\x72\x61\x72\x61\xF2\x88\xE4\xF3\x92\x67\x25\xCF\x4D\xB6\xF6\xBD\x94\x94\xC1\x29\x43\x53\x86\xA6\x4C\x4D\x99\x9A\x72\x5E\x8A\x2F\x65\x7E\x4A\xDD\xEF\xEE\x8D\x6C\x48\xD9\x90\xF2\x66\xCA\x9B\x62\x4F\x64\x77\xCA\x9E\x94\x9F\x52\x0E\xA5\x1C\x4A\xF9\xA3\xBE\xDA\xEA\x97\xA3\xCE\xD8\xEF\x8E\x31\x1B\x9C\x1B\xC4\xD8\xB2\xDB\x79\xC0\x79\xC0\xE9\x48\x4D\x4B\xED\x98\x9A\x99\x9A\x9D\x5A\x98\xDA\x37\xD5\x9B\x3A\x30\x75\x50\xEA\x89\xA9\x83\x53\x87\xA6\x0E\x4D\xBD\x20\x75\x66\x6A\x59\xAA\x2F\x75\x7E\xEA\xFC\xD4\x65\xA9\xCB\x52\xAF\x4C\xBD\x36\xF5\xC6\xD4\x95\xA9\x37\xA7\xDE\x9A\x7A\x7B\xEA\xDF\x53\xEF\x4C\xBD\x33\xF5\xEE\xD4\x55\xA9\xF7\xA6\xDE\x97\xBA\x26\xB5\x21\xF5\xA1\xD4\xA7\x53\xB7\xA6\x6E\x4D\x75\xA4\xA5\xA5\x65\xA4\x65\xA6\x65\xA5\x15\xA6\xF5\x4D\x1B\x9C\x36\x34\x6D\x68\xDA\x79\x69\xD3\xD3\x66\xA5\xF9\xD2\xEA\xD2\xEA\xD2\xAE\x3C\xC6\x3B\xB4\x21\x6D\x83\x78\x6F\x76\x1B\xEF\x8C\x92\x9E\x96\x9E\x91\x9E\x99\x9E\x95\x5E\x92\x3E\x34\x7D\x68\xFA\x69\xE9\xA7\xA5\x9F\x95\x7E\x4E\x7A\x59\xBA\x2F\xFD\xA2\xF4\xA5\xE9\x57\xA6\xFF\x35\xFD\xEF\xE9\xEB\xD2\x1F\x4D\x7F\x36\x7D\x43\xFA\x86\xF4\x4D\xE9\xAF\xA4\x53\x86\x37\x63\x60\xC6\xA0\x8C\x11\x19\x63\x33\x2E\xCB\xB8\x3C\xE3\x8A\x8C\x2B\x32\xAE\xCA\xB8\x36\xE3\xFA\x8C\x7B\x33\xEE\xCF\xB8\x3F\x43\xCB\x58\x9B\xF1\x48\xC6\xA3\x19\x1B\x32\x36\x64\x6C\xCA\x78\x29\xE3\x95\x8C\x57\x32\x3E\xCC\xF8\x24\x03\x1D\xD1\x71\x44\xC7\x71\x1D\x27\x74\x0C\x76\x5C\xDE\xF1\xFA\x8E\xC8\xEC\x9B\x39\x3C\x73\x78\xE6\xD4\xCC\xB3\x33\xA7\x67\xCE\xCC\xF4\x65\xFA\x32\xFD\x99\x73\x32\x43\x99\x91\xCC\xDA\xCC\xCB\x32\x6F\xCC\xBC\x31\xF3\xE8\x79\xD8\xFF\x6C\x9E\x58\x97\xBD\x22\xDB\xDA\xA1\xA0\xCE\xC1\xAE\xE1\xAE\x4B\xBB\x5E\xD6\xF5\xEF\x5D\x57\x77\xFD\xB6\xEB\x4F\x5D\xF7\x77\x45\x4E\x5A\x4E\x46\x4E\xA7\x1C\x77\x4E\x71\xCE\x88\x9C\x33\x72\x66\xE5\x04\x73\x42\x39\x91\x9C\xBA\x9C\x47\x73\x76\xE5\xEC\xCA\xF9\x30\xE7\xC3\x1C\x77\xEE\xA2\xDC\xBA\xDC\x2B\x72\xAF\xCE\x5D\x93\xDB\x90\xDB\x90\xBB\x36\xF7\xD7\x5C\xE4\xB1\xBC\xA9\x79\xD5\x79\x91\xBC\x58\x5E\x5D\x5E\x63\xDE\xDA\xBC\xD7\xF2\xD0\xAD\x6B\x37\x77\xB7\xB3\xBA\x69\xDD\xB4\x6E\x8E\xEE\x83\xBA\x8F\xE9\x3E\xA9\xFB\xB2\xEE\xAB\xBB\x3F\xD4\xFD\xE1\xEE\xCF\x74\xFF\xA2\x3B\xF2\x8F\xCB\x9F\x92\x7F\x7A\xFE\xF4\xFC\x4B\xF2\xF9\xBA\xC1\x9A\x5F\xB6\xED\x37\xFC\x66\xEE\x37\xF0\x39\x15\xFB\x57\xE7\x54\xEB\x5D\xCF\xB9\x9E\x73\xBD\x60\xCC\xAD\xFE\xE9\xDA\x2A\xE6\x57\x4D\xAE\xEF\xC5\xFC\xEA\x90\x6B\xBE\x7B\xBE\x7B\xA9\x7B\xA9\x7B\xA5\xFB\x4E\xB7\xE4\x91\x3C\x1D\x3C\x1D\x3C\x4E\x4F\xB6\xA7\x8B\xA7\x8B\x27\xCF\x53\xE0\xE9\xE9\xE9\xE9\xE1\x73\xB0\x42\x4F\xA1\xA7\xAF\xA7\xC8\x33\xC0\x33\xD8\x33\xC4\x33\xDC\x33\xC6\x33\xC1\x73\x9A\xE7\x34\xCF\x32\xCF\x15\x1E\x6B\xAE\x3B\x4B\xFD\x5C\xFD\x4E\x6D\x56\xF7\xAA\x3F\xAB\xF6\x79\xB1\xB7\xA8\xB2\x28\x5C\x14\x2E\xFA\x57\xE6\xE3\x03\xFA\x0F\xE8\xEF\xF0\x26\x79\x8B\xBD\x27\x7A\x4F\xF5\x0E\xF1\x5A\xA3\x31\xEF\xC3\x0F\x79\x75\xAF\xA3\x78\x40\x31\x9F\x67\xAC\x2E\xDE\x58\xCC\xFB\xF3\xD6\xF9\xCD\xEA\xEB\xEF\xDB\x7A\xDF\xE1\xFB\x70\x7F\x5A\x3C\x33\xEE\x8A\xF7\x8D\xF7\x8B\x8F\x88\x87\xE2\x4B\xE3\x77\xC5\x57\xC7\xBF\x88\xE7\x68\x2E\xAD\x87\xB6\x5C\xBB\x4E\xDB\xA8\xBD\xA0\xBD\xAE\xFD\xAA\xD1\x1A\x79\x8D\x63\x4D\x87\x35\xCE\x35\x69\x6B\x7A\xAC\x19\xB1\xA6\x66\xCD\xE5\x6B\x1E\x5D\xB3\x77\xCD\xBE\x35\x2D\x6B\x5A\xD6\x1C\x5E\x73\x64\x8D\xB3\xBE\x57\xBD\xB7\x7E\x6C\x3D\x9F\xCB\x5C\x51\xFF\x88\xB1\x9F\xD2\x54\xFF\x79\xFD\x97\xF5\x3F\xD6\x1F\xAC\x3F\x52\x8F\x86\xC2\x86\x11\x0D\x23\x1B\x46\x37\x4C\x6A\x98\xD5\xB0\xA0\xE1\xA2\x86\x8B\x1A\x2E\x6D\x78\xB8\x61\x5D\xC3\xBA\x86\xC7\x1B\x9E\x68\x78\xBA\x61\x43\xC3\xA6\x86\x4D\x0D\x2F\x34\xBC\xD0\xF0\x41\xC3\x47\x0D\x4D\x0D\xDF\x36\xEC\x6D\xF8\xA5\xE1\x58\x6B\x0E\x6F\xE3\xF4\xC6\x0B\x1A\x03\x8D\x91\xC6\x4F\x1B\xED\xF3\xA6\xD6\x79\x5B\x4B\x52\x4B\x76\x4B\x4E\x4B\x41\x4B\x41\x8B\xAB\xA5\xB0\xA5\xEF\x31\xE7\x31\xEB\x12\xF6\xF6\x5B\x5A\xF7\xF6\x3D\x7A\x89\x5E\xAA\x4F\xD7\xE7\x1C\x63\x1E\x06\x10\x52\x41\xC6\x57\xC3\x8F\x07\xA1\x10\x84\x12\x10\x86\x80\x30\x14\x84\xE1\x20\x4C\x01\x61\x2A\x08\x33\x41\xA8\x03\xE1\x20\xF7\x25\xC2\x9D\x12\xB5\xEE\x71\x42\x26\xB8\x64\x42\x91\x4C\x18\x21\x13\x46\xCA\x84\x09\x32\x61\xAA\x4C\xA8\x95\x09\x75\x32\xE1\x2E\x99\xB0\x5A\x26\xBC\x28\x13\x5E\x95\x09\x6F\xC9\x64\xAC\x83\xEF\x52\x08\xD6\x39\x8E\x75\x86\x63\xAD\x17\xAD\xFD\x51\x24\x11\x4E\xEA\x40\x18\xD1\x81\x70\x76\x07\xC2\xAC\x0E\x84\xCA\x0E\xF4\x6F\xAD\xD7\xF9\xBC\x6C\x56\x32\x61\x41\x32\xA1\x2E\x99\x70\x77\x32\x1D\x35\x7F\x44\x0A\xA1\x4B\x0A\xC1\x9D\x42\x18\x9C\x42\xA8\x4B\x21\x3C\x99\x42\x78\x2E\x85\xB0\x31\x85\x8C\xF1\x9F\x23\xF3\x77\xC6\xFD\x59\x4E\xC2\x12\x27\xA1\xCE\x49\xB8\xD3\x49\xD8\xE4\x24\x6C\x76\x12\x5E\x73\x12\x3E\xE7\x71\xC5\x79\x80\x35\x4F\xB2\xE6\x57\x75\xA9\x84\x9B\x52\xC9\x20\xBA\x8E\x4F\x23\x58\xE7\x57\xD6\xD9\x15\x9F\x17\x1F\x97\x4E\xA8\xCB\x20\xD4\x67\x10\xD6\x66\x10\xD6\x65\x10\xD0\x91\x90\xDF\x91\xD0\x5B\xC0\xCB\xD7\xD4\x1D\xC9\xD8\x63\x7D\xA9\x23\xB5\xAE\xB3\xE5\x4C\xC2\xC9\x99\x84\x65\x99\x84\x87\x33\x09\x5B\x33\x09\x5F\x67\x12\xE4\x4E\x84\xE3\x3B\x11\x46\x0B\x8C\x13\x98\xDA\x89\x10\xED\x44\x58\x20\xB0\xAC\x13\xE1\x91\x4E\x84\xE7\x3B\x11\x5E\xEA\x44\x78\x5F\xE0\x43\x01\xFB\xBC\xA3\x5F\x16\xA1\x2E\x8B\x70\x55\x16\x61\xB9\xC0\xB5\x59\x84\x1B\xB2\x08\x2B\xB2\x08\x77\x65\x11\x56\x65\x11\xD6\x64\x91\x31\x1F\xF9\x38\xEB\xDF\x5F\xDF\x0E\x15\xB0\xD6\xB3\x7C\x1D\xEB\xCB\x26\xA0\x33\xE1\x84\xCE\x84\x71\x9D\x09\x13\x3B\x13\xCA\x3A\x13\x7C\x9D\x09\x75\x9D\x09\x0F\x77\x26\xBC\xD4\x99\xF0\x72\x67\xC2\x66\x81\xBA\x2E\x84\x87\xBA\x10\xDE\xED\x42\xF8\xA0\x0B\x01\x5D\x09\x03\xBA\x12\x46\x0B\xD4\x75\x25\x34\x74\x25\x3C\x25\x60\x9D\xDF\x21\x97\xD0\x2F\x97\xB0\x5A\x9C\x21\xEA\xB9\x7F\xBE\x2F\x33\x20\x8F\x30\x5C\xA0\x54\x60\x75\x1E\x41\xCB\x23\x34\xE4\x11\xB6\xE6\x11\x76\x0B\x7C\x26\x80\x6E\x26\x52\xBB\x11\x06\x76\x23\x94\x08\x4C\x15\xB8\xA0\x1B\xE1\x9A\x6E\x84\xBB\x04\x36\x75\x23\xEC\xE7\x71\x6C\xE7\x36\xFD\xF3\x09\x23\x04\xA2\xF9\x84\x15\xF9\x04\x14\x10\x92\x0A\x08\xC9\x05\x84\x94\x02\x42\x6A\x01\xC1\x5B\x40\x18\x2B\x70\xAC\x75\xEE\x35\x62\x6D\xCB\xD1\xC4\x08\x7B\x19\x61\xAD\xCB\x84\xB5\xCF\x66\xED\xAB\x59\xFB\x40\xD6\xF9\xA5\x75\xB6\x35\x62\x2E\xE1\xC2\xB9\xD4\x7A\xAE\x85\x79\x84\x01\xF3\x08\x23\xE6\x11\x46\xCD\x23\x94\xCF\x23\x2C\x9C\x47\xB8\x64\x1E\x61\x05\x97\x8B\xB3\x58\x84\x09\x13\xC3\x84\xA9\x02\xB7\x84\x09\xAB\xC2\x84\xA6\x30\x61\xB7\xD8\x73\xE6\x40\x84\xB0\x4F\x90\xA5\xF9\xFC\x19\x37\x10\x92\x6F\x30\xE7\xF8\xF6\x75\x9C\x35\xDF\x8F\xAC\x23\xB4\x3C\x42\x7F\xBA\xEF\xF5\x7F\xF3\xBE\xF3\xA6\x9D\x84\x17\x76\x12\xDE\xDF\x49\xF8\x70\x27\xE1\xE0\x4E\xC2\xA1\x9D\x84\xCE\xBB\x08\x5D\x77\x11\x4E\xD8\x45\x38\x69\x17\xE1\xB4\x5D\x84\xA9\xBB\x08\xA1\x5D\x84\xC8\x2E\xC2\xF2\x5D\x84\x6B\x77\x11\xD6\xEC\x22\x34\xEC\x22\xBC\xB0\x8B\xF0\xD2\x2E\x73\x1F\x1B\xBB\x09\xEA\x6E\xC2\xC9\xBB\x09\x43\x77\x13\x4E\x13\xD8\xF4\x29\xE1\xBB\x4F\x09\xF8\x9A\xF0\xD2\xD7\x64\x9C\x77\x8F\x12\x67\xDE\x1C\xFF\x3D\x37\x36\xCF\x8D\xFF\xD3\xFD\x95\xC9\xBE\x70\xBB\xF5\xD8\xB1\xE7\xD5\x6D\xF3\xE9\x57\x33\xB6\x64\x6C\xCD\x78\xCF\x98\x57\x4F\xF6\xC5\x02\x89\x07\xD4\xF6\xF5\x5C\xFB\xB5\xDC\x53\xC6\x3A\x0E\x05\xBD\x0A\xD4\x82\x0B\x0A\x66\x17\xF8\x0B\xE6\x15\x2C\x2C\x58\x5C\xF0\x5C\x01\x98\xCE\xEC\x73\xC3\xBE\x9E\x7E\x9E\x81\x9E\x81\xC6\x9C\x6F\x96\x67\xB9\x67\x96\xBA\x54\xED\xA1\x5D\x6D\x9B\x4F\xE9\x9A\x39\x87\xA9\x68\x9C\xD3\x18\x68\xE4\xF3\x15\x6B\xCE\x31\xD9\x1F\x29\xAF\xE2\x2B\xF1\xFC\x93\xF3\x4F\xCD\x9F\x60\xCC\x73\x27\x07\xAA\x67\xD7\x5A\x05\xCC\x63\x79\xEE\xBC\x7E\x79\xDE\xBC\x53\xF3\x46\xE4\x8D\xC8\x1B\x9D\x77\x7A\xDE\xE4\x40\xC8\xEF\x8B\x96\x99\x26\x32\xBF\x33\xEE\x0B\x9D\x91\x38\xCA\xFD\x67\xF3\x99\xC9\x81\x9A\x5A\x60\xEB\x7D\xFA\x7D\x68\xED\xD3\x26\x07\x4D\x3B\x58\xBE\x0E\xFE\xC4\xA8\x33\x1D\x44\x44\x32\xC9\xE4\x20\x07\x75\xA0\x0E\x94\x42\x29\x94\x4A\xA9\x94\x4E\xE9\xD4\x91\x3A\x52\x27\xEA\x44\xD9\x94\x4D\x5D\xA8\x0B\xE5\x50\x0E\xE5\x51\x1E\x75\xA7\xEE\x54\x40\x05\xE4\x22\x17\x79\xC8\x43\xC7\xD1\x71\xD4\x8B\x7A\x51\x6F\xEA\x4D\x7D\xA8\x0F\xF5\xA3\x7E\x54\x44\x45\x34\x80\x06\x50\x31\x15\xD3\x20\x1A\x44\x27\xD2\x89\x74\x32\x9D\x42\x25\x54\x42\x43\x68\x08\x0D\xA3\x61\x34\x82\x46\xD0\x48\x1A\x49\xA3\x69\x34\x8D\xA5\xB1\x34\x9E\x26\xD0\x24\x9A\x44\x53\x68\x0A\x9D\x4E\xA7\xD3\x19\x74\x06\x4D\xA3\x69\x74\x36\x9D\x4D\xE7\xD2\xB9\x74\x3E\x9D\x4F\x33\x68\x06\xCD\xA4\x99\x54\x46\x65\xE4\x23\x1F\x95\x53\x39\xF9\xC9\x4F\x95\x54\x49\x01\x0A\xD0\x3C\x9A\x47\xD5\x54\x4D\x61\x0A\xD3\x7C\x9A\x4F\x35\x54\x43\xB5\x54\x4B\x0B\x69\x21\x5D\x44\x17\xD1\x12\x5A\x42\x97\x52\x1D\x2D\xA3\x65\x74\x25\x5D\x49\xCB\x69\x39\x5D\x4F\x37\xD0\xCD\x74\x33\xDD\x4A\xB7\xD2\xED\x74\x07\xDD\x4D\x77\xD3\x3D\x74\x0F\xDD\x4B\xF7\xD2\xFD\x74\x3F\xAD\xA1\x35\xD4\x40\x8D\xF4\x20\x3D\x48\x6B\x69\x2D\x3D\x46\x8F\xD1\x13\xF4\x04\x3D\x4D\xCF\xD0\x06\xDA\x48\xAF\xD0\x2B\xF4\x1A\xBD\x46\xFF\xA4\x7F\xD2\x9B\xF4\x26\x6D\xA5\xAD\xF4\x36\xBD\x4D\xDB\x69\x3B\xED\xA4\x9D\xF4\x2E\xBD\x4B\xEF\xD3\xFB\xF4\x21\x7D\x44\x9F\xD0\x27\xB4\x9B\x76\xD3\x67\xF4\x19\x7D\x41\x5F\xD0\x57\xF4\x15\x7D\x43\xDF\xD0\x77\xF4\x1D\xFD\x40\x3F\xD0\x8F\xB4\x87\x7E\xA6\x9F\xE9\x57\xFA\x95\x0E\xD0\x01\x6A\xA1\x16\x3A\x4C\x87\x49\x27\x9D\x48\x22\x49\x96\x64\xC9\x21\x39\xA4\x0E\x52\x07\x29\x45\x4A\x91\x52\xA5\x54\x29\x5D\x4A\x97\x3A\x4A\x1D\xA5\x4E\x52\x27\x29\x5B\xCA\x96\xBA\x48\x5D\xA4\x1C\x29\x47\xCA\x93\xF2\xA4\xEE\x52\x77\xA9\x40\x2A\x90\x5C\x92\x8B\x2F\x89\xA4\xE3\xA4\xE3\xA4\x5E\x52\x2F\xA9\xB7\xD4\x5B\xEA\x23\xF5\x91\xFA\x49\xFD\xA4\x22\xA9\x48\x1A\x20\x0D\x90\x8A\xA5\x62\x69\x90\x34\x58\x1A\x22\x0D\x91\x86\x4B\x23\xA4\x91\xD2\x48\x69\x9C\x34\x4E\x9A\x20\x4D\x90\x26\x49\x93\xA4\x29\xD2\x14\xE9\x74\xE9\x16\xE9\x56\xE9\x61\x69\xBE\x3C\x5F\xAE\x91\x6B\xE4\x85\xF2\x42\xF9\x62\xF9\x12\x79\xA5\xBC\x52\x7E\x40\x7E\x53\xDE\x2A\x6F\x93\x77\xC8\xBB\xE4\xF7\xE4\xF7\xE4\x0F\xE4\x0F\xE4\x8F\xE4\x8F\xE4\x4F\xE4\x4F\xE4\xDD\xF2\x6E\xF9\x33\xF9\x33\xF9\x0B\xF9\x0B\xF9\x2B\xF9\x2B\xF9\x1B\xF9\x1B\xF9\x3B\xF9\x3B\xF9\x07\xF9\x07\xF9\x47\xF9\x67\xF9\x57\xF9\x57\x79\xBF\xBC\x5F\x6E\x91\x0F\xC9\x5E\xA5\x4C\xF1\x29\x3E\xA5\x5C\x29\x57\xFC\x8A\x5F\xA9\x54\x2A\x95\x80\x12\x50\xE6\x29\xF3\x94\x6A\xA5\x5A\x09\x2B\x61\x65\xBE\x32\x5F\xA9\x51\x6A\x94\x5A\xA5\x56\x59\xA8\x2C\x54\x16\x2B\x8B\x95\x8B\x95\x8B\x95\x4B\x94\x4B\x94\xA5\xCA\x52\xE5\x32\xE5\x32\xE5\x3A\xE5\x3A\xE5\x06\xE5\x06\x65\x85\xB2\x42\xB9\x49\xB9\x49\xB9\x45\xB9\x45\xB9\x55\xB9\x55\xB9\x4D\xB9\x4D\xB9\x5D\xB9\x5D\xB9\x43\xB9\x43\xB9\x4B\xB9\x4B\x59\xA5\xAC\x52\xEE\x51\xEE\x51\xEE\x55\xEE\x55\xEE\x57\xEE\x57\x34\x45\x53\xEA\x95\x7A\xA5\x51\x69\x54\x1E\x54\x1E\x54\x1E\x56\x1E\x56\xD6\x29\xEB\x94\x47\x95\x47\x95\xC7\x95\xC7\x95\x27\x95\x27\x95\xA7\x95\xA7\x95\x67\x95\x67\x95\x0D\xCA\x06\x65\xA3\xB2\x51\x79\x41\x79\x41\x79\x49\x79\x49\x79\x45\x79\x45\x79\x55\x79\x55\x79\x5D\x79\x5D\xF9\xA7\xF2\x4F\xE5\x4D\xE5\x2D\x65\x9B\xB2\x4D\x79\x47\x79\x47\xD9\xA1\xEC\x50\x76\x29\xBB\x94\xF7\x94\xF7\x94\x0F\x94\x0F\x94\x8F\x94\x8F\x94\x4F\x94\x4F\x94\xDD\xCA\x6E\xE5\x33\xE5\x33\xE5\x0B\xE5\x0B\xE5\x2B\xE5\x2B\xE5\x1B\xE5\x1B\xE5\x3B\xE5\x3B\xE5\x07\xE5\x07\xE5\x47\xE5\x47\xE5\x27\xE5\x27\xE5\x67\xE5\x67\xE5\x57\xE5\x57\x65\x9F\xB2\x4F\x39\xA0\x1C\x50\x5A\x94\x16\xE5\xB0\x72\x58\xD1\x15\x5D\xE1\x2F\xAF\xEC\x90\x1D\xDC\x75\x70\x74\x70\xA4\x38\x52\x1C\xA9\x8E\x54\x47\xBA\x23\xDD\xD1\xD1\xD1\xD1\xD1\xC9\xD1\xC9\x91\xED\xC8\x76\x74\x71\x74\x71\xE4\x38\x72\x1C\x79\x8E\x3C\x47\x77\x47\x77\x47\x81\xA3\xC0\xE1\x72\xB8\x1C\x1E\x87\xC7\x71\x9C\xE3\x38\x47\x2F\x47\x2F\x47\x6F\x47\x6F\x47\x1F\x47\x1F\x47\x3F\x47\x3F\x47\x91\xA3\xC8\x31\xC0\x31\xC0\xDC\xDF\xCA\x3C\x98\x79\x38\x53\xCF\xDC\x9F\x7D\x38\x9B\xAF\xE9\x51\xD0\x4F\xF4\xAF\x7F\x2F\x20\x46\x4C\x66\x32\x73\x30\x07\xEB\xC0\x3A\xB0\x14\x96\xC2\x52\x59\x2A\x4B\x67\xE9\xAC\x23\xEB\xC8\x3A\xB1\x4E\x2C\x9B\x65\xB3\x2E\xAC\x0B\xCB\x61\x39\x2C\x8F\xE5\xB1\xEE\xAC\x3B\x2B\x60\x05\xCC\xC5\x5C\xCC\xC3\x3C\xEC\x38\x76\x1C\xEB\xC5\x7A\xB1\xDE\xAC\x37\xEB\xC3\xFA\xB0\x7E\xAC\x1F\x2B\x62\x45\x6C\x00\x1B\xC0\x8A\x59\x31\x1B\xC4\x06\xB1\x13\xD9\x89\xEC\x64\x76\x32\x1B\xCC\x06\xB3\x53\xD9\xA9\x6C\x28\x1B\xCA\x86\xB3\xE1\xAC\x94\x95\xB2\x51\x6C\x14\x1B\xC3\xC6\xB0\x71\x6C\x1C\x9B\xC0\x26\xB0\x49\x6C\x12\x9B\xC2\xA6\xB0\xD3\xD9\xE9\xEC\x0C\x76\x06\x9B\xC6\xA6\xB1\xB3\xD9\xD9\xEC\x5C\x76\x2E\x3B\x9F\x9D\xCF\x66\xB0\x19\x6C\x26\x9B\xC9\xCA\x58\x19\xF3\x31\x1F\x2B\x67\xE5\xCC\xCF\xFC\xAC\x92\x55\xB2\x00\x0B\xB0\x79\x6C\x1E\xAB\x66\xD5\x2C\xCC\xC2\x6C\x3E\x9B\xCF\x6A\x58\x0D\xAB\x65\xB5\x6C\x21\x5B\xC8\x16\xB3\xC5\xEC\x62\x76\x31\xBB\x84\x5D\xC2\x96\xB2\xA5\xEC\x32\x76\x19\x5B\xC6\x96\xB1\x2B\xD9\x95\xEC\x6A\x76\x35\xBB\x86\x5D\xC3\xAE\x63\xD7\xB1\x1B\xD8\x0D\x6C\x05\x5B\xC1\x6E\x62\x37\xB1\x5B\xD8\x2D\xEC\x56\x76\x17\x5B\xC5\x56\xB1\x7B\xD8\x3D\xEC\x5E\x76\x2F\xBB\x9F\xDD\xCF\x34\xA6\xB1\x7A\x56\xCF\x1A\x59\x23\x7B\x90\x3D\xC8\x1E\x66\x0F\xB3\x75\x6C\x1D\x7B\x94\x3D\xCA\x1E\x67\x8F\xB3\x27\xD9\x93\xEC\x69\xF6\x34\x7B\x96\x3D\xCB\x36\xB0\x0D\x6C\x23\xDB\xC8\x9E\x67\xCF\xB3\x17\xD9\x8B\xEC\x65\xF6\x32\xDB\xCC\x36\xB3\xD7\xD8\x6B\xEC\x0D\xF6\x06\xDB\xC2\xB6\xB0\xB7\xD8\x5B\x6C\x1B\xDB\xC6\xDE\x61\xEF\xB0\x1D\x6C\x07\xDB\xC5\x76\xB1\xF7\xD8\x7B\xEC\x03\xF6\x01\xFB\x88\x7D\xC4\x3E\x61\x9F\xB0\xDD\x6C\x37\xFB\x8C\x7D\xC6\xBE\x60\x5F\xB0\xAF\xD8\x57\xEC\x1B\xF6\x0D\xFB\x8E\x7D\xC7\x7E\x60\x3F\xB0\x1F\xD9\x8F\xEC\x27\xF6\x13\xFB\x99\xFD\xCC\x7E\x65\xBF\xB2\x7D\x6C\x1F\x3B\xC0\x0E\xB0\x16\xD6\xC2\x0E\xB3\xC3\x4C\x67\x1D\x5C\x99\xAE\x2E\x2E\xB7\xAB\xB7\xCB\xEB\x3A\xD9\x35\xC2\x35\xC6\xD8\xB3\x99\xE5\xAA\x74\x45\x8C\xBD\x9A\xAB\x5D\x2B\x5D\xB7\xB9\x56\xBB\x34\xD7\x5A\x63\xDF\xE6\x49\xDB\xBE\xCD\x66\xB1\x6F\xB3\xCB\xD5\xE4\xFA\x4A\xEC\xDB\xEC\x73\x39\x3D\x4E\x4F\x86\xA7\xA3\x27\xDB\x93\xED\x19\xE0\x19\xE0\x39\xC1\x73\x82\x67\xB0\xB1\x37\x33\xD4\x33\x56\xEC\xCD\x5C\xE1\xB9\xC2\xE3\x55\x2F\x54\x7D\xAA\x4F\xF5\xAB\x73\xD4\x2A\xB5\x4A\x9D\xAB\xCE\x55\x83\x6A\x50\x9D\xAF\xCE\x57\x6B\xD4\x98\xBA\x40\xBD\x58\xBD\x4C\xBD\x4C\x5D\xA6\x2E\x53\xAF\x54\xAF\x54\xAF\x56\xAF\x56\xAF\x51\xAF\x51\xAF\x53\xAF\x53\x6F\x50\x6F\x50\x57\xA8\x2B\xD4\x9B\xD4\x9B\xD4\x5B\xD4\x5B\xD4\x5B\xD5\x5B\xD5\xDB\xD4\xDB\xD4\xDB\xD5\xDB\xD5\x3B\xD4\x3B\xD4\xBB\xD4\xBB\xD4\x55\xEA\x2A\xF5\x1E\xF5\x1E\xF5\x5E\xF5\x5E\xF5\x7E\xF5\x7E\x55\x53\x35\xB5\x5E\xAD\x57\x1B\xD5\x46\xF5\x41\xF5\x41\xF5\x61\xF5\x61\x75\x9D\xBA\x4E\x7D\x54\x7D\x54\x7D\x5C\x7D\x5C\x7D\x52\x7D\x52\x7D\x5A\x7D\x5A\x7D\x56\x7D\x56\xDD\xA0\x6E\x50\x37\xAA\x1B\xD5\xE7\xD5\xE7\xD5\x17\xD5\x17\xD5\x97\xD5\x97\xD5\xCD\xEA\x66\xF5\x35\xF5\x35\xF5\x0D\xF5\x0D\x75\x8B\xBA\x45\x7D\x4B\x7D\x4B\xDD\xA6\x6E\x53\xDF\x51\xDF\x51\x77\xA8\x3B\xD4\x5D\xEA\x2E\xF5\x3D\xF5\x3D\xF5\x03\xF5\x03\xF5\x23\xF5\x23\xF5\x13\xF5\x13\x75\xB7\xBA\x5B\xFD\x4C\xFD\x5C\xFD\x5E\xFD\x5E\x6D\x56\x9B\xD5\x9F\x13\xF6\x9F\x4A\xE3\xA5\xF1\x51\xF1\x51\xF1\x31\xF1\x31\xF1\x71\xF1\x71\xF1\x09\xF1\x09\xF1\x49\xF1\x49\xF1\x29\xF1\x29\xF1\xD3\xE3\xA7\xC7\xCF\x88\x9F\x11\x9F\x16\x9F\x16\x3F\x3B\x7E\x76\xFC\xDC\xF8\xB9\xF1\xF3\xE3\xE7\xC7\x67\xC4\x67\xC4\x67\xC6\x67\xC6\xCB\xE2\x65\x71\x5F\xDC\x17\x2F\x8F\x97\xC7\xFD\x71\x7F\xBC\x32\x5E\x19\x0F\xC4\x03\xF1\x79\xF1\x79\xF1\xEA\x78\x75\xFC\xB2\xF8\x65\xF1\x65\xF1\x65\xF1\x2B\xE3\x57\xC6\xAF\x8E\x5F\x1D\xBF\x26\x7E\x4D\xFC\xBA\xF8\x75\xF1\x1B\xE2\x37\xC4\x57\xC4\x57\xC4\x6F\x8A\xDF\x14\xBF\x25\x7E\x4B\xFC\xD6\xF8\xAD\xF1\xDB\xE2\xB7\xC5\x6F\x8F\xDF\x1E\xBF\x23\x7E\x47\xFC\x38\xED\x38\xAD\x97\xD6\x4B\xEB\xAD\xF5\xD6\xFA\x68\x7D\xB4\x7E\x5A\x3F\xAD\x48\x2B\xD2\x06\x68\xC5\xDA\x20\x6D\x90\x76\xA2\x76\xA2\x76\xB2\x76\xB2\x36\x58\x1B\xAC\x9D\xAA\x9D\xAA\x0D\xD5\x86\x6A\xC3\xB5\xE1\x5A\xA9\x56\xAA\x8D\xD2\x46\x69\x63\xB4\x31\xDA\x38\x6D\x9C\x36\x41\x9B\xA0\x4D\xD2\x26\x69\x53\xB4\x29\xDA\xE9\xDA\xE9\xDA\x19\xDA\x19\xDA\x34\x6D\x9A\x76\xB6\x76\xB6\x76\xAE\x76\xAE\x76\xBE\x76\xBE\x36\x43\x9B\xA1\xCD\xD4\x66\x6A\x65\x5A\x99\xE6\xD3\x7C\x5A\xB9\x56\xAE\xF9\x35\xBF\x56\xA9\x55\x6A\x01\x2D\xA0\xCD\xD3\xE6\x69\xD5\x5A\xB5\x16\xD6\xC2\xDA\x7C\x6D\x91\x76\x91\x76\x91\xB6\x44\x5B\xA2\x2D\xD5\x96\x6A\x97\x69\x97\x69\xCB\xB4\x65\xDA\x95\xDA\x95\xDA\xD5\xDA\xD5\xDA\xF5\xDA\xF5\xDA\x8D\xDA\x8D\xDA\x4D\xDA\x4D\xDA\x2D\xDA\xAD\xDA\x6D\xDA\x6D\xDA\xED\xDA\xED\xDA\x1D\xDA\x1D\xDA\x5D\xDA\x5D\xDA\x2A\x6D\x95\x76\x8F\x76\x8F\x76\xAF\x76\xAF\x76\xBF\x76\xBF\xC6\x5D\xBD\x56\xAF\x3D\xAC\x3D\xAC\x3D\xAE\x3D\xAE\x3D\xA9\x3D\xA9\x3D\xAD\x3D\xAD\x3D\xAB\x3D\xAB\x6D\xD0\x36\x68\x1B\xB5\x8D\xDA\x8B\xDA\x8B\xDA\xAB\xDA\xAB\xDA\xEB\xDA\xEB\xDA\x6F\xDA\x6F\xDA\x41\xED\xA0\x31\x97\x9C\xD5\x58\xD5\x18\x69\xDC\xD8\x68\xED\x7D\xF1\xB9\x24\xEC\xDC\x5F\xB1\x4F\xD4\xCA\xED\x15\xEB\x70\x8B\xBB\xDB\x6D\x3B\x61\xD0\x76\xC2\x69\xB6\x75\x5B\xE5\x76\xC2\xE5\xDB\x09\x77\x6C\x27\x3C\xF1\x07\xEB\xB3\xB7\xB6\x13\xBE\xDD\x4E\x90\xC5\x7A\xEC\x64\xB1\xDE\x9A\xB7\x83\x70\xD5\x0E\xC2\xAA\x1D\x84\x67\x76\x10\xDE\xD9\x41\x68\xE6\x6B\xB9\x9D\x84\x1E\x3B\x09\xA7\xEE\x24\x9C\xB3\x93\x10\xDE\x49\xB8\x76\xA7\xB9\x3E\xB3\xAF\xCB\x76\x27\xAC\xCB\xBA\x27\xAC\xCB\xCE\x4E\x58\x97\xAD\x48\x58\x97\xBD\x26\xD6\x66\x1C\x16\x17\x79\x72\x02\x01\x79\xAD\x74\xF4\x19\x4D\x4C\x8E\xC9\x17\xC9\x17\xC9\xE7\x3B\xCE\x77\x8C\x48\x1A\x61\x9C\xB1\x58\x67\x28\xF6\xF3\x93\xF9\x29\xF3\x53\xC6\x66\x8C\x35\xD6\x15\x87\x32\x0F\x65\xEE\xCA\xD9\x95\x33\x2A\x77\x54\xAE\xD6\x4D\xEB\xB6\x28\xFF\x92\x7C\xB5\x60\xAE\xC1\x67\xB9\xA3\x60\x63\x81\x7D\x7D\xB0\x44\xBD\x44\x0D\x17\x85\xC5\xFE\xAD\x43\xEC\xDF\x9E\xEA\xBD\xCB\x7B\xB7\xF7\x90\xF7\x88\xB7\xCB\xEA\x2E\xAB\xF7\xDF\x77\xF8\xBE\xB4\x78\x5A\x7C\x69\x7C\x69\xFC\xCE\xF8\x5D\xC6\x9E\x6C\x44\x8B\x68\xCB\xB5\xE5\xDA\x7E\xED\x80\xF6\x56\xFD\x5B\xF5\x5F\xD6\x7F\x59\x1F\x69\x88\x34\x7C\xD4\xF0\x51\xC3\xCF\x0D\xBF\x34\x5C\xD0\x58\xD6\x18\x68\x0C\x34\x5A\xDC\x34\xE3\x7C\x51\xEC\x13\xFC\xDE\xFA\xDF\x5A\xAF\x5A\xEB\xD1\xC9\xED\x97\x53\xAD\xEB\xA0\x67\xE9\x59\xDA\x44\x2F\xD2\x5F\xA4\xBF\x48\x6D\x67\x51\x26\x8F\xDA\x7E\x1E\xF5\x67\x67\x51\x48\xEE\xF2\xA7\xE7\x4E\xD1\xFF\x9E\x3B\xFD\x6F\x3A\x77\x1A\xF3\x2F\x9D\x3B\xFD\xA7\x67\x4E\xE8\xF4\x3F\x3F\x63\xFA\x77\xCF\x96\xCC\x73\xA5\x91\xB9\xA3\xFF\xCD\xB3\xA5\x3F\x3E\x57\x5A\x78\xD4\x59\xD2\x89\x9E\x53\x3C\xDE\xA2\xCA\x7F\xE9\x5C\x26\xC9\x9B\xE4\x1D\x22\xCE\x63\x56\x89\xF3\x18\xFD\x0F\xCF\x63\x3A\xAF\xEE\x6A\x9C\xC9\xEC\xBB\x0F\xF7\xA7\xB6\x9E\xC9\x84\xE2\x21\xE3\x3C\x66\x85\xB6\x42\xDB\xA7\xED\xD3\x5A\xFE\x83\x73\x98\xA6\xFA\xCF\xEB\xBF\x3A\xE6\x19\x4C\xB8\x61\xFE\x9F\x9E\xC3\x7C\x28\xCE\x61\xF6\x1E\xF3\x1C\x66\xD3\xEF\x9C\xBF\xFC\xA7\xE7\x2E\x16\xCF\xE0\x58\xFC\x97\xFF\xE9\x7E\xC5\xFF\xAA\xF3\x97\xA9\xE2\xFC\xE5\xFF\xF5\xF3\x96\xFF\x9E\xAF\xFC\xDF\x79\xBE\xF2\xDF\x73\x95\xFF\xD9\xB9\x4A\xE2\x79\x4A\xE2\x39\xCA\xFF\xB6\xF3\x12\x71\x7E\xF0\xBB\xE7\x06\xFF\x3D\x27\xF8\x9F\x9D\x13\x08\xDA\xD8\xCB\xF4\x32\xBD\x4A\xAF\xD2\x1B\xF4\x06\xED\xA5\xBD\xB4\xDC\xB5\xC2\xF5\x37\xD7\x2A\xD7\x1A\xD7\xC3\xAE\xF5\xAE\xF5\xAE\x7F\xBA\xFE\xE9\x3A\xE4\x3A\xE4\x9A\x5C\xDB\x76\x1E\x60\x9E\x01\x7C\xCC\x87\x1E\x92\x48\x22\x85\x14\x4A\xA2\x24\x4A\xA6\x64\x72\x92\x93\xD2\x28\x8D\x32\x28\x83\x32\x29\x93\xB2\x28\x8B\x3A\x53\x67\xEA\x4A\x5D\x29\x97\x72\xA9\x1B\x75\xA3\x7C\xCA\x27\x46\x8C\xDC\xE4\xA6\x1E\xD4\x83\x7A\x52\x4F\x3A\x9E\x8E\xA7\x42\x2A\xA4\xBE\xD4\x97\x54\x52\xA9\x3F\xF5\x27\x2F\x79\x69\x20\x0D\xA4\x13\xE8\x04\x3A\x89\x4E\xA2\xC1\x34\x98\x4E\xA5\x53\x69\x28\x0D\xA5\xE1\x34\x9C\x4A\xA9\x94\x46\xD1\x28\x1A\x43\x63\x68\x1C\x8D\xA3\x89\x34\x91\x26\xD3\x64\x3A\x8D\x4E\xA3\xA9\x34\x95\xCE\xA4\x33\xE9\x2C\x3A\x8B\xCE\xA1\x73\xE8\x3C\x3A\x8F\xA6\xD3\x74\xBA\x80\x2E\xA0\x0B\xE9\x42\x9A\x45\xB3\x68\x36\xCD\xA6\x0A\xAA\xA0\x39\x34\x87\xAA\xA8\x8A\xE6\xD2\x5C\x0A\x52\x90\x42\x14\xA2\x08\x45\x28\x4A\x51\x8A\x51\x8C\x16\xD0\x02\x5A\x44\x8B\xE9\x62\xBA\x98\x2E\xA1\x4B\xE8\x32\xBA\x9C\xAE\xA0\x2B\xE8\x2A\xBA\x9A\xAE\xA1\xEB\xE8\x46\xBA\x89\x6E\xA1\xBF\xD0\x5F\xE9\x6F\x74\x27\xDD\x45\xAB\x68\x35\xFD\x83\xFE\x41\xF7\xD1\x7D\x14\x27\x8D\xEA\xA9\x9E\x1E\xA0\x07\xE8\x21\x7A\x98\xD6\xD1\xA3\xF4\x38\x3D\x4E\x4F\xD2\x53\xB4\x9E\xD6\xD3\x4B\xF4\x12\x6D\xA6\xCD\xF4\x3A\xBD\x4E\x5B\x68\x0B\xBD\x45\x6F\xD1\x36\xDA\x46\xEF\xD0\x3B\xB4\x83\x76\xD0\x2E\xDA\x45\xEF\xD1\x7B\xF4\x01\x7D\x40\x1F\xD3\xC7\xD4\x44\x4D\xF4\x29\x7D\x4A\x9F\xD3\xE7\xF4\x25\x7D\x49\x5F\xD3\xD7\xF4\x2D\x7D\x4B\xDF\xD3\xF7\xD4\x4C\xCD\xF4\x13\xFD\x44\xBF\xD0\x2F\xF4\x1B\xED\xA7\x83\x74\x90\x0E\xD1\x21\x3A\x42\x47\x08\x12\x24\xEE\x14\x49\x91\x92\xA4\x24\x29\x59\x4A\x96\x9C\x92\x53\x4A\x93\xD2\xA4\x0C\x29\x43\xCA\x94\x32\xA5\x2C\x29\x4B\xEA\x2C\x75\x96\xBA\x4A\x5D\xA5\x5C\x29\x57\xEA\x26\x75\x93\xF2\xA5\x7C\x89\x49\x4C\x72\x4B\x6E\xA9\x87\xD4\x43\xEA\x29\xF5\x94\x8E\x97\x8E\x97\x0A\xA5\x42\xA9\xAF\xD4\x57\x52\x25\x55\xEA\x2F\xF5\x97\xBC\x92\x57\x1A\x28\x0D\x94\x4A\xA4\x53\xA5\xA1\xD2\x30\xA9\x54\x2A\x95\x46\x49\x63\xA5\xF1\xD2\x78\x69\xA2\x34\x51\x9A\x2C\x4D\x96\x4E\x93\x4E\x93\x22\x72\x44\x8E\xCA\x51\x79\x81\xBC\xE0\x18\x7C\xBF\x15\xF2\x4D\x06\xE7\xAF\x51\x7E\x4B\x7E\x4B\x7E\x5B\xDE\x2E\xBF\x2B\xBF\x2B\xBF\x2F\xBF\x2F\x7F\x28\x7F\x28\x7F\x2C\x7F\x2C\x37\xC9\x4D\xF2\xA7\xF2\xA7\xF2\xE7\xF2\xE7\xF2\x97\xF2\x97\xF2\xD7\xF2\xD7\xF2\xB7\xF2\xB7\xF2\xF7\xF2\xF7\x72\xB3\xDC\x2C\xFF\x22\xFF\x22\xEF\x93\xF7\xC9\x07\xE4\x83\xF2\x61\x79\x80\x32\x4B\x99\xA5\xCC\x56\x66\x2B\x15\x4A\x85\x32\x47\x99\xA3\x54\x29\x55\xCA\x5C\x65\xAE\x12\x54\x82\x4A\x48\x09\x29\x11\x25\xA2\x44\x95\xA8\x12\x53\x62\xCA\x02\x65\x81\xB2\x48\x59\xA4\x5C\xA4\x5C\xA4\x2C\x51\x96\x28\x97\x2A\x97\x2A\x75\x4A\x9D\x72\xAD\x72\xAD\x72\xBD\x72\xBD\x72\xA3\x72\xA3\xB2\x52\x59\xA9\xDC\xAC\xDC\xAC\xFC\x45\xF9\x8B\xF2\x57\xE5\xAF\xCA\xDF\x94\xBF\x29\x7F\x57\xFE\xAE\xDC\xA9\xDC\xA9\xDC\xAD\xDC\xAD\xAC\x56\x56\x2B\xFF\x50\xFE\xA1\xDC\xA7\xDC\xA7\xC4\x95\xB8\xB2\x46\x59\xA3\x34\x28\x0D\xCA\x03\xCA\x03\xCA\x43\xCA\x43\xCA\x5A\x65\xAD\xF2\x88\xF2\x88\xF2\x98\xF2\x98\xF2\x84\xF2\x84\xF2\x94\xF2\x94\xF2\x8C\xF2\x8C\xB2\x5E\x59\xAF\x3C\xA7\x3C\xA7\x6C\x52\x9E\x57\x5E\x54\x5E\x54\x5E\x56\x5E\x56\x36\x2B\x9B\x95\xD7\x94\xD7\x94\x37\x94\x37\x94\x2D\xCA\x16\x65\xAB\xB2\x55\x79\x5B\x79\x5B\xD9\xAE\x6C\x57\x76\x2A\x3B\x95\x77\x95\x77\x95\xF7\x95\xF7\x95\x0F\x95\x0F\x95\x8F\x95\x8F\x95\x26\xA5\x49\xF9\x54\xF9\x54\xF9\x5C\xF9\x5C\xF9\x52\xF9\x52\xF9\x5A\xF9\x5A\xF9\x56\xF9\x56\xF9\x5E\xF9\x5E\x69\x56\x9A\x95\x3D\xCA\x1E\x65\xAF\xB2\x57\xF9\x45\xF9\x45\xF9\x4D\xF9\x4D\xD9\xAF\xEC\x57\x0E\x2A\x07\x95\x43\xCA\x21\xE5\x88\x72\x44\x81\x03\x0E\xC9\x21\x39\x14\x87\xE2\x48\x72\x24\x39\x92\x1D\xC9\x0E\xA7\xC3\xE9\x48\x73\xA4\x39\x32\x1C\x19\x8E\x4C\x47\xA6\x23\xCB\x91\xE5\xE8\xEC\xE8\xEC\xE8\xEA\xE8\xEA\xC8\x75\xE4\x3A\xBA\x39\xBA\x39\xF2\x1D\xF9\x0E\xE6\x60\x0E\xB7\xC3\xED\xE8\xE1\xE8\xE1\xE8\xE9\xE8\xE9\x38\xDE\x71\xBC\xA3\xD0\x51\xE8\xE8\xEB\xE8\xEB\x50\x1D\xAA\xA3\xBF\xA3\xBF\xC1\xDF\xB4\xF3\xF0\x56\x67\xFF\x9A\xDD\x6A\x0B\xC1\xC0\x9B\x19\x53\x98\xC2\x92\x58\x12\x4B\x66\xC9\xCC\xC9\x9C\x2C\x8D\xA5\xB1\x0C\x96\xC1\x32\x59\x26\xCB\x62\x59\xAC\x33\xEB\xCC\xBA\xB2\xAE\x2C\x97\xE5\xB2\x6E\xAC\x1B\xCB\x67\xF9\x8C\x3B\x37\x73\xB3\x1E\xAC\x07\xEB\xC9\x7A\xB2\xE3\xD9\xF1\xAC\x90\x15\xB2\xBE\xAC\x2F\x53\x99\xCA\xFA\xB3\xFE\xCC\xCB\xBC\x6C\x20\x1B\xC8\x4E\x60\x27\xB0\x93\xD8\x49\xEC\x14\x76\x0A\x2B\x61\x25\x6C\x08\x1B\xC2\x86\xB1\x61\x6C\x04\x1B\xC1\x46\xB2\x91\x6C\x34\x1B\xCD\xC6\xB2\xB1\x6C\x3C\x1B\xCF\x26\xB2\x89\x6C\x32\x9B\xCC\x4E\x63\xA7\xB1\xA9\x6C\x2A\x3B\x93\x9D\xC9\xCE\x62\x67\xB1\x73\xD8\x39\xEC\x3C\x76\x1E\x9B\xCE\xA6\xB3\x0B\xD8\x05\xEC\x42\x76\x21\x9B\xC5\x66\xB1\xD9\x6C\x36\xAB\x60\x15\x6C\x0E\x9B\xC3\xAA\x58\x15\x9B\xCB\xE6\xB2\x20\x0B\xB2\x10\x0B\xB1\x08\x8B\xB0\x28\x8B\xB2\x18\x8B\xB1\x05\x6C\x01\x5B\xC4\x16\xB1\x8B\xD8\x45\x6C\x09\x5B\xC2\x2E\x65\x97\xB2\x3A\x56\xC7\x2E\x67\x97\xB3\x2B\xD8\x15\xEC\x2A\x76\x15\x5B\xCE\x96\xB3\x6B\xD9\xB5\xEC\x7A\x76\x3D\xBB\x91\xDD\xC8\x56\xB2\x95\xEC\x66\x76\x33\xFB\x0B\xFB\x0B\xBB\x9B\xDD\xCD\x56\xB3\xD5\xEC\x1F\xEC\x1F\xEC\x3E\x76\x1F\x8B\xB3\x38\x5B\xC3\xD6\xB0\x06\xD6\xC0\x1E\x60\x0F\xB0\x87\xD8\x43\x6C\x2D\x5B\xCB\x1E\x61\x8F\xB0\xC7\xD8\x63\xEC\x09\xF6\x04\x7B\x8A\x3D\xC5\x9E\x61\xCF\xB0\xF5\x6C\x3D\x7B\x8E\x3D\xC7\x36\xB1\x4D\xEC\x05\xF6\x02\x7B\x89\xBD\xC4\x5E\x61\xAF\xB0\x57\xD9\xAB\xEC\x75\xF6\x3A\xFB\x27\xFB\x27\x7B\x93\xBD\xC9\xB6\xB2\xAD\xEC\x6D\xF6\x36\xDB\xCE\xB6\xB3\x9D\x6C\x27\x7B\x97\xBD\xCB\xDE\x67\xEF\xB3\x0F\xD9\x87\xEC\x63\xF6\x31\x6B\x62\x4D\xEC\x53\xF6\x29\xFB\x9C\x7D\xCE\xBE\x64\x5F\xB2\xAF\xD9\xD7\xEC\x5B\xF6\x2D\xFB\x9E\x7D\xCF\x9A\x59\x33\xDB\xC3\xF6\xB0\xBD\x6C\x2F\xFB\x85\xFD\xC2\x7E\x63\xBF\xB1\xFD\x6C\x3F\x3B\xC8\x0E\xB2\x43\xEC\x10\x3B\xC2\x8E\xB0\x64\x57\x47\x83\x87\x58\xE8\x1A\xE0\x3A\xC5\x35\xDC\xE0\x22\xB6\xE7\x21\x96\xB9\xAA\x5C\x61\xD7\x53\xAE\x67\x5D\xAF\xBA\xDE\x70\xBD\xEB\xFA\xC0\xF5\xB5\xEB\x7B\xD7\x7E\x57\x8B\xCB\xE2\x1A\xA6\x7A\xD2\x3D\x99\x9E\xAC\xDF\xE5\x1B\x7A\x3D\x83\x3C\xC3\x0C\xBE\xE1\x18\xCF\x32\xCF\x32\x83\x6B\x38\x4B\x9D\xA5\xCE\x56\x2B\xD4\x4A\xB5\x52\x0D\xA8\x01\x75\x9E\x3A\x4F\xAD\x56\x23\x6A\x54\x8D\xAA\xB5\x6A\xAD\x7A\xA9\x5A\xA7\x5E\xAE\x5E\xAE\x5E\xA1\x5E\xA1\x5E\xA5\x5E\xA5\x2E\x57\x97\xAB\xD7\xAA\xD7\xAA\xD7\xAB\xD7\xAB\x37\xAA\x37\xAA\x2B\xD5\x95\xEA\xCD\xEA\xCD\xEA\x5F\xD4\xBF\xA8\x7F\x55\xFF\xAA\xFE\x4D\xFD\x9B\xFA\x77\xF5\xEF\xEA\x9D\xEA\x9D\xEA\xDD\xEA\xDD\xEA\x6A\x75\xB5\xFA\x0F\xF5\x1F\xEA\x7D\xEA\x7D\x6A\x5C\x8D\xAB\x6B\xD4\x35\x6A\x83\xDA\xA0\x3E\xA0\x3E\xA0\x3E\xA4\x3E\xA4\xAE\x55\xD7\xAA\x8F\xA8\x8F\xA8\x8F\xA9\x8F\xA9\x4F\xA8\xFF\x1F\x7B\x5F\x02\xDF\x44\xB5\x3D\x7C\x6F\x92\x2E\x69\x9A\x26\xC5\xD2\x25\x29\x92\x5A\x68\x3A\x25\xC4\x50\x11\xB1\x40\x29\xAB\xA8\x2C\x95\x22\xBB\x84\x69\x32\x6D\x87\x26\x33\x61\x32\x81\xD6\xA7\x50\x01\x17\x70\xE3\xF9\x14\xD7\xA7\xB8\xBC\xA4\x2D\x2E\xB8\xA3\x0F\xA1\xFA\x58\xD4\xE7\xC2\x53\xF4\x29\x6E\x88\x4F\x5C\x11\xDC\x57\x92\xEF\x37\x73\xEF\x24\x93\x49\xD2\x16\xB5\xF8\xBE\xF7\xA7\xFC\x2E\x93\x7B\xEE\xB9\xDB\xB9\xE7\x9E\x73\xEE\x9D\x7B\xCF\x3C\x66\xDB\x62\xDB\x62\x7B\xD2\xF6\xA4\x6D\xAB\x6D\xAB\x6D\x9B\x6D\x9B\xAD\xCB\xD6\x65\x7B\xC6\xF6\x8C\x6D\x87\x6D\x87\x6D\x97\x6D\x97\xED\x59\xDB\xB3\xB6\xE7\x6D\xCF\xDB\x5E\xB0\xBD\x60\x7B\xC9\xF6\x92\x6D\x8F\x6D\x8F\xED\x15\xDB\x2B\xB6\xBD\xB6\xBD\xB6\xD7\x6D\xAF\xDB\xDE\xB0\xBD\x61\xDB\x67\xDB\x67\x7B\xDB\xF6\xB6\xED\x5D\xDB\xBB\xB6\xFD\xB6\xFD\xB6\x03\xB6\x03\xB6\xCF\x6C\x9F\xD9\x0E\xD9\x0E\xD9\xBE\xB2\x7D\x65\xAB\x09\xD6\x04\xC7\x07\xC7\x07\x27\x06\x27\x06\x27\x07\x27\x07\xA7\x04\xA7\x04\xCF\x09\x9E\x13\x9C\x1A\x9C\x1A\x9C\x1E\x9C\x1E\xAC\x0D\xD6\x06\x67\x06\x67\x06\x67\x05\x67\x05\x67\x07\x67\x07\xE7\x06\xE7\x06\xE7\x07\xE7\x07\x17\x06\x17\x06\x17\x05\x17\x05\x17\x07\x17\x07\xEB\x83\xF5\x41\x77\xD0\x1D\x6C\x08\x36\x04\x9B\x82\x4D\xC1\x25\xC1\x25\x41\x4F\xD0\x13\x6C\x0B\xB6\x05\x57\x05\x57\x05\xD7\x04\xD7\x04\x2F\x0B\x5E\x16\xBC\x22\x78\x45\x70\x5D\x70\x5D\xF0\xAA\xE0\x55\xC1\x6B\x82\xD7\x04\xD7\x07\xD7\x07\xAF\x0B\x5E\x17\xBC\x3E\x78\x7D\x70\x43\x70\x43\xF0\xA6\xE0\x4D\xC1\x5B\x82\xB7\x04\x4F\x09\x9D\x12\x1A\x14\x1A\x14\x2A\x0B\x95\x85\xCA\x43\xE5\xA1\x8A\x50\x45\xC8\x16\xB2\x85\xEC\x21\x7B\xA8\x32\x54\x19\x1A\x1E\x1A\x1E\x1A\x11\x1A\x11\x1A\x19\x1A\x19\xAA\x0A\x55\x85\x46\x87\x46\x87\xAA\x43\xD5\xA1\x9A\x50\x4D\x68\x7C\x68\x7C\x68\x62\x68\x62\x68\x72\x68\x72\x68\x4A\x68\x4A\xE8\x9C\xD0\x39\xA1\xA9\xA1\xA9\xA1\xE9\xA1\xE9\xA1\xDA\x50\x6D\x68\x66\x68\x66\x68\x56\x68\x56\x68\x76\x68\x76\x68\x6E\x68\x6E\x68\x7E\x68\x7E\x68\x61\x68\x61\x68\x51\x68\x51\x68\x71\x68\x71\xA8\x3E\x54\x1F\x72\x87\xDC\xA1\x86\x50\x43\xA8\x29\xD4\x14\x5A\x12\x5A\x12\xF2\x84\x3C\x21\x26\xC4\x84\x5A\x43\xAD\xA1\x3F\x85\xFE\x14\xBA\x38\xB4\x22\xD4\x16\x6A\x0B\xAD\x0A\xAD\x0A\xAD\x09\xAD\x09\x5D\x16\xBA\x2C\x74\x65\xE8\xCA\xD0\xD5\xA1\xAB\x43\xEB\x43\xEB\x43\xD7\x85\xAE\x0B\x6D\x08\x6D\x08\xDD\x14\xBA\x29\x74\x4B\xE8\x96\xD0\x6D\xA1\xDB\x42\xB7\x87\x6E\x0F\x6D\x0C\x6D\x0C\xDD\x15\xBA\x2B\x74\x4F\xE8\x9E\x50\x30\x14\x0C\xB5\x87\xDA\x43\x9D\xA1\xFB\x43\x9B\x43\x8F\x84\x1E\x0B\x3D\x16\xDA\x12\xDA\x12\x7A\x32\xF4\x64\x68\x6B\x68\x6B\x68\x5B\x68\x5B\xE8\x99\xD0\x33\xA1\x1D\xA1\xDD\xA1\xE7\x42\xCF\x85\xBE\x0D\x7D\x1B\x2A\x89\x54\xC5\xDD\xBF\x96\xFC\x56\x48\xE7\x1B\xA5\x73\x7D\x92\x1F\x8A\xE8\xB7\xD0\xF6\x42\x50\xB4\x17\x82\xE1\x7B\x21\x98\xB6\x17\x82\xA6\xBD\x10\x5C\x82\xCF\x1A\xF5\xF6\xBC\xD1\xA3\x7B\x21\xD8\xB3\x17\x82\x4F\xF6\x42\xA0\x79\xAD\xFB\x73\x46\x23\x7B\x79\xCE\xC8\xF3\x1A\x04\x97\xBE\x06\xC1\xC6\xD7\x20\x78\xE2\x35\x08\xF6\xBE\x06\xC1\xA1\xD7\x20\xC8\x7C\x1D\x82\x92\xD7\x21\x18\xFD\x3A\x04\xE7\xBF\x0E\x81\xEF\x75\x08\xD6\xCA\xCE\x23\x1D\xC0\xE7\x90\x8A\xF1\xF9\xA3\xD9\xF8\xDC\xD1\x7A\x7C\xDE\xE8\x79\x1C\x24\xFF\x1A\x53\x5B\x5D\xE2\x3D\x12\x69\x5F\x63\x6A\xAB\x5B\x8C\x4B\xFB\x02\x63\x71\x98\xA6\x3C\xEE\xA1\x66\xD5\xAB\x35\x6B\x35\x7F\x4E\x7B\x2A\x6D\x7B\xDA\xF6\xB4\xA7\xD3\x9E\x49\xDB\x91\xB6\x33\x6D\x77\xDA\xEE\x34\x63\xBA\x29\xFD\xDC\x74\xA7\x78\xCF\xE6\xF5\xF4\xB7\xD3\xDF\x4B\xFF\x4F\xFA\x47\xE9\x1F\xA7\x7F\x9A\x7E\x28\x3D\x37\x23\x37\xC3\x91\x71\x4E\x46\x30\x63\x73\xC6\x67\x19\x5F\x67\x1C\xCD\x38\x9A\x91\x9F\x59\x94\x69\xCE\x2C\xCD\x1C\x9C\x69\xCD\x24\x32\x87\x66\xCE\xCB\x5C\x80\x7D\x67\xA8\xB5\x55\xDA\xD1\xDA\x6A\xED\x0C\xED\x79\xDA\x39\xDA\x7A\xAD\x4B\x7B\x89\x76\xB5\x76\xAB\x76\xAB\x76\x5B\xD4\xA7\xC2\x8B\xA2\x4F\x85\x03\xDA\x0F\xB4\x61\x6D\x58\x0B\xB3\xD4\x49\xEF\x72\xF9\xB2\x96\x66\x05\xB2\x02\x59\x97\x64\xAD\xCE\xDA\x9A\xB5\x35\x6B\x9B\xEC\x0E\xDA\x81\xAC\x0F\xB2\x7E\xCA\x8A\x64\x41\x9D\x5A\x37\x5A\x37\x5A\x57\xAD\x9B\xA8\x3B\x4B\x37\x45\x77\xAE\x6E\x9A\xEE\x7C\xDD\x1C\x5D\xBD\xCE\xA5\x5B\xA5\x5B\xA5\xDB\xA6\x7B\x46\xB7\x4B\xF7\xAC\xEE\x79\xDD\x8B\xBA\x7F\xEB\xFE\xAD\x03\xD9\x9A\xEC\xEA\xEC\x89\xD9\x93\xB3\xA7\x64\x9F\x93\x3D\x2D\xFB\xFC\xEC\xD9\xD9\xF5\xD9\xAE\xEC\x4B\xB2\x57\x67\x6F\xCD\xDE\x9A\xBD\x4D\x71\x5F\xE6\x40\xF6\x07\xD9\x40\xAF\xD6\x8F\xD2\x8F\xD6\x57\xEB\x27\xEA\x27\xEB\xA7\xE8\xCF\xD1\x4F\xD3\xCF\xD1\xCF\xD1\xD7\xEB\x5D\xFA\x4B\xF4\xAB\xF5\xCF\xEB\x9F\xD7\xBF\xAC\xDF\xAB\x7F\x5D\xFF\xBA\xFE\x0D\xFD\x7B\xFA\xAF\xF4\x5F\xEB\x87\xE5\x0C\xCB\x19\x9E\x53\x95\x73\x56\xCE\xF4\x9C\x07\x73\x1E\xCC\x79\x24\x67\xAB\x78\xFE\xA8\xD0\x50\x64\x38\xDD\x70\xBA\xE1\x0C\xC3\x19\x86\x33\x0D\x67\x1A\xAA\x0D\x63\x0D\x4B\x0D\x6B\x0C\x97\x19\x2E\x37\x5C\x6D\xB8\xD1\x70\xB3\x61\xAB\x61\x97\x61\x97\x61\x88\xB1\xDA\x38\xDB\x38\xCF\xB8\xC8\xB8\xD8\x58\x6F\x74\x1B\x1B\x8D\x5E\xE3\x52\x23\x6F\x5C\x65\xBC\xDA\x78\xAD\xF1\x5A\xE3\x2D\xC6\xBF\x1A\x2F\x38\xC9\x79\x52\xBF\x82\xBC\x82\xCA\x82\xE1\x05\x33\x0B\xEA\x0A\xB8\x02\x7F\xC1\x23\x05\xAF\x16\xBC\x53\xF0\x4E\x81\xAE\x50\x5F\x78\x69\xE1\x65\x85\x1D\x85\x1D\x85\xD2\x99\xA1\x02\x93\xD9\x74\xBE\x69\x91\x69\xB1\xE9\x22\xD3\x4A\xD3\x4A\xD3\x66\x53\x97\x09\x98\x35\xE6\xE1\xE6\x89\xE6\x66\xB3\xDF\xDC\x66\x5E\x65\xBE\xD3\x7C\x9F\xF9\xA0\xF9\x6B\xF3\xA0\xE2\x33\x8A\xD1\x3D\xAB\xD8\x1D\xAB\xEF\x65\x77\xAC\xF6\x58\x8E\x58\x0E\xDB\xBE\xB4\xAD\x1C\xBA\x72\xE8\xFE\xA1\x91\xA1\x15\x8E\x53\xC5\xBB\x56\x6C\x90\x0B\xF2\xC1\x8B\x83\xB7\x07\xEF\x08\x1E\x09\x7E\x19\x54\xB5\xAB\xDA\xD3\xDB\xD3\xDB\x75\xED\xBA\xF6\xD2\x76\xAB\xA0\x22\xDA\xDB\xDA\x2F\x69\x7F\xA4\x7D\x67\xFB\xFE\xF6\x2F\xDB\x23\xED\x91\xF6\xB2\x8E\xA1\x1D\x67\x75\xD4\x75\xB4\x75\xAC\xEE\x78\xB8\xA3\xAB\xE3\xC3\x8E\x0F\x3B\x88\xCE\x11\x9D\x13\x3A\x27\x74\x4E\xED\x9C\xD6\xF9\xA7\xCE\x8B\x3B\x37\x77\x6E\xEE\x7C\xA8\xF3\x91\xCE\xC7\x3B\xB7\x74\x6E\xEB\xDC\xDE\xF9\x74\xE7\xD3\x9D\x9F\x75\x1E\xEE\xFC\xB6\xF3\xBB\xCE\x0F\x36\x7D\xBA\xE9\xF3\x4D\x87\x36\x9D\xFC\xF3\xC9\x3F\xA3\xBB\x5E\xA7\x8A\x3E\x5A\x94\xF7\xBD\x96\xA9\x21\xB8\x50\x0D\x01\x4C\x72\x2F\xC9\xA0\xB8\x87\x24\x84\x0F\xB3\x20\x38\x98\x05\xC1\x20\x7C\xCF\x6E\x53\x0E\x04\xF7\xE6\x40\x30\xD9\x00\x41\xAD\x01\x8A\xFE\x3A\x54\x46\x08\x46\x1A\x21\x98\x8C\x7D\x75\xAC\x32\x42\xB0\xD9\x08\xC1\x93\x46\x28\xFA\x83\x50\xE5\x42\x60\xC5\x7E\x21\x26\xE5\x42\x30\x39\x17\x02\x3F\x0E\x6D\xB9\x10\xAC\xCA\x85\xE0\xE1\x5C\x08\xBA\x72\x21\x78\x2E\x17\x82\x17\x72\x21\x78\x29\x17\x82\x97\x73\x21\xB0\xF5\x83\xE0\x0C\x7C\x37\x49\x08\xEF\xE1\xFB\x48\xD2\x3D\xD7\x51\xF8\xEE\x6A\x75\x8A\xFB\xAB\xD2\xBD\xD5\xFA\x14\xF7\x56\x4F\xCF\x83\x60\x72\x1E\x04\x8B\x70\xD8\x9C\x07\xC1\x3F\xF2\x20\x78\xA0\x3F\x04\x8F\xF6\x87\x60\x4B\x7F\x08\xBA\xFA\x43\xF0\x76\x7F\x08\xDE\xE9\x0F\x81\x23\x1F\x82\x9A\x7C\x08\x36\xE5\x43\xF0\x78\x7E\xCC\x2F\x8F\xAD\x10\x82\xAA\x42\x08\x1C\x49\xEE\x53\x57\x17\x41\x50\x83\xC3\xF8\x22\x08\x26\x14\x41\xF0\xAF\x22\x08\xFE\x5D\x04\xC1\xBE\x22\x08\xF6\x17\x41\xF0\x1F\x1C\xA0\x09\x82\x2C\x13\x04\xA7\x99\x20\x38\xD3\x04\xC1\x28\x13\x04\xD5\x26\x08\xCE\xC2\xE1\x3C\x13\x04\x0B\x4C\x10\xAC\x33\x41\x70\xB3\x09\x82\x53\x65\x7E\x56\xC6\x16\x43\x70\x5D\x31\x04\xA1\x62\x08\x3A\x8A\x21\x78\xAC\x18\x82\x61\x03\x20\x18\x31\x00\x82\x2A\x1C\x46\x0F\x80\x60\xCC\x00\x08\xC6\x0E\x80\x60\xD2\x00\x08\xCE\xC2\x61\x5D\x92\x7B\xA9\x37\x0E\x80\xE0\xEB\x93\x21\xF8\xEE\x64\xE4\x4F\xE6\x9B\x25\x10\x38\x9A\x21\x18\xD1\x0C\xC1\x0C\x16\x85\xF3\x58\x08\x2E\x67\x21\xB8\x96\x85\xE0\x3A\x7C\x17\x4D\x08\xD2\xBD\xD1\xBF\x6E\x85\xE0\xF6\xAD\x10\x50\xF8\x7E\xA1\xF7\x5F\x10\x70\xDD\xDC\x33\x1C\xFF\x0A\x04\x13\x5F\x81\x00\xEC\x83\x60\xC4\x3E\x08\x46\xED\x83\xC0\xB3\x0F\x82\x00\x0E\x6B\x70\xB8\x75\x1F\x04\x77\xEC\x83\xE0\xCE\x7D\x10\x3C\xB0\x0F\xF6\xFA\xDE\xB4\xE3\x7D\x08\x46\xBC\x0F\xC1\xE7\x07\x20\x38\x7C\x00\x82\x3D\x1F\x43\xF0\xFA\xC7\x10\x4C\xFC\x04\x82\x73\x3E\x89\xDD\x73\x9C\x46\x36\x91\x4B\x48\x46\xBC\x06\x57\x8B\xF7\x5C\xA7\x91\xCD\xA4\x9F\xE4\xC4\x3D\xB7\x1F\x4E\x16\xE2\x1E\xB2\x95\x54\xF8\x74\x8A\xBE\x9F\x92\xE4\xE4\x0C\xFD\x2C\xBD\x4B\xDF\xA0\x5F\xA9\x9F\x46\x32\x6E\x92\x76\x81\x9A\xCC\x05\x99\x8B\x32\x17\x65\x4E\x23\x19\xDA\xD5\x44\x52\xF2\xFB\x90\x5D\x78\xBE\x7D\x96\x05\xC1\x77\x59\x42\x1D\x9C\xAB\x89\x8A\x21\xF8\xF0\xBE\xA1\x72\x9C\xA7\x09\x2D\x23\xBD\x09\xF7\x8F\x93\xED\x2F\xA6\xE2\x07\x81\x0F\x6A\x07\x40\x30\x6F\x00\x04\xD3\xF0\x0D\x55\xB5\x56\xAD\x1D\xA5\x1D\xA5\xAD\xD6\xD6\x68\xCF\xD6\x4E\xD5\x4E\xD7\xCE\xD0\xAE\xD2\xAE\xD6\x6E\xD3\x76\x61\x3D\xF6\x82\xA8\xC7\xD4\x59\xEA\xAC\xEA\xAC\x9A\xAC\xD5\x59\xAB\xB3\xB6\x65\x75\x65\x3D\x27\xEA\xA8\x17\xB2\x54\x3A\xB5\xAE\x5A\x57\xAD\xAB\xD1\xD5\x60\xDD\x34\x55\x37\x47\x37\x47\xB7\x4D\xB7\x5D\xF7\x74\x54\x2F\xBD\x20\xEA\x25\x98\xAD\xCE\x1E\x97\x3D\x31\x7B\x55\xF6\xEA\xEC\x6D\xD9\xDB\xB2\xBB\xB2\x77\x64\xEF\x16\xF5\xD0\x3F\x45\x3D\xA4\xD2\xAB\xF5\xD5\xFA\x1A\x4C\xD7\xA9\xA2\xFE\x59\xA5\x5F\xAD\x7F\x59\xFF\xAF\xA8\xCE\x11\x74\xC9\x4A\xC3\x4A\xC3\x10\xA3\xCD\x38\xCC\x38\xCC\x38\xD2\x38\xD2\x38\xCA\x38\xDA\x38\xDB\x38\x27\xAA\x43\x56\x1B\xD7\x18\x2F\x37\x5E\x85\x75\xC8\x6D\xC6\xC7\x0A\x1E\x2B\xD8\x56\xB0\xB3\x60\x77\xC1\xB3\x05\xA5\x45\x65\x45\x84\xA8\x2B\x86\x15\x9D\x56\x34\xB2\xA8\xC8\x64\x32\x9D\x6F\x3A\xDF\x34\xC7\x34\xC7\x44\x9A\x48\x93\xCB\xE4\x36\x79\x4D\x9C\x49\x63\xD6\x98\x4F\x37\x9F\x6E\x1E\x65\x1E\x65\x1E\x63\x1E\x67\x9E\x60\x9E\x68\x5E\x25\xEA\x8E\x3B\xCD\x41\x73\xC8\xDC\x69\xEE\x34\x7F\x64\xFE\xC8\xFC\xA9\xF9\x73\xF3\x17\xE6\x2F\xCC\x5F\x89\xFA\x64\x48\xF1\xF0\xE2\xD3\x45\xDF\x30\xDF\x17\x7F\x5F\x6C\x77\x9C\xEA\x28\x6D\x1F\xD4\x6E\x6D\xB7\x62\x7D\xF0\x8F\xF6\x99\x1D\x75\x1D\xAB\x3B\x56\x77\x3C\xD2\xF1\x68\xC7\x93\x1D\x7F\xEF\xD8\xD6\xD1\xD5\x71\x6A\xA7\xA3\xF3\xB4\xCE\xE1\x9D\xD3\x44\x3D\x20\x68\x82\x8B\x3B\x3F\xEB\xFC\xAC\xF3\x0B\x51\xF6\x7F\xDB\xF9\xC1\xA6\xFF\x6C\x3A\xB8\xE9\xA3\x4D\x9F\x88\x3A\xE0\xF3\xB8\xFB\xEF\x82\x7C\x96\x64\xB4\x0A\xCB\x66\x49\x3E\x3F\x64\x84\xE0\x71\x23\x04\x5B\x8C\x10\xD8\x72\x51\x90\xE4\xF3\x2A\x99\x5C\x7E\x34\x17\x82\xED\x58\x3E\xBF\x84\x83\x20\x97\xED\xFD\x20\xA8\xEC\x07\xC1\x69\xFD\x20\x38\x1D\x87\xFD\xFD\x20\x38\xD0\x0F\x02\x15\x96\xCF\x82\x5C\x1E\x7B\x12\x04\xE3\x7A\x29\x9F\x05\x79\x7C\x46\x1E\x04\x35\x79\x10\x8C\xCB\x83\x60\x12\x0E\x82\x5C\x7E\x28\x0F\x82\x27\x70\xF8\x7B\x1E\x04\xDB\xF2\x20\x78\x1A\x07\x41\x5E\x3F\x88\xE5\xF5\xDF\xFB\x43\xB0\x0D\x07\x41\x5E\x57\xE6\x43\x30\x2A\x1F\x82\xD1\xF9\x10\x54\xE3\x70\x2F\x0E\xF7\xE7\x43\xF0\x40\x3E\x04\x8F\xE1\x60\x29\x80\xA0\xA4\x00\x82\x32\x1C\x04\xB9\x6E\x2F\x84\x60\x24\x0E\x4A\xF9\x3E\x06\x07\xB9\x7C\x1F\x8F\xE5\xFB\xAB\x45\x10\xBC\x5D\x04\xC1\x7B\x32\xF9\x7E\x26\x96\xEB\x73\x4C\x10\xCC\x35\x41\x70\x23\x0E\x82\x1C\x17\x42\x35\x0E\x1D\x38\x3C\x88\xC3\x23\x38\x48\x72\x5A\x90\xCF\xD7\x0F\x80\x60\x03\x0E\xDF\x62\x39\x2D\xC9\x63\x49\xFE\x52\xD8\x7F\x8E\x24\x77\xA7\x29\x3E\x55\x7B\x85\x66\xAD\x66\x9B\x69\x9B\xE9\x1D\xCB\x7E\xCB\x01\xCB\x7F\x2C\xBE\x20\x17\x9C\x46\xB9\xA9\x06\x92\x76\x73\x34\x23\xAE\x37\x6E\x61\x84\x7C\x14\x4F\xD1\xCE\x69\x64\x2B\xD5\x0C\xC0\xFE\xCE\xEF\x3A\xBB\x36\x1D\xDA\x74\x64\xD3\x8F\x9B\xA6\x51\x8C\x9B\x72\x9E\x4B\x37\x93\xCD\x01\x3A\xBA\x5F\xBF\x1B\xCB\xD5\x69\x14\xC7\xD2\x3C\xED\x72\x4E\x08\x70\x7E\x7A\x99\xF2\x43\xB9\x60\x23\x7E\x7F\xB7\x55\x0B\xC1\xCB\x5A\x08\x5E\xD1\x42\x10\xD1\xCA\xF2\x29\xFC\x85\xB4\x69\x21\xB8\x43\x48\xA7\xF1\xC1\x77\xFC\x7E\x62\x86\x4C\x0F\xDD\xC1\x42\x30\x8D\x91\xDB\xFB\x97\xF7\xB1\xBD\xAF\xD2\x56\x89\x16\xFF\x68\xED\x38\xED\x14\xED\x34\xED\x34\x99\xDD\x7F\x89\x68\xF7\x3F\xAD\xDD\xA1\x7D\x51\xFB\xA2\xCC\xDE\x57\x89\xF6\xFE\xB8\x94\xF6\xFE\x2A\xD1\xDE\x7F\x5A\xB4\xF7\x9F\xCD\x7A\x31\xCE\xDE\x87\xA2\xBD\x3F\x56\x37\x56\x37\x4E\x37\x51\x37\x4D\xB4\xF7\x67\x47\xED\xFD\x2E\x5D\x97\xEE\x45\xDD\x8B\x3A\x90\x2D\x58\xFA\x82\xAD\x5F\x93\xC4\xD6\xBF\x44\xB4\xF5\xB7\x67\x6F\xCF\xDE\x95\xBD\x2B\xFB\x85\xEC\x17\xB1\x9D\x0F\x45\x3B\x7F\x9C\x7E\xA2\x7E\x9A\x7E\x1A\xB6\xEF\x2F\x11\xED\xFB\x57\xB0\x7D\xDF\x5B\xBB\x7E\xA9\x61\x85\xA1\x2D\x89\x5D\x3F\xD4\xE8\x30\x56\x1A\xCF\x30\x9E\x69\xAC\x32\x8E\x31\x56\x1B\xE7\x62\x1B\x1F\xD9\xF6\xAB\x8C\x97\x1A\x2F\x33\x5E\x6D\xBC\xDA\xF8\xD7\x94\xF6\xFD\xA3\x05\x8F\x17\x3C\x55\xB0\xAB\x60\x57\xC1\x73\x49\x6D\xFD\x53\x8A\xAC\x45\xE5\x45\x95\x45\x95\x45\x67\x8A\x36\x7F\xA1\xC9\x6C\x32\x9B\x66\x9B\x66\x9B\xE6\x8A\xB6\xFF\x62\x53\xBD\xA9\xDE\x44\x99\x3C\x26\x7F\x74\x1D\xF0\x94\x69\xBB\xB8\x16\x50\x9B\x87\x9B\x87\x9B\x47\x98\xAB\xCC\xA3\xCD\xA3\xCD\xE3\xCD\xE3\xF1\xBA\xE0\x12\xF3\x5D\xE6\xBF\x99\xDB\xCD\x1D\xE6\x4D\xE2\xFA\xE0\xA0\xF9\x63\xF3\x27\xE6\x43\xE6\x43\xE6\xC3\xE6\x2F\xCD\xB6\xE2\xD3\x8A\x47\x44\xD7\x0B\xA9\xFD\x32\xEC\xB1\xBC\x6D\x79\xDF\xF2\xBE\xE5\xC3\x84\xB5\xC3\x50\xBC\x76\x60\x53\xAE\x1D\x06\xB7\x97\x89\x6B\x87\x1D\x09\xEB\x86\xF3\x3A\xDA\x3A\x56\x75\x3C\xDC\xF1\x70\xC7\x63\x1D\x4F\x74\x6C\xED\x78\x0A\xAF\x1F\xEC\x9D\xC3\x3A\x2B\x3B\x4F\x8F\xAE\x23\xA6\x76\x5E\xD4\x79\x51\xD2\x75\xC4\xE7\x9D\x87\x3A\xBF\xEB\xFC\xAE\xF3\xC3\x4D\x1F\x6E\xFA\x78\xD3\xC7\x9B\x0E\x25\x59\x4B\x1C\x8F\xF5\x04\x34\xA2\x20\x5F\x4F\x5C\x62\x84\xE0\x61\x23\x04\x8F\x19\x21\x78\x22\xC9\xBA\x62\x48\x2E\x04\x43\xF1\xFA\x42\xBE\xAE\xB8\x24\x17\x82\xC7\x72\x21\xD8\x26\x5B\x57\xBC\x8C\xC3\xA9\xFD\x20\x18\xD6\x0F\x82\xE1\x38\x8C\x48\xB2\xCE\x10\xC2\x07\xB2\xF5\x06\x94\xAD\x37\x6A\x70\x50\xAE\x27\x46\xE6\x41\x30\x36\x0F\x82\xF1\x79\x10\x4C\xC4\x6B\x0B\xF9\xFA\xE2\xE1\x3C\x08\xB6\xE4\x41\xF0\x24\x0E\xDB\xF3\x20\xE8\xCA\x83\xE0\x19\xBC\xEE\x78\x08\xAF\x3B\xB6\xF6\x87\xE0\xA9\xFE\x10\x6C\x57\xAC\x3F\x4E\xCB\x87\xA0\x2A\x1F\x82\x31\x38\x8C\x95\xAD\x47\x84\x70\x1F\x0E\x9B\xF3\x21\x78\x14\xAF\x51\xA4\x75\xCA\xC0\x02\x08\x4E\x29\x80\x60\x70\x01\x04\x56\xBC\x6E\x39\xB5\x10\x82\x33\x0A\x21\x38\x13\xAF\x5F\x84\xF5\xCA\x68\xBC\x66\xA9\xC6\x6B\x15\x21\xEC\x95\xAD\x57\xDE\xC2\x6B\x96\xFD\x8A\xF5\xCA\xC8\x14\xEB\x95\xD9\x26\x08\xE6\xC9\xD6\x2D\x1B\x4C\x10\xDC\x84\xD7\x2F\x0E\xD9\xFA\x65\x0C\x5E\xC3\xC8\xD7\x31\x9D\xC5\x10\x6C\x2E\x86\xE0\xA1\x62\x08\x1E\x2E\x86\xE0\xD1\x63\x5C\xD7\x48\xEB\x99\x1B\x70\xB8\x51\xB6\xAE\xF9\xA6\x9B\x75\x8D\x72\x3D\x23\xAD\x63\x7A\xF2\x93\xF2\x5F\xB3\x7E\x61\xF1\x32\x00\x9F\x9B\xA8\xCD\x87\x60\x5E\x3E\x04\xD3\x58\xA6\x51\xF4\x1B\x2B\x4D\xE8\x42\x58\xA8\x29\xD4\x14\xA6\x17\xE6\x14\x1A\x0B\x8B\x0A\x91\x8F\x82\xCE\xC2\xC5\xF9\x10\x78\x04\x7C\x2E\xFE\x40\xA4\x74\x6E\x60\xF1\x12\x08\xE8\x25\x10\x30\x4B\x20\x60\x97\x40\x30\x2D\xE0\xE1\x85\xE5\x52\x6F\xCE\x99\x74\xF4\x83\x60\x5A\x2B\xC9\x78\x49\x0E\x00\xE3\x1D\xC6\xFD\x1D\xE1\x8E\xC5\x9D\x2B\x3B\xA7\xE3\xEF\xF5\x3D\x04\x1E\x06\x4F\x80\x27\xC0\x56\xB0\x0D\x2C\x4E\xA7\xD3\x8F\xA4\xFF\x98\xDE\x95\xF1\x5C\x46\x83\x96\xD5\x1E\xD4\x1E\xD6\x7E\xA3\xFD\x51\xDB\x90\xC5\x66\x1D\xCC\x3A\x9C\xD5\xA0\x63\x75\x9C\x6E\xB9\xEE\xA0\xEE\x2B\x5D\x43\x36\x9B\xDD\x92\xBD\x42\xF4\xEB\x32\x57\xBF\x48\xDF\xA0\x6F\xD1\x1F\xD4\x1F\xD6\xD7\xE6\xCC\x13\xEF\xBC\x59\x0C\xA7\x19\x6A\x8C\x67\x1B\xD7\x1B\x6F\x36\xD2\x27\x5D\x74\xD2\x17\xF9\x47\xF2\x25\xDF\x28\x42\xDF\x27\x17\xCD\x28\xDA\x53\xB4\xAF\xA8\xCD\xB4\xD6\xB4\xDE\x74\xB3\xA9\xD6\x3C\xCF\xBC\xD9\xFC\x84\xB9\xA6\xF8\xEC\xE2\xDA\xE2\x79\xC5\x3E\xD1\x6F\x63\xAB\xA5\xCD\xB2\xD6\x52\x5B\xB2\xAA\xE4\xD2\x92\xB5\x25\x8B\x07\xDD\x3A\xE8\xD3\x41\x91\x41\xCB\xAC\x7F\xB1\x1E\xB5\x1D\xB5\xC5\xFC\x29\x55\x39\xAE\x1B\x76\xC3\x30\x4B\x25\x51\x39\xA5\x72\x46\xE5\x79\x95\xCE\xCA\xB6\xCA\xB5\x95\x0F\x56\x6E\xAF\xB4\x04\x89\xE0\xC1\xE0\xE1\xA0\xA3\xFD\xF4\xF6\x3D\xED\x6F\xB6\x83\x0E\xAD\xE8\xE9\xE6\x48\xC7\x8F\x1D\xB5\x9D\xF3\x3A\x05\xAB\xCA\x18\x29\x12\xF7\x85\x25\x3F\x8A\x35\x10\x82\x16\x08\xC1\x3A\x08\xC1\x95\x32\xFF\x89\x16\x35\x04\xA5\x6A\x08\xC6\xE1\x70\x0E\x0E\xFF\x52\x43\xF0\x9A\x1A\x82\x8D\x1A\x08\x3A\x34\x10\xCC\xC5\xFE\x85\x5A\x33\x21\x58\x99\x09\x41\x28\x13\x82\x07\x64\xFE\x8F\xF2\xB5\x10\x98\xB1\x1D\xF6\x94\x16\x82\x2E\x85\x3D\x56\x83\xFD\xD2\x5C\x9C\x05\xC1\x8A\x2C\x08\xFE\x9A\x05\xC1\x1D\x78\x9D\x7A\x38\x2B\xE6\xBF\x47\xF2\xFB\xD3\xA1\x83\xE0\x01\x1D\x04\x3F\x65\x43\x10\xC9\x8E\xF9\x67\x92\xFC\x05\x0F\x30\x40\x50\x66\x80\xE0\x3C\x03\x04\xB3\x0C\x10\xEC\xC4\x3E\x3E\x25\xBF\xAF\x47\x8C\x10\xFC\x68\x44\x7E\x44\xC7\xE6\x42\xB0\x27\x17\x82\x37\x73\x21\x78\x3F\x17\x82\x6F\x72\x63\xFE\x68\x6A\xF3\x20\x98\x97\x07\xC1\x9E\x3C\x08\xDE\xCC\x8B\xF1\x79\x57\x3E\x04\xCF\xE5\x23\x7F\xC9\xA3\x0A\x20\xD8\x5F\x08\xC1\x57\x85\x31\xBF\x76\x92\x3F\x5A\x69\xBD\x2B\xF9\xDF\xEA\x1A\x08\xC1\xDE\x81\x31\xFF\x7F\x12\x9F\xD7\x36\x43\x30\xAF\x19\x82\x05\xCD\x10\x90\xCD\x10\xB4\x31\x10\x6C\x60\x62\x7E\x27\x25\x7F\x93\x92\x3F\xC7\x9A\xF7\x21\x38\xFB\x7D\x08\x8E\x1C\x80\xE0\xC7\x03\xC8\x1E\x7E\xF9\xE3\x98\x9F\xE7\xA5\x9F\x43\xB0\xE9\x73\x08\xEE\xFB\x1C\x82\x07\x3E\x87\xE0\x41\x99\xFF\xC7\xA1\x87\x20\x38\x55\xF2\x03\xF9\x25\x04\xD9\x5F\xC6\xFC\x1B\x4E\x27\xEB\x49\x5E\xB6\x65\x20\x9D\x93\x93\xC6\x73\x3A\xC9\xB8\x69\x99\x83\x40\xF9\xB9\x26\x49\x7E\x0B\xEB\x90\xE9\xD8\xC1\x94\x30\xDF\x92\xCD\x31\xF9\xFC\x3A\xA8\x3B\x2C\xCE\x2D\x61\x5E\x35\xE8\x59\xC5\x9C\x22\xA2\x73\x4A\x98\x4B\xB1\x79\xF4\x66\xCA\x79\x24\xF0\x7F\x4F\x7C\x1F\x5D\x1F\x60\xFE\x95\xF8\xA7\xA1\x07\xFE\x38\x16\xBE\x38\x13\xF3\xC5\x27\x0A\xBE\x98\x97\x84\x2F\x94\x7C\x90\x6A\x9C\xA5\xF1\x8D\x8E\x17\xB5\xDC\x39\x8B\xA4\x9D\x53\x03\x68\xE9\x23\x9D\xC3\x15\xE4\xCC\xBB\x45\xEF\x15\x4D\xA7\x96\x93\x71\x02\x36\x0F\x82\x05\x79\x10\x5C\x80\xCF\xC9\x4D\x6F\x66\x41\x57\xC6\x4F\x19\x47\x33\x22\x19\xD3\x3D\x00\x08\x32\x6B\xB1\x28\x7B\xAE\x28\x91\xCB\x1A\x41\x9E\x00\xEC\xEF\x8E\x87\xA9\xE5\x81\xC4\xD7\xD3\xB1\x58\x97\xCB\x5A\x41\xAE\x0A\xB2\xF4\x88\xEE\x2B\x9D\x20\x47\x05\x19\xEA\xD3\xB7\xE8\x2B\x0C\xA7\x19\x04\x79\x29\xC8\xC9\x7D\x45\xFB\x8A\xE2\xE5\xA0\xB3\x64\x6D\x12\x39\x98\x4A\xF6\x09\x32\x4F\xDE\x5D\x49\xBE\x05\x7A\x90\x6F\x7F\xB4\xFC\xEA\x8D\xDC\xA2\x8C\x31\xF9\x54\x85\xE5\xCE\xA7\x58\xEE\xCC\xC7\xF2\x46\x92\x2F\x3D\xC9\x11\x49\x5E\x1C\xAB\x9C\x98\x1E\xF0\x37\x05\x64\xF4\x7D\x1F\xDF\x77\x90\xCE\xE1\x4D\x6F\xA5\xC9\x66\x8A\x69\x74\xD6\x06\x48\x57\x53\x80\x72\x4E\xF1\xB2\x4C\xA3\x3C\x03\x3A\x87\xE7\xC0\xF7\x22\x24\xFE\x9E\xFE\x3E\x04\x33\x84\xD0\xD8\x44\x7A\x41\x5B\xFE\x6D\xF9\x33\x3C\xCE\x09\x4D\x74\x33\x0D\x40\x6D\xF1\xCA\xE2\x19\x1E\xB7\x73\x4A\x80\x69\xC4\xAE\xAC\xA3\x7F\x4A\xBF\x24\x12\x3D\x05\xFC\xB3\x79\x52\xEE\x09\x15\xAF\xD7\xD1\x78\x0F\x55\x43\x70\xAA\x1A\xE1\x4D\x67\x39\xBE\xC9\x29\x7A\xB4\x17\xCB\x6E\xC3\x63\x27\xA4\xD5\x52\x9C\x57\x28\xA3\x16\xAF\x43\x30\xCC\x2F\xB5\x42\x7E\x7E\xF9\x35\x9C\x5E\xC7\x36\xA2\x97\x85\xF8\x8C\x2E\x82\x05\xE2\xEA\x58\x9C\x05\xC1\x4A\x5C\xC7\xAC\x00\xD7\x2C\xB6\x13\x9F\xFD\x9D\xC1\xD1\x51\x0F\x84\x50\xA7\xD6\xA5\xBA\x2B\x31\x5A\xF1\x3E\x0E\xDD\x9B\x70\xE9\x1A\x74\xCB\x75\x33\xFC\x64\xA3\x20\x11\x94\x7E\x6C\x66\xF8\xBD\x24\x23\xF3\x6F\xD8\x86\xCF\x5B\x4B\x72\xB0\x56\x41\xAE\x12\x50\x0A\x06\x83\x0A\x60\x13\xBF\xA3\x3C\x0A\x8C\x15\xFD\x5D\x5F\x20\x7E\xEF\xF8\x4F\xE0\x4F\xE0\x62\x70\x31\xB8\x13\xDC\x09\x42\x20\x04\x36\x81\x4D\xE0\x31\xF0\x38\xF8\xBB\xE8\x05\x7B\x3B\x58\xA1\x5E\x21\xFA\xBA\x9E\x9F\xE6\x4C\x5B\x9B\xB6\x2E\x6D\x5B\xDA\xB6\xB4\xAE\xB4\xAE\xB4\x7F\xA4\xFD\x23\x6D\x57\xDA\xAE\xB4\xAF\xD3\xBE\x49\xD3\xA6\x67\xA5\x67\xA7\xEB\x45\x3F\xD8\x27\xA7\x0F\x4C\x5F\x92\xEE\x4D\xDF\x9B\xBE\x37\x1D\x64\xE8\x33\xBE\xCF\xF8\x31\xC3\x91\x59\x2D\xEE\x65\xBB\xB5\x94\xD6\xA7\xF5\x69\x8F\x6A\x8F\x6A\x97\x65\x2D\xCB\x3A\x92\x75\x24\x6B\x79\xF6\xF2\xEC\x35\xD9\x6B\xB2\xBF\xD1\x7F\xA3\x9F\x91\x33\x23\x67\x7E\xCE\x82\x1C\x8D\xA1\x9F\x21\xCF\x90\x67\xA8\x32\x8C\x31\x5C\x6A\xB8\xD4\xB0\xC7\xB0\xD7\xF0\xA6\x61\x9F\xE1\x1C\xE3\x0C\xE3\xCF\xC6\x9F\x8D\x8B\x4F\x6A\x3A\x09\xE4\x81\x3C\x26\x9F\xC9\xBF\x35\xFF\xB6\x7C\xC9\xB7\xF6\xDE\x82\xD7\x0B\xDE\x28\xD8\x57\x00\x0A\xB3\x0A\x27\x16\x4D\x2A\x3A\xD9\x34\xD0\xB4\xD1\x14\x34\xB5\x9B\xEE\x33\xCD\x37\x2F\x16\xBD\xDB\x8F\x2A\x1E\x5B\xBC\xA2\x78\x65\x71\x57\xF1\xEE\xE2\x57\x8B\x5F\x2D\x36\x5A\xAC\x16\x87\x65\x82\x65\x92\xE5\x3C\x4B\x9D\x65\x91\xE5\x62\xCB\x0A\xCB\xD5\x96\x6B\x2C\x99\xA5\xBA\x52\xA2\xB4\xA2\xB4\xC9\x1A\xB0\xEE\xB4\xEE\xB2\x1E\xB4\x1E\xB6\xAE\x26\x6E\x22\xDE\x20\xDE\x22\x7E\x21\x8E\x12\x3F\xDA\x7E\xB1\x85\x6D\x11\x9B\x6F\xA8\x6F\x28\xB0\xDB\xED\x0E\xFB\x0C\xFB\x4C\xFB\x4C\x3B\x74\xA8\x1D\x99\x8E\x5C\x47\x9E\x63\xA0\x43\xF8\x1B\xE3\x18\x83\x7D\x6D\xFF\xEC\x08\xDF\x13\xB9\x47\x1F\x34\x04\xFD\x41\x7F\x70\x45\x70\x45\xF0\xAB\xE0\xF7\x41\xBE\x7D\x79\xFB\x4B\xED\x2F\xB7\xFF\xD0\xFE\x53\xFB\x2F\xED\xBF\xB4\xDB\x3B\x4E\xED\x70\x76\x38\x3B\x9E\xEE\x78\x51\xF4\x6A\xB8\xB0\xD3\xD9\xF9\x6E\xE7\x7B\x9D\x47\x3A\xBF\xEC\xFC\x6C\xD3\x67\x0A\xBF\xDB\x64\xD8\x15\x76\x85\x9B\xC2\x4D\xE1\x25\xE1\xE6\x30\x8C\xA8\x23\x69\x91\xAC\x48\x76\xC4\x10\x31\x45\xCC\x91\x81\xA2\x2F\xEE\x31\x91\xB1\x91\xB1\x91\x05\x91\x05\x91\x0B\x22\x17\x44\x9C\x11\x2A\x22\xF9\xDF\xBE\x43\x8D\xC2\x1E\x1C\x24\x7F\xF1\x73\xB0\xAF\xC9\x81\x5A\x14\xA4\xF7\xE4\x92\xBF\xC1\x95\x38\x1C\xC1\xEF\x1F\xA4\xEF\x10\xDC\xAC\x83\xE0\x36\x1D\x04\xF7\xE5\xA0\x70\xBE\x01\x82\x79\x06\x08\xCE\xC2\xFE\xFA\xFF\x6E\x84\x60\xAB\x11\x82\x6D\xD8\x3F\x63\x4D\x2E\x04\x13\x72\x21\xE0\x73\x21\x08\xE4\x42\xB0\x33\x17\x82\x67\x73\x21\x78\x11\x87\xB7\x70\x78\x27\x17\x82\xF7\x72\x21\x18\xD9\x0F\x82\x31\x78\x6D\x20\x84\x73\xF3\x20\x98\x91\x07\xC1\x7C\x99\x3E\x14\xC2\x2E\x1C\x9E\xEE\x0F\xC1\xBF\xFB\x43\x30\x2E\x1F\x82\x09\xF9\x10\x48\xEB\x95\xD1\x05\x10\x54\x17\x20\x5F\xC5\xA2\xBF\x62\xEC\xCF\xF8\x00\x0E\x63\x4D\x10\x4C\x36\x41\x70\x8B\x09\x82\xDB\x4C\x10\xDC\x6E\x82\xE0\x2E\x13\x04\xE3\xF0\x77\x0A\x7C\xC5\x10\x2C\x2D\x86\xE0\x7B\xFC\x8E\x27\x32\x10\x05\xC9\x0F\xB4\xB4\xDE\xF9\x16\x87\x33\x9A\x21\x18\xD5\x0C\xC1\x44\x1C\x6E\xC4\xFB\xA5\x07\x58\x14\xEE\xC0\xFE\x8F\x2F\xDF\x07\xC1\x95\xFB\x62\xDF\xF7\xA8\x25\x9B\xC8\xE5\x4D\x09\xD2\x57\x3C\x87\x3D\xA9\x39\xD1\xDE\x54\x9E\xCB\xAE\x25\x3D\xDE\x56\x8E\x62\x04\x19\xB2\x18\xEB\xC4\x5A\x32\xE0\x9C\x40\x33\xCE\x29\x64\x20\x7A\xFE\xBC\x56\x21\x5F\x05\xB9\x30\xD6\x52\x63\x99\x65\x99\x65\x39\x2D\x3C\x3C\x3C\x2D\x3C\x23\x2C\xF0\x50\x2D\xB6\x07\x87\x82\xA1\x60\x1D\x96\x05\xC2\x3C\x4C\x2F\x4C\x2F\x34\x5A\xFA\x5B\x0A\xEC\x05\x76\x93\xDD\x64\xAF\xB2\x8F\xB2\xD7\xD8\x6B\xEC\xC5\x8E\x62\x71\x0E\x08\xFC\x3F\x2C\x5C\x19\x9E\x1B\x9E\x2B\xF2\xAB\x3E\xA2\x8F\x48\x3C\x52\x4B\x01\x40\x00\x02\x5C\x00\x2E\x10\xE5\xD0\x28\xC3\x28\xC3\x18\xC3\x18\xC3\x6D\xF9\xB7\xE5\x4F\xB6\x4C\xB6\xAC\xB0\xAC\xB0\x5C\x63\xB9\xC6\xA2\x2D\xD5\x96\xEA\x4A\x75\xA5\x15\xA5\x15\xA5\xB4\x95\xB6\x36\x5B\x9B\xAD\x5E\xAB\xD7\xCA\x5A\x59\xEB\x52\xEB\x52\xAB\xDF\xEA\xB7\x06\xAC\x01\xEB\x2E\xEB\x2E\xEB\x47\xD6\x8F\xAC\x9F\x58\x3F\xB1\x7E\x66\xFD\xCC\x7A\xC8\x7A\xC8\x7A\xD8\x7A\xD8\xBA\x86\x58\x43\x5C\x46\x5C\x46\x5C\x41\x5C\x41\xAC\x23\xD6\x11\x57\x11\x57\x11\xD7\x10\xD7\x10\xEB\x89\xF5\xC4\x75\xC4\x75\xC4\xF5\xC4\xF5\xC4\x06\x62\x03\x71\x13\x71\x13\xF1\x26\xF1\x26\xF1\x16\xF1\x16\x71\x94\x38\x4A\x94\xDA\x4B\xED\x83\xED\x83\xED\x56\xBB\xD5\x4E\xD8\x09\xBB\xD6\xA1\x75\xE8\x1C\x3A\x87\xDE\xA1\x77\x18\x1C\x06\x47\xAE\x23\xD7\xD1\xDF\xD1\xDF\x51\xE0\x28\x70\x14\x39\x8A\x1C\x66\x87\xD9\x71\xB2\x63\xA0\xA3\xFA\x68\xF5\xD1\xC2\x70\x61\x78\x44\x78\x44\x78\x64\x78\x64\xB8\x2A\x5C\x15\x1E\x1D\x1E\x1D\xAE\x0E\x57\x87\x6B\xC2\x35\xE1\xF1\xE1\xF1\xE1\x89\xE1\x89\xE1\x29\xE1\x29\xE1\xF9\xE1\xF9\xE1\x85\xE1\x85\xE1\x45\xE1\x45\x61\x6D\x44\x1B\x19\x13\x19\x23\xCE\xD5\xC5\x91\xC5\x11\x57\xC4\x15\xA9\x6D\x88\x1F\x1F\x41\x36\x17\x59\x8A\x2C\x03\x2C\x03\x2C\x55\x96\x2A\x8B\xDA\xAE\xB6\xA7\xD9\xD3\xEC\x59\xF6\x2C\xBB\xDE\xAE\xB7\x0F\xB0\x0F\xB0\x97\xD8\x4B\xEC\xB5\x4D\x64\xA3\xDF\x59\x4B\x02\x50\xD3\xBE\xBC\xBD\xB6\x89\xA5\x18\xDA\x95\xE4\x7B\x23\x00\xDB\x45\xD2\x7C\xAF\x55\x78\x3C\x16\x74\x42\xA1\xA5\xD0\x62\xB6\x14\x5B\x06\x5A\x06\x5A\xCE\xB4\x9C\x69\x51\xD9\x55\x76\x8D\x5D\x63\xD7\xDA\xB5\xF6\x6C\x7B\xB6\xBD\xD8\x5E\x6C\xB7\xD8\x2D\xF6\x5A\x56\xD2\x37\x56\x50\x21\xEA\x1C\x1B\xB0\xCB\xF4\xCE\x42\xB0\x30\xAA\x6B\x04\x3D\x93\xA8\x63\xD6\x1E\x37\xFD\x92\x4A\xB7\x08\x7A\x25\x51\xA7\xA4\x15\x66\x1C\x83\x5E\xC9\xB7\x14\x58\x2C\xA2\x6E\x19\x69\x19\x65\xA9\xB6\x8C\xB3\x4C\xB0\x9C\x25\xEA\x98\x3A\xCB\xF9\x96\x45\x96\x78\xFD\x01\xED\xE9\xF6\x4C\xBB\xCE\xAE\xB3\xE7\xD8\xF3\xED\x85\xF6\x22\xBB\xD9\x6E\xB6\x9F\x6C\x1F\x68\xAF\x10\x75\xCB\x99\xF6\xD1\xF6\xB1\xF6\x71\xF6\x71\xF6\x09\x32\x3D\x23\xE8\x96\xDF\x4B\xAF\x18\xC3\xF9\xE1\x22\x51\xAF\x38\xC2\x93\xC2\x93\xC3\x67\x87\xA7\x86\x6B\x45\x1D\x33\x27\xEC\x0C\x93\x0A\x1D\x93\x11\xC9\x12\xF5\x4C\x76\x24\x47\xA6\x6B\x46\x47\x46\x47\xC8\x08\x19\x71\x0B\x3A\x46\xFE\xD7\xC7\xFA\xE6\x84\x9E\xF9\x8D\x7A\xC6\x1F\x3F\xDF\xCB\x41\x39\x58\x00\x16\x88\xB6\x61\x95\xA1\xCA\x30\xDA\x30\xDA\x70\x6B\xFE\xAD\xF9\x26\x8B\xC9\x72\xB2\xE5\x64\xCB\x24\xCB\x24\xCB\xC5\x96\x8B\x2D\x57\x5B\xAE\xB6\x64\x96\x66\x96\x66\x95\x66\x95\x12\xA5\x44\x69\x93\xB5\xC9\xBA\xC4\xBA\xC4\xEA\xB1\x7A\xAC\x8C\x95\xB1\xFA\xAC\x3E\x2B\x67\xE5\xAC\xBC\x95\xB7\xEE\xB4\xEE\xB4\x1E\xB4\x1E\xB4\x7E\x6C\xFD\xD8\xFA\xA9\xF5\x53\xEB\xE7\xD6\xCF\xAD\x5F\x58\xBF\xB0\xAE\x26\x56\x13\x97\x12\x97\x12\x97\x13\x97\x13\x6B\x89\xB5\xC4\x95\xC4\x95\xC4\xD5\xC4\xD5\xC4\xB5\xC4\xB5\xC4\x9F\x89\x3F\x13\x7F\x21\xFE\x42\xDC\x40\xDC\x40\xDC\x48\xDC\x48\xBC\x41\xBC\x41\xEC\x23\xF6\x11\xBF\x10\xBF\x10\xA7\xD8\x4F\xB1\x0F\xB2\x0F\xB2\x97\xD9\xCB\xEC\xE5\xF6\x72\xFB\x78\xFB\x78\x7B\xA6\x23\xD3\x91\xE5\xC8\x72\x64\x3B\xB2\x1D\x39\x8E\x1C\x87\xD1\x61\x74\xE4\x39\xF2\x1C\xF9\x8E\x7C\x47\xA1\xA3\xD0\x61\x72\x98\x1C\x03\x1C\x03\x1C\x63\x8F\x8E\x3D\x5A\x10\x2E\x08\x9F\x1E\x3E\x3D\x7C\x46\xF8\x8C\xF0\x99\xE1\x33\xC3\xA3\xC2\xA3\xC2\x63\xC2\x63\xC2\x63\xC3\x63\xC3\xE3\xC2\xE3\xC2\x13\xC2\x13\xC2\x67\x85\xCF\x0A\xCF\x0B\xCF\x0B\x2F\x08\x2F\x08\x5F\x10\xBE\x20\x9C\x19\xC9\x8C\x8C\x8A\x8C\x12\x6D\x29\x67\xC4\x19\xA9\x8F\xD4\x47\x6A\xFD\xA4\x87\xA7\xB8\x38\x2F\xD7\xD2\x3D\x40\x89\x3F\xA5\x75\xE2\x4C\x6A\x09\x29\x68\x72\x47\x47\x9D\x38\x17\x67\x06\x18\xDA\x05\x36\xE6\x7F\x9A\xFF\x45\xFE\x0F\xF9\x75\x51\xFA\x0F\x02\x83\xC0\x10\x30\x04\x8C\x06\xD5\x60\x11\x58\x04\x16\x83\xC5\xE0\x22\x70\x11\x58\x01\x56\x80\xBB\x40\x10\xB4\x83\x0E\x70\x2F\xB8\x17\xDC\x0F\x1E\x04\x8F\x80\x47\xC0\x16\xB0\x25\xFA\xBD\x9A\x67\x54\x3B\x55\xAF\x88\xDF\xAC\xF9\x4C\x75\x48\x75\x48\x75\x58\x15\x51\x05\xD4\x01\xF5\x1A\xF5\xA5\xEA\xEF\xD4\xDF\xA9\x57\x69\x56\x69\xAE\x4E\xBB\x36\x2D\x3D\x3D\x33\x5D\x97\xAE\x4B\xCF\x49\x37\xA4\xBF\x9B\xFE\x6E\xFA\x27\xE9\x9F\xA4\x1F\x4D\x0F\xA7\x7F\x97\xF1\x5D\x46\x38\x23\x92\xF1\x95\xF6\x6B\xED\x4F\xDA\x9F\xB5\x5F\x66\x7D\x99\xE5\xD3\xF9\x74\x5F\xEB\x7E\xD2\xAD\xCC\x5E\x99\x3D\x43\x3F\x43\xDF\xAA\x6F\xD5\x8F\xCD\x19\x9B\x03\x0D\x6A\xC3\x49\x86\x93\x0C\xFD\x0D\x05\x06\x93\x61\xA0\x61\xB8\x61\xB8\x61\x84\x61\x84\x61\xA4\x61\xA4\x61\x9B\x61\xA7\x61\xB7\xE1\x05\xC3\x4B\x86\x97\x0D\xAF\x19\xDE\x30\xDC\x6E\xBC\xC3\xB8\xFE\xA4\x9B\x4F\xF2\xE6\x7B\xF3\xDF\x2A\x78\xAB\xA0\xA6\xA8\xA6\xE8\xDD\xA2\x48\x11\x69\x5E\x62\xE6\xCD\x17\x99\x9F\x1A\xF8\xD4\xC0\xED\x03\x9F\x1E\xF8\xE2\xC0\x97\x07\xBE\x33\xF0\xBD\x81\x87\x06\x1E\x1E\x78\x74\x60\x78\xE0\x44\xCB\x44\xCB\x4C\xCB\x4C\xCB\x85\x96\x8B\x2C\xEB\x2C\x57\xE1\x6F\xE1\xC0\x12\x75\x49\x7A\x49\x66\x89\xB6\x24\xAF\x24\xAF\x24\xBF\xA4\xB0\xE4\xE4\x92\xD2\x92\xC1\xE2\x37\x72\xAC\x25\x44\x09\x21\xA8\xBF\x92\xAA\x92\x51\x25\x35\x25\x13\x4B\xCE\x11\xBF\x97\x33\xA3\x64\x9D\xF8\xBD\x9C\x8C\xD2\xEC\xD2\xF2\xD2\x21\xA5\xE8\xBB\x39\xB7\x0D\xFA\x64\x10\x18\xDC\x68\xBD\xDE\xBA\xC3\xBA\xDB\xFA\xA1\xF5\x88\x75\x15\x71\x33\xF1\x6F\xE2\x6D\xE2\x67\x22\x2C\xFB\x9E\xCE\x87\xB6\x4F\x6D\xB5\xF6\xF3\xEC\x72\xDF\xF8\x47\x4E\xFD\xF9\x54\x8D\x43\xE3\xE8\xE7\x38\xC9\x61\x71\x58\x1C\x23\x1C\x67\x38\xAA\xF1\xF7\x75\xD6\x0F\xFB\xF3\xB0\x0D\xF8\xDB\x3A\xA0\xF2\xE4\xCA\x8A\xCA\xB3\x2A\x6B\x2B\x6B\x2B\x17\x57\xAE\xAC\x5C\x57\xB9\xB9\xB2\xAB\x12\x7D\x63\x67\xFD\x3D\xBB\xEE\x01\xA1\xFC\x90\x25\x54\x12\x5A\x1B\x5A\x17\x2A\x6F\x1F\xD2\x3E\xA2\xFD\xCC\xF6\xE5\x9D\xAD\x9D\xD2\xB7\x76\x88\x9F\x89\x9F\x1F\xFA\xF9\xE9\x9F\x7F\x39\x7A\xF4\x68\x7D\xB8\x3E\xEC\x0E\x37\x84\xE9\x30\x1D\xD6\x44\x34\x11\x5D\x44\x17\x29\x8E\x9C\x1C\xA9\x8E\x54\x47\x6A\x22\x35\x91\x85\x91\x85\x91\x45\x91\x45\xD1\x6F\xEE\xFC\x12\x39\x1A\x91\xBE\xAF\xD3\x0A\x21\x58\x0B\x21\xB8\x0A\x7F\xEF\x40\xFA\xDE\x8E\xF4\xDD\x03\xE9\xBB\x3B\xCB\x33\x21\x68\xC9\x84\xE0\xD9\x2C\x14\xC6\xE2\xEF\xC9\xBD\x36\x10\x82\x2F\x07\x42\x30\xBA\x19\x82\xB1\xD8\x06\x15\xC2\x6D\xF8\x1B\x1E\xC9\xBE\xCB\xE3\xC6\xDF\xE5\xF1\x74\xF3\x5D\x1E\xF0\x0A\x04\xE3\xF0\x37\x17\x26\xC9\xBE\xCF\xF3\xF4\xEB\x28\xBC\x85\xC3\xCF\x38\xF4\xFF\x37\x0A\xA7\xE3\x30\x03\x07\x16\x87\xB5\x38\x74\xE0\xF0\x0F\x1C\xC0\x1B\x10\x44\xDE\x84\xE0\x8C\x7D\x10\x54\xED\x83\xC0\xBB\x0F\x02\x7E\x1F\x04\xCB\xF6\x41\xB0\x7A\x1F\x04\x97\xEE\x83\xE0\xB2\x7D\x78\x0F\xE3\x7D\x08\x22\x07\x50\xB8\xF7\x73\x14\x36\xE3\x60\x3F\x84\x82\xF4\x1D\xB7\x63\xFD\x0E\x8F\x5E\xF6\x1D\x9E\xFF\x4B\xDF\xDF\xA9\x23\xBD\x24\x47\x8B\x5F\xB2\xCB\x1C\x9A\x29\x58\x6D\x75\x64\x80\x23\xFD\x4D\x3C\x47\x02\xD0\xD6\xBE\xB3\xFD\xA5\xF6\x37\xDB\xEB\x94\xBB\x3D\xA2\x3C\xBC\x0B\xFC\x0D\x5C\x9B\x76\x6D\x9A\x20\xB3\x24\xF9\xF4\x33\x96\x4F\x3F\xEA\x7E\xD4\x09\xF2\x48\x90\x2B\x82\x7C\x18\xD9\x3E\xB2\xFD\x97\xA3\xBF\x1C\x95\xE6\xC8\xFE\xC8\xFB\x91\x0F\x23\x07\xA3\x36\xC9\x3B\x03\x21\xD8\x3F\x30\x36\xBE\xD2\xB8\xD6\x35\x91\x1C\xE9\x26\xC5\xF7\xC2\x82\x1D\x50\xD7\x44\x2E\x13\xCC\xE5\x5A\x0D\x04\x2B\x35\x10\xD4\xD1\x6E\xB7\xB8\xB3\x25\x3B\xF7\xF9\x4E\x7F\x01\xDE\xC8\xCC\xE1\x68\x9E\x96\x96\x69\x6F\x20\xFD\xAA\x7C\x7F\x57\x47\x33\x4D\xA4\x87\x04\x97\xE8\x57\x27\xF5\x41\xA1\x3C\x1F\x7D\x50\x7F\x58\xFF\x95\xFE\x1B\xBD\xB4\x5F\x58\xD7\x8C\x8A\x97\x74\x42\x3B\x68\x07\x0F\x80\x07\xA2\x3A\xA0\x3B\xD9\x9F\x4A\xBE\x0A\xB2\x4A\x2E\x7F\x24\x99\x23\xC8\x1B\x49\xA6\x7C\x10\xF9\x20\xF2\xF3\xD7\x10\x44\xBE\x86\xA0\xCE\x0B\xA2\xBA\x49\xD2\x49\x82\x2E\x7A\x10\x3C\x18\xD5\x41\x82\x9E\x11\xF4\x8B\x52\x76\x17\x96\x14\x8A\xF2\xF8\xDC\x92\x73\x4B\xD6\x97\x5C\x5F\x72\x4B\xC9\xAD\x25\x1B\x4B\x36\x96\xDC\x5D\x72\x77\x49\xB0\x24\x58\x72\x7F\xC9\xFD\x25\x2F\x95\xBC\x5C\xF2\x4A\xC9\x2B\x25\x7B\x4B\xF6\x96\x7C\x53\x12\x39\xC5\x52\x5A\x52\x7A\x51\xE9\x45\xA5\xB7\x96\x3E\x5C\xFA\x76\xE9\xFB\xA5\x8F\x0F\x7E\x7C\xF0\xD3\x83\x9F\x1E\xFC\xC3\xE0\xC8\x60\xB6\x8C\x2D\xEB\x8A\xCA\xED\x88\x15\x10\x72\xD9\x1D\xA9\x70\x0C\x99\x38\xE4\xAC\x21\x53\x87\x08\xF2\x53\x92\x9B\x92\xBC\x94\xE4\xE4\x81\xC8\x81\xC8\x27\x91\xCF\xE3\xEC\xD5\xDF\x5B\xEE\x48\x72\xA2\x0E\xEF\xA7\x07\x41\x10\x74\x80\x0E\x70\x3F\xB8\x1F\x6C\x06\x9B\x01\xD2\xC9\xD7\xA4\x25\xD3\xC5\x3F\x69\x7F\xD2\x22\xFD\xFB\x83\xEE\x27\x85\x0E\xFE\xB5\xFA\x57\xA9\x7B\x13\xF5\x69\x41\x4A\x7D\x7A\x4E\xC9\x39\x25\x53\x65\xFA\xF4\x86\x92\x9B\x4B\x6E\x2B\xB9\xA3\xE4\xCE\x92\xBB\x4A\xEE\x29\xF9\x5B\x49\xA8\xE4\xBE\x92\x07\x4A\x5E\x2C\xD9\x53\xF2\xAF\x92\x57\x4B\x5E\x2D\x79\xAD\xE4\xEB\x12\x50\x2A\xE8\xDC\x81\xA5\xA7\x88\x7A\xF7\x4F\xA5\x17\x97\xDE\x52\xFA\x48\xE9\x5B\xA5\x07\xE2\x74\xF0\x63\x83\xB7\x0C\xEE\x1A\xFC\xCC\xE0\xEF\x07\x83\x32\xA6\xCC\x57\x26\xE8\xE4\xED\x56\x50\x1E\x29\x07\x43\x4E\x1D\x32\x69\xC8\xE4\x21\xD3\x86\xFC\x3A\x7D\x7C\x2C\xBA\x18\xE9\xDF\x33\xDA\xCF\xC4\x3A\xF8\xE8\xD1\xA3\x47\xFF\x13\xF9\x4F\xE4\xE3\xC8\xC7\x91\x43\x7D\xA0\x4F\xDF\x1E\x08\xC1\xFB\xC7\x59\xAF\x1E\xAB\x1E\x94\xF4\x9F\xA4\xF7\x8E\x87\xBE\xFB\xE9\x6B\x08\xC0\x37\xFF\x23\x7A\x0F\xBF\x4B\x70\xE0\x75\x6A\x1D\xCB\x91\xCE\x3A\xD6\xEB\xA3\x90\xC2\x90\xFC\x7A\x48\xEF\x2B\xEB\xD8\x56\xD6\x5B\xCF\x8A\x3E\x23\x84\xF5\x60\x5D\x80\x71\xA3\x0F\xDE\xB4\x99\xB7\x9B\xBB\x8A\x77\x17\xD7\xB5\x7A\x58\x9E\x76\x4E\x27\x1B\xC5\x57\xB8\xED\xB6\xF6\xBA\x56\x8E\x26\x25\xCD\x99\xA1\xCF\x30\x64\x9C\x93\x31\x2D\x63\x46\xC6\xE2\xCC\x25\x99\xB3\xC8\x46\xD2\xC3\x36\x02\xE4\x23\x28\xAF\x60\x16\xD9\x58\x4F\x32\xCB\x49\x00\x24\x2F\x41\x5C\x81\xBF\x40\x7C\x03\x49\x01\x20\x79\x03\x12\xE2\xB3\xC4\x2F\x73\x5A\xA2\x77\x61\xD0\xBB\xDA\x8D\xA6\xFB\x4C\x42\xEA\x6C\x9A\xE2\x01\x68\x13\xBD\xE0\xBC\xD7\x39\x8B\x6C\xC6\xEF\x93\xDB\xB0\xDF\x0D\xE9\x3D\xEA\x2C\xD2\x4B\xCB\x3F\xEF\xB4\xAA\x97\xFE\xA0\xE4\x77\x92\xF6\xE8\xF6\x88\xE7\xBF\x0F\xEA\x7E\xD2\x75\xE1\xF9\x22\xAD\x87\x67\x91\x4C\x63\x40\xF6\xC9\x9B\xFD\xD8\x87\x97\xDC\x0F\x45\x64\x5D\xCC\x0F\xC5\x2C\xCA\x13\x68\x94\xBF\x00\x4B\xF0\x39\x15\x7F\xEF\x09\xF9\x9F\x72\x65\x37\x64\xB3\xD9\xCB\xB3\x57\x66\xCF\x6A\x22\xC5\x2F\x01\xB5\x65\x3C\x98\x31\xAB\x89\xA4\x01\x80\x39\x55\x39\x35\x39\x0B\x72\x66\xD1\xF5\x14\x9F\xB8\xC1\x86\x7D\x44\x2D\xC5\xE7\x1B\xB7\x89\x72\x19\xED\x3B\xCD\xA2\x1B\x68\x86\x6C\x6C\x02\x00\x7D\xD5\xC2\x37\x74\xE5\xD0\x95\x43\x67\xD1\x5C\x53\x80\x97\xDE\xF0\xB4\x61\xBF\x27\xD2\x7B\xEA\xF3\x1B\x05\x33\x2A\xF6\x56\x4C\xF2\xC3\x23\xED\xAF\xCC\x16\x9A\xF4\xB7\x21\xC1\x39\x24\xE3\x6A\x62\x81\xE8\x27\xE3\xC7\x03\x31\x7B\x67\x0E\xC9\x91\x4C\xA3\x73\x02\x8D\x3F\x6D\xB6\x11\xBF\x7F\x8C\xE0\x30\x8F\xBA\x90\x96\x5F\x10\x90\xFC\xD7\x6C\xC2\x7B\xB6\x92\x1F\x9B\x79\x02\xCE\xC6\xAB\xEE\x11\xE4\xE6\x7C\x59\x77\x2D\xC0\x02\x36\x82\x8D\xA0\x2D\xBF\x2D\x1F\x58\xB2\x2C\xE5\x16\xC2\x72\xAA\xE5\x54\x8B\xD3\xE2\xB4\x00\x07\x70\xCC\x27\x19\xB2\x9E\xBC\x90\xE4\x9C\x75\x4B\x03\x24\x87\x5E\x7A\xE3\xB3\x60\xF3\x3D\x00\x94\x5B\xCA\x2D\xF3\x7D\x00\x10\x16\xC2\x32\xDF\x9F\x58\x9E\xBC\x2C\x21\xAB\x67\x2A\xFE\x16\xBB\xD4\xDE\xA9\x00\xA8\x01\x00\x37\x29\xE0\x1B\x31\x7C\x8B\x02\xBE\x07\xC7\xDF\xC0\xCF\xFD\x53\x01\xC8\x07\x00\xD4\x4C\x03\xA0\x14\x00\x30\x77\x3A\x82\xFB\xA6\x03\xA0\x91\xD7\x33\x3D\xBE\x9C\xF5\xD3\x01\x50\x09\xF5\x60\x78\x27\x8E\x4B\x7F\x0F\x61\xF8\x16\xFC\xDC\x8A\x9F\x3B\x14\xE5\xEC\xC1\xF9\xF6\x63\xF8\x41\x45\x39\x5F\x48\xF8\x33\x80\xF8\x15\x61\xE9\x6F\xE4\x8C\xF8\x72\x6A\x67\xA0\xF6\xFA\x30\xFC\xC2\x19\xA8\xFF\xD2\xDF\x65\x0A\xFC\xF5\x38\xBD\x1D\xC3\x37\x2B\xD2\x1F\xC1\xF1\x6D\x33\xE2\xDB\xB3\x0B\xC3\x5F\x50\xE0\xEF\xC1\xF1\xFD\x33\x00\x30\x0A\x7C\x51\x0B\x80\x16\x00\xD0\x54\x8B\xE0\x17\xD5\xC6\x97\xB3\xA6\x36\x3E\xFF\x55\x38\x7E\xBD\x02\xBE\x19\xE7\xEB\xC2\xF0\x1D\x8A\x72\x5E\xC0\xF0\x3D\xB5\x00\xE8\x01\x00\xC6\xF3\x00\xC8\x00\x00\x4C\x39\x4F\x41\x9F\xF3\x50\xBE\xC5\x18\xEE\x3B\x4F\x31\xBE\x18\xBE\xEE\xBC\x78\xBA\x6D\x50\x94\x73\x0F\x8E\xDF\x8B\x9F\x9B\xF1\xB3\x0B\x97\xBF\x07\xC7\xF7\x9F\x07\xC0\x02\xA1\xDE\x3A\x00\x66\x0A\xF1\xF3\x11\xFC\xE3\xF3\xE3\xCB\xFF\x06\xC3\x7F\x38\x3F\xBE\x9E\x5F\x14\x71\xE3\x6C\xD4\x5E\xC7\xEC\x78\x78\xCD\x6C\x00\xD2\x85\xFE\x60\x78\xDB\x6C\x00\x32\x65\xE9\x1B\x15\xF8\xED\x38\xBE\x19\x3F\xBB\x66\xC7\xD3\x61\x8F\x02\x7F\x3F\x2E\xCF\x32\x27\x1E\x5E\x8E\xE3\x0E\x05\xBC\x66\x0E\x00\x69\xC2\xB8\x2B\xE0\x6D\x73\x10\x7D\xD6\x2B\xE0\x37\xE1\xF8\x46\x05\xBC\x1D\xC7\x37\xE3\x67\xD7\x1C\xF4\x4D\xFF\x68\x3D\x73\x11\xBC\x76\x2E\x00\x59\x32\x78\x0B\x86\xAF\x99\x8B\xEB\x9B\x8B\xDA\xB3\x65\x6E\x7C\xF9\x5D\x38\xFE\xAC\x02\xBE\x67\x2E\x00\x06\x81\x7F\xE6\xE1\xF2\xE7\x01\x50\x22\xD0\x61\x1E\x1A\xB7\x1F\x30\xDC\x38\x3F\x7E\x3E\x4E\x99\x1F\x5F\xCE\xE2\xF9\x68\x5C\xD6\x63\xF8\xC6\xF9\x68\x5E\x44\xE9\x8A\xE1\x47\xE6\x03\xA0\x13\xE8\xBB\x00\xD1\x79\xF1\x02\xCC\x9F\x0B\xE2\xCB\x6F\x5F\xA0\x68\xFF\x02\xCC\x6F\x18\xFE\x86\x22\xFD\x6D\x45\xFC\xC8\x02\xD4\xFE\xCC\x85\xB8\xFD\x0B\xD1\xFC\x94\xFE\x86\x63\x78\xF5\x42\x54\x6E\xED\x42\x84\xDF\xB4\x50\x31\x8E\x38\x7D\x3D\x86\x6F\x5C\x08\x40\x9E\x50\xFE\x42\xD4\x7E\xC7\x05\x8A\x79\x77\x01\x9E\x77\x0A\x78\x1B\x86\xAF\xC7\xF0\x5B\x2E\x88\x9F\x17\x41\x05\xFE\x66\x8C\xDF\x85\xE1\x7B\x2E\x40\xF3\x5D\xFA\xD3\x2C\xC2\xFD\x5A\x84\xE6\xBF\x63\x11\xC2\xAF\xC1\xF0\x73\x16\xC5\xCB\x8D\x99\x8B\x14\xE3\xB5\x08\xB5\x7F\xA3\x02\xDE\x85\xF3\xED\xC1\xF0\xFD\x8B\xE2\xE7\xCB\x11\x05\x3E\x70\x22\x7C\xA3\x33\x1E\x6E\xC1\x70\x07\x86\xD7\x38\x01\xB8\x08\x02\xE0\xA0\x00\xF8\x4A\xA8\xC7\x83\xFB\xE5\x41\xFC\x20\xFD\xFD\x82\xE1\x46\x6F\x3C\xFF\xAF\xF7\x22\xF8\x4D\xDE\x78\xBA\xDD\x83\xE1\x9B\xBD\x88\xEF\xA5\xBF\x1D\x5E\x05\x9F\xE3\x7C\x1F\x2B\xE0\x80\x41\xF4\x1B\xC9\x60\x7E\xC0\xCF\x89\xF8\x39\x15\x3F\x6B\x19\x00\x5C\x2A\x00\xF6\x2F\x07\xE0\x14\x81\x0E\x2D\xB8\x9C\x56\x00\xCE\x10\xE8\xD4\x8A\xF8\xDF\x78\x21\x82\x5B\x2E\x04\xE0\x14\x08\xC0\xE6\x15\x00\xEC\x16\xEA\x5D\x83\xF9\x7F\x4D\xFC\xFC\x2D\xBC\x14\xE3\x5F\x0A\xC0\x3C\x15\x00\xEB\xAF\x01\x60\xB0\x30\x7F\xAF\x55\x8C\x0B\x8E\x3F\xAB\x80\xEF\xB9\x16\xEB\x53\x0C\x3F\x72\x2D\x00\x7F\x17\xE2\xD7\x01\x20\x18\xE0\x85\x1B\xE2\xF1\x07\xE1\xB8\x4D\x01\x1F\x8E\xE3\xA3\xF1\xB3\x76\x03\xA2\x8B\xF4\xE7\xC1\x70\x7E\x43\x3C\x5F\x5D\xA4\x28\x67\x3D\x4E\xDF\xA8\x80\x6F\xDE\x80\xE8\xFF\xAC\x02\xBE\x1F\xD7\x53\x78\x23\xA6\xC3\x8D\x00\x78\x05\xF8\x4D\x00\x8C\x17\xFA\x73\x0B\xC6\xBF\x35\x7E\x7C\xF3\x6E\x55\xF0\x1B\x8E\x97\xE3\xE7\x88\x5B\xE3\xF9\x64\xBC\x02\xBF\xF6\x56\x3C\x4F\x15\xF0\x36\x9C\xEF\x26\x05\x7C\x33\x8E\x6F\x51\xC0\xBB\x30\xFE\x1B\x18\xBE\xFF\x56\x00\x5E\x11\xF8\xFE\x0E\x00\x04\x33\xFC\x8D\xBB\x14\xFD\xBD\x0B\xD5\x7B\x44\x82\xDF\x8D\xF8\xA6\xF0\x6E\xDC\xFF\xBB\xE3\xF1\x1D\x77\xA3\xF2\xA7\x28\xE0\xB5\x77\x23\x7A\xB4\x60\x78\xDB\xDD\xF1\xFD\xBD\x0A\xC3\xD7\xDF\x0D\xC0\x04\x61\x3C\xEE\x41\xF4\xDC\x1C\x54\xB4\x3F\x88\xE7\xBB\x02\xBE\x3F\x88\xE5\xBF\x04\x0F\x21\xBE\xDC\x18\x02\xA0\x50\xA0\x5B\x3B\x96\xDB\xED\x0A\xBB\xA2\x5D\xC1\x0F\xED\x98\x1F\x30\xFC\x9E\xF6\x78\xFE\xB9\x17\xC3\x37\xB7\x23\x3E\xD8\xD3\x8E\xFA\xF5\x83\x54\x4E\x07\x00\x03\x84\x72\x3B\x00\xA8\x10\xD2\x3B\x15\xED\xEC\xC4\xF4\x54\xC0\x8D\x9B\xB0\xFD\xB0\x09\xF3\xC3\xA6\xF8\xF4\x2A\x1C\x9F\xA8\x80\x4F\x51\xC4\x17\x6F\x42\x74\x68\x51\xC0\xD7\x6F\xC2\xFD\x52\xC0\x1F\xC1\xF1\xAD\x0A\xF8\xB3\x38\xBE\x47\x01\xDF\x8F\xCB\x39\xA2\x80\xFF\x82\xE3\x9A\x7B\xE3\xE1\x85\x38\x6E\x51\xC0\x6D\x38\x3E\x1C\x3F\x6B\xEE\x8D\xD7\xA7\x2D\x0A\xFC\xB6\x7B\xB1\x3E\x52\xC0\x37\x62\xF8\x66\x0C\xEF\xBA\x17\x80\x35\x42\xBB\xEF\x07\xE0\x74\xA1\x9C\xCD\x0A\x3A\x6C\xC6\xF6\x86\x02\xBE\x03\xC7\x5F\x50\xC0\xDF\xC0\xF1\xFD\xF8\x79\x64\x33\xE2\x7F\xE9\x2F\xF3\x41\x2C\xFF\x1F\x04\x20\x17\x00\x30\x0B\xC7\x17\xE2\xE7\xE2\x07\x01\x98\x22\xEF\xC7\x43\x98\xCF\x1F\x8A\x97\xAB\x5B\x30\xFC\x99\x87\xE2\xEB\xDF\xA5\x88\xEF\x7F\x08\xD3\x5F\x82\x3F\x1C\xAF\x8F\x6C\x0F\x23\xB8\xE3\x61\x00\x2E\x11\xE8\xFA\x28\x00\xC3\x85\x7C\x8F\xE1\xF6\x3F\x06\xC0\xB9\x32\xFC\xE2\x2D\x8A\xF9\xBB\x05\xCF\x5F\x0C\xAF\xDD\x12\xCF\xFF\x73\x31\x7C\x91\x02\xDE\x80\xE1\xBE\x2D\x00\x5C\x2F\x8C\xC3\x93\x00\x9C\x27\x94\xF3\x14\x82\xCF\x7C\x2A\x1E\x7F\x3E\x86\x37\x28\xE0\x0C\x86\xB7\x3D\x05\x40\x3F\x61\x1C\x9F\xC2\x7A\xF0\x29\x85\xBD\x84\xE3\x3F\x28\xE0\x60\x1B\x8A\x67\x6E\x53\xCC\xAF\x6D\xA8\x1E\x8B\x02\xEE\xD8\x86\xFB\x8B\xE1\xB5\xDB\x00\xC8\x16\xEA\xC7\xF1\x2B\xF0\x73\xFD\x36\x34\xAF\x35\xDB\x51\x3C\x1B\x3F\x8D\xDB\x11\x9F\x1D\xD9\x8E\xC6\x61\x4A\x17\x2E\xA7\x0B\x00\x9F\x90\xFE\x0C\x00\x93\x85\x71\xD8\xA1\x98\xB7\x38\x5E\xAB\x80\x2F\xDE\x81\xDA\xE9\x53\xC0\x5B\x70\xBC\x0D\x3F\xD7\xED\x88\xA7\xDB\x75\x18\xBE\x51\x91\xEF\x1E\x1C\xDF\xBC\x23\x5E\xEE\x75\x61\xF8\xB3\x8A\x72\xF6\x60\xF8\xBE\x1D\xF1\xF2\xF9\x20\x86\x7F\xA1\xC0\xFF\x4E\xAA\x6F\xA7\x42\xDF\xED\x44\xF0\x93\x77\xC6\xE3\x97\xED\x54\xD0\x1F\xA7\xD7\x60\x78\xED\x4E\x64\x87\xAF\xC7\xF0\x8D\x0A\xFC\xCD\x3B\x51\x3F\xF6\x60\xF8\xFE\x9D\x68\xBC\xA2\xE3\xBC\x0B\xC1\x0B\x77\xC5\xE7\x2B\xC6\xF1\x53\x76\xC5\xB7\xA7\x02\xC3\x6B\x76\xC5\xDB\x0F\x0B\x31\xBC\x61\x57\x3C\x1D\x38\x45\xB9\x6D\xB8\xBC\xF5\x0A\xF8\x46\x0C\xDF\x8C\xE1\x8F\x28\xD2\xB7\x28\xE2\x5D\x18\x7F\x8F\x02\xBE\x1F\xC3\x8F\x28\xE0\x82\x91\x26\xB4\xAB\x70\x37\x82\x17\xEF\x8E\xEF\xD7\x20\x0C\x77\xEC\x8E\x5F\x6F\xD6\xEE\x8E\x2F\xC7\x8D\xE3\x1E\xFC\xF4\x29\xD2\x79\x1C\x6F\x51\xC0\x2F\xC2\xF1\xB6\xDD\xF1\x74\xEB\x12\xFE\x1B\xB7\xF9\x61\xB5\xAE\x4B\x2D\xEA\x03\x90\xFA\x4F\x9C\xA7\x3D\xA4\x1B\x7B\x48\xAF\xE9\x26\x5D\xF8\x6B\xEB\x26\xAD\x3A\x13\x80\xCC\xB7\xC5\x72\x56\x40\x00\x5A\x20\x00\x1E\x81\x87\x07\x02\xB4\x76\x39\x14\x89\x2C\x1F\x81\xEA\xF9\x0E\x00\xE3\x28\x08\x10\x8D\x35\xB8\xDD\xE2\x3E\x0A\x6E\x43\x9B\xD4\xA0\x3E\x44\x10\x12\x05\x9D\xE1\x16\xE4\xA1\x1A\x00\xA3\x15\x80\x8D\x97\x41\x50\x33\xDE\x00\xDA\x36\xDC\x04\xC0\xFB\xDF\xA6\x81\xE7\x6F\x19\x25\x14\x60\xC0\x99\x05\x9D\xD4\x0F\x17\x2C\x84\xDB\x86\x61\xFD\xF4\x16\xD6\x4F\x6F\x49\xE3\x1A\x11\xBF\x15\x1B\x89\x18\x81\xD0\x67\x61\x8D\x00\xC6\x1D\x79\x4C\xAD\xDB\x0A\x7B\x20\xF1\x7F\xF7\xDF\xA1\x83\x2A\x0D\x43\x7A\x29\xF8\xF8\x41\x55\x47\x1A\xD0\xB2\x3E\xD2\x49\xD6\xB3\x1C\x0F\xB3\x85\x9F\xF5\x01\xDA\xC3\xD3\x8C\x43\x25\x8F\x0D\x53\xCB\x63\x95\x1A\x79\xEC\xB4\x34\x79\x6C\x78\xBA\x5E\x2C\xB0\xB1\xD1\xE9\x62\x03\x0C\x9F\xA1\x93\xA2\xFE\x80\x37\xD3\x20\x45\x7C\x1C\xEB\x0E\xB8\x78\x6D\x34\xD5\x4B\xB6\x64\xC5\x22\x34\xA3\xCB\x8E\xE6\x63\x39\x3E\x3B\x9A\x44\x7A\x3C\xFA\x58\x84\x69\xCD\x41\xD5\x71\x34\xDF\xE4\x24\xEB\xFD\x06\x43\x2C\xCA\xB1\x01\xC6\x6D\xCC\x89\x01\x5C\x14\xED\xC9\x95\x21\x34\x78\x58\x96\xEB\x27\x43\xF0\x79\x02\xFE\x93\x64\x08\x5E\x9A\x09\xF8\xF3\xFA\xC9\x00\x01\x0F\x4F\xFB\x3C\xAD\xFD\x8D\x31\x98\x9B\x5E\x46\xBB\xA9\x7C\x59\x3B\x38\xCA\x5B\x80\x11\x38\xB2\xD5\xE9\x62\x19\x17\xC9\x17\x1A\x62\x10\xBF\x87\x76\x51\x45\x62\x37\xEA\x69\xDE\xEF\x64\x39\x53\x76\x34\x42\x32\x6E\xB3\x21\x1A\x63\xA8\x46\x92\xA7\x8A\x63\xC9\x2D\x2C\x37\xA0\x5F\x34\xE6\x6F\xA2\x1B\x78\x0F\xD5\xC0\x9F\x7C\x52\x3C\x8C\xA3\x1B\x9B\xF8\x81\xB9\x02\xD0\x45\xBB\x39\xA1\x11\x3C\x49\x33\x7E\x4B\x96\x8F\xE4\xFC\x94\x08\x2C\xC9\x44\xBF\x69\xDF\x29\x27\x45\x11\x69\x86\xA7\x38\x3F\xE5\xE2\xFD\xA5\x59\x22\xD0\xEB\x73\x52\x4B\x07\xE9\xA4\xDF\x0C\xB5\x74\x70\x34\xA1\x91\x2F\xD3\xC5\x7E\x53\xD6\x68\x82\x87\x2F\xD7\xC5\x7E\x53\x84\x48\x0E\x6A\x19\xE9\x71\xBA\xF8\x16\x27\x43\x2D\xAF\xC8\x8F\x83\xF8\x29\xDE\x49\x33\xBE\x00\x3F\xA4\x7F\x02\xDC\x4D\xF2\xA4\xCD\x9C\x00\xA6\x18\x9E\x6B\xF5\xB1\x34\xC3\x0F\x2D\x88\x4B\x6C\xA4\x78\x27\x47\xF9\x03\x1E\xDE\x6E\x76\x3A\x1B\x58\xCE\x45\x39\x69\xAF\x8F\xE5\x78\xA7\x8C\x51\xFD\xA7\x8A\x23\xC6\xB3\x4E\x26\xE0\xAD\xA7\x38\x07\x22\x20\xE9\xA7\x46\x0C\x77\xD2\x7E\xE7\x32\xD2\x43\xBB\x87\xE5\x62\x40\x23\xC5\x38\xDD\x94\x8B\x75\x53\x95\xB9\x32\x3C\x04\x3A\x4D\x0E\xA2\x18\x01\x34\x5C\x9E\x11\x81\x4E\xEF\x2F\xC3\x0A\x70\x1E\x9C\x79\x84\x12\x8C\xB0\xCF\x10\xC7\x78\x89\x9F\x65\x9C\x01\xC6\x4B\x72\xFE\x26\xD2\x33\xD2\x18\x85\x61\xC8\x99\x62\xCD\x5C\x80\xE1\x69\x2F\xE5\xA4\x38\x8E\xE5\xAA\x0A\x70\x07\x9D\x8D\x1C\xE9\x13\x98\x91\x74\x35\x91\xF5\x1E\x6A\x54\x61\x34\xB7\x87\x6A\x11\xE0\x6E\xDC\xF5\xD1\x49\x52\xFC\x3C\x47\x33\x8D\x63\x72\x13\x52\xAA\xFB\x47\x41\x88\x7B\x10\xE6\xD8\x3C\x05\x98\x67\x9B\x29\xA6\xA6\x9F\x12\x99\xE2\xC7\x29\x0B\x60\xEB\x97\x50\x2E\x7E\x7C\x4E\x3C\x78\x82\x38\x07\x96\x91\x9E\x00\x85\x00\x13\x8B\xA3\x08\xCB\x39\x9A\xA7\x38\x27\xE5\xA5\x79\x67\x3D\xCB\x7A\x28\x92\x99\x94\x3C\x55\xE0\xE6\x46\x8A\x9B\x6C\x4E\x9A\x8A\xBA\x7F\x56\xF2\x44\xD4\xAF\x29\xA7\x24\x4D\x44\xF3\x98\xF2\x50\x5E\x8A\xE1\xCF\x36\x25\xC5\x11\xDB\x7E\xCE\xC0\xA4\x69\x2E\xD6\xE3\xA1\x5C\x3C\xCD\x32\xE7\x5A\x92\xD7\x2E\x70\x38\x2A\x7E\x6A\x6A\x0C\x8F\x10\x25\x3D\xD3\x4A\x93\x62\x20\xC2\x4A\xC5\x4C\xEF\xAF\x44\x12\x1F\x33\xF4\x51\xB0\x3B\xE0\xF5\xD5\xE6\xC4\xC8\x2E\xC4\xCF\x13\x79\xAE\x89\x22\x7D\x4E\x1F\xCF\x09\x73\x6B\x66\x3C\xC4\x4F\xF1\x75\xE2\xB4\xF7\x92\x1E\x0F\xEB\x9A\x95\x29\xFC\x6E\xE0\x28\xEA\x7C\x51\x00\x70\x94\x08\x9E\xDD\x5F\x36\xF5\x9C\x2E\xD2\xD5\x44\x09\x65\xCD\x49\x02\xF6\x53\xFC\x5C\xB1\x0A\x2F\xE5\x65\xE9\x0B\x29\x27\xCD\xD0\xFC\xBC\x38\x88\x2F\xE0\x6F\x9A\x6F\x88\x83\xB0\xBE\x05\xFD\xE2\x33\xF9\x29\x8E\x5F\x18\x87\xD4\x48\xF1\x17\x88\x82\xD4\xEB\x73\x8B\xA5\x2E\x32\x08\xBF\xDC\x54\x03\x19\xF0\xF0\xA2\xEC\xD0\x09\x00\x2F\xD9\x22\x44\x16\xEB\x24\x5C\x37\xE5\x21\xC5\x06\x20\x86\x11\x84\x46\x7D\x43\xBD\x08\xA9\x6F\x88\x89\x10\x57\xA1\x12\xE2\x64\x58\x91\x16\xEE\xDC\x58\x4A\x7D\x83\x28\xA6\x29\x09\x24\xCA\x6C\x11\xDE\xA0\x59\x4A\xD6\xFB\x1B\x33\x97\x92\x6E\xB7\x93\x65\xA8\x26\x8D\xF0\x8B\xCE\x5C\xEA\x0F\xD4\x0B\xF1\x25\x9A\xA5\xDE\x80\xA7\x59\xB3\x94\x64\xDC\x9E\x4C\xE1\x7F\x27\xC3\xF2\x5E\xF5\x52\x96\x63\x34\x4B\x5B\x58\x8E\xD5\x2C\x65\xA8\x46\x5F\x6E\xAC\xA9\x7E\x27\x47\x32\x8D\xD4\xD2\x5C\xA7\xD3\x47\xF2\x4D\x62\x45\x88\x2D\xB8\x6C\x27\x9E\x7F\x62\x82\xD1\x29\xCA\x4D\x3C\xFF\xF8\x26\x3F\xAF\x77\xA2\x18\x47\x79\xD9\x65\x54\x40\x8A\x36\xD0\x1E\x9E\xE2\x96\xF5\x97\x06\x0D\x33\x19\x02\x2F\xEF\xA7\x00\x37\x52\x7C\x8B\x12\x15\x15\xD8\x9A\xA7\x00\x07\x18\x9A\x65\x2E\xCC\x70\x3A\xBD\x14\xD7\x48\xFD\xE9\x24\x29\x59\xD6\x88\x8B\xE2\x81\xA8\xCE\x8B\xC5\x21\x15\x15\x05\xDD\xD0\xB0\x22\x4F\x8A\x45\x15\x19\xCD\x32\x2B\xFB\x63\xA8\x3F\x0E\xDC\x06\xF5\x12\xB6\x58\xFB\x25\x30\x27\x8A\x27\x02\x56\x41\x91\xB5\xFD\x3C\xE7\xA1\x98\xD5\x50\x87\x23\x8C\xCB\xEB\x5B\x83\x62\xB4\xDF\x4D\x37\xD2\xFC\xA5\x52\xCC\xEF\x23\x5D\xD4\x65\x50\x8B\x62\x4D\x54\xCB\xE5\x50\x9C\x11\x34\xCF\x92\x57\xA0\xD2\x48\x9E\xA5\x47\x0C\x5F\x1B\x8D\x34\x8C\x18\xBE\x0E\xF6\xC3\x45\xD3\x4C\xA3\x1F\x5B\x0C\x57\xC2\x3C\x05\x50\xD4\xE0\x57\xC5\x83\x29\xC6\xED\x5F\x4E\xF3\x4D\x57\xC3\x7C\x39\xB8\x81\xE5\xBC\xA4\x48\x84\x6B\xE0\x49\xF2\x04\x9A\x71\x53\x2D\x6C\xC3\xB5\xF1\x50\x8E\xF2\x79\x48\x17\xB5\x1E\xF6\x4F\x02\x75\x32\x7F\x86\xB9\x72\xB8\xDF\xE7\xA1\xF9\xEB\xE2\x2B\xF4\xF3\x24\xC7\x8B\x2D\xF9\x4B\x7C\x21\xFE\x40\x3D\xFA\x79\x3D\x34\xCA\xE1\x3C\x47\x7B\x6F\x88\x47\x15\x40\x4E\xC1\x9A\xD9\x10\x5F\xB6\x08\x17\x2D\x9A\x1B\x61\x41\x42\x82\x8F\xA3\x1A\xE8\x96\x9B\x92\xA4\xF8\x03\x0D\x0D\x74\xCB\xCD\x49\x0A\x13\x87\xE9\x16\x98\x15\x8B\xDC\x1A\xDF\x45\x0F\xBB\x9C\xE2\x6E\x8B\x87\x05\x7C\x3E\x8A\xFB\x2B\x22\x1C\xDF\xEA\xA3\xFC\x82\x9D\x80\xE6\xD9\xED\x0A\x28\xCA\x72\x07\x1A\xAA\x28\x14\xEB\xAA\x8D\x68\xB4\xA3\x60\x51\x99\xDC\x89\xA8\x13\x2B\x81\xE2\xEF\x52\x14\x8A\x26\xCA\xDD\xA8\x51\xB2\x06\x78\x3C\xF7\x20\xC6\x45\x30\xC1\xB8\xFF\x1B\x22\x6C\x80\xA1\x05\x63\xC2\xE9\x0F\x70\x1C\x2B\x18\x92\x41\x44\x25\x09\x8E\x4C\x10\x21\xCA\x87\x60\x71\x92\x94\x68\xC6\xF6\xE4\x19\xF9\x86\x91\x1D\xF1\x29\xC8\x7C\x11\x53\x3A\xE3\x1B\xE1\x21\xFD\xBC\x08\xDF\x84\xC8\x22\xC1\x85\xCE\x0A\x23\x70\x6F\x3C\x98\x67\xD1\x20\xDC\x97\x00\x16\xC7\xE1\x7E\x28\xD3\x54\x42\xC7\x1F\x90\x03\x9A\x48\x7F\xD3\x66\x44\x28\x04\x70\xB1\x5E\x1F\xC9\x51\x0F\x22\xA4\x98\x74\x7A\x08\x4F\x6A\x4A\x8C\x3D\x8C\x46\x46\x12\xF3\x5C\xAB\x30\x81\x1E\x41\x52\x02\x95\xD3\x48\xF1\x8F\xC2\xC2\x84\x72\x71\x96\xC7\x92\x25\xA1\xCA\x1E\x47\xC4\x88\x4F\xF2\x53\xFC\x16\x68\x90\x55\x29\xB4\xFB\x09\x79\x47\x04\x45\xFD\x24\x62\x0D\x04\xF0\x50\x4C\x23\xDF\xF4\x77\x94\x0B\xF7\xA3\x99\x6A\xF5\x6F\x85\xB2\x25\x07\xE9\xF3\x51\x8C\xFB\x29\x79\x41\x82\x1A\xDA\x06\x65\x46\x95\x28\x66\xB7\x23\x1A\xE1\x72\x90\xD2\xEC\x82\xB9\x4E\xA7\x9C\x4A\x1C\xBB\xFC\x69\x44\x26\xCC\xC0\xCF\xA0\x82\x71\x9B\x39\xAA\xE1\x1F\x71\x00\x9A\xE1\x77\x44\x05\x27\xCD\x34\xEE\x84\x03\x62\xD5\x0A\x66\xAB\x87\x5D\xEE\x74\xB1\xBE\x56\x5C\xC3\x2E\x68\x4A\x91\xEE\xA7\xF8\xDD\xB1\x01\x22\xDD\xEE\x67\x61\x0E\x6A\x9B\x38\x60\x1C\xBB\xFC\x39\x34\xB9\x13\xF3\x3E\x8F\xF8\x19\xF3\x07\x47\x32\x7E\x9A\xA7\x97\x51\x4E\x97\x87\xF5\x07\x38\xEA\x9F\xF0\x64\x54\x50\x2A\x84\x17\x90\xDC\x16\x66\xD7\x8B\x71\x43\xE4\xA7\x2F\xA4\x5E\x42\xE3\x1C\x23\x80\x53\xB4\x72\x48\x9E\x72\xBF\x8C\x26\x6D\x94\x14\xC8\x08\xDD\x23\x17\x74\x4E\x9E\xE2\xBC\x34\x23\x60\xFF\x4B\x2E\xCC\x63\x85\xBC\x82\x14\x88\x38\x98\xAF\xC2\x7E\xB1\x81\x5D\x2E\xAE\x63\x49\xDF\x5E\x44\x5F\x44\xBF\xD7\x60\x06\x26\xC9\xEB\x58\xC4\x52\x7C\x14\xF3\xDF\x72\x96\x94\xBA\x80\xD4\xE3\x1B\x30\x27\x56\xB2\xB0\xCC\x7E\x13\x55\x85\x70\x05\x23\x44\xB0\x04\xF6\xC9\x19\x17\xE9\x61\x11\xFE\x16\x6A\x82\x87\x65\x9B\x03\xBE\xB7\x51\xC5\x5E\xD2\xE7\x13\x3A\x22\x74\xFB\x1D\x54\x98\x04\x42\x78\xEF\xC2\x46\x86\x75\x53\x55\x55\x1C\x55\x59\xEE\xE7\xDD\x55\x55\x4E\xE7\xB0\xAA\xAA\x7A\xD2\x4F\xBB\x30\x15\x46\xBB\x9A\x48\xCE\x66\x89\x25\x0A\x71\x61\x80\x68\xDE\x2F\xA6\x55\xCB\x13\x31\xC9\x58\x0E\x25\x59\xAA\x2D\x2E\x96\xF1\xF3\x65\xC4\x7B\xD0\x4D\xF9\x5D\xA4\x8F\xEA\xDB\x6A\xF6\xC3\xFD\xAA\x46\x0F\x5B\x8F\x38\xC8\x43\xF2\x54\xB9\x80\x81\x92\x2B\x6C\x96\x00\xE3\xA7\x1B\x19\xCA\x6D\xF1\xB0\x4C\xA3\xBC\xC4\x65\x94\x4B\x28\xAE\x4F\x1A\x97\x3C\xB1\x6F\xE8\x10\xA3\x85\x1C\xEF\x77\xAC\xA1\x82\x78\x1F\x96\x7B\xA8\x16\x8A\xAB\xAA\x12\x1F\xDD\x10\x98\x38\x00\x0D\x18\x75\x05\xC2\x25\x3E\x80\x27\x61\x08\x43\xB5\xF0\xE5\xE2\xB2\xB4\x82\xF8\x4F\x14\xDA\x40\xF1\xAE\x26\x41\xCC\x7A\xCB\x89\x0F\x61\x5E\x1C\x54\xB4\x9D\xCB\x89\x83\x70\x40\x1C\x98\x17\x0A\xA2\x19\x1E\xB7\x81\xF8\x08\xEA\x11\x53\xAF\x10\x1E\xE5\xC4\xC7\xF0\x24\x14\x47\xF2\xB4\x5C\x88\x54\x10\x9F\x40\x93\xC8\x28\xA2\xD1\x8D\x3A\x54\x61\xB3\x88\x69\x15\xC4\xA7\xD0\x2C\xC2\x39\xA7\x97\xA4\x99\x72\x3F\x4F\xF2\x54\x85\xCD\x82\xB0\x88\xCF\x60\x31\x4E\x45\x2D\x52\x24\x7F\x8E\xE6\xB1\x58\xBA\x97\xE4\x5D\x4D\x87\xE0\x5D\xEA\x65\x2C\xED\xFE\xDF\x64\x37\x21\x4D\x58\x01\x3A\xEB\x49\x57\xB3\xD3\x2F\x08\x7C\x41\x1E\xF5\x55\x85\x7D\x23\x3F\xCA\xCA\x88\x2F\xE0\x81\x8C\x18\x86\x53\xD4\xFD\xA2\xBE\x57\x90\x0F\xA7\x08\x9C\x92\x08\x8D\xD9\x3F\xA3\xD1\xF2\xB9\x99\x6A\xED\xA3\x89\x28\x0C\xB4\xC0\x55\x15\xD5\x15\xD5\x96\x84\x86\xF0\x64\xBD\xE7\x8F\x6F\x9F\xBC\xFE\x00\xC3\x72\x6E\x8A\xA3\x84\x05\xBD\x4F\x6C\x0D\xC5\x25\x6F\xC4\x1F\xDD\x56\xA1\xF6\x58\x95\x71\x49\xD4\xD2\x00\xE9\x71\xF2\x6C\x5C\x32\xCF\x05\xA8\x6E\x3B\x2B\xE6\xFA\xEF\xEC\x6B\xD2\x0E\x75\x43\x8A\x84\xBE\x26\x93\x30\x7F\x44\xA7\x90\x28\x6A\xA0\x19\xB7\xAC\xBD\xE5\xD1\x9F\x92\x81\x70\x18\xEE\x52\xC5\xCA\xF1\x91\x74\x0A\x1E\xFC\x5D\xDB\xA6\xAC\xA8\xAF\x74\x73\x99\xCD\xD2\x40\x7A\xFC\x94\xAC\xDF\x7D\x56\x15\x71\x04\x7E\xA7\x55\x50\xF2\xFF\x57\xF1\x69\xB3\x08\x2B\xA9\x13\x52\xF4\x84\x14\x3D\x21\x45\x91\x41\x47\x79\xD1\x56\x63\x80\xA1\x97\x06\xC4\x2A\x9D\x24\xD7\xE8\x4F\xDE\x82\xE3\x24\x45\x2D\x89\xE2\xFC\x0F\x68\x45\x59\x19\xF1\x25\xBC\x56\xF5\x7F\x68\x4E\x56\x55\xB1\x3E\x24\xC6\xCB\x89\x44\x85\x8A\x9E\x5F\xC1\xBA\x6E\x8B\xEA\xB6\x0C\x9B\x25\x45\xA9\x5F\xC3\xBF\xA6\x9F\x90\xC9\x7F\xF4\xF8\x9F\x90\xC9\xFF\x0D\x32\x99\xA3\x84\x9A\xCB\xE3\xF7\x57\xBE\x81\x77\x9C\x98\x20\x27\x26\xC8\x89\x09\x22\x1A\x2D\x49\xA7\xC8\xB7\x68\xDF\x9B\xA3\x1A\xA9\x96\xE8\x41\xA2\xEF\xD0\x2B\x04\x04\x14\xF7\xE8\xBE\x87\x79\x2E\xD6\xEB\xA3\x3D\x71\x1B\xC6\xC4\x0F\xD0\xC8\x51\x01\x3F\x55\xCE\x51\x95\x55\x55\x33\x27\x55\x56\x10\x3F\xC2\x67\xB2\x7F\xCF\x85\x4E\x9F\x10\xC5\x66\x89\x36\xF8\x37\x6E\x13\x1D\x87\xE6\xF5\x28\x2A\xFA\xA8\x0D\xFF\x35\xDD\x16\xA7\xDA\xF1\x9C\xF1\x7D\x56\x57\x2F\xE5\xE1\xFF\xFA\x80\xF6\x3D\xA1\x8F\x17\xF3\xFC\x4A\xA1\xDF\xE7\xD4\x96\x6D\xF7\xF5\x51\xDF\xFB\xF6\x45\xE5\x4F\xF0\xD5\x1C\xC5\xDA\xF5\xFF\x53\xA5\xF2\x1B\x36\xCF\x4E\xE8\x96\x13\xBA\xE5\x84\x6E\x39\xA1\x5B\xFE\x2B\x75\x4B\xEA\x4D\xD0\x3E\xE7\x30\x85\x3A\xE8\xB3\x6E\xF6\xA9\x8A\x3B\xFE\x1D\x2A\x2B\x23\x7E\x86\xA7\xC4\x16\x76\x82\x75\xE0\x24\x3D\x1E\xE9\x3C\x97\x3F\x50\x2F\xAE\xF5\x7E\x81\x1F\x6A\x4F\x68\xAB\xFF\x4A\xE1\x76\x42\x5B\xFD\x8F\x0D\xE8\x09\x6D\x75\x7C\xB4\x55\xD2\xBD\xAF\xA3\xF0\xA3\x13\x82\xEE\xBF\x73\x5E\x9C\x10\x74\xFF\x63\x03\x7A\x42\xD0\x1D\x2F\xB3\x3C\xA9\xA8\x0B\xC3\x0C\xDA\x4F\x7A\x7C\x4D\x64\x44\xF8\x25\xDE\x49\x69\x53\x65\xE0\x1B\x60\x97\xA8\xD2\x3C\x6C\xE3\x30\xC7\x2A\x95\xD6\xCF\xF8\x38\x9A\xE1\x1B\x9C\xAB\x55\x59\xCE\x65\x52\x6C\x8D\x4A\xE7\x64\x03\xBC\xB3\x3E\xD0\xD0\x40\x71\x97\xAA\xB4\x62\x8C\x09\x78\x3C\x97\xA9\xB2\x9D\x0C\xCF\x92\xF8\x0A\xD7\xE5\xAA\x34\x67\x03\xCF\x92\x57\xA8\xD2\x9C\x14\xCF\x92\x6B\x55\x19\x0D\xA8\x88\x75\xAA\xF4\x06\xF1\x0A\xE7\x95\xAA\xB4\x06\x5F\x80\x77\x5D\xA5\x4A\x13\x2F\xF2\x5F\xAD\x4A\x47\x97\x31\xAF\x51\x69\x1A\x38\x8A\xBA\x56\x95\xEE\x12\xE3\xEB\x55\x19\xF8\x3E\xE6\x9F\x55\xE9\x7E\x9E\xE3\x59\xCF\x75\xAA\x74\x2F\xE5\x75\x35\x71\x7F\x41\x3F\xBC\xBE\xEB\xD1\x0F\x5F\xEB\x0D\xAA\x0C\x2F\xE5\xF5\xB2\xCB\xA8\x0D\x22\xC8\x4F\xF1\x37\x8A\xD9\x3C\x14\x73\x93\x2A\x5B\xBC\x19\x59\x4F\xFA\x29\xD2\xED\xBE\x59\x95\x23\x8F\xF2\xEC\x2D\x2A\xBD\x08\xF0\x37\xB1\x1C\x4F\xBA\xDD\xB7\xE2\xB8\x80\x40\x33\x2E\xEE\x36\x59\x7E\x7F\xA0\xFE\xAF\x2A\xA3\x3C\xDA\xC0\xB1\xDE\xDB\xE5\x25\x78\x03\x9E\x3B\x64\x39\xBC\x01\xCF\x46\x79\xB2\x9B\x5E\x76\xA7\xCA\x10\x4D\x76\xD3\xCB\xBC\xAC\xFB\x2E\x19\x04\x5D\x93\xBF\x5B\x09\xE1\xEE\xC1\x10\xA9\x12\xA7\xEB\x6F\xAA\x7E\xB2\x3B\xA1\x2E\x96\xE1\xA9\x16\x3E\xA8\xCA\xC1\xF7\x42\x31\x20\xA4\xD2\x37\x30\xBC\xD3\xC5\x32\xCB\x58\x4F\x80\xA7\xDA\x55\xB9\x42\x9C\x0C\xF0\x6C\x14\xD6\xA1\xD2\xB8\x38\xFE\xB4\x4E\x55\xA6\x90\xE4\xA6\x1B\x2A\x37\xA9\x32\xFC\xBC\xDB\xD9\xC0\xF0\xF7\xAA\x74\xC2\x2F\x9A\x59\x26\xC4\xEE\x53\xE9\x1B\xD8\x00\xE7\xF4\xF3\x94\x4F\x88\xDF\xAF\xCA\x15\x53\xE4\xB0\x07\x54\xE2\x5D\xD5\xA5\x7E\x4A\xBA\x99\xBC\x59\x95\x25\x40\x78\xD6\xE9\x77\xD1\x0F\xE2\x01\x10\x62\x62\xEA\x43\xAA\x9C\xE5\x2C\x27\x03\x3C\xAC\xD2\x0A\x08\xE2\xE8\x3F\x82\xB2\x22\xA6\x78\x54\x25\x5E\x7A\xC5\x8C\xF1\x98\x2A\x1B\x11\x04\x61\x3E\xAE\xCA\x14\xAB\x65\xA8\xE5\x5B\x54\xB9\x62\xCA\x72\x5A\x3C\x03\xCF\x3A\xDD\xAD\xCC\x13\xA8\x55\x38\xAF\x00\x79\x12\x41\xC4\xBA\xC5\x9B\x91\xFE\xBF\xA3\xCA\xBC\x7E\x01\xB6\x15\x51\x92\xF6\xD3\x4C\x03\xCD\xD0\x3C\xF5\x14\x6A\x16\xED\x67\x48\x66\x9B\x94\x28\x3A\x3D\xA0\x97\x51\xDB\x51\x56\xDA\xBF\x94\x21\x99\x2E\x95\x1E\x45\xFC\x3E\xCA\x45\x93\x9E\xA7\xA5\xC4\x0B\x29\x8E\x7D\x06\xB5\x53\x98\xA0\xFF\x40\x78\x01\x9A\xE1\x9D\x42\xD2\x0E\x55\x06\xBE\xC3\xBB\x13\xF5\x74\x29\x47\xF9\xE9\x0B\xA9\x5D\x08\xCF\x4F\xF1\xA8\x9D\xBB\x71\xCF\x29\xDE\x29\x54\xF7\xAC\xCA\x28\x45\xA5\xE6\x3C\x17\x03\xF9\x58\x74\x5B\xE8\x79\x55\x9E\x04\x72\xB7\x32\xA4\x97\x76\x89\xEE\x0A\xFE\x19\x2D\xDB\xD9\xE0\x21\x1B\xFD\x2F\xA0\xF8\x52\x91\x83\xA8\x86\x86\x17\xA5\xBE\xE0\xFB\xE9\x2F\xA1\x9E\xFB\x29\x1E\x77\xEE\xE5\x68\x63\xC4\x4B\xFD\x7B\xA4\xD1\x17\x87\x5F\x68\xFD\xBF\x70\x89\x0D\x34\x43\x7A\xE8\x0B\xA9\x57\xF0\xF4\x68\xA0\x5B\x9C\x0C\xC9\xBC\x8A\xF9\xC1\xD5\x44\xB9\x9A\x9D\x54\x8B\x6F\xAF\xEA\x24\x54\x82\xC8\xF7\x4E\x9A\x11\x77\x1A\x5E\x53\x65\x09\x75\xF0\x1C\xED\xF3\x50\xAF\xA3\x3A\x45\x16\xA3\x4F\xAB\xFC\x37\x2E\x62\x69\x23\xC5\x8B\xD4\x7C\x03\x57\x21\xFA\x57\x60\xDC\x6F\x62\xF4\x46\x84\xBE\x0F\x0D\xE4\x52\x17\xEB\x6B\x7D\x0B\x13\x1A\x4D\xBB\xB7\x55\x05\x62\x3E\xD2\xE7\xF3\xB4\x22\xAF\x1C\x4E\xAA\xC5\x45\xF9\xFD\xEF\x60\xEE\x72\x79\x7D\xEF\xAA\x32\x51\x83\xBD\xBE\xF7\x64\x33\xDD\xE5\xF5\xED\x97\x17\xC6\xBD\x8F\xB3\x90\x8C\xFB\x80\x94\x85\xF4\x7D\x80\xC6\x78\x29\xCB\xFD\x07\x67\x5E\x4A\xBA\xDD\xFE\x40\xFD\x87\xF2\xCC\xCC\x41\x9C\xB9\x85\xE5\x3E\x92\xCA\xA9\xF7\x7F\x8C\x18\x69\xA9\xE8\xED\xE3\x13\xDC\x0D\x9F\x27\xE0\xFF\x54\xC2\x71\xBB\x3F\xC3\x02\x0A\x17\xEB\xA4\x99\x86\xCF\x71\xAA\x3F\x50\x7F\x08\xFF\x74\xD3\xCB\xBE\x50\x69\x9D\xD2\xEF\xC3\xAA\xDC\x68\x47\x9C\x0C\x92\x4A\x47\xA4\xF6\xA1\xE8\x97\x12\xBA\x37\xE0\xF9\x4A\x95\xE3\x6C\x16\x84\xD0\x72\x96\x6B\x16\xC6\xF8\x6B\x01\x40\x72\x24\xEF\x0F\xD4\x93\x4E\x8E\x72\x7D\xA3\xD2\xA1\x41\x66\x04\x61\xF5\xAD\xAA\x5F\x7C\xB2\x00\xFF\x0E\x37\xC5\x1B\xF0\x7C\x8F\xE9\xBE\x14\x91\x9C\x67\x91\x37\x04\x8E\xF4\xFC\x80\x91\x38\xCA\xFB\x23\x9A\xD5\x71\x38\x3F\x21\x19\x18\x07\x6B\xF9\x19\x53\x89\xE7\x02\x8C\xEB\x17\x1C\x11\x3D\xA8\x1C\x95\x46\x9E\xA2\x3D\x61\xCC\xC8\xF4\x85\x14\xCD\x08\xFD\x8E\x60\xCE\xA5\x5A\x44\x07\x1C\x81\x61\x23\xDA\xD4\x08\x82\x5D\x72\x04\x86\x8D\xB8\x44\x9D\x23\x31\x56\x33\xC5\x31\x94\x67\x95\x3A\x2F\x7A\x47\x5F\xE8\x94\xD3\x47\x72\xA4\xD7\xBF\x5A\x9D\x1B\x03\x2F\x3F\x4D\x5C\x57\xAC\x51\x67\xFB\xE9\x96\xA8\x98\xBC\x54\x6D\x14\x44\xA7\x1C\x74\x99\x3A\x47\xBC\x9B\xE5\x63\xFD\x94\xD3\xC7\x2E\xAF\xBC\x5C\x6D\xF4\x8B\xAE\xBD\x45\xB0\x08\xBA\x42\xDD\xCF\xBF\x5C\x5C\x0B\x78\x1A\x38\x76\x39\x02\xAE\x55\x0F\x96\x9B\x1F\x0C\xD5\xC2\x3B\x7D\x1C\xED\xA5\x14\x96\xC0\x3A\xB5\x59\x3A\x6B\x66\x61\xA8\xE5\x8A\xD4\x2B\xD5\xF9\xD1\x54\x37\xE5\xA1\x78\xAA\x5C\x7C\x91\x41\x5C\xA5\x1E\x20\xCF\xB6\xE0\x02\x45\xC6\xAB\xD5\x85\x8A\x8C\x0B\x2E\xC0\x59\xAF\x51\xF7\x73\x3A\x5D\x2D\xA4\xD3\x17\xE0\x28\xE7\x32\x9A\xE3\x03\xA4\xE7\x5A\xF5\x04\x79\x73\xE5\x36\x91\xD3\xC5\x7A\xBD\x2C\x33\x1A\x9F\xAE\x73\x3A\xF9\x26\x8E\x5D\x8E\xAF\x92\x22\xB7\x21\xE5\xF8\x04\xDC\x7A\xF5\xD3\xB0\x4F\x0C\xAB\xF8\xC2\xFA\xF6\x5D\xD7\x9F\xD5\xDB\xFA\xAA\x13\xD2\x90\x8C\xE9\xDB\x1E\x5C\xA7\x3E\xD0\x37\x3D\x28\xB3\xF4\x11\x61\x9C\x4E\xD2\x2F\xB0\xAF\x93\x61\x9D\xA4\x87\x26\xFD\xA3\xA5\x9B\x01\xA9\x6F\xEB\xFD\x45\xCD\xF5\x51\x6B\x90\x8A\x2F\x57\xDC\xBE\x14\x92\x89\xEB\xFB\xAC\x52\x74\xEB\x3A\x69\xA5\x37\xA8\x5B\xFA\x8C\xEE\xFE\x26\x8E\x66\x9A\x9D\x2C\xE7\xA4\x5A\xF8\x84\x06\x10\x1B\xD4\xAD\x7D\xDB\xDF\x6E\x06\xF8\x46\xF5\x92\xE3\x56\x37\x71\x93\xBA\xA1\x8F\x2A\x8B\xDE\x36\x14\xEB\x23\x6E\x56\xAF\xE9\x2B\xF1\x12\x9D\x45\xC2\x50\x72\x0C\xE9\xE9\x8E\xBA\xB7\xF4\xDD\xC8\x8A\x8D\xE8\xAE\xEE\x5B\xFB\x6E\x64\x13\xEA\x26\x6E\x53\xDF\xDE\x57\x04\xC7\x9E\x18\x94\x93\x36\xC9\x1C\x4E\x41\x08\x04\xFE\xAB\x7A\xBC\x5C\xF9\xA2\xDB\xB6\xC8\xF0\xEB\xBD\xEE\xBD\x5D\x4D\x2A\x6E\xED\x3A\xC5\x6B\xF9\x71\xBB\x20\x1E\xCA\xEF\x1F\x4D\x33\xBC\xCD\x42\x33\x7C\x75\x99\xF8\xA8\xA8\x2E\x17\xFE\x47\xBF\xE3\xB7\xA8\x14\xE8\xC4\x1D\xEA\x8B\xA2\xED\xA7\x19\x3E\xA1\xAE\xD3\x8F\xB5\xB2\xC4\xFF\xBB\xAB\x7E\xA3\x7A\x59\x3D\xCB\x7A\xE2\x70\xD0\x2D\x69\x9A\x65\xC4\x06\x38\x69\x46\x18\x13\xC1\xDE\xF9\x3D\xFB\x7D\xA7\x7A\xB2\x3C\x59\x58\xFA\x3A\x59\xC6\xA5\x18\x78\xCB\x32\xD6\x43\xF2\xB4\x87\x2A\xC3\xC7\x4D\xD0\xC3\x52\x5E\x41\x60\xD3\x8B\xB8\x4B\x3D\x58\xDC\x21\x1A\x4F\xF3\x75\x3C\xC9\x53\x55\x55\xB5\x01\x7F\x53\xB9\x58\x95\x9C\x67\xEF\x56\x57\x28\xF0\x66\x71\xAD\x75\x14\xC9\xB9\x92\x20\xDF\xA3\x6E\x56\x20\x63\x4C\x11\x5A\x27\xB2\x7A\x2D\x4D\xB9\xA8\xE8\xAB\xCE\x94\x09\x02\x79\xA5\xFF\x95\x48\x88\x52\xC4\xDF\xD4\x57\x41\x31\xA9\x96\x63\x1B\xA5\xAA\xA4\xAA\x7F\x45\x95\xB2\xB2\xC6\x31\xAE\x26\x96\x8B\x03\x4D\x23\x79\x57\xD3\xB9\x34\xE3\x4E\xD9\x9E\xA0\x7A\x80\x98\x32\x01\x9D\x87\xE5\xAA\xAA\xC6\x09\x13\xF5\x6C\xC6\x2F\x5E\xB3\x27\x42\x6A\x93\x22\x7D\x85\xF4\xB3\x9C\x68\x57\x13\x68\xC7\x8E\x6A\xA4\x5A\x7C\x55\x55\x73\x48\x4F\x33\xC5\x8D\x16\x61\x93\x39\xB2\xB1\xBA\xAA\x6A\x05\x82\x95\x13\x1D\xDD\x15\xD4\xA9\x2E\x57\x24\x4E\x20\xF9\xF2\x68\x39\xB8\xF5\xC2\x4F\x62\x93\x7A\x90\x02\xB5\x8E\x27\x39\x39\xAE\x40\x7F\xE2\x5E\xCC\x2A\x31\xB4\xF3\x02\x94\x9F\x4F\xC0\xBB\x4F\x5D\x96\x50\xB3\x8F\x0F\x70\x94\x1C\x53\x20\xC4\xFD\xEA\xE9\x0A\xC4\xF3\x19\xF1\xB4\xB3\x7B\x66\x80\xA1\xC6\xB7\xF2\x54\x9D\xE8\xF1\x28\xC6\xD4\x48\x3C\x2A\xA2\x88\x39\x84\x02\x1F\x50\x6F\x49\x4B\xD8\x62\xFD\x0D\xA7\xC0\xE2\x27\x13\x92\x9D\xC2\xFC\xFB\x6D\x27\x82\x53\x97\xDA\xE3\x5B\x9D\x64\x59\x7F\x6B\x55\xE2\x66\x78\x22\x62\xF2\xCD\xF9\xA4\x78\xBD\x7C\x83\xD1\x17\x8D\xEF\xBE\x61\xBD\xE9\xE4\xAF\xDC\xAD\x4F\xD5\x38\xD9\xB9\xCA\x24\xD5\x95\x27\xC2\xA4\x25\xD2\x66\xF5\x63\x32\xF7\x09\xBF\xFB\x81\xC6\x9E\x59\xF9\x37\x9C\x43\x3C\xC1\xD1\xFF\xF3\x1C\x9D\xFA\x34\x57\xF7\x44\xF0\x09\x8A\x71\x39\x2D\x1A\x8E\x8C\x9F\xE7\x02\x2E\xDE\xC9\x27\x39\xE1\xC4\x07\x7C\x9E\x64\x6D\xC0\xA8\xD5\x89\xB8\xD5\x96\x6E\xA6\x53\x5F\x34\xA1\x2C\x09\x76\x75\x59\x19\xF1\xA0\x7A\x88\x52\xDF\xBB\xDD\x48\x73\xCD\xA4\x5C\x01\xCE\x4F\x2F\xA3\xCA\x25\xDB\x8D\x78\x28\x41\x3B\x4E\xA6\x19\xB7\xA0\xEC\x66\x8A\xCE\x70\xA2\x88\x0F\xAB\xAD\x0A\xC4\x28\xD2\x24\x81\x47\x62\x98\x8F\xA8\x4F\x4D\x6C\x80\xA0\x42\x45\xE4\xF3\x67\x4D\x1E\x19\xC5\xC5\x2A\xFA\x51\xF5\xB0\x6E\x72\x4C\x25\x79\x9A\x19\xA6\xCC\xF3\x98\xFA\xE4\xC4\x3C\xCE\x91\x0E\xE7\x30\x47\x43\x43\x43\x43\x39\xF1\x78\x02\xC2\x04\xD6\xD7\x1A\x53\xFA\xC4\x16\x75\xA5\xD2\xCE\x68\x62\x39\x7E\x36\xED\xA7\xB1\x15\x81\xAC\x9E\x0A\xB9\x71\xF2\x84\xFA\x0C\x45\xA6\x5A\x8E\xEA\x36\x0B\x6A\x6F\x05\xF1\xA4\xBA\x44\x91\x73\x2A\xF2\x2F\x5B\x1E\xEB\xD4\xDF\xD5\xD3\x94\xA5\xB3\xFE\xEE\x5B\x94\xFC\x27\xB6\xFD\xB6\xAA\x4F\x4F\xA0\x01\xBA\x15\x15\x5F\x1A\xB2\x59\xA2\x2C\x46\x3C\x85\xB9\xE2\x6C\x3F\x32\x39\x05\x03\x2C\xBE\x05\xB8\x82\x6D\xD8\x56\x93\x10\x27\x31\xEE\x64\x68\xDB\xD5\xE7\xF6\x64\x46\x0A\xA0\xB3\x19\xBC\x2C\xEF\x96\x94\x44\x97\xBA\x50\xD1\xAB\x89\x2C\x2F\xDA\x88\xC4\xD3\xEA\xD2\x44\x76\xA6\xFD\x4D\x71\x25\x12\xCF\x60\xD3\x51\x6A\x0E\xC6\x9E\xC5\x0A\x36\x75\x79\x8C\x0C\xFF\x50\xDB\x92\xE3\xCD\xA4\x96\x51\x9C\x9F\x52\xA0\xEF\x50\xF3\x72\x89\xE6\xA6\x04\xC1\x24\xAC\x52\x51\x47\x85\x1E\x8A\x8B\x00\x59\xBF\x93\xCB\xC5\x94\xE8\x48\xF8\xAD\x90\x97\x5D\x4E\xEC\x3C\x06\x1B\x7D\x97\x7A\x4A\x4F\xB8\xBD\xE5\xE7\xDD\xEA\x45\x3D\x16\xF5\x9B\x98\xF7\x59\x2C\x47\xBA\xA9\x40\x31\xA3\x9F\x53\x6F\xD2\x9C\xB0\x17\x4E\xD8\x0B\x89\xF6\x42\xD2\x43\x26\xCF\xAB\xEF\x3B\xC1\x2E\x27\xD8\x25\xA9\x79\x99\x94\x61\xFE\xA9\xF6\xC7\xCA\x14\x45\xF0\xEF\x2C\xD9\x9D\xA2\x5F\x50\xD1\xF3\x9E\x8B\xF4\x91\x2E\x9A\x6F\x2D\x27\x5E\x50\x5F\x0B\xE3\x36\x12\x7D\x1E\x5A\x3A\xDA\x94\xBA\xC0\x8A\x63\x6C\x40\x85\x62\x2F\x3E\x35\x62\x59\x19\xF1\xA2\x7A\xFD\xF1\x6D\x52\x03\xC7\x32\x7C\xF7\x6D\x7A\xE9\x38\x91\xA9\xAC\xF7\x64\x7A\x59\x7D\xC3\xF1\x6D\x52\x4F\x64\x92\x56\xF7\x7B\xD4\x55\x22\x74\xE2\xE4\x71\xE2\x7F\xE5\xD1\x1D\xC5\x8A\x54\xBB\x8B\x31\x33\xE7\x5F\x6A\x63\x2C\xF3\x0A\x21\x37\xF1\x0A\xDE\x3A\x13\x41\x73\x58\xAE\x79\xE9\x2C\x76\x82\xB8\x75\x26\xDB\xF5\x8C\x25\x4A\x95\xC4\x41\xE4\x1B\xE7\xC4\xAB\x6A\x7B\x0C\x43\x5E\x52\x74\x47\x5A\x91\x61\xAF\xFA\x7B\x78\xAC\x1B\x14\xB1\x1A\xEA\xB0\xCB\xCF\x9E\xF6\xD1\x12\x73\x28\x20\x53\x48\x7F\x53\x02\x50\x5C\x1F\x75\x33\xA8\xB2\x02\x63\xDB\x35\x09\x29\xE5\x4A\x88\x34\x98\xAF\xA9\xF7\x2A\x7D\xE0\xFD\x7E\x94\xE8\x61\x1B\xE6\xF8\x10\x24\xF5\x6A\xBF\xC7\xFA\x25\x2A\xA5\x24\x5F\xCA\x1C\xC4\xEB\x6A\x07\xDA\x52\x17\xBD\xC3\xD6\x51\xFC\xAC\xD1\x02\x55\xAA\xAB\xAA\xCE\x16\xDF\xA9\x44\x57\x2B\xB1\x1D\xDF\x7F\xAB\xCF\x8C\x95\x36\xCE\xED\x9E\xC5\x9E\x17\xA0\x02\xC9\xF8\x3F\x91\x83\xDF\x50\xCF\x8E\xA1\xCD\x0C\x30\x22\xE6\x0C\x46\x58\x65\xF7\x6A\xFE\x24\x94\x28\x19\xEA\x6F\x62\x3B\x5A\x2A\x58\xEC\x65\x42\xC1\x12\xFD\x84\xA6\xEC\xC3\x2B\x0A\x94\x83\xF2\x53\xBC\x38\x05\x65\xD8\x33\xE7\x4C\x65\x5D\xCD\x14\x57\x41\xBC\x85\xD7\x48\xA8\x10\xF1\x65\xC7\xE4\xC9\x93\xCB\x95\xB0\x5A\xF1\x8C\x51\x05\xF1\xB6\x7A\xBA\xF8\x8A\x2A\x96\x7E\x36\xE3\xA1\x19\xCA\x8D\xD0\xA6\xB2\xAC\x0F\x1D\x6D\xC0\xBE\x0F\xA3\x2E\x10\x53\x15\xF8\x4E\xB2\xFA\x67\xA5\x44\x7F\x57\x3D\xED\x18\xEB\x17\x0D\x8C\x94\xE5\xBD\x97\xA4\xFA\x59\xA9\xBB\xBF\xBF\xF7\xD5\x0B\xF5\xF6\xD8\xFB\xF7\x93\x55\x9F\xBA\xF7\x07\xD4\x53\x8F\xAD\xFA\xEE\x3B\xFF\x41\x62\xED\xB3\xBA\x19\xFB\xFF\xF4\xA2\xF3\xB2\x5E\xF7\xD8\xF9\x0F\x93\x55\x9F\xBA\xF3\x07\x7B\xD1\xF9\xB8\xEA\xBB\xEF\xFC\x47\x49\x6A\xEF\x66\xE4\x3F\xEE\x75\xED\xBD\x1A\xF8\x4F\x92\xD5\x9E\xBA\xEF\x9F\xAA\xCF\x3D\xA6\xDA\xBB\xEF\xFA\x67\x58\x32\x22\x31\xC7\x90\x9E\xD6\x0B\x29\xF9\x2B\xD5\x24\x59\x3E\x57\x5F\x02\x95\x69\xBF\xF1\xFD\x6B\xEC\xFF\x8A\xB8\xF7\xBD\x92\x74\x54\xCA\xED\x0A\xE2\x10\xDE\xC3\x44\xC6\xCD\x59\x14\x1F\x67\xFA\xC8\xCC\x1D\xE2\x0B\xF5\xF2\x84\xC3\x02\xD1\xB7\xDA\x4E\x1F\xC7\xB6\xB4\x8E\x56\x6E\xBE\xF6\xB2\xE8\xAA\xAA\x41\x4E\x47\x99\xFC\xC5\x6E\x45\x59\x59\xB5\xA5\x1A\xBF\x02\x3F\xDC\xB7\x35\x0F\x4B\x5D\xF3\x91\xBE\xAD\xB9\x32\x75\xCD\x5F\xAA\x07\xCA\xB2\x4D\x14\x8F\x63\x46\xCB\x9A\x38\x79\x5C\x05\xF1\x95\xFA\xCE\xC4\x97\xEA\x51\x94\xE3\xF6\x3E\x1D\x33\x5B\x0A\xF6\xFA\x1A\xBF\xE3\x4E\x34\x18\x5C\x1C\x45\xF2\x14\xFA\x3A\x90\xF8\xD2\xFD\x1B\xF5\x75\x89\xE6\xEA\xF1\x34\xA9\x92\x3B\xD7\x52\x5F\xFF\xC7\xB6\x2A\xC5\xBA\xFB\x3B\x75\x91\x88\x3E\x5D\x40\x9F\x1E\xB7\x5C\x21\xBE\x8F\xB3\xD2\xC6\x71\x1C\xD9\x3A\x3A\x86\x3C\xAB\x89\xA3\x48\x77\x45\xEC\xCC\xA2\x40\xFC\x1F\xF0\x02\x46\xC4\x58\x21\x94\x47\xFC\xA8\x26\xBB\xDB\xBA\x95\x95\xD5\x4D\x6F\x64\x58\xC9\xF6\x69\x7F\x52\xAF\x8C\xA1\x89\xC6\x21\xC2\x5D\x5A\xDE\x8B\x0E\x48\x06\x9E\xF8\x5F\x4A\xDE\x8E\x3B\x49\x95\x50\x08\xF1\xB3\xFA\xFC\x5E\xD1\xAA\x8E\x4A\x62\xDC\x26\x29\x50\xB2\x94\x7F\x51\x2F\x4E\xBA\x2F\xF2\xEB\xC8\x96\x74\x13\xE4\xA8\xFA\x52\x18\xC3\xAE\xE3\x29\x5F\x2F\xA9\x76\x0C\xB4\xED\x0D\x59\x89\xB0\xBA\x41\xD6\x8E\x3E\x3C\x47\x14\x51\x5F\x9E\x28\xF2\xA6\x1F\x77\x91\x27\x34\xA5\x4D\x73\x66\x02\x19\x69\x86\x4F\xCD\x29\xD1\xCF\x77\x94\x11\x97\x68\xF8\xEE\xB7\x40\xE4\x43\xD1\x3B\x2E\x49\xBA\x55\x25\x4F\x2F\x2B\x23\x56\x69\x02\x7D\x58\xAD\x6C\x9F\x45\x51\xEF\xEA\xBE\xE8\x6E\x92\x2D\x27\x45\xB5\x6B\x34\x17\xF6\x61\xB5\x29\xBA\x2B\x0D\xF1\xA5\x9A\x11\xBD\x12\x2B\x09\x5A\xF0\x32\xCD\x9C\xDE\xCA\xA3\x49\x2D\xB4\x9F\xA7\x99\xC6\x28\xB7\x75\x2F\x91\x2E\xD7\x24\x8A\x07\xC4\xB1\x09\x8D\xB8\x42\x33\x2A\x35\x73\x27\xAF\x56\xC6\xDE\x6B\x35\x57\x26\xCE\xD2\x19\x0C\x55\x4B\xFA\xFD\x7F\xC0\x4C\x5D\xA7\xC9\x97\xE1\x9F\xED\x97\x5A\x42\x5C\xA9\x91\x1F\xF2\xC5\xDF\xAB\x51\x9C\x5C\x4B\xC6\x15\x71\x28\xE2\x04\xC0\x9F\xDD\x91\xB3\xDB\x72\x8E\xF4\x89\x5B\x4C\xF1\xE8\x58\x64\x56\x27\x1C\xF8\x4D\x82\x55\x46\x5C\xA5\x89\x37\x89\x78\x8E\xC2\x6A\x24\x7A\x12\x40\xBA\x3E\x1C\x3D\x19\x40\xF9\xFD\xDD\x30\x73\x14\x4F\x6C\xB7\x9B\xF2\xF3\x1C\xDB\x5A\xAE\xAC\x43\xB6\x03\x26\xAB\x08\xEF\x7F\x11\x57\x6B\xD0\xD1\x04\xE9\x25\x64\xAD\x68\xDA\xC5\x8E\xA6\x22\x78\xFC\xEB\xE5\x6B\x34\x53\x52\xE6\x99\x46\xB6\xD6\x53\x13\xC4\x2F\x50\xA2\xD1\x93\x31\x72\x1C\xFE\x64\x0F\xD9\xE8\x27\xAE\xD5\x10\xDD\x56\x2F\x3B\x42\x40\xAC\xD7\x9C\xD2\x2D\xEE\x44\x96\x2F\x27\xFE\xAC\xA9\xEB\xA1\x3F\x3E\x8A\xE4\x67\xC4\xF5\x68\x86\xAF\x07\x4D\x46\x5C\x87\x15\x84\x90\x9B\xA7\x79\x9A\x65\xD0\xCB\xDA\x94\x6F\x93\x65\xDB\x53\x7F\xD1\x4C\x48\x95\x37\xC5\xEB\xE3\x98\x21\x14\xDD\x0D\x26\xAE\xD7\x0C\x4F\x51\x4A\xCA\x43\x1D\x42\xB6\x1B\x34\xB5\x3D\x92\x03\x15\x57\xDE\x0B\xF3\x4B\xA4\xC5\x06\xCD\xD8\xB8\x22\xF1\x6B\x6B\x24\x52\xBA\x39\xE5\x10\x3B\x05\x72\xA3\xA6\x34\x75\x09\xD1\x57\xF9\x37\x69\x9A\x7A\x77\xDA\x40\xF9\xCE\x2D\xE5\x2B\x85\xD8\xFB\x2F\x85\xE5\x7A\xB3\x66\x4C\x4A\x2A\x4D\x64\xA7\x52\x0D\x7C\x2D\xC9\x51\x4C\x2A\x79\x47\xDC\xA2\x29\xEF\x26\xFF\x6C\x8A\xE3\x69\x17\xE9\x19\x4F\x72\xE5\xC4\xAD\x9A\xCA\x6E\x50\x27\xB0\x1E\x0F\xE9\xF3\x53\xF1\xDC\x49\xDC\xA6\xB1\x76\x93\x69\x26\xDD\xD8\x84\x1B\x48\xFC\x55\x41\xDA\x78\x4C\x7C\x56\x84\xB8\x5D\x63\x8F\xC3\x9A\x29\x7E\x97\x6F\x2A\x45\xBA\x69\xA6\x31\xD9\x8C\xBF\x43\x73\x5A\xEA\x0C\x78\x9E\x27\x32\xDF\x46\x4D\xFC\xA9\x98\xC9\xA4\x20\x95\xC7\x79\x44\xF6\x10\x79\x4E\x9E\x27\xCE\x4A\x4D\x22\x2A\xEE\xD4\xAC\x85\xC9\x3F\x4B\x26\xE6\x98\xCC\x91\x5E\xAA\x1B\x36\x10\xD3\x15\xBB\xED\x8A\x4F\x80\xC5\xB5\x06\xDD\x11\x90\xF6\xD5\x15\x50\xE2\x2E\xCD\x75\x48\x2D\x26\xF4\xE9\x6C\xAF\xCF\x53\x55\x35\x93\x0D\x30\xEE\xCA\x63\xE9\x9F\x2D\x45\xBF\xEA\x7C\x1E\xDA\xD5\x5D\xC7\x10\x82\xF8\xA9\xBB\xBB\x7B\xD3\xAA\xD3\x8E\x77\xAB\xEE\xE9\x4D\xAB\x86\x1D\xEF\x56\xFD\x4D\x73\x96\x08\x9A\xD0\x44\x72\x13\x3C\xA4\xDF\x3F\x3E\x40\x7B\xDC\xD2\xD9\x3C\x41\x49\x8A\x55\x29\xC5\x62\x12\xC6\x0C\x6A\xD0\xCB\xC6\x71\x6E\xF7\x64\xD6\xE3\xA6\x50\xEE\xF2\xA4\xA5\x2B\xA5\x3B\x11\xD2\x30\xC8\xA0\x11\xCA\x3B\x1F\x7D\xA5\xF6\x2C\x8E\x0D\xF8\x12\x84\x4D\x45\x37\xE4\x48\x55\x97\x2C\x83\x20\x04\x02\xFE\x0A\xA2\x5D\x33\x57\x6A\xED\xF9\xB2\x8A\x52\x65\x46\x38\xD1\x35\x77\xB7\x84\xE8\xD0\xB0\xA9\x95\x8D\xF8\x55\xFE\x09\x42\x35\xA4\x8B\xA7\xB8\x64\xDD\x43\xDA\xAE\x7B\xDB\x31\xBE\x33\x9D\x9A\xF1\x31\xEA\x4D\x42\x1F\xEC\xEC\xBE\xE0\xB8\xFC\x68\x08\x36\x69\x2E\xE8\xA1\xD9\x12\x6D\x7A\x18\x93\x8A\xE4\x14\xBF\x17\xF3\x47\xCA\xF2\x6B\x29\xCE\x83\x98\x2D\xA1\x7C\xE2\x3E\x3C\x5C\x71\x99\x7B\x30\xBC\x53\x72\x48\x7C\xBB\xEE\xD7\x54\xA4\x30\x29\x56\x28\x41\xE5\xC4\x03\xDD\xE9\x6C\xF1\x98\x9A\x40\xCA\xCD\xBD\xD2\xEC\x0F\x6A\x46\xA7\xC6\xEA\xD9\xA0\x7A\x48\x33\xB9\x9B\xEC\xC7\x60\x53\x3D\xAC\x69\xEC\xE1\xB8\xCB\xAF\x30\x2D\x92\xEE\xEE\x3C\xA2\xB9\xB8\xB7\xE7\x24\x84\x92\x7A\x77\x42\x42\xC4\xEC\xFE\x54\x8B\x88\x52\x56\x46\x3C\xAA\x59\xD1\xE7\xF5\x27\x3D\x9B\x21\x35\xE0\xB1\xBE\x23\x40\xB7\xE7\x55\xA4\xFA\x1F\xD7\xAC\xEE\xF5\x49\x95\x5F\xDD\x80\xD4\x14\x90\x0C\xC5\x2D\xD8\x8A\xC7\xCB\x57\xC6\xCF\x0B\xFF\xD3\xFC\x38\x0F\x5F\x1E\xFF\x6A\x3B\xEE\xD5\xF9\x13\x78\x09\xAF\xCC\x96\x78\x8C\x3D\xD9\x8B\xF7\x27\x35\xA7\x26\xCD\x2D\x5D\x13\x4B\xCC\xF1\xF7\x14\xF5\x4D\xF2\xFA\xF8\xD6\x39\xB4\x9B\xC7\x5B\x82\x62\x5C\x58\x3D\xC5\xE5\xDE\xAA\x19\x98\x34\xB7\xB8\xBA\x17\xC5\xC4\x53\x9A\xB2\xA4\x18\xD3\x59\x5F\x1C\x19\x88\x6D\x1A\x73\x52\xC4\xC9\x24\xED\x29\x27\xB6\x6B\x72\x65\xA9\xE2\x61\x65\xA2\x4B\xD3\x4F\x06\x5B\x81\x80\x4F\x6B\xFA\xCB\x80\x33\x7C\x3C\xED\xA5\x2F\xA4\xCA\x89\x67\xE2\xFA\x29\xF6\x26\xB9\x1C\x4E\xBA\x53\xFA\x0F\x2C\xEC\x84\x51\x98\x46\xFA\xA2\xF6\xC3\x34\x92\x6B\x8E\xDD\x16\xD8\xA1\x29\x4E\x8E\x45\x71\x8D\x54\x39\xB1\x53\x53\x92\x34\x79\x26\xE5\x62\x3D\x2C\x27\x92\x6B\x97\xC6\x91\x14\x47\xFC\x11\x7F\x5B\x0F\x2B\x3B\x62\x77\x1C\xE1\x26\xB0\x5E\x5F\x80\xA7\x70\xFE\x72\xE2\x59\x4D\x9E\x2C\x75\xB2\x87\xE4\x79\x61\xF1\xF0\x9C\xE6\x2E\x95\x0C\x2E\xF4\xA3\x2E\xE0\x72\x51\x7E\x3F\xCB\xF9\x93\xEF\x37\x25\xDB\x80\x4E\x98\x3F\x09\x5F\x0F\xC6\x00\x91\x46\xC9\xA6\x19\x92\xA6\x3D\x1D\x7A\xEC\x5D\x29\xC2\xBF\x94\xAF\xB4\x92\xB4\xB2\x87\xE2\x2A\x88\xE7\xB1\x95\x93\xB8\x9F\xE6\xA1\xFC\x29\xC8\x24\x70\xAD\x9B\x6A\x99\x4D\x7A\x02\xCA\x4D\xB2\x9E\x31\x89\x7F\x6A\xB6\xAB\x92\x5F\xED\x16\xDF\x79\x97\x57\x94\x11\x7D\x51\x6D\x2F\x50\xA5\x53\x5B\xDD\xE2\xF4\xA6\x1C\xA4\xDB\xFB\xAC\x2B\xC4\x0B\x9A\xA0\x92\xB5\x27\xB2\xE2\x57\xF4\xD1\x1C\x4B\xCD\xC6\xFF\xD7\xD8\xFB\x45\xCD\x2E\x18\x27\x14\x69\x7E\x2A\x8D\xAE\x52\x1F\x03\x31\x14\x52\xBB\x1B\x6D\x1A\x43\xFA\xBD\x7B\xF2\x92\xC6\x93\x28\x03\xA7\xD0\x0C\xEF\x2F\xFF\x1D\xDB\x1B\x15\xF4\x2F\x6B\xEE\x4F\xB1\x3F\xF1\xC7\x71\x46\x37\x9B\x1D\xD5\xE5\xC4\x1E\xCD\xD5\xF0\x78\x52\x48\x3C\x9F\x11\xF7\x69\xC5\x68\x12\x9A\xA8\xFF\xC2\x5B\x8B\x92\x42\xA7\x1A\xE8\x96\x71\x2E\x17\xE5\x71\x4E\x16\x4C\xAB\x71\x8C\x7B\xBC\x60\xE3\x89\x54\x4E\xEE\x4F\xE3\x15\xCD\x7A\x75\xB7\x1E\x2A\x86\xFF\x2F\xC9\xCC\xFF\x3F\x64\xEF\xAB\x9A\x7F\x26\xAA\x2F\x85\xDB\x8E\xD3\xFE\x97\x86\xA5\x6F\xC9\xB9\x57\xB3\x57\x75\x0C\x5E\x50\x4E\xD0\xB5\x97\x74\x7D\x4D\x33\x0E\x6D\x19\x4C\xAA\x44\x8B\x8C\x9E\x76\x59\x04\x3C\x61\x2D\xC1\x32\xFE\xE8\x91\x6A\xCD\x6A\xA5\x0E\xE8\xE5\x19\xB3\xDF\x52\x2B\x3E\x71\x17\x3B\x6F\xF6\x6F\x4D\x4D\x0C\x79\xE6\xA4\xCA\x5F\x51\xE6\x1B\x1A\xEE\x37\x74\x44\x7E\x7F\x14\xCB\xF6\xF8\xC3\x79\x33\x27\x55\x62\x09\x2E\x6F\xF7\x9B\x1A\x63\xAC\x8C\x15\x42\xC3\x89\x7D\x9A\xD5\xE9\x09\x6F\x4D\xE5\x80\xBE\x77\xE9\x9C\x78\xF7\xCD\x4B\xFA\x70\xBD\xD8\x01\xD4\xF1\x70\x17\x7E\xFC\x3B\x2A\x7A\x41\xEA\x93\xBA\x8E\xC1\x6F\xF7\xF1\xE9\xB6\xA5\x17\xAF\xD0\xFF\x88\xC1\x90\x5E\xD3\xBF\xA5\x39\xA0\xE9\xED\x34\x50\xD8\x85\x7D\xF8\xA1\xDC\xC4\x79\xA0\xA8\xFB\x0F\x69\x97\xE4\xBC\xEB\x57\xF1\x58\x5F\x36\xF2\x37\x30\x59\xDF\xD2\x4E\xE2\xB2\xB7\x35\x7C\x4C\xFE\x4E\x64\xD1\x86\x5D\x2F\x74\x87\x74\x94\x27\xCE\x16\xAF\x88\xC3\xE0\xB0\x5F\x8F\x0A\xF9\xAB\x24\xAC\x1A\xDE\xD1\x2C\x8B\x61\xF6\x50\x69\xF7\x9E\xF6\x12\x9B\x94\xFC\x6D\x10\xAE\xF8\x5D\x8D\x2B\x96\xA3\x96\xE4\x78\x9A\xF4\x88\xF5\x4F\xEF\xB9\xD7\xC9\xC8\x90\xBC\x93\xEF\x69\x90\x63\x3E\x11\xB1\x89\x65\x9B\xFD\x02\x71\xA7\xB3\x7C\x93\x30\x7A\x71\xD0\xC9\xE3\xC4\x4D\x63\xF1\x36\x92\x78\x2F\x09\x1B\x4F\x29\xD3\x25\x75\xBD\x1F\x9F\x10\xC0\x88\xE8\xAC\xBA\x02\x77\x0A\xCB\x36\x97\x13\xEF\x6B\x2E\x38\x86\xD6\xA0\x1B\x37\x24\xED\x09\x70\x54\x62\x5B\xE4\xA9\x52\x4B\x0E\x68\x06\x27\x69\x89\x1C\x13\xB5\xE3\x03\xBC\xF7\x1A\x3B\x52\xA0\x3C\x76\x10\x3D\x96\x93\xE4\x55\xE3\x7F\xF0\x39\x30\x29\x69\x05\xCE\x4E\x7C\xA8\xD9\x90\x68\x81\x89\xD3\xAB\x9E\xF4\x90\x82\xED\x42\x36\xF0\x14\x87\x0D\xE6\xD1\x49\x27\x21\x3A\x65\x22\xDD\x10\x4C\x3E\x51\xE3\x70\x6C\x89\xB5\x25\xE0\x10\x07\xF1\x26\xB4\xD4\xE4\xB3\x19\x17\x47\x35\x94\x13\x1F\x69\xE6\xFC\x4A\x4B\x4B\x51\x50\x82\x19\xF8\xB1\xA2\xC6\x89\x14\x42\xFC\x44\x73\x45\x0A\x1A\x71\xE2\xB9\x8E\xE3\x49\x95\x4F\x15\x03\x39\x11\x4B\x47\xE2\x33\xBC\x31\x2E\x25\x60\x8F\x39\xB3\xD8\xD8\xB1\x32\xE2\x73\xCD\xCC\x38\x9C\x3A\x9E\xE4\x6A\x3D\x01\xFF\x0C\x4E\xE6\x2A\x2F\x29\x33\xA5\x7E\x99\x4E\x1C\xD2\x8C\x8C\x4F\xF2\x04\xFC\xC9\xFC\x7B\x24\xC9\xFA\x85\x22\x6B\xCC\xAF\x5F\x8F\x59\x0F\x47\x4F\x98\xA1\xA4\x84\x0E\x74\x93\xF7\x88\x66\x71\x5C\x12\x3A\x7E\x37\x23\x7A\xD2\x82\xEA\x8E\x10\x3D\x1E\xB5\x10\x8F\x6C\x7D\x29\xAD\x28\xE2\xAA\x38\xA6\xF3\x3B\x5F\x29\x4E\x03\x45\x5B\x37\x9D\x45\x07\x43\x8E\xA9\xB4\xAF\x95\x0D\x92\xFB\x3C\xEC\x89\x62\x48\x2E\x7F\xA3\x99\xA8\x90\x40\x3E\x8A\xEC\x25\xCD\x65\xBB\x5A\xDF\x6A\xAA\xE3\x90\xF0\x91\xC5\x18\x9B\xF6\xD4\x95\xEF\xA2\x07\x04\x51\xD2\x74\x6A\xB9\xE2\xC4\x41\x34\xDA\x0D\x13\x7C\x8F\xDF\xBA\x45\x79\x6F\x39\xA9\x38\xC4\xF5\x83\xE2\xD4\x17\x72\x6B\x95\xB2\xBB\x15\xC4\x8F\xF8\x70\xE6\x2C\xD6\xD7\x23\xEE\x4F\x9A\x05\xC9\xB7\x0C\xA3\xE8\xA9\x8F\xB1\x22\x0C\xE9\xED\x79\x12\x37\xD8\xC4\xCF\x71\x9D\x43\x07\x18\xAA\xAA\x66\x51\x2D\xBC\xB4\xBC\xFC\x45\x63\x8A\x27\x62\xC0\x8B\x59\xC2\x5F\x4E\x1C\xD5\xE0\xCB\x79\x13\x58\x66\x19\xC5\xF1\x82\x20\xF1\xCF\x62\xC7\xB7\xF2\x94\x3F\x76\xAC\x5F\x1A\xA7\x3E\x31\xB3\x2A\x88\xB0\x66\x2D\x54\xF0\xDB\xD2\x00\xCD\x51\x6E\xB4\xCF\xD9\x37\x1E\xE1\x15\x77\xBA\xA4\xC9\x45\x44\x34\xAB\xBA\x6B\xCC\x64\x96\x13\xF7\x5D\xFB\xB6\x51\x44\x5B\x1A\x11\xCF\xDF\xD1\x57\x9B\x4A\x48\x39\x71\x49\x4A\x5C\xE9\xBC\x56\x6C\x37\x79\x55\xDA\xA8\xD4\xB8\xA9\xE6\x96\x74\xF0\x89\x58\x9D\x36\x28\x55\xAB\x58\x86\x27\x69\x46\x3C\x14\x46\xAC\x49\xB3\xA6\x40\x43\xA7\x23\xC7\xD5\xB3\xC8\x11\x1D\x71\x69\xDA\xC0\x14\x98\xD3\xA9\x46\x41\x3C\x13\x97\xA5\x0D\x4E\x81\x71\x16\xC5\xC7\x1A\x4C\x5C\x9E\x86\x6E\xC5\xCA\xB8\x3B\x7A\x66\x27\x01\x56\x4E\x5C\x91\x56\x95\x0A\xBD\xE7\x63\x36\x6B\xD3\x4E\x4F\x95\xB9\xDB\x23\xC7\xEB\xD2\x0A\xE2\x05\x11\xED\xF5\x79\xE8\x86\xD6\x72\xE2\xCA\xB4\xF3\xE2\x52\xE4\x0E\xAF\x24\x21\xD0\xB3\xA3\xB4\x68\x4C\x54\x4C\x57\xA5\xD9\x7A\x51\x66\xF4\xE8\xD1\xD5\x69\xC5\x0A\x3D\x26\xBE\xF3\x10\xDB\x48\x95\x13\xD7\x48\x63\xCA\x92\x1E\xCA\xEF\xA2\xA4\x0E\xC7\xFC\x70\x49\xF2\xEE\x5A\x89\xC5\x14\x98\xDD\xBB\xD8\x93\x72\xAF\x4F\x5B\x98\x34\x77\xB7\x0E\xC5\x7A\x11\xC3\x43\xF0\xE7\xB4\xD1\xC9\xBB\x41\x32\x12\xA8\xBB\xD6\x5D\x97\x36\x26\x69\xF6\x89\x6C\xD2\xDC\x09\xC2\xE5\x2F\x98\x8A\xD2\xC8\xA7\xA6\xE2\xF5\x98\x8A\x4A\xCC\xDE\x51\xF1\x86\xB4\x9A\xA4\xB9\xBB\xF3\xF0\x16\xC7\x3D\x15\xC4\x06\x3C\x10\x09\x45\xFC\x3E\x03\x71\x63\xDA\xAC\xE4\xFD\xC3\xF1\xA4\x26\x47\xCF\x27\x4E\x6F\x4A\x1B\xDE\x6D\xB1\x0A\x11\x27\xD1\xEB\xE6\xB4\xB2\xA4\xE3\xBA\x22\x1E\x50\x4E\xDC\x92\x36\xBD\x17\x93\xEA\x18\xC8\x7C\x2B\xAE\x59\xD9\xE0\x15\xF1\x80\x72\xE2\xB6\xB4\x0B\x7B\x77\xE8\x3F\xAE\x2D\xBD\x77\x28\x14\xB3\x35\x92\x5C\x03\xF8\xEB\xB1\xC9\x92\xDB\xD3\x96\xF4\x86\x4A\xBF\x0F\x27\xDD\x81\xA5\x71\xF7\x95\x25\xCE\xB0\x8D\x69\xAD\x3D\x9C\x71\xFC\x5D\x28\x99\xF4\xD4\xE3\x9D\x69\x37\x1D\x9B\x7B\x28\xA9\xCC\x63\xF0\x10\x15\xCD\xD2\x0B\xF7\x5E\x51\xDC\xB2\x32\xE2\xAE\xB4\x9B\xFF\x88\xB6\xA5\x76\x60\x25\x6F\xDC\xDD\xC7\x95\x70\x3D\x3B\xFC\x92\xB7\xED\x9E\xB4\xDB\xFF\x88\xB6\xF5\x82\x70\xD2\x0E\xD4\xDF\xD2\xD0\x95\x36\xD9\xEE\x1D\xF2\x39\x55\xAE\xF0\x67\x2F\xFB\x02\x47\x30\x0D\xDD\x2D\x13\x30\x78\x96\x0B\x30\x92\x27\x2E\xF9\x81\xBF\x10\x46\x12\x92\x79\x56\x48\x29\x8F\x9D\xB9\x93\x90\xDA\xB1\xB1\xD7\x10\xF0\x78\xC4\x72\xE2\xEE\xAC\x0B\x53\x39\xA3\x1F\x04\x06\xA7\xD3\xCF\x0B\xB3\xC5\xC7\xD2\x82\xAD\xA3\x2D\x50\x83\x0C\x3B\xC7\xBA\x49\x9E\x84\x69\x76\xE1\xA1\xD2\xD8\xEB\xFD\x7E\xE0\xD6\xFA\x38\xD6\x1D\x70\x51\x9C\x1F\x66\xFB\x38\xD6\x45\xF9\xFD\x94\x7B\x68\x7D\x2B\xCC\x3E\xBF\x3E\xC0\xF0\x01\x8B\xCB\x43\x32\x8D\x63\x86\x55\xDA\x1D\xF6\x61\x43\x87\x0C\xA9\x74\x54\x0E\x73\x9C\xEE\x18\xEE\x18\x39\xFC\xB4\xD3\xCE\x18\x42\x55\x9E\x39\x9C\x72\x51\xC3\x2B\xDD\x23\x4F\x1F\x3A\x6C\x05\xD5\xE2\x1B\xB6\x42\x42\x19\x36\xF2\x74\xC7\xF0\x4A\xFB\xC8\xD3\xFE\x5F\x00\x00\x00\xFF\xFF\xF3\x7D\xE4\xD3\x1A\x27\x06\x00") -var gzippedCallGraphCSV = []byte("\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\xFF\xEC\xBD\x5B\x6F\xDC\x38\xB2\x38\xFE\x9E\xCF\xF1\x83\x1F\x82\xE0\x8F\x8C\x67\x77\x91\x31\x72\x02\x78\x92\xF1\x9E\xC1\x99\x4D\x72\x92\xEC\xCE\x4B\x00\x81\x96\xD8\xDD\x3A\x51\x4B\x32\x45\xD9\xED\x79\xC8\x67\xFF\x43\xD4\x8D\x97\x22\x45\xDD\xD5\x0E\x1F\x66\xE2\x66\x15\xEB\xCE\x62\x91\xA2\xA8\x24\x45\x1E\xDA\xEF\x3D\x3F\xC9\x63\xFA\xA2\xF8\x75\x8F\xA2\x1C\x7B\xF4\x31\xC5\xCF\x54\x60\x1E\x87\x7E\x12\x60\x2F\xC0\xEC\x9F\x9C\xEE\x5E\x01\x58\xE8\x36\x21\x14\x68\x8F\xF3\xE3\x2D\x26\x5E\x18\xB7\xC0\x2C\x3F\xEA\xB8\x16\xA0\x63\x1A\x78\x77\x31\x7E\x50\x1A\x8F\xE8\xE4\xF9\xF4\xA4\x22\x67\x98\x7A\xE1\xCF\x97\x0A\x03\x51\xA6\x1A\x3D\xC0\x91\x82\x59\x49\x49\x13\xEF\x76\x27\x00\xEF\x50\x10\x28\xD8\xB7\xBB\x02\xB3\xEC\xD3\x00\x53\x92\x04\xB9\xAF\xB5\x67\x0D\x56\xB4\xE3\x01\xB2\x86\x42\x27\x59\x4B\x9E\xA1\xA8\x29\xDF\x8D\xD7\x96\xEF\x01\x6A\x5C\x23\xDC\x1D\x73\xB8\x17\xA8\xF9\x11\x9D\x74\x5A\x8B\x20\x3F\x39\xA6\x88\x70\xD0\x30\xD6\x76\x14\x40\x72\xC7\x2C\x21\x5A\x43\x37\x30\x44\x08\x7A\xF4\x1E\x42\x7A\xF0\x7C\x94\xEA\xE0\x28\x4D\x71\x1C\xE8\x28\x67\x07\x14\x45\xC9\x83\xE7\x27\xE9\xA3\x8E\x42\xC6\x9B\x1E\x45\x91\x4E\xB0\x1A\x74\x9B\x24\x11\x46\x71\xDB\x1E\x3F\x6A\xBB\x54\x20\x5D\x97\x22\x24\xF6\xB8\xE2\x4E\x0A\x4D\xD1\x6D\xA6\x71\x6F\x03\x16\x23\x50\x68\x16\xE2\x4F\xEC\x80\x6E\x33\xA0\xB9\x89\x2E\x81\x39\x17\x8D\x42\xBB\x1A\x3D\x0C\x4C\x92\x3C\x0E\x4C\x52\x97\x08\x80\xDC\x2D\x40\x95\x9C\xEB\xC4\xFE\x2C\xA8\x36\x59\x48\xC2\x10\xD5\x68\xE5\x91\x15\x69\x21\x1A\x55\x7C\x1C\x46\x26\x4D\x18\x1C\x50\xA4\x69\x57\xF5\x68\xBB\x14\x7F\x41\x00\x51\xFA\x46\x04\x8D\x88\xBB\x28\x49\x88\x49\xC6\x12\x01\x10\xB2\x05\xA8\x52\x72\x9D\xD8\x9F\x20\x48\x14\xB4\x15\x44\x23\x69\x1A\xE5\xC6\x60\x6E\xE0\x2A\x6D\x06\x02\x54\x68\xDA\x55\x0D\xDA\x2E\x4D\xCA\x17\xDB\x01\x0E\x50\x8C\x34\x00\x8D\x56\xC7\x30\x36\xAB\x55\x22\x00\xC2\xB7\x00\x55\x7A\xAE\x53\x96\xDF\x82\x00\x51\xFE\x56\x0C\x59\x81\x16\xD2\xA9\x81\x89\x6C\x91\x9B\x82\x70\x27\x68\x96\x47\x34\x4C\xA3\x47\xA3\xF6\x3C\x0E\x40\xBF\x06\x43\xF6\xE1\x61\x80\x89\x84\xAE\xCD\x0C\xA7\xC2\x34\x1C\x41\x5B\xF1\x40\x8D\xB9\x82\xF0\x3E\x0C\xB0\x49\x67\x0E\x43\xE5\x5F\x01\x01\x7D\x39\x48\x80\x77\x28\x8F\xA8\xA4\x31\xDF\x35\x08\xEF\x75\x5D\x01\x6E\x90\xAE\x1C\x48\x97\xC8\xB1\xAE\x9A\x6A\xC0\x05\xC7\x30\x0B\x63\x8A\xF7\x60\x57\x20\x1B\x63\xB9\x24\x14\x9A\x81\xC4\x5F\x77\x20\xF8\x08\x34\xAB\xD4\x35\x1A\x15\x73\xBB\x9F\xC4\x3E\x82\x4B\x0D\x19\x0E\x95\x1B\x30\x0E\x5F\x72\x94\x15\x44\x14\xFA\x58\xCF\xA4\x05\xD7\x86\x25\x8F\xDC\x54\x26\xA2\x68\xC5\x90\x51\x38\x29\x6E\x43\x9A\x79\xBA\x49\xA1\x06\xAA\x9E\xE3\xBB\xF1\x96\xE5\x7B\x64\xE1\x3E\x16\x1A\x9B\x42\xA2\x69\xC8\xF2\x5B\x2F\x89\xB1\x84\x25\x89\x56\x24\x65\x15\x2B\xC6\x7B\x45\x12\xC5\x93\x0D\x76\x42\x14\x1E\x5E\x9C\xD0\xB6\x11\xE9\xCA\x90\x06\xAA\x31\x42\xDD\x51\xB1\x42\xDD\x47\x34\x43\xD1\x2A\xDA\x81\xB5\x28\x86\x60\xAD\x09\x91\x3B\xCA\x96\x60\xAD\x82\x29\x90\xAE\x4A\xE1\xA8\xF0\x06\xAE\x5B\x44\x73\xC4\x78\x8F\xA8\x26\x71\xF1\x08\x1A\xA3\x70\x50\x51\xFD\x0A\x20\x5A\x80\x63\x56\x4A\x7D\xBB\x63\x00\x1D\x06\x6B\x82\xE5\x51\x0D\xA9\x10\x97\x4D\xD2\x88\x24\xDB\xB6\x06\x08\xE6\x3D\x19\xC7\xCA\x49\x3F\x58\x4E\xBA\xD1\x72\x02\x87\xCB\x49\x19\x2F\x27\x70\xC0\xB0\xD6\x53\x02\x30\x82\xB5\x3D\x81\x03\xEA\xA4\x8C\xA8\xEC\x10\xEE\x68\x84\x77\x9A\x15\x23\x80\xA3\x71\x9D\x88\xA4\x68\x2F\x82\xA5\x1C\x68\x90\x84\x4B\x83\x12\x96\x30\x61\x00\x30\x7E\xD6\x80\xBA\xB2\x9F\xB1\x0E\x6C\x10\xBE\x9D\x34\x61\xEB\x40\x61\x0B\x99\x50\x76\x19\xC3\x21\xE1\xFE\xD0\xE9\x8B\x12\x49\x13\x80\x12\x19\xAD\xA9\x5B\x22\xAA\xAE\xAA\x14\xA0\x1F\x5A\x12\x62\x50\x73\x40\x31\xB6\x79\x80\x12\xE2\x12\x67\x53\x9C\xB5\x8C\x4B\x37\x12\x2F\x8C\xD3\x08\xF9\x46\x6A\x5A\xBF\xD4\x92\xCA\xA3\x85\x07\xAA\x83\x46\x96\x94\x73\xA7\x1F\x06\xA4\xA8\x09\x28\x0A\xE3\x0C\xF2\x82\x88\x90\x22\x92\x61\xD6\xA6\x05\x86\xA9\x86\x70\xBD\x6D\xD0\xD2\x68\x7B\x70\x6D\x2C\x6E\x69\x12\xFE\xE3\x6F\xCF\x6A\xF0\x8B\x23\x3E\xFA\x07\x8E\x65\x11\x49\x24\xC3\x3E\xD5\x8B\xCC\xA1\x40\x42\x4B\x14\xF8\x2D\x0D\xFF\x98\x7A\xF8\x4E\xB3\xDF\xC3\x01\xE5\x3E\xB1\xB1\x53\xAC\xE9\xB5\xA7\x86\x4E\x15\x50\xED\x83\x8D\x9D\x30\xD8\x2B\x32\x71\x8A\x60\x4E\x91\x91\x53\x04\x70\xC2\xF7\x28\x2A\x92\x99\x17\xE3\x87\x32\xBF\xA2\x28\x4A\xFC\x67\x9E\xB7\x4B\x88\x8F\xBD\xF0\x98\x26\x84\x7A\xAC\x5B\x1E\x46\xB4\x89\x8E\xF2\xC7\x4B\x5B\xC4\x9F\x6C\x11\x2F\x6D\x11\x7F\xB6\x45\xFC\x1B\x53\xB4\x19\x47\x50\x08\x8A\x40\x69\xD7\x59\x04\x22\x9A\xEC\xFE\x01\x91\xAC\x7A\x11\x5C\x25\x01\x94\xE1\x7F\xFC\xCD\x0B\xB3\x82\x57\x18\x80\x19\x53\x42\xA9\x7E\xEF\x71\x5C\x6D\x97\x83\x58\x3B\x82\x61\x00\xEF\x5A\x85\x54\x31\x26\x33\x4C\x21\x40\xE9\x70\x15\x20\x33\xAA\x9A\xF5\x8A\x54\x08\x46\x35\x38\x22\x19\x25\x61\xCC\x76\x36\x13\x1F\x51\x1C\xF0\x68\x38\xEE\xE0\x55\x21\x70\xBC\xCA\x16\x0D\x11\x85\x97\xD2\xB1\xB6\x03\xD7\x3F\x27\x51\xB7\xD2\x1C\x92\x51\x71\x89\x98\x49\xF9\x02\xB5\xD3\x00\x1C\x92\xD1\x08\x12\x31\x90\xEF\xFF\x65\x49\xEC\xE5\xF1\x11\x91\xEC\x80\xC0\x2D\x68\x00\x83\x35\xB1\x5C\xDD\x62\x28\xF0\x20\x3F\xA6\x2A\x38\xA3\x24\xC2\x31\xDC\x0D\x14\x90\xE4\x31\x0D\x8F\xD8\xC3\x84\x54\xB5\x69\x48\x13\xA4\x01\x71\xD4\x55\x20\xE7\x65\x11\x98\xC5\x29\x09\x63\xBA\xF3\x34\x1D\xCB\xDA\xAC\x4A\x29\xDE\x9E\xA0\xB4\x58\xFF\x23\xFF\x80\x6E\x23\xC5\x4F\x26\x34\x36\x0A\x0D\x70\xB6\xC0\xEE\xC6\xA8\x97\xE0\xDD\x12\xED\x3B\x18\xD6\xCF\x01\xBA\x70\xEA\x9D\x4D\xE6\xB2\x08\x9F\x0A\x94\x80\xCF\x80\x61\x16\x84\xFB\x90\x02\x48\xA5\x53\x2B\xA4\x03\x3E\xA9\x28\xB5\xE7\x62\x9F\x0F\x18\x01\x1A\x66\x59\x5A\x17\x62\x2A\x14\x62\xA8\x25\xA4\x91\x13\x20\xC4\xD5\x5E\x6D\xC0\xF3\xFA\x70\x01\x05\x23\xE8\x47\x9C\x82\x2A\x3F\x2C\x8D\x79\x21\xB5\xD8\x59\x4E\x48\x52\x2C\x34\x0D\xB8\xED\xCA\xC2\x8E\x73\xFD\x98\xD6\x8C\x5D\xE6\x15\x5B\xEC\x8A\xB6\x56\x5C\x9A\x7C\xC3\x71\x35\x95\x46\x91\x1E\xCA\x97\x2F\x20\x02\xEC\x12\x9E\x7C\x3D\x53\xEB\xBD\xD2\x62\x2B\x4A\xE9\x51\xCB\xA1\x6B\xA6\x54\x47\x96\x15\x43\xD6\xD8\xC1\x8F\xDF\x8B\x03\xB1\x92\xDB\xFF\xC3\xBE\xE2\x7C\x58\x41\x6C\x87\xD7\x45\x12\xA0\x93\x61\x6A\x01\x12\x93\x8C\x08\x36\x9A\x4F\x40\x32\x18\xAF\x94\xBC\x9B\x9E\x8C\x67\x47\x12\xB6\x8B\x82\xE0\x85\x71\x86\x95\xF1\xD8\x29\x94\x5E\x9A\x32\xD1\x9B\xA8\x80\x18\xA0\x52\x0F\x24\xA4\x98\x78\xF8\x18\xD2\x7A\xA8\x81\xA3\x8A\xC7\xAB\xB6\x0A\xC4\x99\xD9\x88\x25\x97\x00\x3A\x3C\x13\x57\x6E\xEA\xD1\xD1\xE8\xEC\x68\x49\x5F\xCA\x9F\x3C\x96\x61\x2E\x00\xD0\xC4\x32\x43\xC1\x2A\x47\x34\x8E\xF0\x11\x0B\xA7\x6B\xF6\x58\xC3\x5D\xED\xA0\xA0\x30\x0A\x70\x6F\x06\xD2\xD6\x7B\x30\xA6\x49\xC9\x16\x4B\x17\x4A\xBD\xFB\xC9\x39\xD7\xB2\x9B\x3C\x6F\x5B\x76\xF3\x93\x28\xC2\x3E\x0D\x93\x01\x82\x62\xEA\x45\xC5\x4F\x14\xC1\x7D\x5B\xDA\x9D\x76\x94\x50\x4B\xE7\x14\x60\x4D\x6C\x61\x3A\x38\x04\x38\xB1\x39\x5E\x11\x8E\xF7\xF4\x60\xD7\xC3\x18\xF5\x12\x6E\x6F\x83\x57\x09\x53\x1D\x11\xFA\x50\x05\xBA\xF4\x31\x48\x47\x77\xF6\x8F\x75\xCF\xAA\xF8\xA3\x98\x1C\xC3\x58\xAC\x33\xAC\xB4\x6C\xD6\xE0\x36\x5D\x7A\x21\x9B\xBC\xA6\x15\x07\x4A\x43\xEC\x1F\x13\xC9\x16\xC1\xD2\x0D\x6D\x07\x51\xA3\x62\x31\x69\xF0\x47\x29\x62\x07\x12\xC1\x4C\x48\x65\x2D\x58\x35\x1F\xF1\xD1\xAF\x0E\x6B\xF1\x98\xED\x56\x48\xB5\x46\xF2\x91\x7F\x60\xE6\x90\x66\x07\x11\x9E\x29\xF0\x23\x3E\x26\xE1\x5F\xD8\x0B\xE3\x50\x71\x83\x02\xE3\xAA\x89\x1A\x96\xE6\xD9\x41\xD7\xAF\x81\x01\xFD\xCA\x82\x03\xDA\xDD\x02\x30\xD4\x22\xA5\x46\xAA\x15\x6E\x68\x94\x33\x2D\x88\x53\x51\xA9\x43\x86\x3D\x53\x28\x34\xE3\x4E\x1C\xF8\x49\x4C\xF1\x09\x80\x1F\xD1\x49\x0B\x6B\x9E\xCC\x88\xAD\xFC\x01\xC7\x06\x22\x19\xBF\x7C\x22\x21\x3C\x99\xE0\x9F\x85\x40\xD9\x45\x80\x0B\xEC\x45\x48\xEB\x0E\xB1\xBD\x8D\x27\x95\x52\x21\x32\x37\xBD\x29\xA2\xB4\x92\x0B\xA0\x26\x18\x61\x8A\xB5\x11\x04\xA8\x58\x76\xF0\x8F\x15\xCA\x8E\x7B\xAE\xA3\x02\x6D\x9E\xE2\xEC\xCC\x1B\xA5\x4A\x47\x9A\x78\x99\x1F\xC2\x7D\xB9\x02\x50\x47\xB7\xD9\x4A\xE5\xE0\x5E\x9C\xB0\xD1\x68\x16\xBB\xC1\xEA\x90\x52\xA0\xA6\x91\x56\xA0\xA5\x91\x1A\xE2\x27\x4A\x5F\x3D\x25\x92\x9E\x2D\xAA\x20\xFE\xB4\xE1\x49\x83\x24\xFA\x43\xE8\x5E\xEF\x9E\x88\x20\x29\x47\x29\xDD\xDA\x67\x6C\x2A\xC5\xE6\x29\x1B\xD0\xEB\x2F\x1C\xC6\xB7\xA8\xDA\x00\x94\x10\xB8\xDD\x54\x95\x28\x3E\xB1\x1D\xFB\xFC\xA7\x7F\xE8\x30\xAA\x3D\x7D\x18\xA3\x4D\xC7\xFC\xB3\x37\x45\x15\x09\xC4\x9B\x5D\x06\x71\x5A\x72\x20\xC5\x6E\x52\x37\xCE\x11\x8A\x18\xB2\x6D\x78\x04\xC1\x36\xB2\x28\xAA\x6D\x64\x0C\xD5\x36\x1C\x06\xB3\xCD\x9D\x70\x54\xF7\x4E\x38\x87\x7B\x27\x1E\xB4\xBD\xE3\x4F\xE3\xD6\x4F\x2A\xF9\xBE\x7C\x4B\xB1\x3A\x6F\x5A\x78\x1A\x1C\x52\x4D\x47\xA4\x21\xF6\x97\xFA\xB6\xFD\xAA\x47\xB7\x5C\x5F\xA1\x25\xCB\x6F\xDB\x16\x8E\x06\x8F\xC4\xE8\x1C\x73\xEE\xA4\x6C\xFB\xEB\x98\x57\x30\xAE\x6F\x0D\x2C\xE5\x16\xCE\xBE\xD4\x8F\x88\xEF\x10\x77\xD4\xB7\xF9\x51\xE9\x56\xFF\x42\x71\xD0\xF6\xAF\x75\x6B\xC9\x71\xCF\x88\xEB\xC3\x32\x1A\x4E\x0C\xC4\x73\x6B\x1A\xB8\xA8\x6A\xDB\xCB\x60\x12\xF0\xF8\x18\x12\x98\xB5\x62\xB5\xB8\xB5\x16\x6D\x0B\x17\x5F\x0D\xA0\x0A\x2B\x1E\xED\x94\x10\xA9\xA5\x36\x01\xAF\x1C\xAF\xB7\x70\xAE\xA4\x51\x99\x3B\xDF\x7B\xC7\x9F\x1D\x6E\x7E\x14\x7C\x84\x5D\x78\x8E\x10\x4F\xFE\x04\xD3\x3F\xF1\x0C\x4E\x02\x87\xE6\x17\xD3\xE5\x24\x32\x39\xC1\x5C\x62\xBC\x87\xB8\x14\xCD\x2D\xE1\xE6\x17\x3B\xD2\xDA\xFE\x66\x32\xD4\x14\x2A\x3E\x1C\x41\xE9\x20\x41\x39\x93\x64\x1E\x41\xF1\x5E\x73\x94\x4A\x44\x51\x0F\x6E\xA8\xF0\x66\x8E\x50\xA9\xCB\x05\x87\x00\x6B\xF6\x36\x55\x18\x34\x15\x9A\xC8\xF0\x5B\x96\x22\x8A\x70\x76\x43\x02\xF1\xA7\x28\x54\xC2\xB5\x75\x3D\x2F\x45\xF4\xC0\xAC\xA8\x6E\xCC\xC1\xC0\x76\x6D\x63\xEA\x5C\xD7\xC3\x26\x1A\xAC\x6C\x84\x11\xD8\x9E\xB6\x57\x6D\xB9\x15\x08\x9C\x55\x95\x66\x89\x9A\xDA\xA5\xB6\xA0\x02\x55\x17\x9C\x1A\x94\xCC\xA3\x24\x3C\x7A\x11\xDE\x51\x3D\x4A\x96\x46\xA1\x01\x4C\x70\x79\x34\xC6\x2B\x8C\x57\x6F\x29\xD2\x43\x26\xA8\x06\x80\xB8\xFD\x0C\x03\xBC\x52\x5F\x0B\x2F\x1D\x26\x81\x79\x59\x0D\x72\xB5\xF6\x63\x50\x82\x8F\xC9\xBD\xB2\x11\xA6\x02\x9B\x30\x82\x7B\x55\x1A\xC1\xC0\x52\x5C\x1E\x26\xFC\xD2\x72\x6B\xE3\x4E\x86\x67\x0A\xC5\x84\xDB\x45\x57\x21\xB5\x47\xE4\x76\xAE\x40\x06\xC8\x55\xBE\xDE\x25\xE4\x88\xA8\x06\x09\xB2\xE9\x2E\x8C\x68\x53\xCF\xB3\xD8\x97\x9B\xC5\x53\x2A\x3A\x38\xEF\x0A\x0E\x28\xBA\x42\xE9\xC5\xBB\x42\x01\x72\xAE\xA8\x60\xC2\x2F\x2D\x37\xC9\x15\x1C\x3C\x53\x28\x02\xAE\xE0\x20\x82\x2B\x04\x4B\xC9\xAE\xE0\xC9\x69\x5D\x21\x53\x96\x1F\x0E\x57\xE2\xC3\xB6\xD5\x23\x55\x36\xEE\xA2\xC2\x6C\xDD\x85\xC4\x3F\x61\xD6\x71\xB2\x43\xAA\x9C\x20\xE1\xD5\xDB\x0E\x7A\xC5\x80\x8D\x09\x09\x03\x4E\x03\x7A\xA4\xCC\x82\x04\x64\x1C\x30\x37\x18\xD9\xB0\x30\xD2\x63\xC0\x8E\x92\x48\x98\x99\x58\x59\xC5\xE8\x81\x3C\x16\xF7\xAB\x21\xE3\x95\x38\x9E\x77\xC4\x64\x5F\x8C\x6A\xF6\xAF\x38\x9E\xDB\x26\x61\x24\xCB\x98\xD5\x20\x96\xB1\xAB\x6C\x51\x36\xEB\xF9\xB4\x23\x59\x26\xC0\x1B\xC0\x30\x37\x40\x28\xF2\x74\xA3\x41\x92\xAA\x03\x0D\x16\x3F\x35\x08\x18\xE6\x41\x2C\x26\x35\x93\x3C\x0D\x92\x51\x1E\x30\x3F\x26\xDC\x1B\x5A\xD0\xA6\x99\x00\xAB\x1F\xF8\xCA\x8D\xCD\xCE\xA0\x02\xA8\x9F\x01\xB3\xDD\xAC\xFA\xE0\x27\x10\x5B\x5A\x9C\xA2\x51\x78\x89\x45\x8B\xC5\xCB\x00\x22\x70\xB2\x64\x36\xC2\x00\x48\x9C\x01\x60\x68\x39\x2A\x3A\x70\xF8\xC6\x4E\x89\x9A\x02\xBC\xA1\xAE\xB3\x5D\x0B\xE4\xFD\x24\xB4\x8A\x36\x30\x51\xCB\x60\x72\x52\xB3\xAC\xAE\x4C\xB1\x15\xBE\x9A\xEF\xF4\xEF\x51\x01\x18\xDC\xE6\x8A\x04\xE5\xF6\x62\x81\x7E\xE0\x31\x1D\x0E\x4F\x7B\xE2\x1A\xC4\xE1\x4F\x32\x81\x08\xFC\xE3\xD0\x1A\x01\xC7\x41\x56\x84\xAD\x89\x8B\x80\x03\x11\x69\x8B\x03\x13\x19\x09\x0B\x38\x8B\xDF\x81\xD9\x2C\x40\x01\x3C\x61\xB3\x4D\x03\xE7\xDF\xA1\xD0\x91\xA0\x24\x8F\x7D\x93\x30\xED\x7A\x55\x47\x82\xDF\x20\xD6\x10\x01\x02\x86\xC3\x10\x37\xCE\x35\x24\xB8\x5D\x61\x3D\x86\x3E\xBA\xC2\x38\xC0\xA7\x04\xCE\xA4\x00\x0A\x14\x5B\x3C\x5C\xDA\xEF\x86\x50\x74\xC7\xBD\x20\x5C\xD5\xC8\xD5\xB2\xCF\x24\x2F\x8F\x02\x18\x98\x07\x43\xEA\xF0\xF0\xEA\x39\x1C\x08\x07\x86\xB4\x44\x5A\x6F\xF5\x0A\xD1\x83\x93\x19\x88\xA4\xD7\xC4\x8B\x0D\xB2\x54\xBD\x7B\x48\x23\x2F\xB0\xBB\xE4\x56\x52\x26\x5B\xB8\x9B\x14\x6B\x11\xDA\x8D\x1D\x15\x06\xF9\xA6\x85\x02\xE6\x28\x81\x80\x29\x04\x9A\x7A\x33\x48\x62\xF1\x1B\x45\x2A\x4A\x57\x14\x73\xC4\x94\x18\xCE\x28\x22\xB4\x33\xDB\x4A\x58\x50\xBE\x95\x50\x40\x8B\xE5\xB7\xDC\x21\x21\x1D\x2B\x01\xC9\x90\x90\x45\x44\xF8\x80\x01\x8C\xDB\x69\x2F\x01\x1B\xB0\x99\x00\x87\xBC\xDF\x20\x40\x11\x00\xC9\x0D\x47\x01\x25\x21\x78\xC9\x8F\x02\x57\xB7\xB2\xBA\xD1\xD8\xDB\x55\x26\x76\xCA\x60\x6A\xA8\x77\xC9\xD4\x22\x75\x99\x5A\xC4\x56\x4D\x2D\xC2\xA1\xA0\x12\x31\x00\x67\xB4\x08\x80\x33\x14\xFA\x66\x67\x78\xDA\xB7\xFE\x34\x58\xB5\xFE\x11\xCA\xA8\x46\xFB\x16\x59\xA3\xBE\x4A\xCD\x68\xCD\x16\x5D\x6B\xAE\x16\x45\x67\xAF\xEA\xF5\x3F\x8D\xC1\x04\x16\x1D\x16\x4B\x09\xDE\x85\xE0\xD5\x46\x3A\x34\xAD\xD8\x1C\x8E\x4E\xEE\x0A\x45\x27\xB8\xC8\xA5\x43\xF2\x2C\xDF\xD9\x48\xCE\xA1\x69\x25\xE7\x70\x74\x92\x57\x28\x3A\xC9\x45\x2E\x5D\x92\xA7\x1D\x65\x09\x87\xD5\xFE\x69\xA2\xA3\x95\x3A\xD5\x94\x1F\x52\x7F\x45\x66\x09\x0E\x45\xB6\x84\x52\x8E\x0E\x4D\xBF\x30\xAB\x74\xD0\xC0\xDB\xF1\x07\x2B\xA6\x2A\xD3\xA5\x00\xAF\x6C\x94\x3C\xC0\xEF\xD3\xA9\x08\x80\x21\x5B\xA0\x05\x13\x63\xFF\xAE\xFC\xD0\x62\xAA\xA9\x46\xA5\x42\x93\xB2\x51\x83\x06\xD5\xA3\x2A\x11\xF9\xD5\x88\x1A\x33\x4F\x53\xB3\xC9\x5A\x04\x40\xE5\x16\x68\x34\x59\x89\x66\xEC\xDF\x65\xB2\x16\x53\x35\x99\x4A\x85\x26\x65\xA3\x06\x0D\x32\x99\x4A\x44\x36\x59\x61\x9A\xAC\x88\x70\xC3\x7B\x9B\x00\x0A\x5F\xA4\x35\x70\x7D\xFD\x05\xA1\x80\x24\xF8\xB3\xF0\x3A\x1A\x3C\x0E\x48\x84\x55\xB5\x46\x12\x2D\x06\xAC\x88\xBA\xCD\x0D\xC2\xC1\xCE\xF0\xF3\x4A\x1D\x0A\x48\x22\xCE\xE1\x3B\xEA\x54\x04\xB5\x7B\x8C\x8E\x60\x76\x96\xA0\xA5\x23\x9E\xB5\x88\x07\x94\xF1\x55\x7A\xF1\x13\x82\x56\x35\xB3\x04\xAE\x1E\x2F\xBD\x50\x5A\xF8\x23\xE2\x2A\x2A\x3F\xA5\x75\x10\xB2\x62\xC6\x9D\xC9\xEC\x42\xAD\x77\xCE\x54\xBC\x76\x28\x82\x0F\x3D\x1A\xCD\x41\x28\x2F\x6D\xB5\xF5\x09\xF5\x55\x41\x7C\x47\x71\x5D\x52\x0A\x55\xBE\xFC\xAF\x83\x36\x22\x37\xDB\xEB\x72\x2F\x09\xA0\xE9\x00\xFA\x5E\x2F\x28\xE4\x6A\x98\x31\x84\x23\xC9\x00\xA0\x28\xFB\x60\x20\xA6\x70\xDE\x42\x8B\x51\x1F\x23\x83\x22\xE6\x05\xE7\xCF\x6F\xF8\x31\x33\x23\x76\xD9\x41\x41\x85\x07\x0B\x8F\xD7\xAC\x86\x94\x20\x95\x27\x29\x18\xA1\xA3\xBF\xB2\xCC\x87\xD1\xB4\x91\xD8\x8C\x7E\xEE\xBD\x7C\x05\x24\xB9\x33\xA4\x1A\x3F\xB7\x00\x39\x48\x42\xF1\x91\x8B\x64\xB6\x10\x7E\xA2\x2D\xB9\x4E\xB6\x97\x0C\x6A\x2C\x25\x03\x14\x1B\xC9\x08\x2A\x5B\xBE\x8B\xCC\x57\x81\x49\x2E\x6A\x0E\xB2\x4A\xED\xED\x93\x32\xC5\xE9\xD0\x43\x34\x08\xAA\x9E\x2C\x87\xFB\x97\x8F\xED\x94\x1E\x86\x5C\xA7\x20\x00\x4E\xA8\x70\x3C\x8F\xCF\x91\x24\x79\xD0\xD0\x69\x6E\xC2\x90\xD0\xBB\x81\x9C\x88\x26\x84\xF6\xE4\x03\x84\xD3\x1E\x72\x85\x5F\xC2\x6B\x8F\x19\x6B\x20\xDA\x0D\x6E\xD8\x87\xFC\x6D\xB5\x7C\x02\xB0\x46\xE4\x1E\xD7\xDA\x22\x8B\x71\xA2\xC3\xD5\x45\x8D\x80\xAF\x4D\x48\x20\x56\xB7\xAC\xD0\x4B\xA9\xD5\xDF\xBA\x69\x53\x04\xC9\xF3\x6D\x01\x2D\x3D\xCD\xA6\xD8\x3A\xEE\xF8\x8E\x42\x50\xD5\x58\x1D\x10\x25\xD6\x00\xA8\x18\x68\x02\x82\x34\xC6\x79\x13\x74\x9B\xF3\x85\xD1\x77\x3D\x3B\x65\xDA\x58\x00\x73\x35\x25\x28\xCE\x42\x1A\xDE\x63\xCF\x8F\x92\x2C\x27\x9A\xD4\x04\xE0\x95\x66\xD0\x81\x9F\x99\xC1\xAA\x3B\x8C\x98\xCC\xBE\x16\x78\xD2\x09\xAA\x4E\x7C\xE1\x6C\x84\x25\x76\x79\x62\x62\x8C\x69\x92\xEA\x30\x97\x26\xE3\x64\xE1\x5F\x8A\x17\xA0\x97\xED\xE1\xB4\xC4\x6D\x62\xDB\x21\x28\x8F\xDD\xF4\x1C\xDA\x55\x95\x32\x11\xD6\x07\x05\x2C\xA0\xD2\x0C\xAD\x48\xA9\xA6\x20\xFE\x24\x02\x1C\x9F\x28\x08\xE4\x73\x9F\x62\x56\x14\x10\xCC\xDD\x75\x89\x12\xE0\x21\x8D\xFB\xF2\xA0\x89\x59\x10\x18\x47\x2A\x85\x60\x24\xB5\x22\x85\xF1\x3A\xA4\x6A\xC0\x51\x92\x7C\xCB\x53\x40\x52\x05\xD0\xA4\x78\x0E\xC2\x55\x77\x7C\x6B\xFB\x9E\x18\x4A\xD3\x22\x9A\x9A\x57\xC8\xDA\x97\xE5\x05\x38\xD7\xB9\xFC\xF3\x59\x9C\x04\xF8\xEA\x8A\xE0\xCB\xAF\x97\xAF\x32\x1A\x5C\x5D\x79\xDE\x4F\x57\x57\xB7\x28\x0B\xFD\x2A\x44\x5F\xFB\x07\x44\xBE\x5E\xFA\x5F\x2F\x5F\xB6\x08\x45\x5B\x31\xDC\x42\x9A\x31\xF8\x1B\x19\xA1\x8A\xEB\x84\xD4\xE0\x97\xC5\x7F\x7E\x12\x67\xF4\xE2\xEB\xE5\x2F\x2F\x66\xE6\x75\x75\x85\xB2\x2C\xDC\xC7\x5F\x2F\x5F\x95\x24\x4B\xD6\xCF\xBF\x5E\xFE\xB2\x9A\xCA\x2B\xF1\x7D\xC2\x2E\x66\x73\x8F\xEA\xE2\xA2\x6B\x1E\x17\xEE\xC7\xC1\xD7\xCB\x97\x51\x12\xEF\xD7\xB4\x43\x92\x62\x52\x80\xBF\x5E\xBE\x0C\x70\x84\x29\xFE\x7A\xF9\xEA\x3E\x09\x83\x55\x83\x71\x35\xE7\xAC\xA7\x32\xCE\x7C\x94\xE2\x1F\x64\xF0\x71\x41\x17\xE3\x87\xAF\x97\xAF\x36\x34\x20\xAA\xE7\x36\xEB\x87\xBE\xE7\xF1\xDC\x8A\x39\xFF\x98\xC4\xAF\x29\xC9\xF1\x9B\x02\x48\x0F\x24\x79\xA8\x2E\x96\x28\xEF\x55\xFB\x7A\xF9\xEA\xEB\xE5\x2F\x35\xB5\x67\x6B\x44\xD4\xFC\x23\x37\xCD\xB3\x83\x77\x8B\xFC\x6F\xCD\xE0\xFD\xE5\xD9\x3E\x4A\x6E\xCB\xF2\x3A\x42\x2C\x81\xD9\xA4\x5C\x91\xD7\x3D\xF6\x0B\x46\xB3\x9B\x4A\x87\x32\xBF\x8F\x64\x5F\x89\x7D\x66\xE1\xFA\xDC\x76\xAC\x3B\x07\x6E\xD8\x81\x11\x3E\x61\x72\x75\xC5\xFE\xB1\x2E\x67\x9C\x47\x37\xEC\x51\xE6\x1C\xB6\xFE\xFA\x7A\xF9\x8A\xF9\xB5\xF2\x48\x31\xE9\x3D\x7F\xEE\xFC\xB7\x71\xFF\xCD\x3E\xC9\x56\xFB\x0B\x50\xB2\xD6\x3A\xDE\x2A\x2F\x34\xC5\x89\x8B\xAF\x0D\xC7\x57\x95\xF1\xBF\xD7\x29\xDF\x25\x84\x8D\x3B\xCC\xB8\x88\x77\x9E\xDB\xB0\xE7\x56\xDC\x69\x74\x71\xB1\xE1\xB8\x48\x34\x67\x0A\x9D\xD3\x36\xEC\xB4\x55\xF6\xF0\x5C\x44\x6C\x38\x22\xE6\x4F\xEF\xFD\x9E\x32\xB8\x60\x71\xC1\xE2\x6A\x81\x33\x8B\x8B\xB5\x1E\xCD\xBA\xA0\xD8\x7C\x50\x7C\x2F\xFE\xA9\x56\xE8\xC0\xAA\xDD\xBC\x30\xAC\x3A\xC4\xF8\x44\xBF\x5E\xBE\x62\x9F\x2D\xA8\xF2\x10\x3B\x07\xA4\x03\xDB\x6C\xE8\xEB\xFA\x56\x0F\xD7\x2C\x48\xF7\x11\x77\xE6\xB4\x59\x4B\xF5\x5F\x0B\x8F\x3F\x9D\xC2\x55\xFB\x0E\x53\xFF\xE0\x85\x14\x1F\xC5\x00\xD0\xE1\xCB\xED\x16\x06\x1D\xFB\x08\x52\x23\xA9\x76\x75\xA3\xC7\xB7\x0E\x39\xA5\xAF\x18\x72\x26\xD2\xDA\x90\x53\x3A\x09\xED\xEC\xCE\x44\xD1\x05\xE6\x0E\xB4\x34\x78\x18\x53\x61\x0E\xD6\xF5\x9D\xDF\x1D\x3C\x87\x32\x63\xB3\xAF\x9D\x4D\xC7\xA0\x3C\x0B\xA6\xB3\x9A\x5D\x38\x88\x1D\x7A\xC6\x03\xDF\x19\x0A\x08\x0D\xF1\x8E\x88\xE0\x7B\xF5\xF6\x30\xDF\x79\x26\x17\xEB\x58\x4C\xE7\x63\x9E\x03\xE0\x64\xD8\x0E\x76\xFE\xD6\xF6\xED\xE9\x7A\x0D\x1D\x28\x0A\xBA\x59\x76\x04\x84\x86\xC0\x3C\xB6\x37\x18\xB7\x3A\xD6\x6A\x8B\xCE\xCE\x81\xDA\x20\xDB\xBB\x78\xBA\x88\x56\x0A\x1D\xA0\xF4\x51\x71\x2C\x8E\xB5\x95\xC7\x7A\xBF\x5E\xBE\x62\x4F\x3D\xFB\x1D\x4B\x52\xFB\x0A\xC7\x86\x8C\xA4\xED\xE5\x99\x2C\x6E\x74\x0C\x4A\x7F\x76\x3F\x0E\xB6\x3F\xC4\x61\x26\x33\x7B\xA9\xB6\xD0\x83\x4B\xB3\x96\x6A\x7C\xF6\xB3\xB0\xE6\x11\xCE\xCA\xA6\xE5\xC9\x2E\x5C\x08\x33\xCD\x89\x77\x44\x61\xCC\x38\x23\x8A\x2B\xFD\x6B\x5B\xE8\x8B\x5C\x9B\xBE\x4F\x76\x05\x61\xA3\xBC\xCD\xD0\xDE\x84\x11\x37\x1E\x80\x9A\x1C\xBB\x0D\xDB\xE9\x9F\x02\xF6\x0C\x11\x35\x37\x55\x04\xEA\x4A\x70\xD0\xE8\x34\x77\x5E\xDF\x3A\x2B\xCB\xB7\x72\xFA\x30\x6B\xAF\x2B\xE6\xAD\x3A\x17\x55\xD3\x31\xDD\x88\x99\xE7\x2F\x1E\x2C\x0D\x6A\x9D\x90\x57\x36\xD8\xFA\x19\xD9\x6C\x80\x8E\x94\x6C\xED\x06\x35\xE9\x15\x41\xCF\x8A\xB2\x23\xA2\x3E\x78\xE5\x21\x08\x6D\xDE\x9E\x03\xA1\xF5\x4B\x77\x02\xB0\x3B\x16\xA4\x2E\xDC\x25\x5A\x5C\x6B\x21\xF9\x8F\xB8\x33\x5F\x60\x34\xAF\x0C\x78\x59\x94\x3C\xB0\xD7\x1F\x97\x61\x3F\xF7\x88\xB8\xB8\x00\x63\xB1\x5F\xDC\x2A\x9F\x60\xEC\x46\xCA\x54\xA4\xA7\x9C\x6B\xB4\xAA\x7A\xEC\x6D\x5D\x36\xAA\xA5\x98\xAE\x20\x45\xC6\x51\x5B\xDB\x4C\xF1\xBA\xB4\xE7\x37\xFC\xB8\xC8\x83\xA3\x76\x44\xB2\x80\x78\xF3\xFC\x8D\xD0\xA3\x12\x8F\xA2\xDB\x68\x9B\x52\xF3\x32\xE5\x71\x42\x02\x4C\x70\xE0\x1D\x51\xCA\x24\xC4\x44\x2F\xD8\x16\x75\x28\x24\x6A\xC5\x50\xC0\xF8\x2E\x47\x91\x47\x13\x05\x85\x6D\xFB\x74\x19\x84\xF5\x3E\x2F\x7B\x68\x15\xEE\x30\x19\x68\x0F\x68\xA2\xD9\x86\xD2\xF5\xBC\xB4\x0B\xE3\x40\xD0\xE5\x15\x27\x8D\x4D\xF6\x79\x62\x8B\x0D\x49\x4F\x77\xF8\x60\xBB\x87\x0F\xF4\x31\x99\xA2\xD0\x90\x85\x67\x33\x83\xCC\x78\x19\x53\x54\x5C\x76\x28\xCA\xB0\x30\x7E\x17\x63\xDF\xE5\x89\xA7\x55\xAA\x14\xBF\x6E\x93\x24\x72\x55\x8B\xAB\x5A\x36\x63\x8F\x1F\xAC\x6A\xF1\x3C\x7C\x2C\xBF\x97\x91\xC7\xE1\x5D\xCE\xC4\xF0\x10\xD9\x67\x7A\xA9\x56\x9A\x13\xAA\x25\x38\x54\x54\x6D\x42\x3E\xCD\xE2\x5D\xB8\xAF\x57\x82\x10\xBC\xC7\xA7\xF2\xB7\x69\x51\x3A\xEE\x79\xBB\x81\xF0\xA8\x67\xD0\x6E\x07\xEA\xA9\xEE\x40\x59\xED\x52\x3A\xF7\xFF\x08\xEE\x57\x77\x1C\x9D\xDF\x9F\xAC\xDF\xDD\xD4\xE0\x62\xA4\x2B\x46\xCA\x13\x66\x4F\x6B\x1D\xEA\x16\x9F\x6E\xF1\xB9\x0D\x7B\xFC\x60\x8B\x4F\xCB\x2D\xF3\x17\x2E\xE8\x1B\x27\xB7\xFB\xF9\xF5\x9C\x0B\xDB\xAC\x99\x8B\x5D\xAA\x5E\xDF\xE3\x3F\x7C\xD4\xBA\x54\xFD\xE3\xA5\x6A\xC0\x40\x96\xC9\xAB\x10\xCD\x36\xA9\xB9\x07\x54\xCB\x3E\xA0\x7A\xD2\x07\x83\x5C\x58\xAD\x16\x56\x36\x5B\x8E\xCE\x3D\x1B\x18\xF5\x23\xB7\x86\x24\x1F\x3E\xAD\xEA\xD4\x77\x0F\xB4\xD7\xD7\xC1\x15\xAA\x3F\x74\xA1\xEA\x1E\x68\x4F\x25\x9F\xFA\x50\xE0\x07\x4F\x0E\x23\xF6\x5E\xDC\x64\xB7\x15\x05\x5C\x3C\xBB\xC9\xCE\x4D\x76\x6E\xB2\xEB\x98\xEC\x16\xDC\xBD\x72\xD3\xC2\x06\x14\x70\xD3\x82\x9B\x16\xDC\xB4\xE0\xA6\x05\x70\x5A\x18\xB0\x39\xE9\x92\xFA\x06\x14\x70\x49\xDD\x25\x75\x97\xD4\x5D\x52\xEF\xDC\xD8\x72\x79\xCC\xE5\x31\x97\xC7\x96\xC9\x63\x04\x17\xD2\x74\x15\x51\x33\xAE\xBF\xEB\x4B\xAA\x5C\x02\x70\x09\x60\x13\xF6\x70\x09\xA0\x4E\x00\xC2\xA4\x1C\xE3\x13\xF5\x52\x12\x1E\xC1\x1B\xDC\x7E\x71\xE3\xD7\x8D\xDF\x6D\xD8\xC3\x8D\x5F\x70\xFC\xBA\x31\xE9\xC6\xA4\x1B\x93\x4B\x6D\x0E\xD8\x95\xD5\x6E\x54\xBA\x51\xE9\x46\xE5\x26\x46\x65\xCF\xA7\x0A\x6E\xE4\xBA\x91\xEB\x46\xEE\xE6\x46\xAE\x7A\x41\x86\x1B\xB2\x6E\xC8\x6E\xC2\x1E\x6E\xC8\x82\x0B\xD3\x65\x4E\x76\xB9\xB1\xEF\xC6\xBE\x1B\xFB\xDB\x18\xFB\xE5\x9D\x35\xED\x85\x7B\x61\x56\xC8\x1D\x06\xD0\x67\x1E\x00\x8C\xDB\x24\x89\x30\x8A\x61\xB0\xDD\xE7\x1C\xA4\x6E\xDC\x27\x1D\x24\x08\xC1\x97\x57\x57\x9F\x7E\x2B\xFF\xF7\xF5\xF2\x15\xFB\xFD\x99\x99\xEE\x63\x88\x7D\x2C\x65\xA3\x16\xFD\x43\x4A\xC3\x24\xCE\x94\x1B\x98\xB5\xF4\xBF\x97\x0C\x34\x78\x9D\x1F\x1D\x90\xF0\xF9\xC0\x18\x7F\x5D\x21\x77\x2F\xA2\xDE\x47\xFD\x3E\xA8\xC1\xF7\x51\xCC\x5F\x36\xFB\xC9\x31\x0D\x23\xE0\x6A\x6A\x95\x42\x6B\xC6\x8F\x88\xD0\x10\x45\xFF\x2A\x9A\xDF\xDB\x3B\x4C\xEB\xC7\x6B\xB2\xE7\x38\x0B\xB7\x63\xB3\x4F\x32\x42\xB2\xE4\xEC\x33\x72\x35\x0D\x50\x60\x38\x8E\x2D\x3F\x30\xC1\x23\x4F\xE7\x68\xBD\xB9\x35\x9F\xB1\x30\x76\xE8\x8E\x82\x5E\xFC\x32\x33\xBF\xEA\x8B\xDA\x06\x8C\x2A\xC6\x8C\x34\xA4\x5C\x3A\xE2\x84\xE0\xEC\xC9\x96\x0F\xD2\xE7\xCA\xF1\x40\x75\x32\xEC\xAE\x7B\x56\x11\xB9\xB3\xE8\x59\x44\xAA\x0D\x9B\x85\x15\x05\x6B\xD6\x2B\x8B\xF1\xEE\x51\xF9\xFD\xE8\x41\xB1\xBC\x73\xD6\x0A\xC8\x11\xE5\xEF\xE2\x3E\xAA\x6B\x5F\x76\x33\xCF\x22\x16\x5A\xF4\x2E\x16\xBB\xD9\x5E\x2D\x58\x0C\xFD\x26\x2D\xAE\xAD\xF8\x70\x45\xB6\x65\x25\x30\xAE\xA6\x82\x6A\x41\x4D\x35\xA5\x41\xED\xAE\xA3\x2C\x79\x64\x3A\x1E\x33\x07\xD1\xAA\x17\x08\x75\x28\x3C\xF9\x9B\x21\x2B\xD7\x7D\xFE\xB8\xD7\x42\x5C\x09\xB8\x45\xB3\xB8\x12\xD0\x95\x80\x1B\x70\x8E\x2B\x01\xED\x4B\x40\xFD\xAB\x41\x0B\xC7\xAD\x34\xC1\x2D\x68\x86\x05\xA7\xF9\xF5\x55\xBE\xD0\x17\x1B\xFD\x1E\x4D\x9F\x6F\xE9\xE1\xEA\x8D\xA7\x32\xB5\xB8\x7A\xC3\xD5\x1B\x1B\x70\x8E\xAB\x37\x7E\xF4\x2D\x27\xF5\xBD\x40\xB7\x5E\x5F\x5F\x7A\x37\x7F\xBA\xF9\xD3\xCD\x9F\x6E\xFE\x7C\x4A\xF3\xA7\x5B\xAF\xFF\x80\xEB\x75\x57\x5E\xB8\xF2\xE2\x0C\x67\x12\x57\x5E\xB8\xF2\x62\x03\xCE\x71\xE5\x85\x2B\x2F\x5C\x79\x61\x2A\x2F\x56\xBE\xA4\xD2\xD5\x1E\xAE\xF6\x70\xB5\x87\xAB\x3D\x5C\xED\xE1\x6A\x0F\x57\x7B\xFC\x60\xB5\x87\x9B\x71\x9F\x48\x72\x75\x33\xAE\x9B\x71\x37\xE0\x1C\x37\xE3\xDA\xCF\xB8\xA6\x8B\xBF\xDA\xB7\x37\x77\x61\x1C\x78\x28\x8A\xEA\x57\x0B\xB2\xFC\xB6\xE3\xFD\x5A\x63\x8F\x38\x3F\xDE\xE2\x42\x89\x47\x2F\x8C\xA9\x5D\xAF\x3E\x2F\xEA\x6A\xC9\x28\xEF\xEE\x6A\x31\xAD\x5E\xE7\x35\x2A\x89\x08\x41\x56\xAC\x8E\xF8\x98\x61\x2B\x2B\x54\x2F\x8E\x5A\x60\xB6\x2F\x91\xB0\x77\x8B\xBB\x5F\x57\x51\xEC\xA9\x6D\xE4\xDE\x36\x8E\xFD\x43\x42\xB8\x56\x8E\xBC\xF0\xD6\x31\xF0\x7A\xB6\x59\xF2\x5D\x1E\x45\x24\x8F\x01\xF3\xFB\xD0\xAB\xCC\x66\x62\x05\x05\x9A\x54\xE4\xC2\xB8\xA6\x32\xCA\xAF\xDE\x43\x48\x0F\x9E\x8F\x52\xDB\x5E\x47\x36\x2A\x6D\xB1\xAB\xB6\x6A\x24\xE3\xA0\x9F\x6C\x28\x4D\x71\x6C\xD5\xA7\xE3\xED\x6F\x9B\xE1\x68\x7A\xE9\xDB\x10\xC8\x6D\x2A\x1C\xF7\xCE\x92\xAB\x1D\x9F\x48\x99\xE0\x6A\x47\x57\x3B\x6E\xC0\x39\xAE\x76\x9C\xA4\x76\x9C\xFB\x2A\x76\x97\xC3\xB7\x68\x16\x97\xC3\x5D\x0E\xDF\x80\x73\x5C\x0E\x9F\x3E\x87\xBB\xBC\x7C\xC6\x43\xD0\xE5\x65\x97\x97\x37\xE0\x1C\x97\x97\xFB\x3C\x09\x9D\xF8\x93\x0C\x2E\x33\x6F\xD1\x2C\x2E\x33\xBB\xCC\xBC\x01\xE7\xB8\xCC\x3C\x51\x66\x9E\xEB\xB3\x1C\x2E\x7B\x6F\xD1\x2C\x2E\x7B\xBB\xEC\xBD\x01\xE7\xB8\xEC\x3D\x43\xF6\x9E\xE4\xD3\x2C\x2E\x6D\x6F\xD1\x2C\x2E\x6D\xBB\xB4\xBD\x01\xE7\xB8\xB4\x3D\x55\xDA\x1E\xFE\x49\x76\x97\xA0\xB7\x68\x16\x97\xA0\x5D\x82\xDE\x80\x73\x5C\x82\x9E\x2A\x41\x97\xDF\x50\xCA\xE2\x94\x84\x31\xDD\x79\x2F\xBC\xFB\xFA\xEF\x67\xED\x9F\x2F\xBC\x98\x26\xC8\xDB\x25\xE4\x88\xA8\xD0\xBE\xA3\x09\x12\x1A\x30\x6B\xE0\xD0\xEB\x43\xB4\x0C\xB5\x86\xB3\xBF\x6B\x00\x66\x80\x92\x12\xE6\x00\xBB\x8A\x26\x3B\x3E\xC9\xC4\xDC\x3D\x90\x90\x62\xBE\x21\xCD\xA9\xCF\xFD\x66\xFF\xE7\x7E\x97\x67\x3B\xF9\x63\x9E\x3B\x82\x4B\x02\xC5\x1F\xCF\x7C\x05\x5E\xB5\x54\x22\x10\xDC\x22\x54\x7F\x3F\xCB\x28\xA1\x49\xF4\x22\xCC\xB2\x14\xF9\xB8\xFD\x89\xA2\xF4\x80\xDA\x9F\x79\x9A\x62\xF2\xEC\x88\x8F\xC7\xE4\x1E\xF3\x1C\xF8\x26\x26\x84\x77\x4C\x03\xEF\x16\x65\x18\x05\x01\x27\x3B\x6B\xCE\x0E\x09\xA1\x40\x7B\x81\x1E\xC6\x3E\x81\xDA\xB3\xFC\x16\x24\x73\xCC\x23\x08\xDD\xD0\x5C\x7B\xA8\x21\x11\x84\xF7\x10\x6E\x10\xDE\x1F\x13\x50\xC6\x0A\x52\xFC\x2C\xB5\x97\x21\xBB\x3A\xD8\xE4\x76\xE6\x6A\x00\x3D\xA7\x2A\x11\xD9\x00\x87\x70\x47\x41\xA5\x2A\x48\xF1\x33\x0F\x63\xEA\xFD\x85\x49\x22\x41\x15\x93\xD6\xB6\xF3\xF8\x40\xF3\x09\xFD\x99\x8F\xC3\x98\x7A\x41\xB8\xBB\xE4\x9A\x32\x1A\x78\xBB\x98\x02\x2D\x8C\x6A\x18\x87\xB4\xF8\xE5\xA5\x88\xA0\x63\xD6\x00\x6B\x4A\xAC\x21\x8C\xEF\x01\x1A\x75\xAB\x96\x4E\x8D\xD0\xD0\xDA\x25\x39\xF1\x32\x8A\x53\x89\x9A\xD8\xDE\xD2\x7B\xF8\x99\xD5\x67\x10\x7C\x8F\xE9\x37\x4C\x62\x1C\x49\xC0\x2C\x3C\x35\x3F\x9E\x31\x01\x34\x3C\x55\x58\xD1\xD2\xD1\x5D\x62\xAD\x41\x10\x64\x2F\x1A\xEE\x32\x4C\xAB\x44\xCB\x7C\x5E\xFC\xDC\x45\x68\x9F\x69\xA1\x31\xDE\x23\x1A\xDE\x6B\xBB\x67\x29\xF6\x43\x14\x29\xE0\x72\xD8\x83\xBD\xEE\x08\xCE\xC2\xBF\xB4\x14\xD9\xD1\x69\x1D\x30\x08\xF7\x21\x85\xA5\xBD\xDB\x85\x31\x8A\x6A\xC2\x34\xF1\x32\x3F\x2C\xCD\x50\xFC\xCD\xF0\x9E\x89\x3F\x59\xB7\x22\x6D\x95\x2A\x80\xC0\x18\xC5\x10\x80\x1B\xBB\x4A\x8F\xDA\x62\x20\xF4\x4E\x43\xF0\x98\x3D\x24\x24\x80\x20\x45\xBB\x57\xE9\x2D\x81\x19\xA8\x43\xBB\x30\xDE\x15\x61\xA0\x88\xC3\x0D\xE8\xB6\x51\x1A\xE9\x32\xAD\x36\x3B\x70\x90\x32\x25\x32\xFF\x3C\x84\xD4\x3F\x14\xB0\xE0\x31\xE6\x27\x1D\x05\x56\x47\x17\xB3\x86\x1E\x9C\x26\x59\xD8\x04\x9F\x84\x52\xBE\x1E\xA3\xEF\x1B\x3C\xC6\xE8\x18\xFA\x5E\x80\x28\x62\x68\xD5\x74\x05\xF3\x87\x80\x02\xF7\xD2\x3F\x92\x52\xA5\x45\xA4\xC6\x26\x8F\xF2\xA6\xA9\x62\x5E\x42\xAD\x5B\x15\x2D\x14\x28\x27\xDF\x33\x61\x28\xC8\x14\x8F\xE8\xE4\x27\x78\xB7\xD3\xB6\x6B\x78\x09\x70\x99\x5B\x11\x45\x14\xEF\x31\x91\x9D\xDA\x8C\x7F\x3D\x80\xA3\xF7\x8C\x1F\xE1\x6A\x8F\xB2\x59\xC6\xBF\xCB\xD8\x38\x6F\x2C\x21\x0E\xF3\xE6\x57\x39\xD2\x77\xE1\xC9\xAB\x5D\x2A\x81\xFC\x03\xF6\xBF\x79\xF8\x94\x4A\xC0\x92\x07\x9B\xE8\xBC\x30\x66\x6F\x74\x43\xDD\xEB\xFA\x42\x82\x49\x03\xA6\xE2\xAF\x6B\xE6\x75\x53\x00\xA2\x53\x74\xFD\x5A\x60\xA3\x90\xCC\xAD\x05\x28\xFC\x44\x50\xE3\x74\x19\xA8\x25\x56\x1A\x2A\xD2\x83\x5A\x1B\x4A\x28\xEC\x27\x4A\xD3\xE8\xD1\x23\x49\x1E\x07\x1E\x3E\xF9\x38\xAB\x33\xB9\xD0\x55\x0E\x5D\x09\x5A\x4F\x7D\x1E\x89\x03\x10\x41\x8D\x20\x80\x40\x5B\xDE\x68\x69\x00\xA3\x44\xCF\xA9\xF4\x4B\x86\x29\x25\x61\x1A\x09\x81\xD1\x36\xAA\x92\x61\xEA\x85\x3F\x5F\x2A\x1A\x57\xCD\x5A\x7C\x69\x60\x94\xC6\xBE\x2B\x8C\x52\x64\x1F\x39\x20\x5A\x40\x95\x35\xA5\x56\xC1\xA2\x72\x0F\x39\x84\xA4\x6E\xB2\x1D\xF7\x95\x84\x22\x6E\x09\xF3\x93\xF4\x51\x56\x95\xB5\x69\xAC\xDD\xC0\xE4\x7C\x54\x41\xDA\x29\xE0\x4E\xA9\x70\xF9\xD6\xA6\x8B\xD2\xAA\x73\x71\x04\xB3\xAD\x60\x52\xF5\xFC\x4C\x13\xDB\x52\xE2\xD0\x61\x49\xCE\x02\x30\x34\xD9\x41\x83\xA9\x1A\xEB\x58\x0D\x3F\xFF\x98\x3E\xAB\xFF\x50\x92\x46\x8D\x54\xC8\xDB\x20\x56\x3F\xE0\x11\xA9\x69\xD5\x8D\x4F\xDD\xB8\x34\x8D\x47\xF3\x38\x34\x38\x89\xC8\x4E\x47\xB1\x3C\x79\xB3\x26\x45\xA6\xBA\x11\x60\x2A\xE1\x8B\x80\xD2\x88\xA8\x36\x30\x52\x0D\x8C\x52\x9D\x23\x6B\x90\x9A\xE2\x51\xFA\xA2\x4D\x1F\x25\x33\x65\xE6\xBC\x83\x26\xCD\x44\x6B\xBA\x44\x63\xB6\x84\x48\x3A\xDC\xA1\x20\x00\x56\xCE\x75\xB3\x32\x1D\xF0\x00\x31\x63\x70\x00\x40\x7B\xA0\x9F\x0A\xE4\xB7\x04\x34\x90\x2C\xBF\xE5\x02\x20\x06\x47\x7D\x0C\x94\x09\x3C\x7A\xA5\x8F\xD2\xA1\x30\x0A\x8C\x2C\x15\x0D\x15\x1C\x1A\x19\xB1\xEA\xA5\x93\xEA\xCC\x13\xE4\xCD\x93\xDE\x9D\x27\x9D\x3F\x4F\xBC\x43\x4B\x83\xDD\x66\xCA\xA8\xB8\xCD\x00\x8B\x34\x88\xC7\x30\xCE\x33\xA9\x2D\x8D\xEA\x26\x06\x95\x29\x96\x8D\x2A\xCD\xB2\x5D\x2E\x4A\x5B\x0A\x62\x55\x57\x30\x91\x29\xB3\x36\x95\x30\x6B\x96\xE8\xB6\xDD\x45\xB2\x28\x08\x14\x0B\x04\x01\x64\x81\xBA\xB5\x8A\x32\x2F\x8C\x77\x30\x44\x22\xDC\xF0\x93\x7B\x6B\x86\x11\x03\xA9\x89\xB1\x1E\x5F\x5C\xF8\xD6\xA1\x2E\xC6\x6E\xDD\xAA\xC8\x29\x43\x24\xC2\xA2\x5D\x82\xF0\xBE\x42\x0E\xC2\xFB\x67\xCD\x5F\x9C\x0C\x9E\x88\x57\x0B\xD1\x36\xCB\xEA\xD5\xDD\xC5\x4C\xC0\x08\xB4\x09\x4D\xE2\x24\x64\x93\xBA\x15\xCA\x18\x12\x71\x09\x22\xEC\xCE\xC9\xED\xED\x26\x19\x04\xF1\x62\x05\x06\x0D\x75\x09\x2A\x3A\x9D\xA7\x53\xC2\x63\xFC\xA0\x01\xB1\x02\x3C\xA6\xF8\x44\x01\x04\x60\xBB\x4E\xE8\x0C\x58\x46\xC1\x51\x2C\x24\x60\x00\x96\x52\xE1\x77\xC7\x3C\xD2\x69\xD6\xA1\xB9\xE0\x7C\xB5\x77\x35\xDF\xEB\xA0\xF9\xAD\x56\xA4\xB2\xE8\xA1\x89\xC7\xD6\xA5\x04\x41\x02\x2A\x1B\xA9\x2D\x44\xDA\x4A\xE5\xBA\x08\x9B\xA9\x22\x53\xA1\x28\x12\x45\x6D\x26\x25\x15\x24\x8E\x1E\xC0\xAD\x77\x66\x6C\x68\xB4\x88\x06\x8C\x54\x80\x66\xCC\x68\x83\xE2\x4E\x1F\x0F\x02\x08\x1A\x3C\x02\x50\x1D\x3F\x60\x28\xDC\xB1\xBD\x74\x49\xE1\xA2\x0D\x48\x2E\xC0\x6E\x7C\xD3\x1D\x20\xCA\x6D\xD0\xB7\x14\xEB\x1D\x6B\xB9\xBD\xDA\xD6\x97\xA8\x42\xD6\x93\x38\x02\x10\x5F\x16\xC5\xFB\x76\xCC\x23\xEF\x21\x21\xDF\xB8\x25\x5A\x09\x40\x04\xD1\x2C\xBF\x45\x1E\xC1\xBE\xA2\x7D\x2C\x49\x2A\xC4\x71\xD9\xC2\xC5\x6F\x85\xD2\xC4\x2D\xFB\x2D\xDB\x4A\xE4\xC8\xB6\x94\x45\xE9\x14\x61\x45\x68\x23\x82\xD4\x5C\xC9\x21\x23\x33\x61\xC4\xC6\x4A\x22\x41\x0E\xDE\xAD\x22\xA0\xF6\xA2\xD8\x2A\xDB\x4D\x82\x1E\xDB\x0A\x91\x26\x00\x45\xB6\xF0\xD5\xF4\xC9\xF2\xDB\x1D\x49\x8E\x5A\x78\xE3\x91\xD2\x3B\xCA\xFE\x4E\xD9\x2A\x78\xAA\x6E\xE3\x7C\xD5\xA0\x35\xDE\xAA\x5A\x54\x52\x72\x44\xD5\xCD\xDC\xFA\xBD\xA6\x16\x53\x0F\xE5\x34\xF1\x93\xF8\x3E\x89\x72\x99\x57\x4C\x3D\x18\xC2\x8F\x94\xAA\xC9\x27\xF4\xE7\x67\x6A\xAC\x68\xFD\xD4\x3E\x68\x68\x6C\xA4\x81\xD7\x41\xAD\x82\x41\xC7\xD4\x10\x35\x08\x4A\x92\x50\x38\xEB\x05\x83\x02\x42\xC4\xA8\xDD\x2F\x8E\x44\x36\xF1\x89\xE9\x4A\x2A\xEF\x94\x69\x48\x49\x6A\x2A\x06\x90\xE2\x54\x24\x39\xE1\x01\x64\xE4\x79\x41\x23\x0B\x3F\xC7\xEA\xA4\xD1\x6D\xCB\x11\x7C\x94\xCB\xD0\xA2\x49\x2D\x43\x8B\x56\x65\x67\xFB\xA8\xD6\xB5\x45\xA3\x84\xC3\x4F\x14\x12\x57\xB1\x46\xE5\x65\xD7\x56\x01\x4A\xF3\xC9\x8C\x4A\x49\x1E\xFB\x66\x94\x5D\x94\xD4\x2B\x29\x1D\x8A\x8F\xC3\xC8\x88\x51\xA4\xC0\x30\x2E\x22\x4D\xDE\xF5\x6E\x01\x51\xB2\xFF\xE9\x65\x49\x0F\x9F\xD2\x84\x50\x2F\xFF\xE9\x1F\xB2\x55\x39\x88\xD8\x1D\x04\x73\x96\x97\x20\xC2\x42\x17\x84\x11\x10\x26\x78\x93\x83\x89\x85\x03\x83\x86\x47\x9D\x12\x1C\x84\x53\x9A\x6B\x55\x38\x49\x30\x3D\x04\x58\x20\xC3\x74\x41\xB8\x50\x2B\x78\x2A\x87\x16\x5E\x14\x7C\x10\x75\x29\x41\x48\xCF\xA2\xE5\x61\x2D\x83\x4B\xF2\x95\x7A\xFC\x03\x60\xFE\x79\x37\xDF\x4C\x09\x8A\xB3\x34\xC9\xB0\x97\x26\x0F\x97\x22\x0C\xE2\x20\x62\xB4\x4F\xD6\x95\x7E\xE2\x93\x65\x8D\x28\x0A\x08\x64\xA9\x60\x35\x6C\xE1\xFE\x06\xD6\x92\xBA\xE2\x4F\x4E\x30\x09\x90\xDD\xE5\x88\x60\xD6\x08\x76\xCC\x1E\xD8\x71\xC6\x68\x47\x92\x07\x18\x03\x24\x5B\xCF\xF6\x72\x73\x39\xE1\x2B\xC8\xC5\x9C\x2F\x4B\x52\xCF\x7E\xAA\x04\xBC\xC7\x55\x20\x57\x1D\x40\x50\x2D\xD1\x5A\x64\x08\x54\x8A\x0D\x76\x62\xA2\xAB\x80\xE6\x00\x46\x73\xC4\xAB\xE3\xF6\x9C\xAA\x87\xC5\x7B\x67\xE2\x3D\x74\xFA\x17\x1D\xDA\x33\x43\x12\xD1\xBF\xDF\x7E\xFD\x7B\x30\x80\x74\xDD\x4F\x65\xE0\x79\xFE\x09\x79\x69\x4E\xB0\x77\x1F\x12\x9A\x0B\xB3\x34\x6F\x84\x51\x97\xC4\x29\x46\x9D\xE5\x6C\x9C\x48\x76\xE1\x8F\x4F\x72\xF6\x7F\xCA\x6A\xD6\xA3\xF0\x09\xAB\xB8\x50\xAC\xD6\xA3\xF4\xBF\x9E\xA8\x07\xD7\xD2\x6F\xC9\x81\xB8\x96\x8E\x33\xF3\xBA\x10\x10\x66\xB2\x9D\xE7\xA1\xAC\x98\xC5\xBC\x38\xF1\x50\x14\xA2\xEC\xF5\x0E\x45\x19\x7E\x03\xDF\x38\x6B\x7C\x89\xFB\x89\x79\x77\x91\x04\x74\x16\x3E\x5E\x28\x59\x9D\x87\x2D\x96\x4B\x6C\xE7\x63\x0F\x56\xC3\x3A\x6B\x2C\x57\xB5\x94\x87\x37\xA1\x25\x88\xDF\xDC\xE8\x3D\xFB\xFC\x74\x75\x55\x5E\xB0\xDD\x21\xC6\xFC\xD6\xB0\x12\x63\xD1\x8A\xC4\x4E\xA2\xA5\x6A\x40\x7B\xFB\x2C\x31\x90\x7B\x58\x27\xC3\x0B\x8C\x25\x3B\x69\x16\x1A\xD8\x9E\x97\x1D\x48\x18\x7F\xF3\x12\xE2\xE1\x13\xD5\x08\xB6\x6C\x30\xDB\xCA\xB4\x54\x38\xF7\xB1\xD1\xC2\x01\xBD\xA5\x72\xAA\xB7\x58\xAB\x24\xC8\x6D\x15\x19\xBD\x05\x5B\x28\x2D\xE8\xA4\xFA\xA5\xFE\x14\xCA\xAA\x12\x6C\xCA\x25\xF3\x9B\x22\xCD\xB3\x83\x77\x8B\xFC\x6F\x8D\x48\x8B\xC5\x01\xC4\x7A\xC9\x61\x0B\xF1\x5F\x2A\x9B\xE9\x74\x5F\x26\x2F\x34\x2B\x83\x62\xC6\x21\x31\x8A\xFA\x64\xFB\x63\x72\xBF\x69\x11\x97\xAD\x26\x46\x18\x72\xA1\xFA\x62\x8C\x1D\xB7\x1E\x8E\x4B\xCD\x58\x4C\x3C\x6B\xA9\xB6\x6B\xB0\xF5\x4C\xB5\xE0\xE4\x6E\x90\xE0\xC7\xF5\x8B\x9F\x1C\x53\x44\xB4\xBB\x2C\x86\xE5\x62\x87\xE8\xCD\xF3\x58\xE5\xBE\xA6\xB3\xD5\x44\x7D\x52\x7D\x8F\x7D\x9A\x90\xF2\xE0\xEE\xC0\x07\xD5\xF7\x49\x18\x08\xCA\x79\x5E\x96\x10\x2A\x5C\xFC\x12\xE1\x2C\x7B\xCD\x3E\x84\xE7\x97\x5F\xC4\x7B\x73\xD1\xFC\xF9\xFC\x8D\xF0\xA1\xBB\xF6\xAF\x4E\x02\xBF\xBC\xE0\x74\x65\x40\x45\x8A\xBF\x8F\x17\xC3\xFC\x57\xB7\x90\xAB\x1A\xE8\x36\x49\x22\x09\x33\x8C\x33\x4C\x68\x98\xC4\x4C\x0A\x2F\x8C\x8B\xB8\x8B\x30\xC5\x4B\x08\xB4\xAA\x31\x56\xE4\xFD\x6C\x6B\x8E\x38\x8F\xA1\xC3\xEE\x6E\xFA\x35\xA4\x9F\x29\xA2\xF8\xEA\xEA\x63\xCE\xAE\x6C\x6A\xF0\x94\x89\xD0\xE6\x3E\xEB\xBE\x34\xEB\x95\xC1\x08\x59\xD4\xDB\x59\xFB\x12\x2B\x53\xAD\xD4\xEB\x0B\x79\xFC\x8C\x11\xF1\xCD\x5D\x7B\xB2\x1A\xC6\xA4\x3D\x07\x35\x5C\xC6\x8F\x24\xD9\x5F\x5D\xFD\x76\x4C\xE9\xE3\x4D\x84\xF6\x59\xF7\x67\x60\xBB\x64\x6F\x38\x77\xD0\xE9\x00\x97\x63\x57\xFC\xCB\xF8\x05\xD9\x21\x71\xB8\x05\x59\x3B\xE3\x74\x35\x21\x9B\xBB\xC7\xB6\x21\xCE\x90\x20\xDF\x8C\xF0\x45\x3D\x7B\x20\x9B\x11\x87\x1B\xFB\x1F\x09\xDE\x85\xA7\x6B\xDF\xC7\x91\x77\x43\x92\x98\x5E\xC7\xC1\xAF\xE5\x5E\x52\x35\x77\x77\xAC\x36\xB6\xA2\x13\x97\x0A\x4B\xCD\x4A\x49\x6A\xC9\x46\x4B\xC4\x51\x56\x3E\x6B\x5D\x36\xB3\x0F\x69\xFF\x4F\x18\x07\x03\xC2\x79\x2D\xB3\x9D\x8F\xC1\xBA\x73\xE6\xDB\xF2\x8B\xEC\xE4\xEA\xEA\xBA\x58\xEB\xFD\x1E\x67\xB4\x4E\x0E\x3D\xA6\x07\x23\x15\x3E\x27\x76\x21\xB6\x15\x8C\xAD\x60\x43\xF4\xE2\xC2\xBE\xC5\xFB\x5E\xFF\x59\xAE\x1E\xF9\xF1\xFE\xBD\xF8\xA7\x6C\xEE\xEA\xD5\x47\x32\x90\xE3\x27\xBC\xC7\xA7\xF4\xEA\xEA\x4F\x14\x7D\xC3\xE4\x35\x6B\xBB\x21\x68\xFF\xE6\xEA\xEA\x7B\xD9\xC6\x0B\x62\x8B\x0D\xC8\x25\x9F\x1F\x1F\x4D\x70\x30\x29\xBE\xC0\x0E\xF0\x5D\x8E\xD9\x3A\xBF\xEC\x50\x20\xB2\xA1\xC5\xF5\xD7\xEF\x52\x18\xBA\xD4\x57\xAA\x7E\xE7\x79\x58\xF9\xF4\xFF\xFB\xE9\x85\x19\xA1\xBB\x7F\x9F\xA8\x78\x8B\x68\x9D\x46\x0A\xD1\xB9\x61\x5E\xFE\x54\x8A\xD8\xB6\xEB\x67\x5A\x4C\xE5\x72\xDF\x32\xAB\xFD\x22\x2B\xA1\x8E\x8B\x01\xE4\xCA\xF1\x51\x50\x29\xFE\x1F\xD2\xEB\x88\x8A\x69\xA2\x29\x33\xE4\xB6\x9E\xDC\xB4\x3A\xFF\x6F\x8E\x33\xC0\x60\x83\x95\xB6\xA1\x27\x6B\xFD\x3E\x49\x01\xAD\x27\x21\x3D\xC2\xA0\x6F\x51\x4A\x73\x82\x55\x86\xFC\x6C\xDA\xC7\x34\x56\x04\x65\x05\xDA\x4E\xD3\x49\xAE\x0D\x86\x7F\xC7\x3E\xF2\x0F\x38\xF8\x94\xC7\xF8\xD7\x47\x8A\x3F\xE7\xBB\x5D\x78\x12\x0D\xD8\x6E\x84\x82\x8D\x6D\x0D\x30\xD4\x4C\xB3\x09\x21\x9B\xB6\x20\xFE\x09\xC5\x7B\xC1\xB8\xEA\x1F\x9D\xE6\x9E\x43\x60\xE8\x85\xA3\x14\x85\xC0\x3D\xDB\x21\x2D\x73\xA3\x0A\x89\x93\xC0\xFC\x9D\x01\xA5\x1C\xE1\x76\x9C\xC3\x98\x56\x13\x05\x4B\xB4\x6F\xEA\xAB\xCF\x0B\x49\xDF\x48\xBB\x3A\x96\x9F\x35\xB0\x63\xC7\x53\x00\xBF\x43\x60\x22\x33\x25\x7B\x76\xBD\x3A\xDC\x49\x7F\x0D\xBC\x11\xBF\xC7\xBD\xFA\x4B\x29\x69\x27\x78\x1F\xA3\x8C\xB8\x27\xBE\x5B\xF8\xF6\x62\x77\x7C\x64\x17\xF4\x78\x79\x1C\x16\xD5\xC8\x37\xFC\xE8\x21\xB2\xCF\x2C\x0D\x97\x16\xB5\xFE\x43\xC8\x9E\x86\xC4\x19\x25\xB9\x4F\x3D\x2A\xAD\x25\x5A\x6C\x9A\xA7\x91\x5E\xBA\xAA\x93\xA2\x73\xD9\xAB\x12\x5A\x2D\xFD\xC5\xDE\x4B\x08\x78\xA1\xE9\xC7\x00\x7D\x3F\x12\xE8\x92\x91\x4B\x46\x2E\x19\xB9\x64\x34\x53\x32\x72\x23\xDA\x8D\xE8\xF5\x46\xB4\xE9\x2B\xE7\xF2\x7A\x26\x08\xCA\x7A\xFF\x13\xF6\x73\x92\x85\xF7\xEA\x6A\xC2\xB0\xE0\xB2\xEA\x2D\xF5\xB9\x09\xE3\x40\xBF\x74\x19\x26\x60\xEF\x45\x9A\x3D\xD5\x09\x57\xE4\x56\x4C\xD7\xAC\x49\x5C\x21\xE2\xD2\xD6\x8A\x69\x6B\x17\xC6\x81\x5E\x8C\xEE\x59\x7F\xC2\x51\x3E\xD5\xDE\xCA\xA0\xEC\x65\xD1\x47\xE6\xD3\x91\x54\xF5\x19\xBC\xAB\xA3\x84\xDE\xA0\xFE\x56\x84\x58\xB7\x5C\x5D\xF8\xC6\xA9\xE5\x53\x1E\x97\x9D\xFF\xFD\xE5\xE6\x15\xE8\x08\xDD\x36\x6F\x10\x78\xAF\x5E\x7A\x3F\xBD\xDC\xED\x76\x3B\x78\x93\xBE\x3F\x79\x92\xC7\x98\x26\xE5\x9E\x17\x3B\x55\xCA\x3F\x6B\x93\x9F\x9F\x4F\xA6\x87\x75\xDF\x51\x7C\xA7\xF1\x82\x9B\xBA\xDC\xD4\xE5\xA6\xAE\xC9\xA6\xAE\xC1\x69\x63\x86\x0D\xFD\x89\xF2\x82\xDB\x75\x73\x19\xC3\x65\x0C\xB7\xEB\x36\xCF\xAE\xDB\xC4\xA5\x57\xEF\x22\x7C\x14\x3F\x9B\x2D\x8B\x9E\xD4\xA7\xDD\xBA\x18\xC9\x7C\xC2\x15\x55\x23\xC9\x1F\x88\x86\xF1\x4F\xF3\x99\xD9\x96\xFE\x46\x75\x1D\x19\xC2\x43\xB5\x1F\x17\x66\xF2\xC2\x6D\x90\x07\x61\x22\x33\xBA\xA9\x4B\xEA\x65\x4A\xB2\x4E\xDB\x0D\x8B\x08\x3B\x6B\x8E\x70\xFB\x1F\xAC\x02\x14\xB6\x07\x06\x8F\xDF\x2E\x5A\x73\x05\x41\x17\xDF\x81\xDB\x07\xF6\xA6\xE9\x3C\x38\x28\x93\xFE\x98\x64\xF4\x3F\x61\x16\x36\xDD\xCA\x13\x9B\xCF\x95\x9E\xA6\x9F\xC0\x09\xED\x3E\xDE\x9A\x4B\x86\x81\x47\xF4\x96\x12\x87\x9D\xE2\x5E\xDD\x28\xEC\x1D\xA6\x3F\xC3\x80\x36\x87\xE8\x59\xCB\x87\xD4\x32\xE4\xE7\x0F\xA0\xCD\xC4\xF4\x84\xC9\x6E\x7E\xAB\x19\x8F\xD2\x2E\x2F\x8E\xF9\xDC\xEB\xF2\xF2\xE8\x53\xEA\x02\xB2\x68\x77\x5A\x67\xE1\x65\x7F\xEC\x7C\x81\xC9\x60\xC4\x66\xF6\xB2\xD2\x75\x17\xBE\x6B\xA5\x9D\xA9\x8A\x95\x25\x32\xB7\xF1\x0C\xB7\x72\xE4\xBB\xFC\x0B\x14\xA7\x2D\x7C\x85\x3D\x81\x41\xEF\x27\x0D\xE2\xC3\xB9\x42\xFF\x26\xD0\x58\xCA\xAD\x93\x6F\x50\x18\x4D\xCD\xA3\x7E\x19\xE7\x73\x78\x4C\xA3\x70\xF7\x38\x35\xFD\xDF\xB3\xF2\x7D\xB5\x62\xEA\x91\x83\x0A\x78\x79\x6E\x4A\x96\xBF\xB1\xEB\xDC\x16\x60\x68\x78\xA1\xA9\x68\xFA\x3D\x6E\xEE\x9C\xE9\x1C\x52\x9A\x34\x32\x5E\xB6\x77\xD8\x27\x58\xF3\xC8\x73\x10\x75\xF8\xED\xBD\xA1\xA4\xA0\xF7\xFB\xC6\x0E\xFD\xEE\x37\xAA\x26\x1B\x99\xE6\xB2\x7D\x38\x9F\x11\x05\xEF\x14\x4C\xDF\x25\xB4\x2A\x19\x67\x62\x70\x13\xC6\x61\x76\x50\x48\xCC\xC2\xAB\xE3\xE5\xBC\x41\x2C\xB8\x82\xCD\x3A\xD1\x89\xE3\xF2\xF7\x58\x1E\x97\x3D\x09\xF5\x4C\xB0\xF6\xD4\xAD\x27\xD1\x81\x9A\xBF\x4D\x62\x1F\x99\xF0\x9B\x08\xAF\x7B\x7C\x44\x24\xC3\xD5\xD5\x1A\xE3\x78\xAB\xD9\x70\x90\x5D\x34\x19\xA6\x0F\x2D\xA1\xE8\x1F\x6A\x49\xB1\xA4\x52\xE7\x17\xC8\x80\xC3\x03\x43\x20\x59\xAD\x99\x3E\xD7\x1F\xEF\x11\x2E\xCA\xE9\xE7\xC3\x8E\xF9\xDA\x76\xDC\x58\x91\xE9\x55\x23\xD8\x52\xEE\x3D\x62\x7A\x69\x3C\xE9\x78\xE9\xC5\x59\x3F\x5A\x7A\x58\xA4\x63\xAC\x74\x53\x02\x47\x4A\x3F\x0B\x4E\x39\x4E\x7A\x71\x9E\x60\x94\x4C\x5F\x64\x4E\xF1\xEE\xFF\x74\xAC\x17\x60\xDA\x3E\x1C\x66\x6F\xFA\xCF\x74\x91\x80\xE7\xA1\x20\x60\x57\x08\x7B\x3E\x4A\x91\x1F\xD2\x47\xCB\x9B\x19\x26\x30\xA6\xF9\xC3\x81\x72\xCD\x23\xD4\x77\xFD\xF7\xE8\x81\xEE\x73\xED\x4B\x58\xB0\x1A\xB1\xF3\x2A\x52\x37\x1D\x89\x05\xAB\xD5\x5E\x8B\x0E\x2D\x11\x4E\xA9\x0F\x29\x0D\x8F\xE5\xA7\x57\x06\x52\xB8\x89\x10\xA5\x38\x1E\x4E\xA0\xC0\xCE\x29\x7B\x24\xF9\x2F\x94\x0E\xA1\x53\x07\xFA\x27\x7C\x97\x87\x04\x07\xE5\xE5\x48\x37\x09\x61\xF7\x23\xCD\xFF\x99\x2D\xAE\x76\x57\xB3\x4A\xA5\xC4\x97\xA4\xDA\xB7\xE9\x58\x7C\x0D\x58\x1B\x68\xF8\x7D\xC2\xF7\x98\x64\x78\x3E\xB6\x6B\x5F\x9A\x62\x1E\x0C\xEE\x68\x9D\x3B\x5A\xB7\xDE\xD1\x3A\xC3\xEB\x6F\xC2\x19\xF5\x8E\x8F\x00\xBB\x28\x76\x51\x7C\x06\x51\xEC\x22\xD3\x45\xE6\xD2\x47\x97\x4D\x2F\x18\xBB\xD8\x74\xB1\xB9\xD1\xD8\xEC\x79\x47\x8C\x8B\x5F\x17\xBF\x9B\x8D\x5F\xB7\xE8\x72\x81\x7B\x3E\x81\x2B\xDF\x05\xB8\xCA\xCE\x2C\xF0\xF5\xB4\x75\xE4\xE8\x37\x0D\xAD\x2E\xA3\x29\xD5\xAC\x23\x1C\x1F\xB2\x59\x1A\x85\xD4\xBB\xCD\x77\x3B\x6C\xA0\xAA\x7C\xCC\xC3\x42\x92\xE7\xC0\xC7\x02\xF5\xC8\xE5\x2B\x68\x3F\xA0\x65\x76\x24\x89\xA9\x33\x4D\x63\x9A\x0B\x17\x32\x66\xBB\x74\x07\x8C\xF0\x66\xFC\xDA\xF6\x51\x3F\x47\xB6\xA9\x94\x03\xCC\x6A\x5B\x93\xB0\xEF\xB2\x6B\xB3\xD2\x9B\x8B\xEE\x6D\x89\xBD\x5A\xD8\x5A\xCE\x07\x6B\xC6\xAD\xAD\x88\x1B\x0D\xDC\x01\xE2\x6F\x22\x72\x6D\xE5\x5E\x36\x74\x7B\xCE\xD7\x8B\xC7\x6D\x5F\xF9\xB6\x14\xB4\x23\x64\x5F\x2F\x62\xFB\x0A\xBD\x52\xB8\xF6\x2B\xA3\xD6\x0B\xDB\x9E\x72\x6E\x32\x7C\x87\xEB\xB0\x81\x30\xEE\x29\x3C\x77\x28\xEA\xDD\xCD\x35\xFB\x5F\xDD\xF9\x23\x49\xF6\xFC\x21\x35\xF0\x9B\x54\x91\x78\xDA\xC5\xFA\xB8\xEC\x14\xCC\x64\xD9\xBF\x97\xF4\x80\xF3\x5E\x2A\xB8\xEB\x70\x17\xEB\xF1\x67\x42\xBE\xDD\x7D\x49\xDE\xB2\xDB\x1C\x84\x8F\x7E\xB5\x60\x5E\x68\xA5\x55\x39\xA5\xD6\xD3\x40\x33\x08\x20\x5B\x65\x16\x1D\x55\xE3\xCF\xC0\x66\xCD\x4F\xE7\xCE\xAA\x58\x8B\x27\x52\x05\x4E\x18\x6B\x8E\x41\x2E\x10\xBD\xA6\x71\xD3\x5F\xEC\xDE\xD7\x49\xB6\xCC\x18\x9B\x8A\x41\xF7\x15\x91\x70\x3F\xA9\xF5\xBF\xD9\xD6\x36\x00\xA8\x2E\x36\x35\xE6\x67\x8E\x38\x7F\x5F\x20\x00\x7B\xA5\x0A\x23\xDF\x11\x38\xD4\x9C\xFD\xD2\xCC\x00\x06\xFC\xAB\x82\x23\x68\xB4\xEF\x08\x8E\x0F\x9C\x41\xF7\x0D\x76\xC5\x91\xDF\x7D\x87\xE0\x1A\x21\xA5\xBF\x50\xCE\x4A\x9A\xE7\xFC\x35\x70\xA6\x30\x34\xF6\x05\x9F\x43\xFE\xE8\xE3\x76\xBA\xAF\x61\xB9\xD0\x1C\x15\x9A\xCE\x11\xDB\x71\xC4\xEC\x1F\x6B\x72\x2E\x1A\xE7\xA2\x0D\xD9\xA4\xF3\x7B\x26\x9F\x53\x44\x32\xFC\x19\xD3\x2F\xAF\x0B\x07\xBF\x61\x2F\x0C\x61\x42\xB9\xD7\xAC\x0C\x9F\x28\x1C\x4C\x42\xD3\xD1\x27\x18\x51\xEC\x85\x71\x80\x4F\xD2\x5B\x55\x4C\xB7\xEB\x20\xF8\x92\xFC\x6F\x8E\x73\x7D\xF5\x6D\xAC\xE3\xD4\xA5\xD4\x38\x8A\x43\xF5\xE7\x04\xF8\x94\xC7\x8C\xD9\x87\xF8\xD7\xC7\xDE\x8B\x0A\xAD\x68\x3E\xF7\x62\xCF\x39\x49\x39\xDE\x27\xCB\x0A\x0D\x85\xD4\xA7\x3C\x66\x63\x10\x60\xCB\x0F\xFC\x49\x43\xA8\x2F\xC3\xA9\xED\x3C\x88\xFF\xFC\xFE\x99\x40\xC8\xE9\x17\xFE\xBC\x50\x38\xC3\x94\x91\x16\x88\x7E\xFA\xF3\x8F\xC4\xFF\x86\x49\x3B\x2E\x0E\x49\xF2\x2D\xBB\xBA\xFA\x27\xA6\xEF\x6E\xAE\x99\x14\xAC\x17\xEB\xFF\xDF\x49\xF2\x8D\x7F\xFF\xD0\x9A\xB2\xE5\x06\x44\xF9\xA5\xFE\x9B\x9B\x1B\xD1\x68\xAC\xF5\x23\x22\xE8\x98\x31\x6A\x65\x80\x72\x46\xF8\x3D\x8E\xC2\x18\x07\x25\xE2\x1F\x49\x92\xBE\xDE\xA1\x28\xC3\xA5\x55\xE4\x3F\xDF\x18\x89\x3F\x9B\x93\xF8\xF0\x21\x38\xBF\x54\xFD\x43\x77\x5E\xA1\xEC\xDF\xA4\x9E\x55\x8C\x7A\xB3\x63\x29\x07\x74\x0F\xA6\xA5\x44\x19\xB0\x89\xB9\x54\x40\x18\xAF\x48\x10\x32\xC9\x97\x99\x32\x49\x75\x5C\x77\x96\x44\xD2\x4D\x7B\x85\x3C\x62\x2B\xD4\x92\x69\xC4\x42\xA6\x05\xB2\x88\x85\x14\xA3\x93\x48\x3F\xEB\xCF\x99\x43\x7A\x49\xB2\x64\x0A\xE9\x17\x0C\xD6\x19\xE4\xCB\xA4\xB5\x48\x21\xE4\x5C\xA5\x48\x2F\xDA\x0B\x0D\xD6\x7E\x32\xCD\x35\x58\xFB\x49\x31\x6C\xB0\x0E\xB6\xFE\xE4\x83\x75\xA8\x24\xB3\x0F\xD6\xC1\xC1\xA0\x1B\xAC\xB3\xDB\x65\xDC\x62\xB9\xCE\x20\x93\xD6\x20\xAD\x16\x93\x97\x20\x7D\x48\x2F\x9E\x3F\x56\x9C\xEB\x7B\x09\x31\x36\x7B\xAC\x3C\xD3\x0F\x14\x64\xC1\xDC\x31\xCD\x3C\x3F\xB7\x55\xA6\xC8\x1C\x5F\x26\xD8\x07\x91\x92\xDE\xA4\xB5\xC7\x50\xDA\xB3\xAE\x5E\x06\x0B\xD5\xEE\xAF\xCE\xC9\xE5\x88\x8F\xFE\x81\xCC\x6F\xDD\xFA\x26\x74\xBC\x0B\x4F\xEC\x92\x2F\xEF\x86\x24\x31\xBD\x8E\x83\x5F\xCB\xF3\xB2\xD5\x29\xAC\xFA\x9B\x36\xD2\x18\xED\x91\x28\xC7\xC9\x39\xCF\x0C\x32\x22\x08\x26\x9C\x42\xC6\x04\x89\xED\x1C\x32\x85\xF5\xA7\x99\x44\x26\x90\x64\x9E\x59\x64\x8A\x60\xB0\x5D\x2E\x7E\x99\x60\xC3\x09\x94\x77\x9A\x62\x6F\x20\xE9\xE5\x13\xB6\xD5\x24\x3F\x36\x5F\xDB\x55\x73\x63\xD2\xB5\xAD\x69\x57\xCE\xD6\xEB\x96\xFB\xC3\x03\x60\xEE\x5C\x3D\x6D\xB9\x3F\x81\xE9\x67\xCC\xD4\x1B\x28\xF7\x27\x08\x04\xEB\x3C\x3D\xC1\xB6\x9E\xB8\x28\x98\xA9\xB2\xEE\xBB\x67\x32\x28\x27\xF6\xDE\x1F\xEB\x9D\x13\x07\xEC\xBD\xAC\x91\x13\x37\xB3\x85\x3A\x3C\x00\x66\xC9\x89\xB3\x6D\xA0\x4E\x60\xFA\xA9\x73\xE2\xB6\xB6\x4F\x27\x08\x84\x11\x5B\x20\xA3\xAC\x32\xC9\x16\xC8\x04\x9B\xA7\x90\x12\x53\x97\xD3\x3D\xB7\xA7\x46\x66\xE9\x99\x0A\xD7\xFE\xBB\x5C\xEB\xE6\xE8\xAD\x94\xAD\xEB\x6D\x52\x0F\x0F\x8E\x31\x09\x7A\xDD\x9A\x75\x53\x3B\xD4\xE3\x83\x60\xE2\xEC\xBC\xCC\xFE\xF4\x75\x8C\xA2\xC7\xBF\x70\x49\xDA\xD6\x03\x53\x9D\x01\x1D\xC4\x7C\xD6\xB3\x95\x83\x24\xB2\x19\x18\x32\xA1\x1A\xB3\xFC\x78\xCD\xC7\x10\xFB\x18\x7A\x5B\x40\x0F\x6E\x7D\xAA\xFB\xAB\x52\xB7\xFC\xF2\x43\x95\xB8\x79\xC3\xC8\x81\x23\x3B\xD9\xDA\x14\xCF\xB8\x19\xA4\x3C\x6C\x5A\xA3\x2B\xEF\x90\x8B\xEF\x39\xF8\x28\x8A\xBC\x24\xF6\xC1\x0B\xE1\x5F\xDE\x27\x11\xA2\x61\x84\x2B\x85\xAB\xF1\x54\xFF\xF9\xF5\xF2\xE5\xD7\xCB\x57\x05\x7B\x6E\xAC\x15\xC2\x00\x2F\x25\x37\x7C\xBC\x94\x24\xA7\x47\xEE\x0D\x16\x9A\xA7\xF5\x4B\x16\x76\xF2\x5F\x5D\xFD\x3F\xEF\xE5\x05\xEF\x22\xF6\xDE\xFC\xC5\x45\x75\xB7\x55\x23\x8A\xD5\x3B\x37\x5B\x91\xB5\xF5\xED\xB8\x0B\x01\x16\x50\xE8\xA7\x33\x32\xBE\x9D\xAC\x67\x64\xFC\xCB\x33\x32\xBE\x9D\xAC\x93\x19\x9F\x43\x7C\xC7\x0A\x01\x8E\xDE\xBB\x9B\x6B\x89\x59\x7B\x13\x86\x55\xC7\xEE\x43\xF7\x25\x81\x32\x33\x73\x04\x06\x4F\x2F\x1C\xD1\xF2\xCB\x6C\x5D\xE6\x90\xE9\x3D\x57\x26\xA2\x8E\x49\xC7\xCE\xB3\x4F\x45\xDB\xED\x97\x02\x4F\xC5\xD2\xE2\x5B\x30\xE5\x41\x2E\x14\x46\x39\xC1\xF2\x3B\x30\x96\xAF\x16\x82\xAF\x35\x6F\xF9\xA5\xCD\x29\xBE\xC2\xB3\x65\x95\x56\x7F\x85\x78\xC0\xF7\x39\x36\x27\xE8\x98\x8F\x35\x6C\x5A\x19\xEB\x9B\xFB\xB7\xA8\xC5\x06\x13\x8D\xCD\xCD\xF3\xAC\xEB\xFB\xA2\xEB\x7B\xA5\xAA\x12\x6F\xAE\xD1\x22\x71\x19\xF9\x9A\x10\xF4\xF8\xBA\x45\xFF\x72\x20\x18\x05\xCF\x59\x86\xC8\xCA\x0F\x3A\xF2\x0B\x79\x2D\x49\xEB\x2B\x79\x6C\x28\x68\xEA\x30\x6D\x57\xE5\xDD\x77\x6B\xAD\xE0\x57\xE7\xFB\x74\xB7\x54\xBB\x2F\x61\xE1\xF6\xA0\x11\x52\x69\x4C\xD9\x97\xA2\x1C\x7A\xDF\xDF\x1B\x6E\x9B\x83\x9F\x2B\xCB\xFD\xF8\x61\x27\x7F\xF6\x91\x93\xA6\x63\x0C\x71\x98\xFA\x2F\x3C\xDA\x0A\xDE\x25\x32\x9C\x33\x66\x16\xDE\x56\x4E\xB6\x71\x58\x12\xBB\x6B\x4A\x49\xA3\x9B\xE5\xED\x44\xF1\xCB\xCE\xFA\x3A\x53\x28\x75\xB9\x1E\x3C\x71\x60\x6C\x6D\x54\x4A\xAB\xF1\xF0\x19\x1B\xF6\x7C\x35\xA4\xE5\xDB\xCE\x36\xAA\x3F\x78\x27\xFD\x98\x18\xEE\xF8\x9C\xF4\x46\xCD\xD0\xF3\x93\xD4\x1B\xD5\x42\x98\x36\x36\x2A\x23\xB7\x1E\xFD\xED\x98\xD2\xC7\xEA\xAB\xF1\x5D\x8B\x5F\x89\xBC\xE5\x44\x36\x6E\xE0\xF6\x2D\x0F\x46\x72\xB3\xE2\x61\xB8\x92\x67\x0B\xE2\x7D\xC6\xF4\xB7\x53\x98\xD1\x30\xDE\x73\xBC\x2C\xF3\xE4\x72\xB9\xC8\xFC\x01\xA5\x79\x58\x0E\xFE\x56\xD2\xEC\xE2\x58\x7E\x16\x69\x1E\x39\xCC\x97\x48\x8B\xB1\x62\xCB\x54\xFB\x95\x09\x1E\xC7\xF0\xCD\x9A\x33\xD5\x54\xB8\x1E\xFB\x09\xAA\x0A\x5E\x67\xFF\x94\xF5\xD4\x3A\x74\xAD\xB4\x29\xD7\xF3\x9F\x29\x4E\x7B\x95\x15\x03\x0A\x90\x9E\x85\x01\xB8\xEE\xD8\xA2\x9C\x6A\xB1\xB6\x45\x29\x37\x5C\x4A\xF2\x96\x9B\xEF\x71\x8F\xDC\x45\xBC\x98\x6C\xC8\xBA\x61\x35\x61\x95\xDD\xC1\xD5\x24\xD9\x74\xCC\x6F\xC1\x40\x60\x12\x5B\x31\x6E\xFC\x03\xD9\x82\x24\xDC\xE2\x71\xF4\x81\xDA\x0D\xA8\xB3\xCA\xE6\xCB\x9A\x61\x24\x4F\x78\xEB\xE7\x9F\x8D\xCE\x6A\xFC\xE1\x80\xF7\x1B\x3A\x1C\xA0\xD8\x0F\x78\x20\x73\x66\x1A\xAC\x15\x84\x67\x66\xA6\xF6\x41\x88\xBA\xDB\x14\xC6\xD4\x66\x7F\x89\xFD\x61\xB7\xBD\x36\x90\xA2\x86\x8E\xE5\xA6\xD9\xB4\x4C\x3B\xB6\xC2\x24\x2A\x1D\x1F\xD3\x9A\x7B\x1F\xC4\xF2\xA3\x6A\xB3\x8B\x31\xFE\x9B\x69\x4B\x8A\xD8\xF7\x93\x68\xB3\xCB\x66\xF3\x01\xBF\xD9\x37\x9A\x96\x8B\xA5\x0E\x39\x36\x11\x4C\xF6\x32\xAE\x10\x4D\x1D\xC2\xCD\x19\x4E\x76\x9B\x79\x33\xC7\x92\xA5\x10\xEB\x05\x52\x7F\x01\x97\x8A\x22\x4B\xC9\x16\x09\x21\xAB\x7D\xD2\xA5\x42\xC9\x4E\x98\x0D\x84\x54\x6F\x41\x17\x0F\x2D\x3B\x09\x7B\x3C\xA1\xED\x3A\x75\x6C\x45\x64\xCC\x33\xCE\xEE\x9A\xB7\xB7\x88\x43\xAA\x4D\x99\x1E\xBF\x0A\xF9\x10\xE3\x8F\x28\xB3\x78\x24\xBF\xEC\x4A\x84\xDF\xBC\x3C\x03\x71\xB9\x7E\xE3\x8F\x39\x9C\x81\xBE\x47\x7C\xF4\xD3\x47\x5E\xDC\xDF\xB3\x56\xD4\x5E\x87\x25\xE1\xEE\xAA\xFF\x55\x06\x40\x4C\xCB\x48\xDC\xF0\x19\xF0\x62\x2F\x4C\xB3\xCD\x6A\xF7\xD8\x2F\x52\x1A\xA7\x59\xE9\x50\x5D\xEE\x93\x10\xAB\xD2\x2C\x64\xC2\x7C\xBD\x7C\xC5\xA7\xD7\x07\x82\x52\xF6\xA5\x30\x95\x7A\x15\x2E\x6F\x34\x5B\x9D\x52\x23\xDF\xE7\xA2\x43\x33\xDB\xB7\xA3\x00\x67\xB5\x5B\x7D\x30\x8A\x5C\x18\x9C\xA3\xE9\x80\x92\xE2\x2C\xD5\xE8\x57\x8C\x9C\xA5\x8A\x55\x7E\x3A\x73\x2D\x2C\x8B\xB1\xB3\xD4\x8D\xE7\x52\x2A\xC0\x8E\x41\x7B\x7E\x72\x3C\x26\x31\xBB\xC8\x81\x3D\xE1\xA0\x07\x92\x3C\x78\x11\x8E\xF7\xF4\xE0\x61\x42\x0A\x6B\xBC\x62\x6F\xA8\x97\xC4\x84\xA2\x94\x12\x5C\x3D\x56\xF9\x94\xC7\xF8\x13\x8A\xF7\x98\x9B\xCD\x9A\xB6\x3F\x70\x91\x97\x8C\x15\x6A\x83\x5B\x59\x27\xC0\x19\x25\xC9\xA3\x64\x9E\x82\x1F\xF7\xD5\x46\x89\x69\xF5\xCD\x46\x59\xDB\xAD\x0A\x79\x1E\x96\xEC\x9E\xA3\x3E\xE1\x3D\x3E\xA5\x57\x57\x1F\xD9\xAC\x4F\x11\xC5\x57\x57\x1F\xF3\xEC\x50\xB6\xD7\x95\x54\xF9\xAB\x3D\xF4\x00\xF5\xFA\x17\x7A\xBC\xC5\x6F\x93\xD8\x47\xB4\xAC\x84\x94\xC2\x5F\xE8\x55\x15\x7D\xA3\xC4\x78\x7B\x40\xE4\x6D\x84\xB2\xEC\xD7\x3C\x8C\x02\x4C\x0A\x8C\x62\xCE\xB9\xBE\x4D\xEE\xE5\xF7\x73\xC6\x29\xFA\x0E\xFB\x04\xEF\xF8\x3D\xFE\xDE\xF4\xAC\x6B\xBC\x71\x92\x42\x58\x1F\xD2\x65\xBD\xF0\x36\x89\x29\x0A\xE3\x6C\x52\x17\xBC\x4D\x8E\x69\x4E\xF1\xE7\xF0\x98\x46\xB8\xCB\x13\x03\x83\x51\xE4\x78\x1D\x04\xC5\xD0\xFA\x92\x88\x24\x66\x60\x6B\xFB\xA6\xD0\x6C\xAA\xDA\xC7\xF7\x1F\xEC\x8B\xBC\xD1\x80\x17\xBD\xAC\x29\xCE\x1E\xCF\x66\x8E\xB3\x27\x35\x98\x3D\x30\x8C\xA4\x96\x41\xEE\xD1\xD0\x2E\x62\xBB\x9C\x32\xA4\x8D\x90\xC9\x4C\x67\x1A\xD9\x66\x1E\xEF\x12\xDA\x77\x5D\xDC\x4D\x6A\xF6\xA0\xD2\xB0\x9A\xDA\x24\x13\xC6\x4A\x27\xD1\xA1\x41\xF2\x09\xA7\x18\xD1\x0F\x26\x03\x77\x1D\x16\x98\x64\xBE\x9C\x40\x8A\x05\xE6\xD6\xA9\xA4\x54\xFD\xF7\x4F\x4C\x9B\x46\xBB\xDA\x65\x02\x59\xCE\xA1\x30\x5E\x36\x7C\x7B\x97\xDE\x53\xC7\x6D\xAF\xD2\xA9\x16\x81\x86\x34\x4C\x62\x65\xE8\x2F\x3D\x82\xC7\x8B\xB1\xC8\x10\x9E\x48\xCC\x69\xC6\xF0\x78\x61\x9E\xC6\x20\x9E\x34\x84\x07\x8C\xE2\x89\x63\x77\xA5\x61\x2C\xB0\xF8\x13\x45\xDF\x30\xA9\x1E\xAC\x15\x3F\xB8\xE7\x02\x62\x45\xE3\xCB\x5F\x39\x5F\x5D\xDC\xEF\xE5\x2F\xC8\x72\xE3\xD4\xEA\xBD\x7E\x9B\x9C\xDD\x4C\x8C\xC0\x43\xD8\x05\x19\xE6\x35\x46\xB6\x63\xC8\xCB\xC8\x2F\xED\x4E\x63\x4F\x6F\x28\x9B\x57\x50\xBA\xA3\x66\x9C\xA7\xBB\x48\x0D\x20\x62\xBA\x6E\x63\x12\x47\x41\x97\x86\xAC\xC1\x74\x60\x2A\x7E\x97\xFC\x81\x77\xF4\x23\x22\x38\x36\x3F\x16\x1E\x59\xAE\xF4\xE0\x33\x6B\x3D\xD2\x43\x0E\xFE\xB1\xF4\x94\x2A\x8D\x5F\xF1\xF6\xE0\xCC\x87\xE2\x2D\xCA\x42\xDF\xCB\x18\x66\xFF\x47\x23\x06\x69\xFE\x83\x09\x0D\x7D\x14\xFD\x8A\x48\xD7\x12\x7F\xF2\x0D\x23\x88\xFB\xC8\x48\xED\x50\x67\xFA\x90\xEC\x61\xBF\xA1\x01\xD3\x83\xC5\xBB\xE4\x6D\x12\x45\x28\xCD\xB0\xAA\xE3\x18\x1E\x76\x7B\xA8\x46\xEE\x63\x3D\x6B\x22\x2D\x74\xFB\x3D\x1E\x2F\xEB\xE4\xCA\x4F\xB0\x02\x32\x33\x38\xEF\x55\x8D\x75\xE4\xF4\x9A\x1E\xAD\x3D\x5C\x26\xB5\x0F\xE4\x3A\x62\x15\x18\x05\x7A\x48\x19\xE2\x39\xF8\xB2\x29\x94\x3D\xAC\x96\x08\xBD\x64\xED\xB1\x52\x32\xD3\xE5\x4E\x4D\xC1\x9D\x3F\x85\xFB\x43\x33\x57\x75\x24\x1E\x25\x83\x0C\x27\x6C\x3B\xE0\xFA\x88\x37\x30\x2F\xC2\x2C\xC6\x0E\x64\x85\xEA\xB9\x8F\x5E\x45\xA1\xA1\x43\xD6\xEC\xD2\x9E\xB1\x6F\x1F\x1F\x43\xA7\xE6\x9B\x30\x0E\xD9\xC5\x9D\x53\x0E\x0E\x3D\x51\xDB\x81\x61\x2B\xD6\xC0\x41\xA1\x92\x1F\x3B\x20\x04\x8A\xE7\x3E\x18\x04\x65\xEC\x07\x42\x79\xBE\xE3\x0F\x8C\x82\x30\xDE\xEB\x82\xD1\x36\x1E\xEC\x88\x09\xE7\x35\xFB\x75\xED\x5D\xCD\x0D\x50\x6F\x8A\x6A\x5D\x60\xDB\x2C\x5B\x34\xFB\x2B\xFD\xF7\x40\x7A\x92\xEF\x36\x78\x37\x8D\x21\x11\xD0\x93\xEA\xE7\x07\xD4\x99\x08\x6F\x90\x4F\x93\xA6\x62\x2A\x37\x36\x07\x15\x48\xBF\xBC\x50\x3E\x5D\x51\x1D\x64\x64\x5D\x6E\x08\x3A\xE2\x8E\xB1\xCD\x70\x9A\xDD\x37\x7C\x4C\x23\xE4\xE3\x72\x07\x2E\x8B\x92\x07\x2F\x45\xF4\xF0\x5A\x10\xEE\xA2\x91\xEE\xE2\x8D\x2C\x38\x07\x9B\x53\x6B\x01\xD4\x54\x9E\xEF\x93\x92\xC5\x60\xBA\xCB\xC8\x5B\x56\xCC\x1B\x15\x52\xA1\xF7\xFB\x31\x8D\xAE\xAE\x3E\x25\x79\x1C\x5C\x0E\xA5\xED\x6B\x23\xF4\x73\x1A\x85\x7E\x57\x88\x96\x48\x2C\x46\x67\x1D\x4B\x9D\x06\xF8\xF9\x89\x1B\xC0\x7E\xC2\x5D\xD2\xEA\x3F\x6D\xC4\xEA\x9B\x4E\xB5\xC3\xBE\x73\xB4\x55\x0D\xD4\xE8\xDB\xB6\xE8\x93\x1D\xC4\xDF\xB6\x9A\xDC\xA6\xC7\x19\xCC\x13\xE2\xAC\x5B\x7D\x5F\x02\xA8\xE2\xC0\x52\xED\xEC\xF4\x53\xB7\x6E\xCF\x4E\x05\xAB\x65\xCE\xF9\xE8\x66\xBD\xCC\x3B\x07\x65\xF8\xA7\x82\xE7\x20\x6F\x77\x29\x73\x0E\x5A\x4C\x36\xAF\x9C\x8D\xC6\x96\x53\xCC\x46\x2A\xF1\x21\xC7\xAE\xCF\x58\xAD\xAE\x83\xDF\x4F\x40\xB5\xFA\xD2\x01\xCD\x39\x33\xC3\x8A\xFC\x6C\x94\xD7\xEF\x7F\x9D\x8D\x0A\xF6\x7B\xE6\x67\xA3\x52\xCD\xE7\x3D\x7E\xE0\x15\x11\xD5\x55\x2B\xD6\xB3\x0D\xC5\x49\xAA\xA3\xAD\x28\x63\x5B\x1D\x6D\x45\xDE\x71\xD5\xD1\x56\xB4\x38\x9F\x87\x5D\xE7\x66\xCD\x79\x6B\xCD\xAD\x68\x6C\x59\x6B\x6E\x64\xFF\x51\x9C\x26\xAA\x17\x2E\xF9\xC3\x84\x7D\x1F\x21\x9C\x9D\xCE\xFD\x1E\xCB\x9D\x8F\x92\x93\x4C\x85\x5B\x51\xC6\x76\x2A\xDC\x8A\xBC\xE3\xA6\xC2\xAD\x68\xB1\x5C\xF2\xDE\x8A\xC6\x5C\xF2\x9E\x76\x35\x57\xE6\x9C\xEB\x20\xB8\x49\xA2\x00\x37\x0B\x5E\x90\x93\xF6\x62\x7B\x3E\x05\xCD\x21\x5E\xFF\xB5\xF9\x24\x0A\x6D\x80\xF9\x84\x8E\x61\x76\xFD\x77\x1C\xFA\x49\x80\xFF\x49\x92\x3C\x05\xDE\x2A\xE8\x5A\x71\x35\x40\x8D\x04\x5C\xC7\xCF\x14\xD1\x3C\x6B\xA7\xB5\x5D\x1E\x45\x24\x8F\x0B\x1D\x80\x0F\x1D\x6C\x48\xD0\x42\x3A\x9A\x54\xA2\xB6\x85\x86\xE6\xE2\xC5\x75\x65\xE5\xB8\x5C\x5D\xED\xD8\x4D\x8C\xAF\xDA\x9B\xBC\xD4\x89\x55\x4C\x7C\xEB\x09\x5F\x4C\x9B\xC7\x74\x6D\x29\x32\x4A\x22\x1C\xAF\x2D\x45\x3D\xCE\xFF\x2D\xB0\x35\x91\xA8\x31\xD5\x11\x64\x53\x08\x2F\xC2\x6A\xBE\x8D\xC7\x55\xC5\x37\xED\x74\x6F\xC2\xAE\x86\x29\x69\x3D\xE1\xDE\xE3\x7D\xF9\xA6\xC4\x36\xC4\xB9\x0E\x02\xFD\x9E\x63\xCB\x7F\x51\x51\xCF\x67\x73\x47\x90\xBF\x3E\x14\x5F\xFC\xFD\xF6\x6D\x61\x19\xE4\x53\x4C\xF4\xB9\xB3\x9D\x4F\x65\x04\xE8\xF6\x61\x38\x57\x32\x6E\xBF\x65\x3E\x4A\xB1\x35\x23\x89\x92\x3C\x3C\xD6\x57\xCA\xBE\x3C\x5A\x5F\xD6\xFE\x15\xD2\x54\xDE\x1A\x54\x4A\x4E\xCB\x7C\x45\xE5\xC3\x0C\x45\xE9\x01\x75\x85\x81\x9C\xDB\x8C\x15\xCC\x73\x63\x6D\x32\xEE\xF2\x9A\xA9\xA5\x11\x38\x41\x27\x66\x46\xDD\x61\x33\x8B\xB4\x13\xDC\x51\xB6\x90\x5C\x83\xAE\x39\x9B\x45\xB6\x29\x52\xE1\xD4\x32\xF5\x1A\xF5\xCB\x89\xB5\xDA\xAA\x65\x41\x45\xF9\x55\xDA\x22\x0C\xF9\xC5\xE9\xF2\x79\x6D\x8D\x69\x7D\x3B\xD9\x67\xF8\xBA\x70\x4D\xE9\xD5\x05\xCE\x72\xD2\x2C\xB8\x73\xB0\xFC\x60\xB0\xBC\x91\xB7\xF8\xFB\x23\x26\x91\xEE\x1B\x2A\x53\x6D\x98\x8D\x64\x3E\xC1\xC4\x66\xC7\x68\x9A\xD9\xCA\x8E\x17\xD4\xDD\xFE\xEA\x9A\xB1\x22\x8C\x2F\x50\xFB\x69\x39\x4B\xD5\x39\xDC\xD0\x3D\xDF\x46\x37\x3B\xC3\xAE\x4A\x98\x68\x8D\x30\x8B\x28\xAC\xB5\x08\x7B\x9A\x94\xB1\xCE\xC6\x19\x3F\xBE\x8C\xC1\x3F\x8B\x4C\xED\x4E\x0B\x7F\x33\xD3\x6B\xE8\x7B\x1B\x45\x9B\x47\x09\x0A\x69\xF6\xBA\xFA\xCC\x86\x6E\x7B\x87\xFB\x0A\x07\x4A\x53\xCC\xE5\x31\xAB\xAF\x9A\x2F\x1A\x15\x36\xD7\x3A\xCC\x17\x0E\x03\x93\xEE\x7C\x02\x0D\x4F\xCE\xF3\xC9\xA4\xCB\x2D\xF2\x45\xE7\xAB\x0B\x25\xDE\x99\xB0\xBA\x38\x56\xE9\x7B\x15\x29\x27\x9B\xA8\x96\x0F\xBA\xB5\x27\xB4\x79\xCA\x9A\xA5\x45\xB5\xB9\x48\x66\x69\x99\xE4\x6B\x76\x56\x17\x49\xF8\x00\xC0\xFA\xD2\x4C\xBC\x96\x5A\x5F\xA1\x89\x2E\x72\x5F\x54\x91\x11\x5B\xB6\xF3\x09\xB5\xA5\x8D\xBE\xF9\x63\xA8\x63\xD9\x3F\x53\x9D\xAE\xD9\x66\x9C\xD9\xA9\x33\x3E\xC8\x9C\x4F\xF2\xB5\x36\x9D\xD6\x49\x5F\xA3\xAF\x63\xAF\x35\xA9\x49\x95\x97\x57\x5F\x5D\x7D\x97\x9B\xA0\x8B\xD8\xBA\x6F\x6F\xB7\x25\x6B\xF9\x71\xC8\xC5\x6E\x39\x07\xBE\x8E\xBA\x1C\xEF\x7E\x9F\x34\x5D\x45\xAE\x6D\x38\x89\x3F\x2A\xA2\x7E\xC2\x5D\xA4\xF7\xBC\x17\xF7\xE7\x15\x6F\xF6\x29\xF7\x82\x75\x3D\xBC\x25\xB4\x8B\x8B\x27\xAE\xBB\xF0\x19\xFB\x1F\x42\xF9\x8B\x1F\xD6\xED\x17\x36\x4E\x17\xD6\x92\x6B\x58\x40\xFE\xF8\xF6\xAA\x43\x1F\x98\x27\xD6\x95\xA7\xDF\xDC\xB1\x19\x59\x4D\xF3\xC9\xBA\x42\x2E\x1A\x6E\x9D\xD9\x76\xE9\x78\xEB\x16\x68\x43\x01\xD7\x4B\xD8\xD5\x22\xAE\x5B\xCA\xF9\x43\xCE\x7A\x8E\x5B\x24\xDE\xEC\xA5\x59\x3B\xD8\x06\x49\xBA\x6C\xA4\xD9\x8B\xB8\x60\x98\xD9\x16\x14\xCB\x86\x9B\xB5\x54\x9B\x09\xBB\x21\x12\xAF\x14\x7E\xD6\xA2\x72\xEF\x8F\x7E\x24\xC9\xFE\xEA\xEA\xF7\x38\xA3\xC5\xFF\x43\x7A\x1D\x51\xD1\xD8\xCD\xE6\x86\xDC\x56\x68\x8C\x3C\x03\xA9\x5F\x1F\x29\x86\x0F\x91\xFA\xA3\xE8\xBE\x45\x29\xCD\x89\x40\xB5\x37\x8D\xDF\x8E\x29\x7D\xFC\x33\x0C\xE8\xA1\xB6\x17\x6B\xA9\x37\xA2\x7B\xD3\xFB\x17\xA2\xFE\x81\xFF\x00\xB8\x11\xFB\x7D\x92\x02\x46\xEE\xEC\x76\x83\xC2\xA8\xD9\x17\x00\x30\xBF\x17\xFF\xF0\x9B\x46\x65\xF3\x3B\x16\x8D\xEF\x6E\xAE\x6B\x55\xDF\xDD\x5C\x73\x87\xD2\x95\xAE\xDD\x0F\xEB\xCB\x3E\x1F\x52\x1A\x1E\xC3\xBF\x80\x8F\x91\x99\x4F\x7E\x80\xBD\xCB\xAD\xB3\x94\xED\xB7\x61\xFA\xE5\x75\xC1\xF0\x0D\x53\x1E\x13\xCA\x7D\xE1\xAE\xDC\x43\x93\x37\x3A\x35\x02\x01\x36\x92\x70\xBA\xE0\xDD\xB6\x28\xA2\xFC\x5F\x28\x6D\x1E\x0F\xFC\x0B\x91\x6F\xEA\xA9\x69\x59\x18\xEB\x5E\x96\x36\xB5\xA4\xC7\x5F\x50\xD0\x5F\x84\x71\x16\x98\xF6\x35\x7D\x4B\xA6\x26\x93\x63\xB2\xD7\x84\x8A\x09\x15\x44\xF8\x84\xFD\x24\x62\x82\xF2\x51\xD9\x85\x35\xDC\xBD\x0A\x25\x93\x63\x4D\x6C\x2D\x5D\xAA\x90\x98\xD7\x99\x0A\x3B\x83\x6F\xD8\x1F\xA2\xE9\xC4\x63\x5E\xCF\x2D\x1C\x6C\x47\x64\x84\xEB\xED\x18\x1C\xF1\x31\xC3\x42\x3A\xAA\xBE\x5C\x53\x91\x33\x85\x20\x3C\x00\x3A\x69\x81\x49\xB2\x07\xD7\x76\x64\x0C\x23\x60\x65\x18\x0B\x2D\xEC\xA6\xAC\x9B\x08\x51\x0A\x7D\x6C\xC8\x66\xC6\x12\x3B\x73\x80\xC2\xF4\x9F\x73\xDF\xC7\x59\x96\x90\xF6\x49\x3D\x9B\xCC\xAE\x09\x41\x8F\x7C\x59\x67\x82\x29\x57\x84\x28\x0D\x8D\x7B\xA1\xEA\xB0\xDD\xCE\xD3\x61\x0C\xA5\xF7\xB2\xBE\x7B\x44\xD2\xA0\x9D\xAA\x75\x1A\x58\x31\x30\xBB\x49\xF8\xF8\x09\x84\xA0\x5C\x1C\xEE\x79\x59\x42\xE8\xEB\xB2\x56\x78\xF9\xF5\xF2\xD5\xF3\x0B\x96\x73\x60\xC7\x14\x55\x46\x80\x4F\xFF\x41\x51\x0E\x3E\x3F\xB4\xC4\xFF\xC5\xB2\xCB\xF3\x37\x36\x82\x98\xA2\x05\xC0\x5B\x5C\x55\xFB\x91\xF1\x2E\x39\x86\x71\x39\xCC\xA4\xCF\x7E\xBA\x11\x32\xDD\x08\x91\xE6\x0D\xAD\x47\x7E\x3B\x86\xF4\x8F\x30\xA3\xB6\xCE\x80\x6F\x2D\x6A\x57\x26\x1D\x6B\xD5\x16\x71\x4D\xFB\xA8\xD3\xC7\x7F\x87\x31\xCD\x84\x37\xDF\x27\x54\xCF\x30\x07\x8B\x72\x4D\x5B\x45\xC1\x53\x1C\x30\xBD\x6B\x67\xC1\x1E\x73\xA7\x42\xD4\x4D\x82\x13\x84\xF0\x0B\x4D\x16\xFE\x8C\x0D\x6B\x60\x5F\x7C\x9D\xE1\x42\xF2\x9B\x73\xCC\x14\x8E\x01\x07\x92\x33\xED\x34\xA6\xED\x55\x86\x3B\xA3\x4F\x6C\x74\x63\xD6\x77\xD6\x9E\x38\xAD\x0F\xDE\xDD\x74\x9E\x98\xC2\x13\xBA\x8F\x4C\x6D\xCB\x06\x57\xFA\xEF\x57\xBD\x51\x77\x5B\x5C\x64\x4C\x11\x19\xFC\x16\xAA\xB3\xEB\x74\x76\x9D\x63\x91\xE3\x3C\x33\x85\x67\xCA\x7A\xD6\xED\x9E\xAD\xB0\x7B\xF6\x42\x7E\xF8\xAB\xD8\xFF\x6F\x3F\x92\x03\xCE\xDF\xA1\x6E\x18\xAD\x32\x8C\x00\xAB\x87\xAC\xA8\x0E\x93\x98\xD9\xDF\xFB\xD9\x79\xC0\xC5\xFD\x53\xB3\xFA\x8B\x8A\xA5\x21\xEE\xC3\xD8\x4F\x8E\x69\xB1\xB2\x77\xAE\x70\x03\xE0\xA9\x59\xDD\x3D\xF3\x5D\xFB\x99\xAF\x7B\xB4\xBB\xF2\x1E\xB8\x33\xFE\x1A\x7B\xE1\xCE\xEA\xB3\x3F\x51\x73\x26\xDE\xDA\x63\x07\xE7\x91\x79\x37\x99\x9D\x7D\x37\x7E\x7E\xC2\x39\x68\xEB\x4F\x03\x9C\x87\xA6\x7D\x2A\xC0\x99\xF7\x09\x1F\x19\xEC\x5B\x77\xFF\x20\xA6\x30\x56\xC1\x4F\xDB\x06\x40\x4D\xFA\x94\x15\x9E\xA2\x42\x7C\xCA\xF6\x51\xEB\xB5\xA7\xAC\xED\x1C\x93\xF3\x53\xB6\x97\xEE\xC5\xA9\x25\x4F\x97\x1B\xDF\xE0\x5A\x54\x90\x75\xD9\x5F\x5D\xFD\xBF\xA2\x6B\x3B\x8B\x95\x01\x29\xBF\x10\xD7\x84\xE8\x53\x39\x08\x66\x55\xC2\x3C\x45\x65\xD5\x22\xE5\xC9\x68\x39\x59\x1E\x7E\x32\x16\xD9\x42\x82\xEB\x99\x61\xE0\xC4\xFC\x91\xE0\x5D\x78\xBA\xF6\x7D\x1C\x79\x37\x24\x89\xE9\x75\x1C\xFC\x5A\x5E\x1B\x53\x39\xCB\xFC\xC5\x86\x99\xA8\x16\x75\xCE\x81\x3C\x73\x8F\x95\xB7\xF2\xA8\xCD\x1D\x10\x7B\x6A\x07\xC4\x58\x87\x4F\xBF\x5D\x96\x77\xB9\xD8\xDE\x5D\x5C\xE0\x7F\x48\x8B\xF1\x97\x09\x57\xF8\xF0\xD1\xE0\xA3\x28\xF2\x92\xB8\xA0\xA0\x4E\xFE\x2F\xEF\x93\x08\xD1\x30\xC2\x15\xD9\x6A\xB6\xAC\xFF\xAC\x8C\x50\xDA\xA0\x9E\x49\xE7\x14\x77\xAE\xEF\xDE\x64\x85\xDE\x3D\xBF\x7B\x33\x95\x76\x25\x74\xEE\xAB\xA9\x27\x16\xDA\xFE\x4B\x4D\x33\x98\xA9\xD4\xEA\xEA\xEA\x0B\x3E\x51\x68\xED\x38\x19\x4F\x7E\x01\x3F\x87\xE9\x74\x9F\x33\x9A\x25\xB4\x3E\xE1\xBB\x3C\x24\x38\x28\xA7\x7B\xA1\xEC\x99\x65\x58\x71\xC9\xF2\xB9\x12\x98\xCF\xE7\xD6\xF6\xF7\x58\xB9\xF7\x7F\x16\x3E\x45\x29\x19\x46\xF8\x4B\x52\xDD\x81\x55\xE5\xCD\x05\x52\xC5\xFB\xFC\x58\x5D\x66\x96\xCD\xA7\x66\x55\xDB\x66\x1F\x62\xFC\xB1\xFC\x90\xC8\xBC\xB3\x11\x1F\x89\x13\xAC\x58\xB8\xE9\xCD\x4B\x49\x72\x7A\xE4\x16\x1B\x34\x4F\xA3\xFA\x3B\xF5\x13\xA9\x52\x14\xF9\x2F\x2F\x2E\xAA\xB5\x49\x33\xAA\x7B\x66\xCB\x4F\xBF\x5D\x4E\x13\x28\x13\x69\x35\xCE\xAC\x9F\xF0\x3D\x26\x19\x6E\xAF\x88\xAB\x49\xB3\x15\xD1\x85\x24\x40\x33\xF9\x02\x56\x84\xC7\x9D\x48\x5F\x3B\xFC\xBE\x97\x56\x55\xE8\x00\xDF\x07\x81\xD0\x95\x8B\xEE\x60\x5C\xCB\xDC\xCE\xF5\xE0\x8D\x4A\x09\xC6\xAF\x85\xE5\x7B\x51\x0A\x7A\xF4\x31\xE5\x9B\x67\x49\xD6\xCD\x1A\x54\x41\xF6\xBC\x23\x4A\x2B\x49\x8A\xD5\x1B\x22\x0B\x09\xB3\x35\x43\x44\x38\xCB\xE6\xE7\x5E\x4B\xC0\x92\x9E\xCD\x9E\xC9\x5A\xC6\xA9\x77\x5F\x02\x9C\x51\x92\x3C\x0A\xF5\x44\x19\xCA\x5E\x9C\x04\x5B\x89\x67\x36\x08\xDF\x8C\x1F\x86\xC0\xD6\xD4\xCC\x81\x60\x1E\x89\x80\x3C\x9B\x91\x97\x0D\x98\xD6\x05\xC3\x22\x7A\x59\x05\x46\x06\xF5\xF2\xD6\xE6\xE2\xDA\xCD\x24\x6E\x26\x71\x33\xC9\x82\x33\x89\xAB\xDD\xDC\x88\x73\x23\x6E\xD1\xDA\xCD\x8D\x38\x37\xE2\xDC\x88\x5B\x72\x8E\xB3\xFE\x30\x85\x5B\x35\xB9\x55\xD3\xF9\xAD\x9A\xDC\xC2\xDF\x85\xF0\x99\x87\xB0\xCB\xC2\x2E\x84\xCF\x3C\x84\x6D\x9F\x9B\xBC\x4B\xEA\x4F\x25\x59\x3F\xCF\xBA\x8E\xFD\x43\x52\x09\x2E\x3D\x75\x7B\xAE\xE0\x92\x3D\x77\xF8\x43\xFD\xC6\x78\x7B\x3A\x8F\xBF\x33\x7D\x5B\x92\x49\x8F\x1A\xFF\x7E\xFB\xF5\xEF\x41\xD7\x03\xC7\xCD\x08\xDF\xF6\xB1\x14\x48\x51\x4B\xDB\x08\x8B\x2E\x93\x07\xC5\xDA\xA2\xA5\xD4\x01\x53\x7B\x1A\x18\x36\x5B\x32\x26\x3B\x53\x73\x4C\xB7\x2A\x1D\x9F\x1C\x67\x3E\x19\xB7\x29\xBD\xB9\x87\xDC\x9F\x31\x22\xFE\x81\xFB\xE2\x5B\x47\x94\x77\x80\x4B\xA2\x8A\x44\xF5\xCB\xB7\xD4\x3F\xFC\x4F\x18\x07\x46\x59\xE5\x23\x44\xC0\xBB\x38\xE7\x63\xD8\xF6\x24\xCD\x36\x8C\xCB\xBF\x92\x77\x06\xE6\xFB\x35\xA4\xEC\xC3\x94\xCE\x7E\xC3\xEC\xF7\x7E\x43\xE3\x7A\xDB\xA6\x53\x6A\xBC\x8F\x88\xD0\x10\x45\x4C\xC8\xF7\xF6\x25\x80\xBE\x32\xE8\x9A\xED\x5F\x6C\xAF\xF0\x78\x26\x1C\x9E\xFA\x5E\xFE\x61\x7F\xF8\xC9\xB2\x9F\xA6\x96\x01\x7B\x2B\xAB\xDF\x12\x37\x8F\xEB\xCF\xC7\xB6\x9A\xD6\x6D\x7F\xE0\x2C\xD3\xAF\x54\x44\x5C\xCB\x45\x15\xC4\x54\x39\x73\x02\x1C\x4D\x5D\xAA\xE0\x80\x58\xDB\x9F\x4A\x84\x7A\x03\x87\x02\x99\x39\x6E\x51\x84\x62\x1F\x7B\x68\x47\x31\xA9\x5E\x00\x7A\x0D\x1A\x8D\xBD\x96\xF6\xBA\xB2\xD2\x1B\x9D\x69\x05\x2C\x75\xBF\x40\x87\x37\xE2\xD4\x22\xA0\xED\xF8\x83\x9D\xC0\x71\xC3\x91\xBD\x37\xEF\x80\xFE\xA2\x13\x7C\x4C\xEE\xF1\xC6\x84\xB5\x4F\x6B\x42\x37\x09\x52\xA7\x0F\xA0\x13\x07\x7A\xA1\x4F\x74\xA6\x5E\x7D\x44\xD4\x72\x03\x4E\xC2\x5A\x32\x33\xA7\xEB\xEB\x20\x28\x12\xE3\x97\xA4\x9C\xB4\xB4\xDF\xB9\xB6\xC0\xEF\xB7\xB5\xD1\x83\x9E\x95\x22\x9F\x29\x22\x1F\xA3\x3C\xFB\x40\xFE\x37\xC7\x59\x73\xAA\xBA\x04\xD7\x1F\xFF\xE6\x9A\xD4\xB7\x1E\xC4\x77\x75\x06\x24\x80\xE9\x45\xD0\xA6\xBC\x45\x19\xEB\x63\xAF\x60\x2A\x72\xEB\x49\x7A\x72\xC9\x55\xC3\x6C\x59\x3E\x80\xE8\xB6\x04\x7C\x9B\xC4\x3E\xA2\x1F\xC8\x75\xC4\xEE\x8B\x69\x57\x76\x7A\x06\xF2\x1B\xD6\x5A\x56\x7E\xF3\xB2\xE6\x80\xB1\xB6\x94\x60\xC2\x4B\x66\x0B\xF3\x16\x90\x6E\x90\x4F\x93\x86\x65\x98\xC4\x52\xD8\x58\x73\xD8\x86\x87\x6D\xE7\x87\x55\x6C\xBD\x10\xD3\xB5\x1C\x01\x4E\xEC\x2B\xC4\x41\x47\x35\xB4\x94\x44\x5A\x63\x0C\x1E\x61\x1B\x88\xA6\x86\xD9\xFB\xA4\xCC\x1C\xE7\xAC\x4C\xF5\x26\x65\xBF\x89\xD2\xE7\xEF\x51\xEA\x39\xBB\x7C\xC2\x29\x56\xFC\x6F\xCB\x6F\x0C\xE3\x3F\x42\x8A\x09\x8A\xF8\x62\xB8\x87\xA7\x16\x66\x67\x55\xC8\x8B\x0C\xDF\xE3\x87\xB7\x07\x44\xDE\x46\xDC\x26\x7B\xD3\x30\x43\x49\xFE\xDB\x5D\xCE\x2E\xB9\x33\xFA\xB1\x7D\x7F\xF1\x4B\x92\x5A\xF7\x18\xCA\x68\x46\x1D\xA0\x62\x65\x90\x60\x1D\x99\xB9\x0F\x4D\x70\xB2\xB1\x27\xD0\xEE\x0F\xF0\xB7\xFF\x08\x5D\xF4\xDB\x84\x25\x56\x73\x11\x11\x4A\x53\x1C\xDB\x14\x1D\x43\xC4\x9B\xE2\x5A\xBD\xFE\xFC\x39\xDB\xF6\x89\xDD\xFA\x39\xEF\x42\xD6\xAD\x77\xEB\x97\x62\x67\x33\xC4\x16\x54\xBD\x18\x93\x2B\xA8\x6E\x3A\x11\x3C\xAF\x10\x93\x8D\x8A\xA5\x04\x56\x52\x94\xFE\x12\x93\x17\x19\x25\x11\x8E\x2D\x91\x7B\x26\x7B\x03\x25\x35\xB7\x1B\x65\x9C\xF5\x94\xD8\xD5\x55\x63\x4C\xBF\xC7\x9D\x3C\x3D\x8C\x65\x9C\x80\xB6\xA8\x78\x7F\x01\xC7\x5E\xA7\x21\xD6\x55\xF2\x75\x23\x62\x71\xF6\x27\x8A\xBE\x61\x52\xDD\x63\x55\xFC\xE0\xEE\xFF\x55\x87\x54\x53\xFB\x81\xC5\x78\x1F\x56\xDF\xCB\x5F\xFC\xD6\xE1\xDB\x24\xBE\xC7\x84\x16\xB5\x62\xF6\x25\xF9\xF5\x91\x32\x32\xC2\x25\xC4\xB2\x18\x33\x3B\xF5\xF9\x22\xB7\x58\x11\x9C\x85\x7F\x81\xCF\x0E\x8B\xCE\x25\x9F\x6D\x9B\x88\xC9\x46\xF2\x18\xD3\xA4\xA4\xCB\xC6\x00\x2F\x89\x3C\x1A\x36\xAA\xC8\xEC\xBE\xF6\xBC\xEC\x40\xC2\xF8\x9B\x97\x10\x0F\x9F\xA8\x5D\xD1\xB9\xBD\x1B\xA0\x6C\x1F\x3F\x6C\x5D\xF2\x55\xF6\x2C\x36\x68\x94\x01\xDB\x20\x9B\xD3\x61\xC3\x79\xC5\x64\xBB\x9B\x84\xB0\x2B\x5C\x97\xB6\xE1\x19\x18\xAC\xD9\xFE\xF9\x35\x0F\xA3\x00\x93\x72\x2B\xA9\x3C\xA8\x23\x5F\xC0\xBB\xD9\xB3\x09\xBD\x94\xE8\xAE\x73\x87\x92\x33\x0F\xEB\x49\x2C\xBD\xAD\x03\x2C\xA0\x4A\xFA\x1D\xC6\x0A\x8B\x1B\x18\x3D\x4C\xA2\xE3\xF8\x89\xC5\xDE\xF5\x6D\x72\x8F\xDB\xE3\x0B\xE7\x13\xA8\xA0\xF8\x43\x42\xB4\x8B\x50\xDF\xE0\xEC\x65\xD7\xAD\x87\xE5\x7B\xBC\x2F\x0B\x8F\x91\x46\x11\xE8\xF0\x7B\x02\xF6\x2C\xAD\x1D\x2A\x10\x98\x76\xA7\xB3\x07\xB3\x6D\x1F\x1B\xED\x50\xE4\x49\x84\x2B\xB7\x3B\xA6\x62\xFE\x13\x53\x3E\xDF\x0E\x78\xD4\x6F\x49\x53\x78\x90\xC0\x6D\x42\x94\x5B\x0C\x57\x57\xDF\x95\xB6\x21\xDB\x13\x7D\x08\xDB\x3F\x30\xF9\x1C\x1E\xD3\x28\xDC\x81\x27\xFB\x2A\x89\x84\x3D\x4B\x8B\x4D\x1A\xB5\x05\x5C\x86\x98\x38\xEB\xCF\x75\xF5\x97\x17\x30\xE5\x5C\x0A\xF6\x3E\x1A\xB8\x80\x00\x8B\xB1\x6E\x47\x75\x80\xEF\xF2\x2A\x47\x15\xF4\xD8\x7B\x37\xF2\xCE\xB7\x31\x1D\x6A\x7B\xB5\x9F\xEE\x40\x41\x50\x7E\xB6\xC3\x47\x29\xF2\x43\x0A\x9E\x91\x9D\xD3\xBC\x7D\x8E\x0A\x59\x04\xE6\x44\xA1\xD3\x45\x73\x0C\x35\x3E\x6D\x33\x17\x97\x29\x7B\x4E\x3F\x7F\xE7\x39\x89\x7B\xB5\x28\xC2\x99\x8F\xEB\x4C\xF8\x36\x49\x1F\x15\x5F\x76\x6E\x13\xC9\x54\x3E\x1F\x12\x42\xFF\x13\x66\x61\xE7\x01\x8B\x21\xD4\x3F\x26\x99\x35\xF1\xEE\x16\xE8\x8D\x9F\xED\x88\xA2\xF8\x07\xC5\x75\x93\xFD\x09\x86\xD5\xA5\x7E\x97\x68\x84\x36\x5E\x4C\xBF\xA4\xD8\xF6\xF5\xFA\x5A\xC1\x58\xFE\xDB\xB9\xAF\x09\x9E\x04\x5D\xD1\x92\x9D\xA5\xE1\x5A\xF6\x54\x4B\xA3\x65\xAD\x24\x14\xBB\x23\x87\xB9\xA8\x59\xCF\xF3\x4D\x63\x79\x77\xA8\xD2\x77\xEC\xF7\x4D\xC1\xE3\xE8\x4F\x74\x0C\x70\x22\xD1\x66\x35\xE5\xA8\x93\x80\x93\x29\x38\x30\xCD\x8E\xF5\xF2\x74\xB9\x73\x9C\x24\x6A\xD6\xA9\x17\x62\xE3\x2A\x30\x99\xCA\xB4\x15\x98\x4C\xFD\x23\xC1\x7D\x12\xA3\xF8\xA4\xA2\x07\x9B\xF5\xE6\x82\xD5\x44\x59\xD7\x2A\xD6\xE3\x73\x35\xFB\x8C\x19\xCA\xCB\x5A\x52\x48\xE5\x8B\xDB\x4B\x49\x08\xD5\x6F\xC3\x84\x27\xCE\x69\x5B\x33\xA8\x51\x2B\xE5\x79\x90\x5C\xE4\xAC\x38\x88\xBA\x2A\xE0\x99\x3D\xD5\x7B\xE6\x98\x93\xFD\x80\xB7\x35\x57\x90\x72\xC0\x3B\xAF\xCB\x48\x39\x38\x3D\xCF\x6A\xAE\x91\xAF\x52\x2D\x6E\x3A\xCD\x16\xDE\xA2\x36\x9B\x72\x1A\x9B\x55\xD0\x21\xEF\x2F\xAF\x32\x18\xD6\x4E\xB3\x86\xC9\xDE\x62\x96\xEA\xAA\x17\xEC\x48\x8C\xCC\x0E\x26\xE2\xB3\x47\xAF\x35\xF3\xEE\x2D\x81\xEF\x62\xC3\xA8\x47\x5C\x76\xB4\xFB\x67\x97\xEF\x62\xC3\x28\x19\xED\x68\x5B\xDF\x24\xBF\xDE\x33\x09\x5B\x19\x57\x7C\x30\xF6\xE2\x88\x8F\xC7\xE4\x1E\x6F\x44\x9A\x7E\xEF\x41\x6D\x44\xD2\xAD\xBA\x96\x1F\x04\x59\x1A\x85\xD4\xBB\xCD\x77\x3B\x6C\x26\xAC\x9C\xC5\xB0\x93\xA7\x7E\x6B\x29\xCD\xB3\x03\x13\xA6\x4E\x7B\x3A\xFC\x8B\x0B\x67\x28\x6F\x47\x92\x98\x3A\x4B\xE9\x2C\x75\xE1\x02\xAA\x97\x99\xAC\xC2\x49\xF8\x14\xEF\x36\xCC\x55\x16\x8A\xDB\x4F\x57\xC0\x64\xB9\x59\x51\xFB\xCD\xA4\xE7\xA0\x86\xB9\xCA\xDB\xA8\xFC\x2B\x87\xB6\xFD\x04\xB3\x7E\x6C\xF7\x90\x75\xD3\xC1\x3D\x4C\x8F\x0D\x45\x77\x0F\x05\xD6\x08\xEF\xFE\x55\xC1\x4A\xB1\x3D\x40\xD0\xED\x05\xF6\x38\x25\xD6\x8E\xEA\x01\xD2\xAF\x1A\xD2\xBD\x2B\xB8\xB5\x43\xBB\xBF\xC0\x1B\x0E\xF1\x51\xCA\x6C\x26\xD4\xFB\x6B\x51\x86\xFC\xFF\x1F\x00\x00\xFF\xFF\xB5\x0D\x5C\x61\xA2\xF1\x03\x00") +var gzipped = []byte("\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\xFF\xEC\xBD\x0D\xB8\x25\x57\x55\x20\xBA\x7F\xAB\xEA\x9C\x3A\x75\xEF\xE9\x4E\x77\xBA\xC9\x0D\xB2\xAB\xE4\x7D\x73\xA3\xE9\x11\x67\xB4\xE3\x0B\xF0\xE8\x7D\xBF\xE9\xEE\xDC\x34\xD0\xA2\xA0\x6F\xF8\xE6\x3D\x12\x35\xCE\x58\x37\x40\x77\xE7\xA6\x8D\x9F\x4D\x9F\xDB\x74\x20\xE1\x6F\x40\x45\x10\xF0\x4D\x02\x44\x03\x3E\x9A\x9F\x91\x5F\x35\x26\x22\x0A\xF8\x8B\x23\xF3\x40\x84\x31\x8C\xE0\xA0\x02\xC6\x80\x88\x88\xF4\xFB\xD6\xCF\xDE\xB5\xEB\x9C\x73\xBB\xFB\x86\xF0\x23\xD2\x4A\xEE\xA9\x5D\xBB\xF6\xCF\x5A\x6B\xAF\xB5\xF6\x5E\x6B\xAF\x25\xAE\xBD\xE1\xA9\x52\x08\x21\xDF\x27\x97\xAE\xD1\x93\xC9\x44\x4E\xAE\x51\xE1\xBF\xE2\x1A\x33\x99\xC0\x1F\x89\xFF\x93\x93\x6B\xEC\x84\x0A\x34\xFE\x37\x9F\x4C\xF8\x19\xEB\xC9\xC9\x35\x19\x15\xC4\x9A\x72\x72\x8D\x90\x93\x58\x11\x1E\xC5\x35\x6A\x72\x52\x4E\xAE\xD1\x27\xF1\x59\x9E\xC4\xBE\x4E\x8A\x6B\xE4\x09\x79\xE2\x9A\x72\xD2\xFD\x93\x93\x6B\x0A\xF8\x7B\x22\xF9\xDD\xEF\x07\x07\x02\x0D\x40\xFF\xF0\x77\x90\x7C\xAC\x8E\x64\xFA\xBA\xA7\x1D\x1F\x3D\xFD\xC8\xB5\x4F\xF9\xA1\x1B\x7F\xEC\xFA\xF5\x1F\x7B\xDA\x23\x84\x9C\x2E\xFA\x4E\x21\xA6\x8B\xFE\x8D\x18\x4C\x17\xFD\x5B\x51\x4E\x17\x7D\x97\x18\x42\xD1\x00\x8A\xAE\xFD\xA1\xA7\x1F\x5B\x17\x46\xBF\xDD\xBE\xD5\x86\x7F\x52\xE0\x7F\xF1\x9F\x90\x12\x7F\x09\x41\xCF\x72\xA4\x2A\xAB\x94\x5D\xB0\x76\x80\xFF\x6F\xAD\x96\xD6\x5A\x21\xB1\xC2\x22\x7C\x51\xC2\x83\xB5\x66\x64\xAC\x91\x56\x2D\x2C\x2C\x28\xBB\x30\x1A\x99\xD0\x3C\x35\x6D\x25\x75\x12\x1A\x86\x67\xE8\x78\xCC\x5D\x89\xF8\x0E\x8B\xC3\x3F\x21\x07\x34\x3E\x1E\x60\xF8\xD4\xC8\x5C\x59\xB9\x4D\x5A\x18\x9D\xCD\xD5\xC8\xCA\xED\x56\x8E\xEC\x68\x64\xB7\x2B\x21\xA5\xB2\xB9\xCA\x84\x55\xC6\x28\x2B\x73\xA5\x84\x1C\x09\x6D\xA5\x50\x56\x5A\x23\xB5\x50\xD6\xDA\x8B\x06\x03\xAD\x77\xEC\xDC\x79\xB1\x18\xC8\x05\x18\x3C\xD0\x97\x10\xC2\x96\xB9\x90\x59\xAE\xB3\xC1\x30\x1B\x0C\x8C\x19\x08\x9D\x43\xB9\x96\x83\x81\x94\x03\x31\x12\xDD\x08\x95\x11\x06\xFE\x29\x93\x5B\x6B\xF3\x5C\xE7\x79\x2E\xB5\x16\xB9\x14\x03\x2D\xA4\x14\x83\x4C\x65\xBB\xB2\x4C\x6B\x9D\x65\xD9\xAE\x6C\x57\xA6\xCB\xB2\xCC\x32\x2C\xD1\x5A\x96\x45\x29\x77\x0D\x85\x80\x0E\xD4\xC0\x5A\x63\xCD\x82\x94\xB9\x10\x52\x09\x21\xCB\x7C\x28\xF2\x5C\x54\x15\xCC\x58\x6B\xAD\xB2\x3C\xD7\xA6\x94\xBB\x84\x16\x5A\x6B\x93\xEB\x4C\x17\xBB\xA5\xCC\x94\x5C\x5C\xB4\x26\x2B\x72\x65\x94\x52\xEA\x21\x76\x30\x90\x5A\xE8\x5D\x42\xC9\xE9\x7F\x97\x48\x18\xEE\xC5\x4A\x49\x65\x6D\x61\x86\x95\xA8\x06\x4A\xC0\x57\x95\x1D\x28\x29\xAC\x94\x76\x30\x18\x8A\x72\x00\xB8\x53\xD6\x2A\x91\xE3\x58\xA1\xC5\x12\x20\x20\xA4\x91\x66\x30\xC4\x9E\xF2\x2C\xCF\x95\x32\x88\x10\xF8\x7F\xB3\x4B\xE6\xC5\x2E\x9D\x8B\x32\x17\xB9\x11\xD6\x58\xA5\x86\xD5\xC0\x8C\xCC\x48\x58\x65\x01\x50\x80\x1E\x59\x0A\x21\x06\x42\x2A\x29\x95\xB2\x7A\x20\xAC\x50\x52\x19\x6B\x06\x02\xA8\x4C\x8A\xA1\x54\x52\x0C\x86\x76\x60\x06\xC6\x9A\xA1\xC4\xCE\xE0\x43\x63\xE5\x11\x79\xF5\xD5\x56\x4B\xA1\xB2\x45\x35\x91\x7E\x63\xC3\x94\x13\xE1\xEF\xBD\x23\x2F\xF3\xF7\xA9\xED\xD9\x53\xAF\x7B\xEA\xD3\x8F\xFD\x84\x12\x63\x20\xF8\xEB\x8E\x5F\x7B\xFD\x53\x7E\x78\xFD\xA6\xA7\x3C\xED\xBA\x1F\x17\xDF\x3E\x84\xA2\xA7\x5E\x7B\xFD\xF5\x4F\xFF\x61\xF1\x7F\x5E\xDC\x7B\x7F\xC3\x75\xEB\x4F\xF9\xB1\xA7\x1D\xB9\x71\x5D\x5C\x5E\x84\x17\x62\x0F\xB6\xF1\x9F\xAE\xBB\xF6\xC8\x53\x8E\xAC\x1F\x83\x3A\xE2\x07\x17\xA1\xE8\xF8\xB5\xD7\xDF\x78\xDD\x53\x8E\x5C\x7B\xEC\x86\xEB\xC4\xC1\x85\xAE\xE4\x47\x6E\x7C\xEA\x11\xF1\xC4\x0A\x0A\xDA\x1B\x9E\xFE\x34\x7A\xFE\xFE\x9D\x33\x3D\xFD\xC8\xB5\xEB\xD7\x8A\xEF\x58\x9A\x29\xBF\xEE\x69\xEB\xC7\x7E\xE2\xC8\xD3\x7F\xEC\x69\xEB\xE2\x11\xBB\x7A\x6F\xFF\xE3\x75\xEB\x4F\x39\x76\xDD\x0D\x37\x5E\xBF\x2E\xBE\x73\x21\xB6\x4F\x23\x38\x80\x23\xFE\xD1\x63\xD7\x5D\x27\xFE\x7D\xF9\x14\x1A\xEF\x0F\x5D\x7B\xC3\x75\x5A\xF6\xC7\xFF\x1F\xAF\x5B\x17\x3F\xB0\xBD\x1B\xED\xB5\x3F\xF2\x23\x4F\x39\x72\xED\xFA\x7F\x12\xF7\xCA\x9D\x5D\xE9\xB1\xEB\x9E\xFA\xF4\xE3\xD7\xD1\x8B\x8F\xCA\xC1\xCF\x4A\x29\xBC\x2C\x57\xDF\x22\x1F\x7B\xF8\x09\x7F\x2B\xEF\x97\xCF\x55\xCF\x53\x2F\xD6\xBF\xAC\xDE\xA2\x7E\x56\xBF\x59\xBD\x55\xFD\xAC\xFA\x39\xF5\x52\xF5\x12\xF5\xCB\xFA\x2D\xFA\x77\xF5\xEF\xEB\xF7\xEA\xDF\xD1\x6F\xD6\x1F\xD0\x1F\xD4\x7F\xA2\x3F\xA4\xFF\x8B\x3E\xAB\x37\xCC\x29\xF3\x49\xFD\x69\x7D\x9F\xBE\x5F\x7F\x56\x7F\x4E\x7F\x5E\x7F\x41\xDF\x69\x7E\xC3\xBC\xCA\xBC\xDA\xBC\xD3\xDC\x61\x7E\xD3\xBC\xCB\xFC\x96\xF9\x88\xF9\x84\xF9\x6B\x73\xBF\xF9\xAC\xF9\x82\x79\xB9\x7D\x85\xFD\x79\x7B\x9B\x7D\x9D\x3D\x63\x5F\x6D\x5F\x69\x5F\x65\x5F\x6F\x5F\x63\x5F\x6B\x7F\xD1\xDE\x69\xDF\x68\xDF\x64\xFF\xAB\x1D\xBE\xE5\xCF\x2E\x7A\xAB\x7D\xB7\x54\x6A\x22\x4F\x7E\xEB\xC6\xC6\xC6\x86\xF0\xE3\xB5\x46\x3E\x9C\x7E\x8A\x5A\xA9\x7D\xDD\xFF\x39\x31\xFE\xE5\x53\x50\x7E\xA2\x5D\x30\x42\x2A\x6D\x4B\x28\x5C\x56\xA6\x12\x2B\xA2\xD6\x23\x53\xC2\x27\xF0\x53\xEF\x73\x7A\x45\x9E\xA8\xB5\x93\x7E\xD4\x42\x9D\xC2\xA9\x76\xFC\x8E\x67\x6D\x6C\x08\xA7\xDA\x46\xE1\x67\xAB\x95\x18\x99\xB2\x74\xE2\xBB\x55\x31\x7E\x2F\x34\x5D\xAB\x91\xC6\xE7\x51\x7C\x56\x53\xCF\xB2\x74\x3A\x3C\x94\x4E\xFA\x71\x4B\xA3\x75\xAA\x7C\x87\x96\x76\x72\x8E\x69\xC4\x09\xFC\x64\xBB\xA0\x61\xAD\x94\xE3\xBB\x9F\x09\x0D\xC1\x30\xC5\x5E\x55\x38\xED\xC5\xF8\x63\xD8\x9A\xF4\x45\x3B\xFE\x28\xBC\x55\xFB\x9C\x5C\x56\xC5\xFE\x4A\xF8\xF7\x9E\xBE\x79\x43\x8C\x5F\x0C\xA5\x3C\x75\x2C\x16\xB5\xF1\xA6\x56\x7A\x1F\x83\xC3\xA9\x76\x59\x85\xBE\xF4\x81\x4A\x38\x3D\xFE\xBD\x67\xF2\x50\x46\xA6\x74\x3A\xAD\xF6\x17\xD0\xDF\xF8\x53\x1B\x34\x10\xE5\x8B\xB6\x56\xCE\x78\xD9\x36\x06\x7B\x58\xAD\x44\x09\x73\xFE\x5F\x1B\x01\x00\xFD\x51\x8F\x7A\xA3\x1E\xF5\x46\x3D\x9A\x1D\x35\x8F\xBB\xB1\x3C\xF2\x6E\xD4\xC6\xAB\x75\x18\x51\xA3\xF6\x57\x42\xEF\x73\x2A\x99\xC4\xC1\xCA\x38\x4D\x25\x53\xE3\x5D\x56\xA6\x51\x95\x28\xB1\xD5\xDA\x96\x61\xE8\x76\x76\xDC\x29\x18\xBE\x02\xA8\x93\x5F\x23\xD4\xFD\xCD\x97\x85\x3A\xF9\x55\x47\xDD\xDF\x3C\xB8\xA8\xFB\x07\x29\xCD\xC4\x8B\x5A\x6E\x86\x29\x06\xB6\x84\x6F\xBD\xA9\x35\xD4\xD5\x54\x57\xEE\xAF\x84\x93\x34\x07\x8D\x20\x7D\x0B\x7E\x3B\xB9\xBA\x92\x65\x52\x5C\xC3\x08\x00\xBC\x00\x65\xC9\xFC\x03\xC0\x3B\x52\x25\xD6\x03\x68\x11\x70\x0C\x01\x47\x85\x5E\x18\x5F\x01\x40\x1A\x01\x94\x76\xAE\xA7\xBB\xD5\xA1\x43\x80\x8F\x8E\xF0\x31\x65\xE8\xDB\x10\x7C\xE4\x57\x64\xEA\xF2\xAA\xAF\xC9\xD4\xA9\xDB\x0B\x9F\xFA\x2B\xFB\x53\x9F\x9A\x3C\xE8\x4D\x34\xB8\xF1\x87\x90\x55\x4B\x1A\xA1\x22\x58\xE8\x6E\x74\x3A\x8C\xCE\x10\xE5\x4A\x67\x60\x50\xFF\x0D\xBE\x82\x9F\xA6\x31\x71\x18\x0A\x20\x21\xDB\x46\x3B\x15\xE7\x3F\xFE\x43\x6A\x1F\x88\xF2\x14\x92\xF7\x9F\x41\x01\x0C\xF1\xB9\x6A\x6A\x88\xD3\x83\x34\xC2\x94\x3C\xAE\x4A\x7A\x59\xEB\x91\x0A\xBC\xA1\x12\xFC\x8C\xA3\xAC\x0D\x0C\xDA\x9B\x1A\x11\xA9\xF7\x39\xE3\x64\xC2\x27\xD4\xC1\x8A\x04\x5A\xC3\xE5\x7B\x84\xDC\x5F\x29\x64\x44\xB5\x9C\x42\x5B\x89\x0D\xCB\x72\x93\x05\x2C\x11\x0C\x1E\x59\x44\xAF\x07\x7A\xC6\x96\xF1\xA7\x69\x64\x02\x18\x68\x34\x2C\x5F\x15\x96\xEF\xBB\x23\x68\xCA\x8F\x49\xA9\xB7\xC6\x5F\x7B\x4C\x52\x6F\xCE\x24\xD5\x41\x22\x3F\x2E\xC5\x01\x0A\x2F\xB9\x73\xE4\x99\xCC\x18\x19\x77\x91\x31\x7A\x11\x2B\x49\xEE\x6E\x04\xBD\x25\xA5\x4E\xFA\x67\xAA\x47\xCA\x05\x07\xFC\x71\xA1\x1D\xBF\x0D\xBB\x14\x07\x43\x95\x29\x56\xF4\x28\x29\x27\x34\x27\xA4\x24\x35\xBE\x07\xAA\x21\xD5\x41\x0B\x4E\x8D\xDF\x01\x05\x44\xF2\x08\x24\x15\x1B\x2B\xBF\x87\x3E\xD6\x6A\x9F\x53\x11\x18\x5E\x1E\xC2\x95\xA2\x9C\x48\xBF\xDD\x5F\xEB\x08\xE0\xF2\x16\x29\xD5\x2C\x6C\x19\xAA\xC8\x72\x1B\x81\x50\x14\x9D\x00\x50\x41\x00\x40\xC3\x89\x00\xF8\x0C\xBC\x75\x82\x98\x6D\x22\x08\xFE\xE0\xB9\x9D\x20\x70\x8A\x19\xB3\xE8\x4D\xFF\xC1\x1D\xC8\xB3\x4E\xCF\x1F\xC8\x8B\x9E\x77\x01\x03\xF9\xC9\x79\xC4\x36\x67\x1C\xA9\x44\xF4\xC9\x58\x74\x7F\x2C\xCF\x49\xC7\x82\x23\x41\xB9\xCC\xD2\x69\x8A\x06\x1E\xE4\xBE\x6F\xDD\x4A\xDF\xEF\xEC\x23\x40\x05\x80\x50\xC7\xB5\x70\x92\x7F\x45\x81\x81\x7C\x18\x19\xFE\xF8\xE3\xD4\x29\xFD\xED\x23\x09\x58\x7F\x18\x9C\x0B\x0A\x83\x82\xE1\x7D\xEE\x99\xBD\xE1\xF1\x5F\x05\xB2\x7D\xE4\xEF\x7E\xCA\xD1\x06\x3E\xE3\x8E\xFC\x1B\x52\x22\xD2\x1D\xEE\x54\x8A\xBB\xF7\xF4\x39\xC5\xF4\x1C\x74\x9C\x83\xC1\x19\x80\x50\x71\xC0\xBB\x79\xA8\x22\x0C\x55\x38\xED\x4C\x3A\xD4\xBF\xC7\xA1\xB1\x1E\xE1\xCC\xEC\x50\x35\x0D\x15\x5A\xF4\x2F\x4C\x87\x2A\x78\xA8\x9A\x14\x11\x02\x94\xE1\xBF\x30\xEB\x67\x22\x37\xD0\xBD\x99\xE8\xAF\x01\x36\x4E\x9D\xDE\x02\x36\x3E\xF9\x9C\x0B\xC0\xC6\x1F\x9E\x1B\x1B\x5B\x9B\x83\xEE\xE6\x80\x02\x2D\xCC\xC3\xE0\x3C\xFE\xBC\x9B\xC7\xE7\xE7\x53\xD5\xB2\x1A\x35\xC2\x9B\xA3\x15\xCC\x49\xCC\x4C\xE8\x6F\x52\x9C\x99\x80\xB3\x29\xA4\xDC\xFD\xC0\x26\x84\x3A\xCE\xF8\x03\xD0\x36\x3E\xD3\xCF\x07\x32\xCD\x04\x5D\xA7\xE7\xA3\x8B\xD6\xF8\x66\x13\x78\x0B\x4C\x80\x84\x4C\x14\x9A\xF6\x20\x8E\x29\x7D\x80\x1D\x2F\x48\xBA\x96\x15\x20\x35\x23\x4F\x0D\xE8\xE9\x2C\xFD\xDB\x44\xE7\x01\x61\x69\x66\x84\x65\xDC\xC8\x88\x5A\xC4\x8F\xE5\x26\x1F\x0B\xF8\x98\x06\x41\x1F\xAB\xF2\xCD\x4A\xA9\x89\x4A\x36\xF9\x3A\xAA\x00\x66\xB3\x99\x68\x78\x50\xC9\x03\x54\x06\xB5\x11\x36\x58\x6F\x27\x19\xEA\x94\xD3\xE1\x37\x31\x84\xCB\xB4\x68\xEC\xCA\xE4\x49\x78\x28\x60\x9D\x5E\x11\x57\x68\x58\x3D\xCE\xE2\x46\xBF\xC9\x7E\x10\x38\xA8\xCB\xAE\xD0\xC2\x65\xB5\x2D\xC3\x57\x45\x93\x85\xAF\x32\xFA\xAA\x80\xAF\x32\x67\xE9\x03\x7B\x85\x2E\x9C\xAD\x33\x68\x28\x7B\xC6\x9D\x0C\x57\x83\x1D\x86\xEF\xDD\xB3\x57\xDC\x2D\x0D\x7E\x90\xDD\xE9\xF5\xBA\x37\xC7\x40\x15\x76\x86\xE0\x2C\x13\x50\xB1\x72\x86\x5F\xDB\x15\x79\xA2\xB1\x4F\x22\xB5\xA9\x43\xB6\x29\x3F\x0F\xC8\xDE\x8C\x38\xB7\x4E\x9A\x8B\x50\xF6\x3B\x41\xEE\xF2\x2F\x1D\xCB\x00\x11\xCA\x01\xA0\xD5\x3E\xE4\xA9\x4E\x8C\xFF\x1A\x75\xDA\x4F\x73\x3B\xC9\xD3\xF8\x3E\xFC\xEF\x27\xF1\xBF\x9F\xC5\xFF\x22\xC1\x42\x1F\x4E\x8E\xEF\x9F\x2E\x71\x66\xA9\xDF\x98\x13\x50\xF4\xB7\xF3\x5B\x29\x3F\xF9\x75\x3C\xF3\xFB\xCF\x39\xF3\xFB\x7A\x25\x34\xCD\x39\x00\xE0\x99\xD3\x6C\x6F\x24\xDD\x4F\xA6\x5A\x42\x7F\x76\xAC\x41\xFC\x4E\x98\x6C\x18\xDF\x5F\x86\xCA\xA0\x3F\xFD\x55\xD7\x3C\x0A\x0C\xD7\x1B\x65\x9D\x88\x32\x54\xCA\xBF\x9E\x61\xFC\x99\x19\xB8\x7E\xE6\x02\xE1\xFA\x99\x4D\x28\xEA\x03\x52\xCA\x59\xCE\x9F\x6A\x66\x01\x98\xCC\xE5\x78\x82\xB4\x39\xE8\xF1\x24\x89\x5B\x8A\x8E\x05\x5D\xA6\x8B\x95\xC9\x0F\x46\x1D\x44\x12\xC7\x37\x38\x48\xB5\xAC\x8A\xC8\xF4\x4D\x3B\xFE\xDB\x29\x0D\x5B\x2D\x2B\xDC\x37\xFF\x53\x72\xD4\xE2\x24\xA3\xF2\x7F\xA5\xA8\x0C\x07\x20\xD3\x32\xFA\x25\x6A\x9E\x9E\xC1\x5B\x89\x4D\xC9\xA9\x9B\xD1\x81\x2A\x8E\x07\xE7\xAA\xF6\xCD\x9F\xE0\x93\xAA\xDE\x30\x34\xEF\x9A\x22\x4D\xE2\x43\x8A\x09\x02\xA7\x26\x89\x03\x7B\x59\x4D\xD0\xF8\x33\xF8\xE0\x12\xA7\x79\x92\x33\xA8\xEA\x9A\xEE\xB7\x20\x37\x6B\x61\xBE\xA4\x7C\xA9\xEA\x44\xFD\xFB\xC4\x2C\x60\x68\xFA\x26\x95\x38\x86\x84\x0C\xC9\xBD\x70\x7C\xB1\xDC\x8E\x5F\xB5\xD1\x81\x0D\xDE\xA0\xE0\x53\xE3\x57\x6F\x10\x7C\xD2\x32\xAE\xCA\x80\x54\x7B\xC4\x72\x23\xE1\x8F\x20\xC2\x97\xB8\xB3\x37\x00\x0D\x68\xD9\x6F\x6B\x51\x65\xDD\xD6\xD2\xA1\xF5\x1E\x21\xFC\xE4\x06\x27\xF6\x08\xD1\x98\xA3\xB0\x6D\xF4\x47\xDA\x3D\x42\x38\xCD\x7F\xCD\xD1\x83\x78\x56\x40\x42\xB6\x16\x28\xA8\xF1\x3C\x6F\xD2\xC2\xE6\x5D\x8D\x70\x67\x5B\x1B\x50\x81\xDE\xDD\xE9\xA5\xEF\x13\x1D\x60\x7E\xC5\x68\x33\x91\x27\x53\xA2\xD1\xC9\x6A\x90\x7C\xBC\x87\xBB\x58\xE1\x4C\xDB\x58\x18\xD6\x77\x1C\xA8\x24\xAC\x36\xDC\xE4\x1F\x88\x1D\x65\x50\x25\xC0\x82\x8E\x57\x32\x67\xBD\x6C\x9D\x81\x99\xC8\x96\xC4\xF5\x0B\xE8\x80\x0B\xDA\x40\x59\x99\xAF\x88\xEF\xAF\xA4\xCB\x11\x34\x4D\x71\x66\x45\x3F\xFB\x49\x15\xF0\x3F\x3A\xFA\xC8\x00\x40\x85\x97\x47\xEB\x0C\xC7\x54\xC0\xF4\x06\x34\x2E\xA0\x83\xC2\x7F\x49\x1E\xAD\x2D\x1D\x62\x38\x05\x83\x94\x7E\x5B\xEB\x27\x7E\xE3\xA4\xCB\xEF\xBC\xD1\xE5\x2B\xF9\x93\x1A\xB1\x74\xA5\x00\x49\xBB\x3D\xBC\x58\xB9\xE9\xC4\x8A\x70\x62\xA9\x89\x55\x24\x56\xE1\x17\x72\xA9\xCE\x9D\x75\xC6\xAB\xB6\x01\x52\x28\x81\x0A\xB3\xFD\xA8\x65\x98\x76\xA6\x7D\xF8\xB4\x84\xC1\xBA\x02\x76\xF8\x85\xD7\x47\x81\x6D\x20\x1B\x1F\x78\xBD\x5A\x09\x57\xF8\x2F\xCA\xA3\x75\x41\x27\x62\xA0\x31\xB5\x0D\x02\xD0\x3A\x8B\xD8\xF4\xDB\x00\xAB\x47\xAF\xC4\xDF\x2A\x29\xDF\x9E\x94\xEB\xA4\xFC\xA2\xA4\xDC\x24\xE5\x3B\x62\x79\xE1\x24\xBC\x91\x38\x7E\xE0\xE2\x80\x35\x85\x94\x06\xB0\x32\xFE\x48\xDB\x48\x27\xF1\x33\xFE\x06\xE7\x00\xE3\x42\xB2\x9A\xB4\xC0\x02\x47\x8A\xD0\xDB\xD3\x48\xB2\xF2\x67\x86\xB2\x0C\x74\xE3\x7A\x74\x03\x94\xE3\xE5\x55\xDD\xD1\x30\xB1\x56\x67\x60\x64\xFE\xFB\xDA\x85\x0A\x0D\x94\xFC\x4F\xE2\x02\x98\xEC\x15\xDB\x80\x2D\xC2\x18\x50\x59\xF3\x02\xA6\xA0\xEB\xCC\x8B\x3A\xF7\xA2\x2E\x88\x08\x81\x46\x06\xFB\x2B\x14\x4C\xFE\x35\x6F\xB8\x79\x43\xB8\x81\xDF\xBD\xEE\x77\xDF\xE8\xCB\xF1\xCB\x81\x19\x34\x43\xA6\x5A\x97\x7B\x71\xD0\x59\x7F\x56\x1E\x6D\x06\xFB\x8F\x56\x03\x37\xA4\x2F\xD6\xDC\xC0\x0F\xAF\x6F\x1B\x78\x75\xA8\x1A\x80\x62\x77\xA5\x80\x25\x99\xE3\x81\x51\x9D\x13\xC9\xE9\xAB\xAB\x01\x3C\x01\xF5\xB5\x75\xC1\x27\x65\x50\xA9\x70\x03\xFF\xAF\x0F\x56\x85\x2B\xBC\x39\x50\x15\x38\xE0\x0C\x06\x2C\x5D\x06\x75\x71\xCC\x65\x58\x97\xB4\x20\x2B\x5E\x8D\xF0\xCD\x55\x95\x05\x01\xB8\xAC\xC4\x5E\x81\x4B\x78\x64\x4B\xA7\x56\x26\x57\x20\x0C\xC6\x30\x71\xE5\x1F\xD2\x42\x81\x60\x05\x94\xB5\x57\x6C\x01\x81\x90\xEF\xAF\x8C\x13\x35\xD0\x65\xEE\xAF\xC4\xA3\xAF\x3D\x42\xC2\x2F\x0B\xD0\x3F\x50\x59\xEA\xBF\xA4\x13\xD3\x1A\xF6\xC1\x30\x0D\x44\x62\x5D\xB9\x12\x07\x47\xB0\xA6\x83\x5A\xC0\x31\x00\xD9\xDF\x03\x40\xA2\x5D\xB5\xE2\x27\x97\x13\x90\x9B\xA1\xDF\xC6\x60\x86\x35\x78\x2F\xD5\xA4\xBF\x2E\x79\x07\x6C\xCF\x49\x00\x61\xE6\x06\xCE\xAC\xB9\xCC\x9B\xF5\x63\x75\x06\x43\x03\xDA\xB2\xF5\x80\xE1\x89\xE3\x07\x14\xE5\xFE\x4A\x90\x3F\x39\x41\x16\x24\x64\x23\x5C\x75\xA8\x2A\x88\x16\x2E\x75\xA5\x2B\x0E\x54\x99\xD3\xFE\xD2\xB6\x1E\x30\x55\xC0\xB6\x6A\x88\x94\x51\x02\x50\x64\x9F\x32\xE4\x14\x65\xE0\x02\x36\x40\x15\xD4\xA5\xDC\x7F\xB4\x1A\xBA\x2C\x50\x85\x44\xAA\xC8\x91\x2A\x86\x6E\xE0\x72\xA2\x0A\xB3\xBF\xE3\xD4\x43\x98\xD2\x10\xB9\xEE\x10\x66\x32\x04\x16\x64\xF6\x57\x03\x27\x61\xDC\x40\x62\xE6\x40\x85\xA3\x73\x03\xA2\x88\x01\xD4\x1B\x10\x23\x06\xA0\x37\xA5\x2B\x68\x45\x0E\xBD\x7E\x6C\x95\x11\x25\x5C\xBA\x57\x88\x91\x2E\x59\x2E\x00\x96\x55\x3D\x00\xFC\x3A\xBB\xBF\x92\xA3\xA2\x44\xAC\xEF\xAF\x72\xA7\x80\x3B\x48\x80\x4C\xEE\x94\xCB\x7C\xB1\xEE\x32\xBF\xF1\x25\x7D\xD4\x17\xC7\x8F\x3D\x52\xD0\xC7\x96\x3F\x96\x88\xDA\x0C\x65\x28\x80\x0F\xA9\x04\x06\xC7\xB4\x39\xA8\xAD\x33\xB5\x74\x79\x25\x91\xC5\x99\x8A\xCA\x14\xAA\x1A\x34\x0E\xE8\x0F\x31\x61\xE7\xF6\x07\xF5\xE1\x53\x8B\x7A\x85\xAB\x0E\x54\x9A\xA4\x92\xB3\x6B\xCD\x10\xF8\x00\xC2\xEA\x28\xAC\x60\x67\xFD\xE4\x06\x2F\x9C\x58\xC3\xA1\xF8\x93\x08\x19\x37\xF4\x27\x8F\xAE\xE1\xAA\x11\x20\xFA\x9C\x00\x1E\xBE\xD8\xBA\x01\xFC\x42\x2E\x99\xEF\x11\xC8\x0F\x72\x62\x0B\xD2\x2F\xB4\xC8\xB3\x88\xFD\xE1\x9F\x0C\xDB\x6B\x40\xBA\x96\x5E\x3A\xB1\x06\x00\x2F\x60\x95\x54\x40\x80\xD6\x0D\x9D\x59\x6B\x1B\xC1\x5F\x09\xFC\x8A\x2C\xC5\x86\xC7\x3D\x32\x65\x94\x6B\x07\xC3\x82\x05\x0C\x8F\x70\x77\x06\xAB\x71\xE4\x8B\x16\xE5\xD6\x15\xC8\x2C\x0D\x30\x45\xD7\x6D\xD3\x3E\xAA\xA4\x79\x90\x35\x8D\x79\x3A\x85\xE8\x54\x0A\x93\xA8\x14\x06\x09\x55\xCE\x53\x29\x9C\xA9\x2D\xAE\x93\x9E\x62\x21\xE7\x29\x16\x92\x15\x0B\x39\xA5\x58\x58\xE0\x63\x76\x7F\xA5\x47\x74\x5E\xCD\xAD\x53\x3F\x33\x3A\xCB\x96\x9A\x36\xD0\xB4\xE9\x74\x16\x60\x1E\x9B\xE9\x2C\x17\xD1\x49\x1B\x9D\x7E\xF3\xC1\xF7\xCE\xA4\xAC\x3B\x47\xEF\x97\x5E\xCD\xA5\xBB\xD3\xD2\xC9\x0D\xFE\x61\xC7\xE7\x55\x9F\x5F\x2A\xAF\xE2\xD2\x87\xC1\x36\x6D\x3C\xFE\x20\x69\xD4\x2B\xE2\x0A\x05\x14\x55\xB4\xFC\xAB\x1C\xE0\x57\x7B\x95\x28\x5F\xDA\xDF\x6C\xE4\x41\x4C\xD2\x49\xD5\x9F\xA4\xBA\xBE\x1D\x7F\x80\xE6\x08\x0A\x1B\xEF\xC4\x72\x68\x65\x04\x74\xBF\x57\x15\xA0\x24\xC1\x6E\x22\x77\x62\xAF\x12\x2E\x1F\xBF\x7E\x03\xB5\xDF\x7C\x59\x15\x35\xD1\x44\x46\xDA\xFD\xFB\xD3\xED\xC2\x1F\x87\x3D\x5F\x9E\x6E\x16\xB6\x8B\x38\x2A\x68\x6E\xE4\xBB\x51\x9B\xF8\x6B\x54\xE6\x64\xD2\x2B\x1F\x27\xFC\xC4\x8B\x31\x7E\x72\x09\xFC\xF4\x62\x7C\x2A\x79\xF0\x62\xFC\xCC\xDE\xA3\x17\xE3\xD3\x53\x05\x5E\x8C\x6F\xC6\xA2\xF2\xE7\x36\x35\x10\x4C\x59\x81\x26\xE8\xE1\x61\x94\x2E\x57\x04\x3B\x5B\x08\xF4\xCC\xF8\x4E\x21\xE3\xB3\x2A\x7D\x77\xAE\xC5\x07\x2C\xA0\x6A\xFE\x67\xDE\xB5\xC4\xE2\xF1\x7B\x82\xB5\x26\x32\xB8\x69\x8B\xC1\xD3\xE6\x0D\x6C\xEA\x94\xCD\xD0\x72\x4B\x7B\x1B\xB5\x7E\xE3\x8D\x80\xCB\xB7\xA4\x9B\xAC\x97\xF0\xB1\xF1\xE6\x86\xA2\x9B\xAD\x2C\x42\x7F\x2F\x52\x6B\x8D\x09\xAC\xC4\x8F\x5B\xBF\x21\xFD\x86\x1A\xFF\x17\xDC\xE2\x78\x5D\x5B\x54\xDA\xC6\xAD\xD3\xCE\xB6\x4D\xE6\x9F\x01\x6B\xAA\x75\xD6\x3F\xA3\x25\x3E\x38\x6E\x5D\xE6\x4F\x86\xD2\x93\x69\xE9\x24\x94\x4E\x92\x52\x2A\x82\x67\x8B\x2A\xA4\xFF\x4D\xE2\x9E\xA0\x14\x20\x57\x7D\x5C\xB4\xD0\x02\x03\xCF\x83\x6A\x47\x1C\x0B\xF8\xB5\x25\xD3\xD8\x49\xD2\x6C\xB1\x44\xEF\x73\x19\xB5\x2F\x60\x98\xC0\x14\x50\xEF\xDB\x90\x07\x5B\x1E\xBE\x97\x6D\x5A\x0A\x6A\xB3\xB3\xA8\xF4\x06\x55\x1B\x34\xB1\xB4\x99\x7E\x75\x1A\x61\x86\x7A\x9E\xCB\xD6\xBC\x3E\xDA\x68\x97\xB5\x5E\x1D\xF7\xFA\xFA\xF1\xCF\x06\x15\x04\x44\xD3\x50\x81\x40\x01\xA9\x4B\x5A\x61\x01\x65\x9E\x2C\x2D\x56\xEF\xF3\x8F\x06\x9D\xC7\x59\x27\x0F\xA3\xF4\xC2\x9E\x50\x5E\xAA\x7D\x01\x74\xA0\x29\x64\x2D\xEA\x5C\x7E\x43\x1E\x40\x15\x62\xD4\x3A\xDD\xA2\x82\xE0\x0A\x97\xF9\x47\x1F\x20\xCD\x4A\xB6\x8D\x26\xEE\x3E\x04\xF1\x54\x79\x73\x1C\xFE\x8E\xBC\x5A\x3F\x06\x75\xB1\x74\xC1\xAB\xE3\xFC\x16\x4A\x65\x28\xCD\xD6\xE1\xEF\xE2\xB1\x2B\x85\x72\x45\x25\x41\x3D\x68\xEB\xA1\x2B\x80\x05\x96\xB8\x91\x02\xF8\x00\x77\x2F\x79\x91\xC0\x5E\x68\x41\x49\x25\x4A\x37\x20\x5A\x43\x94\x68\x50\x2D\x14\x2B\x27\xA4\xA6\x94\x4E\xB9\xA1\x1B\xAC\x01\xDB\x18\x90\x83\xC5\x8B\x54\xA0\x42\x5B\x3E\xF5\xC1\x21\xFA\x68\xCE\x72\x64\xA0\x1A\x7F\x70\x2E\xCD\x7F\xB9\xBD\xBD\x7D\x4B\xBD\xDD\xA2\xC9\xF8\x6E\x90\x76\xBF\x74\xF6\xEC\x59\x8D\x96\x54\xAF\xD6\xBD\x7E\x9A\xB7\xB0\x75\x92\xB0\x43\xB3\x4C\x39\x59\x90\xAF\xD2\xEB\xC7\x03\x19\x92\x0E\x90\xD1\xA6\x09\xD4\x13\xA0\x05\xEB\xD5\xF1\x36\x6A\x20\x1A\x16\xA5\xF0\x8A\xC9\xE4\x31\x47\xBB\x57\x12\xD7\xAB\x37\xEB\x28\xF3\xE8\xD3\xDD\xEB\xFE\xD2\xE3\xC7\x7A\xD5\x14\x55\x53\xEB\xA4\x6A\x7F\xCB\xD4\x6B\x43\x3B\x32\x4D\x1B\x8A\x67\x80\x82\xA4\xAE\xE6\xC5\x82\x2B\x74\xDE\xC0\x92\xF5\x8A\xEF\x61\x14\xFE\x11\xDC\xAA\xF4\x8F\x26\x01\x61\xE2\xF8\xF6\x08\xD9\x88\xE9\xC1\x49\x9A\xD9\xBA\x7F\x14\x16\x00\xC3\x34\xFE\xD1\x57\x0A\xED\x8C\x13\x40\xAB\x34\xB8\x92\xF5\x30\xD0\x4B\x78\x9F\xEC\x32\xA0\x37\x84\x5C\xE9\xCC\x97\x81\xF6\xF7\x7D\x55\x89\xEC\x7D\x0F\x80\xC8\x2E\x4F\x8F\x6D\x13\x25\xAF\x93\x3C\xBF\xDD\x9D\xB6\x3E\x9C\x0E\xC8\xFE\xB8\xEB\x01\x0F\x36\xC5\xF8\x36\xA0\x3F\xEA\xA1\xFC\x95\x44\x6F\xB8\x4F\x74\x82\x41\xBE\xCE\x19\x7F\x8F\x68\xFD\x70\xFC\xFC\x53\x28\xFD\xD5\xEB\x48\x5A\xC4\x02\x31\xBE\x85\x6D\x30\xF7\x88\x96\x7E\x13\xE7\x0D\xBF\x35\xFF\x00\xE2\x97\xA4\xC4\xD4\x80\x2F\xCD\xC6\x29\xE0\x12\x06\xBF\x00\xA5\xC3\x50\x43\xA0\x78\x28\x27\xFD\x0B\x9F\x75\x33\x1A\x3D\x6F\xA5\x93\x37\x45\xDA\x8B\x33\xFE\xBE\xA0\xA4\x95\xB7\x58\x99\x4F\x12\x50\x64\x07\x2A\x31\xFE\xF0\x29\x3C\xAF\x1D\xFF\x49\xB4\x42\xC9\xB8\xD0\x66\xBC\x95\x64\xF4\x56\xD2\xE7\xB5\x31\xB1\x81\x4A\x26\xCE\x48\x32\x71\x4E\x23\x17\x1F\x39\xCF\xC5\x47\xCD\x77\xF1\x91\xEC\x84\xC6\x0D\x93\x13\x1A\x8D\x1F\x31\xAC\xA2\x01\x2C\x23\x4F\x14\x3C\xBA\x75\x99\xD7\xD0\xBA\x69\x72\x72\xD0\x40\x37\x27\xE6\xD4\x7A\x66\x86\x9A\x66\xD8\x9D\xB2\x59\x9A\x28\x9E\xB9\xEA\x38\xD5\xA6\x20\x57\x13\x5C\x51\x05\x0D\xB5\x0C\x33\x27\x99\x80\x4D\xC1\xCC\x35\xEA\xCE\x36\x02\x4C\x6F\x02\xB0\xA9\xCF\x00\x60\xF0\xBB\x29\xF8\x5C\x93\xC7\x83\x63\xC1\x36\x6C\x1F\x6E\x2A\x3A\x47\x75\x43\xEB\x00\x59\x26\x90\x84\x66\xEB\x22\x08\x2F\x17\xBA\x3B\x67\xEB\x9B\x61\x65\x4E\x5B\x80\x69\x97\x8F\x7F\x9F\xBA\xCD\xE0\x45\x86\xD8\x09\xBE\x61\x67\x8C\xCC\x26\x0E\x97\xE1\xB8\x91\x7B\x55\x41\xE4\x06\x6C\x52\xF9\x3D\xB8\x40\xF1\x44\x02\xDE\x8D\xC9\xD5\x09\xEA\x8A\x35\x5C\xB3\x87\x2B\x3A\x1D\xAB\x15\x1F\xE1\x82\x2A\xE0\x1F\x31\xF5\x19\x9D\x50\x2B\x3A\x6A\x18\x3F\x87\x20\x42\x4B\x1A\x7B\xED\x35\x88\x8E\x65\x97\x0B\x41\xF5\x6A\xB4\xBA\x8E\x6B\xE9\x82\x63\x50\x68\xB4\x37\x8E\x55\xE2\xF3\x08\x76\x81\x80\xA2\xF2\x06\x28\x13\xB6\xF8\x6C\x98\xA0\x69\xFD\xEB\xA9\xF1\x11\xB6\xD6\x1A\xE5\xEC\xA6\xFD\xC3\x04\x82\x13\x20\x34\x4F\x2F\x4C\x6D\xD1\xEF\x6C\x66\x58\x0D\x36\x17\x87\x80\x42\x48\xB9\x38\x1A\x58\xBF\x01\x6C\x4E\x79\x77\x0C\xE1\xF6\x71\x71\x20\x8E\x36\xB4\xA9\x02\xD8\x15\x8C\x30\x83\x11\xCA\xB0\xB5\x15\xFE\x49\xB0\x58\xA4\xE0\xEA\x8A\xAA\x27\x55\x15\xDA\x64\x69\x52\xAA\x9B\x94\xA4\x49\x29\x20\x64\xB4\xBB\x84\x9E\xC8\xC8\x9D\x02\x15\xDE\xC2\xD6\xC7\xA2\x17\x55\xF9\x4E\x2D\x6D\x64\xE3\x80\x3C\x1C\x46\x43\x00\x0D\xCD\x14\xF4\x51\x68\xAD\xD1\x8C\x0C\xC0\x2E\x7D\x1B\x8F\x3C\x15\xC9\xE3\x0F\xE3\xCC\xAD\x6F\x0E\x54\x40\xED\xEE\x30\x30\x36\x64\xF9\xD8\xA6\x25\x20\x48\x67\x9D\x5E\x73\xE6\x70\x45\xFE\x2C\x78\xD4\xFE\x7F\xB7\x0B\x4F\x14\x59\xF2\xAF\xF7\x70\xBE\x7F\x22\xFE\x57\x24\x25\x22\x13\x32\xA3\xDE\x19\xA6\xE1\xD0\x20\x29\x72\xC6\xA9\x35\xA7\x5B\x6F\xAE\xAA\x0C\x41\xF7\x79\xB8\xE3\xAE\xD0\x82\x3D\xBE\x5C\xC8\xE9\x02\x35\x5D\xA0\x93\x02\x2C\x82\x4D\x06\x36\x4E\xAE\x8C\x08\xBF\x5A\x63\xEF\xB2\x4C\x31\xE5\xA5\x93\xCE\xFA\x2F\x89\x43\x4B\x20\x32\x15\x02\x06\x5D\x16\x19\x6E\xE4\xD7\x03\xF5\xA1\x76\xEE\x33\x27\x97\x48\xB8\x9E\xB6\xA0\xEE\xC9\x04\x87\xB3\x68\xD2\xFB\xD4\x26\xFF\x87\x33\x6D\x24\xC0\xFD\x3F\x98\x32\xFC\x1B\x94\xE9\xBF\x61\x79\x9E\x7F\x79\x59\x84\x9F\x8A\xFF\x0A\xF8\x8F\x96\xF4\x60\xCB\x8C\x4E\x39\x52\x20\x8F\xFC\x07\x7F\xEA\x66\x32\x0D\x8E\x6F\x45\x26\x32\xEA\xA0\x06\x93\x54\x8B\x33\xDF\x94\xFE\x0B\x2F\xE9\x7F\x53\xF6\xBF\xD1\x53\xDF\xD8\xAB\xAA\xA1\x7F\xED\x4B\xE9\x1B\xCB\xDF\x0C\xC3\x37\x16\xBF\x31\xFC\x8D\x58\x56\x3B\xF6\x57\x83\xB4\xBF\x81\xFF\xC4\xEB\xFB\xFD\x0D\x02\x73\x55\xD4\x23\x41\xD0\x8C\x9F\x4B\x88\x17\x68\x37\xE2\x0A\x88\x2B\x78\x2D\xE9\x35\x2D\xC0\xB8\xCC\x2E\x3B\x88\xAD\x05\x9C\x2E\xA0\x11\xF9\x9E\x68\xF6\x0D\xE5\x45\xEF\x69\xD0\x7B\x1A\xF6\x9E\xCA\xDE\xD3\xA8\xF7\x54\x2D\x32\x43\x0D\x0C\xDB\x49\x90\x07\x78\x5C\x72\x37\xF5\x89\x6F\x9F\xDB\xB1\x73\x3A\xB6\x22\x48\xF5\x19\x4A\x47\x5B\x41\xEE\xDC\x9D\xCB\x6C\x13\x9B\x9A\xF0\x19\x39\xB3\x90\xDA\x85\xB6\x70\x34\x96\x38\xE5\x35\x19\xB2\x50\x87\xF6\x93\x96\x0C\x47\xCA\x9F\x38\x1A\xCF\x46\x8D\x13\x6D\x93\x03\x1B\x6E\x9B\x22\x9E\x89\xCA\x16\x6D\x14\xF1\x59\xC1\xB3\xEA\x9E\x35\x3C\xEB\xF0\x9C\x39\x81\x87\xEB\x74\x08\x6D\xD9\xFB\xBB\x45\x32\x11\x6D\x4D\x38\x93\x5C\x19\xCF\xEB\xE3\x71\x1D\x1D\x01\xE2\x77\x06\xA6\x70\x2A\x9C\x32\x85\xD5\x43\xAA\x43\x4E\xA3\x25\x81\x85\xFB\xF6\x0F\x07\xA3\x27\xE0\x60\xFC\xFF\xA2\x7A\x54\xF8\x09\x72\x56\x6A\x1A\x66\x51\xE7\xC8\x07\xBC\x6D\x11\x06\xC5\xF8\x97\x18\x39\x30\x25\x7A\x99\xC3\x66\x83\x6D\x2B\x8D\x20\x0F\x63\xA7\x5C\xBE\x16\xE0\x49\xD0\x94\xCE\x74\xA3\xE0\x71\xA0\xF1\xB2\x29\x88\x1D\xC7\x05\x5F\x78\x47\xE6\xB9\x06\xD0\xEF\xDF\xD4\xF9\xC2\x91\x75\x91\x2C\x08\x02\x9D\xD2\x73\x57\xD0\xD1\x71\x3A\x62\x94\x72\x38\x2F\xA7\xFD\xA8\x1D\x9F\x49\x26\xE7\xDF\xF0\xEA\xD4\xB5\x6E\x19\xB8\x16\x7E\xEA\x0A\x97\x8F\x5F\x8F\x4A\x38\xCE\x6B\x0E\x27\x02\x3D\xE7\x72\x1C\x30\x0A\x81\x3C\xF9\xD7\x7B\x38\xDF\x3F\xAA\x2C\xF3\x3C\x57\x5C\xA2\xF3\x3C\x37\xB9\xCD\xF2\x30\xA3\x11\xFC\xF2\xF8\x2B\x83\x5F\x23\xF8\x65\xE1\xD7\x90\xCE\xC8\x5D\xEE\xAB\x2B\xD1\x40\xE1\x72\x3F\x80\x5F\xDD\xAC\x7B\xD8\xF4\x7F\x70\x6B\xEA\x2E\xE9\xB3\xB6\xB6\x04\xE6\x88\x4B\x5B\x07\x47\x0A\x67\xE3\xD7\x76\xEE\xD7\x23\x80\x55\xE1\xEC\xF8\x75\x48\x68\x45\x39\x0D\x38\x55\xA6\x9F\x10\xF1\xA8\x0E\x37\xB8\xE2\xAF\x22\xCD\xB8\x5B\x71\x25\xD0\x06\x10\x70\xEE\xCC\x5A\xA0\xE1\x9E\x71\x53\x94\x2F\x02\xC5\x71\xFA\xDA\x59\xB4\x6D\x9E\x6C\x17\x2A\x21\x95\x36\x26\x2B\x6C\x51\x14\x79\x51\x8E\xFF\x98\xB6\x37\xC1\xDF\x7C\x31\x3A\x95\x93\x22\x38\x6A\xF8\xE2\x81\x5E\x6B\x4C\xD8\x72\xE1\x19\x13\xAE\x7D\x93\xAE\x7D\x4D\xE6\x72\x5A\xFE\x26\x5D\xFE\x0A\x4D\x23\x64\x21\xC9\x93\x15\x8A\xF3\x8D\xCF\xAA\xC5\x05\x13\x9F\x75\x8B\x3C\x60\xF3\xE5\xAF\x69\xF9\xAB\x2D\x2C\x7F\xE5\xCC\xF8\xBF\x9F\x8A\x1E\x38\x30\xB3\x1C\xE7\x09\x4B\xF1\x9D\x1B\x0C\x8B\x5A\x86\xED\x9E\x0E\xC7\xBA\xBF\x81\xBB\xDE\xDC\xDF\xD8\x2E\x28\x2B\xF0\xF4\x10\xED\xF7\xC0\x5D\x2D\x79\x4B\x38\xE1\xF2\xF1\x6F\x62\x3D\xC9\xAA\xB4\x72\x92\x36\x04\x20\x9A\x46\xA4\x71\x86\xB6\xA4\x1F\x1C\xAC\xC4\xF8\x4F\x4F\x05\xB6\x2D\x9C\xEC\x7F\x1E\x10\x99\x74\xFF\xE3\xED\x82\x15\x5A\x0B\xA9\xC9\x27\x2D\x1F\xBF\x2B\xF1\x30\xFA\x2D\xFA\xCD\x7B\x3E\x55\x3A\x55\x6E\xC0\x7E\x3C\xDC\x7C\xDA\xB1\x3F\x6C\x68\x61\xE3\x49\x1B\x10\xA7\xFC\xE0\x00\x2A\x9C\xDC\x4B\x18\x03\x89\xC1\x58\xAF\x37\xF2\x11\xEA\xC4\x30\x01\xBA\x6F\x38\xFD\x2D\x1B\xA1\x50\x3B\xFD\x0D\x29\x15\x8F\x60\xAA\x1A\xB0\x5D\x9A\x3F\x0C\xC7\xA9\xF1\x6F\xF5\x3B\x82\xD9\x1A\x25\x59\x95\x9E\x3B\xBC\x50\xB3\x3A\x38\x67\x0A\xB8\x3B\x99\xDB\xF2\x16\xA7\xF0\x7F\x75\x67\x1A\xAE\x73\xB9\x55\x4E\xEC\x55\xBB\x01\xC7\xEC\xFE\x0F\x4A\x36\x3A\x4E\x5D\xEA\xD4\x8A\xB8\x42\x8F\xD1\x09\x89\x3C\x91\x92\xB6\xD1\xFC\xE4\xBA\x45\xBB\xA5\xD6\xE5\x56\x5B\xFF\x1F\x16\xF7\x92\x78\x55\x8D\xF6\x11\xB5\x0E\xDB\x49\xA0\x33\x8B\xB2\x5C\x7B\x1B\xBC\x65\x1B\xF9\xB8\x8A\x96\xB3\x5C\x6F\x2C\xDB\x8A\xB2\x4A\xF8\xC9\x62\xD9\x9D\xAB\xEB\xA3\xE4\xF5\x8F\x8C\x85\x65\xBE\x87\x17\x27\x8E\xAE\xD5\xB9\x97\x78\xCB\x27\x73\xAA\x6D\xE0\x35\x76\xEC\x54\x4B\xE7\xF9\xB8\x42\x43\x51\xCA\x0E\x42\xAD\x3E\x53\x08\xA5\x9D\x66\x40\x66\x76\xA8\x78\x10\xE5\xA8\x9F\xB4\x78\xB7\x89\x68\x02\x7A\x9D\x6A\x1D\x5D\x09\x40\xD0\x4D\x5A\xBC\x95\x05\xF8\xB6\x7B\xE9\x8C\x0B\xB7\x93\x2E\xDB\xAB\x60\xB7\x94\xB1\x25\x73\x0D\x35\x25\xBC\x7A\xF3\x17\x64\x77\x5D\x56\xC6\x7F\x14\xCF\x1F\x4D\xAD\xFC\x67\x44\x2D\xBD\xAE\xB5\xFF\xA4\xA8\x33\xAF\x50\x18\x7A\xC3\xA0\x34\xDF\x04\xE5\x7C\x50\x7E\x16\x5A\xF0\xBA\x56\xFE\xEF\x00\x7E\xAA\xD6\xFE\x7E\x80\x9F\x44\x99\x07\xB5\xF3\xD6\x65\x01\xDC\x4E\xB7\x4E\xC6\x07\xD5\xFA\x8F\x13\x26\x82\xCB\xF7\x5E\x65\xBC\x28\x7F\xCD\x74\x96\xA8\xC4\x74\x8D\x1E\x80\xE1\x68\x91\x94\x3C\x3A\x3D\x24\xD4\x18\xBA\x60\x2A\xD6\xDA\xC6\x12\xAA\x32\x42\x95\x05\x54\xE5\x8C\xAA\x02\x50\x85\xA7\x09\xC1\x44\x99\x01\xB6\x06\x5E\x80\x7A\x80\xE6\xA9\x80\xAD\x0C\xB1\x05\x53\xB1\x7A\x1F\x08\xFF\xB6\x31\x11\x5B\x36\xC1\x96\x09\x45\xE9\x49\x7B\xA8\x25\x7B\x07\xEB\xA1\x54\x75\x32\x90\x0C\x5E\x01\x5B\x20\xD8\x6A\x5B\xBA\x01\x61\x0B\x7A\x9D\x6A\x1D\xB4\xB1\xDA\xBA\x01\x7B\x9F\x21\xB6\xF2\x88\x2D\xEB\x84\x2B\x08\x5B\x7C\x92\x6C\xD7\xDA\xC6\x00\xB6\xC2\xCD\x14\x8D\x13\xA6\xC3\x40\x9C\x2E\x1D\x17\xA0\x01\x4D\x83\x8C\x2F\xD8\x78\x66\xA0\x73\x85\xF3\x0E\xAE\x0A\xD8\x60\x4B\x9E\x74\x71\x66\xA1\x54\xB5\x38\xC9\xA9\x52\xDD\xA2\x55\x22\x29\xAD\x0D\x5A\xD9\x4C\xB0\xB2\x85\xC9\xC6\xFE\xFA\x33\xE5\x4F\x7A\x13\x06\x4A\x42\x62\x01\x58\xA5\x56\x79\x5B\xFE\xA6\xC1\x23\xDF\x4E\x49\xDA\x23\x24\x5A\xA7\x84\xA4\x23\xA4\xCB\x74\x31\x7E\x2F\x8B\x58\x3C\x60\x65\x7B\xAD\x21\x3A\x42\xF7\x9B\x11\x1D\x03\xB6\x41\x57\xB2\x44\x4A\x12\x48\x29\x63\x52\xCA\xE3\xAA\x47\xD5\xC5\x02\x58\x0B\x3E\xB3\xB1\x09\x1D\x59\xA4\x23\xD4\x2B\xF4\x3E\x97\x3B\x34\xCD\x05\x3A\x92\x09\x1D\xE9\x50\x14\x9E\x23\x1D\xC9\x84\x8E\x74\xA4\x23\x99\xD0\x91\x65\x0F\xBB\x40\x47\x30\xE5\x5A\xA2\xDB\x89\xE0\x5E\xA7\x5A\x67\x85\x0A\xBD\x18\x0B\x06\x6B\x16\xE9\x48\x12\x55\x01\x1D\xE5\x6C\x91\x58\x6B\x1B\x8D\xAB\xDE\xEC\xAF\x14\xE9\x89\x05\xEA\x8D\x1D\x0D\xE1\xD9\x0D\xEA\x89\x39\xBB\x17\x6A\xE8\x18\x7D\x0C\x75\x4A\x17\x38\xA1\x60\x7E\x4D\x4B\x55\x8B\x13\x9C\x2A\xD5\x50\xDA\xA7\x21\x0D\x73\x0A\x4E\x85\x78\x94\xFB\xBC\x67\x47\xFD\x1B\xF0\x12\xA6\x1E\x47\x30\xA5\x48\x52\x23\xBD\xE9\xEB\xC8\x82\xDE\x76\x89\x1C\x6E\xE6\x98\x9D\x50\x4A\x77\xAD\x3D\x50\x88\x99\xA1\x90\x9A\xB7\x28\x1D\x91\x18\x76\xC2\x99\x25\x92\xC2\x4B\xF4\x5F\xC9\x9D\x6E\x61\x27\xC2\x38\xD3\x09\x91\xD8\x50\x94\x2C\x92\x58\x4B\x76\xA5\xAA\x2B\x8D\xE0\x2C\x58\x92\x05\x22\x01\x32\x04\x75\xC8\x04\x22\xD1\xED\x54\xEB\x3D\xAF\x98\x19\x22\xD1\x33\x44\xA2\x23\x91\x68\xDF\x74\xAC\x1D\xCD\x17\x7B\x15\x1D\x27\x4A\xF6\x2E\x67\xA3\x45\xF0\x5F\x26\xC3\xF6\x00\x8D\xDC\x43\xDA\x0A\x0F\x7D\x73\x00\xFF\xF0\x46\xD9\x9D\x1B\xEC\xC3\x29\xB0\xE7\xDF\x50\x60\x1F\x5E\x18\xD8\xDD\x20\xEA\x36\xD0\x06\x6D\x70\xCF\x0D\xB7\x72\x0A\x6E\xD9\x37\x14\xDC\xCA\x0B\x24\xD7\x0F\x8B\xF9\xF4\x1A\x05\xC9\x10\x36\x2F\x97\x18\x65\xAD\xB6\x73\xFE\x49\x51\x22\xA5\x1E\xAC\xCC\xF9\x41\x3E\x4D\xAA\xC3\x6F\x28\x90\x3F\x40\x52\x7D\x00\x70\x1B\xFC\x4B\x84\x9B\xFF\xB4\xE8\x03\x4E\x6F\x1D\x70\xC5\xBF\x48\xC0\xDD\x3F\x05\x38\xB5\x75\xC0\xFD\x8B\x14\x2A\xB4\xCD\xDB\x4C\xAA\xE8\x0B\x02\xDC\x37\x96\x54\xB9\x50\xC0\xFD\x5D\x07\xB8\x47\x5C\x29\x64\xFC\xA5\x82\xA4\xD1\xEC\xCE\x32\x80\x26\x94\xAF\x5A\xAF\xFD\xDD\x1B\x68\xDB\x62\xC7\x96\x69\x9D\x53\xF5\xC0\x3D\x05\xEC\xFD\x95\xF9\x17\x08\x66\xA7\xF6\x88\xAA\x3B\x57\xD8\x23\x16\x22\xAC\x15\xF6\x2A\x1C\xD4\x0C\x8E\x19\xB2\x73\x65\x38\xCF\xEA\x9F\xD6\xE4\xF5\x37\x14\x11\x3F\x30\x4D\x9E\xF6\xDD\xE8\xB4\x3C\x99\xB9\xF8\xB9\x43\xF4\xA2\xCA\xFC\x3E\x7A\x61\xFD\xB4\x91\x76\xE2\x4F\xCE\xDA\x30\xA2\xBF\xD5\xA4\x5D\xC8\x85\xD4\xCA\x64\x36\x0F\x11\xF4\x82\xC3\x4A\x72\xF8\xA6\x92\xC3\x37\xB6\x5D\x34\x36\x6E\xC3\xC9\xDB\x2F\x1C\xBE\xC9\xD4\x76\xE9\xC9\x7A\x49\xC7\x39\xB0\x2F\xB5\xB0\x25\x55\x73\xB7\xE1\x6A\x6A\xA3\xAC\xE6\x6E\xC3\xD5\xDC\x6D\x78\xB6\xC9\x36\x9C\x0F\xDF\xEC\xA6\xDB\xF0\xDE\xE1\x9B\xE9\x6D\xC3\x2D\xE1\xC5\x76\xDB\x70\x74\x8C\x77\x32\xD5\x03\xFE\x4E\x44\x8A\xFF\x24\xFA\x42\xC6\x9F\x3A\x60\x8E\xF7\xB6\x6C\x58\x78\x4F\x62\x64\xF8\xDD\xE4\xF7\xEF\x74\xBF\xFD\x9F\x0A\xFF\x11\xE1\xD1\x99\x7E\xFC\x07\xD1\x16\x4D\x31\x89\x92\x0A\xA7\xD3\x0A\xD8\xC8\xFB\x92\x46\xFE\x51\xF8\x7F\x12\xFE\xE6\xAE\x0E\x59\x31\x3E\x97\xCB\x6C\x12\x30\x6D\xBB\x45\x98\x11\xA6\x73\xC2\x74\x06\x98\x2E\x18\xD3\x83\x88\x69\x74\xCA\xCE\x01\xD3\x19\x1F\xDC\xE5\x09\xA6\x73\xC4\xF4\x90\x0F\xEE\x06\xCE\xB6\x4D\x3E\xF7\xE0\x2E\x77\xFD\xA3\xB5\x7C\xEE\xC1\x5D\x3E\xF7\xE0\x6E\xB8\xC9\xC1\x5D\x46\x98\x1E\x6C\x7A\x70\x97\x01\xA6\x33\xC6\x74\xD1\x3B\xB8\x1B\x10\xA6\x07\x2E\x1E\xDC\x59\xC4\xB4\x75\x6A\xCE\x0A\x44\x73\x26\x06\x75\xB2\x49\x50\x27\xE6\x4F\xDF\x84\xEC\x85\x41\xD6\x5F\x3E\x0D\xD9\xD2\x29\xFC\x44\x3A\xE5\xCC\x36\xE4\x6B\x28\x57\x05\xB9\xBB\x5F\x08\x58\xD5\x37\x2E\x58\xD5\x05\x12\xAC\x9E\x43\xB0\x79\xE9\xF2\x72\x84\x1E\x6C\x2C\x18\x5E\xA8\xA5\x9D\xA0\x18\xF8\x8D\x10\x2E\xA5\xCF\xFA\x6D\x88\x12\xD7\x68\x82\xAF\x9A\xCF\xFA\xBB\x83\x6D\xC5\xAC\x5F\x27\xF0\xD5\xB3\xAC\xFF\xC1\x3F\x81\xDD\x8C\xF5\xAB\xF3\xB1\x7E\x90\x42\x18\x73\x72\x2B\xAC\xFF\x33\x1D\xEB\xFF\x78\xC7\xFA\x3F\xDB\xB1\xFE\x65\xE4\xFC\xF0\xEB\xB2\x2B\x85\x09\xA8\xB0\xA9\x0C\x60\xD6\x9C\xB0\xEF\xF2\x94\x91\xF9\x66\x57\xA9\xD9\x8D\x2D\x89\x7F\x63\xC8\x4F\x29\xA0\xB3\x31\xFB\xF1\x52\x88\xD3\x7E\x77\xEB\xD1\x77\x5B\xFB\x71\x8B\xD7\x85\xF9\xF2\x30\x22\xA6\x68\x9D\x1A\xFF\xB7\x88\xC1\x67\xD0\x85\x56\xE1\xEC\xF8\x03\xC8\xC6\x32\x6A\xAE\x36\x2E\x1B\xFF\x26\x1A\xB4\xED\xF8\x4F\xE8\x2E\x52\x25\xE3\x12\x34\x33\x4B\xD0\x26\x4B\xB0\x6F\xEF\x31\xD3\x47\xB0\x19\x5F\xC3\x98\x55\xDC\x06\x5E\xA2\xD3\x72\x81\x41\x06\x22\x95\x98\x59\xC5\xCD\xCC\x2A\x6E\x66\xAE\xE2\x66\x12\x2A\x19\xD0\x1D\x79\x13\xA8\x04\xF4\xB1\xDA\xC4\x55\x08\xBD\x4E\xB5\xCE\x77\xE0\x7B\xAB\xB0\xB3\xF7\x98\x19\x7B\x8F\x09\xF6\x1E\x67\xFC\x95\xD3\xAB\x70\x56\x39\x9B\xB9\x38\xCA\x6B\xD2\x6F\x04\xE1\x80\x6A\x95\xF0\x1B\x45\x4F\x5B\x54\xD4\xA9\x8A\xDA\x22\xB7\x4E\xAD\x76\x2B\x59\x75\x68\x4A\x2C\xA8\x53\x2A\x5C\xE7\x7E\x7E\x3E\xE3\x69\xC6\xC6\x53\xFB\x95\x31\x9E\x66\xE7\x36\x9E\xDA\x0B\x33\x9E\x9A\x9E\xF1\xB4\xBF\x88\x53\xE3\xA9\x98\x45\xCF\xB2\x62\x37\x1D\x41\x24\xEF\x45\xF9\xD8\x9E\x33\x81\x0C\xC6\xD0\xB8\xC6\x64\x5C\x63\x92\x2E\xE8\x4B\x58\x61\x82\x56\x18\x5E\xD2\x49\x7C\x07\x1E\xB7\x49\x63\xE3\x76\x05\x7E\x8E\x7B\xCD\xC8\xBD\x6A\xF7\x39\x5B\xBB\x55\x03\x66\xC4\x5E\x75\xFB\xAB\x6F\x81\xB1\xEE\xC3\x18\x35\xFE\x13\xB7\xDF\xB2\x21\xF6\xAA\xCF\xDF\x8E\x85\xFE\xB3\xF4\x78\x1F\x3D\x42\xE3\x9F\xE0\x37\xEF\xA1\x37\x1F\xE4\xC7\xF7\xD3\xE3\xFB\xBA\x8A\xEF\xE1\x37\xAF\xA1\x37\x6F\xE7\xC7\x37\xD3\xE3\x1B\xBB\x8A\xAF\xE1\x37\xB7\xD2\x9B\x9F\xE3\xC7\x17\xD3\xE3\x8B\xBA\x8A\xB7\xF2\x9B\x4F\xDC\x46\x63\xBC\x8D\xC7\x48\x8F\xF7\xDD\xD6\x8D\x91\x7E\x3A\xE1\xC7\xEB\x7B\xD5\x1D\x34\x41\x80\xF8\x17\x6F\x8F\x3F\x3F\xDB\xFD\xFC\x70\xF7\xF3\xFD\xDD\xCF\x5F\xEB\x7E\xBE\xB9\xFB\xF9\xF3\xDD\xCF\x17\x77\x3F\xBF\x78\x5B\xD7\x6E\x37\x8C\xF7\xBC\x3A\xFE\xBC\xA7\xFB\xF9\xF6\xEE\xE7\x1B\xE1\x67\x59\x0A\x2F\x96\x09\x0D\xE5\x67\xD5\x37\x1E\x12\x22\x89\x7D\xDD\x62\xE0\x05\xEC\xA8\x47\x61\x1F\xC4\xB2\xFA\x18\x34\xE1\xC4\x61\xBA\x0A\x0F\x25\x37\xDF\x1E\x4B\x14\x95\xDC\xD1\x95\xE8\x5A\xFA\x7B\xE1\x11\x54\x98\x65\xF5\x2E\x7A\xB3\x4A\xE1\x2B\xEC\xBA\xBF\x17\x9A\x43\x66\xA4\xFC\x8E\x96\x3C\x7E\x12\xEF\x7E\xDA\xFB\x8E\x29\x60\xAE\xD3\x18\x18\x87\xF8\xAF\x5C\x56\xC8\xBA\xD1\xCA\x86\xB7\xB6\x31\xAC\xA7\x19\x19\xF6\x6C\x34\xD3\x1F\x1A\xBC\x46\xD4\xF2\xD5\x18\x09\x6F\x32\xBE\x54\xE1\x04\x6C\x9B\x77\xE0\x55\x45\x6C\x97\xE2\x06\x36\xDA\x65\x4E\xAC\xF9\xF5\x16\x39\x12\x74\x9C\x39\x4D\xFE\x4D\xE3\x96\xFC\x47\x24\x5D\xE7\xB2\x78\x2C\x41\xC3\x30\x2D\x45\xC3\x8D\x66\xF8\x0C\x66\xCC\x0D\xB0\xB2\x49\x61\x03\xFB\xF5\x15\xFA\x08\x6A\xB6\xFC\x52\xD4\x6E\x9A\x4A\xE9\xBB\x85\xD0\x48\x47\x6E\xFE\xF8\x84\xCA\x23\x80\x1C\x1E\x56\xF9\x88\x67\x7C\x1C\x3D\xA8\xF7\x09\xF2\xFA\x7C\xF7\x2B\x3A\xAF\x4F\x6A\x08\x6B\xC3\x24\x60\x66\xF8\x50\x32\xF8\x78\x3E\x23\x59\x92\x87\x58\x78\x51\xA0\xFB\x40\xF9\x8F\x46\x0E\xE6\x91\x83\x5F\x6F\x1B\x85\xAE\xDA\x33\x84\xA1\x67\x08\x43\xF7\x09\xC3\x74\x84\xA1\x67\x08\x03\x05\xFE\xB8\xC5\x0B\xD3\x3B\xDA\x3A\xC3\xA8\x14\x75\x8E\x57\xAD\x9A\x82\x6E\x83\x38\x59\x0F\x10\x01\x8D\x74\x0A\x2F\x15\xF9\x02\xBE\x90\x2E\x3B\x18\xAE\xF6\x84\x30\x28\x78\x6B\x19\xF0\x22\xE9\xB4\x77\x00\x4F\x02\xF4\xDB\x51\xEB\x30\xC2\xF1\x00\x6D\xEB\x7E\x84\x38\x37\x7E\x37\x93\x50\x71\xA0\x52\x11\x07\xB8\xA3\x91\x44\x43\x03\xFC\xD4\x1E\xAC\xB4\x33\x1C\xAE\x19\x05\x0C\x9E\x43\x81\x02\xE6\x06\x40\x41\xB0\x87\xC0\x6F\x9D\xC4\xF8\x24\xE8\x33\x3B\x40\xCD\xC1\x09\x3C\x4E\x23\x67\xED\x13\x6D\x23\x61\x32\x48\x84\x03\xDE\x99\xF8\x9B\x5A\xDA\x95\x48\x94\xD2\x74\xB6\xAA\x71\xCE\x73\x47\x2A\xCF\x3D\x52\xB5\xB5\x91\x62\xF8\x6D\x18\x98\xC5\x90\x0B\xB3\xA3\xB2\x71\x54\xBD\x51\x88\x73\x8F\x42\x6E\x69\x14\x65\x59\xFE\x1B\x29\x27\x8E\xEF\x53\x3A\x22\x3A\x8C\x84\x8F\x9B\x5A\xB9\xBA\x34\xFE\x79\x0E\x0A\xC7\x5A\x86\x93\xE5\xBF\x42\x8D\xCD\x17\xA0\x6C\xBD\x74\xA3\xE7\xFC\xAC\xD6\x3D\xB2\x38\x68\xA3\xBC\xEC\x02\xEA\x51\xBC\x89\x3D\x52\x4D\x7C\x50\x22\x91\xA9\xB2\x6B\x28\x50\x38\xAC\x9D\xF7\xE1\xA0\x39\xCE\xC3\xF7\x40\x6D\xB1\x4C\x85\xB5\x88\x1F\xD2\x2A\xE3\x0F\x51\x0F\x0C\x1F\xE2\x1B\x53\xEE\x12\xB4\x52\xB1\x70\x59\x85\x76\xCB\x6F\x15\x4E\xBC\x2E\x04\x66\x48\x2A\x90\x96\x8A\xDE\xA3\xE5\x93\xBB\xAB\xB9\x3D\x6D\x08\x34\x9E\xD7\x8D\xFF\x3F\x76\xF3\x15\xB4\x80\xE3\xF7\x18\xD1\xE1\xAD\xA7\xA2\x6E\x0C\xEC\x87\xA2\x37\x24\xAA\xD1\x5B\xFB\x71\x25\x44\xD8\x49\x79\xB1\x47\xBC\x1F\x5A\xAA\x84\xFF\x20\xFC\x1D\x9F\xA1\xEB\xF2\x00\xA0\x8F\xA1\x50\xF9\x22\x16\xBF\x9E\x8B\xCD\x5E\xF5\xE2\x3B\xA2\x5C\xBA\x95\x7E\x52\x54\x3F\xA0\x87\xDB\xEF\x20\xB6\x82\xE1\x5C\xA5\x97\xF4\x35\x32\xF6\x98\x3A\x81\x23\xE2\xFB\xCF\x9C\xEE\xB1\x37\x79\x25\x8D\x04\x70\x17\x8E\x70\xCB\x82\x87\x05\x3F\xB0\xA9\x72\x7B\x88\x11\x12\x02\xED\x95\xE5\xE7\x94\xD2\x5D\x7A\x94\x7B\xC4\x66\xD7\x9A\x39\x40\x2A\x07\x92\x7E\x54\xB7\x8F\x0C\x3E\x59\x52\xE8\x2E\xEA\x36\x0C\xB3\xD6\x4E\xE3\xB6\x9B\xAE\xC0\xE3\x8E\xC1\x69\xA2\xD7\x46\xB4\x3E\x9C\xD0\xF2\x34\xA5\x7F\x54\x3B\x7E\x5B\x17\x8F\xFB\x51\x33\x81\xC1\x39\xF4\x45\x12\xDD\x1B\xFA\xBF\x4C\x17\x8D\x41\x8D\xB7\x38\xB1\x72\xF6\xEC\xD9\xB3\x8B\x3F\x40\x97\x47\xEF\xA4\xD9\x53\xC3\x1F\x0D\xBE\xFC\xD2\x99\x2B\x34\x39\x80\x8D\x5B\xEF\xFC\xDF\xBE\x02\x83\x3A\x91\x81\xC6\x3B\x98\xE5\x5F\x25\x6B\x81\xB1\xA3\xA8\xFA\x07\xA7\x46\x5A\x26\x43\x7D\x77\xBA\x82\x14\xDE\x48\xF4\x6F\x79\x76\x1A\x75\xD1\xDF\x23\xBA\xCB\xDD\x2F\x38\x47\x34\xF3\x18\xC5\x3C\x44\xED\xE6\x68\xDD\x1F\x8B\xB3\xE6\x48\xDD\x21\xB8\xAF\x8A\xAB\x83\xAE\x2B\x88\xF1\xDB\x03\x22\xBA\x28\xCD\xE4\x61\xC9\xD1\x4A\xA6\x23\x94\x3C\xE3\x41\x18\xCD\x66\xA3\x40\xBE\x75\xCE\xDE\x6F\xD7\x5D\x84\xA3\xB9\xDD\x9F\x23\x9C\x79\x24\x9F\x51\x3B\x7E\xF6\xE9\x5E\x38\xF7\x10\x8E\x9B\x42\x3B\x72\x9D\x4F\xC4\x70\xA1\x21\xE8\xFB\xBB\x9F\xDF\x23\xB2\x10\x3A\xD3\xF4\x5B\xE0\x2B\xD7\x18\x8E\x92\xA3\x69\xE9\x24\x6E\x76\x03\x1B\xE1\x64\x28\x9F\x99\x8A\x2C\xDF\xEB\x24\xA4\x1B\xC1\x58\x4F\x12\xF8\xED\xF8\xB9\xA7\xD1\xFD\xD5\xCB\x75\x5A\x2E\xA4\x7D\x14\xE8\x43\x17\x86\xFE\xBC\xD3\x08\x80\xF3\x0C\xBD\x23\x59\x5C\x70\xCE\xF8\x61\x3A\xB0\xE7\x9F\x3E\xC7\xC0\xE0\x93\x10\x60\xA6\x17\x8B\xE0\x35\xEA\x3C\x18\xE2\xC8\x37\x01\x33\x69\x40\x59\x20\xD4\x24\x6C\x75\x33\x85\xB4\x73\x42\x4A\x44\x48\xA9\x12\x63\x33\x0F\x19\x52\x62\x16\x52\xC2\x0F\x9D\x4E\x21\xB5\x29\x92\x75\x0F\x52\x1C\x0D\x0B\xA3\x92\x7D\xB9\x90\x12\xE5\x8D\xE7\x59\x49\x6A\x7E\x76\x82\x73\x41\xE4\xA3\x73\x20\x32\x85\x9F\x93\x0F\xB0\x57\x50\x56\xEE\x88\x92\x8A\xBA\xFF\xDC\x54\xF7\x2F\xFC\xB9\xF3\x76\xBF\x31\x37\x18\x7D\x88\x50\x16\x42\xFD\xCE\x8D\x30\xCF\x3D\xAB\xB4\x67\xC5\x3D\x7F\xE8\x15\xB3\x3D\x87\x48\xE6\x53\xE1\x58\x1F\x4C\x00\xFC\xFD\x14\x00\xFE\xF1\xA5\x5F\x2D\x00\x9C\x3A\xDD\x07\xC0\x1D\x3F\x75\xC1\x00\xD8\x34\x1F\xC0\x5F\x86\xE3\x1E\xFE\x35\x13\x4B\x7F\x5A\x27\xF0\x58\x1B\x23\x7B\x46\xEE\x77\xDE\x91\x7F\xEA\x99\x73\xA2\xCD\x27\x33\x79\xC1\xCB\x7B\xEB\xEF\xAF\x36\xE6\xE5\x03\xB8\x3B\x39\xB3\x9E\x33\x07\x1D\xE7\x60\x42\x08\x0C\x8C\x52\x43\x73\xD0\x09\xBF\xE6\x1B\xCA\x30\x07\xD3\xC9\x80\x30\xF6\xC0\x44\x70\xEB\x69\x3A\x96\x02\xDA\xBA\x13\xAB\x4B\x8D\xED\x31\x17\xBC\xC9\x63\xFD\x10\x39\x44\x60\x2E\x97\x24\x73\x4B\x19\x43\x38\x9B\x56\xB0\xDF\xCA\x9C\xF5\x39\x45\x6D\xCD\xC3\x11\x75\xBE\x8A\x37\x15\x30\x3C\xBB\xF5\x37\x91\xA3\x79\x0E\x5B\x85\x95\x53\x1B\x37\x6F\xBC\x68\xE3\x1E\x71\x85\x04\xE0\xDE\xD4\x4E\x15\x8C\xD1\xC9\xDB\xE5\xB0\x0B\xCC\x63\xFC\x55\xE1\x32\x97\x7B\xB9\xDE\xA2\x45\x44\x7A\xF9\x48\x49\x47\xA2\x78\xC5\x8E\xA2\xAD\x96\x81\xF5\x4A\x1C\x97\xB3\x5E\x44\xA1\xA0\x52\x56\x37\x6F\x46\x14\x13\xF9\x25\x3D\x86\x69\xFA\xC8\xBF\x7F\x0A\xD9\x2F\x7B\x69\x2F\x57\x42\x8F\x26\xE2\x48\x3A\x31\x90\x10\x50\x48\xA0\x21\x66\x08\xE8\x8D\x73\x22\x58\xA3\x51\xA6\x23\x20\xF9\xB5\x5E\x04\x7F\x73\x9E\x45\xF0\xFB\xB7\x5C\xC0\x22\xF8\x1A\xCF\xE1\xFE\xF3\xCC\xE1\xFD\xCF\xBE\x80\x39\x9C\x33\x57\x4F\x2F\x0E\xFA\xF9\xA5\xE1\x67\xA7\x08\x22\x70\xE5\xE7\xBF\xA4\x97\xAB\x27\x0E\xA4\x27\x8D\x5F\xA6\xE7\x25\xE4\x48\x22\x02\xA6\x49\x73\xD0\xD7\x84\xC2\x1B\x72\x24\x73\x19\xA2\xD6\x73\x14\xD8\x18\xA1\x9E\x42\x86\xEB\xB2\xCB\x07\x23\x09\x7C\x9D\x7A\x19\x00\xF6\xAA\x64\x2D\xF1\xCD\x55\xCD\xA1\xE0\xE4\x55\x1C\xFA\x46\x8C\x3F\x41\x66\xB7\x4A\xF8\x2F\xF4\x34\x15\x67\x38\x68\x0D\x87\x3D\x6F\x2E\xB0\x27\x67\xFC\xE4\x6A\x3A\xC7\xB8\xF0\x1E\x3E\xB9\xC5\x1E\x60\xFC\x65\x8C\xD5\x5F\x76\x6A\xA0\xA6\x78\x9B\x53\x41\xFC\xFB\x02\xEB\x53\x52\x16\x93\x70\x8C\xD0\xCB\x1F\xA2\x42\x8A\x30\xCE\xC2\xC3\xF1\x4B\x39\x12\x92\x5D\x56\x85\x97\x07\x38\x5C\xA0\xA9\x73\x27\x43\x44\x68\x67\x9C\xA5\x8B\x6A\x14\xE5\x88\x43\x26\x61\xA4\xB2\x22\x5C\x66\xA5\x03\x03\xA7\x31\x02\x5B\x12\x46\x69\xD2\x2E\x64\x86\xF2\x0C\x97\xF0\x16\xAF\xAF\xB7\x75\x1E\x5C\xCD\xB0\xDF\x49\xDB\xE8\x55\x8E\x55\x60\x29\xFC\x13\x0D\x8B\xEE\x6A\xF3\x61\xC4\x74\x52\xB4\xD2\xC9\xF2\x25\x4A\xEA\x09\xE3\x5F\xA6\xB7\xC0\xD3\xC4\xA3\xB8\x8B\x76\xA2\x17\xA8\x4A\xE9\x7D\x21\x93\x9E\x4A\xE2\x2E\xCD\x4D\x3B\x16\xB2\xE6\x51\x02\x04\xFF\x82\x5F\x04\x74\xA1\x29\x76\xFC\x72\xEC\x23\x2D\x79\x09\xC2\x63\x26\x0D\x5A\xAF\x33\xFF\xC2\x3B\xE2\x07\xBD\x8F\x5F\x8C\x25\xBF\x94\xBC\xDD\xD8\x98\x7A\x7B\xAE\x81\x96\x18\x46\xB8\x74\xAA\xFC\x09\x69\x22\x58\xF0\x3C\x4A\x74\x2E\x30\x42\xCF\xCD\x6C\xA7\x04\x06\xDB\xD4\x1C\xE0\x85\xD0\x5C\x93\xEB\xF4\xF8\xEF\x23\x99\xD3\x35\xF2\x48\xDD\x5D\xC2\x34\xC6\xC8\x2F\x6A\x85\x81\xEA\x31\x3C\xB2\x4B\xAE\x74\xCF\xF7\x6A\xCB\xB2\x40\x1C\xB4\xB1\xEE\xDC\xDD\x28\xE7\xB5\x32\x25\x34\xC2\x14\xAD\x92\x99\xE8\xFD\x15\xE7\x04\x74\x9A\x06\x0B\x5B\x19\x36\xDD\xFE\x43\xB0\xB7\x63\xB0\x07\x67\x02\x09\x41\xDD\x7B\x02\xFD\x8E\x4C\x0C\x16\xC6\x4E\x14\x66\x7F\xA5\x62\xC8\x2B\xD1\x0B\x79\xC5\x16\x4E\xCC\x76\x68\x70\x51\x00\x14\xE6\xF4\x66\x42\x94\xAB\xD9\x84\x88\x1C\x10\xCB\x70\x08\xB0\x70\xE3\x3E\x90\xE6\x0A\x2D\xBD\x34\xD3\x61\x8B\x0E\x11\x2E\xA3\x33\x80\x95\x21\xFD\x1D\xFF\x34\xFE\x77\x6E\xE7\x1C\xD9\x8B\xD3\x3F\x66\x2B\xF2\x44\x93\x61\x12\x9D\x27\xC6\x88\x5E\x48\x21\x7F\xA8\x95\x65\x3C\xF1\x2A\x7B\xCB\xA9\x99\x3C\x13\xD9\xC1\x18\x17\x2D\x45\x0D\x26\xDE\x16\x52\x47\xB4\x70\x84\x09\x8C\x2A\x00\x92\x64\xB5\xD1\x4B\x8D\x89\xA8\xB2\x30\x36\x4E\x29\xA3\x97\x78\x82\xDA\x59\x9A\x01\x45\xA3\xB6\x11\x87\xFC\x6B\xFC\x85\x8D\x18\x09\x5C\x39\xEB\xB2\x80\x43\x13\xFD\xB9\x2C\x9A\xA0\xE3\xED\x7F\x1D\x92\x9D\x1A\xD0\x59\x91\xF2\xB2\x0E\x96\x59\xC0\xA4\x65\x5B\xF5\x3C\x4C\x7E\xA1\x03\xA6\xEE\x30\x69\x91\x43\xA6\x98\x64\xEE\x85\x5E\xB2\xD0\x55\x27\x82\x1C\xA5\x82\x84\xC2\x15\x51\xE7\xDE\xF4\xA8\x89\xF1\x99\x9F\x03\x9F\x53\x43\x60\x7C\x5A\x32\x44\xE4\x80\xCF\x3C\xE0\xB3\xE4\x59\xC2\xC0\xCA\x77\x70\x76\xCD\xF4\x7C\x31\x3B\xD8\x47\xE7\x81\x34\xE7\x54\xFA\x90\x1F\xAC\x64\xB7\xC8\x64\xBA\xC8\x3A\x76\x91\x06\xFF\x93\x02\xD8\x05\xB1\xFB\x6E\xDD\xD5\x86\xA2\x3A\x18\x3E\xFE\xB5\x21\xBE\x24\x40\x30\xE0\x4F\xA6\x6B\x10\x13\x4D\x7D\x57\x97\x46\x31\x1D\x39\x70\x23\x3C\x8C\xA6\xC6\x04\x27\x2D\x35\x14\xA1\xE0\x0B\x73\x92\x6A\x6D\x71\xBE\x1D\xD9\x74\x33\x36\xE7\x9E\xB1\xE1\x1C\x93\x81\x62\x6A\x4A\x91\xC2\x81\x25\xA0\x98\x9B\xC1\xFD\xC1\x2C\xD7\x8A\x71\xF9\x00\xB7\x21\x28\x5F\x07\x30\x19\x00\x26\x13\x80\x89\x7E\xAB\x4E\x95\xFF\x36\x26\xAD\xEC\x03\x2C\x5D\xB7\x08\xB9\xB3\x9D\x43\xE9\x8B\x14\xC8\x84\x6E\xC1\x8A\x29\x24\x23\x6F\x7C\x2B\x61\x11\x71\x44\xBF\x2D\x06\xF6\xAB\x3B\xAF\x79\x8C\x36\x07\xCB\x26\x05\xB2\x0D\x72\xDF\xCE\x96\xE2\x82\x3D\x1B\x7C\x69\x12\x76\xDC\xE7\xC6\x25\x9F\xFB\x4E\xE5\x2A\x96\xBD\x54\xA7\x81\x1E\xE1\x53\x90\xDA\xEF\x38\x15\x33\x8A\xA1\xD9\x34\x81\x1A\x06\x4A\xD4\x69\x94\xC8\x7E\xAA\x62\x55\xFE\xC0\x7C\x28\x26\x78\x9F\xA5\x19\x27\xC7\x9F\xDF\x88\x98\x82\x97\x9F\xDB\x88\x5C\x98\x00\xFD\x60\x36\xFB\x85\xAE\xD9\x17\xCF\x59\xDF\xF9\xC1\x7E\x43\xA2\x2F\xCE\xF4\xE6\x49\x9F\x6D\x17\x1F\xD2\xF6\xE3\x43\xE2\xE3\x7C\xC6\xA7\x23\x0C\x75\x80\xE1\xBB\x2E\x64\x54\x28\x18\xE8\xEC\x74\xD4\x68\x40\xD6\xEA\xD2\xF8\x23\x81\xD9\x70\xBC\x56\xAC\x44\x82\x23\x10\x41\x10\x18\x5D\xFE\x5F\xD3\x0B\x0E\x2A\xBA\x49\x88\x38\x09\x5A\x41\x22\x99\x05\xFA\x59\x89\x8A\xE2\x5D\xCE\xC6\x0B\x75\xAA\xFC\x23\x19\xC3\x09\x4E\xCF\x83\x6C\x43\x5D\x2E\xE2\xB8\xA5\xD9\x24\x1F\xB1\x43\x27\x55\x3A\x29\xE9\x32\xDE\xE6\x07\x2B\xDA\x9E\xD8\x80\x23\x7A\xFB\x2C\x5A\x63\x94\xEA\x0E\x4B\x4E\x33\x58\x2C\xBB\xF6\xA9\xDA\x3A\xB5\xBF\x32\xE5\x4C\x66\x63\x67\x29\xCF\x73\xCC\x6E\x0C\xFA\x57\x10\x86\xE5\x07\xB7\x42\x2E\x41\x70\x9E\x97\x60\x7A\xF4\x71\x5E\xF2\xC0\xD5\x2C\x36\x5F\xCD\xE7\x6E\x13\x97\xAD\x88\x6D\x8A\x80\xAC\x7F\x52\x89\xE7\x40\x6F\x6E\x33\xD3\x21\xBD\xE3\x9C\x33\xA2\x78\x8E\x7D\x4C\x91\x6E\x90\x45\x3F\xCE\xFC\x60\x65\x5C\x96\x3C\x70\x47\x39\x87\x98\x6D\x58\xD7\x1F\x60\x2F\x18\x62\x76\x30\xA5\x37\xE6\xC4\xAF\x68\x8E\x9D\x66\xA8\x38\x54\xEA\x00\xE6\x38\xE0\x50\xA9\x6A\x9F\xCB\x66\x5A\xCD\xB6\xD0\x6A\x36\xAF\x55\xA7\x98\xA2\xF2\xFD\x95\x76\x79\xAD\x66\xD0\x07\x85\xE4\x3B\x32\x85\xC6\xC5\xF8\xB1\x17\xE5\xBF\x22\xB1\x2B\x29\xFA\x54\x8B\xEA\x02\x90\x60\x4D\x29\xB3\xC2\x6D\x9B\xF2\xB1\x18\x03\xC9\xA9\xC8\xB1\xF7\x08\x0C\x7A\x84\x69\xB2\x0E\x77\x9E\xC9\xCE\x3C\xAE\x12\x1E\xFA\xE8\x87\xB0\xEA\xDC\x7E\xBD\x28\x17\x60\xE3\xF5\xBD\x2D\x86\x27\x1D\xAE\x96\x8F\x88\xF1\x95\xFC\xF1\xB6\x91\xFE\xE2\x43\xE8\x2B\xA2\xBC\x74\x72\xDD\x3F\x67\x63\x43\x1D\x45\xCF\x5B\x3F\x38\x40\xCC\xF3\xDB\x7A\xDF\x3B\xE1\xEF\x9E\xD0\x43\xB6\x7A\xCC\x09\x7F\x5B\xF7\x54\xFE\x4F\xA9\xF4\x49\x83\xB1\x68\x57\x1E\x73\x4B\xA3\x4F\x38\xFD\xAC\x5A\x3B\xF5\x3A\x10\x8B\xB8\x95\x43\xEF\x8D\x8D\x57\xA2\x9B\x09\x8C\x7F\x02\x3A\xFD\xC9\x67\xDC\x39\xE5\xF2\x68\x6B\xED\xEC\x8A\x78\x52\x85\xE7\x97\x02\x13\x55\x3A\xE5\xF7\x74\x55\x28\x17\x17\xF9\x39\xE2\x16\x31\x8B\x3B\x63\x55\x67\x2E\x27\x70\xA2\x63\x8E\x3A\x10\x22\x02\x60\x35\x8C\x29\x56\x17\x2E\xA7\x3C\x51\x27\xDB\x66\x10\x1D\x68\x0B\xEA\xE0\x19\xD0\x16\xF9\x67\x06\x75\x35\x0F\xDB\xE6\xE7\x4A\x25\x4F\x22\x7A\xA4\x97\x8F\x27\x5C\xAC\xB0\x02\xB6\x47\x08\xBF\xE7\x40\x63\x1C\xBC\xC0\x5C\x50\x35\x2A\x36\x6B\x35\x6C\x50\x74\x87\x4B\x1B\x00\x3A\x00\x04\x9E\x5C\x8C\x69\x94\xF4\xCA\xF0\xA4\xB3\x67\x56\xCE\xCA\xD3\x27\x56\xBE\xF7\x44\xCC\x74\x46\x54\xB8\x22\x9C\x7E\x06\x80\x6D\x09\xB3\x24\x95\x9F\x34\x56\x4E\xD4\x09\xF8\x9F\xEE\x8F\xE8\xDF\x09\xFC\x77\xDF\xDD\xE1\xC7\x63\xE2\xE8\xF4\x52\x6D\xB8\x54\xF0\x4D\x0F\x4A\x1F\xF0\xF8\x4A\x24\xE5\xA4\xD5\x60\x5C\xC3\xEF\x6D\x9B\x8C\x46\x7B\xA8\x92\xCE\x72\xA5\x87\xEF\x7B\x95\xCB\xDE\x76\x3B\xBA\xF8\x10\x27\x25\xAF\x63\x67\x5F\x45\x51\x0C\xE9\x17\xB4\x4C\x11\x16\xB8\xB9\x26\xC3\xE8\xBD\x5D\x57\xE4\xB9\x4D\xE1\xAD\x61\x0C\x2F\x7F\x19\xFC\x7B\xC7\x63\x6A\x9B\xD4\xD9\x74\x38\x05\xEC\x6F\xDE\xF6\xAA\xDB\xEB\x22\x19\xD9\xAB\xA7\x47\x95\x3B\xE3\x8A\x57\xDD\x4E\x59\xAF\xE2\x03\x8D\x4D\x86\x96\xEB\xAC\xF4\x27\xEB\x81\xCB\xBA\x68\xBE\x94\xC9\x65\x18\x36\x72\xD4\x24\x86\x93\xC0\xC0\xBD\xB4\xF3\xD7\x5E\xB5\x75\xE6\x27\x94\x8B\x80\x9E\x80\x3E\xC9\x44\x9B\xE1\xAC\xE0\x11\xE7\x40\xB1\x28\x74\x24\x00\x98\x43\xE9\x87\xD7\x3B\xDD\xFA\xEF\x6D\x6B\xD0\x8F\x89\xE4\x82\xD3\x4F\xE6\xE4\xC1\x8A\x52\xCE\xAB\x7D\xAE\xA4\x50\x7A\xA5\xCF\x8F\x32\x17\x2F\xF1\x10\xFF\x30\xA7\xD0\x97\xA5\x87\xB7\x37\xB1\x3F\x33\x66\xAC\xF1\x1B\xEF\xFC\xC0\x77\x5C\x0F\x5B\x5A\x5F\x04\x47\xEF\x10\xB0\xCD\x0F\xAF\xEF\x13\x19\x00\x65\x78\xFD\xDB\x5E\x55\xE7\x18\x72\xF2\x7F\xC7\x74\x5C\x83\xD2\x0D\xCA\xDF\xB2\x32\x9F\x16\x8B\xE6\x60\x12\x65\x52\xCE\x64\xFB\x97\x24\x4A\x00\x86\x6A\xC4\x01\xA6\x65\x97\xEF\x9F\x2C\xB4\xDE\xD4\x06\x1E\x39\x34\x50\x17\x01\xBD\xC9\xBA\x5E\x4C\x88\xEB\x9D\xD1\xE6\x1E\x53\xF5\xC8\xE0\x2B\xD8\x64\xB8\x9B\xCC\xC2\x36\x07\x5D\xDA\xAF\xC7\x6A\xA5\xD3\x1C\x89\x30\xE7\xCE\xF1\xBE\x0C\x76\x83\x5A\x01\x9A\x5A\x41\xF9\x25\xC7\x25\xBC\xC2\x59\x78\x85\x61\x09\x51\x7D\xF7\x23\x8C\xB0\x43\x71\xB5\xC8\x87\x9E\xC3\xDD\xE3\x17\x97\x84\xD8\x55\xA6\x6D\x8A\x96\x86\x6F\x49\xA7\xE9\x37\x7D\x09\xA9\x60\x1C\x9D\x1C\xF7\xA4\x7C\x2C\xD7\x65\x0E\xCE\xC9\xDB\xDB\xB0\x37\x4A\xEE\x0C\xC5\x6E\x5C\xA4\xA0\xE7\x92\x62\x0C\x72\x27\x33\x01\xCB\x0D\xCA\xB7\x00\xB4\x03\x7C\xE4\xA4\xE9\xF0\xAC\x56\xD3\xD1\xDF\x75\x3C\x56\xD1\xAB\xDD\x26\x62\x44\xBA\x18\x0B\x7C\x00\xA3\x22\xD7\x50\x06\x63\x16\xF6\x1A\x18\x69\x65\x82\x78\x2B\xBA\x51\x15\x33\x3A\x02\x85\x39\x13\x57\xA1\x65\x48\xCF\x81\x1F\x9F\xD7\xE0\xE1\x00\x00\x18\xBD\x08\x35\x3A\x0B\x24\xB5\x38\xD0\x7B\xAD\xA7\xF5\x1C\x83\xA9\x13\xDB\xA6\x70\x1C\x9A\x36\x23\x01\x18\x80\x98\x05\x20\x92\x3C\x7B\xC1\x9C\xCD\xEF\x6C\xAE\xAA\x49\x0C\xDD\x44\xEE\x71\xFA\xAA\x70\x12\x4C\xE3\x57\x2D\xBB\x33\x50\x8C\x60\x50\x73\x55\x5A\x7D\xED\x2A\x8A\xD2\x8A\x60\xAF\x44\x09\x0D\xA2\xCF\x7F\x97\x8B\x89\x86\xF3\x0B\x73\x94\xCD\xB9\xA9\xB3\xBA\xCB\x29\xE4\x7C\x4B\x7E\xA6\x2A\x5D\xF7\x8A\x63\x9A\x17\x00\x27\xCB\x5A\x20\xDF\x2D\xC0\x74\x55\x9C\x69\xF3\x00\xC6\x80\x37\x18\x05\x31\x6A\x0C\x07\xF1\xBE\x10\x69\x25\x94\x9A\x39\x1D\xE6\x5F\x2B\xA5\x3A\xB7\x2C\xB7\x59\xD2\x2F\x3D\x9D\xD0\x9A\xE3\xCD\x2B\xBF\xBB\x97\x5F\x75\xF7\xCA\xC9\x13\x2B\x8F\x79\x4E\x63\x56\xF2\x1F\xA8\x84\x7F\x99\x74\xE6\xCE\x46\x02\x47\x3C\xEE\xC9\x3F\xB4\x97\xC9\x55\x7A\xB5\x5E\xCB\xBE\xA9\x68\x87\xD3\x4E\xC4\x54\xB3\x3B\xDA\xF1\x2D\x9D\xCD\x70\x07\x90\xE6\xF3\x5E\xD1\x73\x76\x7A\xF1\x9B\x6E\xDE\xC0\x08\xA0\x9A\xAA\x93\xBB\x50\xFA\xC1\xFD\x2F\xEF\xFB\x53\x88\x5A\xFA\x9D\x4C\xF5\x9A\x75\xA6\xC9\xD5\x78\xC3\x84\x35\x11\xE1\xC4\x1A\xDD\x45\x92\xAD\xDF\x89\xF7\x5F\xE8\x62\x3D\x5A\x77\x9D\xD8\xAB\xC6\x4E\xD3\x0B\x3F\x6E\xF9\x5D\x09\xAA\x0F\xBB\x1F\x11\x5D\xA2\xD9\xC6\x75\x96\x88\x5B\x14\x1E\x04\x6F\x9E\xE4\x76\x13\x32\xE9\x8C\x13\x48\x22\xE6\xAA\x90\x1B\x82\x7D\xDD\x98\x66\x4D\xA0\x59\x45\xB7\xD2\x42\xF5\xB5\xAB\x30\x27\x25\xE5\x41\x03\x12\x58\x99\xB0\x03\x15\xB3\x6A\xCE\xF4\x3B\x5A\x21\x2E\xD0\x9D\x28\x60\xF2\xB6\x60\x16\x09\xE1\x81\xC9\xEF\xF9\x37\x5E\x96\x00\x35\x5B\x91\x27\x6A\xCC\x5E\x30\x72\x12\x83\xBC\x92\xC1\x26\x0B\xFD\x4C\xF9\x10\x9C\xE5\xFD\xCA\x39\x67\x9D\xDE\x19\xEB\x62\xEC\x84\xF8\xB3\xB6\x8B\xAC\x95\x51\xDC\x66\x9A\x0B\x5B\xB9\xBD\xAC\x07\x24\xA4\xA1\xC6\x70\xCD\x15\xC0\xA7\x0A\xE8\x71\x1A\x6C\xC3\xB8\xD4\xE1\x23\x06\x5D\x13\xBF\xBC\xAA\x2E\x03\xF0\xCA\x78\x5E\x3C\x70\xBA\xCE\x80\xA7\x87\xA1\xA1\x54\xC6\xD0\x32\x86\x13\x6A\xB8\x62\xAD\x19\xBA\x9C\x6E\xDC\xB7\x4D\x09\xAA\xA3\x75\xE5\xF8\x43\x34\x7C\x57\xE2\xF1\xB7\xCB\x99\x71\x16\xAD\x1B\x06\x96\x88\x0C\x37\x6B\x6B\xCA\xF8\x80\xC9\xA0\x34\xE9\x5E\x16\x46\x8D\xA6\x75\x95\xB0\x50\xC5\x8C\x36\x2F\xF9\x46\x17\xC9\x4D\x6A\xDE\xF3\x05\xB4\xBC\x23\x4A\xB4\x89\x99\x49\x12\x59\x76\xCE\x81\x99\xE1\x04\xFC\x00\x75\x76\x0B\x8E\xC9\xFC\xA0\xE8\xE7\x9F\xC9\x45\x91\x0B\x9F\x77\xC3\xCC\xCA\x89\xC4\xF3\x32\x72\x58\xD6\xA9\x2A\x60\xD3\x07\xF4\xC1\x26\x03\x0F\x48\xD4\x70\xAD\xAF\x26\xB1\x8A\x5A\x4D\xD8\xA4\xD9\x5A\xCD\x1C\xC3\xF4\x36\x68\x9F\xD0\xBD\x90\xE6\x17\xB8\xEC\x92\x13\x6C\x5A\x48\x9C\x5B\x24\xD2\x1D\x0A\x26\x0E\x19\x6E\x75\xBC\xEF\x58\x00\x52\xD3\x15\x89\x8A\x89\x5D\x6B\x12\x50\x62\x35\xDB\x3A\xC6\x21\xB4\xC5\x98\xD2\x9D\x60\x0B\x39\xF6\x49\x3C\xE4\x6D\x63\x43\x1C\x71\x09\x3B\x19\x84\xA3\x29\x93\xC1\x48\x97\xC3\xD7\x6B\x8F\x63\x79\x69\xD7\x66\x7B\xE4\x7B\xB7\xDC\x6F\x1E\xEF\xE1\x86\xDE\x63\x49\x3A\x06\xB4\x80\x25\x30\xC8\x69\xCF\x87\x0E\x78\x3C\x65\x77\x1E\x1E\x01\xCC\x61\x6A\x34\x39\xD2\xF2\x88\x87\x82\x0B\x67\x14\xC7\x41\x8F\x3D\x40\x20\x7F\xC9\x5B\x1E\x74\x88\x58\xDF\xE3\x2C\xFF\x01\x7D\xC2\xCF\x2B\x75\xA7\x94\x80\xD5\x90\xED\xA8\x27\xFB\x49\x3B\x4A\x84\xE5\xF3\x74\x06\xC2\x52\xF2\xFF\x66\x2E\xBD\xB2\x52\x34\xB7\x63\x9D\x72\x34\x96\xA0\x78\xA8\xDC\x93\xA0\x78\xFB\x35\x3E\xEA\xCB\xF4\xEE\xC6\xAE\x88\xEF\xA7\x10\x16\x97\xE9\xF1\x8A\xF8\xBE\x4A\xF8\x3B\xDF\x10\x2D\xA0\x74\x9C\x4C\x1C\x08\xB4\x31\xCC\x85\x88\xA7\x83\x86\xA3\x95\xC2\xCF\x15\x01\x9B\x68\xD8\xF5\x72\x40\x49\xFB\x04\xDC\x9E\x09\xF6\x47\x4C\x82\xBF\xCF\xC1\x1C\x0C\xB3\x58\xE2\x6D\x49\xCE\xA3\xFA\x7E\x1A\xDF\xB8\x19\x84\x14\xD8\xF6\x19\x6E\xF0\x84\x4A\x97\x68\x91\xA9\x73\x8A\x18\x6F\x38\x46\x0A\x2A\x36\xB2\x0C\xF9\xB4\x9C\x9C\x5D\x0D\xB2\x5B\x0D\x22\xAE\x06\x11\x95\xBC\xE9\x4B\xA7\xFB\x67\xCF\x94\x67\x45\x08\x3C\xA2\x41\xBA\x81\x5F\xAF\x08\x7C\x8A\x18\x03\xA0\xF4\x6D\x4A\xDA\xAD\x73\x86\x98\x57\x9C\xE7\xA6\x0F\x93\xD3\x06\x2A\xB0\x53\x99\x9B\x0A\xE0\x63\xE7\x5C\x1A\x8A\x8F\xC8\x46\x8D\xE5\x7D\x88\x39\x14\x52\xA7\x06\xBD\x1A\xD4\x67\x22\x4B\x96\xB3\xB5\x75\x19\x4A\x14\x4C\xAE\x46\x2C\x35\x48\x08\x4A\x28\x85\xF9\x6D\x00\xE4\x1A\x2F\x84\xB0\xC1\xBE\xD6\xA5\xC7\x94\x3A\x50\x31\x05\x3F\xF4\x80\x35\x02\x6B\xE7\xAB\xC1\xA9\x2E\x93\x2C\xB4\xDF\x57\x0F\x84\xA5\x46\x65\x37\x71\x49\x59\xC6\x9B\x29\x66\xFC\x86\x53\x49\x30\xFD\x1E\x01\xD2\xE5\x30\xF6\x54\x48\xE1\x9A\x5D\x20\x5C\xB3\xC0\xF8\x66\xE0\x6A\x5B\x97\x31\x5C\x73\x82\x6B\xE6\x72\xF4\xE3\xC8\xD6\x02\x5C\x33\xCC\xA0\x97\xC0\x35\x0B\x70\xCD\xF0\xEA\x9B\x17\x57\x93\xA7\xC6\x14\x41\x07\x6A\xD6\x09\x6F\x37\x9B\x80\x13\x1D\x99\x1E\x24\xC6\xC5\x72\x1B\x78\x16\xDF\x1F\x6E\xE8\x3C\x32\x1D\x9C\x6A\xC3\x1D\x09\x27\xA7\xB6\x51\xE7\x1F\x48\x77\x53\x7B\x6A\x18\xCA\xE9\xB5\x76\x7A\x30\x54\x6B\x8D\x36\x4A\x7D\x10\xA9\xB8\xE0\x55\x5C\xF0\x2A\x1D\xCE\x9D\x8A\x14\x95\xE9\xE4\x74\x3E\x3A\xB7\xF0\x0A\xE4\xBD\x6D\x81\x01\x96\x24\xC5\x39\x21\x4B\x36\x26\xA2\x50\xA4\xE1\x93\x19\xEF\xB6\x53\x21\x30\x0D\x66\xC5\x6A\x94\xFF\xF1\xD6\x5B\xCA\x57\xE2\x0E\x56\x68\xBF\xA4\xB4\x51\x14\x29\x89\x9C\xB5\xB4\x93\x8F\x8D\x9D\x70\xE3\x18\x9C\xE9\x81\xB4\x8F\x0E\x3E\x4E\x5E\x8D\xBB\x5D\x32\xA0\x6A\x9C\x31\x70\xC6\x69\x28\xC9\x36\x02\x4A\x46\x40\xC9\x08\x28\x4C\x1D\xF4\x7C\xD5\x73\x40\x8B\x61\x18\x40\xDF\x02\xD1\xFA\xF8\x4A\xB2\x7C\x20\x73\x74\x3F\xE3\x87\x9C\xB7\xEA\xC6\x6F\x64\xE5\x8B\x39\x79\x2D\x69\xFB\x80\x8D\xAA\x46\x3A\xF3\x58\x64\x7B\x38\x6D\x5E\xBE\x6A\xDE\x32\xC4\x4B\xFF\x12\x1D\x30\xB8\xBF\x79\xAB\xDC\x52\x7F\x9C\x19\xCD\xF4\xC1\x00\xEC\x49\x75\x8A\x02\xC3\xA0\xCB\xE3\x62\xD2\x14\x18\xA6\x7C\x97\xEE\x39\xF8\x9E\x2B\x83\xE2\x3C\x0A\x92\x50\x0F\xD9\xBB\x62\x04\xD7\x98\xF4\xFE\x70\x15\xF7\xD2\x16\x11\x5E\x62\x50\x94\xC7\x56\x6C\x75\x0A\x9B\xCA\x44\x4B\x8C\x9E\x66\xB0\x3F\x6D\xC3\xDA\xA3\xC3\x62\x07\x2C\xD7\xC6\x83\xF7\x4B\x56\x97\xC2\x41\x78\x3F\x43\x19\xE6\xCC\xF5\x5D\xB8\x91\xA8\x71\xD3\x96\xC7\x26\xB7\x9F\xF0\xB6\x48\xE6\x39\x69\x05\xF3\xB8\x70\x5B\x81\x60\xAF\xE7\xA2\x48\x8F\xDF\x74\x8E\xB7\x1C\xE4\x20\x7F\x3C\xD2\x78\x4E\x01\x33\x32\x97\xB9\xFC\xAA\xA5\x26\x83\xDE\x3F\x14\xAC\xD9\xA8\xB9\xB5\x94\xE6\x84\x8E\xA7\xD0\x94\x69\x39\xC6\x3A\x71\x8B\xD2\xCD\x43\xE2\x74\x62\xCA\x7F\x1E\x58\xBC\x86\xB0\x78\xDB\xD7\x07\x16\xFF\xEB\xD7\x1D\x16\x1F\x3E\x9B\x5E\x14\xF5\xDF\x90\x24\x9D\xD2\x8A\xCE\xCF\x41\x7A\xDE\x4A\xEA\x42\x2A\xD9\x0B\xA9\x94\x5F\x48\xA5\xEC\x42\x2A\xC9\x99\x4A\xAF\x94\xB1\xD6\x94\xDF\x9F\xE8\x45\xB3\x53\xDA\xD8\x2C\x2F\x29\x9B\x9A\x37\xE3\xDF\xE1\x33\xE2\xF7\xBE\x10\x9E\xF3\xF8\xFC\xDA\xE7\xC1\x73\x16\x9F\xFF\xFB\xCF\xF6\x9F\x7F\x6A\x03\x9E\x6D\x7C\x7E\xE5\xCD\xFD\xF7\xCF\xC7\x67\x4D\xCF\x34\x44\x0A\xD8\x72\xE4\xA8\xDF\x78\xA3\x3E\x50\xBE\x50\x4B\x3D\xF1\x13\x76\x04\xCA\x5A\xA7\xAE\x26\x6D\xBA\x6D\x64\x4C\x89\x85\x32\x12\x9E\xFE\x2E\x24\xC8\xE2\x1C\xC2\xCA\x7F\x6F\xDB\x08\xB6\x2C\x72\x0C\xA6\xB0\x3C\xEC\x21\x14\x83\xAF\x9D\xB4\x35\xDF\x95\xB8\xBB\x7B\x03\xEB\x72\xB5\xAD\xE9\xBE\x23\x45\x6F\xA7\xC6\xCC\xFC\xC6\x32\x92\xA9\x49\x0B\x8A\x5A\x30\xD4\xF4\x6B\x31\x52\x0E\x36\x66\xDA\x60\xA0\x6B\x54\xDA\x98\xED\x37\x66\xFB\x8D\x59\x68\x0C\xA5\xB3\xC5\xC6\x28\x73\x94\xB7\x5D\x63\x72\x8B\x8D\xC9\xAE\x31\x34\xC7\xC2\x5B\xB3\xEE\x70\x82\x2D\xFC\x52\xF1\x17\x36\x4D\xA6\x8E\xF2\xBB\x01\x3D\xC3\x75\xBF\xB1\xB1\x71\x5D\xEB\xA4\xDF\x78\x8F\x68\x8F\xF9\x7F\x3A\x0B\x3C\x21\x60\x6D\x09\x9F\x3B\x2C\x2E\x95\xEF\xCC\x08\x8D\x78\x41\x0D\x74\x00\xB2\xD7\x49\x4E\x27\x96\xF9\x0D\x79\x94\x22\xEB\xEC\x55\xC2\x65\xA8\xB2\x64\xFE\x5E\x79\xD4\xDF\x23\x03\x82\x1B\x49\xCA\x43\xE6\xBF\x84\xE5\x07\x2A\x09\x2D\x62\x33\x94\x6F\x70\x72\x35\x86\x05\x80\x99\xDC\x2D\x0F\xA1\x9E\x81\xA1\x7E\x32\x9F\xAD\xFB\x7B\x16\x8F\x3A\xE9\x1F\x73\xF4\x18\x37\x7E\x9F\x3C\xEA\xEF\xE5\xC6\x55\x6C\x9C\x43\x5C\xE1\x55\x15\xFA\x45\x27\x53\x19\xD7\x25\x3D\x4A\xF8\xDB\x31\xD9\xB5\xC0\x7E\x30\xA0\x0D\x26\x38\x43\xD5\x8B\x06\x70\x8F\x5C\xA5\x0B\x0A\x99\x7F\x18\x81\xBE\x24\x82\x4B\x6A\xAA\x38\xD4\xF3\x35\xF1\x29\xEE\x7C\xE6\xE3\xDB\xCE\xFD\x31\x03\xEB\xD3\xF2\x20\x12\x64\xAC\xA5\x92\xBE\x55\xFA\xB9\x4A\xE0\x87\xEA\xA1\xA6\x30\x19\x8F\x39\xEA\xB3\x75\x97\xF9\xD1\xBA\xDF\xB8\x57\x1F\x3D\x16\x40\xE9\x32\xFF\x79\x79\xD4\xDF\xC7\x80\xD4\x0C\x48\x11\x01\xA9\x30\x98\x54\x1F\xA4\x82\x41\x4A\x5F\x21\xE9\x35\xD6\xBF\x48\x32\xA9\x6E\x36\x25\x7A\x31\x07\x08\x09\xA0\x16\x09\xD6\xEA\x10\x36\x9C\xD4\x14\xE7\x86\xF5\x79\xDA\x76\x99\xFF\xAC\x24\x73\x46\xAC\x21\xB9\xCD\x17\x22\xA9\xC9\xF4\x45\x4A\x83\x2A\x7D\xD1\x41\x1D\x45\xBC\xC1\xF0\x4A\x00\xDC\x11\x00\x77\x3B\x2C\xAB\xFB\x04\x43\xD7\x67\xEB\xC7\x10\xF2\xC7\x28\xF3\xF7\x5D\x92\xC2\x17\x9C\x15\x87\x28\x9A\xC9\x95\x02\x7D\x33\xA8\x70\x91\x0B\xE1\xC3\x0D\x89\x19\xF1\xE1\x29\x3B\xEE\xEF\x81\x27\xE1\x55\xA8\xC9\x99\xDB\x93\xAA\xE8\xE8\xE5\x47\xC7\xFD\xBD\x58\x35\x7C\x18\x5B\xF2\x9A\xF2\x93\xC5\x12\xCC\xF0\xEB\xB7\x1F\xF7\xF7\xCD\xFD\x20\xB6\xD7\xB5\x60\xCA\x9F\x92\x09\x27\x27\x1A\xA1\xE8\x5C\x64\x4C\xD3\xB0\x86\x11\xF0\xB4\x5B\xF6\x27\x83\xBD\x1E\xF6\x23\xC4\x45\x4F\xB4\xE1\x34\x97\x2D\xF5\xF7\x48\xE8\xE0\x00\xD7\xE1\xED\x4C\xAD\x68\x87\x24\x41\x77\xB8\x1A\x34\xAD\x60\x6E\xC0\x10\x12\xCA\xC9\xAB\x96\x88\x97\xFD\x12\x6C\x55\x82\xFC\xF3\x67\x61\x13\x44\xF9\x29\xFD\x8F\x03\x73\xDE\x75\xA8\x92\x5E\x3A\xB5\xEE\x6F\xDB\xD8\x30\x47\x29\x40\x1C\x65\xF5\xF4\x1B\xF7\x8A\xAB\x39\xCB\x2E\x82\x14\xF6\x56\x1B\x7B\x0E\x55\xC2\xDF\x7B\xB2\xD6\x5E\x85\x21\x6F\xDC\x23\x56\x2B\x95\xD6\x7A\xDE\x3D\x18\x32\x67\x63\x5F\xAD\x7D\x9C\xD9\x6B\x66\xAA\xFD\x12\x55\xFB\xE0\xDD\x13\xBA\xA6\x40\xF5\xDE\x30\x53\xEF\x5E\xAA\xF7\x47\x58\xCF\xC6\x6E\xEF\x15\x07\x2B\xE5\x37\x6E\x87\xD2\xAC\x46\xEB\xBE\xF4\x7F\x22\x9C\x3A\xEE\xE5\xD1\x8A\x92\xDF\x39\xE5\xB3\xEB\xFD\xBB\xD0\x6C\xF5\x1D\x52\x3C\x7D\x3F\xDF\x05\xF2\xCF\x42\x90\x02\x93\x0B\x26\x5E\x59\xBE\x4C\xCA\x7C\xE2\xEF\x52\xB4\xDB\x45\x57\x17\xB5\xE6\xD5\x53\x9D\x6A\x1B\xCD\x26\xD8\x1D\xD7\x37\xD6\xDF\x87\xED\x51\xDC\x1D\x71\xA8\xC9\xD1\xED\xCE\x38\xEB\x3F\x1B\x5E\x38\x0E\x61\x03\x1F\xF8\x2F\xC6\xEA\xCA\x6F\x6C\xBC\x8B\xAD\xB8\xC2\x65\x6B\xFE\xE4\xD1\xD6\xCB\x16\xF3\xD6\x09\xF8\x63\x28\x07\x2B\x45\x36\xCC\x97\x1A\x4C\xDD\xEF\x44\xF9\x92\xAF\xD0\xD0\x3E\x3F\x67\x68\x3C\x30\x97\x5D\xC0\xB8\x2E\x03\x5D\xCB\x74\xB7\xD6\x40\xD2\x09\x7F\x53\xBB\xA0\x94\x90\xA5\x47\xAF\x7B\xD2\x79\xFE\xCE\x28\x33\x51\x27\xE7\x2B\x66\x40\xE8\x27\xDB\x85\x02\x74\x32\x21\x8D\xA2\xE4\x54\xE8\xF0\x98\x9D\xC7\xE1\x51\x93\xC9\x7E\xFC\x66\x3A\xBE\x6F\xC9\x59\x00\x9F\x5A\x72\x82\x2C\x52\xAF\xC5\x9E\xC7\xE2\x28\x2F\xBB\x8E\xEC\x16\x3B\xA2\xC6\xCD\xFC\xC6\x0F\x57\xD9\x08\x6F\x51\xED\x11\xD2\xCB\x1B\x30\x45\xED\xDD\xA7\x92\x10\xBD\x06\x53\x0E\xFE\xD6\xAF\xDE\x7F\xEB\x4D\x8B\xC1\xAF\xDF\x49\xBC\x58\x1A\x02\xEB\xA1\x3F\x0A\xD6\xA8\x69\x55\x3A\x89\x3E\x29\x3A\x14\xE2\xD5\xD0\x9F\x39\xBD\x51\x5C\x8F\xC1\x84\x6E\x08\xBF\x49\x04\x75\x8F\xAA\xFF\xA8\xFB\x8F\xA6\xFF\x68\xFB\x8F\x59\xFF\x31\xC7\x47\x74\xD1\xE3\x94\xFA\x05\xC6\xD5\x0B\x77\x94\x0A\x4A\x01\xA8\xCE\xAC\x4C\x4E\x60\x9A\xCA\xE4\x56\x49\x38\x27\x77\xEA\xCC\x93\x2B\x91\xDC\x30\x41\xDE\x9F\xC2\xD5\xBA\xEC\x09\x95\x0A\x96\x4E\xBE\x4B\x42\x20\x1E\x85\x1B\xB2\xD3\x93\x67\xB7\x41\x50\x96\xE2\x05\x59\x27\xCB\xB3\xA9\x6B\x00\x7A\x51\xC1\x56\x95\x52\xD7\x4F\x6A\x85\x4D\xC1\xF0\x28\x95\x9C\x4A\xBC\xCB\x3A\x22\x26\x0D\xD7\xA2\x76\xAB\x62\x5E\xF8\x5E\x0D\x4D\x35\x34\xEC\xD2\x30\x20\xA2\x44\x16\xCD\x36\xAB\xE9\x0B\x48\x06\xB7\x20\x61\x0F\x42\x54\x82\x89\xB0\xD6\x38\x40\xF3\xAF\x9C\xEA\x82\x35\xFF\x6A\xF2\xFB\xD7\x92\xDF\x77\x25\xBF\x7F\x9D\xF7\x1A\x67\xBB\xEB\x93\xE1\xA2\xCD\xE3\x28\xD6\xD0\x9B\x4F\x25\xAE\xA9\x86\xFC\x2C\x8A\x23\x33\x9E\xCC\x14\x01\x95\xEE\xE2\xD0\xFD\x29\xC2\xAA\x60\x47\xC8\x07\xA3\x35\x13\x5B\x5B\x15\xD3\x01\x67\x30\x09\x98\xC4\x00\x30\xE8\x9E\xC7\xFD\x63\xBC\x1C\x6A\xEC\x05\x3C\xD5\x9F\x7F\x56\x92\x4E\xAA\xFC\xB4\xD2\x64\x2D\x3A\xD7\x75\xFD\x94\xDB\xFC\x24\xA6\x8C\x57\x9A\x32\xD0\xC3\x26\xB9\xBB\xBB\xD7\xA5\x24\x53\x18\x20\xA5\x68\x69\x01\xA6\x5D\x0A\x4C\x88\x42\x9E\x19\x7C\x26\x3C\xA2\xCC\x90\x38\xC0\x4A\xD3\x15\x39\xC9\x55\x2E\xD3\xA2\x31\x2B\xE2\xFB\x31\x62\x95\xF8\x6E\x55\xFC\xFB\x8A\x5D\x5D\xCC\x9D\x7C\xD9\x10\xF3\x5D\x44\xD8\x72\x38\x4A\x3B\x03\x59\x19\x8C\xEA\x11\xB2\xD1\x3D\x5C\x70\x30\x2E\x32\x3D\xE0\x3D\x91\xF3\xB5\x26\x36\x6B\x0D\x91\x14\x56\xF5\xEC\x11\xFA\xDB\x94\x52\x13\x35\xEB\xCA\x32\xCD\xD6\x03\x56\x35\x4A\x12\xC4\xEA\x6E\x36\xA2\x75\x48\x45\xC7\x16\x02\x9B\x2A\xCF\x85\x05\x31\x85\x85\x91\x2E\x19\xFA\xB1\xA5\x71\x6C\x09\x1F\x6A\xF4\x1A\xD2\xE8\x2E\xD3\x18\x18\x81\x68\x2C\x61\xC1\x3E\x09\x21\x9E\xB6\x57\x06\x8F\x19\xBC\x90\x4D\xBF\xE4\x26\xB7\x81\x75\x72\x83\xF6\x8F\x9F\x73\xEE\x88\x0E\x89\x5B\xCA\xE3\xC8\x2D\xB9\xB3\x23\xC8\x18\x85\xD5\xC4\xBB\x09\xB7\x9E\xE2\x2B\x8D\xC4\xA2\x28\xDA\x1E\x45\x18\x5B\xA5\x7D\xC7\x21\x5A\xDC\x7F\x2A\x33\xC3\x06\x52\x8D\xB7\xE9\x82\x5F\x59\xF0\x0F\xC0\x06\x1B\xB3\x44\xF7\x19\xEC\x19\x4A\xFD\xE8\x4D\x6D\x57\x64\x5D\x38\x5D\x0F\x30\x4F\x00\x70\x2D\xA7\x56\x97\x16\x4B\x64\xD3\x43\x72\xBC\x74\xC5\xCA\xE4\x44\x33\x72\x83\x8E\x5F\xA3\x53\x5E\x8D\x6E\x6E\x23\x27\xBF\x5B\x15\x4F\x66\x03\x08\xBF\xC1\x44\x49\xA5\x1B\x12\x2D\x35\xC3\x4A\xB8\xC2\x65\x4F\xAC\x73\x97\xB9\xE2\x09\xB8\xF7\x41\xA7\xBD\x02\x58\x7B\x41\x3C\x1D\x86\x50\xBA\x61\x37\x0A\x97\x7B\x79\x74\xA9\x7C\xEF\xC8\x6C\x9F\x28\x9C\x9C\x13\xE3\x77\x06\x96\x83\x4E\x92\xEF\xA4\x93\x37\x14\xEE\xE4\x03\x6F\x01\xA5\xAB\x4B\x4D\x96\x18\xCD\xF1\xDA\xB0\xD7\xEB\x4D\xD1\xA2\xB0\x21\xD7\x41\xD0\x0F\x68\x78\x03\xA0\x92\x58\xD8\x0C\x79\xB5\x0C\x60\xFA\x5E\xD4\xA3\xC0\xDF\x06\xFD\x75\x33\x60\x5E\xE2\x86\x14\x9A\x7B\x59\xA1\x1F\x10\xC6\xC0\x1B\x54\x78\x65\x7A\x84\x9E\x9A\xFC\xB2\xA9\xDC\xF0\x00\xAA\xB4\x15\x49\x9B\x05\x6F\xEA\x45\x26\xF3\x0A\x64\xC9\x38\x95\x25\x8B\xB0\x40\xC6\xF5\x62\x90\x36\xC3\x99\x1A\x0B\x54\x63\xA1\x74\x0B\x6E\x31\xF1\x1E\x8D\x6B\x67\x11\x05\x4C\x99\x91\x84\x29\x5D\xE5\x86\x24\x53\xEA\x6D\xA3\xAC\x74\x15\xBA\xE2\xF0\x7F\x4C\xB3\x08\x05\xA6\x59\x70\x8B\x6E\x21\x50\x5F\x95\x51\x61\xC5\x55\x56\xA1\xC0\x2D\x1E\xAA\xB7\x8D\x2C\x19\xFB\xE0\xFB\x66\x3B\xB6\xD5\x5C\xE4\xB6\xBB\x8B\x56\x9B\x6D\x4B\xCD\x22\xD0\xD9\xE2\x99\x7A\x87\x97\xF5\x68\x45\xD6\x3B\x61\xAA\xEE\xA2\xFA\x62\x18\xF2\x45\x6E\xFB\xE1\xCA\x8E\x32\xA2\xB2\x05\x2F\xEA\xB1\xDA\xE7\x76\x02\x95\xED\x72\x17\x23\x95\x41\xA7\x6E\x11\x69\x69\x0C\xB4\xB4\xCB\x0D\x99\xCA\x86\xDD\x9B\x05\x78\x33\x76\x0B\x8C\xC6\x85\x4A\xB8\x9D\x6E\xC7\x13\xEB\x91\xDB\xE1\x76\x02\x95\x2D\x02\x95\x2D\xBA\x9D\x40\x65\x3B\x71\x88\x38\x80\xD2\x2D\xF8\x89\xDB\x06\xE3\x58\x5D\x72\x23\xA0\xB2\x7A\xDB\xC8\x10\x7C\xEE\x62\xF8\x68\x7A\xFC\x75\x7E\x54\x3D\xA9\x3A\x02\x60\x82\xB4\x1E\x82\xB4\xAE\xB7\x95\x6E\xDB\xFE\x4A\x95\x33\xB8\x87\x3F\x6E\xB0\x1F\xB6\xC0\x03\xE0\xC6\xA3\x32\xA1\xBE\x8E\xD0\x82\xC3\xE7\x00\x57\xED\x85\x12\x18\x30\xF9\x1E\x69\xD1\x26\xED\x6B\x4F\x5C\xC5\x97\x4B\x5C\xC5\x39\x88\xAB\xE8\x13\xD7\xB6\xAF\x36\x71\x6D\xBB\x20\xE2\x2A\x98\xB8\xB6\x21\x71\x15\x7D\xE2\x2A\xFA\xC4\x55\x9C\x9B\xB8\x0A\xCC\x91\x29\x23\x71\x49\x8A\xB4\xD9\x11\x55\x59\xBA\x91\x2B\x13\x5E\x96\xC3\xEE\x23\xE7\x60\xA1\xE8\x39\x67\x9C\x05\x95\x77\xE2\x61\xFB\x66\x0F\x2D\x91\xA1\x14\x61\x4F\x57\xAD\x15\x3B\x73\x57\x31\xA4\x35\x17\xA2\xF7\xB6\x2F\xEA\xCA\xCB\x7A\x18\x98\x69\xD5\xC6\x6A\xAE\x02\x30\x54\x6E\x08\x7D\x0E\xF1\x13\x76\x11\x82\xA1\x55\xA5\xAB\xA8\x5E\xE9\x54\x6C\x57\x27\x1D\xEB\x79\x1D\xEB\x39\x1D\xEB\x73\x77\xAC\x63\xC7\x7A\xBA\x63\xCD\x1F\x0C\xCA\x3B\x77\x64\x65\xE2\x4C\xE4\x30\x94\xA1\xF2\x63\x0E\x62\xA9\x9D\xA2\x18\x42\x16\x0D\x46\x2B\xE2\x0A\xCE\x85\xA9\xC8\xFD\x84\x2C\xD2\xCA\xCB\x75\x0C\x65\xE2\xCD\x3A\x9B\xAD\x4C\x37\x11\xF4\xC2\x0F\x89\x79\x55\x1B\x3C\xC6\x2F\x53\xE2\x0A\x15\xE3\x25\x04\x57\xF1\x30\xE6\x00\x13\x8A\x53\x19\xC7\xED\x42\x42\xE0\xF4\xD6\xDF\xBC\xBB\xE4\x39\xDF\xC3\x02\xBA\x2D\x78\x2C\xCD\x00\x6D\xC8\xE8\xDC\xCC\xA3\xF6\x43\xA7\x96\x1A\x45\x83\xD7\xC9\xE0\xF9\x13\xBA\xE7\x15\xAE\x12\x6C\x61\x12\xCD\x60\xD3\x69\xE0\xFB\x7A\x10\x67\xE3\x34\xDE\x07\xDB\xAB\x0A\xBF\x3B\x44\xAE\x77\x83\x33\x57\xE8\xC2\x29\x7F\x5A\x3D\x52\xF2\x0D\x32\xE3\x06\xA0\x10\x37\xD6\x15\x7B\x51\x65\xC5\xE3\xED\x1C\x5E\xE5\xE9\x4E\x9B\xEF\x14\xA9\x64\x00\x4C\x3A\x44\x36\x43\xBA\x25\x0C\x7A\x45\xDB\x64\xA0\x04\xE4\xA8\x04\x40\x89\x5E\x6F\x14\x32\xE2\x01\x2D\x1E\xBA\x0F\x42\x5F\x0C\x2A\x1E\x88\x75\xAA\xC5\x88\xC6\xE8\xD9\x49\x49\x8E\x87\x08\x1A\xE5\xF0\x50\x93\x32\x74\x38\xE5\x8F\x50\x8C\xE6\x9B\xF8\x7A\x00\xDE\x93\xA6\x18\x2D\x0C\x16\x67\x61\x4A\x4E\xB9\xAC\xB1\xAC\xED\x53\xE4\x5B\x1B\x06\xD7\x52\xBD\xC1\x01\xD8\x3C\xEF\xAF\xA4\x37\xA8\xA5\x85\x2D\xA9\x02\x2E\x5D\xCC\x6C\x49\x8B\x6E\x4B\x3A\x98\xA9\x91\x53\x8D\x1C\xB6\xA4\xF9\x2A\x3A\xDC\x16\xE8\x53\x66\x56\xA7\x99\x3A\x6F\x48\x07\x91\xA5\x2B\x37\x48\x59\x3A\x3A\xC1\x0E\xF8\x3F\x86\x34\x2E\xD3\xE4\xD8\x70\xD0\x56\x8B\xCA\x52\xB1\xE2\x4A\xAB\x55\x0E\x90\x4A\x98\x3A\xF2\x31\x6A\xAD\x19\xB9\xD2\x8D\x90\xA9\xE3\x4D\x09\x73\x06\xD7\xFB\xC2\x8A\xAC\x17\x61\xDE\x6E\x54\x8F\x61\xFC\x23\x57\x02\x53\xCF\x89\xA9\xE7\x14\xED\xD5\x2D\x02\x53\xDF\xE6\xC6\xC8\xD4\x55\xBC\xEB\x42\xB6\xAC\x6D\x6E\xC0\x4C\x7D\xD0\xBD\xA1\xAC\x55\x2E\x67\x66\x99\x03\x1B\x77\xD5\x13\xEB\x05\x90\x3B\x4F\xC0\x34\x6D\x78\x9E\xB1\x08\x4C\x7D\x91\xEE\x45\x8E\x91\xA9\xE7\xC8\xD4\x47\xAE\x5C\x5D\x72\x0B\x1D\x53\x07\x08\x25\x4C\x1D\x1E\x37\x61\xEA\xF0\x16\x98\xFA\x20\x32\xF5\xE0\xC3\xC4\xF4\x4E\xC4\x31\x00\x8A\x98\xE1\x69\xB2\xCF\xA8\x2C\x31\x2A\x4B\x8C\xCA\x4E\x33\x2A\x76\x5B\x9E\xC3\xA8\x30\x52\x59\x8F\x51\x0D\xD0\x37\x51\xB5\x14\xF1\x66\x7A\x8D\xF3\xD5\x4D\x9B\x30\x2A\x3B\xCB\xA8\xAC\xCB\x99\x51\xC9\x84\x51\x89\xEE\x22\x8B\x08\x8C\x8A\x93\x3D\x17\x78\xB1\x95\xC7\xD2\x60\x5C\x06\x66\x54\xF6\x1C\x8C\x2A\xA7\xAB\xCB\x81\x51\x99\x8E\x51\x5D\xF0\x24\x1A\xB3\xE9\x34\xF0\x3D\xFB\x87\x73\x76\x1C\x33\xC3\xA8\x4C\x8F\x51\x59\x26\x7F\x64\x54\x03\x97\xED\x45\x15\x0E\x19\x55\x01\xAF\x8A\x78\xAF\x46\xD1\xAD\xC4\x46\x74\x8C\x0A\x87\xA3\x02\xAB\x5A\xD0\xFB\xDC\x02\x2A\x82\x39\xE8\x0F\x6D\x23\xBA\xFD\x0A\x94\x44\x56\x65\x52\x56\x45\x5F\x18\x8E\x87\xD0\x0C\x22\xAB\x1A\x90\x86\x59\xE7\x50\x05\x59\x15\xA6\x8D\x1B\x00\xAB\x1A\x10\xAB\xCA\x03\xAB\xCA\x51\x82\x44\x56\x65\x79\xF1\x32\xAB\x12\xCD\xA0\xC7\xAA\x06\x61\x70\xCC\xAA\x4C\xC2\xAA\x0A\x60\x57\x29\xAB\xCA\x66\x18\x51\x86\x4B\x90\x98\xCD\x4C\x8D\x82\x6A\x14\xA5\xCB\x5D\x41\xAC\x0A\x88\xA4\xC0\x1B\xA3\x53\xAC\x2A\x9F\x61\x55\x86\x59\x55\x16\x59\x55\xBC\x34\xD6\xE4\xC4\x93\x0A\x6C\x38\xB0\xAA\xAC\x63\x55\x54\x89\x58\x55\x7E\xA8\xCE\x02\xAB\x32\xB3\xAC\x2A\x5B\x6A\x28\x4D\x14\xB1\x2A\xC9\xAC\x2A\x77\x23\xBA\xB3\xD8\x67\x55\x05\xEB\x9F\xCC\xAA\x86\x1D\xAB\xCA\x3B\xFD\x73\x9B\x33\xCC\xAA\x4C\xF7\xA6\x20\xFD\xB3\x60\x56\x55\x04\x56\x25\x03\xAB\xE2\x08\x56\x29\xAB\x1A\x22\xAB\x2A\xFC\xC4\x65\xCC\xAA\x24\xB2\xAA\x8C\x58\x95\x61\x56\x95\x11\xAB\x32\xCC\xAA\xB2\xCD\x58\x95\x41\x56\x95\x81\x90\x65\x56\xC5\x14\x4F\xC4\x81\x14\xB1\x00\x64\xBD\xC0\xD4\xBC\x9A\x44\xA7\x47\xBD\x20\x8F\xFC\x88\x98\x93\xCB\xBD\x38\xB4\x58\x3A\x75\xA6\xDE\xE6\x4D\x3D\x00\xE0\x21\x9C\x14\x9F\x0A\x23\x9C\x2A\x97\x23\x9C\x50\xED\x18\xF0\xD1\x30\x6C\x63\xDC\xB6\x27\x33\xAD\x73\xB1\x42\x77\x18\x06\x91\xA9\x14\x2D\x62\xE5\x16\xB9\xFB\x33\x4F\xAE\xA4\x1B\x00\xA0\x06\x6E\xD1\xA9\x33\xCD\xB6\x27\x77\xDC\x1D\x24\x4E\x59\xA2\x61\x3D\xC7\x75\x09\x7F\x60\x74\xA6\x7C\xA1\xD2\x72\x22\x4F\xA4\xF7\x86\xE4\x74\x78\xB9\xDE\x59\xA5\xB8\x4C\x17\xEF\xE0\x8B\x99\x53\x47\x95\xBE\x68\xC7\xFF\x99\x8E\xD4\x84\x7F\x59\x1A\xD8\x4E\x7E\xBB\x2E\xC8\x15\xE9\xAE\xEE\xF0\xA9\xBB\xA8\x3B\xE5\xD4\x73\x57\xA3\xEF\x64\x0F\x8F\xDB\x7E\xE5\x4D\xCB\xE1\x30\x5E\xF8\xE2\x38\x14\x76\xCF\xE3\xA9\xE7\xDD\xC7\xC3\x6F\xBD\xE2\x6E\xBD\x33\x7D\xA9\x57\x96\xA7\x0B\x1E\x31\x5D\xF0\x3D\xB7\xDE\x79\x43\xF9\x39\x83\x07\xAB\x73\xE2\xED\x9D\xEF\x60\x35\x84\xE0\x42\xA9\x43\x4E\x58\x78\x92\x38\xFA\xEA\x9E\xB9\x4E\xF0\xB4\x6F\x45\x9E\x68\x36\x39\x78\x15\x9C\x68\x38\x19\x6F\x63\xC3\x88\xC9\xC8\x82\xE6\x34\xF4\x1B\x20\xC7\x4C\x60\x85\x76\x7F\x65\xD0\x18\x31\xFF\x8C\xB5\xC9\x41\xF4\xA1\xBA\x88\x57\x31\x33\x3A\xF7\xCA\x7A\x27\xE2\x25\xBF\x8B\xDD\xD2\x0E\x4E\x3E\x8E\xC7\x58\x53\x5C\x1C\x19\xA4\x68\x86\x76\x77\x74\x13\xB1\x07\x2A\x8D\xDD\x67\x34\x03\x39\x3B\x03\x75\xFE\x19\xE8\x2D\xCD\xC0\x6C\x65\x06\xF2\x02\x66\xA0\x92\x19\x4C\x1D\x30\x3F\x9A\x3C\xA3\x65\x20\xAB\x13\xC1\x95\x08\xDD\xCA\x3B\x37\x06\xB5\xEE\xDF\xFC\xE7\x6C\xC3\x44\x64\x92\xB1\xF1\x7F\xCB\xAB\x89\x3E\x39\x9C\xC8\x93\x64\x16\xA0\x1D\x9F\x8C\x8A\x94\x72\x92\x94\x0C\x54\xA4\x54\xA7\x48\x49\x8E\x02\x89\x77\x0F\x25\x2B\x52\xB2\x53\xA4\x74\xB7\x67\x0E\x77\x3F\xD0\x51\x51\xB6\xC4\xDD\x65\xD0\x41\x88\x84\xC3\x4D\x29\x95\x28\x52\x28\x7A\x28\x99\x56\xDC\x22\x63\xC6\x95\xB8\xE3\x93\x7C\xF9\x69\x4E\x1C\x38\x4E\x44\x86\x30\xEB\xE2\x7F\x90\xE7\x3D\x1E\x0E\xD3\xA8\xFD\xD0\xC9\xA5\x46\xD2\xE0\xF5\x7A\xEF\x02\xA6\x0A\x8A\x54\xC1\x37\x12\xB7\x32\x89\x66\xF3\x69\xC4\x68\x22\x3C\x1B\xA7\xF0\x4E\x71\xAA\x48\x49\x57\x9C\xA1\xDC\x55\xA4\x48\x29\x3A\xF5\x2E\x50\x91\x32\xA8\x7F\x39\x43\xB9\x39\x30\x04\x49\x16\x77\x7C\x32\xDE\xB3\x96\xC9\x00\xE2\x8E\x0F\x74\x9D\x41\x3D\xC4\x20\x0C\xA8\xA9\x94\xA0\x39\x19\x3A\xF6\x45\xB1\xD5\x48\x54\x5C\x46\xA9\x1A\x45\x5F\x8C\x58\x32\x37\x85\x93\x2D\xAD\x8F\x02\xB7\x0D\xB0\x0F\x19\xE0\x66\x52\xD2\x8E\x0F\xF6\x92\xF5\xD0\x49\xDA\xF1\x49\x50\xA3\xE4\xF4\x8E\x8F\xC0\x82\x9B\xCC\xD6\x49\x57\x36\xC3\x44\x8D\x92\xB4\x1D\x2D\x83\x1A\x25\xDC\x08\x63\x27\x90\x1A\x25\xA7\x8D\x90\xB0\x9F\x6B\xF4\xA6\x7B\xBE\x11\xD4\xC9\xA1\x4E\x16\xEB\xA0\x7B\x43\x5E\x63\xE8\x08\xB9\x3A\xD3\x6C\xD6\x6F\x2C\xEF\x1A\xD3\xFD\x26\x00\xE2\x5E\xD6\x95\x62\xC7\xFE\x29\x45\x0C\x74\x8D\x76\x61\x30\xB0\xA8\x86\x49\x9B\x97\x4E\xB8\x11\x2B\x62\xD5\xC8\xB2\x85\x67\xC4\xFF\xE1\x8C\x91\x78\xF1\xDA\x99\xA8\x88\x55\x15\xDF\xE9\x91\x54\x09\xF7\x8C\x12\xF6\x8C\xD5\x88\x06\x86\x2D\x90\x1B\x6C\xD1\xE4\xA0\xA2\xAF\x36\xD5\x12\x93\xDD\x99\x7A\x01\x34\x45\x56\xC4\xA4\xCB\x69\xDD\xE6\xCE\x1E\xAE\x4C\x50\xC4\x8C\xA7\xA3\x11\x54\x30\xC6\x4E\x77\xB6\x0C\x99\xAA\x5B\x23\x56\xC4\x46\xDD\x1B\x5C\x8F\x85\x33\x51\xCB\x00\x45\x6C\xE1\x89\x75\xE6\x16\x48\x11\xE3\xD5\xC1\x5A\x05\xDD\x8F\x44\x45\xCC\xF8\x89\xAB\x60\x1C\xAB\x4B\x2E\x43\x45\xAC\x1A\x69\x82\xD0\x5D\x0C\x21\xBA\x2F\x92\xB2\xA4\x82\x58\x52\x41\x2C\xA9\x98\x66\x49\x78\x31\xA6\x98\xC7\x92\x50\x55\x9E\x61\x49\x19\xAC\xE6\xE2\x1C\xAB\xB9\x48\x58\x52\x31\xCB\x92\x0A\xDC\xD6\x4C\xB3\xA4\x6D\x1D\x4B\xDA\x36\xEF\x10\xCA\xF2\x58\x60\x51\x47\x96\x54\x9C\x83\x25\x65\x44\x4D\x81\x25\xE9\x3E\x4B\xBA\xA0\x49\x34\x7A\xD3\x69\xE0\x7B\x90\x2D\x3C\x1B\x4C\xCC\x3D\xCD\x92\x74\x8F\x25\x15\x9C\x1C\x8B\x59\x92\x4D\x58\xD2\xD4\x21\x94\x2C\xDD\x36\x18\xC5\xB6\x8E\x25\x15\x09\x4B\xDA\xA6\xF7\xB9\x6D\xEC\xF1\xB0\x2D\xEE\xEC\xE8\x10\x0A\x4A\x22\x4B\xD2\x29\x4B\xA2\x2F\x74\xC5\x03\x31\x91\x25\x19\x3E\x84\xCA\xA0\x0A\x85\xE1\xA1\x6C\x49\x13\xE2\x45\x47\xDA\x3A\x0B\x2C\x29\x63\x99\xCC\x2C\x89\xC0\x42\xDB\x55\x27\x9D\x68\x4C\x8F\x25\x99\xDE\xCE\x2E\x24\x27\xEB\x0E\xA1\xB2\x4D\xBD\x1E\x32\xF2\x7A\xC8\x22\x0F\x99\xA9\x41\x27\x12\x75\x5E\xBA\x2C\x1C\x42\x61\x76\x5D\x97\xCD\xEE\xEC\xB2\xA9\x9D\x9D\x74\x9A\x19\x8A\x85\x9D\x9D\xE4\x60\x16\x14\xD1\x22\xDC\x19\xCF\xB1\xE1\xC0\x50\x6C\x65\xD9\x4E\xCA\x95\x88\xA1\x64\x87\x6A\x1B\x76\x76\x9A\x2C\x0B\x32\xB1\x2C\x58\xB2\x1A\xBA\xEC\x4C\x3D\x5E\x11\xF5\xA2\x97\xF5\x0E\x77\x11\xCD\x8E\xAD\x0A\x79\x49\x77\x9C\xC8\x00\xE2\xB2\x33\xD1\xEE\xB9\x78\x67\x93\x07\x0B\x7E\x06\xFB\x0F\x8C\x8D\x29\x5D\xB6\xBF\x52\x5E\xD6\x3B\x61\x07\x46\xA5\xB0\x25\x59\xBC\x13\x0F\xB1\x32\xBC\xE3\x16\xCC\x93\x08\xF7\x9C\x5C\x53\x76\xBA\x7C\x3F\x9A\x0A\x33\xB4\xFE\xEE\x1C\xE9\xD2\x9B\xFA\x62\x6F\xEA\x5D\x01\x4C\x00\xE4\xDD\x29\x90\x77\xC1\x40\x77\xD7\xBB\x62\x7E\xB0\x99\x1A\x17\x53\x8D\x8B\xC9\xE8\x71\xF1\xE1\xD8\xB6\xBB\xD8\xED\x5A\xAD\x66\x13\xBF\xEF\x42\x5C\x14\x19\xA2\x42\xF4\x77\x89\x84\x4C\x46\xCD\x4E\xE0\xF5\x19\x5E\x30\xE6\xFF\x98\x66\x17\x06\x98\x69\x2E\x86\xAE\x22\x6A\x76\x56\x39\x87\x11\x6B\x32\x5E\x49\x61\x18\x05\x36\x78\x08\x61\x45\x13\x00\xE4\x3C\x84\x54\x80\x4B\xDC\x43\xDC\x25\xAB\xCD\xCE\xA5\x66\x17\xE0\x68\xD7\x99\x7A\xC9\xCB\xFA\x52\x00\xC8\x8A\xAC\x17\xDC\x25\xF5\x43\x61\x72\x97\xB8\x87\x1C\xAE\x0C\x36\xC7\x8C\xFF\x62\x2F\xEA\xDD\x6A\x9F\x5B\x00\xC6\xFF\x2D\xEE\xA1\x88\x32\x8C\x7C\xB3\x0B\xD9\xFB\x6E\x00\xC6\xB7\xB8\x9C\x19\x7F\xDE\xBD\x41\x30\xED\x76\x17\x33\xE3\xBF\xB8\x12\x6E\xC1\x2D\x3D\xB1\xBE\xD4\x2D\xB9\x05\x60\xFC\x0B\xC0\xF1\x17\xDC\x2E\x60\x45\xBB\x28\xDC\xD9\x43\x91\xF1\x5F\xEC\x27\x6E\x27\x8C\x65\x75\xC9\x5D\x8A\x8C\x1F\x81\x0C\xE0\xBA\x8B\xC1\xA5\xE8\xF1\xD7\xF9\x51\x96\x80\x50\x09\x38\x93\x6B\xF5\xCE\xD2\xED\xAC\x54\x89\x22\xA5\x59\x74\xE3\x27\xD6\x3B\x90\xDE\xC6\xDF\x87\xDC\x11\xBF\xC6\x73\x25\xF2\x2E\xDB\xE9\x27\xCE\xB2\xC1\x69\x07\x76\x67\x31\x5D\x9F\xD3\xDC\x9D\xC5\xCD\x96\xD3\xDC\x9D\x9D\xB3\xE1\x87\x8D\x17\x2C\x5C\xB9\x56\x5B\xD0\xB1\x78\xC3\xCF\x6C\x90\x78\x06\xA6\x03\x64\x5E\x17\xC5\x06\x88\xCA\x54\x7E\x19\x92\x5F\x86\xE4\x97\x99\x96\x5F\x1C\xCE\x6A\x8E\xFC\xCA\xF9\xBC\xA5\x93\x5F\x1A\x8F\xF5\xD8\x97\x6F\x86\xF5\xB3\x8F\x9D\x49\xE4\x97\x99\x95\x5F\x26\x9E\x4D\x8E\x66\xE4\xD7\xA8\x27\xBF\xD2\x80\xBC\x22\x9C\xFD\x64\xF0\x87\xE5\x97\x39\x87\xFC\xCA\xE3\x71\x51\x94\xD2\x5B\x9D\x04\x07\x90\x98\x37\x0D\x8A\x18\x99\xC5\xD9\x38\x83\x76\x8F\xBE\xFC\xCA\x7A\xF2\x8B\x8F\xBD\xD0\xA8\xD0\x68\xCA\xCC\xA8\x49\x7E\x75\x31\x7F\x46\x9B\xC8\x2F\x1C\x8E\x0C\x12\x6C\x97\xDE\xE7\x76\xE1\x8E\x27\x47\x86\xD0\xA0\xD0\xB2\x7C\x36\xB9\xAB\x93\x60\x59\x2A\xC1\xE8\x8B\x8C\x0F\xB5\x1A\x1D\x25\x98\x46\x1F\x11\x53\xE7\x50\x05\x25\x58\x4E\x71\x5F\x26\x2D\x86\xCF\xC2\xB3\x49\x96\x60\x53\x67\x93\x86\x79\x3A\x4B\xB0\x6D\x8D\xEE\x49\x30\x1D\x06\xC7\x12\x2C\x4B\x24\x98\x4D\xCE\x26\xE5\xB4\x7B\x2A\x51\xA5\xE8\xCE\x26\xB3\x99\x1A\x96\x6A\x58\xD4\x2B\x49\x82\xE1\xED\x93\x0B\x39\x9B\x94\x2E\x63\x36\x29\xA2\x04\xCB\xF8\x3F\x80\x24\xBA\x38\x4E\x8A\x22\xB3\x49\xD1\x49\xB0\x2C\x9E\x4D\x4A\xE0\x8E\x22\x48\x30\x64\x8B\x97\x92\x04\xDB\xEE\x2E\x75\xDB\x57\x1B\xD1\x9D\x4D\x06\x09\x76\xB1\xDB\x4E\xB3\xDB\xEE\x2E\x9D\x23\xC1\xF2\x9E\x04\x0B\x56\xA9\x3A\x07\xE1\xC6\x12\x2C\x27\x09\xB6\x9B\x24\x58\xD6\x49\x30\xCB\xC9\xE2\x89\x9B\xDA\x18\xC3\x9F\x24\xD8\x6E\x67\x49\x82\xE5\xC8\xDE\x77\x93\x04\xDB\xE9\x0D\xF0\xB2\x4E\x3E\x3D\x34\x05\xF2\x0E\x18\xE8\x43\xEB\x1D\x01\x0D\x76\xA6\xC6\x4E\xAA\xB1\x13\xA8\x74\x87\xDB\x79\x38\xB6\xED\x76\xBA\x1D\xF3\x24\xD8\x8E\x73\x4B\xB0\xDC\x59\x46\xCD\x6E\x90\x60\x28\xBC\x2C\xFF\xC7\x34\x3B\x48\x42\xED\x84\xAE\x22\x6A\x76\xA3\x04\x23\xD1\xC5\x6B\x29\x0C\x03\x4F\xAE\xED\x21\x84\x55\x34\x56\x34\x0F\x0B\x82\xEC\x61\xEE\x21\xAB\xCD\xEE\xA5\x66\x07\xE0\x68\x07\x49\xB0\x4B\x00\x20\x28\xC1\x1E\x52\x5F\x04\x93\x7B\x88\x7B\x18\x49\xB0\xDD\x41\x82\xED\xF4\xA2\x7E\x68\x27\xC1\x2E\x3A\x13\xE5\xD4\x0E\x94\x53\x0F\x25\x09\x66\x59\x82\xD9\xEE\x0D\x82\xE9\xA1\x6E\x27\x4B\xB0\x9D\x41\x82\x5D\x32\x25\xC1\x76\x00\x33\xC2\xC9\x16\x38\x08\x12\x29\xBB\x61\x2C\xAB\x4B\xEE\x12\x14\x29\x08\x64\x00\xD7\x5D\x0C\x2E\x45\x8F\xBF\xCE\x8F\xB0\xE3\x02\x19\x62\x51\x86\xEC\x2E\xDD\xEE\xBE\x04\xBB\x38\x95\x60\xBB\xA3\x04\xCB\x51\x82\xED\xF6\x13\x27\x80\x44\x57\x97\xDC\xC5\xD8\x9D\x20\x09\x96\x71\x77\x24\xA3\x5C\xC6\xDD\x89\xCD\x24\x58\x86\xBD\x63\xAE\xC4\x10\x21\x80\x10\x45\x3C\x03\x4D\x34\xBB\x80\xDB\xED\x62\x26\xB7\x1A\xC4\x5C\x01\x4B\xC7\x10\xBB\x10\xB8\x59\x26\x5F\xE5\x0C\xF9\x1E\x66\x43\x2F\x3A\x57\x65\xD4\xDC\x4C\x7C\x66\x00\x57\x95\x62\x56\x4D\x11\x24\xDB\x46\x72\xD3\x87\xF1\xCA\x17\x3A\x30\x4B\x47\xB1\x0C\x60\x5B\x0D\x8B\xE7\x50\x25\x31\xC7\x2F\x0C\x7F\x84\xC3\xAF\x4A\x57\xC1\xF0\x25\x46\x3E\x3A\xFB\x92\x7E\x44\x17\xE0\xA5\x74\xAC\x30\x42\x83\x13\x59\xB7\x12\xC7\x8B\xF2\x17\xB4\x34\x93\xE9\x95\x10\x4E\xD0\xD0\xE5\x98\x7C\x8E\x0B\x76\x4C\x57\x07\xAB\x0C\x7E\x8D\xF7\x57\x19\xEF\x69\x70\xEB\xBE\x47\xC8\xFD\x95\x0D\x25\x21\xEA\x8D\xDC\x4F\xDB\x75\x3C\xCE\x95\x9D\x3F\x86\xE0\x4D\x8F\xF2\x45\x2D\x39\xC8\x5F\xB7\xC1\x0E\x19\x4C\x49\xEC\xF5\x73\x68\x04\x6F\x55\x14\xCF\x5D\xC0\x89\x59\xDF\x7B\xBE\xF4\x80\x17\x0D\x5C\xDF\x06\x29\x43\x90\x22\x8A\xC9\x97\x8C\x29\x09\x4F\x2C\x57\x53\x17\x75\x99\x46\x0D\x79\x20\x9D\x99\xF3\x76\x16\xBC\x70\x65\xD9\x69\x24\x0C\x8A\xB2\xBC\x73\x21\xCB\x27\xF2\x64\xC6\xA7\x93\x73\x33\xD9\x38\x8C\x2C\xC1\x07\xBB\x1C\x72\x8E\xA2\x9A\x87\xD3\x5E\x67\xF0\xDE\x5B\x71\x30\x2D\x93\x17\x54\xB1\x73\x7C\xF1\x19\x7A\xBC\x78\x17\x94\xB8\xBD\xCA\xE0\xFD\x68\x43\xC9\xEB\x61\x8F\x42\xE9\x94\xC3\xAF\x22\xFE\x1A\xC5\x5F\xE3\xF8\x6B\x47\xFC\xB5\xDB\xE9\x95\xE2\x8A\xA4\xFA\xA5\xE1\x28\x21\x4B\xDC\xC3\xE7\x44\x60\xC4\xBB\x53\x26\x46\x57\xC7\xB3\x65\x54\x94\x48\xA1\xA0\xF8\xEA\x3C\x31\xDC\x4B\x8F\xDF\x15\xEA\xE1\x01\x42\x56\x86\xEA\x5D\xCA\x86\xFE\x25\x90\x2C\x9E\x25\x66\x49\xA0\xE8\x2E\xDA\x52\xB0\x5E\xE7\xF3\xAC\xD7\x66\x76\x65\xB1\xC9\x03\xD4\x33\xB6\x6B\xE8\xCE\xB3\xA2\x67\xD7\x20\x2F\x83\x59\xBB\x46\x46\x76\x8D\x2C\x5A\x2E\xE7\xD9\x35\x42\x95\xCB\xB4\xA0\x40\x40\xCA\x0D\xFA\x26\x8D\x41\xF4\x25\xCF\x80\xCF\xF2\x9D\x8A\x9A\x63\x6B\x66\x7D\x2F\xD6\x6C\x3F\x49\x4D\x67\xE2\x89\xF2\xFE\x4A\xC5\x73\xD7\x91\x45\xCD\x0B\x8F\x12\x2C\x5A\x7B\x39\x04\xBF\x37\xF5\xD0\x9B\xBA\x27\xAA\x47\xA9\xA8\x2E\xD1\x1A\x5A\x97\x3D\x7B\x6F\xAF\x06\xD9\x4B\xEB\x61\xE9\x86\xAE\x9C\xE3\x62\xC8\x11\x59\x17\xF2\x92\xCE\x17\x73\x34\xCA\x93\xBC\xAE\x8A\xD1\xB0\x24\x51\xDD\x99\x79\xD9\x40\x39\x74\xA5\x1B\x46\x27\xC3\x20\xA4\xB9\x0A\x28\x52\xD6\x95\x87\xAA\x7C\x34\x60\x92\xA8\x48\x4E\x2F\xB8\xCA\x2D\xAC\x36\x8B\x4B\x4D\x09\xAC\xAD\x3C\x53\x8F\xBD\x44\x3B\x65\xB9\x22\xEB\x81\x5B\xA8\xB7\x47\xB7\xE8\x91\xDA\xE7\x06\x20\x8F\x2F\x72\xDB\xCF\x44\xA9\x5B\xA2\x6C\x18\x01\x4D\x5E\xD4\xB7\xE9\x96\x9D\x5B\xF4\xA8\xE7\x16\x3D\x00\xD9\xB8\xCD\x8D\xDD\x00\xE4\xF1\x00\xE4\xF1\xC0\x95\x80\x67\x9A\x5D\xBD\x3D\xBA\x45\x2F\xBA\x05\x57\x05\x9F\xC2\x2A\x03\x6D\xC3\x06\x9B\x2E\x6A\x76\xF8\x88\x02\xB2\x32\x40\xFF\xB6\x33\xE2\x2E\x02\x21\x2C\xB8\xEA\x30\xDD\xEC\x9B\x12\x9D\x8B\xE8\xBC\x1A\x51\x6E\xC8\x1A\xC3\x51\x78\xCE\x4B\x3E\x72\x3E\xF9\x98\xD0\xD6\x37\xC9\xE7\x5F\x0A\xF9\x10\xCA\x75\x30\xE6\x81\x92\x84\xB7\x7F\x91\x65\xA2\xFA\x14\x58\x31\x6A\x45\x45\x1A\x77\x96\x9D\x56\xE7\x05\x98\xBB\x45\x49\xDD\x5D\x37\xD2\x51\x5A\xF7\x29\xB1\x17\xBA\x37\xB9\x6E\x64\x30\x93\xFB\x62\xC2\xFE\x4B\x4E\x12\xE4\x65\x3B\xFE\x6D\xDC\xB1\x8E\x52\xC7\x2A\xE3\x38\x2F\xBC\x45\x41\xA7\xF6\xCD\xE9\xB0\xD1\x6C\xEE\x09\x7E\xA1\x2C\xAB\x68\x03\x2C\xAE\x22\x6A\x04\xF5\xA1\x09\x52\x85\xE2\xFB\x4F\x55\x43\xD3\xA7\xC7\xAB\x6F\xA8\x1A\x69\x0C\x59\x82\x9D\x3B\x83\x49\xE9\xC3\x48\xF7\xAA\x51\x79\x7F\x9E\x2D\x24\xFE\xAB\xD1\x33\xF4\xED\xFF\xEE\x47\xF1\xDF\x5F\x3C\xE6\x55\x4E\xBE\xFD\x47\x2B\x31\x2D\xD9\x53\x77\xCF\x10\xB2\x4E\xD6\x96\xFD\x42\x1B\xB9\x97\xB2\x09\xEF\x55\x18\xB5\x00\x3D\xF1\x48\xF0\x83\xD0\x62\x6D\xF6\x64\xEB\x35\xE5\xB7\x3C\x71\xB4\x36\x7E\x1C\xEF\xA0\x6A\x52\xF2\xFC\x7A\xDB\x29\x0B\xF0\x7C\xD3\xD4\xF3\x89\xA9\x67\xEE\x60\x4C\xC7\xDA\x18\x26\x45\x61\xF0\x27\x0C\x14\x63\x4B\x97\x79\x7D\x94\x6E\xD5\xAF\xA3\xF9\x7A\xEA\x43\x43\x9A\x64\x88\xCF\x3F\x65\xA2\xC8\x3B\xDD\x62\x46\x80\x37\x03\x34\x51\xA2\xEB\x3C\x53\x15\x4C\x66\xA8\x42\x1F\x78\x3C\x4C\x88\x2E\xBB\x28\x9A\x8A\x9D\xED\x0D\x19\xD2\xD5\x01\xBE\xD8\xCD\x3E\x58\xB2\x1E\xD2\x26\x37\xF3\x26\x06\x83\x9F\x65\x5B\x96\xD8\x96\x0D\x8C\x4D\xCD\xD4\xC8\xA8\x46\x86\x6E\x62\x2E\x3B\x1C\xDB\x76\x19\x26\x0B\x99\x61\x73\x96\x36\xB9\x91\xCD\x19\xA7\xE2\x91\xB9\x25\xC2\xEF\x22\x98\x06\x56\x96\x41\xDB\xC9\x91\xB9\x21\x56\x03\x55\x0E\x57\x19\xF6\x58\xC4\x78\x6E\xC0\xE5\x4C\x9F\xCB\x85\xAB\x44\x81\xCB\xD9\x15\x59\x6F\x77\x0B\xB4\x8B\x45\x5E\x11\x1A\xA1\x7D\x14\xB3\xBD\xED\xC0\xF6\x76\xF0\x2E\xD6\x74\x57\x86\x46\xB4\xA5\x57\xCC\xF6\x54\xF7\x26\x23\xB6\xC7\xA7\x4B\xA8\x08\x6E\x0F\x6C\x6F\x3B\xB0\xBD\xED\xC0\xF6\xB6\x87\x3B\x45\xA6\xDB\xC5\x66\xD3\x6C\x8F\x4E\x42\x01\x3C\x77\xC5\x93\x50\x7C\x0C\x07\xA3\x12\x95\x37\xCC\x21\x11\x4F\x42\x1F\x5F\xC9\x80\xDB\xDE\x5E\x4C\x12\x9B\x8D\xA1\x51\x4B\x57\xBA\x01\xBA\xD9\xB9\x21\x2D\x28\x1D\x97\xAE\x2B\x52\x7B\x11\xF3\xBA\x64\x87\x10\xB6\x10\x4E\x5F\xA6\xCC\x15\xC0\x6B\xC2\x2E\xE1\x52\x29\x27\x5E\xC5\x53\x3E\x81\xE1\x0E\xBC\xC2\x58\x04\xE5\xB7\xC3\xCB\xE8\x9E\xE8\xC5\x95\x62\xEC\x82\x4F\x83\xE3\x04\xB7\xA7\x0D\x9A\xD8\xCB\x87\xA6\x75\xA5\x13\xE9\x69\xA1\x2C\xBF\x15\xDE\x8E\xA2\x5B\x04\x7D\x0B\x2D\xE1\xCA\xA4\x16\xEE\x52\xD2\x4E\x78\x12\x9D\x0B\x05\x71\x18\xE9\x55\x74\x2F\x08\x57\xE5\xF0\xFB\x82\xFD\x00\x02\x63\x41\xEE\x83\xE9\xD1\x61\x87\x8C\x29\x88\xD0\x0B\x05\xD6\xBA\xEE\x31\x1A\x0B\x8C\xC6\x32\xA3\x31\xE1\xEE\x41\xC2\x68\xD4\x14\xA3\x51\x53\x8C\x46\xCD\x61\x34\x16\xAF\x3A\x37\x86\x12\x2C\xE0\x4D\xE1\x92\x53\x0D\x07\x36\xA3\xE6\xB0\x19\x0A\x1E\x17\xD8\x4C\xCC\x59\x25\x43\xEA\x18\x0C\xA7\xC2\xA9\xD3\x42\x56\x29\x19\x2A\xF1\xB6\xFC\x97\xE7\x83\x2F\xFF\x26\xF8\x9C\xE4\xE4\x31\xB3\x40\xFB\x07\x99\xCA\x7E\xD5\x09\xE3\xA9\xCB\xC6\x49\x62\xC4\xEE\x0A\xAB\xEA\xB2\xD1\xA4\x32\xFF\x0F\x50\xFA\x16\xA9\xC1\x82\x05\x9E\x99\xDB\x7E\xA3\xB0\x87\xCE\x25\x48\x52\xC2\x9B\x19\x61\xAF\x1B\xC9\x01\xD1\x48\x1D\x98\xAA\x16\x84\xBD\x2E\x09\x2E\x18\x7B\x10\x3D\x4A\x0C\xD9\x56\x7A\xC2\xFE\x01\x49\xFB\xFC\x9B\xD2\x7E\xAE\xB4\x37\xDF\x94\xF6\xDF\x94\xF6\x5F\xA6\xB4\x37\x2C\xED\xCD\x1C\x69\x6F\x1E\x24\x69\xFF\x25\x74\x3C\x3E\xA9\xCF\x75\x7C\x3B\x28\xC8\xB0\x54\x14\x39\x1D\xD2\xD6\x62\x33\x05\x81\xEE\x77\x76\xBE\xCA\x52\x64\xE4\xAB\x5C\xAB\x4E\x15\x20\xB5\x41\x3A\xC5\x1A\x01\x4A\x7B\xB9\x38\x5B\x31\xD6\x50\x5D\x0D\x65\x6A\x15\xF5\x06\xA8\x01\x0B\xCA\x77\x4D\x00\x4C\xA6\x1C\x0F\xA1\x2C\xBD\xC1\x21\xF9\xAA\x19\x3A\x1E\x8A\x79\x56\x52\x3E\xA6\xC3\xFC\x7D\x26\x82\xB1\xA8\x3B\xCE\x87\x9E\x79\x23\x10\xC3\x7B\x31\x0E\x80\xA5\x58\x4D\xC8\x55\x71\x1C\xE3\xDF\x0D\x71\x32\xC6\xBF\xC7\xA1\x23\xFE\x2C\xB9\xF1\x1F\xD2\x97\x3E\x56\xAA\x49\xD7\x28\xC9\xE1\xD0\x1A\x9A\xB2\x13\xC1\x2D\x66\x5C\x47\x31\xEA\x92\x18\xFF\xD1\x29\xCA\x58\xFF\x97\x20\xF0\x13\xE6\x4C\xD7\x0A\x3D\x8E\x94\x6E\x17\x86\x03\xD7\xA9\x1B\x84\x96\x73\x6C\xC1\x9A\x20\x1E\x65\x03\x44\x98\xEC\xF9\xDA\xDB\xCC\x0D\x42\x5A\xA6\xFD\x1B\x84\x00\x58\x8E\xE6\xAE\x9D\x8A\x29\x93\x35\xFD\xC2\x08\x54\x41\x20\xE7\x31\x5B\xC0\x68\xDA\x37\x4B\x4E\x61\xCD\xB2\x6D\x1B\xE3\x3C\xCB\x79\x63\x0C\xE7\xE0\x09\xD6\x28\x57\x4E\x72\x8F\x09\x61\x61\x01\x4F\x45\xBC\xCE\x44\x56\x1A\xEB\xF2\x38\x54\xEB\x94\xCB\x59\xBB\x22\xE0\xC2\xF3\x3D\xE1\x0E\x57\x59\x96\x1F\x91\x68\xF2\x60\x09\x49\x94\x42\x21\x92\x61\x18\xEB\x7E\xE8\xF4\x52\xA3\xE9\x76\xE7\xD4\xCD\x47\x11\x8C\xF6\xAA\xCB\x6F\x4E\x37\x1F\x75\x1B\xA2\xD3\xF0\xC4\xD8\x82\xD3\x91\x63\x77\xE7\xC1\x75\xA1\x50\x75\x6A\x0F\x50\x98\x38\x15\x8D\xF6\x14\xA0\x34\x35\xDA\x6B\xA7\xD0\x68\xAF\x79\x49\x75\xC9\xD0\x1B\xE1\x30\x1C\x9D\x40\x15\xBC\xDC\x09\xDA\xB9\xE4\xAF\x84\x97\x18\xB5\xB9\xFC\x96\x29\x8D\xFE\x4C\x5F\xA5\x9F\xDA\x1C\xC8\x73\x6D\x0E\xB6\x61\x57\xF0\xBD\xA0\xEF\xCB\x3D\xB0\x12\xE2\xC2\xA6\x15\x2D\x28\xD5\x0A\xA5\xCB\xC4\x85\x46\xE7\x25\x1C\x92\x73\xB3\xED\xC3\xCD\xE4\xE4\x4B\x7B\x8C\x71\x9C\x05\x85\xD3\x20\xA4\x0B\x5A\x3F\xA2\xFC\x7F\x30\x76\x5A\xB7\xAC\x67\x57\x20\x5F\x36\xC0\xC0\x6B\xE4\x44\x22\x3A\x27\x12\xD5\x25\xA6\x82\x25\xCD\x34\xAA\x9C\x60\x1A\x15\x01\x95\x02\x03\x89\x24\x34\x5A\x24\x79\x9B\x0C\x67\xF9\x8D\xF6\x1E\x9C\x66\xE9\x64\x79\x53\xCA\x1F\x04\x6D\x7D\x44\x34\x9B\xE0\x7C\x25\x69\x2C\x82\xCC\x1E\x22\x5A\x4E\x44\xB4\x9C\x88\x68\x39\x11\xD1\x72\x22\xA2\xE5\x44\x44\xCB\x49\xF8\x75\xA9\x13\xD3\x1D\xE7\x5F\xB5\x8E\x37\x94\x92\x27\xCC\xC4\x89\xB7\xD7\xD2\x17\x94\x79\x10\x48\x70\xBD\x56\x4E\xF4\x54\xD1\x1F\xAE\x44\x39\xBD\xAF\x11\x73\xF7\x35\xA2\xB7\xAF\x11\xDD\xBE\xC6\x09\x7F\xA2\xAD\xB5\xA7\x5C\x4B\x8A\x30\xD6\xDF\x90\x88\xA9\x07\x33\xF5\x5C\xB4\xA1\xA5\x31\x21\xF8\x44\xCB\xE9\xCF\xA1\x69\xE1\x9F\x41\x14\x91\x36\x25\xBC\x89\xB4\x60\x9C\x3E\x0C\x6A\x45\x0C\xA4\xA7\xCA\x71\xB2\x36\xE4\x95\x42\x96\x77\x49\x99\x05\x66\x43\xD9\xCD\xD0\xC8\xA7\xFC\xA8\xD6\xB0\x33\x43\xAB\xA1\x55\x78\x43\x18\x17\xB3\xF2\x27\x28\x2E\x0D\x7B\x2C\x6E\x3B\x05\x10\x61\x47\x19\x5D\x2B\x67\x28\x49\x20\xDD\x5E\x6C\x72\x97\xFB\x9B\xE0\x03\x0A\x48\x79\x13\x47\x4D\xC6\xCC\xDB\xFE\x08\xB6\x94\x34\xC2\x76\x6E\x91\x5E\x31\x46\x0E\xCA\xDC\x2A\x24\x2E\x0D\x24\x5E\xBE\x5F\xCB\x6C\xE2\x35\x6D\x17\x71\x25\x91\xB5\xD0\x1E\xC4\x9D\x00\x1A\x09\x0F\x70\xD0\x7E\x14\x28\xA8\x73\xAA\xAB\x2A\xBE\xEB\x4C\x2E\x97\x00\x33\x13\xCF\x5B\xE9\x6E\xC6\x82\x15\x5A\x6B\xA1\xCB\x98\x61\x0E\x2F\x36\x73\xB4\x67\x19\x5B\xE0\x9B\x9C\x1C\xB5\xB7\xB6\x8E\xA5\x8A\xC1\xFB\x72\x19\x6A\x90\x9A\xD4\xE1\xC7\x05\xF7\x94\x82\xEE\xE8\xD0\x05\x5E\x4E\xF4\xDD\x18\x8A\xAE\x0A\xBD\x67\x07\x2A\x8C\xFC\xD8\x39\xA2\xD1\xEA\x8C\x32\xB6\x41\x1F\x5E\x4B\x28\x37\xB4\x48\x4C\x5C\x24\x26\x2E\x12\x13\x17\x89\x89\x8B\xC4\xC4\x45\x62\xE2\x22\x31\xDD\x22\x49\x73\xFB\x17\x30\xF3\x82\xB3\x3D\x3B\x53\x0B\x97\x77\x59\x08\x71\xFB\x97\x91\xDF\x50\x9C\x59\xE7\x37\x8A\x8E\x5D\x9C\xD1\x5B\x7A\x05\xC8\xC3\xA9\x1D\xA4\xEC\x08\x4E\x51\x27\x74\xAF\x89\xFC\xC3\x38\xAB\x86\x2E\x5F\xAB\x41\xD9\xD0\xC4\x01\x23\x56\x35\x61\x55\x4F\x61\xD5\xF0\x3E\x86\xB0\x6A\x88\xB6\x02\x56\x39\x31\xFE\x1C\xAC\x46\xF9\x37\x69\x1B\x1B\xF2\x2F\xC4\x16\x48\x4F\x30\x01\xAB\x26\x88\x53\x03\x4C\x83\x03\x7B\x1B\xA7\xE3\xBC\x15\x62\xD4\x12\x46\x39\xDD\x3E\x31\x5E\xBE\xB8\x4B\xA6\x01\x97\x31\x97\x3E\x50\x81\x84\x2E\x3B\x49\xAD\x62\xA3\x1D\x99\x84\x5B\xF4\xA8\xCD\x07\x8B\xC1\xEC\xF1\xBD\x0C\x67\x06\x3C\x53\x67\xC3\x99\x81\x08\xFB\x78\x4C\xAB\xA4\x7A\x6F\xAB\x70\xEA\x17\xCE\x00\x0A\x92\xD1\xA8\xE5\x4E\x5A\xB6\x85\x73\xAA\x13\xCA\xB8\xC7\x3F\x49\x92\x60\x20\x33\x3E\x08\xDA\xEC\x22\xDD\x05\xAE\xC8\x6E\x4D\xC6\xC5\xE8\x25\x07\x87\xE8\x2D\x48\x63\x30\x7D\x24\x2F\x48\x9B\xD0\x22\x2C\xC0\xC7\xA3\x41\x87\x96\xA2\x0C\xD2\x2F\x09\x75\x28\xBA\x1C\xF3\x1D\x82\xD4\x74\x86\x79\x5A\x81\xFA\x60\x35\x3F\x90\x1B\x5F\x89\x50\x21\xDE\xD7\x94\x5D\x5B\xD2\x8D\x21\xF4\x48\xE8\x45\xE1\xEA\x19\x81\xBE\x55\xA8\x7D\x5E\x2C\xAB\x3B\xEE\xB8\x05\x10\xE1\xE9\xB0\xE8\xB7\xE1\xED\x5E\x2A\x2C\xCB\x8B\x44\xAC\xE1\xC4\xF8\x7F\xE2\xD2\x78\xEB\xB0\x97\x34\x85\x93\x34\x90\xC2\x41\x6A\x00\x72\x04\x9E\x3A\x06\x03\x7D\xCE\x6D\x30\x88\xD7\x9C\xC6\x0C\x73\xB3\x1B\x31\xAA\x8A\x5B\x31\xDA\x89\xE5\x36\x2B\xCA\x18\x7C\x8C\x16\xD8\x81\x2A\x07\xB2\x3D\x46\xBA\x3C\x47\xA2\xD2\x40\xAA\x24\x09\xC6\x1F\x0F\x6A\x38\x07\x9A\x27\x8C\xCB\xA3\x4D\xB1\xC4\xF9\x19\xBD\x3C\xEE\x8A\xA5\xF1\xAB\x71\x1C\xEC\x56\xCF\x19\xFD\xE0\xA3\xF1\x2B\x4E\x53\x22\x38\x40\x7E\x16\x77\x99\x98\x0F\x0E\x87\xB0\xE6\xD5\x8D\xAB\x95\x18\x15\x80\x20\xFF\x7B\xAF\x84\x49\xDD\x11\x1A\x93\x7B\xC4\xF7\xEC\x4F\x66\x4B\x2F\x28\x0B\xC7\x8E\x76\xFC\x17\xE9\xE8\x60\x1E\x34\xC0\x0C\x06\xA8\x78\x80\x19\x0C\x50\x9D\x7F\x80\xC2\xDF\x9D\xF4\x3D\xCA\xB6\x30\x1A\xD8\x01\x2E\xF3\x35\xDA\xBA\x85\x6A\x2E\x8E\x41\xFA\x87\x93\x28\xEC\x0D\xC3\x09\xFF\xC2\x5F\xEC\x9A\xC0\x16\xBE\x8B\x5B\xD8\x83\x2D\x5C\x9E\xB4\xF0\x88\xF9\x2D\xF4\xC6\x6B\xBF\x0C\xA0\x74\x20\x31\x09\x48\x46\x86\x58\x29\x1F\x90\xAD\x88\x2B\x34\xEB\x2F\x7C\x6B\x5E\x1E\xC7\xFB\x42\x4D\x4E\x29\x02\x1A\xE3\x8F\x1C\xAE\x0C\x5F\xAC\x0B\x47\x4D\xBE\xA4\xF3\xB9\x6D\xAD\x3F\x72\xB4\xB1\xE3\x97\x9F\xE6\x03\x3F\x96\xFE\xB0\xA8\x8F\x61\x07\x68\x49\xA4\xE0\x35\x99\x97\xEB\xB4\x0B\x95\xC7\x80\xB5\x62\x14\x21\xE3\x0A\xDC\x9A\xB8\x7C\xC9\x65\x9C\xE0\x0E\x45\x51\x48\x9D\xE0\x5F\x0A\x20\xF5\x32\x42\xE8\x01\x81\x40\xA7\x20\xC0\x7B\x50\x74\x4A\x05\x3D\xAB\xD8\x8A\x59\xE2\x64\x7E\xD0\x8A\x09\xAD\x20\xF3\xF0\x7F\xFD\xFA\x3E\xD5\xA4\x2B\x0E\x7D\x9D\x34\xDD\x4B\x9D\x5A\x5D\x30\xCE\xC6\x26\x23\x35\xE9\x48\xCD\xF9\x29\x38\x2E\x2A\x58\x52\xE4\x16\x4D\xD9\x07\x41\xD5\x13\xFE\x99\x1B\x09\xC1\xF1\xA5\xE4\x73\x2D\xF3\x3C\x5D\xE6\xF9\xD6\x96\x39\x6B\x73\xBD\x11\xF1\x89\x88\xFF\x8B\x04\x3C\x14\xDE\xF8\x25\xC9\x52\x28\x53\x16\xF7\xA9\xD7\xF7\x16\x7D\x64\xB4\x8B\xE5\xF8\x67\x00\xFF\xA2\x3C\x9B\xA3\xB5\x02\xD9\xA4\xC7\x0C\x5E\x53\xAC\x32\x28\x18\xF2\x38\x00\x18\x80\xBA\x9F\xC3\xD7\x83\xDE\xB3\x1F\x0F\x30\x38\xA5\xB0\xA1\xEB\x6F\x94\xBE\x03\xF5\x1F\x90\x44\xF8\x95\xE6\x52\x4C\x64\xED\x84\xFF\xB0\x18\xFF\xC2\x69\x3C\x3E\x21\x30\xF0\x25\x6F\xBA\x85\x87\x5F\x85\x0F\x2E\xDF\xEA\x07\x57\x6E\xF5\x83\x66\xAB\x1F\x3C\x7A\xAB\x1F\x3C\x6A\xAB\x1F\xFC\x1F\x5B\xFD\xE0\x4F\xC5\x56\xBF\xF8\xC8\x96\xBF\xF8\x1F\x5B\xFE\xE2\x3B\xB6\xFA\xC1\x87\xB7\xDC\xC5\x3F\x6E\xF9\x8B\x7F\xDA\xF2\x17\x5F\xDC\xF2\x17\xDF\xB6\xD5\x0F\xBE\x7D\xAB\x1F\x3C\xA6\xFF\x01\xB0\xD9\x8C\x2E\xC9\x27\x2D\x34\xB4\x62\xF7\x63\xDE\xFF\x90\x37\x1B\x76\x8C\xC8\x0F\x69\x9B\xF8\xAB\x59\x97\x09\xE8\x11\x6B\x8D\x65\x2D\xF5\x11\x24\x68\x60\x1B\xEB\xD4\xF8\x13\xB4\x57\xA1\x6D\xD5\xE5\x0E\xF3\x2B\xC1\xD3\xE5\xED\xF8\xBE\x53\x31\x5C\x86\xB3\xCB\xEA\xE1\xCE\x82\xF4\x56\x28\x1C\xD0\x05\x49\x60\x75\x2F\xFC\x84\xB2\x2B\x7A\x31\x7E\xED\x69\x0A\x3D\x5B\x3A\x39\xFE\xCB\x53\x94\x11\x9C\x18\x20\xB2\x1F\xFA\xA0\x08\x5B\x63\xE1\xEC\x65\xDA\x5D\xA1\x04\xE5\xF7\xD8\xCD\x02\xD5\x82\x40\x1D\xAB\x18\x86\x84\x34\xF1\x83\xD8\xDF\xB8\xF5\x6F\x7A\x65\xA7\xDD\xD1\x87\xE3\xD6\xDF\x9A\xA8\x7C\xC1\x2E\xA4\xA3\xD9\x07\x24\x29\x5E\xD8\x2B\x28\xD8\x10\xD9\x49\x5C\x01\x3B\xFB\x82\x23\xCE\x06\x21\x36\x04\xC8\x96\x4B\x5E\xA0\x8D\x6B\x19\xAF\x8B\xCB\xE3\xAE\x5C\x72\xB6\xCB\x9B\x87\x01\xD6\xED\x32\xEF\x17\xA8\x21\xAA\x1C\xDA\x38\x0E\x9F\x1D\x5D\x3A\x50\xC9\x32\x80\x1C\xF6\x31\x2B\x6F\xDA\xD8\xD8\x78\xA3\x41\xD5\x95\x4E\x4D\x35\xC8\xE8\x6F\x85\x3F\x97\x89\x4F\xDF\x7A\xF3\x86\xB8\x42\x08\xD6\x2E\x2E\x13\x9F\xEB\x0A\xC6\x58\xF0\xA5\xAE\x60\x37\x16\x3C\xFB\x39\xB1\xE0\x61\xAD\x17\xCB\xE2\x05\x50\xB0\x57\xA0\x92\x62\x9D\x62\xA5\x07\x80\x44\xEE\x72\x39\xF9\xEA\x01\x0A\x9B\xE1\x12\x47\x5C\xC2\xF1\x26\x32\xCC\x76\x32\xCC\x26\x32\xAC\xF0\x23\xD8\x1B\xB3\xCB\x7A\x02\xE4\x35\x3F\x7A\x2A\xA7\xCF\x85\x81\xA6\xFA\x17\x8C\xC2\x2E\x23\x6D\x8D\x5B\x12\xA7\x6C\x68\xE3\x0E\x4C\xD2\x81\x01\x8A\x40\xC5\xDE\x10\xB9\x04\x5A\x21\x1A\xBC\x3C\x1C\xD0\x7E\x1A\x37\x34\x41\xBA\xCF\x92\x9A\x78\xA4\xC4\x20\x62\x76\x8F\x18\x77\xF3\xD8\x1D\xBE\x00\x4A\xEE\x8A\x97\x63\xB1\x7F\x04\x8B\xD1\x72\x95\x77\x18\x23\xD0\x72\xF0\xE8\x8D\xCF\xE2\xC8\xD8\xCC\xF9\x44\xF7\xAA\x87\x3B\xE1\x77\xB4\x61\x2F\xF2\x10\xF8\x85\xA7\x66\xCB\xA1\xAC\x7C\xB5\x94\x76\x42\x9B\x2A\xBF\x83\x52\xFA\xC2\x0E\x6A\x8C\xD6\x53\xCE\x63\xC7\xA7\xD6\x74\x1C\xA3\xE8\x4A\x42\x3C\xB9\xD9\x23\x4C\x18\x2B\xE9\x4B\x71\xB8\x61\xBA\xCB\x6A\x4C\xF1\x85\x77\x90\xFB\xBA\x49\x8E\x8D\x28\xC1\xC0\x8D\x31\xD8\x02\xE7\xB1\xD8\xAB\x76\x38\x15\x15\xFC\xF2\x53\x7A\xDE\x8E\x56\x27\xB6\x2B\x3C\x90\x27\xE0\xDF\x46\xD9\xC2\x81\x6A\x08\x16\x47\x0E\x63\x98\x66\x73\xAC\x0B\x7B\x40\xCA\xAD\x00\x62\x48\x94\xDB\x0C\xB7\x8D\x8E\xCF\xC5\x46\x2D\xDD\x7D\x56\xAC\xE9\x1A\xCE\x14\x8E\x2A\xAE\x21\xEF\x84\xCC\x11\x3B\xC9\x30\xC3\x79\x50\x6D\x33\x3C\xFA\xE3\x8C\x7E\xCC\x4C\xD0\xBE\x27\x68\x2F\x12\x00\x26\xFB\x00\x13\xCE\x24\xA7\xC7\x48\x62\xF4\x31\x87\xB2\x1E\x37\x78\xC4\xB0\xE3\x00\xEE\x90\x35\xA7\xDE\x8F\xAD\x23\x64\xC7\xB7\x87\x35\x82\x1F\xF4\xCE\x21\xBA\x8E\x75\xBF\x63\x9D\x62\x4A\xB2\xB5\x61\x07\xB0\xE0\x4E\x21\x15\xF1\xEC\x51\x3A\xCC\x4D\x23\x89\xA3\xD0\xDD\x3A\xD3\x3F\x09\x84\x6F\xA9\xFF\x44\x7F\x74\x99\x3F\xD1\xEE\x55\x3B\xD2\x8D\x77\xA7\x0F\x3A\x31\xFE\x6B\x74\xB9\x17\x65\xF9\x6B\x0F\x95\x45\x40\xF7\x3D\xA2\x17\x1B\x09\xB6\xFE\x8E\xB6\x72\xE2\x4A\xE1\x1C\x1B\x35\x04\x6D\xE3\x1A\xD5\x36\xE4\xE9\xE0\x2F\xA7\xE0\x0A\xF0\xFA\xE1\x68\x8A\x8D\xAE\x17\x04\xC5\x82\x08\x1C\x63\x92\xEB\x16\xB7\xD1\x2A\x5A\x9F\xB8\x18\x3D\x47\x28\x37\x1B\x10\x90\xB8\xAA\x51\x4B\xB5\xF1\xB8\x23\x10\x4E\x2D\x11\x55\x0B\x6E\x15\xBD\x0C\x84\xB3\xB4\xEA\x2E\x6F\x1D\xE7\xA4\x59\x6E\x29\x66\x1B\xE6\x02\xA6\xF1\xCD\xDD\xF5\xE3\xA6\xEB\x43\x02\x73\x4E\xFA\x1F\x68\x17\x2E\xB6\xB9\xCC\x67\xFE\x99\x8C\xEE\x5A\x3C\x6B\xD2\x2E\x68\x91\x2B\xCD\x9E\x27\x97\xA2\xED\xE7\x52\x3F\x66\xF9\x69\xFC\x02\x91\xF1\x91\xC3\xD5\x20\x38\x07\x10\xD9\x2B\x26\xFB\x2C\xF2\x7D\xE4\x66\x8A\x3C\x45\x32\x22\x76\x67\x60\x01\x68\xA6\x3E\xF4\xCA\x21\xFF\x0E\xDE\xDE\x01\xC2\xD5\x7E\x72\xBF\xB5\x21\x8F\x23\x6E\xF0\x39\x7D\x5C\xC2\x51\x60\xD1\xEC\x26\x37\x9A\xC3\x18\x3B\xC6\x30\x3C\xBC\x01\x82\x18\x0D\x4A\x72\x87\x19\x37\x76\xAD\xC9\xBC\xBA\xB1\xC1\xD3\x06\xE5\x01\xED\x86\xC7\x4F\xD9\xC3\xD7\x40\xB5\xB8\xB1\x29\x60\x4B\xB9\xBA\xE4\xCF\x9E\x3D\x7B\x56\x3B\x0D\x54\x0A\x3F\xE5\xEA\x12\xFB\xD1\x50\xFA\xCD\xD0\xC0\x10\xAF\xDE\xF0\x74\xD1\x2D\x06\xBD\x38\x9A\x9C\x46\xA2\xE8\x66\x4E\x0D\xBB\x25\xA0\x64\x8C\x12\x80\x07\x8F\xCA\xD9\x64\xCB\x8A\x96\xB6\xDD\x24\x19\x77\x10\x9B\x1A\x3B\xBB\xBF\x2A\x02\xAF\x1B\x15\x25\xE3\xE2\xAA\xCA\x26\xA8\x28\x22\x2A\x8A\xAF\x73\x54\x14\xE7\x41\x45\xF1\xE5\xA2\x62\xF0\x95\x45\x45\x1E\x51\x91\x77\xA8\x30\x09\x2A\x16\x23\x2A\xF2\xAF\x0D\x2A\xB6\x80\x0C\xF9\xCF\x1C\x19\x22\x20\x23\xF2\xA8\x09\xF0\xA8\x51\x06\xA0\x83\x9D\xA3\x4E\x10\x33\x88\x88\xC9\xBE\xBE\xD7\x88\x13\xE3\x4F\xA2\xA4\xCA\xCE\x83\x9E\xEC\xCB\x45\x4F\xFE\x95\x43\x0F\x5F\x93\x49\x10\xC4\x93\xB2\x65\x82\x93\x2C\xE2\xC4\x7E\x7D\xE3\x64\x64\xCF\x83\x0B\xFB\xE5\xE2\x22\xFB\xCA\x2E\x15\x13\xF9\x56\x0C\x95\x35\xA3\xE9\x00\x5C\xD0\xE3\x01\x7D\xFA\x68\xFB\x49\xAA\x8C\x49\x55\x99\x9C\x2D\x02\x7D\x55\xC6\x44\x55\x06\xF0\x22\xAE\x6A\x74\xA2\xCA\xE8\x25\xBA\x7E\xD5\xA9\x32\x18\x69\x2B\x9F\xA3\xCA\x64\x04\xF7\xCC\xE9\x96\x50\xFC\x6D\x07\x2B\x99\xD2\x0C\xDE\x2E\xC9\x9C\x02\xE0\x7F\x93\x70\xBE\xEA\x84\x93\x90\xCD\xC7\x5F\x8A\x7B\xC0\x11\x9D\xD5\x4A\x26\x22\x50\x3F\x13\x74\x99\xB8\xC4\xCD\xD7\x39\xA6\xCC\x79\x30\x65\xBE\x5C\x4C\xD9\xAF\x2C\xA6\x74\xC4\x94\x2E\x9D\xA1\x53\x28\xEF\x5A\x3C\x39\x59\x56\xF7\xFE\x39\x22\x0B\xB6\x72\xE2\x32\xFD\x41\x78\xBA\x42\x2F\xD3\xD3\xFB\xE8\xC9\x39\x89\xA7\x2A\xCB\xEA\xD6\x8F\xC5\xCA\x78\xEE\xA2\x37\x3E\x86\x35\xF8\xEB\xCF\x53\xFD\x82\x9E\xEE\xA3\xA7\xE9\xED\xD3\x7C\xEA\x70\x6A\x8D\x9D\xC9\x24\x8E\x8E\xC4\xB6\xB8\x7A\x69\xFC\x29\xBE\x10\x1D\x69\x47\x79\xF1\x48\x69\xC8\xEB\x26\xC5\xA3\xE9\xE3\xD1\x84\xDD\x8F\xE9\xB4\x1A\x33\x07\x8F\x26\xA0\x81\xEF\x7B\x4E\xE1\xD1\x9C\x0B\x8F\xA6\x87\x47\x95\xE2\x11\xA3\xD9\x04\x3C\x32\xF1\x12\x1E\xD5\x0C\x1E\xCD\x14\x1E\x55\x0F\x8F\x66\x56\xAB\x91\xFE\x1E\x31\xB3\x93\xBD\xE5\x22\x39\x9A\x9F\xE2\x3C\x9C\xA3\x84\x10\x29\x9B\x6D\x66\x97\xD5\x72\x63\xDB\x26\x63\xEF\xAA\x87\xD7\x39\xFC\xB9\x1C\x23\x69\x76\xDB\x58\xBA\x29\xDB\xD8\xC8\xFB\x33\xE2\xFD\x36\xC6\xDC\xE4\x62\x67\x29\x4A\x30\xE7\xE9\x77\x16\xD8\xBF\x5D\xAA\x0B\x62\xFF\x85\xB3\x4B\x14\x94\x95\xD9\x7F\xC6\xEC\xBF\xD8\xAB\x2E\xA7\x0D\xED\x72\x14\x06\x00\x21\x1A\x19\x06\xA2\xC3\xB1\xDF\xF3\x4C\xA6\x24\x8E\x6F\xAB\xE9\x94\x01\xC3\x37\x7E\x44\x50\x02\xCC\x9F\x7E\x0E\xD7\x49\x98\x4F\xE1\x87\x74\x0D\xF2\x08\x23\x1D\x9D\x0E\xCA\xD5\x70\x92\x7A\xE4\x68\xA3\x22\xF3\x29\xF0\xC0\x0D\x63\x9F\x03\x83\x41\xE6\x53\xA4\xCC\xA7\x20\xE6\x63\xFB\xCC\xC7\x32\xF3\x81\x7D\x41\xC7\x7C\x6C\xC7\x7C\x96\xD5\x0E\xF2\xB5\xDC\x4D\x51\x34\x30\x21\x04\x9E\xFD\x76\x6C\xC7\xF2\xE9\xCB\x5A\xA3\x80\x5C\xD1\x66\x6A\xFB\xE4\x6A\x5D\xEE\xF4\x1A\x50\xF2\x8D\x20\x60\x9D\x8D\xE4\x9A\xA7\xE4\x4A\x01\xAB\xD1\x33\x3C\xEF\xC8\x35\xEF\xC8\xD5\x96\xE8\x43\x01\xE4\x9A\xD1\x48\x2C\x51\x6F\x5D\x90\x89\x0E\xA3\xB1\xB2\xAF\x13\xFA\xDB\x76\xE4\x5A\x10\xB9\xE6\x44\xAE\x16\x03\x26\xA0\x59\x34\xB2\x1D\xFA\x16\x90\x93\x20\x61\xF4\x75\x85\x04\x3D\x0F\x09\x5E\xD6\xCA\x4B\x0A\xEA\xCC\xC8\xC8\xCF\x89\x0C\xED\x72\xE6\x1D\x03\x37\x48\x90\x31\x87\x77\xD8\xCD\x79\xC7\x3C\x64\xE8\x14\x19\x3A\x45\x46\x3E\x0F\x19\xBA\x43\x46\x98\x04\x46\x3C\x72\x39\x21\x05\x67\xA5\xE8\x48\x07\x13\x77\x17\xBE\x3E\xD8\x43\x4F\xFE\xCF\x02\x3D\x26\xF0\xB7\x07\x80\xA2\xFE\x7A\xF9\x1A\xA3\x28\x4E\xA4\x8F\xA6\x10\xBE\x9B\xE3\x13\x34\xE8\x2F\xC5\xEC\x95\x12\x03\x12\x7B\xA5\x6C\x73\xA6\xCE\x5C\xE1\xF7\x04\xCE\x5C\x0F\x50\x63\x46\x4F\xF5\x02\xD4\xE6\x88\x5E\xED\xCB\xF3\xA1\x77\x18\x14\x12\xB4\xBA\x10\x7A\xB5\x1B\x32\x7A\x35\xA0\x57\x31\x7A\x35\xDE\x7A\x8A\xE8\xC5\x9B\x4F\x8A\xD1\xAB\x7A\xE8\x55\x1D\x7A\xA7\x10\xAC\x08\xC1\xBA\xCF\x04\x65\x8A\xD4\x21\x20\xB5\xEC\x21\x55\x31\x52\x95\x43\xA4\xCB\x1B\x9B\x91\x1B\x25\x48\x55\x29\x52\x55\x87\xD4\xA8\xBC\x61\x95\x1E\x52\x4B\xBA\x30\x45\x23\xB1\xF8\x1A\x88\xB5\xC4\x9B\x6D\x6A\x1F\x40\x20\x20\x75\x98\x20\x55\x13\x52\x55\xC2\x04\x29\x66\x19\xCB\xEC\x08\x7A\xEB\x2B\x5C\x29\x29\xE8\x0B\x02\x7D\xC1\xA0\xCF\xE3\xCA\xB2\x00\xFA\xC8\x8E\x09\xF4\x36\x5D\x59\x96\x56\x56\xD1\x5F\x59\x05\xAF\xAC\x81\xCB\x5A\x57\x24\x8B\xAB\xE8\x2F\xAE\x22\x59\x5C\x05\xA1\x58\xE0\x62\x0D\xBC\x8F\x17\x56\x31\x67\x61\x15\xFD\x85\x55\x4C\xF1\xBE\xE2\x5C\x0B\xAB\xD8\x7C\x61\x15\x18\xCD\x96\x17\x16\xF3\x14\x5A\x58\x76\x66\x61\x15\x53\x0B\xCB\xF6\x16\x56\x01\x0B\x8B\xCC\x07\xAA\xB7\xA8\x82\xBE\x70\x1E\x9D\x14\x57\xDC\x32\xAB\xA5\xFE\xF9\xA0\xE9\x92\x32\x0A\xBC\x93\x95\xF8\xCE\x8C\xD0\xA5\x34\x28\x3F\xB0\xD0\x53\xC4\xD4\x05\x5B\x11\x74\x8B\x11\x8A\xA2\x15\xC1\x92\x16\x96\xF5\xD4\xAF\x9C\x19\x41\x54\xBF\xF2\xB6\x0E\x59\xA4\x6D\xA2\x7E\xE5\xC8\x8C\xA3\xFA\x95\xBB\x1C\xD4\xAF\x7C\x09\xF4\x34\xF2\x50\xCA\x97\xC8\x85\x94\xD5\x2F\x68\x07\xCD\x25\x71\xF7\x6D\xE3\xEE\x9B\x97\xA5\x76\x39\x0D\x91\xC3\xC0\x91\x31\xC9\xB4\x98\x53\x32\x0F\xA9\x35\x31\x3B\x60\x56\x57\x51\xDD\xCC\x59\xF6\x87\x94\x19\xC8\x6C\x3E\x8C\x1A\xDA\x80\x7C\x8A\x45\x93\x63\x84\xAC\x3C\x30\xBB\x6A\x0D\x2F\xED\x50\xBA\x4D\x20\xCF\x92\xC2\xA7\x97\x0E\x57\x0F\x85\x02\x01\x74\x95\x6E\x04\x54\xA7\x6F\x6C\x6C\x47\x95\x0A\xB6\xBF\x85\x1B\xC2\xBB\x12\x28\x16\x58\x7D\xA0\x48\xE9\x4A\xAF\x89\x22\xC5\xEA\x52\xEF\x0B\xAF\xD7\x9B\x32\x48\x40\xF2\x39\x6F\x28\x6F\x8E\xB3\xD8\x31\x69\x99\x44\x7B\x23\xA7\x23\xED\x15\xAE\x6C\xEB\x21\xDD\x10\xC2\x8B\x7E\x00\x99\x51\xB4\x0F\xD7\xA3\xD2\xCB\x9A\x1C\xA6\xEB\x0A\x61\x80\xE1\x33\xED\x81\x4A\x52\xDC\xA5\x1C\x97\x5D\x5D\xB8\x9C\xB2\x2C\xE6\x31\x32\xD6\x34\x89\xEA\x84\x44\x8D\xD3\x40\x9F\xFF\x3F\x7B\x6F\x03\xAD\x59\x56\x15\x06\xDE\xF3\x73\x7F\xCF\xBD\xDF\x77\xDF\x4F\x35\x45\x7F\x6D\x7A\xDF\xBB\x70\xCD\x23\x74\x39\xB5\xD6\x48\x35\x69\x7F\xBA\x4E\xD9\x55\xAF\x5E\x17\x48\x4F\x56\x5C\x93\xAC\x49\xD6\x90\xC1\x64\xF4\xBE\xA2\xA9\xEF\x55\xD9\xB4\xA1\xA8\xF7\xBA\x28\xA4\x13\xC5\xA0\x60\x22\xC8\xC4\xEA\x6A\x42\x35\x68\x19\x94\x71\x90\x21\x48\xA9\xA3\x20\x46\x41\x11\x23\x8A\x06\x49\x83\xF8\x33\xDA\x8E\x3F\x83\x98\x50\xB3\xF6\xDE\xE7\xDC\x9F\xEF\xFB\x5E\xBD\xEA\xA6\x9A\x88\xAB\x6B\x41\xBF\xEF\x9E\x7B\xCE\xB9\xE7\x67\xEF\x7D\xF6\xDE\x67\xFF\xCC\x03\xF4\x1C\x5B\xDF\x82\x16\x01\x14\xB3\xF5\xC3\xDB\xA9\x64\x96\xAD\x4F\x16\xC3\x55\x42\x44\xD1\x9F\x3B\x28\x23\x21\x5C\x25\x2D\x5C\xE5\x90\x0C\xE1\x2A\x71\x70\x15\x32\x5B\xAF\x98\xAD\x67\x28\x23\x92\xC4\x10\xC5\x7E\x09\x4F\x61\xF3\x43\xDC\x7C\x35\xD8\x7C\xE9\x37\x9F\xC4\x3C\xAC\xD7\x6D\x7E\xB4\x70\xF3\x25\x6D\x7E\x6B\x03\xC2\xF1\xB1\x13\xFE\x6C\xE2\xB7\xDE\xD9\xFA\x47\x78\xC4\x74\x5B\xBF\x78\xCF\x23\xF6\x05\xCD\xC1\x1C\x73\x76\xCD\x34\x58\xC3\xF4\xCF\x06\xDE\x09\x8D\xA6\x81\x33\x88\xAD\x40\x44\x39\x31\xA9\xB5\x55\x53\x76\xBD\xE5\xE0\xD5\x85\x45\x02\xED\xB4\x6B\x44\x3A\x73\xBB\xDA\x54\x31\x68\x7B\x76\x4A\xFB\x43\x2F\x10\xA2\x9C\xD9\x46\x4C\xFF\x61\x67\x8B\xD6\xB7\x22\x69\x9A\x86\x20\xCC\x02\x36\x56\x44\x4E\x9D\xF9\xBE\x47\xE6\x9C\x0D\xCD\x89\xE1\x77\x41\xCF\x21\xE1\x46\x94\x95\xA7\x67\x22\x9F\xF8\x19\x80\x61\x57\x6B\x31\xAD\x5C\xA6\xCE\xD6\xD9\x4F\xB1\x76\xE6\xDC\xB4\xE2\xB0\x6B\x39\x11\x89\xD6\xBD\xCE\x0D\x53\xB3\x7F\xB2\x5B\x51\x88\xC0\x90\x6D\x7A\x53\x63\x15\x3F\x23\x9B\x0F\x6B\xB9\x3A\xE4\x3B\x52\xD2\x62\xE0\x31\xD1\xD4\x6A\x9D\x3D\xF2\x28\xE2\x35\x7E\x24\x77\x9B\x19\xBB\x85\xD1\x7E\xE7\xDA\x13\x39\xB6\xB2\x3D\x91\xE5\xE2\x13\x59\x79\x0E\x81\x06\xC4\x27\x32\x1B\x42\x1F\x22\x5B\xC7\x9C\x89\x25\xCB\x57\x9A\xD2\xFB\xB9\x13\x39\x64\xC3\xC1\x2E\x25\x05\xF2\x8D\xBD\x33\x39\xEC\xCE\xE4\x9E\x2E\x23\x19\xEA\x32\x12\x8E\x25\xDB\x9E\xCD\x1C\x2C\xDF\xEB\x32\x98\xC2\x0D\xCE\x64\xD5\x9E\xC9\x5E\x97\x51\x40\xF1\x64\xCE\x64\x3D\x77\x26\x6B\x3A\x93\x35\x8F\xC4\x9F\xC9\x31\x68\x7F\x26\x1B\x4F\x17\x43\x30\xBD\x33\x39\x9E\x3B\x93\x67\x74\x19\x91\xF7\x46\x1B\xE2\xCF\xA2\xBB\xFA\xDF\x62\x9B\x11\x9F\x83\xA8\x76\x89\xC1\xE5\x31\x67\x27\xB0\xC8\x54\x04\xC2\xBE\x55\x8C\x73\x5E\x04\x4E\x4E\xB0\x87\x51\x48\x70\x20\xB8\xC3\x19\x2E\x04\x6C\x6C\xED\x06\xE7\x48\x6D\xFB\x6E\x6D\xEE\xDD\x6A\xFB\xEE\xB6\x99\x77\xCE\x01\xC3\xD9\x39\xE5\x5E\x48\x36\x10\x98\xD7\xC9\xE1\xF4\x24\x19\x8A\xAC\x49\x3A\x28\xA5\xB3\xB0\x71\x6A\x49\xE7\x13\xAC\x21\xE0\x9C\xA7\xAE\xE3\xCD\x5A\x23\x30\x84\x03\x05\x65\xE0\x14\x94\x1A\xE1\x20\x82\xA8\xA7\x9B\x0C\x5B\x20\x88\x3A\xC5\x64\xD4\x72\x76\xC4\x88\xF5\x15\x93\x14\xCE\xB0\x76\x71\xA4\x24\xF3\x69\x55\x44\x5C\x28\xBB\xAC\x78\xC5\xA4\x02\xDD\x03\x82\x88\x3C\xF2\x10\x45\xBC\xE1\x10\x1E\xA4\x6C\x36\xE3\x55\x5A\xED\x74\xFC\x6E\x7F\x40\x0A\xBD\xDD\xA5\x60\x77\x1E\x0E\xF6\x6B\xBD\x0A\x99\x5D\x2B\xB5\xF5\x61\x2E\xEE\x0A\x5E\x80\x7F\xBE\x46\xDC\xC1\x7F\x80\x94\xC4\x47\x9C\xD9\xD4\x6A\x43\xD6\x4F\xCE\x40\xAC\x35\x50\x2F\xED\x6B\x76\x18\xB1\x15\xFF\xA2\x3D\xE1\x18\x55\x0A\x09\x8B\xBB\x14\x54\x87\x59\x0C\x12\x10\x2E\x9D\x27\x07\x35\x50\x6B\x72\x15\xD4\x81\xA0\xC4\xE5\x7E\x00\x11\x7D\x3A\xA1\x25\x9B\xB3\xFC\x2B\x04\xE7\x2C\x0D\x8F\xBA\x9C\x40\x9A\x61\xF2\x56\xD0\x1E\x2C\x21\x2A\x7F\xB0\xB5\x2B\x67\xDB\x2C\x41\x63\x6D\xA1\x87\x19\x02\xD5\x59\x6E\x0D\xDE\x1A\x67\xDD\xE5\xD4\xD7\x08\xD9\x3E\x2D\xBB\x79\x4D\x2C\x16\x24\xB8\x82\x81\x1E\x95\xAC\x1E\x7F\x9F\x7D\x90\xAD\xDE\xAA\xC4\x62\x4B\x11\x8E\xA3\x10\x8C\xCA\x40\xC8\x4C\xE9\x30\x4B\xA2\x2C\xCB\xB2\x38\xCD\x8C\x33\x05\xCB\xDB\x5F\x6C\x4D\x24\x9C\x65\x50\x9E\xFA\x5C\xFB\xF3\x3B\xC8\xB1\x42\x06\x9B\x05\xC2\xAF\xC7\xC2\x9D\x45\xF0\xFA\xE3\x87\x9C\x5B\x83\xDB\x37\xED\xAC\x20\x82\x4A\xB7\x9F\x10\xCE\x7F\x9D\x6F\x87\x04\x77\x25\xB8\x2B\xC1\x5D\x89\xF6\xBB\xA2\x05\x12\x0D\x62\x41\xF7\xF1\xEE\xDD\x47\x37\xA1\xFB\x68\xF7\xEE\xE3\x9B\xD0\x7D\x88\xFB\xF2\x1D\xFE\x49\x9B\xF9\xAF\x24\x4F\xEA\x2B\x01\x87\xA4\xE1\x0F\x7D\xB1\x58\x29\x16\xED\x27\xEB\xBE\x83\x5C\x2D\x18\xEB\x5E\xA3\x13\x3C\x00\x37\x1B\x1C\x2B\x99\xF6\x2F\xFC\x08\xD6\x64\x47\x8C\x5E\xA1\x6B\x42\x41\xD8\xD9\x10\xAE\x03\x6A\xFB\xEE\xD7\x0D\x3C\xA9\x40\x76\x26\x6E\x72\x68\xE2\xD6\x1D\x63\xE6\x4D\xA9\x18\x79\x34\xFC\x48\xD0\xC7\xC3\xAB\x3D\xFF\x5E\x89\x54\x09\x25\xDC\x83\x33\x65\x07\x41\xB2\x95\x70\xAF\x0C\xD8\xDF\x5B\x71\x75\x72\x7D\xE1\xDE\xC4\x16\xA5\xEE\x2D\x1B\x1B\x6E\x91\x79\x61\xD9\x20\x56\xB7\xB6\xBE\x28\xAA\xD1\x57\x82\xAF\x11\xAB\x4C\x02\x28\x54\x86\x2D\x1B\xA6\x02\x56\x54\x0B\x8C\xC5\x10\xF9\xCB\x51\x11\x88\x30\x49\x92\x44\x26\x49\x44\xD1\x96\x95\xFD\xC2\x9B\xBA\x05\x41\x11\xD0\x13\x83\xD8\xF4\x9E\x50\x7C\xF4\xD4\x20\x42\x81\x08\xFF\x9F\xF9\xB8\xEF\x72\x4D\xDE\x86\x67\xD3\x81\x60\xB5\x36\x56\x4C\xEB\x74\xC2\x02\xC5\x7E\x64\x2D\x1E\x80\x74\xD2\x17\x3B\x52\xB6\x35\x26\x79\x83\xEA\xF8\x76\x0F\x60\x6D\x67\x60\xDC\xFF\xB4\xFD\x17\x0F\xF7\xEC\xA3\x43\xC3\x0B\xD5\x0E\x08\x47\xE3\x6F\x32\xE7\x46\x92\x0C\x47\x92\x0C\x46\x92\x3C\xE9\x91\xFC\x70\x7F\x24\xDA\xD0\xE6\xB5\x03\xE9\x16\xFA\x1E\xEC\xE9\x70\xD7\x53\x9D\x4F\x38\x67\xE7\x57\xE3\x8B\x83\x75\x81\x2F\x0A\x7C\x31\x9A\xD4\x05\x0A\x47\x1B\x2E\x87\xBC\x5C\x93\x2F\x00\x0D\x23\x72\x39\x3A\x0E\x21\xE4\x13\x18\x97\x3F\x80\xC7\x6A\x9D\x17\xC2\x40\x01\x66\x83\xC3\x73\xE7\x76\xFB\xDE\x42\xCD\x0C\xF0\xE3\xAF\xED\x0D\x90\x52\xD7\xC1\xCC\x4A\x49\x03\xA9\x0D\xD6\x51\xF6\x5B\x9F\xF6\x21\x05\xBF\xF8\x1C\x1C\x1F\x74\xE3\x23\x07\x1A\x43\x09\xDE\x81\x3B\x9B\x3F\x22\x6D\xB0\x7E\x7A\x6E\xA1\x7E\xF9\xFB\x87\x0B\x45\x82\x06\xD1\xC8\xA2\xA5\x08\x86\x29\x82\xB1\x8A\x45\x43\x4F\x0A\x4C\x4B\x0A\x0C\x8E\x9E\x76\xDB\x1F\x29\xC6\xDE\xD1\xD0\xAA\xB7\x05\x64\x95\x8E\x94\xA2\x00\xE3\x68\x84\x33\x7E\x5D\xF8\x2D\x39\xFF\x2D\x9A\xD7\x7C\x7F\x86\x29\x95\x61\x4A\xD5\xF5\xDE\xA7\x36\x38\xE9\x9C\xF2\x91\x19\x47\x4C\x3C\xFB\x88\x90\xE8\x29\x89\x29\x02\xF7\x16\xBA\xB7\x6B\x1D\x67\x89\x30\xD1\xBD\x78\xC1\xE0\xC5\xE1\xEE\xC5\xF1\x8E\x32\x7D\xC4\xDF\x21\x9A\x7F\x5E\x88\xCC\x93\xA6\x1D\xD1\xF1\x5A\x6D\x2C\x91\xF2\x5D\x44\x14\xC8\xDE\x43\xB8\x07\xD2\x14\xC8\xFE\x1B\x0A\x76\x70\x8A\x19\xAB\x6F\x61\x87\xD2\x36\x04\x4B\x78\xD4\x85\x8A\x47\xDA\xC4\xFE\xBC\xA2\xF5\x8E\x8E\x7D\x2F\xC7\xDC\xB5\xAA\x32\x9C\x89\x20\x61\x0F\x41\x8A\xE0\xAF\x17\x8B\x66\xA9\xE3\x4F\x51\xA2\x4D\x98\x7B\x4B\x49\x2E\x23\x8D\xE4\x21\x59\xB2\x87\x20\xCB\x63\x09\x44\x55\xEC\xD4\xA3\x28\x32\x76\x72\x58\x3C\x90\xC3\xD4\x9A\x3C\xC9\x99\xAA\x4F\xD5\x09\x4A\x60\x19\xA8\xE7\xAA\xE4\x4E\x72\x7B\x48\x1A\x9E\x48\xEB\xB0\xA1\x20\xB3\x79\x73\x48\x9E\xC4\x4F\x51\xAB\x6F\xA9\xF5\xA6\xCD\x5F\xC6\xDA\xEA\xD8\xFE\xDA\x3B\x3E\xF6\x0E\xE1\x6D\x3A\x62\x14\xA6\xE8\x2D\x8E\x89\x94\xA5\xF1\xC6\xC4\x7E\x0C\xEB\x40\x62\xDF\xF1\xB1\x77\x7C\x8C\x54\x13\x6D\xDA\x7A\x48\x7C\x07\x11\x24\x36\x3F\xE9\x26\x9C\x1A\x48\x11\x08\x4F\x36\x75\xDC\x8E\x2E\x9E\x1F\x5D\x4A\x8D\x9A\xCA\x90\x9C\x5A\xE5\x34\x88\x0C\x70\xAD\x21\x73\x6A\x03\xBA\xA5\x4E\xF0\x4F\xE2\x4C\xC1\x59\xCE\xB5\x49\x53\xA7\xAE\x9F\x84\x81\x3D\xE5\xF3\x27\x01\x0E\x96\xA7\xC0\xD0\x9E\x43\x7E\x48\x9E\xE4\x15\xFF\x16\xC8\xEC\x99\x06\x7B\xC6\xDD\xEA\x3C\x1A\x12\x1E\x53\xAB\x15\x03\xBD\x5E\xF1\x57\x9D\xDE\x0B\x34\x07\x3F\x5E\xD4\xA7\x81\x0C\xFB\xC8\x3A\x79\x21\xF4\x90\xC5\xE2\x9A\x15\xE5\x6F\xEE\xB8\xF8\xC1\x76\xD5\x61\x6C\xC6\x63\xCE\x50\xA2\xF9\x2F\x0A\x0F\x39\xDC\x3E\x76\xFE\x13\x90\x95\x9F\x70\xB1\xEB\x5B\x58\x63\x41\xEA\x26\xC1\x9A\x07\xF7\x3D\x20\x0E\x14\xA2\x22\xD5\x6E\x85\x00\xFB\x78\xD0\x13\x53\xE4\x3F\x64\x88\xD4\x0C\x5B\xF1\x66\x9D\xD8\xFC\x65\x94\x25\x3B\xC1\x55\x49\x3D\x80\x28\xFC\xBA\x57\x60\x1E\xC2\x66\x38\xCE\x97\xE0\x1F\x48\x11\x0A\x0E\xC9\x6F\xE6\x2C\xF9\xC7\x38\x88\x1C\xC4\xFC\xC9\x2A\xF5\x5E\x2C\xA4\x69\x89\xDD\xEE\xA6\x54\x66\x5C\x37\x4E\x00\x49\x3A\x37\xCE\xD2\x6F\x47\xC6\x93\x28\xFF\xCC\x5D\x46\x29\xFB\xC1\xFE\x04\x7A\x2E\x13\x09\x13\x02\x3C\x7C\x13\x24\x99\x8E\x21\x20\x61\xFC\x60\xD3\xBA\xD2\x23\xFD\xFF\x2C\xAD\x0A\x12\xEE\xDF\xF5\x91\x07\xBE\x1A\x07\x70\x10\x31\xE7\x01\x5C\x66\x3C\x9B\x49\x50\xFA\x5C\xD0\x94\x7F\xCE\x95\x18\x03\x3E\xD2\xB6\xFD\x0B\xAF\xA7\x2C\xFF\x3F\xAA\x90\x94\x9F\x7B\xC8\x4B\x5A\x07\xBB\xA9\xBC\xA0\xF5\x4A\xC0\x33\x53\x39\x36\x0A\x2B\x1D\xAE\x13\xF6\x5A\xC6\x57\xF7\x00\x7D\x3B\x9E\x94\x1F\x62\x69\xA9\xFC\xAF\x34\x65\xCD\xF2\x59\x32\xD3\x9B\x75\x89\x16\x55\x47\x84\x55\x47\x84\x99\xD2\xFC\xC3\x3A\xF5\xB1\x0F\xD4\x9A\x7C\x49\x9D\x40\xBA\xCE\xAA\x71\x46\xFE\x1B\xC2\xA5\x74\x16\x97\xB0\x63\xDE\xBA\x14\x21\xA0\xF5\x25\x52\x07\x82\xFB\xBA\x91\xFC\xFD\xDE\xAC\xBF\x65\x30\x8E\x93\x37\x6F\x1C\xDF\xD2\x8E\xE3\x64\x6F\x1C\x76\x47\xF8\x30\x08\xBA\x93\xFA\xBF\x5F\x8A\x78\x9B\x54\x20\x20\xCA\xBF\xE4\xB0\x4C\xB6\x8B\x8E\xED\x42\x7C\xC8\xC3\xA0\xBF\x15\xE5\xEE\x13\x2E\x4A\x07\xC8\x29\xEB\x52\x25\xB2\xBB\x14\x6E\x1B\xFF\x9C\xAA\x9C\x54\xC5\xAA\x0A\x9F\xCF\xD1\x25\x60\x3A\xEA\x7C\x71\xD8\xF9\x1C\x42\xF2\x38\xF1\x77\x16\x9C\xC0\x54\x1E\xE3\x50\x2C\xDC\x63\x80\x3D\xB2\xEF\xE1\x7A\x11\xB2\x16\x2E\x66\x29\xF7\xF3\x9C\xCB\xC0\x74\xB9\x9D\x14\xA7\xCA\x74\xE1\x64\x86\x5D\x62\x4F\x53\xEC\x44\x2F\xE8\x44\x9A\x41\x82\x28\x88\x29\x7C\xB6\xF9\x06\x21\xB6\x7B\x64\x2E\xE8\x91\xB9\x36\xEA\x43\x4B\xE6\x82\x1E\x99\x0B\x5A\x32\x67\x3E\x44\x61\x47\x83\x4E\xBA\xF6\xDE\x5C\xC4\x2D\x79\xCB\x2E\xE7\x7C\x4E\x17\x2B\xF9\xCB\x1C\x0F\xE0\xA2\xA1\x3A\x42\x23\x28\x5A\x8D\xBB\x4C\x66\xED\x8E\x42\xC9\xEE\x24\x5B\x2A\x93\x6E\xCB\x45\x57\x63\xB7\xEE\xB2\x16\x4C\x72\x50\x74\xFF\xC1\x57\x7B\x9D\x4B\xCE\xEA\xB7\x9C\xD4\x6F\x2E\x7A\x47\x4E\xF1\xC2\xA9\x8F\xD2\x90\x22\x14\x64\x3B\xDE\x0E\x52\xFE\x43\xAC\xE2\x6D\x7D\x4E\xBE\x8A\x04\x40\x90\x0E\x5A\x3C\xE9\x16\x2E\x1D\x58\x7B\xE3\xF4\xAD\x75\xC4\xF0\x12\x22\xBC\xE8\xA9\xCB\xD9\x46\xAA\xE3\x90\x13\xA1\x85\xA7\xAA\xD8\xB0\x69\xEA\x20\xDC\x26\x07\xF8\x4C\xC9\x62\x8B\x61\x84\x6E\x6D\xF0\x9D\xF4\x89\x39\x23\xA2\xA9\x74\x7F\x41\xBD\x45\xD8\x1B\xE5\xD3\x89\xD7\x11\x2E\x52\x36\x93\x90\xBC\xC9\x47\xF9\x9A\x27\xE4\x28\x25\xDB\x0D\x89\x63\xBE\x4F\x31\xEC\x13\x22\xC8\xA6\xD8\x8B\xDC\xB5\x17\x61\xEC\x1D\x5E\x59\x0B\xEA\xB9\x12\xD9\x68\x75\xA4\x0D\xEE\x56\x4B\x2C\xCA\x39\x9C\x1F\x7B\x4D\x72\x51\xD1\x15\x01\xC7\x83\x25\x69\x91\xE9\xF6\x73\xE5\xFE\x6A\xC4\xDD\xEC\xC7\xD3\x9A\xCD\x3A\xF8\xF4\xB7\x65\x03\xF9\x9D\xC4\x07\x98\x3B\x65\x02\x09\xEE\x52\x41\x05\xC8\x6E\x8F\xF8\x97\xB3\xDB\xE5\xFD\xF8\xDB\xB2\xAC\xC7\x10\xBE\xEB\x8D\x1C\x87\x4F\x34\xEF\xAA\xCB\x7F\x84\xDB\x51\x70\xF6\xE3\x33\x10\x5A\xB5\x01\x21\xAD\xC7\xD4\x06\xEB\x5B\x5B\x2E\xB2\x62\x09\xE3\xEF\x7B\x5D\x3D\xFE\x86\x20\xD8\x79\xF1\x3F\x02\xFC\x1B\x04\x2F\x21\xF2\x33\x7E\x7B\x1B\x34\x87\xA2\x92\x3A\x43\x4C\x05\x72\x63\x52\x2B\x0A\x24\x4C\xD6\xCA\x0A\xBB\xA4\xA0\x54\x6C\xD3\x51\xBE\xC9\x5D\xF8\x3B\xFB\x01\x8E\x6F\x7B\x82\x4D\x10\x5E\x4C\x27\x8A\xDA\xE8\x45\x08\x7C\x17\x0D\xFF\x06\x06\x41\x2D\x28\xA7\xCB\xB7\x32\xB0\x49\x2B\x2C\x50\x80\xD7\xFF\x6D\xF3\x0C\x48\x2B\x37\x26\xAC\x65\x95\x6E\x0C\xAC\x57\x85\x90\x86\xCC\x5F\x67\xEE\xE6\xAF\x1E\x72\x47\x84\xCB\xA3\x46\x77\x2F\x6A\xCA\xF9\x62\xA6\xFE\x86\x50\x43\x48\xD6\x8E\x3E\x03\x21\x81\xB0\x1F\xB7\x03\xE3\x36\xAA\x3F\x70\x00\x27\xD6\xF7\x25\xCC\xB6\x08\x9B\x34\x87\x38\x8D\x41\xC0\xF1\xFC\x35\xE5\x86\x76\x2B\xD3\x7D\x55\x83\x9A\xB2\xC5\x63\x1F\x5F\xB4\xC3\x17\xBA\x1E\xA0\x8B\x11\xA6\x68\xDA\x71\x8D\x9A\xCA\x0C\x85\xC3\x12\x7E\xE7\x0F\xC9\x9C\x6E\x04\xEF\x0A\x34\x5F\x0A\x04\xE6\x47\x91\x32\xB1\xF2\x7C\x7F\xAB\x3C\x87\x39\xE5\x79\x4E\x51\x6C\xDD\x5D\x49\xE9\xD4\xE4\xA2\x73\x19\x05\x89\x47\x8F\x54\x3E\x26\x6D\xAB\x95\x19\x1C\x53\xD8\x84\xB4\x26\x64\x8E\xA9\x5C\x54\xD3\x9C\xA3\x1A\x0A\x24\x67\x72\xA0\xCE\xF7\xDD\x04\xFD\xF0\x2F\xE6\x7C\x84\x47\x15\xE7\xEA\xB7\xA2\x61\x0F\x74\xC9\xD1\x1F\x06\x64\x88\x1D\x89\x15\x42\xA4\x7E\x31\x87\x46\x6B\x0D\xE9\xED\xD9\xA6\x0E\xAD\xE6\xF3\x98\xA7\xA0\xD7\x82\xC0\x7E\xDF\x47\x3F\xF0\xDB\xE1\xC9\x5A\xDA\xFD\x0F\x80\x3C\xED\x1E\x41\xB9\x1F\xA7\x2B\xC9\x37\x2F\x1A\x42\x24\x96\xA1\xD5\x1B\x85\x50\x87\xA9\xB0\xD7\x3C\xC4\xE6\x61\xDB\x5C\xEF\xFE\x4A\xFA\x9E\x07\x5F\xA0\xE0\x4A\x8A\xF2\x74\x5B\x44\x0F\x63\x10\x85\x5A\x79\x9F\x63\xF6\x2A\x29\x28\x36\xDA\x81\x40\xDA\xF2\x0C\xC8\xD3\xB8\x8E\x94\x19\x28\xF1\x4F\x92\x3C\x9B\x7D\xDF\x54\x62\x8B\xDE\xC4\x6A\x6D\xC7\x0F\x80\x3E\xED\xA2\x34\x97\x4D\x1B\xA1\x38\xA7\xD4\xB1\xA0\x21\x26\x91\x49\x5B\x4A\x8E\x7C\x82\xAC\x48\x29\x9E\x72\x8C\xE4\xFF\x24\x11\xAF\x7E\xD0\x15\x8A\x04\x10\x76\xFB\x20\xDB\x40\x00\xE1\x33\xFB\xD0\xDB\x87\xC8\x46\x67\xF0\x54\x7B\xA0\xD9\x65\x4B\x1A\xFB\x9E\x3F\xFD\xAD\x3F\xF9\xF6\x06\xA2\xD3\x94\x82\x99\xB3\xBF\xF1\x2D\x6B\x64\xDE\xA5\xF8\xCE\x6A\x18\x39\xA5\xD6\xE0\xD6\xBF\x8E\x7A\x11\x80\xBA\xA0\x2A\x6A\x42\x92\xFE\xD8\xF4\x62\xE5\xA8\x09\xE5\xC9\x14\x6D\x1C\x3D\x3C\xF9\x8E\xE2\x6A\xBA\xA4\x8A\x14\x42\xC6\xB7\x73\x96\x4E\x31\xD5\xE7\x7B\x72\x97\xA5\x1E\x28\xDB\xB1\x70\x4E\xFD\x13\x50\x10\xB1\xEE\xEB\x28\x37\xED\x41\x98\xB3\x8D\x8B\x37\x49\xF3\xE9\x42\x19\xE6\xB5\xDE\x3C\xD6\x56\x8D\x91\x4B\x0B\xAC\x18\x1B\xE5\x79\x38\xCE\xF0\x48\xF3\x14\x7E\x3A\x2E\x1E\x35\x47\xCA\x6E\x83\x41\xD4\xB2\x9D\x27\xA7\xE3\x21\xF0\x9C\x54\xFE\x96\x59\xE1\x81\xC3\xB9\xE1\xC2\x36\xA7\xAA\x6A\xAC\x68\x70\xBA\x12\x14\xFE\x5D\x2F\x14\xF8\x8C\xAA\xEB\x6E\x8A\xA1\x63\x62\x13\x5A\x00\x8A\x92\x01\xE1\x60\x96\xC4\x54\x51\xF0\xB4\xD0\x8B\x74\xD1\x7A\x21\xB0\xAD\xF9\x4C\x2C\x56\xD8\xF7\x9E\x89\x29\x88\xF6\xAA\x90\x23\xF6\x7B\xCB\x3F\xBE\xB0\xE1\x2B\xBB\x60\xEE\xCA\x8E\x83\xB8\x82\xA0\x00\xE7\xAC\x2B\xA2\x50\xEB\x1C\x61\x5D\x70\x9C\xFE\xC4\xDF\xCB\x7A\x3F\xA1\x36\xA2\xBA\x7F\x3E\x3B\xF3\x3C\x78\xF0\x61\x30\xE9\x2E\x4E\x0D\xE2\xF4\xB7\x7E\xFB\x14\xA2\x5F\xF5\xBE\xD0\x77\x0E\xEF\x42\xAB\x83\x4F\xCF\x26\xBD\xD6\x9C\x92\x41\x31\xB0\x89\x6F\xC5\x5D\xC3\x03\x3B\xA6\x39\x38\xEE\x90\xC3\x5B\xE3\x1F\xE2\x0C\x83\xF6\x48\x65\x8B\xA8\xC8\x9D\x99\x92\x43\xCC\x13\x20\x9F\xA8\x52\x97\xD2\xD5\x71\x2F\x29\x9D\xD8\xC9\x94\xAD\x21\x38\x81\x1E\xFE\x39\x45\x51\x1F\x89\x3D\x89\x29\x20\x5E\x6B\xE8\xE5\x8D\x72\x02\xBA\x65\xAF\x33\xE6\xCC\x5C\x50\x88\xA0\x56\x78\x46\xB3\x12\x56\xBA\x34\xE9\x55\x04\xAA\x8A\xC9\xC1\xC3\xA6\x4D\x95\x73\x92\x35\x7D\x20\x48\x08\x18\xEB\x82\xC1\x71\x34\xA9\xC6\xD8\x54\x1D\x86\x31\xA8\xBA\xC4\x4A\x25\x56\xEA\x63\xE6\x7A\x21\xA1\x5C\x93\x25\x94\xA4\xBE\x60\xC4\xA4\x21\x8D\x8A\x00\xF2\x4A\x42\x51\x85\x30\x26\xCC\x24\xBC\x26\xBC\x5C\x2F\xC2\xD6\xF1\xC6\xD9\x7F\x3A\x5B\x11\x02\xD8\xB1\x1B\x7D\x09\x39\x8C\x10\x27\x9D\x3E\x1A\x39\x63\xBD\x26\xF7\xD7\x4B\xF8\x67\xB5\x96\x9B\xF8\xED\xFD\xF8\x9F\xD5\x7A\x79\x73\x9D\xF8\x6B\x09\x4B\x2C\x3B\x0C\x49\x49\xBD\xD2\x62\xDF\x2A\x2C\xE3\xAB\x65\xCE\xD0\xEE\x6E\x63\xEB\x70\xB2\x5E\x68\x7C\x93\xC0\x32\x4E\x24\x9C\x38\xB3\x1A\xC4\xBB\xD5\x36\x27\x23\x21\x9A\xC3\xB9\xD0\xE3\x5C\x0C\x2B\x33\x38\xB7\xEA\x34\xA8\x2D\xB9\x82\x10\x56\xDD\x2C\x42\x03\xCB\x88\x6F\xCB\x74\x33\x50\x4B\x58\x62\x02\x59\x56\x06\xA7\x12\x70\xA8\xD6\xB2\xA2\x30\x8F\x25\x0A\x05\x25\xA9\x90\x79\x97\xB3\x86\x2E\x9B\x3A\xC0\xA7\x02\x77\x91\x1B\x39\xDE\x0D\xE5\xC9\x2E\x68\x81\x43\x4C\xEF\x03\x33\x83\x98\xA4\x40\x37\xE6\xAF\x7A\x37\xE8\xEF\x14\x83\x78\x06\x7D\xA5\x2E\x91\xA8\xF2\x03\x0F\x71\x06\x52\xE1\x63\xAE\x92\x81\xAA\x0B\x72\xB8\xD8\x45\x4B\x3B\x42\x11\x70\x24\xE1\xB7\x0A\x4A\xB7\x2F\xB6\x0E\xC9\x8B\x82\x2F\xF4\x1F\x13\x9C\x57\x82\x5D\xB3\xB0\xD4\x5E\x14\xA4\x13\x0B\x9C\x7F\x56\x30\xE3\x4C\x20\x7D\x04\x8B\x23\x38\xD6\xF2\x4E\xF5\xFD\x82\x7F\xEB\x3B\xD5\xEB\xB1\xBD\xB8\x2B\xF8\x6E\xC1\x57\x7F\xDF\x25\xF8\x9E\xEF\x61\xC1\xAC\xE5\x63\x5D\xFF\x78\x16\x5D\x14\x75\xC0\x44\x98\x63\x3A\x8B\x35\x1C\x62\xC0\x61\xDC\x38\xFE\x72\xD9\x10\xFF\x0B\xC2\x3E\x2C\x9A\xF2\xF7\x2E\x90\x7F\xD1\x9A\x3C\x78\xD4\x2F\x07\xC8\xF2\x0F\x2F\x90\xE4\x49\x1D\xFA\x00\x1A\xF8\xAD\xCE\x19\xE7\x9D\xAD\x22\xA3\x27\x9E\x7E\x5E\x75\x8B\x7F\x70\x26\x1A\xE6\x6E\x2A\x75\xEF\x4F\xA9\x39\x34\xDE\xCC\xEA\xBB\xD0\x78\x7A\x26\x7A\x88\xBB\xF3\xBF\xAD\x0D\x18\xB2\x9F\x43\x11\x03\xFB\x71\x6B\x5A\xFA\xFD\x20\xED\x7E\xB7\xF0\xBA\x5D\xF8\xCE\x16\x8A\xC9\xBC\x6E\xCD\x83\xE5\x9A\x04\xDF\x04\x31\x0E\x79\xF2\x49\xF9\x05\x76\xE4\x74\x4B\xA0\x6B\x17\xE3\x84\x42\x36\x79\x5B\xE6\x5D\x62\x9C\x28\x1E\x54\xDE\x8E\xD2\x45\x4A\x2E\xFB\xD1\x4D\xD8\x62\x15\x47\xA9\x5C\x80\x13\x3C\xFA\x82\x9E\x01\xB3\x0F\x70\x22\xD7\x64\x49\x33\xE7\x7B\xB7\x59\x1A\x76\x48\xDE\x81\x9D\xFA\xEE\x00\x4B\xD6\x40\xA2\x40\xAA\x2D\x42\xFB\x9F\x5C\xE0\xA5\xD3\xE5\x35\x8E\x64\xE7\x36\x5C\x51\x5F\xDD\x75\x49\xAB\xE0\x94\x9D\x5C\x82\x6B\xD3\xDD\xA2\x1C\x6C\x63\x79\x76\x7B\xFF\xB6\x5E\xDC\x18\xE8\xE1\x9D\x0D\x9C\xF2\x46\xF6\x94\x37\x4E\x02\x97\x9D\xF2\x46\xB6\xCA\x1B\x84\x3F\x56\xDE\x10\xC8\x50\x88\x99\x5A\xE1\xAA\x7B\x2C\x56\xBC\xDC\x6A\x06\x25\x43\xCE\x12\x90\xB7\x18\x89\x08\x10\xBA\xE5\x26\x6E\x82\x96\x5B\xB8\xE5\x0E\x91\x82\xB0\xB1\x7D\xCF\xAA\x35\xA4\xC3\x94\x96\x9B\x3D\xB9\x76\xCE\xFB\x4C\x75\xA2\x5B\x25\xD1\xAD\x52\xA7\x28\x52\x6B\x72\xD5\x25\x95\xF1\x88\xBC\xBF\xC5\xE3\x92\x23\xFD\x22\x0A\xE7\x8C\xC1\x09\xDF\xD4\x8F\xEC\xE7\x82\x96\xF9\x20\x02\x12\xF8\x40\xDA\x6E\xF2\x15\x67\xFC\x27\x77\x64\x72\x15\x4C\x3C\xDA\x2A\x44\x5B\xA2\x82\x0E\x61\x65\xE7\x42\xC1\x1E\x8F\xF3\xFB\x74\x51\x74\x96\x31\x37\x69\x9F\x98\x9E\x04\x4E\xC5\xA5\x78\x16\xAB\xE4\x41\x49\xAA\x09\x1A\xF1\x43\xE7\x39\xDC\xD3\xE2\x55\xEC\x0D\xD6\xBC\xCD\xCB\x98\xBA\x15\x2F\x1D\x6B\xA9\x26\xB5\x76\xC1\x84\x59\xFC\x44\x26\xB4\x42\xCE\x80\x02\x11\xA2\x20\xE2\x14\xA5\x28\xDA\x44\x4E\xB4\xA1\x00\xE0\x54\x8B\x44\x9C\xB0\x27\x88\x08\x14\x44\x44\x27\xA3\xF4\x04\x90\x90\xD3\xD4\x44\xB8\x92\x11\xF5\xAC\x0E\x73\x20\x9E\xAE\x79\x84\xCD\xA3\xB6\xB9\xD8\xFD\xD5\x22\x11\xC7\x65\xC4\xE8\x8B\x38\xA0\x28\x69\x8A\x83\xF3\xA8\x27\xE1\x88\x81\x84\x23\x66\x24\x1C\x31\x94\x70\x6C\x40\xBE\x6B\xEC\x61\xC8\xBA\x80\x81\x98\x23\x50\xCC\x11\xA7\x1D\x59\x8E\x5A\x3E\x50\xD1\x27\xA7\xCE\x2E\xB2\x4A\xB0\x80\x39\xB7\xE8\x54\xE5\x2C\x8D\x20\xF1\x5A\x42\xE1\xF6\x30\xE8\xF4\x13\xB2\xAF\x4E\x16\x1C\xC6\x5C\xB1\x42\x4A\x72\x57\x12\xBB\xA2\x31\x27\x4E\x9D\xCC\xF1\x2F\x5B\xB6\x2D\xF0\x52\x04\x5D\xC7\x60\xC3\x82\xC8\xB7\x76\x49\x8B\x04\x1E\x97\xA9\x63\x5C\x24\x33\x2E\xD2\x25\x64\xA0\x38\x43\x79\x68\xC8\xE7\x97\xC2\xEA\x95\x0E\xDD\x51\x04\xA1\xA4\x98\x4E\x5E\x50\xC6\x8D\xDC\x27\xB9\x44\x5E\x76\xC1\xC0\x91\xA2\x4E\x21\x39\xC6\x96\x03\x33\x43\x8D\xE6\x86\x7A\x94\xC7\x7A\x9D\x4F\xB3\x49\x00\xF2\xCF\xD7\x99\x8F\x80\xA8\x37\x1F\x65\x7A\x83\x45\xAE\x4C\x50\xAE\x7E\xF3\x23\x46\xA5\xDB\xF2\x9C\x7C\x55\x8F\x47\xA4\x48\xC3\xDA\xCB\xA1\x95\xEE\x31\x6F\xE1\xA4\x8E\x2B\x09\x51\x95\x10\x68\xB5\xB8\x12\x21\xAE\x24\x0E\x57\x22\x14\x9D\xA8\x16\x69\xBD\xE2\xDD\xD5\x01\x51\x0B\xC9\xCE\x49\x5B\x42\x52\x85\xE4\xF7\xC6\xB8\x22\x87\xB8\x92\x60\xF3\xA4\x43\x88\xDD\x5F\xE9\x39\x5C\xD1\x3E\x8C\x78\x88\xB8\x12\x3A\x5C\x09\xAB\xA4\xC3\x95\xA4\x87\x2B\xD2\xE1\x8A\x3E\x5D\x69\x7A\x22\x5C\xE1\x27\x5E\xA7\x16\x57\x28\x9C\x76\x81\x32\x7F\x37\xCD\x31\x4E\xB3\x0D\xCE\xBB\x40\xA7\xAE\x19\x5B\x12\xD6\xDA\xBA\xFB\xEA\x2A\xC5\x82\x0D\x2E\x3F\x55\xA5\x4E\x47\x98\x7A\x6C\x91\xEE\x18\xE5\x5F\x1C\xB1\xDD\xE1\x0A\x27\x13\xD0\x08\x66\x01\xAB\x37\xFB\xAA\x46\x0D\xE9\x7A\xC1\xFE\xA4\xED\xB9\x8F\xDB\x5C\x67\xBC\xD1\x66\x42\xE2\x3A\xDB\xDB\xE3\x16\x12\x8F\xAF\xF3\x88\x2E\xE2\x20\x3A\x5A\x84\x74\xAA\x3B\xC6\xA0\x01\x33\x41\x09\xDF\x63\x02\xFB\x39\x70\x56\x39\x64\x86\x18\x14\x63\xD0\x1E\x14\x33\x67\x2A\xBC\xCE\x8A\x77\x4D\xE6\x3B\x6E\x1E\x6C\xDA\x49\xCA\xFC\x7C\x76\x26\xA0\x21\x9F\xE2\xD8\xE5\x0D\x8C\x9D\xEC\x5C\xFC\x78\xF5\xF5\xC6\xEB\x2E\x1D\x23\x67\x35\xA1\x9F\xE4\xE0\x95\x1F\x3C\x45\xF0\xDF\xDF\x39\xFC\xF1\xD5\x40\xFF\x02\x41\x63\xD1\xC8\x27\x54\x93\x90\x70\x0A\x14\x17\xB2\xAE\x74\x1A\x7F\x09\xC5\x9D\x2E\xB3\xEC\x53\x52\xF7\x87\x7B\xAB\xFB\x63\xDE\xA2\xD8\x58\x49\x0A\x87\x98\x74\xE7\xF1\xC6\x04\xE5\x3E\x86\x19\xD7\x25\x7E\x8B\x31\x37\x74\xAA\x76\x67\xDF\xA5\x1D\x1C\x9F\x60\xC0\x42\x3E\x3B\x7C\x72\xEA\xFE\x76\x10\xAD\xBA\x3F\x74\xEA\xFE\x98\xD4\xFD\xB1\x53\xF7\xC7\xA4\xEE\x67\x4D\x82\x1B\x43\xCC\x66\x00\x9A\x86\xCC\x5F\xA7\x2C\xBB\xE5\xAB\xCF\x2F\x50\xF7\x6B\x56\xBC\x27\x8C\x58\x64\xD2\x4F\xEA\xFE\xC4\x21\x1A\x63\x57\xA7\xEE\x27\x0C\xAB\x13\xAF\xEE\x97\x3D\x75\x3F\x85\x6B\x4C\x5A\x75\xBF\xBC\x8E\xBA\x3F\x69\xBF\xBA\x87\xBA\xDF\x3B\x80\xCA\x9E\xBA\x5F\x3A\x75\xBF\x9E\x53\xF7\x6B\x56\xF7\x53\x85\xB7\x47\xCA\x6C\x8B\x73\xB2\x6F\xE0\x5D\x69\xE8\x0C\x8F\xC2\x3D\xA4\x24\x6F\x78\x84\xE2\x39\xF9\x96\xA0\xA4\xB3\xBF\x29\x7F\xC2\xA5\x47\x9E\x93\x61\xF7\x08\x08\xE3\x86\x9E\xB7\x31\x46\x12\xD0\xC8\xBA\x95\xBC\x02\xD2\x31\xCC\xDA\x31\xCC\x9D\xF8\xDA\x0B\x2F\x42\xE3\x08\x7A\x21\x46\x48\xE1\xE1\x9A\x90\x36\xA6\x27\x45\xC5\x47\x8B\xA0\xFC\xF8\x43\xEE\x22\x94\xF8\x8B\x78\x4D\xFE\xFD\x9A\xA2\x88\x66\x56\x9D\xB1\x63\x1C\x60\xCF\x7F\x10\x32\x48\x79\xE8\xB8\xD1\xEA\x0C\x72\x92\xFF\xE6\x7C\x3F\x06\x76\xED\x42\xB0\x72\x9A\x07\x08\x9A\xCA\x50\x54\xD2\x2A\xB7\x41\x55\xA8\xC3\xA0\x28\x14\xA4\x7E\xAE\xDA\x5F\x8F\x8E\x6C\xFF\x8F\x45\x00\x23\x08\x9F\x2F\x93\xFF\xA9\xA0\x14\x72\xDC\xCE\xDF\xD8\xB1\x5F\x48\xC4\x17\x66\xCC\x7D\x73\x2A\x0F\xF2\x79\xC1\xE5\x01\xB5\xC9\x79\x1A\x10\xD4\xB2\xF2\x89\x0B\x1C\xE6\xD6\x59\x89\x43\xB1\xEE\x72\xE0\x39\x8A\x1C\xAF\xC9\x92\xD2\x68\x00\xA9\x3E\x36\x6B\x65\x35\x28\xAB\x8F\x4F\xCA\xF7\xBE\x86\x55\x97\x28\x08\x62\xCF\xE5\x7B\x5E\x43\x86\x01\x08\xA5\x63\x7B\xED\xDA\xCF\x04\xF7\xD6\xE5\xA4\x8E\x48\x6D\x47\x59\x1D\x90\x4C\xD8\xFF\x7A\x4D\x1D\xDB\xE2\x8D\x20\xDD\x13\xD9\x0E\xBD\x88\x93\x3F\x64\xE5\x6F\xD0\xEA\x8E\x41\x56\x0A\x72\x62\x8B\xD9\x6C\x94\x8C\xF9\x29\x8A\x64\x45\x69\x2E\xAC\x68\xD8\x99\x89\xC3\xD6\x3A\x79\xB3\x2E\x9C\xF0\x33\x86\x02\x82\xF2\xD7\xC9\x8B\xE4\x57\x5A\x1B\x93\x4A\x0D\xD2\xC0\xC0\xD8\xBD\x93\x3E\x23\x4E\x53\x2B\x24\xA2\x38\x1E\xAC\x11\x3B\x49\x33\xB9\xD5\x78\x50\xF0\x3A\xB1\x36\xCC\x6B\x27\xA4\x84\x9D\x90\xF2\x23\x89\x18\x3F\xA3\xAD\xFD\xEB\xAD\xAD\xDD\x45\x5F\xEB\x92\x96\xD4\x8A\x1A\x18\xE4\x16\x66\x14\xB3\xB9\x67\x9B\xAB\xC2\xB1\xF7\x05\xB2\xCC\xA4\xC5\x1D\xB1\xAA\x56\x1E\x86\x02\x54\x3D\xC6\x86\xE3\x59\x45\x07\xF2\x16\xE3\x4A\xE5\xB1\x81\x31\x12\x9B\x71\x4F\x67\x0B\xA3\x4A\x42\x5E\x85\xED\x65\xA8\xBF\x40\xA1\x16\x89\xD9\x45\x5F\x6B\x60\x5C\x51\x6F\x4E\x6B\x39\xE6\x81\x2B\x0A\xEB\xEC\x07\xCE\xC3\x36\x74\x95\x81\x43\x0E\x68\x94\x64\xDA\x82\x13\x8D\x5C\x52\x9D\x10\xCC\xD1\x6A\x4C\x40\x5E\x95\x5E\x69\xAD\x2B\x03\xB2\xD0\x94\x90\xC6\xB8\x40\xB1\x7A\x51\xFF\x93\x22\x24\x9E\x6A\x46\xCB\xAD\x79\x51\x4A\xF2\xAD\x03\x55\x4B\x9E\xB8\x98\x4E\xA0\x68\xEF\x40\x10\xE9\xC9\xA0\x9B\x4F\x3A\xE5\xCD\x4F\xAB\x90\x3F\x92\x93\x3E\xFC\x28\x51\x07\x83\x0B\x8C\x9F\xCF\xF1\xCB\xA3\x09\x9B\xE5\x18\x7C\xC3\x26\x22\x0B\x67\x3F\x21\x05\x78\x37\x05\xB1\xB8\x52\x2F\x3B\x6E\xC4\x70\xF8\x34\x6B\x7D\x47\x48\xD1\xFE\x97\xA9\x7D\xFF\x76\x63\x6F\xDD\x30\x06\x1F\xDD\xEF\x83\x42\xFA\x98\xCB\xAF\x68\x6A\x61\x9F\x75\x82\x52\x1A\x49\x2B\x40\x9C\xB1\x3F\xB0\xB3\xA3\xA7\x4C\x4B\xCD\x31\x92\x4B\xCD\x9F\x2B\x25\xCE\xA9\xED\xE8\x2C\x04\xEF\xAB\xC5\xE5\xD6\x14\x4B\x1C\x81\x87\x2F\xD7\xDA\x5E\xBB\x76\xF7\xBD\x8E\x81\xBF\x76\xED\xDA\xB5\x78\x0A\x72\xAB\x08\xEE\x09\xE8\xDF\x7D\x3F\x63\x83\xE7\xA9\x77\xBE\xF5\xB5\x3B\xC1\xA3\x7C\xED\x76\x64\xFB\x9B\x88\xF8\x07\x8F\xB8\x2A\x01\xBE\x81\xB6\xC1\x37\x5C\xAA\x83\xF7\x61\xD7\x95\xB6\xF7\x72\x52\x2C\x6D\x77\x76\xAE\x5E\x8B\x8F\x73\xBB\x8B\x2E\xF3\x27\x97\xE2\xD9\xDF\x76\x84\x2C\x00\xA7\xFD\xB0\xAB\xDF\x06\xAA\xA1\x21\xDD\x3D\xAD\xB5\x7D\xFC\x27\xBF\xB2\xA9\xA5\x5D\x7D\xA0\xB1\x0F\x3D\xD8\xBC\xBB\x8E\xEE\x09\x5E\xF2\x83\xF7\xAD\xDC\xF3\xD1\xBB\x2F\xD5\x31\xE9\x73\xAE\x06\x53\xD0\x5B\xDC\xE7\xE9\x2B\x47\xE0\x3B\x20\x78\xDF\x11\x9C\xD0\xF8\xD5\x17\xDE\xEF\xBE\xF0\xC4\xFB\x2F\xD6\x34\x06\xF7\xFC\xC9\xBB\x2F\x5D\xAA\xC3\x47\xDE\x47\xEA\xAD\x53\xAF\x7E\x7F\x9D\xDC\x13\x04\xB0\xEF\x95\xBF\xF0\x9B\x77\x5F\xAA\xD3\x8B\x75\x06\x29\xC4\x90\x3D\x72\x11\x02\x48\x1E\x81\xF0\x91\x5E\xDB\xE0\xF0\xC5\x47\xEB\x80\xB4\x6D\x01\x8E\x21\xBE\xE4\xBA\xFE\xC1\x9F\x7B\xF0\x23\xE9\x9B\x7F\xE6\xEE\x4B\xF7\xFC\xBB\x07\xBF\xFB\x2B\x7E\x76\xFA\x1F\xEE\xBE\x78\xE9\x1E\xFD\xF9\x7F\xFD\xA6\x37\xBD\xE9\xE3\x77\x5F\xBC\x04\x31\x70\xBD\x7B\xFE\xEE\xD7\xFF\xA7\xE5\x3F\xF9\xE9\xBB\x2F\xDD\xF3\xDB\xEA\x17\xFE\xD5\x37\x1F\xFB\x00\xD6\xFB\x07\x6F\xA8\xDF\xF8\x9C\x8D\x5F\xC1\x9F\x6F\xF8\x26\xFC\xF7\xE9\xBB\x2F\x5E\xBA\x78\xF1\xD2\xC5\x3A\xE8\x86\x06\xD1\x3D\x87\x9E\xF7\x27\x4B\x7F\xFA\x85\x7F\xF0\x75\x97\x70\x64\x17\xEF\xF9\xD8\x95\x37\x7F\xE8\x05\x6F\x7C\xEF\xD7\x5D\xBA\x78\xF1\xE2\x45\x8A\x81\x61\xFE\x8E\x10\x3D\x87\x31\xED\xAD\xF4\x58\xA3\x48\xCC\x24\xA8\xF2\x9F\x9F\xF7\xE1\xD9\x7A\xE9\x8C\x3E\xFA\x15\x61\x46\x89\x9D\xD5\xB9\xBE\x66\xCD\x75\x61\x5F\x4B\xFF\x7D\x98\x75\xE5\x13\x97\x10\x74\x1B\xA4\x95\x4D\x15\x73\x76\x58\x96\xDD\x13\x36\x2E\xFC\xCA\x75\x12\xE0\x12\x79\x58\x1D\x46\x40\xED\xD1\x5B\xE4\xB1\xEB\xF4\x0E\x0A\x2B\xFF\x92\x66\xB4\x24\xA3\x48\x45\xFC\x4F\x44\x41\x14\xE9\x08\x45\x04\xC9\xC9\x8C\x65\x2E\x8D\x4D\xD8\x4C\xA7\x44\xD0\x76\xF7\xC6\x09\xC8\xAD\x2A\xC9\xE9\x78\xA2\xD8\x1E\xF7\x35\xF6\x9A\x98\xDA\xF4\x04\xBB\x43\x92\xE8\x9E\x9D\x84\x0C\x4B\x1B\x7B\x1F\xD2\x49\x0E\xF3\xCE\xF1\xEC\x5D\xF5\x6C\x83\x8C\x65\xBD\x5C\xC0\x61\x42\xFE\x36\xC7\x37\x88\xD9\x78\x52\x6E\x41\xE2\xA2\xC2\xDB\xE0\xF8\x04\x4F\x1F\x90\xF6\xF6\x6F\xAB\xB3\x06\xB2\xD3\x14\x65\x85\x4E\xC0\xF8\x40\x10\x54\x19\x39\x42\xB8\x21\xE1\x07\xBE\x0A\xFB\x8A\x99\xE9\xA7\xA1\xA7\x90\xD8\x9D\x64\x8B\xF4\x17\xF1\x81\x40\xD4\xB3\x43\x37\xEA\x30\x98\xE1\xD0\xCD\x6E\x43\x27\x45\x0A\x7F\x88\x12\x39\xD0\x30\x33\x1B\x40\x66\x83\x7B\x27\x64\x38\x2E\xF1\x93\xDD\x10\x25\x0E\x51\x54\xB9\xDD\x91\x55\xDC\xDB\x94\x8C\x53\x32\xD8\xEF\xDF\x6E\xEC\xED\xAF\x18\x65\x42\x06\x5A\x6B\x85\xFF\x43\x64\x4E\x79\xA4\x7F\xC8\xA1\x1F\xDA\x79\xD0\x1E\x68\xDC\xAE\xDC\xEE\x44\x3E\x08\x84\xAB\xFC\xD9\x99\xCA\x02\x2B\x2B\xAE\x7C\x55\xF0\x92\xEF\x68\x3C\xEF\x13\x88\xB7\xAA\x04\x52\xC8\x79\x92\x55\xB6\x38\xCB\x95\x1B\x64\x1D\xDB\xFF\xB9\x19\xFD\xBD\x68\x3E\xD6\xF5\xE0\x9F\x14\x72\xB6\x28\xE8\x7E\xA9\x00\xDF\x73\x41\x10\xC6\xB1\xC6\xDF\x41\x8C\xC0\x96\xDB\x72\x66\x6D\xAE\x89\x69\x9D\xD9\xC7\xB6\x9B\x51\x25\x3C\xD9\x0A\x64\xD0\xFB\xA7\xFC\x0F\x41\x69\x05\x5E\x3E\xAD\x12\x9B\xD1\xDC\x2C\x20\x00\x65\xF6\xD7\x83\x63\x08\x3C\x71\x95\x43\x66\xDF\xB2\xDD\x8C\x22\x29\x84\x10\x92\x72\x6E\xE7\x58\xF1\xF4\xB4\x4A\x20\xE7\x46\xE7\xA6\x90\x10\xA4\x4C\x27\xCE\xC8\xD5\x35\x0A\xB0\x51\xC0\x22\xA5\xDD\xD1\x53\xAF\xB4\x4C\xE8\xAB\xA0\x6C\xDC\xD8\x07\xA7\x75\xF1\x5C\x15\xD4\xA3\x23\xC1\xDF\x9D\xD4\x63\xEC\x85\x15\x13\x19\x8C\xEE\x23\x7B\xF6\x2B\x55\x09\x23\x18\x1D\xB9\xFB\xB5\xF5\xD2\x59\x58\x7A\x4D\xB5\x04\x63\x0B\x53\xFB\x3B\xC1\x69\xFB\x17\x4E\xEC\x48\x28\xE7\x6C\xD2\xD8\x83\x90\xC3\x12\x2C\x41\xB9\x53\x2F\x43\x79\xEE\x55\x97\xEB\x8C\x52\xC0\x65\x1B\x13\xC8\x1A\x64\xB4\x13\xDC\xE4\x0C\xAB\xFC\xBD\x42\x40\x62\x6F\xDF\xA8\x14\x64\x55\x02\xCB\xD5\x12\x70\xB6\xFB\xC2\xA5\xEA\xE3\xC0\x46\xA0\x21\xC3\xCF\x3F\x7C\x19\x62\x40\x3E\x61\x5C\x7E\x17\xCB\x29\x0C\x30\x32\x1F\xB9\x19\xCA\xB9\x19\x22\x8C\xAF\x4C\xEA\xD5\x6E\x5A\x39\xAC\xD0\x01\xB2\x02\x2B\x88\x98\x49\x03\xC9\xE9\x2A\x81\xD5\xFE\x8C\xF6\x39\xCF\x39\x0D\x19\xCE\x68\x1F\x76\x07\xF1\xFD\xF5\x18\xE2\x93\x9B\x75\xDE\x4E\x28\xA7\x09\x65\x24\x7B\x61\x8D\x8D\x42\x40\x86\x13\x2A\x20\xAF\x32\x18\x57\x09\x14\x6C\xC6\xC3\x38\xD5\x4D\x28\xC7\xAF\x3F\xE0\xE6\xB3\xBA\x68\x3E\x34\xA3\xAB\x01\x9B\x2A\xDD\x11\x04\x9C\xAC\x1C\x27\x54\xAD\x10\x86\xD0\x9B\x15\x5B\x9E\xB1\xE5\xB7\x55\x2B\xA6\x3F\xED\x2F\xBF\x19\x17\x37\x04\xA3\x4B\xF3\x30\xBA\xD4\xC1\xE8\x97\x1C\x28\x6D\xB0\x1B\x40\x16\xD7\x05\xC8\x6C\x52\xAF\xF4\xB7\x27\xE3\xED\x99\xDD\x8F\xDE\xF0\xF7\x41\x06\xD9\xEE\xFB\x91\xF0\x7E\x64\xBC\x1F\x89\xDF\x8F\x04\xC6\x55\xB6\xEB\x7E\xB4\xA3\x5F\x59\x34\xFA\x01\xF8\x11\x99\xF5\xE0\x57\x67\xF6\xDA\x35\x35\x85\x8C\xA1\x70\xE2\x08\xB0\x9F\xE1\x5F\xF7\xC9\xE5\xA6\x85\xA9\x78\xB8\xA3\xF1\xF3\x54\x40\x6D\x5A\x32\x8C\x67\xE5\xCF\x05\xC7\x26\xE5\xEB\x86\x7D\x90\x9C\x9B\x59\xD8\xA2\x1A\xBF\x4B\x89\x94\x12\xBB\x53\x6E\x39\xFD\xBC\x6B\xFA\x5E\xCA\xA2\x80\x04\x98\xBA\x24\xFF\x88\xBD\x3E\x5D\x7E\xF7\xF0\x53\x74\x02\xC7\xB4\x1B\x72\x5A\xE7\x45\x60\x65\x15\xBB\x5B\x27\x16\xA4\x63\x94\xF5\x33\xD2\x79\x9D\x73\x72\x7E\x8C\x72\xBE\xE1\x55\xB6\x1C\xE5\x2A\xA1\xFC\x8A\x10\x2E\xBD\x9A\x13\xEF\x62\x29\x59\x95\xCD\x95\xC9\x05\x65\xAA\x5F\x06\x2E\xD4\x1F\x99\x07\x52\xD7\x55\x64\x58\xBE\x8C\xC9\x7F\xAB\xFD\x68\xAF\x4D\xC4\x09\x4D\x32\x1C\x71\xC6\x9B\x76\x47\x10\xEC\x52\xCB\xED\x67\x4E\x8A\x7C\x88\x5F\xC4\x7F\xEC\xF6\xE9\x86\x27\x0A\xF1\xA6\x55\x53\x62\x1F\xAF\xF3\x2D\xCF\xFD\x91\xB2\x93\x3E\x99\xE1\xF2\x70\x1C\xB9\x2A\x5E\xD0\x92\x0B\x16\xAC\x4A\xB4\x60\x55\xA2\x99\x55\x69\x53\x59\x9E\x6D\xC8\xA9\x23\x32\x0E\x5F\x0A\x1A\x74\x81\x0C\x19\x45\x3F\x31\x76\x1B\xCC\xC4\x6E\x37\xD5\x18\x0A\xA2\xBA\x63\x5C\x38\xD2\x08\x1E\x08\x02\x94\x31\x63\x7E\x1B\xF3\xA8\x29\x54\x12\x18\x84\xE8\x8D\x09\xC4\x7C\xD4\xD7\xE3\x09\xF5\x4B\x70\xB1\xAF\x70\x44\x79\x85\x96\x27\x3B\x81\x47\x03\xA3\xAC\xC4\x35\x3F\x4D\x1E\x81\xF8\xBB\x5D\x38\xCE\xEA\xE9\x96\x20\x1E\xCC\x24\x71\xF9\x38\xDD\xFE\xC6\x38\xAD\x15\xFC\xB3\x42\xC1\x8E\x18\xC6\x24\xAC\x6C\xD2\x02\x3F\xCD\xEB\x68\x1C\x68\x65\xB4\x82\x2E\xDE\x12\xA2\x17\x2E\x65\xE1\x46\x20\x0F\xB3\xED\x99\x39\x5A\x48\x5C\xDF\xA6\x32\x06\x72\xE6\x00\x77\x83\x0E\xEA\xCD\x03\x49\xDE\xA7\x23\xFB\xE8\x42\x06\xB2\x17\xF1\x1F\x5A\xBE\xA4\xB7\x7C\xF1\x5E\x30\x4E\xC3\x25\xD1\x85\x27\x90\xE0\x92\x51\x5F\x5F\x02\xB8\x0B\x8D\x27\xDF\xD5\x16\x05\x84\xF3\xC7\x4E\x3C\xA9\xF3\x8E\x32\x27\x10\x1F\x65\x5F\x6C\x49\xA4\x58\x36\xF6\xA0\xBD\x13\x62\x3B\x62\xE2\x1B\xDB\xF1\xB4\x69\x03\x3D\x22\x48\x94\x1B\x04\x99\xFA\x01\x22\x40\xB7\x6F\x54\x19\x24\x95\x84\x6C\x31\x09\x4E\x6C\x60\x4B\x30\x36\x81\x7C\x96\x04\xC7\xC6\x7E\xE5\xCC\x0A\xB0\x62\x6F\x58\x66\xDC\x82\x1A\xDF\x4E\x51\x78\x32\xAC\x63\xB7\x1B\xFC\xB3\x31\xE9\x2F\x44\x4F\xB1\x1A\x8D\x71\xD1\x17\x6E\xBF\xDB\x70\xA7\x0E\xE3\x2F\xA0\x68\x68\x6E\xE1\x3B\x7B\x0A\xC5\x24\x40\x36\x10\xDC\x15\xA0\xC8\x18\x98\x27\x62\xF6\x5A\xC8\x10\xD5\x8C\x3B\xD0\xD3\xCE\x73\x37\x73\x5A\xDE\x14\x70\xF3\x73\xBA\xE6\xDA\xA4\x1B\x1B\x08\x81\x1C\x8B\x43\x7B\xBB\xBB\x87\xC2\x03\x2F\xB4\xDB\xA7\x91\x20\xE7\xF6\x76\x08\x37\xEB\x02\x72\xF2\xEA\xCF\xAD\xF0\xAA\x7E\xC8\xB1\xA6\xA0\xA4\x3F\xBE\xF7\x10\xD2\xF9\xAE\x52\xEA\xEC\xBA\x5D\x85\x90\xBB\xAE\xDC\xD1\x54\xBA\xF8\xC9\x19\x02\x03\xDB\x26\xF3\x85\x1A\xDD\x61\x86\x90\xAE\xF3\xE5\xDD\x39\xBB\x8D\xBB\x7E\x6C\x62\xB7\x29\xC7\xF2\xA4\x69\x8D\xD1\xB1\x7C\xDD\x75\x02\x53\x0A\x3C\xFC\x39\x04\xA9\xD0\xC2\x06\x79\xB6\x1D\x2D\xA4\xFD\xF5\xB6\x84\x34\xF5\xB1\x95\x28\xE7\x7F\x8A\x4B\x6F\x3F\xC1\xC9\x5B\xC3\x06\x92\x2E\x82\x96\x71\x6F\xDC\xF4\xE6\x5E\x04\xF6\x00\x5F\xE6\x17\x81\x7D\x5E\x85\x47\xB4\x9E\x16\x81\x05\xFA\x89\x90\xBD\xB0\x4F\x49\x6D\x32\x4B\x0E\x2E\x92\x84\xC7\xF0\x45\xB4\x5F\xB4\x78\xEE\x4A\x30\x85\x90\xB1\x9B\xAE\x14\x33\xAC\x48\xD7\x8A\xFC\x93\xB0\x56\x50\xB0\xAD\xC0\x83\x92\x43\xF4\xC4\x23\x48\x8B\xEF\x11\x93\xC8\x14\xF1\x3D\x5B\xD0\x92\x0B\x48\xAF\x39\x5B\x26\x17\x94\xA9\x7E\x99\x0F\x21\x98\x21\xBE\x67\xBD\xB0\x6E\xCE\x45\x40\xF0\x95\x68\xE6\xEE\xF4\xE8\xBC\x6D\xEE\xA0\x6C\x61\xC9\xB0\x1B\x41\x4E\xBF\x7C\xA1\xEA\x58\xFF\x1A\x27\xB1\xA0\x72\x6C\xCF\xF9\xE2\xE1\xA8\x69\xC4\x34\x9A\x73\xDD\x68\x28\x82\x43\x02\x72\x93\x21\x36\x05\xD9\xD4\xB8\x4C\xB8\xD6\x31\xDD\x70\x25\xB4\xD2\x2D\xAF\xB0\x70\x68\x7D\x5E\x21\xA6\x05\xB5\x01\xC8\xA7\x61\x41\x33\xC7\xCE\x34\x74\xF1\x86\xE4\xDA\x7C\x61\x9F\x8A\xB7\xD5\xD9\xFE\xC5\x65\xD2\x0B\xF0\xA9\x41\xFF\x63\x52\x55\x92\x8E\xCC\x9E\xFF\xEE\x0B\x3B\x81\x55\x78\x54\x96\xFF\x92\x48\x5D\xE8\xDC\xB6\xEE\xB9\x46\xFF\xFE\xF8\xDA\x4B\xC9\x94\xDF\xCA\x69\x95\x82\xA4\x73\x3B\xF6\xE0\x98\x41\x64\xD9\x97\x90\x22\x02\xBA\xD7\x91\x7D\x65\xE3\x27\x1D\xD9\xB3\x8D\x3D\x3B\xDD\xAC\x10\x94\xFD\xF4\xB3\xD9\x69\x65\x0B\xA6\x9F\x2D\x98\x7E\x36\x3B\x7D\x84\xA7\x8C\x42\xDF\x22\x71\x73\x7E\x07\x0B\xBE\xE2\xE1\xBD\x0B\x0F\x68\x0F\xCC\x0E\xE4\xF7\x82\x05\x23\xF9\xA3\x60\xC1\x50\x3E\x13\xEC\x36\x96\x10\x52\xE4\x81\x42\x04\xA0\xE8\xC5\x6C\x1A\xD4\x40\xB6\x59\x67\xF6\x95\x1C\x84\x31\x9B\x81\x9E\xB0\xDF\x87\x8B\xC5\xD7\x83\x1E\x83\x0B\x29\x86\xD0\x13\xCE\x2E\x4B\xB8\x60\xF9\xC2\x05\xCB\x17\xCE\x41\x0F\x45\xE7\x0D\x1B\xB2\xF6\xCA\xA5\x19\x6C\xFC\xF6\x37\xE3\x69\xAB\xAD\xC2\x83\x73\x5A\xE7\x93\x45\xFB\x9F\xE2\x34\x03\x48\xF1\x58\x88\x9A\xAA\x60\x7B\x03\x48\x09\x49\x0C\xE9\x17\x09\x2C\x10\xA5\xDD\xCF\x45\xDB\xD3\x4E\x5C\xF0\x7E\x6E\xFB\xFD\x2C\x98\x1C\x45\x10\x6E\x56\xE1\xD3\x04\x3E\x21\xB9\x56\x11\x50\x7C\x0F\xE5\xDB\x7E\xCB\x1B\x2E\xEC\x04\x90\x93\x31\x3E\x1E\xE0\xFE\x0C\x23\x85\xAE\x23\x26\x0B\xA0\xCB\x30\x96\x14\x1C\x62\x16\xD2\xCD\x2A\x47\xCA\xDC\xD8\x73\x14\x1B\x18\x49\xC9\x08\xC9\x6A\xAA\x88\xD8\xB5\x1D\x19\x8A\x8F\xD1\x5B\x0C\x7E\x11\xCF\x90\xAB\x90\xFB\x49\x59\xD5\x99\x83\xB1\xB2\xA9\x4D\x53\x50\x70\x03\x83\xAF\x8A\xA3\x64\x44\x23\x37\xC1\x34\x0C\x7E\xF8\x3D\x30\x9B\x44\x1B\x89\x8D\xC6\xAD\xA3\x30\x15\x1C\x0F\x36\x45\xBC\x25\xB3\x80\x76\x6D\xC3\xC1\x47\x89\xC8\x36\x14\x74\xD5\xD0\x4B\x3C\x94\xF2\x2F\x35\x50\x12\x58\x06\x41\x10\xFC\x93\x5F\xFC\x45\xFB\xCD\xC8\x42\xF8\xA7\x9F\x7A\xA9\xB3\x72\x10\x1C\xD3\x8F\x82\x57\xC6\x4E\x12\x45\x52\xD6\x5E\xBF\x80\x7E\x04\x89\x5F\xFB\xFC\xD2\x49\x35\x76\xE7\x0E\x72\xA0\x3B\xC9\x14\x79\x8F\xEC\xC5\x74\xE1\x54\xF8\x38\xDC\x89\x3D\x08\xB9\x7D\xA0\xA9\x43\xE4\x52\xEC\xED\x1B\x93\x9A\xA4\x9D\xB0\x65\x51\x6C\x3C\x6D\x35\xE1\xF1\x8B\x3B\xCE\x2A\xB4\x2F\x98\x52\xB8\x61\xDC\x6E\x5C\xE9\xA4\xA9\x53\x5A\xC6\xDC\x81\x06\x79\x55\xB7\x87\x4E\xEA\x9D\xAC\x1D\x12\xE4\xB4\x65\x7D\x5C\x60\x65\x15\x7F\x6B\xFC\x26\x7F\xCB\x63\x89\x3E\x8F\xDF\x41\x5F\xA5\x8B\xF7\x07\xBD\xC5\xCD\x18\xD2\x77\x3F\x82\xBB\x75\xC6\x5E\x7C\xFC\xC2\x4E\xD0\x3C\x4F\x05\x75\x79\xA9\x5E\xF2\x37\x46\xF6\xA5\xB0\xD4\x2E\xC8\x3F\x25\xC0\x58\xFA\x21\x42\x56\xEB\x95\xD3\xB0\x04\xD9\x4F\x3C\xD2\x36\xF9\xE4\xDD\x48\x15\xA0\x74\x32\xDF\x4F\xFC\x13\x04\x39\xD6\x7D\x5B\xA7\x68\xE9\xAA\xBE\x94\x45\xBB\x29\x64\x47\xB7\x20\x6B\x5A\x75\x37\x8A\x2C\x90\x42\xCA\x03\xEC\xAA\x5B\x71\x7A\xDA\xF0\x3C\xA0\x32\x0C\xCE\x09\xC2\xDC\x32\xDF\x36\xA8\xC3\xB0\x8C\xA0\x9D\x41\x66\xB3\xFB\xEB\x91\xCD\x4E\x6E\xDA\x83\x5B\xC8\x2F\x19\x0A\x5C\x8C\xE5\x1B\x44\x7F\x4D\x53\xAD\x40\x51\x19\x18\x55\x19\xAC\xD8\xDB\x5D\x92\x5B\x28\x9A\x9A\x56\x94\xD6\x72\x85\x36\xED\x6F\x9D\xA0\xB8\xB2\x05\x73\x90\x45\x53\x8D\x60\x19\xFF\xAC\x40\x81\x54\x2D\x6F\x18\x1A\xE8\xF3\x2B\x43\xDE\x2E\x83\x11\x33\xBB\xC8\xC4\x22\xEF\x57\x40\xB8\x5E\x19\xC8\xAA\x10\x78\xCF\x72\x0B\x1B\xD5\x0A\xE2\x21\xC9\x75\x2B\x3C\x25\xD3\xD8\xAF\x6A\x47\x1D\xF2\x6C\x99\x49\xA4\x90\x27\x61\x83\xAB\x63\xB3\x97\xD5\x19\x4F\xB1\x69\xBF\x88\x02\x45\xDA\xD8\x15\x9A\x25\xCE\x21\x07\x83\x84\x13\x29\x82\x63\x61\x62\x3A\x61\xC8\x8C\xC5\x5B\x7F\x79\x2B\x99\xA8\x0F\xFF\x10\xB7\xFC\x7E\x64\xC0\x30\x21\x37\xCC\xA2\xD3\x10\x0F\x42\x84\xE0\x77\x9A\x81\xDF\x6C\xD6\x29\x12\x41\x36\x64\x6B\x59\x74\xE3\xB8\x7D\xE6\x9E\x3C\xA3\x1B\xB6\x18\x4B\x9F\x22\x96\x37\xA4\x73\x84\x58\x5E\x8A\x52\xCB\x2C\x2F\x7E\x09\xC2\x76\x31\xE8\x52\x1B\x5B\x67\x74\xC0\x20\x36\x9B\x17\xD1\x01\x60\xBC\x2A\x80\x0E\x18\x43\x07\x4C\x8A\x23\x26\x26\x97\x90\xD5\xFD\x5C\x74\xB2\xB6\xE7\xBF\x60\x1A\x8A\x94\xDC\x6D\x90\x3B\x60\xB2\xA7\x81\x96\x71\xD8\xD1\x1E\xBF\xEB\xF8\x28\x87\xF3\x6C\x05\xCA\x6C\xAF\x61\xE4\x49\x18\xE1\x3D\xDB\xBB\x80\x3B\x40\x9E\x40\xF8\xE0\x38\x19\x83\xF3\x82\xCA\xA6\x65\x7B\xC3\xB9\x73\x44\xF2\xA0\x3C\xDB\x8B\x3C\x4B\xD0\xF2\x2C\x2E\x47\x59\xE6\x04\x0C\xE2\x59\x9C\x78\xF1\x24\xD9\x96\xE0\x4B\x72\x42\x90\x8E\xA2\x33\x4B\x32\xE7\xB3\x58\x6C\x8B\xB3\xE2\x9C\x38\x8B\x7F\xE3\xC5\x7C\xF0\x90\xC3\x25\xA1\x54\xFF\xAF\x74\xB0\xF4\xB8\x9F\x05\x07\x0B\x6B\x53\xDB\x28\xF1\xFA\xCD\x33\x67\x4A\x9D\xBE\xAF\xCE\x8E\x70\x1F\xD7\xE2\x57\xD3\xDD\xFB\xCE\xCE\xCE\xE7\xEE\x6E\xAF\xE9\x3F\xF7\xFE\x8B\xF7\xFC\xE3\x6F\x78\xF9\x4B\x2F\xBF\xF6\x57\xEE\xBE\x04\xD9\x91\xAF\x7E\xF8\xB2\xBD\x36\x9E\xD2\xCD\xFF\x3D\x7F\xF5\xED\xEE\xDE\xFF\x9E\x77\x7D\xF0\x25\xDF\xB9\xF6\x2F\x7E\xEE\xEE\x8B\x17\x6B\x33\x43\xEB\xCD\x3B\xAA\xBC\xA3\xF5\xB9\x81\xFC\xDD\xB5\xB9\xE7\x96\x6F\xFA\xF1\xF7\xFE\xE8\xA6\x3C\x7C\xC9\x31\x61\xE6\x9E\xE9\xA3\xDF\x9E\xBE\xF8\x0D\xD9\xE1\x4B\x2D\x85\x5D\xD8\xD7\xA8\xEB\x6B\x64\xF8\x24\xC4\x93\x11\x52\x28\x60\xF4\xEE\x7B\xFE\xF8\xEF\x7C\xFE\x0B\x47\xBE\xEA\x33\xEF\xBF\x74\xB1\x36\x60\x2E\xB6\x06\x02\x60\x1E\x01\x03\xE6\x12\x45\x2F\xF7\xC7\xEC\x1D\x87\x1F\x75\xBF\x9E\x73\xF8\xA2\xFF\xB9\xFF\xF0\xC5\x47\xDB\x87\x27\xEE\xBE\x08\x23\x7B\x2D\x6E\xAE\x1C\xF9\xEA\xEF\x78\xFF\xA5\xDA\xF0\x30\xDA\x56\x8F\x56\xC6\x1D\x7D\x86\x4E\xE6\xF1\xA4\x0A\xAD\xB6\x21\xE4\xF6\x3F\x07\x8D\xFD\x80\xD8\x98\x54\x25\x51\xB9\x1D\xAF\x0C\x48\xEF\x39\xF0\x0D\xB7\xFD\xC1\xA7\x0E\xDD\x7A\xF7\x3F\xA5\x83\x94\xFA\xDA\xB9\xF0\x55\x3C\xC3\x10\xF2\x7B\xAB\x11\xF6\x79\xBA\x1A\x93\x5A\x3F\x84\x71\x63\x03\x18\x4D\x88\x0E\xED\x24\x1C\x76\xB2\x64\xB9\x27\xEC\x72\x70\x84\x30\xB6\xC1\xFA\x26\x12\xE8\xA0\x1A\xB5\xA0\x90\x82\x79\x14\x52\xC8\x27\xB5\x79\x33\x98\xC1\xEE\x43\x68\x49\xE8\x81\x72\xB3\x1E\xC3\x18\xA2\x13\x93\x7A\x0C\xE5\x04\xC6\x84\xF8\xF5\x92\x15\x0F\x4C\x20\xB6\xD7\x5E\x3E\x75\x90\xB4\x2C\x0F\x43\x59\x04\xB0\xEC\x0C\xC4\x2C\x4C\xED\xA7\x83\xD3\x20\x60\xB9\x0F\xF2\x39\xE4\xF6\xF6\x6F\xAB\xE3\x06\xE2\xD3\x55\x0C\xA5\x7D\x55\x53\x8D\xED\xED\x78\x82\x11\x1D\x18\x51\x28\x72\x88\xF1\x58\x5C\xED\x1D\x8B\x2B\xB8\x92\x2B\x30\x66\x9D\x2C\xE1\xE9\x08\x6B\xE1\xF1\xB1\x4A\xE1\xD2\x6F\xF7\xC1\xA4\x43\x3E\x08\x47\x50\xDA\x73\x0D\xC7\xF4\x1E\xE1\x19\x50\xC2\x68\xD3\xBE\x0A\xC5\xEB\xDB\x61\xB4\x59\x87\x10\x53\xFA\x92\xEE\x04\x18\xC3\x0A\xFE\x7F\x63\x82\xF5\xF1\x03\xD8\xDB\xC8\x9F\x23\xA3\xC6\x1E\xB0\xCF\x83\xDC\x06\xC7\x27\x38\xA2\x11\x57\x21\x7F\x57\x67\x2C\x37\x62\x0A\x38\x72\x1C\x17\x8C\x48\x48\x73\xD4\x6B\xC0\x19\x2F\x93\x19\x06\xF7\xDF\xD2\xC0\xB0\xA9\x47\x2D\x0D\x1C\x54\x1F\xB5\x34\x70\x96\x97\x26\x7B\x81\x98\x58\x6A\x17\x2D\x7E\x89\xA4\xDC\x21\x0D\x0C\x9D\xE2\x7E\xC4\x79\xAC\x88\x06\xF6\x04\xCC\x78\xD8\xA3\x98\x89\x3F\x3F\xEA\xD1\xC0\x70\x41\x13\x2E\x58\x40\x03\xE3\x05\x34\x30\x9E\x3D\x59\x38\x8C\x7B\xBC\x88\x06\xC6\xE6\x7D\x5A\xE8\x6D\xA7\x3B\x8A\x3B\xDD\x51\xC4\xBA\xA3\xD0\x09\x6B\xA9\x3B\x4B\x1D\x71\x27\xDD\x8B\xE9\x74\x47\x66\x37\xDD\x11\x1F\xD4\x0B\x54\x1D\xA9\x3F\x4B\xCD\x66\x65\x9E\x26\xDD\x91\xC1\xB3\xD4\x74\x67\x69\xBC\x50\x85\x64\x7A\x2A\x24\x73\x83\x2A\x24\x83\x5C\xE1\x42\x15\x52\xB6\x97\x0A\x09\x0F\x5B\x1E\x14\x2E\x78\xAB\x42\xEA\x20\xC9\x38\x15\x52\x46\x69\x16\x58\x85\x64\xAE\xAF\x42\x1A\x30\xFE\x1D\x24\xDD\xF4\x75\x35\xAD\x0A\xC9\x43\x92\x29\x03\x7B\xF1\xCD\x17\x76\x82\xF2\x8D\xE7\xC9\xD6\x1D\x0B\xDE\x33\x5B\xF0\xCB\x83\x82\x71\xC0\xE1\x52\xCB\xD7\xB0\xFE\xDB\x04\xD0\xFE\xCE\xF0\x37\x99\x2F\xF3\x4F\x0E\xA7\xBF\x1A\x80\xE0\x52\x8B\xBF\x88\x98\x98\x9C\x34\x53\xE5\x6F\x50\x8D\x87\xB4\x30\xDB\xC0\x1E\xF0\x74\x8F\xAB\xD9\xE1\x3D\xAC\x14\xE8\xF2\x3B\xC8\x41\x8B\x1C\x45\x22\xD9\xE5\x89\xFF\xA6\x66\xA4\x44\xC0\x16\xFE\x11\x84\x64\xAB\x83\x3F\x59\x90\x45\x0C\xA5\x9E\x3A\x5F\x24\x69\x5F\x4E\xDE\x04\x74\xED\x79\x90\x35\xC3\xF1\x01\x5C\xAC\x2D\xFB\x39\x8E\x6C\x7F\x94\xC3\x60\xC5\x07\x02\x51\x69\x5B\x92\xC2\x14\xE9\x07\xF9\xA7\x1C\xAD\x42\x9B\x91\x95\x99\xEB\x40\x18\xB2\x52\x3E\x58\x69\x4A\xE7\x09\xE1\xA4\x4A\x0C\x5B\x1F\xF2\x31\x0B\xD1\xA4\x4E\x21\xB9\x9F\x93\xD1\x78\x73\x41\x9F\x81\x86\x72\xFC\xA4\x90\x41\x72\x72\xB3\x2A\xB8\x5B\x32\x7A\xCE\x5B\x21\x28\x46\xF1\x82\x6D\xCD\x40\xD9\xFB\x1A\x32\xA9\x02\x6D\xEF\x6B\x9C\x51\x70\x79\x81\x8D\x4C\xA5\xDD\xB0\x6F\xDF\x06\x55\xBE\x06\x9F\x27\xA0\xC9\x02\x3D\x01\x45\x96\x3E\xFA\x85\x85\x20\xC2\x5C\x29\xBB\xED\x38\x6B\xC5\x96\xA9\x86\x0F\x43\xBA\x48\x1A\x3E\xAF\x53\x50\x4E\x03\x05\xE8\xE3\x9C\x3E\x2B\x39\x89\xFD\x92\xB5\xD5\x60\x91\xD9\x5F\xC2\x4D\x8C\x83\x82\x54\x31\xF6\x65\x9C\xA5\x38\xF0\x65\x21\x04\x90\x4F\xC8\xA6\x34\x05\x63\x03\x30\x9B\x10\x4D\xF8\xC0\x30\x77\xB6\x8E\x7A\x82\xD6\x81\x63\xAD\x04\x07\x10\x19\xC9\x4C\x7F\xEC\x0C\xEB\x83\x9E\x65\xB6\x0D\xCC\x06\xD9\x91\x22\x2C\xF1\x06\x3A\xD7\xAD\x80\x86\xC5\x8E\xAA\x14\xB8\x4C\x81\xDE\x1C\x1B\x0E\xEA\x22\x16\xF6\xF4\x5E\x21\xF4\xB6\x1F\x84\xB4\x6A\xEA\x33\x55\x52\x35\x77\x9F\xC8\xB6\xE9\xCE\x2E\x1D\x28\xD7\x98\xC0\x3F\xD1\x81\x20\xF0\xF7\x50\x74\x5F\xD3\x3E\xCB\x86\x2E\xC8\xDA\x67\xD5\xD0\xE5\x98\x7B\x1E\xD8\xA5\xF3\x9E\x60\x7F\x95\xA4\xDE\xE9\x33\xEC\x1A\xD7\xCB\x66\xA6\xF1\x8F\xA6\x40\x62\x35\x5B\x7D\x04\xE6\x21\x25\xE2\x6D\x90\x2E\x11\x8A\x1A\x4C\x43\xB3\x50\xCB\xB3\x8D\x7A\x13\x89\x59\x1D\x44\x99\xEE\x6A\xF2\xCA\x66\x6B\x35\x6F\xD0\x40\xE2\x7E\xFB\x2C\x1B\xD2\x48\xB5\xCF\x0A\x9F\xDB\x89\xC4\x8E\x55\xF7\x06\xF6\xEC\x99\x8F\x22\x3D\xA5\xFE\x68\xE8\x43\x21\xC5\x6B\xBC\xAB\x23\x7D\x4E\x9E\xF0\x31\x73\x50\x26\x9C\x1B\x76\x7F\xC4\xC2\x8D\x38\xE0\x11\xAB\x2F\x66\xC4\xA2\x3F\x62\x1E\xAF\xE2\xF1\x06\x4F\x62\xBC\x8A\x89\x1C\x04\xE6\xFF\x74\x61\xC3\xDC\x0C\xB6\x1B\x67\xC6\x2F\x6D\x3C\x25\x17\x28\xC7\x6C\x06\xAE\x6B\xD1\xCB\xC9\x42\xD5\xE5\xA0\x5F\x1B\xB3\xBF\x66\x5B\x31\x6E\xFC\xAF\xA8\xFD\x15\xB6\xBF\x74\xFB\x4B\xB5\xBF\x64\xD3\x7D\xC4\xFF\x4A\xF8\x73\x0F\xB6\xBE\x0D\xE6\xBF\x13\x6A\xDB\x05\xB0\x0A\x80\x00\x8C\x22\x2B\xA9\x4A\x10\xE0\x91\xFB\xB3\xDD\x6E\xCC\x7F\x54\x22\x62\xB3\x58\xB7\x56\xFA\xC5\x48\x01\xCF\xBF\xBE\x3D\x1D\x4C\xEB\x2C\xA5\xBB\x9C\xB4\x48\x9C\x83\x2A\x06\xCD\xF1\x7D\xD9\x9C\x3C\x85\xB0\x21\x6B\x78\x3C\x89\x77\xFE\xF0\x8D\x8F\x9E\x25\x5D\x0F\xA4\x1B\x90\xD9\x6B\x6F\xF8\x83\x4F\xA8\x13\x5B\x75\x38\x21\x57\x09\xBE\x39\x96\xEC\xCB\x4A\x2E\xAD\x3D\x73\x09\x44\x20\x50\x1B\x53\xF6\xE5\x11\xE4\xD2\x51\x87\x4D\x95\xF1\x26\x4A\x2B\x68\xB5\xA5\x0D\x20\x73\xA9\x7C\x22\x88\xEC\xCE\x1B\xFF\xE0\x13\xEA\x98\xFB\x82\xC3\x27\x57\x4A\xEE\x89\xAC\x2E\x76\xDF\xC4\x0F\x78\xA8\xE6\x9B\x57\x8D\x7C\x95\xE2\x7B\x22\x24\x2C\x78\xC8\x47\x47\xBB\x01\x48\x1E\x80\x6C\xD8\x6C\x97\x3E\x7D\x48\x06\xB3\xFD\xFA\xEF\xB6\xAE\x3B\x7C\x83\xC4\x7E\x29\x11\xF5\x4C\xB9\x8F\x02\x88\x50\x4C\x17\xF8\x47\xF6\xBA\x62\x5F\x5E\xFF\x9C\x34\x3E\xB6\x1C\x3F\xE7\x8D\xCF\x00\xE0\x83\x69\x12\xE1\x2B\x91\xF0\xF5\xEC\x16\x42\xF3\x29\x29\xD2\x1E\xE0\xE2\x21\xE4\x00\x57\xB0\x47\x9B\xEE\x72\x15\x9E\x9B\x72\x62\x75\x10\x55\x0C\x1C\xC1\x3F\x24\xDE\x3C\x69\xB7\x35\xBE\xA1\x6D\x25\x56\x24\xA3\x95\x71\xCD\x78\x2E\x73\x2D\xEB\xB4\x6D\x5B\x1B\xDF\xDA\xE5\x80\xA2\x84\x57\xC8\xED\x6A\x2B\x7B\xCE\x3D\x2E\xA9\x0D\x6D\x05\x99\x14\x71\x0C\x53\xFC\x8A\x80\x84\xBF\x92\xB8\xAF\xE0\x18\xC8\x2A\xCC\x7F\x62\x42\x16\x83\x75\x4A\x07\x95\xBB\x15\x20\x75\x99\x98\x3A\x3D\x01\xE7\x61\x44\x68\x4E\x2C\x07\x2B\x24\x43\x14\x94\x30\x19\xAC\xE2\x76\x86\x2E\xF2\xAC\x31\x8F\x0A\x3E\xA7\x44\x11\xD8\x37\xFF\xDB\x0E\x63\x5C\x7A\x87\x5A\x71\xB6\x78\x37\x73\x89\xE2\xE7\x06\xC8\x76\xCD\xF4\x84\xDD\x2C\x10\xF3\xAC\xA4\x88\x15\x92\x43\x9B\x68\x07\x63\xD6\xB9\x7B\xE9\xA6\xA6\xE8\xAB\x3C\x12\x6A\xE7\x1F\x11\xB2\x1D\xE8\x29\x10\x1B\x55\x9B\xA3\x31\x60\x0A\x68\x4E\x32\x01\xC3\x13\xDB\x67\x6A\x25\x2E\x24\x68\x73\xE8\x37\x94\x3A\xDF\x75\xAE\x1C\xF6\xB4\x9D\xD3\x68\xC8\xD5\x73\x83\x7C\xC3\xF9\xB4\x62\x72\x36\x36\xF6\x8D\xDD\xBC\xAD\x30\x9F\xD6\x04\x75\x1D\x2F\xA2\x91\x9A\x7C\x67\x57\xA7\x4F\x44\x28\xA5\x97\xCF\x43\xE6\xA0\x32\x72\xB9\xE9\x38\xAB\x17\x42\x22\x12\x1A\xBA\xB9\x02\x41\x57\x1D\x88\x3B\x29\xA5\xE7\xAA\x73\x46\xFF\xB8\xA9\xE3\xCD\xBA\xE0\x21\x37\x50\x40\x8E\x7B\xCD\xFB\x95\x22\x46\x19\x86\x42\xAC\xCF\xBF\xF6\x68\x92\x34\x55\x4A\xB8\x47\x97\x59\x09\x49\x4B\x74\xDE\xCF\x64\x33\xE3\xA8\xBF\x75\x8A\x10\x98\xD2\x17\x32\x90\xFC\x0B\xBF\x90\x6E\xD6\xC6\x7F\xC1\x30\xD8\xC7\xCC\x29\xC5\xDE\x39\xCF\xDB\x7C\x68\xEE\x87\x08\x4C\x8A\xDC\xD8\x36\xCD\xD3\x40\xEC\x90\xA9\x61\xA8\x81\xB4\x4F\xDC\xD2\x42\xD8\xC0\x6E\x43\x3A\x21\x2B\xAE\xF6\x32\xB5\x32\x37\x48\xDE\x4C\x8F\xBC\x65\x0D\xA5\x73\xCD\xDC\x2D\x06\xF8\xB0\xEC\x29\xE5\x5F\xF4\xDD\xBB\x2F\xF7\xA4\x9B\x3E\x79\xCB\x98\xBC\x19\x22\x6F\x19\xA7\xBC\xCA\xBA\x08\xEF\xC8\x15\x51\x7F\xED\x73\xD2\xD0\x72\xB7\xCF\x79\x43\x21\xC1\x17\x92\xB7\x4E\x74\x34\x3F\x26\x45\x72\xB3\x88\x5B\xEC\x93\xC1\x6D\x22\x91\xE2\xDD\xCA\x28\xB9\x72\x9F\xA8\xA5\xB4\x1E\x58\xDD\x41\xD0\xF5\x5A\x3C\x35\x42\xE6\xA8\x18\x31\x41\x9B\xB5\xF6\x3D\x6B\x88\x21\x71\x3D\x13\x83\xCE\x91\x42\xFB\x04\x8B\xA7\x82\xCC\xB8\x83\x92\x21\xAD\x3A\xEA\x88\x95\x16\xE7\x24\xF9\xCE\xF0\x5A\x15\xC1\x00\x79\x83\x8A\x62\x69\xA9\x2B\xB4\x78\x0A\xC8\xE1\xA9\x8A\x14\xE7\x34\x16\xCF\xC7\xFD\x39\x57\xC7\x97\x1B\x4A\x5B\xAF\x36\xC8\x8D\x29\x3E\xEB\xDC\x93\x20\xB9\x72\xE1\x08\x8D\x78\xA7\x8E\x2F\xD7\x8A\x89\xDE\xC9\x86\xB7\x91\xA2\xBB\x38\x6D\x7A\x7B\x32\x42\x7C\xB9\xEA\x48\x2F\x65\xC9\x31\x7F\x21\x54\xD2\x0E\xF1\x7A\x54\x84\xDC\xE1\x8E\x16\xD2\xF9\x44\xD3\x38\x5D\xFA\xB0\x2A\x06\x81\xCB\x5E\xA5\xA0\x58\x46\x23\x8A\x91\x32\x05\x88\x71\x22\xC9\xF3\x65\x70\xAE\x2E\x2E\x37\xF5\x08\x0C\x8A\xF7\xC5\x11\x78\x18\x46\x90\x6F\x5C\x39\x0B\x06\x46\x1B\x57\xCE\xE2\xEC\x4C\x37\xA7\xE2\x32\xE2\x72\x37\x27\xB7\xB6\x2D\x72\x38\x25\x0A\x70\x84\x37\x9A\x50\xF1\xF5\x1D\xA3\xC3\xB7\xB0\x1C\xF4\xDE\x90\xD0\xC3\x00\xE0\xFD\xAB\x1F\x11\x5A\xD0\xBC\xC5\xB9\x45\x5B\x33\xE6\x18\x67\xF2\x0C\xA2\x00\x2D\x26\x09\x12\x01\xEE\x56\x27\xB8\x08\x0E\x39\xA9\xAF\xF0\xA0\x79\xB3\x34\x44\x83\xAD\x7A\x82\x52\x53\xBE\x1A\xF4\x95\x0B\x10\xEE\x5C\xAE\xD9\xF3\x11\x22\x50\x27\x37\x11\x49\xEC\x59\x46\xB9\xB3\x03\x51\x0A\xB4\x79\x4F\x11\x46\xDB\xE2\x9C\xDA\x16\xE7\x0A\xAF\x94\x7F\xBD\xDE\xAC\xA3\x9E\x75\x0A\x47\x38\x77\x41\x0F\x8C\xFD\x7F\xFE\x65\x77\x26\xB6\xB1\x36\x90\xB4\x31\x6C\x23\x67\x4E\x2C\x9F\x0B\xDB\x61\x45\x73\x7F\x95\x42\x64\x5F\x2F\x49\xD5\x42\xE7\xC2\xD5\x80\xA9\x8B\x68\xAC\x2E\xDF\x4B\x7E\xD3\x6C\xD7\x1D\x21\x55\xF0\xC9\x5E\xB9\x56\xD8\xAF\x65\xF8\x53\x28\xED\xB6\xEA\xFE\x39\x90\xA7\x20\x45\xE9\x15\xF6\x5F\x87\x8C\x5C\x62\xC7\xEA\x30\x8C\xA0\x00\x89\x90\x92\x9F\xAB\xCB\xCB\x84\xA4\x50\xF0\x3A\x96\xC3\x75\x8C\x3B\x18\x29\x2F\xE3\x89\xD2\xC1\x88\x3B\x96\x47\xF8\x67\x44\x4A\xDC\x7A\x4C\x61\xFA\x2E\x53\xE0\x54\x08\x37\x71\x78\xBD\x50\x07\xD2\x85\x25\x9D\x19\xA4\xEA\x0D\x52\x82\xA9\x0A\x08\x69\x90\x05\x32\x14\xBD\x41\x8E\x60\x04\x72\xE1\x20\x47\x83\x41\xCA\xFE\x20\x9D\xF5\x64\x81\x7F\x8A\xE1\x20\x29\x9D\x0E\xA2\x54\xBD\xC4\x1E\xCE\xEC\x15\x77\xAC\x60\xAD\x93\x3C\x53\x2F\x37\xD5\x0A\xD5\x39\xD7\xD4\xAB\x84\x7B\xFB\xF0\x61\x5A\xDD\x42\x84\xAA\x7A\x16\x64\x2E\xCB\xFF\x7E\x3A\x53\xE2\xFA\xD9\xD8\xEC\xD6\xA6\x9E\xC0\x52\x53\xDF\xC6\x4C\xD2\x0A\x79\xAD\xDD\xEF\x8F\xE3\x93\x30\x81\x65\x3A\x4D\x47\xA4\x80\x29\x4E\x6E\xB6\x10\x8D\xD3\x54\x88\x9F\x0B\x26\xA9\xAE\x5C\x00\x79\x65\xE7\x72\x5D\x70\xFA\x51\x6A\x59\x29\xC8\x60\x15\x9E\x4D\x28\x59\x8D\x38\x65\x30\xC4\x8E\x07\x23\x89\x67\x1F\x2E\x61\x7C\xA5\xC6\x55\x74\xAB\x74\xB9\x2E\xD8\x2D\xBB\x58\x2F\x24\xF8\x4D\x85\xF2\x72\x03\xA3\x35\x19\xBC\x88\x0C\x0D\x51\xBA\x8B\x5D\x36\x48\x64\xF5\x38\x4C\x1A\x75\xB0\x41\x81\x50\xE3\x2B\x55\x8E\xF4\x69\x4C\x7B\xB6\x9F\x93\x3A\x93\x64\xCE\xF1\xB2\x41\x42\x0E\x05\x91\x22\xDE\xBE\xE1\xE6\x9D\xEA\xEF\x5B\xB7\x6B\x30\x6A\xEA\xD1\x66\xFD\x15\xFE\x7C\xF8\x0A\xD0\x30\xDA\xA8\x47\x44\xF2\x47\x24\x9E\xF8\xDD\x74\x7B\x3B\x46\xE2\x33\x26\xE5\x31\x12\xA8\x5B\x71\xB4\x31\x6F\xA7\x64\xA1\x0F\xE7\xD2\xC2\x1F\xDF\xCA\x70\x7A\x98\xD8\x06\xD5\x28\x27\x2A\xAB\xFC\xA3\x3A\x0C\xFB\x71\xCA\x05\x14\x14\x3D\x01\x46\xC8\xDE\xA8\xA6\x1E\x11\x0F\x3E\xE0\x77\xC7\x7D\x7E\x77\x4C\x43\x2C\x38\x99\x3B\x79\x4D\x17\x30\x6E\x08\x3F\xE6\x5B\x16\xFD\x96\x3C\x39\x17\x15\xE1\x16\x52\xDF\x91\x8D\x78\x2E\xCD\x40\x56\x65\x35\xD7\xB3\x70\x52\x13\x02\xBC\x5A\xB5\xDF\x92\x7E\x9C\xF4\x2D\xE5\xBF\xC5\xC1\xDC\x41\x0D\xBF\x65\xE8\x56\x03\xFB\xB9\xCD\x06\x70\x9B\x93\x06\x94\xDF\xDF\x63\x5C\x67\x3F\x52\xC9\xFD\xF0\x6C\x82\x04\x78\x76\xE1\xDD\x3C\x85\xA3\x45\x15\x9F\x48\x90\x35\x58\x91\xD9\x6E\x26\xA9\x56\x1C\x67\x7F\x6E\x8A\x83\x43\x6F\xC9\xCB\x9D\x4C\xCE\x83\x7B\x7D\xF0\xF5\x79\x5A\x10\x73\x0A\xA0\xD0\x9D\x05\xB2\xA1\x10\x70\xB4\xE9\x8E\x42\xC4\x2E\x14\x87\x64\x28\x1B\x41\x31\xC0\x9E\x62\x17\xEC\x29\xAE\x5C\x80\x7C\xE7\x72\x3D\xA2\x3D\x82\x14\x46\xA4\xBF\x74\x63\x93\xF8\xA7\xE7\xC2\xCF\xD7\xCA\x44\xA9\x29\xCD\x8F\x0D\xD6\xE4\x67\x2F\xBD\x76\x27\x58\xBA\xE0\x0C\xA8\x99\x40\x1F\x2B\x28\xFD\xF0\xDC\xDB\xC8\xBE\x5E\xB7\xF7\x1D\x63\x7C\xBE\xF0\x7D\x94\x7F\x1A\x4F\xCC\x4F\x68\x4A\x5A\xB5\x26\x2F\x3C\xF2\xDA\x9D\xC0\x3E\xFC\xEF\x2E\xEC\x04\x10\x95\xAF\xA7\xA3\xD2\xFE\xAB\xF3\x17\x76\x02\xFB\x5C\x2B\xDA\x1A\xE5\xF7\xF0\x9B\xAC\x2B\xF9\x5E\x2A\xF1\x8E\xED\x9F\xCE\x88\x5D\x6C\xF5\xA3\x1C\x04\xDF\xBE\xF1\x7B\xFA\xC7\x13\x9D\x36\xE9\xFD\x75\x68\x5F\x71\x92\x94\x7F\x88\x19\x9C\x25\xD3\x21\xBA\x42\x96\x99\x31\x06\x77\x55\xD0\xAE\x6A\xD2\x2F\xE1\x73\x40\xCF\x11\x25\x1F\x6E\xC3\xD5\x70\x95\x88\xDE\x70\x4F\x83\x20\x14\xC4\x3C\x8B\xB6\xBF\x53\x33\xFD\x9D\x72\xFD\x21\x5F\xAC\x3B\xBE\x38\x42\xBE\x59\x77\x7C\x33\x32\x19\x1C\x11\xDC\x3D\xF7\xBE\x7F\x8A\xBF\x7F\x8A\xBF\x7F\x96\x94\x8B\xA4\xCD\x55\xF6\x1C\xC7\xA8\xC0\xD9\xD9\x77\xE2\xF6\xB4\x49\x4C\xC8\x17\xD7\x4F\x91\x72\x46\x76\x7E\xA6\x36\x85\x08\x19\xDF\x0C\xCF\xF2\x7F\xF3\x68\x1F\xF7\x50\x48\x60\xEF\xE0\xA8\xE7\x95\xBA\xDD\x8C\x74\x20\xA4\x0A\x51\xA8\xCB\xEE\xAF\x8D\x7D\x80\x54\xCE\x11\x18\x0E\x70\xA5\xED\xE3\x01\x16\xBF\x65\xBB\x57\x4E\xA1\x86\x3F\x1B\x63\xF9\xF7\x3F\xD8\x2B\xC7\x93\xD3\xBE\xFE\x97\xA8\xC1\x13\x3F\xDA\x6F\xD1\x8B\x6D\x9C\xD9\x57\xF6\x3F\x7A\xF1\x75\x11\x56\xFF\xE4\xFF\xFB\xED\xB3\x1F\xB8\x7A\xE1\xEB\xF0\xCD\xD5\xBF\x3A\x32\xFB\x89\x9D\x2B\x9F\xD2\xF8\x6A\xE7\xA3\xFF\xFB\x2B\x07\x1F\xC1\x77\x3F\xFD\x1F\xFF\x7B\x7A\xF7\x93\x8F\xDD\xD7\xBD\x33\x7D\xD9\xD6\x07\x06\xD1\xCC\x08\x9C\x6B\x7C\x30\xA7\xC4\x6E\xAF\x53\xEC\x37\xC5\x28\xCE\x0B\xC9\xA0\x61\xF8\xCE\xE7\x0C\x6B\x8A\xF9\xE0\x14\x34\x19\xCE\xA6\x48\x89\xDC\xFB\x6B\x3E\x74\x3B\x1E\x85\x38\x63\x1D\x22\x58\xD1\x94\x35\x4F\x39\x6E\x28\x54\x05\xC4\x3C\x5D\xCD\xD3\xA5\x52\x45\x16\x03\x34\x55\xED\xA6\x4A\xE5\x74\xBE\xF1\x34\xB5\x9B\x66\xEC\x6E\x27\x1C\xF3\x46\x2F\xF8\x40\x8A\x1B\x8E\x9A\x89\x5C\x64\xEA\x59\x9F\xB3\xAC\x73\x24\x6E\x52\x55\x51\x2B\x31\x3A\x33\xD5\x8C\x0D\x8F\x6F\x7C\xDA\xB3\x53\xD5\x4A\x8A\x20\xDC\x6D\x38\x3C\xDD\x05\x13\xB8\xEE\x84\xE7\x96\x47\x2C\x5A\xCA\x27\x35\x55\x9E\x61\xDE\xCE\x50\xB4\x33\x44\xF9\x1E\x39\xF6\x4A\x22\x8B\xBA\xDB\xF4\x24\xC3\xBA\x66\x58\x97\x24\xDA\x93\x3F\x0A\x48\xC2\x0E\x4D\xD8\xD1\x96\x53\xE2\x83\xC7\xA9\xC1\x5B\xFA\xF5\x49\x12\xCE\xB0\xF8\x81\xAE\xD4\x80\x44\x51\x1E\x67\x14\xF7\x67\xE4\xA6\x12\xE3\x9F\x98\x66\x94\xE3\x8C\xD8\x51\x29\x60\x21\x0B\x14\xA4\x27\xE9\x10\x0C\x20\x2C\x7F\x81\x68\xE8\xAF\x1A\x51\x6C\x3B\xF1\xE5\xF7\xDF\x3A\xA4\xAD\xEE\xB2\x2B\xC5\x21\xBC\xE2\x24\x72\x0B\x61\xA7\x7B\x20\x12\x13\x31\x0D\xB2\xE4\x0C\xE1\xCA\xE8\x76\x78\x9E\xD2\x50\x4E\x1B\x7D\xC2\x87\x6E\x90\x83\x2C\x05\x84\xF6\x1A\x8F\x94\xEC\xFE\x3A\xC5\xF9\x46\x0D\x8B\x81\x79\x84\xA5\xB8\x3A\x29\xAD\x4E\xD4\xD4\x54\x29\x73\x95\x4C\x1E\x62\x05\x5C\xD6\x94\x96\x95\x2A\x60\xFD\xCC\xD5\xE7\x48\x35\x11\xEF\x49\xCE\x7B\x12\x35\xE4\x0E\x1F\x21\x4B\x8C\x4D\x33\x6A\x4A\x4A\xA3\xA8\x4A\x99\x77\x72\x37\x85\xB8\x00\x5E\x57\x02\x02\x3B\x3F\xCB\x39\xD8\x1D\xA4\x66\x0E\x52\x15\x81\x0F\x44\xF6\x41\xCA\x5E\x84\xD4\x54\x1D\x76\x82\x73\x8F\x73\x48\xFC\xE9\x9C\x1C\x75\xBE\x1F\xC1\xBD\x64\x81\x07\x7A\xB3\x46\xE1\x98\x4E\x2C\x62\x0A\x52\xCE\xF5\x7F\x1A\xA4\xBB\xF3\x52\xF6\xEC\x94\x62\xE0\xD2\xFA\x93\x89\xA4\x72\xC6\xAE\xA4\x11\x8C\xA0\xC0\x3F\x49\xFF\x84\x49\x7A\x27\x8C\xCF\xDE\xD7\x3E\xE7\x0D\x25\x78\xF3\x19\x0B\x39\x40\x93\x24\x01\x99\xED\x66\x29\x01\x3B\x22\x38\xC5\x90\x23\xB6\x25\x05\xCD\x7C\x79\x44\x5C\x71\xD4\xFB\x58\xCF\x15\xD3\xC1\x5E\xAE\xCC\xA2\x8C\xB1\x21\x92\xFA\x30\x08\xFD\xA6\x13\xB6\xA6\x8C\xAD\xB4\x7F\xB4\x57\x59\xBB\x57\x26\x4F\x28\x03\x39\x91\x80\x94\x49\x40\x95\xF3\xB6\xF2\x2E\xA4\xBC\x0B\x55\x9E\x53\x34\x5A\x47\x5E\x52\x47\x5E\xAA\xDC\xA7\x54\xAA\x13\x9B\xBD\x98\x42\x8B\x32\x74\x51\x17\x44\x42\x52\x22\x21\x7C\x9F\x4A\x81\xA0\x72\xFE\xB2\x30\x7D\x30\xC6\x46\x04\x1C\xB2\x8B\xAB\xF9\xCA\x0E\x7E\x0D\x4F\x25\xE3\xA9\x18\x6C\x8F\x02\x19\x7F\x21\x63\x22\x45\xA5\x12\x4B\x79\x3E\x99\x23\x69\x86\xBF\x86\xE5\x03\xC0\x32\xDE\xD0\x93\x20\x20\xF5\x92\x75\x15\x79\x90\xEC\xF8\xD4\x1B\x85\x36\x94\x08\x58\x81\x4B\x42\x10\xAB\x33\x55\x9B\xB7\x3D\xDB\x60\xCD\xCF\x09\xB2\x5F\x7A\x65\x53\x95\x1E\x0E\xEB\x51\x95\x03\x7B\x63\xA7\xC8\xA2\x50\xEC\xA1\x76\x29\xC4\x3C\x73\x31\x26\xD3\x10\xD9\xED\xFC\x28\xA4\x03\x8F\x62\x41\x79\x5C\x57\xC4\x09\xF3\x01\xA0\x7A\xB8\xDE\x96\x2B\x2C\xEF\x50\xBC\x2D\x97\x58\x4E\xB0\x92\x32\xAC\xB4\x6F\x06\x51\xB8\x4A\x77\xC8\xD2\x47\xFB\xB0\x36\xFC\x70\x0F\x0C\x66\x3E\x3D\x00\xBC\x99\xCF\x0F\xE0\xAF\x3F\x00\x2F\x77\x74\x60\xD8\xBE\x35\xA0\x48\x3D\x5E\x18\x48\xA0\x80\x18\xF9\x91\x9E\x82\xCA\xE1\x52\x8F\x80\xA7\xAC\x3E\x1C\x11\x15\x4F\xF9\x3E\x84\xCE\x9C\x36\x66\x07\x64\xC8\xB2\xAF\x93\x4B\x44\x66\xCE\x0B\x29\x49\x21\xB7\x50\x2D\xE5\xD5\x85\x4C\x37\x5A\x35\x61\x78\x99\xAE\xE4\xBC\x9A\x30\x6C\x25\xDA\xA8\xD3\x44\x84\x8B\xD5\x84\xFE\xBE\xA1\x55\x3D\x85\x97\xCD\xD7\x06\x10\xD8\xAB\xAF\xFD\xE1\x1F\x3F\x77\x48\x26\x10\x1C\xF9\x5E\xEC\xED\xE1\xF7\xBF\xE3\xD9\x94\x95\xCE\x05\x00\x97\xB7\xB9\x9F\x57\x83\x3B\xE5\x2A\x04\x47\x7E\xF2\x5F\x8B\x3B\x65\x3E\xD7\xF8\xEA\xE7\x3E\xFA\xA1\x87\x76\x6D\xFC\xC9\x61\xE3\x8F\xAB\x90\x94\x72\xDB\xE2\x9C\xDE\xB6\x0F\xA3\x70\xC1\xD0\x4D\x12\xFC\x95\x2A\xB4\xC2\xC5\xC3\x3E\xD7\x50\xE0\x7A\xB2\x5B\x91\xEC\x19\xCC\x78\x31\x2D\x02\x88\xAF\xB0\x59\x56\x7C\xA5\x4E\x20\xBA\x72\x0E\xC2\xF3\x97\x29\xD8\x21\x45\x88\x83\x04\x12\x2E\x8A\xB1\xE4\x01\x52\xED\x07\x9E\x38\x00\x49\x2C\xF6\x9F\x93\xC6\xED\x5F\xEC\x70\x4A\xEF\x1D\x38\x51\xC7\x13\xFB\x9D\xFC\xF8\xAD\x56\x1C\xAB\xD3\x49\xAD\x97\x48\xA4\x0A\xF8\x68\x25\xC3\xD7\xAE\xC4\x7E\x17\xF5\xF0\x3A\x16\xBA\x26\xF6\xBB\xE9\x47\x3A\xA1\x93\x89\x96\x3B\x77\xCE\xD9\xC0\x1A\x45\xDC\x90\xE7\x13\xE6\x6B\xB7\xB1\xCF\x97\x01\x8E\xF3\xEB\x9D\x2E\xBF\xC6\x91\xA7\x83\x42\x4A\x24\xE4\x82\x6D\xB3\x98\x0E\xF9\x86\x63\x1C\x70\x3C\xA6\x37\x1E\x41\xB7\xA6\xAF\x6A\x28\x2D\x24\x44\x57\x48\x37\xCF\xAA\xCC\x80\xB4\xB4\xBE\xDB\x80\xF3\xCB\xC4\x33\x85\xC9\xA2\x42\xBD\xA8\x90\xEE\x0F\xD8\x26\xC3\x7B\xDA\x65\xE6\xC7\x17\x6C\xAD\xF4\x5B\x4B\x70\x2D\xC8\x54\x01\x05\x25\x8A\xEF\xC6\x39\xC6\x38\xB9\x30\x95\xD3\xD6\x46\x57\x58\x28\x8F\xAE\xD4\x31\x84\x57\xCE\x81\x3E\x7F\xB9\x0A\x29\xF8\xDD\x89\x2A\x81\x18\x62\x2E\x8A\x28\x3B\x14\xD2\x4F\xB7\xB5\x29\x5B\xB8\x80\x1C\x6C\xAD\xA0\xAD\x55\x7E\x6B\x05\x6D\x6D\x34\xD9\x65\x1B\x95\xDF\xC6\x88\x5D\xF2\x05\xB1\x9E\xBC\x8D\x91\xB7\xBD\x22\x25\x61\xED\x06\xF2\xF5\x4E\xE7\x57\x27\xA4\x05\x1F\x16\xBB\xA8\x93\x12\x91\xD7\xF8\x6D\x43\x40\xCA\x06\xDB\x96\x82\xC0\x6D\xA3\x18\x5A\xE1\x15\xD2\x38\xA8\x6E\xDB\xDA\xFE\x68\xDB\x22\x88\x66\x0A\x93\x45\x85\x7A\x51\x21\x6D\x1B\x0D\x56\x41\xC2\xC3\x49\xCD\x9F\x2A\x8D\x5B\x16\x6D\xCB\x73\x6D\xFE\x68\xC5\x9B\x43\x8E\x2F\xCF\x97\xB4\x95\x7C\xE9\xE3\xF4\x21\x89\xC7\x46\x56\x05\xA5\x7C\x3D\x9B\xB1\xC6\xDC\xD8\x80\x77\x9F\xE3\xE2\x1A\x08\x37\x26\x9B\xB5\xA1\x20\x2B\x21\x64\xFC\x98\x6F\x42\x68\x03\x30\x90\x6F\x4C\x9A\x2B\xF8\x95\x8B\xD8\xE4\x1C\x84\x57\xCE\x43\xC4\x77\x09\xA1\xEF\x26\xA9\x0D\xB6\xDC\xA0\x6B\x85\xCB\x4D\x9D\x81\x39\xC5\x74\xF0\xCA\x05\x30\x57\xEA\x62\xE7\xF2\x49\xEA\x92\xFC\xCC\xBA\x2E\xDF\xCA\x5D\x16\xE7\xEB\x02\x1F\x7F\x98\x1E\xEB\x11\x75\x02\xA3\xCB\xB5\x01\x2A\x7F\x8C\xCB\x5D\xE7\x1A\xCC\x46\x43\x2E\xB4\x10\x02\x0E\x03\x27\xD0\xD4\xF8\xFD\x86\x22\x91\x24\x34\x80\x8D\x06\x42\x7C\x17\xE3\x3B\x3E\x4D\x5E\xDC\x89\xAB\xE1\x9C\x14\xC5\xAE\x62\xB8\xBF\xF3\x37\x21\xB1\xAF\x64\x1A\x7A\x9B\x75\x6F\x47\x97\xFD\x25\xFC\x49\xC8\x9A\x43\x6E\x6F\xAB\x96\xBA\xFB\xAB\x6A\x6F\xE6\x04\x23\x28\x2E\x5C\x3E\xDA\x66\x4A\x74\x41\xDD\x85\xB1\xBF\xD5\xBB\x50\x37\x3F\x97\xC4\x8C\xA7\x8C\xAF\x24\x66\x10\x6A\x14\x81\xFD\xD5\xCB\x83\x5B\x06\x41\x11\xCB\xED\xAF\x3D\xDA\xBB\x8F\x17\x84\x79\x1E\xC7\xD7\x64\xD0\xA7\xE0\xD4\xC6\x05\x35\xC9\x99\xF1\x94\x67\xDA\xBB\xC2\x94\x78\x21\x26\x84\x19\x24\x10\x37\x14\x90\xB1\xCA\x09\x5A\xAB\x82\xAF\x07\x47\xEC\xC4\x4A\x41\x2D\x4B\xD2\x11\xD7\xA3\xA6\x5E\x02\x6D\x03\x58\x82\x12\x21\x68\xC9\x06\xA0\x61\x09\xF4\xC6\x64\x93\x13\x5C\xE7\x7C\x6F\xB7\xD4\xD4\xCB\x54\x71\x19\x21\x61\xB3\x5E\xA6\x8A\xCB\x6D\xC5\x31\x64\x30\x82\x72\x93\xEA\x8C\xB0\xB3\xE6\x8A\x27\x6D\x06\x0A\x58\x82\x7C\xD3\x7D\x28\xEF\xBF\x43\x1E\xBD\x8A\xFC\x2D\x64\x8A\x58\x9D\x76\xB7\xC2\xC2\xEA\xD6\xD6\x60\xC5\xCA\x6A\x95\x82\xD6\x8A\x07\xAA\x7D\xD2\x87\x82\xA5\x2C\x1E\xD5\x32\x07\x1D\x8D\x61\x1F\xFE\xB9\xA5\xA9\x9E\x85\x62\xC5\x99\x6A\x3F\x5B\xD5\xBB\x1B\xC8\x67\x35\xF5\x12\x2F\x0B\x2D\x51\xCA\x99\x3E\x13\x48\xE0\x96\x76\x59\x68\xB6\xA6\xA9\x9F\x4D\xA3\x7D\x36\x2F\xCB\xB3\x69\xB6\xCF\x6E\x67\x9B\x12\xB3\xDC\xD6\xC9\x17\xD5\x19\x83\xF1\xEB\x61\x68\x3D\xB0\x70\x09\x22\xBF\x10\x11\x2D\x04\x2F\xF2\x7E\x9C\xFC\x08\x96\x71\x8F\xC4\x06\xDB\x3D\xA9\x17\x15\x0A\x67\x28\x70\x4E\xF8\xFF\x13\x93\xEA\x56\x50\xB0\x0F\xA5\x91\xEA\xD9\x56\x54\xCF\x82\x15\x97\xB9\xE9\x59\xB0\x7A\x12\xA1\xC5\xE6\x0C\x02\x34\x6B\xE5\xEF\x5D\x71\x76\x4B\x7C\xB1\x48\xB3\x2B\x91\x8C\xB5\x43\xD8\xAC\x23\xCB\x97\x6B\xDD\xA6\xC7\x64\x4D\x0C\xCF\xE6\x35\x42\x3A\xEB\x56\x65\x4C\xED\xC6\x10\x61\xBB\x31\xB5\x1B\xB7\xED\x96\xA0\xF4\x93\x2B\x79\x97\x21\xF3\xFB\x9C\x82\x81\xC8\xAF\x46\x34\x7C\xB7\x78\xFE\x24\x57\x3D\x0B\x39\xF6\x67\xC1\xAD\xEB\xAD\xA2\x42\xD1\xBD\xC6\x2A\x6E\xFA\x2A\xEC\xAB\x14\xC5\x46\x15\x96\x92\x20\x9D\x98\x54\x23\x0A\xDD\xC1\x86\xAC\x9A\xF3\x34\x83\x7E\x51\x11\x40\xCE\x9B\x9D\x83\xCB\x57\x51\x97\x4E\x90\x2B\x29\xAE\xAA\xA1\x3C\x2A\x63\x7B\xBB\x0B\x0F\x4F\x31\x9C\xEA\x68\x52\x97\xF6\xC1\x06\x4A\xD0\xA0\x6D\xF9\x00\x44\x93\x3A\x22\xBB\x56\x83\x6F\xCE\xE2\x9B\x08\x61\xF8\x01\x30\xF8\x66\xEC\x5E\x9C\xF3\x2F\xB4\x7B\xA1\x38\xB2\x3D\xE5\x18\x04\x33\xB1\x62\xBA\x69\x45\xF3\xC0\x26\x87\x1A\xCB\x71\xB2\x39\x8C\xDC\xD5\xEB\x8E\xA0\x24\xC7\x0B\x69\x07\x93\x0C\x67\x49\xC0\xE8\x61\x3F\xFF\xC8\x05\xCE\xB2\x62\x1F\xDA\xD9\x39\xB8\x41\x19\x83\xFA\xA4\x66\x1B\x64\xF9\xBD\x9C\xA4\xD8\xA5\xC5\x23\xF1\xA7\xFC\xB1\xF3\x1C\xC6\x79\x46\xF1\x6D\xC5\x4D\x1F\x81\x78\xD2\x23\xF8\x60\x14\x69\xBA\xC8\x95\xE7\xE2\x6D\x79\xAE\x8B\xC3\xE9\x82\xA3\x23\x05\xBD\xBF\xD2\xF6\x32\x0D\x26\x74\x83\x39\xD8\x0D\x26\xEC\x0F\x26\xF4\x63\x1F\x32\x50\x55\x68\xB7\x9D\x0C\x4F\x8B\xF4\x86\x57\x93\x7B\xD7\x15\xAF\xC8\x43\x70\xBD\x97\xEC\x82\xF1\xED\xF7\x70\x66\x61\x56\x9C\x76\xB6\x30\xEA\xF9\x32\xAF\x0C\xFE\x49\xAA\x1C\x34\x52\x9D\x02\xF8\x06\x6A\x04\x23\x48\x87\x04\x37\x42\x9E\x06\x0F\xE9\x84\x29\x4B\x42\xE7\x77\xC2\xE7\x37\xE2\x40\xE1\x70\x75\xB9\xA9\x57\xA8\xE2\x0A\x24\xB3\x15\x3D\x25\x29\xAF\xD4\xAB\x60\xCE\x41\x7C\xFE\x72\x53\x97\x54\xBB\x64\xD4\x2C\xA9\x76\xC9\xDD\x96\xB0\x7C\xA5\xDE\x07\xB9\xAB\x38\xF8\x7E\xBF\x22\x53\xAD\x08\x56\xDB\xAA\x83\x3E\x23\xAA\x1A\x71\x9F\x11\xEC\x5B\xFC\xE5\x7E\x2D\xBA\xEC\xE3\x93\x87\x83\x83\x0E\x16\x92\x6D\x4E\x23\x67\xDA\xC6\x2A\x9E\x11\x45\xF3\xAF\xC3\x2B\xB5\xE1\xEE\x2B\x73\x44\x10\x32\x97\xB4\x9E\xB9\x0B\x48\x5B\xE7\x30\x22\x96\x3E\x26\x0A\x42\x1F\x19\xC3\x18\x59\xB3\xF0\x4A\xBD\xDA\x95\x27\xD8\x67\xEE\xFA\xCA\xC1\x00\xBD\xBB\x5C\x85\x50\xE2\x59\x53\xB2\x43\x02\x7D\x5F\x9D\x69\xAA\x10\x92\xF6\xD3\xED\x10\xF2\x23\xA2\x5A\x75\x97\x8A\x21\xAC\xFA\x21\xAC\x42\xD8\x1B\x02\x59\xF4\x96\x60\xFC\x5B\x03\xE5\xE0\x2D\x59\xBF\xFA\x81\x18\xBF\xC6\xD5\x2A\xCA\xB8\xB8\x40\xEC\x18\xE1\x04\x35\x61\x05\xC7\xFA\x15\xB4\x2A\x21\x1B\x2E\x8D\xD8\xBE\x1C\x19\xC4\xF2\x8D\xAF\x26\xCF\x04\x72\xBA\xA5\x84\xBD\xA3\xA6\x0E\xC8\x74\x81\xA8\x64\x1B\x8C\x36\x32\x3F\x1E\x25\x11\x5B\xAB\x90\xE5\x86\xDA\x16\x37\x84\x4D\x37\x86\x51\x3C\x52\xBA\x6F\x20\xC3\x51\x3F\xE2\x98\x6D\x8D\xC9\xA7\x09\x87\xFB\x7D\xED\x70\x93\x5C\x21\xDF\x19\x91\xE7\x13\xCF\x79\x46\xAA\x09\xAF\x54\xA9\x15\x55\xE2\xE8\x06\x43\x0B\xCB\x0D\x6A\xA3\xB5\x4A\xA2\x48\x52\x08\x2B\xB1\xDB\xB0\xB4\x83\x15\x41\xD7\x5B\x3D\x58\x89\x68\x2B\xD2\xF3\xDE\xD8\xA5\x2E\xE8\x4A\x1B\x25\xDD\x51\x57\x4E\x9C\x48\xEE\xFA\x42\x58\xA1\x77\x28\xEF\x0A\xDC\x23\x41\xE9\xEF\x3B\x58\x89\x20\x6B\x3F\xDD\x0E\x01\x61\x65\xE4\x0C\x00\x23\x18\xF9\x21\x8C\xE6\x87\x20\xFA\xB0\x22\x06\x6F\x07\x03\x41\xEE\x33\xA7\x5F\x23\x2F\xAC\xEA\x8D\x36\xA6\x14\x2D\x11\xD3\x2D\xED\x81\x86\x97\x67\x3C\x47\x99\xE4\x19\x52\x6C\xA9\x33\xD5\x12\x0B\x42\x50\x36\x75\xCC\xB7\xFC\x81\x23\x4E\x82\x70\x59\xD0\x99\x5E\x0B\xC2\x65\xC1\x18\x2F\x20\x80\xA5\xA6\xA6\xEB\x74\xE7\xBB\x1B\x40\x06\x62\xB6\x22\x5F\xCD\x46\xA0\xAF\x20\xC3\x49\x2B\x88\xFC\x7F\xC8\x4C\x06\xD6\xD6\x54\x5B\x73\xB7\x1A\xE4\x95\x7A\x99\x67\x78\x79\xE6\xFB\xFD\x8A\x64\xB2\x86\x4B\xDA\x56\x1D\xF4\x39\x43\x9C\x96\x17\x7F\x79\x96\x38\x91\x48\x17\xC0\x78\x0E\x6D\x12\xF3\xE1\xB1\xC8\xE6\xC3\x3F\xB3\x21\x97\x0D\xCA\x8F\x12\xF4\x73\xB4\x71\xFE\x93\x7B\x9C\x39\x10\x04\x75\xC4\x3E\x42\x32\x40\xDC\x2C\x3F\xC2\x86\xA7\x28\xAB\x88\x03\x81\x70\x19\x84\x2B\xB1\x30\x32\x2F\x3B\xCC\x11\x93\x11\xDB\x77\x6F\x37\xA3\xE7\x85\x51\x14\x45\x01\xFE\x47\x47\x8B\xFE\xF5\xDE\x0B\x97\x09\x0C\xB6\xEC\xEF\x04\xC7\x5C\x60\xA9\x42\xE7\x89\xCB\x17\x06\x5B\xF6\x8F\x02\xCE\x3D\x11\x5A\x5D\x7E\x9C\x71\xF8\x40\xA0\x90\x0E\x23\xC6\x29\xC4\xDD\xC8\x1E\x3C\x56\xE8\x3C\x34\x33\x23\x31\x52\xF9\x7F\x22\xA0\x28\x56\x11\xC4\xF6\xF7\x82\xF5\x82\x53\x48\xB7\xDF\xE6\x6F\xF8\x2F\xFE\x8E\x7F\x52\xC3\xEF\x27\xDD\xF7\x29\x2B\x59\xCC\xF2\x57\x4C\x5F\x3D\xB8\x4E\x3E\x08\x1C\x69\x8F\x97\xF4\xE0\x31\xBE\x8E\xAE\x04\xD5\xF0\x3E\x49\x31\xE1\x3B\xE7\x64\xE6\x8A\xF7\x35\x1C\x8C\xDA\x40\x54\x44\x14\xEA\x12\xF9\x36\x8A\x1D\x48\x82\x36\x08\x88\x36\xEB\xB4\xCD\x52\x71\xDB\xE6\x8B\x8A\x90\x2F\x5E\x68\xB2\x47\x8B\x10\x62\xFB\xF3\xE4\x98\xC5\xF3\xEB\xAD\xEB\x70\x6E\x9F\x09\xD8\x9B\xCB\xAF\x61\x40\x43\xE3\xA6\x11\x35\x8D\xA8\xA9\xF6\x4D\x43\x7C\x0A\xF1\xE9\xF7\xFC\x53\x84\x4F\x7F\xE6\x9F\x62\x7C\xFA\x4B\xFF\x94\x14\xA1\xBB\xCE\xE2\xC5\xCA\xC9\x51\x38\x71\xB9\x92\x9D\x02\x6F\x00\x34\xA9\xFD\xB4\xFB\x3A\x07\x78\x8E\xEC\xCF\xF2\x04\x42\xDC\x60\x56\x0E\xF1\x64\x08\x44\x95\xA0\x0B\x84\xAF\x5A\xE7\x38\x18\x5B\x14\x63\x23\x24\xE3\x44\xAC\x98\x1E\x2D\x64\x1E\x3B\xEF\xA5\x08\x58\x7F\x01\xA9\x5B\xFC\xD0\xBB\x22\x0A\x8A\xFD\xE0\xB2\xCC\x85\x83\x12\xE6\xCD\x52\xDA\x50\xEE\xFA\x40\x20\xDA\x4D\x12\xFC\x6D\xB7\xA0\xAE\x8C\x5D\x37\x38\xAC\x35\xFE\xA4\x2C\x43\x1C\x8B\x4E\x40\x44\xCD\x0B\x86\x3F\xE5\x3E\x67\x09\x05\x1F\x7B\x2B\x1E\x24\x64\xC6\x98\x92\x29\x82\xCD\xCA\x37\x71\x6C\x3D\x79\x18\x99\x4C\xAA\x50\x0B\xF6\xE8\x3E\x10\xF8\x6C\xC2\x39\x39\x9B\x40\xC0\x49\x5D\xC2\x4A\xD0\x85\x98\xBD\xC5\xF7\xC8\x2F\x72\xDA\x89\x88\xF3\x87\xD4\xEB\x05\xD5\x84\x08\xCF\xC4\x9D\x07\x1B\x2B\x4E\x14\x1A\xA5\x88\x78\x93\x94\x66\x09\xAB\x37\xC9\x25\xB3\x16\xF6\xEA\xE7\x3E\xFA\x21\xAC\x01\x81\xF3\xCF\xE3\x54\x7C\x20\x36\x29\x5E\x1F\x95\x6D\x1D\x9F\x60\xE7\x29\x0A\x60\x27\x36\xAB\x14\xD7\xD9\xB5\x53\xF6\xA1\x37\xFE\xC1\x27\x14\x41\x3E\xB7\xE4\x82\x7B\x8B\x80\xBF\x4F\x23\xA1\x5E\xD6\x0B\xE5\xF3\x9C\xE4\xD2\xDC\x0C\x14\x12\x43\x14\x92\x8B\x51\x88\x02\xD6\xA5\x36\x7D\x59\x9D\x41\x66\x5F\x71\x12\x39\x5F\xD2\xD0\x7B\xB4\x40\x79\x53\x95\xBF\x78\xDE\xA5\x26\xB2\x3B\x1A\x54\xF9\x1B\xFE\xAE\x94\x56\x36\xC7\xC9\xAD\x52\x10\x21\x43\xA7\x19\x1E\xE6\x28\x6B\xF3\x3D\x0F\x8A\x6D\x21\xA7\x4A\x31\x56\x4C\x5D\x10\x02\xFC\x98\x15\x90\x6E\x22\x80\xDD\x47\x06\xC2\x96\x62\x53\x4C\x5D\x18\x24\x10\x36\x3B\x09\x31\xC4\x90\x1C\x6B\x6A\x71\x47\x10\x34\xF6\xBE\xA6\x8E\xB1\x1F\x44\xF4\xEC\xA4\xCF\xE8\x2E\xA8\x46\xEC\x6B\x08\xB6\x93\x26\x6F\x43\x56\x4D\x30\x13\x9B\x9D\xB4\xF7\x21\xF9\x26\x6B\x28\x3A\xF8\x7C\xE7\xD4\xB4\x6B\x45\x04\x94\xF4\xC6\x56\x9E\x81\x9C\x6E\xAE\x78\xA5\xD9\x74\xBC\x6D\x17\xDE\x11\x04\xED\x98\x04\x8F\xC9\x99\xE3\x86\x6D\x85\xA6\x57\x63\xEE\x25\xB5\xF9\x9B\x56\x83\x76\x88\xD7\xDF\xDD\xF7\xF7\x5C\x96\x82\xF2\x97\xF8\x10\xA6\x44\x0C\x9F\xF0\x37\x70\x81\x95\x1E\xAE\x4C\x2F\x2D\x83\xB1\x83\x74\x0E\x2E\x9F\x14\x69\xD3\x88\x6B\x0D\xD6\xAD\xDC\xB2\xA2\x7C\x0F\x07\x1C\x90\x6B\x32\xAF\x38\x41\x96\xCF\x6A\x6C\x7E\x7F\x55\x18\xEF\x37\x22\xCA\x0F\xFA\x3C\xF3\x86\xB3\x08\x95\x3F\xEB\x93\xAE\x70\xC2\x2F\x9F\x82\xCA\x9A\x86\x93\x0A\x0A\x67\xF3\x1B\x22\x0A\x1D\xF0\x89\xD6\xCA\x9F\x63\x84\xB0\x40\xAE\x66\x57\x83\x29\x05\xB2\x89\x20\x24\x23\xAC\x1D\xE7\xFB\x13\x42\xD4\x3A\xED\x51\x4A\x90\xEE\x7B\xAE\x9F\x0F\xF8\xCF\x2B\xFB\x4B\x3F\xFD\x1E\x79\x28\x08\xAC\x62\x1A\xAC\xBD\x8C\x1B\x1C\x08\xFE\x12\x59\x79\xEC\x09\x85\xEE\xE0\xCF\xF1\xE9\x50\x10\x18\x50\x10\x11\x7D\x77\x43\x97\x20\xCA\x9F\x71\xA9\x2D\x22\x50\xA0\xCA\x9F\xE6\xDB\xB4\xF2\xFF\xEA\xB2\xDF\xAE\xC9\x1C\x91\xF2\x1B\xF1\x9B\x55\xC4\x17\xD1\xDB\xCC\x3F\xC8\x33\xF6\x41\xB6\xFB\x17\x6B\x72\x95\x7D\x06\xC8\x5E\x2B\x45\x3C\xE6\x01\x40\xDA\x5E\xFC\x72\xF0\x21\x45\x6E\x94\x90\x51\xF1\xC9\xCD\x3A\x6D\x2F\x8C\x39\xD0\x84\x22\xB7\x4A\x7C\x7F\xE5\x53\x9A\xDE\xBB\x6B\x66\xDF\x5C\xF1\xEB\xAB\x17\xBE\x8E\xDE\xBA\xAB\x69\xDF\x58\xF3\xDB\x8B\xAF\x8B\xE8\xAD\xBB\x72\xF7\x6F\x43\x7E\xFB\xFA\x5F\x0A\xE8\xED\xB5\x6B\x6A\xEA\x2C\x25\x7C\xEF\x11\xD7\xF8\x6C\xDC\x55\x78\x7C\xD0\x45\xCC\x15\x1E\x77\x3D\x88\x29\xDB\x6D\xF8\xD7\x09\xBF\xEE\x02\x67\x24\x08\xD2\x09\x44\x95\x72\xC1\x31\x49\xDB\xC0\x26\x04\x20\xCA\xFF\xBB\xDB\xD0\x84\x56\xED\x40\xF0\x5D\x3B\xDD\xEE\x3D\x37\xB8\x80\x4F\x77\x06\x48\x3E\xBD\x11\xA1\xDB\x16\xEA\xC8\x7E\xE1\xAD\x7D\xED\xB2\x3B\x6F\xD6\x64\xE2\x2D\xD2\xA5\x4D\xA6\x1C\x72\x59\xF1\x51\x6B\x28\xF0\x6B\x39\x75\x5C\x0C\xE9\x3E\xB0\xCC\xD8\x7F\x76\x6F\xC1\xCE\xD9\x14\x5D\xC9\xD5\xA7\x51\xFE\x7C\x0F\xEA\xB5\x95\x8D\x55\x2F\xAF\x15\xBB\xFF\x2B\x1B\x1C\xA7\x38\xCE\xDC\x39\xB9\x32\xBF\xBC\xA6\xF8\xBC\x11\x76\x7F\x7C\x42\xAE\x3E\xC6\x67\x6A\x8B\x37\x39\x94\x40\x8C\xFF\xBF\x77\x82\x34\xF4\xF8\xC4\x2E\x35\xF5\x00\x77\x84\x3D\xE0\x95\x4F\x3D\xDC\x51\x3D\xDC\x51\x10\x12\x2E\x75\xB8\xA3\x5A\xDC\xE1\x64\xBA\xC0\x4B\x0D\x91\x7D\xE7\x27\x82\xAF\x09\x38\x90\x30\xF6\x8A\x27\xDD\x66\x9D\x30\xF6\x2A\x7B\x10\x12\x1F\x81\x24\xE2\xE1\x91\x65\x95\x43\x0D\x44\x8C\x08\xA2\x1B\x40\x0D\xE9\x50\x23\x7B\xB2\xA8\x51\x0C\x51\xA3\x98\x45\x8D\x62\x88\x1A\xC5\x0C\x6A\x14\x43\xD4\x28\x86\xA8\x51\x0C\x51\xA3\x18\xA2\x46\x31\x44\x8D\x62\x1E\x35\x8A\x21\x6A\x14\x73\xA8\x51\x0C\x51\xA3\x98\x41\x8D\x62\x88\x1A\xC5\x62\xD4\x60\xB7\x15\x46\x0D\x36\xCB\x8B\x09\x60\x88\xBE\xEE\x45\xA4\x16\xEC\x85\x78\x66\x2F\x6E\xC6\x5E\x18\xE3\xF6\xE1\x85\x64\xE1\xA6\x48\xDF\xA1\x5C\xE0\x3A\xC5\x86\x36\x5C\x61\xF3\x38\xC7\x49\x57\x0D\xAF\xBE\xDF\xB4\x04\xE8\xEE\x85\x37\x8D\xE2\xA8\xD7\xCA\xED\x1C\x1F\x44\x75\x6A\x25\xE3\xA1\xE0\xCB\xA1\xED\xA6\x2A\xC8\x32\x0B\x77\x2D\xF5\xBB\x46\xAE\x8C\x1C\x14\x16\x14\x65\xEE\xE1\xC0\x77\x49\x85\x12\x9D\x3B\x4E\xEE\xAF\x47\x6E\x85\x32\x18\xB9\x9D\x73\x81\x64\x45\x53\xEF\xD6\x90\xF6\x75\xE4\xD6\x81\x1A\xD2\x96\xEE\xD9\x90\x36\xBC\xFF\x41\xDA\xEB\x3D\x9B\x11\x24\xF4\x3F\x47\x40\xB0\x67\x33\x02\x91\x7E\x33\x82\x8E\x3D\x9B\xB5\xB0\xD3\x1F\x28\x82\xCD\x8D\xB5\x7C\x7C\xE6\xA3\x8F\xDF\xD0\x37\x19\xDA\xFA\xED\xB2\xBD\x9A\x21\x1E\x0A\x6A\xCD\x8D\x52\x84\xC7\xD4\x47\x93\x2F\x10\x24\x0B\x07\x92\x14\xF9\x86\x32\x13\xE6\xCE\xFD\xEA\x67\x03\xFB\x69\xF6\xBE\xA4\xC8\x50\x11\x05\x8A\x32\x48\xE4\x15\x47\x8B\x12\x74\x50\xDD\xFE\x6D\xB5\x68\x28\x01\x3A\xC7\x94\x9F\x27\x26\x11\x1F\x7F\xC0\x49\xB1\xED\x57\xDE\xD5\x06\xB4\x37\x1C\xE0\x08\x74\xB3\x51\x04\xF6\xC3\xAF\x1F\x5C\xF4\x46\x10\xE2\xA7\x28\x32\x0B\xCA\x27\x1F\x79\xA4\x77\x26\x3B\x12\x13\x40\x48\xE6\x88\x63\x97\xBE\x2E\xB0\xDB\xE6\xAF\x74\xB0\x50\x31\x24\xED\xB9\x66\x94\x26\x71\xC4\xC6\xB7\x14\x44\x3D\xE0\x45\x0B\x78\xD1\x38\xC0\x08\x89\x80\xFE\xBE\x5C\xBA\x95\x73\xB1\x47\x04\x9E\x8D\xE4\xC4\xB4\x49\x3A\x28\xDF\x81\x5B\x75\xD5\xEF\x80\x50\x47\x3A\x00\xE9\xB7\x67\x0C\xDA\xAB\x39\x21\xD0\xA2\xE6\x8C\x47\x7B\x34\x27\x34\x5A\xD0\x9A\xB1\x69\x8F\xC6\x84\x4C\x0B\x1A\x33\x4E\xED\xD1\x98\x50\x6A\x41\x63\xC6\xAC\x3D\x1A\x23\x4E\x2D\x68\x4B\xA8\xB5\x47\xD3\xC7\x17\x7F\xF6\xF1\x1B\xF8\x6A\xB6\xB0\x65\xB6\x47\x43\x46\x2E\x6C\xDF\x35\x35\xFF\x83\x14\xDB\xE2\x9C\xCB\xE1\x26\xAE\x40\x70\xE5\x5C\xAD\x8E\xC0\xC3\x97\xB1\x83\xCB\x36\x58\x93\x9F\xA0\xDB\x3A\x8E\xBD\xC4\x49\x12\x0F\x0A\xB1\x3D\x68\xE1\xEA\x93\x6C\xB5\x26\x1F\xA7\x06\x0F\xF5\x1A\xDC\x2D\xC4\x39\x06\xE9\x2B\x20\xAE\x9C\xAB\x75\xDB\x40\xD3\x27\x3E\xD9\x6B\x51\x4B\xBA\x52\xB4\x14\x49\xC4\xB5\xB7\x7E\x90\x6A\xBE\x0F\x7D\xB9\x96\x10\xA0\x44\x2F\x39\xAF\xEB\xEC\x90\x95\x01\x65\xDE\x2A\x38\xFE\x48\x80\xAF\x7F\x1D\x5F\x57\x42\x1E\xB6\xFB\x67\x6B\xBB\xFC\xEC\xEE\x46\x04\x51\x59\x4D\x5D\xD0\x1F\x44\xD7\x55\x4E\x23\x22\xF0\x5C\x9A\x6D\x89\xAF\x21\xA0\x18\x46\x73\x97\x9C\xC1\x98\x9A\x1D\xA2\xC4\xE6\xC1\x21\x99\x83\x3C\x12\xDC\xC9\x19\xC5\x29\xE6\x0E\x6D\x90\xF9\x31\x21\xE4\x36\xEB\x45\x14\x6B\x7F\x4A\x10\x2F\x2C\x02\xFB\x67\x3F\x30\xE3\x19\xD4\x8D\x6D\xBD\xBD\x3C\x9A\x1B\x91\xC6\x11\x69\xBE\x73\x53\x34\xBA\xF2\xC3\x2C\x46\x97\xBF\xDC\xE9\xB4\x73\x08\xDC\x58\xD8\x12\x65\x47\x6F\x21\x5D\xC2\x21\x6B\x50\x34\x08\x2B\xCF\xB8\x94\xCF\xAC\x6D\x2A\x21\x28\x7F\xC5\x45\x58\x78\xC3\x70\xCC\xC3\x81\xA9\x76\x60\x83\x2D\xD6\x6C\xF2\xC9\x3D\x01\x0E\xD3\x8A\xB1\x1F\x25\x07\x84\x70\x93\x47\x4E\x6E\x66\xD4\xB6\x4D\x09\xBA\x78\xE4\xB8\xDD\x3F\x28\x02\x79\x98\xED\xF7\xB1\x9B\xE0\x45\x45\xEF\x39\xA1\x67\x2B\xAC\xF4\x25\x1A\x82\x13\x93\xB1\xB1\xCA\x6A\x5F\x94\x73\x51\xD7\x6A\x3F\xB7\x0A\x6D\xE4\x4B\x56\x67\xAB\x00\x57\x89\x6D\xE2\x4B\x6E\x73\x1D\xA7\x36\xF3\x45\xCF\xC1\x22\x73\x27\x5F\xBA\xE3\x87\x6A\x31\x27\xC2\x51\x79\x85\xFC\x13\xF9\x5D\xAD\xC9\x55\xE7\xF7\x44\x01\xCF\x0E\x04\x81\x95\xD3\xF6\x67\xDE\xFD\x14\xDD\x4F\xDD\xFD\x1C\x4D\xCD\x8B\x18\x63\x85\x8B\x59\x65\x47\x2C\xF7\x3D\xD9\xCF\x1F\xA5\xC2\xFE\xE7\x6E\x0D\xBC\x6D\x0E\x85\x5D\xEB\x79\x90\x9B\x13\x6E\x8A\x07\x82\xA0\x16\x1C\xBE\x11\xBB\x9A\xC5\x0D\xAA\xC0\x74\x4B\x90\x3C\x0A\xC1\x9C\x7B\x9E\xF9\x49\x17\xF5\x28\xB8\x23\x08\x6A\x65\xB7\x71\xC0\xEF\x7C\x5B\x6F\xC0\x07\x08\xD1\xC9\x08\x92\x33\x75\xD9\x0F\xBD\xAD\x8F\x32\x2D\xDA\xD7\x0C\xD1\xB5\x46\xB4\xFA\xAE\xB7\x0C\xE6\x5C\x56\xBA\x23\x0F\xCA\x38\x73\x4B\xE2\x1A\x40\x1C\x9F\xD4\x0A\x34\x27\xDC\xA7\xD9\x33\x7B\xA0\x80\xC2\x9E\xE1\x0F\x59\x5E\xC5\x9E\x18\x90\x41\x96\x3F\xC5\x41\xC3\x0D\x84\xE6\xCF\x5D\x60\x96\x3D\x16\x9C\xDC\xD9\x5A\xA8\x9D\x5D\xFD\x5A\xCE\x80\xB1\x9C\x03\x63\x79\x62\xC2\xA9\x3F\x07\x90\xCC\xA5\x62\x00\xCC\x72\x0E\x98\xE7\x6B\x01\xD7\x1A\xC0\xB3\xAF\x35\x04\x69\x2A\x65\x93\x5A\x61\xD3\x93\x8D\x7D\x45\x73\x48\x26\x66\x85\x92\xB7\xE2\x62\xFD\x89\x98\x5A\x8D\x8C\x89\x19\xB7\x65\x82\x9E\xCB\xF6\xF9\x0B\x62\x3A\xAC\x70\x3B\x3D\x77\x9D\x3C\x21\xA6\xC0\x8D\x3E\x88\xEB\xD9\x69\xF8\x44\x9B\x31\x9E\x00\x44\xEE\x02\x20\x92\xF9\xBA\x79\x00\x19\xBC\x86\x29\x43\x6A\xD9\xC1\x8C\x7C\x21\x9F\x2C\x77\x05\x63\x0E\xA5\xB3\x0A\xD2\x6A\x10\x76\xDC\x94\xEF\xC3\x0E\x90\xB8\x8A\x03\xC1\xD8\x43\x2F\x35\x3B\x24\x4B\x03\xC1\x91\x87\xD8\x9E\x3B\x71\xD0\xEF\xE3\x88\x38\x55\xE5\x7F\x51\x42\x6F\xB3\xDD\xA7\xB2\xE9\xCB\xBC\x37\x12\x41\xDE\x1E\xD0\x0E\xA1\x0D\xD6\xC9\x86\x60\x21\xD0\x83\x86\xC8\x29\x3A\xFC\x3C\x34\xC3\x7E\xB4\x10\xF6\xA3\x0E\xF6\xB5\xCF\xFC\xAD\xF1\x08\x38\x3E\xA9\x35\x44\xC7\x9C\xF6\xB1\x07\xFB\x1A\xA2\x17\x92\x07\x8D\xF6\xB0\xEF\x7D\x0D\x75\x0B\xFE\xDA\xB0\xF9\x24\x13\xF7\xDC\x45\x85\x38\x24\x13\x76\x44\x13\x1C\x65\xF3\xB8\x23\x0E\x6C\x52\xE0\x9C\x3F\x43\x1F\x86\x61\xDB\x05\x06\x38\xD7\x30\x51\x0A\x7C\x75\xBA\xBC\xE2\x53\x47\x34\x14\x00\xCD\x29\xE9\xE9\x56\x3C\xC0\x97\x14\x58\x88\x5C\xA9\xF9\x12\xF8\x2C\x9B\xF0\x92\xDF\x6B\x2F\x10\x9A\xA0\x40\x68\x6C\x71\xAC\xD9\xD7\x34\x6C\xEC\x37\x37\x55\x80\x1D\x1C\xC1\x0E\xFE\xF4\xFD\x3F\xF6\x8B\x5F\x43\x26\xFA\x76\x7F\x33\x5B\x52\xCE\x95\x24\x73\x25\x2F\x61\xA3\xEF\x07\x9B\x5A\xDB\x98\x64\x18\x73\xBF\x70\x39\x80\x1D\x61\x68\x17\xA2\x72\xD9\x78\x5D\x9E\x75\x9F\xCE\x3B\x3B\x55\x90\x15\x20\xFB\x72\x93\x97\x09\x16\x1E\x2D\x82\x5C\x1B\xD3\xB9\x2A\xA4\xEC\x01\xB8\xDD\xD4\xC2\x19\x77\x13\x1F\x75\x55\x08\xBD\xEB\x39\x20\x77\x21\x4B\x0E\x2D\x1C\x2D\xAA\xBD\x0B\x2E\x92\x9E\xB1\x57\x2E\xBA\xFB\x1B\xA5\x9C\x16\xC6\x1D\xF1\xDA\x0F\xD8\x85\x80\xD2\xEC\xF2\xD7\x0D\xD8\x19\xE1\x2A\x1C\xB0\x1A\x04\x4A\x44\xF8\x26\x92\xA6\x1A\xBB\x7D\xDA\xDE\xFE\x00\x1F\x3D\x3F\xE4\xC2\x27\xEE\x49\x48\x3B\xEA\x59\xCB\xF9\x11\x8B\xE1\x88\xE5\x8D\x8F\xB8\xB5\x17\xA6\x11\x0F\x96\x78\x76\xC4\xE6\x13\x78\x6A\xCD\x19\xE0\x78\xC4\xD6\xBB\x20\xB6\x36\x2E\xCE\xC8\x62\x2A\xE5\x5E\x2F\xA0\x52\xE1\x0B\x09\x46\xFA\x54\x2A\xB4\x08\xCC\x3D\x2A\x25\x29\xF4\xE9\x22\x3A\xC5\x7D\xCF\x30\x56\x44\xD0\xB7\x40\x23\xE9\x75\x3A\xA3\x96\x72\x7D\xE6\x6F\xC0\xEC\x68\x62\x7C\x30\x39\x26\x12\xC4\x96\xF7\x17\x74\xF3\xFC\x79\xED\x91\x54\xD0\x9C\x5A\x4B\x10\x84\x2D\x8D\x5C\xCF\x66\xDD\x9A\xAB\xD3\x95\x31\x45\xF9\x63\x93\x73\xE1\x6C\x4F\x84\x95\xDE\xA6\x7D\x63\x52\x0B\xA6\x84\xFE\x50\xE3\x93\xB0\x7F\xF4\x6B\x47\x08\xF9\xDC\xD7\x33\xE7\xBE\x9E\x3B\xF7\xF5\x89\x09\x79\x90\x0F\xCF\x7D\x2E\x95\x83\x73\x5F\xCF\x9D\xFB\xF3\xB5\x80\x6B\x0D\xCE\x7D\x5F\x6B\x78\xEE\x73\xA9\x30\xC3\x35\xE9\xB4\x11\x21\x2F\x47\xD8\x2E\x47\xD3\x2D\x87\xD8\x6D\x39\x6E\xCA\x5A\xCC\xF2\x40\x7E\xA4\x37\xB2\x16\xE2\x86\xD6\x62\x96\x07\xA2\x52\x96\xCF\xD3\x93\xA0\x1D\x0F\xD4\xBF\xB2\x34\x1F\x09\x5B\x7A\x4F\x91\x63\xED\x88\x79\x48\x9B\x4F\x8F\x12\x13\x29\x08\x02\xED\x6D\x38\xD5\xF2\xB7\x5A\x6E\x52\x80\x2C\x7F\xBB\x45\x12\xA2\xDA\x10\xF0\x45\x0A\x13\xDB\x17\x92\x3C\xA5\x40\x6F\xD6\xBA\xFC\x4F\x4E\x4F\x1E\x30\x39\xD2\xCD\x21\xA9\x77\xB5\x3E\x12\x76\x3F\x7E\x6C\x94\x84\xA9\x54\x81\x16\x51\x4A\xC6\x66\x27\x2A\x9D\x93\x4B\x61\x78\xA2\x88\xF0\xCF\x7A\x11\xD3\xEE\x52\xE4\x91\x69\x45\x16\x12\xEA\x28\x16\xE2\x88\xB6\x4F\x73\xA1\xA6\xC2\xC8\x8B\x07\x1C\xD5\x00\x3B\xE1\x28\x06\x0A\x19\x16\xCD\xFE\x83\xC1\x7A\xDB\x5F\x76\xAA\xD6\x47\x41\xDB\xF0\xD8\xD6\xB4\x65\x18\xFC\xB1\xB8\x4A\x34\xBD\x7C\xD4\xDF\x3D\xE1\x53\x9F\x31\x6E\x37\x8A\x20\x8B\xA6\x6C\x11\xCC\x78\x1B\xF9\xA0\xD0\xBB\x1C\x14\x7A\x86\xE3\xD6\xB3\x1C\x77\x38\x03\x6D\xE1\x1C\xB4\x85\x27\x26\x14\xCD\x79\x08\x6D\x5C\x3A\x84\xB6\x70\x0E\xDA\xE6\x6B\x01\xD7\x1A\x40\x9B\xAF\x35\x84\x36\x2A\x65\x03\xC5\xF4\x24\xF2\x2A\xAF\x68\x50\xDE\x27\xD7\xB8\x35\x19\x90\x4C\x62\x05\xC3\xC2\xAD\x3D\xAE\xAB\xBF\x42\x03\xD0\x32\x8E\x00\xD6\x81\xDD\x01\xA6\x81\xE4\x1E\x6D\xAF\xC2\x56\x45\xB7\xED\x2C\x63\xE3\x13\xD6\x45\x46\xD6\x98\x4F\x46\xBB\x1D\x02\xED\xC5\x38\x2D\x9C\x00\xB9\x59\x8B\x17\xFA\x1B\xEC\xA2\x3D\x27\xC4\x2E\xE7\x84\x3B\xC3\x77\x3B\x27\x88\x0F\x84\x29\xCE\x72\x70\x4A\x88\x17\x52\xF4\x92\xFE\x29\x21\x66\x4F\x09\x3E\x23\xC4\xF0\x8C\xA0\xDB\x0A\x64\xC0\x25\x48\x64\xC1\x45\x83\x0C\xD1\x3A\x71\xA8\xEC\x6A\xCA\x7C\x19\x47\x9B\x6D\x79\x0B\xDD\x50\xB2\x2F\x08\x71\x6D\x98\x6D\xF5\xC6\xAD\xA7\xD8\xD5\x80\xDD\x15\x8E\x4F\x2A\x66\x4B\x81\x5A\x54\x92\x7C\x9A\x85\x95\xC7\x0B\x41\x5C\x44\x25\x38\xAE\x84\xF6\xF1\x1B\x90\x1D\x71\xB6\x58\x64\x9C\xF7\xD4\x56\x6B\x20\xFA\xF2\x62\x91\x34\x33\xCF\xFE\xCB\x9E\x66\x8C\xD3\x75\x0A\x10\x10\x1E\x9F\xD4\x02\xE4\x9C\xD8\x2B\x40\xB2\xD8\x2B\x88\x67\x66\xEE\xFF\xD6\xDC\x65\x38\xA1\xA2\x9F\x62\x3D\x00\xAB\xBC\x73\xE2\xF3\x17\x63\x61\x38\x83\x85\xCC\xB4\xB1\x4B\xBB\x8F\xC6\x50\x8B\x19\x4C\x14\x73\x98\x28\x4E\x4C\xD8\x9A\x6B\x80\x89\x5C\x3A\xC4\x44\x31\x87\x89\xF3\xB5\x80\x6B\x0D\x30\xD1\xD7\x1A\x62\x22\x95\xB2\xE1\x5E\x8A\x70\xC3\x74\x7F\xF7\xF9\xE2\x66\xF3\x49\x49\x4C\x79\x1B\x70\x82\x84\x24\x64\x4C\x92\xBE\x79\xAA\xF9\xB5\x4C\xE8\x45\x18\xE6\xE8\x37\x59\x88\x51\x77\x49\x43\xC1\x90\xDC\xED\xFF\x0B\x3B\xC6\xFE\x7A\xD4\x6F\x8E\xE4\xB1\x62\x8E\x3A\xA5\x63\x03\x7F\xDF\xE6\x02\x44\x12\x11\xD9\x74\xB4\xE3\x8B\x46\x60\x7A\xBD\x80\xD1\x13\x2D\xA3\x57\x0C\x51\xB8\x18\xA2\x70\x71\x63\xC2\x36\x71\x36\xDD\x71\xB7\x26\xF7\x8F\xD2\x40\x48\x15\x04\x81\x08\x78\x1A\x14\xBE\xDD\x99\x50\x3E\x75\x7A\x44\xD1\x63\xF5\x6E\xB3\xEA\xD8\xD7\xD1\x90\x7D\x1D\xCD\xB2\xAF\xA3\x5D\xD8\x57\xB1\x80\x7D\x05\x41\x9C\xB9\x95\xC8\x40\xDA\xAB\x07\xAB\x00\x4F\x6D\xA6\xEA\x1F\x73\x16\x53\x82\x90\xA3\xDB\x39\xAE\x16\xFA\x99\xB7\xF1\x3B\x6F\xA4\x0D\x8E\xC0\x9B\xA7\x72\x99\xEE\xF5\x73\x83\xDD\x10\x1F\x2E\x86\xDD\xA8\x19\xB3\x96\xDB\x9C\x7E\xA1\x6D\x4D\x10\x0D\x0C\x86\x11\x99\x92\x97\x9F\x61\x96\xA0\x63\x74\x36\x0F\x75\xBA\x60\x62\xE3\xF7\xC6\x80\x39\xF8\x3F\x5A\x28\xBB\x73\x35\xA8\x48\x8D\x40\xA6\x07\x92\xBD\x18\xC8\x70\x45\x7F\x63\x21\x3D\x1E\xD0\x5E\x53\xF7\xBB\x13\x36\x17\x9E\x96\x23\x51\xCE\xE1\x19\x0D\xFA\x1B\x69\x02\x0E\xD9\x9E\x6E\x8C\xDA\xEB\x50\xBC\x31\x8C\x12\xA6\xD5\xB8\x5F\x0D\xB6\x38\x5E\x27\x3B\x2B\x7B\x75\x50\xB8\xE9\xB8\xD0\xD0\xCD\x0D\x58\x2D\x43\xBC\x26\xC8\xF2\x77\x69\xD8\x8E\xE1\x10\x9E\xE1\x08\x91\xE1\x40\xC1\xE0\xEA\xC5\xC1\xF6\x3D\x09\x0D\x35\x7E\xBF\xFC\x55\x76\x00\x13\x55\xCB\xD4\x40\xE0\x6E\x06\x3A\xBA\xFA\x29\x2D\xC2\x79\x23\xC1\x4E\x31\x82\x6B\xFC\xA6\xB7\xCD\x78\xF2\xD2\xC6\x7C\xF8\xDF\x0E\x62\xD1\xAB\x27\x47\x67\xEB\xB0\x85\xB4\x80\x34\xE7\xDC\x9C\x78\xF9\x7B\x0B\x76\x82\x50\x20\x8E\x95\x7F\xD0\x9A\x18\x3D\x8D\x50\x21\xE7\xA0\x42\x0E\xA0\x42\x3E\x29\xA8\x08\x69\xF4\xA2\xFC\xA1\xBE\x04\x92\xA0\x80\x2C\x0E\xC9\x84\x44\x65\x8A\xC6\x90\xBE\x8C\xA2\xDA\x91\xEE\x72\x8F\xC9\x41\x04\x7A\xDD\x91\xD5\x45\x4A\xCE\x10\x34\xF1\x68\x73\x4A\xCE\x70\x21\x97\x13\x0E\x95\x9C\x14\x39\x4B\x93\x72\x5F\x43\x38\xC7\xE5\x68\x08\x99\xCB\xD1\x14\xF4\x7E\xC0\xE5\xB8\xA2\x8E\xCB\x41\x29\xD6\xF4\xAD\x48\x95\xF9\xB8\x1A\x70\xC7\x7A\xA8\x22\x09\x77\x99\x74\x68\x5C\x08\xD9\xC5\x3B\xEA\x5E\x2F\xD8\x51\x22\x91\x7A\xB0\xA3\x91\xD5\xA0\x67\x54\x24\x7A\x77\x15\x49\xE8\xF4\xB4\x4E\x92\x57\xDE\x7A\xC0\x29\x36\x54\xA7\xD8\x90\x3D\x49\x5E\xB6\x92\xBC\x64\x49\x3E\xEC\x54\xF5\x43\xD6\x4E\x31\x77\xFC\xE5\x23\x5D\xC9\x56\xBA\x22\xD9\xAA\x23\x1F\x3F\x35\xBC\x81\x78\xBA\xB7\x36\x9C\xDF\xDA\x70\x76\x6B\x77\xDB\x58\x8E\xBC\x52\xFE\xE6\x79\xF6\x1C\x6B\xA7\xF0\x63\x4A\x86\x9D\x87\x20\x0C\x78\x4B\x72\x6D\x22\x45\x83\xCB\x4E\x23\x76\x39\xE8\x84\x3B\xE8\xE8\x7C\x13\x08\x34\x91\xDF\xDE\xF8\x68\x41\x8A\xE6\xA3\xEC\xF2\x41\x1C\x82\x70\xD6\xA9\x9A\xCF\xD3\xA0\xB1\xD9\xBD\x84\x75\xAC\x2F\x04\x51\xFE\x3A\x9F\xEA\x28\x44\x1C\xBC\x2B\x48\xA8\x3A\x69\xC3\x11\xFC\xD4\x21\x79\x1B\x28\x2B\x0F\xC9\xFD\x6C\xBE\x26\x6C\x00\xC1\x66\xF9\x9F\xCF\x3B\xE7\x62\x84\x3F\x45\x54\x16\xC7\xA3\xD6\xE4\x6D\xED\x78\xAA\x18\x9F\x4B\x36\x85\x48\x4F\xB9\xAB\x07\xB2\x3A\xA3\xCA\x51\x63\x1F\x6C\x58\xFF\x92\x82\x98\xD4\x74\x73\x4D\x10\xE1\x3A\xB8\xBF\x76\x22\x9E\xCD\x40\x50\x48\x38\xF6\x2B\x3C\x57\x27\x14\x91\x39\xD8\x28\x04\x24\x47\xE0\xE1\xCB\x96\xBC\x70\x38\xDA\xCE\x37\x92\xCF\x05\x29\xA4\x58\x3E\xD4\x83\x96\xCE\x8A\x21\xB9\xCC\x92\xA5\x3F\x57\x25\xDD\xC1\x6F\x53\xCE\xA7\x2E\x13\x9B\x36\xD7\xD4\x62\x69\xC0\xEF\x17\x82\xD5\x85\x77\x0C\x4E\x2D\x39\x7F\x6A\xF9\xFD\x5C\x70\x62\x89\x4E\x2F\xE2\x4F\x2D\x31\x7B\x6A\x49\x97\xC9\xF2\x18\x8B\xDF\xAB\xC0\x4E\xAB\x3D\x13\x81\x35\xE9\x0E\x7D\xF1\x5C\x99\xDC\xC9\x6A\x87\xF6\x06\x0F\x7F\x8C\x49\x9D\xEC\xE3\x60\x13\x2C\x44\x20\xFD\xF9\x17\x81\x74\xE7\xDF\xAD\x4F\xEF\x9D\x9E\x9A\xBB\xD3\xFB\x62\x98\x22\x4A\xCE\xB6\x89\xA4\x32\x69\xD7\x05\x24\x9F\x86\xB7\x52\x72\x86\x56\xBF\x60\x03\x88\x36\xD7\x1B\x3A\x32\xFA\xEB\xB5\x68\x95\x06\x6C\xCB\xB7\x93\x1D\x0B\x65\x35\xFB\x14\x9D\xB2\x92\x0D\xCE\xBC\x2D\x32\x4A\x32\x3B\x92\xA6\xEB\x74\x70\x14\x56\x99\xEE\xCC\x28\xE3\x1B\x48\x08\xC8\x6A\x81\x10\xD3\x25\xEA\x24\x42\x8F\xBF\x28\x3E\xAE\x00\xED\x21\xD0\xF5\x6D\x40\x99\xB7\x48\x77\x07\xCF\xF6\x30\x04\x28\xEA\x29\xAB\xFB\xCD\x53\x3E\xB2\xFB\xB7\x92\xE1\xC2\x5B\xC9\xF0\x86\x6E\x25\xBB\xE8\x04\x2D\x8C\x5E\x7F\x1F\x1C\x8F\xE4\xFE\x93\x77\x10\x6F\xAC\x30\xEF\x55\x7C\x31\xF5\x34\xE0\x61\x87\x85\x0B\x70\x10\x54\xF9\x69\xD6\x13\x5B\xF6\x41\x01\xD9\xD4\x7A\x93\xFC\xC8\xD3\x97\xD5\x11\xB2\x59\xF1\xDE\xBB\x04\x31\x84\xEB\x9C\x66\x79\x21\x9B\x15\x41\x48\x72\x4C\xEF\x44\xBA\xC1\xBB\xE4\xD0\x45\xDA\x47\x64\x38\x3E\xA9\xC3\x85\x37\xC9\xA1\xBF\x49\x0E\x41\xB9\x3D\xE3\x2C\x56\x54\xD0\x19\x52\xF8\x3D\x6B\x37\x82\xCE\x91\x1C\x64\xF9\x0E\x27\x72\xEA\xF6\x92\xD9\x53\x20\x5E\x93\x43\xBB\x12\x21\x2B\xCC\xA5\x90\xCC\x33\x16\xD9\x60\x0E\x14\xE3\xC2\xEA\x13\x95\x44\x11\x5B\xB0\x62\x5C\xCC\x29\xC6\x25\x4A\xC9\xA2\xD5\x81\xB3\x62\x5C\xA2\xCC\x2B\x8E\x16\x61\x8B\x94\x24\x54\x62\x27\x1C\x23\x55\xD8\x60\x9D\xA3\xA2\x8A\x19\xC5\xB8\x3C\x0A\x92\x15\xE3\x92\xD2\x96\x09\x33\xAB\x14\xAF\x84\xBB\xA7\x75\x96\x38\x4F\x5D\x57\xC8\xF7\xCA\x7A\x81\xCA\x70\x4F\xCC\x14\x9E\x99\x16\x20\xEF\x9D\xD4\x72\x21\x66\x4A\x8F\x99\xB2\xDD\x65\xC9\xBB\x2C\xDB\x5D\xE6\x59\xCA\xDE\x2C\x89\x61\x14\xAD\x76\x3F\xB7\xA2\x21\x3E\x93\x71\x6A\xF7\x3B\xEB\x3E\xDF\x29\x67\x15\xFB\x5F\x06\xEA\x44\xD9\x57\x27\x1A\xF3\x4D\x42\xCC\x5C\x1D\x79\xB6\x6A\x34\xE5\xFB\x12\xBA\x47\xF2\x85\x39\xFB\xC3\x0C\xF9\x09\xA2\xE6\x4C\xF3\xCA\xDF\xA3\x2D\x7F\x4C\xB5\x44\x7D\xDD\x21\x17\x79\x85\x4A\x2B\xA7\x4C\xDD\x59\x39\x26\x5D\x6E\x64\xE5\x13\xDC\x90\xBA\x6B\x73\x6C\xAC\xA0\x5F\x56\x9C\xD9\x1C\x9B\x7E\x05\x2B\xCE\xD8\xED\x66\x6C\xF6\x36\x2F\x68\x8F\x92\xBE\x9D\x41\x77\x67\x1F\xD0\x09\xA6\x76\x21\x91\x74\xBF\x34\x4B\x1E\x85\xE7\x37\x7B\x83\xB8\x4E\x07\x2D\x52\x52\xB5\x61\x67\x08\x16\x38\x1F\x37\x3D\xE9\x7B\xAE\x15\xE7\x7B\x94\x9B\x7E\x8A\x4E\x09\xCB\x77\x72\xCC\xDF\x36\x94\x15\xD2\x06\xDC\x81\x9B\xC7\x76\x43\x86\x27\x64\xD9\x68\xB7\x4F\x73\xC6\xC9\x2D\xB7\x2B\xBF\x4F\x2A\x31\xE1\x87\x84\xCD\x4E\xB2\x6D\xE8\x07\x3B\xCB\x07\x5D\x4B\xE6\xA2\x15\x4B\xAC\x12\xD4\x66\xED\x8D\x30\x98\x2E\x7A\x0A\x49\x5E\xB6\x48\x1F\x5F\xF7\xEA\x9D\x9D\x60\x73\x40\x3B\x19\xA0\xC9\x85\x0C\xE4\x26\xD7\xE0\x0A\xB8\x5B\x82\x2D\x32\x28\xAC\xBF\xB3\x44\xE1\x20\x69\xC4\xD2\x32\xA4\x10\xD3\xE4\xB5\xD9\x20\x39\xE9\x1F\x07\xE6\x27\xF9\x8E\xC2\xBE\xD3\x1A\x18\xBB\x6D\x05\x1E\x01\x1B\x13\xA4\xB6\x7A\xDB\x69\x6E\x7C\x80\xD7\xF6\x92\x85\xA3\x25\xB8\xDB\x91\xED\x86\x6D\x62\x5C\xC4\x57\xD9\x46\xFF\x3F\xEA\x4C\x2E\x34\xD2\xCB\x7B\x9D\xD9\xDA\x40\xD0\x24\xA3\x99\x19\x24\x57\x73\x48\xAE\x16\xCA\x97\x6A\x81\x7C\xA9\xE6\x90\x7C\xBE\x16\x70\xAD\x01\x92\xAB\x85\xF2\x25\x95\x1A\xD9\x45\x89\xAE\x23\x1F\xA9\x5E\xDA\x5E\x74\x7B\x88\x66\x62\xCA\xEA\x36\xA6\xAC\xEE\xC7\x94\xD5\x5D\x4C\x59\xDD\x8F\x29\xAB\xBB\x98\xB2\x7A\x10\x53\x56\xF7\x62\xCA\x6A\x0A\xE9\xEA\xA2\x13\x4A\xD9\x0F\x65\xFC\xCF\x9A\xB9\xF0\xB2\xBA\x17\x5E\x56\x0F\xC2\xCB\xEA\x5E\x78\x59\x3D\x0C\x2F\xAB\xFB\xE1\x65\xF5\x30\xBC\xAC\xEE\x87\x97\xD5\x33\xE1\x65\xF5\x20\xBC\xAC\xE6\xF0\xB2\xDA\xD9\xF7\x1C\x27\x3E\x28\x68\x41\xE9\x41\x1F\x2B\x78\x2F\xC8\x71\x50\x63\x40\xF7\x82\xCC\x92\x31\xF6\x3A\x3B\xF0\x9A\x27\xA2\x81\x76\x50\x7F\x71\x72\xD6\xEE\x72\x73\xBB\xD2\xB3\xD2\xB3\xE7\xF1\x28\x9F\x5A\x8F\xCF\x9B\xB4\xC0\xCE\x52\x53\xCC\x52\x53\x04\x21\xC4\xAD\xD4\x44\x94\xEC\xAF\x9F\x22\x62\x57\xB1\x29\x46\xB1\x29\x46\x16\x2D\x46\xA6\x35\x81\x84\x45\xA4\x78\x73\xDD\x27\x75\x77\x09\x7A\x23\x9A\xA9\x93\xA9\x98\xE5\xD9\x65\x9A\xE2\xBA\xD3\x34\x43\x56\x56\x2C\x64\x65\xC5\x1C\x2B\x8B\x6C\x32\xAE\xB4\x67\x64\x85\x87\x88\x01\x1B\x2B\x3A\x36\xF6\x56\xE2\xEE\x3A\x2E\xF6\x56\x67\x95\xF0\x94\xF6\xC6\x3C\x65\xFE\x7B\x66\xD8\x5F\x0C\xFF\xBD\xCD\xBC\xEB\x50\x16\xEA\x76\x84\xB6\xF3\x06\xC5\xDA\x4E\x17\x05\xD2\xBC\x6D\x59\x2C\xF7\x30\x2E\xEC\xDF\x73\xFA\x40\x3B\xC4\xF3\x48\xFC\x1D\xF3\xEF\xC8\x45\x33\xE6\x3F\xF8\xBD\x82\x42\x54\x38\x0B\x92\xA7\x49\x73\x4E\xAA\x83\x70\x4E\x75\x10\xCE\xE8\x59\xC3\xDD\xF5\xAC\x0B\xEE\xF2\x44\xCF\x14\x4D\xD3\xC1\xE9\xB8\x36\xE7\x72\x82\xD3\x22\x6D\x58\x72\x6F\x9D\x4C\xEA\x14\xE9\x47\x2B\xD8\x45\xBB\x4C\x91\x1D\xD6\xF6\x02\xA5\x88\x41\x29\x5B\x08\x4A\x59\x07\x4A\x11\x83\x12\xE2\x20\x82\x52\x04\xD9\x02\x50\x8A\x20\x63\x50\x8A\x40\x3B\x50\x8A\xBC\x72\x44\x3B\x50\x8A\x0C\x44\xDE\xC6\x87\xE4\x06\x09\xC9\xA4\x36\xC4\xDC\x23\x35\x4B\x29\x32\x08\x18\xFC\x53\x50\xC6\x27\x61\xE6\x0A\x23\x17\xA6\x2D\x87\x88\xAD\xE3\x6D\x76\x7F\x15\x43\xE1\x1E\x05\xFB\x49\x91\x13\x7E\x9D\x58\x71\x82\xEE\x96\x62\x7A\x1C\xD3\x23\x7D\x7B\x0C\x09\x2B\x39\x4B\x3A\x03\xD7\x24\x9D\xD1\x55\xE9\xF2\x56\x50\x6E\xF6\xEC\x14\x05\xA5\xC0\xC7\x31\x64\x28\x95\x65\xDC\x5F\xDC\xF5\x13\x43\xC6\xFD\x2C\x61\x3F\x9E\xC1\xA8\x96\x5C\x5E\x8C\x2A\x83\xC4\xF7\x83\x8F\x09\x8C\xB1\x9F\xF1\x82\x7E\xC6\xDC\xCF\x72\xAF\x9F\xA4\x5A\xF6\x99\x37\xDC\x08\xA8\x23\x7A\xE6\x8E\xFD\x0C\x07\x3D\xB9\x99\xAD\xF4\x7A\xCA\xAB\x15\xC3\x8E\x71\x7E\x0C\xD4\x13\x3D\xEF\x3D\xB7\xD5\x5E\x4F\x65\xB5\x6A\xD8\x3F\x6F\x30\x39\x7A\xDE\x7B\x76\xFB\x7A\x3D\xAD\x56\xFB\x8C\xF3\x13\x1C\x4C\x8F\x0B\xF6\x9E\xDF\x2D\xBD\xBE\xF6\x57\xB7\x18\xE7\xB2\x88\xC0\x40\x13\x94\xDE\xB9\xB1\x4A\x78\x86\xC2\x41\x43\xD7\x97\x04\xC1\x7D\x65\xBD\xBE\x6E\xAB\x32\xC3\xBB\x2F\x78\x0C\xDC\x00\x5C\xF3\x0C\x6E\x81\x7D\xB0\x0A\x2B\xB0\x0C\x4B\x50\x36\xFC\xCF\x1D\x57\x02\x24\x77\x28\x7A\x1D\x42\xE5\xA5\xF7\xA8\x01\x01\x71\xD3\x4B\x2E\x31\x42\xB1\x76\x04\x86\x0D\x44\x8E\x73\x7E\x0A\x0A\x8A\x5F\x8B\x86\xB9\xB2\x8E\xBB\x2D\x40\x3C\x09\x29\xB6\x5C\x28\xC5\x96\x37\x24\xC5\x96\x37\x24\xC5\x96\x0B\xA5\xD8\x92\x4D\xC6\x2A\x09\xA5\xDD\x6E\xAA\x25\x8A\x7D\xCD\xE8\x15\x41\xC9\xA9\x74\xEA\x04\xB1\x56\x82\xC3\xD6\x31\xA1\x27\x2D\xB0\x80\x84\x7D\x1A\xEB\x82\x1E\x69\x59\x0B\xBF\x4F\x94\x1A\x94\x52\x34\x90\xEB\x2F\x2D\x21\xAE\x28\xEE\x39\xE5\xEA\x69\xF3\x5F\x22\x53\x35\x76\xD9\x05\x5C\x92\xB9\x25\x9B\xBC\x98\xA4\xD4\xEC\x14\x7F\xA9\xB4\x09\x4A\x73\x09\xA2\x78\xAF\x30\xE6\xC2\xCF\xC6\xFD\xC2\x88\x0B\x11\xF7\x7A\xA5\x21\x97\x22\x1E\xF5\x4A\x35\x97\x22\x4E\xF4\x4A\x15\x97\x12\x78\xF7\x8A\xA5\x2B\x46\x48\xF5\xC5\x48\x70\x47\x14\x83\x80\xEE\xC1\x51\x66\x1C\xD9\xED\xD3\x20\x9A\x2A\xA3\x39\x41\xDE\xB4\xC9\x99\xF9\x2E\x3D\xBB\xBF\x8E\x1C\x06\x41\x44\xAE\xFD\x3D\xC4\x61\x2A\xE6\x7A\x97\x4C\x8B\x7A\x4F\xBD\x49\x49\x47\x15\x7A\x8F\xBD\x69\x48\x8F\x9E\xFD\xE7\xDE\xC0\xA5\xB7\x93\x6F\x37\xA2\x33\x11\xA6\x13\xCB\x9E\x9A\xD6\x19\x1E\x75\xC6\x39\x3E\x38\x23\xB9\x98\x99\xF9\xF1\xF5\x8D\xE4\x22\x2F\x66\x46\x9D\x91\x5C\xEC\x39\x0F\xCE\xF1\xB5\xF0\x38\xCC\x38\xD3\xD3\xCD\x34\x93\x8B\xC9\x4C\x2E\xDE\xDB\x4C\x4E\xCF\xD8\xC8\xE9\xEE\xEA\xB8\x0D\x6E\xA4\xCA\x3F\x3A\xDF\x86\x36\xDA\x91\xA0\x7D\x6C\xA3\xB0\xBB\x00\xF8\xCD\x70\x70\x03\x24\x07\x16\x97\x28\x9D\x77\x36\x97\x04\x10\xEC\xBA\x94\xBE\x8C\x72\x6A\xB3\x61\xA3\xEE\x19\x36\xEA\xD6\x95\x66\x68\xD8\x48\xF7\x3D\x35\x67\x86\xEC\x5F\x5C\x2D\x30\x6C\x64\x27\x4F\x08\x39\xFD\xDC\x82\x3D\xD3\x14\x7F\xD7\xE7\x9E\x0B\xBB\x3D\x53\x37\xD7\xB0\x71\x4F\x9F\x3E\xD6\x92\xD1\x8E\x29\xDA\xB1\x79\x7F\x3E\xE1\xFD\xF9\x04\xC5\x8B\x9A\xD9\x34\x2A\xEA\xAE\xFC\x15\x83\xDB\x02\xD5\x52\xC0\xAA\xA5\x19\xA5\xC4\x97\xA1\x16\x52\x0D\xB4\x90\x33\x7E\x43\xBB\x4F\x7C\x6E\xAE\x45\xE7\xF6\x37\xE5\x44\xEF\xBA\xFC\xA4\xD7\x3A\xB7\xC0\x7D\x69\xF5\x19\x21\xE0\x19\x21\xE0\xBF\x85\x10\xB0\x75\x93\x84\x80\xAD\x9B\x24\x04\x6C\xDD\x34\x21\x60\xEB\xA6\x09\x01\x5B\x37\x4D\x08\xD8\xBA\x89\x42\xC0\xD6\x4D\x14\x02\xB6\x6E\xB6\x10\xB0\xF5\xD7\x45\x08\x28\x16\x1E\x22\xC5\x0D\x1D\x22\xC5\x0D\x1D\x22\xC5\xC2\x43\xA4\x68\x85\x80\x02\x99\x81\x72\x20\x04\x14\x37\x2E\x04\x98\x4E\x08\x30\x7E\x9F\x6E\x54\x08\x90\x87\x91\xC3\xF7\x2C\xBF\xEB\xD9\x31\x35\x85\x63\x6A\x40\x9C\xE4\x96\x05\x85\x07\xB5\x69\x5F\x20\xE0\x4D\xF7\x4D\x84\x6F\x22\xDB\x26\xB2\xD7\x84\x59\xEA\x3D\x9B\xA8\x5E\x13\xC7\x77\xEF\xD9\x46\xF7\xDA\x38\xE6\x7C\xCF\x36\x61\xAF\x8D\xE3\xE0\xF7\x6C\x13\xF5\xDA\x78\x36\x7F\xCF\x46\x71\xBF\x91\x93\x05\xAE\xDF\x68\x20\x9D\xD5\xB2\x95\xCF\x08\x0D\xE2\x9E\xCC\x33\x26\x71\xA2\x16\x1C\x2B\x5D\xCC\xCA\x3B\x44\x2C\x12\x10\x2E\xE2\x22\x21\x66\xF2\x25\x96\x77\x22\x10\x3D\x44\x76\xD2\x4F\xDC\x9F\xC8\xF1\xEB\x48\x41\xCF\x08\x40\x37\x2E\x00\x7D\xA0\xEC\xA2\xB5\x7F\x44\x6E\xD6\x91\x4F\x7F\x40\xE9\xF2\x76\x92\x3B\xE5\x57\x43\x84\x0C\xD5\x1D\x10\xD9\x83\x77\x05\x6B\x14\x81\xF2\x6A\xD0\x1C\x92\x5F\x8B\xBC\xE2\x21\xF9\x1C\x88\xFC\x55\xC4\xAA\x6B\x56\xDE\x29\x73\x88\xEC\xEB\xC5\x5D\x41\x42\xBC\x63\x15\xB3\xE5\x61\x42\xAD\x9F\xD3\x1C\x92\xB7\x71\x8A\x34\xC9\x89\x66\x28\xF2\x98\xA0\x14\x21\x7C\x74\xE0\x51\x74\x6F\x9D\x4E\xEA\x18\x77\x3B\x99\xE7\x8C\xB1\xBC\x4A\x0C\x31\x3A\xE9\x84\xEE\x2E\x12\xDC\xEA\x78\xC0\x24\xC7\xAE\x4B\xF6\x4A\xD7\x75\x46\x2C\x5F\x63\xB7\x1B\xAC\xA8\x6B\x63\xA9\xA7\xA4\x4E\xF8\x72\x35\xB7\xDB\xA7\x1B\x48\x20\xBF\x77\x42\xFE\x3F\x39\x8A\x7F\x59\x95\x13\x69\x74\xB3\x54\x25\x44\x90\x23\xA3\x19\x11\xE3\x6C\xC7\x53\xFB\x7A\xB1\x75\x57\x90\xF0\x57\x76\x1B\xAE\xAE\x0C\x07\xC7\x4D\x0C\x44\x3C\x58\xD9\x0D\xD6\x06\xEB\xB4\x94\x36\x69\x2A\x0A\x7A\xB9\xC6\xF9\x1D\xD7\x38\xCB\x57\xBE\x09\x21\xBB\x68\x14\x4F\x5F\x60\x8E\xF8\x85\xC4\xFF\x07\x77\x05\x1F\x96\x9E\x0B\x8F\xAD\x86\xC8\x7E\x58\x0E\xD8\xF0\xE8\x40\xF0\x61\xB9\x0B\x1F\x2E\x17\x78\xBD\xF7\xF8\x70\xE7\xDC\xC7\xC1\x85\x9C\xB9\x8A\xBB\xD8\x90\x90\x40\x42\xD7\x1F\x6B\x32\x3F\x5E\xC7\x13\x5C\xAC\xDC\xCF\xD6\xEC\x32\x5B\x8E\x5D\xB7\x17\x12\x9A\x1B\xE4\xC7\xA9\xB7\x1C\x0C\x2E\xF9\xF1\x49\x6D\x16\xF2\xE3\xC6\xF3\xE3\x06\x42\xC7\x8F\x1B\x9E\x0A\x16\x30\x3F\x6E\x0C\x18\xB2\x19\x49\xEC\x6A\x83\x70\x87\x7F\x0A\x88\x27\x95\xA1\x4C\xBA\x75\x42\xE2\x6F\x2D\xB1\x68\x04\x05\x64\xF8\x23\xA3\x45\x88\x27\x1C\xA0\xDB\x5F\x87\x89\x29\x85\x20\xF3\x1E\xBC\x19\x12\x7D\x83\xFF\x29\xF0\x3F\xA3\x35\x19\x94\x17\xF1\xA3\x94\x1A\x90\x0A\xBB\x2B\xCB\x78\x97\x65\xA3\x08\xDB\xF1\xEE\x76\x4B\x79\x7F\xF5\x62\x5E\xBD\x64\xE1\xEA\x25\xDD\xEA\x71\xA7\x90\x43\x4C\x76\x4B\x31\x24\x0B\x56\x2F\x86\x84\x57\x2F\x6E\x57\x2F\xF6\x17\x97\x7E\xF5\x62\x8A\x51\x1F\x1A\x2F\x09\xCA\x33\x0D\x18\x97\x8F\x9A\x50\x8F\xFA\x3B\x35\x05\xB5\xC5\xF1\x73\xA4\x15\x90\x4E\x20\xC5\xB5\x1B\xB3\x72\x93\x53\x01\x52\xEE\x20\x89\xE4\x25\x6D\xC3\x91\x9F\xE9\x4E\x03\x17\x3E\x98\xEE\xB6\x69\x49\x25\xA2\x5D\xE6\x7E\xE5\xFE\x60\xC8\x7B\x49\xC0\x70\x4E\xC8\x48\x12\x0B\x34\xC6\x4E\xC7\x90\x52\x9A\xEF\x38\x97\x06\x7F\x72\x3C\xE0\xAC\x32\x50\x54\x23\x37\x07\xEA\x3C\x5E\xA3\x84\x5E\xB2\x7C\x2B\x2D\x1F\x8F\x8D\x2D\x62\x8E\x4F\xE8\x6B\x3D\x31\x1F\xD9\x5E\x8A\x4E\x42\xE7\x15\x25\xF2\x97\xD4\x03\x09\x50\x94\xBC\x9B\x72\xF5\xBA\xFD\x32\x4F\x99\x2C\x0C\x10\x45\xF2\x56\xC7\x0B\xB7\x3A\xEE\xB6\x5A\x32\xA2\xA0\x00\x88\x88\x22\x21\x9E\x3B\xAD\x24\xC4\x7C\x5A\x49\xBF\xD1\xB7\x7A\xFB\xB4\xB0\xA7\xF6\xC9\xF9\x90\x1D\x3B\x85\x83\xB3\x1E\xA2\x50\xFC\xED\x45\xA7\x62\xE7\x07\x98\x8F\xCF\xCC\x2A\x92\xDC\x40\x3E\xAB\x22\x11\xAE\x83\x5A\xBA\x58\x48\x48\xE2\xF7\x5B\xB5\x4E\xAB\x29\xB6\x5C\x88\xA5\xBB\xD8\x4B\x6E\xF7\x9E\x87\x72\xC2\xEC\x67\xBE\x1C\xC2\x48\xE5\x36\x3D\x09\xB2\xA7\x75\x8A\x0E\x04\x6B\xB5\xE4\x28\x62\xD1\x9A\xFC\xDA\xB9\x28\x62\x58\xC1\x03\x4C\xC9\x5A\xA1\xB5\x66\x2E\x90\x18\x44\xF6\x23\xD2\x33\x12\x3F\xAB\x06\x2E\x1C\xE1\x8C\xF7\x03\xA9\x9A\x7C\x96\x8F\xDC\x99\x16\xE3\x99\x8B\x47\xDE\xD4\x86\x67\xB6\xD8\x26\x11\x39\x99\x4F\x7B\x13\xEF\x61\xB0\x2B\xE4\x68\xD6\x28\x9A\x48\x2F\xA2\x03\x67\x40\xE8\x5A\x91\xBD\x0B\x31\x75\xCE\x02\x8E\xC2\x1B\x45\x40\x48\xC4\xCE\x1B\x9A\x0F\xD2\x5B\x7B\x1C\x92\x34\x64\x42\xCE\xD6\x1F\xBD\xEE\x38\x8E\x84\xAB\x05\x6C\xF2\xED\xA2\x00\xE4\x4F\xA3\x36\x4C\xCD\x6B\xC3\xD4\xD3\xA7\x0D\x1B\xF0\x83\x4F\xAC\x3C\xA3\x33\x7C\x46\x67\x78\xD3\x75\x86\x49\x4F\x49\xD8\xEA\x0C\x4B\x7A\x74\x69\xB0\xC7\x50\x92\x75\xA7\x57\x17\x66\x5E\x5D\x38\x1E\xAA\x0B\x4B\x56\x1C\x2D\xF5\x95\x57\x36\xA8\x90\xF9\x5E\xA2\x43\xA8\xD3\x14\x26\x5E\x53\xB8\xD4\xA9\xE5\xF0\x71\x19\x4A\xEC\xA2\x9C\xE9\x62\x2C\x0F\x43\x39\xE8\x22\xA9\xC6\xAD\x92\x70\x05\x96\x06\x4A\xC2\x25\x58\xC6\x4E\x96\x67\x3A\x29\xE5\x61\x58\x1E\x74\x92\xB3\xE6\x93\xF4\x81\xCB\xB0\x32\xD0\x0F\x72\xA7\xF5\xEA\x4C\x27\x4B\xF2\x30\xAC\x0E\x3A\x29\x59\xED\x49\xAA\xC0\x55\xFA\x72\xA7\x1A\xDC\x47\x9D\xD6\x2B\x33\x9D\x2C\xCB\xC3\xB0\x32\xE8\x64\x95\x75\x9E\xAC\x04\xBC\x05\x56\x87\x5A\xC1\x55\xD8\x87\xDD\xEC\x9B\xE9\x66\x45\x1E\x86\x7D\x83\x6E\xF6\xB3\xC2\x93\xF5\x7F\xFB\xE0\x96\xA1\x42\x90\xFB\x1D\x2A\x04\x5D\x7A\x23\x16\x69\x3B\x5D\x60\x6C\xE8\x93\x95\xA0\x3E\xFC\x2A\xB8\x96\xB1\xD7\x02\xC2\x18\x12\xC8\x5A\x5D\xA0\x0B\x95\xBB\x4A\x7E\x33\x9D\x1A\x50\x76\x6A\x40\xF9\x25\x53\x03\x2E\x2F\x54\x03\x2E\xDF\x90\x1A\x70\xF9\x86\xD4\x80\xCB\x0B\xD5\x80\xCB\xAD\x1A\x70\x19\xD9\xC2\x95\x81\x1A\x70\xF9\x3A\x6A\xC0\x72\xA8\x06\x5C\x62\x7D\x12\x87\xB0\x2B\x61\xE9\x18\xF3\x03\x37\xA0\x01\x5C\xD9\x4D\x03\xB8\x3C\xAB\x01\x5C\x7E\xF2\x1A\xC0\xE5\x27\xAF\x01\x5C\x7E\x0A\x1A\xC0\xE5\xA7\xA0\x01\x5C\x7E\x0A\x1A\xC0\xE5\xA7\xA2\x01\x5C\x7E\x46\x03\xF8\x8C\x06\xF0\x4B\xA2\x01\x7C\xB5\x4F\x59\xCC\xBE\x29\xB9\x0B\xC4\x4B\xAC\xB6\x9E\xE1\xCD\xD5\x75\x78\x73\x4E\x68\x36\x8C\xB6\xC6\x4E\xBB\x5D\x48\x14\x50\xE5\x9F\x9D\xEF\xC5\x61\x03\x55\xFE\x39\x0D\xE8\x2F\x9F\xD6\x41\xD0\x30\xDC\x2D\xFB\x1E\x2E\x82\x73\xEE\x81\xCC\xC9\xEE\x67\x3B\xA3\xDE\xE7\x8F\xB6\x02\xA6\x17\x2F\x7B\xB1\xE9\xC6\x66\x58\xB5\xBB\xAE\x3F\x4D\xB6\xBA\xFD\x30\x76\xBF\xFF\x37\x79\xEA\xB7\xCE\xCC\x35\x1A\x98\xDB\xCC\x0B\x89\x4E\xAC\xD8\xAA\x93\x56\x5C\x4C\x78\x49\xD8\x81\xC3\x26\x3D\xD1\xB1\xE3\xCC\x49\x97\xB5\xE0\x15\x48\xBE\xD6\x42\x50\x8B\xAC\x9E\x3A\x33\x8C\xA7\x22\x64\xC6\xDE\xA7\x29\x62\xF7\x2D\x12\x7A\x2A\x45\x74\x87\xCE\xCF\xD8\x95\x2B\x8F\xB6\x5F\xEE\x02\x8F\x32\x4F\xC7\x24\x74\x3B\x89\x36\x74\x93\xA6\x49\x8C\x66\x27\xF1\x24\x42\x37\xA9\x41\xE8\x26\x0A\x52\x45\xFB\x51\x04\xF6\x77\xDE\x3E\xF0\x20\x79\x7A\x44\xD1\x6E\x52\xC5\x70\x52\xC5\xEC\xA4\x16\xC5\xD9\xDA\x65\x52\x72\x38\x29\x6F\x34\x45\x90\x08\x0A\x74\xF9\x84\xA7\xF2\xA0\x1D\x7E\xF5\xE9\xFA\x1F\x7D\x39\xE3\x9A\xF3\xF4\xED\xA1\x5B\x8B\x67\x11\xF9\x0B\x12\x92\x79\x9C\x7B\x06\xD9\x9E\x41\xB6\xA7\x0D\xD9\x08\x14\x6F\x00\xDF\x56\xC9\xD3\x94\xB9\x1A\xD0\xE5\x5F\x52\x85\xB7\xEF\x13\xB9\x47\xC2\xAB\x7A\xD1\xF5\xEA\xFF\x21\xF9\x7E\xF5\x87\x25\x5F\xB0\x3E\x26\x41\xD1\x05\x0D\xA1\xA7\xBB\x31\xBD\x2A\x9B\x43\xF2\xDF\x4B\x7F\x5B\xBA\x55\xA7\x2D\xCA\xA6\x3D\x94\x4D\x1C\x5E\xFA\x4B\xB6\x05\x28\x3B\x78\x05\x8A\x5D\xC6\x71\xC4\x09\xA1\xAC\x64\xFC\x0D\x3D\xCA\x3A\xDF\xDF\x0E\x65\xD9\xFE\x14\xF4\x3C\xCA\xCA\x29\xA7\xEF\x6D\x51\x32\x75\x98\xB9\x4B\xDC\x7D\x71\xDD\x2C\x13\x83\xD7\xE0\xD4\x8A\xB3\xE8\x49\x77\x95\x80\x83\xF4\xE8\x19\x59\x98\xBD\xA9\x04\x9F\xC7\xA6\x03\x02\xD7\x37\x67\x93\xCD\x41\x30\x10\x08\x50\x0B\x2E\x2A\xFB\xE8\x79\xFD\x99\x40\x0C\xC9\x69\xE7\xF6\xBC\xFB\x84\xC8\x9D\xDB\xD5\x5A\x30\xAF\x64\x7E\x5E\xC9\x17\x3D\x2F\xC9\x33\x1B\x60\x6C\x3A\x44\xD7\x21\xD0\x21\x14\x24\x10\x9F\x66\xF3\x52\x4D\xA1\xA1\x5D\xE8\x40\xB6\x33\xF5\xCB\x23\x3A\x08\x53\x9C\x78\x6E\x8E\xBB\xC4\xF2\x2A\x75\x0C\x54\x8C\x82\xE4\xB4\xCA\xDC\x4D\x38\xC1\x2F\x87\x16\xEA\x98\x4E\x02\xA2\xB9\x6E\xDC\xD5\xB9\xBF\xE7\x97\x33\x2D\xBE\xBC\xA1\xAC\xDC\xF2\xB1\x35\xBF\xC8\x89\x40\x0C\xD9\xE9\xFF\xA6\xD0\xE5\xA7\xA4\x3B\xC8\xB8\xDE\x6E\x2E\xDC\x4F\xB2\xFF\xC8\x4E\x5B\xBE\x44\x40\xE8\xD0\x9B\x0C\x77\xEE\x7A\x87\xAC\x4A\x92\x4D\x02\xCA\xA6\xA6\x9B\x5D\x03\xA9\xDD\x3E\x5D\xE5\x6C\x6F\x52\x50\xA3\x6A\xE4\x54\xDB\xA9\xBB\x06\xB2\x8F\x49\x36\xAB\x78\x4C\x36\x20\xE9\xBA\x9E\x8D\x2A\x04\x08\xBB\xA3\x21\x6C\xD3\x6A\x53\xA3\xED\x75\x14\x81\xC8\x86\xC4\xB5\x51\x90\xFB\x36\xD5\xD8\xF5\xA7\xB0\x0A\x8C\x69\xC1\x7A\x7D\x08\xC3\xD6\x0C\x84\x17\x63\xD2\xBD\x35\xDE\x21\x9C\x62\x12\x16\x01\x24\x20\x28\xC3\xBC\xA2\xBF\x50\xC2\xF8\x38\xDF\x98\x10\x14\x8C\x77\x81\x02\x92\xAB\xC7\x7B\x69\x1D\xC6\xEC\x87\xBB\xB4\xD0\x0F\x77\xA9\xD3\x3A\x8C\x0D\x8C\x41\xC2\x18\xCA\x7B\x27\xF5\x98\x94\x80\x9D\xE9\x01\x6B\x1D\xC6\xB0\xC4\x9E\xB8\xE3\xF6\xCA\x7E\xCC\xAC\xDE\xB8\xBD\xB2\xC7\x6E\xE6\x97\x80\x27\x4B\x2B\x60\xC9\xE5\x98\x61\xCE\xFD\x87\xA3\x8B\xE1\x39\xF2\x18\xF5\xC1\xFE\x51\x30\xB6\x3B\xC9\xBD\xAE\xAE\x0D\xB8\xB6\x6A\x9B\x8C\xCB\xB7\x93\xB1\x43\x89\xAB\x33\xB7\x6F\xBD\x93\x75\x95\x0F\xD6\x9C\xCF\x55\x3E\x48\xA1\x39\x24\x6F\x23\x5F\x9E\xA4\x81\x04\x14\x84\xE5\xE7\xCF\xCF\x45\x69\x43\x04\x48\x5C\x40\x79\x8E\x22\x63\x35\xC7\x57\x65\xE4\xC0\x77\xFE\xF2\xF4\xB6\x45\x97\xA7\x09\x1B\xED\x97\xD3\x42\xD2\xA7\x66\xEB\x30\x80\x45\x14\x9A\x79\x1E\x39\xB8\x03\x7A\x4D\x11\x5C\x28\x9E\xDA\x9A\xBC\xAD\x4E\x7C\xF0\x35\x46\xF0\x6B\x62\xCA\xC3\x48\x76\x1B\x03\x55\x73\x17\xB8\xF3\xA3\xA0\xDC\x6A\xEB\x55\xC9\x0A\x00\x69\xA0\x80\xBC\x81\xD1\x26\x59\x22\x78\xAB\x84\x31\x7F\xDF\xAB\x05\x5C\x4C\x80\xA1\x55\x82\x62\xAB\x04\x17\x15\xA0\x67\x95\x30\x7E\xEA\x14\x6D\x26\xCD\x94\x58\xA8\x41\x13\x33\x1A\x34\xEA\x6D\x4C\x29\xA6\xC6\x94\x62\xCA\x8B\xE2\xFD\x14\x53\xA4\x41\x13\xB4\xF7\x9D\x06\x8D\x9F\xBD\x06\x4D\xC0\x98\x48\x1C\x37\x7C\x42\x4C\x89\x1E\x31\x03\xC4\xCA\x35\x02\x98\xF2\xA8\xD7\xAB\xAC\xD6\xCA\x5D\x7E\x9D\x1A\x45\x81\x94\x52\x06\xD2\x50\x80\x46\x4A\xD2\xC0\x0A\x38\xC1\x66\x28\x44\x8A\x04\x18\x10\xE5\xAF\x11\x24\xE3\x70\xCD\xBD\x93\x5A\xF9\x00\xF3\x0A\xF2\xA6\xCA\x71\x18\xB9\x0B\x0E\x1D\x1D\x08\x1E\x93\x3D\xA8\xFB\xF7\x73\x59\xF1\xB8\x4A\x0B\x77\x8E\xD8\xCD\x6F\xB9\x00\x44\x17\xC7\xBE\x46\xF6\xAA\xF6\xFC\xEB\x4F\x3C\xA7\xB3\x04\x7C\x67\xDC\x0A\x8C\xC8\x69\x1F\x92\xCF\xE1\x3F\x39\x84\x20\x9F\x2B\x93\x3B\xD5\x1A\xFF\x2A\xEF\x54\x07\x21\x04\x45\x65\x25\xFF\x2A\xEF\x54\xFB\xF1\x2D\x2E\xDD\xDF\x9A\xDA\xAB\xC1\x16\x1E\x37\x21\x71\x18\x6D\x41\xD2\xC5\xDC\x66\x51\x2E\xA8\x22\x4E\xB5\x28\x4C\xF9\x7E\x5A\x96\xA8\x27\x61\x76\xA7\x49\x77\x59\x49\x71\xD3\xC8\x33\xAF\xDF\x2A\x26\x63\xE6\xD8\xEE\x68\xE6\x6D\x43\xFB\x82\xA6\xFC\x11\xC7\xB3\xFC\xFF\xEC\xBD\x0B\xB0\x5E\xD7\x55\x26\x78\xF6\xE3\xBC\xFE\x73\xCE\xFF\x1F\x49\xD7\xF6\xB5\x7F\x25\x59\xE7\x94\xA7\xEA\xAA\x2B\xAA\xA8\x6B\xCC\x95\x2B\xED\xE9\x68\x6B\x5A\x8F\x6B\x25\x96\xBB\xA7\x98\xA2\xAB\xA0\x2A\x35\x9D\x61\xC8\xB9\xC2\xF1\x95\x6F\xD4\x61\x50\xEE\xBD\x58\xC2\xA8\xA6\x27\xB4\xA1\x13\x08\x90\xD0\x26\x09\xC8\x98\x88\xA4\x03\x33\x93\x0E\x01\x44\x80\xC6\x0D\x19\x30\xC4\xA1\x33\x90\x06\x57\xF1\x48\x80\xF4\x90\x6E\x32\x10\x1A\x88\xA6\xD6\x63\x9F\xC7\xFF\xFF\x57\x57\xC2\x09\x43\x7A\x92\x94\x75\xFF\xF3\xDA\x8F\xB5\xD7\x5E\x7B\xED\xB5\xD7\xFA\x96\x66\x5F\x3F\x5C\x41\xD6\x6B\xE3\x6C\xB3\xAA\xEF\x77\x49\xA5\x21\x71\xD7\x3F\xFF\xB1\x5F\xA4\x53\x4F\xE3\x3E\xEC\x7F\x86\xB8\x89\x48\xEA\xD4\x4D\x36\xDC\x73\xD8\xEA\xEB\x11\x2F\x6F\x79\x3D\x5A\xD5\x3F\x27\x17\x65\x9D\xAD\xEA\x67\xE5\x62\xA9\xD6\xAB\xFA\xA3\x72\xB1\xBC\xAA\x9F\x93\x9F\x07\xEB\x64\x55\x3F\x1F\x41\xD8\x29\xFE\x16\x42\x52\xFC\x71\xEB\x82\x8A\x3F\xC1\x7A\xE1\x80\xAC\xEA\x0F\xDB\xDE\x8B\x6F\xD5\xFC\xE2\xFF\xAA\xF9\xC5\x2B\x9A\x5E\x7C\x0A\xF7\x04\xEF\xC0\x7B\x7A\x55\x5F\xC6\x77\xC4\x0B\xF3\x73\x4A\x3E\x2E\x8F\xEA\xCF\x28\x08\xC9\x0F\xF3\xD3\xCA\x05\x90\xAD\x57\x86\xBE\xBD\x8C\xDF\xFE\xA5\x62\x2C\x03\x97\x34\xA7\x8A\xC0\xFD\xC7\xEF\x1F\x00\xC1\x1A\xEE\xA0\x7B\x2E\xE0\x6E\xE3\xF0\xBF\x16\xC2\xF6\x78\xAA\xCE\x57\xF5\xEB\x58\x36\xB4\x62\x89\x51\x87\x32\x97\x3E\x5A\x17\x2E\x85\x62\x8A\x7F\x28\x13\x14\x79\x86\x7B\xFC\xC7\xAF\x25\xFC\x47\xC6\x26\xD1\x02\x3C\x22\xE5\x10\x66\xE4\x8C\x33\xF9\x23\x82\x13\x99\x42\xB1\xEE\x4F\x3C\xCC\xB9\x66\x3E\x20\x6C\x11\x40\xCD\xB6\xDB\x1A\x02\xD4\x90\x27\xCE\x9B\xDD\xC5\x21\x40\xCD\xAC\x27\x0E\x7D\xFB\xCD\xEE\x7F\x1E\x02\xD4\xCC\x7A\xE2\xD0\x5B\xDF\xE4\xDE\x04\x5D\x21\xEE\x9F\xBA\x0B\x43\x64\x1A\x91\xE0\xBE\xF3\xF7\x12\xA5\x72\x24\xFD\x2E\xDE\x5A\xF1\xAD\x7B\x6B\x25\x10\x23\xFF\x15\xB3\x72\x11\xEF\x56\x45\x27\x17\x13\x9C\x07\xCF\x06\xE4\xCA\x06\xE6\x1C\x61\x51\x25\x0E\xD9\x5E\x3F\x38\xAD\x13\x28\x58\x4C\xC6\x9D\x98\x4C\xA0\x40\x31\x19\x43\xE2\x71\xFF\x48\x4C\xF2\xB5\x17\x93\x31\x03\x96\xBC\x10\x34\x4E\x83\xE1\x45\xFC\x1E\x88\xDD\x37\xAD\x6A\x8B\x3B\x42\xA7\xE8\x15\x94\x8D\x76\x8A\x13\x20\x87\x98\x2B\xF1\x89\x69\x86\x70\xB6\x49\x0F\xCE\xF6\xD6\xE0\x86\xCC\x42\xB8\x21\x73\x4B\x70\x43\xE6\x96\xE0\x86\xCC\x42\xB8\x21\xDE\xED\xB9\xF4\x1C\x18\x0F\x67\x1B\xBA\x9D\xB8\x95\x34\xEE\x13\x51\xF7\x3B\x59\xD5\x6F\x8F\xF9\xEF\x67\x71\x26\x7D\xF2\x89\xF7\xFE\x6F\x5B\xAB\xFA\x05\x94\x06\xEF\xF9\xF3\x8F\xFD\xE2\xCF\xFC\xD1\xF5\x8F\x7F\xFD\x51\x7D\x39\xF6\xD7\x6F\xFD\xE9\x67\xEE\x3E\x6A\x3E\xC1\x2E\x4C\xE1\x8A\xBE\xBF\x36\x6E\x0B\xD9\xE4\xA9\x0E\x0E\x87\x81\x7D\x42\x4E\xF3\xAD\x9B\xAA\xC0\x82\x83\xA6\x32\x2E\xA0\xBC\xEC\x28\xDD\x6A\x43\x01\x18\x4E\x7F\x23\xCE\x56\xD4\x13\x28\x1F\x78\xE1\xF2\x07\xAB\x31\xE4\x55\x01\xE3\x22\xC8\xCC\x31\x08\xDD\xD3\xB6\xC1\xB1\xE1\x96\x83\x2E\x2F\x5F\x62\x89\x49\x11\xAB\x6A\xD3\x85\x4D\x5D\xAC\xEA\x1D\x7C\xE1\x7A\x44\xEE\xA1\xD8\xB0\x67\xA3\x7A\x8C\x8C\x82\xBD\xBC\xA2\x1B\x7E\x08\x63\x28\xD6\x41\x97\x9F\x61\x76\x08\x5D\x80\xAF\xEE\xC4\xEB\xAB\x2C\xC2\xAE\x68\x5A\xDC\xF8\x8B\x5C\xEA\x26\xEA\x81\x2E\xFF\x52\x68\xC6\xA5\xF1\xBD\x4F\xCA\x3D\x6E\x63\xE8\x3E\xAD\x9A\xD9\x76\xA2\x74\x7A\x9A\xDB\xCF\xA5\xF1\xF7\xF8\x4E\xE8\x9E\x8E\x9B\xF2\xCF\xBA\x5D\xEB\x69\xFC\xE7\xE9\xB8\x2E\xCE\xAF\xEA\xD3\xFA\x18\x14\xEE\x67\x40\x4C\x16\x34\x25\x8B\x5D\xA6\x64\x91\xD1\xCB\x0B\x36\x5F\xFD\xC7\xB4\xEB\x8A\x07\xBB\xAE\xBC\x35\x58\xBD\x0F\x9B\x48\xB3\x26\x27\x8B\xD5\xFB\xE2\x59\x93\xD5\xFB\x62\x32\x6B\x0E\x36\x5E\x52\x3C\xDE\xA6\x29\xC4\x1B\xAF\x18\x8A\xD9\x8D\xE4\x69\x36\x57\x9C\xCE\x5A\x55\xCC\x6D\x37\xE2\x8E\x4E\x9E\xCD\x71\x0F\xED\x2E\xE6\x6D\x1B\xA4\x4E\xB2\x91\x51\xCB\x2C\x64\x30\x6A\xD6\x45\xED\x08\x0F\x07\x4F\x5B\xAF\x76\x84\x2B\xFA\xC3\x76\x4E\xED\xA0\x57\x06\xAA\x26\x0D\xC1\x9C\xE2\xC1\xA5\x5D\xD1\xBD\xD2\xDE\x31\xAF\xC4\xD0\x2B\x33\xA5\x5D\x59\xA4\xC6\xC4\xB4\xB0\xB7\xCC\x81\xD3\x0A\x9A\xEE\x2E\xB1\x91\xD3\x8C\x70\xC4\xB7\x1E\x67\x4E\x39\xFE\xB3\x9F\xFF\xD8\x2F\xFE\xEA\x9F\xD1\x8C\x7B\x80\xC9\xB6\xE2\x0C\x2A\x02\xB2\x16\x76\x5F\x78\x5E\x0C\x56\xF5\x75\x4B\x4F\xBB\x2A\x68\xA1\x9E\xE3\xAA\xEB\xB6\x36\xE7\x51\x03\x38\x4D\x1D\x18\xF2\xD5\x6D\x8B\xFA\xC1\xE3\x05\x7C\xD5\xB9\x09\x3E\xA5\x3D\x5F\xB1\x9F\xE0\x53\x7A\x96\xAF\x9E\xD2\xBB\xF0\x95\x9E\xE7\xAB\x39\x7F\x7D\xE2\x2B\xEA\x96\xE8\xA2\xB2\x4D\x8A\x5B\x58\x6B\x2B\xB9\xFF\x18\xD4\x8E\x9A\x75\xFD\x9D\x97\x77\x28\x3F\x67\xE8\x9E\x78\xE5\xAA\x26\xCE\xB9\xFC\x03\xB8\x90\x7F\xF7\xFB\x2E\x23\xD5\xCA\x27\x49\x40\xB8\xDF\x7E\xFC\xF2\x4E\xE0\x1E\x70\xAA\x7D\xA3\xFC\x0E\x7E\x32\xEA\xEE\x7C\x27\xDF\xD9\xD1\x04\x98\xD4\xC1\xAA\xB9\x2B\xBF\x87\x85\xC5\x8C\xC0\xC8\x2A\x76\x37\x62\x32\xA2\xBD\x11\xFB\xD3\xF9\x11\xD3\x22\x07\xF4\x97\x7A\xBC\x92\x05\xE3\x95\x7C\xC9\xC6\x8B\xE4\x80\x27\x05\xEE\x7D\x9F\x22\x4A\xDD\x9C\x16\x09\x0F\x33\x24\x4C\x0B\x3A\x80\xD9\x85\x16\xD1\xCD\x69\x11\xCD\xD2\x22\xDA\x9D\x16\x11\xED\x75\x6F\x4E\x8B\x68\x48\x0B\x29\x1E\x6F\x53\x28\x0E\xD3\x22\x1A\xD2\x42\x28\xC1\x1B\x01\xE6\x05\xE1\x93\xED\x93\x85\xBE\x29\x9F\x2C\x98\xD9\xFF\x7F\xE1\x93\xCF\xFE\xEE\x6D\xF3\x89\xFA\x2F\x84\x4F\x70\xE3\x43\x62\xCE\x0B\xB9\x13\x85\x62\xDB\x7F\x04\x01\x7B\x41\x44\x9D\x6F\x78\x28\xC2\xB0\xE7\x4A\x3F\x9F\x90\xDB\x37\xA0\x75\xA4\x5F\xB0\x30\xC6\x02\x02\x0E\xF1\xB0\xF0\xB8\x57\x78\xBC\xA8\xF0\x78\x58\x78\x3C\xBF\x4E\x8A\x93\x3D\x75\xF1\xA7\xE2\x0D\xDA\x46\x47\x99\x97\xDC\x8C\xDF\xA8\xF1\x09\x01\x38\xF2\xCB\xEC\x15\x8E\x9D\x63\x4F\xE2\x80\x77\x07\x2F\xBE\xAB\x10\x73\x00\x90\xEA\xB6\x1B\x2F\xAE\x7B\x7F\xED\x28\xA7\xC1\xE3\x9B\x9E\xFE\x5E\xB7\xC3\xE3\x5F\x9C\x10\x43\xB6\xBB\x6E\x77\x39\x66\x64\x0F\xB2\x1E\xA3\x0D\x0E\x1D\xBD\x65\x6C\x41\xDB\xD5\xCD\xDB\xAE\x66\xDB\xBE\xE0\xD0\xC2\xB7\xBD\x77\x6A\xB1\x6B\xDB\x17\xD9\xF9\xE3\x79\x3B\x7F\xAF\x27\x28\x30\xDE\x1F\x7B\xCB\xD1\x5B\x0E\xA8\xB4\xB5\x1C\x2D\x8C\x21\x9D\x35\xC5\x6A\x89\xF2\x89\xD9\x28\xA4\x36\x2A\x8E\x13\xAD\x53\xB2\xDB\xD7\xA3\x07\x7D\xB0\x64\xDE\x99\x6D\x17\x47\xE9\x68\x89\xFF\x49\x20\x7E\xAC\x2A\x60\x04\x29\x64\x53\x1F\x5A\x4A\x9F\x2C\x38\x5D\x68\x4F\x38\x09\xDD\x18\x52\x76\x21\x2C\x5C\xE0\x02\x39\x67\xA0\x49\xAF\xE5\xA4\xC1\xD6\x79\xC3\x0D\x63\xDB\x51\xB3\x5E\xB3\x47\x20\xD7\x00\x24\xA4\xB0\xD4\x1C\x92\x36\x50\xF3\x44\x61\xA4\x68\xEF\x15\xD1\xD6\x49\x31\x2B\xC3\xDA\x5C\x52\x91\x2F\x21\xCD\xC0\x5E\xC9\x7C\x02\x91\xB3\x61\x1C\x8B\xAF\x13\x06\x25\xA2\x48\xD1\x9C\x0D\xD9\x1A\x92\xEE\x24\x23\x37\x19\xDF\x35\x2E\xE8\x35\x87\x8E\x3D\x12\x3E\xAD\xC8\x21\xA1\x46\xE4\x14\xAD\xCA\xF6\xF9\xD1\x7A\x3D\x6E\x4F\x28\x20\x87\x80\x6A\x86\x44\x0E\x24\x8C\xBF\x31\x3A\xDD\x8B\xE9\x48\x76\x99\x77\x72\x4E\xB7\xA7\xF5\xE2\xD6\x02\x1E\x12\x1C\x5D\xEC\xE3\x98\x8C\x15\x8B\xC2\x1D\x12\x1F\xEE\x90\xB4\x27\x14\x09\x1F\xE2\x27\xED\x09\x05\x16\x43\xDD\x36\x72\xF6\x48\xFD\x24\x8D\x31\xA9\x46\x90\x10\x39\xFA\xE7\x2F\x0B\xBC\x3E\xD5\xAD\x7B\x7D\x8E\xD8\x66\x3D\x5E\x68\xB3\x1E\x77\xBD\xA3\xD2\x12\x18\xC1\x08\x92\xD3\xD3\x7A\x04\xE3\x05\x27\x30\x23\x18\xF3\x09\xCC\xA8\xED\xDF\x88\xD9\x6A\xD4\xF6\x6F\x94\xC1\xE8\x44\x61\xA4\x7F\x23\x3E\x7B\x19\xB1\x4A\x4C\xDE\xFF\x23\xEC\x30\x8E\xF5\x98\x6F\x8E\xF0\x6A\x89\x43\x1B\xE5\x20\xA6\x36\x8F\xD4\x63\x4A\xAA\x4F\x9B\x54\x18\x83\x39\xB7\xCE\x67\x93\xF2\x3A\xDE\x1A\x1C\xDA\x18\x7E\xD7\xB4\xC7\x7D\x23\x39\xBE\xE9\x40\x4D\xF3\xF6\x04\x07\xAB\x87\x11\x9F\xE0\xB8\xED\x53\x85\x72\x3B\xB6\xCA\x7C\x10\x57\xDE\x1D\xC8\xB4\xC8\x48\xBA\x3D\x96\xD1\x7C\x4E\x91\xB4\x48\xE7\xDD\x21\xC5\x68\x26\x74\x72\xD7\x43\x8A\xDC\xEF\x8C\xF3\xEE\x90\x62\xF4\xC5\x0D\x9D\x34\x0B\xD9\xD9\xCC\x84\x4E\x8E\x28\x74\x72\x44\xA1\x93\x66\x41\xE8\xA4\xB9\x95\xD0\xC9\x91\xF7\x4E\x5E\x1C\xBB\x38\x9A\x31\x90\x8E\xBE\xFC\x62\x17\xBD\x77\xF7\xA8\x0D\x61\x44\xBD\x73\x90\x7C\xA2\x90\x7C\xE3\x22\x38\x21\x71\x0A\xFF\x23\x28\xB5\x64\x70\x74\xC5\xEE\xDF\x09\x73\x45\x82\x5C\x91\xB0\xFB\x77\xE0\xDD\xBF\x03\xE2\x8A\xA4\x45\x53\x53\xBB\x70\x85\xBA\x1D\xAE\x20\x31\x10\x2C\x14\x03\xC1\x0C\x57\x18\xE2\x0A\x43\x5C\x11\xCC\x1D\x5D\x69\x08\xF8\xE8\x4A\xCF\x1C\x5D\xE9\xC1\xD1\x95\xA1\x55\x5B\x7C\xC0\xFB\x47\x58\xE2\xFC\x21\x27\xF4\x90\x79\x35\xEF\x4B\x83\x26\x60\x5A\x5F\x83\xF7\xE9\x7E\x14\x63\xE4\xDE\x37\x87\x26\xF0\xBE\x9B\xA1\x09\x0C\x74\xF5\x85\x2A\xD4\x6D\x8F\xD0\xE0\xF1\x02\x15\x2A\xE8\xB7\x5D\x54\xA8\xE0\x66\x6D\x5F\xA4\x42\xE9\x8C\x75\x27\xCA\xD7\xDC\x75\xC1\x05\x55\x9A\x89\x66\xE0\x8F\x93\xF5\x5E\xC7\xC9\x7D\xAD\x7A\xD1\x41\x6E\xE4\xDE\xDF\x46\xE2\x5E\xBD\xC3\xC4\xDB\x6A\xAB\xCD\x95\xF7\xA4\xFE\xB2\xF2\xFE\xEC\x7C\x3E\x19\x93\xCA\x7B\xAF\x13\xB4\x46\xB4\x8B\x02\x18\x21\x09\x86\x8A\x1E\xAA\x76\x9A\x9D\x9A\x54\x1B\x84\x19\xEC\x72\x16\x1D\x88\x6F\x4B\x84\x5A\x64\xB4\x9B\x93\x4D\xFB\x16\x6A\xAC\x51\xE7\x64\xB3\x20\x15\x24\xE9\xDF\x65\x3F\x15\x64\xE8\xCA\x59\xED\xBB\xDC\x85\xEB\xCD\xBC\x7F\x62\x34\x74\xE1\xEA\xB0\x1E\x6F\x3B\xE6\x74\xF0\xF8\xA6\xC1\xC7\xE5\x30\xF8\xF8\x96\x9B\x1F\x2D\x68\xFE\xAE\x8E\xAF\xBB\xB8\x8F\x76\x63\x46\xED\xEC\x47\x30\x2C\xE0\x01\xD5\xE7\x81\x05\xC9\x4B\xF0\x19\xF1\x82\xBA\x05\x1E\x50\x10\x7D\x59\xF0\x80\xFE\x2F\x86\x07\x28\xD9\xA9\xE2\xF4\x3A\x9C\x44\xE5\xC1\x3A\xE2\xE0\xEA\x3A\xA1\xA8\xEB\x68\x5A\x8F\x08\x91\xB5\xA9\x23\x52\x7A\x88\xF0\xAD\x6A\x5B\x73\x5C\xF2\x57\xE9\x00\x46\xFC\x77\xAB\xCE\x8F\x53\xD6\x8B\x9D\xAB\x35\xA5\xE0\xA4\x34\x18\x9C\xFD\x22\xBF\xDA\xB4\xC2\x0C\xA9\x73\x46\x44\x8D\x71\x9A\xCD\xC7\x65\x43\xC5\x50\x99\x90\x94\x7F\xF5\xB8\x77\x66\x62\x8B\x08\xBE\xE0\x02\x62\xB6\xF2\xFB\x79\xD9\x25\xE9\xA9\x86\x5F\x1B\xFA\x1E\x45\xDB\x0F\xF9\x03\x3B\x7A\x98\x0A\x88\xCB\x12\x24\x60\xCA\xAB\x8F\xF7\x9D\xA5\x77\x67\xCB\x5B\x73\x93\xB9\x35\x9C\x16\xB1\x68\x19\x30\x10\x91\x9B\xCC\x22\x9C\x16\xE3\x71\x5A\x4C\x1B\x41\x6E\x58\x09\x35\x6D\x04\x39\x6E\x36\x68\xCB\x41\xFB\x0B\x2A\x95\xDC\x2F\x22\xF2\xC4\x72\x66\x83\xE3\xC6\x89\xCE\xDB\x8D\x33\x6B\xB4\x80\x5D\xDC\xA8\x26\x2E\xA0\x93\xCA\xB1\x39\x86\x23\xD3\xD4\x09\xD3\xC6\x34\x75\xBC\xA2\x03\x3E\xAC\xB4\x0D\xC4\xCE\x36\xED\x75\x82\xD7\x49\x77\x9D\xE3\x75\xEE\xAF\x8D\x2B\x51\xB1\x9F\xC0\xD8\xD9\xA6\x1E\x9F\x22\xD3\x56\x81\x12\x60\xEC\xF4\x66\x65\xA4\x26\x5F\x4F\xFB\x95\xC5\xAF\x0A\xB7\xDD\xD4\x45\x81\x93\xAA\xF3\x31\x49\xDC\x0E\xA7\x03\x71\xB6\xFC\xF0\xE3\x02\xB0\xA3\xF5\x31\x0E\x40\x8C\x78\xBC\x33\x1E\x4A\xE4\xCE\x99\xF1\xD6\x19\x64\xBD\xC1\x8E\xE8\x1D\x1E\x6F\xCF\x7B\x3B\x09\x2E\xFB\x1D\xAF\x19\xDC\xAE\xBA\xBC\x29\xBF\xF0\x78\x8B\x2A\x44\x01\xF7\x31\xBD\x54\xC9\x57\x3B\x3B\x47\xCE\x50\xD5\x71\xF7\xC5\x8D\xEE\x8B\xC1\xFD\x9D\x4B\x1E\x8E\xA8\xE0\x28\x40\xEB\xA3\x00\x45\x80\xF0\x91\x20\xE9\x1F\xC1\x22\x23\x5C\x2B\x8D\x20\x5B\x45\x35\x88\xFD\x5F\xA2\x55\x5D\x12\xA0\xED\xCB\x36\x24\xA2\x2D\xC5\xFD\xC2\x68\x45\xDB\xA6\x97\xA5\xE2\xD1\x0D\x92\xBB\x24\x84\x1F\x73\x6A\xE3\x7C\x6D\x70\xFA\x1B\xCE\x0F\x5F\xC5\x28\x46\xF1\xBF\xD3\x53\xB2\x4F\xE8\x4D\xC8\x7A\x1B\xB8\x88\x55\x75\xE4\x9D\x2A\xE2\x0D\x9C\xF2\x1B\x38\x45\xAA\x7A\x44\x27\xDA\xB4\xCF\xE7\xBD\xD0\xED\xE3\x1D\x2D\x80\x60\xD8\x73\x0B\x17\xF1\x9E\x3D\x82\x88\xF6\xEC\xD1\x82\x2D\x5C\xE4\xB7\x70\xD1\x4C\xA4\x66\xD4\x45\x6A\x7A\x9C\xE9\x05\x2B\x5A\xC0\x2B\xDA\x70\x03\x17\xCD\x6E\xE0\xFE\xD6\x3B\x49\x50\x9A\xCE\xCE\x49\x02\x25\xE0\x93\xAD\xA2\xFA\x1E\xAD\xD5\x96\xDE\x46\x0D\x1F\x25\xB7\x22\xB1\x6D\x5B\xB1\x1D\x4A\xA6\x73\x2F\xB6\xED\x55\xCE\x92\xDC\xBE\x6D\xB7\x6A\x7B\xB5\x8E\x20\x6C\xEA\x10\xA2\xB5\x6B\xC7\xE1\x09\xB0\x17\xC9\xE8\xF8\xE8\x25\x08\xAF\x5D\x6E\x8B\xE2\x24\xA2\x5D\xBE\x65\xFC\x82\xD5\x6F\xE3\x14\xDB\xF5\x43\x2C\xD6\xFA\x46\x5C\x6D\x6A\x03\xE1\x6C\x91\xA6\x57\x64\xE8\x93\x33\xB7\x29\x95\xB8\xB9\xBE\x14\x6C\xDC\x71\xB8\x02\xF6\x6A\xAD\x20\x6A\x70\x1F\xB8\x76\xED\x22\x6E\xD5\x9A\x5A\x81\x5E\xBB\x76\x11\xCB\x56\xBD\x12\x25\xDD\xB3\xF6\x25\x2A\x4E\x55\xF7\xCB\xD6\xE8\x6D\xB5\xA5\xBC\x3A\x7F\xA4\xA7\xCD\x83\x76\xE6\x4C\x11\xB8\x8F\xBD\x7B\x10\x77\xA3\xC1\x9C\x2D\x02\xF7\xCC\x5B\xFA\x77\x65\x89\xDB\x7E\x0C\x34\xBB\x64\xE9\x06\x15\x87\x93\x0C\x87\xD4\x38\x75\xC1\xA9\xE6\xDA\x71\xB3\x55\xC7\x94\x46\x57\x83\x85\xF8\x6A\x9D\xD0\x1C\xAB\x23\x64\xF7\x33\x53\xA4\xA4\xDF\x20\x78\xA1\x68\x39\xAD\xB1\x60\xF7\xB9\xB2\xFC\xF6\x4B\x9D\xFB\x1E\x6D\x8D\x28\x02\xF4\x9F\x5F\xEA\x09\x3E\xFF\x6D\xC4\xF9\x8F\x86\x22\x47\x4A\xE3\xAF\x21\xEA\xBE\x5E\x74\xA4\x10\xBA\x23\x6D\x42\xDF\x09\x5E\x5E\x7E\x5B\x7B\xEE\xFC\x31\x3B\x38\x77\xBE\x32\x3C\x77\xFE\xCC\xB7\x5C\xDE\x09\xDC\xA1\x5B\x39\x77\x2E\xFF\xC5\xE3\xBE\x36\x29\xBE\x94\xE2\x97\xE6\x8A\x47\x1D\xE9\x8B\x51\x03\x40\xE8\x3E\x63\x57\xF5\xBD\xF3\x35\x40\x5B\xC3\x47\x6E\xBF\x86\x0F\xC4\x9D\x9F\xE7\x1C\xC2\x4F\xC7\x1F\x56\x38\x84\x21\x04\x22\xE6\xB3\x7F\xDF\xE3\x33\x88\xDC\x8D\x1B\xE6\x8C\xB3\x9B\x75\x8C\xEB\xF2\x79\xB2\xD4\x97\x17\x68\x81\xB2\x6B\xD3\x3A\x76\x3B\x7A\x8D\x40\x72\x20\x75\xF6\x3C\xD0\x5B\x17\x20\xC1\x27\x65\xFB\x40\xF3\x03\x2B\x0F\x2C\x3E\xA0\x3B\x5A\xEE\xA8\x33\x35\x2E\xFC\x90\x5C\x68\x70\x1D\x88\x85\xFB\x68\xE9\x74\x0A\x62\xAA\x1E\xA2\x53\x9B\x04\x23\xE7\x9F\xEE\xEC\x94\xBD\xE7\xD1\x29\x5C\x46\xAA\x38\xB7\x19\x3E\x5A\xA6\x85\xE7\x5B\x76\x76\x96\xD7\x0A\x43\xCB\x29\xE1\x8A\x24\xED\xDA\x6A\x73\x43\x01\x2B\x17\xEA\xC4\x05\x90\x40\xDC\x60\x21\x6B\x53\x81\x59\x88\xD9\x74\x19\x54\x09\x99\x53\xBE\xA4\x2C\x47\xCB\x96\x9F\x2E\x23\x9A\x6A\x09\x27\x98\x4B\x5C\x50\xA5\xCE\x23\x5D\xC5\x7D\x25\x25\x18\xDC\xC0\x49\x96\xF1\xAB\x38\xAD\x46\xC0\xFE\x96\xB5\xE6\x8C\xBB\x55\x0E\x64\x65\x91\xAB\x14\xA2\xDE\x95\xEE\xF9\xE9\x92\xBE\x93\x43\xEC\x82\xF2\xFD\xFE\x84\x23\x45\x32\x75\x97\x1A\x07\x8E\x2F\xF9\x24\x62\xD0\x2C\x4D\xD0\x8A\x8A\xE0\xEC\xEB\x80\x6B\xA8\xE9\x9C\xBA\x7C\x9F\x3F\x8D\xC1\xE7\xFE\x51\x01\x41\x43\xDA\x63\x0C\x66\xBD\xA6\x64\x98\x63\x47\xFE\x6E\xAD\xE2\x0D\x29\x14\xD4\x84\xB6\x80\xA2\x2B\xA0\x6A\x93\x6C\xCE\x7D\x46\x00\x84\x4E\xF3\x67\x55\xCC\x7B\x98\xE1\xE1\x23\x1F\x91\x40\x2A\xB6\xC5\xF2\x5F\xD1\xC2\x9C\x56\x29\xE4\x55\x82\x7D\xCB\xE6\xA5\x51\x5A\xA5\x19\x8C\x16\x9D\x53\xA6\x27\xD8\xF9\x7B\xCE\x72\x73\x62\xF1\x51\x69\x17\x59\x08\x49\xF6\x07\x5F\xC4\x35\xE0\x8B\xB9\x0E\xCC\xAD\x02\x3A\x0F\x79\x15\xC0\x59\xD6\x2D\x04\xC4\x7A\x36\x1B\x08\x7E\x54\xFF\xF5\xBC\xF0\xC7\xD7\xBE\x22\xC4\x6F\x41\x2A\xF4\x57\xC7\x27\x2F\x11\x32\xEC\xE2\xA5\xB4\x3B\xC9\x5F\xE0\x1E\x40\x3E\x0F\xDD\x12\xAA\xB3\x97\x06\xBD\x20\x56\xF6\x80\xEB\x47\xBC\x5E\xD7\x8C\x56\x41\xD6\xC3\xB0\x35\x1D\x86\x43\x4C\xBF\xB0\x87\x5B\xC1\x90\x7B\xBB\xC7\x93\xCE\x1B\x01\x27\xD9\xE0\xA3\x89\x1C\xC5\x5A\x1F\x39\x31\xFF\x68\x61\x52\x48\xED\x93\x42\x72\x42\xC8\xB9\x33\x60\x9F\x3E\xC3\x9F\xC2\x72\xB0\x0A\x68\x09\x3B\x5B\x07\xCB\x2E\xAC\xB5\xC6\xD9\x11\xF0\x79\xB8\x85\xC0\xA9\x33\xD2\x0C\xE3\x96\xC9\x1B\xDD\x96\x9F\x62\x42\xB5\x14\xA8\x95\xDB\x01\xB6\x8B\x32\x59\x94\xBB\x4E\xD7\x59\xF6\xEF\x92\x2E\x2E\xFF\xFD\xBA\x17\x67\xD1\x3B\x2D\x0F\xF9\xB4\x3C\xEC\x4E\xCB\xAB\x48\xCE\xE5\xC9\x7F\x5F\xCE\xC3\x05\xB4\x3F\xDA\xCD\x88\xBB\xD0\x52\xEB\x55\xB0\x3D\x8C\xB8\xF1\x8B\x30\xE2\x9A\xAC\xC3\xC3\xF8\x92\x9D\x2F\x74\x26\xB6\xEE\x7C\x81\x6D\x6C\xEF\x9B\xF3\x0C\xBA\xE9\xF9\xC2\x4D\xD0\x8A\x17\xC4\xE8\xB7\x78\x04\x7D\xD0\x49\x9D\xF5\x26\x26\xF1\x63\xBC\x0B\x3F\xCA\x3E\x74\x51\x04\xEB\x2E\x9F\x29\xFE\x8C\x01\x10\xB4\xFF\x5A\xCD\x7C\xFD\xE5\x4C\xDE\xB2\xA3\xEE\x97\x73\x37\x5A\x83\x36\x3B\x13\x76\x52\xF4\x2F\x1E\xE7\x85\x3A\xEC\x1D\xF5\x84\x8B\x8E\x7A\xC2\xE1\x51\x4F\xB8\xF0\xA8\x67\x06\x7F\xA0\x3B\xF7\xF9\x51\x14\xCD\x73\x8A\x3D\xBB\xF6\x25\x6D\x73\xC8\x09\xB2\x93\xEB\x74\xC9\x3E\xD4\x9D\xAB\x58\x52\x9B\xF3\xBC\xBE\xF7\x7C\x98\xFF\x7A\xF6\xC9\xC1\xE3\x9B\x8E\xCF\x64\x38\x3C\xB7\x0C\xB3\xB1\xC0\x50\x6E\x6E\x09\xEA\x74\x7F\x0F\xB0\x81\xBD\xC3\xF1\x56\x30\x7F\x4B\xCF\xDC\xFA\x4E\xD5\x41\xDD\x1E\x69\xD3\x19\x83\xC5\xE1\x5A\x6E\xEA\x10\xB4\x5B\x6E\x0E\xE9\xE0\xA8\x91\x9B\xD0\x20\x73\x7A\x93\x23\xDD\x2A\x1B\xCA\xD4\xD4\x7F\x2B\xC1\x5B\x89\xBF\x15\x3A\x43\x2F\x83\xA6\x1B\x89\xB4\xD5\x92\x67\x8F\x38\xB3\xDB\x76\xE1\xFE\x9B\x6A\x93\xBE\x9D\x36\x7D\xBB\xD1\x76\x5B\x5D\xEC\x0C\xCB\x72\x8A\xB3\x57\x06\xFB\xD6\x97\xA3\x36\xDD\x39\x8E\xC0\xF9\x72\x5A\xF6\xCA\x1A\x09\x2C\x0E\xEA\x90\x4D\xF2\xA3\x47\x0B\x63\x08\x6E\x8C\xD2\xA2\xB9\xD1\x23\x35\xDE\x3C\x51\xA0\x46\x99\x79\x3B\xAF\x75\x29\x3E\xD6\x6E\xBB\xA9\xB5\x4F\x7B\x9E\x71\xC2\x79\xDB\x50\x44\x71\xE6\xFE\x64\x88\x62\x42\xF8\x86\x81\xFB\xD6\xF7\x0C\xB1\x4D\x66\x3B\x74\x5B\xE9\xBB\x9C\x9A\x4B\x74\x8F\xF3\xA6\x57\x05\x98\x0F\x82\xFA\x60\xF9\x6D\x78\xF1\xEE\x3A\xFA\x07\x41\x70\xFD\xC6\x8D\x1B\x7F\xEC\x5E\x27\x51\x76\x78\x07\xFF\xF7\x59\xF7\x4F\xDA\xDF\x41\xF0\xF5\x6C\x7B\xFC\x11\x32\xA0\x50\xDF\xDC\x36\xD1\x04\xCC\x34\xBB\x1A\xAB\xE4\xF6\x34\x8F\x9E\xAE\x01\xDA\x7D\xCB\x8E\x5D\x2B\x02\xF7\xA1\x67\xE6\xCD\x4A\xFD\x34\x66\xBB\x58\x34\x4D\xFF\x8C\xCE\xE0\xE8\xC6\x33\xA3\x1B\xF9\xD1\x4D\x68\x74\x63\x42\x70\xE7\x6D\x93\x8C\xAE\x04\x30\xA5\x38\xBA\x69\x6F\x74\x63\x1C\x5D\x0A\xC8\xE2\xF0\xFE\xED\x06\x77\x1D\x34\xBA\x09\xF9\x43\x59\x48\x64\x74\x87\x02\xC1\x6D\x57\x69\x1B\x56\x8A\x23\xC1\x7B\xEC\x6D\x82\x32\x31\xA0\xCB\xFF\x85\xB6\x30\x8A\xA1\x00\x86\x82\xDE\x92\x6E\xE4\x74\xF9\x13\xA4\x25\xC6\x38\x35\x62\x41\x3C\x9E\x23\xC8\x82\x85\xDD\xC8\xC2\x1E\xCF\x21\x60\x50\x43\x5C\xF0\xF7\x54\xE0\x54\x95\xB6\xF1\x0E\xEC\x82\x18\xB3\x1A\x4C\x6B\x8C\x21\x8F\x61\xEF\xF8\xE7\x57\x1E\x43\xC9\xBE\xBD\xFA\x4A\x5B\xBB\x8C\x62\x53\x51\x7B\x5C\xD1\x07\x85\x83\xD4\x09\xF6\xA9\x25\x9E\xFF\xF8\x90\xBB\xDB\xC1\xFE\xAE\x67\xFA\x2C\xE9\x2E\x36\x55\x26\x01\x66\x34\x16\x84\xF8\x02\x6A\x6D\x76\x91\xC5\x31\xD3\xC3\x45\x16\xB7\xCE\x4A\x96\x59\x8A\x8D\xC6\xC6\x6B\x71\x22\x8B\xF8\xA3\xC4\xA9\xCD\x06\xA2\xBF\xA7\x08\x4C\x1A\xFF\x23\x5C\x7C\xA6\x51\x53\x25\xFA\x18\x73\x06\xE3\x13\x93\x6B\xA7\x17\x11\x55\x04\x39\x23\xF0\xC7\x64\x26\x22\xB0\xFE\x2A\x82\x04\xDB\x9C\x30\xB0\xA3\x53\x55\x44\x20\x92\x48\xF6\x14\xEF\x16\x41\xC6\x38\x0F\x3A\x83\x51\x4B\xF8\xD9\x13\x10\x4A\xAE\x9E\x0D\x83\x91\x91\x47\x32\xBF\xA8\xC7\x7B\x2D\xEA\x34\xCC\x37\x59\xD4\x7B\xEB\x38\xA4\xD9\x0F\xEC\x33\x6A\x5B\x5D\x4C\x7A\xAB\x79\xDC\x6D\xF7\x8B\xC0\xFD\xC9\x70\xB4\xAC\x1F\xAD\x8F\xCE\x24\xD1\x5F\xF4\xEA\x02\x61\x86\xF7\x45\xD4\x88\x24\xA9\x8F\xBD\x1B\xF4\x07\xDF\x55\x27\xDF\x23\x37\x5E\x70\xFF\x84\xFC\x2C\x9F\xA1\xF9\x82\xDB\xFB\x9D\x37\x11\x01\xF8\xA4\x0C\xDF\xDA\x7C\xE4\xF2\x77\xB9\xAF\x97\x4C\x0B\xF5\xC8\xDD\xB8\x71\xE3\x46\x7C\xAA\xE7\x2D\x7A\xDB\x29\x3C\x06\x8F\x17\x28\x0F\x14\x58\x17\x0F\xE0\xAD\x72\x67\x21\x9E\x81\xB7\x8A\x77\x87\xB7\xCA\xE6\x95\x87\xAC\xA7\x3C\x50\xC0\xC1\x60\xE3\xD4\x5A\x50\xB4\xB3\x32\xF1\x0B\xD6\x8F\x68\xA3\xA7\x9D\xD9\xA8\xC6\x02\x26\xAD\xDB\x33\x4F\x85\xF2\x09\x17\xB6\x8B\x1B\x94\xB4\x6B\x02\x45\x95\x9B\x63\x90\xE3\x74\xCD\x5E\xA1\x68\x7A\xE4\x90\xB9\x8B\x8D\xBF\x70\xB6\x81\xCC\x6D\x75\xD7\x39\x5E\xEB\xEE\xBA\x6C\x70\x66\xB8\x04\x0B\x2E\x61\xE2\x6C\x53\x4F\xF8\xD0\x73\xCC\x48\xA1\x13\x9C\x4C\x55\x06\x05\x4C\x68\xF6\x50\x85\x6D\x6D\x58\x56\x95\x51\x3D\x55\x0E\x63\x14\x99\x63\x89\x12\xFC\xE2\xE5\x5B\xC9\x17\x1E\xA4\xE5\xAE\x97\x6F\x05\x32\x18\x41\x06\xE9\x83\xD3\x3A\x83\xFC\x64\x61\xBA\x43\x34\x05\x19\xE4\xAF\xC6\x3B\x90\x41\xD4\x66\x5A\xD1\x7F\x13\x0C\x35\x19\x32\xD4\x64\x96\xA1\x76\xD3\x46\x6F\x91\xA1\x6C\xB7\x82\x60\xD7\x86\x39\x63\xFA\x90\x35\x7A\x81\x70\x6E\xA7\xFB\xD3\x7D\xE1\x4C\x0A\x53\x0E\x05\x2B\x37\x99\x44\xCA\xFB\xE3\x9A\x0C\x75\x0E\x3E\x1E\xD6\x6E\xAB\xF1\xB0\x1E\x45\xE3\xDE\xD4\x54\x63\x7C\x64\xC4\x5F\x9E\x6C\xB4\xB6\x7C\x2F\xF1\x76\xE9\x7D\x87\x35\x64\x9C\x06\x29\x93\xEC\x30\x38\x6E\xA7\xBB\x8D\xC1\x8B\x43\xC8\x15\xD7\xD9\x74\x21\xBB\xA4\x7D\x27\x49\xC8\x29\x49\x4E\x0E\x9A\x20\x33\x34\xA4\x0B\x5C\x17\xF8\x9D\x94\xDD\x17\x74\xCB\x3A\xDA\xFB\xD0\x7A\x82\xFB\xE2\x4E\x14\x56\xE8\xA7\x81\x08\x07\x25\xBB\x46\x92\x1D\x35\xE7\x14\x3B\xEF\x62\x5B\x10\x15\x4F\x74\xCC\x09\x76\x88\x48\xF6\xC5\xA3\x44\x79\x8B\x94\x28\x33\xC8\xAA\x11\x94\x80\x93\x3F\x7F\x70\x5A\x97\x0B\x29\xC1\xEF\x08\x25\xCA\x96\x12\x25\x53\xA2\x6C\x29\xE1\x8B\x6B\x29\x41\x8B\x6B\x03\x5A\x5C\x44\x27\x6C\x44\xBF\xD8\x54\x63\x98\xE0\xFA\x3A\x61\xB6\x40\x96\x40\x9E\x60\x1D\x83\x5C\x04\xF2\x1E\x26\xF3\x6C\xFE\x96\x6C\x17\x1D\x39\x9B\x39\xE8\xCE\x66\x0F\xBA\xF3\x99\x83\xEE\x7C\xEE\xA0\x3B\x3F\x33\xAD\xF2\xB9\x83\x6E\xBE\x3B\x3C\xE8\xCE\xE7\x0E\xBA\xE7\xDF\x02\x7E\x6B\x70\xD0\xED\xDF\x1A\x1E\x74\xD3\x5D\xEA\xBA\x4B\xCF\x41\x2E\x07\xDD\x9E\x19\xF2\x5D\x98\x81\xD2\xF5\xE4\x7B\x31\x43\xCE\xCC\x30\x17\x42\x10\xCC\x84\x10\x50\x69\x19\x4F\x5D\xCA\x5A\x35\x9E\x73\x47\xC8\x60\xCC\xEE\x08\xAD\x24\xBD\xC7\xA7\xAC\x8A\x7A\x1E\xE5\x21\x44\xDE\xB4\x50\x2C\x08\xDF\xEA\x36\xCF\xFF\x36\x51\xA3\x6D\x56\x4A\xC5\x61\x9D\x0E\x0D\x51\x5A\x5D\x7B\xCF\xDC\xFE\xC0\xBA\x14\xB7\x63\xFF\xF4\x1C\xD8\xA6\xB6\x04\x59\xA0\xC8\x27\x9F\x4C\x59\x9C\xEA\x1A\x0C\x84\x0D\x8D\x3B\x7B\x80\x98\x63\xB2\x4D\x3B\x51\xF0\x01\x8C\x77\x01\x89\x7D\xEE\x6B\xF1\x04\x89\x21\x3A\x89\xCA\xDD\x36\x6A\x8C\x10\xAD\x4D\x27\xD9\x4C\x8E\x6D\xC2\x26\xF2\x35\xB5\xC9\x61\x24\x80\x38\x05\xBB\x8E\x9B\x09\x14\xA8\xDF\xFF\xEE\x01\xBE\x42\xEA\xEC\x19\x86\x93\x69\x97\xFD\xD4\x6D\x37\x63\x1B\x28\x6D\x42\xDC\xCA\x8C\x1E\xA9\xAD\xBB\x70\x0E\x22\xD4\x38\xAD\x3F\xE4\xF8\xDD\x00\x6F\xBF\x63\xBB\x77\x9F\x3C\x06\x3F\x1D\xE3\xFD\xB7\xBF\xA9\x77\x9F\xFC\xA4\x9E\xFC\x65\xFA\xE0\xB3\xFF\xAA\xFF\x45\x0F\xEC\x26\x75\xDF\xDC\xAF\xF4\xA9\xB7\x44\xF8\xFA\x0B\xFF\xE9\x9B\x66\x2B\xB8\x7E\xF9\xBF\xC1\x27\xD7\xFF\xE2\xF8\x6C\x15\x84\xB6\x5E\x5B\xB7\xF3\xB1\x77\x7E\xF3\xA0\x12\x7C\xF6\x91\x7F\xF7\x0A\x7A\xF6\x53\x4F\x3F\xDC\x3D\xCB\x38\x70\xC2\x0E\x9D\xBA\x3A\xA2\xD6\x96\xE8\x4E\x64\xB7\x4C\x76\x5E\x5A\xAC\xA0\x7E\xB9\xAD\xA6\xD6\xBC\x71\x8A\xD9\xAE\x6C\xB0\xC0\x11\xD9\xD8\x51\x21\x31\xBE\xB4\x4A\xE3\x96\x6E\xAD\x62\x8A\x57\x39\x75\xB8\x2A\x0C\xEF\xF0\xB1\x09\x42\x88\x6C\x7E\x8C\x72\x54\x38\x3D\xD0\x1B\xD2\x6A\x1C\x86\x48\xA9\x28\x03\xCB\xE9\xFB\x2F\x20\xD7\x55\x63\x88\x2A\x9B\x13\xCA\x35\x0E\x4F\x44\xC3\xD3\xDE\x37\x78\x1F\x87\x27\xA2\xE1\x69\xEF\x6B\xBC\x4F\xC3\x13\xF1\xF0\xB4\x4F\x06\xCA\x60\x31\xA6\x3A\x2D\x55\x4A\xC3\x13\xF1\xF0\x0C\x2B\xA6\xE1\x89\x78\x78\x86\x55\xF3\xF0\x44\x32\x3C\xC3\xEA\x79\x78\x22\x19\x9E\x5E\x03\xF0\xD9\x5B\xFF\xE8\x93\x86\x1E\x8A\x8F\x8C\x3C\xCD\x70\x04\x61\xCC\x28\xAA\x5A\x46\x0B\x62\x48\xCE\x35\x75\xDC\x8D\x5A\x4C\xA3\x26\xF3\x48\x62\x20\x54\x15\x77\xA9\x1E\x48\x26\x74\x03\xAE\x20\x39\x57\x13\xDA\x12\x84\x14\x24\xC1\x47\x2B\x41\x2F\x59\x3D\x23\x00\x70\x46\x35\xCB\x49\x2A\x64\xBA\x6A\x8E\x36\x35\x2E\x78\x70\x92\x49\x03\xCC\xDA\x34\x7B\x5A\x77\xA6\x2B\x68\x73\xF0\x3B\x81\x13\xE2\x93\xE7\xD7\x90\xBA\xE5\x4F\x27\xEB\x00\x82\xA6\x36\x10\xAC\x15\x0A\x90\x8B\x94\x1C\x35\x06\x6E\xFB\xB1\x33\xEC\xB4\xD8\x30\xD6\x26\xF8\x5D\x95\x21\xF6\x6C\xCF\x15\x35\x1D\xCB\xCD\x9D\x2B\xEA\x17\x71\x26\xD7\x15\x5F\x82\x5E\x7C\xAE\xA8\x5F\xDC\xB9\xE2\xBF\xB5\x2A\x66\xA1\x6B\x21\xA4\x3D\x37\xCA\xDB\x0F\xFF\xE0\x8C\x76\xB8\x8F\xCE\x75\x29\x3B\xCA\xCC\x93\xF2\x4C\x8B\xC4\x6F\x21\x64\x5F\x44\x8F\xD2\xDF\xD4\x91\x53\x17\xEA\x98\x4A\x96\x4A\xE2\xF5\xDA\x42\x78\x96\x04\x36\x99\x24\x37\x9D\x3D\x5F\x27\x7C\x8A\x5E\xA7\x9C\xA9\x93\x14\x85\x14\x92\x06\x42\xB0\xAD\x9B\x0F\x7D\x61\xE7\xBE\xF0\xEF\x6B\xFE\x02\x5B\x41\x5F\x70\xA8\x2C\x3E\x31\x78\xB3\x29\x7F\x80\x6D\x24\xE2\x67\xDB\x2F\xC4\x4A\xFB\xC9\x2B\x44\x3E\x47\x49\x82\x57\xF2\xDD\x84\x20\x15\xA9\xC0\x3A\x11\x67\x02\x03\xB8\xF1\x26\x9F\x4F\xE4\xE3\xA6\x1E\x71\x07\x53\x5F\x15\xA7\x97\xB0\xD2\x3C\xF9\xAC\xCA\xA8\x41\x71\x43\xD0\x44\xBC\x73\xC2\xA7\x4D\x9D\x43\x88\x9F\x87\xF2\x79\x80\xF7\x12\x30\x40\x1F\x38\xB3\x89\x9D\x13\x72\x50\x37\x52\xA1\x45\xD6\x76\x63\x04\x39\x58\xC8\x90\x78\x5D\x37\x22\xB7\xB5\x51\x1B\x6A\x84\xC5\x07\x4D\x5B\x43\x42\xD4\xFA\x41\xB6\xD5\xF7\xE8\x12\xCE\xD0\x25\x24\x24\x9F\x1E\x5D\x4C\xAF\x00\xC3\x05\x64\x5F\x08\x07\x5E\x40\x51\x2F\x3E\xE4\xA6\xBC\xC5\x4E\x33\xCC\x5E\xBF\xF1\xAE\x05\x0B\xFD\xCE\xCE\xCE\xF2\x19\x39\x13\xBE\xAE\x98\xDF\x90\x4D\x90\x37\x88\xDF\x9C\xAA\xE2\xDC\x64\xBE\xB1\x10\xB5\xDE\xAB\x75\xC2\x99\x05\x12\x7C\x19\x09\xCE\x43\x70\xCF\x3C\xBE\x21\x95\xA1\x5B\xC6\x4D\xC9\x53\xA7\xCF\xB8\x89\x67\x5C\x5C\xBC\x07\xCC\x3B\x12\x6A\x71\x36\xAF\x84\x53\x4B\xC2\x88\x99\x97\xCF\xD1\x55\x6E\xB3\xF6\x3B\x3B\xF7\x9D\xFF\x4A\xF3\x77\x38\x28\xF4\x1D\x3B\x42\xCB\xC3\x3E\x17\xB7\x65\xA5\x32\x62\xA3\x99\x11\x1B\x35\x14\xA6\x2A\xA5\x68\x1A\xB4\xA4\xFB\x9C\x3B\xCB\xA5\x48\xED\xF5\xA8\xE5\xEA\x51\x8F\xAB\x47\xC8\x96\xD4\xFB\xA2\xE5\xEA\xA4\xCF\xD5\xA3\x01\x57\x27\x33\x5C\x3D\x6A\xEA\x31\x84\xF8\xF9\xA4\xE5\xEA\x11\x4E\x94\x59\xAE\x96\x96\xAA\xB6\x67\x85\x50\xC9\x4A\xCF\x42\x8A\x1D\xC5\x61\x84\x02\x26\xED\xFB\x80\x34\xD8\xDA\x90\xE6\x84\xF8\xAC\xA9\x3D\x7B\x8E\x20\xF4\xEC\x49\xE5\x86\x3D\x8A\x99\xB6\x5C\x8A\x76\x03\x83\x14\x4B\xFA\xE5\xE2\xF0\x75\xE5\x58\x29\x47\x91\x53\x98\xA3\x78\xF6\xA8\xF3\xA8\x89\xB3\xFF\x47\x69\xB3\xAD\xB7\xDC\x15\x14\xB3\xEC\x0E\x65\x78\x91\xC3\xF5\x2B\x84\xE0\x91\x4A\xBB\xB7\xD2\x43\xD3\xC3\xB6\x63\x43\x30\x32\x37\xE8\x75\xDC\x0C\x3A\x35\xC9\xC0\x5E\xAB\x22\xA7\x2A\x65\xBC\x69\x88\xF2\xE0\x99\x6B\x9C\xD8\xD4\x5C\xAB\x63\x50\xD7\xB6\x20\x7A\xFC\x6A\xC5\x90\x77\x6B\x15\xC1\x2D\xF1\x2D\x42\x89\xBC\x20\xD1\x87\xB9\xCE\x32\x2C\x0A\x42\x5C\xDD\x82\xDB\x2E\x5A\x9D\x59\x5C\x34\x2D\xBD\x2A\x7B\x9B\xD5\xD1\xB6\xD9\xC2\x45\xF5\xF5\xE4\xF9\xEA\x9E\xBF\x3A\x63\x09\x54\x4E\x35\x63\xA3\x02\x15\x64\xEE\x3B\x67\xAD\xC2\xA8\xE5\xBB\x4F\x0F\x3C\x8D\x1C\x6E\xF8\xD4\x85\xDA\x38\x5B\xFE\xD4\xE3\xAD\x2B\xD0\x24\xEB\xD3\x36\x24\xDA\x92\x61\x3E\x46\xDA\x26\x42\x5B\xBA\x5F\x85\x3D\xDA\x42\x74\x8D\xAC\xCA\x31\xC5\xBA\x93\xD5\x42\x21\xF7\x77\x34\x48\x98\x06\xE1\x35\x0E\x81\x0E\xAF\xD5\x23\xA2\x41\xCA\x34\x48\x90\xBC\x31\x8C\x60\xC4\xB7\x42\xFC\xE0\x42\x95\x10\xF8\x04\x92\x97\x6A\x20\x1A\xC7\x44\xE3\xDB\x29\x5A\x9D\x59\x5C\x34\x91\xD7\x82\x5A\xD5\x28\x64\x23\xDC\xFE\x5A\xDA\x3C\x23\xA5\x9D\xE6\x5A\x70\x17\xA2\xF0\xBF\x33\xD3\x3A\x24\x14\x70\x49\x8C\x16\x38\x4B\x56\xC2\x6B\xD5\x08\x17\xE9\xA6\x4A\x20\x74\x5F\xB8\x71\xE3\x46\xBC\x51\x29\xA7\xAA\x10\xDF\x23\x93\xFB\xC5\x06\x42\x0A\x7E\x80\xF0\x1A\xB7\xA2\xCE\xFE\xBE\x04\x47\x54\x09\x0A\x24\xBE\x87\x6D\xA3\xF5\xAF\xA9\xE3\x53\x45\x90\x41\x76\x95\xD2\xE1\x91\xCB\x07\x07\x4E\xE0\x0C\x4C\xD8\xAE\x9D\xBD\x55\xDF\x74\x36\x38\x73\xB3\xD9\x40\x3C\x3A\x98\x12\xB3\x23\x76\x2B\x13\xC2\x2E\xE0\x5A\xEB\x47\xCC\xCF\x02\x94\xE2\xC3\x11\xBB\x95\x09\xB1\xB0\x68\x51\x6E\x95\xB8\xF4\x48\x86\x1D\xFC\x9C\x5E\xFD\xFB\x3A\xC9\xFE\x20\xB4\x29\x05\x52\xD2\x84\x51\x0B\x26\x8C\xFB\x25\x9C\x0A\x2D\x35\x4A\x6C\xDB\xDB\xDE\x75\x99\xA3\xE2\x71\xAD\x2C\xD7\x08\xDE\xD9\xBF\x4E\x7B\x19\xAC\x0E\x54\xEB\x3C\x6B\xC0\xB8\xE4\x3C\xE5\x69\x2B\x2F\x80\x12\xE7\x59\x43\xCE\xB3\xE1\xB4\x8E\x20\x72\xF6\x3C\xD0\x5B\x17\x20\xC4\x27\x65\xFB\x40\xF3\x03\x2B\x0F\x2C\x3E\xA0\x3B\x5A\xEE\xA8\x33\x75\x88\x8B\x51\x48\xCE\xB3\x54\x17\xEA\x78\xEB\x75\xB8\x59\x27\xEC\x1D\x9B\x96\xDF\x75\x49\x92\x14\x25\x6E\x1B\x74\xF9\x9D\xA4\x4A\x8F\xC4\xC9\x85\xF6\x67\x72\x0C\x7A\xBA\xE0\xE5\xAD\xB2\x10\xD0\x06\xDD\x40\x02\xA3\xF2\x03\xB2\xD2\x10\xE0\x60\xB6\xE6\xAD\xC8\xA8\xE1\x71\xD9\x45\x30\xEF\x13\x39\x23\x21\x9A\xAF\xA2\xE8\x7C\x45\x2D\xF8\x0E\x8A\x59\x29\x90\xA7\xB8\x59\x84\x54\x79\x66\x4A\x86\xCA\x89\x39\xE6\x54\x65\xA1\xA8\x42\x98\x30\xEC\x18\xFB\xF1\xCB\xCC\x2D\x65\xE6\x96\x60\xAF\x6D\x41\xFE\xF8\x55\xDC\x0D\x21\x25\xAA\x08\x4A\x28\xF9\x56\x48\x84\xA8\x0C\x9F\x00\x05\x30\x81\x78\x53\xF6\xA4\x16\x3F\xA5\xD7\xAA\xF2\xB8\xAA\xF6\xB9\xA0\x0A\xA9\xAB\xFB\x8E\xDF\xB8\x71\xE3\xC6\xE4\x52\xBD\x0F\xCC\x57\xE9\x00\xDF\xF8\xFB\x12\x41\x84\x83\xF1\x55\x1A\x67\x42\xBD\xBF\xBB\x4F\x68\x1B\xFB\xA4\xAC\x7D\x50\xC2\x7E\x69\x0F\xEE\x9A\x70\x91\x49\x91\x56\x94\x43\xBA\x9E\x00\x47\x2C\xE1\x0E\x96\xC2\xB1\x90\x57\xE6\xA9\x06\xE9\x70\x88\x14\x4E\x33\xDB\x8D\x4E\xEA\x43\x9D\x90\xFA\x7E\x64\x70\xD2\xD6\x81\x8C\xCC\x02\xEF\x54\xB0\xD9\xE7\xC2\x28\x21\x56\x57\x5B\x6A\x5B\x7F\x91\xD8\x5D\x1F\xBB\x65\x46\xB7\xD3\x3A\x84\xB0\xC7\xE8\x56\x18\x5D\x1E\x74\x8C\x6E\x85\xD1\x6D\xCB\xE8\x56\x18\xDD\x92\xD6\x25\x8C\x8E\x6C\x1E\x6D\xD6\xB1\x53\x2D\xB9\x12\x5E\x96\xC0\x40\xB4\x5E\x85\x2D\x6F\xA7\x1D\xF5\xE2\x21\x6F\xC7\x90\x0C\x79\x9B\xC6\x2B\x73\x0A\xC2\xCD\x6A\x34\xCB\xBC\x94\x36\xAE\x65\xDE\xDC\x33\xEF\xC8\x69\xFC\xEF\xCC\xB4\x2A\x9C\xAA\xC6\xC2\xBC\x79\x15\xC2\x78\x01\xF3\x4E\x84\x79\x27\xC4\xBC\x59\x8F\x79\x4B\x98\xC0\x84\x6F\xB5\xCC\x5B\x32\xF3\x8E\x21\xEA\x31\xAF\xBC\x56\x4D\x6E\xCE\xBC\x59\xC7\xBC\x25\x94\x1D\xF3\x66\x43\xE6\xE5\xB2\xF6\xC1\x04\xF6\x4B\x7B\x3C\xF3\xC6\xC4\xBC\x92\x5D\xB3\x38\xD5\xCE\xFA\x11\xC4\xED\xAC\x9F\x57\xDC\x7D\x52\xB2\x11\xA7\x14\x0D\x08\xA4\x61\x96\xC9\x47\xFD\x51\x93\x13\x75\x19\xA2\xD1\x70\x88\x46\x8B\x87\x68\x41\x99\xA8\x15\x8D\xB8\x61\x2E\x38\x45\x5E\x19\xD9\x2F\x59\xA3\xB6\xD5\x56\xDF\x71\xC6\xF4\xC3\x21\x78\x85\xB9\x86\x0B\x0A\x05\xF3\x5C\x65\x47\x3D\x99\x19\x5F\xF8\xA1\xA1\x72\x24\xB7\x7F\xFE\xEA\x8C\x1F\x36\x47\xA9\x82\x2E\xBF\x9B\xB6\xC6\x16\x77\x10\x0A\x29\xA8\xD6\x0A\x05\xF6\xAA\x5F\x3C\x4F\x11\x3D\x42\xDE\x9F\xBB\xA0\x7C\x3B\x8B\x65\xBA\xC1\xDF\xD2\xF6\x50\x6D\xBA\x8B\x1B\x8D\xBF\x85\xC5\x69\xA0\x01\xD1\x6B\x14\x9C\x18\xCE\x54\xD8\xFF\xA8\xBB\x45\x79\x56\xB9\x8A\xC2\x62\xB5\x79\xD8\xFA\x30\x82\xE9\xEC\x24\x66\xB1\x9D\xC4\xBC\x18\x3B\x89\xE9\xEC\x24\x5C\xFC\x9C\x9D\xC4\xF4\xEC\x24\x2F\xAA\x06\x90\x1A\xE6\xFC\xAF\xCD\x8B\xF3\xBF\x46\xA5\x0C\xAB\x69\x1D\xA7\xC3\xEC\x87\xC7\xEA\xA5\x9E\x91\x76\x76\x92\xD6\x90\x05\x8A\x79\xB5\xB6\x3C\x69\xAD\xDB\xC1\x6D\x71\xE6\x3D\x30\x70\x2F\x54\x85\xB4\xB9\xAA\x22\xB0\xCE\x6E\x52\xD2\x4A\xBB\x59\x25\x78\x73\xA3\x4A\xC1\xBA\xAD\x86\x54\xC3\xED\xA6\x22\x04\xF7\x73\xF8\x4D\xEE\x82\xAA\xA0\x1D\xEA\xC5\x8D\xF5\x6A\x4C\xE2\xAC\x9E\x38\xDB\x80\x3D\x57\x95\x10\x54\xFB\xCC\x31\x28\x40\x9D\xAB\xF6\xC3\xBE\xEA\x00\xEC\xAB\x96\xA0\xA8\xEE\xA0\xC5\xE1\x0E\xD8\x4F\x7B\xBF\xEA\x4E\xDC\x2E\xF3\xC9\xF5\xCE\x8E\x6D\xAA\xBB\xE0\x4E\x42\x87\xCE\xF8\xE0\xBA\xBD\x3B\xAE\x96\xE1\x40\x65\xE0\xCE\xEA\x6E\x73\x0C\xEE\x22\xA0\x1E\xDE\x4A\xDE\x03\x77\xE3\x2E\xEE\x2E\xFC\x67\x8A\xFF\x1C\x84\x49\x53\xDD\x8D\xBA\x01\x8A\x90\x7B\x20\x6C\xE0\x2E\xFF\x36\x5E\x4C\xFB\x17\x07\x7B\x17\xD5\x5D\xB0\x8C\xF2\x68\x19\x05\xCB\x3D\x10\x37\xD5\x5D\x5D\xE4\x44\xB5\x3C\xAC\x97\xDF\x37\x58\x97\x81\x65\x94\xF9\xCB\xAC\x84\x9F\xA0\x69\xF4\x12\x72\x14\x79\x09\x2E\x04\x4D\xFD\x12\xB0\x64\xC3\x02\x7B\x0E\x5E\x82\x9F\xBD\x04\x7F\x99\xA6\x5A\x66\xAB\x32\x98\x75\x96\xC0\x2F\xA9\xEE\xE6\x13\x52\xEC\x35\xDC\x85\x14\xAA\xEF\x46\x7D\x17\x3B\x29\x77\x97\xE9\xEE\x54\x1C\xE7\xA6\x70\x0F\x4F\x13\x8D\x7D\x5E\x06\xDB\x54\xCB\x70\x97\x53\xD8\x76\x18\x51\x5C\x28\x7D\x51\x2D\x83\x85\xBB\xD7\xAB\xBB\x07\x85\x93\x3E\xCA\x14\xF6\xC6\xEE\x7B\xC0\xC0\x5D\xB0\xBC\xA0\x06\xDB\xD4\xF7\xE0\x1B\x53\xB8\x07\x09\xDA\xE0\x4B\x07\xE5\xA5\x83\x30\xC5\x3F\x77\x41\x44\x54\x61\xE9\x7D\xB7\xDB\x6A\xEA\xBB\x89\x2A\x2F\x01\x2B\x12\x5A\x23\x4F\xDC\x41\x6A\x3B\x21\x64\x48\xF5\x82\xDC\x6E\x90\x4E\x77\x7A\x68\x76\x7A\xB4\x0C\xE3\xEA\x6E\x1C\x7B\x12\xB8\xCB\x75\x3B\x96\xC8\x0D\x30\xA1\xC1\x6D\xEA\xE5\x76\x5C\x26\x0D\x2C\xEF\x7D\xA7\xBA\xD3\x33\x08\x3E\xAA\x96\xE1\x6E\xEC\x1F\x36\x16\xEE\xE2\x91\xC7\x71\x57\x32\xEE\xA6\xC7\x41\x34\xE0\x77\x79\x76\xE1\x71\xE7\x4D\x02\xB1\x71\x75\x17\xB1\xB7\x3A\x07\x05\x71\x78\xFD\xD2\x96\x9F\xEB\x97\xD1\x0B\xDC\xA1\xA5\xCA\xC0\x4B\xAB\x7B\xCC\x31\x58\xEE\x31\xF3\x5D\x70\x0F\xB2\xF0\xF2\x90\x99\xEF\xF1\x6D\x65\xB2\xDF\x1A\x33\x2F\xE8\xD2\xFF\x37\xCC\x3C\xC7\xC7\x2F\x9E\x85\x3B\xEE\xFD\x1B\x62\xDC\xA1\x8C\xA2\x8E\xBE\x0C\xEF\xBC\x74\xC0\xAA\x2C\xA6\x96\x84\x55\xEF\xAA\xEF\xEE\xB1\xEA\x4B\x91\x0D\xEF\x46\x36\xEC\xB3\x12\x33\xEF\xCD\xEF\x54\x2F\xED\x0F\xFF\x40\x48\xDD\xBD\x68\x5C\xF7\x62\xD6\x1E\xAB\x76\x1D\xF1\x73\xAE\x13\xB5\x0B\xFA\x70\xE7\x5F\xBF\x0F\x77\xEE\xD5\x87\xDB\xEC\xC1\x12\xE4\x4D\xB5\x04\x07\xF0\xC1\x01\xB8\x03\x95\xAF\x3B\xC8\x0F\x30\xC3\x1D\x4F\x53\xED\x83\x02\xEF\x15\x7C\x8F\x47\x28\xF1\x87\xC7\xCF\x46\x31\xEF\x34\xD4\x56\xBC\xAD\xB6\xB2\x16\xA9\x68\x47\xB7\xAE\xCB\x14\x8B\xE3\xD5\x24\xB1\xB8\xA1\x7A\xF5\x96\x79\x7B\x95\xBE\xE0\x54\xD3\x8F\x76\x24\x7D\x46\xB5\x2B\xAC\x66\x03\x8C\x06\x05\x66\x7A\xAD\x8A\xF9\x5C\x39\xB9\x56\xA5\x64\x0D\xA8\x49\xA7\x24\x5B\xC1\x66\x95\x83\xF6\x8A\xBA\x3E\xE6\xDE\x4F\x2A\xFE\xD8\xBD\x6C\x83\x66\xCC\x64\x45\x07\x10\xC1\xD8\x99\x0B\xEE\x2F\x6F\xDC\xB8\xA1\x36\x9A\xBA\x5C\xD1\x01\xCE\xB6\xF1\x35\x88\xB7\xEA\x7D\x57\x21\x81\x7D\x90\xEE\x5C\x3D\xB7\x5E\xEF\x07\x7D\x0E\xD7\xFC\x03\xFA\x18\xEC\xA7\x33\x79\x18\xCB\xAD\x25\x17\x54\x77\x80\x75\x4F\xEE\x28\x76\x4B\x2E\x9B\xEA\x4E\xA2\x3C\x0A\xAF\x25\xB6\xCB\xEE\xEC\x28\x18\xC1\x1D\xEB\x4E\x6F\xC2\x1D\x6E\x07\x70\x48\x47\x6B\xF5\xF2\xB4\xBE\xDB\x5B\xC6\x0F\x54\xF7\xC0\xFE\x2A\x84\x3B\xAB\xA9\x39\x06\xD3\xFA\x4E\xFA\xFE\x1E\x96\x7C\xF7\x80\xBC\x57\x1D\x84\x7B\xC0\xD4\x53\x68\xBF\x8B\x20\xEC\x77\x82\xD3\x0D\x4B\x77\x43\xE9\xEE\x8A\x0E\x28\x28\x28\x9C\xEF\x59\x28\xDD\xB8\x07\x0E\x52\x46\x11\xDA\xBB\xF6\xAA\x86\x83\x5D\x55\x25\x20\x89\x60\xE2\x8B\xBB\xAB\xBA\x03\xA6\x28\xE6\x44\x6C\x07\x50\x88\x7A\x4A\x76\x2E\xE3\x76\xA0\xBA\xDB\x93\x66\xCA\xA4\x39\x08\x19\x89\xEA\x83\xF8\x2D\x84\x44\x19\x14\x65\xA3\xB5\xFA\xCE\x69\x7D\x50\x7A\x39\xA5\x88\x86\x03\x8D\x18\x97\x0F\x96\xEF\x5C\xDC\x82\xBB\x91\x96\xD5\xDD\x70\x8F\xDB\xD9\xD9\x46\xE9\x4E\x05\x36\xB4\xAF\xC2\x27\x06\xA6\xD5\x41\xB8\xA3\x9A\xC2\x9D\x0C\x22\x82\xBC\x5E\xC0\x18\xF7\x3D\x63\x3A\x8B\xCC\xB2\xF9\x60\x3A\x56\x09\xB1\xDD\xAD\x27\x67\x38\xC1\x1B\xAD\x2E\x6D\x17\xEB\xD2\xF6\x45\xE8\xA1\xFF\x6C\xA2\x22\x3E\x11\x0C\xDC\xC7\xC8\xB3\xF3\x48\xA5\xDC\xF5\xDF\xC3\x3D\x39\x25\x75\x47\x35\xFF\x02\x9F\x27\xD5\x16\x75\x43\xF6\xA5\x80\x00\x77\xD0\x15\x4D\x09\xB7\xFD\x18\xED\x9C\xA7\xB5\x22\x4C\x44\x3A\xB4\xE5\xE9\x13\xB8\x8B\x67\x39\x79\xB5\xFB\x35\xF5\x48\x1D\xBA\x5F\x53\xE7\xEA\x68\xBD\xE2\x6A\x76\x3E\xF5\x62\xAA\xE1\xCF\xD7\x9D\x7E\x63\x15\x18\xB2\x92\x6E\xF2\x2D\x0A\xA9\x8B\x9A\x4A\xBB\x4F\x6C\x55\x8A\x91\x1C\x41\xB9\xBF\xFC\x7D\x79\x56\x9B\x47\x6A\x0B\x66\xAD\xB0\x74\x78\x62\xCE\x51\xE8\x2A\xA8\xEE\xEB\x85\x6F\x28\x97\x34\x54\xB5\x7B\xB7\xA9\x94\x14\xFA\xFE\xAD\x66\xD7\xE2\x3E\xB4\xD5\xD4\xF6\x91\x3A\x02\xE3\x46\x4D\x2D\x2F\x44\x60\xDB\x17\x3E\xDC\xBD\xA0\x17\xBE\x70\xBD\x7B\xC1\x2E\x7C\xE1\x23\x7B\x95\xF0\x6F\xF6\x2A\xE1\xA3\xDD\x0B\xD1\xC2\x17\x7E\x79\xAF\x2A\x9E\xDF\xAB\x84\x4F\xEC\xD5\x86\xDF\xD8\xAB\x8A\xDF\xDA\xAB\x84\xDF\xDD\xAB\x0D\x7F\xB8\xD7\x0B\x9F\xD9\xAB\x0D\xFF\x69\xAF\x12\xFE\x74\xAF\x46\x7E\x7E\xAF\x2A\xBE\xB0\x57\x15\x8F\x6F\xEF\x51\xC5\x95\xED\x3D\x4A\x78\xB2\x7B\x21\x59\xF8\xC2\x5B\xF7\xAA\xE2\xBB\xB6\xF7\xE8\xC5\xF7\xEE\x55\xC2\x3B\xF6\x2A\xE1\xA9\xBD\x4A\x78\x7A\xAF\x5E\xFC\xE8\x5E\x74\xF8\xC0\x5E\x55\x7C\x70\xAF\x12\x3E\xB4\x57\x2F\x7E\x6A\xAF\x2A\xFE\xC1\x1E\x35\x9C\xDC\xA3\x82\x57\xEF\xF1\xFD\x3F\xDA\xE3\xF9\x7F\xBF\x47\xFB\xBE\x66\x8F\xFA\xBF\x76\x8F\xEF\xFF\x87\x3D\xEA\x7F\xDD\x1E\xE5\x37\x7B\x7C\xFF\xC8\x1E\xF5\x3F\xBA\x47\xF9\x9B\x7B\x7C\x7F\xE1\xE6\xDF\x93\xD4\x77\xA3\x06\x1F\x58\x50\xE7\xC8\x86\xFD\x6B\xAA\xA9\x28\xD4\xEF\x14\x87\x0F\x91\xD3\x51\xAD\x41\xBB\x23\x27\x6B\x3D\xAD\x08\x27\xA8\xE1\x85\xB0\x8A\xF2\x20\xEB\x8C\x66\x3A\x1B\x05\x10\x94\x9F\x20\x0D\x97\x7E\xFE\x5F\xDD\xCF\xB9\xBB\xE3\xC0\xFD\xCE\x77\x74\x9A\xEC\xD3\x4A\x99\x6D\x8F\xF6\x4A\xBB\xB7\x00\xD4\x21\x1D\x1C\xC5\x35\xD4\x25\x0D\xAD\x5E\xB2\x65\xA2\xF8\xF8\x15\x9D\xB4\xC9\x44\xD5\x8A\xB6\xB5\x72\x23\x71\xEE\x71\x6A\x93\x91\x52\x51\xB5\xA4\x70\x6E\xF7\xE8\x59\x5A\x00\xCB\xC6\x3D\xBA\x51\x5B\x6E\x0D\xB9\xDF\xF1\xF1\x17\x58\x4E\xE4\x8B\xFA\x13\xA1\x34\x19\x5E\xD1\x1B\xAF\xC3\x05\x93\xB6\x9F\x9F\x31\xCA\x6E\x7B\xB7\x2C\x0A\x8B\x67\x14\x7F\xB5\x41\xFB\xEC\xC0\x77\x40\x1F\x03\x73\x6B\xDD\x30\xBB\x77\xC2\x6B\xF0\x01\x45\xB0\x81\x92\xF6\xD0\xC1\x5D\x83\xFD\xE3\x70\x75\x77\xA1\x71\xFF\xE3\xD9\x02\x07\x70\x09\xFF\x3B\x33\x95\xAE\x6A\xEE\x6A\xF7\x69\xBF\xD3\x7A\xD0\x69\x7C\xA7\xA9\x38\xDB\x27\x91\x4F\x9A\x47\x74\x00\x33\xE5\x93\x3B\xD4\x92\xB7\x36\x70\x53\x42\xE8\xC8\x4E\x5D\x00\x33\xAD\xD9\x3D\x4D\xCA\x95\x2E\x71\xC3\x0D\xB2\x56\xDB\x6A\xAC\xA2\x2D\xDD\xBD\xA1\xD2\xEE\x0D\x10\xAE\x83\x82\x70\xDD\xA9\x66\x8D\xD2\x68\x84\x7C\x7C\xF1\xFB\x37\x6E\xDC\x88\x51\x9F\x23\xF3\xFF\x66\x6D\x80\x72\x56\xD2\x81\x09\xF5\x0D\x8C\xCB\xD6\x18\x24\x19\x6B\x0C\x41\xFB\x61\x5D\x5C\x77\xC8\x8C\x77\xD3\xEE\x53\xDB\xB2\xFE\x68\x37\x4A\x6F\xB7\x71\x8A\x8C\x14\x87\x5D\xA6\x14\xFC\xD3\xDA\x82\x3A\xEB\x43\xE1\xD7\x41\x97\xEF\xBA\xD4\x82\x32\x90\x57\x30\xB9\x6A\xB7\x5D\xA6\x8A\x27\xED\xD8\xB5\x77\x79\xA8\xB3\x5F\xD2\xDE\xB9\x4D\x79\xFC\x02\x8A\xC7\x33\x6E\x6B\xC3\x6D\x37\x6E\xC4\x0D\xB0\x58\x37\x1D\x7F\x72\xD0\x26\xB6\x27\x9C\xD6\x76\x9D\xA3\xD0\x2C\x8E\x62\xCC\x34\x89\x72\x85\x54\x36\xEE\x0D\x10\xAD\xD3\x93\x3A\x86\x68\x7D\xAD\xD0\x3C\x39\x12\x7E\x2D\xA5\xD0\xC3\x1E\xC1\x23\x24\x78\x44\x69\x61\xA2\xB5\x69\x1D\x09\xC1\x23\x22\xB8\xC9\x20\x85\x04\xC2\x69\x95\x80\x11\x92\x47\xDE\x88\x1A\x41\x02\xD6\x93\xBC\x3D\xBE\x94\x29\x0F\x01\x08\x0E\x99\x71\xEA\x7C\x6D\xE8\xEC\x3D\x12\xDE\x76\x6A\x63\x5A\x93\xBF\x8C\x06\x25\x28\x35\x9D\x33\xBF\x12\xC8\x81\x58\xB2\x09\x50\x78\xDC\x26\x27\x62\x80\x78\xC1\xB8\xFD\xBE\x27\x66\x4B\xC7\x21\x15\x69\x04\xE9\x6C\x8D\x51\xE2\x90\x8A\x76\x5A\x9B\x75\x06\x85\x21\x9F\x6B\x1A\x3D\x6A\x9D\xC5\xA1\x36\x0D\x28\x0F\x0B\x74\x0F\xC1\xC6\x10\x1A\xC1\xA0\x7D\x5A\x1C\x1F\x1A\x02\x0D\x67\x26\xDB\xE4\x28\x6C\xBA\xA7\x32\xF7\x08\x72\x3C\x83\xCE\x40\xD8\x8D\x85\x0C\x59\xE2\xDE\x40\xE3\x11\xF6\xC7\x23\xC4\xF1\x08\x39\x97\xD7\xDA\xB4\x0E\x65\x3C\x42\x1A\x8F\x94\x52\x3F\x80\x9D\x56\x31\xA4\x32\x1E\xA1\x67\xC0\x10\x62\x30\xDD\x14\x18\xF6\xC1\x0F\x5A\x3C\x18\x1F\x82\x9C\xE3\x61\x4A\x65\x86\x84\xB4\x1B\xA1\x6C\xB9\xB3\x74\x5E\x62\xEE\x57\xE5\xBF\xC4\xEB\xF2\xDD\xE4\xCA\xF8\x03\x5A\x36\x65\xFD\xFF\x33\xDD\xB5\x27\x15\x4A\x3B\xD3\x1B\x98\x5A\xE3\xB2\x44\x34\xB0\xB9\xCD\xDC\x48\x5C\x15\xEA\xD0\x8D\x4E\x15\x21\x13\x29\x72\x23\x26\xE2\x1B\x70\xBE\xBB\x37\x50\xB4\x14\x71\x3A\x68\x4F\x30\x95\x39\x36\x65\xD4\x24\x9F\x9A\x3A\x84\x10\xEC\xDA\xB4\xB6\x42\x36\x4B\x64\x0B\x51\x22\x10\xB5\xC8\x33\xD8\xC3\x3D\xC5\xE4\x52\x31\x42\xB9\x1E\x75\x64\x89\x99\x1E\x21\xD3\x23\x63\x0E\x6E\x90\x17\x3B\xE0\x0B\x06\x95\x6A\xDC\x17\x28\xB3\x23\xB7\xD7\x42\x88\xF3\xC5\xD2\xF9\x33\x12\x8F\xE2\xC5\x91\x86\xDF\xA7\x69\x15\x99\xE7\xCC\x56\xB2\x10\x1F\x76\x2C\x28\x02\xD8\xA3\xA9\x80\x96\xCD\x7D\x46\xAC\x45\x03\xB3\x90\x19\x83\x49\x9F\x0D\xE9\xF4\xD1\x3D\x42\xD2\x0A\xEC\xFA\x5A\x11\x20\x29\xC9\x8D\xB0\xC7\x6F\x56\xA8\x07\x84\x7F\x3F\x4F\x38\x21\xB9\xD0\xAF\xE3\x28\x6A\xA1\x91\x9C\x39\xDC\xE8\x8E\x86\x5A\x56\xDA\x01\x29\xBB\xC6\xF7\x99\x6A\x2C\x3E\xBA\xE5\x0F\x11\x3B\xCD\xF0\x18\xDF\x7C\x42\x14\x86\x4E\x32\x87\x24\x09\x91\x7E\xD1\x54\xAC\x66\x60\x09\xB9\xC6\x7B\x75\x82\x22\xCB\x0D\xAA\x30\x6B\x53\x54\x6A\xC0\x9E\xA9\xE3\x29\x47\xD0\x77\xA4\x8E\xA6\x40\xAB\x6D\x58\x7E\x1F\x19\xD4\x02\xE4\xA9\x6D\x88\xF1\xFD\xB5\x69\x35\x9C\x00\x3F\x5C\xA8\xD1\xB6\x39\x06\xCA\xBD\x89\x50\x39\x5B\x47\xF0\x1E\xE7\x2B\x08\xD6\xEB\xD0\xE9\x37\xD6\xD1\x38\x8A\x22\xF2\x94\xCF\xE8\xD5\x3A\x24\xB7\x30\x16\xF4\xF1\x43\x74\xD6\x19\xF1\x94\x8B\x57\x35\x2D\xC1\xF8\x56\x2C\x4E\x62\x3C\x6D\xE4\xF5\x84\xA2\xA0\x21\xE2\xAF\x08\x2C\x32\xE6\x8F\xE9\xAD\x90\xDF\x8A\xDA\x42\x65\x62\xB3\xBF\x33\x7D\x17\xC8\x1D\x88\xC9\x11\x6A\x22\x30\xA2\xD6\x37\x82\x02\xD0\x43\x48\x1E\x2A\x6C\x57\x43\xD2\xB5\xAB\x4A\x49\xA9\xA9\x70\xB4\x6D\x53\x8D\x64\x25\xEE\x8B\x5D\xCB\x91\x90\x41\x1D\x73\x6B\xB3\xD3\x85\x82\x90\xE1\xC3\x82\x2A\x87\xA8\x52\x10\x57\x89\x7F\xC2\x12\x9E\xE3\xA8\x02\x18\x0D\x5E\x88\xFD\xA7\x1A\x57\x0D\x7E\x81\x9B\x8F\x05\x8D\x2A\x05\x19\xBF\xF7\x10\xE5\x2C\x27\x02\x42\x4E\x6F\x10\x88\xAC\x74\xC5\xA0\x14\xA5\x68\x6C\xEA\x0A\xC5\x23\xD6\x21\x8C\x84\x58\xA6\x5B\xA5\xA8\xC3\x1D\x19\xCD\x2C\x19\xC9\x2C\x64\x1B\x56\xEC\x02\x97\x37\x44\x14\xD0\xE5\x8F\x5C\x12\x50\x1C\x12\xE4\x7F\x41\x59\x19\x88\x42\x09\xD3\x2B\x5B\x48\xA8\x68\x40\xA8\x88\x7B\x1B\x31\x2C\x8C\x1F\xAE\x2A\xA5\x4E\xC6\x3E\x16\x25\xEE\x8D\x56\xD2\x3D\xEC\xA8\x15\x31\x0A\x6F\x24\x3E\x73\x4C\xAD\xB4\xA5\x52\xC2\x54\x4A\x85\x4A\xD8\x89\x3A\x43\xB5\x56\xBB\xA4\x4A\xE9\xD4\x25\x23\x5E\xE3\xFA\x53\x6C\x33\x9D\x9F\x86\x4D\x1D\x63\xDF\x05\x06\x2D\xA4\xC6\x85\x1C\x81\x7F\xB1\xA9\x42\x2C\x59\x42\xD7\xA2\xD3\x6C\x1B\x0D\x1B\x24\x01\xCA\x5D\x71\xBB\xCB\x70\xDF\x12\x62\x6D\x06\x52\x7C\x96\x52\x65\xD8\xFC\x2A\xCB\xD9\x3D\x2D\x72\xFA\x1B\xBD\x97\x0A\x51\xF3\x9D\x2F\x3B\xCD\x06\x39\x88\x9C\xFD\x46\x76\xAD\x84\x94\x1C\xC5\x51\x98\x30\xED\x39\x52\xD3\x76\xAE\x95\x69\x7F\x9A\x31\xC6\x42\xCE\x44\xD5\xD2\x79\xF6\x5A\x0C\x9C\xAA\x72\xCF\x2C\x7E\xE0\xB5\x9F\x26\x29\xBD\xC2\x96\xC1\xE1\x04\xB2\x44\x47\xFC\x98\xC7\x25\xE2\xD7\xFD\x4D\x86\xC4\x62\xA2\x77\xF5\xE1\xD3\xCC\x69\x8A\x5E\xEB\x03\x30\x08\xB7\xC6\x58\xBE\xC4\x28\x99\x2A\xA4\xC1\x08\x39\x0B\x51\x20\xD4\xE2\x72\xA3\xD3\x84\x43\x68\x4F\x16\x11\x8F\x98\x74\x80\x46\x8C\x9B\x62\xA5\x03\xF4\x5D\x1E\x52\x9C\x51\x53\xD3\x37\x31\x51\x3A\x14\xC2\xA3\xB4\x41\x65\x3A\xC2\xB6\x06\x6D\x57\x12\xF6\xF1\xCA\x38\xF2\x5A\x35\x1C\x71\x87\xCD\xA8\x47\x10\x9D\x2D\x02\x73\x0C\x46\x3C\xF0\x29\x85\xA8\x51\x4E\x5D\x2B\xF2\x2D\x41\x6E\xA4\x20\x7F\x94\x12\x84\x6B\x7C\xB1\xA9\x23\xEE\x2B\xD5\xC3\x04\xC5\x5D\x44\x58\x8D\x38\x45\x07\xD5\x15\xC9\x1C\x45\xA2\x41\x7A\x72\x5A\xA5\x52\x7D\xCE\xDE\x36\x23\x0A\xFA\xF4\x03\xE6\xE7\x70\x2B\x18\xA4\xF7\x5D\x8B\x73\x1A\xB2\x11\xE8\xF2\xBD\x97\xFC\x72\x3F\x12\x36\xF4\x37\xC9\x69\x09\xA5\xCE\x89\x22\xCA\x43\x1C\xA0\x08\xE2\x42\x92\xD6\x04\xB8\x5B\x19\xAD\x3F\xD4\x96\xF3\x0C\xF9\x93\x60\x19\x55\x80\x42\x0D\x7F\x51\x59\xF2\xA0\x52\xB9\xCD\x78\x74\x34\x8E\xA6\x39\x06\x29\x13\x2A\xF0\x84\x8A\xFB\xA4\x7A\xA8\x25\x54\x4A\x8F\x7A\xA4\x3A\xDD\x12\x6A\x8D\x32\x8E\x46\x73\x84\xE2\xA1\xAC\x68\x6E\x9C\x24\x62\xD2\x0C\x3A\x89\x7B\xF9\x2C\xFB\x7D\xDC\xB9\xB2\x79\x3B\xF2\x5B\xCE\xA0\x8E\xBB\xD5\xC4\x05\xBC\x17\xA0\xE1\x22\xB8\x50\x4D\xD9\x00\x28\x5E\xC8\x33\x73\xCA\x9F\xF9\x45\xE8\x21\xC6\x78\x66\xA0\x3B\x1A\x2C\xAA\x20\x76\xBA\x05\x16\x11\x66\xF2\xAF\x69\x7A\x8D\x80\x3D\x94\xC8\x30\xFF\x2D\x15\xAF\xB9\x55\x54\xB2\x48\x71\xF9\x44\x93\xB2\xCB\x10\x62\x86\x1B\x41\x05\x6B\x2E\xD8\xD0\xCB\x3E\xDE\x2B\x96\x76\x9E\x16\x40\x06\xAE\xAE\x2D\x50\x04\x57\x9F\x04\xF2\xAA\x6E\x66\x5A\xC6\x93\xD9\x99\x86\x01\x2F\x2C\x7F\x62\x5A\x66\xE3\x7A\x45\x80\xF8\xA6\xC5\xDC\x8A\xB6\xFA\x49\x26\x24\x04\xE3\xDF\xEB\x37\xD3\xF8\xBA\x27\xBD\x36\x9A\x5E\x1B\x75\x6F\x75\xC0\xB6\x4C\x44\xA7\x0A\xFC\xEB\x3C\xB7\x33\x48\xB3\x3F\x8E\x54\xB2\xED\x94\x0F\x1F\xEB\x29\x21\x4E\xBF\x71\x1C\x71\x78\xA0\x57\x40\x24\x36\x2E\x10\x89\x21\x2A\x1A\x25\x5A\xA2\x01\x99\xF4\x14\x15\xDE\xEF\xE0\x5A\x65\x7B\x14\xD3\x60\xF9\x3B\xCD\xEB\xA5\x6D\x55\x10\x69\xB3\x6D\x8B\x95\xB7\x3C\xFA\x0F\x7D\x19\xF8\x7E\x84\x22\x80\x27\xBD\x8D\x08\x95\x15\x72\xFF\x65\x09\x96\x5A\xA2\x7E\xEB\x08\xBF\x34\x41\x7D\xDB\x2F\xB3\x3D\xF3\x90\x6F\xB3\x92\x4E\x72\x9B\x29\x3E\x4F\x73\xDC\x28\xAE\x88\xB6\x1A\xE1\x72\xE9\x9F\xC8\xEA\x4F\x7B\x76\x5E\x5A\xBB\x17\x42\xFF\xA9\x16\x97\x77\x5C\x5A\xB5\x5F\x5A\x93\x6A\x04\x8A\xDF\xA3\x25\xB6\x15\x45\x14\x4A\xCE\x3A\x95\xE6\x95\x87\x3D\xE4\xBD\xD6\x66\xF9\x49\x22\x24\xD3\x9D\xB2\x4C\x5D\xEE\x88\xA9\xE7\x89\xB9\x87\x2A\xC2\xAF\x20\x69\x22\x26\x94\xEC\x36\xED\x90\x42\xBA\x47\x21\x0B\x04\x3D\x6F\x25\xDD\x30\x5E\xB3\x06\x22\x0A\x86\xDF\xE0\x86\x5D\x43\x20\xEA\x1E\xE2\x8A\xE3\xBF\xD7\x19\xEA\xCE\x2C\xA5\x98\x39\x2A\x0A\xE5\x22\xF2\x44\xDE\x9F\xDF\x76\x1A\x48\x44\x86\x35\x42\xF8\x4D\x50\x44\xD3\xAA\x26\x7A\x1A\xB5\x22\x16\x7C\x7C\x72\xEC\xE5\xE3\x36\x99\x7A\xD4\x44\x83\x55\x4A\x50\x67\x48\xD1\x97\x44\x5A\xD1\x43\x0C\xE9\x21\x26\x43\x0D\xDF\x27\x85\xAF\x13\x97\x9C\x2C\x24\xF7\x0E\xF9\x51\xAA\x53\x12\xDB\x22\xD0\x4A\x11\x87\x72\x1A\x36\x7A\xD2\x5B\xA0\x4E\xB2\x1B\xE5\x7F\x25\x18\x58\x01\x5B\xEA\x04\xF4\xB3\x43\xCF\xD9\x26\xDC\xCB\x1D\x2D\x86\x43\x7E\xF9\x7E\xDC\xFE\xBA\xFB\x38\xCA\x80\x28\x4E\xBB\x7C\xF7\xEB\xCF\x7C\xFC\x19\x75\x96\x07\xD9\x2D\x9F\x2B\xBF\xF7\x92\x44\xBC\x1F\x21\x7B\x6D\x7E\x8E\x37\x7E\xAB\xFA\x88\xDF\xBF\xDB\xF2\xFB\xFC\x3B\xF7\x33\xE6\x7C\xB8\xAA\xEF\xC3\xEE\x3D\xE4\x5D\x47\x03\x4E\x93\x4F\x1E\xA4\x58\x14\x45\xA9\xBA\xFC\x5C\x53\xD3\x29\x25\x39\x4C\x5A\xDC\x00\x59\xDA\x3A\x50\x30\x64\x03\x92\x0D\x84\x70\x6C\x4E\x52\x0B\x45\xE3\x9B\x74\x5B\xE0\xFB\x7D\x79\x58\x18\xF1\x41\xD2\xE1\x1F\x20\x29\xB2\x6E\xAF\x74\x29\x33\xE1\xB6\xDE\x32\xDB\xE4\xF6\x4A\x6F\xDD\xCF\x21\x01\xC7\x15\xF3\xB7\xAD\xC3\x75\xE2\x50\x8E\x96\x51\x0D\x91\x75\x45\x9F\x26\x2B\x59\xF3\x0A\x15\x9C\x43\xC5\xF3\x55\x1B\xD7\x9E\xE0\xEC\x89\x40\x39\x0D\xBE\xD1\x99\xCD\xA6\x8E\x0F\x99\xA0\x4E\x2F\x1D\x0F\xFE\x11\x25\x59\x4D\x20\xBD\x7C\xD4\xF8\xAD\xE4\x8F\x76\x24\xB2\x12\x37\x27\x8A\x36\x6D\x5C\x5C\xCE\xC0\x4E\xEC\x3A\x4E\x51\x1F\xB6\xED\x9C\xA5\xCE\xE9\x76\xC6\xB0\xE4\x56\x0C\x6D\x10\x80\x5A\xF7\x82\x31\x58\xD1\x0F\xA3\x44\x77\x66\x73\x1D\x37\xF6\xF1\x86\x33\xC8\xC9\xFF\xEC\x87\x87\x38\x25\x2B\x94\x8C\xD8\x6C\x36\x2B\x9A\x23\xC1\x6C\xAB\x57\x6A\x64\x3F\x16\x12\xE2\x93\x4D\xDE\x1A\x6C\xA8\xC4\xE6\x0B\xD5\xC9\xA0\x84\x3D\x31\xC7\x70\x92\xCD\x5A\x5B\x7A\xED\x89\x40\xD5\x21\x13\x88\x23\x5A\xE2\x0D\xB7\xDD\x8C\x63\x5C\x05\x62\x9B\x8D\x7C\xE8\x22\xF9\x5E\x5E\xA8\x15\xB7\x2B\xA8\x73\x7C\x71\xAB\x19\x87\x4A\x6B\x1D\xD0\xA6\x2B\x77\xEA\x82\xFB\x3C\xC5\xE5\x34\xD2\x3F\x2D\x00\x47\xD6\x45\x04\xE5\xF0\xEC\x5B\x7B\x5D\x8D\x57\xB4\xAD\x14\x8C\x2A\x9B\xA7\x19\xFE\xC1\x9D\xFA\x1D\x45\x92\xC7\x99\xDB\x66\x7B\x06\x8C\xCE\xA2\x3C\x3E\x1C\x10\x0E\x9D\x75\x40\x01\x76\xEE\x37\x83\xD3\x53\xFA\x71\x3D\x78\x10\x7F\xC4\x2E\xC2\xD1\xAF\x15\xD9\x09\x2D\xC4\x87\x03\x7B\xBA\x88\xE8\x49\xD8\x1C\x0E\x82\x07\x8B\x88\x7D\x61\xD6\x24\x9B\x81\x72\xEA\x42\xE3\x07\x5E\x32\x1D\x7A\x59\xE6\x12\x3E\x61\x40\x46\x6F\x79\x23\xDE\x75\xC4\x62\x5A\xF2\x70\x12\x69\x16\x07\x4A\xD0\xD9\x16\xBD\x4E\xCB\x35\xF5\x05\x47\xE0\xE5\x0F\x15\xDA\x05\x10\xAE\xD3\xF6\x7D\xCF\x6F\x02\xDE\x6F\xAE\xB4\x20\x03\xDC\xB6\x9B\x7C\x2A\xFC\x84\x05\xB4\x80\x25\x24\x71\x57\x28\xE7\x8F\x2E\x3F\x7E\x99\x30\xD0\x1E\xDB\x28\x2C\x08\x03\x24\x1B\xBC\xA7\xE9\xF5\x9E\xA3\xE9\x93\x0D\x5E\xFA\x7A\x0F\x78\xC5\xE2\xB1\xB1\x17\xA8\xE7\x96\x02\x1F\x88\xCB\x3D\x93\x35\xEE\x4D\x38\x08\x44\x57\xF7\xA7\xD7\xBA\xD6\xB5\x13\x7B\x9D\x56\x9C\x5D\x66\xB4\x1D\xCC\x68\xDB\xCE\x68\xDB\xCD\x68\x4B\x21\xA1\x3C\xA3\x35\x21\x03\xB0\xB9\xEB\x4E\x46\xDF\x18\x79\x9C\xAD\x15\x7D\x90\xE2\xA3\x4C\x1E\x09\x69\x34\x25\xBA\xF0\x53\x62\xB9\x66\x78\x62\x32\xF9\x1C\x0E\xEE\x38\x51\x68\x0A\x84\x45\xC1\xD7\xBC\x86\xAD\xBE\x07\x09\x13\x2E\xE7\xA3\x85\x83\x14\xCA\xCF\x65\xD5\x0A\x19\x1A\xB9\x8E\x74\x32\x25\x6A\x1F\xA8\x75\x39\xF9\x38\xE8\x70\x95\x71\xAA\x52\x2E\xAF\xAC\x39\x26\x83\xC9\x1A\x7C\x45\x70\x26\xCB\xE4\xA7\x8F\xAB\x73\xE4\x37\xC8\xAC\x15\xE6\x10\xAD\x7B\x28\xCA\xCA\xD2\xB1\x0B\xEB\x2C\x07\x4F\x73\xD4\x45\x65\xA4\xC5\x21\x76\xF8\x64\x11\x4A\x1A\x6B\x1A\x4E\x82\x23\x50\x44\x1A\xC6\xFD\x33\xD2\xFE\xFB\x91\x73\x1F\x14\xE4\x01\xB5\x91\x7D\x26\xD4\x6A\xCB\x6E\xB7\x07\x53\xB4\x7A\x1F\x42\xD5\xF2\x28\x27\x90\xB9\x4A\x18\x3F\xFC\x98\x6E\x42\x7C\x95\x00\x66\xBB\x1D\x6A\x72\x38\x60\x64\x42\x17\x54\x94\xE6\x35\x00\x2F\x07\x92\xC3\x81\x22\x04\x7E\x7A\xA4\x81\x30\xD4\x1B\x7E\x07\xA9\xD7\x9C\x62\xA0\x9C\x68\x55\x1F\xE4\x95\x6A\x19\x02\xC8\x5E\x19\xDC\x49\x51\xBF\x99\x0B\x4E\x9D\x7F\x65\x70\x07\x79\x32\xA5\x7C\xB1\xD4\x42\x23\x32\x3A\xA3\xAC\xB6\x42\xEB\xBC\xD2\x4E\x11\x20\x1F\xA7\xE1\x6C\xDC\xC5\x86\xDE\x22\xE0\xCE\x4A\xCB\xFA\xDE\x11\x92\x37\x5E\x09\x9D\x6E\x11\x32\x64\xB2\xA2\xEF\x3D\xE7\x5E\xD5\x20\xDB\xD5\x09\x41\xBB\xE9\xB3\x94\x21\xD3\x6C\xD6\x21\x2F\xC0\x15\x31\x06\x54\x23\xD6\x75\x00\x37\x83\xB4\x51\xEC\xD6\x5E\x60\x98\xDC\x7B\x1B\xD9\x06\xE1\xB4\x97\x83\x0C\x3E\x51\xD1\x4E\x83\x76\xFA\xC1\xA9\x54\x62\xB9\x12\xBD\x59\x47\xFD\x4A\x56\x7C\x25\x2B\x0B\x2A\x59\xE1\x4A\x5E\xDE\xAB\x24\x92\x4A\xDC\x8E\x2F\x86\x3A\x7B\xA4\xD2\x6C\xCE\x3B\xD2\x62\xB3\x71\x31\x19\xA9\x1D\xEE\x7A\x20\x69\x6E\x03\x7F\x8C\xB1\x24\x66\xD0\x15\x51\x66\x65\xA6\x26\xF4\x52\xF9\xBE\x4B\x84\x2B\xE0\x47\xDC\xD6\x89\x00\x74\x41\xD2\x08\x60\xA5\x86\xE4\xAC\x60\x08\xE2\x4C\x59\xE6\x18\xBA\x04\xF4\xBA\x6C\x38\x25\x19\x2F\xA5\x04\x3D\x08\x51\xF9\xBD\x8F\xB7\xB0\x54\x94\x37\xB1\xFC\x9D\xCB\x02\x4B\xA5\xF1\x33\x7F\xBA\x37\xD7\x20\xCD\xAD\xA9\x47\xA8\x88\x9F\x10\xE0\x7E\xD4\x9D\xD9\x35\x6D\xD4\xA9\x1C\x1F\xEF\x61\x6B\x3C\x17\xB4\x30\x82\x10\x1F\x0F\x8E\x9A\xD3\x10\xBB\x25\x61\x96\xD8\x4D\x1B\x17\xAC\x06\xF8\x6B\x05\xEF\x19\xFC\x75\xA4\xFD\x75\x7F\xFB\xEB\x7A\x20\x11\xE3\x31\x43\x85\xC6\x40\xF8\xC2\x54\x22\x38\xCE\xB9\x10\xD3\x59\x2F\x6E\x70\x9C\x3E\x59\x53\xDC\xEB\xC9\xF3\x60\x5D\x70\x0A\x62\xF7\x6C\xD0\x40\x08\x94\x4F\xE0\xF4\x46\x6D\xA6\x4E\x41\x04\x66\x5A\xBE\x5F\xAC\x0F\x24\x62\x25\x1A\x26\x68\xDF\xA7\x24\x51\xAC\xAE\x91\xAC\x9A\x99\x52\x4E\x55\x2C\xAB\xEF\xAF\x70\x4D\x44\xD5\x6A\x46\x3F\xA4\xA7\x47\xFC\xD3\x59\xED\x91\x9E\xAE\xF8\xA7\x2B\xF3\x4F\xDD\x73\x81\x77\xEB\x0B\xB2\x4B\x5A\x85\xDB\xFE\x54\x67\x85\xC7\xFC\x81\x5A\x83\x6A\xF8\x50\xE7\xD8\xAB\x39\xD9\x96\x7A\x65\xB0\xE2\xB6\x25\xE4\x09\x55\xBE\xFB\x59\xDF\x7D\x35\x69\x93\x09\xD8\x29\x85\x67\x85\x35\x2A\xBF\x55\x08\x06\xEC\x83\xE4\xED\xDC\xCD\x42\xEB\xCC\xA6\xF0\x75\xE8\x25\xD0\x7D\x94\xD2\x23\x64\x1D\xCA\xD1\x66\x65\x1D\x5F\x93\xD9\xC6\x0A\x30\x67\xD5\x8B\xE8\xA5\xDA\xB0\xD6\x5C\x87\xA8\xFE\xEF\xF2\x01\x44\xDD\x3C\xE3\xCE\xB0\x36\x8D\x8A\x60\xC6\xC7\xC4\x0F\x80\xEE\x78\xEB\x1D\x4A\xE9\x6D\x08\xDC\xB3\x9F\x66\xFF\x46\x6E\xDB\xBD\xBC\xB6\xA8\xF2\x63\xC8\xCB\x42\x3E\x32\x96\x7D\x82\x7D\xF3\xF0\xB1\x39\x26\x33\x0F\x94\xD4\xA9\x51\x78\x7B\xF1\xF4\x70\xA5\x58\x3D\x7E\xD8\x9F\x65\xAB\x76\xEE\xAE\xE8\xFB\xFC\xD3\xFB\xE6\x9F\x96\x3F\x7E\x89\x7B\x94\xFD\x07\xA5\x22\x6C\xDD\xA7\x7B\xAD\x63\xB8\x7E\x69\x01\x37\x37\xC1\x8E\x72\x68\x2C\x01\xC0\xD9\xA6\x0E\xDD\xC7\x09\xEF\x87\x35\x10\x62\xBD\x8F\x07\xE7\xD6\xDD\x91\x73\xCD\x8A\x7E\xB9\xE0\x0D\x97\xEF\xF4\xA4\x5A\x46\x4D\x98\xC0\x8C\x68\xD3\xCD\xB8\x68\x56\x08\xB6\xEC\xD1\x81\x39\x38\xDA\xE9\x37\x62\x59\xB8\xF9\x08\x40\x4F\xE9\x4C\x7A\xDD\xA9\xC6\x3D\x23\x10\xAA\xB4\x22\xFA\x61\xA0\x2F\xDD\xC5\x86\x30\xD5\x56\xF4\x32\xED\xB6\x2A\x85\xBB\xBC\x8C\xF7\xB3\xE5\xAF\xFB\xEE\x96\x01\x04\xE5\x8F\x5D\xEA\x48\xFE\xBD\xD6\xB3\x28\x9B\x38\xC8\x23\x80\xF6\x90\xC4\x9A\x02\x4E\x48\x33\x99\x13\x1F\x10\x5B\x31\xC6\x03\x59\x5A\x50\xDB\x8A\x48\x5C\xC9\x39\xFB\x26\x21\x39\xB9\xC9\x19\x9F\x8E\xD5\xF2\x50\x87\xCE\x6E\xD2\x62\x1F\x91\xD2\x49\x9A\x0B\x81\xAF\xC6\x1E\x4F\x60\xC3\x67\xA4\x59\xA0\x23\x27\xAC\x23\x93\x71\x9E\xCE\xB6\x13\x4A\x5B\x00\xF6\x3C\x60\x13\xE8\x94\x2C\x26\xD5\x2B\x03\x25\x41\xDB\xA6\xEF\x52\x62\x5A\x97\x12\xEE\xC7\xE1\xE0\xC8\x09\x8F\xBB\x2B\x2D\xA4\xA0\x2A\xF3\xA2\x5B\x68\x87\x2D\x34\x37\x69\x61\x28\x99\xCA\x0E\x69\x7B\x54\xDB\x36\x83\x45\x8F\x60\xFA\x8B\x4D\x30\x7D\x93\xE6\x58\x71\xF4\xE0\xE6\x64\xFF\x9A\x0F\xA8\x29\x04\xF0\x03\xB4\x92\x58\xDA\xCC\xCD\xB2\x05\x31\x05\xB3\x04\xA5\xC9\xF8\xA5\xCB\x02\x41\x4B\x3B\xD5\x96\xB2\x11\xBD\xD7\xDA\x72\xFB\x3D\xF2\xC7\x16\xBE\x47\xE9\xAE\x3D\x0A\x07\x04\x4E\xB1\x47\xD1\x79\x48\x7D\x8F\x52\xEC\x51\x98\x41\x28\x71\xA6\xEC\x5F\xC2\x1D\xEB\x5A\x49\xBC\xDE\xBA\x34\x6D\x5E\x3B\xFE\x2D\x3B\x3B\x3B\xE5\xD6\x51\xF1\x3B\x11\x32\xE0\x23\xA7\xCE\xF7\x9E\xF6\x8A\xA8\x39\x3B\x76\x1D\x12\x4D\x71\x5B\x61\x37\xCF\x43\x28\xED\xC8\xFE\x80\x91\x12\xDA\x69\xC5\x11\xA1\x2D\x1D\xF5\x4D\xE8\x28\xD2\xBA\x7C\xEE\xB2\x84\x60\x0E\x5B\x28\x56\xA4\x49\x36\x28\x30\xBC\x49\x81\xB4\xAB\x15\xD5\xC2\x48\x82\x17\xB0\x3C\x4A\xE4\x34\xC1\xEE\x5F\x38\xA9\x83\xDE\x5D\xA7\xCE\x13\x36\xD6\x21\x6D\x85\xE3\x8C\x6F\x46\x9D\x5C\x25\xF3\x52\x22\x99\x9E\x59\x17\x4E\x18\x5B\x41\xB1\xE8\x4D\x8E\x57\x57\xAE\x92\x97\x51\x42\xB8\xE1\xE5\xA5\x87\x09\x6E\xD6\xF0\x00\xC8\x10\xCA\x75\xAD\x64\xAB\x40\xD4\x24\x52\x2A\x4F\xCA\x6E\x9A\xC4\x3E\xC1\x5E\x22\x51\xCA\x97\x91\x4B\xFF\x3B\xCE\x34\xF3\xC5\x24\x6E\xF6\x8F\x67\xCB\xDC\x93\xBE\x9C\xC3\xC1\x05\xE5\x47\xA5\xE4\x70\xAE\x64\x3A\x3C\x74\x4A\x6F\x3B\xF1\xBE\xEA\x4D\x2B\x4E\x59\xD3\x63\xD0\xF2\x57\xA8\x1C\x4B\x6B\x6B\x9B\xB0\x00\x4B\xF8\xEA\xD9\xB6\x99\x9B\xB4\x4D\xA8\xED\x82\xF2\x97\xA5\x5D\x66\xAE\x5D\x54\xEA\xDB\xC4\xD3\xC2\xB3\xEB\x22\xD1\xEF\xF4\x2D\x53\x43\x9C\xD1\x6C\xF9\x7F\x5E\x96\x8D\xFB\x7D\xC0\xF6\x32\xFF\xF8\xBC\x0B\xF8\xA1\x17\x14\x9A\x59\x93\xE3\x5A\x91\x87\x70\xAD\x60\xE7\x39\x62\x11\xCE\xEB\xD9\xA2\x79\x9C\x90\x29\xB5\x40\x50\xA0\x44\xAF\x34\x9F\x20\x10\x97\x19\x20\xC6\x8A\x3B\xAE\x02\x85\x82\x02\x35\xE8\xA1\x24\x8E\x86\xD4\x69\xC9\x12\xB8\x4F\x06\x8C\x41\x1F\xDC\x86\x92\xD2\x19\xF0\xBE\x86\xBE\x7A\xBE\xFB\x0A\x94\x33\x1B\xB4\xA5\x50\x3D\xF8\xE7\x8B\x1B\x95\x75\x49\xA5\xBC\x89\x6D\x45\x3F\x0C\xAA\x71\x6F\x12\x55\xDA\x5F\x5F\x9C\xB9\x1E\x5C\x58\xB9\x56\xAE\xC4\xAD\xAE\x15\xC7\x57\xC6\x7C\x26\x22\x1B\xA7\x37\x29\xB4\x61\xF0\x3D\x81\x4F\xAB\x5E\xCE\x03\x6E\xF9\xD7\xCA\xDF\xD7\xA1\x92\x14\xB0\x7A\x9F\xFD\xA1\xD6\x7A\x5B\x6F\xB9\x56\xD9\x6C\x99\x31\x72\xC1\x43\x45\x70\x3C\x60\x59\x80\x6A\x18\xF0\x90\x73\x22\x24\x3F\x3F\xFA\x74\xAE\x62\x88\xC4\x5F\xE6\x3E\x36\xD1\x89\xC3\xD5\xD5\x9A\x40\x9B\xDA\x65\x99\x7C\xC0\x98\x19\x94\x1C\xCF\x41\xD0\xB2\x42\xB4\x88\x15\xC8\x12\x41\x8E\x87\x24\xEE\x39\xD9\x9C\xA2\xB4\x46\xB8\x30\x47\x9E\x1D\x22\x67\x2F\xD4\x41\x97\xD8\x97\x3B\x7B\xC8\x04\xF3\xA2\x2E\xEA\x44\x1D\xCB\x38\x35\x23\xE3\x34\xD9\x7C\x9A\x96\xFB\xE4\x7A\x20\xE3\xA2\x39\x19\xE7\x65\x5A\x2B\xE5\x2E\x1F\x35\xDF\x90\x41\x98\xFD\x86\xA6\xA4\x6E\x24\x36\xDA\x93\x25\x92\xE3\x0A\xDB\x67\xAF\xBA\xB7\x7D\xEC\x17\x7E\x2B\x3C\x57\x2B\xB7\x7C\x01\xD4\x63\x72\xE9\x9E\xFE\x9E\x9F\xFC\xDC\x9B\xFD\x15\x10\x2E\xC1\xE2\x37\x1F\xAB\x95\x2B\x7A\xD7\xB5\x72\x13\xBC\x94\xC9\x66\x5E\x5F\x87\x3E\x97\x95\x71\xDB\xCD\x06\x9F\xB5\x2B\x5C\xCF\x19\xCE\x55\x81\x79\xB4\x62\x3B\x12\xC3\xCD\x11\x97\x07\x27\xFC\x26\x37\xF0\x8E\x9A\xA1\xD3\x0C\x12\xB8\xDD\xB4\xA0\x16\xE2\x85\x43\x3E\xC2\x21\x98\x0D\x88\x4E\x15\x21\xF1\xCE\x21\x93\x80\xFD\x87\x92\x36\x3A\xA0\xD1\x31\x59\x36\xFF\x19\x1D\xF6\x52\x43\x42\x6C\x08\xB9\x4E\x44\xA7\x0A\xDB\x2F\x44\xF7\x0A\xA1\x68\x32\x9A\xFB\xD9\x33\xB1\x51\x5B\xE1\xB6\x7E\x33\x68\xA4\x65\xD4\x52\x48\x23\x85\xF4\x2E\xB4\x8C\xFA\xB4\x1C\xBE\xF9\x58\xAD\x91\x96\xED\x75\xAD\x91\x96\xFA\x31\x0F\x0D\x2B\x36\x81\xC2\xA3\xC4\x43\xF2\xFA\x3A\x65\x6B\x6C\x5C\x8D\x18\xCF\x6A\x8D\xED\xF2\x8F\x56\xA3\x8C\x77\xAF\x23\x4F\x52\xF2\xB7\xA4\xD7\x29\x30\x49\x6E\x19\x2F\x41\x53\x02\xCB\x60\x68\x98\x35\xF2\x6A\x48\x1E\xA5\xB3\x4E\x18\x9D\x2A\x2C\x2E\xE5\x26\x81\xE8\x1F\x15\x84\x30\x44\xBE\x45\x54\x7C\x0C\x09\x0E\x6B\xDD\xAF\x86\x50\xAC\xB6\x9B\x2A\xEB\xD5\xA3\x86\xF5\x40\x0A\xD9\x06\x96\xAC\xE7\x4A\x56\x99\x5B\xE6\xCD\x68\xAD\xD9\xF9\x46\x3B\x81\xD3\x2C\x45\xDA\x70\xE0\xD7\x21\x13\x1C\x35\x09\x13\xE6\xEF\xE8\xB2\xCE\x21\xF9\xB1\xB7\x52\x2A\x2B\xA7\x9A\x1F\xAB\x8B\xAF\xC3\xB9\xC6\x8D\x51\x9B\x90\x38\xB3\x06\x09\xB7\xD6\x05\xA7\xCE\x9F\x17\xBD\xB1\x80\xFC\x6D\x6F\xA9\xF3\xFF\x36\x08\x76\xCE\x7E\x1D\xE0\xDF\x20\x78\x2D\x23\x7C\xFF\x30\x61\x70\xBB\xA0\xCA\x32\xA7\x89\xC0\x19\xB9\xC1\x64\x6B\xD3\x3A\x75\xCA\x93\x2B\xC5\x22\xC9\x73\x87\x00\xBD\xD2\xF2\x7B\x68\x27\xCD\x26\x9C\x2A\xF1\x58\x24\x9C\x86\x1B\x12\x31\x7B\xAD\x55\x99\x1F\xD3\xFC\xC7\xA8\x03\xBB\x37\x23\xE5\x66\x70\x2A\x04\xC8\xB0\x5F\xAF\xE7\x59\x95\x3A\xE5\x80\x5A\xF0\x3F\xAD\x6F\xD2\xE8\x4E\xF9\x64\xDD\xB7\x82\x47\x10\x46\x90\xAE\x4D\x6B\xAE\x1D\x65\xD8\xA8\xFC\x4D\xBF\x69\x66\xA6\x22\xC2\xD4\xA3\x0D\x6A\x63\xBC\x41\x5D\x61\x8E\x3A\xCB\xEC\x85\x85\x0A\x63\xB5\x8E\x0D\xCC\x5C\x35\xF9\x84\xC4\xDE\xE8\x94\xC8\xD9\xDC\xAA\x4E\x60\x44\xCE\xF8\xDE\x63\xA1\x8E\x51\x22\xD3\x81\x05\xEB\x84\xFD\x5A\x63\x18\x6D\xB0\x60\xEC\x73\x71\xEC\xD9\xAC\x33\xBC\x93\x50\xF4\x09\xDC\xF9\xD0\x33\x23\xE0\x33\xE5\xC7\x7E\x55\x13\x58\x76\xF2\xCA\xA0\xD5\xC9\x9E\x48\x4C\xBC\xAD\xB7\xC2\x1E\x06\x6C\x0F\x85\x85\x97\x1A\x7F\x2A\xE3\xE2\x0D\x8F\x4D\xF7\xA9\xB7\x0F\x32\x93\xF8\x8C\x5B\xE5\xCF\x5E\xF2\x5F\x1A\xDC\xDE\x5B\x8F\xAA\xD2\x5F\xC9\x4E\xB3\xAF\x6D\x6F\x09\x13\xFD\x38\xA2\xC0\x61\x94\x81\x6D\xE2\x16\x91\x76\xF7\xD5\x61\xBB\x39\xA6\xA7\xF1\xCD\x17\xA8\xF6\xED\x16\x66\xD9\x5E\x10\x59\xCA\xD5\xD6\x49\x53\xB3\xA3\x0B\x84\x7F\x37\xA0\xE3\x75\x17\x36\x7F\x37\x08\x08\x6D\x4B\xF6\x20\xF1\x06\xB9\xAF\xB8\x8F\xFC\xF0\x00\xFD\xFB\x3E\x48\x18\x38\x8F\x4E\x71\x9D\xBD\x70\xED\xF8\xBE\x27\x60\x74\x3C\x7D\xE2\x32\x64\xC7\xD5\x13\x97\x21\xFD\xAF\x95\x3E\xAE\x70\xAD\x59\x96\x65\xEF\xB9\x80\xF0\x49\xDD\x72\x53\x5E\x17\x78\x9E\xC8\x73\x6F\x9F\x3C\x69\x47\x9E\x3A\x24\xD4\x52\xC2\xFB\x17\x31\x17\x72\xDB\x8B\xA6\x1E\x63\x0B\x27\x72\x06\x16\xC0\xF8\x70\x60\xAB\x31\x16\xD7\x6F\x2B\xDF\xF5\x85\x15\x4D\xFF\x1B\x05\xA1\xC8\x74\xD2\xDD\xE9\x18\xAB\x2A\x66\x4B\x90\x0A\xCB\xF6\x05\x5F\x58\xD9\x2B\x6C\x21\x89\xE8\x85\x6A\x92\x11\x14\x65\xE1\x6E\xA8\x8D\xB6\x2E\x3A\x4C\x73\x6A\x03\x26\xCE\x5E\x60\xCD\x05\x47\x94\x04\x85\xF2\xFA\x4D\x7F\x94\x41\x2C\x23\x90\xCA\xDA\x2F\xD7\x35\x27\x74\xA8\x49\xEF\x48\x69\xED\x8F\xBA\xB5\xDF\x6F\x4C\xEA\x09\xEA\xC7\xB6\xA9\x42\x88\x78\xA8\x23\x3F\xD4\xFC\x39\x9D\x3C\xC6\x1C\x47\xB0\x7B\x87\x26\x34\x03\x98\x8D\x0C\x44\x73\x63\x1E\xF6\xC7\x1C\x86\x63\xCD\x13\xE9\x01\xB7\xDD\x70\x18\xFD\x33\x3F\x32\x3C\x42\x93\x1D\x54\xAD\xF9\xEC\x5A\xC4\x7A\xE0\x3F\x5A\xD5\x0F\x30\xBA\x13\xBD\x8A\x4C\x51\x6B\x69\x0D\xC4\xE5\x47\x2E\x0D\x03\xEF\xA5\x40\xC2\x69\xA6\xC5\xB9\xD3\x8C\x82\x56\x4F\x67\x00\x1D\xE8\x00\x74\x3E\xA8\x25\x06\x0A\xC7\xD7\xFA\x03\xE2\xDE\x2C\xE0\x50\x60\x72\xD3\x8B\x37\x24\x58\x66\x7E\xE6\x91\xAF\x8F\x65\xAE\x09\x1B\x8A\x6E\x28\x7F\xCE\x3B\xB6\x89\x0F\x96\x40\x22\x0D\x6C\x00\xAD\xF5\x68\x97\x0D\x50\x6D\x09\xD2\x95\x3B\x5D\x0F\x5A\x77\x42\xE0\x7C\x28\x47\xDC\xE2\xBA\x66\x4C\x11\x33\xE5\x2F\xD8\x93\xCD\x94\xD5\xE6\x1D\x5C\xF0\x41\xF6\xBB\xBA\x75\x06\xBF\xAF\x36\xA2\x95\x5A\x7F\x42\xBD\x88\x97\xC8\x2D\x1F\xE7\x66\xC8\x79\xAE\x3A\xF1\x3A\xF7\xBE\x47\x2D\x0C\x69\x06\xC9\xBB\x87\x03\x7B\xCA\xCB\x45\x23\x85\xA8\x9B\x14\xC2\x95\x86\x99\x7F\x4D\x26\xB3\x61\x5C\x07\xB6\xBB\xEC\x56\x3F\x18\x9E\xBB\xFC\xCD\x29\xCF\xCB\x5D\x4F\xD5\x5E\x3D\x55\x3C\xE1\x39\x1D\xF4\xCD\x3B\xEB\x9F\xF3\x17\x10\x3C\x86\xF3\x9F\x8E\x7F\xB3\x97\x4B\xC5\x2F\xA7\xAF\xDA\x9C\x80\xFF\x86\x0F\x86\xDA\xEB\x5F\xA0\xC5\xFB\x97\xC6\x3A\xDF\xD6\x5B\x73\x19\xF9\xC4\x17\x4D\x3F\x28\x70\x26\x8F\x6E\x50\x28\xC7\xCE\x6B\x37\x28\x88\xE3\xD8\x06\xC1\x53\xDC\xB8\xF1\xB3\xC1\xC9\x2A\xC1\x5F\xC1\x83\x04\x53\xB1\x53\x9E\xAE\x46\xF4\xC4\x3C\x48\x58\x15\x37\x6E\x4C\x36\xF0\x9F\x53\x55\x8E\x57\x2F\xDB\x70\x37\x5E\x76\xAA\x2A\x40\xBB\x57\x6D\xB8\x57\x9D\x64\x00\x8B\x45\xFF\x07\xE5\x76\xE8\x18\x0A\xF5\x2F\x77\x83\x53\x15\x29\xAC\x08\xC5\x5F\x91\x66\xEE\xC6\xC4\xDF\x9B\xE0\xBD\xD1\x09\xBA\x79\xC3\xF8\xBB\x37\x0C\xDE\xCE\x8A\x94\xA2\xF8\xD5\xE9\x22\x06\xE5\x8E\x6D\xA0\xF2\xA8\xDD\xAB\xAA\x09\x28\xF7\xAA\x8D\x13\xBC\x25\xB3\xD4\x17\x82\x45\x75\x3B\x8A\x2C\xD9\xE5\xB3\x74\xE2\x9E\x65\x10\x57\x13\x18\x9F\x28\x2C\x1B\x21\x76\x5E\xBB\xC1\x19\x05\x6E\xBC\x8C\xCA\xB8\xF1\xB2\x0D\xCA\xDA\x3E\x81\xA2\x7D\x65\xE7\xD1\x0D\x08\xE9\x1D\x6C\x24\x35\x66\xB2\x41\x2B\xC9\x04\xF2\x82\xBC\x0E\x34\x63\xB0\x52\x5D\xE4\xB1\x63\x5D\xDE\x94\x1F\xFA\x56\x14\x51\x13\xF2\xA9\x48\xE4\xF2\x94\x1C\x72\x53\x68\xDD\xE4\x7C\x3D\xF1\xA3\x49\x90\x8C\x95\xCA\xC3\xCC\xBD\x30\x0B\x37\x12\xB4\xF6\xE5\x89\x53\x0F\x91\xC8\x53\xEC\x09\x87\xF3\xA9\xD6\xD7\x8E\xDF\x50\x97\x8E\xA7\x4F\xE0\x65\x50\x1B\xBE\x54\x4F\x5C\x3E\x6A\xCA\xDE\x42\xCC\x38\xAF\x2C\x9C\xC5\x6C\xB0\xA2\x4B\x59\x7B\x70\x3C\x71\xAA\xE1\xBF\x64\x77\xFD\x69\x52\x17\x15\x35\xBE\x6C\x56\xC9\x47\x60\xA5\x01\x2E\xC4\xED\xFC\x01\xA1\x48\x90\xEB\x08\x4A\xFC\x9F\xE1\x3C\x8C\x2B\x7A\xC5\x95\x0D\xFB\x20\x61\x5B\x4F\x16\x8A\x53\xB7\x18\x22\x0B\xF6\x70\xC2\xE9\x12\xB5\x6C\xBD\x26\x74\xAC\xCD\xA9\x9D\x93\x53\xEC\x31\x45\x7E\x4F\x90\x5E\xAB\x4B\xEC\x93\x7A\xEF\xF1\x7D\x4F\x5C\x86\xB2\xED\x10\x0C\x3A\x92\xD0\x79\x27\x77\x84\x08\x8B\x0A\x78\x00\xEA\x45\x77\x80\xC9\x92\x42\xD2\x2F\x8D\x91\x33\x29\x93\x91\x24\x13\xD9\xA6\x34\x8A\xBC\xD5\xEF\x0F\x0F\x67\xFD\x43\x5E\x40\x02\xD4\xAA\xA1\x50\xAC\x6E\xA4\x80\xEF\xEC\x36\x58\xC9\x17\x63\xB0\x92\xDB\x19\x2C\x7D\xBA\x40\x26\xDC\xEA\xC6\x86\xBD\xFC\xEA\x09\x37\x1D\x2C\xF0\x2F\xC2\xEB\x9A\x70\x50\x94\xBE\xD6\x1B\x22\x73\xAD\x1B\xA3\x41\xFB\x19\xE6\xA7\x37\x46\x64\xBD\xD9\x7D\x8C\x6E\xB9\xDD\x3E\xB9\x92\x99\x1D\xA3\x6D\x1C\x9C\x89\x77\xC2\xA0\x03\xD3\xC8\x6B\xF6\xAF\xAB\x27\x48\x4E\xC2\xBD\xF4\xD2\x55\xE0\x0B\x27\xA0\x58\xB1\xA0\x87\x94\x34\x2D\xE8\x99\x82\x03\xF1\xE5\x13\xC5\x85\x0A\x03\x25\x6A\xBC\xAE\x48\x20\x4F\x56\xF5\xEB\xC8\x0F\x06\x98\xF5\xBB\xF9\xED\xE7\x6C\x4F\x58\x38\x7F\x5A\xD1\xD5\x32\xF1\x36\xAF\x7D\xAD\x52\x33\xE1\x0D\x03\x8D\xB9\x1F\x79\x6F\xFB\x9A\xF4\x6D\x5F\xFB\x60\xE2\x37\x85\xAD\xC9\xA9\xBC\x5A\x04\xB0\x8F\x10\x6A\xF5\x31\xD8\x77\xB5\x56\x45\x00\x65\x57\x7A\x35\x81\x92\x2C\x4F\x5A\x1F\x83\xB2\x67\x79\x9A\x48\x27\x95\x68\x9F\x72\x5D\x4F\x08\xD4\xA6\x9E\xA0\x7E\xA5\x48\xBF\x9A\xF4\x2C\x4F\xA5\xB7\x3C\xED\xEB\x59\x9E\x78\x00\xAC\x27\xBF\x22\x5A\xA7\x48\xA8\x70\x76\x04\x90\x6C\x29\x8F\x01\x3F\x77\x64\xA7\x1D\x12\xA8\x1D\x86\x49\x37\x0C\xA9\x0C\xC3\x44\xF2\x87\xE3\xD7\x56\x86\x61\x46\xC6\x92\xE7\xC3\xAB\x05\x3E\xBB\x37\x1A\x59\x3F\x91\xEC\x7F\x66\xAB\x24\xAF\x3E\x94\xFA\x91\x57\x50\x27\xB9\x61\x7A\x2D\x0A\xFD\x90\x45\xED\x90\x85\x33\x43\x46\xFF\x9C\x9E\xCE\x0C\x5E\xDF\xAC\x4F\x3E\xBC\x76\x66\xF0\xE2\xAB\x12\x14\xC0\xF9\xD3\x79\xF0\xE2\xAE\x9E\x4A\x43\x4C\x83\x47\x9E\x6E\x03\xB3\x61\x38\x18\x3C\xB9\xAE\xB5\x18\x60\xBA\xC1\xD3\xBD\xC1\x8B\xFD\xE0\x45\x73\x83\x17\x74\xB3\x47\x51\x8C\x8C\x9A\x9F\x3D\x0A\xAC\xCC\x1E\xC5\xB3\x47\xED\x3D\x7B\x6C\x3B\x7B\xDA\x61\xCB\xB2\x7F\x3E\x36\x44\xFB\x6D\x5A\xF9\xFA\xC5\x88\x49\x57\xB1\xB3\x93\x37\xE0\x0B\xF9\x4D\xB7\x0D\x20\x75\xEA\x23\xCA\xFD\xB6\x22\xF9\xC8\xE4\xEE\x9F\xCF\x10\x8E\x9C\x9A\x21\xB7\x45\x72\x1B\x49\xB4\x03\x86\x4F\xA2\x6C\x57\x6E\x15\x82\x25\x72\xD3\xA6\xA9\x47\x6E\xD9\xE3\xB5\x27\x51\x72\x3D\x3C\xD7\x1B\x1E\xEA\x41\x00\xD6\x93\xDB\xF4\xC8\x2D\x3B\xE3\x1D\xE5\x7E\x5A\xF5\xA4\x9A\x6E\xFD\x3E\x86\x03\xA1\x17\x0F\x84\xDE\x7D\x20\xA2\xDE\x40\x44\xDD\x40\x74\xD6\x88\x6E\x20\x66\xF8\x7C\x57\x42\xBF\xA0\xDC\x1F\xDF\x94\xD0\xA1\x14\x75\xC8\x7C\xC3\xDE\x44\x56\xBB\x10\x59\xCD\x10\x59\xAE\xF7\x38\xEE\xDB\x8D\xC8\xAA\x47\xE4\xEE\x57\xC8\xE4\xBE\x09\xD1\x43\x22\x7A\x38\x4F\xF4\xB0\x25\x7A\x38\x6F\xE0\xD8\x93\xE8\xA1\x9C\x1B\xDD\x3A\xD1\x3F\xAB\xDC\xE7\x6E\x89\xBB\x6F\x89\xE8\x7F\x03\x9C\xBD\x90\xE0\x73\x9C\x3E\x1C\x00\x26\xBF\x1A\xAE\x1C\x7A\x55\xBF\x6E\xB2\x68\xE1\xD0\xED\xC2\x31\x99\x5F\x37\xC2\xDE\x10\x84\xF3\x43\x10\x76\x7C\xEF\x3F\xBE\x99\x6C\x91\x56\x7F\x79\xC9\x16\x08\xBC\x4C\xBC\xA9\x5C\xF9\x92\xB3\x38\x04\x5E\x64\xCC\x8F\x7F\xAD\xBD\x1E\xB7\x4B\xCB\xD4\xE2\x96\xA9\xDB\x6E\x99\x5A\xDC\x32\x99\x57\xBD\x96\xE9\x45\x3C\xF9\xA2\xE5\xF0\xAD\xF3\x63\x96\xDD\x35\x63\x1E\x02\x45\x6E\x7E\xBB\xDE\x9F\x06\x6C\x57\x5A\x61\x7F\x19\xC5\x10\x12\xE4\x75\x99\x3D\x1E\x6A\xB3\xAD\xBC\x95\xE0\x85\xA0\x97\xB8\x1F\x79\xEC\x6B\xBB\x3D\x3B\xF6\x64\xBB\x19\x6B\x15\xE8\xBD\x1D\x44\xE4\x04\xA8\xF3\x60\xE8\x9F\xD0\xEE\xE6\xC1\xC0\x2E\xE5\x9A\x0D\x01\x5F\xB2\x2A\xC0\xBA\x4F\x04\xB8\x87\xF8\x64\x20\xBB\x70\x9C\x6C\x87\x83\xAF\xA9\x22\xD7\x65\x16\x98\x13\xB8\xAD\x03\x8A\xE8\x2B\x11\x44\xBB\x4D\xF8\x18\x74\xC5\x41\xE3\xBC\x8D\x0A\x71\x03\x12\x71\xBD\xB2\xDB\x05\x0B\xF1\x51\xFD\x00\x58\x30\xAB\xFA\x7E\x8E\xBE\x08\x67\xAA\x16\xE7\x0B\x4B\xEE\xA0\x83\x16\xB0\xEB\x45\x08\x61\xAF\x05\x54\xD2\xCA\xC0\x07\xA3\x8A\x33\xDA\x2A\xB9\x04\xBB\x7B\x7F\xD3\x21\x1F\x51\xED\x2F\x27\x43\x04\x3F\x5C\x19\x3C\xB4\x87\xCC\xFD\x47\xCD\x32\xFF\x5A\x39\x6A\x70\x07\xF6\x6C\xD0\xA0\x4A\xE7\x96\x1B\xB6\x5F\xFC\xEF\x97\xA4\xDF\xB8\xB7\xB2\x87\xF4\xAB\xAB\x18\x37\x63\xA7\x2B\xD3\xCB\x7E\x8F\x5A\x64\xE7\x09\x92\xAB\x96\xED\xC0\xBA\x17\xBC\x37\x6B\xF6\xB3\x25\x29\x78\xC6\x1F\xBF\xBC\xA0\x7A\xD9\xC6\x7B\xAC\x3B\x1C\xFE\x7E\xFA\xC3\xBD\xFF\x4F\x24\x46\xFE\xBD\x23\x50\x49\x6A\x6C\x18\xC5\x4B\xC5\x28\x1B\x4F\xF6\x1F\x28\xF7\xE5\x7A\x69\xC6\xA0\x99\xDF\x41\xD3\xAD\xFC\xD7\x64\x28\x5A\x12\xDB\xDA\x8A\x2E\xCB\x9F\xB8\x24\x5E\x27\x8F\x3A\x7D\xAA\x38\x00\xB1\x7B\xBF\x22\x54\xA9\xF2\xC3\x1C\xC4\x82\x7B\xD5\xA4\xE1\xFB\x1D\x51\x63\x88\x0F\x99\xF7\xAB\xA3\xA6\x64\xD7\xE4\xC0\x25\x1C\xFA\xC9\x0F\x83\x43\x5A\x9C\x9B\x9F\xC3\xD2\xA8\x14\x88\x3D\x91\xF9\x76\x0F\xB8\x0A\x0B\x7B\x4E\x1D\xD5\x41\x7E\x80\x84\x55\xCF\x1B\xB1\x4E\x28\xC1\xBB\xBC\x19\x21\x07\xEE\x87\xD0\xE5\x38\x4C\x38\x30\xE4\xEE\x1B\xBB\x23\xD4\xC8\x64\xA6\x01\x47\x20\x76\x40\x4F\x74\xBF\xE9\x9A\x1E\x42\xAF\x75\x47\x1A\x7A\x53\x1A\x98\xEC\xDE\x40\xD0\x5C\x35\x81\x4A\x85\x05\x36\x78\xB6\xC5\x73\xED\xDD\x07\xA1\x2B\xDB\xF6\x26\xD8\x36\x5B\xA5\x1C\x35\x10\x52\x52\x56\x9F\x6F\x1F\x1B\x56\x8D\xF8\x58\xA8\xCE\x28\x6C\x3C\x95\x13\x34\x4E\x1A\x0A\x59\x8B\xC3\x3B\xBF\x41\x4B\xFD\x61\x41\x4F\x8C\x64\x10\x79\x27\x43\x7D\x0C\xD2\xAB\x5C\x26\x17\x31\x62\x0F\x0D\x39\xC9\x25\x47\xA2\x0C\x52\x5A\xA6\x73\x7C\xB9\xB7\x4C\x67\x90\x0F\x1C\x35\xE4\xBA\xCE\x18\xCD\x21\xEB\x8E\x23\xB2\x76\x99\x1E\x79\x1F\xB4\xD4\xFB\xA0\x55\x29\x19\x9D\x3A\xF1\xE5\xA9\x49\x07\xA3\x49\x11\xE4\xFB\xB3\x0C\xF4\x2B\x94\xC6\xAD\x1F\xF9\xC5\x0F\xC9\x19\x33\xA1\x29\xA4\x4E\xF1\x1B\xA0\xDD\xF5\x60\xC3\x45\x17\xCA\xFF\x83\x78\xBB\xEC\x17\xA0\xDA\x02\x28\x5E\xA6\x5F\xC4\x75\xC5\x1E\xE8\xF8\xC2\xEC\xB3\x87\x7B\x9C\xF1\xDC\x5C\x15\xC4\x0D\xFA\x79\xC5\xDD\x88\x57\xF4\x75\x32\xD6\x4C\x7A\x15\xBF\xB0\x6B\xCB\x5F\x2B\x2D\x7F\xA1\x5F\xEC\x07\xA9\xE5\xE3\x6E\x56\x52\x49\x4E\x6D\x94\x1F\xA5\x27\x05\x61\xC8\x96\x27\x0A\x5A\xFB\x9D\xA5\xC0\x42\x49\x56\x50\x09\x44\x03\x59\xCB\xEC\xC9\x22\x70\x7F\xF4\xF4\xE0\xE8\x26\xA2\x6F\x19\xE3\x22\x67\x4F\xCE\x62\xD5\xB3\x2A\xC5\xF8\x8F\x33\x2F\x4F\xE6\xBE\x6F\x09\xA1\x57\xF4\x12\x9F\xD5\x0C\xDB\xC6\xBC\x5A\x10\x1D\x3E\xA1\xAA\x04\xFF\x3E\xAF\xAA\x1C\xFF\x3E\xA7\xE8\xF0\x11\x62\xF7\x14\x0F\x44\xC2\x9E\xB4\x3B\x83\xAB\xCF\x06\x22\x5F\x9E\x1B\xCA\x97\x7C\x55\xBF\x47\x41\x8C\x8D\x7D\x4A\xB1\xBC\x79\x4E\x1D\x35\x8F\xF2\xCF\xA7\xD4\x51\xB3\xA3\x78\x8C\x89\xA0\x3B\xAA\xE1\xC2\x64\x0E\xC7\x2B\xFA\x59\x69\xCF\xCF\x49\x7B\xAE\xAB\xAA\x10\x28\x04\x8A\x7E\xC0\x45\x8C\x56\x2A\xC6\x06\x51\xE5\x4F\xB1\x2C\x74\x01\x99\xD8\x5D\x50\xFE\x3C\x8F\x37\xE3\xEC\x7D\x26\xE8\xC4\x81\x3A\xA4\x5F\x87\xE2\x8A\x33\x5E\xE1\x07\xCA\x05\xE5\x87\x68\xB4\x46\xE2\x9B\x5C\xD6\xC9\x8A\x9E\xF3\x0F\x14\x25\x26\x1F\x65\x90\x50\xDE\x6A\x5F\xAF\x3E\x86\xE2\x2B\x27\x27\x08\x17\x9C\xAA\x0A\xBC\x4C\x18\x0C\xB8\xC5\x1D\x69\xC5\x7F\xCE\x6E\xCF\x3F\x43\x27\xCB\xDA\x59\x3A\x7E\xF9\xCD\xE0\x74\x11\x62\x0F\x3F\xC2\x81\x34\x7C\x9B\x0D\x2A\x72\x51\x47\xEE\xCF\x83\x07\x29\x4E\x9A\x3E\xC6\x42\xFE\xB3\xE8\x27\xA1\xFB\x4D\x94\x24\x50\x54\x19\xEA\x15\x45\x85\x2F\xBD\x40\x6F\x3B\xC9\xF1\xAF\xDA\xC3\x1A\x45\xA1\x10\x19\x9B\x9E\x78\xC3\xCA\x37\x7E\xC1\x87\x47\x26\x0D\x07\x9F\x27\xD4\x2F\x14\x17\xA7\x7C\x8A\x30\xA6\xDE\x1C\x61\xF3\xB4\x25\x9D\xF7\x4C\xDD\x4D\xB2\xE6\x29\xF2\xD5\x93\x6A\xB7\x79\xF6\xA4\x92\x89\xF6\x24\x45\x1E\xFE\x24\xB5\x32\xE1\xD1\xD2\x4E\xD1\xB1\xE4\x94\x97\xB8\x3C\xE6\xDB\xCA\xE9\xC1\x6D\x36\x73\xBA\xC4\xD9\xC1\xED\x90\x6F\x5B\x97\x0C\x6E\xB3\x35\xCE\x95\x72\x69\xF8\x12\xE4\x52\x67\x8B\xB9\x40\xF5\x96\x65\xEC\xD0\x0B\xCA\x2B\x11\xDF\x3D\x52\x89\x57\x20\x9E\xD2\xAD\x03\x07\x18\xF7\xE3\x1E\xE9\xCF\xB8\xF7\x2A\x09\x36\x32\xEE\x3D\xDD\xCF\xCF\x2A\x09\x2D\x32\x6E\x47\xFB\x5C\x96\xEE\xF3\xAA\x41\x81\xFC\x97\x86\x9E\xE0\xBB\xEF\x50\xF4\xD7\x7C\x5A\x81\xF1\x31\x27\x6F\x57\xEE\xF3\x5A\x1C\x92\x6C\xF9\x6B\x97\x19\x9A\xCE\xA9\x55\xFD\x73\xF8\x56\xF0\xCA\xE0\xBA\x02\x03\x76\x55\x7F\x58\xB9\xEB\x81\x7F\xD3\x57\xFD\x76\xD5\xB8\xFB\x9B\xE3\x57\x70\xE1\xC0\x7A\x2C\x87\x39\x51\x10\xE2\x91\xF6\xD7\x4A\xFB\x0B\xDA\x5F\xCB\xED\xAF\xB2\xFD\x95\xF8\x2E\x61\x7D\x1F\x55\x60\xCB\x5F\x15\xC7\x82\xE0\x70\xA0\x25\x0F\xBB\x71\x1A\x1B\x47\xE7\x8C\x47\xCD\x0B\xB2\xB3\x3D\xAE\xFE\x71\x11\xB8\xA7\xDE\x12\x75\x5B\x26\x7D\xD5\xFD\x39\xC1\xD6\xEF\xEC\xEC\x24\xA0\x8F\x5F\x79\xF3\xC5\xE3\xC9\xF6\x55\xD0\xC7\xFF\xEC\xF1\x9D\xEB\xC1\x57\x4F\x2B\xB2\xC7\x5A\xEC\xE6\xAA\xBE\xA2\x39\x9C\xFF\x13\xD8\x5D\xF5\xCA\xE0\x59\xCA\x8B\x5C\xBE\x93\x4E\xBD\xC2\x55\xFD\x56\xAE\x28\x3C\x21\x89\xC5\x8C\x7B\x2B\x8E\x4B\xF9\x2B\xB4\x23\x8A\xDA\xEB\xE7\xE8\x9A\xD0\x3D\xDE\xAA\xAA\x10\xFF\x7E\x82\x13\x17\x3E\xCB\x82\xCF\xB8\x27\x75\x4F\xF0\x19\x8E\x23\xA3\x3F\x4F\x6A\xCE\x36\xBA\xB9\xAA\x3F\x88\xD4\xBF\x42\xB8\x86\x6F\x57\xA8\x2B\xF3\xF7\x41\xF9\xAB\x24\xA2\xC2\xF2\x2F\x48\x6B\x36\x87\x83\xEB\x8A\x88\xF2\x79\x5F\xFA\x95\x9E\x58\xF5\xDD\x93\xEE\x98\x43\xE6\x8A\x3A\x6A\xDE\xE4\x7D\x7B\x9E\x57\x75\xC2\x0D\x94\xE8\x7E\x1C\xED\x9C\x7D\xCA\x38\xAD\x17\x3D\x7E\x4E\x79\x7C\x81\xF9\x78\x2B\x0B\xC9\xAB\x07\xF1\x56\x66\x3E\xDE\xCA\xAC\xE8\x8F\xAA\x7A\x44\xBB\xFF\xA4\x0D\xB8\x4A\xFA\xF1\x53\x44\xFA\x8F\x2A\xB6\x08\x8C\x38\x70\x32\x6D\x23\xAE\xD2\xDD\xBF\x68\x43\x1B\xA5\x3B\xD4\xF0\x8C\x39\xE8\x39\x62\x92\x74\x55\x3F\xAF\x88\x10\x12\x6F\x48\xCD\xF1\x0D\x11\x67\xF2\x84\xB3\x84\xDD\x2F\x34\x64\x62\xF6\x46\x48\x9F\x03\xC3\x9B\x0C\x30\xEE\xD3\x83\xA7\x58\xD3\x37\x30\x71\xDF\x74\xD4\xDC\xCF\xBF\xBE\xE1\xA8\x59\xE1\x91\x96\x01\xC4\xB2\xA9\x08\x59\xAE\xFC\x38\x91\x43\x11\x33\x44\x9D\xB6\x45\x9A\x43\xE6\x49\x7D\xD4\x5C\x51\xD8\xD8\x0F\x2B\x49\x3D\xAE\xA6\xAF\x0C\x28\xE7\x38\x44\xA0\xA6\x75\xC4\xB0\x90\xEA\x95\x01\xA1\xAE\xAF\xE8\x2B\x0A\x19\x35\x11\xCD\xD1\xD0\x36\x91\x6A\x2F\x7F\x4D\xEA\x5C\x96\x1E\x7C\x62\xD0\x03\xD9\x45\x25\xFD\xEA\xBF\x06\xF7\x4F\x2D\xC7\x24\x33\x7D\x59\xE6\xA0\xA1\x56\x7D\x9E\x69\x79\xCD\x6D\xD7\x57\xC9\x5F\x01\x7B\x80\x83\x95\xCB\xE7\x41\xF9\x31\x62\x0E\xA2\x38\xB6\xEE\xC7\x2E\x89\xD4\x79\xAA\xC5\xFD\xB7\x5D\x90\xDC\xA7\x8C\x8A\x7A\x79\x96\x07\xC9\xCD\xD9\x39\xC6\x8A\xD3\xF8\x83\x45\x3F\xEB\x98\x45\x05\xE7\x9B\x9B\xF1\x38\x08\xF1\x7F\x8A\xFE\x0D\x75\x98\x81\x7D\x85\x8A\xEA\xF0\x04\xC3\xD5\x93\xAE\xC8\xD0\x15\xA1\x53\x27\xA7\x2B\x3A\x28\xFF\xFC\x32\xD9\xDD\x72\xDA\xCD\x13\x14\x8A\x6A\x78\xA2\x93\x05\xE2\x15\x2A\x72\x5A\x58\x9C\x61\x7A\x72\x0E\x8F\xA3\x82\x19\x41\xC0\xD9\xCA\x38\xC5\x9B\x15\x30\xB8\xDD\xB6\x0C\x85\x7B\xE3\x86\xD9\x70\x7A\x6D\xCA\x69\x40\x7D\x55\x9C\xE4\x85\xB2\xC1\x13\xE0\x24\x97\xB4\xE6\xF7\xA0\xB8\x73\x7D\x85\xD2\xE5\xE5\x6F\x95\xB7\xAD\xCC\xFF\x98\xB9\x9F\x72\x98\xAD\xE8\x9C\xEF\x72\x46\x33\x4B\x3B\x63\x82\xE4\xA0\x06\xAF\x0D\xBA\x36\xDB\xB1\x8A\x54\xBE\x9C\x8E\x5E\x94\xF4\x52\x13\x89\x89\x8E\x19\x2A\x8A\x4F\x0F\x40\x03\x80\x82\x2D\x71\x4B\xF9\x84\xB4\x8A\xD0\xA4\xA4\x09\x86\x7C\xE3\x1D\x97\x53\x5E\x91\x37\x32\xDF\x70\x0A\x46\xCF\xC8\xE9\xD5\xAF\x73\xD9\x5F\xBD\xC8\x81\x9E\x0C\x06\x7A\x6E\xA4\x29\xCF\xFE\xDC\x70\x37\x12\x30\xB8\x70\xC8\x9F\xDB\x6D\xC8\xFD\x40\x6F\x36\x04\x92\xD3\x32\x80\x8C\x7D\x50\x19\x49\x1B\xF8\xD7\x1F\x7B\xB7\xDD\x9C\xFE\x1B\x19\xFE\xE7\xFE\x96\x0C\xFF\x07\x26\xAA\x4D\x63\xF3\x42\xB0\x5E\x87\x5D\x16\x1B\x89\x3A\x8D\x7C\xD4\xA9\x5A\xD1\x49\x1D\xB3\x9D\x86\x82\xCB\x97\xEA\xB4\xA9\x47\x14\x75\x9A\xF9\xA8\xD3\x11\x64\x83\xA8\x53\x09\x84\x7F\xA7\xB7\x7F\x2C\xD7\xB2\x3D\x27\x08\x6D\x0A\xAC\x59\xC2\xA5\x83\x80\xC4\x96\xC5\x77\xB9\x1E\x41\xBC\x5E\xC7\x83\xA8\xD3\x78\x0A\x29\x44\xFD\xA8\xD3\xD1\x20\xEA\x54\x3C\x75\x39\xEA\x14\x2B\xAA\x92\x0C\x92\x2A\x82\xA4\xCD\x1F\xC6\xF8\x08\xBB\x04\x61\x32\x20\xB7\x25\x9F\x51\x50\x2E\xA7\xDE\x28\x0F\x69\xB3\x5E\x27\x83\xD6\x24\x53\x50\x6E\x89\x9E\x91\xC7\x49\x5E\x7E\xD2\xF7\x70\x89\x6A\x6F\xBB\x18\x65\x10\x41\x42\x44\x8A\x3D\x91\x12\x88\x5B\x22\xD5\x89\xDB\xC6\xFD\xA2\x40\x51\x25\xD2\xBE\x04\xD7\xCD\x55\xFD\x72\x48\x70\x1D\x04\xFE\xB3\x04\x89\x2B\xFB\x8D\xE6\x5E\x2F\x13\x52\xC2\xAA\x5E\xE6\xC8\x9F\x04\x78\x74\x28\xA1\x68\x32\x0C\x0A\x4E\x7A\x41\xC1\x75\xC2\x5E\xBC\x5D\x08\x27\x6F\x8E\x2C\x67\x47\xA6\xA2\x81\x86\x8B\x81\x13\x22\x72\x85\x60\x9D\xFA\x20\x9D\x97\xE1\xD8\x45\xB4\x2F\xA0\x86\x49\x9B\x42\x48\x0E\xE9\x04\xF5\xD2\x90\xF6\xF5\xB8\xAD\x0C\x21\xDA\x77\xC9\xE3\x2A\xD1\x5E\xE2\xB9\x60\x60\xF9\x09\x0F\x99\x87\x8F\x0A\x37\xA3\xE6\x74\x56\x2A\x20\xC0\x5A\x6F\xA3\x58\x50\xC9\xB1\x7E\x25\x64\xA9\x08\xDD\xAF\x04\x0D\x44\xFB\x9E\xE0\xEA\x12\x77\x70\xAE\xBA\x44\xAA\x5B\x42\xD5\xF2\x70\x70\x96\xBD\x1E\x13\xB7\xD4\xD4\x49\x9F\x3B\x92\x8E\x3B\x74\x06\x29\xEB\xF8\x7E\x5C\xDC\xCB\x1B\x39\x49\x8E\x51\x74\x44\x63\xAD\x55\x80\x7B\xB9\xFC\x5C\x5D\x94\xEF\xA0\xF9\x3D\xE6\x70\x00\xB7\xD9\xD4\x13\x97\x3F\x82\xBC\x1B\x6F\x90\x39\x68\xCC\x28\xDF\x01\x44\xEB\xD5\x08\xAF\xCC\x31\x88\x58\x0F\x8F\x5C\x8E\x7B\xE6\x11\x8E\x6A\x06\xA3\xB3\x95\x81\xAC\x1A\x71\xF4\x34\xF9\x07\x3D\x4F\x19\xD6\xC7\x50\x08\x2A\xA3\xFF\xEC\xF9\xA0\xF1\x3F\x9F\xED\x7E\x3E\xD0\xFE\x3A\xD2\xFE\xBA\xB7\xFD\xB5\xDC\x74\x95\xFA\x5F\x2F\x04\x28\xAD\x47\x12\xA0\x05\xE3\xD6\x43\x3E\x71\xD0\xA0\x40\x69\xFB\x7C\xC2\x83\x38\x8E\x18\x56\x93\x8C\x94\x31\xB2\x60\x84\x62\x5E\x62\x3C\x2D\xE7\x93\x95\x0D\x71\x1B\x3D\x52\xC5\x28\xB0\xF0\x7A\xBB\xE9\x04\x48\xF7\xBC\x8E\x4F\x15\x5A\xD8\xA0\x24\x36\x68\xCD\x8F\x2F\x87\x8C\xB0\x9D\xE2\x6E\x4C\x43\x88\xC5\x18\xE9\x19\x02\xDF\x87\x68\xDF\xB7\x09\x1F\xE0\x57\xD8\x56\xFA\xD0\x73\x00\x67\x20\x9F\xE5\x8F\x94\x5F\x54\x8D\x44\xE9\x2E\x73\x70\x0A\x16\x51\x45\x8C\x94\x99\x4A\xC3\x72\xF2\x7F\x87\xDD\xD8\x13\xC8\x28\xC9\x0F\x0F\x0E\x1E\x2E\x1D\x35\xE5\x80\x77\xA1\xA1\x77\x09\x34\x73\xB4\xEF\xCA\x2D\x4C\x16\x1A\x04\x8E\xD5\x41\x6E\x24\x61\xC4\xC0\xED\xEF\xE4\x9D\xAE\xEA\x24\x6E\xDD\x17\xAF\xD4\xF8\x64\x81\x84\x8D\x58\x70\xF4\x84\x6C\x7A\x0B\x42\xF6\x44\xA1\xFD\x61\xCF\xAD\xCB\x1E\x5C\x1C\x22\xC1\x9E\x47\x99\x93\x9F\x6B\xD8\x84\x82\x4C\xC6\x52\x33\x90\xB9\x18\x79\xD3\x77\x3B\x7D\x13\x86\x80\x59\xE5\x08\xE8\x65\x8A\xF0\x69\xC9\x54\xA7\x8B\x88\xFD\xB0\x74\x9E\x97\xB1\x85\x02\x7D\x45\x2F\x73\xE3\x6F\x43\xA6\x8F\xBA\xDE\x8D\x16\xC8\xF4\xB8\x2F\x6E\x6E\x26\xD3\xD3\x59\x81\xBE\xCA\x8D\xC1\xBE\x11\x3A\x68\xEF\xE4\xE3\xAA\x56\x09\x05\xDF\xED\x1D\xB7\x2B\x36\xB3\xEE\xBC\x07\xF7\x8F\x9A\xA2\x78\x6F\x2B\x9C\xB8\x8E\x7A\x91\xF4\x12\x36\xEF\xF1\x69\x08\x16\x20\x21\xB5\xAB\x8D\x8D\xA5\x39\x62\x67\x62\x63\x17\x62\x8D\xA5\x1C\x1B\x9B\xB6\xB0\x00\x29\x01\x5A\x41\x72\x9E\x42\x0A\x18\x6D\xBC\x17\x1B\x2B\x95\x67\x1D\x06\x76\xD4\x80\x11\x7C\xE7\x99\x60\xD9\x0F\x19\x6D\xBB\x63\x4A\x98\xD3\x6E\xE5\x0C\x96\xE1\x3F\xCC\x8A\x4E\x78\x9F\x9A\x7B\x3C\xC0\x07\xE4\x58\x5D\x28\x72\x1F\x3E\x7C\x98\xE1\x4E\x18\xE3\x43\x30\x35\x04\xC5\xC3\xA0\x04\xF6\x60\x29\x12\x01\x7B\x2F\x03\x74\x3C\x40\x49\x83\xCB\xE7\x2F\x8B\x7B\xF7\xBD\xE5\x6F\x76\x3F\x7F\xC3\x9B\x5B\x56\xF4\xBD\x87\x03\x4D\x36\xC5\x65\x1F\x96\x76\x3C\x40\x41\xA1\x48\x6B\x03\xED\x26\x4D\xF9\x9D\xDF\x2A\xAA\xE3\xE1\xA0\xAC\x43\x9F\xC0\x84\x33\x06\x1E\x0E\x26\xEE\x06\xE7\x61\x21\x48\x13\xB1\x28\x4B\xBE\x0F\x42\x6D\xA2\x7B\xCB\x1C\xF9\xA6\xCE\xE3\x6D\xFB\xF2\x20\x58\xD5\x07\xC9\xB6\x68\x71\xE6\xD2\x35\x64\x1C\x9C\x8F\x6F\xF7\x50\x4C\xEE\x95\xC3\xCE\xE0\x90\x39\x5D\x47\x64\x00\x3A\xBE\xB3\x73\x5D\xEC\x9F\x11\x92\xA8\xAC\x15\x0D\x04\x11\xF3\xF4\x94\xBC\xDD\xAF\x5D\x7C\xF3\xF1\x2B\x6F\xBE\x58\x47\xC7\x03\x5C\xB0\xBE\x7A\x4A\x31\x45\xD8\xC7\x7B\xC1\x40\x74\xD4\xBC\x16\x15\x53\xE8\x14\xD3\x31\x8E\x41\x00\xAA\xFC\xE5\x4B\x9C\x77\x06\x87\xA4\xBD\x7C\x41\x29\xBB\xCD\xDF\x2F\x79\x40\x14\xC5\x31\x98\x7A\xDD\xE9\x37\xD6\x86\x22\x98\xC5\xAA\xDB\x07\x26\xB1\xCE\x36\xB5\xF6\x19\x4F\x90\x42\xF2\xBE\x3E\x43\x11\xD2\x7F\xC7\xA3\x6B\x92\x5F\x2E\x1F\x5C\xBB\x8F\x0B\xCA\x9B\x5D\xD5\xA5\x24\xC7\x3E\x39\x5B\x3A\x21\x00\x72\xD6\xEC\xCC\x23\xB4\x30\x80\x29\x7B\xDD\x13\x5E\xD9\xBA\xBB\xD8\x38\x7D\xC1\x6D\x3F\x86\x72\x63\x55\x27\x99\xDF\x65\xCD\x40\x3D\x65\x36\x08\x82\xEC\xE0\x4D\x14\x56\x7E\x68\xFB\x0F\xED\xCC\x43\xDD\x7F\xD8\x9D\xCD\x65\x9F\x0C\xFB\x59\x36\x24\xFA\xBB\x85\xB6\x52\xED\x9E\x8B\x51\x61\x38\xF9\x8C\x47\xEA\x24\x63\x60\xDB\x4C\x4E\xCA\xC2\xA1\xE3\x12\x6F\x31\x13\x3E\x1E\xBA\x84\xF6\x65\x82\xAA\x46\x38\x9E\xBD\xF0\x71\xBA\xBE\x38\x73\x3D\xB8\xB0\xAD\x6D\xB5\xF4\xC0\xA0\xB6\xA9\x7D\x5A\x60\xC9\xAC\xE0\xF4\xA6\x0F\x50\xEF\x4A\x90\x0D\x5E\x3F\x80\x1C\x87\x25\x3C\x51\x18\x86\x53\x35\x10\x52\x9C\x1B\x93\xE1\xF5\xB5\xE6\x00\xC8\x88\xFA\xB0\xE1\x39\x9A\xD6\xC1\x08\xD4\x4C\x48\x31\x1D\x4E\xB3\xFF\x8C\xC1\x12\x29\x5B\x27\xB9\x3D\x33\x82\x8B\x6D\x13\xBB\x3C\xEA\x7D\x32\x2D\x10\x30\x8D\xE1\xF3\x43\xD3\xC2\x4F\x52\xFB\xEB\x98\xB1\x47\x8A\x16\xF1\xDD\x54\xA1\x00\x89\x73\x04\x11\x43\xE0\x11\x70\x96\x39\x64\x12\x0A\x72\xFD\x87\xD4\xAF\x90\x37\x0F\x0C\xEF\x0B\x71\x43\xAA\x49\x47\x45\xBA\xC1\xB0\x0A\xD2\xE0\x02\xF7\xAB\x59\x3B\xBA\x2E\x58\x38\xBA\x14\x53\xD5\xCF\x95\x41\x88\x41\xB1\xCF\xFE\xBF\xA2\x2D\xC4\x1B\xF5\xCD\x7B\xA5\xB8\x57\x27\x7C\x18\xD4\xAD\x76\x42\xCD\x76\x42\xB5\x9D\x60\xA8\x95\x3E\x89\xBA\x6E\x65\x59\x76\x25\x57\x45\x2F\x26\x53\xCD\x65\xC6\x0F\xF8\xE8\xE3\xE3\x01\x63\x4E\x6A\xF7\x23\xB8\xC5\x29\x45\x7C\xB4\x0C\xEF\x05\x85\x97\x2F\xD4\xB0\x9C\xE3\x78\x3C\xE4\xEE\x6B\x0A\x9E\xD8\x21\x0A\x11\xD4\x9A\xB6\x08\xDB\x3E\x6A\x68\x79\xB4\xA0\xD7\xD9\x7C\x42\x49\x28\x7C\x5E\xCF\x80\x96\x3C\xB6\x31\x58\x02\x2C\x25\xB4\x60\x88\x1A\x59\x02\x2D\x84\xA8\x9C\xA9\x37\x3A\x05\xF1\xB4\x8E\xFD\xDC\xD4\x14\xB3\xEA\x61\xE7\xEA\x04\x22\xDC\xBF\x61\x2D\xD5\x88\x91\xFB\x37\x9A\x3A\xA3\x59\x38\xF2\x21\xEE\xB8\x4B\xAE\x73\xC9\x35\x1B\x6F\x50\x4C\x6D\x46\x5E\x21\xA8\xF2\xAD\x57\x16\xAF\x78\xF1\x16\x6A\x63\xC7\x2B\xED\x01\x74\x2D\x81\x64\x80\x3D\x5B\x15\x10\x55\x16\x0A\x1A\xAB\x0C\x46\x4D\x65\x21\x77\x07\x59\xCA\x76\x5F\x53\x7A\x01\x39\x06\xE3\xEB\x19\xBF\x00\x97\x37\x64\x07\x69\xAF\x69\x5D\x2B\xBB\xEB\x25\xBC\x5E\xEA\xAE\x97\x1B\x5A\x0F\xDB\xEB\x83\x78\xDD\xEA\x77\xB8\x68\x50\x6B\xA1\xA9\x63\xC9\x16\xCE\x9E\xE1\x79\x87\xC4\x9C\xB1\x7E\x40\x67\xA1\xFD\x35\x1B\x18\x4E\x39\x63\x3F\x18\x59\x21\x70\x5B\xBC\xAA\x93\xDC\x66\x7E\xE4\x09\x76\xD9\xD2\x3A\xC1\x4C\x20\x30\xEA\x8C\x8C\x75\x96\x83\x69\x39\x06\x5D\xB9\xCF\xBE\x8C\x87\x87\x6B\x56\x2E\x69\xCA\x7F\xEF\x8F\xB4\x16\x3E\xFD\x2D\xDF\x92\xAF\x30\xDF\x57\x98\xAF\x63\x3E\x32\xC0\x11\xC2\x31\xD7\x44\x03\xA2\xA7\xB5\xF6\x03\x42\x6E\x0C\xB4\x70\x78\x68\x03\xAC\x4F\xD0\x0B\x37\x69\x68\x49\x71\x84\xB8\x59\xC5\x1D\x0C\xB6\x27\x1F\xB0\xA0\x25\x06\x24\xB3\x57\xF9\xDB\x97\x5A\x25\xD4\x6B\x2E\x04\xA2\x46\xBB\x74\x4A\x94\x43\xA4\xBC\xD8\xD4\xBA\x7C\x41\x1C\x8C\xE4\xA5\x5C\xF7\xD2\x09\x52\xA7\x62\x39\x7F\xCE\x8F\xB2\x9E\x15\x54\x04\x2B\x2D\x81\xFC\xB4\x6D\x8E\xF8\xC6\x12\xB5\x89\x49\x45\x90\xFD\x4B\x0C\x8C\x5F\x72\xB8\x3F\x21\x9B\x82\x1C\x85\xC7\xF8\x73\x56\x83\x2A\xB3\x19\xC4\x43\xD5\x6A\x91\xD9\xB7\x5B\x95\x6D\xEB\x63\x83\x5E\xE5\x6D\x20\xA6\x4F\x64\x55\xDB\xD7\x50\x36\x00\x03\x76\x38\x91\x42\x02\xA9\x02\x0D\x66\x5D\xC0\x80\xC0\xB4\x09\x9C\x78\x22\xD1\x01\x74\x04\xBA\x61\xE2\x63\x31\x61\xD3\xC6\x4B\xD8\xF5\x3A\xE2\x71\x8B\xA6\x75\xD4\x69\x58\x11\x95\xDE\xDA\xB5\x43\xDC\x58\x62\x2D\x55\xCA\x99\x23\x36\x9A\x7A\x44\xCB\x68\xEA\x27\x12\x6E\xC3\xEB\xAC\x9B\x48\x11\x79\x18\x75\x26\x24\x8D\x57\x84\xCC\x66\xDA\xF3\x25\x52\x7E\x22\x46\x8F\x97\x8C\x5A\xFA\x6C\x95\x13\xCC\x7B\xCE\x80\x9B\x90\x22\xFB\x66\x7E\x22\x75\x5F\x13\x4E\xBA\xE9\x26\x52\x34\xD4\x3D\xC9\x5C\x04\xA6\x9B\x48\x11\xDB\x25\xCB\xEE\x7A\x09\xAF\x97\xBA\xEB\x65\x3E\xC1\x6A\xAF\x0F\xE2\xF5\xC1\xEE\x34\x0C\xB8\xB5\x80\xF3\x5D\xFB\x89\x94\xF0\x44\x12\xDA\x8E\x78\x22\x71\xD6\x86\x19\x04\xF5\x84\xD1\x47\x55\x6B\x23\xE9\xE6\x52\x77\xA8\xF5\x2F\x3D\x3F\x0C\x91\xF3\x4F\x12\x9F\x9B\xD6\xF7\xD6\x4B\xDB\x3A\x3C\x4B\x0A\x5C\xD8\x31\x86\xF6\x12\xD6\x78\x09\x1B\x72\xCA\xC2\x70\xBD\x36\x28\x8A\x7B\xDC\x91\xB4\x68\x8A\x84\xEB\x46\x12\x96\x0D\x15\xF4\x1D\x33\x46\x38\xAD\xC3\x8E\x31\xC2\xBE\x84\xC5\x9D\x6D\x95\x90\x6D\x08\x75\xE4\x8D\xA6\x36\xEC\xD8\x8D\x9F\x53\x38\x9C\xA9\x2C\x68\x3A\x3D\x20\xFE\x18\xF5\xF8\x83\x0E\xCC\x91\x33\x22\xFF\x16\xB9\x8F\x86\xDE\x2A\xC2\xEE\x39\xA8\x4A\x57\x96\xBC\x74\xEA\x0C\x22\xE4\x8E\xAC\x8A\x84\x3B\x0C\x72\x47\x04\x23\xCF\x1D\xDD\xD7\x14\xD4\x17\x76\xDC\x61\x67\xDC\x43\x2C\x72\x47\xD8\x71\x87\x45\xEE\x08\x3B\xEE\xB0\xC8\x1D\x61\xC7\x1D\xE4\x1F\x1A\x76\xDC\x61\xD9\x66\xDB\xD9\x70\x90\x3B\x42\x72\x64\x10\x6D\xB3\xCF\x1D\x3E\x39\x61\x8F\x3B\xFA\x9B\xA9\x76\xA2\x12\x78\xF3\x80\x41\x2C\x59\xB2\x7A\xA7\x9E\x5F\x11\x18\x5F\x11\x18\x5F\x11\x18\x5F\x11\x18\xB7\x2C\x30\xDE\x69\x09\xAD\x97\x11\xA5\xF1\x8F\x39\x02\x41\x0B\x4E\x1D\xB4\xF0\xD3\x81\xFB\xB9\xA0\xBD\xF9\xD1\xEE\xE7\xF3\xDD\xCF\x4F\x76\x3F\x83\x57\x06\x49\x97\x7A\x51\xB1\x1F\xE9\xF5\xA0\x71\xE4\x59\xC6\xAD\x31\x14\xCC\x5D\x5B\x47\xBA\xE1\xC9\x29\xE1\x01\x53\x5A\x12\x54\xE8\xEE\xF7\x3F\xAE\x93\xD7\x5F\x43\xB3\x99\x78\xE5\x1A\xA5\xA0\xA8\x63\x67\xC9\x26\xF7\xF6\xED\x8B\xB5\x39\x6A\x00\xF7\xF3\xC7\xB7\xBF\x9A\x2D\x9F\x54\x3D\x27\x0B\x39\x6A\x56\x18\x24\x63\x45\x2F\x81\x26\x72\xDC\xDB\x38\xBD\xE9\xCA\xE6\xDA\xF1\xA5\xAD\x7F\x3C\xF8\xC0\xDD\x2B\x9C\xA8\xBC\x41\x21\xEE\x94\x55\xDA\x3D\x24\x62\x58\x4A\x59\x9F\x94\x4C\x4D\x29\x19\xCB\x7B\x8F\xD4\x2B\x03\x60\xAD\xF0\x20\xEB\x81\xCB\x7C\xB5\x44\x20\x82\xBD\xCF\x72\xA6\x4F\x3E\x53\x33\xDC\x42\x3D\xC9\x2D\xD7\x93\xB4\xF5\x94\x10\x76\x1D\xF2\xB0\xED\xAA\xC3\xC3\x57\xF8\x69\x2F\xCB\xE4\xCF\x84\x6D\xBA\xD0\xBC\x56\x82\x10\xC9\xC1\xB3\x94\x84\xE4\xAF\xBE\x7F\x26\x97\x84\x16\xEB\x22\xB3\xBE\x0B\xF8\xBC\xC6\x4C\x5F\x5D\x04\xEE\xFB\x7E\x74\xF0\x72\xCE\x08\x21\xE2\x3E\x31\xB4\xDC\x10\x4A\x98\xE1\xA7\x76\xFE\x69\x0F\xDD\x9A\xAC\xB5\x7F\x1B\x1B\x26\x90\xE3\x7D\x40\x4B\xE2\xC2\xC4\x7B\x9E\x79\x40\x69\x7A\xF9\x81\xA6\xC3\xC2\x5C\xD1\xF7\xCF\x7E\x36\xFB\x8D\x23\xD3\xA6\x47\x5B\xF7\xE9\x7C\x3A\x18\x4C\xB3\x3B\x0C\xA6\x66\x2B\xE3\x91\x19\x18\xCC\x23\x33\x30\x98\x47\xFA\x30\x98\x47\x16\xC2\x60\xF2\x1E\x9F\x65\x13\x5B\xDA\x7B\x30\x98\x47\x66\x61\x30\x3D\x4A\x84\x87\xC1\x7C\x20\xBB\xC5\xBE\x52\x69\x1E\x7A\xFC\xC8\x22\x60\xF2\x25\xFF\x74\x69\xFE\x69\xF6\x5D\x89\xDA\xDF\xF3\x0F\xB2\x7D\x6B\x5A\x77\x64\x56\x87\x4D\xA7\xAF\xB0\x4B\xEC\x46\x15\x43\xE7\xBE\x53\x25\x2D\xC2\x5B\x9D\x72\x96\x09\x17\x10\x16\x1E\xEF\x0F\x73\x96\xBA\x05\x33\xD0\x18\x52\xA4\xC5\xC4\x71\xB8\x45\x26\xAF\x97\x2E\xA8\xF6\x99\x63\x30\x86\xB4\x11\xF0\x55\x28\x05\xE8\xAA\x38\x51\x68\x08\x41\xBD\xBA\xE0\x9C\x17\xF8\x9B\xE0\x5E\x28\x0F\x08\x64\x4E\x6F\x42\xD2\xD4\x8A\xCF\x33\xDD\xF6\x49\xB2\x74\x6F\x73\xF6\xBA\x7D\xF8\x5A\x43\xCD\xD1\xC7\x20\x5F\xD1\x0F\xD7\xFB\x05\xA4\xE7\x00\xB6\x78\xC9\xC5\x1B\x14\x90\xC7\xE7\xF9\x63\x1B\x28\xA5\x55\x06\x29\x85\x95\xEE\x87\xA5\x61\x82\x9D\xFA\x8E\xD9\x1C\x3C\xFB\xE1\x8E\x5D\x72\xF0\x40\xE1\xD4\x49\xD8\x47\x70\x75\xB8\x06\xEB\x4A\xE5\x11\xB6\xE2\x40\x9B\x9B\x85\xB3\x31\xD0\x09\x39\x2F\x06\xDC\x58\xC0\xA6\x55\x4B\xDC\x5B\x6A\xE1\xC5\x66\xAC\x03\xA5\xE9\x89\x85\xD1\x79\x0E\x39\xC9\x0F\x07\xEA\x04\x94\xE7\xAB\x32\x83\x89\x64\x90\xF4\xD6\xF3\x0C\x22\x9C\xC1\x3F\xD9\x4B\xFD\xE2\x14\xD1\x35\xE3\xCC\x1D\x19\xB2\x5D\x0A\x8C\x6D\xCD\x47\x9D\x6E\xFB\xE4\xB4\x22\x33\x8C\x81\x18\x46\xD3\xFA\xC0\x79\x7F\x02\xCC\xE7\x1D\x1C\xBA\x28\x2D\xAE\x53\x48\x5E\x53\x28\x48\x50\xA1\xC0\x31\x94\xC1\x49\x09\x1F\x93\xC1\x48\x42\xE4\x7A\xE1\x0E\x72\x3E\x71\xAA\x2A\x29\x89\x21\x36\x56\xD1\xBB\x64\x20\x56\x60\x25\x41\xA3\x82\x92\x4A\xE7\x82\x32\xE6\x1E\x72\xE1\x31\x5C\xB9\x27\x18\x85\x9D\x3D\xE3\xC5\x8A\x26\x03\x54\x8A\x65\xCB\x0B\x6E\xAB\xA5\xA8\xE4\x30\x54\x94\x99\x02\xD9\x90\x4C\xC2\x84\xEB\xEF\xA3\xEC\xF4\x66\x3D\x46\xCD\x69\xC9\x59\x1A\x96\xD2\x87\x6C\x86\x50\x62\xE3\xFB\xB0\x4E\x21\x37\x24\xE5\x71\x5B\xD1\x96\x2B\xD2\xE4\x2A\x5B\xD2\xAC\xCE\x60\x09\x2B\x2B\x61\xDC\x54\xA5\x64\x0A\x55\xBE\x9C\x6C\x51\x39\x99\x94\xC3\xA9\x11\xB9\x66\x25\x81\x09\xB7\xFA\x11\xAD\x89\xB5\x82\xF2\x64\xA1\xF3\xA0\x6F\xBB\xC1\x2F\xE0\x00\x8C\x5C\xB9\x79\xBE\xFC\xDD\x4B\x02\x85\xE2\x45\xAE\xED\x1C\xC7\x54\xF6\xE7\xC6\x9A\x6D\xB5\x35\x3C\x5F\xED\xA2\x40\x0D\x2E\x96\x14\x0C\x9A\x33\x32\x46\x22\x10\x46\xE4\x86\x40\x42\xF7\x08\xB9\xDD\xB9\xE5\xA6\xFC\x3D\x0E\xB1\xA5\x1D\x13\xAA\xC1\x92\x53\x2B\x38\x64\xA0\x8E\xD9\xC6\x95\xC8\x50\x2C\xD5\xD8\x09\x3A\x76\xAF\x33\x94\x39\xF7\x35\xEF\xAD\x73\x52\x43\x8E\x6F\x4B\x22\x0F\xC9\x02\x09\xF9\x9B\x8F\x1A\x20\x48\xB5\xBC\x11\xF5\x40\x96\x1D\xF2\x4A\x0B\x5C\xDE\xB8\x00\x32\xEF\xDB\x9C\x4A\x30\xAD\x5F\xB9\x18\x71\x06\x97\x83\xC8\x31\xB8\x61\xDA\x2E\x09\x29\x2E\x09\xA9\x3B\x58\xA1\x24\xCB\x0C\x65\x97\xB4\x10\x34\x6E\x53\xA4\xB6\xBF\x7E\xD3\xCC\xF5\xC5\x99\x6B\x5E\x22\x70\x49\x20\xFC\x52\xE4\xF7\x8C\x97\x04\x22\x47\xC6\xAA\x56\x15\xF4\xAA\x90\x4F\x6C\x43\x59\x42\xDB\xA0\x49\x4B\xC8\xC2\x94\x52\x90\x5D\x68\xC4\x72\x88\xF7\x57\x58\x8F\xF1\x7B\x0D\xCA\x16\x47\x0A\x70\xAB\x66\xB2\x46\xED\x81\xA7\x6C\x53\xFE\xFE\x25\x01\xCA\xA1\x42\x6D\x77\x34\x1B\x64\x9F\xB3\xAA\xD8\x6E\x15\x86\x22\x70\xBF\xFA\x1D\xBD\x03\x7D\x8D\xFB\xA8\x8F\x05\xBC\xE3\xD1\x9C\x82\x4B\x49\xA2\x3C\x02\x0D\xEB\x12\x99\x5A\x92\x14\x2E\xA8\xD8\xF0\xEC\xB6\x36\xAA\x98\x7C\xC6\x23\x0E\xC8\x61\xBE\xA6\x2F\x70\x49\xD9\x79\xE1\x3D\xD1\x39\xDC\x05\xFE\x8B\xEF\xB9\x76\xE2\x9C\x2B\x2E\x34\xF5\xC2\xBB\x74\xE6\x47\x39\x84\x62\xB0\x4E\xFB\xC3\x42\x36\xBE\x46\x6D\x8E\xAE\xC5\x45\x56\x86\x20\x63\xBD\x30\xE3\x6D\x53\xFB\xB8\xFD\xE6\xBC\x04\x10\xA6\xAF\xAF\x33\x3E\x35\x1C\x31\x68\x2B\xE7\x30\x1E\x55\x39\xE1\xA3\xF2\xFD\x47\xAB\x5C\x4E\x0E\xF3\x1E\xA4\x6D\xD0\x02\xD9\x06\xF4\x69\x55\xC8\xC1\x9A\x66\x53\xC3\xC8\xA7\x40\x97\x0A\x0C\x14\x1B\x1C\xEB\x6F\xB8\x64\x83\x25\x53\x42\xC4\xFC\x54\x61\x24\xBA\x30\xF0\x74\x67\x08\xD1\xFE\xD0\x70\xA2\x45\xF7\xF3\xC3\x5B\x16\xCC\x49\x9F\x46\xD0\xAC\xE8\xE4\x54\xC1\x59\xB5\xEA\x31\x9D\xF0\xE1\xE5\x58\x06\x90\x6C\x1F\x44\x39\x3A\x6D\x5B\xD1\x01\x3E\x15\xC3\x01\x6F\x0D\x9D\xE2\xCC\x8F\x30\x86\xB8\x0E\x70\x91\xA5\x8C\xFA\x9C\x77\x15\xB7\x64\x1C\x82\x39\xF8\x06\x22\xC2\x46\xA3\x2D\xDA\x98\x92\x76\x69\x4E\x17\xAE\x85\xC1\xB2\x0C\x92\xEC\x03\xA9\x1E\x6F\xEB\x37\xF7\x20\xE1\x87\x7C\x67\x3D\xDF\x85\x9C\xEC\xD5\xD6\x92\x7C\x2A\x42\xBE\x8B\xB9\x66\xD6\x42\x22\xCF\x77\x82\x70\xBA\xB5\x41\x6A\x46\x04\x09\x63\xBC\x0B\xDF\x51\x57\xC3\x96\x49\xC2\x1E\xDF\x2D\xBC\x4B\x3B\x4E\x4A\x02\x96\xA2\xE6\xD3\xD4\xB2\xF1\x8C\x79\x01\xEF\x32\xB3\x2C\xFE\x38\xEB\x5D\xB6\xEF\x08\x9F\x79\x4C\xDD\xAC\x03\x6A\xCE\x5E\x5F\xE7\x9E\xF3\x32\xE2\xBC\x82\x39\xAF\xC0\x1B\xCC\x79\xD9\xA3\x55\x21\x68\xB7\x85\xE7\x3C\x36\x84\xB4\xBF\xF0\x53\x06\xDD\x93\x24\x92\x1D\xDF\x49\xF1\x21\x8C\x37\xF8\x6C\x37\xE4\x72\x43\x2C\x97\x10\x50\x0B\x06\x5B\xF6\x69\xEE\x2D\xB9\x56\xCD\x73\x5D\x38\xC3\x75\x04\x8A\x45\x83\xAE\x39\x43\x68\x02\x21\x71\x1E\xC9\x7F\x5B\x97\x74\x2E\x8F\x97\x25\x0E\xA1\x11\xAC\xD2\x15\x7F\xDE\x1E\x12\xE7\x05\x5D\x90\xA1\x6D\xAA\xA8\xE5\xBC\x12\xE2\x3A\x45\xCE\x4B\x99\xF3\x28\x05\x6E\xC2\x99\x40\xF7\x0D\xBF\x81\x7D\x90\x30\xE7\xA5\x50\x3E\x54\x18\xC9\xCC\x6D\x69\x8F\x90\xFB\xB0\x2B\xB6\x23\x59\x11\xDC\x62\xF2\xEA\x81\x44\xEF\x87\xAC\x0F\x12\x7D\xE0\xEB\x08\x65\x50\x65\x38\x71\x37\x21\x73\x66\x0D\x32\x1E\x22\x06\x89\x66\xE1\x77\x00\xF6\xBF\xED\x2D\xF5\x7E\x41\x67\xDE\xDF\x43\x67\xDE\xDF\x43\x67\x76\x62\xAE\x81\x08\x22\xC2\x5B\x8E\x3C\x48\x74\x44\xC2\x7F\xA3\x68\xC1\x7F\x23\x81\x67\x0E\x5B\xFD\x97\x26\x01\x0F\x61\xC4\x66\x44\xB3\xE6\x93\xB5\xF4\x21\xA2\xF7\x6A\x04\x7B\xB9\x62\x4D\xB7\x05\x11\x1D\x92\x9A\x37\xAD\xB9\x76\x8A\x5D\x2C\xBF\xF5\x72\x1F\x22\x9A\xC9\x52\x87\x1B\xD4\xC6\x11\xB3\x30\xA1\xF3\x65\x67\xC9\x60\xC9\x2C\xCD\x7C\xDC\x6E\x20\x98\x97\x39\xBB\x76\xC8\x2E\x16\x2D\x44\x34\x1D\x24\x45\x2D\x44\x34\x27\x70\x47\x1D\x8B\x3C\x3D\x58\x8D\x93\x5A\x23\xAE\x35\x5A\xCC\xDC\x8A\x67\x6A\x2F\xCB\x67\xDF\x1A\xC6\x69\x6F\x9D\xAA\x26\x73\x10\xD1\x13\x86\x88\xA6\x17\x2E\xDB\x16\xE0\xD4\x23\x33\x0C\xB6\xD6\xEC\x7F\x91\x49\x92\x2D\x46\x06\xB6\x2E\x10\x63\xE2\xDC\xE6\x9A\x1C\x61\xD9\xD4\x48\xA3\x8C\x3C\x09\xE1\x14\xF4\x99\x22\x70\x7F\x3C\x7C\x31\x9F\xF8\xD4\x7F\x8A\x0F\x8D\xB9\xF6\x5F\xFF\xC1\x5B\x28\x0E\x5F\x7C\xDF\xAE\xF5\xB6\xAF\xBD\x86\xE1\x96\x2D\x69\x68\x4D\x97\x90\x9A\x0C\x93\xDD\x32\x8B\xDB\x1C\xF7\x54\x17\xEE\xEC\x13\xA6\x7E\x09\xDA\x13\xEC\xD2\x9E\x60\xD0\x9E\x93\x9C\xCA\x50\x97\x97\x2F\x77\x66\x10\x9F\x4B\x68\x7E\x7C\x38\xEF\x2C\x55\x7A\xD3\xA1\xC9\x59\x26\x0E\x5A\x80\x7F\xB2\x9F\x65\x23\x21\xA5\xE9\x62\x1F\x17\xE3\xB6\x1F\xAB\x42\xA7\x18\x26\x91\x4F\x52\x97\xB1\xC8\xE7\xAE\xF5\x57\x34\x71\x5D\xF2\xFE\xD2\x86\x53\x2A\x93\x6B\x9A\x6A\xEA\x68\xAC\x03\x83\xD3\xEA\x70\x00\x85\x06\xE5\x02\xB6\x66\xA9\x15\x7D\xB0\xE6\x2C\xBF\x07\xF1\x2E\x98\xF2\x53\x14\xEB\xC5\x48\x29\x66\x8E\xF0\x32\x1D\xCB\x3A\xF6\x76\x9D\x64\x0A\x66\x96\xE8\x84\x1D\x19\xF3\xFE\x9C\xDC\xD6\x62\x76\x9B\x35\xAF\x61\x8F\x53\x4B\x69\x3C\x9A\x2E\x39\xFA\xD9\x82\x23\x1D\xBC\xB6\x75\xB2\xA0\x1D\x1D\xB7\xB2\xD7\xAC\xA1\x67\x4E\x50\xA7\x2B\xFA\x61\xC9\xC2\x43\x89\x4F\x13\xC9\x7C\x1B\xE9\x40\x99\x40\x45\x19\x24\x2E\xD9\xA8\x13\x67\x2E\x38\xF5\x18\x18\x54\x24\x92\x13\x85\x65\x20\xC0\x84\x93\xC4\xCA\x10\x48\xEA\x7A\xC6\x1B\x89\x25\x81\x64\x22\x29\xC2\xB4\xF8\xDA\x9E\x2E\x34\xEA\x52\x74\xD4\x23\xBF\x92\x93\x9C\xE7\x9B\xF4\xE8\xED\xAE\x0C\x26\x61\xC2\x9B\x72\xF7\x87\xFD\xD1\x8A\x28\x75\xE7\xDE\x2D\xC0\xCA\x09\x01\xE0\xDA\xD3\x33\xB9\x6A\x21\xDC\x28\x38\x05\x2C\xA1\x65\x1B\x72\xFC\xD5\x02\x40\xF9\x9C\x51\xF1\x76\x9B\xB6\x80\xFC\x3A\x57\xF5\x41\x91\x88\x82\xED\x99\x93\x66\x05\x0D\x18\x30\x9C\x8A\x17\x7F\x5C\x0F\x1E\x9C\xA2\x02\xE6\x76\xF4\x49\xCE\xF8\xC8\x5F\x2D\xF1\xB2\x9A\x3E\x88\xD3\xE3\x70\x10\x14\x06\x34\xB2\x92\xC2\x5A\x70\x90\xA8\x96\x83\xB4\xE1\x42\x56\xD2\x2E\x80\xD4\xB3\x92\x87\xA6\x22\xE7\x7F\x1C\xB0\xB4\xDD\x7E\xD6\xA9\x58\x3F\x6C\xA0\xB5\xA2\x2C\xE2\x06\x32\x17\x91\x35\x43\x6D\x4C\xEB\x11\x64\x94\x06\x58\x91\xE6\x22\x69\x80\x15\x6D\x7E\x38\x87\x26\x65\xCD\x02\x5B\x7E\x5A\x7C\x12\xB2\xDD\x50\x8F\x71\xA9\x78\x85\xD2\xD8\xC4\x33\xA4\xD0\xA5\x86\x12\x2A\x60\x39\x29\x6E\x72\xF3\x2A\x85\x51\x6B\x45\xE1\x5C\xC8\x6F\x6A\x9C\x7A\x63\x43\x79\xE0\x6F\x52\x36\x15\x4C\xEB\x98\xFB\xC2\x0D\xB3\x81\x2B\x79\x84\xDB\xB7\x16\x38\xD1\x52\xA8\xEE\xE8\x70\x40\x16\xB3\x84\xF7\x8A\x64\xD1\x09\x09\x2C\x09\xF7\x8F\x9A\x33\x8E\xD7\x51\xEB\x7A\x4E\x12\x81\xD4\xC2\xEC\xFF\x0E\x55\xDA\xB3\xAC\x49\xE8\xB9\xD3\xE2\x37\xAD\xC8\x23\x15\x7F\x8C\x4D\x10\x68\xC6\xB3\x6E\xED\x65\xDE\xB7\x7A\x47\x4B\x0E\xF0\x25\xD9\x44\x81\x6E\xDC\x67\x83\x46\x12\x33\x2B\x16\x7B\x7C\xB2\xD2\xE5\x14\x20\x17\x26\x66\x25\x02\x82\xEF\x58\x89\xF7\x6A\x58\x95\x0B\xBC\xA7\x9F\x5F\x76\x19\xDA\x20\x71\xBA\x19\x6B\x1B\xA0\xC6\xC1\xEC\x12\x31\xBB\x50\x49\x07\x29\x18\x18\xD9\x25\x42\xF1\xD0\xB1\x0B\x1D\x7B\x52\x30\x7F\xC2\xE3\x9A\x79\xED\x3F\x46\x61\x46\x22\xC3\x72\xEC\x1D\x7B\xE8\xBB\x1B\x6A\xA3\x8E\x9D\x3E\x4F\x7E\xE5\xA3\x93\x75\x3A\xAD\xAD\x1B\x9D\xA7\x89\xB5\xA3\x4F\xD6\xC9\x94\x00\xE9\xCB\x0B\xB4\x37\x4F\xC8\x6A\x14\x82\x76\xBF\xAD\x36\xDC\x4F\x6F\x37\x04\xD5\x71\xCF\x5A\x21\x48\xB7\xEE\xB7\x83\x93\xA0\xDD\xC3\x7C\x7F\xB4\x76\x5E\x32\xFC\x94\x9C\x76\x35\x27\xC7\xA5\x0C\x62\xB7\xFD\xD8\x86\x03\x57\x42\xE4\x76\xEC\xC6\x09\x08\x1F\x9B\xC2\xE8\x7C\x3D\x62\x2B\x9C\xEB\x02\x10\x84\x66\x56\xA6\x9F\xA5\xE9\x47\x98\x29\xAC\x6B\xD6\xB1\xDB\xA6\x81\x81\xF8\xC1\x29\x8C\xB8\xD3\x9E\x1D\xF0\x6D\xFA\xB4\x65\x87\x76\x51\xE3\xD1\x49\xC8\x21\x91\x5C\x76\x32\x8E\x25\x9F\xD0\x99\x60\x82\xB3\x03\x8C\x9B\x34\xE5\x1F\x5C\xEA\xAF\x85\x32\xA8\xDD\x67\x90\xBA\x1D\x7D\x1E\x5F\x3E\x1C\x4C\xEA\x98\xB2\xD7\xDA\xF3\x90\x40\x38\x95\x6D\x90\x4F\x11\x61\x9D\x39\xC9\xE8\x13\x04\xC6\x80\xFB\xB1\xA4\xFC\x1D\x8E\x16\x66\x6E\x8B\x06\xDC\x16\x51\xDC\x17\x3B\xC7\x76\xDC\x16\x31\x9A\x22\x73\x1B\xAB\x3F\x74\xC0\xEB\x4D\x42\xD9\x8F\x1B\x65\xE7\x23\x4D\x19\xA9\xC9\xFA\xC0\x32\x9B\x95\x7F\x72\x59\xFC\xDB\x21\x20\x1C\x29\xF2\x34\x62\x0B\x3F\x2A\x77\x1A\x54\x97\xA2\xFF\x93\x0B\x8F\xD2\x7A\x07\x6C\xFE\xD8\xED\xB6\x8F\x14\x56\xF4\x03\xB7\x75\x9E\x60\x6F\xF3\x3C\x21\x94\xF3\x04\xFB\x45\x3A\x4F\x18\xF8\x45\xF3\x79\x82\xBD\xBD\xF3\x04\xE4\x21\x22\x38\xF4\x42\x44\xB3\x9C\x80\x58\xCA\xFF\x40\x53\xF6\x73\x23\xB5\x7F\x5B\xEC\x3E\xAC\xC1\x9B\xC6\xF3\x48\x88\xFC\xE3\x28\x92\x90\x8F\x04\x12\x97\x8A\xC8\xF7\x4E\x09\x6A\x45\xDF\x7B\x82\xE6\x69\x04\xB6\x8A\x85\xF7\x4E\x15\xBA\xBD\x93\x90\xCD\x85\x96\x64\xBA\x47\x5B\xB8\x11\x99\x31\x51\xF6\xA2\x78\x4F\x50\x14\x91\xFD\xBF\xCE\xDC\xD6\x49\x5E\xC5\xEF\x75\x0A\x32\x11\x36\x74\xB6\x8D\x72\x9F\xF2\xC0\x38\xF5\xA0\xA4\xE1\x8E\x32\xAC\xA2\xC5\xFF\xC2\x91\x83\x88\x4C\xE4\x2E\xA8\x72\x48\xB0\x74\xB6\xE9\x20\x31\x6B\x22\x10\x81\xA1\x67\x9E\xC7\x7B\xA2\x94\xE3\x5A\x3D\xC6\x13\xD9\xEE\xCA\x3F\xA4\xED\xE2\xE0\x89\x0B\x0E\x07\x9F\x7D\xD7\xB7\x71\x3C\x73\xCE\x78\xD7\x39\xE5\x54\x7F\xC0\x8D\xCE\x9D\xED\xCD\x3F\x1F\x58\x49\x56\x09\x82\xC8\x28\x38\x20\xD3\x99\x35\x2A\xD3\x05\xD5\x18\x37\xCE\x2E\x20\x20\x66\xC6\xAD\x29\xDD\x36\xD3\x6C\xEC\xF4\x66\x9D\xC3\xD8\xDD\xB8\x71\xE3\x86\xD9\x80\xF1\xA9\x29\xC7\x20\xD6\x13\xA6\x58\x2E\xC6\x3F\x17\xF8\xF4\x41\x29\x96\xBC\x8F\x4B\xDE\x8F\x24\xA0\x0D\x1C\x96\x5A\xB8\x6D\x8A\xCB\xA9\xF7\x63\xA9\x07\x60\xBF\x2F\x75\x7F\x5B\x6A\x4E\x11\x4B\x70\xA0\x2B\x95\x50\xA7\x50\xA1\x2A\xFF\x48\x96\xED\x91\xE0\x61\x8F\xA1\x14\x63\xB2\xD4\x9C\xF0\xCC\xDA\xC7\x68\x49\xB0\x1F\x0A\x79\x8E\xCB\x2D\x33\xC8\xFE\x01\x4D\x53\xDA\x3E\x7A\xFA\xEC\x97\x4D\x29\xEC\x83\xFC\xC4\x79\x8A\xD4\x7A\xA7\x37\xF0\x8F\x3C\xAE\xF8\xC4\x07\xC1\xD9\x2A\x87\xFD\x62\xED\xB1\x6C\xC5\xD5\xB2\x87\x3D\x59\x18\x3E\xF6\x05\x64\x0F\xFF\xB4\xC7\xB5\x8E\x13\xEA\x08\xDF\xB6\xFC\xCA\x1C\x4C\x14\x1A\xB1\x8D\x69\xC4\x27\x32\x23\xE1\xD3\x91\x39\xC6\xF4\x19\xB1\x3E\x8C\x7C\xAA\x3C\x9F\xC6\x9E\x4F\x47\xF4\x2A\x6F\x46\x33\xE6\x53\x66\x53\x43\x18\x7C\xEC\xD5\x02\x9A\xEC\xA1\x23\x48\x3D\xF5\xF8\x0C\x8D\x04\x97\xE4\xB2\xA0\x33\x3C\x14\xF7\xDD\x81\x1A\x6D\xCE\x07\xCC\xCB\x24\x93\x23\x01\xE1\xE2\x94\x03\x5F\x7B\x74\x6E\xFD\xE4\x21\x61\x32\xF5\xC7\x54\x6C\x64\x69\xCB\x7E\xC6\xB3\x5F\x4A\x0E\x4A\x90\x7A\x46\x49\x5B\x46\x89\x98\xFD\xC4\xCF\x05\x95\x8F\x5E\x81\x14\xD0\x9E\x82\xE1\xE1\xAF\xD3\x13\x9C\x11\xDB\xDC\x64\xF0\x8D\x1F\xFC\x84\x85\x29\x9F\x1A\xC8\x60\x53\x03\xCD\x09\x3A\x02\x94\x71\x96\x21\x4C\xF9\x50\x8A\x7C\x4B\x81\x3C\xA1\x28\xEF\x1E\x8E\x7D\xAE\x33\xBC\x31\x1C\xF9\xBE\xBC\xDA\x75\xDC\x15\x5D\xDF\xC2\xD8\xEB\x5B\x19\xFB\x9E\x8C\x92\x76\x66\x64\xBB\xF4\x22\xF8\x8F\xA9\x8B\x3F\x91\x89\x08\xB6\x95\xF6\xEB\x11\x6B\x84\x4E\x64\xB0\x97\xBF\xF1\xB0\x3F\x6D\x6F\x0C\xED\x3C\xA3\xB6\x57\xDC\x0B\x53\x85\xB4\x09\x41\xFD\xCD\xF7\x8C\x71\x5D\x28\xD7\x3D\x36\x97\xB3\xC5\xC7\x14\xED\xC8\x42\xD0\x6D\xF9\xC8\x0F\x86\xD5\xC4\x2E\x8E\x7C\x17\x13\xFA\x86\x18\x11\x45\x3A\xC3\xE8\x4B\xE5\x84\x23\xD4\x54\x9D\x30\xD6\xFD\xB4\x4E\x39\xC4\x14\x50\x68\x6A\xDA\x37\x71\xC0\x59\x82\x33\x02\x39\x7A\xB4\x40\x1C\xF3\x59\x8D\x4F\x8A\x48\xD1\x98\x9E\x7B\xFA\x4F\xE6\xC5\xB1\xB9\x4D\x71\x1C\xA3\xD0\x4C\x17\x88\xE3\xD8\x8B\x63\x22\xE2\x84\xC5\xF1\xC4\xCF\x87\x49\x3B\x1F\xC6\x4C\xC0\x9E\x38\x8E\xB3\x4E\xD0\xCF\x8A\xE3\xC4\x8B\xE3\x64\x2F\x71\x9C\xCC\x88\xE3\x64\x4E\x1C\xF3\x64\x1F\xC3\xA4\x15\xC7\x52\x73\xBC\x9B\x38\xE6\xE0\x5E\x2F\x8E\x3B\x9A\x26\x73\xE2\x38\xD9\x45\x1C\x63\x9D\x63\xA4\xF3\xD8\x8B\x63\x33\x2B\x8E\x45\xCE\x24\x5E\x1C\x67\x03\x71\x9C\xEC\x22\x8E\x67\xE0\x85\x65\xCC\xF8\x96\xBC\xE6\x75\x89\x87\xDA\x07\x0B\xD4\x09\x3D\x50\x28\x42\x66\x68\x7C\x5B\xB7\x0C\x1D\xDE\x44\xAF\xC0\x57\x3D\x3F\xD3\xB9\x1D\x32\x31\x24\x55\x0C\x19\xD9\xF5\xFC\xD6\x89\xF2\xFD\x33\x6A\x46\xE2\xD1\x25\x9A\xBE\xF4\x4E\x50\x7A\x8F\x5A\xE9\x9D\x0C\x18\x5D\xEC\x2D\x34\x11\x3D\xC7\x27\x34\x5A\x71\x6F\x4C\x3A\xD1\x1D\xEF\x22\xBA\x39\x6B\x28\xB3\xAA\xF6\xAC\x8A\x85\xD6\x16\x12\xCF\x54\x49\x4F\x74\x13\xAB\x4A\xE8\x88\x77\xE1\xEF\x44\x37\xED\x46\x44\x74\x27\x22\xBA\xF5\x4D\x18\x45\x7B\x46\x89\x77\x13\xDD\x5A\x44\x77\xD2\x17\xDD\x89\x17\xDD\x21\x8A\xEE\xD4\x8B\xEE\x4C\x44\x77\x4A\x82\x6A\xB1\xA8\x1B\x08\xEE\x19\x96\x30\x34\xC8\xBB\x68\x99\x0B\xD9\x62\x28\xE7\x6E\xC6\x16\x3D\x39\xC7\xCD\x1E\x4A\xF2\xFF\x48\x3D\xFE\xD4\x48\x1D\x98\x91\xE4\x5E\x74\xDB\xB6\x3F\xC2\x22\x55\xC8\x49\x4A\x49\xC1\x06\x53\x25\xB8\x0A\x82\xC5\xC5\xA6\x8F\x56\xEB\xF3\x6D\x5A\x08\x71\x6C\x28\x0A\x3F\x43\x56\xCA\x17\xC8\xCC\x82\x25\x63\x06\x45\x65\xD9\x16\x42\xDA\xA9\x0C\xDD\xDC\xD3\x81\xEC\x24\xA9\xAA\x21\x6A\x20\xDD\x43\x7C\x12\x10\xFA\x58\xA2\x81\x3A\xD9\x39\xF1\xEE\x3C\x64\xE0\x47\x86\xDC\xE7\xB6\xF1\x87\xC8\xCE\x62\x91\xEC\x2C\xF1\x85\x00\x8A\x4E\xCA\x49\xE2\x48\x8B\x25\xEF\xE7\x92\x0F\x38\xCE\xC6\x47\xA7\x51\xD5\x98\x37\xE1\xB6\x3E\x80\xA5\x2E\xC1\x01\x5F\xEA\x81\xB6\xD4\x82\x0F\xFA\x96\xBA\x52\xED\x2E\xB2\xB3\x84\x09\xEC\x13\xD9\xF8\xFF\xB2\xF7\xAF\xC1\x96\x5C\xD7\x7D\x18\xBE\x1F\xFD\x3C\xDD\xE7\xDC\x9E\x99\x0B\x72\xAC\x3B\x65\xEF\xEE\x3F\xFE\xCE\x45\x15\xA6\x88\x0F\xA8\x3B\x08\xE8\x98\xB3\xA7\x38\x77\x1E\x00\x01\x54\xC2\xAA\x20\x15\x55\x05\x1F\xF8\x81\xD5\x17\x8C\x79\x2F\x2E\x50\xB0\x8B\x9A\x3B\x12\x07\x14\x2D\xC7\x36\x4D\x51\x8A\x1E\x94\x44\xD9\x74\x40\x91\xA0\x43\x5B\x54\x42\x59\xB2\x88\x38\x54\x02\x39\x52\x8A\x2E\x8B\x92\x12\xCB\x92\x48\xC7\x32\x15\x3D\x4C\x95\x64\x8B\x22\x45\x4D\x6A\xFD\xD6\xDA\xBB\xBB\xCF\x39\x77\x66\x28\xBE\x64\x7B\x86\x45\xDC\x73\x4E\x77\xEF\xDE\x8F\xB5\xD7\x5E\xCF\xDF\x92\x37\x73\xAA\x13\x71\x34\xA7\xDC\xDC\x9D\x72\x0B\xB9\x9E\x70\x5E\x8A\xD7\xED\xA9\xC9\xBC\x26\x93\x2D\x71\xCA\x8B\x7D\xF9\xA4\x9B\x83\x77\xCE\xA7\xBC\xB3\x41\x90\x49\xE0\x9D\xA7\xE6\xDA\xAB\x8D\x91\x14\x98\xAF\x48\x81\x39\xF1\x91\x22\xF2\x91\x5C\xA4\xC0\x22\xB2\x92\x3C\xA4\xA2\xE6\x23\x52\xC8\xE7\xB2\x9F\xA5\x93\xF9\x88\x99\x24\x6B\x99\x89\x21\x39\x25\xCE\x72\x15\x66\x19\x41\x9E\xA5\xCB\xC3\x2C\xE7\x71\x96\xB9\xBE\xAA\x13\x78\xB9\xB6\x5C\x66\x26\xA5\xCB\x5D\x25\xCC\x24\x17\x66\xC2\x61\x1C\x43\xA7\xC6\x33\x57\xC9\xC9\x89\xB5\x9F\xC7\x08\xDE\xC8\x4C\x8C\xAB\xA8\x95\x81\x1B\xE6\xE1\x80\xB1\x38\x60\x40\x97\x21\x67\x39\xBF\x23\xD1\xCF\x30\xC3\x4C\x82\x80\x64\xB8\x0C\x55\x01\x45\x9B\x98\x00\xE9\xF2\xF9\x60\x29\x3B\x46\x3D\x4D\x70\xAB\xA0\xF1\x0E\xA2\x9F\x21\xA6\xC1\x26\x3B\x30\x0C\xB3\x51\xF1\xDC\x1B\x8E\x93\xD0\x12\x54\xE9\x3C\x90\x19\xE2\x30\x60\x3F\x6B\x19\x97\x09\xAC\x10\xF0\x4A\x15\xB1\x87\xF1\xA8\x2A\x66\x08\xBA\xE7\x1A\xDF\xCB\xC3\x0B\xCB\x07\x6D\x26\xE7\x61\xE5\x32\xAC\x9C\x83\x4F\x24\x8F\x98\x87\xA5\x57\x86\x95\xE3\xD6\xE9\xB0\xA2\x76\xB5\x21\x02\xDF\x37\xE2\xDD\x81\xEB\xFE\x1E\x48\xE3\xD7\xA3\x09\x23\x74\x66\xB3\xB3\x63\x76\x2B\x86\x0D\x78\x89\x95\x00\x46\xF3\x0C\x1B\x4C\x2D\x38\xAF\x0D\x6E\x79\x0B\x78\x1B\x29\x4C\xED\x58\x64\xEE\xCC\x71\x56\x03\xC6\x9D\x8D\x99\x03\x24\x34\x08\x71\x4F\xAE\xAC\xB2\xDA\xFC\xCE\xF8\xEC\x7C\xE0\xB3\xF5\x1A\x19\x75\x16\x64\xD4\x81\xCF\x96\xEB\x65\xD4\xD9\x68\xAF\x8E\xF8\xAC\x5D\x92\x51\xA1\x09\xDA\x20\xA3\xDA\x5B\xCB\xA8\x25\x3C\xE7\x63\x19\xD5\xAE\xF0\xD9\x7A\x45\x46\x9D\xF2\x59\x96\x51\xCB\x91\x8C\x6A\xD9\xD8\x25\x32\xEA\x30\xA1\x76\x45\x46\xB5\x2C\xA3\x96\xE0\xB3\xE5\xC0\x67\xEB\x15\x19\xF5\xE4\xC5\xB9\x25\x19\x44\x22\xEC\x18\x1B\x82\xAB\xCA\x25\x72\xA0\x83\xA4\x13\x22\x88\x24\x6C\x40\x03\xBC\xD1\xF1\x96\x5B\x4B\xEC\x76\x1A\x12\xB5\xCC\x3F\xEC\xC0\x3F\x8E\x31\x1B\xAC\xE3\x1F\xA3\x8D\xB6\x2C\x74\x26\xC7\x0B\x9D\xC9\xF4\xB0\x48\xA6\x27\x85\x80\x16\xD8\x65\x17\x02\xA6\xB9\x88\xC7\xD9\x70\x52\xD8\x63\x4E\x0A\xAE\x58\xC2\x74\x92\x07\x3A\x49\x58\x43\x4A\x02\x9D\x24\xA3\x93\xC2\x8E\x34\xA4\xB6\x5E\x3E\x29\x6A\x3A\xBC\xE4\xA4\x48\xE4\xA4\xC8\x27\xC7\xD7\xF4\x8C\xCD\xC3\x19\x6B\x8F\x3B\x29\x72\x39\x29\xE4\xA8\x4B\xC2\x49\x91\x0E\x27\x85\x95\x62\xF7\xC9\x1D\x48\x9A\x26\xC4\xD2\x58\x96\x34\x53\x78\x06\x71\x60\x58\x5E\x70\x2B\x0B\x6E\x43\xDC\x8D\x62\x70\x42\x5A\xF2\x4B\xF2\xC4\x20\x69\xC6\x95\xB7\x78\x66\x69\xE5\x53\x40\x5E\x9A\x70\x24\xE0\xE0\xE0\x23\x22\x9E\x16\xDF\x00\x3A\x0C\x4C\xF7\xDF\x62\x96\x7F\xB3\xFA\x0F\xDA\x6E\x1C\xFD\xF2\x25\xC2\x89\xA4\x24\x4F\x70\x8F\x56\xDB\xE6\x74\x37\x9B\x2B\xFF\x8F\x86\xDA\xC5\x8E\x7E\x6C\x67\x9C\xF3\x27\x06\x8E\x19\xEB\x39\x09\x5D\x3B\xE3\x6C\xF3\x7D\x20\x7F\xCB\x85\x00\x12\x67\x9B\x7F\x79\x23\x30\x3C\xE9\x81\x44\xBA\x97\x8E\xB5\x83\x6F\x94\xB5\x3A\xBB\x6B\xAD\xFE\x9A\x58\xAB\xD3\x65\x6B\x75\x32\xB6\x56\xA7\x7F\x2A\xAD\xD5\xC1\x52\xED\x4C\x38\x3F\xEE\x9A\xAB\xFF\xE3\x34\x57\xFF\x01\x86\xF8\x0F\xEA\xFF\x48\xCC\xD5\xF1\x0C\x28\x18\x08\xC6\xB6\x66\x74\x06\xCC\xE8\x0C\x28\x97\xCE\x00\xFA\x91\x98\x48\xE5\xEC\x9E\x40\x89\xCA\xBA\x5B\xBA\x76\xC6\x19\x39\x03\x0C\x47\x41\x5A\x67\xE4\x0C\x60\x2C\x3C\xF4\x80\x3E\xFE\xA9\x30\x92\x67\x77\x8D\xE4\x5F\x13\x23\x79\xBA\x6C\x24\x4F\xC6\x46\xF2\xF4\xDF\x67\x23\x79\x75\xD7\x4A\x7E\xD7\x4A\x7E\xAC\x95\xFC\x0F\x31\xE2\xEF\xAE\x74\x33\x51\x1D\xFA\x5B\x9A\xC9\x31\x41\xC9\x10\xB9\x26\x2A\xAC\x09\x39\x0D\x49\xE0\xCE\xC5\x88\x3B\x97\xC4\x9D\x8B\x25\xEE\x5C\x0A\xBC\x2D\x70\x36\x66\xC2\x7D\x84\x3B\x97\xC4\x9D\x67\xC2\x9D\x0B\x46\x2D\xB5\x6E\x26\xDC\x99\x39\x02\x6B\x94\x28\xBE\x71\xD4\x77\xF6\x36\x4C\x79\x64\x81\x5F\x62\xCA\x6B\xAC\xEF\x19\x33\xE5\xEC\x4E\x4C\x42\xD5\x0A\x47\x0E\x25\xAD\x16\x91\xCA\x17\x81\xCA\x6B\x40\x04\xB8\x3A\x50\x79\x3D\x32\x92\x83\xCA\xB3\x15\x8E\x0C\xD3\xFB\x06\xB7\xDC\x84\x94\x9A\xA9\x51\xB8\xA1\x56\x4F\xB8\x26\xB4\xDA\x8C\xF6\x0E\x74\xDF\x13\xB7\x37\xBD\xCF\x5D\x1D\x4D\xEB\x53\x8E\xBC\x81\xEB\x99\x6B\x82\xF9\x78\x64\x7A\x6F\x26\x13\x3A\x35\x0B\x34\xC1\x2C\xB0\xE1\x32\x70\xE4\x6C\xCA\x91\xE1\x00\x99\x0F\x1C\x39\x73\xCD\xB2\xF9\xDD\xAE\x48\xB5\x76\x6A\x51\xB1\x2B\xE6\x77\x1B\xCC\xEF\x76\x44\x03\x76\xC9\xFC\x6E\x6F\x6B\x7E\xCF\x43\xD9\x57\xCC\x74\x19\x66\x9A\x1A\xED\x66\xCE\x86\x99\xB6\x71\xA6\x39\xFF\xC9\xCD\x84\x4B\xCD\x96\xB9\x14\x49\x17\xA5\x70\x29\x2B\x5C\xAA\x9C\x58\x7A\xA6\x06\xB5\x32\x18\xD4\xC4\xFC\x8E\x58\xC2\x7C\xE0\x52\xB9\x2B\x65\x0B\x8C\xAD\x67\x76\x64\xA7\x0A\x96\x19\xDC\x72\x27\xA2\x6C\x3E\x32\x59\x68\x7C\xBF\xB5\xD9\x42\x4D\x44\x59\x75\x1B\xF3\x7B\xCE\x2A\x4B\x34\xBF\xE7\xB7\x31\xBF\x9B\xC1\x08\x78\x5B\x93\x5F\x30\x06\x49\xBD\x9F\x1E\x86\xA0\x68\x01\x1A\xDB\x7F\xD4\x44\xF7\x52\x4B\x86\x1F\x49\x07\x88\xA6\x96\x22\x9A\xFC\x8E\x7B\x69\xC1\x2F\x2D\xF8\xA5\x23\xC9\x98\x5F\x5A\xDC\xEA\xA5\x22\x10\x2F\xBF\xD4\x4E\xEC\x3B\x5F\xC4\x82\xFF\x58\x64\xD2\xB7\x34\xAA\x4F\x6D\x3E\xA4\x38\x2E\xB9\x2F\x93\xC0\xA6\x2D\xB3\x69\x73\xE7\x6C\x9A\x81\x08\xC7\x6C\xDA\xAC\x65\xD3\x66\x85\x4D\xCB\xEC\xE0\xAD\xE9\x92\x4C\xB1\xCA\xA8\x6D\x60\xD4\x76\x99\x51\xDB\x63\x18\xB5\xF9\x1A\x30\xEA\x39\x33\xEA\x79\xD8\xE8\xF3\x91\x90\x7B\x0C\xA3\xB6\xEB\x18\xB5\x0D\x8C\xDA\xDE\x8E\x51\xDB\x25\x46\xBD\x6A\xBB\x2F\x45\x34\x9E\xDF\x31\xA3\x1E\x6C\xF7\xCD\x64\x42\xED\x0A\xA3\xB6\xB7\x60\xD4\xEC\x3A\x09\x8C\xDA\xAC\x61\xD4\x22\x58\x9A\xE3\x05\x4B\x33\xE5\xDB\x66\xCA\xB4\x4D\xB0\x84\x9B\x11\x3D\x98\x25\x4B\xB8\xB9\xAD\x25\x3C\x17\xA5\x90\x67\xBD\x0C\xB3\x6E\x98\x69\x9B\x30\xEB\x66\xC4\xB4\xED\x6D\x98\xB6\x89\x4C\xDB\x8C\x98\xB6\x19\x75\x6A\x99\x69\x9B\x91\x25\xFC\x78\xA6\x6D\x78\x00\x26\x30\xED\x64\x6A\x09\x07\xF6\xFB\x1D\x48\x93\x79\xCC\x66\x66\x69\x32\x09\x96\xF0\x7C\xBD\x25\xDC\x4C\x38\xE1\x25\x79\x62\x90\x26\x97\x19\xE2\xD4\xF6\xCC\xC5\x9F\xF2\xC1\x12\x4E\x3C\xDC\x32\x0F\xB7\xEB\x78\x78\x12\x7D\x93\x77\xE8\xB6\x31\xCC\x4E\xA1\x70\x33\x5E\x0B\xF5\xC3\x84\x73\xC7\xDC\xCA\x7E\x66\x70\xAB\x53\xD4\x65\x75\x87\x3C\xDC\x2E\xF3\x70\x35\xE1\xE1\x76\xE0\xE1\xC7\xBC\x54\x78\xF8\xF2\x4B\xC5\x46\xFF\x3D\x09\xE0\x89\x62\x2A\x3F\x67\x5E\xB0\x93\x24\x7A\x8F\x6C\xDC\x30\x5D\xFA\x06\x21\xA7\x1D\xB3\x19\x5C\x4D\x91\xE6\xF5\x59\x75\x8A\xD9\x9D\x25\x1D\xD5\x88\xE8\x63\xFC\x6C\x17\xE8\xD8\x4B\x69\x19\x9A\x7E\x42\x82\x78\x4C\xCA\x28\xDF\x30\xD7\x28\xB5\xED\x52\x7A\x24\x89\x8F\x9B\xF5\x59\x1D\xBF\xCA\x40\x6C\xF1\xF1\x47\x68\x07\x5C\x27\x2A\x48\x5A\x53\x5B\x26\xD6\x0C\x49\x5B\x5E\xB7\xD6\x1B\xEC\x3E\x9F\xB2\x33\x87\xB9\x38\x8A\x51\x36\x5D\x7A\x80\x9D\xFD\x09\xD5\x0B\x3E\xF5\x5C\x12\x2A\x96\x13\xAE\x9C\xE0\x9E\x2A\x5F\xF8\xDA\xA5\x5B\x9C\xDA\x16\x33\x95\xF8\x29\x24\xB7\xFD\xCB\xC0\x15\xA6\xBB\x56\x9A\xD7\x77\xD2\x3C\x75\x6D\xF2\x86\xF5\xED\x0F\xC7\x08\x23\x6E\x28\x59\xE2\x4D\x1A\xB5\x1C\x9E\xDB\xE6\x34\xB2\x11\xCE\xAA\x06\x73\xC6\x8B\xBC\x6D\x48\xA1\xB5\xAC\x45\x5A\x6E\xE8\x44\xE5\x6C\xF5\x69\xA3\x4D\xC8\xD5\x78\x60\xAF\x2B\x63\xDD\x84\x99\xCB\x05\xDB\x8B\x0B\x28\xA0\xE0\x48\x86\x84\x27\x36\x86\xCD\x38\x1D\x48\xB9\x92\xFE\xDC\xEF\x4A\xA7\xFC\x99\x7E\xC7\x6C\xBB\x92\x4B\x19\xA0\x8C\x8E\xE3\xCB\x67\x5C\x49\x1B\xE0\x5E\x57\x3A\x2D\xB5\xAC\x4B\xA9\x1B\x5D\x90\x4A\xF5\xB0\x6A\x5C\xE9\x92\x87\xD5\x49\x57\xBA\xF4\x61\x75\xCA\x95\xAE\xF4\xDB\x0C\x22\xE2\x94\x2B\x9B\x3F\xA2\x59\x18\x77\x81\xCD\x68\xDB\x66\x13\xE8\xFD\x46\xD1\xD1\x39\x1C\x02\xA8\x68\x98\x3E\xB3\xD5\x33\xEE\x0F\x9B\x12\x5C\x79\x56\x9D\xF4\xFA\x90\xFE\x9E\xF0\xE6\xF0\x80\x3E\x9C\x3A\x00\x51\xD9\xC3\x4E\xFB\xF7\xFC\xC6\x8D\xEB\xC0\x51\xF3\xFA\xD9\x9E\xFA\xEA\xDF\x15\x7E\x39\xF1\xAD\x48\x45\x69\x71\x00\x9E\x55\x67\x26\xD3\xE1\x72\xEA\x89\x43\xD6\x46\x3B\xAB\x5C\xE9\x1F\x08\xE9\x30\xB3\xEA\x63\x46\xEB\xA3\x95\xD2\x14\xC3\x76\x8A\xE9\x73\xC6\xA9\x08\x04\xFD\x39\xE3\x8F\x76\x19\xF6\x19\x58\x85\x67\xF0\x09\xA8\x2A\xF8\x74\x9A\x81\xCC\xFD\xE7\x0C\xE3\x1A\xFB\x1F\xA2\x46\x9B\x0F\xBF\x5D\x00\xDD\x3F\xAB\xFA\x16\xC5\x8C\xBE\xA2\x46\xDF\xB7\xAE\x51\x3D\x6D\xF4\xF7\xEF\xB0\xD1\xDF\x0F\x8D\xFE\xF0\xB4\xD1\xDF\xA2\x46\x25\xD9\x4D\x8D\x4B\x43\xA8\xEA\x3F\xD5\xFA\x88\x37\x49\x22\x20\xF1\x2D\x75\x22\x20\xC0\xA1\x6E\x84\xBA\xCF\x3E\x75\xC1\x1C\x35\x9F\x66\x3E\x08\x68\xB6\x37\x57\x3B\xB7\x7D\xD2\xE2\xC9\xA5\xC7\x2E\x19\x73\xA4\xAF\x4D\x1F\xEC\xD4\x59\x65\x5A\x3D\x3C\x6D\x50\xA0\x82\x9E\xEE\xAC\xB3\x17\xCC\x91\xD3\x5B\x43\x3B\x66\xC7\x3C\x5D\x9D\x56\x03\xC0\xD6\x67\xE8\x8A\xC0\x6C\x55\x9F\xB7\x56\x03\x4C\x67\x48\x8F\x2A\x64\xB8\xB2\x9B\x0A\x6C\x8B\xAE\x3C\x67\x0B\x54\x18\x47\x61\xCF\x02\xBB\x06\x3F\xBA\xF2\xC5\x10\x2A\xA1\xCE\x2A\xDD\x55\xF4\x87\xA4\x41\xEA\x66\x37\xDF\x22\x62\x66\xD9\x8F\xCD\xF0\x6E\x76\x89\x4F\xFA\xDA\x55\x6E\x7A\x79\xE6\xCA\x0B\xEE\x9D\x2F\xF6\x23\xD1\xE9\x92\x98\xAD\x38\xF5\x78\x17\xC5\x93\x69\x77\xA8\x4B\xA4\x23\xED\x1E\x88\x84\x14\x55\xD6\x6B\xBD\x54\xC3\x42\xC1\x6C\x92\xC6\xDA\x9A\xA8\x2E\xBF\xD8\xCE\xBC\x85\xED\xBF\x66\xAE\x5C\x7B\xDD\x26\xCC\x37\x52\x76\x44\xBB\x7A\x0B\xE0\xDE\xFA\x19\xDA\x32\xCA\x25\xCD\x1F\xBF\x9D\x11\x9F\x50\xAA\x89\xFA\x47\x63\xBA\x88\x60\x9B\xA4\x77\x79\xF3\x25\xD6\xFA\xCD\x79\x97\x9D\x55\x90\xBB\x8B\xE6\xDF\x92\x88\x2F\x79\x62\x9E\x2D\xE8\x1C\xB5\xC6\xC2\x4A\x1D\x06\x5B\x6C\x73\x0D\x21\x81\xB4\x4B\xD0\xF6\x56\x1C\x30\x30\x63\xA4\x12\xAE\x24\xD9\x26\xAD\x40\xE2\x69\xD2\x16\x00\xB1\xC0\x90\x00\xDA\xA9\xDE\x65\x7B\x02\xE6\xCA\x40\x4E\x5D\xA8\x41\x84\xA6\xE9\x5A\x85\x7A\x3F\xB2\xB8\xA6\xFA\x23\xCD\x08\x01\x7A\x6D\x56\x76\xC0\x04\x30\x21\xF1\xDC\x6E\x01\xD5\x6C\x35\x1B\x9E\xA1\x6A\x59\x4E\xA6\xBB\xE9\xC6\x98\x0F\xAF\x57\xF3\xE1\xED\x90\x0F\x0F\x2C\x94\x51\x7E\xFE\x6A\x83\x9C\x1E\x2F\xED\x5E\x9E\x2B\xFF\x53\xCB\x99\xEF\xC1\xA9\x53\x8D\x5E\x88\x1C\x40\xC7\x57\x06\xEC\x32\x96\xB9\xB9\xB6\x56\xF5\xA1\x4C\x2F\x02\xBE\xEA\xB4\x0C\x89\xF9\x0F\xBE\x0C\x49\x76\x11\xE0\x38\x28\x43\x92\x11\x59\x09\x30\x47\x2C\x43\x92\x4B\x19\x92\x9C\x4F\x12\x54\x13\xC9\x9D\x7E\x2B\xD0\xD5\x39\xB8\x33\x96\x21\xC9\xA4\xF8\x97\xE6\x12\x1D\x25\x89\xA8\x8F\xC0\xB7\x57\x00\x71\x91\x03\x0C\xD8\x76\x19\x41\x84\x34\x83\x08\xE9\xB7\x06\xAB\x94\x75\x39\x60\xC3\xA4\xE6\x88\x09\x19\xDE\x90\xD2\xBB\xAA\x47\x7D\x02\xEC\x2F\xB6\x5A\xD1\xBE\xB6\xAE\xE0\xBD\x6D\x38\xD3\xBD\x60\xC5\x1E\x08\x6B\x6D\xCD\x42\x6A\x01\x31\xA4\x00\xA4\xF2\x9D\x60\x12\x31\x86\xF2\xAE\x48\x28\x11\x95\x08\x9A\xC4\x3C\xA2\x12\xCD\x45\x18\xC7\x06\x39\x0E\x95\x88\xEB\x09\x10\x93\x41\xAC\xDE\xDC\x25\x5D\xBA\x0B\xE0\x5C\xDD\xB7\x8C\xE5\xD2\x2E\x18\xC1\x66\x63\xFA\x8C\xDB\x70\x8B\x5D\xC1\x9D\x9B\x03\x95\xA8\x46\x08\x9F\x0C\xBD\xE2\xEF\x2D\x4A\xD8\x61\x0D\x6A\x9E\xAB\xAA\x5F\x2A\x5C\x82\x1F\x00\xFF\x5F\xC9\x3A\x31\x64\xBE\xBB\x93\xEA\x2B\xD5\x00\x26\xFA\x19\xAD\xCD\x91\x53\x28\x0D\xE5\x5F\x51\x0C\x5B\x06\x57\x02\x6F\xAC\x0B\xEA\x1C\x4E\x54\xF5\x5A\x5D\xF3\xD3\x45\x04\xDD\x4F\x58\xA0\x6F\x9A\x6F\xE7\xB2\x53\xFE\xFE\x5E\xC4\x42\xF9\x29\xEC\x72\x81\x8E\x0D\x58\xB2\x5E\x1F\x2E\xA1\xC8\xEA\x50\x72\x1A\xA9\xAD\x61\x87\x62\x97\x9F\x47\x67\xEC\x0E\x2F\xE0\xC5\x49\x3D\x23\xEA\xDC\x53\x9C\x8F\x1B\x00\x6D\x3F\xAB\xA4\xC2\xFA\x08\x30\xF5\x4B\x46\xA7\x11\x30\x65\x0D\x16\xA9\x1A\x61\x91\x06\xE6\x68\x03\x73\x4C\xD6\x03\xA6\x58\xC9\xEF\x0E\x66\x10\xE5\x12\xA0\xE5\x3E\x76\x6C\xD9\xA3\xD4\xC5\x51\xEA\xF1\x28\xD9\x09\xCD\x00\x5B\x28\xE4\x20\x26\x81\x80\xAB\x96\x21\x37\xDD\x86\xEF\x52\xA3\x6C\x19\xE7\x34\x74\x87\x91\x88\x6B\xA9\xCF\x2F\xB5\x8C\x27\xA5\x0C\x04\x73\x56\x4F\xB8\xB0\x7E\x94\x55\x0A\xE4\xF2\x0A\x38\xC9\xDA\x89\x6A\x06\xAE\x2C\x16\x67\x7E\xF5\xF2\x2C\x8D\x48\xEC\x6F\x26\x11\xAF\xF6\x4D\x92\xBE\x3C\xD8\x5A\x94\xFF\x24\xC8\x80\x13\xAC\xB1\x40\x2C\xE0\x29\xFF\x4B\x4A\x56\x22\x7F\xCE\xFF\xD1\xCD\x9B\x1B\xFB\xBD\xE0\x84\xF9\x9B\x76\x9F\x41\x11\x71\xDF\x2F\x73\x03\xB6\x1F\xDF\x3A\xBD\xD1\xEE\x0E\xE5\x66\x93\x6E\x12\xAB\x67\xCE\x07\xE4\x42\x6A\x7C\xCF\x5F\x77\xC1\xCE\xD9\x6A\x01\x13\x80\xEE\x2F\xF9\xF4\xFE\x15\xD5\x37\x7F\xF5\x46\x40\xD7\x3E\x1F\x50\x4E\xCF\x2F\xA3\x9C\xF2\x80\xEF\x3F\x06\x00\xE6\xFE\x08\x00\xC3\x39\xE8\x5E\x0D\x99\xE4\xEB\x08\xEE\xA1\x56\x57\x43\x2E\xF8\x12\x9C\xAA\x7F\x80\x67\x06\x1D\x96\x6D\xBF\xA6\x2F\xA7\x8F\xE9\xCB\xE9\xA1\x2F\xDB\xB1\x2F\xF7\x1E\xDF\x97\x7B\x63\x5F\xEE\x5D\xD3\x97\x33\xB7\xE9\x8B\x53\xD5\xA7\xBF\x66\x75\xD6\xAE\x9B\x75\x85\xD6\xAE\x27\x5F\xF7\x42\x6B\xBF\x73\x42\x97\x47\x61\x47\x13\x9D\x74\xD0\x70\x13\x97\x33\x56\x0F\xE8\x08\x96\xAA\xB5\xC0\x2A\x25\xA9\x91\x20\xD8\x19\x3D\xFD\xFA\x15\x14\x9F\x3C\xF8\x3C\x89\xBA\xE9\x08\x6B\x05\x31\x8D\xB1\x7F\x2A\x16\x30\xB3\xB9\xF2\x3F\x3E\x86\xB3\xCB\xF8\xAC\xA8\xE9\xD9\x39\x2F\x4E\x0D\x03\x8E\x39\x0F\xD7\x94\xFF\x77\x1F\x9A\xDC\xAD\xB6\xCD\x53\x2C\x5F\x65\x3B\xE6\xA9\xCA\x55\x6D\x16\xE4\x12\x41\x5B\xEA\xE6\xC7\xC0\xFE\xD4\x01\xF6\xA7\x5A\x83\xB5\x04\xD8\x1F\x40\x97\xD4\xAD\xD4\x51\xA6\xFB\x2B\x46\x9D\x62\x49\x78\x21\xD8\x83\x23\xE4\xA5\x0D\x16\x7F\x17\x74\x4E\x54\x6E\x83\x06\x1F\xB1\x97\xCC\x79\xB7\x58\x0B\x33\x3D\xBC\x48\xDA\xC5\xAD\xF2\xBE\x35\x48\xD3\xA3\x8E\x31\xFC\x95\x24\x1A\x85\x0E\xBE\x81\x67\x6B\x09\x66\x6A\x79\x44\xF1\xF6\xDB\x0D\x7D\xDC\xEE\xD2\x70\x19\xDB\x85\x07\x5B\xC7\xC1\x92\x60\xFD\xEE\x0F\x4C\x26\xFC\xAB\xB2\x06\xB7\xE8\xC8\x62\xD4\x91\xC5\x71\x1D\x59\x6D\x90\x17\x4B\xDA\x5D\x96\xF0\xA7\x4B\x32\xBC\xB0\xDB\xE8\x51\x1C\x98\x31\xA7\x88\x56\x75\xDF\xE1\x07\x99\x84\x20\xAD\xD7\xFE\xDA\x9A\xD5\x5E\x5E\x66\xCD\x00\x5B\x2B\x2B\xFD\x55\x9B\xB6\x75\x13\xB7\x31\x9A\xB5\xAE\x5E\x9E\x37\xC0\xA2\x7C\xE7\x74\xE2\xE4\x99\x96\x9F\x19\xDA\x0F\x0F\x06\x68\xF3\xFA\x18\x24\xF5\xBA\xE2\xC1\xB5\x0B\x57\x87\x31\x6B\x3E\x96\x75\xE5\x16\x5F\x87\x31\xDF\x86\x6A\xD7\x0F\x3A\xA2\x90\x8D\x07\x8C\x87\xE8\xE0\x9D\x8F\x4D\xC1\x66\x0C\xE7\xB5\x6D\x9E\x80\x4C\x24\xD8\x50\x75\x00\xF3\x52\xD6\x64\x89\x9E\x55\xC7\xF3\x3E\xA9\xBF\x3C\x67\xBD\xA2\x0A\x28\x4E\xC5\x18\x76\xAB\x2E\xA8\x13\xC5\xFE\x3C\x03\x9F\xA5\xD7\xD4\xCC\xBD\x6B\x58\xE9\xE9\x49\x04\x3C\xCE\x38\x52\xAA\x66\x6C\xAE\xDB\xDC\x1B\x41\xA1\x48\x18\xF1\x7F\x6D\x5C\x81\xBF\x42\x98\x04\x8E\x9D\xC7\xE6\x49\x6C\x08\xCA\x4F\x22\xF0\x5C\x61\xEC\x4F\xF1\x59\xA3\xA4\x3C\xD9\x53\xF4\x16\xD1\x0A\x8A\x80\x74\x88\xF9\x51\xDB\xE6\xD1\x6E\xBE\xD7\x19\x9F\x1F\x72\x39\x62\xB3\x45\x3F\x7E\x33\xFD\xE7\x49\x06\x89\x77\x45\xF3\xD7\x42\xC9\xD8\x27\x71\xB1\x67\xBD\xF8\xD1\x76\x5E\xB9\xB9\x33\x53\x81\xCA\x04\x81\x4A\x80\x70\xF0\x44\xC7\xC3\x44\xB3\x8F\xB2\xA1\x99\x5A\x3F\xE6\xC9\x4E\xBA\x6B\xFC\x11\x1F\xB3\x73\x6F\x0E\xD7\xB8\x1C\x61\xD4\x90\x89\xA3\xF3\x0D\xDA\x2C\x30\x1A\x83\x5C\x8C\x5F\x01\x7D\xCB\x55\x1B\x0D\xB2\xBB\x11\x33\x33\xC6\x05\x5B\x44\x5C\xB0\xC5\x08\x17\x6C\x1D\x81\x00\x2A\xAC\x5E\x47\x27\xB7\x42\x0B\x73\xF5\x6B\xB4\xA1\x51\x5C\x99\x67\xB7\x42\xFE\xA2\xDB\x68\x52\x8D\x9B\x0B\xF6\xD7\x73\x3D\xEC\x0A\x55\x9D\xDF\x39\xBD\xF2\x5E\x67\x8A\x4B\x6A\xFB\x27\xA0\xBE\x55\x94\x38\xA2\x3E\x97\xB8\xB4\xF9\x14\x91\x82\x3F\x7A\x66\x7F\x6E\xAB\xD1\xAB\x92\xE7\xA4\x9F\x21\x2A\xD4\x08\xC8\x3E\x16\xE8\xB1\x2F\xAB\x3C\xE6\xF5\x24\x94\xC7\xBC\xFE\xB6\xBB\xE5\x31\xEF\x56\x28\xFC\x2A\x95\xC7\xBC\xEE\x56\x0A\x60\x7E\xE7\x8D\x58\x1E\x73\xCD\xD5\xF7\xDC\xB8\x5B\x1E\xF3\x2E\xF1\x7D\xFD\xCA\x63\x0E\x24\x38\x2E\x8F\xF9\x5D\x37\xEE\xBC\x3C\xE6\x77\xDF\xF8\xF7\xA3\x3C\xE6\xAF\x94\xBA\x3A\xE2\x88\xE2\x41\x6E\x09\x70\xA2\x29\x4A\x3D\xB3\xA0\x29\xD0\x68\xA8\x1D\x12\xD3\xC9\xD4\x59\xF5\xE6\x36\x5A\x89\xCF\xAA\x9A\x73\x98\x2B\x71\x25\xC1\x86\x04\x47\x13\xD7\x1F\x00\x9E\x33\xF2\x8A\x3B\x44\x6D\x54\x30\x16\x93\x46\x6B\x5D\x05\xBF\xFF\xB2\xD8\xD8\xCD\x91\x98\xD2\x41\xAA\xEE\x36\xE8\x63\x23\xD2\x63\xAA\x8C\xB5\xDA\x92\x08\x51\x5C\x9A\x9B\x10\x3D\x45\x42\xB3\x6B\x96\x6A\xB1\x34\xA1\x16\x8B\xD1\x5A\x2B\x5D\xAD\xDE\xC2\x42\x00\x24\x5A\x0E\x27\xB2\x58\xA7\x37\xA1\xEB\x4C\x75\x83\x2C\x83\x6A\x57\x6F\x0E\x43\x29\xC3\x50\x38\x77\x83\xD5\xF3\x6A\x45\x3D\x9F\x8D\xD4\xF3\x19\xA9\xE7\x0C\x13\x0B\x17\x9B\xC0\x82\xDA\xC3\x7E\x17\x51\x1E\x75\x08\xAD\x2E\x87\xCC\xBD\xB5\xF3\x76\x87\xAF\xC2\xAA\x09\x1E\x6A\x5B\xBA\xD9\xF4\x9D\xBC\x27\xF5\xE0\xEB\x68\x67\xE6\xBC\xDB\x88\x30\xAE\x9A\x64\x90\x9F\x1B\x29\x03\x74\x29\x40\x82\xCF\x68\x95\x66\x40\x6B\xED\x32\xD1\x1F\x3A\x15\x6B\xDF\xCC\x66\x33\x35\x43\x8F\xD6\xD6\xBE\x29\x39\xEB\x29\x83\xE3\xF1\x95\xF7\x8C\xC6\x30\x0F\x2A\x58\xB2\x21\xF0\xF1\xB7\x5D\x0F\xBA\x1E\xCA\x95\x33\x3D\xCE\x99\xB7\xAB\x6D\xB3\x79\x89\xE3\xE5\xEB\x8B\xB1\xA0\xC2\x4D\x44\x25\xCE\xD8\x1A\x43\xCF\x72\xF0\x17\xF2\xE2\x59\x4F\x61\x1B\x28\x1C\x1D\x0D\x09\x42\xB5\x6B\x2E\xCD\xAD\xE3\x54\xD3\x37\x10\x89\x14\xAE\xBA\x45\x67\x68\x97\x52\x67\xEE\xA8\xE7\xB8\x79\x65\x99\x39\x94\xF1\xCB\xA1\xA9\x72\x2D\x4D\x95\xDF\x08\x9A\x92\x9C\x20\x1C\x9E\x8D\x4F\x9E\x73\x16\xC1\xF0\xB3\xE6\x3B\x6E\x48\x9B\xEB\xDE\x2F\xA8\x1D\xB7\x7F\x7D\xD1\x73\x4E\x61\xCD\xE9\x22\x63\x5A\x86\xFC\x5D\xB9\xAC\xFA\xBD\xCA\x9A\x23\x7D\x2D\x1D\x79\xD5\xF3\x41\xDA\x05\x7B\x86\x17\x98\xD3\x3D\xC6\x0E\xF6\xC1\xC5\x9E\x4F\x5C\xEC\x9D\x09\x79\xBF\x45\x08\x99\x9A\x5D\x99\xCB\x0F\x21\x64\xAA\x8A\x1E\xF4\xAE\x7E\x64\x1E\x3D\x2B\xF3\xB3\x4A\x75\x0B\x9E\x7A\x23\xCE\xF7\xB9\xA0\x07\xD7\xAE\xE2\xC4\xB6\x84\xA9\x62\xCE\x2D\x66\x5C\x91\x66\xE1\xD5\x25\xA4\xC1\x27\x0F\x2B\xD4\x2F\xF4\xFA\xB0\x2B\x50\x82\x00\xBA\x88\x41\x84\x17\x1D\x6F\x95\xAB\x9D\x3D\xA0\x7B\xFD\x91\x3B\x3E\x65\xA5\xD8\x31\x6F\x72\x85\xA7\x53\xE1\x07\x03\x2D\xAA\x1D\x73\x3F\xFF\x39\xCD\x87\xF2\x26\xCF\x76\xC3\xF5\x08\xDF\x2C\x76\xD0\x39\x7C\x47\xED\x0C\x7E\x28\xC6\x91\x85\x63\x6D\xD6\x26\xFE\x08\xBC\xC3\x30\x76\xBF\x39\xAB\x14\x3B\xF0\x0B\x47\xA4\xCD\xB2\x46\xF3\xDF\x21\xF4\x76\x26\x99\x23\x44\x69\x2F\xBD\x34\x5A\xEA\x22\x32\xA2\x4D\xA0\xFA\xCE\xE4\x24\x29\xB8\x42\xD4\xC8\xA6\xC0\x2A\x54\xC1\x7E\xA2\x7C\xDF\x7F\x4B\xBF\x48\x54\x96\x02\x1E\x1C\x51\x73\xEC\xE0\xC1\xEE\x2A\xB8\x0A\x12\xC8\xC2\x90\x92\x34\x63\x68\x6D\x57\x3D\x82\x0A\x14\x74\x94\x85\x9A\x17\x17\x43\xF0\x9B\xDA\x95\x68\xB4\x6D\xA3\xF0\x5B\x25\xC1\xBB\x9C\xCD\x27\x0B\xE9\x2A\x67\xF6\x9A\xBF\x71\x43\x22\x40\x50\x25\x71\x2B\x04\x8C\xC2\x06\xC0\x43\x00\xB5\xEF\x98\xA7\x48\x0F\x8B\x36\x80\x6A\xD9\x06\x50\xED\x75\xB3\x68\x03\x98\x4D\x6C\x00\xB3\x4B\x48\x47\x58\xB1\x01\xCC\xD8\x06\xC0\x72\xDF\x54\x93\x9F\xAD\xB5\x01\xCC\xC6\x36\x80\x59\x68\xFD\x98\x27\x3B\xE9\xEE\x2C\xD8\x00\x50\x47\xAD\x0A\x24\x55\x4D\x6D\x00\xC2\xE4\xDE\x84\xB2\x45\x81\xCD\xE1\x57\x23\x63\x4E\x5A\xEB\x8F\xDA\x2A\x48\xE9\x9B\x91\x52\x2A\x46\x1E\xB6\x80\x60\xE6\x30\x0F\xE6\x14\x81\x51\x20\xF5\xD4\x4A\xAD\x2E\x66\x54\xF6\x0E\x18\x15\xC3\x33\x9B\xE8\x90\xE4\x40\x78\xA6\x2F\x57\xB4\x33\x97\x60\xFB\xF3\xDB\x0B\xAF\x78\x9C\x9B\x5B\xE8\x85\x57\x4C\xAF\xDF\x34\xE0\x3C\x4F\xC9\x95\xFD\x26\xE0\xF2\x23\x66\x5E\x61\x36\x12\xCE\xE2\x2A\x06\x97\x79\x1D\xE0\xFE\x45\x8C\x62\x67\x0B\x33\x12\xF8\x08\x12\x31\x02\xF0\xF0\x92\x95\xE1\xE9\xD1\xF0\x34\x86\x47\xC2\x7B\x87\x28\x16\x4E\x6E\x1C\xD8\x20\xD1\x74\x67\x88\x73\x14\x3C\xF4\x71\x35\x1C\xEB\x79\x0F\x72\x31\x11\xAE\x80\xC3\x45\xF6\xEA\x50\xE0\xF0\x4D\xCE\xF4\x5D\xE2\x9F\xEF\x19\x02\x27\xA5\xAF\xDA\xA3\xA0\x9A\xC4\x92\x30\x98\xF0\xF3\xBD\xCB\x5C\xB2\x27\xEB\xCB\x4F\xF1\x23\xDA\xBF\xAD\x47\xB6\xC5\x70\x77\xBC\x95\x94\x8A\xD6\x80\x64\x0D\xD3\x76\x00\x2D\xE6\xE3\xD2\xDB\xC3\x4E\xF5\x9D\xCC\x14\x42\x6D\x54\xDF\x05\x67\xBF\xCC\x80\x33\x1C\x50\x93\x0F\x01\x35\x45\x75\x45\xEB\xA3\xE0\x44\xB3\x4B\xB9\x02\xF0\xA0\x71\xB9\x8D\x90\x2D\xA7\x46\x79\xB6\xA8\x78\xAA\x43\x92\x6D\xF5\xA3\x5A\xDB\x70\x74\x5C\xD7\xF1\xEC\x60\xAD\x48\x35\xEF\x00\x27\x53\x2E\xBF\xA0\xCE\xD9\x22\xD4\x8C\x0A\x0A\xC6\x6E\x57\x22\x54\xEA\x80\x68\xE4\x12\xD3\x74\xEA\x4A\x97\x5D\xDC\xEF\xEC\x96\xA7\x99\xB0\x5B\xCD\x5F\xA7\x36\xD8\x43\x93\x78\x58\xF9\x52\xBE\x35\xDB\x62\x07\x6A\x42\x27\xCA\x6A\x20\x56\x51\x39\xD5\xBC\xF3\x86\x60\x1F\x5D\xD7\xC3\xF0\x3F\x62\x47\x15\x47\x6E\x57\xD1\x42\x1C\xE8\x69\x70\xA0\x67\xEB\x1D\xE8\xA9\xA8\x24\x90\xC5\xBC\x72\xD9\x57\x56\x71\x64\x5D\x73\x6B\x63\x9A\xE2\x8D\xF1\xB6\xD5\x8A\x23\x8C\xD1\x84\xE2\x36\x2E\x1D\xF9\x3B\xF4\xD8\xDF\x71\xEB\x8A\x23\x5F\x51\x7F\x96\x2B\x8E\x84\xFE\xA8\x49\x7F\x62\xC5\x91\xBF\x75\x43\x1C\xFB\xC6\xD9\xE6\xDD\xF8\xF2\xC5\x6F\x60\x04\x98\x1D\x45\x80\xBD\xFB\x6B\x15\x01\x26\x87\x66\x30\x72\x5A\x76\x07\x20\x80\xA1\xFA\x75\xF3\x65\x17\xC8\x39\x2E\x8A\xE1\xF8\x29\x0C\x75\x92\x6F\x3D\x7F\xC9\x30\x5C\x29\x3D\xB3\x7E\x06\x53\x99\x0C\x9E\xC3\xB8\xC6\x7A\xC5\x6D\x32\x79\x2C\x80\x89\xC5\xB7\x84\x67\xC5\x38\x93\x1C\x1B\xC6\x51\x2F\x85\x71\x48\x1D\x9A\xD5\xD2\xBB\x43\xC3\x93\x37\xD3\x4B\xEE\x16\xB6\xBF\x5B\xD8\xFE\x6E\x61\xFB\xBB\x85\xED\xEF\xBC\xB0\xFD\x5D\x86\x71\x97\x61\xDC\x65\x18\x77\x19\xC6\x1D\x33\x8C\x5F\x2E\x6D\x72\xA4\xAF\x45\xD7\xF2\xE7\xD4\xD4\xDA\xC6\x79\x23\x30\x6B\x25\x3E\xD8\xBF\x60\xC9\x2A\xBD\xA1\x0F\x57\xB7\xBA\x99\x57\x8F\x02\x02\xF6\x65\x05\x03\x08\x2D\xA9\x0D\x26\x2A\x52\xBB\x90\xF8\xF6\x83\x12\x5C\x2B\x16\xBB\x8A\x53\x62\xAA\x17\x01\xA3\x20\xF6\x3A\xFA\xD1\x55\x2F\x8A\xF0\xCA\x59\x21\xD1\x6A\xE7\x2C\xBF\x5E\x72\x65\x42\x5A\x87\x95\xF8\x9C\x60\xE0\xB3\xAE\x1A\xF2\x60\x38\x56\x26\xE9\x2C\xA9\x60\x1E\x48\x01\xB9\xAB\x77\x4C\xC3\x7F\x68\x28\xE6\x72\x3B\x87\x39\x85\xA3\xD0\xC2\xA8\x1F\x63\xBC\x6B\xB7\x60\x20\xB2\xDA\xD9\x9E\x0B\x8B\x6F\x7A\x73\x48\x44\x74\xC2\x95\xDE\xD2\xFF\xAF\x6E\xD1\x2F\xCF\xF7\xED\x49\x99\x82\xFA\xA0\x3D\xC5\xE3\xAE\x0F\xDA\x4D\xF9\xB1\x38\x68\xEF\xE1\x1F\x8B\x83\xF6\x55\x6E\x01\xFD\x38\xBC\x21\xE2\x10\x2A\x57\x9F\x55\x6A\x92\xC6\x9E\x88\x22\xF1\xBA\xFD\x8E\xC3\x91\x59\xD5\xAC\x87\x60\x02\x9A\xA4\x07\xDA\x57\x07\x60\xD7\x05\xA9\xE9\xCF\xB9\x13\x4F\xF7\x5D\x49\x6F\x79\xB5\x60\x64\xB2\x23\xF7\x01\x4E\xBE\x7C\x59\xED\x77\xA7\xDD\xAB\xFD\xEB\xF6\x0F\x24\x0F\xF8\x16\x2F\x10\xAB\xE7\x5C\xB9\x57\xB9\x7B\xDC\xC9\xE6\xBD\xBC\xB4\x73\xF6\x0C\x4B\x0E\x92\x69\x0B\xB7\x29\x09\xC1\xDA\x15\xCF\x79\x07\x7F\x12\x68\xB0\x26\xA5\x81\x7F\xA7\x8D\x37\x5C\xE4\x2B\xE0\xB3\xC8\x0B\xA6\x8B\x4E\xEC\x0A\x58\xA1\x4D\x14\xEB\x4C\xE6\xCA\x9D\x9E\x27\x00\xEE\x33\x5C\xD2\x8A\xDE\xEA\xE6\x07\x6E\x7E\x80\x77\x5B\x77\x4A\xAA\xD1\x1B\x67\x43\xF3\x7A\xFC\x6E\x46\xF1\xEC\x86\x8B\xF2\x6E\x4D\xEF\xD6\x72\x31\xBC\xFB\xD5\xAD\x76\x88\x8B\xAB\x5D\xC3\x55\xEC\x4B\x5E\x85\x07\x76\x45\x49\x7E\xDD\x7E\x30\x04\xAD\x99\x2D\xEA\x90\x10\x57\xE8\x2B\xF7\x74\xA0\x90\xAF\x5E\x67\x19\x3A\x98\x41\x98\x41\x5E\x91\xE2\x18\x2D\xEE\xF9\x5E\x16\x2C\x4C\x69\xD8\x29\x1B\x48\x9C\x66\xCB\x84\xD8\x99\xC2\xC7\x7D\x20\x18\xD4\x4B\xB6\x26\x22\x31\x24\x85\x59\xD4\xA9\xA5\x2E\xC0\xAA\xA2\x39\xC5\xA4\x9B\xF1\xC1\x36\x78\xA7\xBB\x32\x1C\xCC\xB1\x2A\xF8\x6C\x8F\x7F\x1A\x5C\xD6\xAE\xDC\xDB\x19\x0A\x62\xBD\xDA\xD5\xDE\xF4\x5D\xCD\xEB\x30\xE7\x78\xFD\x1A\x09\x9D\xE3\xF7\xE9\x68\x51\xB2\x12\xE8\x16\x8C\x4A\x9F\x53\x83\x59\xE5\xE5\x57\xEB\x57\x05\xCE\xF6\x49\xB5\x14\x35\x43\x5C\x24\x11\xDB\xD5\x93\x5E\x5D\xE2\x24\x7F\x58\x04\x13\x2F\xD9\x4B\x05\x6F\x09\xE5\x1F\x60\x35\xDC\xFF\xAB\x2F\xDA\xAB\x73\xC9\x53\x4C\x8E\x46\xFC\xA0\x4B\x5F\x3A\xE2\xB2\xE5\xD9\x4B\xFF\x05\x1E\x79\x50\xA2\xEE\x11\x74\xDE\x3B\x35\x4E\xC7\x30\x43\xA2\x82\x19\x12\x15\x72\x17\x82\x78\xC2\xF1\x08\x4F\x78\xC2\x97\xFD\x4D\x1D\x2C\xFF\xC4\x11\xBD\xDA\x31\x97\x9D\xBE\xA0\xCE\xC1\x8F\xAD\x76\xCC\xB6\x93\x3B\xDB\xD2\x69\xBF\xDD\x63\x21\xD8\x80\x57\xEE\x98\xFB\x97\xAF\x36\xE3\xAB\x0F\x72\x13\xCD\xE4\xA6\x66\xA9\x89\xCD\x78\x35\xE1\xAB\x43\x13\x09\x97\xD5\x5B\x5F\xA5\xD4\xAC\x94\x25\x65\xC8\x03\x74\x43\xC7\x8A\xA2\xAE\x08\xBE\xB6\x50\xF3\x6C\xDB\xBC\xBE\x95\x12\xA9\x1B\x9C\xCF\x42\x12\x87\xD3\x7E\xA3\x6F\xBE\xF7\x46\xA8\x42\x4A\xF7\x6D\xF3\x32\xFD\xAE\xA2\xD3\x5D\x6F\x9B\x07\xDB\x19\xBD\x82\x8B\xBF\x9D\x77\x45\xB0\x46\x87\x5A\xDE\x4F\x77\x35\xC2\x1F\x79\x05\x61\x62\x9D\x73\xCE\x91\x42\x2A\x98\xF1\x0F\x8C\x02\x37\x64\xBF\xD1\xBD\x5C\xEB\x70\x8E\xCB\x5E\xB5\x0B\x17\xC3\xCE\x2B\xA6\x62\x9A\x45\x62\x5A\x08\xE1\xD8\xF0\x47\x7D\xB7\x31\xC4\x90\x37\x1C\x43\x1E\x4B\xC2\x06\xC1\xEC\x09\x67\xBB\x13\xB8\xED\x64\x74\x8D\x20\xDC\x52\x5B\x6B\x6C\xCA\xC6\xA1\xD5\xEA\xA5\x48\xE4\x3A\x01\x82\x72\x27\xAE\xCC\x89\xE7\x9C\xE0\xA0\xDD\xD5\x08\x54\xD7\x55\x1C\x81\x7A\xA6\xB3\xEB\x23\x50\x1D\x47\xF6\x9E\xE1\xE3\xB7\x62\x53\x4A\x88\x3F\xDD\x1C\x8C\x65\xB8\xAB\x61\x43\x4A\x35\x2A\x17\xCC\x19\x9B\x65\xC5\xB4\xA1\x9D\x89\x18\x0A\x40\x83\x10\xA4\x43\xE3\x93\xE7\xB0\x10\xDD\x29\xC9\x3E\x41\xC2\x71\xD9\x6E\x3A\x1B\xA0\x6E\x4B\x97\x5D\x8E\xCD\x61\xEC\xC4\x85\x79\x1C\x0F\x21\x73\x88\x96\xB8\x33\x5B\xAE\x5A\x33\x8E\x87\x58\x26\x78\x30\x80\x66\x20\x2E\xB3\x92\x71\xDC\xEF\xE4\xB5\xA0\x9A\xC7\x19\xF9\x20\x0C\xA2\xDA\x65\xA4\x04\x90\x65\x00\x18\xAE\x5C\xE1\x4E\x22\x19\x12\xBE\x96\x9B\x76\xBF\x77\xE5\x1D\x92\x27\xA3\xAF\x6D\x32\x11\x12\xC5\x71\x4B\x6B\xC3\x1C\x4B\xDF\x1C\xBA\xE6\xA0\xA3\xC3\xF9\xC0\x19\xB7\xF0\x7A\x7F\xAB\xBD\xC7\x9D\x24\x1A\xAC\xDC\xC9\xB3\x2A\x91\xE3\xF5\xD8\x36\x24\x1D\xB0\x3A\xAB\xF4\x55\xC6\x39\x19\x70\x59\xE1\xEF\xB3\x9D\xF1\x37\x35\xC3\x37\x68\x94\xF2\x77\x86\x2E\xBB\x72\x57\x8E\x92\xB9\x40\xB7\x26\x3D\x72\xF2\xBA\xD2\x3F\xB0\xEF\x1F\x60\xFC\xB4\x7B\xC4\x6B\x52\xBA\x7B\x76\x91\x45\x68\x6A\x44\x02\xDF\xA2\x3F\xD4\x17\x33\x42\x88\x3A\x39\x04\x12\x70\x70\x70\x67\xFC\xA7\x69\x9F\x7D\x5A\x3D\xB2\xC5\xF9\xBE\xE3\x98\xCE\xD5\x3B\x6E\x31\x81\x06\x03\xEF\xAC\xFF\x02\x1D\x30\x5F\x50\x57\xB6\x3A\x30\x6B\xEB\x9F\xEA\xDB\x57\x39\x43\x7F\x0C\xF6\xF6\x4D\x8D\xFF\x5C\xDD\x62\xDC\x95\x38\x49\x15\x26\xA9\x84\xE5\x17\x53\x83\xB4\x42\xDD\x77\xA7\x88\x09\xD0\x3C\x55\x34\x4F\xEE\x14\xB2\x35\x2B\x09\x5D\xA9\xC2\x84\x19\xA6\xE7\x30\x61\x86\x27\x0C\x49\x9B\xF7\xEC\x0A\x3D\xD7\x82\xD4\x68\x5C\xE9\x5E\x75\x59\x26\xFD\x64\xAC\x75\xEB\x36\xDB\x92\x31\x39\x2D\x7D\x1C\x6D\xEE\xE4\xD6\x9B\xBB\xBC\xED\xE6\x2E\x47\x9B\xBB\x3C\x76\x73\x97\xA3\xCD\x5D\xAE\x6C\xEE\xD9\xDA\xCD\x8D\x4E\x27\x01\xD1\xB4\xE6\x31\x2D\x7C\xCC\x4D\xAF\x73\x84\xEF\x30\x78\xC3\x22\x8C\x16\x01\x40\x63\xF6\xA5\xFF\x34\xB0\xAF\xBC\x42\x1F\xD7\xB1\x30\x1D\xD8\x30\x43\x8A\xF2\x99\x70\xE2\x8A\x7C\xBB\x7D\xBF\xCD\xFA\xF2\xDC\xB1\xDF\x26\xF4\xDB\x0C\xE5\xB9\x37\x87\xF2\xDC\x43\xBF\xCD\xD0\x6F\x1B\xFA\x5D\xC4\x95\x89\xC7\xE9\x49\xCE\xBA\xC4\x31\x84\x48\x7E\x5A\x82\xC4\x55\x1C\x98\xB7\x41\x8B\x15\x7D\x3F\xC1\x19\x6F\x94\x36\x15\x3D\x99\x74\xD6\x97\x57\xE7\xDA\x3B\x67\x89\x2D\x31\x12\x2C\x5D\xC0\x17\xF1\xC8\xDB\x09\x6B\xFE\x7A\x8D\x35\x5B\x3F\xD6\xA1\xFA\xF6\x06\x47\x4D\xBB\x19\xED\x4A\x84\xB9\x3C\x08\x76\x3F\x2A\xDB\x0B\x11\xCE\x95\x24\x09\x98\x97\xBE\xE5\x9C\x7D\xCA\x99\x71\x52\xEC\x93\x88\xED\xB3\x3B\xE6\xC9\xA5\xF4\x4E\xBE\x68\x2B\x4E\x8B\x74\x83\x08\x7A\x3E\x1A\xCA\x80\xEB\x1F\xD2\x3E\xD6\x78\x07\x90\xEC\x21\x6E\x01\x9A\x93\x81\xAE\xD7\x24\x4B\x11\x39\xB3\x54\x71\x66\x25\xD7\x58\x03\xBB\x90\xAF\x6E\x2E\x5F\x15\xB9\xE8\x98\x0E\x6C\x8F\x3A\xF0\x50\x38\x4F\xD7\x76\xE0\xC1\xD8\x81\x07\xD7\x75\xE0\xFE\xD0\x81\xFB\xD7\x77\xE0\x3C\x4B\xD0\xC0\x76\x7A\xFD\xF0\x64\x28\xDE\x9B\x0F\x01\x8E\x9F\x8C\x82\xBB\x19\xEC\x13\x7F\xBB\xD2\xC5\x91\x20\x37\x33\xDC\xD2\x60\xAE\x4A\xBA\x74\xCF\x99\x2B\x28\xBC\x90\x39\x83\xF8\xE0\xD4\xE9\xBD\xAE\x70\x48\x74\x4E\xC5\x98\x59\xEC\x75\x39\xF7\xC1\xF4\x2E\xF5\x47\xCF\xF4\x6D\xE9\x52\xA9\x20\x94\xEF\x73\xA8\x47\x0A\x8C\x81\x04\x5C\xFE\x61\x25\xB5\x15\x12\x49\x02\x94\x7C\xF2\xBC\x07\x9E\x6A\x1E\xAC\x43\xE3\x7B\x47\x5F\xCC\xF8\x8B\x1D\x7F\x49\xC6\x5F\xD2\xF1\x97\x6C\xFC\x25\x1F\x7F\x29\x26\x16\xA0\x8C\x7D\x4E\x05\x4F\x07\xA3\xF1\x66\x18\xD9\x5E\x5B\xBA\x8C\xE1\x34\x9C\xD9\xEB\x66\x0E\xB6\x3C\x04\x00\x24\x2E\xC3\xA8\x03\x88\x65\xB6\x47\xC3\x2E\x00\x45\x0D\xC3\x6D\x26\x83\x9F\x2D\x0F\x1E\x89\x0D\x0C\xD7\xC5\x41\xCA\xC3\xE0\xC7\xF7\xE2\xCE\xF1\xF8\x67\xDE\xF4\xE3\x29\x98\x79\xDB\x8F\x67\x81\x36\xE6\x78\x22\x66\x9C\x37\x12\xE7\x62\xC6\xF9\x25\x71\x3A\x66\x3E\xEF\x47\x33\x82\xBE\x15\xB4\xB5\xD3\x30\x31\x09\x4F\x4C\xC9\x56\xEB\x72\x8F\x34\x96\x89\xE1\x3A\x01\x1A\x38\x90\x84\xEC\x23\x5B\x1E\x24\xF9\x86\x2D\x3A\xE1\x73\x3A\xCD\x53\xC1\xF1\x23\x7A\x98\x23\x45\x1B\xD9\x91\x4B\x54\x91\x73\x78\xED\x0A\x71\xC0\x07\x9D\x3F\xCE\xAB\xF2\xF5\xA4\x0D\xD4\xB1\x79\xBE\xEF\x72\x62\x77\xBC\x41\xC4\xD3\x39\xDB\xA3\xA5\xCF\xFD\xD1\xA3\x20\xFD\xD9\x1E\x89\x80\x08\x3C\x4E\xDC\x6C\xAF\x4B\xBC\x3E\xEC\x66\x6E\xE6\xF2\x2B\x5B\x88\x0B\xCA\x43\x51\x97\x2B\x5B\x5D\x36\x04\xD8\x89\x6D\x16\x90\xBA\x34\x78\x92\x86\xCB\xBE\xCB\x41\x69\x26\x6E\x9F\xFC\xB6\xDB\x27\x27\x71\x6A\x06\xAE\xFF\x0D\xD8\x40\xD1\xA6\xA4\xC5\x03\xB2\xD7\x31\x7A\xBB\x13\x80\x4F\x83\x5A\x1D\xC1\x50\x82\x3C\x80\x82\xF9\x09\xDB\xCD\x8E\x9E\x71\xE2\x1D\x21\x16\x43\xE3\xB6\x2C\xDD\xD0\xB8\x67\x2E\xE9\x49\x09\x0E\x34\x6A\x39\xC6\x1F\xA1\xF3\xF8\xBD\xD5\xB8\xA7\xE5\xC4\xB9\x30\x01\x33\xA7\xE5\x01\xDA\x3F\x4E\x0F\x9B\x88\xF6\x8F\xD3\xC3\x26\xA2\xFD\xE3\xF4\xB0\x89\x68\xFF\x20\xC2\x3D\x7E\x4F\xE9\x7B\x3A\x7C\xCF\xE8\x7B\x36\x7C\xCF\xE9\x7B\x3E\x7C\x2F\x68\x67\x4B\x5E\x7E\x1A\x4B\xD9\x0B\x92\x6F\x31\x71\x3F\x98\x75\x20\x07\xF9\xC0\xA3\xEF\x8F\x29\xE8\x9C\x2B\xD9\x7C\x1F\x47\xBB\xC1\x30\x23\x5F\x42\x72\x7A\xF5\x87\x02\x87\x71\xE4\x55\xF3\xDE\x10\xA5\x45\xD3\xE0\x37\x11\xDA\xC3\x36\x72\x49\xF7\x46\xE8\x4F\xF3\xDF\xBF\x30\xD8\x6C\x80\x51\x0A\x00\xB4\x23\x08\x2B\x16\x59\xD9\x35\xC3\x26\xE8\xE6\x8B\x30\xC2\x9D\x16\x83\x09\x7B\xBB\x9A\x7F\xC7\x95\xE9\xE1\xA1\xE2\x7B\x3B\x0B\x50\xBA\x3F\xF3\x08\x29\x42\x70\xC5\x74\xB6\xF9\xEE\x17\x10\xD5\xA3\x8F\x69\xC6\xEB\x83\xD0\x92\x40\x15\x22\xD5\x1D\x5D\xBF\xE7\x11\x0E\x09\x6B\xDE\x47\x6D\x3C\xAC\xB4\x04\x7D\x35\x6C\xAF\xD7\x30\x09\x54\xFF\xA7\xD1\xE9\x91\x57\x01\xDC\xAD\xE1\x3C\x96\x04\x7E\x17\x7C\x22\x65\x27\xF3\xDF\xC2\xB8\x78\x00\x93\x49\xE9\xA7\x7C\xFA\xD3\x6B\xB4\x71\xC9\x6B\xB4\x79\x06\x18\xAD\x60\x5A\x80\x3C\x43\x1C\x92\x4F\x68\x79\x53\xBF\x29\x26\x94\x94\x67\x26\x65\xE3\x4E\xEA\x6C\xF3\xC7\x58\x8F\x84\x6B\xFF\x63\x4E\x33\x7E\x5E\x6A\x50\x6E\x53\x5F\x59\xFB\xB6\x5E\xC1\xC7\x96\xD2\xAF\x9B\x8C\xF0\x28\xCF\x47\x67\x1B\xA7\xB2\x6C\x9B\x86\x0D\x23\x08\xAD\x6B\xB8\x9D\x4D\xB1\x27\xC7\x22\x29\x90\x53\xD8\x1F\x44\x4F\x70\x53\x95\xCC\x88\xE6\xA8\xD9\x84\xC1\x33\x12\x6F\xB1\x7B\x9D\x79\xAD\x36\x00\x7B\x04\x28\x47\xE3\x12\x5E\x9C\xCA\xD9\xEA\x47\x0C\x64\x03\xAF\xB6\xCD\xE7\xDF\xF3\xC2\x75\xD5\x69\xEE\xF8\x47\x7E\xEF\xC6\x75\xD5\x1A\xFE\xEB\xB4\xAF\x9F\xEE\x83\xC5\xC5\x99\x2E\xA1\x7D\xF6\x5C\x97\xD2\xCF\xAC\xB1\x65\x4E\x5D\x45\x12\x0F\x12\x1E\xD1\x8B\xB4\x2D\x10\x44\xEA\x15\x20\x67\xBA\xCC\xE5\x5B\x5D\x81\x96\xA0\xE1\xBB\x6C\x8F\x7E\xD1\x5E\x31\x52\xBE\xB3\xB0\xD6\x5D\x64\xB8\x1B\x9A\x59\x47\xAD\xCE\xD5\x24\xB1\x36\x71\x68\x42\x6C\xA3\xB4\xDD\x17\x36\xD5\x16\xD2\x0F\x49\x3E\x6F\xEB\x17\x86\xBF\x3A\xD5\x63\xC8\xD9\x1E\x2D\x32\xBB\x43\x04\x2F\xDD\x6B\x5C\xF2\x47\xE3\x3B\xD8\x91\xE7\xCD\x5F\xE2\x00\xB9\xD1\x4D\x40\x63\xAB\xBE\x8D\x03\x76\x62\x28\x6E\x27\x3A\xB9\xD3\xCD\x0F\xF0\xFE\x24\xFD\x34\x10\x3C\x29\x4B\x7F\x7C\x53\xED\x0B\xBD\xDB\x70\xA1\x33\xCD\x77\xBE\x20\x40\x9E\x9B\x7D\xC0\x59\x00\xA3\xD7\x1C\x24\x49\x83\x1C\x74\x59\xA0\x40\x32\x70\xEA\xA6\x33\xCE\x34\xEF\x79\x81\xD9\xAB\xE1\xB7\x0A\x1C\x44\x6D\x18\x8B\xC9\x5F\x6F\xC4\x12\x4E\xDC\x3A\xF6\x86\xB4\x30\xE9\x08\xE3\xFE\xD1\x0F\x60\x1D\x73\xBD\x76\xAB\x77\x16\x34\x04\x57\x64\xF3\xFD\xE0\x31\x95\xD7\x55\x47\x9D\x95\xFB\xE5\x18\xE0\xFB\xE5\x1E\xAF\xAB\xEF\x65\xDC\x0C\xF6\xCD\x9C\x0E\x30\x56\x20\xCE\x77\x36\xFB\x9E\x31\xC3\x9D\xF1\xB5\xD3\x4B\x8F\x6E\xD0\xF1\xB8\xE9\xF4\x78\xDE\xF4\xF2\xBC\x41\x54\xDE\xA4\xE3\x88\xD5\x06\xAF\x7C\x29\x73\x82\x40\x55\x5F\x31\xC3\x93\x9F\xC0\x35\x43\xD7\x7E\xDA\x68\x73\x34\x24\x7A\x26\x91\x61\xA4\xFE\x55\x57\xE6\x8C\x80\x5B\x77\xCA\x97\xEC\xEB\x03\x1A\xA3\x49\x80\x2E\x29\x0B\xFE\xB2\x7A\x86\x08\x75\x4B\x6A\x96\xA4\x1C\x3F\xA6\x49\x87\x03\x3F\xD9\x0D\xDE\xB5\xD4\xFF\xE5\x5E\x80\x64\x71\x01\x70\x2D\x3E\x17\xAC\xC8\x30\x26\x80\x82\xCB\x84\x27\x62\xB8\xDE\x36\x35\x71\xBC\xC4\xEB\xD7\x6A\x49\x4F\xAA\x59\xBD\x8C\x0C\x5E\xF2\xD0\xD8\x79\x82\x3B\x88\x34\x74\xF3\xBD\x2F\x20\x1E\xB9\x01\x6C\x29\xD4\xBB\xE1\x24\x91\xC3\x83\x3A\x93\x79\xC4\x76\x01\x3F\x1D\x1C\x1D\x42\x90\x16\xE8\x4C\x3A\x9F\xC0\x82\x03\xA4\x51\x43\x1C\x84\xF8\x31\x8D\x93\x78\xC6\xC3\x1C\x67\x0A\xAE\x3D\xBB\x14\x14\xD7\xA0\xA6\x85\xE3\x07\xF9\x6B\x51\x2E\x78\x0B\x3C\xED\xD5\xCF\x6A\x9D\x1F\x61\x7A\x70\x21\xF5\x76\x9F\xE4\x01\xFC\x72\xD4\x7B\xFB\x38\x78\x26\x60\xBF\x52\xFF\xB6\x7D\x94\x9C\xCC\x5D\x02\x3F\x74\x1A\xD0\xA8\x83\xD3\x98\x44\x57\x71\xED\x55\xF0\x32\x77\xB5\xB3\xAE\x76\xF6\xF2\x56\x67\x49\x45\xC7\xDF\x99\xFC\x2D\xE9\x2F\xD8\x78\xD3\xB7\x29\xF2\x12\x93\xBE\xCB\xF9\xD8\xCE\xB8\xE2\x17\x60\xC5\xF8\x65\x40\x96\x75\xD6\xE5\xF1\x31\xF8\xBE\x33\x12\xC6\x32\xF6\x74\x57\x89\xF2\xAA\x7A\x6F\xA2\x93\x11\x5E\x68\xBA\x04\x66\x19\xB0\x20\xFD\x67\xF3\xAB\x80\x54\xE2\xBF\xC6\xE9\xCB\x1C\x64\xAF\xFD\x6F\xE4\x97\x23\xF1\x19\x0F\x07\x90\x71\x36\x10\x1F\x84\xE8\x81\x68\xB9\x26\x06\x4D\xFD\x88\x64\x0D\x93\xEC\xF2\x53\xBC\x0B\xB3\x48\x6E\xB9\x9F\xB9\x0C\x34\x9C\xB9\x64\x4B\xE8\x2E\xA3\x45\x6F\x38\xF6\x02\x01\xEF\x99\xEC\x0E\x21\xC4\x8C\x09\x31\x19\x08\x31\x89\x84\x98\x08\x21\x16\x0C\x01\x07\x42\x4C\x5C\x31\x10\x62\x41\x84\x58\x4C\x08\x31\x68\xAD\x59\x24\xC4\x8C\x08\x91\x05\x65\x22\xC4\x82\x44\x47\x84\x4F\x66\x42\x88\xE2\xA1\x6F\xA8\xDB\x0F\x2B\xCD\x90\x66\x74\x04\x5D\xC5\xCC\x9A\xCB\x9C\x87\x92\xB8\xD4\xDF\x2B\xC0\x5A\xA9\x3F\x23\xB1\xFF\x74\x8E\xCB\x27\xFA\x53\xBB\xD4\xBF\x7C\xE3\x3F\xDB\x31\xDB\x2E\xF5\xBF\xF4\x1B\x37\x90\x70\x0B\xFA\x2B\x7A\x97\xF9\xCF\xE6\x5E\x37\xFF\xC3\x0D\x46\x56\x5D\xBB\x22\xB8\xB3\x79\x11\x3C\x85\xE9\x34\x7E\x05\xA0\xA3\x4B\x07\xA8\xD3\xA4\x7A\xD7\x4C\xE7\xA3\x24\x9C\x24\x50\x07\x92\x48\x10\x53\x79\x51\x40\x9F\x18\x19\x0F\xFB\x80\xD3\x8A\x37\xBB\xA2\xEF\x4A\xFF\x41\xFD\xDF\x76\xB3\x60\xBE\x29\xDD\xCC\x7F\x50\x3F\xBD\xE7\x4F\x3F\xDD\xD3\x1D\x8C\xBF\xCE\xC2\x01\x07\x7E\x4B\xF2\x22\x22\x49\x32\x8E\xF6\x47\xA9\x9F\x5C\x80\x63\x69\x48\xA5\xCB\xF6\xBA\xCC\x9B\x67\xA9\x2D\xCE\xB8\xC8\xB6\x5C\xE1\xD2\x7E\xCF\xEB\xDE\xFF\x3C\xEC\x01\x25\x87\xAF\x8F\x81\x8D\x6A\x44\x3E\xD4\x1C\x4C\x9E\x57\x2E\x6F\x53\x97\x8B\xEA\xC6\xB2\x2B\x6D\x92\x12\xA3\xAB\xC5\x73\xC7\x3B\x15\x89\xC3\xE3\xF7\xE5\x5B\x4E\x09\xF1\x00\x78\xAF\x6C\xFE\xB7\x90\xDE\xB1\x89\xF6\xE3\x20\x52\x58\x0D\x30\x0D\x59\x98\x86\xDC\x65\x71\x1A\x18\xB3\x68\x93\x31\x8B\x68\x57\x1F\xB1\x2B\x69\x80\x5C\x3C\x4D\xD2\x07\x8D\x9F\xC3\xFB\x0B\x49\x8D\x43\x89\x70\x6E\x38\x1D\x1A\x4E\xC7\x0D\x23\x0A\x2A\x47\x0C\xAB\x91\x8A\x5A\x89\x3F\xE2\x13\x4C\x6D\x1B\x87\x1C\xAE\x1D\xE3\x90\xAE\xA6\xAE\xB2\xD4\xF0\xB0\x3A\x83\x6A\x69\x39\xBD\x4A\x50\xD6\x4F\x5C\x67\xAC\x5C\x23\x12\xD1\xC3\x6A\x83\x7A\x11\xEE\x4A\xFC\x46\x00\xA5\x2B\x4E\xFC\x55\xDC\xDA\x19\x9C\x02\x67\xD5\x06\x42\xBF\x24\xC9\x98\x47\xEA\x37\x25\xFF\x88\x04\xD9\xAC\x33\x02\xF6\x5B\xC0\xB3\x2B\xE6\xF2\x82\xE1\xD9\x24\x45\x45\xDC\x1A\x7C\x3B\x6F\xB9\xA0\x9B\x62\xFF\x3A\x83\x6A\x9D\x88\xC8\xA1\x0E\x19\xAF\x77\xB7\x78\xD0\xC1\x24\x85\x01\x42\xEE\x2C\x42\x60\xAF\xC4\x25\xD1\x24\x78\x73\xD8\x19\x76\x0B\xC6\xEB\x9D\x9C\xF5\x39\x44\x17\xA6\x07\x06\xDE\x0B\xD0\xC1\x29\x5F\xCB\x02\x4C\x66\xCA\xFC\x67\x04\x29\xC1\xA4\x56\x5B\x54\x01\xA8\xA1\x3B\x12\x21\xF2\x6E\x59\x4B\x55\xDB\xE6\x34\x2F\xEF\x97\x41\x58\x66\x58\x7F\xB3\x86\xB0\xB2\x09\x61\x15\xAB\x84\x85\x34\x98\xB0\x98\xD4\x51\x1E\x57\x58\xFE\xFA\xC4\x77\xC8\xF2\x63\x05\x3C\xF6\x57\x1E\xC8\x7F\x8C\x44\xEF\x46\xBB\xB8\x1B\x6F\x59\x76\xEB\xAE\xD9\xB5\x29\x0F\x76\xB4\x71\x8B\x3B\xD8\xB8\xA1\x6E\xF3\xF2\x76\x48\xA7\xFB\x2C\x1D\xEF\xB3\x94\x18\x0E\x1F\x3F\x44\x24\x48\x25\xE7\x52\x0A\x38\x52\x21\xAE\x43\x7E\x48\xF9\xB2\x46\x48\x23\x2B\x34\x23\xD8\xD7\xDF\xD6\x3A\x23\xE5\xF5\xF3\xCC\x7B\xC7\xBC\x50\x4F\x78\xA1\x01\xA0\xA7\xB8\x8C\xBB\xE4\x96\x9D\xA3\x3B\x24\x83\x7E\xC4\x0B\x01\x08\x6A\x25\xD0\x8F\x79\x61\x08\xAE\x8B\x13\x8B\xB0\x3A\x33\x99\x55\xB3\x45\x1A\xD4\x78\x4A\xD3\xDB\x4C\x29\x89\x45\xAD\x76\x56\xD0\xF7\x92\xBE\xF9\x80\x80\xEF\x7D\x0D\x61\xE4\x3E\xA5\xD6\xC1\xC8\x7D\x50\x7F\xDD\x61\xE4\xFE\x85\x26\x9D\x3C\x68\x11\xAF\x1A\x6B\x11\x46\x62\x03\x90\xBF\xD6\xF0\xD4\x6F\x0E\xB0\xFB\xC8\xF3\xAA\xA3\xCF\x00\x61\x66\xDA\xBF\xF5\x71\xA6\x4E\x9C\xF1\x15\xE3\xD8\x36\xBD\x7F\xEB\x7E\x88\x7E\x6D\x33\x67\x19\xF7\x96\xE4\x32\x7D\xC0\xFE\x83\x4C\x02\x25\x01\xE6\x7E\x08\x13\x12\xE9\x55\x19\x1D\x4D\xC4\xE8\x68\x51\xA3\x71\x2A\x73\x5A\x24\x05\x83\xA0\x53\x44\x06\x61\x54\x51\x19\x09\xA6\x99\x9F\x36\x3A\x5D\xB6\xB6\x04\x69\x4C\x0B\xB2\x7C\x94\xC6\xE2\x34\x98\x55\xE5\x88\x2E\xA7\xCD\x87\x6E\xAC\xC1\x9C\xD1\x82\xB0\x5C\xCB\xE4\x52\x8B\xAF\xBE\xC4\xEA\x74\xDD\xD9\x8B\x73\x76\x9D\x92\x92\xC8\xFA\x4A\x0D\xEF\xAA\xAF\x2F\xCD\x8D\x4B\xFD\xB7\xF4\x8B\x93\x89\x59\xFA\x97\x98\x71\x7F\x5E\xBD\x4E\x59\x43\x0D\x1F\x7A\x58\x2B\xF9\x67\xE4\xAF\x56\x62\xA0\x91\x48\xDA\x86\x48\x62\xC7\xD4\x78\x46\x93\x36\x5A\xAF\x5C\x73\x56\x8C\x3E\x6C\x6A\xC0\x95\x60\x07\xD2\xD5\xCF\x25\x00\x1B\x5C\x46\xC9\x6A\x30\x62\x31\x94\x48\x05\xC7\xD4\xDF\xF3\x08\x3C\x9B\x09\xF0\x92\x58\xB8\xF3\x2A\x44\xF8\xD4\xA6\xB2\xE7\xE9\x90\xA8\x51\xF5\x82\xA5\xB7\x9B\x7A\x1F\x04\x0D\xB9\x52\x64\xC8\xBE\x1D\x00\x48\x89\x66\x86\xB6\x6B\x8D\x34\x6D\x09\xA8\xE0\x39\x27\xB6\x8D\xFA\x0D\x09\xC7\x0E\x5D\x99\xEB\x3A\xAD\x82\x45\xF7\x91\x79\x82\xF2\xF7\xC9\x80\x95\x9A\xF3\x61\x3E\x7C\xE7\xDE\x5B\x36\x65\xE5\x5C\x37\x34\x41\xB9\x0A\x6A\x5C\x6C\xC7\x96\xBA\x4A\x9A\x9F\x40\xB6\xD0\x91\x9C\x49\x96\x22\x69\x18\x33\x3E\x3F\xE1\x16\x2C\x7A\x86\x01\xA6\x23\x63\x0B\x01\xE0\x3D\xB5\x9A\x59\x54\xDC\xA7\xF5\xFC\xC3\x1B\x7C\xBE\x87\xB2\x20\x19\xAE\xE3\x48\x6E\x0B\x16\x26\xD3\x50\xFC\xC2\xF0\x5A\xC0\x86\x27\xD2\xBC\xB3\x53\x8D\xD2\x4E\x34\x4A\x3B\x08\xF2\x96\x43\xB7\xC7\x82\x7C\xF4\x43\xE5\xA1\x18\x89\x11\xDC\x3B\xC4\x18\x6A\x57\xB6\xC6\x95\x71\x46\x4C\xCD\xA9\xF1\x25\x6A\xA6\x72\x36\x8F\xF2\xBA\x79\xFB\x0B\xD0\x84\x45\xD4\xA7\x9D\x0D\x90\x14\xEB\xB2\x87\x95\x0E\x1A\x68\x70\x71\x0D\xBB\xF2\xC7\x8D\xB6\x47\x4E\x35\x1F\x14\x46\x2B\xFB\x08\x74\x19\xC9\xCE\x29\x9F\x0D\x1B\x6E\x20\x37\xDE\x56\xA3\xCD\xBB\x1B\x55\x29\xED\x73\x8E\xC6\x52\xF7\x99\x24\x6A\xFF\x2E\x34\xAC\x9C\x7E\x8D\x36\x23\xC4\x10\x36\xF4\x11\xA3\x22\x66\xA2\xEF\x40\x6B\xFF\x13\xCC\x31\xBD\x54\x94\x25\x0D\x4C\x69\xF8\x55\x10\xF0\x09\x8F\x0C\xF7\x78\x30\x9D\xE2\xB2\x4C\x81\x69\xD9\xE0\x33\x98\x41\x3E\xA1\x51\x0B\xE0\xCE\xA7\x4E\x6E\x80\x78\x8B\xD0\xAC\x51\x85\xA1\x7A\x2E\x01\x5B\x02\xBC\xDC\x44\x43\xB4\x8E\x86\x68\xB6\x08\xF3\x88\xB5\x53\xC3\x88\x49\x4D\x08\xC9\x6D\xC1\xE2\x1D\x46\xBC\x11\x17\x24\x5B\x5A\x10\x98\x2A\xAA\x1B\x23\xBD\xBB\x89\x45\x24\xD8\x10\xCA\x99\xF9\x12\xFF\xDC\x25\x3E\x45\x69\x72\xF8\xE6\x8D\x0D\x05\xF1\x1F\x19\xE2\x96\x9C\x6C\x21\xDD\xB3\x57\xBA\xE8\x59\x32\x52\x2C\xAD\x6D\xA1\x5A\x42\xCD\x87\xBB\x01\x6E\x33\x86\x1A\x63\xFF\x9B\x2E\x71\x92\xBA\x1C\xB4\x1A\xB1\xF4\xFF\xC0\x08\x04\xBA\x91\xA7\x6B\xA9\xB8\x7F\xD4\x3B\xB1\x34\x6E\x4A\xED\x95\x74\x48\x9A\xD3\x83\x28\x13\xAC\xB9\x1C\x82\x0E\xA3\x2E\x1B\xF1\x12\xA7\xF7\x18\xCC\x27\xBC\x15\x77\x73\xFE\xE1\x90\x87\x5E\x05\x26\x28\xA3\x8D\x05\xE3\x20\x1E\x49\x82\x77\xB7\x3A\x6A\x0E\x10\x4D\x11\x44\x0D\xC3\xB8\x50\x86\x8E\x90\x39\x34\x5E\xE2\x5F\xE9\xC2\x2A\x04\x3D\x8C\xA7\xA7\x90\x1A\xA9\x09\x40\xA5\x15\xFB\x41\xD2\xE6\x3B\x68\xF1\x43\x5B\x3C\x0E\x66\x53\xB4\x71\x34\x1C\x32\xC4\xCE\x6F\xDA\xFD\xD1\x08\x42\xE9\x3A\x96\xB0\x4C\x94\x27\xAB\x9B\xE5\x04\xD2\xCD\x8A\x98\x09\xF1\xE0\xB4\xB3\xB4\xB0\x67\x9C\x65\xC2\xB4\x48\x57\xE6\xE0\x5A\xCB\xA9\x24\xA7\xFB\xE6\x23\xD4\x0F\x06\x6B\xAF\x3B\xC5\xAF\x51\xFE\x69\x62\xC5\xCA\xBF\x99\x98\xA9\xF2\x6F\x62\xE0\x2C\xE5\xDF\x2A\xB8\x0B\xA5\x53\xFE\xB0\xEF\x10\x10\xA9\x77\x83\x89\x9A\x27\x92\xF8\x5B\xB9\xE7\x93\x67\x2F\x8B\xA2\xE5\xF5\x63\x43\x1D\x88\xD2\x55\x3E\x39\xEC\x3B\xEC\xDE\x0A\xC3\x6D\x35\x57\x55\x93\x68\x0D\xA9\xB0\x00\x68\x3B\xA1\x9C\x11\x58\x94\x20\x88\x37\x62\xD3\xB0\x52\x63\xA6\xAE\x13\x0E\x01\x77\xDA\x55\x3C\x26\x2E\x03\x54\x71\xAC\xB1\x94\x83\xEE\x14\x42\x41\xBA\x79\xDF\x2D\xB8\x3C\xF6\xC6\xE3\x28\x69\x61\x0E\x5B\x6D\x91\xC4\xDD\x23\xAE\x9E\xE3\x30\xE1\x74\xAB\x69\x5B\xD4\xC3\xE3\xBA\xE7\x18\xD0\x76\xE1\x38\xE0\xB3\x9B\xF7\xD2\xD6\x15\x36\x06\xB0\xAE\x49\x23\x3F\xEA\x03\x65\xA0\x72\x28\x6F\x33\xB7\x41\x9F\x6B\x67\x9A\x17\x5E\x10\xB4\x29\xEB\x8D\x33\xCD\x8D\x17\x24\xAF\x1C\x15\x90\x87\x8D\x29\x3D\x28\x89\x38\xAB\x5E\x4A\xA7\xCB\x0D\xA1\xD5\xE5\x7B\x58\xB3\x6D\x43\x22\x54\xD3\x77\x25\xE2\x57\x59\x25\xAD\x18\x49\xBC\x82\x4B\x7F\x03\xD3\x5F\xED\x79\xBB\xCF\x28\x25\x3C\x1D\x98\xA9\x76\x6E\x65\xE6\x4A\x9A\x9A\xD2\xCD\xFB\xE9\xEC\x20\xE2\x75\x1E\x5E\x5F\x71\x85\xF1\x05\x11\xF4\x62\xCE\x61\x34\xF6\xCA\x5C\x4F\x9B\xC4\xDB\xB0\x32\x2A\xB4\xBE\xA0\xD6\x55\xEF\x16\x6E\x4E\x7F\x03\xAA\xD8\xE8\x12\xED\x0B\xB9\x3A\x82\x31\x1B\xDF\x50\x0C\x37\x14\x6B\x6F\xA8\x87\x1B\x62\x96\x0D\x91\x52\x4B\x43\x4E\xB8\xFF\x6F\xEB\xBB\x2A\x80\xF4\xBB\xEA\x2A\xD0\xFE\x0B\x06\x3E\x72\x19\x22\xE8\xDD\x0C\xA1\x9B\x15\xEB\x79\xC4\x38\xA0\xAA\x4F\x05\xBB\x45\x62\x95\x46\x30\xF9\xB6\xD4\x68\x70\xCA\x15\xCD\xDF\x17\xC2\x1C\xFD\x6C\x5C\xD1\xFC\x03\xFC\x6C\x64\xCD\x2A\xD9\x8B\xA8\x7E\xD0\xE9\x3D\x7F\x66\x97\xB1\x4A\xFC\x5B\x07\xB3\x37\xED\x3F\x41\x82\x1F\x60\xBD\x9F\xEA\x3B\x01\x95\xD0\xC1\x7E\xE0\xDF\xC8\x39\xCA\xB4\xE9\x68\x0F\xD5\xD8\x32\x6F\xC2\x96\xB1\xCB\xDD\xFB\x51\x76\x8B\x25\x1C\xE9\x2C\xC5\x1E\x34\xED\xE5\xAE\x42\xA4\x15\x88\xDA\xEE\x6E\xD1\x46\xD9\xDD\x62\x53\x4B\xB0\x7E\xF1\xC0\x99\xA5\x6B\xAE\x0A\x44\x3D\x6E\xA3\x4A\xAB\x18\x26\x8C\xF4\x43\x9E\xC8\x7A\xE8\xF9\x61\x0F\xE8\x9A\x37\x61\x2D\x44\x33\x43\xF9\x08\x55\x31\x33\xAB\xC3\xC9\x58\xC1\xD7\x2A\x7C\xAE\xAA\xBE\x63\x10\xAB\xA7\xE9\x89\x7B\xFE\xCC\x5B\x3A\x76\xBC\xF9\x7F\xF2\xFE\x77\xFF\x8C\x7A\x5C\xBA\x98\x31\x97\xE7\x1B\x72\x00\xEA\xB8\xC2\x65\x57\xB6\xFC\xCF\xD0\x6D\x2E\xF7\xEF\x7F\xF7\xCF\xDC\x1B\x23\x18\x72\x36\xCC\x4A\x13\xDA\x65\xFE\xCC\xD3\x41\xE0\xAD\x60\x30\x3B\xF3\x74\xDF\x95\xCC\xA6\xCA\x90\xD3\xED\xCA\x98\x34\x55\x46\x66\x95\xE3\x61\x46\x4F\x3A\x43\xFB\xC4\xBA\x84\x83\x60\x35\x42\x46\xD1\xD7\x37\x91\x6A\x6A\xE9\x73\x4E\x9F\x53\x58\x5D\x55\xB0\xF9\xC3\x04\x7F\xD8\x77\x05\xB7\x08\x11\x99\xAD\x46\xC4\x9B\xA5\xA6\x58\xE1\x72\x46\xEA\x60\xC3\x6D\x4E\x97\xD2\x98\x43\xF8\x7C\xCF\xE1\x1E\x26\xFE\xF2\xB6\x1E\xD2\x7A\x84\xEE\x63\xAF\x6F\x60\xB0\x9A\xBA\xA1\x7B\x06\xF1\x63\x8F\x7E\xC1\xE1\x30\x59\x64\xCB\x01\x9D\x91\xC6\xC0\x36\x2C\xBB\x3B\x37\xE8\x14\x49\xEB\xE6\x3C\xDB\xD9\x72\x96\xF3\x93\x9E\x13\xCE\x62\xE0\x16\x0D\xA9\xA5\xD9\x79\x13\x0C\x8E\x88\xD2\xAB\xED\x18\x3B\x4F\xDE\x1A\x4E\x81\x52\x72\x5C\x26\xC1\x62\xD5\xFF\x91\xE9\x5A\x8A\xDA\xC1\x11\xCC\x6A\x13\x97\x1C\xB5\xE7\x5D\x2A\x75\x56\x12\x27\x99\x59\x79\xA0\x9B\x58\x11\xA7\x2B\xE8\xB4\xBF\xD6\x2F\x12\xC3\x88\x71\x45\xB0\x57\x79\xEC\x86\x82\xAD\x85\xB8\xCB\xEC\x6E\x31\x71\x20\x80\x4A\xAA\x05\xC1\xD9\x5E\xF8\xC3\xDE\x97\x6C\x8B\x9A\x5D\x42\x86\xE2\x26\x9B\x6C\xB6\x4D\xC3\xDF\x83\xA1\x31\x1D\x24\x2C\x7E\x72\xF3\x91\xB9\xF6\xDA\x15\x87\xFE\x9D\xBF\xF6\xB2\x42\x6E\x8D\x4B\x5D\xDE\xFC\xB5\x17\xE0\xAC\xE4\x80\xBB\x0C\xF2\x1C\x34\xA6\x5D\x08\x26\x50\x83\x60\x79\x4E\x5C\xC6\xBC\x1D\xDA\x52\x5B\xB8\x8C\x31\xEA\x39\x72\x3E\x0A\x34\xA3\x21\x0E\x26\xB9\x14\x30\x3F\xD8\xA8\x3C\x40\x62\xDC\x22\xF4\x54\xA1\x4E\x00\x6C\xA8\xB5\x04\x5F\x13\x15\xD4\x7C\x2D\x89\xF2\x51\xCD\xE5\xE1\x53\x07\x04\xFB\x9A\xE4\x1A\xC6\xED\x45\x75\xE9\xB1\x5C\x53\xF3\xEB\x4D\x5B\x85\x87\x47\xF6\x83\x4A\x5C\xA0\x29\xE9\xB2\x29\xE3\x84\x25\x28\xFA\x8B\x50\x97\x00\x1D\x93\xB8\x6C\xAF\xAD\xE2\x80\xA1\xD4\x21\xAE\x8F\xD9\x67\xF1\x38\x23\x1A\x12\x07\x49\x89\x7C\x0A\xEA\x18\xBA\xCB\x11\xF8\xEC\x11\x8B\xA5\x9B\x2C\xC7\x3D\x75\x73\x62\x7A\x0B\x24\x00\x43\x1D\xD6\x8F\xCF\x13\xF1\x79\x16\x6E\xB6\xD7\x15\xDE\x3E\xDB\x6D\xB8\x0D\x97\x4A\xEC\x13\xBA\xF7\x2C\x7D\x7C\xDD\x95\xAD\x6E\x63\x88\x7E\xDA\x08\xCF\xA7\x6E\xC3\x27\x87\x43\x2C\x54\xE1\x16\x10\x85\x6E\xD5\xBB\x02\xCF\x10\xAF\x60\xBF\x9D\x39\x1F\x8A\xDF\x14\x6E\xE6\xE6\xD1\x9E\x63\xF9\x61\x8B\xAA\x23\xCE\xB2\x91\x96\xD1\xDE\xC2\x26\x4B\xD8\x04\x74\x79\x0B\x85\xEE\x49\xB3\x77\x7A\x17\x39\x99\xF0\xBE\x17\x17\x69\x3A\x07\x05\x13\x05\x9A\x06\xC9\x32\x19\x25\x74\x86\x30\x0B\xBF\xD9\xF3\xE6\x92\x82\xCE\xC5\x40\x68\x0E\x7D\xCC\x39\x9B\x50\x0D\x26\xF3\x32\x94\x84\xCD\x89\xC2\xBE\xA5\x5F\x9C\x54\x7A\xE9\x1F\xD1\x64\x19\xAE\x46\xC3\x8C\x1A\x0C\x33\x68\x1F\x5B\xA0\x88\x5B\x20\x01\x9A\xEC\x0B\x5C\x2B\x35\x6B\xE5\x9E\x47\xD9\x9E\x2A\x9B\xBC\x8A\xE0\xE7\xB1\xF5\x65\x9B\x91\x32\xA8\xED\xD3\x74\xF3\x6D\x53\x93\xD6\x36\x07\x68\x27\xE2\xAC\xF2\x6D\xC1\x51\x25\x65\x4D\xDC\xEB\xB9\x2F\xFA\x2E\xC7\x5D\xF4\x9F\x5A\x40\x98\x20\x3E\x20\xA0\x88\xC4\x66\xC1\x9E\xBE\xD1\x30\xAE\xB3\xCB\xFD\xEC\x2A\xFE\x94\x57\x25\x2B\x52\x02\x29\x66\x2E\x77\xB9\x57\xCD\x47\x83\x6A\x80\x1F\x62\xC4\xC3\xB0\x15\x91\x78\x5C\x30\xFD\x17\x44\xFF\x75\xA4\xFF\xCA\xCD\x58\xBF\x74\xA6\xF9\xAB\x98\x0F\x2E\x8C\x80\x3D\x91\xF3\x9E\x98\x3F\x8E\xD7\x83\xEA\x90\xCE\x57\x70\xEA\x51\xE2\x72\x46\xF5\xB7\xE2\x49\x49\x18\x1E\x2F\xEC\x89\x0D\xDA\x13\x0D\x8C\xFE\x91\xA6\x25\x1E\x70\xEE\xB0\x67\xEC\xB3\xDD\x09\x77\x22\xC6\x03\x42\x3E\x8E\x7B\xE2\x04\xF6\xC4\x9C\xDA\x3C\x11\x9E\xCF\xDC\x89\x61\x4F\xCC\x19\xA1\x93\xF6\xC4\xAD\x7A\x37\xC7\x33\x90\xC9\x69\x4F\xD0\x14\x6F\x48\xFA\x95\x9B\xB9\x8D\xD1\x9E\xA8\x79\x4F\xE4\xBC\x27\xE6\xAB\x7B\x02\x41\x44\xA7\x59\xF5\xC6\x54\x82\x72\x69\x87\x94\xC4\xD4\x0B\xDA\x21\x73\xAE\xBF\x5A\x20\x91\x10\xD6\xFC\x20\x7E\x0C\x9B\xE5\xDB\x33\x7D\xF2\xC8\x8B\x41\x7A\x38\x7D\x96\x36\x87\xD4\xE1\x9D\xC5\x92\xCF\x49\x57\x3B\xFD\x58\x37\x8F\xC2\x53\x1D\xC1\x7A\x00\x19\xE8\xD3\x4B\xE2\x11\x48\x88\xEB\x2E\xE6\x88\x5F\x30\x43\x2B\x24\xC2\x21\x8F\x3C\x21\x0A\x5C\x78\xBD\xBB\x35\x7E\x9A\x8B\x58\x4D\x1F\xC1\x9B\x16\x43\x9C\x7E\x42\x73\x58\x85\x8A\x98\xE2\xD1\x6E\x01\x9F\xD6\xB4\x33\x9A\xA2\xD2\xEB\xFD\xAE\x64\x73\x9D\x40\x89\xCD\x42\x78\x17\x9D\xAF\x0B\x64\xBC\xE4\x5C\x7B\xDD\x55\xFC\xF7\x12\x52\x31\xC0\x40\x17\xC8\xC4\x72\x8B\x36\x63\x7B\x22\xB2\xE7\x17\x6E\x76\x99\xE4\x09\xFA\xD5\x56\x2E\x6D\x4B\x97\xD0\x86\xA3\xEF\x06\xDF\xB9\x44\x61\x81\x92\x83\x58\x02\xEC\x1D\x97\xB9\xB4\x79\x27\x08\x7B\x83\x6F\xE0\xE3\x8E\x8D\x86\x89\x2B\xDA\x45\x28\x71\x9E\x35\x7F\x8F\xE3\xD4\xF8\x8D\xB5\xF4\x86\xB7\x4D\xED\x8A\x3D\xD4\x9E\xE6\x07\x4F\x84\x2D\x92\xF0\x16\x41\xF5\x92\x84\x89\x30\x71\x0D\xD1\x51\xE2\x4E\xEC\x00\x83\x7D\x83\xB7\x48\x32\x6C\x11\xAE\x26\xD6\x9D\xDC\xEB\x4E\xD1\x16\x81\xC1\x3F\x99\x1E\x1B\x34\xE2\x93\x7B\xDD\x82\xB6\xC8\x3D\xEE\x1E\x97\xC4\x2D\xB2\x18\x6D\x91\x7B\x30\xA9\x28\xAA\x72\xCF\x70\x6C\xDC\x33\x6C\x91\x45\xE5\x16\x6E\x13\x5B\xE4\x56\xBD\x5B\xE0\x99\xBE\xDD\xE0\xE5\x4D\xCC\x79\x77\x8A\x57\x6E\xE1\x4E\xBA\x53\xA3\x2D\xB2\xC1\x5B\x24\xE1\x2D\x82\xFD\x75\x92\xB6\xC8\xC9\xB0\x45\xE6\x34\xFF\x6D\xE1\xAA\x36\x77\x33\x6C\x8C\xB4\x62\x75\x2F\x09\x92\xFA\xE8\xD4\xF8\x45\xC3\x25\x75\x2C\xF3\x38\x0E\xB4\x7A\x0F\x47\x45\xE2\xCB\x55\x1A\x61\x08\xB6\x4B\x46\x85\xF1\x53\x89\xB5\x4B\x10\x21\x47\xF2\x9A\x6E\x73\x89\xC3\xB3\x2E\x69\x0B\x31\x69\x21\xC5\xFB\xB9\xAE\xF4\xF5\xD3\xDD\x4C\x4A\x4B\x68\x97\x5F\xED\x6A\x64\xE3\xCC\xFA\x6D\xE2\x14\x8F\xCD\x49\xE7\xF6\x0A\x89\x52\xDD\xCC\xD5\x5B\x1C\xC2\xE7\x4A\x1C\xDF\xAE\xDE\xEA\x0A\x09\xBC\xB3\x2E\x7B\x7C\x6E\x1C\x3B\x19\xD8\xF6\x60\xB9\x34\x4A\xCE\xA7\x58\xC5\x6A\x05\x49\xE5\xE6\xF2\x16\x4D\x05\x92\x7A\xD9\x9E\xCD\xD1\xBF\xFD\xC2\x6A\x3A\x3C\xFC\x91\x47\x71\xBE\xBF\x04\xFF\x31\xAA\x54\x3F\xE3\xF5\x3E\x1F\x83\x05\xFF\x4E\x67\xA0\xD7\xFB\x30\x3E\xC1\x1B\xE7\x72\x52\xAC\x49\x22\x64\xCE\x8F\x17\xD2\x94\x70\x48\xD2\xA3\xC0\xEE\xFF\x11\x1D\xC0\x14\xE2\x39\xA2\x79\x8E\x8D\xA7\x9D\x04\xB6\x53\x0A\x3A\xA2\x9C\x27\x74\x4B\x39\x3E\x4F\xF0\xC3\x10\x41\xE7\xAB\xCB\xD8\xA5\xF1\x7E\x0F\xCB\x38\xDF\x8F\xD8\xBF\x2A\x06\xDC\x6D\x54\xD3\x86\xA7\x37\x0E\xCB\xFC\x4D\x55\xF5\x5D\xB9\xCD\x8E\xF4\x35\xBD\x2A\x3D\x78\xC6\xDD\xD0\xFE\x7A\x21\xF9\xFE\x29\x2B\x6D\x22\x80\x42\x73\x83\x64\xF0\xCB\x30\x54\x24\x24\x26\xE8\xAE\xF0\xA7\x0F\xFD\xE9\x67\xBB\x72\xC7\x9C\xC1\x33\x05\x6A\x42\x7F\x52\xEE\x51\xF7\xD1\xF1\x74\xCE\x36\x38\x04\xAF\xF5\x5D\x2A\xA0\x16\xC8\xA4\x0E\xB6\xEA\xCC\xA5\x3E\xA1\xFF\x5F\xD9\x6A\x7E\x22\x10\x24\x30\x33\xE0\x18\xFA\x71\x36\xBF\xB3\x11\xEB\x0C\x0E\xB8\x4F\x80\x8B\x7F\xE9\xA6\x85\xDB\xE3\x4B\x37\xED\x8E\x39\x53\x23\x0C\x2C\x65\x4E\x78\x29\x5E\xCE\xE9\x2F\x89\xCB\xE3\x1A\x97\xC1\x8D\x79\xD4\xE3\xF0\x6A\x4B\x76\x93\xA3\x32\x60\x36\xBA\x81\x2B\x87\xD2\x0D\x2E\xBB\x38\xE7\x32\xF1\x17\xE6\xE7\x24\x0F\x1E\x72\x77\xE5\x66\x2F\x8A\xF6\x52\xFA\x2F\xAA\xDD\x10\xAD\xD5\xD3\x9C\x14\xE2\x4C\xE8\x52\x57\xEE\xD1\x80\x6B\x31\xCC\xFA\x2F\x29\xAF\x9A\x8F\xC1\xC1\x90\x21\x6E\x83\xFA\xCE\xC0\x22\xB6\xF9\x9F\x19\x81\x90\xC8\x7A\x76\x0E\x36\xA8\x44\x72\x33\x13\x54\xA7\xC3\xBD\xB2\x26\xA5\xA0\x9D\x8C\x7B\x5D\xED\x31\xC3\xE1\x1E\xC0\xA8\x18\xDA\xE4\xC8\xC8\x36\xA5\xFD\xA0\x5D\xE1\x3F\xA9\x76\xB7\xE8\x48\xE1\x28\x26\x12\x6E\xF3\x3D\x71\x84\xCA\x1E\xCA\x58\x2A\x84\xDC\xF7\x2B\xB2\xAE\x1C\x6B\xC6\x3C\x0E\xDB\x98\xDE\xE4\xD9\x76\xC4\x31\xF0\xC8\xE6\xFA\xFD\xBF\xFD\xED\x28\xDC\x57\xFA\xBF\x7E\xFD\xC6\x75\xB5\x3B\x4F\xBD\x45\x8E\x0D\xBE\x7A\xDB\x7C\xFF\xB7\xA1\x53\x29\xF1\x9D\x4F\xFE\xD0\xB7\x5F\x57\x9D\xF2\xEA\x51\x54\xE6\x58\xFA\xC9\xBA\x6C\xCE\xF5\x62\x27\x3F\x9B\xCA\x7F\xF2\x8B\xEF\xA0\x97\x84\xC8\xB8\xEC\x22\xDD\x0B\x70\x11\x0B\x0C\x16\x58\x4B\x8F\xFA\x4E\xB1\xF0\x37\xDC\x1F\x6D\x81\x5D\x3E\x42\x1C\x6E\x7E\x88\x53\xF0\x45\x4E\xBD\x84\x93\xAD\xDC\x05\xCA\x74\xE9\xB2\xD0\x65\x3A\x18\xA7\x8D\x57\x95\xAC\x13\xF1\xEC\xFB\x6C\x73\x8E\x38\x45\x9B\x32\x72\x52\xEA\x2A\xA7\x9B\x8F\xDD\x60\x3F\x40\x3A\x16\x55\x5C\x5A\xBD\xA2\x75\xBA\xEA\x30\x10\xA0\x17\x5E\x30\xC5\x09\xBE\x17\xDB\x84\xD8\xA1\x98\x65\x3D\x48\x63\xBC\x6B\x0C\xDC\x16\xB2\x65\x52\x76\x26\x65\xFE\xE6\xCD\xFF\x35\x44\x2B\xBB\x94\x11\x1F\xAC\x4B\xF7\x60\x17\x48\xA5\x4C\x74\x16\xF6\x89\x95\xD0\x04\x54\xB6\xA7\x51\x1E\x5D\x45\x38\x60\xE5\x34\x48\xDF\x33\x3E\x40\x24\xFF\xC1\xE4\xED\x92\xEA\xE7\x52\x9D\x1D\xA3\x9A\x18\xAF\x63\x44\x66\x1D\x84\x94\xD4\x1B\xC6\x36\x85\xF7\xC8\x11\x57\xF0\xD7\xFA\xD7\x68\x38\x4B\x95\xB3\xCD\x8F\xDD\x08\x61\x01\xAD\xE1\x60\x6D\xD4\xF0\xAD\x39\x1E\x5D\x4B\x7A\xBF\x46\x53\xC9\xD0\x54\xC3\x4D\xC1\x72\xC2\x46\xB4\xA1\xA9\x62\xDA\xD4\xE6\xE5\x10\xA3\x1C\x8E\x8C\xFD\xE0\xF1\xCE\x83\x7D\x5C\x82\xA3\xA2\x22\x93\x2E\x0D\xC3\xC4\x50\xFA\x30\x8C\x82\xBA\x5F\x78\xD3\xAF\x19\x86\x84\xD5\xC7\x61\x48\xE2\xC3\xDA\xC6\x30\x90\x62\x5B\x54\xEC\x35\x03\x19\x1A\xDB\x0C\x8D\x8D\x0E\xA2\xD4\xCF\xFC\x2C\x1E\x2B\x69\xF3\x3D\x2F\xB0\xDF\x26\x6D\xBE\x8B\x9D\x1D\x8C\x6C\x34\x72\x73\x89\x6B\xA4\x80\x74\x4C\x52\x72\xE1\x43\x55\x3C\x43\x9C\x9A\x06\xD4\x95\x8F\x4B\x34\x46\xE9\x8F\xFA\xD8\x23\x94\xA0\xCA\xE5\xE9\x0A\x37\xF3\x04\x70\x46\xB4\xC4\xA9\x0A\x0C\x4C\x3E\x1E\x3A\xCD\xF4\xE5\xB9\xE4\x4E\xC6\x17\x8F\x5E\x0A\x4E\xF7\xD8\x31\x2F\xDD\xE4\x97\x36\xF1\xA5\x1C\x79\x5B\x86\xD7\x16\xCB\xAF\x75\x25\xB6\xC4\x63\x02\x00\x8A\x2F\xA1\xC1\xF1\xD6\xAC\x3E\xA2\x11\x96\x3D\x60\xBD\x76\x6B\xF6\x9C\xA4\xC5\xF0\x9E\xB3\x03\xCC\xAB\x1C\x53\x4E\xF1\x01\x25\xCE\x35\x29\xD5\xAD\x05\xF4\xA8\xDF\x09\xA5\xDA\x12\x67\xC1\xB6\x2D\x42\x1F\xB0\x19\xC3\x6D\x72\x68\xF1\x6D\x7C\x68\x71\x4C\x3A\x9F\x45\x26\x6C\x46\x7F\x54\x7D\x4E\x4B\x08\x34\x0C\x2D\x38\x47\x61\xA0\x49\x86\x00\xDC\x8D\x58\x5B\xCE\x0E\xE7\x39\x10\x72\x39\x3E\xFD\x27\x58\x74\x80\x40\xB7\xE6\x60\x36\xE3\xE1\xD2\x46\x90\xBC\xF8\x30\x5C\x33\x19\x6E\x3A\x19\x6E\x3A\x1E\x6E\x8A\xE1\x12\x7F\xD9\x20\xD6\x79\x47\x23\x4E\x78\xC4\x49\x1C\xB1\xAA\x3E\x33\xD3\xC5\xBA\x38\xD6\xC1\xEE\x9C\x5E\x0C\x02\x4C\xC6\x03\x86\x4F\xDD\x5C\xD0\xCC\xCD\xD2\x61\x02\x63\x9F\xE1\x15\xBF\x50\xAC\xBB\x21\x7A\x05\x59\x94\xC9\x24\xD2\x0E\x96\x93\xF5\x82\x4C\x3D\x11\x64\x72\x16\x64\xEA\xAE\x88\x53\x26\x22\x4C\x1D\xC2\xA9\x73\xEE\x40\xC1\x73\x62\x06\xD1\xA5\x2B\x27\xC2\x4B\x37\x13\x2D\x47\x44\x97\x7C\x72\x83\xCB\xF7\x70\x03\x46\x90\x93\xE2\x3B\x2E\x08\xBF\xFC\x3F\x57\xF8\x27\xFA\xC5\x15\x13\x4C\x3D\x77\xFA\xAF\xA4\xFF\xCC\xE4\x4B\xA6\x94\xCA\x55\xA1\x2A\x95\x02\x37\xFE\xA6\xBA\x3A\xAF\x5C\xD1\xDC\xA0\x43\x93\x3E\xF9\x27\x7A\x3F\xBB\x32\x27\xE9\xB9\x60\xC0\x80\xB4\x9E\x57\xA4\xFA\xCF\x58\xC2\xF8\xBC\x06\xBC\xC2\x0C\xB7\xE2\xF4\x44\xF7\x67\xB0\xB6\x26\x1C\xB4\x91\x8B\xD0\x09\xBC\xB4\x3C\x3C\x02\x78\x71\x09\x4E\x84\x21\x1A\x62\x11\xC3\xAD\xD9\x43\x57\xF4\x68\x10\x46\x2E\x97\x30\xF4\xC4\xAD\x1A\xBA\xD6\x87\x66\x4C\xBF\xDC\x08\xAC\x91\x57\xE7\xB9\xD3\xB0\x7E\x62\x14\x25\x46\x01\xDE\x25\x4B\xEE\x4C\xF3\xE3\x7C\xE0\x5F\x9E\x17\xB2\xE8\xFE\x8B\x8A\xD3\xDC\xD7\xDD\x14\x0C\x01\x41\x9F\x4A\xF8\x0C\x7A\xA2\xEF\x52\x9A\x34\x4E\x06\xFB\x38\x91\xDE\xE2\xCF\xF3\x7C\xDB\x63\xFF\xC9\x75\x26\xE7\x94\xA3\x7E\xAE\xF0\x84\xBA\xDC\xFF\x08\xC7\xA4\xFA\x1F\x3A\xEA\x7D\x76\x65\x8B\x47\x54\x40\x77\x2D\x68\x64\x25\x08\xE8\xE2\xBC\xC4\x8C\xA2\x53\xAB\x1D\x7E\x6C\xAE\xEA\xAA\xA2\xE6\xBE\xA4\x2E\xCD\x73\x1A\x7E\x3E\x5E\xD7\xB2\x92\x56\xC2\xA4\x14\xCB\x93\x12\x46\xF8\xF1\x23\xCE\x1D\x1D\x8D\xD5\xCD\xC2\x18\xF3\x63\xFF\xC9\xF5\x8A\xA7\xAA\xE8\x88\x64\x3A\xCB\x8F\x17\xD4\xE8\x97\xD5\x44\x9C\xE3\xD9\x9D\xCD\x97\x4F\x0E\x5B\x56\xE9\xE4\x39\xBC\x92\x9F\x2D\xE8\x59\xCB\x9A\x25\x3F\x5B\xC4\x67\x2D\xA2\xD4\x9C\xEA\xC3\x3C\x01\xDB\x61\x16\xBE\xE5\xF4\x6D\x1E\xBE\x01\x0B\xA1\x0C\xDF\x50\x8D\x2B\x0F\xDF\x50\x6E\xA9\x0E\xDF\x90\xC6\x5F\x85\x6F\x28\x35\x17\xF0\xFD\x55\xAB\x5C\xAC\x85\x88\x45\x20\xB5\x06\x54\x08\xE9\x34\x88\x75\x23\x3E\x37\x89\x8C\x4D\xAB\x7F\x5A\x59\x7D\xA4\xAF\x35\xAB\x7C\xD6\x25\x8C\xED\x97\x4A\x89\x0E\x9A\xC8\x0B\x74\xA5\x79\x23\x89\x1F\x2F\xD2\x9E\xFE\xE7\xCC\x70\x6D\x60\xB8\xD9\xA0\x3D\x8D\x53\x8E\x72\xBF\xC9\x7C\x6E\x94\x64\x55\xC4\xAB\x65\xB4\x21\x17\x7E\x33\x40\xF4\xF0\x31\x96\x45\xCE\xC8\xE7\x05\x97\x25\xA8\x91\x32\x6E\xCE\xBB\x1A\x1B\xAE\x16\x03\x27\xFD\x19\x2B\x33\xDA\x55\xA4\x98\xC2\xB2\x0F\x24\x53\x59\x97\x39\xF7\x25\x4A\x52\xB3\x91\x24\xC5\xB1\x23\xB5\x54\xF2\x64\x26\x9F\x1C\xB4\x0B\x52\x4E\x5E\xFE\xCD\x1B\xD7\x55\xBB\x41\x1F\x7F\xED\x77\xE9\x63\xE3\x35\xDB\x4C\x20\x93\x08\x0E\xCD\x84\xF3\x66\x2C\x72\xA2\x00\x8E\xFF\x17\x2A\x66\x6A\x65\xFC\x53\x57\xF9\xB3\x97\x0E\x86\xFC\x40\x38\x80\xF6\xA1\x03\xD4\x7C\xBA\x96\x67\x95\xC6\x83\xA3\x7A\x4D\x25\xCB\x85\x70\xF4\x94\x9E\xD4\xB4\xE9\xA9\xE4\x32\x39\x8F\xCA\x10\x1D\x92\x2D\x9F\x47\x38\xED\x4A\x3A\x8B\x34\xAB\x07\x97\xD8\x74\x33\x67\xE2\xD1\x80\x24\x34\x74\x8B\xBA\x3C\xAF\xA3\xFA\x03\xB9\xAB\x94\x60\x91\x8A\xA3\xE6\x0A\x09\x8B\x05\xA2\x10\x3A\x6E\xAF\x74\x27\x30\xE8\x7F\x8E\x65\xC0\x10\x1E\xBE\xC4\x21\x0E\x97\xF1\x27\xB9\xCC\x15\x1A\x36\xDB\x93\x4C\xC5\xA7\x5C\xED\xCA\xDE\x5F\xEB\xDB\x4D\x9F\x88\xF3\xB2\x74\x59\xDF\x11\xB7\xA6\x59\xC1\xF3\xC4\xB1\xE8\x0B\xCD\x07\x8A\x51\xB1\x84\x4C\xCF\xB9\xCD\x37\x40\x6D\x38\x31\xA7\x55\x27\xC1\x47\xF3\x8B\xDD\x81\xFF\x1C\xBE\xB1\x7A\x8C\xB7\x3A\xDB\xFC\x4F\x44\x83\x0B\x93\xCF\x74\xE5\x10\x4D\x97\x90\x36\x6C\xFD\xCB\xBF\x45\x0B\x5B\xB9\xA6\xDD\x14\x35\x12\xB6\x2E\xB6\xA2\xDF\x03\x2B\xBA\xA8\x91\xF7\x10\x67\xB9\x87\xD5\xC8\x13\xA4\x46\xE6\xF4\x67\x50\x23\xF3\xCA\x55\xA4\x46\x56\x6E\x93\x16\x6A\x73\xAE\xEA\xB4\x8A\xE1\xCC\x33\x7F\x5D\xF2\x38\x89\xAA\x4F\xB0\x25\x06\x74\x54\x0D\x92\xDB\x86\xA4\xC5\xFE\xBF\x37\x80\xEB\xB6\x21\x31\x35\xA5\x28\xC3\xCA\x65\xDC\x17\xF6\x0B\x66\xAE\xDA\xA5\x61\xBC\x46\x29\x57\xBD\x46\xA9\x5D\xE0\x2E\x52\x17\x4A\x71\x0A\xB2\x61\xFA\x82\x3A\x67\x43\x6D\x5C\x18\x91\x92\x60\x48\xF8\x87\x6C\x48\x28\x42\x98\x5D\xD2\x95\xA3\x8E\x41\xC2\x3A\x7B\x89\x33\xC1\x98\x28\x51\x62\x22\x0A\x74\xA5\x18\x5D\xE8\xF3\x62\xA9\xCD\x19\x4A\x2B\x74\xA5\xD0\xE3\x63\xD0\x46\x13\x01\xE3\x82\xF5\x8F\x3D\x70\xD6\x69\x57\xEF\xED\x98\xA2\x9E\x91\x50\x90\x08\x16\x61\xE2\xCA\x96\x2B\xCD\x6C\xBA\xCC\x95\xBC\x81\x93\x03\x96\xEB\xC1\x3C\x31\x44\xC8\x92\x6D\x86\xBE\x48\x7C\x08\x23\x11\xD2\x83\xAC\x21\x91\xCA\x4E\x7C\x16\xBC\xD9\x9D\x10\x61\x00\x41\x32\x18\x06\x5E\x51\x86\xD2\x6B\x6E\xC6\x9A\x7D\x6D\xAB\x11\x69\x9C\xB0\x42\x16\x9B\x17\xE7\xC6\x6D\xC2\x22\x61\xC2\x6A\x9F\xA0\xA9\x3E\x31\x47\x7A\x74\x56\x49\x88\x38\x6F\x95\x68\xEE\x41\xDD\xFC\x5A\x4C\x50\xDA\x21\xD7\xEB\xA4\x93\x7A\xA3\xA7\xF8\x95\x78\x9E\x57\x21\x80\xDC\xA6\x6C\x31\x4A\xC1\xC5\x0B\xF1\xDD\xE2\x2D\x23\x96\x9E\x55\xBF\x92\x83\xA5\x97\x6B\xEC\x0E\x86\x59\xBA\x1D\x58\x7A\xD0\x68\x12\xC6\xF5\xBC\xE0\xDE\xF9\x62\x97\xF2\xAA\xDB\x17\x79\xCD\xB7\xE3\x9A\xBF\x2E\x86\xAC\xA2\x4C\x4D\x3C\x66\x5C\x4A\x8C\x36\x27\x59\xCB\x80\xD1\x86\x72\x49\x39\xF2\x0C\xD8\x75\xCF\x96\xC3\xEC\xAC\xB2\xFE\x2F\x48\x18\x32\x9D\x15\x7F\xD1\x1B\xB1\x96\x71\x96\x13\x4E\x2B\x6C\xD6\x7A\xB0\x96\x49\x8E\xEC\x82\x45\x60\xCD\xFA\x0E\x8E\x42\xB8\x0A\x51\x03\xE4\x1A\xDE\x9A\x20\xF6\x42\x6C\x90\x7C\xF2\x4D\xDA\xD2\x40\xA6\x00\xFA\xC6\x35\x76\x63\x65\xAE\x68\x7E\x6A\x9C\x7C\xA7\xD8\x77\x15\x5E\x07\x4F\x4F\x28\x3B\xE3\x4C\xF3\x23\x37\xC2\x41\x41\xA7\xAF\xE6\xC2\x95\xE9\x48\xFB\x51\x2E\xDD\x13\x52\x4C\x59\xED\xC8\x39\xDA\x1C\x52\x20\xE7\x83\xD5\xB1\x82\x1E\x72\x42\xE9\xFF\x53\x4D\xAC\x08\xC6\x51\x56\xC2\xEA\x60\xE9\x61\x13\x28\x91\xBB\x68\x55\x06\xD8\x26\x61\xF2\x59\x17\x96\x38\xC8\x6A\x38\xFE\xAB\x78\x2C\x27\xD8\x01\x2E\xDB\x8B\x8F\x10\x9F\x2D\x60\xE5\x43\xA0\x8B\xBA\x3C\xB7\xC7\x6A\x13\xAE\xF6\x1F\x3A\xEA\x17\x7F\x2E\x99\xAF\xFE\xD3\xF3\xF9\xDC\xE0\x93\x55\x95\xAB\xFD\x7F\xD9\x2F\x4E\x16\x75\x5D\x27\xF5\xE8\x5F\xCE\x38\x6A\xFB\x17\x11\xF3\x4E\xF2\x40\x9B\xD4\x05\x43\x9B\x31\x47\x4C\x7C\x73\x80\xDF\x5C\xE2\xFF\x0D\xAE\xC3\x4F\x96\x4C\xEF\xF9\x03\x7E\x32\x87\xF1\xE6\x40\xEE\xB1\xD3\x7B\x3E\xCE\xF7\x60\x7F\xBC\xAC\xC2\x4D\x86\x3B\x00\x43\x04\xB0\x26\x5D\x7A\x71\x9E\x32\x7E\xD8\xCC\x25\x5E\x1F\xB4\x09\x62\xC6\x69\xD3\xAF\x4D\x30\x41\xEC\x40\x03\x5B\x4B\xCC\x52\x47\x10\x7D\xE9\x8F\x9E\x39\xC0\xEB\x2D\x67\xC3\x40\xFB\xBE\xCF\x92\xB6\x59\x27\xC0\xCE\xA4\x97\x54\x9C\xC0\x18\xA8\xBA\x16\xAA\x86\x35\x99\x29\xAF\xE8\x5D\x01\x2D\x5A\x6C\x8A\x66\x2C\xB2\xDD\xD0\x82\x09\xE0\xB4\xE0\x6A\x41\xF6\x31\x5E\x47\xB4\x04\xC5\xE8\x80\x5D\x42\x5A\x19\xC9\x1E\x90\x9C\x13\x48\xAA\xF4\xF5\x9B\xF8\x2B\x7D\xFC\x55\x36\x6C\x43\xC2\xA5\xEF\x7F\xE6\x91\xB9\x54\x33\xEE\x8C\xD3\x57\x5A\xA4\x8B\x4B\xC1\x20\xAF\x9F\x69\xF9\xE2\x7E\xF5\xDB\x67\xAC\x3D\xD2\xD7\x8A\x31\x4C\x6B\x8C\x84\xF5\x0F\xF5\xBE\xE8\xF9\xA4\x41\x04\xEC\x43\x31\x3A\xD6\xDF\xD4\x6C\x95\xD1\xDE\xED\x77\xC9\xD6\x8E\x79\x80\x6F\xD9\x76\x70\xF7\xF8\x87\x7A\x67\xB6\x68\x22\xEE\x25\x59\x9A\xD8\x55\x76\xCE\x9C\x21\x46\x7A\xCE\x36\x2E\x23\x0E\xD5\x2A\x97\xBD\xC8\xEA\xF6\x28\x99\xA7\x4B\x38\x7A\x2A\x9A\x10\x5C\xE2\xD5\x6B\x35\x02\xA4\x05\x1F\xF9\xAC\x52\x62\x32\xF1\xAF\xA8\x3E\xFC\xB7\xF9\x87\xB4\xD5\x9A\xBF\xC3\x88\x64\x16\xD0\xB0\x57\x60\xB7\x47\x8C\x2E\x82\x64\x1D\x80\x06\x6F\xFB\x30\x54\x79\x04\x11\x6E\x5E\x91\xB0\x61\xC4\xD7\x3F\x84\x40\x48\xB3\xC5\x58\x57\x58\x77\x36\xBE\x2B\xAE\xC6\x1D\xEA\xAE\xC5\xE0\xBC\x21\xCF\x21\x18\x9E\x51\x8B\x9A\x16\x55\x79\xFD\x1C\x50\x25\xBA\x7C\xAB\x43\x7C\xBB\x65\x57\x34\xD0\x78\xF2\x2D\xDA\xD8\xCD\x20\x2E\x6A\x6F\xF6\xE5\x5D\x52\xA2\xD1\x13\x89\x8D\xF8\x8D\x41\x5C\x36\x46\xB3\x6D\x1A\x61\x3C\x18\xC4\xE5\x2E\x17\xC6\x63\xF9\xB4\x60\xF3\x85\x78\x5E\x52\x99\x1B\x9C\xB5\x0D\x7F\xD9\xC4\x31\xBC\xC9\x39\x51\x32\x71\xC3\x45\xA7\xF6\x50\xE9\x8E\x98\x4C\x5A\x21\x16\xDA\xE5\xCD\x0F\xDE\x88\x13\xCF\x61\xFB\xFC\xDC\xB4\x9B\x1C\x9C\xC6\xE1\xD3\x1F\x16\x60\x18\xC6\xD7\xB8\xC8\xDE\x4D\x16\xCF\x8B\x81\xCF\xFA\x3C\xE4\xAA\x7D\xB9\xFF\x73\xF9\xFD\x4A\xF9\x6F\xEE\x17\xFF\x55\xAA\x94\xD2\x76\x56\xB0\x01\x64\xD5\x3C\x72\xCC\xBF\xBC\x56\xC9\xAD\x4C\x2B\x95\xC1\xD2\xAE\xAC\x44\x7D\xDB\x75\xA8\xD7\xAC\xC3\xE2\x2B\x5A\x87\x3F\xBB\xB4\x0E\x35\x70\xC7\xED\xB6\x39\x3D\xC8\x05\x4A\xD2\x47\x21\x04\xF0\x21\x0D\x1D\x81\x9F\xB4\xBE\xE9\x9B\x7F\x84\x23\xF4\x74\xFD\x67\x43\x41\x9F\xEB\x40\xC0\x1E\x71\xD0\x44\xD8\xA7\x62\xF6\x89\x47\x43\x5A\x18\xFB\xDF\xD4\x39\x7B\x39\x34\xF9\x8A\xEA\xE5\xA8\xAD\x96\x86\xC7\x83\x6B\x55\xBD\x29\xE4\x20\x39\x25\xC7\xDC\x75\x4A\xEE\x7A\x89\x05\x80\x63\xEF\x3B\x89\xE0\xD7\xD3\x34\xE1\xFE\x74\x1F\xFB\x7D\xD2\x2F\x9C\xF2\xCD\xFE\x96\x9B\x26\xB2\x1D\xD7\xCC\x89\x2A\x84\xFE\x9C\xEE\xE8\x39\xE6\x3C\xCA\x5F\x7F\x59\x1D\x20\xBB\x76\xDA\xFC\x29\x97\x2F\x37\xAB\x76\xCC\x69\xCC\xC7\xF8\xBE\x0D\xB7\x9C\xD7\x77\xCC\xFB\x1B\x19\xEE\xFB\x6E\xD9\xCB\x8D\x6A\x58\x3A\xA1\xB9\xB4\xF9\x49\x9E\xA1\x57\xC9\xA5\x6D\x73\x39\xAC\x4E\x53\xF9\x02\xE8\x0E\xBE\x64\x3C\x36\x7B\x9F\x6D\xBA\x0C\xCB\xE5\x72\x31\xC7\x35\x18\xE7\x51\xDF\xE9\x1D\xB3\x29\x28\xE4\xF6\xAC\xFA\x33\xCC\x7F\xE4\x07\xC4\x51\x43\xC7\x79\xDD\x25\x99\x99\x6B\x3D\xF3\x30\x88\x6D\x15\xA3\x30\xD7\x15\x23\xC2\x19\xAE\xEE\xF1\x50\xEF\x93\x03\x67\xB6\x58\x54\x4E\x3D\x1B\xFF\x5C\x05\x54\xF2\x02\x84\xE0\xB2\x17\xE9\xC5\x97\x51\xD3\x50\xEF\x91\xD6\xF0\x28\x0F\x24\x30\xEC\xBA\xF9\x61\xD0\xE8\x02\x24\x31\x1A\x02\xCE\x94\xAE\xBA\x38\x2F\xD0\x08\x75\xEE\x8B\xEA\xD2\xBC\x70\xB0\x36\x90\x46\xE4\xF4\x59\xA5\xD9\x60\x97\xF8\xF2\x11\x18\xFD\xC2\x9E\x60\xC3\xA2\x3E\xAB\x8C\x98\x40\xCB\x0A\x86\x07\x20\xB1\x23\xE2\xD5\x02\xEA\xE9\x7F\xF9\xC5\xD7\x5C\x9D\x97\x6E\xEE\xD4\xEE\xBC\x04\x52\x10\x82\xA9\x66\x4F\x3B\x14\x17\x67\xAF\x1C\x40\xD4\x89\xC9\xD7\xFC\x2E\x3A\xB7\x19\x56\x08\xF1\x24\xB5\xBF\x9F\x4F\x6B\x8D\x4C\x08\x7F\xF4\x0C\xF2\x0E\x5C\xDE\x2A\x12\x85\x68\xE8\x6A\x8F\x24\xE1\x0A\xA3\x67\x5C\xF3\x05\xCD\x0A\x5E\x5B\xF8\x2F\xA9\xB6\xF6\x47\x2D\x83\xB5\xD1\x40\xBF\xA4\x76\xE7\x59\x3C\xD1\xEA\xBE\x79\x59\x94\x40\x5A\xFF\x47\x79\x52\xC0\x80\x16\x67\x95\x6A\xEB\x3A\x1F\x91\x77\xE2\xAF\x9B\x81\x3D\x68\x8E\x1B\x80\xCA\xFD\x19\xC8\xFA\x13\x02\x6E\xFC\x09\xA7\xFD\x67\xD4\xEE\x56\x60\x04\x4B\x1B\xC9\x0C\x24\x7A\x8D\x48\xB4\x8A\x8C\x64\xC4\x83\xCC\xC0\xA2\xF9\x65\x1F\x3F\xEA\x17\x27\x54\x6A\xD2\xF1\x3F\xBB\xBC\x7B\x4E\xDE\xE1\x3B\x37\x2A\xA7\xFD\x17\xD4\xA5\xB9\x5D\xDE\xA5\x77\xF6\xFC\x42\xDE\x3B\x6F\x7E\xE8\x96\xF7\xCD\x2B\xA1\x7C\xEC\x15\xA1\xFD\x1D\xD3\xC4\xC0\x49\xBD\x30\xA5\xE6\x70\xFC\x66\x08\xCE\xE0\x29\xF6\x3F\x8D\x8F\xD6\x69\x6A\x40\x4D\x1A\xC0\xF6\x47\x0C\x24\x30\xF3\x7C\x42\xFF\x1F\xCE\x97\xF4\xB6\xE7\x4B\xBA\xE6\x7C\xC9\xBF\xA2\xF3\xE5\x55\xEB\xCE\xF9\x56\x87\xCC\xB6\x40\x38\x08\xBC\x21\xDA\x21\x21\xF4\x73\x6A\x04\x24\xD5\x69\xBF\x29\xBA\x82\xD8\x0E\x87\x4B\xB9\xD8\x0E\x13\x64\xA3\xB9\x3C\x04\x9E\x30\x5F\xDB\x36\xA7\x5D\xE2\x52\xB1\xF6\x58\x95\x21\x29\x68\x72\xEE\xCC\x49\xD6\x62\x64\xB2\x40\xD6\x65\xB0\xCD\x40\x20\x99\x89\x32\x8C\x6C\xC4\xC1\x36\x53\x8C\x6D\x33\xCA\x15\x6D\x32\x64\x5C\x08\xBA\xC2\xC8\x36\x93\x3B\x4D\xD3\x98\xBF\x46\x29\xA7\x61\x9B\xC9\x2B\x2E\xE9\x8B\x80\xB7\xBE\x4B\x44\xC0\x1E\xB8\x31\xBD\xF1\x01\xF6\xD8\x5D\x9C\x9F\x18\xB1\x64\x39\xA5\x21\x5B\x4E\x98\xA3\xA4\x10\xC0\x88\xC7\xC0\x71\x45\xDD\xDC\xD1\x5D\x44\xF6\x6D\x09\x04\x78\x49\x91\x03\x81\xCE\x22\x6B\xD6\x4C\x5D\x23\xA0\xB1\x72\xBC\x1E\x79\x5C\x8F\x44\xD6\x43\x03\x6A\x22\xA8\x40\x9C\x7F\x02\xAF\xE8\xB6\x39\xCD\xF6\x8D\x40\x14\xB2\x0E\x30\x95\xA8\x1D\x53\x93\xE6\x48\x24\xF0\x25\x31\x2D\xD3\x76\xFA\xA2\x8A\xB4\x73\x2C\x21\x22\x29\xB5\xC2\x17\xE2\x7C\x0B\xDC\x73\x99\xF9\xFC\xE5\x8E\x75\x87\x17\x11\x3A\xA9\x96\xCF\x25\xC4\x58\xE2\x0C\xA8\x03\x3A\x57\x38\x9D\xD8\xAA\xB4\x49\xAA\x40\x04\x87\x04\x44\xD9\x1D\x9C\x4E\x89\x9C\x4E\xA5\x64\xD3\xA0\x05\x39\x9A\x12\x19\x3E\xB2\x8E\x68\xE4\xCD\xDF\xC5\xD9\x64\x49\xEF\xC5\x44\x6C\x56\x23\x43\x6C\xF8\xC8\x90\x6C\x80\x86\x0B\x72\x72\x9B\x3B\x2D\x05\x96\x27\xB2\xB1\xB9\x93\x95\x47\xC3\x42\xF8\xDB\xA0\x5B\x3A\xAB\x3A\xC5\xEE\x7E\x15\x12\xB6\xA1\xA4\xBC\x2A\xA4\x8D\x86\x4C\xD3\x80\xCA\x24\xEA\xF6\x48\x7B\x49\x06\x35\x86\xA3\xA7\x03\x60\x8F\xDD\x36\xAF\xBF\x53\xCD\xC7\x8E\x80\x85\x75\xF5\x8A\xD6\xD9\x91\x67\x50\x37\x4E\x39\x8A\xAE\x5F\x41\x53\x7B\xA2\xA7\x93\x99\xFD\x36\x02\xA0\x81\x93\x39\x21\x96\xC9\x27\x33\xF4\x64\x40\x81\xD2\xE9\x9A\xE3\x7E\x3E\x4C\x53\x09\x8E\x19\x05\x69\x64\x72\x64\x9B\xA1\x62\x13\xAC\x3C\xB9\xCB\xFC\xEC\xE9\xBE\xCD\x10\xAE\x13\x82\x6A\x52\x3A\x1E\x73\x04\x9F\xC0\x27\x8B\xF6\x67\x57\x46\x25\xD2\x81\x2E\xED\x4C\x75\x4A\x39\x25\xD8\x4D\x71\xB0\x09\x0D\x91\x34\x06\xFA\x64\xE8\x3F\xB6\x7A\x67\x3D\xC9\x32\xD5\x53\x8C\xAF\x98\x59\xEE\x3F\xA8\xAF\x08\xBA\xDD\x2F\x5C\xC3\xB6\x60\x9C\x8F\x90\x1D\x64\x02\xA2\xC7\xB4\x62\x98\x58\xE0\x24\x86\xED\x0D\x73\x06\xE0\x48\xA7\x65\xE5\x32\xB6\x90\xA1\x8C\x57\xC2\xCA\xA3\x71\xC9\x04\x9D\x17\x46\x31\x98\xC0\x12\x4E\x16\x32\x08\xB3\x93\x08\x5D\x80\xE5\xA0\x7A\x18\xA9\xA5\xA1\x3C\x0A\x2C\x74\x43\xF5\x30\x60\xB6\x96\x78\x4B\x3B\x83\x3D\xEC\x6D\xFB\x7D\x57\x41\xE0\x99\x85\x1C\xB7\x99\x7F\x5B\xDF\xD5\x43\xD9\xB0\x9C\xC4\x48\xA4\x02\x79\xE5\xF2\xBD\x36\xA1\x6F\x88\x88\x36\x31\xA5\x0A\x21\x39\x00\x54\x62\xE4\xDF\x2E\x73\xC9\xE3\xED\xDC\x65\x6D\xE2\xE6\x0C\x8B\xEC\x66\x08\xA9\x0D\x85\xC3\x86\xA7\xF3\x51\xED\x1B\xFE\x3E\x54\xC7\xE1\xEF\x43\x21\x1C\xFE\xDE\xF4\x30\xD3\xC4\xEF\x9B\x7D\xC8\xBE\xE7\xEF\xA7\xE9\xFB\xE9\xE1\xFB\x19\xFA\x7E\x66\x48\x00\x73\xDC\x5B\xD7\x77\x39\xA7\x7D\x55\x9C\x73\x55\xB3\x29\x69\x94\x88\x85\x3C\x13\x41\x9E\x19\x95\x95\x4B\x10\x13\xBD\xB3\x54\x53\x8E\x0D\x67\x58\x79\x60\xEE\xA0\x40\x5C\x28\x1B\x87\xB4\x3C\xC5\x58\x34\x8F\x73\xAC\xB9\xCB\x39\xCC\xF5\x73\x7F\x8E\x97\x87\xDF\xAC\x7D\xD1\x37\xFF\x7B\xB4\xB6\xAF\xBB\xFA\x4A\x80\x3C\xBA\x4B\x7C\x77\x89\x6F\x20\x3E\xA7\x21\x6F\xF9\xBA\xE7\x37\x61\x41\xCC\xD6\x50\x2C\x89\xE3\x9A\xCD\x61\x97\x07\xD0\x4D\x7A\x9F\xD4\xF5\x3E\xE4\xF3\x16\x5F\xF3\x9E\xB1\x1C\x12\xEA\xD6\x98\x04\x39\x68\x11\xC9\xD1\xCD\xCF\x0C\xE8\x11\x01\x61\x08\x11\x3F\xC0\xF3\x42\xC1\x25\x4C\xE5\xDB\xFA\xCE\x34\xFF\x84\xA3\xED\xC2\x4D\xB5\x19\x27\x3F\xC2\xB1\x50\xB1\xB7\xA1\x3E\x17\xF2\x2D\x13\x89\x67\x14\xFF\x7B\x8D\x74\x4C\xBD\x6D\x36\xD1\x27\x9E\x2A\xB0\x7B\xEA\x68\x2E\x3D\xE7\x43\x34\x77\x5C\xC9\xCD\xE5\xF4\x71\x19\xE9\xA8\xA9\x96\x70\x9A\xF5\x10\xAB\x76\xB7\x38\xE8\xDD\xE2\xA0\x77\x8B\x83\xDE\x2D\x0E\x7A\xB7\x9A\xF0\x5D\x86\x71\x97\x61\xDC\x65\x18\x5F\x7D\x86\xE1\x11\x5A\x2E\xF6\x2B\x46\xC6\xA3\x2D\xF6\x8E\x97\x86\x8A\x42\x08\xB9\x29\xF6\x79\xE7\x33\x42\x24\x0C\x43\xC9\xE1\xC1\x8E\x51\xD5\x7F\xBD\xD2\x42\x7A\x5C\x0B\x29\xA4\xAA\x87\x55\xE2\x14\xAA\x7F\x78\xBD\xFF\x5A\xAD\x9C\xF2\x69\xEF\x18\xC9\xC9\x61\x85\x0E\x0F\xBC\x41\xDB\xAF\xFF\x32\x7B\xA7\x43\xEF\x0C\x1A\xB1\x5F\x8D\x46\x12\x34\xF2\x17\x97\x1A\x49\xD9\xF9\xBE\xD2\xC8\xF3\xFB\x3E\x3D\x60\xF5\x44\x0F\xB5\x38\xAA\x07\x54\x7C\x94\xC6\xBE\x63\xD4\xC6\xD2\xC3\xF1\xF1\x0C\xEF\x3B\x3B\x79\x20\x3F\xF6\x81\x1C\x77\xFF\x65\x01\xC1\x52\x00\x70\xB2\x05\xFF\xF9\x9C\xE1\x5F\xEF\x75\xEA\xC2\xD1\x39\x73\x86\x7F\xBD\x0C\x93\x1C\xA3\x51\x0A\xB2\x93\x05\xCE\x7E\x1F\x20\xBF\x3E\xA9\xE2\x8F\xBF\x34\x7C\xFC\xB5\xE1\xE3\x67\xE3\xC7\xEA\xAF\x00\xDC\x8D\xFA\xF2\x74\xF3\x6D\x37\x62\xC7\xDE\x1C\xBE\x6C\x9B\x27\x5B\xCD\xDD\x78\x32\x38\x81\x06\x08\x9D\x6D\xF3\x44\xB8\xFA\xC4\xBA\xAB\x97\xC3\xD5\xCB\xAB\x57\xAB\x77\x94\xBA\x5C\x6F\x26\x71\xD3\xA2\xAC\x8A\xB5\x0C\x3B\xA9\x84\x3A\x2A\x83\x5A\xBB\x70\x29\x65\x9D\x45\x2E\xA5\x10\xE6\xBD\x40\x76\xF3\x81\x3A\x97\x09\xE2\xBC\x69\xA4\x4C\x8D\x6A\xCE\xC9\x25\x4E\x60\xE1\xC4\xA1\x8B\x73\x6D\x05\x8F\x25\x11\x40\x9F\xC3\xBE\x03\x50\x52\x41\x27\x9E\xD4\xB8\xB0\x7E\x03\x01\xCA\xAE\xF0\x1B\xFB\x28\x93\xCB\xA9\x81\xD6\xEB\xE7\xFC\xE7\x6F\xDE\xBC\x99\xEF\xF7\xB1\xCE\x68\x86\x92\x86\x7C\xAF\xB3\xFE\xAD\xFB\x07\x5C\x58\x97\x2B\xBB\x85\x5E\x59\x9F\x3C\x17\x3A\x96\x73\x61\x39\x29\x00\x24\x31\x58\x19\xAC\xA0\xAF\xBC\x67\x54\x90\x11\x6A\x6B\x88\x10\xCB\xA3\xB5\x0D\x40\x49\x09\x47\x9B\xD0\xE6\xE1\x52\x40\x34\x92\xA1\x4F\x97\x50\xA2\x32\x54\x98\x7B\x5C\xD0\x12\xAC\x64\x51\x9C\x55\x6A\xF5\x7D\x0C\xF5\x44\x8C\xEA\xE2\xA8\xDB\xB1\x88\x67\x8A\x22\xBD\x52\x40\x06\x93\x19\xAA\xC1\x11\x77\xAF\xF5\xA0\xB3\xF1\x22\x0D\x46\x42\x29\x02\xBC\xD4\xA2\xE4\x15\x71\x88\x63\x01\xC0\x8C\x54\xA2\x68\x22\x68\x0E\x43\x58\x15\x58\xA4\x84\x07\x37\x9E\x53\x33\x9A\xD3\xE4\x0E\xE7\x14\xF1\x8F\x66\xD4\x9F\x40\x2E\x55\x88\xD2\xE5\xE7\x79\xF6\x52\xA6\x15\xCE\x3A\x5A\xD3\x1E\xAF\x85\xE5\x66\x05\xE4\x93\x33\x19\x18\x75\x88\x57\xC3\x5C\x92\xF6\x80\x5B\xE1\xD2\xB3\x2A\xE1\x5A\x33\xFD\x59\xA5\xFD\x4D\xF8\x78\x4A\x4E\x98\x44\x46\x90\xAC\x64\x2A\x35\x05\x13\x65\xAC\x32\x58\x81\xE7\xDA\x94\xCB\x43\x32\xA1\xC6\x1B\x12\xA3\xA4\x3E\xD7\x84\x40\x5B\x53\xCB\x49\x8A\x1E\xD9\x71\x8F\x74\xEC\x91\x76\x96\x7A\x04\x1A\x8D\x3D\xD2\x21\xEE\x93\xB8\x20\x60\x76\x2B\xA9\x9A\xC0\x24\xC0\xFB\x89\xD1\xB3\x99\x08\xD6\xD6\xC9\x0B\x1B\x4F\x96\x86\x3E\x9F\xF6\xCA\xA5\xEB\x2A\xE5\x6D\xB6\x69\x35\x14\xE3\x1B\xDB\x36\x2A\xCE\x7C\x33\x82\x36\x19\x61\x5B\xD7\x28\xE9\x37\x8D\x4E\x8E\xA6\xD6\x59\xAE\x93\xD2\xD9\x41\xF0\x4E\x38\x21\x3F\xE9\x5B\x3A\x3B\x92\xDA\x54\x7E\xA3\x4D\xD8\x4A\x82\xD8\xE6\x2E\xF5\xB3\x5D\x92\x5B\x70\x7F\xDF\xA1\xC0\x0B\xCB\x67\x8E\x0B\x68\x78\x73\xE0\x12\xA9\x83\xB1\xBB\x05\x6F\x3C\x02\xC6\x81\xD1\xAB\x91\xA3\xFD\xF1\x71\x94\x97\x96\x08\x2F\x1D\x42\xC1\xCA\x47\xE6\x00\xB0\x40\x94\x9D\xE1\xFC\x88\x95\xA7\x52\x79\x2A\x8D\x4F\xF1\xCB\x67\xFC\x90\x4B\xFC\x37\x1D\x30\x2B\xD0\x2D\x2C\xDB\x08\x34\xE2\x21\xD8\xD5\xE6\x2C\x35\xE7\xEC\x10\x8D\x76\x20\x95\x16\x6F\xD5\xE9\xA1\xCB\x74\x3F\x27\x2E\xD0\xD8\x8D\x53\xCF\x6C\x49\xA5\x8F\x43\x7F\xF4\x8C\x77\xFB\x2E\x39\xA8\xBE\xD7\xEA\xEC\x88\xBB\x41\xF4\xF0\xCF\x3E\x34\x2D\x65\xCD\xBF\xFE\xEA\xF4\x57\xED\xAF\x9B\xCB\x73\xE5\x7F\xED\x83\x4B\x37\xF3\xCF\xBF\x33\xFD\x99\x71\x01\xFC\x0B\x1F\x98\x16\xEE\xE5\x40\x3C\x27\x05\x7A\x39\x09\xFC\xA3\x85\x14\x2B\x56\xFE\x63\xFC\x31\xE1\xC2\xA5\x46\xA2\x9C\x59\x16\x23\xCD\x62\xC7\x7C\xB4\xD8\x80\xD3\x67\xDB\x7C\x04\xF8\xF2\x99\xB7\xCF\x76\x88\xAA\xB0\xB1\xDC\x38\x7B\x35\xD9\xAA\x99\x78\xF3\x2C\xF0\xD3\xAC\xE0\x59\x20\xA8\xF5\x59\x86\xB6\xB8\xB2\xD5\x25\x51\xBC\x11\x58\x61\xF3\xF8\xDC\xD0\x2D\x01\xD0\x02\xBE\xB2\x9C\x8F\x20\xEE\x51\x1E\x1D\x54\xF4\x6B\xCB\xC5\xF1\xB1\xAA\x02\x3E\x62\x5D\xEA\xB2\x08\x61\x01\xB1\xE6\x63\x05\xCB\x35\x1F\x15\x29\xF4\x23\xC5\x74\xEF\x0C\xE2\xE5\x6F\xCD\x6C\x7E\x64\xAE\xA1\x0A\x0B\x8F\x52\xC7\x39\x02\xFA\x37\xEC\x8F\xC8\x83\x46\xFE\x85\x8D\x58\xDD\xFC\xF2\x44\x0A\xFD\xB9\xC4\x7F\xAB\xB9\x0C\x8C\xB8\x3F\x1A\x2D\x0D\x73\x3E\xE6\x3F\x7A\xBF\xEF\xF2\xFB\xAC\xEA\x8A\x0B\xA4\x56\xBC\x6E\xFF\xC3\xEF\xE8\xCA\xB7\x5F\x50\xFF\x79\xC4\xCB\x5C\x7A\xDA\xE5\x8E\xEE\x77\xE5\x8D\x73\x56\x31\xF4\x4E\xC1\x5F\x68\xF2\x88\x5F\x55\x93\x97\x99\x00\x5E\x96\x3D\x47\x0B\x75\xD8\xDF\x67\xD5\x85\x23\x97\xE0\x55\x6F\xEF\xCA\x27\xD0\xDF\xF3\xFB\xAE\xFC\x2B\x2F\x1E\xB0\x8D\xF8\x28\x82\x9E\x65\x0B\xAB\xB4\x21\xF9\xF2\x3E\x5B\xF0\xBD\xE5\x5F\x79\x11\xC1\xA9\x00\x76\x56\xF7\xD9\x66\xF8\xF9\xBA\xE6\x06\xE8\xE7\xD3\xA3\xBB\xE9\x67\x8E\xBA\x06\xF8\x31\x57\x90\x61\xF9\x7E\xC8\x75\x56\x97\x59\x19\xFA\x4D\xA2\x78\x16\xC6\x31\x0C\xB8\xBA\xAE\xA3\x7C\x89\x4B\x07\xDA\x26\x5A\x7C\x59\xBD\xA5\xE3\x23\x24\xCE\x20\x9D\x0A\xD9\xE1\xDE\x30\x89\xD2\xDE\x2C\xB4\x3B\xA4\xBA\x84\x69\xC5\x0B\x6E\xA2\x4C\xCA\x30\x95\x8C\x36\x52\x0F\xEF\x9C\x4C\xBB\x5C\x76\xD6\x1F\x5D\x8E\xF3\xDD\xCE\x5C\x1A\x3A\x3A\x1B\x4D\xFE\x85\x23\x97\xBA\x14\x9D\xCD\x7D\x76\xD8\x65\x7B\x1F\x7E\x07\x80\x27\x78\x2D\x64\x09\x32\x9E\xFF\x94\xE7\x3F\x14\x95\xC8\x8F\x9F\xFF\x74\xFD\xFC\xA7\xEB\xE7\x3F\xAD\x22\x8C\xAF\xAC\xC3\x68\xFE\x11\x59\x7B\x35\x80\x08\x31\xE3\xF9\xCD\x0F\xAD\x21\xA1\x38\xE1\x42\x43\x98\xEC\x2E\xDF\x8B\x84\x94\xF3\x28\x66\x3C\x8A\x59\x48\xC3\x3A\x7E\x14\xB3\xF5\xA3\x98\xAD\x1F\xC5\x0C\x20\x7F\x80\xE7\x75\x8C\xEA\xC2\x75\x2A\xDE\x5F\x74\x75\x9C\x33\x94\x1B\xF8\x40\xD1\x01\xFC\xAB\x8E\x70\x0C\x2E\xDF\x85\xE2\xCE\x7E\x7D\xF9\x52\x90\xA4\x96\x05\x30\xAE\x94\x01\xC3\x52\xC0\xF1\xC6\x64\xD6\xF7\x15\x40\x88\xDC\x31\xEF\x2B\x02\x30\xE4\x4B\x02\x8F\x95\x31\x92\x5A\xC6\xCA\x2C\x5B\x5F\x76\xCC\x07\xB8\x66\x88\xAB\x05\xC9\x67\x83\xF1\x25\x85\xB1\x59\x49\xA8\x9A\xD3\xF5\x39\x71\xC6\xC6\x35\x40\x96\x64\xCE\x38\x1F\x73\xC6\x39\x38\x23\xEA\x47\xCC\x43\x03\x09\xDD\x12\x38\x23\xF2\xCC\xB9\xEA\xF2\x06\x77\x66\x83\x3B\x93\xE1\xAE\xBE\xCD\xDD\x06\x71\xC6\x39\xE3\x2C\x01\x6D\xD7\xD5\x6E\x31\xE2\x8C\xF9\x8E\x79\x89\x38\xE2\x9C\x7A\xCE\x6A\xFA\xFB\x0B\xCE\x25\x8B\xD8\x9B\x15\xBB\x92\x67\xCE\xEE\x76\x29\x4A\x96\xA3\x90\x64\xBA\x85\x98\x2A\x41\x40\xE0\x1A\x8F\x6A\xDB\x7C\xB4\xD8\x65\xF4\xF8\xB1\x77\xE2\x23\x85\x60\x6C\x0B\x03\xC6\xB2\xD1\x2B\xAB\x3F\x34\x3A\x3F\x92\x65\x34\x8C\x4C\x4D\x67\xA6\xFF\x80\x1C\x44\x62\xF6\x61\xF8\x61\x16\x30\x82\xC9\x2B\x7C\x29\xFA\xCE\xBA\xE0\x13\x61\xC4\x4C\xC4\x6E\x24\x1B\xC3\x22\xDA\x61\x11\x49\x93\x7F\x49\x8A\xEE\xB0\xE9\xC8\x32\x4C\x89\x1C\x73\x89\xAC\xA3\xB3\x1B\x55\x30\xE4\x0C\x87\x5C\x3C\xA3\x58\x6B\x4B\x82\x9D\x48\x0E\xB9\x24\x2E\x65\x3A\x5E\xCA\x94\xA1\xB0\xB8\x14\x48\x38\x25\x21\xC3\x06\x05\x0F\xD8\x27\x72\xC8\xD9\xD1\x21\x97\xB0\xA4\x1B\x0E\xB9\x74\x38\xE4\x48\xB6\x58\x3A\xE4\xB0\x94\xA9\x2C\x65\x42\x4B\xB9\x22\x04\xDA\x11\x24\x99\x31\xF6\x48\x5F\x43\x7D\x74\x68\xAC\xEF\x63\xA8\x03\x7B\x2C\x13\x60\xAE\x9B\x0C\x4C\x80\x8E\xE0\xEC\xB0\x4B\xC1\x04\xB2\x27\x50\x0A\x38\x5B\xC3\xCA\x92\x09\x13\xC0\x8D\xD9\x0A\x2B\x8B\x3F\x4F\x59\xD9\x70\x37\xB3\x32\x98\x5C\x84\x0D\x6C\x1B\xD5\xFC\x12\x62\x48\x12\xD6\x0A\xAE\x72\x15\xE8\x1E\xF3\x06\x6B\xAA\xDD\x6B\x7E\x90\xAD\x7D\x29\xDB\x97\x6E\xEA\x47\xB9\x9A\x22\x28\x83\xD8\xE0\x07\x4F\xEA\x3A\x68\xE5\x2F\x17\x51\x2D\x87\xCE\x2D\x09\x68\x31\x41\x40\x13\xED\x70\xE8\xBE\x26\xA1\x20\x7C\x7C\x6F\xD1\x5F\xB8\xFE\x6D\xD7\xAF\xBF\xCB\xE1\xBB\xDC\x4C\x57\xDF\x5F\x38\x8D\x54\x54\xFC\x3B\x3A\x67\xA5\xB2\x4A\x33\x06\xDA\xB0\x5C\xE3\x75\x2C\x90\x3F\x01\xF1\xA6\x4B\xFB\x0E\x10\xD9\xF9\xBE\xBF\xD6\x2F\xAC\xB2\x1A\x99\xBB\xD9\x59\x95\x74\xB9\xCB\xB8\x1A\x6B\x57\x34\xBF\x00\xE3\x45\x16\xEA\x4B\x85\x67\xCC\xEE\x5C\xF9\x7F\xFC\x23\x13\xD1\xB0\x3C\xAB\x42\x65\xC6\xDC\x7F\x41\x71\xA6\xF0\xA7\x15\x07\x88\x7E\x9A\xFF\xF3\xC8\x56\x47\xCA\xFA\x17\x14\xFE\x73\x65\xAB\x2B\x78\x6A\x73\xFF\x54\xEF\x0A\xFF\x54\xCF\x2F\x94\xF2\x48\x99\x2F\xF6\x89\xA0\xD1\xEF\x50\x7A\x32\x8D\x3A\x54\xEA\xB2\x67\x48\x27\x35\x01\x59\x80\x7A\xEF\xED\xFE\x45\x67\x0E\xA4\xBE\x28\x0B\x51\x1F\x2D\x58\x65\xFA\x58\x80\xE5\xBC\xF0\x1D\xD7\xAF\x5F\x7F\x9F\x3E\xC7\xC6\x0D\x11\x40\xD9\x3C\xAB\x21\x9B\xE5\x7B\x5D\x49\x9B\x73\x36\x00\x71\x92\x00\x69\x02\x10\x67\xBE\xD7\x15\xB4\x39\xC1\xC6\xE2\xE6\x2C\xC6\x9B\xB3\x88\x16\x40\x57\x44\x46\x4D\xB7\x84\xCD\x89\xB4\xF4\x19\x36\xE7\x6C\xD4\xA1\x14\xF7\xF4\x6D\x21\x85\x6E\x39\x9D\x07\x55\xFB\xE8\x2C\x8C\x5B\x13\xB9\xE8\x1F\x2B\x38\x77\xEE\xA3\x05\x5B\x69\x3E\x52\x38\x89\xBC\x0B\xDA\x59\xF3\x8B\x5C\x07\xA4\x35\x71\xF1\x88\x93\xF9\x0F\x8F\x24\x78\xAC\x2F\x69\x53\x0F\xEC\x5F\x74\x16\x73\x67\x38\x07\x0D\x3C\xB6\xE2\xB9\x6B\x6B\x9E\x4B\xE4\x6F\xA5\x5D\x1E\x52\x67\x10\xE9\x13\x75\x14\x12\xAA\xFF\x1B\xA8\x32\xA1\x66\xB3\xFF\x63\x81\xE8\x2F\x43\x72\x8D\x72\x79\x40\xE7\xE5\xF9\x5D\xA3\x7B\x0D\x79\x39\xE9\x48\x6B\x4B\x2A\x49\x78\x85\xA2\xC1\x1A\x76\x2E\x95\x0C\xAD\x60\x08\xE8\xBE\x2B\xA6\x2D\x3E\xCE\x6F\x74\x05\xE7\x95\x87\x8F\xC1\xD8\xF1\x95\xF7\x01\x62\x7B\x11\xEF\xD7\x0C\x05\x21\x49\x47\xDA\x65\xFE\x8F\x35\xC3\x12\x1B\xAE\x0E\xA2\xB9\xA4\xA1\xE6\x92\x21\x4B\x6F\xB6\x18\x55\x16\xA4\x45\x7F\x53\xB7\x99\xBF\x6E\xDA\xB4\x8A\x73\xF8\x4D\x57\xB0\x4C\x97\x64\xC4\xEB\x94\xBD\x6C\xAD\xB2\x97\x03\x9B\x74\x49\x7D\x73\x39\x72\xEA\xA2\xEA\x36\x73\xF5\xE3\x40\x05\x45\x52\xFD\x8C\x0F\x7F\x26\x46\x06\x07\xAD\xF6\xBA\x19\xED\x0E\xCB\x73\x3D\xD9\x1D\x85\xAB\xE9\x7A\x49\xBB\xA3\x76\xB5\x2B\xE2\xEE\x28\xC7\xBB\xA3\x1C\x40\xA9\xCA\x61\x77\x94\xC3\xEE\x00\x4E\xAD\x65\xD3\x09\x77\xC4\x72\x47\xE8\x1E\xF8\x42\x66\x01\x8F\x96\x64\xE3\x49\xF1\xEB\x1A\xC7\x37\x17\xEC\x46\xAC\x7D\xAC\xDC\xDF\x56\x95\x48\xD4\x08\x29\xAF\x97\x76\x50\x85\x1D\x14\xF6\xCC\x57\x79\x07\x44\x42\x95\x7D\xF0\x86\xF0\xD3\x1D\x52\x6E\x1A\x29\x77\x42\x6C\x76\x42\x6C\x56\x88\x2D\xB9\x43\x62\x83\x49\xEB\x4F\xB4\x0D\xD2\xC9\x36\xB0\x7F\xE2\x76\xD6\x6D\xE9\xDB\x13\xFF\xD7\x8C\xF2\x81\xCE\xB1\x4C\xE1\x20\xE0\x47\x44\xCE\xFE\x93\x50\xB8\x34\x90\x7C\x2D\x28\x9C\xEE\x68\x2B\x24\xBB\x8A\xD7\xAB\xE0\x52\x0D\xEB\x36\xF0\xED\xC9\xDF\x6B\x98\x4D\x06\x8B\x32\xEF\x86\x4A\x22\x7F\x21\x63\x88\x74\xEE\x94\xFF\x9C\xEA\x11\x10\xDB\xFC\x5F\x12\x74\xC4\xE7\xA7\xA4\xE6\xF3\xB6\xE3\x5F\xDF\xBF\xF4\xAB\xD3\xFE\xE5\x22\x58\x0E\xBF\xE7\x94\x8E\xF0\x1B\xD7\xF5\x92\x0B\xE3\xAC\xB2\xA1\xC2\xA3\x65\x2B\xE4\x9B\x97\xFC\x1A\x7A\xD5\xAF\xF1\x59\x2E\xCC\x30\xF8\x36\x9E\x76\xE3\xCB\x9F\x57\xE3\x6B\x87\xDC\xEC\x53\x2C\x61\x3D\x19\xC4\x5B\x1D\x1E\xE9\x92\x1D\xF3\xCD\x7C\xEB\x93\x40\x0B\xB0\xFD\x8E\x79\x4A\x0C\xA6\xE7\x27\x0D\xBF\xBC\xFC\xDE\xD7\x3B\x33\xC8\xE6\x86\x64\xAF\x64\xE4\x63\xA1\xDB\x9B\xBE\xCB\x46\x9E\x96\x47\xB9\xD9\xED\xD8\x2C\x0D\xFA\x81\xD8\xA4\xDD\x31\xF7\xBB\x64\x74\x69\xBB\x1F\x39\x71\xEC\x8E\x79\x90\x9F\x77\x3C\x98\xD3\x88\x4D\x7C\x59\xF5\xB8\x93\xBD\x3A\x98\x1D\xA7\xFD\x2F\xA9\xBE\xF9\xE5\x1B\xC1\x94\xDE\x59\x0F\x53\xF0\xA3\x9D\x19\xC5\x0A\x92\x6C\x16\xBB\xAF\xB7\xCD\xF9\xB6\x80\x46\x21\x1D\x28\xC3\x5C\xC1\xCD\x50\xC2\x22\x60\x87\xF2\x31\xDA\xFF\xE8\x75\x09\x91\x2C\x5D\xC9\x92\x0D\x0A\x0C\x16\x7D\xF3\x2B\x42\x31\xC6\x3F\xDF\xBB\x12\xB0\xDA\xDE\x1E\xFA\xE7\x7B\x01\x64\x2B\xB9\x76\x25\x47\x6A\xD4\x0C\xEB\xA7\xB6\x4D\xC1\xB5\xF2\xEC\x2D\x47\xF5\xAB\x4C\xB2\x06\xF5\x06\xE6\x5C\x00\xCB\x08\x00\x51\xC2\xF4\x78\x5E\x2A\xBC\x0F\x41\x91\xD6\x9B\xC3\x36\x75\xA9\x0B\xE1\x19\x28\xA1\xCE\x72\x3E\xB6\x8E\x96\x42\x4B\xF0\x2C\x06\xE7\x1A\xDB\xFB\x06\x1B\x23\x2B\x60\x31\xC4\xC3\x70\x54\x5C\x0C\xE8\x4B\xFB\x90\x99\x4A\x6C\x5F\xDC\x37\x98\xF6\xD6\x46\x57\x3D\xA9\xA2\xDD\x50\x9D\xD3\x99\x3D\x6F\x9F\x15\x73\x29\x57\xD5\xE0\xA1\x17\xD3\x51\xFF\x5A\x04\xAA\xEB\x30\x72\x2E\x14\xE2\x8B\x03\xC9\xCC\x47\x1A\x7F\xAC\xFA\xC9\x45\x40\xF4\xB6\x29\xA8\xF5\xE6\xD3\xE1\xE1\xA2\x35\x6C\xF2\x4F\x83\x16\x4C\xBD\xC3\x94\x09\xCC\x38\xB2\x56\xB6\xA3\x13\xF4\x81\xF8\xE9\xA1\xF8\xE9\xE5\xE8\x18\x75\x33\x0E\xA1\xD8\x31\xF7\xB2\x56\x5B\x79\xFB\x2C\x16\xC2\x8E\x90\xAA\x01\x60\xE3\x55\xBB\xF0\x80\x97\x69\x1B\xE2\x6C\x5E\x3D\xCA\x98\xCF\xF4\xFF\xAB\x5B\xE2\xA5\xE1\xBA\xF7\x3E\xDF\xEF\x04\x6D\xCE\x00\xB3\xD3\x3C\xE7\xFF\xE8\xE6\xCD\x9B\x16\xCE\x17\x9F\x1C\x3A\xD2\x1E\x0E\x1C\x7B\xBE\xA1\x65\x92\x72\xB7\x4D\xE3\xB1\x03\x06\x5B\x04\x4C\x3C\xEA\x49\x9D\xA6\x81\x7D\x02\x65\x60\xA0\xBD\xBE\xAC\xA4\xF6\x85\xF2\x7F\x01\x9F\x32\x0C\x52\x70\x43\xFC\x83\xF8\x34\xC7\x14\xD0\xA7\x85\x53\xFE\x7E\x7C\xDA\xC0\x04\xD1\xA7\x46\xA0\xE6\x60\x23\x99\xBB\x85\xDB\x70\x4D\xCF\xFF\xDC\x8C\x04\xF1\xCF\xBE\x34\xB6\xE2\x62\xFA\x83\xAE\x56\x77\x20\x91\x8B\x73\xED\xBF\x7F\xB8\x4B\x6A\x50\x01\xFB\x4D\x8A\xC9\x21\x6A\x86\x95\xF4\x22\x5E\x2E\x76\x4C\x11\x4A\xA8\xB1\xC3\xC8\xEE\x75\x86\x4E\xB5\x0C\xB5\x03\xFD\xD1\xA3\xC4\x91\x42\xA5\x78\xF6\x41\xA7\x6C\xCF\x7E\x82\x35\x1D\x62\xD7\xC1\x64\x19\x03\x2A\x1A\x06\xCF\x7D\x82\xC9\xA4\xE0\xCA\x5D\x3F\xAF\x7A\x44\xF8\x03\xAD\x38\x1D\x58\xC0\xC8\x05\x9D\x30\x68\xF0\xD1\xA3\x73\xE3\x8C\xD7\x71\x8B\x30\x08\xE8\x65\x84\x91\x5A\x76\x70\x8F\x0F\x0A\x51\x6A\x0F\xF9\xAD\x97\xF9\x75\x3F\x1B\xD8\x37\x29\xDE\x61\x8F\x22\xF2\xE6\xDE\xCE\xF0\xA9\xC9\x37\x13\xC7\x65\x9C\x03\x66\x35\x47\x3D\xE0\x38\x3C\xF5\xE4\x6D\xFB\x7B\x6D\xE6\x12\xA0\x06\x70\x96\xBB\x01\x61\x1C\xF6\xC8\xE1\x7C\xAD\x96\xD0\x87\x3E\xFE\x1A\x7E\x2A\x86\x9F\xBC\x8E\x37\xD6\xA3\x5F\x0D\x7E\x35\xBE\x01\x8A\x25\x02\x0D\x3A\xD5\x7B\x29\xFD\x89\x04\x54\xAE\xDD\x01\xC3\x91\x39\x04\xD3\x9B\xF4\x80\x9F\x47\x08\xB5\xE4\x45\x46\x22\x95\x13\xB5\xE8\x04\xDC\x5A\x8D\xCB\xD4\x08\x22\x40\x8C\xA2\x05\x76\xD7\xB2\x7B\x90\xF1\x5F\xF3\x25\x47\x60\xE5\x4A\x7E\x88\xDB\x3F\x0D\x0E\xC9\x9F\xCF\x74\xCA\xD9\x5D\xA9\xFF\x33\x2E\xAD\x63\x62\x69\x1D\x76\xBC\xC7\xA8\x04\x67\x2F\xA1\xEB\x74\xBB\x33\x1C\x55\x34\x11\x08\xB6\xBB\xF5\x6E\xCB\xED\x91\xBF\xF2\x21\x3E\x92\x1E\xEC\xD4\x3A\xA7\xE5\x83\x6D\xF0\x78\x3F\x18\x52\xFB\xD5\xC8\x69\x79\x7F\x2B\x35\xD3\xEE\x5F\xBE\x1A\x4E\x80\xF5\x1D\x38\x3F\xEA\xC0\x13\xE1\x4C\x5C\xDB\x81\x47\x63\x07\x1E\x5D\xD7\x81\xD7\x87\x0E\xBC\x7E\x7D\x07\x9E\xEC\xD6\xFC\xF8\xE6\x63\x7A\xF5\xE6\x51\xAF\x9E\xE7\x5E\x1D\xAE\xEF\xD5\x61\xEC\xD5\xE1\xBA\x5E\x3D\x1D\x7A\xF5\xF4\xF2\x35\x7F\x5D\xAF\x54\x18\xF8\xDD\x3F\xAB\x37\x46\x28\x3A\x59\x80\xD8\x91\x68\xAA\x82\x9A\xF2\x6C\xA6\x6E\xDE\x75\x63\xD8\xF2\x75\x27\xD2\xF9\x2F\xFC\xDD\x25\x77\x63\xC3\x05\x6F\xBC\x9C\x54\xE5\x96\xCB\xE9\xBE\xFF\x71\x3A\x88\xA6\x2D\xF8\x14\x2A\x23\x4A\x8C\x57\x8E\x6E\x7E\x24\xD4\x6A\x2B\xE4\xE4\x4C\xA2\xF7\xA7\x9B\xB1\xCF\x0C\x56\x9E\x92\x8D\x2B\xC1\x34\xCF\x58\x23\x6D\xEE\x32\x57\x48\xBF\x11\x71\x19\xFB\x3D\xE4\x88\xAC\xEF\x38\xB1\xB1\x6F\x4C\xAF\x8B\x5B\xF5\x3A\x14\x28\x94\xAA\x60\xA5\xD4\x45\xAA\x83\xC3\x0D\x92\x54\x1A\x4B\xD2\x94\xAC\x0D\xA4\x80\x77\x62\x34\xC9\x92\xFB\x54\xB8\x72\xAF\x2B\x38\x34\xB1\x60\x95\x86\x74\x4B\xC3\x2A\x8D\xBE\xB2\x25\xAA\x3E\x47\x2B\xA2\x7E\x41\x37\x0B\x29\x24\x3B\x5C\xFE\x89\x9B\x2E\xDC\xAC\xE7\x92\x32\xC5\xF0\x12\xAE\x98\xCF\x2C\x1D\xEE\x90\x1C\x1D\x66\x35\x08\xBE\x13\x1A\x15\xAA\xF3\x01\x1E\x38\xF7\x6F\x93\x47\x11\xB2\xC3\xB8\x5F\xF5\xDA\xA5\x49\x68\x69\x4A\xAF\x04\x71\x71\xCB\xD5\xCB\x4B\x83\xA2\x12\x40\xDE\xAA\xDB\x7C\x84\xEC\xE3\x4A\xAE\x5E\x5E\xBF\x81\xD3\xF7\x92\xA1\x12\x06\xE3\x74\x3D\xCE\x1E\xA8\x20\x2F\xD5\x58\x12\x92\x0B\x6B\x09\x5D\x19\xEC\xAA\x28\xC2\xD2\xCD\x19\x9C\x37\xDF\x5F\xE4\x4A\x69\xAD\x4D\x6A\x2A\x97\xD1\x6C\x3F\xC7\xD1\x53\xF3\xB5\x01\x40\x74\xCF\x7C\xDB\x20\x06\x0B\xA5\xED\x16\x98\x8E\x76\x03\xC3\xDE\xA0\x46\x1B\x7F\x74\x15\x28\x6C\x4B\xA3\x37\x61\xF4\x46\x46\xDF\x2C\x8F\xDE\xF0\xE8\xCD\x78\xF4\x61\xE4\xCD\x23\x5C\x96\x55\x08\xD3\xD0\x1C\x34\x03\x61\x9A\x48\x98\xF9\x40\x98\x0D\xA7\xA5\x02\xD5\x77\xDB\xA8\x3D\x5F\xBF\x05\xAA\xE8\xEA\x39\x33\x7D\xB5\xBC\x87\x0F\x1F\x7E\xFF\x32\xFB\x9A\x76\xD5\xFF\x9B\xBF\x07\x40\x93\x49\x87\xDF\x80\x33\x69\x69\x22\x56\xC6\x18\x6F\xBF\xDD\x64\x8C\xDB\x5D\x1A\x3E\x57\x55\x0B\x24\x10\x06\x7F\x69\xAE\xFC\xBB\xA7\x66\x84\xAF\xCA\xAA\xDC\xA2\x23\xC5\xA8\x23\xC5\x71\x1D\x59\x6D\x90\x17\x4F\xDA\xBD\x3C\x57\xFE\xA7\xA6\xAF\x1F\x2D\xC9\xF0\xC2\xEE\x64\xCF\x09\x4E\x86\x9F\x2F\x05\x4E\x2B\x4E\x82\x6B\x38\x92\xAD\xF4\xD7\xD6\xAC\xF6\xF2\x32\x53\xA7\xD6\xAD\xF4\x57\x6D\xDA\xD6\x4D\xDC\xC9\xD1\xAC\x31\x9C\xF7\x78\xDE\x88\x7A\xFD\x77\x4E\x27\x4E\x9E\x69\xF9\x99\xA1\xFD\xF0\x20\x02\xD0\xF1\xAA\x75\x24\x1E\x07\x5D\x56\x3C\xC6\x56\x4A\xF2\x85\xA1\x13\x7B\x1D\x06\x39\xAE\x89\xC4\xBD\x43\xD4\x9E\xCB\x43\xE9\xBB\x1C\xA9\x62\xE3\x2A\x48\x27\x69\x93\xB1\x3B\xA2\xF0\xBF\xF0\xC1\x4F\x7D\x50\x3F\x3E\x2F\x69\x17\x39\xBE\x52\x92\x40\x7D\xCA\x9D\x82\x35\xEA\x53\x74\xDD\x95\xFE\x83\x9F\xFA\xE0\xA7\x60\x8A\x1A\x9E\x40\xF9\x92\x52\xB8\xF6\x29\x37\xF3\xF5\xD3\xD4\x22\x5E\x2F\xB5\xFD\x4E\xB9\xB2\x6F\x4F\xB9\xC2\xD7\x7D\xCB\x35\xE3\x73\x77\x92\x53\xC1\x4F\x31\x8E\xDF\xE6\x50\xEB\x8B\x43\x20\x0B\x14\x65\xE5\xC7\x0B\xE2\xDB\x05\x9F\x49\x33\x14\x04\xEC\x4A\xA9\x25\x58\x08\x53\x8F\x29\x78\x5C\xA7\x90\x9F\x9B\xD1\x9C\xB5\x39\x8D\x88\xAB\x30\xCA\xDB\x10\xDC\x17\x5F\xCA\xFE\x79\xCB\x69\xE6\x25\x27\x6A\x96\x24\x63\x96\x03\x2E\x64\x81\xA3\x86\x44\x52\x3E\x96\x82\x7C\x53\xBA\xFC\x12\xBD\x04\xB7\xBB\x02\x22\xE9\xC4\x5B\xF2\xB5\x24\xC9\xDB\x30\x95\xF5\x34\xD9\x0C\xE5\xCB\x02\x3D\x42\xFF\x8F\x4F\xA2\x68\x4D\x87\x58\xD5\xD9\x10\xA9\x5A\xD2\x9F\xA2\x6B\xF8\xBC\x0F\xB5\x43\x91\x11\xC1\xA8\xA7\x12\xDB\xB9\xD7\x9D\xF4\xE6\xD9\xEE\x04\x10\x66\xC3\xD9\x5E\x8A\xC8\xD0\xB8\x62\xAF\x6B\xBC\x7E\x16\x64\x55\x5E\x09\x12\x41\x33\x96\x08\x1A\x06\xF5\xAB\x01\x21\x2A\x0D\xCC\xD0\xED\x60\x1F\xAA\xD8\xC3\x7C\xCA\x95\xEE\x04\x72\x19\x4F\x70\x87\x4A\x1E\x5C\xDB\xB8\x13\xD4\xFB\x13\xE6\xBC\x3B\xC9\x8A\x1B\x91\xF5\xC9\x68\xEE\x9C\xB9\x13\xC2\x7B\x76\x40\x9B\x0D\x96\x14\x80\x96\x61\x5D\x37\x48\xC8\xD8\x70\x95\x58\xA1\x57\x64\xB5\x7C\x0B\xC7\x6F\x57\xDE\x4A\x60\x93\x75\x2B\x78\xDD\xCA\x28\xAE\xCD\xA2\xB8\x16\x84\x80\xAE\x61\x71\x6D\xC6\x6B\xD8\x84\x35\x2C\x81\xC8\x3A\xE7\xE5\x9A\xC1\x82\x31\x5B\x2B\xC9\x0F\xEF\xE4\x57\x34\x15\xFA\x07\x5B\x5A\x23\x3D\x58\x23\xD6\x8F\xBA\x2A\xE7\x62\x13\x3B\xDC\x9D\x74\x25\x9F\x8B\x27\xDD\x6D\x87\x19\x07\x29\x75\xCD\x57\x86\xB6\x3C\xB0\xE5\x83\xE6\xD8\x06\xBF\xFE\x6F\xD6\xFC\x6C\xB1\xF6\x88\x5B\x9A\xE4\xF8\x42\x3A\xE2\x9A\x9D\x01\x62\x19\x88\x91\x0D\x93\x19\x73\xFB\x92\x8F\xB8\x62\xF5\x88\x9B\xB6\x89\x15\x8B\xD4\x76\xBB\x65\xFB\x32\x66\x6A\xDD\x5C\x9D\x1C\x53\x5F\xB1\x4A\x7D\x4B\x1C\x64\x78\xA6\x6D\x44\xF5\x08\xED\x87\x07\xC3\xA9\xB6\x46\x70\x1B\x8F\xB3\x08\xA7\x5A\xE3\xD0\x44\x38\xD5\x6C\xE5\x1A\xB1\x49\x99\x8A\x23\xA2\x52\x1C\x6D\x97\xE6\x49\x9D\x55\xB7\x10\x76\x17\x68\x96\x71\x00\xE9\x28\x84\x7E\x22\x1B\x8A\xB3\xAB\x11\xF0\x1C\xCF\x40\x56\x6D\x88\x1F\x99\x67\xBB\x93\x43\x25\xC0\x24\x94\x39\xCB\x89\xC3\xED\xD1\x01\x39\xAD\x04\x68\xDD\x6C\xCC\xAF\x66\x43\x69\xDD\x59\x68\x20\x45\xF8\xD7\xB8\xB4\xEE\x49\x30\xAA\x93\x4E\xA4\x9E\x99\x54\x34\x3D\x29\x6C\x96\xD1\x92\xC1\x93\x5C\x13\x19\x55\xCA\x0A\x5A\xCA\xA9\x6A\xA9\xB8\x72\x46\x5A\x4F\xE0\x0D\xB2\xDB\x6B\xE2\x55\x83\x9B\x25\x1B\x6A\xAB\x0B\xA8\x07\xE6\xFE\x72\xF5\xF6\x45\x6A\x8F\xF4\x35\x83\xCA\x56\xC8\xDE\x7E\xBE\x0F\x20\x97\x51\x8D\xD1\x4E\xED\x75\x89\xB7\xCF\x76\xE9\x22\xCB\x32\xA5\x8D\x45\x40\xF5\xF3\xF0\xD8\xE0\xC4\x39\xF1\xAD\xD4\x38\x00\x90\xD4\x7D\x6C\xCA\x74\x89\x1C\xCC\x89\xCB\xCE\x19\xAE\xBC\x55\xAC\x3C\x41\x54\xC0\xD6\xE4\x64\xF2\x73\x21\xFE\xB3\x42\x9A\x2C\xD0\x24\xD7\x0D\xA6\x79\xC8\xB8\xE5\x75\x6F\xE7\x5B\x95\xDC\xAA\xE2\xDB\xD1\x2F\xA2\x47\xAE\x3C\x12\x6B\x10\x8F\x6E\x28\xDA\x92\x1F\xA0\xE7\xCA\x73\x82\x32\x33\x79\x45\x82\x71\xB5\x99\x4B\xD6\xB4\xC0\xC8\xA2\xCA\x37\x3D\x46\xE5\x4C\xF3\xFF\xDC\xE0\x3A\x63\x72\xAD\x2B\x70\xB5\x4B\x91\x09\xD4\x25\xF1\x0E\x9E\x85\x7C\xF9\x6D\x66\x78\x5B\x2E\x6F\xCB\xC3\xD8\xD3\xE5\x5B\x53\xBE\x35\x5D\x9A\x79\xE8\xCC\x4B\xB7\xAA\xFB\x4C\x13\xA6\xA9\x38\x07\xAC\x55\x8C\xBA\x58\x9E\x51\x73\xDC\x8C\x72\x64\x7B\xE2\xFF\x40\x0F\x25\xF1\xFE\x55\xAC\x9C\x96\x7A\xF3\x16\x0E\xE7\x93\x78\xCD\x1F\xFF\x8B\x30\x9B\xE2\x52\xF2\x16\x38\xAA\x68\x16\x72\x41\x97\x08\xF3\xD0\xCE\x10\x83\x3D\xE9\x82\x1E\xE6\xC0\xCA\xC0\x2C\xBA\x80\x58\xB6\x7C\x7C\x33\x1B\xF4\x7B\x8E\xD2\xCC\xF9\xA9\x7C\x69\x3A\xB8\xD8\xC8\xCA\x53\x46\x9E\x8A\x93\x38\x9D\x6F\x84\xE6\xA8\x95\xA7\x6C\x1F\x22\x42\x85\xE8\xA7\x34\xE1\x66\xD8\xD5\xCC\x66\xA6\x74\x0F\x87\xEC\xE4\x17\x46\x06\xE3\xD8\xF2\x99\x4B\x69\xEE\xE3\x10\xA6\x03\x07\x90\x6E\xBE\x76\xA9\xB8\x17\xD3\xBE\x73\x58\x9A\x50\x3F\x57\x74\x59\xD3\x20\xC3\x2F\x4F\x9F\xC4\x8B\x96\xFA\x49\x0B\x72\x4C\xBF\x2A\x6F\xDA\xD9\x00\x8C\xAA\x96\x1F\x44\x62\x29\x10\xCD\x04\xCD\x2B\x11\x1E\xC2\xC8\x47\x05\x60\xFA\xC4\x4E\x1D\x66\x99\xDE\x6E\x77\xE7\x99\x3D\xA6\xC5\x63\xBA\xC2\x82\x61\x8E\xB8\x06\x2E\x67\x6B\x77\xE7\x79\xCD\xB5\x95\x97\x1B\xA9\x8E\x63\x5A\x42\x4D\x9C\x72\x80\xDD\x9B\x3C\x8E\x94\xD5\x82\xF8\x24\x22\x75\x39\x24\x77\x89\x0A\x2B\x2E\x9D\x54\xD8\x38\xC4\x95\x57\x82\xA0\x90\x20\x9E\xB6\xC5\x84\xF0\x96\xBA\x90\x80\x5C\xF3\xDD\xAD\x36\x0F\xC4\xCD\x72\x68\xC1\x0A\x4A\xBE\xBC\xBB\x95\x2B\xB8\xA9\x62\x99\x67\x0C\xA3\x99\x71\x79\x51\x67\x9A\x5F\xBF\x11\x2A\xEB\x14\xCC\x9E\x75\xF8\x11\x2D\xB5\x9A\xB4\x98\xAC\x4E\x2B\xD4\x28\xCC\x51\x27\x81\xD8\xC4\x9E\xD3\xAE\xD8\x7B\x2C\xB6\x03\x87\x2B\xDA\x68\x55\x6D\x2B\x7C\x42\x5B\x72\xA1\xD5\x88\x8E\xE2\x12\xEA\x16\x73\x97\xD3\x24\x26\xF6\xBC\x04\xB0\x76\xC9\xCA\xB2\x24\x58\x44\xCB\xA9\x57\x38\x25\xA6\xD3\xCC\xD1\xAC\x57\xE6\xCA\x27\x1C\x94\x79\x0C\x6F\xE6\x75\x87\x97\x03\x91\xB6\xFC\xD1\xA0\x92\x6C\x55\xFD\xEB\xB9\x1E\x63\xB9\xE7\x01\x08\x5A\x8A\x83\x87\x3A\xEF\x05\xFD\x29\xB8\x42\xB3\xE6\x90\x65\x58\x20\x61\x14\x2D\x78\x97\x67\x5E\x9C\xE7\xDD\x8C\x15\x23\xB9\x71\x26\x37\x16\x2E\x63\xA0\xFA\xB1\x92\x41\xED\x92\x1A\x8A\x94\x33\xA9\xF2\x30\x83\xD3\x1A\xA9\xF3\x48\xC1\x66\x8C\x7E\x1C\xF1\xAC\x8B\xFA\xA3\xAB\x5D\xB5\xAA\x4F\xA6\x24\x2E\xCE\xBC\x62\x0C\xE4\x62\x8D\x30\x98\xA2\x04\x2E\xAE\xC3\x8C\x02\x4D\x42\xB9\x42\x84\xC1\x74\x22\x38\xE3\x3E\x08\xCE\x05\x4B\x2A\x51\x1A\xA4\xE9\x71\x65\xB4\x53\xBA\xD2\xE9\x5D\xE8\x08\x6B\x3A\x65\x42\xA7\xCC\x71\x9D\x32\xDC\x29\xC3\x9D\x9A\x74\xC8\x2C\x75\xC8\x8C\x3A\x34\x16\x4F\x07\x5B\x29\xE7\xC4\x15\x63\x5B\xA9\x31\xC6\x68\xC3\x76\xB0\x35\x12\x63\x41\x0B\x50\x85\xA5\x26\x1D\x97\x96\xBA\xAB\x59\xC7\xAD\x78\x0D\xCB\x41\x66\xE4\xB5\xE2\x8A\xEA\x46\x2A\xAA\x47\x1D\x57\xE2\xB0\x5C\xED\x66\x7B\x5D\x4D\x32\xE3\x86\xDB\x18\xE9\xB8\xF5\x58\x66\xAC\x07\x1D\xB7\x0E\x0D\xE4\xB0\x13\x0F\x3A\x6E\xE9\x16\x90\x19\x17\xDC\x93\x92\xCD\xC8\x6D\xE5\x16\x74\xBA\xD4\x43\xF5\xF4\x72\x52\x3D\x3D\xE3\xEA\xE9\x19\x17\x7E\xC8\x58\xC7\x9D\x56\x8A\x2E\xC6\x32\x23\x75\x82\x63\x63\x65\x12\x2E\x89\x37\x90\x48\xE0\x22\x93\x46\xDD\x6A\x7B\x3E\x68\x46\xA0\xC1\x7A\x75\xB9\x6D\x50\x59\x2C\x20\xB0\xD6\x2C\xB7\x65\x85\xC4\x02\xE0\x27\x68\x2E\x99\x2C\xB8\x8D\x9A\xD4\x5C\x96\xDC\xCA\x92\x67\xA3\x25\xE7\xF0\xC4\xA5\xB7\x1F\xDF\xF0\xED\x7A\xB0\xAE\x0F\x73\x31\xF4\x0D\xAF\x2F\x8E\x57\x88\x86\x27\x86\x66\xA5\x62\x73\x78\x8C\xED\x29\xA0\x9C\x8A\xA7\x58\xED\x4A\x12\x4B\xC5\x61\x07\xEB\xFC\x0F\x2B\x3B\x3A\xBB\xF3\x1D\x9D\xC5\x1D\x9D\xDD\x72\x47\x67\x12\xA2\xB6\x66\x31\x4D\x58\x4C\x73\xDC\x62\x1A\x9E\x4A\xB3\x66\x2A\xA3\xF9\x7F\x16\xCD\xFF\x3C\xA9\x0B\xB6\x9E\xCE\x78\x5A\x17\x93\x69\x25\xA5\x88\x43\x0F\xD6\x58\x38\x26\x2F\x93\xB6\x39\xB8\x8E\xDF\xB9\xD6\xE4\x3F\xEA\xDC\xB8\x6B\x6C\xE8\x88\x71\x0F\x6B\xC8\xE9\xD8\xA7\x6F\x37\x07\x13\x62\x32\x63\x62\x32\x6B\x88\x69\xD9\xE8\xEF\x8C\x2B\x9B\xBF\x25\xE0\x59\x25\x0C\xB6\xCD\xBB\xC5\x21\x57\xD1\x49\x52\x41\x64\x42\x0E\x4B\xD2\x77\x1A\x4B\xCF\xE1\x38\x26\xC4\xD0\xE4\x51\xE5\x1B\xDC\xAD\x5F\x3C\xA1\xCB\x23\x71\xE9\x71\x0C\x06\xC8\x0E\x0A\xF2\x2E\xFA\xA4\x59\x3D\xCE\xA2\x67\x2D\x63\xCF\x4D\x1A\xCF\x35\x71\xC6\xC9\x8D\xC1\x05\x57\xB0\x4E\x9A\x4C\x83\x2B\xA6\x9E\x38\x89\x6F\xCC\xF9\x5C\x5B\xF1\xC1\x41\x53\xB0\xE7\x25\xF2\x12\x11\x8E\xEB\x3C\x71\x45\xF0\xC4\x65\x6B\x9C\xA4\x09\x2F\x43\xB2\xBC\x0C\x79\xF4\xC0\xE5\x83\xD7\x23\x19\xAD\x84\x89\x4E\x51\xCB\x1E\xB8\x7C\x38\xD9\xF2\x70\xB2\xAD\xE9\xD2\xCA\xEE\x58\xE9\xD2\x94\x32\x26\x1D\x32\xA1\x43\xDD\xEC\x78\xE2\xC8\x2F\x49\xAA\x01\xEC\xFA\x19\xDB\xF5\x61\x9F\xC9\x82\x41\x3F\x23\xE1\x29\x93\xA3\x89\xA1\x76\xBA\x8A\x8E\x1E\xFB\x6C\x37\x9F\xE4\x72\xE5\x92\xCB\x55\xB8\x4A\x72\x0C\x16\x6E\x31\xCA\xE5\x9A\xE4\x18\x64\x43\x8C\x69\x6C\xA0\x70\xD9\x52\x8C\xE9\x9C\x1D\x93\x62\x9E\xC7\xE5\xBE\x5D\xB8\x39\x49\x6E\x19\xD7\xD9\x0A\x61\xA6\xF5\xA8\x42\xFB\x82\x8D\xFD\xD9\x60\xEC\x9F\x44\x53\xB3\x65\x3E\xA3\x37\x3F\x4F\x62\x77\x31\x46\xED\xB8\xC5\x52\x94\xB7\x5D\x8A\x72\xC2\xA8\xCA\xE5\xE5\x98\x2D\x99\xD1\xB3\xC1\x8C\x9E\xAF\x37\xA3\xCF\xC6\x36\x74\x5A\x61\x74\xB6\xCB\x7D\xB1\x3F\x3C\x0D\xB4\x15\x97\xFB\x7C\x9F\x06\x50\xDB\x6A\x9A\x35\xC3\x59\x54\x19\x3F\x97\xEF\x2F\x0A\xAD\xAC\xB5\xA9\x49\x75\x35\xAC\x7D\x3E\x5A\xFB\x91\x33\xA7\xE0\x4D\x34\x72\xE7\x94\x12\x5F\x5C\x0D\xA6\x2C\x13\x4C\xEF\x79\xF0\xC4\x4B\x7C\x71\xBE\x7E\xED\xC7\x65\x9D\x43\x03\xB3\x71\x68\x26\xD6\xBE\x42\xB7\xAB\x0B\xD1\xFF\x42\x6B\x5F\xA3\x16\x0E\x34\x8A\x18\x62\x5C\x8E\x42\x8C\x51\x88\xAA\xE0\x70\xE4\xB8\xF6\x13\x07\x3E\xD6\x3E\xAF\xA0\x1F\x74\x85\x8C\x6A\xAF\xCB\xA9\x83\x1A\xE5\xA4\x84\x20\x8A\x7D\x97\x7B\x7D\x78\xC0\x30\x06\x2C\x3F\xC3\x10\x9A\xAF\xF5\x81\x0F\x48\x0E\x6B\x0C\x83\xE5\x71\x86\xC1\x62\xAF\xAB\x30\x5B\x13\xC3\x60\x11\x0D\x83\x85\x18\x06\xE7\x6E\xFE\xE5\x18\x06\xCB\x15\xC3\x20\xA4\xBA\xAE\xE6\x9E\x04\xC3\x20\x09\x7B\x62\x18\xAC\x82\x61\xB0\x70\xD5\xC8\x30\x58\xAE\x1A\x06\xA7\x1E\x0C\x99\x16\x1A\xDA\x73\xE8\xC4\x57\x8F\xA6\xD2\xAF\x94\xA6\xB2\x6F\x04\x4D\xB9\x2C\x98\x0A\x84\x22\x96\xD8\x78\xBE\xC5\x61\xAC\xC9\x73\xDD\x8A\xAC\x35\x66\xE7\x53\x53\x7A\x16\x79\x48\x76\x4B\xCF\x7A\xB6\x9E\x8D\x84\x87\x86\xC6\x5D\x49\xF4\x9F\x0D\xD9\x6A\x43\x2B\xCC\x4E\xB2\xC0\x4E\xBE\x8A\x5C\x22\xF9\x4A\x57\x34\xFD\x46\xAE\xE8\x92\x9F\x40\x55\x23\x8C\x84\x7F\x9A\xD8\x0C\x66\xEE\x51\xD6\x64\xAC\xC4\xE9\x3F\x16\x92\x25\x13\xFF\x91\xA2\xEF\xD2\xF0\xE5\x03\x74\xB4\xCA\x17\xFA\xF3\xBE\x82\x93\x6F\xCF\x70\x64\x2C\x67\x43\xE6\xCE\x72\xC9\x6D\x11\x71\xB8\x1A\x33\x57\x1E\xA7\xB1\x97\x43\x62\xE3\x50\xA6\x78\x9F\x44\x92\xFB\xEC\xC7\xD8\x72\x70\x01\x36\x3F\x7E\xD1\xF4\x7D\x95\x4B\x68\xF4\xEF\xA5\x17\xCF\x46\x49\x99\x37\xCE\xD9\x8F\x15\x78\x79\xC1\xFA\x23\xFA\x75\x9A\x8D\x04\x05\x8A\x0E\x9E\x01\xA0\x6B\x02\x18\xB4\x1D\xD3\xE0\x93\xEB\x77\x4C\x8D\x4F\xEF\x2B\x7A\x04\x0D\x81\x84\x03\x98\x4D\x09\x64\x22\x57\x9E\x55\x09\x63\x2B\x8C\xF2\x30\xA7\x17\x5D\x79\x5C\xBA\x26\xC3\xB6\x21\x81\xA9\xCB\x5D\x71\x56\xE9\xAE\x6A\x3E\x23\x01\xF9\xC7\x3E\x45\xDD\x58\x4D\xF2\xAC\xD6\x24\x79\x96\xAE\xF2\x5F\x50\xF8\x0F\x11\xE1\xD5\xB9\x00\xC5\x95\xFE\xA9\x1E\xC9\x9E\xFC\x32\x11\x19\x4F\x77\x25\x2F\x08\x11\x58\xB2\x6D\xCE\xEC\x75\xA5\xE7\x84\x9A\x9B\x37\xF5\xE5\x2D\xAF\x0F\x5D\xF1\x1A\x6D\x0E\x5E\xAB\x4D\xE5\x75\x9B\xE3\x26\xD2\x8A\x13\x54\x5C\x24\x89\xF7\x8C\x2B\x9D\xB9\xCA\xE5\x1D\x47\x89\x25\xDF\x5D\xA0\x44\x17\x57\x0D\x97\x32\xEC\x8C\x56\xCE\x58\xB6\xF8\xF9\x5B\x41\x24\x13\x38\x8D\xC4\x59\x9F\x3D\x37\x20\x13\x68\x67\x19\x48\x23\x63\x0C\x88\xF8\x38\xBB\x5F\x56\x9B\x08\x29\xD6\x5D\x42\x24\xA4\x5C\x06\x90\x07\x15\xE0\xA3\xE2\xE5\xD4\xA5\xC3\x65\x7D\x2C\xDA\x46\xE2\x34\xF5\x27\x1F\x92\xA4\xB5\xA0\x6D\x20\x91\x59\xFB\xF3\xFB\x6B\x53\xA4\x23\xDA\x43\xB2\x3E\x45\x3A\x59\x9F\x22\x9D\xAC\x4D\x91\x06\x7C\x8F\x40\x3E\x24\x13\xC8\x87\xE9\x74\x18\x94\x4F\x16\x78\x0C\x3B\xC0\x6E\x58\x41\x95\xD1\x95\xB3\x23\x9D\xC1\x19\x24\x80\xDB\x61\xAE\x0D\xCD\x3E\x20\x37\xA6\xD3\x1D\x10\x37\xE4\xEF\x10\xE1\x68\xBC\x8A\xF3\xDF\xE6\xC0\xA1\xB9\xCA\x49\xF8\x92\x5F\x65\x87\x49\x36\x5E\x4B\xF9\xE2\x3C\x2E\xD5\xB1\xB7\x05\xC8\x63\x33\x81\xE5\x48\xF1\x86\x25\xFC\x10\xC3\x99\x1B\x4B\x80\x16\x76\x0C\x68\x91\x31\xA0\x05\x16\xCA\xF2\x42\xD9\x65\x40\x8B\xD5\x85\xB2\xEB\x17\xCA\xAE\x5F\x28\x1B\x17\xCA\xC8\x42\xD9\x09\x36\x87\xD3\x01\x99\x63\xBC\x05\xD6\xE7\xE6\x73\x42\xD3\x64\x3C\x9A\xC7\x63\x87\xF1\xD8\xAF\xC7\x78\x04\x97\x53\x06\xC3\xF8\x5E\x39\x63\x86\x25\x2E\x77\xC9\xE5\x2D\x16\x0E\xD5\xB6\xA9\x03\xAE\xA8\x33\xBB\x5D\x82\xB2\xB7\xD6\xEB\xDE\x25\x5B\x9D\x0E\xC8\x12\xD5\x0F\x73\x01\x41\xBA\xFF\x74\x67\xBD\x7E\x64\xAE\xFC\x7B\x3E\x34\x81\x30\x3C\xDD\xDA\xCA\x07\x08\x00\x03\x3B\x89\xB3\x7B\x44\x15\xC6\xE9\xD6\x72\x2E\x8A\xB3\x4E\xEF\x01\xF1\xC1\xFF\xE3\x71\x22\x07\x08\xE7\x0C\x10\xDD\x9B\xEF\xA3\x9F\x3A\x7B\x11\x18\x55\x6A\xDB\x38\xB4\xEE\x6C\xEF\x8F\xFA\xFB\x15\x97\x09\x62\x48\x29\xCB\xA4\x09\x26\x56\xBD\xCB\x1A\x73\xA4\xAF\xA1\x76\x48\x32\x76\x42\x39\xE3\xF4\xE4\x97\x2C\xCC\xB9\x94\x0E\xCD\x2E\xCE\xB9\xCA\x69\x9B\xA3\xF8\x22\x8B\x52\xC6\xE5\xEC\x2F\x4A\x97\x9B\x8C\x8E\xA9\x3C\x56\x16\x45\x52\xFE\xD8\x31\x95\x87\xB4\x0C\xB5\xA6\x41\x76\x4C\x4D\x9F\xC4\x8B\x96\x7A\x7A\x91\x56\x63\x7D\xBF\xE0\xBC\xE0\x5C\x19\x33\x7D\x84\x5F\x88\x0A\xA7\x83\x03\x29\x67\x87\xDF\x52\xFB\xC8\xC4\xD2\xFD\x46\x75\xDC\x5B\xD8\x55\xBE\xF2\x88\xE9\x83\xF7\x79\x75\x06\x00\xC1\x8A\x64\xFD\xEA\x27\xAC\x49\x8F\xCC\xB5\xC1\x0F\x11\x8A\x3D\xAE\x75\x9B\xA7\xEC\x47\xCE\x96\xDC\xE6\x79\x4C\xAD\xC9\x69\x3A\xE0\xE6\x2D\x26\x6E\xDE\xE2\x9C\x29\x56\x1D\xE7\x9A\xDD\xBC\xC5\xC4\xCD\x5B\x8C\x97\xA8\x90\x32\xAB\xDC\x66\xC9\x97\x1B\x71\x93\xCB\x5D\x45\xF8\x3D\xBA\xCF\xB3\x65\x67\x2E\x7B\xD8\x20\x9F\x04\x29\x3C\xC3\x8B\xD8\xC7\x06\x9F\xB8\xDE\x9D\x4B\x59\x2F\xE2\x12\x5D\xEA\xB2\x15\x37\x22\xFB\x77\x6C\xC1\x39\xCE\x70\x10\x65\x7D\x07\xB8\xD7\xC4\x37\x3D\xB7\x8C\x74\xDD\xB7\xC2\xB7\xC8\x38\x92\x99\x7F\xBE\x97\x12\xEA\x2C\x31\x2C\x39\xED\xA8\x11\x7F\xBA\x67\x90\x1A\xCB\x65\x45\x25\xC4\x2C\x77\x69\x9B\xB1\xB7\x2F\x71\xFA\x52\xAC\x26\x14\x10\xE4\x8B\x51\x1C\xC5\xCA\x12\x7A\x3D\x2D\x94\x88\x88\x0A\x6F\x9F\x5D\x64\x69\x3A\x8E\xA6\x48\x97\x97\x25\x39\xCE\xB1\x5C\x27\x12\x4E\x91\xAE\x0F\xA7\x28\xA6\x1E\xEE\x56\x4B\x38\x85\x96\x36\xD9\xA3\x5F\xC8\x52\x17\x21\x4E\x60\xDD\xEB\xD7\x3A\xFF\x93\x91\x47\x59\xF3\xC6\x2D\x62\x1C\xE6\xE8\x8E\xD5\x80\x8A\x62\x39\x6E\xC1\x0E\x9E\xCF\xA5\x26\xEC\x2D\x22\x2A\x98\x29\x28\x76\xED\x62\x2B\x14\x4C\x3E\xE9\x52\x48\x85\x5E\x7E\x9F\x1E\xDE\x37\xEC\xC5\xF5\x71\x12\x7A\xF0\xA4\x2E\xF9\xF5\x8B\x55\x9F\xF8\x71\x21\x15\x2B\x7E\x7A\x7D\xEC\xAC\xEA\x2A\x06\x89\x2C\x2D\xAA\x04\x8D\x4C\xFA\x17\x82\x32\xE7\xF0\xEA\x1C\xDF\x81\x95\x98\x8E\x5B\x77\x20\x2C\xEB\x6C\xB2\xD9\xB3\x63\x36\xFB\x34\x56\xE6\x78\x4F\xF4\x74\xFE\xB8\x36\x57\x57\xC4\xAD\xEE\x31\x1A\x6C\x78\x3A\x8C\xD3\xD5\x0D\x9F\xC4\x0D\x9F\xCA\x86\x4F\xFB\xAE\xA0\x0D\x5F\x8C\x37\x7C\x1A\x36\x3C\x8E\x8D\x14\x6E\x7A\xDE\xF0\xC5\xDA\x0D\x9F\x62\xC3\x03\x2D\x45\x36\x3C\xBC\xE4\xDD\xCC\x17\xBB\x73\x13\x37\x7F\x02\x94\x68\x2C\x0D\x36\x3F\xED\x68\x86\xFF\x2B\x7A\xA7\x77\x81\x12\x39\x94\x10\x4E\xAA\xBF\x53\xEA\x24\xF0\x81\x07\x22\x1F\x30\xE7\xBD\xDA\x36\x3F\xF9\xFE\x6F\xBF\xAE\xFC\x11\xE7\x1C\x5B\xBF\xDD\xA3\x66\x25\x40\xCC\x77\x4C\xE1\x71\x19\x5D\xF6\x1F\xA5\x87\x9A\x0F\x87\x9C\x37\x2D\x71\x5B\x49\xF3\x62\xC0\xC1\x75\x5C\x96\xE4\x3E\x1B\xD1\x85\x91\x40\x18\xBE\x3B\x83\x4F\x0D\x63\x25\x6D\xF3\x9F\x07\x1C\x97\x73\xA5\xF7\xEC\x98\xFB\x91\x6A\x1A\xD2\x42\xCF\xAA\x07\x43\xC9\x28\x4E\x4A\x0D\x00\xC6\x0F\x49\x75\x6B\x5D\x91\x38\xFC\x5A\x8D\x25\x7C\x99\xAB\x26\xF2\x83\xE7\xE3\x83\xAF\xA8\xF1\x93\x9F\x50\xC3\xA3\x49\x7C\x94\xF3\xEC\x49\xC3\x7D\xCA\xE1\xD6\x6F\x76\x28\x5B\xFA\x24\xFF\xF8\x04\xFF\xC8\x05\x26\xA7\x95\x8E\x4F\x4B\xA6\x36\x12\x17\x51\xE4\xAA\xD3\x5E\xEF\x77\xE9\x16\x1B\x0C\x20\xC8\x69\xAF\x9F\x73\xF4\x4B\x2D\x20\x90\xFE\x5E\xCF\xE8\x02\xDE\xEC\x6E\x75\xDA\x69\xFF\x9E\x8D\x03\x80\x0B\x9C\x55\x8A\x64\x37\x73\x00\xC8\x01\x17\xBE\x5F\x6F\xF8\x87\x36\xFC\x50\xF0\xF7\x2E\xDE\xE0\xF8\x87\xFF\x1F\x7E\x70\xCA\xDF\x0B\x94\x1B\xFD\xCC\x01\x5D\xD4\x7C\xF1\xFF\x1F\xEF\x96\xF6\xFF\x7C\xF8\x41\x9A\xFF\x4F\xF8\x69\x54\x16\xFB\x38\xAA\xB7\xEA\x1D\xB3\x6D\x22\xEA\x65\xAC\xBD\xAC\xF9\x9E\xBF\xF1\x02\x83\x3F\x6B\xAC\x1C\xD7\xD3\xD3\x9E\xC6\xB3\x71\x65\x6B\xC7\x3C\x10\x0C\x41\x67\xBA\x14\xF9\xE7\x8D\xC0\x4D\x63\xEA\x0A\xAE\x7A\x0A\x0C\xAA\x4E\xFB\xB7\x0A\xB8\x1B\x64\xF4\x8A\x61\x41\x9B\xDE\xBF\x75\x3F\x20\xC5\xB7\x82\xA4\x59\xC3\xC9\xA0\x0F\x78\x82\x93\x1D\xD3\x70\x59\x42\xED\xF5\xE1\xC3\xAA\xE0\x09\xD6\x07\x6D\x42\x67\x01\xAB\x9F\x4E\x47\x53\x4E\xE2\x34\xE3\x60\xC3\x4A\x3F\x2A\x4A\xC6\x14\x16\xCC\x94\x26\x6E\x40\x13\x6A\x02\x44\xE0\xF7\x60\xE1\xD2\x48\x68\xFD\x59\xC5\x97\x9B\xBF\x15\xCA\xB9\x5B\x64\x36\xD7\x9C\xD0\xB6\xDD\xFC\x21\x62\x5A\x8C\x00\xA9\x3F\x81\xBA\x45\xB4\x37\xA0\xFF\xBD\xE3\x82\x3D\x6A\x7E\x3E\xA4\xCF\xBF\x91\xFA\x34\x4C\x73\xAB\xFD\x03\x31\x67\x59\x5F\xF8\xFB\xD7\xAF\x5F\x7F\x5F\xC2\x47\x04\x92\xEC\x0D\x0D\xA4\x73\xCA\x6F\x60\x1F\xF1\x32\x18\xAF\xEE\x53\xEF\xFF\xFE\x1B\xD7\xD5\x39\xC5\xBD\xA7\x1F\x5E\x1A\x7E\x68\xF0\xC3\x47\x87\x1F\x4E\xE3\x87\x9F\x1C\x7E\x70\xBD\x57\xAF\x51\x9F\xA0\x1F\x5E\xAB\x54\x84\xF2\x7B\xA2\xF9\x9B\x2F\x00\xE1\xE0\x49\xFE\xFE\xC6\xE6\x7B\x68\x68\x0F\xAB\x6F\x16\x3F\xFB\xBD\x77\x5E\xEC\xED\x81\x15\x77\xE0\x5B\xB5\x3E\x1A\xE8\x0B\xF6\x39\x8F\x21\x81\x35\x30\x8C\x32\xCD\xFE\xF4\x9E\x84\xEF\xF9\x04\xDF\x03\x0F\xE4\x71\xF7\xBC\x32\xBD\xA7\xFA\x56\x2D\xC8\xE9\x82\xA3\x7E\x88\x6F\xE6\x69\xDA\xCA\x28\xAC\x46\xDF\x1E\xC4\x19\x18\x40\xD2\x5D\x0F\x93\x57\x13\xD8\x1B\x7D\x4B\xF8\xCB\xAB\x7A\xAF\x99\xC5\x6C\xF6\xE0\x2B\xA0\x28\x36\x33\x82\xED\xC8\x47\x44\x21\xFD\x6B\xC6\x49\xAF\x0E\xB4\x5E\x05\x33\xE7\x2C\x67\xA9\xA1\xF5\x34\xB3\xE6\xD0\xEB\x33\x82\x6D\x40\x4C\x5A\x03\x0B\x02\x3D\xF5\xBF\x05\x60\x84\xA6\xF7\x3F\x36\x61\xD2\xDB\xE6\x29\x64\xC0\x06\xD8\x62\xA7\xAA\xB3\x82\x21\x8F\x54\x6F\x52\x8A\x05\xBC\xFD\x89\x48\x93\xF6\xA8\xF9\x14\x57\x5A\x7A\xAA\xFA\x79\x03\x08\x7C\xDC\xD0\x09\x16\x7B\x2C\x9F\x49\xD4\xBD\xEE\xC7\x37\x86\x1F\xFF\x19\xD7\x50\x7D\xFB\x70\xE9\xA9\xE3\x2F\xDD\x2F\x97\xE2\x69\xC0\x6E\x4E\x3D\x90\x92\x1E\x91\x92\x9E\x3C\xFB\xA6\xD1\xB3\x9F\x90\x67\x39\xE2\x3D\x69\x7E\x9B\xC1\x1E\x26\xF7\xBF\x79\x74\xFF\x2B\x4B\xF7\xFF\xCE\xCA\xFD\xAB\xA7\xC9\xE4\xE2\x83\x6B\x39\xC8\x2D\x76\x41\x75\x59\x0D\x82\x2A\x1D\xA3\xD2\x47\x35\xEA\x30\x8F\xBC\x09\x23\xE7\xA2\x11\xCB\x83\xAF\x1E\x59\x6E\xE8\x77\xC6\x0D\xFD\x4E\x68\x88\xCF\x95\xD8\xD6\x99\xB5\x6D\xFD\xDF\x66\x10\x12\xDE\xA5\x63\xFA\xB3\x67\x7D\x58\x6D\x9B\x07\x78\x1C\x4F\xBA\x14\x38\x98\x5E\xF9\x77\x6A\x46\x23\xE0\x32\xEC\x90\x77\x88\xB9\x92\xF4\x72\xB0\xD5\xE5\xFE\xE4\xE5\xB9\xF2\x47\xB0\xB1\x77\xA5\xCB\xD9\x68\xBF\xEF\xF2\x4B\x5B\xCD\x7B\xD9\x7D\x8F\xA8\x2D\x6E\xA3\x0C\x18\x89\xDA\x4B\x40\xBF\x21\xC1\xB6\xF9\x9C\x44\xFF\x11\x8B\x61\xE1\xAB\x80\x2D\x7B\xDB\x24\x5C\xE7\x62\x4F\x8C\x3D\x0C\x31\x00\x39\x0F\x71\x7F\x88\x09\x4B\xBD\xBA\xBA\x05\x88\x25\x84\x47\x1E\xF5\x5D\x0A\x91\xD3\x27\x7D\xAB\xD9\x2A\x64\x19\xD4\x3D\x0F\x65\x42\x14\x3F\x6D\x59\xC2\xC9\xE5\x3F\xC9\x89\xEB\xC1\x80\x50\xAB\x8A\x4D\xB3\xE5\x45\x00\xF2\xC1\xEC\x5D\xE2\xAC\x29\x9B\x1F\x10\x37\x97\x7F\x57\x48\x30\x77\x79\xF5\x59\x36\xCD\xE6\xA3\xCD\x9E\xC7\xE9\x2D\x86\xE9\x35\xCE\x4A\x36\x4E\xD2\x95\xCE\x5E\xE1\x5A\xB2\xF7\x19\xD5\xCD\x5E\x74\x5C\x2E\xFB\xB4\xCB\xDD\xEC\x82\x7B\xE7\x8B\xCE\xEC\x39\xEB\xCA\xBD\xBE\xAB\x89\x2F\xE4\x17\x58\xB4\xDA\x36\x4F\xB6\xF3\xC1\x9B\xFB\x46\x54\x72\xE6\x3C\x31\x13\xEC\xFD\x8B\xB3\x4A\x77\x1B\x8C\x62\x63\x2F\xCD\x8D\x37\x6D\xE3\x8A\xB9\xAE\xFC\xFF\xC7\xDE\x9F\x80\xC7\x51\x5D\x89\xE2\xF8\x39\x55\xD5\xD5\x4B\x75\x4B\x8D\x65\x82\xC1\x32\x5D\xDD\xCF\x80\x0C\x96\x2D\x1B\x30\x60\x30\xB8\x6C\xBC\xE1\x4D\xC1\x06\x82\x59\xE4\xB2\xD4\x96\xBA\xD5\xEA\x96\xBB\x5B\x06\x13\x62\x29\x01\x02\x21\x4C\x42\x92\x99\xC9\x24\x43\x82\xE7\x31\xC1\x18\x87\x04\xB2\x2F\x30\x38\x2B\xBC\x64\x48\xEC\x80\x81\xEC\x26\xC9\xE4\x0D\x59\x1C\x43\x58\xBC\x80\xEB\xFF\xDD\x73\xEE\xAD\xAE\x2E\xCB\x24\xF3\xDE\xFC\x7F\xBF\xEF\xFB\x7D\x29\xFB\xE8\x56\x9D\xBE\xFB\x7A\xEE\x3D\xE7\x9E\x83\x74\x16\xAF\x2D\x99\x6C\x1B\x76\x6C\x32\xDF\xFA\x50\x6A\x42\x68\x20\xE4\x74\x41\xCB\xE8\x82\xC4\xD1\x27\xB3\x82\x73\x2D\x85\x76\xD2\x36\x96\x51\xB5\x3E\x29\xBD\x92\xB6\x1F\x2C\xDA\xFA\x64\xA9\x92\x14\x3A\x61\xC5\x22\xB6\xBF\xB9\x94\xCC\x19\x1B\xC5\xEC\x09\xB6\x45\x52\xA9\x7A\x27\x80\x1D\x13\xF9\xD4\x88\x86\xB4\xB5\x80\x3E\xAD\xC9\xC2\x5D\x92\x32\xEC\x98\x68\xC6\x18\x1D\x1C\xE5\x74\xFB\x84\x65\xBE\xBA\x52\xB2\x40\x2A\xFA\x10\x91\xC8\x22\x2F\x83\x54\x23\xE2\x07\x31\x53\x3A\x9A\x83\x36\x91\x5A\xD9\xB4\xE5\x80\x98\x5D\xFF\x9D\xD6\x02\x70\x4E\x14\x03\x23\xAB\xD9\x2D\x1D\xDA\xD2\x2C\xDD\xD5\x98\x9A\x8D\x89\xBC\x5E\x4B\xBA\xCD\x60\x2E\xB4\xDA\xBA\x03\x4B\xEC\x94\x28\x8C\x69\xA7\x6C\x73\xE9\xE4\x9C\xEE\x98\x4B\x37\x65\x93\xCE\xD8\x58\xDA\x8E\x0D\x65\x4F\x70\x40\x99\x4F\xF0\xF7\xD4\xE9\x16\x1D\x34\x8C\xB3\xE4\x0B\xB1\xF5\x69\x80\xB4\xCA\xF5\x31\xFD\x3B\xA2\xAE\x5A\x68\xBF\x91\x4A\x1A\x16\xE9\x84\xC1\x6C\xCC\x6E\x61\xF3\x7D\xE8\x08\x3A\x4A\x0C\x9A\xD6\xA2\x03\xE9\x5B\xC8\x5C\xAC\x61\x47\x3B\xA1\x35\xA5\x27\xA3\x96\xEC\x37\xBE\x6F\x25\x9B\x13\xF0\x4D\x06\xFC\x5B\x17\xA5\xE2\x94\x84\x6E\x49\xAD\xCD\x98\x8D\x25\xE3\x56\x20\x13\x71\x99\x09\x3A\x02\x8C\x51\x2C\x69\x95\x01\x7A\x1D\x27\x0F\x8B\x52\x31\x0A\xA3\x59\x8E\x96\x25\x46\x45\x8A\x74\x07\xC7\x9D\x77\xDB\xCB\x36\xB1\x39\x69\xDD\xC1\xCB\x52\x68\xC7\x9D\xF8\x32\x96\xE7\xB2\xB8\xC7\x9D\xB0\x9C\x72\x91\x92\x1E\x28\x55\xFA\x6E\x14\x9D\xB4\x5C\x87\x53\xD6\x64\xCA\xA6\x45\xFE\x58\x4E\xD9\x5C\x94\x32\x54\xF2\x14\x1F\xA5\xBB\x44\xEC\xE3\xED\xE8\x34\x3D\xCD\x3B\x77\x91\x49\x8A\x31\x1B\xA3\x6B\xAE\xBC\x23\x61\x79\x90\x9A\x9D\x5A\x54\xE5\xA9\x6D\x2D\x19\xD1\x26\xD5\x45\xB6\x9E\xFE\x28\xA7\x2A\xE9\xB8\xB5\xA4\x55\x85\x8A\x20\x66\x03\x2A\x05\x49\x80\xA3\x9D\x92\x01\x1E\xB9\xA5\x11\xA0\xE9\x87\x0F\x52\x4C\x5C\x52\x16\xED\xA2\x81\x63\x2A\x5D\x97\x24\x13\x47\x9C\x7E\xA9\xDA\x80\x7A\x30\xED\xEB\x48\x2C\x65\x15\xF9\xA2\x83\x7B\x87\xCC\x73\x0D\x3A\x7A\x5D\x2A\x82\xB1\xC8\x8E\xA3\x9C\x69\x62\xD6\x44\x22\x1F\x48\x4F\x85\x66\xEB\xE9\x3F\xF1\xB2\x0C\x96\x45\xBB\xAC\x7F\xBA\xEF\xF6\xE0\xE7\x3D\xF4\x79\x21\x93\x41\x68\x0A\xC2\xE7\x42\xA4\xD3\xB8\x0B\x51\xE3\x3D\x0F\xB2\xF1\x1E\x31\x56\x5A\x04\x09\x83\x92\xD6\x61\x0A\xC7\xFA\x02\x4A\x13\x39\x6A\x8C\x83\x73\x73\xB1\xE5\x04\xD4\xE9\x01\x5D\x3E\xA4\xB8\x56\xDA\x12\xC6\x45\x29\xED\x2F\xAE\xEB\x36\xDF\xD0\xF1\x43\xA0\x8D\x3C\xB3\x8A\x1F\x94\xA2\x1D\x49\x4A\xC8\x19\x37\xE0\x5B\xAC\x21\xC9\xA2\xD2\xBF\x91\xFE\x78\xD3\x8A\x6E\x83\xF5\xA8\x81\xFA\xA8\x58\xEF\x6D\x58\x9C\xD3\xE6\x42\x92\xC9\x6E\x5D\xAA\x9A\xD1\x3B\x21\xC9\x2A\xF8\x99\xAC\x8D\x91\x85\xD3\x9C\x21\xE6\x4A\x60\xFE\xBC\xB4\xED\x60\x08\x9F\x6C\x08\x2A\x6B\x48\x39\x1A\xA9\xB6\x6A\x49\xE0\x7E\x01\xF3\xC2\xE9\x04\x1F\x99\xB2\x43\xA9\x73\x4D\x5E\xFB\x25\xB3\x5E\x06\x13\xF5\x9C\x20\x9D\x0D\xD8\xFA\x12\xE6\x6B\x48\x65\xFD\x73\xB4\x98\x32\xBB\x69\xA8\x40\x82\xEA\x4C\xF2\x4E\x20\xA9\xEE\xB1\x73\x72\x2C\x9B\xC4\xF9\xA4\xA8\x2D\xBE\xCC\x40\x77\xB7\x34\xE6\x33\x90\x48\xA8\xC6\xA9\xE8\x92\x93\x20\xBA\x21\xEB\x8A\x0A\xF4\xD5\xE6\x92\x6A\xC1\x92\xD2\xD1\x41\x16\xE5\x26\xEC\xD8\xA4\x9B\x0A\x89\xC7\x2D\xA4\xB4\x48\x80\xAC\x3D\x8C\x34\x38\xA3\x0A\x74\x6C\x21\x0D\xB6\x32\x62\x70\x75\xFE\x9F\x14\x52\x29\xC4\xA2\xBD\x9E\x34\xBD\xA3\xCB\x84\xC4\x0E\x6D\x71\x4E\x17\xEF\x06\x93\xF5\x5A\x16\x89\xFC\xB0\x2C\xEB\xCE\x08\x46\x8E\x67\x82\x68\x26\x1A\x39\xCD\x39\xEA\x89\xA5\x9B\xCF\x57\x9E\x6F\x9C\xAF\x8C\x43\xBA\x3B\xCF\xCB\xCD\x4D\xBA\xE8\x7C\xA5\x41\xBA\x53\x44\x62\x5E\x85\x0E\xED\x19\xE1\x23\xA7\x33\x6D\x42\x62\x06\x11\xE2\x02\x7A\x9E\xBE\x49\xFC\x51\x12\x79\x6C\xA1\x8D\xBC\xE9\xF3\x95\x5C\x51\x3A\xA7\xD9\x20\xC5\x6E\x21\x27\x56\xEA\x08\x1B\x20\xD1\x6C\x58\x2D\x26\x49\x8E\x36\x22\xAD\xD5\xE8\xB6\x41\xA7\x4F\x6C\x4A\x4D\xDE\x53\x88\x34\x4C\xD6\x04\xAC\xF4\x6B\xA4\x81\xCB\xD6\x16\x48\x96\x03\x30\x4B\x5F\x56\xEC\xC4\x62\x43\xAC\x53\xE7\x8D\x06\x1D\x01\x48\x1D\x70\x3A\x2B\x44\x27\xBA\x2B\x22\xD5\x6B\x44\xD2\x07\xD9\x50\x3C\x75\x0E\x12\xAD\x8A\x59\x14\x95\x52\xEE\x46\x6A\xCC\x54\xDF\xFB\xFF\x66\x71\x41\xB4\xA8\x98\x83\x29\x4E\xCF\xD3\xE5\x51\x15\xF3\x68\x2F\x44\xC3\x6A\xDE\xCD\x5D\x20\x36\xCD\xE0\xA0\xB2\x8D\xBB\x9B\x7A\xDB\x78\xBB\xDF\x67\x42\xBB\xDF\x8F\x99\x64\x3F\x45\x75\x5A\x0C\x74\x25\xEE\xB8\xDC\xEF\x68\xA8\xA1\xB2\x7E\xCF\xAC\x40\x75\xEB\xDC\xE0\xBA\x66\xD3\x1D\x29\xBA\x51\x63\x88\x7A\x36\x28\x91\xAC\x9A\x0C\x16\xA5\x0C\x31\x3F\x58\x36\x0A\x52\x3B\x8B\x54\xCF\x14\x1B\xE3\xE4\xE1\x01\x90\x21\x13\x55\xDF\x06\x4F\x04\xC6\x02\x79\xF9\x88\xEA\x5B\xE7\x99\xD0\x68\xAA\x6F\x4D\xD6\x37\xD2\x4D\x1A\x64\x93\x94\x3C\x99\x88\xFA\x56\x92\xDE\x28\xEB\x9B\x66\x0F\xBF\xBE\x0D\xB5\x68\x38\xA3\x45\x69\xD5\xC6\xF3\x74\xBE\x43\xA8\x5D\x88\x46\xA8\x22\xE8\x1A\x1C\x59\xB9\x36\xB3\xBA\x1D\xC9\x22\x29\x32\xA3\x8D\x63\xDA\x86\x65\x39\x63\xB2\x28\x35\x5B\x32\x96\x79\x12\xAD\x6F\xD2\x2D\x23\xF2\xB3\x5C\xEA\x0E\xA6\x29\x1A\xE5\x61\x51\x8E\xEE\xC0\xEA\x4A\x19\x3F\xDD\x42\xE2\xD5\x82\xBE\x38\x01\xF6\x25\x95\xF4\x8B\xA5\x2A\xA7\x8A\x6D\x29\x05\x28\xB4\x40\x71\xE7\xA4\x23\x2C\x2A\xE9\xA8\xD4\x4F\xA4\xA7\xDF\xE0\x0E\xC7\xEB\x60\xAB\x15\x6E\xEA\x88\xDF\xD4\x91\xFF\xD6\xA6\x8E\xFC\xB7\x35\x75\xE4\xD8\xA6\x8E\x34\x37\x75\x24\xD8\xD4\x34\x6D\x34\x35\x35\x8D\x57\xBA\x12\x2A\x1A\x3C\x47\xD4\x0E\xB5\xF8\x26\x52\x0E\xF6\x26\x51\x4B\xD6\x81\x38\x9A\xA3\x36\xF2\x29\xB4\xE6\x5F\x30\xD1\x17\xA9\xAD\x99\xC1\xF6\xDD\x0C\x49\x17\x10\xFB\x8D\xD7\xA4\x14\x92\xB2\x47\xC9\x27\x46\xB1\xBA\xF8\xCB\x91\x03\x34\xB7\x70\x5B\xC5\x72\xD2\x3A\x1C\xC9\x39\x99\xCA\x64\x9A\x46\xA2\xF4\x0E\x9D\x75\x66\x69\x49\x22\x39\x51\x25\x4B\x3D\x47\x13\x73\x59\x27\x24\xA5\xC5\x56\xA9\x13\x92\x7A\x07\xC9\xBD\xD3\x2D\xF6\x18\x13\x20\x6C\xAE\x64\x8E\xBC\x5D\xCD\xA6\x7F\x62\x82\xB2\x9E\xA3\xB4\x61\x1A\x24\x85\xA7\x58\xA9\x51\xB9\x7E\x6A\x82\x36\x4B\xF2\x3A\x48\x67\x09\x8B\x27\x67\xA5\xB6\x61\x4F\x9E\x66\xF0\x2E\x46\x4C\xC1\xA2\x1A\x44\x7E\xD8\x62\x91\xA1\x88\x25\x32\x21\x21\x05\x30\x36\xF1\xAE\xEF\xD8\x15\x9C\x6B\x95\x73\x20\xB7\xF6\x9C\x03\x6C\x5E\xC1\x59\x8B\xA5\x5A\xC1\x71\x8E\x3A\x00\x05\x1E\xE8\xCC\x40\x06\x39\x67\x8B\xCC\x52\xF4\x59\x23\xA8\xFC\xCA\xF0\x15\xF8\x89\xEA\x5B\xC4\x1B\x12\xC3\xEF\xF1\x48\x48\xA2\xA7\x80\xE8\x41\x55\x18\x75\x1D\x54\x32\x58\x04\x15\x64\x2A\xAA\xAB\xD5\xF2\x63\x10\xDD\x5B\x52\x48\x7C\xF2\xAB\x71\x81\x39\x3A\x66\x3B\x1B\x39\xEE\xC8\x52\x15\x1D\x91\x73\x16\x4B\x00\x50\x59\x29\x3D\x79\x1F\xDE\x08\xB4\x9E\xA1\x1A\xCE\x20\x2B\x1B\x34\xA3\x49\xD2\x46\xB6\x93\xAC\x5D\x43\x5A\x9D\x23\x53\x72\x6C\x27\x1D\x99\xB8\xFD\xBF\x48\x91\xE9\xED\xE3\xB5\x23\x97\x9F\x8B\x25\x69\x5A\x6E\x42\xA3\xB9\x09\x59\xFB\x84\x6A\x42\x83\xDB\x4E\xD2\xB3\x1A\x1B\x0F\xA1\x29\x57\xB5\x1E\xC8\xD6\x93\xD3\xA0\x6A\x22\xBF\x7E\xD5\x6F\x46\x73\x9B\xFA\xCD\x27\x1B\x8F\xD0\x34\xA7\x2C\xE1\xAB\x14\xDC\x6C\x32\xB3\xBC\x0B\x51\x91\x6A\xD2\xBA\x9E\x36\x6E\xE3\x71\x8D\xFE\x5F\x56\xE5\x5F\x6C\x3C\xB9\xCC\xD0\x69\xF3\x7F\x47\xE3\x19\xDC\x45\x7D\x52\xDB\x58\xAC\xE4\x7A\x0D\xB6\xD8\x47\x69\x58\xD6\x4E\x2D\x40\x0C\x98\x34\xBF\x42\xFA\xF5\xC6\x11\x2D\xF3\x82\x61\x8E\x96\x74\x80\x55\x16\xAB\xA5\x72\x13\x79\x66\xB3\xC2\x34\x6D\x31\x87\xBC\x83\xF4\xF7\xE1\xE2\xC9\xB9\x48\xD6\x64\xF3\x33\xEA\xE2\x2A\x2A\x63\xCF\xC8\xC4\x32\xD3\x1D\xEA\x08\x99\xB0\x3C\x84\x90\x74\x98\xE6\x34\xA2\x7A\x34\x39\x4B\x73\x38\x93\x02\x84\x32\x48\x9B\x86\x24\x2D\x33\xCA\x1E\xB4\xD2\xE3\x4D\x85\x5A\x96\x92\x32\x61\x1A\xE9\x68\x6F\xEC\x1B\xE1\x42\x34\xAD\xE6\x02\x8B\xF9\x08\x6D\x7D\x26\x9A\x82\xEE\x67\xA3\x80\x62\x42\x16\xF4\xFF\x61\x25\x4F\x25\x76\xB0\x64\x60\xE2\x67\xFF\x10\x36\xF4\x42\xA4\x68\x4A\x72\x03\x6C\x3E\xED\x9C\xA3\x81\x34\x3C\x29\x76\x1E\x62\xE7\xAF\x15\x48\x1A\x8B\x7C\xD1\x7E\x46\x4C\xFB\xCE\x28\xA9\xCE\x66\xBD\xB1\x62\x2F\x21\x0A\x6E\x6B\xFE\x99\xA9\x9C\xF8\x0C\xE6\x45\x29\x4B\x28\x24\x93\xC9\xFA\x5D\x75\x16\x77\x9B\x68\x6B\x45\xD1\x19\x94\x75\x61\xA9\x60\x55\x1E\x9F\x35\x54\x9B\x1B\x6A\x63\xDD\xA1\xA5\x25\x97\x8A\x96\xCC\xB4\xDA\x51\x4B\xE1\x3A\x31\xCA\xAD\x97\x78\xBF\xCF\x96\xFC\x74\x9E\x1B\x71\x26\x6A\xBC\x8C\x61\xAB\xDC\x17\x3A\x74\x17\x5C\x77\x8E\xE2\x26\x87\x2C\x3F\x2A\x3F\xE8\xAF\xFA\x3A\x1F\x32\xE8\x4E\x94\x74\xCA\x3A\xEF\x1E\xA3\xE9\x4D\x77\x92\xF2\x98\x41\xE7\xA5\x1F\x59\xFF\x75\x8C\xCE\x7A\x63\xD4\xF8\x8E\xB6\x6C\xB2\xD8\xD7\x13\x63\x8D\xB6\x8B\xB2\xEF\xE8\xAD\x56\x73\x6E\x8E\x4D\x8D\x8E\x34\x74\x9B\xB8\xC1\x72\xB3\xF9\xD6\x69\x5B\x2D\xE0\xC4\xC4\x2A\x98\xF6\x88\x3A\x68\x01\x27\xDA\xFC\x19\x0F\x7C\x1E\x32\x31\xA6\x4C\x6F\x6B\x2D\x1A\x82\x46\xBA\x78\xA0\x91\x15\x12\xB2\x03\xC7\x14\x39\x34\xF8\xD8\xC5\xE0\x63\x17\xC3\xD6\x45\x1E\xE9\x4B\xCC\xB4\xEA\xBC\xC5\xF0\xCF\x5B\x68\x38\x8F\x1F\x46\x7B\x8B\x30\x4E\xD0\x70\x9B\x4A\x9A\x49\x7A\x79\xFD\x43\x67\xA5\xF2\xEA\x56\x5D\x44\xD0\xB0\xCC\x31\xCD\x19\x59\x24\x43\x49\x7A\xFA\xB3\x74\x5A\xA8\xF1\xE1\x1E\xED\x65\x4C\x35\x13\x8B\x88\x8C\xA5\x01\x9A\xCE\xE4\xEC\x99\x9C\x3D\x93\xAB\xDD\xE4\x6A\x37\xFD\x6A\x36\xFD\x6A\xA6\x3D\x33\x6D\x78\xCA\x39\x41\x3D\x73\x5F\x27\x5D\xA0\xC6\x85\x68\xB2\x8D\xB0\x98\x1D\xCD\xC6\xC8\x3A\x60\x2E\x9E\x4D\xD8\x98\xB5\xF4\xF9\x0D\x2A\x32\x54\x21\x94\xA2\xC1\x29\x1A\x7E\x8A\x86\x4A\xD1\x79\xC3\x6B\x95\x89\x88\x29\x98\x76\x5D\xA6\x6D\xB0\x9C\x7F\xD2\xB6\xF8\x77\x56\xB5\x1C\xE3\xC9\x3B\xC6\xF2\xE6\xF4\x53\x31\x6B\xD9\x09\x91\x91\x04\x1B\xE5\xA5\x1B\xE1\xC4\xDC\x8B\x8B\xB8\x4A\x54\x88\x22\xD9\xC6\x17\x9D\x2E\x7D\x0B\x33\x4E\xC5\x3C\xD5\xA8\x23\x6E\xC9\xB7\xAE\xAA\x16\xBF\xAA\x64\x83\xAA\xDA\x5E\x96\x02\xE7\xC3\x77\x07\x2C\xC4\x8A\x1E\x1E\x68\x10\x6D\xA9\x34\x81\x2C\x4B\xA9\x7C\x88\xA8\xA5\xEA\x6C\x89\xA0\x16\x65\x95\xA4\x59\x52\x24\xAF\x6F\xCA\xAA\xF3\x65\x5F\x8B\x34\xE9\x90\x66\x23\x4B\xE2\x27\x56\x93\x50\xCC\x25\xC9\xBC\x69\x2E\x21\xE5\x69\x92\x62\x9C\x26\x9C\x58\x51\x29\x8D\x70\xD2\x74\x6A\xC1\x37\x33\x63\x2C\xA8\x66\x31\x9D\x40\x4A\x55\x69\x7B\x03\xB6\xD4\x4E\x11\x53\xB3\x9A\x62\xC5\xF8\x55\x3E\x5A\xCC\x59\x14\x38\xB2\x28\xD5\x50\xD1\x6D\xD9\x66\x83\x7F\x3C\x01\x9C\x08\xB3\x57\x55\x7D\x0B\x94\x19\x42\x2D\x11\x1B\x66\x7F\x56\x68\x0C\x78\x1B\x79\x7E\xB0\x58\xC3\x35\x84\x26\x86\xC6\x54\xA4\xD1\xEE\xA4\x39\x1E\x83\x43\x1B\x4E\x82\x46\x1C\x87\x36\x54\x68\x3A\x01\x4B\x53\x27\xE4\x48\xFC\x9D\x88\x6D\x58\xAF\xA9\x09\xD5\x81\xCB\x02\xE3\xE7\x38\x07\xB2\x1A\xF3\x95\xC7\x39\x89\x95\x54\x1A\x8D\x4D\xE2\x6A\x35\x66\xDA\x80\xFF\xF1\x63\xD5\x2F\x6C\x8E\xCB\x66\xF6\x77\x70\xFA\xE4\x80\x3A\x07\xF4\x27\x53\x83\xA7\xEE\x16\x7F\xD6\x94\x51\xD0\xAE\x58\xE4\x22\x7D\x94\xF9\x91\xA2\x19\xD5\x9E\x8B\xB6\xC4\xD6\xA2\x60\xFD\x69\x7E\x14\x1A\x27\xA4\x71\x42\x1A\xD7\xAB\xE6\x4C\x64\x0D\xE1\x2A\x87\xF2\xF8\x45\xB3\x6E\x36\x91\x6F\x3C\x6C\x15\xAE\x7F\x26\x77\x0A\x1D\xA8\xE5\xB4\x69\xC0\x66\x23\x62\xC5\x9C\x31\x8D\xC5\x54\x95\x00\x23\x4E\x03\x12\x76\x60\x99\x3D\x16\x02\x8D\xDA\x91\xF3\xA4\x7D\xF4\x1C\x79\x14\xFD\x49\x17\x28\xB4\x4D\xE1\x18\x76\x8C\x04\x24\xC8\x9F\xF5\xC7\x68\xC3\xE8\x59\x7A\x30\xA7\x35\xCE\x01\x15\xD1\x86\x29\xB6\xD9\xB7\x58\x91\x47\x3A\x2D\x15\x77\x49\x41\x11\xB1\x56\xB3\xC8\x90\xE1\xBC\xB3\xE8\x98\x24\x77\xCD\xFA\x29\xB5\x05\xCC\xA0\xE0\x7F\x01\xB3\x66\x06\x71\xC5\xDE\x59\x54\x6A\x24\x34\x91\x82\x20\x6F\x0C\x65\x6B\x9A\x84\x71\x63\x45\x32\x35\xA0\xB3\xE0\x2A\x9B\x5D\x8C\xF1\x3C\xB7\x49\x2C\x9F\xB6\x2E\xAF\x84\x45\x9A\x97\x55\x89\x8F\xAB\x3C\x46\xD5\x7E\xD5\x60\x7D\x28\x74\x31\xDB\x50\x4A\x53\xC5\x28\xA5\x23\x58\xBE\xE5\xA1\x49\x2D\x14\x8D\x0B\x8A\x86\xAF\x44\x42\xCA\xD8\x5B\xEA\x6E\xA2\x11\x50\x40\xA1\x2E\x26\x1A\x92\x11\xE5\x1B\xB2\x35\x56\xA7\x62\x74\x98\x22\x97\xCE\x94\x65\xA7\xFC\x8B\x89\x94\x87\x14\x9F\xB5\x64\x63\x7C\x31\xD1\x68\x5C\x4C\x4C\xD9\x89\xC0\xC5\x44\x8D\x35\x96\xC9\x3D\x94\x66\xA7\xC2\xDA\x27\x82\x5B\x46\x3B\x58\xD4\x78\xA3\xA8\xCD\x05\x4D\xC9\x1B\x69\x89\x71\x0B\x1A\x13\x05\xB5\x6C\x2B\x50\xD0\x84\x5F\x50\xAB\x61\xCC\xD0\x6A\x14\xD4\x6A\x14\x94\x8E\x57\xE8\xCA\x65\x2E\xC1\x39\x30\xE8\xE7\x62\x36\xCE\x4A\x9C\xF8\x36\xB9\xB4\x62\x98\xB2\x63\x81\x82\xC6\xB9\xA0\x16\x17\x94\x56\xAE\x94\x28\x68\xAA\x21\x7C\x43\x27\x36\x64\x83\x29\x2A\x3B\xCF\x32\xFF\x0C\x43\x6E\x76\x06\x45\xD1\x0C\xC9\xBB\x35\x5A\xB4\x08\xA0\xE5\xBC\x6F\x67\xE8\x9A\x60\xC3\x2F\x19\x27\x77\xB4\xBA\x0D\x45\xE7\x66\xDA\x61\x90\xF0\xB9\xB3\xB5\xC8\x4B\x21\x69\x42\xCD\xB2\x92\x2C\x7D\xA5\xB4\x64\xA1\x0F\xA6\xFF\x8E\x25\xC8\x3A\x01\x88\x81\x22\x90\x64\x3C\x86\x6F\xDA\x49\xBC\x66\x05\xB6\x15\xD0\xA0\x00\x73\x30\x3E\x65\x98\xF3\xC7\x98\x61\xA9\x38\x98\x67\xAF\x27\x35\x7F\xC1\xA0\xF1\x48\x7B\x4D\xB1\x0B\x58\xA4\x4E\xCE\x8C\x86\x98\x92\xD6\x10\xA2\xD4\xAD\x0F\xEB\xA8\x8D\xFA\x6C\xAE\x1C\x9D\x92\xD0\x61\x0D\xAA\x8B\x20\x4D\x0C\x60\xB1\x72\xB6\x9C\x98\x48\xA0\xA6\xEB\x86\x61\x44\xCC\x04\x3F\x10\x8B\xC6\x25\x95\x0A\x33\x51\xAB\x39\x63\xBB\x60\xD3\xA2\x56\x39\x3B\x74\x68\xAC\x63\x71\x49\x2A\x16\xF4\x83\xC2\x87\xDC\x55\xC8\xDF\x69\x78\x37\xFB\x49\x45\x7D\x92\x1D\x03\xA4\x3B\xF3\xC6\x29\x82\x99\x68\x52\x3D\x2D\x6E\x6D\xCA\x02\xE7\x20\x84\x49\xE9\xD2\xAE\x65\x53\x8C\x4B\x52\x46\x23\x97\x8B\x8F\xCD\xF6\x31\x01\x16\xCB\x8C\xAB\x00\x5C\x0A\x16\x8B\x24\x26\x5E\x87\x66\xF0\x91\x17\x1B\xBF\x71\xF4\x3A\x97\x51\xBC\x09\xBA\x84\xF7\x92\xE2\x8F\xE6\x97\xC4\x61\xA3\xD6\xD6\xBD\x1A\x2A\x2B\xD3\x62\x8F\x4B\x97\x81\x74\xD1\x1D\x6D\x5C\x96\x6A\x9C\x49\x38\x5A\x3D\xCB\x77\x63\xC4\xF4\x2B\x8D\xDC\x90\x3C\xB7\x4E\x7B\x64\x4D\xAD\x57\x39\x43\x5A\x22\x35\xED\xE0\xF5\x6A\xCA\x1D\x5D\x44\x15\x04\x9D\x20\x81\xD9\x56\x69\xE3\x82\xB5\x16\xBC\x60\xAD\x35\xD1\xD6\x6C\xB0\xA9\x61\x8A\xBB\x91\x1B\xBE\x65\x1B\xCC\x13\xDA\x4C\x89\xF3\x59\x74\x44\xD9\xE2\x36\xEC\x48\xC0\x4C\x29\x6D\xEF\x69\x91\x36\xB8\x04\x10\xB6\x83\x11\xB0\x50\x6A\x34\xF1\xAA\x9A\xD7\x28\x64\x89\x46\xD1\x85\xF9\x88\x10\x6D\x74\x5A\x96\x4F\x76\xB4\xBA\x73\xE0\xA5\x5B\xC7\x80\x6D\x12\xA5\xEF\xA5\x8D\x00\x49\x68\x6A\xE3\x4B\x68\x36\xCC\x3C\xF9\xF9\x32\xE4\x35\xF8\xA0\xA5\x16\x96\xD0\x04\x36\xF2\x11\x91\xE2\x99\x11\x41\x7C\x05\x6E\x90\x4B\xF1\x4C\xDE\x26\xA7\x8B\xBE\xF4\x1D\x2D\x89\x69\x95\xD5\x88\x1D\x39\x36\xAB\x86\xCC\x6A\x44\x64\x55\x31\x70\x23\x9C\xD5\x48\x48\x98\x54\xB7\x35\xB6\xF8\xAB\x49\x61\x52\x60\x3E\x20\xAB\x86\x17\x75\x4F\x59\xD5\x1C\xAC\x66\x75\x49\x76\x36\xB7\x84\x6E\x47\x38\xAB\x94\x4F\x5A\x32\xC8\x3B\x49\x95\xE6\x22\x2C\x22\xC3\xF3\x64\x84\x84\x66\x26\xA7\xEF\x53\x5A\x3C\x02\x82\xA7\x5A\x80\xFB\x4D\x05\xFE\xD4\x67\xC5\x2C\xFB\xAF\x2C\x54\x4D\x51\xA3\x1C\x2D\x31\x19\x01\xCF\x86\xB2\x76\x24\xC5\x4C\xD2\xD5\x69\x92\x66\xD7\x7C\x0E\x51\xA3\x23\x8C\x61\x43\xD4\xB0\x2B\x68\xA0\x75\xAA\x2C\x03\x3A\xED\xBE\x29\xD6\x89\xEA\x4D\x38\x49\x1B\x9D\x2F\xBC\x7C\xAB\xDC\x69\x2F\xD8\x75\xEB\xBC\xF3\xF4\x0E\x9E\x77\x81\x58\x4F\xF7\xCB\xFB\x0D\xCA\x0A\x49\xAC\x98\xDE\xAE\xAE\x3C\x74\x35\x58\x55\x1F\x37\xE8\xD8\x44\xD2\x46\x0E\x64\xD9\x92\x0C\xA4\xFF\x85\xD7\x5F\x29\x17\x24\xBA\x86\x21\xBE\x36\x49\x3E\x27\x9F\x71\x3B\x5B\x37\x11\x45\x03\x36\xB2\xF9\x98\x0E\xE6\x85\x73\x3D\x4E\xB6\x81\xA5\xE9\x69\x5B\x7F\xCC\x4F\x0E\x16\x95\x71\x9B\xB9\xE0\x1B\x42\x32\xC9\x76\x4D\x4E\xEA\xAE\x21\xB1\xB0\x71\x62\x45\x5B\x59\x90\x9A\x0B\x40\x86\xFB\xC5\x00\xF5\xB3\x4D\xEC\x1B\x93\x4F\x55\xFC\x80\xB9\xC8\x64\x69\x83\x47\x0C\x60\xDA\x2B\x89\x41\xFE\xB5\xDB\x68\x90\x03\xF3\x4C\xD4\xF1\x16\xD1\xC3\x1C\x2E\x1B\x61\x3E\xB9\x49\x97\xEA\xE8\xBA\x52\x64\xF2\x60\x30\x2D\x4E\x22\x47\x02\xE5\x24\x67\xCE\xD2\xDB\xA2\x67\x8B\x9D\x5A\xC2\x46\x27\xB1\x7C\x72\x4E\x63\xBB\x4F\x5B\x25\x12\x26\x2F\x96\x67\x6E\x9A\x93\x58\xA2\x24\x94\x4D\x07\xB3\x72\x98\x61\xD1\x1F\xC0\xB2\x0A\x60\x32\x19\x80\x82\x25\x59\xB0\x23\x44\x17\x89\xF4\x8A\xB9\x08\xCD\xAC\xB6\xD8\xAF\xFA\x23\x41\x91\xBB\x01\x23\x78\x9A\x93\xE0\x1B\x05\x06\x4B\x69\x23\xDF\x9B\x17\x29\xF1\x60\x6B\x6D\x48\x6C\x83\x65\xDD\x65\x60\x9C\xFB\x46\x48\x2C\x44\xF5\x4D\x90\xB4\x17\xB2\xC8\x3E\x33\x48\xE4\xBC\x40\x7E\xD4\x79\x5C\x84\x36\x40\x82\xA6\x61\xD5\x92\xA4\x8C\x46\xDA\x3A\xB1\x23\x82\x3E\xC8\xF2\x75\x5E\x96\x59\x74\x90\x6F\x7A\x08\x42\x8F\xA6\x10\x4B\x54\x6F\xD2\x99\x20\x56\x1E\x56\x50\x48\xF6\x1B\x8C\x22\x2B\x20\x73\xA0\x95\x13\xA7\xCB\xFF\x49\xE7\x5D\x2C\xA5\x86\xCB\x65\xFD\x26\xEC\x08\xEB\x69\x91\x89\xD9\xF1\x22\xF7\x3B\x3E\xAC\x3A\x85\x15\x0C\x08\xF2\x95\xF2\xC8\x66\x4A\x14\xCB\x4F\x52\xE9\xB1\x06\x95\x1E\x0C\xAA\xF6\xC4\xC9\x60\xF8\x65\xF2\xEA\x57\xA4\x11\xD8\x4F\xD5\x8E\xD9\x89\x41\x5A\xCF\x8F\x73\x00\x11\xE7\xCD\x56\x9C\x37\x5B\x71\xDE\x5D\xEA\x4C\x6F\xC6\x29\xA0\xD8\x7D\xC5\xFD\xCD\x59\x5C\x6D\xC0\x2C\xDB\x12\xB1\xDA\x9B\xA4\x02\x13\x51\x69\x0E\x9D\xE2\x5A\x62\xC3\x9F\x50\xF7\x51\x2C\x26\x01\xB2\x09\xDB\xEA\xD0\xD2\x82\xAA\x8D\x3B\xB0\xC4\x4E\xD8\x86\x8D\xE9\xBB\x6F\x93\x77\xD1\x04\xB1\xCA\x57\xED\x45\x5F\xB0\x0D\xEB\xA7\xA8\x66\x8A\xBF\xBA\x37\xE8\x7E\x37\x50\xF4\x99\x11\xE8\x0A\x06\x8B\x7C\x2A\x0A\xD2\x70\x70\x31\x93\x8F\x44\x1A\x0A\xC2\x35\xD0\x8E\x5C\x63\xF6\x26\x45\xFB\xD2\x0F\x3A\xEB\x04\x4D\x17\xB3\x06\x31\xF7\xD0\x97\x37\xCA\x1A\xD2\x50\x98\xC5\x82\x82\x7C\xDB\x40\x15\x4E\xAC\x32\x10\x28\x9C\x6E\x9D\x81\x38\xCA\x67\xE9\x31\x96\x30\x97\x1B\x4E\xF4\xE5\xC3\xE9\x9A\x88\xF5\xF9\x04\x46\x47\x25\xDD\xA1\xD9\x62\x1E\xA1\x21\x78\x18\xD8\xB4\xD8\x37\x80\x31\x9A\xF3\x13\xA0\x3F\x4B\x27\xE7\x0C\x1B\x9D\x6F\x00\xFD\xB9\x6C\x72\x2E\x22\x55\xDC\x8A\x89\x60\x54\x64\x6B\xD0\xC1\x62\xDD\x19\xAD\xD9\x11\xE7\xF1\xD1\x62\x9D\x8D\xC5\x69\xCE\x61\xA0\x3F\x32\xFC\x0B\x40\x7F\x9A\xC2\x1B\xC7\x84\xBF\x97\xC3\x1B\x2C\x1E\x9A\x56\xCA\x82\x68\x12\xC8\x1A\x76\x54\xDA\xF6\x13\x8B\xB4\x24\x06\x97\xE6\x62\x34\xF2\x7C\xED\x56\x64\xDD\x8B\xB6\x03\xE6\x62\x3E\x4F\x4C\xDB\x7C\x91\x9D\x8E\xAE\x57\xA5\x58\xEE\x67\x29\x5F\x1E\xF5\x55\x19\x8C\x1F\xBD\x3E\x7E\xF4\xCD\x91\xB3\x76\x50\x52\xDB\x45\x37\x69\x27\xE6\xE2\xCE\x68\x8D\xFB\x84\xAF\x7B\x82\x6D\xCD\x71\x98\x18\x69\x6D\xB4\x8D\xC5\x29\x64\xDD\x9F\xCA\x88\x7E\x8E\xF4\xA9\xEA\x92\xC1\x4C\xBE\x1A\x7C\xF9\x08\xEB\x7A\x24\xE3\x65\xA4\xA8\x81\xD6\x31\x41\xDA\x92\x89\x7D\x1B\xC4\x56\x34\x49\x3F\xD9\x91\xC9\x64\x37\xAC\x21\xE2\x32\x5A\x64\x75\x3B\x86\x64\xD6\x1B\xC1\x29\xF5\xA8\xF7\x2D\x6A\xFD\x46\x65\xCB\x8B\xFB\x8D\x4A\x89\x90\xB2\x82\x89\x4A\xDF\xCB\x65\xB2\x52\x6C\x6D\xC5\x78\xF5\x42\x92\xCF\xE9\xA5\x7E\xBD\x70\xAD\x68\xFF\xFF\xAE\x95\x71\xAB\xE3\xAF\xAB\x05\xFF\x10\x3B\xCD\x7A\x4C\xB8\x1A\xA2\x8B\x28\x13\xFF\xA5\xAE\xC7\x75\xA0\x31\x27\x25\xBD\x34\xA5\x05\xEB\xE0\xFF\x9D\x1A\x20\xAE\x0D\x15\x7E\xE2\xB1\x85\xE7\x7D\x93\x28\xA9\x1D\x65\xB3\x94\x62\x5A\x18\xE4\x5C\xB2\x8C\x83\x14\x14\x0A\x61\x49\x58\x9B\x97\x27\xC9\xB8\xD3\xEC\x68\x87\x96\x5E\xC5\x92\xAC\x22\x47\x68\x47\xB3\x66\x92\xE4\x6A\x65\x9D\xAD\x4A\xE9\xA4\x7C\x2A\x6B\xB0\x99\x0D\x12\x7C\x61\x05\x37\xD9\xB8\x1D\xC9\x46\x95\x39\x72\x81\x24\xF5\xD6\x59\xD3\x8E\xB3\x52\x29\x33\x1B\xA5\xAD\x36\xC5\x1E\x38\xD3\x8C\xD8\x26\x49\xA2\x2C\x90\x57\x2F\xB5\x87\x16\xD8\xEF\xB5\xF1\xA1\x5B\xCF\xD3\xD2\x62\xBD\xF4\xB9\x59\x49\xA2\xE5\x7D\xAE\x67\x92\x35\xF2\x45\xE4\x3E\x52\x0A\x4E\xF1\xE1\x19\x57\x99\x28\xE7\x44\x31\xB9\xDE\x29\x59\x73\x6C\x17\x94\x4F\x01\xF5\xC5\x92\x04\xD3\x72\x7E\xFB\xA6\xFF\xFE\x36\xDF\xA0\x95\xA1\x24\x71\x9A\x84\x17\x64\xCB\x1E\x47\x12\x47\x0B\x49\xE2\x68\xBE\x24\x8E\xD8\x44\x10\x41\x69\x5D\xE7\x93\xBB\x74\x16\x49\xEB\xCD\x22\xE6\x95\xF2\xF9\x68\x63\xA7\xBC\x94\x05\x87\xA0\x21\x38\x04\x2C\x38\xA4\x2D\x66\x62\x2D\x6D\x23\x19\xD6\xD1\x68\xDB\x6B\x6B\x4B\xAC\x7F\x8E\xD0\x15\x6F\x9D\x8E\x3E\x69\x65\x90\xB3\x03\xBD\x1F\xF2\xDF\x5E\x80\xC0\x34\xEE\x79\x5E\x46\xCC\xF7\x38\xB8\x79\x93\x5C\x42\x69\x25\x12\x13\xFF\x8F\xFD\x20\xBB\x68\x92\x01\xFF\x9A\xA4\x5C\x43\x28\xF0\x4F\x54\x60\x62\x9C\xAA\x72\xB1\x64\x0C\x53\xEE\x28\x5A\x95\x06\xA1\x96\x35\x6D\x9D\x8E\x1F\xA3\x82\x20\xF2\x67\x25\xBC\x6C\x32\xA9\xC8\x8E\xD9\xE8\xCF\x4A\xA2\x4B\xDB\xA6\x28\x2F\x8A\xE9\x2D\xED\x78\x54\x1A\xB4\xCD\x69\x5A\x3A\x17\x5F\x60\xDF\x21\xEF\x17\x93\xA2\xD2\x28\x4F\x82\x72\x1C\x9A\xCA\xA0\x1A\x59\x53\xB3\xA4\xBA\xBB\x62\xD6\xB2\xA3\x6C\x1C\xA6\x79\x1C\x46\x79\x1C\xF2\x20\x4A\x6C\xCF\x46\xED\xF8\xF6\xAC\x3F\x22\xCD\xE3\x8E\x48\xDD\x36\xE5\x88\xF4\xAD\x75\xDA\x51\xB1\x1C\x5A\x72\xAA\xC8\xE9\x6C\xF5\xCC\xA2\x75\xCC\x97\x4D\xA3\xDC\x6A\xD9\xA8\xA8\x0F\xA2\xB6\xB3\xA6\x1C\x87\x51\xD9\xB0\x72\x1C\xC6\xE4\x38\xD4\x1B\xE3\xD0\x5A\x95\xD2\x78\x1C\x9A\x3C\x0E\x63\x62\x1C\x9A\x3C\x0E\x4D\x3B\xC6\xE3\x50\x72\xD6\x03\x43\x2D\xC6\xEC\xB2\x98\xD2\x72\x15\x5F\xE0\x79\x9E\xD7\x7A\x8B\x1D\xA1\xC1\x46\x06\xF6\x82\x83\x8D\x55\x29\x88\x40\x49\x56\xD0\x16\x93\x83\x2D\x26\x45\xA9\x82\x03\x8D\xCD\xF4\xD1\xF1\x89\x61\x5B\x83\x64\x20\x9A\xAD\x6A\x41\x4E\xA7\xAE\xFF\xDB\x84\x66\x8D\xE2\xD6\xA6\xF3\x30\x5F\x3C\x5B\x90\xAF\x1A\xEF\x22\x7C\x6B\xD1\x06\x5B\x8B\x46\x9F\x5B\x8B\xC5\x2C\x2A\xE3\x8A\x1A\xF7\x34\x52\x95\x8D\x62\x87\xC2\xEA\x13\x74\x52\xEE\xA1\xAF\x4C\x69\xB6\x4E\xB7\xF2\x0E\x78\x8F\xD3\x85\x4D\x12\xA1\x33\xF9\x3A\x43\xC4\x81\x2C\x3A\x74\xE4\xDF\x1C\x15\xDF\xDA\x91\xCA\xD6\x78\x17\x2E\x8A\x97\x0D\x1C\x78\xA3\xDC\x9C\xE7\xA4\xE8\x4A\x0A\xC5\xDE\x33\xA9\x35\x0F\x79\xBA\x83\xA2\x29\xFD\xEA\x31\x7F\xAE\x88\x85\xE6\x0A\xA9\xE7\x4E\xE3\x39\xDF\x64\x15\x30\x26\xCD\x05\x9A\xE8\x91\x69\x29\x81\x48\x1A\x31\xE5\x26\x82\x67\xC8\xA8\x98\x21\xD9\xEC\x24\xF7\x20\xD3\xD6\x07\x73\x71\x47\x97\x67\xCF\xD8\xAC\xFF\x0E\xED\x88\xF8\xDD\x74\xB4\x11\xB1\x9E\xDA\xE8\x6B\x4B\x33\x8F\xD5\xA7\x89\x4D\xFA\x34\xCD\xA0\x3E\x4D\x92\xA8\x20\x0D\xC7\xB9\x44\x38\x27\x7A\x9D\x0E\xA8\xE2\x52\xCB\x94\xD8\x34\xF8\xC7\x22\x68\x6B\xC5\x6C\x84\x6D\xB0\x9B\xBE\x64\x97\x2F\xDF\x2F\x3A\x4E\xAC\x43\x9B\x28\x6B\x3A\xA6\x6A\x3A\xE6\xCF\xBE\x31\x31\x9E\x63\x7F\xB9\x46\xC7\x9B\x7D\xA3\xD4\x86\xB2\x96\xE9\x5B\x4E\x24\xC1\x6A\x8D\x3E\xE4\xF7\x97\x60\xCD\x6A\xB2\x66\xC9\x6E\x70\xAC\xA9\x66\xB5\xFF\x4A\xCD\x62\xA3\x66\xFD\x08\xC4\x5E\xB7\xB9\x66\x59\x17\x5B\x2C\x9C\x19\xFF\xD4\x80\x6A\x55\x6B\x98\xC2\x3F\x6E\x75\xB2\xE8\x4B\x64\x30\x87\x8E\x36\xE2\xA0\x8D\x2A\x53\xD8\x94\xA9\x80\x65\x73\x3F\x27\xB9\xF1\x06\x0E\x4B\x56\xFB\x1C\x56\x70\x92\xA4\xE1\x97\xC6\x4D\xE3\x36\x85\x5C\x99\xA5\xD0\x26\xD5\x1B\x5F\xD3\x10\x95\xC7\x57\xC0\x71\xF9\x64\xB2\x7D\x8D\x92\x09\xA5\x4B\x65\x7B\x71\x75\x9B\xDC\x26\xD9\x02\x96\x88\x89\x93\x86\x55\x56\x17\x17\x11\x48\x39\x47\x92\xF1\x55\xA2\x55\x50\xCD\x91\x62\x10\xD2\x39\x2A\xCF\x91\x11\x31\x47\x22\x0B\xB7\xA0\x3F\x47\x6A\x2C\x71\xAA\x91\xAA\xFF\x86\x84\x6C\x63\x8E\xCC\xC6\xEC\xF8\x34\x32\x6E\x1D\x63\x31\x10\x7F\xB2\x4C\x8A\x29\x52\x53\x53\xA4\xA5\x64\x4E\x49\x1F\x2C\x4B\x1F\x6A\x7F\x69\x8A\xB4\x14\x77\x25\x21\x48\x4C\x92\x95\xA0\x5C\xF8\x26\x70\xC0\x19\x1B\xFB\x36\x5F\x0B\x1D\xE4\xE3\x5C\xDE\xA7\xD5\x68\x99\xDD\xC4\x07\x7A\xBC\xF5\xF2\x51\x46\xB8\xF5\xAD\xFF\xA9\xA1\x29\xF6\x88\xE8\xCF\xAE\x62\x1A\x75\xD2\x45\x29\x2A\x44\x27\x24\x49\x3E\x28\x31\x58\xF8\x85\xB5\x3C\xA4\x89\x6D\x17\x53\x33\xAC\x52\xDF\xC3\xEA\x2F\x48\xB4\x95\x7A\x49\xD1\x8E\x4C\xD3\xD2\xE7\x35\xA4\x6F\x8D\x9C\xC1\xC2\xF5\x72\xA8\x46\xC4\x50\x25\xA2\x97\x36\x1F\x44\xB7\x31\x0B\xD2\x68\x90\x53\x8D\xA1\xDA\x24\x30\x4B\xF4\x02\xD2\x94\x68\x2E\x56\x67\x52\x86\x14\x99\xA7\xBA\x9D\xC8\xE2\xB3\xC8\xEA\xB7\xD1\xD6\x56\xA4\xC0\xF9\xC8\x43\x61\xD5\x53\x31\x3E\x5B\x22\x96\x82\xA8\x45\x59\x61\x8B\xA8\xB0\x56\x1B\xD8\xA0\xCE\x23\x15\x63\xE7\x54\xFF\x62\xB1\xB5\x44\x51\x47\x53\xA9\xE5\xA6\x5A\xB6\x66\x19\x60\x6B\xD6\xC7\x35\xD4\xD5\x81\xE9\x6E\xF0\x4F\x4C\x1D\xBA\x8A\xCF\x6A\x24\xF8\x30\xE2\x22\xFF\xD8\xF4\x9C\xE0\xB1\xE9\x74\x41\x49\xDD\x3A\x6F\x8E\xB6\xD4\x46\xE7\x19\x3E\x3F\xED\x20\xFA\xAA\x43\x1D\x9C\x7E\xF2\x36\x62\xCF\xFB\x92\x88\x97\xB2\x89\x62\x92\x65\x62\x7E\xB1\x46\xC7\xB2\x2A\x25\xFF\x58\x96\xC5\x16\x54\x4A\x86\x4A\xC9\xB6\xD1\x79\x85\x53\x52\xB7\xC0\x64\x22\x82\xB8\xE4\x78\x65\x1F\xE2\x04\xDB\xE9\xE6\x0E\x8D\x3F\x5D\xDE\xE0\xB6\x31\x7D\xEF\x6D\x72\x22\x77\x3A\x8A\xF2\xC3\x46\x67\x37\xA8\xA3\x5C\xCD\xFA\x50\x02\xA3\x01\xCE\xB7\xA1\xB8\x0A\x74\x85\x9C\xB6\x14\x8B\x52\xBE\xDD\xEC\x58\xCE\xE4\x8B\xB7\x51\x6A\xD3\x5C\xAC\x98\x8B\x3B\x0F\x62\x39\xD7\xB0\xE0\x60\x27\x9C\x07\xB1\x34\xE8\x4C\x2A\x15\x69\x5B\xCE\x8A\x35\x7D\xB1\xB4\x49\x39\x11\x3E\x1B\x65\xC2\xC3\xE4\xAE\x41\xF6\xDE\xA3\x73\xB4\x49\xAA\x13\xC7\x6D\x93\xE7\x66\x11\x97\x33\xCA\x97\x2E\xED\x98\x1D\x29\x0E\x3A\x58\x74\x9E\x21\xA9\xBF\x38\x33\x27\x7D\x02\x8E\x38\x4E\x37\x93\x12\x4A\x52\x83\x46\x84\x55\x84\x77\x58\xFE\xD5\x6A\x31\xB7\xC4\xA9\x74\x49\x79\xB9\x35\xC6\xA5\x1C\xCC\x45\x9B\xD2\x8B\x4E\xF6\x07\x62\x94\xD4\x57\xA6\x3F\x7F\x9B\x2C\x03\x51\x4D\x93\xFC\x42\x90\x8A\x97\x28\x55\x83\xE9\xAB\xFB\xB6\x4D\xBF\x1A\x72\x64\x30\x72\xA2\x94\xC9\x16\x74\x26\x69\x26\xE7\xE9\x87\x2B\x85\x26\x98\x39\xDA\x24\x96\xF6\x23\xCD\x3E\x1D\xDA\xC4\x22\xD5\x34\x45\x1C\x69\x44\x1C\x09\x46\xAC\xA8\x49\x65\xE3\x27\x4A\xD3\x8C\x3F\x10\xEC\x1C\xDF\x19\xB0\x59\x99\x2C\xEF\x05\x70\x2E\xB4\xDB\xA4\x91\x98\x58\xB0\x34\x27\x4E\x94\x37\xA2\xA5\xEC\x2C\x5F\x96\x8D\x36\x7C\x19\x4E\x6B\x51\x7A\x8D\x9D\xF0\x3E\xF2\x9A\xD3\x68\xD1\xE8\x84\x56\x22\xD9\x1B\xA6\x31\x27\x12\xC9\x2B\xAD\xDF\x46\x66\xA2\x99\xD3\x5A\x34\x0D\xC8\x54\x73\xD4\x49\x2B\x6B\x8E\xB1\x80\x44\x13\xDF\xFA\xF6\xBD\xCB\x73\x11\xA9\x21\x5C\x9E\x7F\xD0\xC5\x49\x27\x56\xA4\x29\x8B\x78\x09\x93\x7D\x75\x91\x3A\xDF\x14\x17\xC4\x81\x15\x38\x1C\x90\x1A\xE6\x6D\x51\x09\x8E\x56\xCF\x69\xBC\xC8\x34\x0E\x0F\x62\x5C\x53\x51\x96\xB0\xA4\xFE\x40\x65\x4C\x37\x94\xA1\x49\x2D\xB9\x7C\xF5\x40\x7A\xA5\xF0\x7C\x0F\x88\x7B\x1A\xD1\xF9\xA4\xA5\x5B\xED\x3D\x68\xB0\x8C\xDB\xA9\x3A\xB4\x49\xDC\xBA\xFF\x85\x7E\xA5\x35\x9A\x5F\x1B\xA7\x5F\x99\x4D\xFD\x2A\x76\x6C\xBF\x62\x9D\x56\xB2\x2D\x45\x46\x65\x39\x64\x71\x93\x27\xDC\x29\x5B\x9F\x1A\x80\x85\x6A\xD5\x26\x4F\x9A\x1A\x55\x12\xB6\x8D\x41\x9C\x0B\x8E\xD8\x18\xAF\x7F\xC7\x0E\xDA\x08\x17\x36\x30\x6E\x63\x7F\xC5\xB8\x5D\xC4\x2C\xBF\x63\x46\x43\xA4\x79\x98\x45\x82\xC3\x2C\x42\x33\x12\xF5\x04\x5E\xDF\x4C\x5F\x90\x9A\xBB\x01\x89\x7B\x45\xA4\xFA\x77\x11\x94\x54\x7E\xF3\x55\xB1\x86\x74\x80\x66\xFD\x11\xD1\x1C\xB5\xC1\xF9\xFB\x3F\xF3\xFC\x1B\x98\x0C\xB1\x69\x32\xD4\x58\x0C\x4A\xE7\xC9\xD0\x78\xCB\xEC\x09\x1F\x92\x1A\x0B\x4C\x86\x0D\xA5\xAE\xB1\xAC\xC6\x93\xA1\x21\x79\xD9\x93\x1A\x2B\xBA\x26\x08\xD9\x60\xBD\x6A\x93\x49\xF7\x4D\xA0\x52\x23\x7F\xA1\x52\x75\xB1\xC9\x42\x5B\xE7\xE3\x26\xC7\x28\xA6\x3F\xCB\xAB\x01\x58\x5F\xD3\xD0\x18\x75\x30\x8B\x21\xA9\x07\xE2\xC1\x8C\x16\x5B\x4E\x34\x4D\xD3\x04\xD0\x75\xDD\xD0\x4C\xF9\xA0\x69\x48\x59\x25\x6D\x51\x2A\x22\x8D\x58\x71\x6B\x69\x8E\xB6\x6C\x32\xDD\x67\xEA\x04\x22\x9F\x5B\x2D\x29\x34\xC6\x69\xE8\x74\x06\x9E\x93\x37\xA4\xD0\x57\xDD\x60\x28\xD1\x32\x83\xC2\x91\x36\x00\x6D\x35\xDF\x10\x6E\xBA\x0E\x4C\xB2\xF2\x0E\x2C\x91\x84\xD7\x92\x4D\x52\x10\x81\xA4\xED\xC3\xF8\xF1\x44\x4D\x3A\x01\x1D\x58\x72\xBC\x5F\x73\x94\x6F\xB4\x38\xE3\x5C\x07\xA4\x70\x18\x9C\xF8\xEA\x14\x38\x17\xD9\xB0\xD9\xC1\x4D\x44\x93\x5A\x09\xB0\x91\x79\x3A\xC1\xD7\x5F\x27\x89\x05\x46\xE2\x19\x39\x96\x6F\x3F\x74\xAB\x7F\x4F\x8B\xA9\x95\xC8\x12\xA9\xE0\xD9\xC8\xC6\x6C\x93\x09\xE9\x86\x84\x98\xA2\x39\xC9\xCC\x32\xEB\xC8\x90\xBC\xA7\x7F\x25\x1A\x20\x4E\x71\x0B\x22\x9B\xCE\xE9\x53\x1A\x5D\x47\x27\xE3\x58\x24\x65\x29\xD6\x1F\x92\xE8\x8F\x2F\xA3\xD3\x18\xFE\x88\xD2\x35\x49\x16\xE8\x50\xA2\x36\x51\x92\xEC\xA7\x9D\x59\x62\x49\xCA\x90\x5E\xB3\x16\xB3\xA8\xA2\x32\x42\x07\xF9\xA4\xC3\xB6\x6C\x33\x97\x5C\x42\xB2\x56\xBE\x8C\x3F\x4D\x18\x86\x0C\xE0\x20\x6D\xF5\xC4\x9A\x24\x7D\x44\x55\x44\x48\x4A\xCE\x66\xA2\xB9\x2C\x05\xC9\x88\x65\x11\xFB\x2B\x6B\xB2\xAD\xA0\x14\x2F\x63\x2D\x0D\xEF\x54\x90\x16\x3B\xB5\x38\x05\x49\xDD\x62\x85\x06\x86\xD4\xDD\x28\x23\x33\x57\xA7\x94\x56\x0F\xBA\xC8\xE7\x57\x10\xDF\x81\x32\xD3\x9F\x22\x41\x51\x3F\x4E\xD9\x22\xF2\xF6\x40\x93\x19\x0A\x5D\x31\xC0\x4C\x12\x93\x65\x41\x11\xB3\xF1\xFB\x1B\xA2\x56\x92\x74\xFC\x60\x90\x56\x39\x16\x72\x8D\x52\x7F\x02\x47\x5B\x5C\xA4\x54\x9A\x3E\x63\xCD\x9F\xC9\xC0\x67\x96\xD7\xC2\x6C\xD4\x4E\xB2\x4D\x14\x93\x37\xB9\x71\xBE\xE3\x42\x53\x08\xED\xB4\x9A\x92\xA0\x50\x54\x14\xD2\x1F\x1D\x17\x41\xD4\x26\x88\xBA\x15\xC9\xFD\xA4\x5F\x23\x2D\x55\x96\xEC\x81\x76\x6C\x90\xC4\x5F\xC2\x62\xC6\xBE\xBE\x70\x41\x16\x58\x62\x06\x8A\x31\xA3\x6F\x94\x4C\x87\x48\x1D\x2F\x7A\x93\x8E\x17\x3A\x1D\xB2\xEC\xE8\x85\x52\xF8\x28\x67\x2E\x4A\x19\xA4\x70\x9D\x16\x77\xC5\xEC\xA4\x8A\x8A\x2B\x4D\x9B\xEA\xEA\x4F\x8C\x4A\xB1\x84\x2C\x08\x34\x3A\x0F\x9F\x83\x24\xA5\xD8\x35\x6B\x63\x17\xFD\x22\x6E\x29\x2E\xA9\x1C\x0B\xDC\x33\xFD\xBE\x63\x93\x2A\x8A\xC6\xD0\x7A\xAB\x7A\x50\x63\x31\xAA\x96\x36\x5F\x94\x3A\xA9\x4A\x63\x91\xB8\x38\x55\x00\x23\xA2\x62\xEB\x49\xAA\xE4\x93\xA2\x03\xE9\x2C\xB3\x10\x63\x2B\x32\x52\x90\x3A\xCA\xDD\x22\x25\x15\x0D\x8A\x2E\x91\xB4\xA3\xC5\x1C\xDA\x86\x70\x94\x01\x71\x64\x1D\xE2\xBE\x28\xB5\x6C\xF9\x54\x93\x28\xB5\x49\xF6\x28\x7D\x51\x6A\xD1\x31\x7C\x51\xEA\x86\xE9\xF1\xE0\xD8\x10\x3D\x55\x4C\x2F\x62\x47\x26\xEB\x38\x30\xB0\xCD\xC6\xC0\xA6\x9D\x51\x78\x3C\xC7\xE5\x4C\x63\xDA\x71\x1E\xD1\x56\x68\x44\x6B\xFF\xC5\x11\xAD\xAB\x11\x1D\xFF\x2B\x46\x34\xB5\xA0\xB9\x2C\x38\x37\xBE\x75\x03\x1E\xBF\x09\x53\x8D\x26\x4C\x1D\xD3\x84\xC8\x4D\x98\xFA\x4B\x4D\xD8\x12\x68\xC2\x14\xB5\x1D\x37\x61\x52\x36\x99\x68\x3D\x12\x89\x6F\x6E\xC2\x96\x70\x13\x42\x53\x13\xA6\xFE\xDA\x26\xB4\x02\x2B\xC3\xE6\x62\x8B\x06\xA8\x89\x52\x20\x6D\xD9\xD3\xB6\xD5\x4A\x5F\x1D\x5A\x7A\x8E\xFA\xB2\xDE\xAB\xF9\x4C\x09\x11\x6A\x4B\xD1\xD1\x97\x2B\x29\x09\xED\xD8\x55\x4D\x67\x46\xFA\x44\x52\xD8\x62\x1B\x75\xE7\x8E\x7D\xBB\x60\xD3\xA2\x86\x5E\x2E\x15\xC1\xF1\x6E\xE8\xBC\xBF\x21\xE9\x6C\x84\x05\x0E\x53\xA4\x36\xC6\xB0\x8F\x4D\xD7\x46\x0E\x48\x72\xA0\xE3\x2D\xB5\x52\xD8\x80\xB2\x40\xC7\xA9\xF2\x2C\x48\x12\xE3\xE9\x25\xC7\xA6\x88\x9B\x16\xF1\x99\xAF\x61\xD9\x86\xF5\x6C\x94\x6E\xF8\x8A\xAE\xA6\xB1\xE0\x9F\xCE\xBA\x74\x49\xFA\x45\x0F\xDF\x31\x12\x18\xCD\x01\x07\xD2\xB7\xD3\x4A\x1A\x69\xA2\x79\x74\xAE\x89\x16\x03\x50\xD3\x05\x01\xAE\xEE\x2C\x3B\xA3\x7C\x9A\x4F\x08\x54\x08\x2D\xE8\x03\x79\x26\x13\x08\xBA\x65\xE0\x5F\xEA\xA2\x48\x13\x8B\x53\xE0\xFC\xC7\xFD\xC1\x03\x8F\x0E\x2D\x2D\x29\xD1\x39\x5A\xFA\x58\xA1\x53\x11\xEA\x5D\xC5\x96\x09\x46\x24\x16\x13\xD9\x89\x19\x46\x8C\x1E\x23\x26\x52\x19\x9D\xA3\xA5\x93\x11\xF5\x46\xC9\x4A\x93\x1E\x52\xB9\x02\x71\xF4\x23\xE3\xA5\xCD\x76\xDD\xC8\x06\xD2\xE8\x62\x52\xAF\xC3\xB4\x70\x5A\x95\x50\x46\x44\x9A\x0B\x3A\x34\x28\xCA\x0B\xCD\xE3\x96\x43\x9E\xBB\xF3\xAE\x53\x66\x4B\x3F\x6E\xD2\x16\xAB\x76\xA0\x84\xB5\xE3\xC5\xE9\xE7\x4F\x2A\x68\x4E\x53\xDE\x64\x65\x4B\x25\x20\x5C\xC8\xBF\xAE\x84\x18\x28\x21\x5F\x16\x3E\xA6\x73\xE4\x4C\xEA\x8A\x22\x9A\xDF\x6F\x6F\x36\xED\x93\xCE\x46\x1D\x83\x64\x45\x98\x04\xD2\xFC\xBB\x82\xBF\x7F\xA0\xA9\x1A\x38\xAF\xAB\x52\x70\x5C\x4F\xC4\x9A\x60\x49\x20\x32\xBF\xA5\x56\x38\x93\x08\x21\x3A\x2B\xA3\x22\x46\x99\xA8\x31\xDF\xAA\x88\xBE\x05\xBF\x28\x6B\x24\x89\x08\x82\x47\x14\xD1\x7A\xCB\xE4\xD3\x7C\x42\x07\x92\x47\xEB\xFB\x5D\x22\x19\x27\xB6\x51\x64\x63\x0C\xBF\x6F\xB6\x23\xC3\x3F\x1C\x2F\xE2\x88\x8C\x7A\xD0\xD6\xC4\xBC\x7D\x07\x0F\xAD\xA6\x1B\x52\x8E\xE6\x00\x4F\xE8\xA7\xD8\x20\xBA\x3C\xD0\x59\x37\xDD\xF8\x97\xEB\x8A\x46\x7B\x5E\x79\x7A\x35\x3E\x69\xAD\x8E\xFB\xD4\xCE\x42\x67\x95\x2E\xEA\xE7\x7B\xA3\xFE\x9D\xBD\xD0\x70\xA2\x5B\x8E\x26\xED\x67\x10\x11\x01\x22\x91\x88\x61\xA2\x7C\x74\x31\xDF\xF2\xFA\xB2\x28\x15\x7D\x0B\x1A\x39\xBE\x84\xAE\x31\xD0\xB9\x8B\xBF\x94\x26\x98\x64\xB7\x13\xBC\xD2\xC6\x43\x0B\xA9\x0A\x20\x17\x52\xB3\xB1\x90\x9A\x2A\xA2\xA6\x85\x34\x6E\x09\x2A\x8C\xE5\xD5\x3A\xE8\x58\xDB\xE4\xF5\xD4\x0C\xA6\x6B\xA7\xEC\xA4\x20\x8D\xA3\x96\x54\xAA\x13\x24\x86\x6C\x4C\x3F\x78\x1B\x4B\xFA\x8A\x5F\xF8\x36\xA7\xB4\x3B\xE0\x53\x61\x74\x05\xD1\x3F\x7B\x27\xBD\x17\xB4\xEA\xEE\xA4\xD6\x43\xDB\x50\xE5\x18\x37\x8E\x5C\xCC\x8F\x45\x9A\x5C\x18\x67\xD5\x20\x0F\xA1\x68\x1A\x7B\x21\xDB\xB4\x63\xFE\xAD\x53\x63\x26\xAA\xF8\x7C\x4A\xC0\x0C\x90\x01\x82\xA8\x9A\xC3\x57\x91\x89\xFA\x3C\x26\x53\xE6\xF1\xB3\x60\x1E\x27\x0B\x2A\x21\xC7\x0A\x26\x64\xF0\x81\x0A\xDD\x42\x34\xFD\xD3\x65\xD1\xE7\x1F\x68\xB6\x45\x83\x7C\x2F\x51\xAD\xCB\x06\xAD\xD2\x51\x26\x4B\x8F\x93\xD2\x31\xC4\x4D\x34\x48\xDC\xC8\xFB\xCC\x18\xA4\x4F\xA3\x36\x95\x37\xEA\xD3\xA7\x12\x41\x2C\x9A\xA8\xA4\x4F\x31\x48\xDC\xA0\x4F\xDC\x60\x83\x3E\x45\x9F\x3E\xC5\x62\x8E\xA4\xF6\x8A\x39\x4B\x12\x33\x09\x51\x6F\x56\x83\xB8\x41\x41\xDC\xE0\xB1\xF4\x69\x90\xB8\x41\xA6\x4F\x0D\x66\x30\x48\xE2\x46\x0A\xC3\xFA\xB3\x9A\x22\x6E\xC4\x08\x12\xD5\x11\xB5\x86\xA4\x0E\x52\x51\xA5\x13\x45\x95\xEE\xD8\x3E\xCE\x7D\x6B\x62\x24\xD2\x2E\x7E\x31\x5F\xBD\xF2\x1B\x0A\x89\x06\xE0\xBA\x0B\xB4\x5F\xB2\x09\x6D\xCB\xB5\xDE\x7A\xC1\x40\x63\xB4\x71\x89\xC3\xD7\x89\x63\xA3\x24\xB1\x7C\xA2\x20\xFD\xEE\xDB\x9A\x82\xDA\x7A\x7A\x4C\x62\xB0\x21\xFD\x4F\xC7\x35\x06\xB7\x8F\xBC\xEE\x96\x8D\xF0\xC2\x60\x47\x6C\xFF\x16\xB3\xD4\xBA\x12\xB1\x91\x66\x76\xDE\xDB\xD1\xC5\x23\xBA\x59\xDA\x9C\x82\xD4\x7D\x61\xEB\xE9\x5B\x79\xD6\xB4\x35\x65\xE4\x92\x2F\x02\xDA\x5A\xB5\xC1\xEA\x72\x34\x5B\x57\xC5\x6C\xDC\x12\x94\x17\x79\xA1\xF9\x98\xC1\xC1\x55\x0D\xF3\x70\x4D\xA5\xF0\xB3\x6F\x88\x4C\x1E\x37\xFB\x7E\x03\x8A\x26\xF6\x33\x18\x6D\x92\xE1\x12\x79\x17\x1B\xC8\xA8\x94\xA4\xF4\x0B\xF7\x1E\xF2\x6C\x4A\x61\x63\x3E\xBF\x45\x67\xB4\x66\x6B\x45\x92\xFA\x96\x3E\xB3\x86\x5F\xB4\x88\x2A\x5A\x36\xE2\xC4\x64\xFF\x47\x3B\xE2\xD0\xCD\xD6\x88\xD2\x26\x46\x86\x1D\x91\x2F\x43\x45\x1A\xE9\x34\x24\xB0\x2D\x3B\x4A\x82\x15\xA4\xFC\x29\x12\xA8\x3A\x6C\xC4\x6F\x89\xCA\xF5\x2F\x0F\xBD\x55\x06\xA0\x91\x01\x96\xF3\xE4\x0C\x00\xAB\x5E\x89\x30\x4F\x4A\x72\x56\x14\x4F\x8A\x98\x4E\xE3\xFD\xF0\x02\xA2\x21\x25\x46\x27\xAA\x43\x44\xE4\xAB\x2E\x1A\xDD\xD2\xD2\x69\xDC\xEA\xCC\xE0\x0C\x1E\xE6\xD1\xF5\x3C\xD2\xAE\x21\x03\x29\xFF\xDA\x72\x3A\x04\xD8\xDB\x30\x63\xA4\x8B\x45\x8E\xAE\xAB\x3B\x0F\x22\x1F\x27\x1A\x8A\x2C\x20\x2D\x33\xCD\xD1\x93\x0A\x24\x8D\x95\xCF\x37\x5D\xBE\x41\xA6\x13\x34\x92\x42\x73\x6E\x2E\x3A\xDA\x66\x67\xB4\x26\xBA\xF0\x1C\x2D\x26\x85\x6C\x94\x1E\x96\x86\x3E\x3E\x03\x80\x2A\x40\x17\x7F\xD0\xBA\x23\x89\xA9\xF1\x15\xAC\x69\xBE\x5E\xD3\x74\x4E\x73\x1E\x24\x21\x12\x91\x9B\x67\xB7\xB2\xC2\x02\xA5\xFE\x84\x84\xA9\x34\x55\x7C\x55\x6B\x54\x0F\x49\xA9\xC3\x8F\x73\x12\xE1\xAB\x68\x9A\x1D\x19\x24\xEE\x79\xD1\xD9\x3A\x24\x26\x2B\x93\x8D\xC1\x19\xB6\x36\xC8\x92\x68\x24\x53\x90\xFE\x04\x5F\x08\x07\xA9\x27\x84\x64\x14\x99\x95\x4A\x85\x36\x1B\x57\x04\xE9\x18\x1F\x47\x1C\xB4\xA3\x93\x1B\x17\x89\x34\x36\xB0\x6A\xFA\x62\x3A\xA6\xD8\xF9\x8A\x54\x48\xCE\x3C\xEA\xDC\xBC\xA9\x98\xB3\xE8\x1A\x63\x42\xA9\xC9\x48\x38\x37\x17\x73\x49\x51\x91\x58\x74\xA2\x9B\x48\x9C\xC8\x62\x6B\x68\x60\x47\x07\xB3\x86\xF8\x22\x21\x2B\xAD\x59\xD3\x83\xDC\x35\x92\x0E\x0C\xD3\x36\x56\x0B\x62\x20\x6B\xD8\x29\xBE\x84\x6D\x27\x58\x98\xBC\x9D\xFB\x4E\x23\xB4\x08\xA6\x6E\x4B\xF0\x77\x8C\xD5\xF8\xFB\xDF\x49\xF1\x9D\x6C\x7C\xA7\xF9\x2E\x8A\xFF\x3D\xB1\xA8\x36\x01\xFC\x4D\x66\x00\x26\x35\xBE\xDB\xC5\x77\x7B\x43\x2F\x85\xCD\xB9\xB5\x05\x0D\x2B\xE5\x36\xC0\x8E\xB3\xB6\x7C\x59\xB7\x16\x8F\x1F\x3A\xE9\x09\xCA\x27\xF0\x29\xB8\x61\x29\xB5\x88\x8C\xA0\xBB\x9A\x31\xDE\xCC\x48\xD1\x7F\xD1\x64\x7C\xA7\x91\x0F\xC8\x89\x8B\x08\x7C\x46\xBE\x9A\x7A\x84\x49\xB6\x80\x6D\x74\x0E\x64\x94\x36\x35\xBA\x66\xE5\xC4\x8A\xE9\x2F\x88\x21\x29\x36\x4E\xE3\xFE\xFA\x45\xC5\x8C\xF9\x5B\xE7\xFB\x5B\xE7\x6B\x74\x3E\xD2\xF1\x48\x4C\x63\x4E\x89\x1A\x44\x9B\x9C\xF3\x6F\x06\xB2\x66\x02\xAD\x9E\x8B\x2A\xC2\x80\x57\x2B\xB9\xE8\x8B\xA6\x4D\xD3\x67\x94\xC4\xEE\x90\x45\x6E\x82\x5D\x50\x51\xD0\x8E\x51\x4C\x7F\xE9\x36\xC9\x83\x6F\x4C\xC7\x4B\x58\xF2\x30\xA9\x93\x9C\x14\x57\xE5\xCD\xC5\x9C\x96\xFE\xF2\x6D\xAC\x0A\x4F\x7A\x4A\x6A\x41\xD1\x14\x51\xA8\xA8\x34\x72\x95\x3C\x4F\x0A\x55\x90\x9A\x06\x24\x61\x0B\x66\x14\xF1\x2D\xFA\x0E\x6D\x22\xE5\x49\x92\xD9\x62\x9D\x13\x19\x8D\xCA\x9C\xB3\xE4\x46\x94\xE5\x58\xD1\x8E\x8A\xD7\xF0\xB2\x90\xB6\x9A\x2F\x2F\x06\x14\x1C\x5A\x1F\x30\xD0\x1A\xD5\xE6\x37\x95\x4A\x8E\x21\xBE\xEB\xC9\x03\xC9\x58\xC9\xD6\x4B\x6C\xA3\x79\x20\x45\x8A\x52\x4F\x9A\x3E\xC8\x6B\x8E\x49\x32\x55\xC1\x81\x44\x62\x8C\xA6\xAD\x15\x73\xF2\x5A\xA5\x6E\x47\xD4\x40\xA2\xCB\x9E\x26\xB7\x9B\x39\x59\xDA\xAD\x26\x6A\xC8\xA4\xD8\x65\xAB\x45\xED\x88\xD8\x5A\x89\x54\xB2\x71\xE2\xA2\x88\x81\x94\x60\x09\x39\x35\x90\xE2\xA2\xE2\xAD\xC6\x40\x32\x53\x60\x27\x68\xFB\xEE\x80\x6D\x0E\x66\x35\xF1\x45\x77\x80\x74\x65\xD3\x8D\xAF\x69\xCB\xFD\x9B\xC6\x97\xAF\xB4\xD5\xD9\xA4\x1D\xC9\x6A\x76\x92\xC5\x57\xED\xB8\xE8\xBE\x96\x1A\x48\x8D\xD0\x22\x18\x45\xE1\x7F\x4B\x2B\x16\xFE\x77\xB2\x48\x0A\x6F\xFC\xEF\x74\x91\x04\x83\xFC\xEF\xA6\x13\x29\xDB\x14\x7D\x59\x6F\x0C\x24\x53\x0C\x24\xBD\x31\x90\x74\x31\x90\x44\x6E\x6D\x31\xDE\x35\x35\x90\x62\x3C\x90\x64\xDD\x26\x02\x54\x50\xB0\xCD\x25\x2F\xD3\x62\xAD\x74\x10\x1E\x4B\x0D\xAA\xEB\x5E\xD5\x1F\x54\x07\xE0\x99\x74\xB1\xAF\x82\xAA\x79\xB6\x25\x63\x75\x74\x19\xC0\xEF\x18\x9A\x9A\x61\x75\x35\xC3\x46\xA4\x09\xAF\xC1\x1C\x5D\x09\x0D\xF4\x8E\x98\xCF\x57\xA5\x0B\xAD\x34\xC3\x4A\xE9\x00\x11\x8E\x3B\x46\x64\x72\x2E\xD2\xE8\x18\x91\xE0\x0C\x1B\x15\x33\x2C\xA9\x95\x70\xF4\x22\x75\x0A\x9D\xFA\x23\x25\x4B\x4C\x1B\x9D\x05\x9E\x54\xFF\x48\x04\xFA\x07\xDD\x91\x14\x3D\xC3\x54\xBE\xF8\x5E\x83\xAC\x1F\x49\x6D\x07\xCE\x82\x72\x96\x6D\x8A\xDE\x61\x65\x4D\xD9\x3B\x74\xD1\x3B\x4C\x3B\xA1\x7A\x47\x23\xB4\x08\x46\x51\xF8\xDF\xB1\x22\x09\x4A\xF8\xDF\x49\xF1\x9D\x6C\x7C\xA7\x8B\x74\x83\xD6\xFF\x9E\x58\x54\x17\x2C\xF8\x7B\x92\xF8\x9E\xD4\xF8\x6E\x17\xDF\x7E\xEF\x88\x88\xDE\x11\x21\x7B\xAF\x62\xA7\x1C\xEA\x1D\xA6\x1C\x79\x81\xDE\x11\xA4\x10\xFD\x81\xAA\x3B\x37\x17\x9B\x3B\x88\x41\xEC\x6A\xA3\xD1\x41\xFE\x36\x61\xFC\x6D\xC2\xF8\xDB\x84\xF1\xB7\x09\xE3\xAF\x9E\x30\x6A\xA8\x8F\xB2\x29\x57\xEE\x1F\x4A\x93\xF8\x4A\x76\x06\xA5\x59\xDC\x1C\xF0\x51\x36\xD0\x49\x04\xAB\xC3\x14\x94\xB2\xCE\x47\xE1\x7C\x63\x48\x63\x83\xA9\x3A\xC9\xF7\x88\x9D\x71\x24\xAB\x59\xCE\xA8\xA0\xB3\x06\x45\x4F\x59\x3C\x99\xB5\x56\x1C\x45\x8C\x8C\xDA\x38\x9D\xEC\x5D\x88\x88\x74\x36\xC9\x68\x6B\x64\x9B\x56\x1E\x56\x3B\x63\x58\xCB\x45\x9C\x5D\x7C\x79\x8B\xAC\xF0\x6E\xCA\x19\xCE\x2F\xE9\x8E\xAA\xE1\xEC\xC2\x65\x29\x74\x34\xBA\x07\x6D\xD6\x9D\x5D\xAD\x9B\xEC\x48\x35\xA7\x3B\x63\x02\x4F\xCA\x67\x3B\x41\xA3\x38\xCC\xE6\x38\x9C\x3F\x91\x05\x58\x9D\xEE\x41\x9B\x75\x31\xA6\xEB\xCE\xD8\x3E\x7D\x53\xD5\x36\x29\x82\x74\x23\x02\x9D\x22\x40\x8E\x40\x06\x7F\x9D\x82\x1B\xC1\xE0\x22\x24\x65\xC2\xF3\x60\x93\x8D\x22\x16\xCF\xD3\x97\xA7\xD0\x72\xDE\xF4\x74\x2E\x9E\x1C\x18\x60\x1B\xD6\x1E\xD2\x62\xC6\x1A\x27\x1C\x0F\xD8\x90\x02\xCE\x05\x70\x50\x29\x1B\x6D\x95\x48\xE7\x92\x4D\xCE\x18\x56\xA5\x1D\x02\xC7\xDC\xEC\xEC\x12\x5F\xE0\x68\xC2\xA7\x88\x9D\x54\x5A\x7B\xDE\xB7\x60\xF9\x64\x56\x62\x1D\x0E\xA9\xD1\x57\x72\xB3\xB3\x8F\x42\xAA\x78\xFC\x88\x1D\x5D\x2A\x04\x56\x18\x52\xD2\xE4\x4C\xD8\xEC\x1C\x18\x37\x80\x1F\x5F\x23\x06\xC3\x5A\x8B\x38\xEA\x48\x8D\xC1\xEA\xDA\x2A\x88\x06\x06\xD1\xA4\x74\x7C\x46\x28\xAA\xC1\x7D\xA2\x89\x6C\x74\xF4\x06\xEA\x80\x42\x2D\x61\x2E\xA5\x98\xDA\x2C\xEB\xFE\xFB\x74\x0D\x9C\xB1\x31\xC3\x7A\xE6\x5E\x7D\x2B\xDC\x0C\xCB\xCA\x1B\x0B\xE5\x42\x7D\x0B\x38\xE5\x2D\xE0\x56\xAB\xEE\x16\xA8\x0C\xBB\x3D\x43\x6E\xA9\x54\xE9\x9D\x6B\x17\x4A\xA5\x7C\xBF\x5B\xB2\x37\x8C\x14\x4A\xF5\x42\xD9\xEE\x75\x7B\x07\xF2\x76\xA1\xDC\x97\xBF\x11\x4E\xEB\x9A\x7D\x23\x9C\x76\x23\xF9\x2F\x8F\x0C\x6D\xC8\x57\x7B\xEA\x95\x9E\x0D\x1B\xE7\xDA\x85\xF2\x66\xB7\x54\xE8\xB3\x19\x6B\x8F\xE7\xA5\xB2\x39\x5F\xDD\x58\xAA\xDC\x00\x4B\xF3\x1B\xAA\xF9\x1B\xE0\xDA\x1B\x60\x45\xA1\x36\x02\x97\x16\x36\xE7\x6B\x3D\xCE\xE0\x48\x75\x04\x56\x8D\xD4\x06\x46\x60\x6D\xBE\x34\xD2\x3F\x02\x2B\x0A\x43\x1B\x46\xA0\xDB\x1D\xE9\x59\x58\x28\xF7\x2C\x75\x47\x60\xC5\x08\x0C\x8D\x94\x7A\x6A\x85\x9B\xF2\x3D\xF5\x8E\x69\x8D\x38\xE7\xDA\xBD\x03\xF9\xDE\x41\xBB\x3E\x90\xB7\x7B\x2B\xE5\x7A\xFE\xC6\x3A\xB8\x7D\x7D\x7F\xA5\xCF\xDA\xC8\x86\xBF\xD2\xE7\x48\x39\x7F\xE3\x70\xBE\xB7\x9E\xEF\xB3\xF3\xE5\x3E\xBB\xB2\xD1\x2E\x94\x87\x47\xEA\xB0\xD6\x2D\xF7\x8F\xD4\xA1\x54\xD8\x30\x34\xDC\x97\x17\xB5\x58\xAE\xE7\xAB\x65\xB7\x64\xE7\xAB\xD5\x4A\xD5\x2E\x94\xED\x9E\xA1\xE1\xBE\x9E\x0D\x6E\x2D\xDF\x53\xEE\x2B\x6C\x1E\xAA\xF4\xCD\xB5\x87\x4B\x79\xB7\x96\xB7\xAB\xF9\xE1\x4A\xB5\x0E\xCB\x07\x0A\x75\xB7\xDC\xB3\x46\x34\x44\xCF\x9A\xDE\x6A\x61\xB8\x4E\xB5\xB8\xA1\x50\xAF\xF5\xB8\xE5\xBE\x9E\x72\xA5\x0E\x0B\xB7\x0C\x57\x0B\x95\x3A\xB8\xFD\xFD\xD5\x7C\xBF\x5B\xCF\xD7\x28\x2D\x50\xF5\x5F\xCD\xD7\xF2\xD5\xCD\xF9\x3E\xDB\xAD\xF6\x8F\x0C\xE5\xCB\x75\x18\x1A\xEE\x13\x5E\x0A\x81\xC8\x6A\x03\x85\x8D\x75\xA8\xE5\xEB\x70\xA9\xF0\x9E\x17\xF9\x2F\xF4\x5C\x59\xC8\xD7\xA1\xB2\xA1\x98\xEF\xAD\xC3\x8A\x46\x8C\xBD\x03\x6E\xD5\xED\xAD\xE7\xAB\x76\x6F\xC9\xAD\xD5\x60\x51\xFF\x96\xE1\x7A\xC1\x2D\xF7\x2C\x2D\xE4\xAB\x95\xFE\xD2\x96\xE1\x81\x1A\x38\x65\xB7\x5E\x29\x85\xB1\x2B\xF3\xD5\x4A\xA1\x5E\xE8\x6D\x42\x5E\x5B\x83\x75\x35\xE8\xAE\xC1\xC2\x1A\x9C\x56\x9B\xCB\xFF\xED\xD3\x6A\x4D\x3D\xA6\xBA\xA5\xA7\x50\xAE\x37\x3A\x63\x35\x3F\x5C\x0D\x7A\x70\x6B\x3D\x1B\x4B\x15\x77\x3C\x1F\x9B\xDD\xD2\x48\xBE\xA7\x36\x20\xBA\xF3\x0D\x3D\xBD\x95\xE1\x2D\x32\xD0\x38\x7E\x8B\xB5\x4A\xB9\xE7\x86\x6A\xA1\x9E\xAF\xF6\xE4\x87\x0A\xF5\xE3\xFB\x0C\xF5\xF6\xF0\xCF\x54\xAD\x37\x56\xAA\x50\xAE\xF8\x35\x6F\x6F\xAC\x54\x85\x8F\x7C\xBD\x50\x2F\x54\xCA\x76\x65\x38\x5F\x75\xEB\x95\x2A\x6C\x70\xFB\xC6\xC5\xAB\x1A\x1F\xCE\x57\x4B\x0D\x6C\xB9\xC2\x7D\xA8\xA9\xEF\x11\xC2\x4F\xB8\x52\x85\x81\x42\xA0\xA1\x6A\x03\x95\x91\x52\x9F\xBD\x21\x6F\xF7\x57\xF3\xAE\xC0\xD4\x07\xDC\xB2\x5D\xAA\x34\xFC\x04\x63\x2B\xE5\xCB\xFD\xF5\x01\xD1\x99\xFF\xB2\x8F\x60\x3A\xA0\xAA\xA1\x56\xAF\x16\xCA\xFD\x76\xBE\xD6\xEB\x0E\xE7\x03\xBF\xF7\xE5\x4B\x85\x21\x51\xB9\x76\xA1\x66\x97\x2B\x75\xDB\xB5\x6B\x85\x72\x7F\x29\xE8\xC7\x4F\xA3\xB7\x54\x11\x63\xC1\x2D\xF7\xE7\xC7\x49\x62\xA4\xCC\xB1\x07\xFA\x23\x2C\x1F\x18\xCA\x07\xDB\xBC\xB7\x32\x34\xEC\x56\xF3\xB2\xAD\xE8\x07\xB7\x5A\xA8\x0F\xF4\x0C\x8D\x94\xEA\x85\xE1\xD2\x96\xF0\x34\x15\xF4\x52\x28\x8F\xD4\xDE\xE2\xF7\xE1\xD2\x71\x7E\x7E\xAB\x69\x30\x10\xBE\xAF\xB0\xB9\xD0\x97\x7F\x0B\x0F\xD5\xCA\x48\xB9\xEF\x98\xDF\x57\xBA\x83\x6E\xCD\xAD\xC2\xCA\x2D\x6E\x79\xC8\x6D\x74\x91\xB2\x3B\x24\xAA\xC2\x1D\xAE\x8F\x54\x45\x2B\x57\x46\x86\x61\xDD\x30\xAC\xAC\x56\x60\xA9\x5B\x1E\x29\x57\x2A\xB0\x6A\xB0\x02\x57\xB9\xE5\xDE\x81\x0A\x2C\xA8\x0C\x57\x86\x2A\x1B\x2B\xB0\xA6\xB2\xA5\x32\xB4\xA1\x02\x2B\x0B\x6E\x05\x56\xB8\x02\x01\xDD\x15\x58\x55\x81\x15\x15\x58\x58\x81\xD3\x2A\x81\x32\xD5\x7A\xA8\x31\xE6\xDA\x5C\xAF\x85\x5A\xA5\x0C\x0B\x2B\x43\x43\x95\xB2\xDF\xF3\xE6\xDA\xE2\xAF\x98\x1D\x37\xE7\xAB\xB5\x42\xD3\x2F\xEE\x86\x63\x7E\x38\x26\x5E\xFF\xD7\x15\x6E\xBD\x50\x86\x95\xF9\xBE\xFC\x46\xB7\xD0\x57\x2D\x94\x61\xA4\x94\x2F\xDB\x17\xCF\xB3\x37\x97\xF2\xE5\x60\x57\xAC\x57\x06\xF3\x65\x58\xE9\x56\x7B\x07\xF2\x65\xB8\x74\x64\xB8\x54\xD9\xE2\x96\xC1\xD9\x9C\xAF\xD5\xDD\x32\xAC\x71\x87\x44\x7D\xBA\x65\x58\x5B\xD8\x90\x17\xEE\xA2\xD2\x06\xB7\xE6\x96\x61\xA9\x5B\xAF\xBA\x65\x28\x0B\x4F\x03\xEE\xE6\x82\x5B\x86\xD5\xA5\xBE\x9E\x6E\x91\x03\xF9\xBE\x74\xA4\xDC\xEF\x56\xC5\xD7\x42\x76\x9C\xEA\x50\xBE\xCC\xDF\x23\xBD\xAE\xF0\xD7\xE3\x94\x36\xB8\x8C\x1A\xA8\x54\xDD\xDA\x90\x78\x5D\x59\x29\xF7\xD3\xEC\x07\xCB\xCA\x35\x9A\xB8\x0B\x95\xB2\x5B\xEA\xE9\x76\xAB\xF5\x01\x81\x5E\x92\xAF\x54\xFB\xC5\xCB\x8A\x2D\x7D\x2A\xB1\x35\x95\xFE\x3E\x46\xF5\x0A\xA7\x7B\xA0\x92\x2F\x17\x7A\x1B\xBF\x8E\xD4\x07\x7A\x9C\xAA\xBB\x41\x61\x56\x55\xAA\x01\xCC\x86\x4A\xA5\x94\x77\xCB\xB0\xCA\xDD\xE0\xD6\x5D\xF1\xB6\xD2\x2D\x17\x7A\x07\xE8\x75\xA9\xF8\x2C\x43\xD9\xBE\xD8\x9E\x65\x9F\x7E\xBA\x5D\x16\xBD\x77\x48\xD4\x26\x23\xBB\x04\xB2\xF1\x3D\x8F\x11\xB5\xBA\x2B\xE6\xEA\x5E\xB7\x56\xBF\x68\xA4\x50\xAE\xCF\x9A\xD3\x53\xBF\xB8\xA3\x3C\xCD\x9E\x27\xFC\x2D\x70\x87\x46\x86\x60\xE1\x48\x39\x5F\xD8\x58\xA9\x0E\x81\x33\x50\x19\x82\xDE\x61\xFB\x22\xBB\x2F\xDF\xCB\x13\xC0\x59\x43\xF9\x21\x70\xFA\x4A\xEE\x10\xAC\x74\x4B\xEE\x16\x57\xBC\xAD\xEE\x1F\x70\x87\x60\x4D\xA1\xAF\x4F\xB8\x62\x9D\x59\x2B\x5E\x16\x12\x76\x08\x56\x0C\xC1\x90\xCA\x11\x65\x65\x28\xD0\x85\x86\x46\x4A\xA2\x2C\xFD\x23\x25\xA8\xDB\xD9\x79\x76\x4F\x4F\x79\xA4\x54\x82\x0D\x81\x77\x37\xF0\xBE\xD6\x1D\x2A\x94\x60\x58\x8C\x88\xCD\x85\x6A\x7D\xC4\x2D\xC1\x42\xB7\xEC\xF6\x51\xB3\x6D\xA8\x54\x0B\xFD\x85\xB2\x5B\x82\x75\x25\x58\x55\x82\x15\x25\x58\x99\xCF\xD7\xF3\x85\x9E\x95\xEE\x96\xFC\x20\x2C\xA9\xE6\xF3\x83\xB0\xC0\xAD\xBB\x83\xB0\x66\x10\xBA\x6B\x6E\x49\xAC\x0A\xDD\xEE\x40\xC9\xDD\x5C\x38\xA6\x61\x19\xBB\x32\x5F\xEE\xCB\xF7\x2C\x2F\x0C\xBA\x83\x23\x05\xB8\xCA\x15\x1D\xBB\x67\x61\xA1\x5E\x80\x25\x23\x45\xB7\xEA\xD6\x0B\xB0\xD6\x1D\xAC\x16\x60\xCD\x96\x52\xA5\x5E\xE8\x59\xE5\xF6\x57\x0B\xB0\xCA\x2D\xF7\x15\xCA\xAE\xE8\x6A\x70\x69\x7E\xB3\x2B\x5F\x37\x96\x0B\xB0\x72\xA4\x54\x77\x85\xEB\x0E\xB8\x45\xF1\xB2\xA0\xEA\x0E\x0C\x15\x60\x41\xBE\xDC\xEF\x96\x0A\xB0\x60\xC0\x2D\x0C\xD6\x46\x06\x0B\xB0\x7C\xA0\x52\x1C\x2C\xC0\xEA\x52\xCF\xC2\x81\x82\xF8\x76\x0B\xF5\x01\x81\x76\xAB\x95\xDA\x80\x78\x5D\x32\x52\x1D\x1A\x19\x1C\x28\xC0\xCA\x4A\x9F\x88\xB1\xE6\x56\xDD\xA1\x9E\x25\x95\x72\x9F\xF8\xAD\x5C\x74\x4B\xAE\xFC\xBA\x3A\x7F\x53\xA1\x4F\x84\x1D\xE9\x73\x6F\x70\xFB\x0A\xB0\x76\xC0\x2D\xC0\x95\x6E\x01\xAE\x2E\x40\xB7\x88\x7B\x8B\x3B\xD0\xB3\xA2\x00\x6B\x0B\x1B\x45\xC6\x07\xA0\x32\xDC\x5B\xE9\xCB\x77\x50\xDF\x18\x5C\x56\xAE\xD5\x9D\x52\xDD\xBE\xF9\x66\x7B\x3C\xFC\x4A\xB7\xDE\x3B\x00\x0B\xDC\x5A\xCD\xED\xB9\xD2\x1D\x80\x5A\xB5\x77\xA6\x22\x94\x66\xD6\xB7\x0C\xE7\x69\x02\x9C\x31\x00\x6B\xDD\x7E\xB7\x54\xE9\x87\x6E\x77\xC0\xBD\x61\xA0\x67\xE9\x50\xA5\xDC\x0F\xAB\xB6\x14\xDC\xC1\x7C\xB9\xBF\xA7\x7B\xC4\xED\x1D\x18\xC9\x4B\xF4\x9A\x42\x7F\xF9\xAA\x6A\xA1\x5E\x28\xF7\x03\xF7\x3E\xA8\x0C\xF7\x50\xB2\x97\xE7\xFB\xF3\x37\x0E\xAF\x10\xEB\x8E\x5B\x5A\xC3\xBF\xAD\xA9\x54\xDD\x9E\x35\x95\xA1\xE1\x7C\xB9\x1F\x2E\xCF\x17\x5D\xF2\x2F\x97\xCF\x72\xBE\xFF\x2F\xD1\x16\x1B\xA1\x6B\xD6\xEC\xB3\xCF\x39\x77\xCE\x79\xE7\x5F\xE0\x6E\xE8\xED\xCB\x6F\x84\xEE\x8D\xB0\x70\x63\x80\xEE\xF2\xD7\x73\x41\x49\x36\x48\x9F\x85\x23\xD5\x5A\x61\x73\x1E\xEA\xD5\x91\xBC\xBF\x9A\xD1\x7A\x05\xAB\xF2\x37\xF4\x88\x01\xB1\x62\x24\xDF\x94\x19\xB7\x9E\x87\x8D\x6E\xA9\x96\x87\x05\x6E\xA9\x50\xCE\x8B\x97\x91\x7E\x7E\xB9\xCC\xDD\xEC\xD2\xCB\x9A\x91\x72\x1F\xBF\xAD\x73\xCB\xEE\x06\xF7\x26\xB7\xDA\xB3\x66\xD3\x88\x5B\xCD\x43\x2F\xAD\xFE\x62\xBD\x1D\x29\x57\xF3\x82\xD8\x18\x29\xE7\x83\xC3\x4A\xAC\x75\x76\xA5\x09\xE7\xF6\xF5\x11\xA6\xDB\x2D\x0D\x6D\xA9\xE6\xCB\x79\xD1\xF3\x44\x76\x8F\x47\x07\xF2\x4A\x1D\x48\x6B\xD8\xAD\xAA\xF5\x1B\x0A\xE5\x5A\xBD\xE7\x9A\x6A\xA5\x52\xBF\x6E\xC6\xF1\xBA\xCA\x5B\xFA\x59\xB0\xA5\x9E\xBF\x9C\xA2\x5A\x5D\x73\xFB\xF3\xB0\x70\x20\x5F\xAD\x0C\xE6\xF3\xB2\xAD\x1B\xEB\xE4\x48\xB9\x20\x82\xFA\xB9\x94\x34\x48\x2D\xBF\x69\x24\x5F\xEE\xCD\x43\xB7\x68\x0A\x9A\x76\x56\xE4\x43\xD4\x7B\x13\x71\x0D\x0B\x46\x06\x0A\x7D\xB0\x71\xB8\x5A\x28\xD7\x37\xCE\xA5\x12\x15\x86\x86\x4B\x79\x41\xC9\xE5\xFB\x60\x23\x51\x89\xE3\xE0\x87\x47\xEA\xBD\xC7\xA2\x97\x95\x07\xF2\x22\x40\x9F\xCC\x70\x6D\xAE\xDD\x9F\xAF\xDB\x62\x5A\xB5\x37\xBA\x85\x52\xF0\x87\x7A\x75\xA4\xDC\xEB\xD6\xF3\xEA\x87\x61\xB7\x2E\xF6\x0E\x76\xBD\x52\xB1\x4B\x6E\xB5\x3F\x6F\x77\xD2\x12\x5C\x28\xF9\x5E\x82\xFB\xB5\x00\xCA\x6F\x4A\xB8\xB6\x0F\xBA\xFB\x60\x55\x1F\x9C\xD6\x07\xE5\x1B\x2A\xD5\xBE\x9A\x98\x5B\xAB\xF9\xDA\x48\xA9\xDE\x79\x31\x85\x84\x95\xDD\x97\xF6\xAC\x5C\xB6\xCA\x59\xB1\x62\xF5\x42\xFB\xA2\xF0\xAF\x0B\x2B\xC3\xF5\x42\x2F\x5C\x21\xA6\x26\xF1\xB2\xA4\xE4\x8A\x35\x4E\xBC\x2E\xAA\x0F\x14\x2A\xC3\x85\x5E\xB8\x5C\xD4\xBE\x5A\x45\x87\x0A\xBD\xB0\x70\x4B\xB5\x50\x2A\x49\xDC\xB2\xBA\xAB\x5E\xD7\x8E\x54\x07\x45\x1C\x95\xFA\x40\xA1\x17\x68\x0D\xEB\x85\x45\xA5\x2D\x43\x6E\xA1\x17\x96\x0D\x0D\xE7\xAB\x05\xB7\x24\xD6\x36\x42\xAC\x74\xCB\x7D\xC2\x5D\xB3\xA5\x5A\x70\x7B\x61\x4D\x2F\x74\xF7\xC2\xCA\x5E\x58\xD8\xDB\x3C\x77\xD0\xDF\xC2\x90\x5B\x9A\xD1\x0B\xA7\x6D\x80\xD5\xB5\x21\xB7\xBC\xC5\x85\xD5\xD5\xC2\x16\x57\xAC\x1B\x85\x8D\x85\x9E\xCB\x2B\x03\x85\x72\xFF\x16\x57\x4C\x2E\x1B\xDC\xF2\x0D\xAE\x18\x75\x2E\xAC\x2D\x54\x07\x46\xEA\x2E\xAC\x71\x47\xAA\x6E\x6D\xA0\x5E\x75\xE1\xD2\x4A\x7F\xD5\x85\xE5\x62\x01\x70\xCB\x2E\x2C\x2D\x54\xDD\x7E\xF1\xB2\x76\xC0\x15\xCE\xC2\x01\x77\x70\xC8\x85\x35\x85\xF2\x80\x5B\x72\x61\x49\xD5\x2D\xD7\x07\x5C\x58\x91\x1F\xEE\x1D\x70\x05\x45\x51\x75\xFB\x44\xF0\x72\x59\xB8\xDD\x03\x6E\x7F\xAD\xA7\xDB\x05\xAE\x54\xB1\x48\xB9\xD0\x25\x6A\x99\xF6\x99\x70\xCD\xF5\x70\xCD\xDC\xEB\xA9\xB3\xCD\xBD\x0E\xAE\x99\xDB\x78\xBB\xFE\xC6\xBE\x42\x7F\x81\xDF\x03\xAF\xD7\x37\x5E\x03\xC8\xE1\x91\x72\xAF\x8C\xC0\x7F\xBB\xBE\x54\xB9\x21\x5F\xA5\xD7\xC6\xDB\xF5\x23\xC3\xC3\xF2\xB5\xF1\x76\xBD\x5B\x2A\x8F\x0C\xD1\x6B\xE3\xED\xFA\xDE\x72\xBD\x5A\xA2\xD7\xC6\xDB\xF5\x1B\x4A\x6E\x79\x90\x5E\x1B\x6F\xD7\xBB\xB5\xDE\x42\x81\x83\xFB\x6F\xD7\xF7\x57\xDD\xE1\x01\x7A\x6D\xBC\x5D\x5F\x1B\x76\x7B\xF3\xF4\xDA\x78\xBB\x5E\x74\x4B\x7A\xF3\x5F\xAE\x77\x4B\xC3\x03\xAE\xCC\x90\x7C\xBB\xFE\xDA\x19\xD7\xC1\x50\xA1\x26\x36\x0E\xF6\x75\x50\x17\xB3\x92\x78\xBD\x16\xAE\x81\x75\xD0\x3B\xDC\xE9\x93\x1F\xF6\x45\xB6\xE8\xD2\x6B\xD6\x2C\x5B\xB7\xA8\x67\xA5\xF3\x0E\xB8\xF6\x2A\xB8\x76\x0D\x74\x43\x6D\x95\xBB\x0A\xCA\xA2\xF2\xCF\x3E\x93\x3A\xBD\xF3\x8E\xB5\x97\x3B\xAB\xD6\x2C\x5E\x7D\xF9\xCA\x9E\xD9\xF2\xA7\xF1\x7E\x58\x09\x25\x57\xFD\xB6\xDC\xB9\xDC\x59\xBB\xE6\x8A\x05\x4E\xCF\x02\x67\xCD\xA2\x85\xCE\x9A\x45\x62\x12\xBB\x41\xB4\xEC\xAA\x2B\x56\xAC\x90\x3E\xCF\x3E\xB3\x63\x9C\x88\x66\xCE\x9E\xD6\xEC\xF9\xDA\x4B\x61\x21\xAC\x28\x94\xF3\x6E\xB5\x67\x81\x7A\x71\xC4\x5E\x48\x44\x72\x01\x13\x65\xE7\x9C\xDF\xD8\xFD\xD4\x37\x76\x9E\xEF\xCF\x71\x57\xAC\x5D\xDC\x79\x3E\xFB\x99\x35\xC7\x27\x94\xCF\x81\xAA\xE8\x5B\xFC\xDA\x3D\x4B\x44\x34\x54\xE9\x2B\x8F\x0C\x11\xB1\xC7\x6F\x17\xCD\xB3\xBB\xCF\x86\x0D\x6E\x8D\xBC\xCD\x86\xAD\xB3\xA0\x56\xE8\x2F\x8B\x69\xB7\x73\x96\xC8\xA2\xFA\x9A\x05\x5B\xBB\xC2\x84\x19\xD1\x88\x03\x85\x8D\x75\x81\x06\xEA\x85\x35\x7A\xBD\x81\x72\xC0\x5E\x47\xE4\x3B\xD4\xFC\x97\x6A\xAF\x7A\xED\xCB\xF7\x76\x5E\xAC\x3E\x82\xB1\xAB\x4F\x18\x72\x6F\x1C\xAE\xE6\x7B\xD5\x4F\x85\x72\xA1\xAE\xBE\x45\x0D\x5F\x3C\xCF\x2E\x6D\x10\x3F\x94\x36\x10\x8A\x89\x57\x28\xB0\xD3\xEB\x56\xAB\x5B\xAE\xE9\xBA\x4E\x14\x80\x82\x33\x62\x56\x18\x31\x9B\x11\x30\x13\x3A\x05\xD1\x75\x16\xCC\x38\x13\xB2\x43\xC3\x7D\x3D\x85\x5A\x6D\x38\xDF\x5B\x70\x4B\x1D\x3C\x6C\xA7\x29\x74\x6F\x45\x2C\x56\x7D\x6E\xDD\x0D\xFF\x52\x1B\x70\xAB\xF9\xBE\xE6\x9F\x3A\x2A\xC3\x3D\xB4\x94\x75\x48\x5A\xE4\xF2\xFC\x70\xDE\xAD\x4F\x83\x42\x6D\x58\x8C\xC8\xD9\x1D\xD5\xCA\x0D\xB5\x69\xD0\x5B\x29\xD5\x84\xB7\xC0\x91\xD6\xEC\xE9\x36\xFF\x76\x4C\x1C\x0B\x07\xDC\xEA\x42\xB1\xF0\x06\xA2\x11\x11\x04\x3E\xCB\xD3\x40\x92\xEB\x1D\x43\xE3\xC4\x20\x29\xA2\x69\xD0\x51\xAA\x4C\x13\x5D\xA1\x63\xA0\x30\x0D\xB2\x03\x6E\xAD\x87\x4E\xF7\x3A\xC4\x57\x6F\xA5\x5C\x77\x0B\xE5\x9A\xF8\xE8\x50\xCB\xB2\x8C\x46\x2C\xCC\x8B\x86\x86\xEB\x5B\xAE\x2A\xF4\xD5\x07\xC6\xFF\x5D\xD1\x7B\xC7\x4F\x9F\x29\xB2\xF1\x43\x2F\xE4\x0D\xED\x78\xC5\x0F\xFC\x72\x4C\x30\x9F\x5A\x98\x06\xDC\x2A\x05\x3E\xE2\xCC\x77\x6C\x68\x60\xEA\xF9\xFE\x7C\xB5\xC3\x9D\x16\x6E\x6A\x77\x1A\xDC\x40\x23\x42\xD4\xC8\xAC\x2B\x2E\xBA\x68\xD6\x9C\x69\x30\x72\x0C\xA6\x7A\x0C\xA6\x56\xED\x3D\x06\xE7\x57\xED\xEC\x73\xCF\x9D\x06\xA2\x82\x03\x5F\xBD\xC1\x8F\xF2\x34\xD1\x69\x3B\x66\x4F\x83\x8E\xE1\x6A\x7E\x63\xE1\x46\xEE\x02\x0D\x6C\xA1\x8F\x4B\x58\x26\x42\xA9\x73\xD6\xB8\x1E\x67\xC9\x24\xC5\x7B\x97\x4C\x50\xBD\xF7\x36\x5E\xEB\x9D\x17\x57\xF3\x1B\x39\x3E\xF1\x5D\x19\xA9\xF7\x70\x3D\xF6\x34\x90\xB5\xBA\x5B\xAD\xAB\x7A\x15\x88\xEA\x48\x79\x53\xE7\xC5\x22\xB5\x20\x56\x7C\x73\xCC\xC1\x0D\x23\xF7\xDF\x8B\x3B\x86\x3B\x87\xBB\xA6\x89\x14\x2B\x75\xB7\xC4\x81\x82\xDE\x0A\xE5\xFA\xC5\x1D\x1B\x4B\x6E\x7D\x86\x8C\x96\x6B\xE2\xA2\xF1\xBC\x11\x29\x59\xEB\x39\xD6\x67\x23\x53\xD0\x51\xAE\xD5\x07\xFD\xF0\xBD\x83\xBE\x6F\xC8\x16\x86\x3B\x2F\x2E\xB9\xB5\x7A\xC7\x34\x28\xF4\xF1\x0C\x70\xF3\xCD\xF6\x70\xB5\xD2\xDF\xD3\x79\xB1\xA8\xD3\x8E\x42\x5F\xE7\xAC\x69\xBE\x27\x2A\x01\xCD\x9A\x2E\x57\xB1\x08\x68\x5F\x14\xFC\x94\x5E\x82\x28\xB5\x32\x4D\x0B\x12\x97\xD3\xA0\x96\xAF\x77\xC0\x54\xA6\xE2\xC5\xC4\x93\x53\x33\x39\x8D\xB4\x1C\x1D\x7C\xF6\xCD\xE5\x73\xBC\xB9\xB6\xFA\xBC\xC1\xAD\x96\x89\xBA\x0D\xEC\x36\xA0\xE9\x39\x66\x17\x02\xC7\xFB\xDD\x59\xB0\xF0\xD2\x45\x8B\xC3\xBF\x33\x76\xC9\xD2\x65\x97\x2D\x5F\xB1\x72\xD5\xEA\xEE\xB7\x5F\xBE\x66\xED\x15\x57\x5E\xF5\x8E\xAB\xD7\x71\x7C\xFD\x03\x85\xE2\x60\x69\xA8\x5C\x19\xDE\x54\xAD\xD5\x47\x36\xDF\x70\xE3\x96\x9B\x1A\x71\x9E\x35\xF3\xBF\x37\xBE\xCE\x1E\x11\xC7\x8F\x5B\xD0\x87\x8C\x89\xF0\x52\xAA\xF1\x7D\x29\x60\x53\x7A\x71\x48\x01\x82\x0D\xB7\x41\x1E\xB6\xC1\xD8\xDB\xF6\x9D\x08\x76\xC2\x46\xE8\xB0\xA7\xD9\x08\x33\xED\x1E\xBB\x0B\xA0\x0B\xBA\x54\x28\x07\x00\xD6\xC9\x77\x5B\xBA\x2E\x00\xDC\x04\x00\xFB\x3C\xCF\x03\xE9\x7E\x11\x00\x04\xFC\x6F\x8D\xFD\x08\x77\x17\x00\x3C\x1B\x0A\xFB\x3C\x00\xFC\x22\x84\xDB\x07\x00\xAF\x85\xE2\x3B\x08\x00\x47\x43\x38\xF1\x22\x60\x8B\x0C\x47\x2E\x02\xCC\xA4\xCC\x9E\xE0\x83\xC8\xBC\x2A\xC0\x05\x32\xFC\x2C\x64\x98\x24\xBF\x85\x3B\x1B\x01\xCE\x0B\x85\xBD\x00\x01\x96\x86\x70\x97\x21\xC0\x0D\x21\xDC\x8D\x08\x04\xE2\xB9\x5D\xC6\xB9\x05\x01\xB6\x86\xFC\x8D\x22\x10\x3C\x73\x94\xFD\x08\x77\x0C\x01\x04\x7C\x4B\x96\x43\xB8\xEF\x46\x06\xF1\xFC\x48\xE2\xDF\x83\x00\xB7\x85\xE2\x7B\x2F\x02\x81\x78\x7E\x20\xFD\xDD\x8E\x00\x77\x84\xFC\xBD\x0F\x01\xEE\x94\xFE\x9E\x92\xFE\xDE\x8F\x00\x77\x85\xFC\x7D\x00\x81\x40\x3C\xAB\xA5\xBF\x0F\x22\x83\x78\xBE\x27\x71\x77\x23\x83\x78\xBE\x2F\x71\x1F\x42\x80\x0F\x87\xE2\xFB\x08\x02\x41\x30\xDD\xBF\x47\x06\xF1\xFC\x50\xE2\xFE\x01\x19\xDC\x40\x9F\xFA\x47\x64\x10\xCF\xD3\x12\xFF\x51\x64\x10\xCF\x1E\x89\xFB\x27\x04\xF8\x58\x28\xDD\x8F\x23\x10\xDC\x27\xFD\x08\xF7\x1E\x64\x08\xC6\xF7\x09\x64\x10\xCF\x5E\x89\xFB\x24\x32\xBC\x47\xD5\x3B\x00\xDC\x8B\x0C\x10\xE8\xC3\xDB\x10\xE0\x53\xA1\x74\xEF\x47\x20\x10\xCF\x4F\xA4\xBF\xED\x08\xF0\x40\xC8\xDF\x0E\x04\x82\xA0\xBF\x4F\x23\xC0\x43\x21\x7F\x9F\x41\x20\x08\xFA\xFB\x2C\x02\x3C\x1C\xF2\xF7\x08\x02\x7C\x4E\xFA\xFB\xB1\xF4\xF7\x79\x04\xF8\x52\xC8\xDF\x97\x11\x08\xC4\xF3\x53\xE9\xEF\x2B\x08\xF0\xD5\x90\xBF\x47\x11\xE0\xB1\x10\xEE\x71\x04\x82\xF3\x65\x38\xE1\x7E\x1B\x19\xC4\xA3\xF1\xF0\x83\xEF\x20\x03\x29\x3C\x93\x7E\xBF\x8B\x0C\x47\xE5\xD8\x10\xBF\x3D\x81\x00\x4F\x84\xC2\x3E\x89\x0C\xC1\xB0\xFF\x0B\x19\x82\x61\xBF\x87\x00\xDF\x0B\x85\xFD\x3E\x32\x04\xC3\xFE\x3B\x32\x04\xC3\x3E\x85\x00\x3F\x0B\x95\xED\xE7\x08\x04\x8F\x48\x7F\xC2\xFD\x05\x02\xFC\x29\xE4\xEF\x25\x04\x82\x60\xBA\x2F\x23\x43\x30\xDD\x3F\x23\x43\x30\xDD\x57\x10\xE0\xD5\x50\x7C\xAF\x21\x10\x88\xE7\x5E\xE9\xF7\x75\x64\x10\xCF\x93\x12\x77\x10\x01\x32\x5A\x73\x58\x5B\x03\x02\xF1\x6C\x95\xFE\x72\x1A\xC0\xD9\x21\x7F\x73\x35\x20\x10\xCF\x59\x67\xB2\x7B\xA1\x06\x70\x51\xC8\xDF\x3C\x0D\x08\xC4\x73\x9D\x8C\xEF\x62\x8D\x41\x3C\x1D\x32\xEC\x25\x1A\xC0\x7C\x0D\xE0\x12\xF5\x7D\x26\x80\xA3\x01\x2C\x08\xC5\xB7\x50\x03\x02\xF1\xCC\x93\xF1\x5D\xAA\x31\x88\x67\x91\xAC\xAB\x45\x1A\x83\x78\x96\x48\xDC\x62\x0D\x60\x75\x28\xBE\x6E\x0D\x08\x32\x32\x5D\xE1\xBE\x5D\x63\x68\x97\x38\xE1\x5E\xAE\x31\x9C\x2A\x71\xC2\x5D\xA3\x31\xCC\x90\xF9\x10\xEE\x5A\x0D\x40\xC0\x6C\x89\x13\xEE\x95\x1A\xC0\x55\xA2\x0E\x25\x4E\xB8\x57\x6B\x00\x02\xE6\x48\x9C\x70\xAF\xD1\x00\x04\x9C\x2B\x71\xC2\xBD\x56\x03\x10\xB0\xFA\x53\x9C\xAE\x70\xD7\x6B\x0C\xC1\xF8\x5C\x0D\x40\xC0\x72\xE9\x4F\xB8\xBD\x1A\xC3\x2C\xB5\x3E\x79\x9E\x97\xD7\x00\x04\x74\x48\x7F\xC2\xDD\xA8\x31\x5C\x2A\x71\xC2\x1D\xD0\x18\x66\xCA\xB0\xC2\x2D\x68\x00\x02\x3A\x25\x4E\xB8\x45\x0D\xA0\x18\x0A\x3B\xA8\x31\xBC\x3E\x8D\x71\xC2\x2D\x69\x0C\x8E\xF4\x27\xDC\x8A\xC6\x10\x8C\x6F\x93\x06\x20\xE0\x4D\x19\x56\xB8\x55\x8D\xE1\x2C\xE9\x4F\xB8\x23\x1A\x80\x80\x33\x25\x4E\xB8\xEF\xD2\x00\x04\xFC\x6F\x19\x56\xB8\x63\x1A\xC3\xE9\xD2\x9F\x70\xDF\xA3\x01\x08\x58\x28\xF3\x22\xDC\x5B\x34\x86\xA0\xBF\xDB\x35\x00\x01\x67\x4A\x7F\xC2\xBD\x43\x63\x08\xFA\x7B\x9F\x06\x20\xE0\xEB\x12\x27\xDC\x3B\x35\x80\xF7\x6B\x00\x67\x48\x9C\x70\xEF\xD2\x00\x04\x7C\x55\xE2\x84\xFB\x61\x0D\x40\xC0\x69\x12\x27\xDC\x4F\x68\x00\x02\x4E\x94\xE9\x0A\xF7\x93\x1A\xC3\x04\x89\x13\xEE\x22\x9D\x61\xAD\xEC\xDF\xC2\x1D\xD6\x01\x6A\x7A\x73\x1F\xDF\xAC\x03\xDC\x10\xC2\xBD\x53\x07\x78\x97\xDE\xBC\x1E\x8D\xEA\x0C\xE2\xA9\x4B\xFC\x7B\x75\x06\x2A\xAB\xC4\xDD\xA1\x03\xDC\x29\x71\xA7\x49\xDC\x5D\x3A\x83\x78\xE6\x4B\xDC\x07\x74\x80\x0F\x4A\xDC\x25\x12\xF7\x21\x1D\xE0\x5F\x24\x4E\xD1\x66\xF7\xE9\x00\x3B\x43\xB8\x4F\xEB\x0C\x3F\x91\xF5\x22\xDC\x87\x74\x80\xCF\xEA\x00\x3F\x95\x38\xE1\x3E\xA2\x03\x7C\x43\x6F\xA6\xE1\xBE\xA9\x03\x08\x78\x41\xE2\x84\xFB\x2D\x1D\xE0\xFB\x21\x7F\xFF\xAE\x03\x08\xD8\x25\x71\xC2\x7D\x4A\x07\xF8\x81\x88\x53\xE2\x84\xFB\x43\x1D\xE0\x87\x32\x7F\x31\x99\xBF\xDD\x3A\xC3\x37\xA5\x3F\xE1\xEE\xD1\x01\x04\x3C\x21\x71\xC2\xDD\xAB\x03\x08\xD8\x23\x71\xC2\x7D\x56\x07\x10\xF0\x3D\x89\x13\xEE\x73\x3A\x80\x80\x83\x6A\x6E\xF6\x3C\xEF\x79\x1D\xE0\x4F\xA1\x76\x3B\xA0\x03\xC1\x83\xD2\x9F\x70\x5F\xD2\x01\x04\x3C\x2C\x71\xC2\x7D\x59\x07\x10\x10\x95\xF9\x15\xEE\x9F\x75\x86\xBB\xA4\x3F\xE1\xBE\xA2\x03\xBC\x22\xCB\xF6\x6D\x89\x7F\x55\x67\xD8\x26\xBF\x85\xFB\xBA\xC8\x5B\x28\x2F\x87\x74\x20\x10\xCF\x21\xE9\xF7\xB0\x0E\x70\x24\xE4\xEF\x4D\x1D\xC0\x93\xFE\xD4\x9A\x02\x06\x40\xAB\xC1\xB8\x6E\x99\xC7\xB4\x01\x30\xD3\x68\xEE\x07\x5D\x06\xC0\x6A\xA3\xB9\xDD\xBA\x0D\x80\x1E\xA3\xB9\xBC\xEB\x0D\x80\x77\x1B\xCD\xE9\xDE\x69\x00\x3C\x1E\xC2\xED\x32\x80\x40\x3C\xAD\x32\x8D\x6F\x18\x00\x3F\x08\xF9\xFB\xA1\x01\x04\x2F\xC9\x34\x84\xBB\x5B\xE4\x2F\xD2\xEC\x6F\x56\x04\xE0\xCA\x88\xCC\xAB\x8C\xCF\x8D\x00\xBC\x37\x02\xB0\x5B\x86\x15\xEE\xB6\x34\xC0\x77\xD2\xFC\xFB\xFA\x76\x76\x9F\x48\x33\x04\x71\x4F\xA5\x19\x82\xB8\xDD\x69\x80\xC3\x69\x80\x5D\x16\xF8\xCF\x9B\x69\x00\x2F\x84\xDB\xD6\x06\xF0\xA7\x36\x19\xE6\xA3\xEC\x1E\x68\x03\x78\xB5\xAD\xB9\xEF\x1E\x6C\x03\x78\xB3\xAD\xB9\xAF\x8D\xB5\x03\x08\xF8\xF0\xFF\x66\x9C\x70\xDF\xDD\x0E\x20\xE0\x23\x12\x27\xDC\xF7\xB4\x03\x08\xB8\x47\xE2\x84\x7B\x4B\x3B\xC0\xAD\xED\x00\x9F\x94\x38\xE1\xDE\xD6\x0E\x20\xE0\x13\x12\x27\xDC\xF7\xB6\x03\x08\xF8\x57\x89\x13\xEE\xED\xED\x00\x02\x7E\x2A\x71\xC2\xBD\xA3\x1D\x40\xC0\x37\xDF\xC7\xF9\x15\xEE\xDD\xED\x00\x5F\x93\xF5\x31\xFF\x15\xF6\xFB\x58\x3B\xC0\xE3\x21\xDC\x96\x29\x0C\xC6\x9D\x8C\x17\xEE\xBB\xA6\x30\xFC\xB6\x85\x71\xC2\xFD\xC0\x14\x86\xF3\xA5\x3F\x72\x4F\x05\xF8\x87\x53\x9B\xDB\xF7\x9F\x4F\x05\x82\xEF\xC8\xBA\x12\xEE\x27\x4F\x05\xF8\xE4\xA9\x1C\xCE\xF9\x95\x1C\x23\xA7\x02\x78\xA1\xB0\x90\x01\x88\x66\x1A\xF5\x2E\xDC\x58\x06\xA0\x35\x23\xDB\x41\xC6\x99\xCE\x00\x9C\x18\xF2\x37\x29\x03\x30\x25\xE4\xCF\xCE\x00\x9C\x11\xF2\xD7\x91\x01\x98\x19\xF2\xD7\x95\x01\x38\x2F\xE4\xEF\xFC\x0C\xC0\x25\x21\x7F\xF3\x33\x00\x8B\x42\xFE\x96\x66\x00\x56\x86\xFC\xBD\x3D\xC3\x10\xF4\xB7\x26\xC3\x10\xC4\x5D\x91\x61\x08\xE2\xAE\xCA\x30\x04\x71\x57\x67\x18\x82\x69\x5C\x93\x61\x08\xE2\xAE\xCB\x30\x04\x71\x3D\x19\x86\x20\x6E\x7D\x06\xA0\x3F\x94\xC6\x40\x06\xA0\x12\xF2\x37\x9C\x01\xD8\x94\x01\xB8\x4C\xFA\x13\x6E\x35\x03\x30\x92\x01\xB8\x52\xE2\x84\xBB\x39\x03\x70\x43\x06\xA0\x4F\xE2\x84\x7B\x63\x06\x60\x4B\x06\x60\x4C\xE2\x84\x7B\x53\x06\xE0\x9D\x19\x80\x61\x89\x13\xEE\xCD\x19\x80\x77\x65\x00\xB6\x4A\x9C\x70\xC7\x32\x00\xB7\x87\xF2\x77\x47\x06\xE0\x83\xA1\xFC\xDD\x9D\x01\xF8\x68\xC8\xDF\x3F\x65\x00\xEE\x0D\xF9\xDB\x96\x01\xD8\x1E\xF2\xF7\x40\x06\xE0\xB3\x21\x7F\x0F\x67\x00\x1E\x09\xF9\xFB\x7C\x86\x21\x2E\x71\xC2\xFD\x4A\x06\xE0\xAB\xA1\xB0\x5F\xCB\x00\x7C\x5D\xE2\xBE\x24\x71\x8F\x66\x18\xC4\xF3\xBA\xC4\xFD\x5B\x86\xE1\xA7\xBF\x96\xE3\xF7\xD7\x9E\xF7\xAD\x0C\xC0\xB7\x42\x69\x3C\x99\x01\xF8\xBE\x0C\xAB\xD6\xAE\x7F\xCF\x30\x04\xE3\xDB\x9D\x01\xD8\x13\xCA\xF3\xF3\x19\x80\x1F\x87\xF2\xF7\x13\x91\xA6\xC4\xDD\xA3\xD6\x86\x0C\xC0\x0B\xA1\xB0\xFF\x91\x61\x08\xAE\x83\xFF\x99\x01\x78\x31\x14\xDF\xEF\x32\x00\xBF\x97\xB8\xBB\x25\xEE\x0F\x19\x06\x08\xAC\x6F\x7F\xCE\x30\x04\xCB\x76\x30\x03\x70\x48\xFA\x1B\x53\xEB\x60\x06\xE0\x88\xC4\xBD\x47\xE2\xDE\xC8\x30\x04\xCB\x7B\x7A\x96\x41\x3C\xF7\xC9\xB9\xE4\xCC\x2C\x83\x78\x9C\x5F\x4A\x9A\x37\xCB\x40\x6D\x23\x71\xB3\xB3\x0C\xE2\x91\xD3\x20\xAC\xCA\x32\xFC\x46\xC6\x2F\xDC\xF5\x59\x80\x8A\xF4\x27\x97\x16\x18\xCE\x02\x8C\x66\x01\x0E\x48\x7F\xC2\xBD\x25\x0B\x70\x2B\xF9\x6B\xCC\x61\x5F\x9A\x0A\xF0\xC3\xA9\x1C\xE6\x14\x19\x76\xF7\x54\x80\x17\xA7\x02\xFC\x56\x86\x25\x77\x3A\xC0\x8C\xE9\xFC\xBB\x5A\x07\xBB\xA6\x03\x5C\x3F\xBD\x79\x1D\x5C\x3F\x1D\xC0\x9D\xDE\x9C\xC6\x86\xE9\x40\x40\xF5\xF9\x2C\xFB\xED\x9D\xCE\x40\xE9\xBE\xC4\xB8\xBE\xE9\x0C\xE2\x39\x59\xFA\xCB\x4F\x67\xD8\xBB\x97\xBF\x85\xBB\x71\x3A\x80\x80\xE7\x25\x4E\xB8\xFD\xD3\x01\x4A\xA1\x74\x87\xA6\x03\x01\xD5\x93\xF4\x5B\x9E\xCE\x20\x1E\x5D\xA6\x51\x99\xCE\x20\x9E\x17\xA4\xBF\xE1\xE9\x0C\xE2\xF9\x95\xC4\x55\xA7\x03\xD4\x42\x69\x8C\x4C\x07\xD8\x1C\xC2\x6D\x9D\x0E\x30\x2A\xC3\x7E\x43\x86\x1D\x9B\x0E\xF0\xEB\x90\xBF\xDF\x4F\x07\xD8\x1F\xC2\xBD\x3C\x1D\xE0\xCF\x21\x1C\x74\x02\x9C\xD6\x09\xB0\x4D\x8E\x41\xE1\x9E\xD1\x09\x70\x46\x08\xD7\xD9\x09\xD0\x19\xC2\xCD\xBF\x1F\x60\xE8\xFE\xE6\xF8\xC6\xEE\x07\xF8\xE7\x10\x2E\xB7\x1D\x60\xE6\xF6\x66\xDC\xEC\xED\x00\x95\x10\x6E\xCB\x76\x80\x9B\x43\xB8\x77\x6D\x07\x02\x1A\x03\x23\x9C\xF6\xD6\xED\x00\xB7\x87\xFC\xBD\x7F\x3B\xC0\x5D\x21\xDC\xDF\x6D\x07\x02\x6A\xC7\x75\x72\x9E\xDC\x0E\xF0\x91\x90\xBF\xBF\xDF\x0E\x04\x7E\xDF\x03\x80\x7F\xDC\x0E\xB0\x23\xE4\xEF\xC1\xED\x40\x20\x9E\x47\x65\x7C\x3B\xB7\x33\x88\xE7\x11\x89\xFB\xF4\x76\x06\xF1\x7C\x51\xE2\x1E\xDA\xCE\x20\x9E\xC7\x25\xEE\x33\xDB\x19\x82\xF1\x3D\xBC\x9D\x41\x3C\xFB\x25\xEE\x91\xED\x0C\xE2\x79\x56\xE2\x3E\xB7\x9D\x41\x3C\xBF\x97\xB8\xCF\x6F\x67\xA0\xF6\x91\x34\xF3\x17\xB6\x03\x3C\x1E\x2A\xC7\x37\xB7\x03\x7C\x2B\x84\xFB\xF6\x76\x20\x50\x63\x4D\xB8\xDF\xD9\xCE\x20\x9E\xC7\x64\x1A\xDF\xDD\xCE\x20\x9E\x27\x65\x7B\xAC\xD9\xC9\xB0\xFE\x0D\xB9\xA6\xBE\xE1\x79\xC3\x3B\x01\x1E\xDF\x09\xD0\x35\x20\xE9\x8A\x01\xCF\xCB\x7A\x00\x73\x99\x82\xF7\x69\x74\xC7\x03\x58\xE7\x35\xD3\xE8\x60\x20\x9C\x61\xF0\x81\x53\x87\xF4\xD7\x61\x20\xAC\x36\x10\x9E\x97\xFE\x84\xFB\xB0\x81\xF0\x74\xC8\xDF\xF3\x06\xC2\x91\x90\xBF\xB1\x24\xC2\xE7\x92\xEC\x4F\xED\x2F\x77\x25\x11\x5E\x4E\x62\xD3\xFE\x6D\xDB\x24\x84\xC7\x27\x61\x53\xFE\x76\x4D\x42\xF8\xE5\x24\x6C\xCA\xDF\xFC\x32\x42\x4F\xB9\xD9\xDF\xFA\x32\xC2\x68\xB9\xD9\x1F\xBC\x88\x90\x7D\x91\xFD\xE5\xA4\xBF\xDC\x8B\x08\x0B\x5F\x44\xF8\x85\xF4\x27\x5C\x43\xAE\x37\x49\x09\x72\x8B\x41\x8F\xD8\xFB\x9E\x29\x68\x1C\x00\x78\x27\x1C\xFB\x84\x7F\x7F\x17\x00\xC8\xE9\x01\xAE\x1B\xC7\x3F\x3F\x07\xE4\x96\x7A\xAA\xAC\x8E\xAB\xD9\x9D\xFF\x41\x76\xEF\xF8\x16\xBB\xC5\x83\xE4\x8E\xDD\x3A\xC3\xA1\x7E\x31\xA1\x97\xDC\x5B\x9F\xFB\x28\xB9\xF9\xA7\x9E\x72\xEE\x96\x31\x62\x00\x4A\x7B\x10\xC6\xC3\x9F\xFF\x23\x84\x0F\x1D\xC7\x7F\xF0\xD1\xC4\xFC\x09\x00\x11\xB9\xE6\x8A\x6D\x4A\x4A\xF6\x54\xB1\x1D\x39\x09\x00\xA6\x00\x91\xC8\x74\x86\x30\x4D\xAC\x71\x00\x30\x13\x00\xCE\x05\x80\x0B\x01\x60\x1E\x00\x2C\x94\xE7\x77\xCB\x24\xEF\x60\x8D\x28\xA9\x3C\xCB\xCF\x03\x40\x3F\x00\x0C\x02\xC0\x10\x00\x6C\x02\x80\x51\x00\xB8\x05\x00\xC4\xD6\xE1\xFD\x00\xF0\x0F\x00\x20\xB6\x42\x9F\x90\xE7\xF5\xA2\xDB\x3F\x24\xC6\x99\xE4\x25\x3D\x2E\xE6\x60\x31\x4E\xC4\x7E\x4C\x9E\xE1\xE3\xFF\x83\xF9\xDD\x32\x4E\x9E\x3F\x78\x9C\x7C\xEF\x08\xE5\xFD\xEB\xE3\xE4\x7F\x4F\xA0\x0D\x44\xBE\x27\x02\xC0\x89\x00\xF0\x36\x59\x86\x49\x81\xDF\x4F\x96\x6B\xFA\x64\x49\x3F\x4C\xE1\x2D\xD0\x31\x8F\xEA\xF7\xFF\x43\xBA\x92\x1C\xF0\xCF\x7E\xD4\xB9\xD0\x19\xD2\x55\xE3\x78\x5A\x28\x9E\x33\x65\x9D\x89\xBE\xDD\x09\x00\x33\x64\xFD\x05\x7F\x17\xF3\xF6\x2C\x41\xDB\xC8\xDF\x4F\x25\xDC\x05\x10\x87\x04\x24\x81\x35\xD7\x8B\x6F\x07\xD6\x41\x0F\xF4\x80\x0B\x37\xC1\x7F\xA6\x90\xDA\x2C\x7D\x2E\x36\x71\x22\x6F\x3F\x01\xE9\x8C\x3C\x8C\xBF\x45\xE3\xEF\x89\xE7\x22\xE8\x01\xFC\x81\x34\xFB\x0F\xE3\xEF\x02\xF6\x6F\x9F\x8B\x4D\xE3\xFA\x8F\xD2\x7F\x18\x6F\xCA\x3C\x8B\x3C\x8A\xFC\x29\x57\xB4\x74\x1C\xE2\x54\x06\xD1\x93\x46\x61\x94\xFC\x65\x61\x2B\xFD\x6E\xCB\x5D\x43\x16\x66\xC2\x5C\x98\x0F\xD7\xC0\x7A\x78\x27\x6C\x25\x7E\x2A\x19\x11\x93\x5C\xD2\x70\xF9\xF9\x7B\x31\xB8\xC0\xAC\xE6\xB7\xA5\x39\xBF\xDF\x0E\x95\xC3\x92\xF9\x0D\xE3\xB7\x4B\xFF\xBB\xCF\x45\xD0\x02\xF8\x7B\xA4\xFF\x30\xFE\x0A\xE9\xFF\xF9\x50\xBD\x5E\x26\xFD\x87\xF1\xF3\xA5\xFF\x9F\x85\xE2\x39\x57\xFA\x0F\xE3\xCF\x92\xFE\x7F\x13\xC2\xDB\xD2\x7F\x18\xFF\xCD\x56\xF6\xFF\x87\x50\xBA\x5F\x6E\x65\xFF\x61\x7C\x51\xC6\x7F\x20\x84\xEF\x91\xF1\x87\xF1\x7F\x90\xF1\xBF\x12\xC2\xBF\x20\xE3\x0F\xE3\xFF\x51\xFA\x3F\x18\xC2\xBF\x5F\xFA\x0F\xE3\x9F\x93\xFE\x61\x4E\x73\x3F\xFA\x77\xE9\x3F\x8C\x1F\x95\xF9\x4F\xCF\x69\xAE\x87\xBA\xCC\x7F\x18\x8F\xD2\xFF\xA4\x39\xCD\xE9\xBE\x26\xE3\x0F\xE3\x3F\x22\xFD\xDB\xA1\x74\xDF\xA7\xFA\x7B\x08\xFF\x69\x99\xFF\xAE\x39\xCD\xFD\x6A\x9B\x8C\x3F\x8C\x6F\x87\xE6\xE7\xF3\x3A\xC2\xA3\x3A\xC2\x8F\x93\x08\x67\x69\x08\x67\x27\x11\xBE\x9C\x46\x78\xFB\x49\x08\xD7\x9C\x84\xF0\x8D\x34\x82\xAB\x23\xBC\xDD\x42\xB8\x4D\x47\xF8\x84\x8E\xF0\xD8\x09\x08\xBB\x22\x8D\x5C\x8B\xB9\xE3\x02\x00\x98\x1B\x98\x3B\x2E\x0C\xA4\x71\x91\x9C\x9F\x2F\x96\xEB\xED\x7C\x29\x77\x10\xFC\x7D\x81\x9C\xBF\x2F\x95\x7C\xA4\xC5\xA1\xDF\x97\xC8\xF0\x4B\xE5\xFC\xAE\xE6\x4A\x25\xBF\x60\xCB\x79\xBE\x28\x69\x87\x41\x39\xD7\x3F\x6E\x03\x94\xC4\xFE\x40\xE2\x6B\x00\x20\x40\x90\x33\xF5\x80\x9C\x43\x50\xBE\x41\xC9\x35\xD8\x01\x79\x06\xF1\xFE\x4B\x09\x8F\x4F\x61\x99\x86\xDF\xC8\xB0\xFF\x21\xF6\xBA\x22\xCF\x36\xC0\x6F\x03\xB2\x0E\x41\x19\x07\x2F\x28\xDB\x20\x65\x1A\x44\x0D\x2A\x19\x05\xF1\xAE\x64\x13\x84\x77\x25\x93\x20\xF0\x4A\x16\xE1\x76\xCF\xF3\x94\x0C\x82\xF0\x13\x94\x3D\x08\xCA\x1C\x28\x59\x83\x1F\x05\x64\x0C\x44\x3C\x4A\xB6\xE0\x07\x01\x99\x02\x11\x8F\x92\x25\x78\x2A\x20\x43\x20\xF0\x4A\x76\x60\x75\x40\x66\xE0\x7B\x01\x59\x81\xEF\x07\x64\x04\x84\x7F\x25\x1B\xF0\x54\x40\x26\xE0\x87\x21\x59\x00\x25\x03\xF0\x74\x80\xF7\xBF\x27\xC0\xF3\x17\xF9\x0C\xF2\xFA\x15\x8F\xFF\xE9\x00\x6F\x7F\x6F\x88\xA7\xAF\x78\xF9\xCF\x06\x78\xF8\x22\x1E\xC5\xBB\xFF\x49\x80\x67\x2F\xF2\xA9\x78\xF5\x3F\x09\xF0\xE8\x85\x7F\xC5\x9B\xFF\x49\x80\x27\x2F\xFC\x2B\x5E\xFC\x8F\x03\x3C\x78\x81\x57\xBC\xF7\x9F\x06\x78\xEE\x22\x1E\xC5\x6B\x17\xEF\x41\x1E\xBB\xE2\xAD\x87\x79\xEA\x41\x5E\xBA\xE2\xA1\x0B\xBC\xE2\x9D\x63\x88\x67\xAE\x78\xE5\x61\x1E\x79\x90\x37\xAE\x78\xE2\x02\x1F\xE4\x85\x2B\x1E\xB8\x08\xAB\x78\xDF\xC2\x8F\xE2\x79\x63\x88\xD7\xAD\x78\xDC\x02\xAF\x78\xDB\xF7\x7A\x9E\xA7\x78\xDA\x4F\x8A\x7E\x2E\x79\xD9\x34\x6F\x49\x1E\xF6\x56\xCF\xF3\x14\xEF\x5A\xE0\x15\xCF\xFA\xAC\x33\x1B\xBC\x6A\x91\xAE\xE2\x51\x5F\xE7\x79\x9E\xE2\x4D\x77\x9C\xD9\xCC\x93\x56\xBC\x68\xE1\x5F\xF1\xA0\xE7\x79\x9E\xA7\x78\xCF\x8B\x02\x3C\xE7\x25\x01\x5E\xB3\x48\x37\xC8\x63\x0E\xF2\x96\x83\x3C\xE5\x20\x2F\x39\xC8\x43\x0E\xF2\x8E\x83\x3C\xE3\x20\xAF\x38\xC8\x23\x0E\xF2\x86\x83\x3C\xE1\x20\x2F\x38\xC8\x03\x0E\xF2\x7E\x83\x3C\xDF\x20\xAF\x37\xC8\xE3\x0D\xF2\x76\x83\x3C\xDD\x20\x2F\x37\xC8\xC3\x0D\xF2\x6E\x83\x3C\xDB\x20\xAF\x36\xC8\xA3\x0D\xF2\x66\x83\x3C\xD9\x20\x2F\x36\xC8\x83\x0D\xF2\x5E\x83\x3C\xD7\x20\xAF\x35\xC8\x63\x0D\xF2\x56\x83\x3C\xD5\x20\x2F\x55\xF1\x50\x45\xDB\x29\xDE\xA9\x78\x0F\xF2\x4C\x15\xAF\xB4\x1E\xE0\x91\x9E\x1E\xE0\x8D\x9E\x16\xE0\x89\xCE\x0F\xF0\x42\x2F\x09\xF0\x40\x6D\xC9\xFB\x14\x20\xF6\x15\xFF\x2A\xF9\xA0\x76\x88\xFF\x19\xE4\x7B\x3E\xA2\x03\x3C\x22\xF9\x98\x9F\xD3\x01\x04\x9C\x4A\x6B\x28\xC0\x17\x24\xFE\x8B\x3A\xC0\x17\x65\xBA\x5F\xD2\x01\xBE\x2C\xF1\x5F\xD1\x01\x04\x08\xBA\xFF\xAB\x3A\x43\xA4\x1D\xE0\x6B\x3A\xC3\x1C\xB1\xA7\xD0\x19\x84\xFF\x47\x75\x00\x01\x87\xDE\xF0\xBC\xC7\x74\x80\xC7\x25\x7E\x97\x0E\x20\x40\xEC\x29\xBE\x21\xF9\xAF\x82\x6E\x57\x7C\x57\x51\x57\xDF\xD2\x01\xBE\x23\xFD\x7F\x57\x07\x10\xD0\x2A\xF6\x28\x3A\xC0\x93\x12\xFF\xBF\x74\x00\x01\xD7\x4D\x01\xF8\x5E\x80\x3F\x1B\xE4\xCB\x06\xF9\xB1\x8A\x0F\x1B\x0B\xF1\x5F\x15\xDF\x55\xEC\x4F\x82\xFC\xD6\x20\x9F\x35\xC8\x5F\x55\x7C\x55\xA2\x01\x03\xFC\xD4\x20\x1F\x35\xC8\x3F\x0D\xF2\x4D\x15\xBF\xF4\x5F\x3D\xCF\x0B\xF2\x49\x15\x7F\x54\xCC\x0F\x8A\x2F\x7A\xC8\xF3\x3C\xC5\x0F\x15\x69\x29\x3E\x28\xF1\x40\x25\xFF\xB3\x3B\xC0\xF7\xB4\x25\xBF\x73\x96\xE4\x77\xCE\x36\x00\x04\xAC\x9A\x04\x70\xB6\xC1\x20\xF0\xE7\x18\x00\x02\x56\x4E\x02\x38\xD7\x00\x98\x27\xF1\x17\x1B\x00\x02\x2E\x9D\x04\x70\x89\x01\x30\x5F\xE2\x1D\x03\x60\x81\x80\x49\x00\x0B\x0D\x80\x65\x12\x7F\x99\x01\x20\xE0\xA2\x49\x00\xCB\x03\x7C\xD6\x20\x7F\x75\xBD\x01\xB0\xC1\xE0\xFC\xF7\x1A\x0C\x53\x27\x01\xF4\x49\x7E\xAB\xC0\x2B\x3E\xAB\x78\x57\xFC\xD5\xD6\x00\x5F\x55\xD4\x49\x90\x9F\xAA\xF8\xA8\xC2\xBF\xE2\x9F\x76\x85\xF8\xA6\x8A\x5F\xBA\xBE\xBD\xC1\x27\x15\xEF\x8A\x3F\x2A\xDE\x83\x7C\xD1\x20\x3F\x54\xF1\x41\x77\x7F\xB4\xC1\xFF\x8C\x85\xF8\x9E\x41\x7E\x67\x90\xCF\x19\xE4\x6F\xDE\xD2\x0E\x70\x8B\xE4\x6B\xDE\x2A\x79\x9C\x22\xCF\x41\xDE\x66\x90\xA7\x19\xE4\x65\x06\x79\x98\x8A\x77\x39\xFF\x15\xCF\x53\x3C\x4B\xF1\x1E\xE4\x55\x06\x79\x94\x4D\xBC\xC9\x53\x01\xD6\x9F\xCA\xE9\xBA\xA7\x32\x08\x1A\x77\x83\xE4\x55\x0A\x7C\x90\x47\xA9\x78\x93\xCE\xAF\x3C\x4F\xF1\x24\x89\x4A\x0E\xF0\x22\x15\x0F\x52\xD4\x43\x90\xF7\xA8\x78\x8E\x02\x1F\xE4\x35\x2A\x1E\xA3\xC0\x07\x79\x8B\x8A\xA7\x28\xF0\x41\x5E\xA2\xE2\x21\x0A\x7C\x90\x77\x18\xE4\x19\x06\x79\x85\x41\x1E\xA1\xE2\x0D\x8A\xB0\x8A\x27\x28\xDE\x15\x2F\x50\xBC\x2B\x1E\xA0\x78\x0F\xF2\xFE\x14\xCF\x4F\xE0\x83\xBC\xBE\x20\x8F\x2F\xC8\xDB\x0B\xF2\xF4\x82\xBC\xBC\x20\x0F\x2F\xC8\xBB\x53\x3C\x3B\x11\x7F\x90\x57\xA7\x78\x74\x02\x1F\xE4\xCD\x29\x9E\x9C\xC0\x07\x79\x71\x41\x1E\x9C\xE2\xBD\x09\x3F\x8A\xE7\xF6\x25\x31\xF7\x4A\x5E\xDB\xEB\x9E\xE7\x29\x1E\xDB\xED\x21\xDE\x9A\xE2\xA9\x89\xB9\x4B\xF1\xD2\x84\xFF\x20\x0F\x4D\xF1\xCE\x44\xFC\x8A\x67\x76\x8F\xE7\x79\x41\x5E\x59\x90\x47\xA6\x78\x63\xC2\xBF\xE2\x89\xDD\x2D\xF6\xD0\x92\x17\x26\xE6\xB4\x20\x0F\x4C\xF1\xBE\xC6\xC4\x5C\x27\x79\x5E\xEF\xF1\x3C\x4F\xF1\xBA\x44\x7E\x14\x8F\xEB\x96\x5F\x79\x9E\xE2\x6D\x65\x7F\xE9\x79\x8A\xA7\xF5\xF1\x5F\x7A\x9E\xE2\x65\xB5\x87\x78\x58\x8A\x77\x95\x0E\xF1\xAC\x14\xAF\x4A\xCC\x2D\x8A\x47\x75\x4A\x98\x37\x25\x79\x52\x5D\x21\x5E\x94\xE2\x41\x89\x71\xA1\x78\x4F\xF1\x67\x3D\x4F\xF1\x9C\x4E\x79\xC9\xF3\x14\xAF\xE9\xE4\x67\x3D\x2F\xC8\x63\x0A\xF2\x96\x14\x4F\x49\xE4\x41\xF1\x92\x7E\xB3\xD7\xF3\x14\x0F\x49\x7F\xD6\xF3\x14\xEF\xE8\x85\xBD\x9E\xA7\x78\x46\xBF\xDA\xEB\x79\x8A\x57\x24\xF2\xA0\x78\x44\x22\x1E\xC5\x1B\xFA\xC6\x5E\xCF\x53\x3C\x21\xE1\x47\xF1\x82\x88\x4E\x96\x3C\x20\x1A\xD7\x01\xDE\x4F\x90\xE7\x13\xE4\xF5\xCC\xBF\x1F\xE0\xB2\xFB\xD9\xFF\xF2\xFB\x19\xE6\x6D\xF6\xBC\x15\x92\xF7\x23\xF0\x8A\xE7\x23\xDE\x15\xAF\x87\xF6\x86\x92\xC7\x23\xDE\x15\x6F\x47\xE4\x41\xF1\x74\xDE\x18\xF1\x3C\xC5\xCB\x11\x7E\x14\x0F\x47\xF8\x51\xBC\x9B\xE7\xD7\x79\x9E\xE2\xD9\x08\x3F\x41\x5E\x8D\xE2\xD1\x08\xBC\xE2\xCD\x3C\xBA\xCE\xF3\x14\x4F\xE6\x91\x75\x9E\xA7\x78\x31\x5F\x5C\xE7\x79\x8A\x07\xF3\xF8\x3A\xCF\x53\xBC\x17\xE1\x5F\xF1\x5C\xF6\xAF\xF3\x3C\xC5\x6B\x79\x76\x9D\xE7\x29\x1E\xCB\xEF\xD7\x79\x9E\xE2\xAD\x6C\xD3\x1B\x3C\x15\x91\xAE\xE2\xA5\xD0\x99\x99\xE4\xA1\x88\x7E\xA2\x78\x27\x8F\xAD\xF3\x3C\xC5\x33\x79\x72\xC4\xF3\x9E\xD8\x0E\xF0\x3D\x59\xC6\x57\xB7\x03\xBC\x26\xDF\x83\x3C\x94\x20\xEF\x44\xF1\x4C\xEC\x30\xAF\x44\xF2\x48\x3A\x42\xBC\x11\xC5\x13\xE9\x08\xF1\x42\x14\x0F\x64\x7E\x88\xF7\xA1\x78\x1E\x76\x88\xD7\xA1\x78\x1C\x76\x98\xB7\x21\x79\x1A\xB9\x10\x2F\x63\xA3\x3A\x4E\x79\x11\x61\xF9\x8B\x08\xDD\x2F\x22\x5C\xFD\x22\xC2\xF5\x2F\x22\xF4\xBC\x18\x38\x21\x3A\x09\xE1\x94\x93\x10\xA6\x9C\x84\x70\xD6\x49\x08\x5D\x27\x21\x5C\x72\x12\x02\x5C\x8A\xB0\x78\x31\x02\x98\x86\x69\x9A\x96\x99\x32\x4F\x31\xDB\xCD\x76\xF3\x54\xF3\x54\xD3\x36\x2F\x31\x1D\xF3\x32\xF3\x4A\xB3\x62\x6E\x32\x7F\x66\xFE\xC2\xF4\xCC\xEE\xE8\x68\x74\x5B\xEC\x0B\xB1\x2F\xC5\x9E\x88\x3D\x1D\x7B\x21\xF6\xEB\x98\x17\xEB\x3E\xF2\x8D\x23\x4F\x1F\x99\xF7\x66\xF7\x9B\x1F\x7C\xF3\xC3\x6F\x3E\xF1\xE6\x81\x37\xDF\x7C\x73\xF8\x68\xFD\xE8\xE6\xA3\x6F\x1C\x55\xC9\xAF\x6F\x41\xD8\xDA\x82\x00\xFB\x11\xF4\xFD\x08\x91\xFD\x08\x99\xFD\x08\xD9\xFD\x08\xB9\xFD\x08\x53\x25\x9C\x21\x61\xDA\x7E\x84\xD9\xFB\x11\xCE\xD9\x8F\x70\xDE\x7E\x84\x0B\x24\x5C\x28\x61\x81\x84\x25\x12\x96\x49\x58\x2E\x61\xE5\x7E\x84\xD5\xFB\x11\xDE\xBE\x1F\xE1\xF2\xFD\x08\x6B\x25\x5C\x25\xE1\x6A\x09\xD7\x48\xB8\x4E\x42\x8F\x04\x77\x3F\xC2\x86\xFD\x08\x7D\x12\xFA\xF7\x23\x14\xF7\x23\x94\xF6\x23\x54\xF7\x23\xD4\xF7\x23\xDC\xB0\x1F\x61\xCB\x7E\x84\x9B\xF7\x23\x6C\x95\x30\xB6\x1F\xE1\x7D\xFB\x11\xDE\xBF\x1F\xE1\x9F\xF7\x23\xFC\xCB\x7E\x84\xFB\xF6\x23\x7C\x6A\x3F\xC2\x8E\xFD\x08\x3B\xF7\x23\x7C\x7D\x3F\xC2\x81\xFD\x08\x2F\xED\x6F\xB4\xCF\xAC\xC8\x95\x91\xAB\x23\x77\x46\xFE\x2E\xF2\xC1\x48\xDB\x91\x93\x8E\x80\x85\x70\xAE\x85\x70\x81\x85\x70\x89\x85\x00\x93\x97\x4F\xEE\x9E\x7C\xF3\xE4\x6D\xF7\xBF\x7E\x3F\x0C\x20\x9C\x5F\x6C\xE6\xDD\xEC\x2E\x22\xFC\xB1\x88\x70\xA0\x88\xF0\x6A\x11\x61\xD7\xE4\x3F\x4F\x7E\x63\xB2\x37\x59\xFD\x3E\x16\xBF\x25\x7E\x5B\xFC\xAE\xF8\x07\xE3\x77\xC7\x3F\x12\x7F\x20\xFE\x60\xFC\xE1\xF8\xE7\xE2\x9F\x8B\x7F\x29\xFE\xD5\xF8\xA3\xF1\x6F\xC7\x9F\x88\x3F\x19\xFF\x7E\xFC\x07\xF1\xE7\xE2\xCF\xC5\x7F\x16\xFF\x79\xFC\x97\xF1\x5F\xC7\x7F\x1B\x3F\x1A\x6F\x1C\x00\x22\xC4\xDA\x11\x12\xED\x08\x73\xDA\x11\xCE\x6F\x47\x58\xD4\x8E\xD0\xDD\x8E\x50\x6A\x47\xF8\x9D\xF6\x7B\x2D\x32\x6B\xE6\xAC\x6D\xB3\x1E\x9F\x45\xFE\xD3\x08\x2B\xD3\x08\x97\xA7\x11\x2A\x69\xA4\xF3\x4F\x01\xD0\xE1\x75\xC0\x29\x93\x4F\x39\xF5\x94\xCC\x29\xF3\x4F\x5A\x73\x52\xA3\x04\x19\x18\x85\x7B\xE1\x21\x78\x08\xC0\x8C\x50\x1F\xFC\xB9\xF9\x73\xB3\x35\xDA\x1A\xFD\x55\xEC\x57\xB1\x96\x49\x2D\x93\x2C\xBB\xD5\x3E\xD3\x9E\x61\xAF\xB7\xFB\xEC\x8D\x76\xC5\x86\xE7\xBD\x83\xDE\x51\xEF\xE8\x21\xEF\x88\xF7\x58\x1A\x41\xC0\x53\x12\xBA\xCE\x41\x38\xFF\x1C\x84\x6D\x8F\x22\xDC\xF7\x28\x42\x6D\x0F\xC2\x4D\x7B\x10\x10\x5A\x08\x6C\x68\x81\x51\x68\x21\x89\xC2\x37\xBD\x56\x92\xB2\x78\x53\x10\xA3\x13\x47\xDF\xF6\xF0\xA4\x57\x27\x6D\xD3\x10\x76\x6B\x8D\x3A\xEE\x8A\x20\xF4\x46\x10\x2A\x12\x54\x7E\xD5\xF3\x5F\xC9\xB7\xCA\x73\xB0\xFD\xFE\xCF\xF3\x2F\x9F\x13\x10\xCE\x39\x01\x61\xCE\x09\x08\x4B\x4E\x40\x80\x07\xE7\x3C\x38\xFF\xC1\x95\x0F\x76\x3F\x78\xF5\x83\xD7\x3E\xD8\xF3\xE0\xB6\xB6\x57\xDB\x0E\xB6\xBD\xD9\x36\xBC\xF3\xF1\x9D\x0F\xB7\x22\x7C\xBF\x15\xC5\x84\x76\xB0\x11\x41\xA8\x1E\x7C\x5E\xC6\x0E\xD8\x09\x5F\x85\xAF\xC3\xE3\xF0\x1C\x3C\x07\xAF\xC3\xEB\xF0\x55\xED\x97\xDA\x7F\x68\x2F\x6A\x7F\xD0\x3C\xAD\xAE\xD7\xF5\xAD\xFA\x56\xFD\x36\xFD\x36\xFD\x76\xFD\x76\x3D\x62\x46\xCC\xA4\x99\x34\x27\x9B\x93\xCD\x8C\x99\x31\xE7\x9B\xF3\xA9\x3E\x44\x5D\xF4\xC5\xF3\xF1\x4B\x5A\x2E\x69\xD9\xDB\xFA\x7C\xEB\x91\xF4\x91\xF4\xEF\xDF\xF6\xC7\xB7\x9D\x7B\xD2\x9C\x93\xB4\x49\xFA\xA4\xC8\xA4\xC8\xA4\xA7\xDB\x9F\x6E\x7F\xA1\xFD\x85\xF6\x17\xDB\xFF\xD0\xBE\xBF\xFD\xCF\xED\xAF\xB6\xBF\xDE\x7E\xB8\xFD\x70\x3B\xD8\x96\xDD\x42\x75\x37\x6C\xD7\xED\xAD\xF6\x98\xFD\x01\x7B\x9B\xFD\xB8\x0D\xD9\xD3\xB2\x67\x64\xA7\x65\xA7\x67\x67\x65\xCF\xCE\xAE\xCC\xAE\xCE\xF6\x64\xDF\x97\x7D\x7F\xF6\xEE\xEC\xE9\x53\xE7\x4F\xBD\x6C\xEA\xFA\xA9\xDE\x19\x30\xAD\x76\xD6\xE6\xB3\xFE\xE1\xAC\x8F\x9E\xE5\x9D\x05\x33\x2E\x9F\x71\x60\xE6\x91\x99\xD0\x65\x74\x99\x5D\x66\x57\xAC\xCB\xEE\xEA\xEA\x3A\xAF\xEB\xA2\xAE\x4B\xBA\xFE\xB9\xEB\x9E\xAE\x6D\x5D\xDB\xBA\x8E\x74\xBD\xD1\x75\xF7\xAC\x7B\x67\xED\x9A\xF5\xEB\x59\xF6\xEC\x9E\xD9\xA3\xB3\x7F\x38\xDB\x9B\xED\xCD\x7E\xC7\xD9\xDE\xD9\xBB\x56\x7A\x2B\x61\x7B\x76\xFB\x1D\xDB\xEF\xDC\xDE\xF5\xC0\x05\x0F\xCC\xD8\x31\x63\xC7\x0F\x77\xFC\x70\xC7\x35\x3B\xAF\xD9\x59\xDC\x39\xB8\xF3\xE2\x37\x2F\x79\x33\x7D\xF4\xE4\xA3\x5D\x47\x2F\x3F\xBA\xF6\xE8\xC6\xA3\x03\x47\x07\x8F\x8A\xB6\x46\xCF\xF6\x2E\xF4\xE6\x7B\xD7\x78\x79\x6F\xD8\x1B\xF6\x3E\xE9\xDD\xEB\xED\xF3\x7E\xEB\xFD\xA7\xB7\xDF\x3B\xE4\xBD\xC9\xFD\x00\x11\x34\x44\x88\x22\xC2\xD9\x88\x70\x1E\x22\x5C\x82\x08\x77\x23\xC2\x3D\x88\xB0\x1B\x11\xDE\x40\x84\x17\x34\x84\x23\x1A\xC2\xAF\x2A\x08\xBF\xAE\x34\xFA\x07\xEC\x46\x78\x75\x37\x02\xEC\x41\x38\x7D\x0F\xC2\xB4\x3D\x08\x1B\xF7\x20\x14\x65\xBF\xB9\x65\x0F\xC2\xAD\x7B\x10\xEE\xDA\x83\xB0\x63\x0F\xC2\x67\xF6\x20\xFC\xE7\x1E\x84\x7D\x3F\x42\xF8\xF3\x8F\x10\xE0\x69\x84\x2B\x9F\x46\x58\xFF\x34\xC2\x8D\x4F\x23\xC0\x33\x08\x6B\x9F\x41\xB8\xF2\x19\x84\x7B\x9E\x41\xF8\xE4\x33\x08\xF7\x3E\x83\xF0\x3F\x25\x7C\xEA\x19\x84\xFB\x9F\x41\xD8\xF1\x0C\xC2\xA7\x9F\x41\xF8\xCC\x33\x08\x5F\x7D\x06\xE1\xEB\x12\x1E\x7B\x06\xE1\x5B\xCF\x20\x7C\xE7\x19\x84\xC8\x5E\x84\xE8\x5E\x84\xC4\x5E\x84\xD4\x5E\x84\x89\x7B\x11\xDE\xB6\x17\xA1\x7D\x2F\xC2\xA9\x7B\x11\x2E\xD8\x8B\x70\xE1\x5E\x84\x8B\xF7\x22\xCC\xDF\x8B\x70\xE9\x5E\x84\xC5\x12\x2E\xDB\x8B\xD0\xBD\x17\xE1\xF2\xBD\x08\x9F\x7A\x16\xE1\x81\x67\x11\xBE\xFF\x1C\xC2\x0F\x9E\x43\xF0\x9E\x43\xD8\xF4\x07\x84\x2F\xFC\x01\x01\xFF\x88\x30\xEF\x8F\x08\x70\x00\xE1\xAC\x03\x08\x5D\x07\x10\x3E\x72\x00\x61\xDB\x01\x84\xCF\x1C\x40\x78\xE4\x00\xC2\xE3\x07\x10\xBE\x71\x00\xE1\x87\x07\x10\xF6\x1C\x40\x78\xF5\x00\x1F\x64\x3E\xF4\x12\xC2\x6F\x5F\x42\xF0\x5E\x42\xC0\x97\x11\xB4\x97\x11\xD2\x2F\x23\x5C\xF8\x32\xC2\xFC\x97\x11\x96\xBE\x8C\xD0\xFD\x32\xC2\xDB\x5F\x46\x58\xFF\x32\x42\xFE\x65\x3E\xE8\x7C\xEE\x35\x84\x7D\xAF\x21\xFC\xE1\x35\x84\x03\xAF\x21\xBC\xF1\x1A\x1F\x6E\xD6\x5E\x47\x18\x7B\x1D\xE1\xF9\xD7\x11\xF6\xBD\x8E\xF0\xFB\xD7\x91\x2E\xEE\x58\x07\x11\xD2\x07\x11\x96\x1C\x44\xE8\x3E\x88\x70\xF5\x41\x84\xF5\x07\x11\x6E\x3F\x88\x70\xF7\x41\x84\x87\x0E\x22\x3C\x7C\x10\xE1\x91\x83\x08\x70\x08\xE1\xC6\x43\x08\x37\x1D\x42\xF8\xFE\x21\x84\xA7\x0E\x21\xAC\x39\x8C\xB0\xFE\x30\xC2\xD0\x61\x84\xE1\xC3\x08\xF5\xC3\x08\x37\x1E\x46\xB8\xE9\x30\xC2\xD8\x61\x84\xF7\x1E\x46\xB8\xFB\x30\xC2\x03\x87\x11\x1E\x3E\x8C\xF0\xA5\xC3\x08\xBB\x0E\x23\x7C\xF3\x30\xC2\xEE\xC3\x08\xCF\x1E\x46\x80\x23\x08\x1F\x3E\x82\xF0\xF7\x47\x10\xBE\x77\x04\xE1\xC0\x11\x84\x43\x47\x8E\x9D\x57\x7E\xA5\xFF\x49\x1F\x9B\xFE\xE7\xE9\x87\xA6\x7B\xD3\xE1\x79\xEF\x97\x60\x23\x7C\xEC\x7F\x20\xC0\x54\x84\xF2\x54\x84\xE1\xA9\x08\xF5\xA9\x08\x63\x53\x11\x16\x9E\x86\x00\x31\x84\x48\x0C\x21\x26\x21\x11\x43\x38\x37\x86\x70\x5E\x0C\xE1\xFC\x18\xC2\x45\x12\x2E\x91\x00\xC6\xAD\xC6\xED\xC6\xCC\xC8\x58\xFB\x1D\xED\x67\x4D\x39\x6B\xCA\x8D\x53\x6E\x9C\xB2\xAF\xD3\xEB\x9C\x7F\xFF\xBD\xF7\xCF\x38\x3A\xF3\x28\x48\xDA\xCA\x7F\xE2\xDD\xF1\x2B\xE2\xBD\xF1\x8D\xF1\xD1\xF8\xBE\x07\xBC\x07\xE0\x64\x04\xF3\x64\x84\xB8\x84\xE4\xC9\x08\x6D\x27\x23\x9C\x78\x32\xC2\xDB\x4E\x46\x98\x74\x32\xC2\xB9\x27\x23\x9C\x77\x32\xC2\xF9\x27\x23\x5C\x78\x32\xC2\xE2\x93\x11\xBA\x4F\x46\xB8\xFA\x64\x04\x98\x84\x70\xE1\xA4\x40\xFC\x8F\x22\x14\x1F\x45\x18\x7E\x14\xE1\xE6\x47\x11\xC6\x1E\x45\xB8\xE3\x51\x84\xBB\x1F\x45\xF8\xD8\xA3\x08\xF7\x3C\x8A\x70\xEF\xA3\x01\xFF\x5D\x08\x33\xCE\x69\xCC\xD3\x10\x41\x38\x23\x82\xB0\xAF\x15\x89\x47\x07\x13\x96\x4E\xB8\x6C\xC2\xCA\x09\xDD\x13\xAE\x9C\xF0\x8E\x09\xEF\x98\xB0\x6E\xC2\x75\x13\xD6\x4F\xB8\x63\xC2\x9D\x13\xFE\x6E\xC2\xDD\x13\x1E\x9E\xF0\xB9\x09\x5F\x9C\xF0\x95\x09\xFF\x36\x61\xD7\x84\x5D\x13\xBE\x39\xE1\x3B\x13\x9E\x9C\xF0\xEC\x84\xE7\x27\xA4\xDB\x26\xB4\x9D\xD8\x36\xA9\x6D\x5D\xDB\x75\x6D\x37\xB7\x8D\xB5\x7D\xAC\x6D\xAC\xF3\x1F\x3B\xB7\x75\xDE\xDF\xF9\x40\xE7\x67\x3A\x1F\xEE\xFC\x52\xE7\x57\x3A\xFF\xAD\x73\x57\xE7\x77\x3B\x9F\xEC\xFC\x41\xE7\xEE\xCE\x67\x3B\x9F\xEF\xFC\x45\x27\xEE\x34\x77\xC6\x77\xB6\xEC\x3C\x61\xE7\xDB\x76\xDA\x3B\x4F\xDF\xD9\xB1\x73\xC6\xCE\x6D\xE9\xEF\xA4\x9F\x48\x3F\x91\x7E\x2A\xFD\x54\x7A\x77\xFA\x70\xFA\x8D\xB4\x97\xBE\xBB\xFD\x6B\xED\x8F\xB5\x3F\xDE\x0E\x9D\xA7\x75\x9E\xD1\x79\x46\xA7\x78\x60\xFA\x8C\xE9\x5D\xD3\xAF\x9F\x0E\xFB\x10\xCC\x7D\x08\xB1\x7D\x08\x93\xF6\x21\x4C\xDE\x87\x90\xDD\x87\xF0\x3F\xF6\x21\x4C\xDD\x87\x70\xFA\x3E\x84\x33\xF7\x21\x74\xE9\x08\x97\xE9\x08\xD0\x86\xA0\xB7\x21\x44\xDA\x10\x92\x6D\x08\xAD\x6D\x08\xE9\x36\x84\xB6\x36\x84\x8E\x36\x84\x33\xDB\x10\xBA\xDA\x10\x66\xB7\x21\x9C\xDD\x86\x70\x6E\x1B\xC2\x05\x6D\x08\x17\xB5\x21\x5C\xDA\x86\xB0\xA4\x0D\x61\x69\x1B\xC2\xF2\x36\x84\x95\x6D\x08\xDD\x12\xAE\x92\x70\x5D\x1B\x42\x6F\x1B\xC2\xC6\x36\x84\x52\x1B\xC2\x70\x1B\x42\xBD\xAD\x51\xFF\xC3\x7A\x4D\x1F\xD1\x6F\xD0\x6F\xD2\xDF\xA5\x8F\xEA\xA3\xFA\xAD\xFA\xAD\xFA\x7B\xF5\xF7\xEA\x77\xE8\x77\xEA\x77\xE9\x77\xE9\x1F\xD0\xFF\x45\xBF\x4F\x7F\x41\x3F\xA0\x7B\xFA\xE9\x53\xCE\x9C\x72\xDD\x14\x77\xCA\xC6\x29\xC5\x29\x8F\x4F\x79\x7C\x0A\x64\x4E\xCC\x4C\xCA\x4C\xC9\xD8\x99\x45\x99\xA5\x99\x95\x99\xEE\xCC\x55\x99\xAB\x33\x57\x67\xAE\xC9\x5C\x93\xB9\x2E\x73\x5D\xA6\x27\xF3\xAE\xCC\x58\xE6\x0B\x99\x2F\x65\xBE\x9D\xF9\x6E\xE6\xE9\xCC\xB3\x99\x9F\x66\x7E\x9E\xF9\x53\xE6\xE5\xCC\x2B\x99\xD7\x32\x47\x33\xA7\x67\x4F\xCF\xE6\x77\xE6\x77\x06\xD7\xEF\xF9\x88\xF0\x01\x44\xD8\x26\x01\x7E\x84\xB0\xE8\x47\x8D\xFC\xBE\x3B\x71\x4B\xE2\xB6\xC4\xDF\x25\x3E\x98\xF8\x50\xE2\x23\x89\x07\x12\x0F\x26\x1E\x4E\x7C\x2E\xF1\xF9\xC4\x17\x13\x5F\x4D\x3C\x9A\xF8\x4E\xE2\x89\xC4\xFF\x4A\x7C\x3F\xF1\x54\x62\x77\x62\x77\x62\x5F\xE2\xD7\x89\xDF\x26\x5E\x4A\x1C\x4A\x78\x09\x9F\x7E\x9E\x82\x90\x9F\x82\xD0\x3F\x05\x61\x60\x0A\x42\x71\x0A\xC2\x07\xA6\x20\xDC\x3D\x05\xE1\x43\x53\x10\x3E\x32\x05\xE1\x9F\xA6\x20\x6C\x9B\x82\xB0\x63\x0A\x02\x26\xF4\x44\x24\x91\x48\xB4\x26\xD2\x89\xB6\x44\x47\xE2\xCC\x44\x57\x62\x76\xE2\xEC\xC4\xB9\x89\x39\x89\xF3\x13\x17\x24\x2E\x4A\x5C\x94\xB8\x38\xB1\x20\xB1\x24\xB1\x34\xB1\x3C\xB1\x32\xF1\xF6\xC4\xDB\x13\x57\x27\xAE\x4D\x5C\x9F\xB8\x3E\xB1\x31\xB1\x39\x31\x36\xE3\x63\x33\xFE\x79\xC6\x9F\x67\xC0\xCC\xBD\x33\x23\x5D\x91\xAE\x68\x57\xB4\x2B\xDB\x35\xAD\xEB\xFC\xAE\x0B\xBB\xE0\x9C\xC7\x57\xC2\xAA\x37\xEE\x85\x43\x43\x87\x87\x0F\xFF\xF8\xB0\xC8\xDF\x81\x0A\xC2\x4B\x15\x24\x29\xA2\x9F\xDF\xAF\x01\x6C\xD7\xE0\x9C\x2F\x6B\x30\xFF\xCB\x1A\x4C\xF9\x8A\x06\xF6\x57\x34\xF8\x97\x1F\x68\xF0\xF0\x0F\x34\xD8\xF7\x7B\x0D\xE0\xA0\x06\x53\x0E\xB3\xC4\xD1\x65\x6D\x3A\xC0\x09\xDE\x09\x33\xBA\x66\x76\xCD\x9A\xF5\x81\x59\x30\xFB\xD4\xD9\xEB\x67\x6F\x9D\xBD\x7E\xC7\xCD\x3B\xE0\xD3\xF7\x3D\xF7\xF0\x73\xDF\x7D\xEE\xFB\xCF\x1D\x79\x6E\x9B\xF7\x6F\xDE\x37\xBD\x27\xBC\xEF\x79\x3F\xF4\x7E\xE4\x3D\xE7\xFD\xC4\xFB\x59\x83\x86\x4A\x21\x9C\x91\x42\xE8\x4A\x21\x5C\x90\x42\xB0\x4F\x3A\xE7\xA4\x60\xFB\xEC\x8B\x21\xBC\x1C\x43\x78\x25\x86\xF0\x6A\x0C\xE1\x48\x0C\xC1\x8B\x35\xDA\xE7\x43\x91\x27\x22\xBB\x23\xBF\x8B\xFC\x29\xF2\x4A\x64\xCA\x91\x39\x47\xCE\x3F\x72\xD1\x91\x8B\x8F\x5C\x7C\x64\xFE\x11\xE7\xC8\xC2\x23\x97\x1E\x59\x7C\x64\xF5\x11\xA7\xEB\x1F\xBB\x3E\xD1\x75\x2F\x89\x2B\xE2\xC3\x08\xA7\x3E\x82\xD0\xFD\x08\xC2\xE5\x8F\x60\xE3\xF2\xA7\xEA\x0F\x31\x84\x2B\x62\x08\x57\xC5\x10\x7A\x44\x3A\x7A\x45\xBF\xCD\x78\xAF\xB1\xDC\xBC\xC2\x1C\x36\x87\xCD\xB7\xC7\xD7\xC6\x1F\x3E\x65\xD7\x29\xBB\xDB\x7F\xD4\xFE\x4C\xFB\xBE\xF6\x5F\xB5\xFF\x67\xFB\x1F\xDB\xFF\xD8\xFE\x4A\xFB\x2B\xED\x07\xDB\x0F\xB5\xEF\x9A\x72\x68\xCA\x91\x29\xDE\x94\xA4\x9D\xB2\x77\xDB\x07\xEC\x33\xBB\x3A\xBB\x3E\xD6\xF5\xF1\x2E\x38\xDA\x7A\xD4\x3E\xDA\x79\xF4\x4D\x44\x10\xB0\x4F\x63\xB8\xB0\x8D\xA1\x7F\x0F\x42\x61\x0F\xC2\x3B\xF7\x20\xBC\x67\x0F\xC2\x6D\x7B\x10\xDE\xBF\x07\xE1\xC1\x3D\x08\x0F\xED\x41\x00\x6C\x81\x3F\x61\x0B\xAC\xB7\x10\xAA\x16\xC2\x8D\x16\xC2\xA8\x85\x30\xDF\x42\xB8\xC2\x42\x78\x87\x85\xD0\x63\x21\x8C\xED\x78\x6A\xC7\xEE\x1D\x3F\xDE\xF1\x8B\x1D\xBF\xDC\x21\xCA\x33\x96\x66\x9E\xBE\xA2\x4F\xC7\x92\x77\x25\x3F\x90\xBC\x3B\xF9\xE1\xE4\x03\xC9\x07\x93\x9F\x4F\x7E\x31\xF9\xD5\xE4\xA3\xC9\x6F\x27\xBF\x9B\x7C\x32\xF9\xBD\xE4\x53\xC9\xBD\xC9\x67\x93\xBF\x48\xFE\x22\xB9\x2F\xF9\xEB\xE4\x6F\x93\x7F\x4A\xBE\x94\x7C\x39\x19\x6C\x8F\x7F\xE9\x3A\xDC\xF5\x66\x97\xD7\x75\x60\x96\x37\x6B\xF7\xEC\xA3\xB3\xE1\xEC\xAB\xCE\xDE\xE8\x55\xBC\x4D\xDE\x27\xB8\x4D\x1F\x66\x46\x6A\xDF\x23\x08\xFD\xA2\x7E\x77\x74\xEE\x98\xB9\x63\xE6\x0E\x3F\x82\x04\x82\x9E\x40\x88\x24\x10\xCC\x04\x42\x32\x81\xD0\x96\x40\x38\x31\x81\x70\x52\x02\xE1\xE4\x04\xC2\xB9\x09\x84\xF3\x13\x08\x73\x13\x08\x97\x24\x10\x96\x26\x10\xBA\x13\x08\xEF\x48\x20\xFC\xA6\xC2\x00\xEF\x47\xD8\x7B\x17\xC2\xD8\x49\x3F\x3F\x69\xDF\x49\x2F\x9E\x74\xE0\xA4\x43\x27\xED\x3B\xD9\x3B\x19\x26\x20\x9C\x30\x01\xA1\x6D\x02\xC2\xC5\x13\x10\x1E\x9E\x80\xF0\xBB\x09\x08\x07\x26\x20\x1C\x9A\x80\xBE\x7C\xD0\x83\xF0\x20\x7C\x11\xBE\x08\x5F\x83\xAF\xC1\x2E\x78\x16\x9E\x87\xD7\xE0\x20\x7C\x43\xFB\xAE\xB6\x47\xDB\xA7\xFD\x46\xFB\x83\xF6\x07\x6D\xBF\xB6\x5F\x1B\xD6\xEB\xFA\xE6\xC0\x7C\x75\xEC\x5C\xF5\xAA\xFE\xBA\xFE\x6E\xE3\x4E\x63\x66\x84\xF7\x82\x57\x47\xD6\x47\xEE\x90\x7D\xF2\xE5\x88\x6D\x5E\x66\x96\x69\x1F\xFE\xB4\xB9\xD7\xDC\x6B\xFE\x87\xF9\x5B\x73\xBF\xF9\x27\xF3\xB0\xF9\x86\xE9\x99\x9E\x99\x8E\xA6\xA3\x13\xA2\x33\xA3\x2B\xA3\x9F\x8A\x3E\x12\x7D\x24\xFA\xBD\xE8\xEF\xA2\xAF\x44\x5F\x8D\x1E\x8E\x1E\x8E\x42\xEC\xC4\xD8\x29\xB1\x53\x62\x53\x63\x53\x63\x1D\xB1\x8E\xD8\xFC\xD8\x3B\x62\xEB\x63\xC5\x98\xDA\xC7\x1B\xF1\x0B\xE2\xF3\xE2\xF3\xE2\xDD\xF1\xEE\xF8\x3B\xE2\x6E\x7C\x53\x7C\xEC\xB8\x7B\xC5\xC7\xE2\x8F\xC5\x7F\x10\xFF\x81\xDC\x23\xBE\x10\x3F\x10\x7F\x29\xFE\x46\xFC\x8D\xF8\x5B\xCD\x35\x6A\x5E\xA9\x26\xEA\xC7\x9D\x03\x1F\x4B\x3C\x26\xE7\xBE\x17\x12\x87\x12\x87\x12\x11\x2B\x69\xB5\x5A\x69\xAB\xCD\xEA\xB0\xCE\xB4\xBA\xAC\xD9\xD6\xD9\xD6\xB9\xD6\x05\xD6\x3C\x6B\x9E\x75\xAD\x75\x9D\xD5\x63\xB9\xD6\x26\x6B\x93\x75\x8B\x75\x8B\x75\x9B\x75\xA7\xF5\x01\xEB\x6E\xEB\xC3\xD6\x3F\x58\x1F\xB3\x3E\x6E\xDD\x63\xDD\x63\x7D\xD2\xBA\xD7\xBA\xCF\xFA\x57\xEB\x01\xEB\x41\xEB\x33\xD6\x57\xAD\xDD\xD6\x6E\x2B\x92\x4C\x26\x5B\x92\xE9\xE4\x84\x64\x47\xF2\xCC\xE4\x05\xC9\x79\xC9\x79\xC9\x77\x24\xD7\x25\xD7\x27\xDD\xE4\x58\x72\x2C\x79\xDB\x38\x7D\xFA\xB1\xE4\x63\xB2\x1F\xBF\x40\x7D\xD8\x48\x25\x53\x2D\xA9\x74\x6A\x42\x6A\x6E\x6A\x5E\x6A\x5E\x6A\x55\x6A\x55\x6A\x6D\xEA\xCA\x54\x4F\xCA\x4D\xDD\x94\x1A\x4D\xDD\x96\xFA\xC7\xD4\xC7\x53\x8F\xA4\x3E\x9F\xFA\x7A\xEA\xB1\xD4\x63\xA9\x5D\xA9\xEF\xA6\xB0\xA5\xAB\x65\x76\xCB\xD9\x2D\xF3\x5B\x16\xB7\xBC\xBB\xE5\x3D\x2D\xB7\xB6\xDC\xDA\xF2\xDE\x96\x3B\x5B\xEE\x6A\xB9\xAF\xE5\x53\x2D\x9F\x6A\xD9\xDE\xF2\x70\xCB\xE7\x5A\x3E\xDF\xF2\x58\xCB\x63\x2D\xBB\x5A\xBE\xDD\xF2\xDD\x96\xEF\xB6\xFC\xAC\xE5\x97\x2D\xD0\x0A\xAD\xF3\x5B\x97\xB4\x2E\x6B\x2D\xB5\xDE\xD1\x7A\x57\x2B\xA4\xCF\x4C\x5F\x92\xBE\x24\xDD\x9D\xBE\x22\xBD\x2E\x7D\x5D\xFA\xFF\xC7\xDE\x97\xC0\x37\x51\x6D\xFF\x9F\x33\x99\xB4\x4D\xD3\x34\x29\x94\x2E\x49\x7B\x93\x58\x20\x04\x86\x10\x16\x59\xCA\x56\x56\x15\x65\x71\x63\x71\x21\x0D\x6D\xDA\x06\xDA\x24\x24\x29\x8B\x0B\x94\x4D\x05\x41\x50\x71\x47\xA9\x8A\x33\x6D\xAA\x02\x0A\x88\xB2\x15\x17\x5C\x11\x54\x16\x05\xD4\x82\x8A\x28\x20\xB8\x2B\x4B\xF2\xFF\xCC\xCC\x4D\x9B\xC6\xA2\xBE\xF7\x7E\xBE\xF7\xFE\xBF\x9F\xC3\xE7\xD0\xDC\x73\xEF\xDC\xFD\x7E\xCF\xB9\xDB\x19\xA7\xCE\xA9\x73\xE9\x4A\x74\x1E\x9D\x4F\x57\xA9\x9B\xA3\xBB\x4B\x77\x97\xEE\xB7\x72\xFF\x5F\xD3\x43\xAA\x5A\x2F\x6D\x1D\x9D\x3B\x62\x7A\x79\x86\x37\x63\x76\xC6\x9C\x8C\x87\x33\xAA\x33\xBE\xCE\xF8\x36\xE3\x97\x0C\xC8\x4C\xC9\x4C\xCD\x4C\xCB\x34\x65\x76\xCD\x2C\xC8\xBC\x32\xB3\x30\xB3\x3C\xD3\x93\xE9\xCB\xAC\xCA\x7C\x3E\x73\x7F\xE6\xFE\xCC\x43\x99\x87\x32\x4D\x59\x33\xB2\xAA\xB2\xE6\x67\xDD\x9E\x55\x93\x15\xCA\x0A\x65\x89\xF3\x6B\xC8\x26\xD9\x63\xB2\x2B\xB2\x7D\xD9\xC1\xEC\xAA\xEC\xBA\xEC\x35\xD9\x6F\x66\x83\x3E\x43\x6F\xD2\x5F\xA3\x17\xF4\x82\x5E\x69\xE8\x6E\x18\x66\xB8\xDC\x30\xCF\x50\x6D\x78\xD6\xB0\xDA\xF0\x92\xE1\x0B\x03\xE4\xE4\xE5\x8C\xCC\x19\x9D\x73\x5D\xCE\xAD\x39\xA2\xDE\x18\xD5\x67\x9A\xE6\x8B\x3F\xC9\xF3\x45\x51\xC6\x93\x3F\x2B\xE3\x37\x1B\xB7\x1A\xB7\x1A\x5F\x96\x64\xFD\x3B\xC6\xDD\x54\xDE\x37\x18\x4F\x50\x79\x7F\xCE\x38\xD5\x34\xD5\x34\xDB\x34\xDB\xB4\xCC\xB4\xC2\xC4\x98\x19\x73\xA2\x39\xD1\x9C\x6C\x6E\x6D\x6E\x63\x6E\x63\xCE\x36\xE7\x9A\xDB\x9A\xDB\x9A\x45\x9D\xA0\x83\xB9\x83\xB9\xA3\xB9\xB3\xB9\x8B\xB9\x8F\xB9\x9F\x79\xA0\x79\x98\xF9\x32\xF3\x28\xF3\x28\xF3\x3C\xF3\x7C\x73\x54\xCF\x2A\xE4\x3E\xE7\x8E\x73\xDF\x70\xDF\x71\xDF\x73\xB1\x7A\x98\xBD\x73\x69\x67\x6F\x67\x6F\xE7\x3F\xA3\xEF\x75\xB1\x75\xB1\x29\xED\x09\xF6\xAE\xF6\x8B\xED\x7D\xED\xFD\xEC\x51\xB9\x24\x62\xEA\x39\x7B\xC4\xAE\xEC\xDA\xA5\xAB\x28\x47\xAB\xBB\x6E\xEB\x2A\xE2\x6B\xA3\xBC\xAE\x5E\xBC\x6A\xF7\xAA\xF3\xAB\xE0\xA9\x14\x5E\xC7\x1B\xF9\x8E\x7C\x27\xBE\x80\xF7\xF0\xB3\xF9\x47\xF9\x6A\xFE\x0B\x3E\x53\x30\x0A\x17\x09\x77\x08\x77\x0A\xDB\x84\x97\x85\xB7\x84\x1F\x05\xAC\x51\xD4\x28\x6B\x12\x6B\x92\x6B\x52\x6A\x2E\xAA\x29\xA8\x09\xD4\xCC\xAD\x79\xBE\xE6\xBB\x9A\x9F\x6B\xCE\xD6\x9C\xAD\x39\x5F\x13\xAE\x49\xAE\x6D\x57\x6B\xAF\x1D\x5E\x2B\xCA\xEA\xF9\xB5\xCF\x49\xF3\xE1\x86\xDA\xCF\x6B\x8F\xD6\x9E\xAA\x3D\x53\x1B\xAE\x85\x50\x87\x50\x41\x68\x70\x68\x68\xE8\xF2\x50\x61\x68\x5A\xE8\xA6\xD0\x4D\xA1\x59\xA1\xD5\xA1\xB5\xA1\xB5\xA1\xF5\xA1\x0D\xA1\x17\x43\x5B\x42\xF5\xA1\xFA\xD0\xCB\xA1\x97\x43\x07\x43\x1F\x87\x1A\x42\x5F\x87\xBE\x0B\xFD\x10\x6A\x49\xA7\xB5\xD7\x5D\x57\x77\x43\x9D\xBB\xCE\x57\x77\xA4\x2E\x56\x2F\x68\xD4\x43\xCE\x26\x9C\x6D\x7D\x36\xF3\x6C\xEE\xD9\xDC\xB3\xC6\xB3\x1D\xCE\x76\x6C\x51\x8E\xAF\x8D\x5B\xAB\x3C\xDB\xB8\x56\x69\x8E\xE4\x47\x06\x45\xAE\x8B\x94\xB4\xA8\x67\x20\xA8\x01\x25\x2B\x39\xED\x01\xA1\x03\x20\xE4\x03\x42\x3F\x40\xE8\x0F\x08\x03\x01\x61\x24\x20\x8C\x01\x84\x1B\x01\xA1\x0A\x10\xCE\x88\x7F\x19\x84\x15\x0C\x42\xE3\x7A\x92\x02\xC1\xA8\x40\xE8\xAC\x40\x28\x50\x20\x0C\x56\x20\x5C\xA6\x40\x18\xA3\x40\xA8\x54\x20\x54\xD1\xB3\x72\xD5\x0A\x84\x57\x14\x08\x6F\x28\x10\x76\x89\xFA\x36\x8B\xF0\x28\x8B\x10\x5D\x67\x8E\xAE\x31\x47\xE7\x1D\xD1\xF5\x29\x48\x40\xE8\x99\x88\x50\x90\x88\x70\x6D\x22\x42\x61\x22\x42\x69\xE2\x3F\x36\x3F\x13\xF5\x96\xC2\x24\x84\x69\x49\x08\x55\x49\x08\x8F\x25\xE1\x6F\xF4\x27\x50\x21\xB4\x51\x21\x98\x54\x08\x7D\x54\x08\x55\x2A\x84\x17\x54\x08\x5B\x55\x08\xDB\x54\x28\xC9\x67\x91\x74\x17\x90\xCB\x85\xC9\x08\xB7\x24\x23\x54\x25\x23\xAC\x48\x46\xA8\x4F\x46\x78\x3D\x19\xE1\x4D\x51\x36\x8B\xEF\xD2\xF5\xCF\xA8\x5E\x12\xD5\x57\xAA\xD4\x08\x77\xAB\x51\x3A\x88\x77\x69\x8A\xA8\x87\xC8\xEB\xEB\xD1\xB5\x75\x51\x0F\xCC\xD3\x20\x54\xA5\x22\xD4\xA6\x22\xAC\x49\x45\x58\x9B\x8A\x00\x5A\x84\x1C\x2D\x82\x85\x92\x5D\x8B\x30\x4C\x8B\xB0\x46\x8B\xF0\xAA\xB6\x69\xDE\xA6\xD0\x21\xF4\xD2\x21\xCC\xD3\x21\xAC\xD6\x21\xEC\xD6\x21\x1C\xD3\x21\x28\xD2\x10\xDA\xA7\x21\x0C\xA5\x74\x09\xA5\x31\x69\x08\xFE\x34\x84\x69\x94\xE6\xA5\x21\x3C\x97\x86\xB0\x3D\x0D\xE1\xD5\x34\x84\x03\x94\x0E\x51\x8A\xD5\x2B\x3A\xB5\x42\xA8\x6A\x85\x70\x5B\x2B\x84\x3B\x28\x2D\x6A\x85\xB0\xA4\x15\xC2\xD2\x56\x08\x8F\xB6\x42\x58\xD9\x0A\xA1\x86\xEA\x1F\x9F\xB4\xFA\xC7\xE7\x5B\xFD\x29\x45\xE7\x57\xE2\xBC\xCA\x29\xCE\xA3\xD2\x11\x7A\xA4\x23\x5C\x92\x8E\x30\x22\x1D\xC1\x91\x8E\xE0\x4C\x47\xA8\x4A\x47\x58\x9D\x8E\xF0\x6A\x3A\xC2\x6B\xE9\x08\xAF\x53\xAA\x6A\x83\xF0\x6C\x1B\x84\x0F\xDB\x20\x1C\x6C\x83\x00\x19\x08\x5D\x32\x10\x86\x52\xAA\xCA\x40\x08\x65\x20\x6C\xA4\x14\xDD\x6F\x10\xE7\xD9\x9D\xB2\x10\xAA\xE9\x1E\x47\x24\xEB\x8F\xE7\xED\x5D\xB2\x11\x06\x52\x1A\x44\xA9\x3A\x1B\x41\xC8\x46\x08\x65\x23\xEC\xCE\x46\x38\x4C\xE9\x33\x4A\xA0\x97\x49\xAD\x47\xE8\xA6\x47\xC8\xA7\x34\x86\xD2\x0D\x7A\x84\x85\x7A\x84\x47\x29\xD5\xEB\x11\x7E\x11\xDF\x89\x59\xD7\xB6\xE5\x20\x14\x50\xF2\xE7\x20\x2C\xCD\x41\x80\x5C\x84\x84\x5C\x84\xA4\x5C\x04\x55\x2E\x82\x3A\x17\xC1\x9E\x8B\x30\x9C\x52\x4B\xF3\xB2\x85\x74\x2E\x26\x52\x03\x41\xF8\x8E\x20\xAC\x31\xCA\x14\x5D\x47\x69\x5C\x37\xA1\xEB\x08\x8D\xFB\x30\x74\x6D\xBF\x60\x32\xC2\xC4\xC9\xD8\xB8\xAE\x0F\x53\x10\xBA\x4C\x41\x28\x98\x82\x30\x64\x0A\x42\xD1\x14\x84\xE9\x53\x10\x6E\x9D\x82\xB0\x54\xE4\xD3\xBD\x22\xF0\x22\x8C\xF0\x22\x8C\xA1\x74\xAF\x17\x61\xA5\x17\xA1\xC1\x8B\x70\x98\xAE\x19\x8A\x04\x3E\x84\x9F\xE9\x61\x4E\x51\xFF\x85\x25\x08\x49\x4B\x64\x9D\x3B\x76\x5E\x13\xD5\xBF\x7D\x6B\x11\xCE\x3E\x87\x7F\xB8\x4E\xF2\xDF\xBC\x6E\x58\xBF\x0F\xE1\xE5\x7D\x08\x07\xF6\x21\x1C\xDA\x87\x70\x66\x1F\xC2\xB9\x7D\x08\xE9\xFB\x11\x32\xF6\x23\xF4\xD8\x8F\xD0\x73\x3F\xC2\xA8\xFD\x08\x63\xF6\x23\x78\xF6\x23\xF8\xF6\x23\xDC\xB1\x1F\x61\xD1\x7E\x84\x9A\xFD\x08\xA1\xFD\x08\x2F\xEF\x47\x78\x75\xBF\xBC\x0E\x09\x87\x11\xB8\xC3\x08\xBD\x0E\x23\xF4\x3F\x8C\x30\x8A\x52\xFD\x11\x84\xE3\x47\x10\xE0\x18\xC2\xAB\xC7\x50\xDA\x9F\x1B\x42\xF7\xE8\x44\xFA\x7B\x1F\x4C\xDE\x07\xFB\x67\xD7\x0B\x5A\xD6\xA3\x9B\xF4\xE7\x37\x52\x77\xA6\xEE\x4E\xFD\x48\xD6\xA3\xA5\xF3\xDE\x4D\xF3\xB5\xE6\x73\xB5\x8D\xD2\x3C\x0D\x72\xDB\xE5\x72\xB9\x37\xE4\x4E\xCA\x75\xE5\x4E\xC9\x9D\x9E\x3B\x33\x77\x6B\x2E\x90\x08\x89\xD5\xFD\x3A\x9A\x3B\x99\xBB\x99\xBB\x49\x3A\x5D\xA1\xF9\x0E\x73\x21\x37\x9B\xBB\x48\xB8\x3D\x46\x5F\x8A\x08\xB2\x8E\x52\x5C\x57\x52\xE7\xAE\x13\xF5\x91\xA8\x4E\x01\x39\xBD\x72\xFA\xE6\x5C\x26\xE9\xAF\xD2\xFC\x35\x9B\x64\x9B\xB2\x3B\x65\xDB\xB3\xFB\x66\x17\x64\x17\x64\x0F\xCD\x1E\x9D\x1D\x3B\x3F\xBE\xA0\x1C\x6F\x7C\xFE\x39\x7D\x64\xF7\xAA\xC8\xAA\x46\x2C\x8A\x79\xC4\xBA\x11\xE7\xB1\x9F\x4A\x75\x12\x01\x44\x44\x05\x2A\x50\x89\x4A\x4C\xC4\x44\x54\xA1\x0A\xD5\xA8\x46\x0D\x6A\x50\x8B\x5A\x4C\xC3\x34\x6C\x8D\xAD\xB1\x0D\xB6\xC1\x4C\xCC\xC4\x6C\xCC\x46\x03\x1A\x30\x17\x73\xD1\x88\x46\x34\xA3\x19\xF3\x30\x0F\xDB\x61\x3B\xB4\xA0\x05\xAD\x68\xC5\x4E\xD8\x09\x3B\x63\x67\xEC\x82\x5D\xB0\x2B\x76\xC5\xEE\xD8\x1D\x2F\xC6\x8B\xB1\x17\xF6\xC6\x7C\xCC\xC7\x7E\xD8\x0F\x07\xE0\x00\x2C\xC0\x02\x1C\x8C\x83\x71\x28\x0E\xC5\xE1\x38\x1C\x2F\xC5\xCB\xF0\x72\xBC\x1C\x47\xE2\x48\x1C\x8D\xA3\xF1\x4A\xBC\x12\xAF\xC6\xAB\xF1\x5A\xBC\x16\xC7\xE1\x38\x9C\x80\x13\xF0\x7A\xBC\x1E\x6F\xC4\x1B\xD1\x81\x0E\x74\xA2\x13\x8B\xB0\x08\x5D\xE8\xC2\x52\x2C\x45\x37\xBA\x71\x0A\x4E\xC1\x0A\xAC\x40\x2F\x7A\x71\x2A\x4E\xC5\x00\x06\xB0\x12\x2B\x71\x3A\x4E\xC7\x9B\xF0\x26\xBC\x05\x6F\xC1\x59\x58\x85\xF3\x70\x1E\x2E\xC0\x05\x78\x07\xDE\x81\x8B\x71\x09\xDE\x83\xF7\xE0\x7D\x78\x1F\x3E\x84\x8F\xE0\x63\xF8\x18\x3E\x8E\x8F\xE3\x93\xF8\x24\x3E\x85\x4F\x61\x0D\xD6\x60\x08\xEB\xF0\x19\x7C\x06\xD7\xE0\x1A\x5C\x87\xEB\x70\x03\x6E\xC0\x17\xF1\x25\xDC\x82\xDB\x70\x07\xEE\xC0\x37\xF1\x4D\x7C\x07\xDF\xC1\x77\xF1\x5D\xDC\x8D\xBB\xF1\x7D\x7C\x1F\xF7\xE0\x1E\xDC\x87\xFB\xF0\x43\xFC\x10\x0F\xE0\x01\x3C\x84\x1F\xE3\xA7\xF8\x29\x1E\xC6\xC3\xF8\x19\x7E\x86\x5F\xE0\x17\xF8\x25\x7E\x89\x5F\xE1\x57\x78\x1C\x8F\xE3\x49\x3C\x89\xA7\xF0\x34\x7E\x8F\xDF\xE3\x8F\xF8\x23\xFE\x8A\xBF\xE2\x59\x3C\x8B\xE7\xF1\x3C\x46\x30\x82\xC8\x20\xA3\x60\x14\x8C\x92\x51\x32\x89\x4C\x22\xA3\x62\x54\x8C\x9A\x51\x33\x1A\x46\xC3\x68\x19\x2D\x93\xC6\xA4\x31\xAD\x99\xD6\x4C\x1B\xA6\x0D\x93\xC9\x64\x32\xD9\x4C\x36\x63\x60\x0C\x4C\x2E\x93\xCB\x18\x19\xA3\x38\xA5\x61\xF2\x98\x3C\xA6\x1D\xD3\x8E\xB1\x30\x16\xC6\xCA\x58\x99\x4E\x4C\x27\xA6\x33\xD3\x99\xE9\xC2\x74\x61\xBA\x32\x5D\x99\xEE\x4C\x1F\xA6\x1F\xD3\x8F\x19\xC8\x14\x30\x83\x99\xC1\xCC\x25\xCC\x25\xCC\x65\xCC\x65\xCC\xE5\xCC\xE5\xCC\x48\x66\x24\x33\x9A\xB9\x97\xB9\x8F\x59\xCD\x4C\x55\x4C\x55\x04\x14\x01\xC5\x74\xC5\x74\xC5\xCD\x8A\x5B\x15\xCB\x14\xCB\x14\x4F\x2B\xDE\x55\xEC\x56\xBC\xA7\xD8\xAB\xD8\xAF\xF8\x48\xF1\x91\xE2\xA0\xE2\xA0\xE2\x63\xC5\xC7\x8A\x4F\x15\x9F\x2A\x0E\x2B\x0E\x2B\x3E\x53\x7C\xA6\xF8\x42\xF1\x85\xE2\x4B\xC5\x97\x8A\xAF\x14\x5F\x29\x8E\x2B\x8E\x2B\x4E\x2A\x4E\x2A\x4E\x29\xBE\x57\xFC\xA8\xF8\x51\xF1\x8B\xE2\x17\xC5\x59\xC5\x39\x85\x9D\x75\xB0\x4E\xD6\xC9\x16\xB1\x45\xAC\x8B\x75\xB1\xA5\x6C\x29\xEB\x66\xDD\xEC\x14\x76\x0A\x5B\xC1\x56\xB0\x5E\xD6\xCB\x4E\x65\xA7\xB2\x01\x36\xC0\x56\xB2\x95\xEC\x74\x76\x3A\x3B\x93\x9D\xC9\xDE\xCC\xDE\xCC\xDE\xCA\xDE\xCA\xCE\x66\x67\xB3\x73\xD8\x39\xEC\x9D\xEC\x9D\xEC\x12\x76\x09\xBB\x94\x5D\xCA\xDE\xCD\xDE\xCD\xDE\xCB\xDE\xCB\xDE\xC7\xDE\xC7\x3E\xC0\x3E\xC0\x3E\xC4\x3E\xC4\x3E\xC2\x3E\xC2\x3E\xCA\x3E\xCA\xAE\x64\x57\xB2\x8F\xB3\x8F\xB3\x4F\xB2\x4F\xB2\x4F\xB1\x4F\xB1\x02\x2B\xB0\xB5\x6C\x2D\x5B\xC7\xD6\xB1\xCF\xB0\xCF\xB0\xAB\xD9\xD5\xEC\x5A\x76\x2D\xFB\x3C\xFB\x3C\xBB\x9E\x5D\xCF\xBE\xC0\xBE\xC0\xBE\xC8\xBE\xC8\x6E\x62\x37\xB1\x5B\xD8\x2D\xEC\x36\x76\x1B\xFB\x32\xFB\x32\xFB\x2A\xFB\x2A\xBB\x83\xDD\xC1\xBE\xC1\xBE\xC1\xBE\xC5\xBE\xC5\xBE\xC3\xBE\xC3\xBE\xCB\xEE\x62\xDF\x63\xDF\x63\x3F\x60\x3F\x60\xF7\xB2\x7B\xD9\xFD\xEC\x7E\xF6\x23\xF6\x23\xF6\x20\x7B\x90\xFD\x98\xFD\x98\xFD\x94\xFD\x94\x3D\xCC\x1E\x66\x3F\x63\x3F\x63\xBF\x60\xBF\x60\xBF\x64\xBF\x64\xBF\x62\xBF\x62\x8F\xB3\xC7\xD9\x93\xEC\x49\xF6\x14\x7B\x8A\xFD\x96\xFD\x96\xFD\x9E\xFD\x9E\xFD\x91\xFD\x91\xFD\x99\xFD\x99\xFD\x95\xFD\x95\x3D\xCB\x9E\x65\xCF\xB3\xE7\xD9\x08\x1B\x61\xC5\xC1\xAB\x50\x2A\x94\xE2\x93\xA8\x4C\x54\xAA\x94\x2A\xA5\x5A\xA9\x56\x6A\x94\x1A\xA5\x56\xA9\x55\xA6\x29\xD3\x94\xAD\x95\xAD\x95\x6D\x94\x6D\x94\x99\xCA\x4C\x65\xB6\x32\x5B\x69\x50\x1A\x94\xB9\xCA\x5C\xA5\x51\x69\x54\x9A\x95\x66\x65\x9E\x32\x4F\xD9\x4E\xD9\x4E\x69\x51\x5A\x94\x56\xA5\x55\xD9\x49\xD9\x49\xD9\x59\xD9\x59\xD9\x45\xD9\x45\x5E\x9F\xD2\x9D\xD1\x9D\xD7\x45\x74\xBF\xB4\x3E\xDF\x5A\x9C\x93\x43\x6E\x27\x8A\x9F\x0F\xE7\x22\x41\xA2\x20\x0A\xA2\x24\x4A\x92\x48\x12\x89\x8A\xA8\x88\x9A\xA8\x89\x86\x68\x88\x96\x68\x49\x1A\x49\x23\xAD\x49\x6B\xD2\x86\xB4\x21\x99\x24\x93\x64\x93\x6C\x62\x20\x06\x92\x4B\x72\x89\x91\x18\x89\x99\x98\x49\x1E\xC9\x23\xED\x48\x3B\x62\x21\x16\x62\x25\x56\xD2\x89\x74\x22\x9D\x49\x67\xD2\x85\x74\x21\x5D\x49\x57\xD2\x9D\x74\x27\x17\x93\x8B\x49\x2F\xD2\x8B\xF4\x21\x7D\x48\x5F\xD2\x97\xF4\x27\xFD\xC9\x40\x32\x90\x0C\x22\x83\xC8\x10\x32\x84\x0C\x23\xC3\xC8\x25\xE4\x12\x72\x19\xB9\x8C\x5C\x4E\x2E\x27\x23\xC9\x48\x32\x9A\x8C\x26\x57\x92\x2B\xC9\xD5\xE4\x6A\x72\x2D\xB9\x96\x8C\x23\xE3\xC8\x04\x32\x81\x5C\x4F\xAE\x27\x37\x92\x1B\x89\x83\x38\x88\x93\x38\x49\x11\x29\x22\x2E\xE2\x22\xA5\xA4\x94\xB8\x89\x9B\x4C\x21\x53\x48\x05\xA9\x20\x5E\xE2\x25\x53\xC9\x54\x12\x20\x01\x52\x49\x2A\xC9\x74\x32\x9D\xCC\x24\x33\xC9\xCD\xE4\x66\x72\x2B\xB9\x95\xCC\x26\xB3\xC9\x1C\x32\x87\xCC\x23\xF3\xC8\x02\xB2\x80\xDC\x4E\x6E\x27\x0B\xC9\x42\x72\x27\xB9\x93\x2C\x21\x4B\xC8\x52\xB2\x94\xDC\x4D\xEE\x26\xF7\x92\x7B\xC9\x7D\xE4\x51\xB2\x92\xAC\x24\x8F\x93\xC7\xC9\x93\xE4\x49\xF2\x14\x79\x8A\x08\x44\x20\xB5\xA4\x96\xD4\x91\x3A\xF2\x0C\x79\x86\xAC\x26\xAB\xC9\x5A\xB2\x96\x3C\x4F\x9E\x27\xEB\xC9\x7A\xF2\x02\x79\x81\xBC\x48\x5E\x24\x9B\xC8\x26\xB2\x85\x6C\x21\xDB\xC8\x36\xB2\x9D\x6C\x27\xAF\x90\x57\xC8\x6B\xE4\x35\xF2\x3A\x79\x9D\xBC\x49\xDE\x24\x6F\x93\xB7\xC9\x4E\xB2\x93\xEC\x22\xBB\xC8\x7B\xE4\x3D\xF2\x01\xF9\x80\xEC\x25\x7B\xC9\x7E\xB2\x9F\x7C\x44\x3E\x22\x07\xC9\x41\xF2\x31\xF9\x98\x7C\x4A\x3E\x25\x87\xC9\x61\xF2\x19\xF9\x8C\x7C\x41\xBE\x20\x5F\x92\x2F\xC9\x57\xE4\x2B\x72\x9C\x1C\x27\x27\xC9\x49\x72\x8A\x9C\x22\xDF\x92\x6F\xC9\xF7\xE4\x7B\xF2\x23\xF9\x91\xFC\x4C\x7E\x26\xBF\x92\x5F\xC9\x59\x72\x96\x9C\x27\xE7\x49\x84\x24\x1A\x75\xC6\x36\x46\x93\xD1\x62\xB4\x1B\x7B\x19\x0B\x8C\xC3\xA4\x35\x97\x42\x63\xA9\xD1\x27\xAD\xB5\xDC\x6E\x5C\x66\x7C\xC0\x58\x6D\x14\x8C\x6B\xA4\x75\x97\x17\x62\xD6\x5D\x5E\xA7\xEB\x2E\xFB\x8D\x0D\xC6\x2F\xE9\xBA\xCB\xCF\xC6\x64\x73\xB2\x39\xD5\xAC\x35\xB7\x36\xB7\x36\x77\x31\x77\x31\xF7\x30\xF7\x30\xF7\x91\xD6\x56\xFA\x9B\x87\xD3\xB5\x95\xF9\xE6\xF9\x66\x3B\x37\x91\x73\x72\x4E\xCE\xC5\x95\x70\x65\x5C\x19\x37\x99\x9B\xCC\x95\x73\xE5\xDC\x54\x6E\x2A\x17\xE0\x82\xDC\x34\xEE\x66\x6E\x0E\x37\x87\x9B\xC7\xCD\xE3\x16\x70\x0B\xB8\xDB\xB9\xDB\xB9\x85\xDC\x42\xEE\x4E\xEE\x4E\x6E\x09\xB7\x84\x5B\xCA\x2D\xE5\xEE\xE6\xEE\xE6\xEE\xE5\xEE\xE5\xEE\xE3\xEE\xE3\x1E\xE0\x1E\xE0\x1E\xE2\x1E\xE2\x1E\xE1\x1E\xE1\x1E\xE5\x1E\xE5\x56\x72\x2B\xB9\xC7\xB9\xC7\xB9\x27\xB9\x27\xB9\xA7\xB8\xA7\x38\x81\x13\xB8\x5A\xAE\x96\xAB\xE3\xEA\xB8\x67\xB8\x67\xB8\xD5\xDC\x6A\x6E\x2D\xB7\x96\x7B\x9E\x7B\x9E\x5B\xCF\xAD\xE7\x5E\xE0\x5E\xE0\x5E\xE4\x5E\xE4\x36\x71\x9B\xB8\x2D\xDC\x16\x6E\x1B\xB7\x8D\xDB\xCE\x6D\xE7\x5E\xE1\x5E\xE1\x5E\xE3\x5E\xE3\x5E\xE7\x5E\xE7\xDE\xE4\xDE\xE4\xDE\xE6\xDE\xE6\x76\x72\x3B\xB9\x5D\xDC\x2E\xEE\x3D\xEE\x3D\xEE\x03\xEE\x03\x6E\x2F\xB7\x97\xDB\xCF\xED\xE7\x3E\xE2\x3E\xE2\x0E\x72\x07\xB9\x8F\xB9\x8F\xB9\x4F\xB9\x4F\xB9\xC3\xDC\x61\xEE\x33\xEE\x73\xEE\x04\x77\x82\xFB\x86\xFB\x86\xFB\x3E\x6E\xFD\x68\x10\x3F\x88\x1F\xC2\x0F\xE1\x87\xF1\xC3\xF8\x4B\xF8\x4B\xF8\xCB\xF8\xCB\xF8\xCB\xF9\xCB\xF9\x91\xFC\x48\x7E\x34\x3F\x9A\xBF\x92\xBF\x92\xBF\x9A\xBF\x9A\xBF\x96\xBF\x96\x1F\xC7\x8F\xE3\x27\xF0\x13\xF8\xEB\xF9\xEB\xF9\x1B\xF9\x1B\x79\x07\xEF\xE0\x9D\xBC\x93\x2F\xE2\x8B\x78\x17\xEF\xE2\x4B\xF9\x52\xDE\xCD\xBB\xF9\x29\xFC\x14\xBE\x82\xAF\xE0\xE7\xF0\x73\xF8\x79\xFC\x3C\x7E\x01\xBF\x80\xBF\x9D\xBF\x9D\x5F\xC8\x2F\xE4\xEF\xE4\xEF\xE4\x97\xF0\x4B\xF8\xA5\xFC\x52\xFE\x6E\xFE\x6E\xFE\x5E\xFE\x5E\xFE\x3E\xFE\x3E\xFE\x01\xFE\x01\xFE\x21\xFE\x21\xFE\x11\xFE\x11\x3E\x4F\xC8\x13\xDA\x09\xED\x04\x8B\x60\x11\xAC\x82\x55\xE8\x24\x74\x12\x3A\x0B\x9D\x85\x2E\x42\x57\xA1\xBB\xD0\x5D\xB8\x58\xB8\x58\xE8\x25\xF4\x12\xFA\x08\x7D\x84\xBE\x42\x5F\xA1\xBF\xD0\x5F\x18\x28\x0C\x14\x06\x09\x83\x84\x21\xC2\x10\x61\x98\x30\x4C\xB8\x44\xB8\x44\xB8\x4C\xB8\x4C\xB8\x5C\xB8\x5C\x18\x29\x8C\x14\x46\x0B\xA3\x85\x2B\x85\x2B\x85\xAB\x85\xAB\x85\x6B\x85\x6B\x85\x71\xC2\x38\x61\x82\x30\x41\xB8\x5E\xB8\x5E\xB8\x51\xB8\x51\x70\x08\x0E\xC1\x29\x38\x85\x22\xA1\x48\x70\x09\x2E\xA1\x54\x28\x15\xDC\x82\x5B\x98\x22\x4C\x11\x2A\x84\x0A\xC1\x2B\x78\x85\xA9\xC2\x0C\xE1\x26\xE1\x26\xE1\x16\xE1\x16\x61\xB6\x30\x5B\x98\x23\xCC\x11\xE6\x09\xF3\x84\x05\xC2\x02\xE1\x76\xE1\x76\x61\xB1\xB0\x58\xB8\x4B\xB8\x4B\xB8\x5B\xB8\x5B\xB8\x57\xB8\x4F\x78\x40\x78\x40\x78\x48\x78\x48\x78\x44\x78\x44\x78\x54\x78\x54\x58\x29\xAC\x14\x1E\x17\x1E\x17\x9E\x14\x9E\x14\x9E\x12\x9E\x12\xC4\xA7\x56\xA8\x15\x56\x0B\xAB\x85\xF5\xC2\x7A\xE1\x05\xE1\x05\xE1\x45\xE1\x45\x61\x93\xB0\x49\xD8\x22\x6C\x11\xB6\x09\xDB\x84\x57\x84\x57\x84\x37\x84\x37\x84\xB7\x84\xB7\x84\x9F\x84\x9F\x84\x33\xC2\x19\x49\x57\x2C\xAC\x2B\xAB\xF3\xD5\x6D\xAB\x8B\xAE\x5D\x49\xBA\x62\xEC\xD9\x42\xBA\xCE\xD3\x78\x76\x90\xCE\xA3\xA3\x67\x03\xF5\x7B\x10\xBA\xEF\x41\x18\x15\x33\xEF\x2A\xDD\x83\x30\x77\x0F\xC2\x23\x7B\x10\x36\xFC\xCE\xFC\x6A\xD7\x1E\x84\xAF\xF7\x20\x28\xE8\x7C\xAA\x17\x9D\x2F\x4D\xD9\x8B\x70\xDB\x5E\x84\x95\x7B\x11\x5E\xDA\x8B\xF0\xC1\x5E\x84\x6F\xC4\xB9\xD8\x3E\x84\x8B\xF6\x21\xF4\xDD\x87\x30\x76\x1F\x82\x77\x1F\xC2\xA2\x7D\xF2\xFC\x2A\x76\x5E\x75\x38\x6E\x5E\x65\x88\x9B\x57\x5D\x1B\x37\xAF\x5A\x1A\x37\xAF\x7A\x93\xCE\xAD\x44\x8A\x9E\x75\x5C\xC3\xFC\x76\x4F\x25\xA8\x08\x2A\x6E\x52\xDC\xA4\x98\xA0\x9C\xA0\x2C\x48\x28\x90\xF6\x44\xA2\x7B\x1E\xB1\xFB\x1D\x53\x55\x53\x55\xC3\x53\x87\x4B\xF3\x82\x73\xBA\x73\xBA\xFD\x99\xFB\x33\x87\x64\x0D\xC9\x12\xF4\x82\x7E\x46\xCE\xAD\x39\x5C\xEE\x64\xE9\xFC\xC1\x23\xB9\xDB\x72\x63\xF5\xFD\x5B\xB8\x5B\x39\x6F\x67\x2F\x5D\x6F\x55\xD2\xF5\xD6\xBE\xF6\x47\xED\x8F\xD9\xCF\xD9\xC3\xF6\x36\xD5\x6D\xAA\x7F\x59\x75\x7E\x55\x0A\x9F\xC2\xCF\xE6\x67\xF3\x2B\xF8\x47\xA5\x35\x54\x9F\xE0\x13\xEE\x10\xEE\x10\x7E\x11\x7E\x15\x76\xD5\xEE\xAA\x3D\x5A\x7B\xB4\xD6\x17\xF2\x85\x3E\x0E\x7D\x1C\xFA\x3E\xF4\x43\xE8\x86\x3A\x47\x9D\xBB\xCE\x5D\x17\x3D\x0B\x24\xED\x17\xD2\x79\xFD\x85\xE6\xEB\xD1\xF9\x65\x74\xFE\x18\x9D\xC7\x6C\xC2\x4D\x58\x8F\xAF\xE0\x72\x66\x39\xD3\xB4\x57\x24\x9F\xDB\x8C\xDD\x2F\xFA\xA3\xBD\x22\x48\x6A\xF3\x87\xFB\x42\xFE\xBF\xF7\x85\xFE\xA2\x7D\xA1\x61\x7F\x6A\x5F\xE8\x9F\xDD\x13\x82\xB4\x7F\x7D\x0F\xE8\x1F\xDD\xFB\x91\xF7\x7D\x06\x67\x0D\xFD\x07\xF7\x7E\x7E\x7F\xDF\x67\xFA\x6F\xF6\x7A\x2E\x36\xF7\x36\xDB\x3B\x97\xFE\xA9\x7D\x93\x04\x7B\x82\xBD\x1F\xDD\x2F\x59\x49\xF7\x4B\x22\xBF\xBB\x5F\x92\x5E\x9D\x21\xED\x99\xFC\xBC\x0A\x9E\x52\x37\xEE\x99\x78\x78\x8F\xB4\x5F\xB2\x54\x58\x2A\xFC\x2C\xFC\x2C\x9C\xFD\x27\xF6\x49\x1A\x6A\x3F\xAF\xFD\xB2\xC5\x3D\x12\x6F\x68\xEA\x1F\xEE\x93\x1C\xA2\xFB\x24\xDF\xB5\xB8\x4F\x52\x7F\x81\xFD\x91\x7F\x76\x5F\x24\xBA\x2F\xFF\xBB\xE7\x2F\xFE\xC3\xFB\x23\x63\xE8\xFE\xC8\xFF\xF5\xFD\x90\xBF\xF7\x3F\xFE\x3B\xF7\x3F\xFE\xDE\xF7\xF8\xD7\xF6\x3D\xE2\xF7\x3B\xE2\xF7\x39\xFE\xB2\xFD\x0C\xBA\xBE\x7F\xC1\x75\xFD\xBF\xD7\xF1\xFF\xA5\x75\xFC\xE8\xF3\x1A\xBE\x86\x6F\xE0\x1B\xF8\x36\xBE\x8D\xDF\xE1\x77\x78\x87\x71\xA9\xF1\x41\xE3\x4A\x63\x8D\x71\xB5\x71\xB3\x71\xB3\xF1\x1D\xE3\x3B\xC6\x73\xC6\xA8\x25\x4E\x79\x3D\x5F\x5E\xC3\xFF\x44\x14\x3D\xC8\x20\x83\x2C\xB2\x98\x80\x09\x98\x84\x49\x98\x8C\xC9\x98\x82\x29\x98\x8A\xA9\xA8\x43\x1D\xB6\xC2\x56\x98\x8E\xE9\x98\x81\x19\x98\x85\x59\xA8\x47\x3D\xE6\x60\x0E\x12\x24\x68\x42\x13\x5E\x84\x17\x61\x5B\x6C\x8B\xED\xB1\x3D\x76\xC0\x0E\xD8\x11\x3B\x22\x87\x1C\xDA\xD0\x86\x76\xB4\x63\x37\xEC\x86\x3D\xB0\x07\xF6\xC4\x9E\xD8\x07\xFB\x60\x5F\xEC\x8B\xFD\xB1\x3F\x0E\xC4\x81\x38\x08\x07\xE1\x10\x1C\x82\xC3\x70\x18\x5E\x82\x97\xE0\x08\x1C\x81\x57\xE0\x15\x38\x0A\x47\xE1\x18\x1C\x83\x57\xE1\x55\x78\x0D\x5E\x83\x63\x71\x2C\x8E\xC7\xF1\x78\x1D\x5E\x87\x37\xE0\x0D\x38\x11\x27\x62\x21\x16\xE2\x24\x9C\x84\xC5\x58\x8C\x25\x58\x82\x65\x58\x86\x93\x71\x32\x96\x63\x39\x7A\xD0\x83\x3E\xF4\xA1\x1F\xFD\x18\xC4\x20\x4E\xC3\x69\x38\x03\x67\xE2\xCD\x78\x33\xDE\x8A\xB7\xE2\x1C\x9C\x8B\xF3\x71\x3E\xDE\x86\xB7\xE3\x42\xBC\x13\xEF\xC2\xBB\xF1\x5E\x5C\x8E\xF7\xE3\x83\xB8\x02\x1F\xC5\x95\x58\x8D\x4F\xE0\x13\xB8\x0A\x57\x21\x8F\x02\xD6\x62\x2D\x3E\x8D\x4F\xE3\xB3\xB8\x1A\xD7\xE2\xF3\xB8\x1E\xD7\xE3\x0B\xB8\x11\x37\xE3\x66\x7C\x15\x5F\xC5\xD7\xF1\x75\x7C\x0B\xDF\xC2\x9D\xB8\x13\x77\xE1\x2E\x7C\x0F\xDF\xC3\x0F\xF0\x03\xDC\x8B\x7B\x71\x3F\xEE\xC7\x8F\xF0\x23\x3C\x88\x07\xF1\x13\xFC\x04\x1B\xB0\x01\x8F\xE0\x11\xFC\x1C\x3F\xC7\xA3\x78\x14\x8F\xE1\x31\xFC\x1A\xBF\xC6\x13\x78\x02\xBF\xC1\x6F\xF0\x5B\xFC\x16\x7F\xC0\x1F\xF0\x27\xFC\x05\xCF\xE0\x19\x3C\x87\xE7\x30\x8C\x61\x04\x06\x18\xF1\x61\x19\x96\x49\x60\x12\x98\x24\x26\x89\x49\x66\x92\x99\x14\x26\x85\x49\x65\x52\x19\x1D\xA3\x63\x5A\x31\xAD\x98\x74\x26\x9D\xC9\x60\x32\x98\x2C\x26\x8B\xD1\x33\x7A\x26\x87\xC9\x61\x08\x43\x18\x13\x63\x62\x2E\x62\x2E\x62\xDA\x32\x6D\x99\xF6\x4C\x7B\xA6\x03\xD3\x81\xE9\xC8\x74\x64\x38\x86\x63\x6C\x8C\x8D\xB1\x33\x76\xA6\x1B\xD3\x8D\xC9\x67\xFA\x32\xFD\x99\x01\xCC\x20\x66\x10\x33\x84\x19\xCE\x5C\xCA\x5C\xCA\x8C\x60\x46\x30\x57\x30\x57\x30\xA3\x98\x51\x8C\x4F\xE1\x53\xF8\x15\x7E\xC5\x34\xC5\xB4\x16\xCE\xE3\x2D\x55\xDC\x2D\x9D\xC9\xAB\x53\xEC\x52\xEC\x52\xBC\xAF\xD8\xA3\xF8\x50\xF1\xA1\xE2\x80\xE2\x80\xE2\x90\xE2\x90\xE2\x13\xC5\x27\x8A\x06\x45\x83\xE2\x88\xE2\x88\xE2\x73\xC5\xE7\x8A\xA3\x8A\xA3\x8A\x63\x8A\x63\x8A\xAF\x15\x5F\x2B\x4E\x28\x4E\x28\xBE\x51\x7C\xA3\xF8\x41\xF1\x83\xE2\x67\xC5\xCF\x8A\x5F\x15\x67\x14\xE7\x15\x5D\xD8\x42\xB6\x90\x9D\xC4\x4E\x62\x8B\xD9\x62\xB6\x84\x2D\x61\xCB\xD8\x32\x76\x32\x3B\x99\x2D\x67\xCB\x59\x0F\xEB\x61\x7D\xAC\x8F\xF5\xB3\x7E\x36\xC8\x06\xD9\x69\xEC\x34\x76\x06\x3B\x83\xBD\x89\xBD\x89\xBD\x85\xBD\x85\x9D\xC5\xCE\x62\xAB\xD8\x2A\x76\x11\xBB\x88\x5D\xCC\x2E\x66\xEF\x62\xEF\x62\x97\xB1\xCB\xD8\x7B\xD8\x7B\xD8\xE5\xEC\x72\xF6\x7E\xF6\x7E\xF6\x41\xF6\x41\xF6\x61\xF6\x61\x76\x05\xBB\x82\x7D\x8C\x7D\x8C\xAD\x66\xAB\xD9\x27\xD8\x27\xD8\x55\xEC\x2A\x96\x67\x79\xB6\x86\xAD\x61\x43\x6C\x88\x7D\x9A\x7D\x9A\x7D\x96\x7D\x96\x5D\xC3\xAE\x61\x9F\x63\x9F\x63\xD7\xB1\xEB\xD8\x0D\xEC\x06\x76\x23\xBB\x91\x7D\x89\x7D\x89\xDD\xCC\x6E\x66\xB7\xB2\x5B\xD9\x7A\x76\x3B\xFB\x0A\xFB\x0A\xFB\x1A\xFB\x1A\xFB\x3A\xFB\x3A\xFB\x26\xFB\x26\xFB\x36\xFB\x36\xBB\x93\xDD\xC9\xEE\x66\x77\xB3\xEF\xB3\xEF\xB3\x7B\xD8\x3D\xEC\x3E\x76\x1F\xFB\x21\xFB\x21\x7B\x80\x3D\xC0\x1E\x62\x0F\xB1\x9F\xB0\x9F\xB0\x0D\x6C\x03\x7B\x84\x3D\xC2\x7E\xCE\x7E\xCE\x1E\x65\x8F\xB2\xC7\xD8\x63\xEC\xD7\xEC\xD7\xEC\x09\xF6\x04\xFB\x0D\xFB\x0D\x7B\x9A\x3D\xCD\x7E\xC7\x7E\xC7\xFE\xC0\xFE\xC0\xFE\xC4\xFE\xC4\xFE\xC2\xFE\xC2\x9E\x61\xCF\xB0\xE7\xD8\x73\x6C\x98\x0D\xB3\xA0\x04\x25\xA3\x64\x94\xAC\x92\x55\x26\x28\x13\x94\x49\xCA\x24\x65\xB2\x32\x59\x99\xA2\x4C\x51\xA6\x2A\x53\x95\x3A\xA5\x4E\xD9\x4A\xD9\x4A\x99\xAE\x4C\x57\x66\x28\x33\x94\x59\xCA\x2C\xA5\x5E\xA9\x57\xE6\x28\x73\x94\x44\x49\x94\x26\xA5\x49\x79\x91\xF2\x22\x65\x5B\x65\x5B\x65\x7B\x65\x7B\x65\x07\x65\x07\x65\x47\x65\x47\x25\xA7\xE4\x94\x36\xA5\x4D\x3A\x5F\x19\x7B\x4E\xAE\xBA\xF5\x8F\xAD\x1B\xCF\xC6\x13\x10\xBB\x19\x61\x09\x4B\x12\x48\x02\x49\x22\x49\x24\x99\x24\x93\x14\x92\x42\x52\x49\x2A\xD1\x11\x1D\x69\x45\x5A\x91\x74\x92\x4E\x32\x48\x06\xC9\x22\x59\x44\x4F\xF4\x24\x87\xE4\x10\xF1\x31\x11\x13\xB9\x88\x5C\x44\xDA\x92\xB6\xA4\x3D\x69\x4F\x3A\x90\x0E\xA4\x23\xE9\x48\x38\xC2\x11\x1B\xB1\x11\x3B\xB1\x93\x6E\xA4\x1B\xE9\x41\x7A\x90\x9E\xA4\x27\xE9\x4D\x7A\x93\x7C\x92\x4F\xFA\x91\x7E\x64\x00\x19\x40\x0A\x48\x01\x19\x4C\x06\x93\xA1\x64\x28\x19\x4E\x86\x93\x4B\xC9\xA5\x64\x04\x19\x41\xAE\x20\x57\x90\x51\x64\x14\x19\x43\xC6\x90\xAB\xC8\x55\xE4\x1A\x72\x0D\x19\x4B\xC6\x92\xF1\x64\x3C\xB9\x8E\x5C\x47\x6E\x20\x37\x90\x89\x64\x22\x29\x24\x85\x64\x12\x99\x44\x8A\x49\x31\x29\x21\x25\xA4\x8C\x94\x91\xC9\x64\x32\x29\x27\xE5\xC4\x43\x3C\xC4\x47\x7C\xC4\x4F\xFC\x24\x48\x82\x64\x1A\x99\x46\x66\x90\x19\xE4\x26\x72\x13\xB9\x85\xDC\x42\x66\x91\x59\xA4\x8A\x54\x91\xB9\x64\x2E\x99\x4F\xE6\x93\xDB\xC8\x6D\xE4\x0E\x72\x07\x59\x44\x16\x91\xC5\x64\x31\xB9\x8B\xDC\x45\x96\x91\x65\xE4\x1E\x72\x0F\x59\x4E\x96\x93\xC7\xC8\x63\xA4\x9A\x54\x93\x27\xC8\x13\x64\x15\x59\x45\x78\xC2\x93\x1A\x52\x43\x42\x24\x44\x9E\x26\x4F\x93\x67\xC9\xB3\x64\x0D\x59\x43\x9E\x23\xCF\x91\x75\x64\x1D\xD9\x40\x36\x90\x8D\x64\x23\x79\x89\xBC\x44\x36\x93\xCD\x64\x2B\xD9\x4A\xEA\x49\x3D\x79\x99\xBC\x4C\x5E\x25\xAF\x92\x1D\x64\x07\x79\x83\xBC\x41\xDE\x22\x6F\x91\x77\xC8\x3B\xE4\x5D\xF2\x2E\xD9\x4D\x76\x93\xF7\xC9\xFB\x64\x0F\xD9\x43\xF6\x91\x7D\xE4\x43\xF2\x21\x39\x40\x0E\x90\x43\xE4\x10\xF9\x84\x7C\x42\x1A\x48\x03\x39\x42\x8E\x90\xCF\xC9\xE7\xE4\x28\x39\x4A\x8E\x91\x63\xE4\x6B\xF2\x35\x39\x41\x4E\x90\x6F\xC8\x37\xE4\x34\x39\x4D\xBE\x23\xDF\x91\x1F\xC8\x0F\xE4\x27\xF2\x13\xF9\x85\xFC\x42\xCE\x90\x33\xE4\x1C\x39\x47\xC2\x24\x4C\x92\x8C\x5A\xE9\x9C\x60\x07\x63\x17\x63\x6F\xE3\x40\xE9\xAC\x60\xF3\x73\x82\x0E\x63\x99\xD1\x6B\xDC\x68\xDC\x64\x7C\xC3\xF8\xB6\xF1\x43\xE3\x41\xE3\x31\xE3\x09\xE3\x2F\xC6\xB3\xC6\xE8\x59\x40\xB5\x59\x63\xD6\x99\x5B\x5D\xF0\x3C\xA0\xDD\xDC\xDD\x3C\x40\x3A\x0F\x38\xCC\x3C\xCF\x3C\x4F\x3A\x0B\x58\xC8\x15\x72\x93\xB8\x62\xAE\x94\x2B\xE5\xDC\x9C\x9B\x9B\xC2\x4D\xE1\x2A\x38\x1F\xE7\xE7\xFC\x5C\x25\x57\xC9\xCD\xE2\xAA\xB8\xB9\xDC\x5C\x6E\x3E\x37\x9F\xBB\x8D\xBB\x8D\xBB\x83\xBB\x83\x5B\xC4\x2D\xE2\x16\x73\x8B\xB9\xBB\xB8\xBB\xB8\x65\xDC\x32\xEE\x1E\xEE\x1E\x6E\x39\xB7\x9C\xBB\x9F\xBB\x9F\x7B\x90\x7B\x90\x7B\x98\x7B\x98\x5B\xC1\xAD\xE0\x1E\xE3\x1E\xE3\xAA\xB9\x6A\xEE\x09\xEE\x09\x6E\x15\xB7\x8A\xE3\x39\x9E\xAB\xE1\x6A\xB8\x10\x17\xE2\x9E\xE6\x9E\xE6\x9E\xE5\x9E\xE5\xD6\x70\x6B\xB8\xE7\xB8\xE7\xB8\x75\xDC\x3A\x6E\x03\xB7\x81\xDB\xC8\x6D\xE4\x5E\xE2\x5E\xE2\x36\x73\x9B\xB9\xAD\xDC\x56\xAE\x9E\xAB\xE7\x5E\xE6\x5E\xE6\x5E\xE5\x5E\xE5\x76\x70\x3B\xB8\x37\xB8\x37\xB8\xB7\xB8\xB7\xB8\x77\xB8\x77\xB8\x77\xB9\x77\xB9\xDD\xDC\x6E\xEE\x7D\xEE\x7D\x6E\x0F\xB7\x87\xDB\xC7\xED\xE3\x3E\xE4\x3E\xE4\x0E\x70\x07\xB8\x43\xDC\x21\xEE\x13\xEE\x13\xAE\x81\x6B\xE0\x8E\x70\x47\xB8\xE3\xDC\x71\xEE\x24\x77\x92\xFB\x8E\xFB\x8E\x2B\xE0\x0B\xF8\xC1\xFC\x60\x7E\x28\x3F\x94\x1F\xCE\x0F\xE7\x2F\xE5\x2F\xE5\x47\xF0\x23\xF8\x2B\xF8\x2B\xF8\x51\xFC\x28\x7E\x0C\x3F\x86\xBF\x8A\xBF\x8A\xBF\x86\xBF\x86\x1F\xCB\x8F\xE5\xC7\xF3\xE3\xF9\xEB\xF8\xEB\xF8\x1B\xF8\x1B\xF8\x89\xFC\x44\xBE\x90\x2F\xE4\x27\xF1\x93\xF8\x62\xBE\x98\x2F\xE1\x4B\xF8\x32\xBE\x8C\x9F\xCC\x4F\xE6\xCB\xF9\x72\xBE\x8A\xAF\xE2\xE7\xF2\x73\xF9\xF9\xFC\x7C\xFE\x36\xFE\x36\xFE\x0E\xFE\x0E\x7E\x11\xBF\x88\x5F\xCC\x2F\xE6\xEF\xE2\xEF\xE2\x97\xF1\xCB\xF8\x7B\xF8\x7B\xF8\xE5\xFC\x72\xFE\x7E\xFE\x7E\xFE\x41\xFE\x41\xFE\x61\xFE\x61\xFE\x22\xE1\x22\xA1\xAD\xD0\x56\x68\x2F\xB4\x17\x3A\x08\x1D\x84\x8E\x42\x47\x81\x13\x38\xC1\x26\xD8\x84\x6E\x42\x37\xA1\x87\xD0\x43\xE8\x29\xF4\x14\x7A\x0B\xBD\x85\x7C\x21\x5F\xE8\x27\xF4\x13\x06\x08\x03\x84\x02\xA1\x40\x18\x2C\x0C\x16\x86\x0A\x43\x85\xE1\xC2\x70\xE1\x52\xE1\x52\x61\x84\x30\x42\xB8\x42\xB8\x42\x18\x25\x8C\x12\xC6\x08\x63\x84\xAB\x84\xAB\x84\x6B\x84\x6B\x84\xB1\xC2\x58\x61\xBC\x30\x5E\xB8\x4E\xB8\x4E\xB8\x41\xB8\x41\x98\x28\x4C\x14\x0A\x85\x42\x61\x92\x30\x49\x28\x16\x8A\x85\x12\xA1\x44\x28\x13\xCA\x84\xC9\xC2\x64\xA1\x5C\x28\x17\x3C\x82\x47\x98\x29\xCC\x14\x6E\x16\x6E\x16\x6E\x15\x66\x09\x55\x42\x95\x30\x57\x98\x2B\xCC\x17\xE6\x0B\xB7\x09\xB7\x09\x77\x0A\x77\x0A\x4B\x84\x25\xC2\x32\x61\x99\x70\x8F\x70\x8F\x70\xBF\x70\xBF\xF0\xA0\xF0\xA0\xF0\xB0\xF0\xB0\xB0\x42\x58\x21\x3C\x26\x3C\x26\x54\x0B\xD5\xC2\x13\xC2\x13\xC2\x2A\x61\x95\xC0\x0B\xBC\x50\x23\xD4\x08\x21\xE1\x59\x61\x8D\xB0\x4E\xD8\x20\x6C\x10\x36\x0A\x1B\x85\x97\x84\x97\x84\xCD\xC2\x66\x61\xAB\xB0\x55\x78\x59\x78\x59\x78\x55\x78\x5D\x78\x53\x78\x53\xF8\x51\xF8\x51\x30\x47\xF2\x9B\xDD\x4F\x8D\xDE\x7B\x8F\x9E\x3F\x8C\x9E\xBB\x8B\xDE\x63\x6F\xB4\xCD\xBB\x07\x21\x7B\x0F\x42\x8F\x3D\x08\x23\xF7\x20\x94\xED\x41\x98\x43\xCF\x02\xFD\xD9\xF3\x40\xEB\xF7\x20\xEC\xDE\x83\xF0\xD5\x1E\x04\x76\xEF\xEF\x9F\x03\xEA\xFD\x27\xCF\x01\x95\xEF\x45\x58\xB0\x17\xA1\x7A\x2F\xC2\x8B\x7B\x11\xF6\xEC\x45\x38\xB9\x17\x21\x69\x1F\x82\x79\x1F\x42\xBF\x7D\x08\xD7\xEE\x43\xF0\xED\x43\x58\x18\x73\x5E\xE8\x08\x3D\x27\x94\x43\xCF\x07\x8D\xA5\xE7\x82\x96\xD1\xF3\x40\x6F\x51\x8A\xDE\xCF\x8F\xAE\x67\x44\xD7\x01\x06\x52\x02\x85\x57\x31\x8F\x5D\xC8\xDE\xAD\xDC\xA2\xDC\xA6\xDC\xA6\xDC\xAE\x7C\x59\xF9\xAA\xF2\x35\xE5\xEB\xCA\xD7\x95\xBA\x04\x7D\xC2\xE5\x09\x0E\xE9\x5E\xC8\xBE\x84\x43\x09\x9F\x26\x7C\x9E\xF0\x65\xC2\xB1\x84\xAF\x13\x4E\x26\xA4\x25\xA6\x25\xDA\x13\x47\x24\xF2\x89\x6B\x12\x8F\x27\x7E\x9F\x78\x3E\xF1\x7C\x62\x46\x52\x76\x92\x21\x29\x2F\xA9\x5D\x92\x25\xC9\x9A\xD4\x39\x69\x42\xD2\xF5\xF4\x2E\xBE\x42\x95\xAF\xEA\xA7\x1A\xA0\x1A\xAD\xBA\x52\x35\x4E\x35\x49\x55\xA4\x9A\xA3\x9A\xA7\xDA\xAC\xDA\xAC\xDA\xDA\x78\xC7\x7B\xA7\x74\xC7\xFB\x88\xEA\x33\x55\x58\x15\x56\x61\xB2\xA2\xC5\xBB\x40\xBE\xE4\xA9\xC9\x95\xC9\x95\xC9\x73\x92\xE7\x25\x6F\x4E\xDE\x9C\xBC\x35\xE6\x8E\xD2\x91\xE4\xCF\x92\xCF\x24\x47\x92\x51\xAD\x50\xF7\x53\xF7\x53\x0F\x50\x0F\x55\x5F\xA2\xBE\x54\x7D\xB9\x7A\xA4\xFA\x5A\xF5\x38\xF5\x24\x75\x91\x7A\xAE\x7A\xAE\x7A\xAB\xFA\x65\xF5\x0E\xF5\x1B\xEA\xB7\xD4\x3B\xD5\xFB\xD5\xFB\xD5\x90\xC2\xA6\x0C\x48\x19\x9A\x32\x3C\xE5\xD2\x94\x11\x29\x23\x53\xAE\x4D\x19\x9B\x32\x29\xA5\x28\x65\x4E\xCA\xBC\x94\xCD\x29\x9B\x53\xB6\xC6\xDD\x1F\x39\x92\xF2\x59\x0A\x68\x14\x9A\xBE\x9A\x7E\x9A\x01\x9A\xA1\x9A\xE1\x9A\x4B\x35\x23\x34\x23\x35\xE3\x34\xE3\x34\x93\x34\x45\x9A\x39\x9A\x79\x9A\xB7\x34\x6F\x69\x76\x69\xF6\x68\xF6\x69\xF6\x69\x3E\xD4\x7C\xAA\xF9\x4E\xF3\xBD\xA6\x6B\x6A\xD7\xD4\x1E\xA9\xF9\xA9\x97\xA4\x8E\x4A\x5D\x9B\xBA\x36\x75\x5D\xEA\x66\xE9\x3C\x50\x96\x36\x5B\x7B\xB1\xF6\x62\x6D\x2F\x6D\x2F\x6D\x1F\x6D\x1F\xED\x00\xED\x40\xED\x54\xED\x7C\xED\x6D\xDA\xDB\xB5\x4B\xB4\x0F\x68\x1F\xD2\x6E\xD6\xEE\xD0\xEE\xD0\x76\xD2\x0D\xD0\x8D\xD5\x4D\xD0\x4D\xD4\x15\xEA\x26\xE9\x8A\x75\xA5\xBA\x0A\xDD\x54\x5D\x50\x37\x57\xB7\x44\xB7\x54\xB7\x54\xF7\xB0\xEE\x51\xDD\x8D\xAD\x1D\xAD\x5B\x65\xA6\x67\x76\xCB\xEC\x91\x79\x55\xE6\xD5\x99\xFE\xCC\x40\xE6\xBA\xCC\x0F\x32\x3F\xCE\xFC\x38\x53\x9D\xA5\xC9\x5A\x90\x75\x5B\x56\x6D\x56\x6D\x56\xF4\x8C\x4F\xA6\xDE\xA0\xBF\x56\x3F\x51\x5F\xA8\xBF\x45\x3F\x5B\x3F\x5B\xBF\x46\x5F\xAF\x07\x03\x6B\xE8\x61\x18\x6A\x98\x62\x08\x18\xAA\x0C\x73\x0D\x8F\x1B\x9E\x31\x1C\x35\x7C\x6F\x68\x9B\xD3\x2B\x47\xBE\x17\xD4\x74\x27\xE8\xE7\x98\x3B\x41\xBB\x4D\xA7\x4D\xA7\xB8\x6F\xB9\xD9\x9D\x67\x77\x6E\xE8\x1C\xE9\xDC\xD1\xDE\x45\xBA\x1B\xE4\xE5\xFD\x7C\x90\xBF\x95\x7F\x8C\x5F\xC9\x9F\xE6\xBF\xE5\x99\x1A\xA6\x26\xA1\x26\xA1\x46\x5D\xA3\xAE\xC9\xAB\xB1\x88\x22\xA0\xA6\xAA\x66\x4E\xCD\xBA\x9A\xD7\x6A\x1A\x6A\xBE\xAD\x89\xD4\x44\x6A\xDA\xD7\x76\xAE\xBD\xA4\xF6\xEA\xDA\xAA\xDA\x79\xB5\xCF\xD7\xD6\xD7\x7E\x51\xFB\x45\xAD\x35\xD4\x33\x34\x24\x34\x24\x74\x45\x68\x64\xE8\xE6\xD0\xAD\xA1\x35\xA1\x35\xA1\xE7\x42\xEB\x42\x2F\x84\x36\x86\xB6\x86\xB6\x85\xB6\x87\xB6\x87\x8E\x87\x4E\x85\x7E\x0C\xFD\x14\xFA\xAC\xEE\xEB\xBA\x13\x75\x27\xEB\xC8\x59\x72\x56\xBE\x9B\xD4\x45\xB2\xF9\x10\x7F\x3F\x69\x9A\x02\xE1\x26\x05\x02\xB6\x70\x6F\x47\x1B\x77\x4F\x47\xA4\x2F\x92\x11\x8E\x26\x23\xB4\xA5\xF7\xBA\xEA\x52\x11\x9E\x4E\x45\x18\xAE\x45\x18\xA3\x45\xC9\xBE\x00\xA3\x43\xE8\xAD\x43\x18\x4E\x6D\x0B\xCC\xD5\x21\xAC\xD1\x21\xBC\xA4\x43\xE9\x3E\x3C\x93\x86\x60\xA1\xF7\xE2\x87\xA5\x21\x0C\x4F\x43\x08\x50\xAA\x4A\x43\x98\x9B\x86\xF0\x7C\x1A\x42\x7D\x1A\xC2\x9B\x69\x08\xEF\xA4\x21\xBC\x9B\x86\xB0\x2B\x0D\x81\x6B\x85\xD0\x8B\xDE\xFD\x11\xE9\x53\x7A\xFF\x27\x7A\xEF\xB1\x2F\xBD\xCB\x38\xE0\x02\xF7\x19\xA3\xF7\x18\x27\x5D\xE0\x1E\xE3\xC5\xE9\x08\xC3\xD3\x11\x26\x52\x5A\x93\x8E\xF0\x4A\x3A\xC2\xEA\x36\x08\xEB\xDB\x20\x6C\x6C\x83\x50\xDF\x06\xE1\x50\x1B\x84\x8F\xDB\x20\xD8\x33\x10\x0A\x32\x10\xEA\x32\x10\x5E\xC8\x68\xB2\xE3\xC1\x65\x21\xE4\x67\x21\xD8\x5B\xB8\xEF\x3A\x20\x1B\xA1\x80\xD2\xE0\x6C\x84\x21\xD9\x08\xEF\x65\x23\xEC\xCF\x46\x38\x90\x8D\xD0\x90\x8D\xF0\x39\x25\xD4\x23\x24\xEB\x11\xBA\xEB\x11\xFA\xE8\x11\xFA\xEA\x11\x06\xE8\x11\x2E\xA1\x74\xA5\x1E\xE1\x7A\x3D\xC2\x22\x3D\xC2\x43\x7A\x84\x2E\x31\x76\x20\x06\xE6\x20\xDC\x93\x83\x20\xE4\x20\xD4\xE6\x20\x6C\xC8\x41\xE8\x9A\x8B\xD0\x33\x17\x21\x9F\x52\xBF\x5C\x84\xFE\xB9\x08\x03\x73\x11\x86\xE5\x22\x5C\x42\x69\x51\x0B\xF7\x18\x1F\xC8\x45\xF8\x9E\x20\xFC\x44\x64\x7B\x16\x3F\x4C\x46\xB0\x4F\x41\xE8\x39\x05\x61\xB4\x57\xA6\x2B\xBD\x08\xB7\x7B\x11\x96\x7A\x11\xEE\xF1\x36\xDD\xE7\x8A\xDE\x43\x7C\x74\x33\xC2\x63\x9B\x11\x5C\xF4\x3E\x5C\xC5\x7B\x08\xFE\xDF\xB9\x17\x37\xF8\x7D\x84\xA1\xEF\x23\xC0\x01\x84\x9E\x07\x10\xFA\x1E\x40\x28\x3F\x80\x50\x49\x69\x3E\xA5\x47\x0E\x20\xAC\x3C\x80\xF0\xF8\x01\x84\xD5\x07\x10\xFE\xF4\xBD\xD9\xC3\x08\x3D\x0F\x23\x9C\x38\x82\x70\xEA\x08\xC2\xEE\x63\x08\xFB\x8E\x21\x0C\xFD\x0A\x61\xC4\x57\x4D\xF7\xF2\xC6\xD0\x75\xD4\x06\x82\xF0\x0B\x89\x39\xA3\xD7\xB8\xBF\x14\xC5\xC1\xD1\x9A\x6B\x34\x45\x9A\x12\xCD\x6C\x4D\x41\xD2\xF5\x49\x13\x93\x26\x26\xC5\x8A\xEB\x7A\x3A\x7E\x8E\x27\x23\xFC\x94\x8C\xE0\xA3\xEB\x7A\xF1\xED\xD4\xF8\xB4\xB0\xDE\x77\xA1\xF6\x13\xDB\x6D\x4C\x2E\xC2\x84\xDC\xA6\xF7\x15\x2A\x85\xAA\xAF\xAA\xAF\x6A\x80\xAA\x40\x75\x99\xEA\x0A\xD5\x28\xD5\x68\xD5\x5C\xD5\x3C\xD5\x56\x55\x3D\x95\x3B\xEF\x48\x72\x47\x91\xAC\x48\x1E\x90\x5C\x90\x3C\x2F\x79\x5E\xF2\xD6\xE4\xFA\xE4\x37\x25\x99\xF2\x4E\x32\xA3\x56\xA8\x07\xA8\x07\xA8\x0B\xD4\x05\x54\x96\x5C\xA1\x1E\xA7\x1E\xA7\xDE\xAA\xDE\xA6\xDE\xDE\x28\x47\xDE\x91\xE4\x08\xA6\x28\x52\x06\xA5\x0C\x4D\x99\x9B\x32\x2F\x65\x6B\xCA\xD6\x94\xFA\x94\x57\x53\x5E\x97\xE4\xC6\xDB\x92\xDC\x60\x34\x0A\xCD\x00\x4D\x01\xAD\xA7\x2B\x24\x79\x31\x57\x33\x4F\xB3\x4B\xF3\x5E\xA3\x8C\x10\xB1\x7F\xB6\x76\xB6\xB6\x93\x8E\xD3\x75\xD5\x75\xD5\xF5\xD6\xF5\xD6\xF5\xD5\xF5\xD3\x8D\xD5\x8D\x6B\xC4\xFC\x79\xBA\xF9\xBA\xDB\x75\x8B\x29\xE6\xAF\xD0\x6D\xC8\xDC\x90\xB9\x35\xF3\xB5\xCC\xD7\x33\xDF\xC8\xCC\xCB\x6E\x9F\x6D\x95\xB0\xBD\x6B\x76\xF7\xEC\xDE\xD9\xD9\x7A\xBD\xFE\x5A\xFD\xB5\xFA\x71\xFA\x71\x7A\xA7\xDE\xA9\x2F\xD2\x17\xEB\x2B\xF4\x7E\x3D\x6B\x60\x0D\x17\x1B\x2E\x36\xF4\x35\xF4\x35\xF4\x37\x0C\x32\x0C\x31\x0C\x35\xCC\x95\xB0\xFE\x71\x03\x6F\x10\x0C\x21\x43\xC8\xF0\xA5\xE1\x4B\xC3\xD7\x86\x13\x86\x6F\x0C\xDF\x18\xBE\x93\xF0\xBF\x53\x4E\x8F\x9C\x8B\x25\x5B\x18\x3F\xE7\xFC\x9C\x63\xB3\x77\xB1\xE7\xD5\xB4\xAD\xB1\xD4\x58\x28\x7E\xBF\x52\x73\x55\xED\xD5\xB5\xF3\x6A\xE7\xD5\xAE\xAB\x5D\x5F\xFB\x52\xED\xA6\xDA\xAD\xB5\xF5\xB5\x5D\x42\xF6\x50\xF7\x50\x8F\xD0\x48\x09\xB7\x45\xE4\xBE\x35\x74\x3C\x74\x3C\xF4\x8D\x84\xD5\x3F\x86\x3E\xAB\xFB\xBC\xEE\x68\xDD\x97\x75\x5F\x49\x98\x7D\xA2\xD9\xFD\x65\x11\x4F\xA3\x98\xCA\x50\x2C\x8D\xE2\xE9\x73\x3A\xD9\xB6\xF3\x46\x1D\x02\x97\x26\x53\x14\x4F\xE7\xC6\xE0\xE8\xFA\x34\x84\x6D\x14\x4F\xDF\xA5\x24\xE2\xA8\xAD\x15\x42\xB7\x56\x08\xDD\x5B\x21\x5C\x4C\xA9\xA1\x15\xC2\x91\x56\x08\x0C\xC5\x53\x11\x47\x07\xB6\x46\x18\xF4\x27\xF1\x54\xC4\xCF\x5E\xE9\x08\x05\xE9\x08\x83\xD2\x11\x86\x51\x12\x71\xF4\xB9\x74\x84\x17\x29\x6D\x4A\x47\xD8\x9A\x8E\xB0\x9D\x92\x88\xAF\x6B\x29\xBE\x6E\x6A\x83\xB0\x95\x92\x88\xAF\xDD\x32\x10\xFA\x66\x20\xF4\xCB\x40\x18\x40\xE9\x69\x4A\xCF\x66\x20\xAC\xCE\x40\xD8\x40\xC9\x94\x89\x60\xCE\x44\x68\x4F\x49\xC4\x61\x5B\x16\x42\x6F\x4A\xF1\x78\xDC\x9F\x52\x2C\x1E\x0F\xA6\x78\xFC\x41\x36\xC2\xA1\x6C\x84\x4F\x63\xF0\xB8\x0F\xC5\xE1\x71\x7A\x84\xF1\x7A\x84\x07\x28\x89\xB8\x2B\xD2\x00\x4A\xB5\x94\xD6\x52\x5A\x47\x29\x8A\xAB\x22\x9E\x2E\xCF\x45\xB8\x9F\xD2\x8F\x14\x57\xA3\xF8\x19\xC5\x4B\x17\xB5\x17\x12\xC5\xC9\x3B\xD8\x85\xEC\x56\xFD\x56\xFD\xC7\xA6\x06\xD3\x11\xD3\xE7\x26\x1F\xEF\xE7\x45\x1D\xFF\x61\x0F\x42\x43\xE8\xA7\x50\x7D\xDD\xC9\xBA\xD3\x75\xBF\x36\xF5\x21\xBA\x1E\xFE\x3A\xC5\xB5\x6A\xBA\xFF\xB5\x59\x85\xB0\x4B\x85\xF0\xBE\x0A\x21\x42\xF7\xC5\x56\xAA\x9A\xD6\xEF\x47\xC7\xE0\xF8\x4A\x6F\x0C\x1E\x49\xFA\xF2\xED\x7F\xB1\xBE\xCC\xA8\xF2\x25\x8D\xB9\x9F\x6A\x90\xEA\x52\xD5\x48\xD5\xC8\x18\xBD\x79\x8E\xA4\x37\x6F\x57\xBD\xAA\xDA\xA9\xDA\x19\xA3\x2F\x33\x92\xBE\x3C\xE8\x82\xFA\xF2\x5C\x49\x5F\xDE\x2E\xE9\xCB\x6F\x24\xEF\x6C\xA6\x2F\xA3\xA4\x2F\x0F\x54\x0F\x54\x0F\x52\x0F\x55\x8F\x94\xF4\xE5\xB1\x8D\xFA\x72\xBD\xBA\x5E\xBD\x53\xBD\x53\x0D\x29\xA2\xA6\x2C\xEA\xCA\x05\x2D\xE8\xCA\x73\x24\x5D\x79\x5B\xCA\xB6\x94\x1D\x29\x3B\x52\xDE\x49\xD9\x49\xF5\x64\x94\xF4\xE4\x41\x9A\xA1\x9A\x91\x9A\x91\x54\x3F\x9E\x23\xE9\xC7\xEF\x53\xFD\xF8\xCF\xEA\xC5\x53\xB5\xB3\xB4\x55\x2D\xE8\xC5\x9D\x75\x76\x5D\x37\x5D\x2F\x5D\x1F\x5D\xBE\xAE\xBF\x6E\x80\x6E\x3C\xD5\x91\x65\xDD\x78\xAE\x6E\x81\xEE\x36\xDD\x12\xDD\x12\xDD\xA3\x17\xD4\x8F\xD7\x67\xBE\x90\xB9\x25\x73\x47\xE6\x8E\xCC\x37\x5B\xD4\x95\x2F\xCA\xB6\x64\x77\xC8\xEE\x96\xDD\x2D\xBB\x8F\xA4\x33\x67\xE9\x0D\x7A\x83\x7E\xAC\x7E\xAC\x7E\xBC\xA4\x3B\x17\xEA\x27\xE9\x27\xE9\x5D\xFA\x72\x7D\xA0\x51\x8F\xDE\xA2\xDF\x26\xE9\xD2\x0A\x43\x0F\x43\x0F\x43\x4F\x43\xBE\xA1\x9F\xA1\x9F\x61\xB0\x61\x30\xD5\xAB\xE7\x18\x9E\x30\x3C\x65\xA8\x31\xD4\x1A\xEA\x24\xFD\xFA\xA8\xE1\x98\xE1\x2B\xC3\x49\xC3\x49\xC3\x29\xC3\xB7\x06\x2E\xA7\x7B\x4E\xCF\x46\x7D\xFB\xC2\xF7\xF0\x77\x9B\x0E\x99\x0E\x9B\x0E\x9B\xBE\xF8\x8D\xEE\xDD\x99\xEA\xDE\xDE\x0B\xEA\xDE\xED\x6A\xDA\x4B\xBA\xF7\xAB\xBF\xD1\xBB\xAF\xAC\xAD\xAA\x9D\x5B\xFB\x7C\xED\xF3\xB5\x1B\x6A\x5F\xAC\xDD\x5C\xBB\x85\xEA\xDF\xB6\x50\xD7\x50\xB7\xD0\xC5\x8D\x7A\xF8\x15\xA1\x5B\x42\xB7\xB4\xA8\x87\x9F\x08\x9D\x0C\xFD\x14\xFA\x29\xF4\x45\xDD\x17\x75\xC7\xEA\x8E\xD5\x9D\x6C\x41\x17\xFF\x77\xE8\xE3\xD2\xF7\x0A\xE2\xF4\xF1\x39\x3A\x84\xE7\x75\x08\x1B\x74\x08\x2F\xB6\xA0\x97\x77\x4A\x43\xE8\x4C\xF5\xF3\x58\xBD\x7C\x4E\x1A\xC2\x86\x34\x84\xAD\x31\x7A\xF9\x2E\x4A\x5D\x5A\x21\x74\x6D\x85\xD0\x83\x52\xCF\x16\xF4\x74\x91\x3E\x8B\xD1\xD7\x31\x46\x5F\x2F\xA0\x14\xAF\x8F\xF7\x4E\x47\x18\x98\x8E\x30\x38\x1D\x61\x28\xD5\xCD\x63\xF5\xF3\xE7\xD3\x11\x36\xA6\x23\xBC\x44\x69\x5B\x3A\x42\x7D\x3A\xC2\xCB\x54\x6F\x7F\x8E\xEA\xED\x9B\xDB\x20\x6C\x69\x83\xB0\x2D\x4E\x7F\xEF\x9E\x81\x90\x9F\x81\xD0\x9F\xD2\xC0\x18\x7D\x5E\xA4\x67\x28\xAD\xC9\x40\x58\x4F\x75\xFC\xA8\x9E\x6F\xCC\x44\xB8\x28\x13\xA1\x5D\x26\x82\x85\xEA\xFD\x5D\xB2\x10\x7A\x65\x21\xF4\xA1\xFA\xBF\xA8\xEF\xF7\xA3\x3A\xFF\x00\xAA\xEB\x8B\xB4\x27\x46\xDF\x3F\x48\x75\xFE\x86\x38\x7D\xBF\xF7\x05\xF4\xFD\xB1\x7A\x84\x09\x31\x7A\xFF\xFD\x7A\x84\x07\xA9\xFE\x6F\x8F\xD1\xFF\xFB\xD3\x39\x40\xEC\x3C\x20\x94\x83\xB0\x26\x07\xE1\xB9\x1C\x84\xE7\x73\x10\xD6\xFF\x83\xF3\x82\xE8\x7C\xE0\x3E\x4A\x0F\xC4\xCC\x0B\x7E\xF8\x9D\x79\x41\xFC\x7C\x20\x3A\x0F\xF8\x23\xBB\x18\xFF\x2D\xFA\x7F\xE3\x43\xCF\x15\x8C\xC9\x40\x98\x90\x21\x9D\x23\xC8\x62\xB3\xD8\xAC\x84\xAC\xD4\x2C\x5D\x56\x76\x96\x7C\xA7\x3E\x94\x55\x98\x81\x50\x9E\xD1\xB4\x6F\x5E\x38\x19\xC1\x3D\x19\xC1\x33\x19\xC1\x1B\x63\x23\xF0\xCF\x9C\xB3\xA8\x15\xC7\x8B\x6E\xA5\xAE\xA1\x36\x5C\x5B\x18\x9A\x1D\x8A\x55\x0F\xED\xD0\x07\x9E\x83\xE7\xE1\x45\x78\x11\x36\xC3\x56\x28\x4C\x70\x27\x9C\x4E\xF8\x35\xA1\x3E\xF1\xCD\xC4\x12\x95\x57\x75\x54\x75\x4A\xF5\x83\xEA\x57\x55\x49\xB2\x37\xF9\x68\xF2\xA9\xE4\x12\xB5\x57\xED\x57\x4F\x57\x1F\x55\x7F\xA7\x2E\x49\xF1\xA6\xCC\x48\x99\x25\xD9\x01\x19\xAF\x99\xA8\x29\xD1\xCC\xD0\x1C\xD5\x9C\xD2\x8C\x49\x9D\x20\xDD\xD1\x32\x69\xBB\x6B\x0B\x74\x97\xE9\x96\xE9\x1E\xD2\xB9\x5B\xDF\xD2\xFA\x9B\x8C\xD3\x19\x51\x5B\x1C\x62\x59\x87\x67\x8F\xCE\xDE\x9D\x7D\x20\xBB\x4A\xBF\x50\xBF\x4C\xFF\x90\x7E\x8C\x61\x82\x61\x8D\xE1\x45\x43\x41\xCE\x65\x39\x63\x72\x26\xE4\xF8\x24\xBB\x70\x33\x4D\x55\xA6\x85\xA6\x31\xE6\xB9\xE6\x05\xE6\x85\xE6\xC2\xB6\x8F\xB4\xFD\xBA\x6D\xA4\xED\x34\xCB\xBD\x96\xF3\xDC\x79\xAE\xC9\x7E\x4D\xBE\xFD\x9E\xAE\xF7\x75\x35\x75\xB3\x76\xBB\xB4\xDB\xE8\x6E\x57\x76\x73\x74\xAB\xEA\xB6\xB0\xDB\xDA\x6E\xDB\xBA\x99\x78\x2B\x7F\x94\x3F\xC5\xDB\x6B\x2E\xAE\xD9\x5D\xF3\x51\x0D\xD4\xAA\x24\x1B\x28\xA7\x6B\x7F\xAD\x1D\x13\x9A\x10\x12\xF5\x1D\x5D\x24\x5B\x5A\x17\x8D\xDA\x69\x2B\x40\x84\x19\x88\xB0\x08\x11\xEE\x8C\xB1\xCF\x66\x52\x20\xE4\x29\x10\x06\x51\x1A\x41\xE9\x3D\x05\xC2\x5E\x05\x42\x35\x8B\x50\xCB\x22\x8C\xA7\xF6\x61\x66\x26\x21\xCC\x4E\x42\x10\x92\x10\x56\xC7\xD8\xA7\xC9\x50\x21\x18\xA8\x1E\xB5\x45\x85\x50\x1F\xA7\x4F\x15\x50\xBB\x26\xB7\x26\x23\xCC\x4A\x46\x78\x34\x19\x61\x25\x9D\xF7\x9D\x4A\x6E\xB2\xE7\x12\xB5\xF3\x52\xAB\x46\x58\xAD\x46\x38\x93\x82\x10\x49\x69\xB2\x97\x13\xB5\xCF\x99\xAB\x45\x68\xAF\x45\xB8\x52\x8B\x70\x8D\x16\xE1\x35\x6A\x2B\x30\x6A\xC7\xF1\xB4\x0E\xE1\x57\x9D\x6C\x67\x70\x60\x1A\xC2\xEE\x34\x84\x8F\xD2\x10\x0E\xA7\x21\xFC\x90\xD6\x64\x1F\x65\x4C\x3A\xC2\x84\x74\x84\xDD\xE9\x08\x1F\xA5\x37\xF5\xE3\xFA\x0C\x84\x37\x33\x64\xFB\xA3\x7D\x33\x11\x1A\xB2\x10\xBE\xCB\x6A\xB2\xCB\x15\xB5\x27\x19\x9D\x5F\x46\xED\x19\xD5\x1B\x11\xF6\x18\x9B\xEC\x8F\x45\xFB\xF9\x98\x29\x08\x13\xA6\x20\x5C\x3F\x05\xC1\x39\x05\xA1\xCA\x83\x70\xBF\xA7\xC9\xAE\x5D\xD4\x9E\x5D\xD4\x5E\x5C\xC1\x61\x84\xCB\x0E\x23\x9C\x3E\x82\xF0\xEB\x11\x59\x5F\xDD\x75\xAC\xC9\x6E\xEA\xD4\x13\x08\x75\x27\x10\x9E\x39\x81\xB0\xFA\x04\xC2\xDA\x18\xFB\x72\x9D\x4F\x22\x74\x89\xDA\x99\xFB\x16\x21\xE5\xDB\x26\xFB\x69\xD1\x73\x61\xD1\xF6\x8B\x3D\xB7\x13\xC5\x5F\x51\xAF\x8F\x1D\x4F\x2D\x8D\xA1\xD8\xF1\x73\x54\x7D\x4A\x1A\x3B\xE2\xB8\x29\xD1\x78\xE3\xC6\x8C\xB5\x71\xCC\x88\x63\xA5\x69\x9C\x7C\x74\xC1\x71\x22\xF6\xEF\x3F\xEA\xD7\xD1\x27\xDA\x3F\xA3\xFD\xA3\xE4\x0F\xDA\xFF\x1F\x69\xF7\x3E\xB4\xDD\xBF\x8A\x6B\xF7\x09\x2D\xB4\x7B\x7C\x3B\x5F\xA8\x1D\xA3\xED\xD7\xD8\x1E\xF4\x5C\xA9\x88\x1B\x9F\x64\x7F\x9A\x0D\xE9\x08\xD7\xA7\x23\xDC\x48\xCF\x79\xD5\x27\x9E\x49\x3C\x9F\x18\x89\x7E\x62\x16\x44\xCC\x29\x94\xB0\xE3\x0E\x73\x2C\x56\x88\x78\x00\xD4\xBE\x57\x10\x2F\x3C\x9E\xA3\xFD\x32\xFA\xC4\x62\xA5\x88\x8B\x22\x16\x9E\x56\x7F\xA7\x16\x71\x50\xC4\x40\x9F\x66\x86\xA6\xA3\xB6\xBB\x56\xC4\x3B\x11\xE7\x0E\x64\x1F\xC8\x6E\x8E\x63\x0E\xF3\xC2\x16\x70\xEC\x42\xD8\x25\x62\x56\x6C\xFB\x45\xF1\xA9\xF2\x0F\xF0\xE9\x3F\x8D\x3F\x7F\x06\x77\x5C\xBA\x26\x7C\xC9\xA7\xB8\xF1\x35\xC5\x8D\xEB\x28\x5E\x44\xF1\xE1\x8F\x70\x20\x3A\xDE\xFF\xD1\x71\x7E\x98\x9E\xC7\x6F\x3C\x37\x46\xCF\x85\xD9\xE9\xB9\xFC\x68\x7F\x1C\x75\x18\x61\xF4\x61\x84\xAA\x8C\x15\x19\x63\x72\x66\x37\x7E\x36\x2B\xDE\x4E\x45\xB4\xFC\x4D\xF3\x5D\xB9\x3D\x3A\x2B\x10\xBA\x28\xE4\x73\xA0\x62\x3D\x8E\xA1\x7A\x7A\xEC\x79\x57\xA9\xBF\xD1\x73\x9C\x85\xC9\x08\xB3\x93\x63\xCE\x7F\xD2\x07\xD5\x0A\xF5\x85\xCE\xCA\xF7\x8B\xDB\xAF\x91\xCF\xCD\x17\xA9\x4B\xD4\xD3\x1B\xBF\x4C\x1F\x6F\x67\xA4\x8A\x9E\xAF\x8D\xE2\x82\x19\xF2\xA0\x1D\x74\x04\x4E\xFA\xEE\x5D\x5F\x18\x28\xD9\x8B\xBD\x51\xFA\xBE\xDD\xCD\x70\x33\xDC\x0A\xB7\xC2\xE3\xF0\x38\x08\x20\x40\x1D\xD4\xC1\x06\x78\x01\x36\x49\x56\x64\xB7\xC1\x2C\xC5\x2C\xC9\x56\xEC\x75\x4A\x87\x72\xA1\x72\x91\x72\xAB\x72\xAB\xB2\x5E\x59\xAF\x7C\x45\xF9\x8A\x72\x87\x72\x87\xF2\x7B\xE5\x0F\x4A\x55\x42\x72\x42\x4A\x82\x46\xB2\x23\x4B\x12\x8C\x09\x93\x13\x2A\x12\xF6\x24\xEC\x49\x80\x44\x4D\xE2\xCF\x89\xBF\x26\xDA\x93\x06\x48\x6B\x9E\xC5\x2A\x97\xCA\xA7\xF2\xA9\xCE\xAB\xCE\xAB\xA6\x25\x4F\x4B\x3E\x9D\x7C\x3A\x79\x7A\xCA\xF4\x94\xF9\x29\xF3\x53\x7E\xD0\xFC\xA0\x19\x9D\x3A\x3A\xF5\xBA\xD4\xEB\x53\x59\x6D\x2B\x6D\xBA\x36\x5D\x9B\xAF\xED\xAF\x5D\xA0\x5D\xA0\xDD\xAD\xDD\xA3\xFD\x48\x7B\x40\x3B\x42\x37\x5A\x77\x56\x77\x56\x57\xD8\xBA\xAC\x35\xA4\x43\xBA\x27\xC3\x93\xF1\x48\xC6\x8A\x8C\xA8\x6D\xDA\x3D\x99\xFB\x32\x3F\xCC\x3C\x90\x09\x59\xC9\x59\x43\xB3\x87\x65\x13\xBD\x51\x5F\xAD\xE7\xF5\x35\xFA\x67\xF4\xD7\x19\x0A\x25\x1B\xCB\x7D\x73\x06\xE6\xCC\xCA\x99\x9D\x53\x9F\xF3\x7A\xCE\x07\x39\x1F\xE4\xE8\x4C\x16\x93\xDD\x34\xC4\x34\xCC\x74\xA5\xE9\x6A\xD3\x44\xD3\xAD\xA6\x59\xA6\x25\xA6\xBB\x4C\x49\x79\xEA\x3C\x6B\x5E\xC7\xBC\x32\x4B\xA5\xE5\x35\xCB\x0E\xCB\x51\xCB\x29\xCB\x3C\xEB\x83\xD6\x0F\xAD\x07\xAD\xE7\xAC\xE7\xAD\xBF\x72\xE7\xB8\x30\x17\xE1\x7C\x9D\x7D\x9D\xC1\x66\xB3\xD9\x6D\xA3\x6D\x57\xD9\xAE\xB2\xA1\x5D\x61\x4F\xB2\xA7\xD9\xD3\xED\x46\xBB\xF8\xF4\xB7\xF7\xA7\xB6\x6A\xCF\xDA\xC3\xAB\x22\xAB\x34\xBC\x96\x0F\xF0\x01\x7E\x16\x3F\x8B\xFF\x8E\xFF\x99\x0F\xD6\x4C\xAF\x79\xB7\x66\x57\xCD\x2F\x35\x67\x6A\xCE\xD5\x9C\xAB\xB1\xD5\x76\xA9\x75\xD4\x3A\x6A\xB7\xD7\xEE\x94\xEC\xB9\xDD\x10\x72\x84\x3E\x09\x7D\x1A\x3A\x1D\xFA\x36\x74\xBC\xEE\x78\x9C\xDD\x5A\x67\xB8\x28\x5C\x14\x2E\x0B\x97\x85\x27\x87\xA7\x84\x31\xA2\x88\x28\x23\xC9\x91\x94\x88\x36\xA2\x8F\x18\x22\x46\xC9\x96\x6D\xFF\xC8\xC0\xC8\xC0\xC8\xF5\x91\xEB\x23\x37\x46\x6E\x8C\x38\x22\xAE\x48\xD4\x7E\xED\x4A\x85\x4C\xBB\x29\x45\xED\x25\x8F\xA3\xB6\xF0\x8C\x2A\x99\xA2\xFB\xA2\x51\x7B\x6C\xB3\x29\x9D\xA6\xEB\xD5\x51\xBB\xD7\x0F\xA9\x11\x56\xA8\x11\x9E\x49\x95\xE9\x5A\x2D\xC2\x04\x2D\xC2\x25\xD4\xBE\xF4\x26\x1D\xC2\x66\x1D\xC2\x56\x6A\x9F\xAE\x20\x0D\x61\x48\x1A\x42\x30\x0D\xA1\x32\x0D\xE1\xB5\x34\x84\x37\xD2\x10\x76\x52\x3A\x48\xE9\xE3\x34\x84\x4F\xD3\x10\x7A\xB7\x42\xE8\x4F\x75\x5F\x91\x2E\x4F\x47\x18\x9D\x8E\x70\x5D\x8C\xBC\x10\x69\x07\xA5\xED\x6D\x10\xF6\xB7\x41\x18\x94\x81\x30\x24\x03\x21\xAA\x7F\xF7\xCB\x44\x18\x90\x29\xDB\x14\x15\x69\x28\xB5\x37\x7A\x84\xD2\x40\x3D\xC2\x70\x3D\xC2\xC3\x7A\x84\x15\x7A\x84\xC7\xF4\x08\x4F\xE8\x11\x06\x51\x3B\xDA\xBE\x1C\x84\xA9\x39\x08\x3F\xD3\x75\xFF\x88\x51\xA6\xA8\x9D\xD5\xA8\x3E\xFF\x23\xA5\x5E\x53\x10\xFA\x4E\x41\x18\x4A\xE9\x01\xBA\x36\x77\xC4\x2B\xD3\x4A\x6A\xAF\xF4\xF6\x03\x08\x77\x1E\x68\xC1\x1E\xFC\x14\x84\x61\x53\x7E\xAB\x3F\xC5\x9F\xB3\x2D\xA4\x72\xA1\xF1\xDC\x30\x7D\xC4\x71\x3E\xD0\x54\x60\xBA\xC6\x74\x8D\xA9\x7B\xB8\x47\x78\x64\x78\x74\x58\xEC\x13\x51\xFF\xCE\xD0\x19\x16\xD1\xB1\x2D\x8E\xAB\x84\xAC\x84\x2C\x9D\xA9\x8D\x29\xD3\x96\x69\xD3\xDB\xF4\xB6\x7C\x5B\x5F\x5B\x81\xAD\xC0\x96\x63\xCF\x91\xFA\xB4\xD8\x9F\xBB\x86\xBB\x85\xC7\x87\xC7\x4B\xFD\x4F\x13\xD1\x44\xA2\x6D\x0E\xD2\x77\x49\xAD\x70\x23\xDC\x28\xE1\x4A\x5F\x6D\x5F\x6D\x7F\x6D\x7F\xED\x8A\x8C\x15\x19\xC3\x4D\xC3\x4D\xB3\x4C\xB3\x4C\x77\x99\xEE\x32\xA9\xF2\x54\x79\xEA\x3C\x75\x5E\xC7\xBC\x8E\x79\x6E\x8B\xDB\x32\xC5\x32\xC5\x52\x61\xA9\xB0\x78\x2D\x5E\xCB\x54\xCB\x54\x4B\xC0\x12\xB0\x54\x5A\x2A\x2D\x3B\x2C\x3B\x2C\x5F\x5A\xBE\xB4\x7C\x65\xF9\xCA\x72\xDC\x72\xDC\x72\xD2\x72\xD2\x72\xCA\x72\xCA\x32\xDF\x3A\xDF\x7A\x9B\xF5\x36\xEB\x1D\xD6\x3B\xAC\x8B\xAC\x8B\xAC\x8B\xAD\x8B\xAD\x77\x59\xEF\xB2\x2E\xB3\x2E\xB3\xDE\x63\xBD\xC7\xBA\xDC\xBA\xDC\x7A\xBF\xF5\x7E\xEB\x83\xD6\x07\xAD\x1F\x59\x3F\xB2\x1E\xB4\x1E\xB4\x9E\xB7\x9E\xB7\xE6\xD9\xF2\x6C\xED\x6C\xED\x6C\x16\x9B\xC5\x66\xB5\x59\x6D\x2A\xBB\xCA\xAE\xB6\xAB\xED\x1A\xBB\xC6\xAE\xB5\x6B\xED\x69\xF6\x34\x7B\x1B\x7B\x1B\x7B\xA6\x3D\xD3\x9E\x6D\xCF\xB6\x1B\xEC\x06\x3B\xB1\x1B\xED\x03\xCE\x0F\x38\x9F\x15\xCE\x0A\xF7\x0C\xF7\x0C\xF7\x0E\xF7\x0E\xE7\x87\xF3\xC3\xFD\xC2\xFD\xC2\x03\xC2\x03\xC2\x05\xE1\x82\xF0\xE0\xF0\xE0\xF0\xD0\xF0\xD0\xF0\xA5\xE1\x4B\xC3\xD7\x85\xAF\x0B\xDF\x10\xBE\x21\x3C\x31\x3C\x31\xAC\x8A\xA8\x22\xFD\x23\xFD\xA5\xB1\x57\x18\x29\x8C\x14\x45\x8A\x22\x22\xB6\x66\x9B\xB2\x4D\xB9\xA6\x5C\x53\xBE\x29\xDF\xA4\xB0\x29\x6C\x4A\x9B\xD2\x96\x6C\x4B\xB6\x69\x6C\x1A\x5B\xAE\x2D\xD7\x66\xB6\x99\x6D\x05\x35\xD3\x65\x3D\x81\xCA\xF5\xE8\x78\x14\x31\x3A\xCB\x94\x65\x32\x98\x72\x4C\x46\x93\xD1\xD4\xC7\xD4\xC7\xC4\xD8\x18\x1B\x6B\x63\x6D\x2A\x9B\xCA\x96\x62\x4B\xB1\xE5\xD8\x72\x6C\x26\x9B\xC9\x06\xD2\xF7\x4E\x45\xFC\xB7\x40\x47\x49\x06\x70\x60\x8B\x91\x03\x37\xC0\x0D\x8D\xD8\x2F\xE2\xFE\x6F\x31\x7F\xE1\xBF\x0D\xEF\x2F\x84\xF5\x22\xCE\xFF\x16\xE3\x95\x59\x89\xFF\x00\xCE\x67\x98\x32\x4D\x26\x09\xEB\x7B\x9B\xFA\x9A\x06\x98\x06\x99\x86\x98\x2E\x91\x30\xFF\x6A\xD3\xB5\xA6\x89\xA6\xE6\x78\x8E\xB6\x04\x5B\x92\x4D\x6D\x53\xDB\x52\x6D\x19\xB6\x2C\x5B\xB6\xCD\x60\x33\xD8\x88\xCD\x68\xEB\x28\x61\x7D\x1F\x5B\x3F\xDB\x40\xDB\x20\xDB\x20\xDB\x90\x18\xDC\x17\xB1\xFE\x7F\x0A\xE7\x75\xE1\x8C\x70\xB6\x84\xF3\xF6\xF0\xB0\xF0\xF0\xF0\x65\xE1\x2B\xC2\x63\x24\xCC\x1F\x17\x76\x84\x9D\x71\x98\x9F\x18\x49\x96\x70\x3F\x25\x92\x1A\x83\xFD\xFD\x22\xFD\x22\xCE\x88\x33\x52\x2C\x62\x7E\xEC\xF3\x17\xE3\xFF\xDF\xB8\xFF\xAF\xE1\x7E\x07\xE8\x00\xD7\xC3\xF5\x92\x6E\x96\xAF\xCD\xD7\xF6\xD3\xF6\xD3\x3E\x92\xF1\x48\x86\xDE\xA4\x37\x11\x13\x31\x0D\x33\x0D\x33\xDD\x6A\xBA\xD5\xB4\xC4\xB4\xC4\x94\x94\x97\x94\x97\x9C\x97\x9C\x67\xCD\xB3\xE6\x95\x59\xCA\x2C\x93\x2D\x93\x2D\xE5\x96\x72\x8B\xC7\xE2\xB1\xF8\x2C\x3E\x8B\xDF\xE2\xB7\x04\x2D\x41\xCB\x6B\x96\xD7\x2C\x47\x2D\x47\x2D\xC7\x2C\xC7\x2C\x5F\x5B\xBE\xB6\x9C\xB0\x9C\xB0\x7C\x63\xF9\xC6\x32\xCF\x3A\xCF\xBA\xC0\xBA\xC0\x7A\xBB\xF5\x76\xEB\x42\xEB\x42\xEB\x9D\xD6\x3B\xAD\x4B\xAC\x4B\xAC\x4B\xAD\x4B\xAD\x77\x5B\xEF\xB6\xDE\x6B\xBD\xD7\x7A\x9F\xF5\x3E\xEB\x03\xD6\x07\xAC\x1F\x5A\x3F\xB4\x1E\xB0\x1E\xB0\x9E\xB3\x9E\xB3\x5E\x64\xBB\xC8\xD6\xD6\xD6\xD6\xD6\xDE\xD6\xDE\xD6\xC1\xD6\xC1\x36\xD8\x36\xD8\x96\x64\x4F\xB2\x27\xDB\x93\xED\x29\xF6\x14\x7B\xAA\x3D\xD5\xAE\xB3\xEB\xEC\xE9\xF6\x74\x7B\x86\x3D\xC3\x9E\x65\xCF\xB2\xEB\xED\x7A\x7B\xAE\x3D\xD7\x3E\xF0\xFC\xC0\xF3\x99\xE1\xCC\xF0\xC5\xE1\x8B\xC3\xBD\xC2\xBD\xC2\x7D\xC2\x7D\xC2\x7D\xC3\x7D\xC3\xFD\xC3\xFD\xC3\x03\xC3\x03\xC3\x83\xC2\x83\xC2\x43\xC2\x43\xC2\x97\x84\x2F\x09\x4F\x08\x4F\x08\x5F\x1F\xBE\x3E\x7C\x63\xF8\xC6\x70\x52\x24\x29\xD2\x37\xD2\x57\xD2\x65\x1C\x11\x47\x64\x52\x64\x92\xD4\xAF\xA3\xF7\xAA\xA2\xFD\x2F\x3A\x6F\xB1\xD7\x5E\x2D\x8D\xB1\xEA\x8C\xAF\x33\xBE\xC9\xF8\x25\x23\xDA\xFD\xDB\x42\x5B\xE8\x04\x9D\xA0\x1F\x0C\x80\x89\x30\x11\x0A\xA1\x10\x6E\x81\x5B\x60\x16\xCC\x82\x27\x80\x87\x1A\xA8\x85\xA7\xE1\x69\x78\x16\xD6\xC2\x3A\x58\x07\x1B\x61\x63\xE3\xF7\x14\x5E\x66\x5E\x63\xDE\x97\xBE\xA9\x70\x9C\x39\xC9\x9C\x64\x4E\x31\x11\xA6\x52\x51\xA9\x98\xAF\x58\xA0\xF8\x49\xF1\x93\x62\x2E\x3B\x97\x5D\xA2\x5C\xAA\x4C\x48\x48\x4A\x50\x27\xA8\x13\x52\x13\xB4\x09\x9F\x24\x7C\x92\xF0\x55\xC2\x57\x09\xE7\x13\xC2\x09\x3F\x25\xFE\x94\x18\x4E\x8C\x24\x7E\xA7\xFA\x5E\x75\x46\x75\x56\xF5\x6D\xF2\xB7\xC9\x3E\xB5\x4F\xFD\xBD\xFA\x8C\x7A\x76\xCA\xEC\x94\xD1\x9A\xD1\x9A\x99\x9A\x99\x9A\x81\xA9\x03\x53\x51\xAB\xD0\xB6\xD6\xB6\xD6\xB6\xD1\x66\x6A\xF5\x5A\xA3\xB6\x87\xB6\x87\xB6\xA7\xB6\xA7\xB6\xB7\xB6\xB7\x76\xAB\xF6\x35\xED\xEB\xDA\x77\xB4\xEF\x6A\x77\x69\xF7\x6A\x3F\xD4\x3E\xA6\x5B\xA9\x5B\xD6\xFA\xA1\xD6\x15\x19\x15\x19\x07\x33\x0F\x66\x16\x64\x17\x64\x7F\x92\x1D\xC9\x76\x1A\x26\x1B\x82\x86\x5B\x0C\x5B\x8C\x5B\x8C\xDB\x8C\xDB\x8D\x3B\x8D\xBB\x8C\x1F\x1B\x3F\x35\x9E\x34\x9E\x32\x9E\x37\x86\x8D\x43\x4D\x43\x4D\x57\x99\xAE\x32\xDD\x64\xBA\xC5\xB4\xC8\xB4\x98\x7E\xAB\x01\xCD\x0A\x73\x82\x39\xC9\xAC\x32\xA7\x9B\xD3\xCD\x19\xE6\x2C\x33\x31\xE7\x99\xDB\x49\xDF\x70\xB0\x98\xAD\x66\xAB\x28\x9E\xCC\xF9\xE6\xBE\xE6\x02\xF3\x50\xF3\x08\xE9\x7B\x0E\xA3\xCD\x8B\xA4\xEF\x39\x24\xE6\xA5\xE4\x75\xC8\xEB\x94\x27\x7F\xD7\x61\x45\xDB\xAF\xDA\x42\xBB\x52\xCB\x72\xCB\xAB\x96\xD7\x2D\x5F\x58\x4E\x5B\xE6\x5A\x1F\xB2\xEE\xB7\x1E\xB2\x9E\xB5\x86\x63\xBE\xF7\xF0\x05\xF7\x35\x37\xC6\x76\xA5\x2D\xD6\x96\xF5\xE9\x2E\x67\xBB\xB0\x76\xD6\xDE\xCA\xDE\xDA\x6E\xB2\x9B\xEC\x3D\xED\xBD\xEC\x03\xE8\xF7\x1F\x96\x75\xBD\xBB\xEB\xFD\xF4\xDB\x0F\xD0\x8D\x74\xEB\xD8\xED\x92\x6E\x63\xBA\x8D\xE9\x56\xD8\x6D\x76\xB7\x45\xDD\xD6\x74\xAB\xEF\x26\x7F\x03\x62\xD9\xAA\x1D\xAB\x40\xC8\x10\x4C\x82\x59\x58\x28\x2C\x12\x3A\xD4\x74\xAA\xE9\x59\xD3\xA7\x66\x7A\x68\x66\x28\xFA\x2D\x08\xEB\x59\xEB\xD9\xE7\xCE\x6E\x3F\x7B\xEE\xFC\xF9\xF3\x93\xC2\x93\xC2\xC5\xE1\x92\xB0\x3B\xEC\x0E\xB3\x11\x36\xA2\x8E\xA8\x23\x39\x11\x12\x19\x10\x19\x10\x29\x88\x14\x44\x6E\x88\xDC\x10\x99\x18\x99\xD8\xF8\x4D\x88\x73\x91\xF3\x91\xE8\xF7\x1F\x66\x22\xC2\x42\x44\x58\x4C\xED\x8B\x47\xBF\x07\x11\xB5\x33\x1E\xFD\x2E\xC4\xF4\x24\x84\x19\x49\x08\x6F\x24\xCB\x34\x90\x7E\xDF\x67\xAF\x11\xE1\x5B\x23\x42\xBF\x29\x08\x03\xA9\xCE\x27\xD2\x0A\x6A\xD3\xBE\xA5\xEF\x46\x14\xD3\xEF\x46\x94\xFF\xCE\x77\x23\xE0\x7D\x84\x41\xD4\xC6\xF9\xB0\x98\xEF\x47\x6C\xDF\x27\xD3\x41\x4A\x67\x29\xB5\xD9\x2F\xD3\xC5\x94\x46\x53\xF2\x52\x5A\x48\xA9\x96\xD2\x2B\x94\xE0\x43\x84\xC8\x47\x08\xBD\x0E\x20\xE4\x1F\x40\xA8\x38\x80\x10\x3C\x80\x30\xED\x00\xC2\xBC\x03\x08\x0B\x0E\x20\xDC\x76\x40\x9E\x73\x8B\x14\x39\x22\xD3\xD3\x27\x64\x5A\x43\xC9\x76\x52\xA6\xC6\xEF\xEE\xFC\x83\xDF\x89\xD0\xC4\x7C\x27\xE2\xFF\xD2\xF7\x21\x20\xA9\x73\x92\xA8\x7B\x55\xD5\xBC\x56\xF3\x6E\xCD\x47\x35\xB1\x78\xF7\x04\x3C\x05\x4B\x95\x4B\x95\x22\x26\x45\xF1\xE7\x2C\xC5\x9F\x5F\xD5\xBF\xAA\x45\xBC\x11\x71\x43\x1C\xFF\xBD\x6B\x7A\xD7\x9C\x3B\x7F\xEE\x7C\x74\x0C\x34\x44\x0E\x47\xBE\x88\x1C\x6D\xD4\x21\x3E\x36\x22\x34\x18\x9B\xDA\x2F\xDA\x6E\x55\x54\x5E\x8F\x61\x11\x66\xC7\x7C\x0F\xA2\x2A\xE6\x9C\xDC\xC7\x6D\xE4\x7E\x72\x67\x4B\xFB\x33\xF4\x99\xA3\x99\xD7\xE2\x1D\xFC\xF8\xF3\xA3\x47\x35\xA7\x34\xDF\x69\x7E\xD0\x44\xD7\x9B\xA2\x4F\x14\xD3\x6B\xA0\x06\x56\xC3\xEA\x46\x0C\xFF\x3D\xEC\xBE\x10\x3E\x8A\x58\x13\x8B\x1F\x51\xCC\x10\xF1\x22\x8A\x09\x9F\x45\x3E\x8B\x9C\xFD\x1E\x21\xF2\xBD\x9C\x87\xA8\x6C\x89\xCA\x14\x51\x96\xAC\x85\xB5\x8D\x32\x44\x94\x13\xA2\x7C\x88\xC7\xDE\x2C\x73\x96\x84\xA7\x97\x9B\x2F\x37\x2F\x33\x2F\x37\x3F\x6C\x7E\xC4\x5C\x6D\xAE\x36\x3F\x69\x7E\xD2\xCC\x9B\x79\xF3\xB3\xE6\x67\xCD\xEF\x9A\x77\x99\xDF\x37\xBF\x6F\xDE\x63\xDE\x63\xFE\xC1\x1C\xB9\xC8\x94\x67\xCE\xBB\x25\xEF\x96\xBC\x47\xF2\x9E\xCF\x3B\x94\x77\x38\xEF\x85\x76\x2F\xB4\xDB\xDE\x6E\x7B\xBB\x5F\xDA\x45\xDA\x79\xDB\x7B\xDB\xD7\x37\xE2\x6E\xC4\x02\xD6\x58\xEC\x8D\x74\xB4\x77\x1A\xDA\xE9\x92\x4E\x57\x74\x12\xF1\x2F\x8A\x7B\x51\xBC\x8B\xE2\xDC\x91\xC8\x91\xC8\x57\x91\x13\xCD\xF4\xC7\xFF\x69\xDC\x88\xFF\xBE\x16\x0F\x3C\xD4\x42\x2D\x3C\x0B\xCF\xC2\x1A\x58\x03\xB2\x4C\xBD\x4B\xD9\x92\x2C\x3D\xA3\x3A\xA3\x92\xE5\xE7\x2F\xEA\x33\x71\x32\xF4\x9F\x95\x9F\xF1\xB2\xF3\xB7\xF2\x30\xF3\x82\xF2\x70\x84\x79\x84\xF9\x8A\x18\x79\x78\x9F\xF9\x21\xF3\x0A\xF3\x4A\xF3\xE3\xE6\x27\xCC\xAB\xCC\x4F\x99\x05\xF3\x33\xE6\xD5\xE6\x9D\xE6\xDD\xE6\xF7\xCC\x1F\x98\x3F\x30\xEF\x35\x7F\x6F\x86\x3C\x51\x66\x1A\xF3\x2E\x92\xE4\xE6\xCD\x79\xB7\xE6\x3D\x9C\xB7\x2E\xEF\x60\xDE\x91\x66\x32\x74\x43\xBB\x8D\xED\xEA\xDB\xBD\xDC\xEE\xE7\x76\xD0\xDE\xD3\xDE\xD7\x5E\x94\xA9\xDB\x2C\xD2\x37\xBA\x3A\x75\xE9\x34\xAC\xD3\xF0\x4E\x23\x3B\xFD\x73\xF2\xF4\x1F\x91\xA5\xB2\xFC\xEC\x55\xD3\x87\xCA\xD0\xF3\xE7\xCF\x9F\xFF\x3C\xF2\x79\xE4\x58\xE4\x58\xE4\xE4\x5F\x20\x0F\x0F\x19\x11\x0E\xFF\x9B\xE5\xE2\x3F\x2A\xC7\xA2\xF2\x2B\x2A\xB7\xFE\x1D\xF2\xEA\x8C\x88\x35\x3F\xFC\xEF\x90\x5B\x76\x3A\x5F\x8C\x3E\x51\x3B\x06\xD1\xFD\xAB\x31\x74\x1E\x56\x65\xD8\x66\x10\xE7\xF3\x50\xC3\x35\xDB\x3F\x81\x44\x4D\xA2\x36\x71\x44\xE2\xC8\xC4\xD1\x89\x85\x49\x93\x93\x64\x5B\x27\xE9\x8D\x36\x4E\xFC\x99\x81\xCC\xA8\x0D\x13\x31\xB8\xA9\xF1\x6C\xBF\xBC\xF7\x56\xAD\x7F\x46\x5F\x25\xD9\xEA\xF8\x54\xDA\x47\xAF\xA2\x76\x01\xA2\xFB\x60\x73\xFF\xA4\x7D\x9A\xD8\x3B\x14\xBB\xD5\xBB\xA5\xF3\xAF\x47\xD5\x67\xD4\xF5\xB4\xFF\x46\xE7\x8B\x0D\xD4\x66\x50\xEC\x3D\xF8\xC8\xA2\x98\x7B\xF0\xBF\xB1\x71\xD3\xFC\x1E\x86\x6C\xEF\xA6\x28\xA5\x24\xC5\x9B\x32\x3D\x65\x76\x4A\x55\xE2\xDA\x44\x4C\xCD\x4F\x2D\x48\xBD\x5E\x3E\x94\x40\x6D\xCE\x4C\xA5\xE7\xC1\xB6\x4A\x38\x27\xAF\xAB\xC8\xB6\xEB\x7D\x9D\x67\x77\x9E\xDD\xB9\x51\x3E\x53\xBB\x09\xD1\x7D\xC0\xA8\xDD\x8E\xE8\xFA\x00\x3C\xD5\x89\x8F\xAD\xEE\x7A\xBA\x8F\x17\x95\xFF\xD5\x74\x7F\x27\x42\x29\x6A\xCF\xA2\x8E\xAE\x09\x36\xDA\xB5\xA8\x5E\xBC\x4A\xC4\x10\x13\x98\xA0\x1A\xAA\xA1\x2A\xA3\x2A\x03\x4C\xC9\xA6\x0E\x26\xAB\xA9\x8B\xA9\x8B\xC9\x61\x72\x98\xC0\x0E\x76\xA0\xE7\x5A\x3A\x48\x3E\x56\x53\x7C\xF8\x66\x61\x01\x60\x52\x12\x42\xAC\x85\xD4\xAA\x11\x08\x0A\x00\x18\x11\xC7\xAF\xA6\xFC\xF1\x4C\x73\xFE\xC6\x11\xB2\x7B\x41\xAA\xFC\xB7\x7E\x04\x4A\xDF\x5E\x37\x5D\x8E\xD2\x37\xCF\xBB\x24\xCA\xFC\x82\x2B\x10\xD8\x98\xF7\x3E\x4A\x68\x1E\xCF\x98\x2B\x10\x18\x00\x69\xEE\x29\xF2\x0B\xA9\x3B\xFA\xE4\xD3\xFC\x94\x5D\x21\xFF\x2D\xA7\x7F\x6F\x4A\x8E\xCB\x3F\x7D\xCF\xA4\x92\xF9\xCB\xE2\xE2\xD9\x48\xF9\xD5\x57\x60\xEC\x57\x05\xA5\xFD\xBE\xD8\x78\x1A\x68\x7E\x7F\x52\x52\xFE\x48\xB9\xFC\xD1\x67\x6D\x5C\x78\x1D\xF5\xEF\x94\x22\xF3\x3B\x8C\x8C\xAB\x27\x5A\x2E\x6E\x64\xF3\xFC\xE8\x35\x32\xBF\x47\x5C\xF8\x45\x69\xB4\xDE\x46\xA2\xF4\x7D\xE1\xAA\x91\x28\x7D\xD3\xF8\x34\xAD\x87\x37\xE2\xE2\xE9\x90\xD8\xFC\xFD\xDD\x34\xBE\xDE\x71\xFC\x06\xFA\xDE\x16\xDA\x5E\xA7\xE3\xE2\x19\x45\xF3\x09\xA3\x10\x34\x62\xFA\xA3\x50\xFA\xF6\x72\xBE\x36\xAE\x9E\x47\xC9\xEF\x2D\xA4\xF9\x59\x36\xAA\x79\xFB\x6E\xA4\xF5\x50\x3D\xAA\x79\xBD\x5D\x1E\x97\x9F\xA7\x47\xC9\xEE\x1C\xDA\x1F\xD6\x51\x77\x3D\x8D\xBF\x80\xF2\x77\x8F\x42\xB8\x5E\x74\x8F\x41\xB8\x0A\x00\x3A\xD2\xFC\xEF\xBE\xAA\x79\xFC\x8B\x69\xFF\x3C\x74\x55\xF3\x74\x0A\xE2\xFA\x73\xC3\x55\x72\x7E\xB7\x63\x73\x3E\x5C\x8D\x90\x00\x00\x0E\x1A\xBF\xFD\x6A\x84\xD8\x0B\x07\xBA\xB8\xFE\x3F\xE6\x6A\xD9\x7D\x37\xED\x0F\x85\x57\x37\xAF\x87\xE5\xD0\x3C\xBC\x8F\xC6\x67\x88\xAB\xCF\x35\x34\x9E\xDD\x71\xE3\xA2\xFE\x6A\x04\x25\x00\x0C\x89\x4B\xF7\xF4\xD5\x72\xFD\x7C\x1F\x17\x1E\xAE\x91\xDD\x8B\x53\x9B\xF3\x93\x28\x7F\x18\xE5\xEB\xAE\x91\xBF\xBD\x1B\x7D\xA6\xD3\x76\x59\x76\x0D\x42\x72\x0C\x3F\x9F\x86\xDF\x78\x8D\x9C\x5E\xFD\x35\x72\x7E\x66\xC5\xC5\x7F\x8C\xC6\x7F\x59\x5C\xB9\x4E\x5F\x83\xD2\xF7\xF6\xF5\xB4\x7E\x7C\xD7\x22\x98\x45\x8F\xB1\x72\xBB\xB9\x29\xDF\x34\xB6\xF9\x78\x4C\x8A\x1B\xD7\x85\x63\xE5\x76\x39\x11\x1D\xD7\x63\xE5\x71\x11\x7D\x8E\xD2\xFC\xEF\x1E\x8B\x20\x6D\xEE\x8E\x93\xEB\xF9\x39\xDA\xEE\x05\xE3\x9A\xC7\xFF\x75\x5C\xFE\xAB\xC6\xC9\xE5\xFB\x8C\x8E\xF7\x65\xE3\x9A\xFB\x9F\x8D\xAB\xE7\xEA\x71\x72\xFE\x17\xD0\xF6\xAD\x1F\x27\x8F\xCF\xE8\xD3\x91\xD6\xC3\xE7\x34\xDE\xD3\x34\xFC\xF2\xB8\x74\x75\xE3\x65\xFF\x32\x8A\x03\xA6\xF1\x08\xE9\x62\x3D\x8D\x97\xF3\xDF\x27\x0E\x67\xD6\xD0\xF0\x85\x71\xE3\xA8\x9E\xF2\xB7\xD3\xF1\xBB\x7B\x7C\xF3\x71\x71\x20\x1E\xDF\xA2\xF1\xD0\x7C\x9E\x1E\x2F\x8F\xF7\xE8\x63\xA6\x7C\xFB\x04\x79\xFC\x8F\x99\x20\x87\xEF\x49\xDB\xA5\x70\x42\x73\xDC\x38\x1C\x17\xBF\x6F\x82\x9C\xFF\x15\x71\xE3\x6B\x0D\x7D\x6F\x27\x4B\xEB\x6D\x42\xF3\xF1\xF2\x56\x5C\x3C\xBB\x69\xF8\xDC\xB8\xFE\xD0\x40\xF9\x0B\x28\x4E\x9E\x9E\x80\x70\x0B\x02\x34\x38\x10\xBE\x03\x80\x14\xDA\x5E\xBE\x52\xDA\x1F\xE8\xF3\x20\xE5\x57\x97\x36\xEF\xFF\x57\xD2\xF2\x9A\xCA\x9A\xD7\xDB\x33\xB4\x7D\xED\x65\x72\xBF\x8F\x3E\xF7\xA5\xC5\xE1\x00\x7D\x6F\x71\x1C\xDF\x57\x26\xD7\xDF\x52\x1A\x4F\x4D\x99\xFC\xF7\x69\xFA\x37\x99\x96\xB7\xBE\x0C\xA1\x88\x01\x18\xE3\x97\xBF\x7D\x7D\x37\xED\xB7\x85\x01\x84\x5E\x62\xFF\x0D\xCA\xFD\x3F\x3B\x5A\xAE\x20\xC2\x45\xE2\x8F\x99\x08\xAF\x8B\xF8\x4F\xF1\xA1\x60\x76\xF3\xF1\xBB\x8D\xA6\xEB\x9B\x8D\x30\x81\x01\x68\xB8\x03\xA1\x1D\x00\xDC\x1B\xD7\x7F\x92\x16\xC9\xEE\xAA\x38\xBE\x6E\x91\x5C\xCF\x36\x5A\x2E\xD3\x22\x84\x4D\x22\x7F\x09\x42\xA9\x58\x9E\xB8\xF6\xBA\x74\x99\xEC\x5E\xA3\x8C\xAB\x1F\xCA\x2F\x8B\x96\x6B\x99\x5C\x2F\xD1\xE7\x29\x3A\x2E\x6E\x59\xD6\xBC\x5F\x1D\x8C\xCB\xCF\x32\xEA\xFF\x46\xFC\x78\x5C\x26\xD7\xFF\x99\xB8\xFC\xD4\xD3\x74\x5E\x8A\x8E\xBB\xBB\x11\x2A\x44\xFE\x3D\x08\x83\x01\xE0\x07\x2A\xA7\x76\x2F\x6F\xDE\xBE\x8F\xC5\xC5\xFF\xF9\x72\xD9\xAD\xA1\xF1\x9F\x58\xDE\xBC\x9F\x8C\x8E\x4B\x17\xEE\x93\xF3\xE9\x56\xC7\xD5\xE7\x7D\xF2\x7B\x9E\x38\x3C\xEF\x70\x9F\xEC\x4E\x8C\x4B\xD7\x4E\xC3\x7F\x4D\xEB\x61\xCC\x7D\x08\xEF\x8B\xE5\x7D\x10\xA1\x12\x00\x7E\x8C\x4B\x77\xCC\x0A\x39\xDD\xB1\x34\x7C\xE1\x0A\xB9\xDF\xCC\x58\x21\xBB\x3F\x8D\x6B\x97\xAA\x15\x72\xFC\xD5\x71\xF1\x54\xAF\x90\xEB\x63\x23\x0D\xFF\xC6\x8A\xE6\xE5\xE5\x68\x7F\x68\x58\x81\x30\x44\x1C\x7F\x8F\xCA\xF5\xF9\x5E\x5C\x7B\x41\x35\x1D\xA7\xF1\xFA\x52\xB5\x1C\xDF\x37\x14\xF7\xEC\xD5\x72\xBF\xDC\x5D\x8D\x90\x05\x00\x4B\x68\xBD\x2D\x7B\xBC\x39\x3E\x28\xE2\xE4\x4B\xF5\xE3\x72\xFC\xC7\x69\x3E\xD7\x3C\xDE\xBC\xFF\x24\x46\xC7\xD7\xE3\x72\x3F\x68\x78\x5C\x2E\x57\x06\xAD\x67\xDD\x13\x08\xB9\x62\x3A\x4F\x20\x74\x14\xE3\x8B\x93\xD7\x0D\x4F\xCA\xF1\x3D\x17\x87\x3F\xA7\x9F\x94\xF3\xE5\xA7\xFD\x59\xB7\xAA\xB9\xFF\x7B\x34\xDD\xF4\x38\xBE\x3E\xAE\x7E\x4C\xAB\xE4\x7A\x28\x8B\x93\x0B\x05\xAB\xE4\x74\x5F\x88\x0B\x3F\x86\xC6\x77\x4D\x5C\xF8\xF1\x94\x9F\x1A\x17\xBE\x90\xC6\x73\x7B\x1C\xDF\x47\xC3\x3F\x15\xC7\x9F\x41\xF9\x81\x78\xF9\x48\xF9\x9F\x53\xFE\xB2\x55\xCD\xE5\xE9\x73\x29\x71\xB8\x4D\xD3\x3D\x14\x17\x4F\x03\xE5\x7F\xAF\xA3\xB8\xBD\x0A\x61\xBE\xE8\x21\x20\x5C\x2C\xE6\x27\xAE\x9E\xD7\xD4\xC8\xED\x65\x8E\x8B\xFF\xC3\x1A\xD9\xFD\x7C\x7C\x7B\x51\xFE\x0B\x51\xFD\xB6\x46\xEE\xFF\xD1\xE7\x38\xED\x6F\xBA\x5A\x84\x34\xB1\x1E\x6B\x65\xF7\xB7\x34\xFE\xC2\x5A\x84\x4B\x63\xC2\x5F\x4E\xFB\x61\x55\xA8\x39\xAE\x96\xD1\x7E\x58\x13\x6A\x9E\xFE\xC3\x71\xF5\xB9\x26\x24\x97\xB7\x3B\x2D\x57\x7D\xA8\xB9\x3C\x6A\x4D\xFB\xE1\xE9\x10\xC2\x1C\x91\xF1\x0C\x42\x0F\x51\xAF\xA6\xF8\x50\xFD\x2C\xC2\xE5\x31\xE1\xAD\xF1\xF2\x71\xB5\xDC\x7F\x94\x34\x9F\xC7\x56\xC7\xE9\xF3\xD1\x7A\x88\xE3\x7F\x4B\xEB\x1F\xD6\x20\x2C\x17\xFB\xD5\x73\x08\x57\x8A\x72\x9C\xE6\xE7\xC3\x75\xCD\xC3\xEB\x68\x79\x1B\xE2\xF8\xEB\xA2\xF1\xAF\x43\x68\x25\xF6\xDB\xF5\x74\x9E\x18\x37\x4E\xC7\xAF\x97\xDD\x09\xF1\xFD\x93\xF2\x67\xC4\xE9\xE7\xBE\xF5\x72\x3A\x6F\xC6\xCF\xEF\x68\xFC\x83\x68\xFC\xD5\xEB\x11\x52\xC4\x7A\xA0\xF1\xB4\xA7\xF5\xD3\xB0\x5E\x1E\xD7\xD7\x6C\x90\xDD\x77\x45\xE5\xCE\x06\xB9\x9F\x15\xBC\x20\xB7\x83\x2E\xAA\x0F\xBC\x80\xE0\x13\xFD\x5F\x44\x18\x0E\x00\x77\xC6\xCB\x9D\x4D\xB2\xFB\x97\xB8\xFC\x54\x6F\x92\xF3\x19\x89\xC3\xD5\x35\x34\xFC\x5B\xB4\x5D\x36\x6E\x6A\x5E\x6F\x33\xA2\xB8\xB4\xA9\xF9\x7B\xCF\x44\xE7\x35\x9B\x9A\xE3\xDE\xA3\x34\xDD\x86\xB8\x78\xCE\xD0\xF0\xC7\x36\x35\xC7\xE7\x9F\x69\x7F\xFE\x21\x2E\x7C\x55\xB4\x9E\x37\x37\x97\x77\x59\xB4\xBF\xA5\x6F\x6E\x1E\xDE\x1F\xD7\xDF\x4C\xD4\xFF\x63\x1A\x8F\x7D\xB3\xAC\x87\xFB\x28\x7F\x7C\x9C\xBE\x57\xB5\x59\x2E\x07\x4F\xC7\x69\xF5\x66\xB9\xBD\xA2\x4F\x77\xDA\x8E\xBB\x37\x37\x7F\xCF\x42\xCB\xBB\x27\x2E\x3F\xC7\x69\x7B\x35\x6C\x6E\xAE\x3F\x0C\xA4\xE1\xCF\x6D\x6E\x5E\x0F\x49\x71\xFD\x50\xB7\x45\x8E\xAF\x6B\x1C\x2E\x99\x28\x9F\xA3\xF1\xD8\xB7\x34\xF7\x3F\x15\xD7\xBE\x05\x34\xFC\x8D\xF1\xF2\x97\xF2\x33\xE2\xE7\x2F\x5B\xE4\x7C\xD9\x29\x7F\xC6\x96\xE6\xE5\x7A\x97\x8E\xC7\xAA\x2D\xCD\xE7\x9B\x7B\xE2\xF4\x87\x6A\x9A\x2F\x96\xA6\x5B\x13\x97\xCF\x43\x34\x9F\x4F\xC7\xF1\x6F\xA3\xED\xBB\x66\x4B\xF3\x7A\xAB\x17\xFF\x1B\xD4\xB0\x32\x51\x5D\xAF\x90\xE2\x85\x0B\x3F\xA2\x7F\xD2\x1F\xF8\xEB\xFE\xC0\xBF\xE0\x77\xFC\xC5\xA7\xEA\x77\xFC\xF2\xD5\x08\xBD\xDF\x97\xCA\x31\x0B\x01\x66\x20\x40\xB9\xD8\x87\x8D\xA2\x5E\x06\x00\x27\x23\x91\xE9\x3D\xE5\x74\x7E\x02\xD0\xF5\x45\xC9\x5A\xA3\x5C\xA6\x24\x9A\x37\x13\xCD\x43\x55\x34\x43\x7F\x61\x00\xD1\x53\x94\x19\xC5\xE2\xF8\x54\x00\xE8\x2C\x00\xD5\xB7\x21\x14\x0C\xD6\x42\xD5\xFD\x0F\x02\x1C\xFE\x51\x09\x6F\x3D\xDC\x57\x8C\x40\x4B\x5F\x16\x65\x52\x2B\x1A\x31\x4A\xE5\x92\xDB\x6D\xF1\x7B\x54\xEE\xBE\x17\x6D\xD7\x88\xF4\xAD\xC6\x48\x44\x07\x62\x99\xC5\x39\x02\x9C\xDC\xC9\xB0\x1E\x67\x85\x0B\xB7\xEC\x64\x36\x2B\x21\xC5\xEB\x73\x3A\x26\x55\xBA\xCB\x83\x6E\x8F\x1D\x63\x5D\x5D\x99\x58\x57\x37\x45\xAC\xAB\x3B\x1B\xEB\xEA\xA1\x4C\x16\x5D\xCE\x49\x5E\x7F\xD0\x91\xA0\x91\x7E\x97\x96\x3A\x8A\xBC\x95\x9E\x60\xA2\x3A\xEA\x0C\x54\x56\x24\x69\xA3\x0E\x9F\xDF\x5B\x5C\x59\x14\x54\x35\xFA\x56\x38\x67\x24\x37\x39\xDC\x1E\x75\x4A\xE3\x7B\x5E\x7F\x30\xA5\xD1\xCB\x59\x5E\xAE\x69\x72\x78\x66\xA6\xA6\xD2\x4C\x38\x2A\x5C\x15\x93\x5C\x7E\xAD\xB6\xB9\xBB\xBB\x4E\xCE\x8F\xDF\x1D\x2C\x73\x38\x27\x05\xD2\xB4\x4D\x4E\xBF\xB7\xD2\x53\xDC\x2A\xB5\x89\x51\xE4\x72\x97\xB7\x8E\x09\x50\x52\xEE\xF5\xFA\xD3\x63\x02\xF8\xCA\x2B\x03\x6D\x62\x02\x54\xB8\x3D\x95\x81\x8C\x56\x31\x8C\xCA\xF2\xA0\xDB\x57\x3E\x33\x53\xD7\xC4\x2B\x76\x4F\x73\x17\xBB\xB2\x62\xF2\xE1\x77\x55\x64\xD3\x00\x7E\xE7\x4C\x47\x91\xD7\x53\xE4\x0C\xEA\xB5\x4D\x9C\x40\xB9\xBB\xC8\x65\x90\xCA\x39\xC9\x1D\x0C\x38\xBC\xFE\x9C\x94\x46\x87\xD3\x53\x9C\xAB\x6D\x74\x79\x5C\xA5\xCE\xA0\x8B\x34\x79\xCF\xF0\xFA\x8D\xAD\x1A\x5D\x81\x32\x77\x49\xB0\xDC\x55\x12\x34\xB5\x6E\xCE\xF3\xBB\x4B\xCB\x82\xE6\x34\x91\x59\xE4\x2E\xF6\x8B\x99\x08\x3A\xDD\x9E\xC0\x45\xC9\x3E\xA7\x3F\xE0\x92\x98\x79\x49\xF2\x6F\xB7\xAF\x6D\xEB\xC6\x80\x6E\x4F\xD0\xE5\x0F\xB8\x8A\x82\x81\x76\x52\xB3\x17\x55\xF8\x1C\xAE\xA9\xED\xD5\xD1\xDF\x1E\xD7\x54\x4B\xA3\x47\x69\xB0\x83\xBA\xE9\xB7\xCB\xDA\xE8\x51\x1E\xEC\xA8\x6E\xFA\xED\xEA\x24\x55\x87\x6B\x9A\xB3\xDC\x51\x14\x9C\xE1\xF0\xB8\xA6\x73\x19\xCD\x38\x01\x57\xD0\xE1\xF6\xF8\x2A\x83\x9D\x93\xA2\x7C\x1B\x2B\xFE\xDF\xA5\xCD\x6F\xC2\x15\x3B\x83\x4E\xBB\xE1\x37\x6C\x97\x27\xE8\x9F\xE9\xF3\xBA\x3D\xC1\xAE\x99\xCD\x3C\x4B\x5D\x41\x87\xDF\x15\xA8\x2C\x0F\x76\x33\x38\x1C\x25\x5E\x7F\x91\xCB\xE1\xAE\xF0\x89\xBD\x39\xA6\x97\x07\xBA\x4B\x2D\x18\xF4\x3A\x3C\x95\x62\xCF\xEA\x21\x57\xA8\x33\xE0\xEA\xD9\xC3\xE1\x0E\x38\xA6\x39\xCB\xDD\xC5\x17\xA7\x51\x46\xA9\xCB\xE3\x28\x76\x15\x79\x8B\x5D\x3D\xD3\x62\xC2\xC9\xAC\x5E\xB1\x2C\x97\x47\x64\xF5\x8E\x7D\x51\x66\xF5\x69\x13\x13\xAA\xD2\x5F\x4E\x5F\xCE\x8F\x67\xCB\xA1\xFB\x4A\x6D\x3E\x39\xE0\xF5\x38\x2A\x3D\x15\x4E\x7F\xA0\xCC\x59\xDE\x4F\xD7\xC8\xA3\x9C\xFE\x52\xCA\xFE\x4A\x4F\xD0\x5D\xE1\x72\xB8\xFC\x7E\xAF\x7F\x40\x66\x74\xC4\x94\xFA\x9D\x3E\xB1\x73\x3A\x8B\xCA\x9C\x93\xCA\x5D\x03\xB3\x1A\xDF\x2E\x77\xCD\x10\xF9\xC5\xB4\xE8\x05\x2D\xF8\x04\x82\x7E\xB7\xA7\x74\x50\xDA\x6F\x7C\x06\xB7\x69\x64\xC9\xBD\x49\x0E\x39\x24\x3D\x8E\x1D\xF4\x4E\x71\x79\x86\xB6\x8A\x0F\xEC\x0A\x0E\x8B\x8F\xC0\x3B\x69\xB2\xAB\x28\x38\x3C\xB5\x39\xFB\x12\x69\x4C\x4C\x73\x96\x57\xBA\x64\xC6\xA5\x39\x8D\x01\xA6\xFB\xDD\x41\x97\xDF\xE1\xAA\x70\x07\x1D\x93\xBC\xDE\x72\x97\xD3\x73\x59\xCB\xBE\x62\xEF\x2E\x75\xF9\x47\x18\x5A\xF4\x95\x8B\x7F\x79\xCB\x9E\x72\xB9\xAE\xB8\xA8\x45\x4F\x79\x5C\xBB\xCA\x5D\x15\x2E\x4F\x70\xA4\xBE\xC5\x30\x52\xDE\x47\x19\x5B\xF4\x2B\xF2\x96\x97\xBB\x8A\x82\x6E\xAF\x67\xB4\xA9\xE5\xD4\xC5\x1E\x2E\x47\x3F\xE6\xC2\x21\xCA\x45\xA7\xB3\xFC\xCA\xBC\x16\x43\xC8\x15\x1B\x8D\xE6\xAA\x36\xF1\x81\xA4\x3F\x57\x6B\x1A\xD9\xC5\x95\x15\xBE\x6B\x52\x9B\xAA\x5D\x74\x5F\x2B\x35\x43\x85\xB3\xBC\xDC\x5B\xE4\x70\x7B\xDC\xC1\xB1\x52\x27\x2C\x73\x39\x7D\x0E\x5F\xD0\x2F\x0E\xB6\x71\xCD\x39\x01\x57\x70\x7C\x72\xD3\x4B\x13\xA4\x01\x5E\xE2\x77\xB9\xAE\x93\x10\xC2\xEF\x92\xD8\xD7\xB7\x89\x19\x8B\x8E\x22\x67\x51\x99\x4B\x8C\xEB\x86\x16\xD8\x01\x57\xF0\x46\x29\x89\x0A\x57\x85\xD7\x7D\x93\x4B\xCA\xC6\xC4\x66\x1C\x5F\x65\xA0\xCC\xA1\x6D\xC6\xF1\xFA\x0A\x5B\x35\x7F\x29\xE0\xF2\x07\x9D\xCD\x02\x95\xBA\x82\x93\x24\xA4\xAD\xF0\x15\x4B\xB1\x16\x69\xC5\x5F\xC5\xAE\x12\x67\x65\x79\x50\x04\x93\x62\xB5\xC8\xA8\x70\xCE\x10\x1D\x2E\x75\x34\x6C\xB1\xAB\xBC\x44\xCA\x80\xDC\x83\x44\x14\x99\x54\x52\x2A\x71\x26\x95\x34\x61\x4A\x59\x56\x3C\xC7\xE1\xF1\x4A\x75\xE1\x4E\x6B\xF2\x99\x54\x22\xE1\xF8\xE4\x28\x4B\x02\x75\x89\x3F\x85\x9D\xEA\x9C\x14\x28\x4F\x9A\xEA\x2C\x2E\x76\x78\x3D\xAE\x0A\x56\xFC\xE5\x49\x9A\x1A\xA8\x9C\x24\xBA\xBD\xEC\xD4\x8A\xCA\x72\x1F\x3B\xD5\xE9\x29\x9E\x9A\x24\xFE\xEF\xF0\x78\x83\x7E\xC5\x54\xAF\x3F\xC0\x4E\x9D\xE1\xF5\x07\xD9\xA9\x1E\x57\x69\x65\x5A\x53\x56\x03\x0E\xBF\xD3\x53\xEA\x9A\x96\xE6\x70\xF8\x9C\xC1\x32\x29\x21\xB9\x9F\x4C\x4F\x71\xD0\x01\x29\x7A\xCC\xD0\x39\x24\x20\xA5\x03\x32\x58\x16\x98\xA9\x71\xC8\x2E\xBF\xAB\xC2\x3B\xCD\x75\x53\xD4\x59\xE2\x2E\x0F\xBA\xFC\x37\xB7\x89\x36\x1A\xED\x75\x32\xFB\x96\x56\x71\xEC\x52\x57\xF0\xD6\xF8\xA0\x72\x84\xB3\xD2\xE3\xD8\x95\x1E\xB7\xD7\x33\x3B\xD1\xE1\xA8\x70\xF9\x4B\x5D\x55\xD8\x3A\xEA\x1F\x93\x8B\x39\x71\x5C\x39\xD5\xB9\xB2\xE6\x23\x09\x0F\x77\x49\xC9\x3C\x4C\x8F\x3A\x1B\xA5\x9D\xDB\xEB\x99\x8F\x6D\x28\x3B\xD0\x8C\xBF\x00\x35\xD1\xE0\x52\x16\x6E\xC3\xD4\xC6\x70\x12\xE3\x76\x94\xFA\x77\x20\xE8\x2F\x77\x79\xEE\x40\x35\x75\x78\x8A\x2A\x7C\x0B\x65\x97\x3B\x50\xEC\x2E\x75\x07\x17\x45\x5D\x01\x9F\xB3\xC8\x75\x27\xAA\x64\x57\x99\x6B\xC6\x62\x94\x86\x85\x3B\xE8\x75\x2E\x91\x63\x73\x06\xBD\xEE\x9E\x3D\xEE\x6A\x74\x94\xF4\xEC\xB1\x14\x5B\xD1\xA8\xDD\x9E\xD2\x00\xD5\x2B\x96\xD1\xC2\x34\x31\x25\x39\x7F\x77\x73\xB6\xCB\x53\x1C\x98\xEE\x0E\x96\xDD\x83\x19\xB1\xEC\x12\xAF\xBF\xC2\x29\xD5\xC2\xBD\xD8\x3A\xD6\xC3\xED\x29\x76\xCD\xF0\x96\x2C\x6F\xCE\xF5\xBB\x7C\xE5\xCE\x22\xD7\x7D\xB4\xA2\x9A\x73\x1D\x9E\xFB\x31\x2D\x96\x1F\xF0\x95\xBB\x83\x0F\x34\x4F\x30\x10\x74\xFA\x83\x52\x4E\x1E\x6C\x1E\x49\xA0\x72\x92\xFC\xF3\x21\xD4\xC5\xF2\x83\x7E\x77\xC5\xC3\xCD\x83\x8A\x2C\x87\xA8\xF3\x3C\xD2\x3C\x6E\x89\x2F\xE9\x3D\x2B\x30\xF3\x37\x1E\x3E\xBF\xAB\xC4\x3D\xE3\xD1\x16\x7C\x02\x95\x25\x25\xEE\x19\x8F\xB5\x10\x99\xD4\x4C\x2B\x31\xB9\xC9\x51\xDD\xBC\x88\xE5\xDE\xE9\x2E\xFF\xE3\xCD\x79\x95\x3E\x9F\xCB\xFF\x84\x5C\x71\xC1\x99\x3E\x57\x40\xD4\x1E\xE4\xC1\xF6\x64\x1C\x57\x7E\x65\x95\xDC\x54\x8D\x5C\x2A\xC1\x9E\x92\x5B\xBB\x91\x2D\x89\x18\x5E\xAE\x9D\xA6\x18\x5C\x41\x21\x2E\x52\x79\xB4\xD4\xC8\x99\x8A\xC9\x40\x79\x79\xAD\xDC\x71\x65\x9E\x38\x49\x08\xC9\x15\x5B\xE9\x71\x8B\x2A\x86\x23\x50\xE9\xF7\x7B\x45\x75\xB3\x4E\xAE\xA5\x28\x5F\x56\x4C\x44\x67\xF0\x69\xCC\x69\xC1\xA7\xF1\xC5\x67\x5A\x7E\x31\x58\xD2\xFB\xD9\xE6\x3E\xB2\x52\x23\xF9\xAC\x6E\x9E\x89\x72\x67\x20\x28\xF1\xD7\xC8\xD5\x12\xE5\x8B\x85\x15\x5B\x60\x6D\x73\x76\xD0\x2B\x37\xC2\x73\xBF\x61\x4B\xED\xF0\x3C\xC6\xC8\x2F\xB1\xE0\xEB\x62\x19\x65\xCE\x40\xD9\x7A\xB9\xA2\x64\x46\x91\xB7\xC2\xE7\xF4\xBB\x36\xC8\x81\x9A\x20\xEA\x05\x3A\xA8\x5D\x92\x6B\xA3\xDC\x32\x51\xAC\xF7\xCF\x14\x07\xD0\x8B\x32\x4A\xC8\xF1\x94\xBA\x82\x2F\x61\xD6\x6F\xE2\xA5\xAF\x6C\x6A\xC9\x4B\xEE\x0B\x9B\xE5\x6A\x6A\xEE\x25\xB5\xFC\x96\x96\x5E\x92\x73\xB8\x55\xAE\xC1\xB8\xF8\x5C\xC1\x6D\xA8\x8D\xC9\xA7\x58\xD8\xFA\xD8\xD2\x8B\x32\x7F\xBB\xDC\x9F\x64\x46\xB9\xCB\x53\x1A\x2C\x7B\x59\x7E\x8B\x16\x7E\x8A\x6B\x66\xE0\x95\xD8\xB7\x44\x69\xF5\x2A\xC6\x28\x63\x12\x1A\xBF\x26\xD7\x22\x7D\x49\x96\xAD\x3B\x30\xCD\xE1\x88\xAD\x47\xBF\x77\xFA\xEB\x72\x45\xD2\x2E\xFE\x86\x1C\x31\xCD\xA0\xDF\x55\xF2\x66\x33\x86\xDB\x13\x7C\xAB\x11\x5A\xDD\x9E\xD2\xB7\x31\xB7\x29\x59\x51\xDD\x2D\xF7\x4E\x77\x14\x79\x7D\x33\x69\x0A\xEF\xA0\xFE\x02\xFE\x01\x57\x70\x67\x53\x13\x3A\x8B\x8B\xDF\xC5\x54\x39\x6F\x52\x93\xFA\xBD\xD3\x77\xC9\xC3\xFF\xB7\xEF\xEE\x96\x7B\x3C\xED\x41\x7E\xA7\x27\xE0\x0E\xBA\xA7\xB9\x1C\x45\xE5\xDE\x40\xA5\xDF\xF5\x1E\x12\x39\xA2\x0B\x05\x78\x1F\x63\xA6\x82\x4E\x9F\xCF\xE5\x29\xFE\x40\x06\x7B\x71\x48\xEE\x69\xD6\x44\x01\xF7\x4D\xAE\xBD\x72\x3B\x37\xD5\x89\x43\xD2\x8F\x9C\x41\x57\xF1\x3E\x79\xA4\x37\xD6\x8E\xAC\xCF\xEE\x8F\x45\x47\x47\xD0\xE5\xAF\x70\x7B\xC4\xD0\x1F\xC6\x4A\x80\xA6\x48\x3E\x92\xA5\x8E\x94\x9F\x03\xD8\xAA\x29\x6F\xD3\xA5\x29\xB2\xD3\x77\x50\xAE\x72\xB9\x4A\x0F\x61\x22\xAD\xA5\x8F\x29\x2E\xBB\x82\x8D\x21\x3F\x89\xED\x92\xD1\x22\xC8\x42\xF5\x53\x4C\x6D\x8A\x59\x9C\xE2\x37\xC8\x49\xC9\x61\x45\xF5\x45\xD4\x21\x0E\xC7\x76\x5C\x59\x80\x4B\xFC\x23\x72\x16\xCA\xBD\xDE\x29\x95\xBE\xCF\xE4\x84\x2B\x9C\x3E\x9F\x58\x10\xB1\xD8\x9F\xCB\x91\x45\x59\x72\xB8\x2F\xB0\xD4\x23\xCE\x9F\xF2\xFD\xAE\x6E\x1D\x02\xC1\xE2\xFC\x7C\x87\xA3\x6B\x7E\xFE\x24\x67\xC0\x5D\x44\x6B\xA1\x5F\x51\x99\xD3\xCF\x99\x9A\x3C\x45\xB7\xD8\x66\xEE\x60\x40\xF2\x1B\x10\xEB\x49\xAB\xCC\xEB\x97\xBD\x4C\x03\x4C\x45\x5E\x4F\x20\xD8\xDE\x7A\x14\x8B\x5D\x81\x22\xA7\xCF\xF5\xD7\x26\xF3\x25\x36\x30\xA5\xE5\xDE\x49\x72\xA7\x2A\x77\x06\x5D\x1D\xC4\x10\xB2\x77\x47\xCE\x54\xE9\x09\xB8\x4B\x3D\xAE\x62\x53\xB9\xD7\x53\x1A\x1B\xE3\x34\x57\x91\x18\xDD\x5F\x92\xB9\x96\x3D\xFF\x9A\x7A\x68\xAA\x8B\xD8\x70\xFF\x83\x29\x74\xB4\x1E\xC3\x0E\xE5\xAE\x19\x2E\x7F\x7E\xBE\xF4\xE7\x77\x2A\xD8\xFA\x15\x6A\x69\xD0\x59\x72\x58\xEB\xD7\xD8\x9A\x72\x3C\xAE\x19\xC1\x0E\xD2\x0C\xB7\xA3\xF5\x78\x23\xB7\xC4\x15\x2C\x2A\x13\x61\xB6\xA2\x83\xF5\x04\xA6\x37\xE3\x4A\x5A\x77\x07\xEB\x49\xCC\x6D\xC6\x0E\x8A\x11\xB9\x3D\x41\x9A\x07\xEB\x37\xA8\x91\x3B\xF5\x2C\xF1\x4F\x07\xEB\x29\x6C\x2D\xBB\x65\x88\xED\x20\x3A\x3A\x5A\x4F\xA3\x5E\xEA\x28\x92\xBA\x2E\x17\xA8\x23\x67\x92\xFC\x3A\x5A\xBF\x45\x83\xC4\xF7\x3B\x2A\x9C\x6E\x4F\x87\x40\xD0\x19\x74\x75\xE4\x4C\x72\x28\xEB\x77\x98\x43\x7D\xE5\x1C\xC5\x79\x7F\x2F\x8F\x63\x29\xF6\x0A\x67\xB0\xA8\xEC\x07\x3C\x92\xD8\x54\xA3\x0E\x49\xAA\x48\x92\x24\xAE\x1F\x50\x1F\x31\x0F\xBF\xE5\x36\x89\xE3\x7E\xF2\x94\x6E\x8A\x6B\xE6\x5F\xD4\xC4\x62\x8F\x9D\xE6\x75\x17\x77\x1C\xD0\x71\x80\xE9\x37\x19\x09\x3A\x27\x95\xFF\xE7\xF3\x17\x9B\x7E\xA5\xC7\xEB\x2F\x76\xF9\x5D\xE2\x24\xD3\x27\xE5\xC6\xE5\x6F\x39\x13\xFF\xE9\xBC\x8A\xA9\x37\x25\xD9\xCC\xCB\x35\xB5\xD2\x59\xEE\x08\x7A\x9B\x79\x07\xFD\x95\xAE\xDF\x2D\xAC\xF4\xD6\x7F\x67\x59\x5B\x2C\xD0\xEF\x54\xC5\x6F\xCA\xDA\x12\x54\xFE\x27\x0A\x25\xFE\xCB\xCF\x2F\x71\x7B\x8A\x63\xF2\xDB\xA1\xF1\x67\x54\xF4\xFC\x88\x89\x12\xAF\x83\xF5\x27\xDC\xC1\x34\xC5\xE8\x73\xBA\x2F\xD0\x1B\xFF\x47\x73\x19\x9F\xD0\x5F\x85\xFF\xED\x39\x53\x89\xB3\x3C\xE0\x8A\xA9\x81\xBF\x2C\x29\xEB\xCF\xF8\x93\x2A\xAE\x26\xFF\x7F\x05\x52\xCE\x24\x2A\xF0\x7F\xE3\xE9\xDF\x78\xFA\x37\x9E\x8A\x68\xE5\x70\xB8\x2A\xE4\x35\xB0\x4A\x8F\x7B\x6A\xA5\x94\xA4\xC3\xE9\x2F\x0D\xB4\x9C\x83\x7F\x13\x8A\x9A\x7E\x0B\xEC\xFF\x81\x5C\xB4\x6F\x6F\xFD\x05\x6F\xFA\x0F\x88\x90\x59\x62\x4A\x1D\xAC\xBF\xE2\x52\xE6\xFF\x10\x20\xE4\xE7\x7B\x7D\xB2\x0C\xE9\x60\xFD\xAD\x5C\x97\xFF\x9E\xC1\xAB\x7F\x37\xAA\xDF\x8D\x83\x33\x5D\x20\xD6\xB3\xB8\x32\xE1\x6F\x81\xF0\x9F\x6E\xFF\xBF\x05\xC2\x7F\x87\x40\xF0\xBB\xC4\xB4\x3B\x34\x5F\x42\x38\x27\xAF\x5B\xF9\x5D\xA5\xAE\x19\x8D\x67\x0A\xCE\xCB\x4B\x80\x32\x53\x9A\x63\x87\x31\xBD\xC8\x5B\xE1\x73\x97\x37\x5B\xF0\xB1\x46\x50\xE7\x77\x55\x06\x5C\x1D\xFC\xAE\x6E\xF9\xF9\x57\x0D\xEB\xD6\xD1\x5A\xC5\xBC\x9C\xF2\x3F\xA9\x44\xFE\x45\x4B\x46\x8D\x19\xFE\x17\x27\xE3\xFF\x86\xEC\xFD\x21\x54\xFC\x45\x79\xF8\xAF\x29\xB6\x34\xD4\xFE\x9D\x23\xFE\x2F\x4B\xEB\x4F\xE2\xE1\xFF\xF6\x06\xFD\xEB\x2B\xFA\xDF\xD5\x79\xFE\x49\xD0\xFF\xCB\x6B\x3B\x66\x51\xE5\x2F\x2A\xFB\x5F\xBB\xD1\x30\x87\xF9\x20\x35\x4E\x41\xFF\xFF\x54\xA8\xFC\x0B\x0B\x13\x7F\xCB\x96\xBF\x65\xCB\xDF\xB2\xE5\x6F\xD9\xF2\x5F\x29\x5B\x2E\xBC\xC0\xF4\x97\xF7\xB0\x38\x71\xF0\x97\x15\xF3\x2F\x15\x71\xFF\xFE\x02\xB5\x6F\x6F\x9D\xCB\x5C\xD4\x34\xB1\x13\xB5\x03\x87\xB3\xBC\x3C\x7A\x1E\x23\x50\x39\x49\x9A\xEB\xCD\x63\xBE\x54\xFD\x2D\xAD\xFE\x2B\xC1\xED\x6F\x69\xF5\xBF\xAC\x41\xFF\x96\x56\xFF\x2E\x69\xD5\xE2\xEA\xD7\x7C\x26\xD1\x1D\x70\x96\xFB\xCA\x9C\x0B\xC4\x5F\xD2\xF9\xCC\xDB\xC4\x5F\xD2\xB9\xCE\xDB\x19\x65\xB9\xB7\xB4\xAB\xFD\x0E\x46\x15\xF0\xF8\xFC\x6E\x4F\xB0\xC4\xB1\x90\x49\x76\x4C\x8B\xBA\x16\x31\x6A\x87\xB7\x32\xE8\x98\x54\x59\x52\xE2\xF2\xDF\xC9\xA8\x24\x97\xA7\xB2\xBC\x7C\x31\x93\xE2\xF0\x04\xBD\x4E\x7A\x9C\x79\x09\xA3\x74\x94\x04\xBD\xCE\xBB\x18\xA5\xC3\x15\xF4\x3A\x97\x32\x49\x52\x50\xBF\x6B\xDA\x32\x26\xB1\x44\x8E\xED\x6E\x26\xA1\x44\xBA\xEF\x70\x0F\xA3\x2C\xF1\x55\x06\x8B\xEE\x65\x94\xD2\x0D\xB7\xE5\x8C\x7C\x3E\x4E\xFC\x7D\x1F\x93\x20\x5F\x5A\xB8\x9F\x61\x4B\xFC\x2E\xD7\x03\x4C\x42\x91\xE4\x7E\x90\x49\xA4\xF7\x16\x1E\x62\x12\x02\x41\x7F\xD0\x5B\xFE\x30\x93\x50\xE1\xAA\x28\x2A\xF3\x3F\x22\xFF\xA8\xF0\xAD\x90\x7F\xF8\x66\x3E\xCA\x24\x56\xB8\x2A\x2A\xBC\xD3\x5C\x8F\x49\xAC\x80\x2B\xB8\x52\x7A\xAD\xDC\xE5\xA9\x66\x52\xA4\x1B\x04\x93\x9C\x01\x97\xB3\xB8\xF8\x71\x26\x35\xD6\x19\xF4\x3E\xC1\x68\x24\x46\xA0\xCC\xEB\x0F\x3A\x8B\x8B\x9F\xA4\x6E\x31\x80\xDB\x53\xE4\x5F\x15\xF3\x7E\xA0\x72\xD2\x53\x8C\x2E\xD6\x59\xE2\xF7\x56\xF0\xB1\x31\x54\x54\x96\x0B\x31\x6F\x54\x54\x96\xD7\xC4\x7A\x17\xBB\xA7\xD5\x32\xDA\x46\xEF\x62\xF7\xB4\x0A\x6F\x71\x28\x86\x23\xDF\x37\xAB\x8B\xE7\xF8\x9F\xA6\x9C\x68\x22\x8E\xA2\x67\x98\x56\x31\x77\x27\x8A\xBC\x9E\xA0\x6B\x46\xF0\x59\x26\x95\xDE\x9F\xA0\x8C\xD5\x8C\xA6\xC4\x13\x74\x14\x79\x3D\xD3\xBC\xE5\x95\x41\xD7\x1A\x26\x4D\x74\x3B\x2B\x83\xDE\x46\xDE\x5A\x86\x2D\xF2\x07\xBB\x3F\xC7\x24\x89\x5E\xC5\xEE\x92\x6E\xCF\x33\x89\x81\x60\xB1\xA3\xC4\x13\x5C\xC7\xA8\xC5\x5F\x6E\xCF\x34\xD1\xB5\x9E\xD1\x94\x78\x2B\xFD\x8E\x40\xD0\xE5\x13\xDD\x1B\x98\x34\xC9\x27\x96\xF7\x02\x23\xDD\xE9\x98\x1A\x70\x45\xAF\xF4\x6C\x64\x92\x45\x4E\xD0\xEB\x08\x14\xB9\x5F\xA4\x0D\x20\xBA\x24\xDF\x97\x98\xD4\xE9\x5E\x7F\x0C\x63\x13\xA3\x12\x03\x48\xAD\xBF\x59\x7E\x55\xEE\x14\x5B\x18\xE9\x72\x08\xED\x18\x5B\x99\x14\xB9\x42\xE4\x90\xDB\x98\x24\x29\x59\x8F\x6B\x7A\x3D\x93\x26\xF9\x4C\x77\x4B\x27\xBE\xBC\x8E\xE2\x99\x9E\xED\x72\xAE\xE8\xBB\x22\xE7\x65\x99\x23\xA5\x2D\x5D\x1E\x08\xBC\x22\x27\x56\x11\x10\x79\xAF\xCA\x35\xE9\x0E\xB8\x3D\x25\x6E\x8F\x3B\xE8\x7A\x4D\xCE\x96\x3B\xE0\x71\x7A\x76\x44\x3D\xA5\xDB\x83\xEE\x69\xAE\xD7\xE5\x57\xDD\x81\xA9\x1E\xA7\xE7\x0D\x46\x23\x3B\x02\x3E\x57\x91\xDB\x59\xFE\x66\xD4\xF3\x26\x97\xDF\xFB\x96\x9C\x4F\x71\xDC\xBE\x2D\x87\xAB\x74\x7B\x82\x0E\xD1\xEB\x1D\x26\x91\xDE\x75\xD9\x29\x97\x74\xAA\xDF\x15\x70\xDF\xE4\x7A\x57\x0E\x17\x70\x05\xE5\x7C\xEE\xA2\x25\x77\x05\x1D\x62\x72\xBB\x19\x5D\xD4\x19\xCD\xCE\x7B\x4D\x2C\x9F\x57\x3E\x2E\xFB\x3E\x93\x1E\x65\x15\xCF\xF4\x38\x2B\xDC\x45\xD2\x3D\xBF\x0F\x1A\xE3\x76\x94\x94\x3B\x4B\x03\x7B\x64\xB7\x98\x9D\x22\xAF\xAB\xA4\x64\xAF\xEC\x9E\x2A\xF5\x28\x57\x49\xC9\x3E\xB9\xD6\x44\xF0\x2A\x97\x42\x05\xF6\x47\x4B\x4B\xAF\x7E\x7D\xC8\x24\x3B\x1A\x19\x1F\xC9\x15\x15\x70\x05\x69\x5D\x1C\x68\xCC\xBB\x74\x79\xEE\x60\xB4\xB3\x48\xBD\x45\x2C\xEC\x21\x9A\x60\x89\xDB\xE3\x2C\x77\xDF\xE4\xFA\x98\x8E\xA6\x12\xF7\x0C\x87\xC7\xE9\xF9\x84\x76\x9F\xA2\x32\x57\xD1\x14\x87\x6B\x86\xEF\x53\xA6\xB5\x1C\x83\x34\x4C\x1C\x6E\x8F\xA4\xC6\x37\x30\xC9\x62\x1A\x41\xBF\xDB\x57\xEE\x3A\x2C\xA7\x29\xF5\x48\x77\xF7\x6E\x47\x68\x14\x53\x4B\x5D\x41\xA9\xF2\x3F\x8B\xFA\xCB\x71\x7C\x4E\x9D\xA5\x72\xF0\x2F\xE4\x76\x9F\x5A\xE4\xF5\xCD\x3C\x4A\xDB\x45\x1E\xA5\x5F\x32\x99\x52\x44\x4E\x9F\xAF\x7C\xA6\x7C\x1B\xD6\xE1\x9A\x51\xE4\x0A\x04\xFE\x1F\x7B\x4F\x02\x1D\x47\x71\x25\x72\x55\x2F\x90\x65\x09\xF8\xB1\x49\x36\x84\x8D\xB3\x81\xA1\x6B\x00\xC7\x92\x70\x30\x8A\xD0\x46\x96\x2C\xAC\x87\x2D\x0B\x49\xB6\xF7\x3D\x96\x9D\xB4\xA6\x4B\x52\xA3\x56\x77\xBB\x0F\x4B\xF2\xDB\xD5\x02\xE6\x32\xA7\x31\xF7\x65\xAE\x70\xDF\xF7\x95\x40\xC8\x26\xE4\x20\x77\xC8\x7D\x93\x64\xC3\x7D\x87\xFB\xD8\xD7\x55\xD5\x57\x75\x75\x4F\x8F\xED\x91\xDF\x12\x9E\xDF\x93\x67\xAA\xFE\xAF\x7F\xF4\xAF\x5F\xBF\x7F\xFD\xAA\x79\x82\x19\x63\x75\xC2\x7A\x72\xCE\x4E\x94\xE1\x09\xEB\xA9\x39\x7B\x04\x1F\x2B\x8E\x32\x81\x2B\x8A\x7A\x14\x9E\xB2\x9E\x66\x12\x92\x63\x94\x86\xFA\x4C\x9C\x86\xFD\x2C\x1B\x49\x31\xD4\xE7\x82\x91\x14\xEB\x79\x6A\x29\x6B\x4C\xFB\x05\x86\xBC\x46\x51\x55\xC7\x1B\x7E\x31\x8E\x6C\xBC\xC4\x90\xA7\x4C\xFB\xE5\x60\x9C\x61\xE7\x15\x6A\x8E\x6B\xC8\xE1\xDB\xBF\x32\xE9\x2C\xDD\x73\x5E\x0D\x60\x54\xF5\x35\xF6\xD1\xF1\x86\x5F\x67\x1F\x55\x6D\xED\x1B\x73\x76\xAE\x04\x9F\xDF\x9C\xB3\x7B\xE8\xA2\x2A\x06\x75\x64\x6F\x05\xCC\xD0\xAF\x6F\x07\xE0\x13\x9E\xFE\x0E\x53\xBA\xEF\xBA\x5A\x2A\x3A\x6E\x79\x97\x75\x8E\x4F\x78\xFA\x7B\x73\xFE\x9E\x3E\x63\xC3\x77\x6D\x47\x83\x7F\x08\x7B\xFC\xA6\x63\xC0\x4E\xC1\x28\xC7\x02\xAA\xF1\x35\x54\xD9\xAE\x49\xCF\x1B\xDA\x8A\xBE\x9E\x01\xD9\x78\xE2\x38\xF0\xE1\x90\x6C\x05\x4F\x29\x55\xF7\x78\xB0\x7B\x0A\xEB\x04\x30\x37\xD5\x36\x75\x22\xA0\xAA\x71\x6D\xCF\xA8\x9E\xC4\xBE\x90\x53\xCC\x1B\x00\xB3\x02\xAC\xE9\x27\x03\x6A\xD4\xDA\x3A\xAC\x19\xBE\xFC\xA7\x00\x6A\xC5\x78\x8A\x1C\x7A\xF5\x9A\x3F\x7B\x2A\x6B\x61\xC7\x60\xBD\xE6\xCF\x9E\x06\xA2\x55\xA1\x3A\x61\x9D\x0E\x76\xA5\x02\x4E\x9A\xF6\xB8\x3F\xD2\x19\x7E\x83\x62\x2B\xAE\xE3\x0D\xFB\xEF\x34\xD5\x8D\x60\x6E\xB2\xC1\xD7\xC5\x99\x60\xD7\xC0\x56\xC6\xB1\x6D\x60\x7D\x13\xD8\x23\x3C\x4C\xE7\x03\x54\x2C\xC5\x56\x26\x9C\xB3\xC0\xEE\x51\xF3\x64\x2B\x79\xDF\x39\x1B\xEC\xE2\x68\x53\xA1\x9F\x3E\x07\xEC\xE6\xFB\xEE\x78\xD3\xB9\x60\x57\x52\x0A\x6D\x99\x0E\xAE\x58\xE6\x64\xCB\x79\x60\x37\x67\x8D\xA7\xD8\x98\x34\x93\xA6\xF3\xC1\x5C\x67\x92\xBC\xA3\xE8\x23\xB6\x39\x49\x1B\x2F\x00\xFB\xC4\xC3\x22\x03\x4F\xB9\x15\xCB\xD6\x26\x30\x17\xA1\x5C\x08\xF6\x0C\x76\xBE\xE7\x19\x78\x92\xEB\xBD\x08\x7C\x24\xEC\x55\xB1\x8E\x5D\x2C\x93\xBC\x23\xBA\x18\xEC\x15\x47\x3B\xE2\x48\x0E\xF1\x12\xF0\x31\x0E\xF1\x88\x23\x19\xEA\x66\x30\xB7\x52\xA9\x4E\x29\x15\xCB\xB3\x71\x65\xAD\x66\xBB\x9E\xA2\x5F\x0A\x1E\x6E\x6A\x48\xA8\x96\x1C\xAC\xB1\x49\xE5\xCB\xC0\x83\x8D\x12\x22\x50\xE6\x21\x8D\x95\xE0\x72\x60\x37\x48\x00\xBA\x6E\xCA\x5C\x01\xBF\xDF\x8D\xAE\x68\x18\x51\x7A\xF6\x44\x48\xF4\x4A\x30\xDD\x58\xA2\xD5\xEC\xB2\xFA\x2F\x82\xA3\x66\x8D\x36\xBA\x0A\x8C\x34\x88\x18\x39\x71\x3C\xAC\x54\xC7\x09\x3D\x74\x35\x38\xAE\x51\xD6\x5F\xA9\x28\x8E\xAF\xC0\x0A\x9E\x72\xB1\x6D\x28\x7A\x9E\x76\xAF\x69\xDC\x93\x25\x4C\xE4\xD1\xBE\xB6\x71\x4F\x36\x45\x1B\x5D\x07\x36\x37\x4A\xE1\xEC\x44\x1D\x3F\x73\x04\x13\x29\x43\x11\xB4\xF9\x7A\xA0\xF8\x3E\x3F\x91\x0E\x71\x4C\xDB\x4D\xBC\xB1\xEB\xD8\x71\xDA\x35\xC3\xDD\x7F\x9E\x66\xB8\x1D\x25\xF2\x5F\xB9\x43\xF6\xFF\xD2\xCF\xC9\x74\x0A\x07\x8E\x6E\x00\xFF\x19\x92\xD6\x0C\x37\x45\x6B\x61\xBD\xC4\xD2\x7F\xF3\xC8\xDF\x08\xD6\x0E\x9B\xA6\x9E\x80\xA1\x07\x55\x34\xD3\x20\x0C\x54\x34\xC3\x57\xA7\xBF\x06\x6E\x4B\xB9\x6F\x02\x3D\xF1\x6E\xFF\x7D\xAC\x62\x1A\x55\xEE\x99\xCD\x5B\x6B\xEA\x8A\xAB\xE9\xB8\xC4\x76\x0C\xE9\x7F\xF3\xE4\x32\x62\xCB\x31\xBA\x19\xEC\x43\xB2\x19\x8B\x35\x77\xD0\x55\x5C\xDC\xD6\xD6\xEF\x39\x63\x32\x21\x15\x37\xB7\x5B\x40\x99\x83\x1B\xB2\xA7\x07\xB1\x62\x57\x05\xC0\xB7\x82\x71\x0E\x98\x41\x92\xD6\x41\x62\xA5\xFD\x1A\xAE\xE2\x30\x5B\x9D\xD9\xE1\xAB\x37\xF8\xCB\x03\x51\x4D\xA1\xDB\xC0\xA9\x4D\xA4\xAB\xDF\x36\x47\x03\x52\x01\xE9\x2D\x20\x19\x1B\xAB\xD3\xA8\x8E\x99\x76\xA2\x69\xB9\xE2\x56\xC7\x0E\xD3\x0C\x35\x93\x9F\xDB\xC1\x5E\xA4\xA7\x8B\x96\x34\xD9\x6D\x6D\x9D\xFE\x1C\xEB\x35\x1C\x72\xD2\x09\xDD\x01\x3E\xCE\xF5\xCF\x04\x1F\x65\x74\x27\x40\x34\xBB\x84\x47\xF1\x94\xD5\xD6\xB6\x5A\xD1\xC7\xB1\xDD\x4E\xDA\x7A\x6C\x65\xB4\xA3\xAD\x6D\x86\xB6\xC9\xE8\xAE\xBC\x81\xEE\x06\x32\xD7\xD9\xA5\xB8\x72\x38\x0E\xE3\xDE\xFF\x88\xEE\x01\x7B\x73\xA0\x83\xAE\x62\xC7\x61\x7D\xFD\xA3\x7B\x99\xA9\x44\x60\x87\x7B\xD8\x71\x53\x70\xF7\x81\x3D\x38\xB8\x3E\xD3\x92\xD1\xFD\x29\x86\x16\x4F\xBB\x78\x80\x1C\xC2\x0A\x2C\x9B\x8D\xF0\x00\xF8\x27\x0E\x94\x68\x9D\x68\xEF\x4B\x60\x5F\xAE\x6F\xC9\x84\xE5\x4E\xAF\xD6\x54\x97\xD9\x17\xF9\xBE\xC2\x42\x5F\x06\xA5\x94\x06\x2C\xD7\xB3\x71\x9C\x63\x7F\xC8\x07\xC1\x9E\x3C\x67\x78\x54\x33\x28\x6B\xE8\x21\xD0\xC7\xF5\xAE\x34\x48\x59\x9D\x3A\xE0\x19\xD8\x97\x61\x90\x9C\xA7\x8F\xA6\x1E\xF5\xBF\xDC\x57\x6A\xC2\x3E\xB9\xAF\x80\x7B\xA5\x54\xD2\x72\x2B\xCA\x0D\x92\x53\x9E\x3A\x67\xDF\x4B\x6C\x5D\xE9\x59\xF6\xA8\x35\xF7\x49\x44\xA8\x5B\x4B\x8A\xA4\x97\xD3\x80\xE2\x74\xB7\x10\xAE\xE0\x9E\x40\x23\x98\xCF\x67\xAC\x88\x90\x5B\x98\xFF\xCE\x62\x2E\x56\xC0\x23\x20\x27\xA7\xDB\x82\x57\x84\x87\xC1\xDD\x3B\x66\xEE\x2C\xCE\x86\x29\x6F\x45\xC1\xCB\x07\x16\xFD\xBE\xB7\xE8\xEC\xB2\x81\x7C\x25\x58\xFE\xF2\x3D\xA9\x39\xB8\x42\xEC\xDC\xF6\xAA\x6E\xC5\x15\x6C\xA5\xBB\x9E\xA5\x8B\x78\x60\xA0\x1D\x69\xD8\x8E\x79\x39\xD3\xA9\x11\x2C\x94\x04\xD0\x1D\xA5\x12\xFA\x2A\xD8\x8F\x8F\x4A\x54\x95\xAE\x5C\x03\xB8\xEA\xD9\x8E\xB6\x36\x5A\x87\xD1\xFF\xA4\xD6\xCE\x1E\xCD\x50\xD3\x0B\x36\xFA\x5A\x6A\x39\x0E\x81\x96\xF8\x36\x12\x41\x7E\x5D\xC4\x80\xBF\x84\x0A\x43\x80\x47\xC0\x67\x72\xA0\x57\x0E\xF5\x2C\xE2\x31\xBE\x01\x9A\x73\x30\x96\x29\xAE\x66\x34\xF3\x38\xDF\x04\xFF\x9C\xC6\xA9\x2C\x5A\x50\x69\x5E\x30\x32\x32\x32\x22\xA3\x6F\xA5\x00\xBA\x4C\x6B\x3A\x0A\x20\xD0\xB7\x41\x0B\x1F\x3B\x8D\x99\xB6\xBB\x4A\x73\x34\x16\x19\xD1\x48\xAE\x1C\x0F\xB8\x1E\x05\x07\x71\x48\xFD\x36\xCE\x45\xA1\xFC\x96\xD1\x77\xC0\xA7\x38\xCC\x65\xF4\x06\x34\x39\x12\xEA\xBB\x60\x39\x3F\xBA\xE9\xE4\x73\x24\xFE\xC8\xE2\xD9\xEF\x81\x85\x29\x1D\xD0\x62\xFD\xE4\x68\x34\xC2\x09\x0D\x12\x7D\x9F\xD9\x50\xAF\x43\xC3\x68\x3F\xA8\x4C\x72\xC0\x08\xFC\x80\xC5\x9F\x01\xE0\x12\x43\x15\x81\xFD\x10\x1C\x56\x2B\x34\xF6\x9B\x7A\x0D\x96\x25\xC8\x55\x25\xFA\x11\xF8\x18\x27\x55\xB7\xE9\x92\xB8\x17\xFD\x18\x7C\x3A\x6D\xFC\x9A\x33\x96\x18\x11\x3D\xC6\xC2\xE1\x80\x1D\x06\x3D\x64\xFA\xEF\x09\x72\xA4\x86\x9F\x80\xFD\xC5\x70\x03\x78\x2D\xB6\x1D\xCC\x81\xFF\x14\xB8\x71\xFF\xA7\x62\xDF\x8D\x0D\x2B\x0E\xA6\x82\xFA\x12\x92\x17\x9B\x98\xDC\x62\x2F\x9A\x09\xCE\x4E\x8B\xC5\xC7\x96\xD1\xCF\xEA\x78\xEF\xF8\x39\x58\x5A\x0B\xB6\xA8\x3D\xFF\x02\xFC\x47\xCD\xA1\xB6\xCA\x78\x7F\xC9\xFC\x48\x0E\x01\x6E\x46\xFF\x0A\xDC\x04\x3F\x88\x2E\x3E\x88\x2E\x44\xD1\x85\xB0\xCC\xE3\xD7\xC0\x89\xC6\x24\x73\x6A\x1B\x4F\xD5\x0A\xB9\x3F\x68\x58\xA9\x8E\x57\xAA\x8A\xA5\x54\x35\x77\x5A\x46\xBF\x01\x67\x34\x25\xB2\x5D\x96\xAE\x05\xB5\x22\xD9\x03\x96\xEB\x64\xA0\xCC\xE5\x7A\xB3\x01\x4B\x25\xF4\x5B\xB0\x71\x76\x59\x1A\xB1\x4D\xC3\xCD\xE7\xE9\x77\xB3\xA4\xA6\x52\x71\x35\xFD\x1E\x9C\x33\xBB\x2C\xD5\x52\x53\xF0\x72\xF7\x07\xD0\x46\x5A\xBB\x7B\x3A\xC9\x1F\x39\x4C\x7B\x95\xB3\x52\x60\xD1\xBA\xF5\x38\xD8\x2D\x42\x9E\xF1\xB1\xD1\x1F\x59\xE6\x84\x34\xAD\x36\xED\xF1\x35\x43\x66\x17\xC9\x9C\xC4\x52\x73\x51\x67\x40\x24\xD1\x12\xCF\xEE\xA2\x3F\x81\xF9\x11\x44\x7C\xA4\x30\x6D\xCA\x21\xFC\x19\xBC\xD6\x54\xEF\xFB\x69\x44\x61\x90\x5D\x0D\x54\x2B\x8D\x92\xC6\xE0\x5A\x96\x2A\xCE\x58\xAA\x91\x84\xC7\x39\x0F\x35\x36\x60\xF4\xB6\x9E\xEA\x91\xF9\x96\xF0\xCE\x2E\xF0\x18\x7F\x8F\xC9\xB6\xD3\x44\x8D\xB7\xF0\xD9\x51\x48\xF6\xCB\x5E\x4D\xFA\x81\x96\x32\xD5\x97\x89\x81\xFE\x02\x16\x90\xAE\x41\x72\x8B\xD4\x20\x76\x87\xDA\x7D\xAD\x74\xB4\xB5\xF5\x92\xC4\x7F\x18\x7E\x46\x09\xBF\x27\xC0\xC1\xD1\x68\x9D\xAA\x3A\x64\x1E\xEE\x61\x4F\x64\xFF\x69\x0B\x7E\x12\xAC\x8A\xC0\x06\x3C\x83\x40\xAE\x30\xFC\x97\xAC\x42\xF3\x27\x35\x62\x10\x79\x3D\xC5\x02\xA3\x60\x60\x22\x65\x6A\xE0\x40\x7F\x3E\x2B\x4F\xB3\x10\x91\x62\x60\x07\xBB\x64\x0A\xC6\xA0\x07\x56\x2F\x33\xAB\xE3\xD8\x2E\xA3\x67\x58\xD0\x4B\x07\x21\x19\xF9\x9E\x9E\x1E\x99\x6F\xEB\x27\xC5\x11\x65\xF4\x2C\xE8\x23\xFB\x28\x51\x7F\xAF\xA1\x6B\x06\x56\x29\xD8\x32\xD3\xB4\xDA\xC9\xC5\x35\xEC\xFE\x9A\xF0\x1A\x9B\xAC\x01\x9F\x13\xD1\x1F\xCA\x04\x7F\x1E\x2C\xAF\x93\x3E\x09\x30\x32\xC7\x7B\x41\x40\x7E\x28\x5B\xFC\x17\x8B\x93\xF7\xE9\xD6\x94\xFE\x25\x11\xF9\x6C\xE9\x5F\x06\xCB\xEA\x23\x9F\x2F\xFC\x2B\x69\xEA\x43\x39\xCF\xFE\xAF\x05\x84\x8F\x49\x5D\x53\xF8\x57\x45\xE4\xB3\x85\x7F\xAD\x80\xF0\x09\xF2\xF9\xC2\xBF\x2E\xA0\x9E\xF3\xE4\xDF\x28\x4C\xBD\xD0\x83\x7F\x53\x44\x3D\x5B\xF6\xB7\xC0\x61\x75\x51\xCF\x17\xFD\x6D\xE6\x19\xA9\x9B\x33\x14\x7D\x7A\x1D\x8E\xEF\xFB\x09\x50\xDE\x01\xC7\x34\xF1\x7D\x5B\xB9\x49\x18\xFD\x2D\x27\x36\x25\x03\xEF\xC8\xFB\xED\x32\x7A\x97\xA5\xB0\x68\x70\x73\x28\x76\x13\xA1\x4F\x2C\xDC\x41\xEF\x81\xC9\xD4\x8E\x76\xB8\xF5\x5A\xB1\x6C\x73\x6A\xBA\x9D\xCF\xBD\x15\x1C\xBA\xAD\x6D\xEF\xCA\x82\x52\x7C\xF7\xB1\x5C\x2A\x75\xCC\xEB\x60\xFB\xB4\x47\xC3\x86\x52\x6E\xCE\xA6\x7C\x4C\x63\x29\xB7\x64\x53\x3E\x16\x7E\x32\x86\xD6\x4D\xEA\xC8\xC2\xB1\xBA\x7B\x3A\xCB\x68\x3D\xBC\x3C\xBD\xF3\x1B\x82\xCC\xDA\xA6\x2F\x33\xB6\x0C\xF3\x3A\x0E\xCA\x19\x01\x43\xD5\xC6\x8A\x8B\xE9\xD5\xE3\x64\x6F\xF3\x78\x78\x76\x3A\x5C\x9D\xDD\x90\x4A\xF8\x86\x7B\x02\xA4\xFB\xB1\x7D\x3E\x78\x5F\xE2\xC5\x00\x9D\x08\xE3\xF1\x50\xA7\x6D\x2B\xD3\xED\x11\xF0\xD0\x98\x8D\x15\xB5\x1C\x95\x80\xF9\x62\x9E\x04\x77\x8B\x20\x66\xFC\xF1\xD0\x06\xA8\xE4\x65\xBD\x62\x63\xE5\x48\x13\x83\x12\xA5\xB8\x4E\x86\xFF\x1D\x81\x91\x30\x8C\xC2\xAE\x91\x0B\x08\x10\x84\x52\xE4\x4F\xA6\x15\x25\x6A\x62\x52\x83\xA0\x53\xE0\x17\x84\x99\x82\x2D\x13\x4F\x98\x16\x38\x15\x1E\xDF\x14\x41\x0F\xBA\xD8\x2A\x28\x5D\x1D\x3A\x28\x22\x3E\x3A\x0D\x8E\xC4\xF8\x68\x60\xF9\xC7\xE9\xB0\x25\x36\x53\xFB\xC9\xAD\xF7\x9D\xD5\x2A\xD6\x89\x1B\xC9\xA8\x50\x3A\x03\x9E\x98\xF6\x1C\x7D\xB3\xEE\x39\x7C\xFE\x37\xC2\x83\x53\xBA\xD7\x0C\xB7\xC3\xE7\x4A\xF0\x36\x41\xFE\x04\x2F\x23\x67\xC2\xF4\xD3\xA5\xB8\x29\xDF\xB2\x09\x7E\x2E\x9B\xCC\x92\x29\xCD\x71\x35\x63\x34\x24\xC7\x13\x3A\x0B\xBA\xF9\x29\x8B\xB8\xA1\x14\xB3\x61\x61\x6A\x29\xDE\x5F\x2A\xA1\xB3\xA1\xD7\x40\xB2\xB1\xBC\x08\x47\xF7\x9C\x46\x88\x2B\x48\x11\x71\x64\xCF\x85\xEB\x1A\x48\x36\x43\xDC\xE0\x11\x9F\x07\x4F\x49\x4F\x89\x15\x06\xEE\x57\x1C\x67\x3B\x4C\x8B\xF3\xE1\x47\x62\xF0\xBD\x4E\xC0\x09\xBA\x00\xC6\x0B\x1F\xD9\xD5\xDF\x5C\xB1\x8D\x48\x33\x09\x10\x62\x04\xEC\x4A\xE9\xB8\xCA\x27\x6D\xC5\x22\x69\x91\x24\x38\xF3\x22\x1D\xA9\x22\x48\x01\x54\x09\x5D\x08\x37\x25\x96\x71\xD7\xC6\xCC\xD1\x87\xDB\x91\xC1\x19\xC2\x70\x7B\x12\x3B\x4E\xCE\x03\x0D\xE1\x08\xDF\x2A\x76\x5C\xDB\x9C\x96\x79\x1A\xB1\xAC\x4D\x8C\x10\xCB\xD9\xA0\x8B\x20\xDD\x1F\x0D\x76\x42\xFA\x49\x38\x12\xD5\xFC\xD1\xF6\xE4\x1E\xD7\xC5\x70\x69\x26\xCE\x72\x65\x7A\x18\x77\x91\x9F\x64\xA1\x4F\x4F\x8E\x16\x87\x04\x7C\x8F\xAE\x8C\x3A\xE8\x12\xF8\x51\xD2\xD5\x35\x5D\xD5\x71\x8F\xA9\x93\xAD\x59\xE2\x99\x36\x43\x94\xCB\x58\x6C\x87\x13\x5D\x0A\x0F\xCC\x85\x1D\xD4\x26\x2C\x1D\xAF\x48\x88\xB1\xC2\x42\x97\xC1\x7F\xC9\x45\xEB\x36\x5D\x19\x5D\x0E\x07\x6B\x28\xC8\xC2\x8A\xCB\x8F\x5D\x63\xF1\x42\x57\x30\xF7\xEE\x63\xBB\x9A\xAB\x99\x06\xDD\x82\xCA\xDC\x23\x8B\xE5\x68\xAE\x84\x5D\x59\xB8\x19\x9B\x62\x51\x8C\x12\xA6\x44\xD1\x17\x43\x9D\xF1\xA3\x64\x6E\x55\xFB\x68\x57\xC1\xFE\x9A\xEA\xA0\xC3\xC9\x05\x22\x23\xA2\x8B\xAB\xE1\xBF\x26\x86\x64\x9B\x71\x74\x19\xCA\xD9\xBB\x8D\xF6\xB6\xAF\x81\x9F\xCE\x1E\x21\xDC\xA0\xBC\x16\x8E\x15\xDB\x43\xE5\x37\x9E\x32\xF3\xEA\xD1\x26\x10\x17\x54\x5E\x07\x0F\xC9\xD4\x52\xB7\xB9\x0C\x8F\xB8\xFD\x8A\x8D\x8D\x2C\x07\x8A\xAE\x87\x72\x0E\xFE\x2A\x6C\xBB\x5A\x55\xD1\x17\x2B\xB6\x8C\x6E\x60\x81\x8E\x18\xB4\xCB\xD4\x75\xC5\x72\x30\x67\xF9\x37\xC2\x7D\x73\x90\x06\xB4\xD1\x31\xC6\x20\xBA\x89\x53\x6D\x12\x92\xED\x80\xA3\x9B\x61\x6B\x02\x6A\x80\xFC\x88\xC5\x32\xAC\xA8\x9A\x31\xCA\xFC\x40\xDA\x96\x6E\x81\xC9\xAD\xFB\x1E\xC5\xF7\xDA\x9D\x3A\x79\xDA\xC4\x84\xE2\x38\x89\x38\x53\xE0\x4A\x6E\x85\x1B\x9A\xB8\x77\x52\xB6\x0C\x10\x8C\x1E\x5B\x99\xC0\x39\x4F\x95\xF4\x73\x19\x64\x12\x45\x3B\xBA\x39\x49\x7E\x8E\xA3\x3D\xC1\x0D\x2D\xCE\x0E\x72\xC5\x5C\x2B\xBA\x0D\x6E\xA2\xCB\x66\x4A\xA6\xDE\x09\x4B\x6F\x6B\x1B\x30\x3D\x43\x6D\xA9\x47\xBE\xFD\x33\xE4\x1A\xB4\x74\xAD\x9A\x27\x18\x05\x20\x3F\xF3\x70\x7B\x11\xAE\x5A\x67\x9B\xAB\x3B\x8A\x70\xD5\x3C\xDB\x5C\xDD\x09\xE9\xB6\x57\xA7\xAA\xFA\xEB\x12\x56\x69\x41\x12\x5D\xAD\xC6\x14\xBB\x4B\x57\x1C\x67\xB1\xA7\xE9\x2A\xF9\x95\x89\x84\x8B\x45\x77\xC1\x43\x85\x80\xB4\xFA\xC8\x1F\x88\xF0\xC9\xBB\x48\x81\x55\xDF\x0D\x0D\x1A\xF0\xF8\x4D\x2B\xE9\xCF\x3A\x1D\x6A\x9B\x9E\x95\xF2\x1D\xE5\x1C\x75\x64\x71\x1D\x43\xF0\xE7\xB4\xE7\x94\xD1\x3D\xCC\x75\xF5\x3A\xAB\x14\x5D\x53\x49\x4D\x55\x7E\x38\x97\xC4\xBF\x17\xFE\x5B\xA0\xB7\x95\x31\x46\xB3\x88\x53\x98\xF0\x7D\x2C\x57\x17\xF7\xB1\x85\x2F\xC6\xC9\x90\x19\x04\x0C\x65\x61\xCC\x28\x60\xF0\x7E\x68\x66\xAF\x60\xFE\xE7\xAE\x2E\x9F\x59\xA5\xEA\x62\x5B\xA4\x64\x31\xAD\x3C\x95\x3C\x00\x17\x47\xCF\x70\x09\xFD\xC9\x9C\xFC\x81\x13\xF8\xD4\xA4\xBE\x04\x8F\xAC\xC1\x76\xA0\xE1\x1A\x96\x51\x16\xAB\xE5\xCB\xCC\xDE\x33\xC7\xEF\xC7\xB6\x4E\xAD\x36\x35\x3E\x7A\x90\xA5\x7B\x98\xD1\xB0\x8A\xFA\x3E\x65\x22\xF3\xA4\x05\x7A\x88\xD9\x49\x82\x5E\x21\x4B\x13\x98\x76\x52\x94\xAF\xC0\x72\xA4\xEF\x5E\x7A\xDE\x3D\x4B\xE1\xE8\x61\x06\x9C\x8E\x83\x66\xF8\x26\x19\x7D\x35\x2F\xD0\x20\x15\x43\xA4\x4C\xB2\x50\x38\xF2\x35\xD8\x9E\x0D\x55\x3B\x0A\xFC\x3A\xEC\xC9\x41\xAF\x23\x10\x7C\x04\x8E\xD6\x28\x54\xD9\x82\x78\x48\x98\x85\xFA\x06\xFC\xAF\xA2\x15\x0E\xFE\x48\xC5\x6A\x1B\x08\x64\x7E\x3D\x0A\x01\x29\x95\xD0\x37\xE1\x4C\xC3\xE9\x0B\xAB\x2A\x02\x06\xBE\xD5\x38\x05\xE4\x56\x9A\x04\xF4\xBF\x0D\xD7\x17\xAE\x31\xD9\x62\x06\xB2\x35\x10\x4C\xFD\x47\xD9\xAB\x07\x7B\x89\x37\x1C\xD7\xFF\xAB\xB9\x9D\xBA\x2B\x27\x37\xA5\x13\x9B\xDE\xDF\x61\xB9\x2A\x1E\x4D\x74\x60\x28\x8D\xFD\x5D\xF8\x19\x21\x76\x70\xFA\x27\x8D\xF1\xBD\x0C\x7A\x19\x27\x8B\x38\xEC\xEF\x27\xF6\x29\x22\xEC\xE8\xCC\xD2\x0F\x60\x49\x08\xD1\x67\x5A\x09\x35\xA0\x1F\xC2\x3D\x85\x80\x3D\x8A\xA6\xCB\xE8\x47\x70\xF7\x58\x2F\xA9\x1B\x45\x3F\x86\x73\x63\x6D\x33\xB4\xF1\x31\xF8\x8F\xB1\xC6\x15\x96\xAB\x4D\x68\xEB\xB0\x8C\x7E\x92\x90\x93\x48\x23\xF6\xF3\xC2\x8C\xEE\x4F\x99\xB3\xF3\x9F\xC2\x72\xC5\x0A\x03\x9D\xE5\x8A\x3D\x1E\x95\x79\xFF\x0C\x7E\x42\x0C\x85\xED\x51\x2C\xA3\x9F\xC3\x4F\x09\xBB\x07\x70\xD5\xD4\x4D\x9B\xA8\xEB\x17\x6C\x8D\xE1\x61\xC8\x87\xE4\x31\xAB\xC0\xB7\xFF\x32\xA1\xB8\x2E\x73\xC2\xF2\x5C\xCC\xF0\x65\xF4\x2B\xB8\x47\xAC\xB7\x47\x57\x5C\xD7\x7F\xE3\xF9\x35\xBC\x62\x4E\xAC\xDD\x97\x63\xD0\xAB\x56\xB1\xE3\x98\xB6\x23\x4E\xAC\x8A\x12\xE5\xA9\xF9\x93\xFA\x39\x3A\xD6\x40\x74\x24\x9A\x66\xD4\x9B\xD6\x2A\x57\x2C\x36\x8A\xFF\x2F\x73\x33\x4A\xC0\x65\x8D\xE1\xCA\xE8\x37\x2C\x8A\x4A\x27\x8E\x75\xEC\x64\xA8\xC9\xB7\x5A\x15\x4F\xAD\x52\x74\x8F\x4F\x15\xD6\x86\x44\xBF\x85\x0F\xCD\x11\x9F\x1C\x26\xBB\xD5\x72\xB9\x84\x1A\x41\xB6\x00\x68\x50\x6F\x95\x0B\x53\x64\x1C\xBA\xB6\x37\x4C\x14\xF4\x3B\x78\x35\x6F\xDA\xDD\x26\xF9\x9D\x4C\x3A\xC7\xB2\xCD\xF8\x6F\xCD\xBC\x7F\x0F\x1F\x69\x4A\x38\x45\xCD\x5D\xA6\xD1\x93\xBA\x75\x28\x83\xF3\xDA\x39\xAB\x69\x04\xB4\xAD\x25\xF9\x03\xD4\xD3\x3E\x70\xA9\x66\xB8\x8E\xBC\x0D\xF9\x0D\x1D\xFD\xE3\xF0\xB4\xA6\xD9\xA4\x47\xEA\x14\x12\xBF\xD4\x12\x76\x51\xB3\xFF\x23\xCB\x2E\xA6\x36\x02\x2B\x3D\x7E\xA0\xD2\x69\xA8\x8B\xFD\x88\x29\x67\x57\xF0\x4F\x70\x23\xC8\xBD\x4E\xE0\xC0\xF7\x93\x07\xFA\xFF\xE1\xC9\xFE\x0C\x1F\x4D\x2F\x06\xDC\x1D\x0B\xAD\xEF\xA7\xC7\xD2\x58\x75\xFE\x2F\x7C\x6C\x4E\x1D\x57\x56\x7C\xA0\xD7\x82\x7A\xFD\x0B\xEC\xA4\x2F\xE0\x4B\x5A\x68\xC8\x5E\x2B\xC1\xE1\xC3\xF9\x91\xB9\x69\x38\xC1\x20\x4F\xC0\xF5\x7C\x5E\xBB\x60\xAD\xD5\xD6\x50\x65\x95\x67\x51\xDD\xD5\x93\xF0\xF3\x11\xF0\xC0\x92\x96\x2D\x18\xF3\x29\xB8\x57\x6C\x88\xD8\x39\x37\xE6\xAA\x9F\x86\xF6\x56\x08\x2A\x18\x30\x59\xC4\x36\xB0\xA4\x85\x79\xF8\xB8\x5C\xCF\xB0\xB2\x23\x32\xC6\x8C\x2F\x18\x7A\x16\xAE\xFF\xBB\xD4\x4E\x6D\xBC\xA1\xF1\x77\xC9\xA6\xCF\x88\x4D\x28\x56\xF2\xA7\xED\x67\xE3\x9E\xE2\xD9\x17\x94\x5C\x69\xD3\x10\x5A\x75\x5C\x18\x3C\x3B\x62\xCF\x2B\xB0\x6D\xBF\x3D\x1E\x46\x50\x1A\xF0\x1C\x7C\x1C\x16\x9D\x06\x5C\x18\xDA\xC0\x1F\xAE\x4B\xCF\x03\x8E\xF6\x76\xE1\x2B\xB8\x89\x69\x8B\x6C\xAC\x91\x4C\x6E\x85\x91\x35\x56\x77\x81\x95\x3D\x0F\xDD\xC8\xFF\x76\x9B\x34\x3D\x56\x60\x6D\x09\xCA\x87\x12\xB1\x7A\x39\x01\x61\xB3\xEB\x0F\xCA\xF1\xED\x25\xB6\x34\xBC\x00\xD7\x46\x90\x35\x88\xE6\xDF\x78\x96\x66\x49\xBC\xD5\xC0\x08\xBF\x08\xAB\x11\x46\xBF\x62\xBB\x9A\xA2\x13\xFA\x7D\xB5\xA5\x16\xA9\x41\x2C\xE4\x4B\x90\xDE\xB2\x46\x00\xC7\x4C\x73\xDC\xF1\x95\xDB\x67\xBA\x63\xFE\xD3\x4B\xB4\xF6\x74\x92\x14\x2D\x39\xB5\x43\xCE\xEF\xB0\xE0\x2A\xB3\x3F\x58\xCE\x5F\x66\x45\x04\x0C\x90\xD6\x74\x73\xB0\x4B\x4D\x73\x5C\x46\xAF\xC0\x23\xEB\xE0\x86\x9E\x4C\x51\x34\xDD\xB3\x71\x9A\x97\x78\x6F\xF8\x3B\xDD\x70\x1F\x01\x27\x71\x48\xCA\xC7\xAB\x2C\xD3\x19\x95\x29\xF0\xC5\x4D\x61\xE5\x8E\x60\xFB\xF1\x35\x56\x7B\x16\x74\xCD\x30\x74\xF4\x3A\x3C\x37\x1D\xA1\x91\xE9\x35\xAC\xE8\x8A\x1F\xBB\x28\x23\x2E\xB6\x59\x40\xDD\x2E\x9C\x84\xB4\x10\x25\x38\x49\x27\x9E\xA8\x09\x98\xFD\xD3\xD4\x52\x30\xE8\x0D\x96\xF2\x0D\x58\xEE\x35\xAA\x36\x1E\x91\xD1\x9B\x70\xF5\x16\x46\x5A\xDC\x40\xA9\x30\xF1\x2D\x8E\x62\x37\xA6\x80\x6F\xC3\x93\x32\x74\x64\x93\x5A\x91\xD9\xD4\xCA\x3B\xDC\x83\xEC\x66\xDE\x11\xBD\xCB\xD2\xD0\x41\x07\xBB\x2A\x64\xC8\x8C\x4A\xD9\xD0\x7B\x70\x20\x01\x33\xE8\x2A\x76\xBF\xEE\x39\x2B\xEC\xD8\xBD\x67\x42\x63\xCA\xDE\xA0\x47\x47\x4B\x8B\x92\x5D\xBA\xE7\x88\x2E\x36\x10\xA0\x1E\xC3\xA1\x46\x97\xB4\xD5\x44\x3D\x56\x3A\x38\xD1\x95\x12\x20\x07\x77\xBD\xF4\x85\x44\x17\x2D\xF9\x5B\x11\x56\x6F\xE0\x3C\x45\xD4\x2C\xDF\x20\x55\x5D\xC7\x49\x9F\x17\x90\xA8\xAB\x26\xE8\x78\x29\x59\x61\x14\x72\xD7\x67\xD2\x62\x93\xBA\x46\x3B\x81\x67\x28\x7E\x71\x5C\x2D\x8D\x51\xBF\x7C\xA2\xD4\xCD\x79\x20\x0B\x2B\x05\x75\x1E\xCB\x7A\x9D\x24\x75\x24\x80\x58\x31\x64\x64\xA6\xB5\x44\xD9\x20\x75\x25\xBA\xFA\xF0\x24\x57\x3F\x10\x7E\xCD\x31\x82\x93\xA5\x4F\x26\x6D\x6F\x52\xE1\x4A\x45\x4F\x91\xE6\x27\x20\xE8\xED\x3F\x99\xE2\x96\xD1\xA9\x12\x2D\xFB\x1C\x32\xAD\x9A\xB0\xA7\x49\x47\x88\x53\x8A\x21\x78\x76\xE9\x2C\x85\x08\xF6\xAA\x05\x77\x02\xA3\xD3\x13\xC2\xD1\xDA\x82\xB6\xB6\x21\x3C\xE5\x06\xAF\x97\x67\x48\x1F\x4F\x2A\xD1\x9B\x60\x26\xE1\xC8\x68\xA3\xC4\x0E\xB1\x75\x99\xC6\x5A\x6C\xBB\xBE\x23\x71\x86\xCC\xC5\xD3\x2E\x76\xA2\xBA\xFD\xE0\x39\x35\x24\xCC\x2A\xA3\x33\xA5\x0D\x4D\x9C\xBD\xAD\xF1\x34\x1B\xAB\x34\x0F\xDA\x98\x8B\xA3\xB9\xB3\x4F\xC1\xE4\x42\x9B\xA4\x63\xF3\x98\xE9\x31\x6D\x7A\x40\xA3\xA1\x4C\xA1\xB3\x98\x81\xA5\x4B\xB3\xF8\x16\x19\x9D\x9D\x09\x1B\x94\x71\x45\xD9\xE6\x73\xA4\xCF\x65\xC3\x66\xCD\xAD\xA0\x18\x0A\x9D\x2B\xED\x9D\xC5\x95\x69\xB8\x8A\x66\x90\x5A\x31\x74\x9E\xB4\x6F\x06\x18\xAD\xB8\xEC\x1C\x36\xE9\x7D\x5D\xE8\x7C\x66\xBD\x69\xC8\x3E\x3C\xEA\xBB\x67\x74\x81\xB4\x4F\x06\xC4\xA1\xD8\x8D\x18\x46\x17\x4A\xF4\xF4\x68\xCC\xBA\xC3\x0A\x99\x54\x9B\x8C\x2E\x92\xDA\xB2\xC0\x6B\x17\xB5\x5C\x2C\x2D\xCC\x42\xCE\xAD\x4A\xBE\x44\xFA\x68\xD2\x11\x69\x13\x96\xAE\x8D\x4C\xCB\x68\xB3\x74\x78\xA2\x27\x7E\xD3\x4F\xE0\x04\x6A\xDF\x10\x15\x7E\x23\x0B\xD3\xA5\xD2\xFE\x05\xC6\x0C\x0B\x7D\x2E\x93\x3E\xC1\xAD\x63\x64\x4F\x84\x16\xA5\xCB\xE8\xF2\xE0\x99\x9A\x8A\x8E\x9D\x2A\x0E\x04\x8E\x2E\x20\x0A\xFC\xDD\x15\x81\x89\x71\x90\xF9\x77\x8B\x05\xD8\x57\x4A\xFF\x2E\xC4\xCE\xBD\x49\xA9\xC0\xB7\xA0\x9E\x5C\x6A\x17\x8B\xA1\x18\x41\x53\x1E\x77\x57\x49\x87\x08\xD1\xBB\x4D\x21\x76\xCA\xB9\x5C\xCD\xB4\x18\x3C\xF9\x6C\x2D\x5E\xC3\xB4\xC8\x43\x16\xD3\xE2\xB5\x2C\x06\xE0\xB1\xF3\xAE\xB6\x4A\x58\x4F\x19\x5D\xC7\x1E\x44\x6A\x88\x6D\xF3\x20\xAE\x97\x0E\x14\xCB\xC7\xBE\x73\xBE\x28\x10\xEC\x06\x69\x28\x17\x4D\x18\xA9\xD4\xAE\x5F\xBD\x51\x2A\x09\x9F\xEB\x4C\xB2\x41\x46\x37\x49\x7D\x05\x26\x55\x1D\x6A\xBE\x99\x51\xE6\x05\x9A\x49\x36\xC8\xE8\x16\x69\x5D\xB1\x73\x01\x09\x5E\x8A\x5F\xBC\x13\xC5\x1A\x82\x93\x02\xB7\xD6\xE7\x4B\x6E\x93\x8E\x2A\xA2\xA5\x6D\x63\x49\xB7\x33\x6F\x9C\x4F\x2C\x3D\xC3\xEE\x90\xA6\x6B\x54\x14\x6E\x13\x4D\x0A\x6B\x0C\xEF\x94\xCE\xAF\xEF\x1A\xA5\x60\xCC\x3A\x6E\x52\x0A\x51\x0A\x5C\x83\x15\xC2\x96\x4A\xE8\x2E\xE9\x82\xED\xC1\x5B\xF6\x45\x4F\x71\xE6\xEE\x9E\x55\xC5\xD5\xBE\x18\x2B\xCE\xDB\x3D\xD2\xE6\xED\xC1\x5B\x01\xC5\x05\x19\xA8\x7B\x25\x7A\x8C\x2E\x96\xBD\xA3\x77\x33\xC9\xDC\xB5\xDF\xB1\x5F\x42\xB8\x4F\xFA\x90\xDF\xE9\x9A\xB6\x67\xE0\xFB\xA5\x0F\xF9\xFF\xB9\xA6\xDF\xF4\x80\xB4\xD3\x88\xA7\xEB\x7E\xC3\x8E\x73\x9B\x76\xF8\x70\xA5\xE2\xB8\xBE\x99\x5B\xA6\xE6\x07\x29\x3B\xEF\x3E\x67\x87\x1D\xE7\xDB\xA6\xAA\xB8\x4A\x93\x34\xDF\xFF\x6F\x07\x75\x67\xCB\x36\x55\xAF\x8A\x6D\xA7\x69\x17\xCB\x36\xAB\xD8\x71\xB0\x7A\xC0\xF0\x74\xD3\x2E\x2B\x87\x3D\xC3\xF5\xE6\x55\x75\xC5\x18\x3D\xA4\xB9\x75\xFE\x82\xF9\xCD\x07\xEC\xB7\x5F\xCB\x82\x96\xE6\xE6\x05\x2D\xAD\xCD\x2D\x0B\x5B\x9B\x0F\xDC\xEF\xA0\x56\x55\xC1\xC3\xAD\xEA\xC2\x05\x07\x8D\x1C\xD0\x3C\x83\xA7\xAC\xE6\x99\x18\xC8\xA2\x85\x8B\xE6\x37\xB7\xFE\x5F\x00\x00\x00\xFF\xFF\xB7\x8E\xB5\x2B\xCA\x6E\x06\x00") +var gzippedCallGraphCSV = []byte("\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\xFF\xEC\xBD\x5B\x6F\xDC\x38\xB2\x38\xFE\xEE\xCF\xF1\x43\x1E\x82\xE0\x8F\x8C\x67\x77\x91\x31\x72\x02\x38\x17\xEF\x19\x9C\xD9\x24\x27\xC9\xEE\xBC\x04\x10\x68\x89\xDD\xAD\x13\xB5\x24\x53\x94\xD3\x9E\x87\x7C\xF6\x3F\x44\xEA\xC2\x4B\x91\xA2\xEE\x6A\x47\x0F\x33\x71\xB3\x8A\x75\x63\x55\xB1\x44\x52\x54\x92\x22\x0F\xED\xF7\x9E\x9F\xE4\x31\x7D\x56\xFC\xBA\x47\x51\x8E\x3D\xFA\x90\xE2\x0B\x19\xE8\x1F\x10\xA1\x09\xC9\x63\x15\x50\xFC\x8A\xF3\xE3\x2D\x26\x5E\x18\xD3\x1A\x98\xE5\x47\x13\xC1\x02\x74\x4C\x03\xEF\x2E\xC6\xDF\xB5\xC6\x23\x3A\x79\x3E\x3D\xE9\xC8\x19\xA6\x5E\xF8\xEB\xA5\xC6\x00\xDD\x26\x84\x6A\xE8\x01\x8E\x34\xCC\x52\x4A\x9A\x78\xB7\x3B\x09\x78\x87\x82\x40\xC3\xBE\xDD\x15\x98\xBC\x4F\x0D\x4C\x49\x12\xE4\xBE\xD1\x54\x15\x58\xD3\x4E\x04\xA8\x1A\x4A\x9D\x54\x2D\x45\x86\xB2\xA6\x62\x37\x51\x5B\xB1\x07\xA8\x71\x85\x70\x77\xCC\xE1\x5E\xA0\xE6\x47\x74\x32\x69\x2D\x83\xFC\xE4\x98\x22\x22\x40\xC3\xD8\xD8\x51\x02\xA9\x1D\xB3\x84\x18\x0D\x5D\xC3\x10\x21\xE8\xC1\xFB\x1E\xD2\x83\xE7\xA3\xD4\x04\x47\x69\x8A\xE3\xC0\x44\x39\x3B\xA0\x28\x4A\xBE\x7B\x7E\x92\x3E\x98\x28\x64\xA2\xE9\x51\x14\x99\x04\xAB\x40\xB7\x49\x12\x61\x14\x37\xED\xF1\x83\xB1\x4B\x09\x32\x75\x29\x5C\x62\x8F\xE9\xC5\x6D\x1E\x46\x34\x8C\xBD\x23\x2E\x06\x46\xA0\x16\x52\x4C\xCC\x50\x6B\xD7\xCA\xE6\x00\x42\x25\x8E\x0C\xFA\x55\xD5\xC2\x0C\xD6\x19\xFF\xDA\xCA\xF9\x57\xDD\x12\xA4\x18\x5B\x74\x9B\x19\x1C\xBA\x06\xCB\x31\x27\x35\x4B\x11\x27\x77\x40\xB7\x19\xD0\x5C\xC7\x93\xC4\x5C\x88\x3F\xA9\x5D\x8F\x17\x06\x26\x49\x1E\x07\x36\xA9\x39\x02\x20\x77\x03\xD0\x25\x17\x3A\xB1\x3F\x0B\xAA\x75\xDE\x55\x30\x64\x35\x1A\x79\x54\x45\x1A\x88\x41\x15\x1F\x87\x91\x4D\x13\x06\x07\x14\xA9\xDB\x75\x3D\x9A\x2E\xC5\x5F\x10\x40\x96\xBE\x16\xC1\x20\xE2\x2E\x4A\x12\x62\x93\x91\x23\x00\x42\x36\x00\x5D\x4A\xA1\x13\xFB\x13\x04\xC9\x82\x36\x82\x18\x24\x4D\xA3\xDC\xEA\xCC\x35\x5C\xA7\xCD\x40\x80\x0A\x75\xBB\xAE\x41\xD3\xA5\x9E\xE4\xE4\x76\x80\x03\xE4\x23\x35\xC0\xA0\xD5\x31\x8C\xED\x6A\x71\x04\x40\xF8\x06\xA0\x4B\x2F\x74\xCA\xF2\x5B\x10\x20\xCB\xDF\x88\xA1\x2A\xD0\x40\x5A\x35\xB0\x91\x2D\xB2\x71\x10\xEE\x24\xCD\xF2\x88\x86\x69\xF4\x60\xD5\x5E\xC4\x01\xE8\x57\x60\xC8\x3E\x22\x0C\x30\x91\xD4\xB5\x9E\xD3\x75\x98\x81\x23\x68\x2B\x11\x68\x30\x57\x10\xDE\x87\x01\xB6\xE9\x2C\x60\xE8\xFC\x4B\x20\xA0\xAF\x00\x09\xF0\x0E\xE5\x11\x55\x34\x16\xBB\x06\xE1\xBD\xA9\x2B\xC0\x0D\xD2\x55\x00\x99\x12\x39\x36\xD5\x8F\x35\xB8\xE0\x18\x66\x61\x4C\xF1\x1E\xEC\x0A\x64\x63\xAC\x16\xC1\x52\x33\x90\xF8\xAB\x0E\x04\x1F\x81\x66\x9D\xBA\x41\xA3\xA2\x9A\xF1\x93\xD8\x47\x70\x71\xA5\xC2\xA1\x02\x0B\xC6\x11\x8B\x2C\x5E\x33\x45\xA1\x8F\xCD\x4C\x1A\x70\x65\x58\xF2\x20\x4C\x65\x32\x8A\x51\x0C\x15\x45\x90\xE2\x36\xA4\x99\x67\x9A\x14\x2A\xA0\x3E\x72\x62\x37\xD1\xB2\x62\x8F\x2C\xDC\xC7\x52\x63\x5D\x48\xD4\x0D\x59\x7E\xEB\x25\xE5\xD3\x52\x83\xA5\x88\x56\x24\x65\x1D\x2B\xC6\x7B\x4D\x12\x6D\x24\x6B\xEC\x84\x68\x3C\xBC\x38\xA1\x4D\x23\x32\x95\x21\x35\xD4\x60\x84\xAA\xA3\x66\x85\xAA\x8F\x6C\x86\xA2\x55\xB6\x03\x6B\xD1\x0C\xC1\x5A\x13\xA2\x76\x54\x2D\xC1\x5A\x25\x53\x20\x53\x95\x22\x50\x11\x0D\x5C\xB5\xC8\xE6\x88\xF1\x1E\x51\x43\xE2\x12\x11\x0C\x46\x11\xA0\xB2\xFA\x25\x40\xB6\x80\xC0\x8C\x4B\x7D\xBB\x63\x00\x13\x06\x6B\x82\xE5\xD1\x0D\x59\x73\x54\x4D\x57\x01\x24\xEB\x69\xA2\xA8\x06\x3C\x59\x63\xE5\x64\x0E\x96\x93\x29\x5A\x4E\x60\xB8\x9C\xB4\x78\x39\x81\x01\xC3\x5A\x4F\x09\xC0\xC8\x2C\xBF\x6E\x8B\x93\x16\x51\xD9\x21\xDC\xD1\x08\xEF\x0C\xCF\xC8\x00\x8E\x61\xE8\x64\x24\x4D\x7B\x19\xAC\xE4\x40\x8B\x24\x42\x1A\x54\xB0\xA4\x09\x03\x80\x89\xB3\x06\xD4\x95\xFD\x8C\x4D\x60\x8B\xF0\xCD\xA4\x09\x5B\x07\x72\x5B\xC8\x84\xEA\x90\x31\x1C\x12\xEE\x0F\xAD\x63\xC1\x91\x0C\x0E\xA8\x90\x31\x9A\xBA\x21\xA2\xEB\xAA\x4B\x01\x8E\x43\x43\x42\x76\x6A\x01\x28\xFB\xB6\x08\xD0\x5C\x5C\xE1\x6C\xF3\xB3\x86\x31\x1F\x46\xE2\x85\x71\x1A\x21\xDF\x4A\xCD\x38\x2E\x95\xA4\x6A\xB4\x88\x40\x3D\x68\x54\x49\x85\xE1\xF4\xC3\x80\x14\x35\x01\x45\x61\x9C\x41\xA3\x20\x23\xA4\x88\x64\x98\xB5\x19\x81\x61\x6A\x20\x5C\x2D\x0F\x34\x34\x9A\x1E\x42\x1B\xF3\x5B\x9A\x84\xFF\xF8\xDB\x45\x05\x7E\x76\xC4\x47\xFF\x20\xB0\x2C\x3C\x89\x64\xD8\xA7\x66\x91\x05\x14\x48\x68\x85\x82\xB8\x74\xE1\x1F\x53\x0F\xDF\x19\x56\xB8\x04\xA0\xDA\x27\xB6\x76\x8A\x0D\xBD\xF6\xD4\xD2\xA9\x04\xEA\x7D\xB0\xB5\x13\x06\x7B\x45\x36\x4E\x11\xCC\x29\xB2\x72\x8A\x00\x4E\xF8\x1E\x45\x45\x32\xF3\x62\xFC\x9D\xE7\x57\x14\x45\x89\x5F\xC3\x94\xBC\x54\x37\x1D\x30\x4A\xBD\x94\x92\xE2\x49\x4D\x86\x70\xDE\x6C\x10\x1B\x40\xF1\x3F\x08\x2D\xC8\x8F\xA9\xDC\xFE\x7F\x59\x12\xF3\x66\xCF\xDB\x25\xC4\xC7\x5E\x78\x4C\x13\x42\x3D\x26\x39\x5F\xC6\x2A\x9D\x80\xFF\x78\xEE\x8A\xF8\x8B\x2B\xE2\xA5\x2B\xE2\xAF\xAE\x88\x7F\x63\x3A\xD6\xA1\x0C\x45\x81\x0C\x54\x96\xFA\x65\x20\xA2\xC9\xEE\x1F\x10\xC9\xB2\x17\xC1\x65\x1E\x42\x19\xFE\xC7\xDF\xBC\x30\x2B\x78\x85\x01\x98\xB4\x15\x94\xF2\xF7\x1E\xC7\x5E\x80\xFD\x24\x80\xB1\x76\x04\xC3\x00\xD1\xBB\x34\x52\x45\x5A\x28\xBC\x05\x00\x70\x9F\xD3\x01\x2A\xA3\xB2\xD9\xAC\x48\x89\x60\x55\x43\x20\x92\x51\x12\xC6\x6C\x39\x39\xF1\x11\xC5\x81\x88\x86\xE3\x16\x5E\x25\x82\xC0\x8B\xB7\x18\x88\x68\xBC\xB4\x8E\xCF\x84\xD8\x2B\x81\x39\x89\xDA\x95\x16\x90\xAC\x8A\x2B\xC4\x6C\xCA\x17\xA8\xAD\x06\x10\x90\xAC\x46\x50\x88\x81\x7C\x59\xD8\xE7\xF1\x11\x91\xEC\x80\xC0\x75\x7F\x00\x83\x35\x35\x99\x86\xFD\xD4\xE0\x75\x8A\x91\xC0\x19\x25\x11\x8E\xE1\x6E\xA0\x80\x24\x8F\x69\x78\xC4\x1E\x26\xA4\x2C\x8F\x43\x9A\x20\x03\x48\xA0\xAE\x03\x85\x51\x96\x81\x59\x9C\x92\x30\xA6\x3B\xCF\xD0\x91\xA7\xE1\x6A\x29\x7F\x4F\x50\x7A\xF0\x08\x46\xFE\x01\xDD\x46\xDA\x38\xD9\xD0\x32\x6C\x27\xC3\x9E\xF1\xDB\x31\xAA\x55\x80\x76\x89\xF6\x2D\x0C\xD5\xCD\x17\x13\x4E\xB5\xB8\xCA\x86\x2C\xC2\xA7\x02\x25\x10\x33\x60\x98\x05\xE1\x3E\xA4\x00\x12\x1F\xD4\x12\xE9\x80\x4F\x3A\x4A\x35\x72\xB1\x2F\x3A\x8C\x04\x0D\xB3\x2C\xAD\x6A\x41\x1D\x0A\x31\x34\x12\x32\xC8\x09\x10\x12\xCA\xBF\xC6\xE1\x45\x7D\x04\x87\x82\x11\xCC\x11\xA7\xA1\xE6\x71\x58\x04\x6A\x99\x27\x8A\x9F\xD4\x01\x3B\xCB\x09\x49\x8A\xE7\x5E\x0B\x6E\x53\x44\xB8\x71\xA6\xBB\x17\x0E\xD8\x3C\xAF\xB8\x62\x97\xB4\x8D\xE2\xD2\xE4\x1B\x8E\xCB\xA9\x34\x8A\xCC\x50\xB1\x82\x02\x11\xE0\x21\x11\xC9\x57\x33\xB5\x79\x54\x1A\x6C\x4D\x29\x33\x2A\x0F\x5D\x3B\xA5\xCA\xB3\x9C\x18\xB2\xC6\x16\x7E\xE2\x72\x20\x88\x95\xDC\xFE\x1F\xF6\xB5\xC1\x87\x15\xC4\x6E\x78\x6D\x24\x01\x3A\x19\xA6\x0E\x20\x39\xC9\xC8\x60\xAB\xF9\x24\x24\x8B\xF1\xB8\xE4\xED\xF4\x54\x3C\x37\x92\xB0\x5D\x34\x04\x2F\x8C\x33\xAC\xC5\x63\xAB\x50\x66\x69\x84\xB2\xDF\x40\x05\xC4\x00\x95\xFA\x4E\x42\x8A\x89\x87\x8F\x21\xAD\x42\x0D\x8C\x2A\x11\xAF\x5C\xAD\x90\x67\x66\x2B\x96\x5A\x02\x98\xF0\x6C\x5C\x85\xA9\xC7\x44\xA3\xB5\xA3\x23\x7D\x25\x7F\x8A\x58\x96\xB9\x00\x40\x93\xCB\x0C\x0D\x8B\x47\x34\x8E\xF0\x11\x4B\xA7\x95\xF6\xD8\xC0\x5D\xEF\xA0\xA1\x30\x0A\x70\x6F\x06\x32\xD6\x7B\x30\xA6\x4D\xC9\x06\xCB\xE4\x4A\x9D\xFB\xA9\x39\xD7\xB1\x9B\x3A\x6F\x3B\x76\xF3\x93\x28\xC2\x3E\x0D\x93\x1E\x82\x62\xEA\x45\xC5\x4F\x14\xC1\x7D\x1B\xDA\xAD\x76\x54\x50\x85\x33\x30\x46\xD6\x7D\x5D\x40\x10\x5B\xE0\x15\xE1\x78\x4F\x0F\x6E\x3D\xAC\x5E\xAF\xE0\x76\x36\x78\x99\x30\xF5\x88\x30\xBB\x2A\xD0\xA5\x8B\x41\x5A\xBA\xB3\x7F\x9C\x7B\x96\xC5\x1F\xC5\xE4\x18\xC6\x72\x9D\xE1\xA4\x65\xFD\x0C\xEE\xD2\xA5\x13\xB2\x6D\xD4\x8C\xE2\x40\x69\x88\xFD\x63\x23\xD9\x20\x38\x0E\x43\xD3\x41\xD6\xA8\x78\x98\xB4\x8C\x47\xB3\xA8\x65\x41\xE2\x32\x2A\x39\x9D\xE0\xA6\x55\x7C\x40\x2C\x9B\x8F\xF8\xE8\x97\xC7\xE6\x44\xCC\x66\x7D\xA4\x7C\x70\xF2\x91\x7F\x60\x36\x52\xC8\xCB\xF0\x4C\x83\x1F\xF1\x31\x09\xFF\xC2\x5E\x18\x87\xDA\xD8\x68\x30\xA1\xC4\xA8\x60\x69\x9E\x1D\x4C\xFD\x6A\x18\xD0\x8F\x57\x21\xD0\x92\x17\x80\xA1\x57\x2E\x15\x52\xA5\x70\x4D\x83\x4F\xBF\x20\x4E\x49\xA5\xF2\x23\xB6\xD7\x51\x68\x26\x9C\x84\xF0\x93\x98\xE2\x13\x00\x3F\xA2\x93\x11\x56\xEF\x18\xC9\xAD\xE2\x51\xD3\x1A\xA2\x18\x9F\xEF\x94\x48\x3B\x26\xE2\x1E\x0D\x94\x72\x24\xB8\xC4\x5E\x86\x34\xC3\x21\xB7\x37\xFE\xA4\x53\x2A\x44\x16\xE6\x3C\x4D\x94\x46\x72\x09\x54\x3B\x23\x4C\xB1\x32\x82\x04\x95\x6B\x11\x71\xBB\x83\x77\xDC\x0B\x1D\x35\x68\xBD\xBB\xB4\xB3\xAF\x9E\x6A\x1D\x69\xE2\x65\x7E\x08\xF7\x15\xAA\x42\x13\xDD\x7A\x7D\x55\x80\x7B\x71\xC2\xA2\xD1\x2E\x76\x8D\xD5\x22\xA5\x44\xCD\x20\xAD\x44\xCB\x20\x35\xC4\x4F\x96\xBE\xDC\xBD\x52\xF6\x3C\x75\x90\x78\x0A\xF2\x64\x40\x92\xC7\x43\xEA\x5E\x2D\xA9\xC8\x20\x25\x47\x69\xDD\x9A\xBD\x3F\x9D\x62\xBD\xFB\x07\xF4\xFA\x0B\x87\xF1\x2D\x2A\x57\x05\x15\x04\x61\x89\x55\x27\x8A\x4F\x6C\x19\x3F\xFF\xE5\x1F\x26\x8C\x72\xA1\x1F\xC6\x68\xD2\xB1\xB8\x27\xA8\xA9\xA2\x80\x44\xB3\xAB\x20\x41\x4B\x01\xA4\xD9\x4D\xE9\x26\x0C\x84\x26\x86\x6A\x1B\x11\x41\xB2\x8D\x2A\x8A\x6E\x1B\x15\x43\xB7\x8D\x80\xC1\x6C\x73\x27\x1D\x21\xBE\x93\xCE\x07\xDF\xC9\x07\x80\xEF\xC4\x53\xC2\xD5\x0E\xAA\xD8\x57\x6C\x29\x1E\xD9\xEB\x16\x91\x86\x80\x54\xD1\x91\x69\xC8\xFD\x95\xBE\x4D\xBF\x72\x4B\x59\xE8\x2B\xB5\x64\xF9\x6D\xD3\x22\xD0\x10\x91\x18\x9D\x63\x2E\x9C\xE0\x6D\x7E\x1D\xF3\x12\x26\xF4\xAD\x80\x5C\x6E\xE9\x4C\x4E\xB5\x75\x7D\x87\x84\x23\xC8\xF5\x8F\x52\xB7\xEA\x17\x8A\x83\xA6\x7F\xA5\x5B\x43\x4E\xD8\xBB\xAE\x0E\xF1\x18\x38\x31\x90\xC8\xAD\x6E\x10\xBC\xAA\x69\xE7\xCE\x24\xE1\x89\x3E\x24\x31\x6B\xC4\x6A\x70\x2B\x2D\x9A\x16\xC1\xBF\x6A\x40\xE9\x56\x22\xDA\x29\x21\x4A\x4B\x65\x02\x51\x39\x51\x6F\xE9\xBC\x4B\xAD\xB2\x70\xEE\xF8\x4E\x3C\xD3\x5C\xFF\x28\xF8\x48\x4B\xF3\x02\x21\x91\xFC\x09\xA6\x7F\x12\x19\x9C\x24\x0E\xF5\x2F\xA6\xCB\x49\x66\x72\x82\xB9\xC4\x78\x0F\x71\x29\x9A\x1B\xC2\xF5\x2F\x76\xD4\xB6\xF9\xCD\x64\xA8\x28\x94\x7C\x04\x82\xCA\x01\x07\x3E\x93\x64\x1E\x41\xF1\xDE\x70\xC4\x4B\x46\xD1\x0F\x94\xE8\xF0\x7A\x8E\xD0\xA9\xAB\x05\x87\x04\xAB\x17\x3C\x75\x18\x34\x15\xDA\xC8\x88\xEB\x98\x32\x8A\x74\xA6\x44\x01\x89\xA7\x3B\x74\xC2\x95\x75\x3D\x2F\x45\xF4\xC0\xAC\xA8\xAF\xD6\xC1\xC0\xE6\x81\xC7\xD6\xB9\xAA\x87\x6D\x34\x58\xD9\x08\x23\xB0\x85\x6E\xAF\x5C\x87\x2B\x10\x04\xAB\x6A\xCD\x0A\x35\xBD\x4B\x65\x41\x0D\xAA\x3F\x85\x1A\x50\x32\x8F\x92\xF0\xE8\x45\x78\x47\xCD\x28\x59\x1A\x85\x16\x30\xC1\xFC\xC8\x8E\x57\x18\xAF\x5A\x67\xA4\x87\x4C\x52\x0D\x00\x09\x8B\x1C\x16\x78\xA9\xBE\x11\xCE\x07\x4C\x01\x8B\xB2\x5A\xE4\x6A\xEC\xC7\xA0\x04\x1F\x93\x7B\x6D\x75\x4C\x07\xD6\x6E\x04\xF7\x2A\x35\x82\x81\x5C\x5C\x11\x26\xFD\x32\x72\x6B\xFC\x4E\x85\x67\x1A\xC5\x44\x58\x5A\xD7\x21\xD5\x88\xA8\xED\x42\x81\x0C\x90\x2B\xC7\x7A\x97\x90\x23\xA2\x06\x24\xC8\xA6\xBB\x30\xA2\x75\x3D\xCF\x7C\x5F\x6D\x96\x4F\xCF\x98\xE0\xE2\x50\x08\x40\x79\x28\xB4\x5E\xE2\x50\x68\x40\x61\x28\x4A\x98\xF4\xCB\xC8\x4D\x19\x0A\x01\x9E\x69\x14\x81\xA1\x10\x20\xD2\x50\x48\x96\x52\x87\x42\x24\x67\x1C\x0A\x95\xB2\xBA\x63\x5C\x8A\x0F\xDB\xD6\x8C\x54\xDA\xB8\x8D\x8A\xF4\xC6\x9E\x09\x49\xDC\x76\x36\x71\x72\x43\x2A\x07\x41\xC1\xAB\x96\x1D\xCC\x8A\x01\x0B\x13\x0A\x06\x9C\x06\xCC\x48\x99\x03\x09\xC8\x38\x60\x6E\xB0\xB2\x61\x6E\x64\xC6\x80\x07\x4A\x21\x61\x67\xE2\x64\x15\xEB\x08\xE4\xB1\xBC\x88\x0D\x19\x8F\xE3\x78\xDE\x11\x93\x7D\x11\xD5\xEC\x5F\x39\x9E\x9B\x26\x29\x92\x55\xCC\x32\x88\x55\xEC\x32\x5B\xF0\x66\x33\x9F\x26\x92\x55\x02\xA2\x01\x2C\x73\x03\x84\xA2\x4E\x37\x06\x24\xA5\x3A\x30\x60\x89\x53\x83\x84\x61\x0F\x62\x39\xA9\xD9\xE4\xA9\x91\xAC\xF2\x80\xF9\x31\x11\xDE\x1C\x83\x16\xCD\x24\x58\xB5\x0B\xAC\x36\xD6\x2B\x83\x1A\xA0\xDA\x18\x66\xAB\x59\xD5\x81\x54\xC0\xB7\x8C\x38\x45\xA3\xF4\x72\x8D\x11\x4B\x94\x01\x44\x10\x64\xC9\x5C\x84\x01\x90\x04\x03\xC0\x50\x1E\x15\x2D\x38\x62\x63\xAB\x44\x75\x01\x5E\x53\x37\xD9\xAE\x01\x8A\xE3\x24\xB5\xCA\x36\xB0\x51\xCB\x60\x72\x59\x17\x7A\x8D\xE8\xE5\x6C\x67\x7E\xBB\x0B\xC0\x10\x96\x56\x14\xA8\xB0\x12\x0B\xF4\x03\x4F\xEE\x08\x78\xC6\x73\xE0\x20\x8E\x78\xB8\x09\x44\x10\x77\x48\x2B\x04\x1C\x07\x59\xE1\xB4\x36\x2E\x12\x0E\x44\xA4\x29\x0D\x6C\x64\x14\x2C\xE0\x0D\x81\x16\xCC\xFA\xF1\x13\xC0\x93\x96\xDA\x0C\x70\xF1\xCD\x0E\x13\x09\x4A\xF2\xD8\xB7\x09\xD3\x3C\xAD\x9A\x48\x88\xCB\xC3\x06\x22\x80\xC3\x08\x18\xF2\xB2\xB9\x81\x84\xB0\x26\x6C\xC6\x30\x7B\x57\x18\x07\xF8\x94\xC0\x79\x14\x40\x81\x7C\x4B\x84\x2B\xAB\xDD\x10\x8A\xE9\x04\x18\x84\xAB\x1B\xB9\x7C\xE8\xB3\xC9\x2B\xA2\x00\x06\x16\xC1\x90\x3A\x22\xBC\xDC\x85\x03\xE1\x40\x48\x2B\xA4\xCD\x56\x2F\x11\x3D\x38\x95\x81\x48\x66\x4D\xBC\xD8\x22\x4B\xD9\xBB\x83\x34\xEA\xE3\x75\x9B\xDC\x5A\xCA\x64\x8F\xED\x36\xC5\x1A\x84\x66\x59\x47\x87\x41\x63\xD3\x40\x01\x73\x70\x20\x60\x0A\x89\xA6\xD9\x0C\x8A\x58\xE2\x32\x91\x8E\xD2\xE6\xC5\x02\x31\xCD\x87\x33\x8A\x08\x6D\xCD\xB6\x0A\x16\x68\x0E\x19\x05\x4A\xC9\x59\x7E\x2B\x9C\x1B\x32\xB1\x92\x90\x2C\x09\x59\x46\x84\xCF\x1C\xC0\xB8\xAD\xF6\x92\xB0\x01\x9B\x49\x70\x68\xF4\x6B\x04\xC8\x03\x20\xB9\x61\x2F\xA0\x24\x04\x2F\x5B\xD2\xE0\xFA\x42\x56\x3B\x1A\x7B\xE7\xCB\xC6\x4E\x0B\xA6\x9A\x7A\x9B\x4C\x0D\x52\x9B\xA9\x65\x6C\xDD\xD4\x32\x1C\xF2\x3B\x19\x03\x18\x8C\x06\x01\x18\x0C\x8D\xBE\x7D\x30\x3C\xE3\xBB\x88\x06\xAC\x4A\xFF\x08\x65\xD4\xA0\x7D\x83\x6C\x50\x5F\xA7\x66\xB5\x66\x83\x6E\x34\x57\x83\x62\xB2\x57\xF9\x52\xA2\xC1\x60\x12\x8B\x16\x8B\xA5\x04\xEF\x42\xF0\x8A\x29\x13\x9A\x51\x6C\x01\xC7\x24\x77\x89\x62\x12\x5C\xE6\xD2\x22\x79\x96\xEF\x5C\x24\x17\xD0\x8C\x92\x0B\x38\x26\xC9\x4B\x14\x93\xE4\x32\x97\x36\xC9\xD3\x96\xB2\x44\xC0\x6A\xFE\xB4\xD1\x31\x4A\x9D\x1A\xCA\x0F\xA5\xBF\x26\xB3\x02\x87\x3C\x5B\x41\xE1\xD1\x61\xE8\x17\x66\xA5\x0E\x06\x78\x13\x7F\xB0\x62\xBA\x32\x6D\x0A\x88\xCA\x46\xC9\x77\xF8\x15\x3B\x1D\x01\x30\x64\x03\x74\x60\x62\xED\xDF\x96\x1F\x1A\x4C\x3D\xD5\xE8\x54\x68\xC2\x1B\x0D\x68\x50\x3D\xAA\x13\x51\xDF\x96\xA8\x30\xF3\x34\xB5\x9B\xAC\x41\x00\x54\x6E\x80\x56\x93\x71\x34\x6B\xFF\x36\x93\x35\x98\xBA\xC9\x74\x2A\x34\xE1\x8D\x06\x34\xC8\x64\x3A\x11\xD5\x64\x85\x69\xB2\xC2\xC3\x2D\xAF\x72\x02\x28\x62\x05\x56\xC3\xCD\xF5\x17\x84\x02\x92\x10\x8F\xC7\x9B\x68\x88\x38\x20\x11\x56\xD5\x5A\x49\x34\x18\xB0\x22\xFA\x22\x37\x08\x07\x3B\xC3\xBB\x95\x26\x14\x90\x44\x9C\xC3\x77\x05\xEA\x08\x7A\xF7\x18\x1D\xC1\xEC\xAC\x40\xF9\x40\x5C\x34\x88\x07\x94\x89\x55\x7A\xF1\x13\x82\x96\x35\xB3\x02\x2E\x37\x97\x9E\x69\x2D\xE2\xA9\xF1\x36\x54\x4D\x24\x33\x6A\xF3\x38\xD5\x86\x29\x1C\xD2\x6C\xE5\x8F\x4D\x78\x4D\x74\x82\xBB\x20\xB5\x31\x40\xA8\xF8\xDA\x7A\xB9\x16\x0A\xF5\xD5\x41\x62\x47\xF9\x51\x85\x0B\xC5\x6F\x29\x30\x41\x6B\x91\xEB\xF5\x76\x7B\x7B\x43\x4D\x06\x80\xEE\x60\x16\x14\x1A\x7D\x98\x01\x84\xA3\x08\x07\xA0\x68\x4B\x63\x20\xA6\x74\x00\xC3\x88\x51\x9D\x2B\x83\xDC\x50\x2B\xB9\x00\x07\x74\x32\x81\x7E\xC0\xE1\x1B\x7E\xC8\xEC\x88\x1D\x68\x82\xC3\xD3\x46\xD2\x18\x95\x62\x0F\xB3\xF2\x46\xB2\xA6\x60\x33\xF7\x00\x63\x4E\x44\x37\xB9\x84\x80\x52\x3F\x4A\x6A\xA4\xD5\x19\x1E\x46\x68\xE9\xDF\x36\x18\x20\x9E\xD9\xC2\xF5\xAB\x79\x46\xF3\xC2\x04\x8D\xB6\x85\xD1\x61\xC3\xEA\x27\xE5\x85\x7C\x5E\x85\xE9\x4E\xCE\x2A\x0D\x48\x19\x8A\x90\x1A\xC2\xB6\x01\xA8\x31\x1F\xCA\x5B\x6A\x8A\xDB\x86\xF0\x89\x05\x25\x74\xD4\x41\x55\x41\xF5\x70\xAA\x80\x76\xAA\xC6\x21\x54\x11\xC5\xC1\xB3\x13\x11\x86\x4D\x45\xD4\x66\x15\x03\x09\x79\x28\xEB\xF3\xCF\x8A\xDB\x36\x1B\xAC\x9A\xC3\x43\x7B\xAF\x10\x54\x7F\x21\x01\xEE\xCF\x77\x7B\x21\xB8\xEA\x09\x02\x44\x75\x05\x95\xA8\xE2\x0B\x2A\xD8\x18\x57\x0D\xA2\x1E\x51\x06\x22\x0E\x6C\xB4\x68\x33\x21\x56\x83\x23\xD9\xCE\x52\x1B\x68\x08\x80\x3F\x96\x38\x9E\x27\xD6\x14\x24\xF9\x6E\xA0\x53\x8E\xB7\x86\xDE\x0E\x14\x44\xB4\x21\x28\xB6\x87\x51\x2B\xEB\x3B\x10\x72\x62\x56\x1F\x54\x68\x47\xE5\xA7\x82\x20\x3C\xEE\x8F\x30\xAC\x39\xDD\x0E\xBF\x92\xDB\xBC\x5F\x60\x80\x18\xF7\xB6\xE0\x28\x14\x2F\x0C\x17\xA7\x2F\x67\xC4\x26\x49\x3A\x23\xCB\x91\x6E\xC2\x35\xC5\xBD\x84\x6F\x9C\x4E\x41\xAC\x76\x59\xA1\x57\xD4\xCB\xBF\x4D\xE5\xB1\x0C\x52\xEB\xEA\x02\xCA\x47\x9A\x95\xD2\x55\xBC\x88\x1D\xA5\x60\xA8\xB0\x5A\x20\x5A\x8C\x00\x50\x30\x40\x24\x3C\x39\x3A\xCC\x24\xDA\x79\x48\x71\x61\xC1\x6B\x82\x42\x42\x12\x23\x42\x02\x28\xD3\x89\x38\x56\xED\xE3\xFE\xCC\xEA\x64\x1D\x3B\x65\x46\xA7\x05\xE7\x18\x4A\x50\x9C\x85\x34\xBC\xC7\x9E\x1F\x25\x59\x4E\x0C\xB3\x20\x80\xC7\xCD\x60\x02\x5F\xD8\xC1\xBA\xDF\x58\x31\x99\x7D\x1D\xF0\x94\x33\x9E\xAD\xF8\x42\xA4\x39\x63\xEF\x6B\xDF\xE8\x6B\x1A\x55\x52\xD5\xE4\x1A\x4C\x38\xAB\x1E\x69\x2F\x39\x97\x09\x35\x0B\xFF\xD2\xC6\x0E\xBA\x59\x04\xCE\xBA\xC2\xF6\x9C\x1B\x82\x76\xA0\xC0\xCC\xA1\x79\xDC\xD3\x74\xAC\x0E\x40\x39\x40\x95\xCA\x54\x93\x52\xCF\xB0\xE2\x09\x2B\xD8\xAB\x51\x10\xA8\xE7\xD9\xE5\xA4\x2F\x21\xD8\xBB\x9B\xE6\x01\x80\x87\x92\x2D\xF8\x01\x3A\xBB\x20\x30\x8E\x52\xF6\xC1\x48\x7A\xDD\x06\xE3\xB5\x48\x55\x83\xA3\x24\xF9\x96\xA7\x80\xA4\x1A\xA0\x9E\xC1\x04\x88\x50\xCA\x8A\xAD\xCD\xFB\xAF\x28\x4D\x0B\x6F\xAA\x5F\x8D\x6D\x6E\x06\x91\xE0\x42\x67\xFE\xE7\x45\x9C\x04\xF8\xEA\x8A\xE0\xCB\xAF\x97\x2F\x32\x1A\x5C\x5D\x79\xDE\x2F\x57\x57\xB7\x28\x0B\xFD\xD2\x45\x5F\xFA\x07\x44\xBE\x5E\xFA\x5F\x2F\x9F\x37\x08\x45\x5B\x11\xA4\x21\xCD\x18\xFC\x95\x8A\x50\xFA\x75\x42\x2A\xF0\xF3\xE2\x3F\x3F\x89\x33\xFA\xE4\xEB\xE5\x6F\xCF\x26\xE6\x75\x75\x85\xB2\x2C\xDC\xC7\x5F\x2F\x5F\x70\x92\x9C\xF5\xD3\xAF\x97\xBF\x2D\xA6\xF2\x42\x7C\x1F\xF1\x10\xB3\x5C\xAF\x0F\x71\xD1\x35\x8F\x8B\xE1\xC7\xC1\xD7\xCB\xE7\x51\x12\xEF\x97\xB4\x43\x92\x62\x52\x80\xBF\x5E\x3E\x0F\x70\x84\x29\xFE\x7A\xF9\xE2\x3E\x09\x83\x45\x9D\x71\xB1\xC1\x59\x4E\x65\x9C\xF9\x28\xC5\x3F\x49\xF0\x09\x4E\x17\xE3\xEF\x5F\x2F\x5F\xAC\x28\x20\xCA\x1D\xE9\xA5\xD8\xF3\x69\x73\x09\x6F\x98\x3E\xEA\xD2\x3C\x3B\x78\xB7\xC8\xFF\x56\x07\xDE\x6F\x17\xFB\x28\xB9\xE5\x05\x75\x84\x58\xF2\x71\x49\x97\x32\xAF\x7B\xEC\x17\x8C\x26\x37\x95\x09\x65\xFA\x31\x52\xC7\x4A\xEE\x33\x09\xD7\xA7\xAE\x71\xBA\x0D\xE0\x8A\x07\x30\xC2\x27\x4C\xAE\xAE\xD8\x3F\xCE\xA5\xC8\x36\xA2\x2B\x1E\x51\x36\x38\xEC\xD9\xE9\xEB\xE5\x0B\x36\xAE\xE5\x88\x14\x13\xD6\xD3\xA7\xDB\xF8\xAD\x7C\xFC\x26\x9F\x64\xCB\xB5\x01\x28\x59\x1B\x07\xDE\x29\x2F\x54\x08\x9B\x7F\xAD\xD9\xBF\xCA\x8C\xFF\xA3\x4A\xF9\x5B\x42\x58\xF9\x80\x59\x1F\xC0\xB7\x91\x5B\xF1\xC8\x2D\xB8\x4A\xB8\xF9\xC5\x8A\xFD\x22\x31\x9C\x74\xDE\x06\x6D\xC5\x83\xB6\xC8\xFA\xDB\xE6\x11\x2B\xF6\x88\xE9\xD3\x7B\xB7\x1D\x82\xCD\x59\x36\x67\xD9\x6A\x81\x33\xF3\x8B\xA5\xB6\x55\x37\xA7\x58\xBD\x53\xFC\x28\xFE\x29\x9F\xD0\x81\xA7\x76\xFB\x83\x61\xD9\x21\xC6\x27\xFA\xF5\xF2\x05\xFB\xBE\x4A\x99\x87\xD8\x19\x1E\x13\xD8\x65\x41\xDF\xD4\xB7\xDC\x18\x73\x20\xDD\x45\xDC\x89\xD3\x66\x25\xD5\x7F\xCD\x1C\x7F\x26\x85\xF9\xF6\x9E\x09\x5A\xB6\xEF\x30\xF5\x0F\x5E\x48\xF1\x51\x76\x0F\xB5\xDD\xF8\xA4\x61\xC6\x77\x1E\x7E\xAD\xAF\x3C\xFC\x36\xD2\xC6\xE1\xD7\x3A\x49\xED\xEC\x4E\xD5\x16\x85\xA5\x76\xCA\xCD\x17\xC6\x54\x9A\x0F\x4D\x7D\x25\xD3\x6B\x2C\xDD\x6C\x29\x77\xE8\x68\x4C\xB1\x33\x64\x4D\x03\xF1\x16\x73\x8A\xBD\x3A\x9B\x47\xEC\x0C\xD8\x07\x26\xE1\x66\x2A\x63\xDF\x8E\x56\x33\xD0\x81\x0C\xD8\xCE\xB2\xC5\x96\x16\x7D\xCB\x93\x82\xAE\xE8\xEC\x68\x9D\x0B\x32\xB7\xBA\x36\x23\x00\x73\x84\x8E\xE3\x70\x76\x87\x9F\x5D\xFC\x7A\xF9\x82\x6D\x0F\x75\x3B\x7B\xA1\xF7\x95\xCE\x46\x58\x49\xBB\xCB\xC3\x0D\xD0\xBE\xAD\xE5\xBE\x19\x6D\x27\xF3\x58\x36\x60\xEC\x5A\xEA\xEE\xD3\xCD\xC2\x86\xA5\xE8\x85\x4D\x2B\x92\x9D\x79\x42\x67\x9A\x13\xEF\x88\xC2\x98\x71\x46\x14\x97\xFA\x57\xB6\xA8\xD3\xAF\x3A\xAD\x3B\xF5\x7D\xB4\x95\x90\x8B\xF2\x2E\xA1\xBD\x0A\x23\xAE\xDC\x01\x0D\x39\x76\x1D\xB6\x33\xEF\x66\x74\x74\x11\x3D\x37\x95\x04\xAA\x6A\xA6\x57\x74\xDA\x3B\x2F\x6F\x9D\x85\xE5\x5B\x38\x7D\xD8\xB5\x37\x15\xA4\x4E\x9D\x8B\xA2\xE6\x98\xAE\xC4\xCC\xD3\x17\x0F\x8E\x06\x75\x4E\xC8\x0B\x1B\x6C\xF9\x8C\x6C\x37\x40\x4B\x4A\x76\x1E\x06\x3D\xE9\x15\x4E\xCF\x8A\xB2\x23\xA2\x3E\x78\xA1\x24\x08\xAD\xDF\xE0\x01\xA1\xD5\x8B\x3F\x12\xB0\xDD\x17\x94\x2E\xC2\x15\x65\x30\x21\x27\x6D\xB4\x8F\x1E\xB6\x23\x65\x3A\xD2\x63\xF6\x40\xA3\xAA\x1E\x7B\x8F\x8C\x8D\xB5\xB2\x96\x5A\x42\x0A\x3F\xD4\x5B\x1B\xFF\x79\xC9\xED\xF9\x0D\x3F\xCC\xB2\x2C\xDA\xAC\x04\x33\x87\x78\xF5\xF4\x95\xD4\xA3\x14\x8F\xA2\xDB\x68\x9D\x52\x8B\x32\xE5\x71\x42\x02\x4C\x70\xE0\x1D\x51\xCA\x24\xC4\xC4\x2C\xD8\x1A\x75\x28\x24\x6A\xC4\xD0\xC0\xF8\x2E\x47\x91\x47\x13\x0D\x85\x92\x1C\xB7\x1A\x84\xF5\x3E\x2F\x7B\x18\x15\x6E\x31\x19\x68\x0F\x68\x83\x63\x1D\x4A\x3F\x2F\x13\xDA\x2E\x8C\x03\x49\x97\x17\x82\x34\x2E\xD9\xE7\x91\x95\xA0\x8A\x9E\xDB\xD6\xDA\x7A\xB7\xD6\xD4\xB1\x62\x8E\x5B\x2E\x80\x19\xDD\x35\x45\xA1\x25\x41\x4F\x66\x21\x95\xF1\x3C\x56\x2A\xB9\xEC\x50\x94\x61\x29\xB4\x67\x63\xDF\x36\x12\x8F\xAB\x8A\x29\x7E\xDD\x26\x49\xB4\x15\x34\x5B\x41\xB3\x1A\x7B\xFC\x64\x05\x8D\xE7\xE1\x23\xFF\x7C\x45\x1E\x87\x77\x39\x13\xC3\x43\x64\x9F\x99\xA5\x5A\x68\x4E\xE0\xFF\x81\xF5\xD6\x2A\xE4\x7B\xE2\x90\xBF\x97\x98\x49\x7F\x14\x9C\xE1\x79\x3E\x91\x2F\xF7\x55\x20\x04\xEF\xF1\x89\xFF\x56\xC1\x7C\x63\xF2\x71\xCD\x46\xDB\x14\xB4\x4D\x41\xEB\xB0\xC7\x4F\x36\x05\x39\x3E\x53\x3F\xDB\x9C\xBE\x1E\xE4\xE6\x81\x9F\x27\x76\x93\xCD\xEA\x9D\x8D\x2D\x55\x2F\x3F\xE2\x3F\xBD\xD7\x6E\xA9\xFA\xE7\x4B\xD5\x80\x81\x1C\x93\x57\x21\x9A\x3D\xA9\x09\x2B\x58\x86\x4D\x31\x19\xA3\x7D\xAF\xCE\x4E\x31\xC3\x62\x22\xDD\x96\xC6\xE6\x5D\x1A\x7B\xD4\xBB\x95\x9B\x5B\x2D\xE6\x56\x2E\x79\x61\x1B\x9E\xC5\x86\x47\x5D\x6A\xD8\xD6\xC1\xD7\xA2\xC0\x56\xD9\x6E\x95\xED\xA3\xA9\x6C\xB7\x75\xF0\xB1\xE4\x7B\xB2\x2D\xD6\x8C\xB6\x58\xB3\x4D\x76\x6B\x51\x60\xF3\xE7\x6D\xB2\xDB\x26\xBB\x6D\xB2\x6B\x99\xEC\xA6\x5C\xEE\xDA\xA6\x85\xF5\x29\xB0\x4D\x0B\xDB\xB4\xB0\x4D\x0B\xDB\xB4\x00\x4E\x0B\x3D\x56\x16\xB7\xA4\xBE\x02\x05\xB6\xA4\xBE\x25\xF5\x2D\xA9\x6F\x49\xBD\x75\x61\x2B\xC6\x27\xEA\xA5\x24\x3C\x82\x2F\x25\x6F\xC9\x7D\x8D\x0A\x6C\xC9\x7D\x4B\xEE\x5B\x72\xDF\x92\x7B\x6B\x72\xDF\xF2\xD8\x96\xC7\xB6\x3C\x36\x57\x1E\x23\xB8\x90\x67\xB5\xA7\x6F\x84\x97\x68\xEC\x77\x75\x58\x87\x70\xAC\xA5\xE0\xEA\x5E\x9E\x2D\x5D\x6D\xE9\x6A\x15\xF6\xD8\xD2\x55\x93\xAE\x3A\x2E\xFB\x6D\x91\xBB\x45\xEE\x16\xB9\xAB\x8B\x5C\xDB\xCC\xBE\x85\xEC\x16\xB2\x5B\xC8\xAE\x23\x64\xB7\x4A\x78\x0B\xCE\x35\xD9\x63\x0B\x4E\x21\x38\xF9\xBB\x1B\xCD\x5D\x12\x61\x56\xC8\x1D\x06\xD0\x85\x9C\x00\xC6\x6D\x92\x44\x18\xC5\x30\xD8\xED\xE2\x4D\xA5\x9B\x70\xF9\xA6\x02\x21\xF8\xF2\xEA\xEA\xD3\x3B\xFE\xBF\xAF\x97\x2F\xD8\xEF\xCF\xCC\x74\x1F\x43\xEC\x63\xE5\xF1\xBC\x41\xFF\x90\xD2\x30\x89\x33\xED\x56\x34\x23\xFD\x1F\x9C\x81\x01\xAF\xF5\x22\x50\x05\x5F\x35\xB1\xF1\xC2\x53\x19\xDC\xC5\x7A\xDA\xBD\xA5\x62\xB3\x9F\x1C\xD3\x30\x02\xAE\x7A\xD3\x29\x34\x26\xF8\x88\x08\x0D\x51\xF4\xAF\xA2\xF9\xBD\xBB\xB1\x8D\x63\x70\x4D\xF6\x02\x67\xE9\xB6\x39\xF6\x4D\x09\x48\x96\x9C\x5D\xD6\x5F\xD1\x00\x05\x86\x7D\xD0\xF1\xC2\x56\x11\x99\x0F\x92\xD9\x54\xA6\xB7\x57\x6D\x1D\x1C\x5E\x66\xED\xC2\x2F\xB3\xF3\x2B\xBF\x9D\x64\xC1\x28\xFD\xC3\x4A\x43\xC9\x61\x03\xB6\x3F\x27\x4F\x72\xA2\x83\x3D\xD5\xF6\x3E\xF5\x49\xA8\xBD\xDE\x58\x44\xE4\xD6\x62\x63\x16\xA9\x56\x6C\x16\x36\x19\x2F\x59\x27\xCC\xC6\xBB\x43\xC5\xF5\xB3\x3B\xC5\xFC\x83\xB3\x94\x43\x0E\x28\x3B\x67\x1F\xA3\xAA\xE6\x64\x97\x50\xCC\x62\xA1\x59\xAF\x00\x70\x9B\xED\xF5\x62\xC3\xD2\x6F\xD4\xA2\xD6\x89\x8F\x50\xDC\x5A\xF0\x79\x3D\x04\xD5\x60\x86\x4A\xC8\x80\xDA\x5E\x03\x39\xF2\xC8\x4C\x3C\x26\x76\x80\x45\xEF\x9C\x68\x51\x78\xF4\x23\x6B\x0B\xD7\x6C\xFE\xB0\xF3\x6A\x5B\xF9\xB6\x46\xB3\x6C\xE5\xDB\x56\xBE\xAD\x60\x70\xB6\xF2\xCD\xBD\x7C\x33\x9F\x59\x9C\xD9\x6F\x95\x09\x6E\x46\x33\xCC\x38\xCD\x2F\xAF\xF2\x13\x73\xB1\xD1\x6D\xBF\xF5\x7C\x4B\x8F\xAD\xDE\x78\x2C\x53\xCB\x56\x6F\x6C\xF5\xC6\x0A\x06\x67\xAB\x37\x7E\xF6\xE5\x22\xFD\xE0\xC3\xF6\xBC\xBE\xBC\xF4\xDB\xFC\xB9\xCD\x9F\xDB\xFC\xB9\xCD\x9F\x8F\x69\xFE\xDC\x9E\xD7\x7F\xC2\xE7\xF5\xAD\xBC\xD8\xCA\x8B\x33\x9C\x49\xB6\xF2\x62\x2B\x2F\x56\x30\x38\x5B\x79\xB1\x95\x17\x5B\x79\x61\x2B\x2F\x16\xBE\x1A\x6D\xAB\x3D\xB6\xDA\x63\xAB\x3D\xB6\xDA\x63\xAB\x3D\xB6\xDA\x63\xAB\x3D\x7E\xB2\xDA\x43\x74\xC5\x05\x6F\xF0\xDB\x6A\x90\xAD\x06\xD9\x6A\x90\xAD\x06\xD9\x6A\x90\xAD\x06\xD9\x6A\x90\x9F\xB8\x06\xD9\x66\xDC\x33\x4E\xAE\xDB\x8C\xBB\xCD\xB8\x2B\x18\x9C\x6D\xC6\xED\x32\xE3\xDA\x2E\x1B\x6D\xEE\x6E\xD8\x85\x71\xE0\xA1\x28\x2A\x25\xF3\xB2\xFC\xB6\xE5\x76\x0D\x6B\x8F\x38\x3F\xDE\xE2\x42\x8D\x07\x2F\x8C\xA9\x5B\xAF\x2E\xD7\x74\x18\xC9\x68\x37\x77\x18\x31\x9D\x2E\xF3\xB0\x2A\x89\x08\x41\x4E\xAC\x8E\xF8\x98\x61\x27\x2B\x94\x57\x4F\x38\x60\x36\xAF\xA1\xB2\x9B\x45\xDA\x5F\x78\xD5\xEC\x69\x6C\x14\xEE\x1A\x89\xFD\x43\x42\x84\x56\x81\xBC\x74\xE7\x48\xFD\xDD\x2E\x07\xC9\x77\x79\x14\x91\x3C\x76\xF2\xA5\x62\x68\x68\xE2\x8A\x5D\x0F\x8A\xF7\x3D\xA4\x07\xCF\x47\xA9\x6B\xAF\x23\x0B\x2A\x57\xEC\xB2\xAD\x0C\x44\x1C\x74\x93\x0D\xA5\x29\x8E\x9D\xFA\xB4\x5C\xDC\xE2\x12\x4B\xB6\xFB\x5A\x8C\xFD\xD5\xCF\x50\x6F\x65\xDB\x59\xCF\xD0\x5B\xD9\xB6\x95\x6D\x2B\x18\x9C\xAD\x6C\x1B\xA9\x6C\x9B\xEA\xD2\xE5\x2D\x7B\xAF\xD1\x2C\x5B\xF6\xDE\xB2\xF7\x0A\x06\x67\xCB\xDE\x13\x64\xEF\x51\x2E\xDE\xDE\xD2\xF6\x1A\xCD\xB2\xA5\xED\x2D\x6D\xAF\x60\x70\xB6\xB4\x3D\x56\xDA\xEE\x7F\xF9\xFA\x96\xA0\xD7\x68\x96\x2D\x41\x6F\x09\x7A\x05\x83\xB3\x25\xE8\xB1\x12\x74\xB9\x6A\x1D\xA7\x24\x8C\xE9\xCE\x7B\xE6\xDD\x57\x7F\x5F\x34\x7F\x3E\xF3\x62\x9A\x20\x6F\x97\x90\x23\xA2\x52\xFB\x8E\x26\x48\x6A\xC0\xAC\x41\x40\xAF\xF6\x71\x18\xEA\x33\x2F\xC9\xA9\x47\xF0\x7D\xF5\x93\xA3\xB3\xBF\x2B\x3C\xCC\x00\x9C\x30\x16\x00\xBB\x92\x05\xDB\x13\x60\x52\xEF\xBE\x93\x90\x62\xB1\x21\xCD\xA9\x2F\xFC\x66\xFF\x6F\x7E\x7B\x17\xF5\x9F\x62\x23\xDF\xC6\x10\x77\x34\x76\x04\x73\xB2\xC5\x1F\x17\xBE\x06\x2F\x5B\x4A\xC1\x08\x6E\x10\xCA\xBF\x2F\x32\x4A\x68\x12\x3D\x0B\xB3\x2C\x45\x3E\x6E\x7E\xA2\x28\x3D\xA0\xE6\x67\x9E\xA6\x98\x5C\x1C\xF1\xF1\x98\xDC\x63\x91\x83\xD8\xC4\x84\xF0\x8E\x69\xE0\xDD\xA2\x0C\xA3\x20\x10\x34\x64\xCD\xD9\x21\x21\x14\x68\x2F\xD0\xC3\xD8\x27\x50\x7B\x96\xDF\x82\x64\x8E\x79\x04\xA1\x5B\x9A\xAB\x71\xAB\x49\x04\xE1\x3D\x84\x1B\x84\xF7\xC7\x04\x94\xB1\x84\x14\x3F\xB9\xF6\x2A\x64\x57\x79\xA4\xDA\xCE\x1C\x00\x40\xCF\xA9\x4E\x44\x35\xC0\x21\xDC\x51\x50\xA9\x12\x52\xFC\xCC\xC3\x98\x7A\x7F\x61\x92\x28\x50\xCD\xA4\x95\xED\x3C\xD1\xFD\x7C\x42\x7F\x15\xBD\x33\xA6\x5E\x10\xEE\x2E\x85\xA6\x8C\x06\xDE\x2E\xA6\x40\x0B\xA3\x1A\xC6\x21\x2D\x7E\x79\x29\x22\xE8\x98\xD5\xC0\x8A\x12\x6B\x08\xE3\x7B\x80\x46\xD5\x6A\xA4\x53\x21\xD4\xB4\x76\x49\x4E\xBC\x8C\xE2\x54\xA1\x26\xB7\x37\xF4\xBE\xFF\xCA\x8A\x38\x08\xBE\xC7\xF4\x1B\x26\x31\x8E\x14\x60\x16\x9E\xEA\x1F\x17\x4C\x00\x03\x4F\x1D\x56\xB4\xB4\x74\x57\x58\x1B\x10\x24\xD9\x8B\x86\xBB\x0C\xD3\x32\x1B\xB3\x31\x2F\x7E\xEE\x22\xB4\xCF\x8C\xD0\x18\xEF\x11\x0D\xEF\x8D\xDD\xB3\x14\xFB\x21\x8A\x34\x30\x0F\x7B\xB0\xD7\x1D\xC1\x59\xF8\x97\x91\x22\x26\x24\x21\x26\x60\x10\xEE\x43\x0A\x4B\x7B\xB7\x0B\x63\x14\x55\x84\x69\xE2\x65\x7E\xC8\xCD\x50\xFC\xCD\xF0\x2E\xE4\x9F\xAC\x5B\x91\xB6\xB8\x0A\x20\x30\x46\x31\x04\x10\x62\x57\xEB\x51\x59\x0C\x84\xDE\x19\x08\x1E\xB3\xEF\x09\x09\x20\x48\xD1\xEE\x95\x7A\x2B\x60\x06\x6A\xD1\x2E\x8C\x77\x85\x1B\x68\xE2\x08\x01\xDD\x34\x2A\x91\xAE\xD2\x6A\xB2\x83\x00\xE1\x29\x91\x8D\xCF\xF7\x90\xFA\x87\x02\x16\x3C\xC4\x02\x2D\x1D\x56\x79\x17\xB3\x86\x19\x9C\x26\x59\x58\x3B\x9F\x82\xC2\x8F\x71\x98\xFB\x06\x0F\x31\x3A\x86\xBE\x17\x20\x8A\x18\x5A\x39\x5D\xC1\xFC\x21\xA0\xC4\x9D\x8F\x8F\xA2\x14\xB7\x88\xD2\x58\xE7\x51\xD1\x34\xA5\xCF\x2B\xA8\x55\xAB\xA6\x85\x06\x15\xE4\xBB\x90\x42\x41\xA1\x58\xF0\xF5\x13\xBC\xDB\x19\xDB\x05\x6A\x9C\xCB\x11\x9D\xA0\x1E\x4D\xBB\x41\x3A\x09\xAE\xCA\x57\xF8\x1D\xC5\x7B\xAC\x4D\x1E\x0C\xA0\xFA\x46\x9D\x46\xCC\x00\x55\xEC\x2A\x51\xE8\x3D\x78\xB3\xA6\x66\xC6\xD2\x45\x6D\x50\x39\x5B\xD4\xBF\x78\xC2\xD8\x85\x27\xAF\xF2\x0C\x05\xE4\x1F\xB0\xFF\xCD\xC3\xA7\x54\x01\x72\x1E\x6C\xBE\xF4\xC2\x98\x1D\x61\x86\xBA\x57\x65\x8A\x02\x53\x8C\x54\xF2\x37\x35\x8B\xBA\x69\x00\x79\xA4\x4C\xFD\x1A\x60\xAD\x90\xCA\xAD\x01\x68\xFC\x64\x50\xED\x09\x10\x50\x98\x22\x14\xA8\x91\x15\x37\xA3\x86\x0F\x59\x58\x41\x61\x3F\x51\x9A\x46\x0F\x1E\x49\xF2\x38\xF0\xF0\xC9\xC7\x59\x06\x51\xAA\x03\xE2\x02\xA0\xAB\x86\x82\x02\xAD\x26\x5F\x8F\xC4\x01\x88\xA0\x3B\x1F\x40\xA0\x29\xB0\x8C\x34\x80\xA8\x33\x73\xE2\x43\x9A\x61\x4A\x49\x98\x46\x92\x4F\x35\x8D\xBA\x64\x98\x7A\xE1\xAF\x97\x9A\xC6\x65\xB3\x11\x5F\x89\x29\x6E\xE2\xBB\xC2\x28\xB9\x1C\xE0\x0A\xA0\x49\x02\x2A\xA4\xA4\x28\x5A\x44\xAB\x3F\xA5\x66\x61\x0A\xA8\xDB\x80\xA1\xA9\xB0\xF5\x84\x20\x74\x51\x07\x63\x5F\xAA\x29\xCB\xC8\x61\x7E\x92\x3E\xA8\x32\xB1\x36\xC3\x90\xD5\x30\x35\x49\x96\x10\x51\x0D\xB5\x50\x17\x5B\xEB\x2E\x5A\xAB\xC9\x4F\x22\x98\x6D\x09\x53\x1E\x02\x2E\x0C\xD1\xA3\x24\x2E\x13\x96\x32\xE2\x00\x86\x21\x3B\x19\x30\x75\x63\x1D\xCB\x00\xF7\x8F\xE9\x45\xF5\x87\x96\xB4\x04\x24\x2F\x43\x47\xEC\xA1\xE0\xFF\x8A\x6C\x0D\x35\x36\x9A\x15\x24\x85\xF0\x82\xE3\x1F\x1C\x00\xD0\xE5\x4C\x1E\x67\x71\x38\xA1\x8F\x31\xEA\x61\xBB\xA0\x58\x2D\x4B\x58\x93\xC6\xBD\x6A\x04\xC8\x2B\xF8\x3A\x40\xA9\xBC\x8B\x66\x6E\x50\x94\x6A\x88\xBC\x7E\xAF\xC0\xDA\x00\xA1\xD4\xE4\x08\x15\x48\x9F\xA2\x50\xFA\xAC\xC9\x61\x9C\xA1\x36\xF3\xDF\x41\x93\x7E\x62\xB4\x68\x62\xB0\x66\xD5\x43\x56\x38\x21\x8A\xBE\x0D\x9A\xA0\xEE\x1D\x0A\x02\x60\xAD\xA1\x6A\xD6\xE6\x36\x11\x20\xCD\xAF\x22\x00\x30\x14\xD0\x4F\x07\x8A\x8B\x28\x06\x48\x96\xDF\x0A\xEE\x15\x83\xFE\x1D\x03\x15\x91\x88\x5E\xEA\xA3\x75\xA8\x2D\xA5\x21\x2B\xF5\x51\x09\x87\x22\x2E\xD6\x07\xF4\xA4\x8F\xFB\x09\x1A\xF8\x93\x79\xE4\x4F\xA6\xA1\x3F\xC1\x63\x7F\xD2\x06\xFF\xA4\x8E\x3E\xB7\xEE\x6D\xA6\x5A\xB0\x68\xD2\xCD\x57\x23\x1E\xC3\x38\xCF\x94\xB6\x34\xAA\x9A\x18\x54\xA5\xC8\x1B\x75\x9A\xBC\x5D\xAD\xE0\x1B\x0A\x72\xB5\x5B\x30\x51\x29\xB3\x36\x9D\x30\x6B\x56\xE8\x36\xDD\x65\xB2\x28\x08\x34\x0B\x04\x01\x64\x81\x40\x4F\x59\x01\x94\xB2\xAA\xDE\xA5\xEB\x2A\x6C\x64\xEE\x75\x88\x09\x1E\x5C\x79\xBB\xEC\xBE\x52\x88\x4A\x7D\xE5\x74\x5D\xF5\x96\xB8\xD7\x6C\x64\xEE\x41\x78\x5F\x22\x07\xE1\xFD\x45\xFD\x97\x20\x91\x27\xE3\x55\x22\x35\xCD\x6A\xDA\xA8\xBA\xCB\xA9\x81\x11\x68\x92\xA1\xC2\x49\x4A\x2F\x55\xAB\x92\xA5\xEA\x66\x20\xB3\x28\x3C\x15\x88\xB4\xEE\xA9\xB6\x37\xCB\x8F\x10\xC4\x8B\x35\xD8\x11\x78\x3C\x10\x01\xE2\x9A\x47\xDD\x4E\x09\x0A\x23\x56\xBD\xAB\x10\xF0\xD9\xA0\x81\xD6\xC3\xA5\x89\xC4\xE1\x31\xFE\x6E\x00\xB1\xC7\x9B\x98\xE2\x13\x05\x10\x80\x35\x55\xA9\x33\x60\x64\x0D\x47\x33\xB6\x84\x01\x18\x5D\x87\xDF\x1D\xF3\xC8\xC3\x27\xE4\x9B\xE4\x28\xAD\x63\xEB\x6F\xEA\xD9\x66\xB9\x22\x34\xAC\x8A\x19\x99\xF2\xA2\x8F\x26\x1E\x5B\x2C\x20\x08\x12\x41\x5B\x0F\x6F\x20\xCA\x8A\xB8\xD0\x45\x5A\x13\x97\x99\xD6\xD5\xA3\xAE\x48\x3D\x53\xEA\x20\x39\x82\x81\x81\xBF\xB3\x63\x43\x11\x2B\x0F\x4D\xA4\x03\x0C\x01\x6A\x74\x9B\x3B\xB3\xC7\x48\x20\x28\x52\x25\xA0\x1E\xAC\xB5\x48\x7A\x58\x82\x83\x7D\xC7\x76\x4B\x14\x5B\x14\x6D\x40\xEE\x03\xF6\x5B\xEA\xEE\x3A\x51\xF6\x57\xE1\xED\x97\x5E\x84\x2F\x45\x74\x61\x6F\xA6\xC1\xAC\x36\x2B\xD4\xF6\x72\x47\x47\x61\x07\x59\x5C\x11\x05\x80\xF8\xA0\x8C\xDF\x00\xAE\xBB\x18\x92\xA5\xC0\x64\xEB\xFC\x8A\x30\x52\xDA\xFE\x06\x98\xE9\x1B\x24\x01\x6B\xE4\x34\xBF\x27\xE4\x5B\xF3\x74\x5E\x02\x10\x41\x34\xCB\x6F\x91\x47\xB0\xD8\x43\x8A\x33\xDE\x22\xC4\x57\x89\x52\xC7\x15\xFB\x2D\x2E\x4D\xC5\xD0\x6E\x5A\xD9\x2A\x91\xAE\xDA\x04\xE2\x35\x5A\x4D\xBE\x6C\xD1\x49\xA9\xCA\x56\xCD\xFC\x19\x5A\xA2\x16\x53\x0F\xE5\x34\xF1\x93\xF8\x3E\x89\x72\x95\x57\x4C\x3D\x18\x22\xBA\x51\xD9\xE4\x13\xFA\xEB\x85\x34\x52\xD0\x40\xB0\x76\x68\x30\xF8\x7E\x8C\x61\x40\xF8\xBE\x94\x6A\x7B\xDE\xAA\xD8\xBF\x44\x95\xC6\x80\xB5\x41\x82\xC8\xE3\xCC\xBC\x4B\x76\x3A\x96\xF1\xE5\x50\x95\x13\xBD\x9E\x9D\xB5\x80\xD6\x31\x80\xF0\xD6\x91\xD4\x60\x07\xC8\xA8\xE9\xD2\x20\x8B\x38\xA9\x99\xA4\x01\xD6\x03\x39\x3A\x3E\xAA\xF5\x62\xD1\xA4\xD7\x8B\x45\xAB\xB6\x6E\x7F\xD4\xEB\xC5\xA2\x51\xC1\x11\x93\xA4\xC2\x55\x31\x76\x3D\x7F\xAB\xF3\xB1\x00\xB1\xF7\x03\x52\xA8\xD0\x4F\x96\x54\xB0\x94\x71\x2A\xD6\x9A\x4F\x76\x54\x4A\xF2\xD8\xB7\xA3\xEC\xA2\xA4\x7A\x98\x32\xA1\xF8\x38\x8C\xAC\x18\x45\xF8\x84\x71\x91\xBE\xD5\xA5\xFF\x06\x10\x25\xFB\x5F\x9E\x73\x7A\xF8\x94\x26\x84\x7A\xF9\x2F\xFF\x50\xC7\x50\x80\xC8\xDD\x41\xB0\x60\x3D\x05\x22\x3D\x02\x83\x30\x02\xC2\xA4\x11\x11\x60\xF2\xEC\xCD\xA0\xE1\xD1\xA4\x84\x00\x11\x94\x16\x5A\x35\x4E\x0A\xCC\x0C\x01\x1E\x9D\x61\xBA\x20\x5C\x9A\x7C\x3D\x9D\x43\x03\x2F\xAA\x2E\x88\x3A\x50\x77\x2A\x0B\x7E\x52\x4A\xD5\x32\xAC\x0C\xAD\x53\xAC\xD2\x5C\xE6\x58\x15\x99\x25\x59\xB9\xB1\x62\x2A\xE6\x55\x49\x1A\x09\x20\x17\x19\x32\xAC\x9A\x62\x94\x1E\xCA\xCC\x6C\xA0\x87\x82\x80\x26\x00\x45\x36\xFF\x19\xFA\x64\xF9\xED\x8E\x24\xC7\x0B\x7D\x52\x30\x2A\xD0\x1C\x22\x80\x95\x68\xE0\x55\x4D\xA3\x83\x41\xA9\x2A\x88\x6E\x01\xD3\xBC\x65\x13\x0C\xB2\x86\x8C\x51\xEB\x7E\xD4\x0F\x87\x68\x9B\x93\x0A\x98\xFB\x68\x19\x23\xE2\x89\x0C\xF1\x00\x8A\xD8\x4C\x09\x8A\xB3\x34\xC9\xB0\x97\x26\xDF\x2F\x65\x18\xC4\x41\xC6\x68\x8E\xBA\x68\xFD\xE4\xA3\x1E\x06\x51\x34\x10\xC8\x52\xC3\xAA\xD9\xC2\xFD\x2D\xAC\x15\x75\xE5\x9F\x82\x60\x0A\x20\xBB\xCB\x11\xC1\xAC\x11\xEC\x98\x7D\x67\x87\x90\xA3\x1D\x49\xBE\xC3\x18\x20\xD9\x2A\xC4\xD5\x66\x1E\xE2\x1A\x72\x11\xE2\xAA\x24\x95\xCB\xEA\x12\x88\x23\xAE\x03\x85\xB2\x0F\x82\x1A\x89\x96\x47\xDF\x20\x50\xA5\x0D\x04\xE2\x1A\x81\x9D\x98\x56\x3A\x40\x7F\x61\xBF\xE5\xAE\xC7\xB2\x87\xC3\x8B\xA4\xF2\xF5\x08\xE6\x37\x97\x9A\xF3\x7D\x0A\xD1\xBF\xDF\x7E\xFD\x7B\xD0\x83\x74\xD5\x4F\x67\xE0\x79\xFE\x09\x79\x69\x4E\xB0\x77\x1F\x12\x9A\x4B\x35\xE7\xC4\x87\x53\x65\xB2\x33\x7F\x06\x4D\xB0\xD7\x63\x56\xB3\x0A\xA8\x47\xAC\xE2\x4C\xBE\x5A\x45\xD5\x7F\x3D\xD2\x11\x5C\x4A\xBF\x39\x03\x71\x49\x1D\x59\xBA\x7D\xB4\x1A\xCE\x14\x84\xFC\x9C\x1F\x34\x03\x16\x9D\x39\x1F\xF1\x92\xC4\x89\xC4\xE0\xD7\x0E\xB5\x88\x31\xBD\x35\x9C\xC4\x98\x35\xC0\xDC\x24\x9A\x2B\xA5\xB9\xDB\x67\x9E\xE0\x74\xB6\x4E\xF1\xC4\xB7\x12\x69\x66\x0A\xEC\x5A\x18\x5F\xBE\x40\xCE\x87\x2E\x56\x5B\xC0\x83\xDC\xC4\x5A\x24\xD4\xDC\x45\x9B\xD9\xCB\xDD\x04\x5B\xD8\xC1\x7E\xAB\xEE\x09\x5C\x54\x82\x55\x0D\xC9\xF4\xA6\x48\xF3\xEC\xE0\xDD\x22\xFF\x5B\x2D\xD2\xBC\xB1\x03\xF1\x9F\x2B\xA5\x98\x74\x9F\x27\x38\x21\xEE\x33\x45\xA0\xE7\xA1\xAC\x70\x35\x0F\x9F\x28\x26\x31\x8A\xBA\x64\x7B\xBE\xF6\xB3\x5E\x11\xE7\xF4\xDE\x41\x86\x9C\xC5\xC7\x87\xD9\x71\x9E\x48\xE8\x2F\xE3\x5C\x33\x16\x13\xCF\x59\xAA\xF5\x1A\x6C\x39\x53\xCD\x38\xB9\x5B\x24\xF8\x79\xC7\xC5\x4F\x8E\x29\x22\xC6\xE7\x75\xCB\x83\x47\x8B\xE8\x15\x82\x7E\x93\xCC\xD9\x6A\xC2\xB3\xCA\x7D\x12\x06\xCA\xB5\x1E\x59\x42\xA8\x74\x87\x44\x84\xB3\xEC\x25\xBB\x2B\xDA\xE7\x97\x46\xBF\x7A\x52\xFF\xF9\xF4\xD5\xD7\xCB\x17\xC5\xBF\x4D\x8B\xAA\x9F\x81\xC0\x6F\xCF\x04\xE1\x18\x50\x93\xE2\xEF\xC3\xC5\xB0\xFF\xD5\x2E\xE4\xA2\x06\xBA\x4D\x92\x48\xC1\x0C\xE3\x0C\x13\x1A\x26\x31\x93\xC2\x0B\xE3\xC2\x51\x22\x4C\xF1\x1C\x02\x2D\x6A\x8C\x05\x79\x5F\xAC\x6D\x20\xCE\x23\x74\xD8\x35\x30\xAF\x43\xFA\x99\x22\x8A\xAF\xAE\x3E\xE6\xEC\xF6\x97\x1A\x4F\x9B\xB9\x5C\xAE\xC6\xED\x4A\xB3\x2A\xE5\x07\xC8\xA2\x5F\xF4\xD8\x95\x18\x4F\xB5\x4A\xAF\x2F\xE4\xE1\x33\x46\xC4\xB7\x77\xED\xC8\xAA\x1F\x93\x66\x07\xB6\xBF\x8C\x1F\x49\xB2\xBF\xBA\x7A\x77\x4C\xE9\xC3\x4D\x84\xF6\x59\xFB\x47\x0D\xDA\x64\xAF\x39\xB7\xD0\x69\x01\xF3\xD8\x95\xFF\xB2\x7E\x0F\xA1\x8F\x1F\xAE\x41\xD6\x56\x3F\x5D\x4C\xC8\xFA\x86\xA2\x75\x88\xD3\xC7\xC9\x57\x23\x7C\x51\x80\x1E\xC8\x6A\xC4\x11\x62\xFF\x23\xC1\xBB\xF0\x74\xED\xFB\x38\xF2\x6E\x48\x12\xD3\xEB\x38\x78\xCD\x57\x7E\xCA\xB9\xBB\xE5\xF1\x60\x2D\x3A\x09\xA9\x90\x6B\xC6\x25\xA9\x24\x1B\x2C\x91\x40\x59\xFB\x48\x0B\x6F\x66\x9F\x85\xF9\x9F\x30\x0E\x7A\xB8\xF3\x52\x66\x3B\x1F\x83\xB5\xE7\xCC\x37\xFC\xFB\x42\xE4\xEA\xEA\xBA\x78\x38\xFB\x3D\xCE\x68\x95\x1C\x3A\x4C\x0F\x56\x2A\x62\x4E\x6C\x43\x6C\x2A\x18\x57\xC1\xFA\xE8\x25\xB8\x7D\x83\xF7\xA3\xFA\xF3\xEB\xE5\x0B\x25\xDE\x7F\x14\xFF\xF0\xE6\xB6\x5E\x5D\x24\x03\x39\x7E\xC2\x7B\x7C\x4A\xAF\xAE\xFE\x44\xD1\x37\x4C\x5E\xB2\xB6\x1B\x82\xF6\xAF\xAE\xAE\x7E\xF0\x36\x51\x10\x57\x6C\x40\x2E\xF5\xE4\xDA\x60\x82\xBD\x49\x89\x05\x76\x80\xEF\x72\xCC\xCE\xCC\xF2\x0E\x05\x22\x0B\x2D\xA1\xBF\x79\x59\xC1\xD2\xA5\xBA\x9D\xF1\x87\xC8\xC3\x69\x4C\xFF\xBF\x5F\x9E\xD9\x11\xDA\xFB\x77\xF1\x8A\x37\x88\x56\x69\xA4\x10\x5D\x08\x73\xFE\x53\x2B\x62\x9B\xAE\x9F\x69\x31\x95\xAB\x7D\x79\x56\xFB\x4D\x55\x42\x8F\x8B\x1E\xE4\x78\x7C\x14\x54\x8A\xFF\x87\xF4\x3A\xA2\x72\x9A\xA8\xCB\x0C\xB5\xAD\x23\x37\xA3\xCE\xFF\x9B\xE3\x0C\x30\x58\x6F\xA5\x5D\xE8\xA9\x5A\xBF\x4F\x52\x40\xEB\x51\x48\x0F\x30\x28\x97\xAA\x97\x11\x94\xAE\x3D\xF5\x7D\xFD\x40\xF1\x27\x14\xEF\xB1\x58\x6E\xD6\x7F\xF4\x1E\xA1\x0E\x64\x55\xC1\xED\x5D\xDD\x4D\x5B\x7D\xCC\x4E\xAC\x4B\xBA\xA8\x00\xF5\x57\x65\x95\x71\x54\x0A\xEC\xF1\xF3\xCF\x30\xA0\x75\xFD\xC3\x5A\x3E\xA4\xBD\xE4\x69\xA7\xA6\x4A\x67\xE9\xE1\x64\xC1\x37\x28\xA5\x39\xC1\x7A\x34\xF4\x35\xA9\x13\x41\x55\x8B\xA6\x93\xFB\xD8\xB7\x31\x32\x66\xAA\xD7\x78\x1F\xC6\x95\xF7\x75\xAD\x15\xFE\x1D\xFB\xC8\x3F\xE0\xE0\x53\x1E\xE3\xC2\x8B\x3F\xE7\xBB\x5D\x78\x92\xA3\xB0\x59\x93\x07\x1B\x9B\xEA\xB6\xAF\x8D\x27\x13\x62\xAA\x38\x9D\x42\x60\xE8\x10\xBF\xF2\xD5\xEA\xF2\x32\xEA\x90\xF2\xF1\xD5\x21\x71\x12\xD8\x2F\xE3\xD7\x0A\x6D\x61\xF3\x23\x8C\x69\x59\x02\x31\x67\x79\x55\xDD\x0F\x5E\x48\xFA\x0A\xBA\xB8\xBC\xFD\xEE\x7F\x37\x76\x22\x05\xF0\xB2\x7E\x1B\x99\x31\xD9\xB3\x3B\xC8\xE1\x4E\xE6\xBB\xD2\xAD\xF8\x1D\x2E\x9F\x9F\x4B\x49\x37\xC1\xBB\x18\x65\xC0\x65\xEA\xED\xC2\xB7\x7F\x3C\xDF\xCD\x70\x69\xF1\x14\xFB\x3D\xCC\xB0\xC7\x9E\x8B\x49\xEE\x53\x8F\x1A\x3F\x17\x4F\xF3\x34\x32\x4B\x57\x76\xD2\x74\xE6\xBD\x4A\xA1\xF5\x87\x5A\xB9\xF7\x1C\x02\x3E\x31\xF4\x2B\x3F\x4D\xDF\xED\x4B\x7A\x5B\x32\xDA\x92\xD1\x96\x8C\xB6\x64\x34\x51\x32\x12\x47\xA6\xE5\xFD\xCD\x2D\x29\x6D\x49\x69\x4B\x4A\x5B\x52\x9A\x37\x29\x6D\x11\xBD\x45\xF4\xDC\x11\x6D\xF9\xE2\x93\xB6\x1F\x15\x04\x7C\x19\xE2\x13\xF6\x73\x92\x85\xF7\xFA\x22\x87\x65\x11\xC9\xA9\xB7\xD2\xE7\x26\x8C\x03\xF3\x8A\x4A\x3F\x01\x3B\xAF\x1D\xB9\x53\x1D\x71\x09\xDC\x89\xE9\x92\x55\xC9\x56\x8A\x6C\x89\x6B\xC1\xC4\xB5\x0B\xE3\xC0\x2C\x46\xFB\xBC\x3F\x62\x94\x8F\xB5\xE4\xDB\x2B\x7B\x39\xF4\x51\xF9\xB4\x24\x55\x73\x06\x6F\xEB\x68\xDA\xED\x7A\x57\xB8\x58\xBB\x5C\x6D\xF8\xD6\xA9\xE5\x53\x1E\xF7\xD8\xB1\x13\xFA\xFD\xFB\xCB\xCD\x0B\x5B\xDF\x29\x78\xFE\x81\x68\x18\xFF\xD2\x97\x6B\x9B\xC4\x00\x67\xEF\xC5\x73\xEF\x97\xE7\xBB\xDD\x6E\x07\xEF\xFF\x77\x23\x9F\xC7\x98\x26\xFE\x01\x91\x91\xA5\x1C\x65\x4C\x5A\xF9\x3A\x79\x53\x2B\x95\x6D\x0A\xDE\xA6\xE0\x6D\x0A\x1E\x6D\x0A\xEE\x9D\x36\x26\xD8\x2F\x1D\x29\x2F\x6C\xEB\x87\x5B\xC6\xD8\x32\xC6\xB6\x7E\x38\xCD\xFA\xE1\xC8\xA5\x57\xE7\x87\x89\x41\xFC\x5C\x96\x5E\x3A\x52\x1F\x77\x09\x66\x20\xF3\x11\x9F\x0C\x3B\x3C\x33\x0C\x33\xB3\x2B\xFD\x95\xEA\x3A\xD0\x85\xFB\x6A\x3F\xCC\xCD\xD4\xC7\xB2\x5E\x23\x08\x13\x99\x70\x98\xDA\xA4\x9E\xA7\x24\x6B\xB5\x5D\x3F\x8F\x70\xB3\xE6\x80\x61\xFF\x83\x55\x80\xD2\x32\x47\xEF\xF8\x6D\xA3\x35\x95\x13\xD8\xF8\x1A\x17\x07\xDC\x15\x6F\x7D\x9F\x40\x25\xFD\x31\xC9\xE8\x7F\xC2\x2C\xAC\xBB\xF1\x17\x39\x9E\x6A\x3D\x6D\x3F\x81\x17\xB7\x80\xE3\xE5\xF3\xB3\xB6\x9F\xAA\x9E\x9E\xBF\xED\xA4\xF5\xFC\xD2\xAC\xD0\x37\xDA\xE3\x74\x2A\x19\x46\x4C\x4B\xD3\x9B\xC9\xFA\xB6\xCC\xFC\xE2\xD8\x5F\x6D\x99\x5F\x1E\x73\x7A\x9C\x41\x16\xE3\x9A\xE8\xF4\x7A\xAB\xEF\x18\x2C\x10\xBF\x8E\x2B\xFA\x0B\xD8\xC6\xE5\xBD\xA1\x65\x0D\xD6\x75\xA9\x7E\x5E\xE9\xBA\x6F\xB4\xCC\x31\x83\x59\xDF\xC6\xD1\x5E\xDE\xE1\x7F\x81\xE2\x34\x65\xB2\xB4\x82\xD0\xEB\x35\xE8\x5E\x7C\x84\x59\xC8\xFC\xC2\xF1\x50\xCA\xCD\xFC\x76\x83\xC2\x68\x6C\x1E\xD5\x3B\xBF\x9F\xC3\x63\x1A\x85\xBB\x87\xB1\xE9\xFF\x9E\xF1\xD7\xE2\x8B\xE9\x4F\x75\x2A\xE0\x1D\xFD\x31\x59\xBE\x63\xD7\xBC\xCE\xC0\xD0\xF2\xDE\x74\xD1\xF4\x7B\x5C\xDF\x45\xD7\x1A\x52\x86\xB0\x1C\x2E\xDB\x5B\xEC\x13\x6C\xD8\xFE\xEC\x45\x1D\xBE\x24\xA0\x2F\x29\xE8\x1A\x81\xA1\xA1\xDF\xFE\xE2\xF6\x68\x91\x69\x7F\x48\xE9\xCF\x67\x40\xE1\x3F\x06\xD3\xB7\x09\x2D\xCB\xD6\x89\x18\xDC\x84\x71\x98\x1D\x34\x12\x93\xF0\x6A\xB9\x03\xA0\x17\x0B\xA1\x68\x74\x4E\x74\x72\x5C\xFE\x1E\xAB\x71\xD9\x91\x50\xC7\x04\xEB\x4E\xDD\x79\x12\xED\xA9\xF9\x9B\x24\xF6\x91\x0D\xBF\xF6\xF0\xAA\xC7\x47\x44\x32\x5C\xDE\xE0\x35\x8C\xB7\x9E\x0D\x7B\xD9\xC5\x90\x61\xBA\xD0\x92\x1E\x3C\xFA\x5A\x52\x2E\xA9\xF4\xF9\x05\x32\x60\x7F\xC7\x90\x48\x96\xCF\x6D\x9F\xAB\xAF\x1D\x49\xF7\xF1\x75\x1B\xC3\x96\xF9\xDA\x35\x6E\x9C\xC8\x74\xAA\x11\x5C\x29\x77\x8E\x98\x4E\x1A\x8F\x1A\x2F\x9D\x38\x9B\xA3\xA5\x83\x45\x5A\x62\xA5\x9D\x12\x18\x29\xDD\x2C\x38\x66\x9C\x74\xE2\x3C\x42\x94\x8C\x5F\x64\x8E\x71\xC5\xD0\x78\xAC\x67\x60\xDA\x6C\x25\xB3\x0B\x85\x26\xBA\xAF\xC8\xF3\x50\x10\xB0\xEF\x0A\x78\x3E\x4A\x91\x1F\xD2\x07\xC7\x0B\xA0\x46\x30\xA6\xFD\xCB\x88\x6A\xCD\x23\xD5\x77\xDD\xD7\x75\x81\xEE\x53\x6D\xB9\x38\xB0\x1A\xB0\xFA\x2B\x53\xB7\x1D\x04\x06\xAB\xD5\x4E\x0F\x1D\x46\x22\x82\x52\x1F\x52\x1A\x1E\xF9\xC7\xBD\x7A\x52\xB8\x89\x10\xA5\x38\xEE\x4F\xA0\xC0\xCE\x29\xDB\xC0\xFC\x17\x32\x6C\xFE\xD8\xE9\x54\x8E\xFE\x09\xDF\xE5\x21\xC1\x01\xBF\x83\xF1\x26\x21\xEC\x1A\xC6\xE9\xBF\xC9\x26\xD4\xEE\x7A\x56\x29\x95\xF8\x92\x94\xEB\x36\x2D\x0F\x5F\x3D\x9E\x0D\x0C\xFC\x3E\xE1\x7B\x4C\x32\x3C\x1D\x5B\xF1\xC8\xD2\x12\x77\xB3\xD9\x83\x61\x3B\x88\xB7\x1D\xC4\x5B\xF2\x20\x9E\xE5\xB5\xBF\x8E\x97\x76\x6C\xFE\xBB\xF9\xEF\x6A\xFD\x77\x4B\xBC\x9B\xE3\x9E\x8F\xE3\xAA\x97\xB3\x2D\xF2\x74\x06\x7C\x59\x6D\x19\x39\xBA\x4D\x43\x8B\xCB\x68\x4B\x35\xCB\x08\x27\xBA\x6C\x96\x46\x21\xF5\x6E\xF3\xDD\x0E\x5B\xA8\x6A\xDF\x0D\x71\x90\xE4\x29\xF0\x15\x41\x33\x32\x3F\xB4\xFE\x13\x5A\x66\x47\x92\x98\x6E\xA6\xA9\x4D\xF3\x64\x73\x19\xBB\x5D\xDA\x1D\x46\x7A\x97\x6E\x69\xFB\xA8\x73\xD7\xCA\x52\x0E\x30\xAB\xAD\x4D\xC2\xAE\x8F\x5D\xAB\x95\xDE\x5E\x74\xAF\x4B\xEC\xC5\xDC\xD6\x71\x3E\x58\xD2\x6F\x5D\x45\x5C\xA9\xE3\xF6\x10\x7F\x15\x9E\xEB\x2A\xF7\xBC\xAE\xDB\x71\xBE\x9E\xDD\x6F\xBB\xCA\xB7\x26\xA7\x1D\x20\xFB\x72\x1E\xDB\x55\xE8\x85\xDC\xB5\x5B\x19\xB5\x9C\xDB\x76\x94\x73\x95\xEE\xDB\x5F\x87\x15\xB8\x71\x47\xE1\x85\x8D\xD1\xB7\x37\xD7\xEC\x7F\x55\xE7\x8F\x24\xD9\x8B\x1B\xD5\xE0\xE7\xAF\xFA\x9E\xD4\x1E\x83\x99\x2A\xFB\x0F\x4E\x0F\xD8\xF3\xD5\xC1\x6D\x1B\xBC\xAC\xC7\x9F\x09\xF9\x76\xF7\x25\x79\xC3\xDE\xFF\x94\xBE\x2F\xD6\x80\x45\xA1\xB5\x56\x6D\xA7\xBA\xA3\x81\x26\x11\x40\xB7\xCC\x04\x6C\x96\xFC\x84\xEE\xA4\x8A\xCD\x60\xBB\x06\x4F\xA6\x0A\x9C\x32\x32\x1C\x85\x98\xC1\x7B\x6D\x71\xD3\x5D\xEC\xCE\x17\x50\x35\xCC\x18\x9B\x92\x41\xFB\xA5\x52\x70\x3F\xA5\xF5\xBF\xD9\xD2\x36\x00\x28\xAF\x74\xB3\xE6\x67\x81\xB8\x78\xC3\x10\x00\x7B\xA1\x0B\xA3\xDE\x2A\xD4\xD7\x9C\xDD\xD2\x4C\x0F\x06\xE2\xEB\x02\x03\x68\x34\xEF\x09\x0C\x77\x9C\x5E\x37\x14\xB5\xF9\x91\xDF\x7E\xEB\xD0\x12\x2E\x65\xBE\x82\xC6\x49\x9A\xA7\xE2\xC5\x31\x36\x37\xB4\xF6\x05\xF7\x21\x7F\xF6\xB8\x1D\xEF\xF3\x44\x9B\x6B\x0E\x72\xCD\x6D\x20\xD6\x33\x10\x93\x7F\x3D\x67\x1B\xA2\x61\x43\x24\xDA\x64\xE2\x6F\x8A\x6C\x43\x35\xDE\x50\x2D\x6E\x93\xD6\x6B\xF7\x3F\xA7\x88\x64\xF8\x33\xA6\x5F\x5E\x16\x43\xFC\x8A\x9D\xF0\xC6\x84\x0A\xE7\xE2\x2D\x1F\xF8\xEB\x4D\xC2\xD0\xD1\x27\x18\x51\xEC\x85\x71\x80\x4F\xCA\x31\x78\xA6\xDD\x75\x10\x7C\x49\xFE\x37\xC7\xB9\xF9\x51\xC9\x5A\x74\xEB\x8F\xD6\xC3\x28\xF6\xD5\x5F\x10\xE0\x53\x1E\x33\x66\x1F\xE2\xD7\x0F\x9D\x9F\x00\x8D\xA2\xF9\xC2\x49\xEC\x73\x92\x72\xF8\x98\xCC\x2B\x34\xE4\x52\x9F\xF2\x98\x45\x21\xC0\x56\x0C\xFD\x51\x5D\xA8\x2B\xC3\xB1\xED\xDC\x8B\xFF\xF4\xE3\x33\x82\x90\xE3\xAF\xD2\x88\x42\xE1\x0C\x53\x46\x5A\x22\xFA\xE9\xCF\x3F\x12\xFF\x1B\x26\x4D\x5C\x1C\x92\xE4\x5B\x76\x75\xF5\x4F\x4C\xDF\xDE\x5C\x33\x29\x58\x2F\xD6\xFF\xBF\x93\xE4\x9B\xF8\xC2\x88\x33\x65\xC7\xD5\xA2\xCF\x18\x11\xFF\x70\x73\x73\x23\x1B\x8D\xB5\x7E\x44\x04\x1D\x33\x46\x8D\x3B\xA8\x60\x84\xDF\xE3\x28\x8C\x71\xC0\x11\xFF\x48\x92\xF4\xE5\x0E\x45\x19\xE6\x56\x51\xFF\x7C\x65\x25\x7E\x31\x25\xF1\xFE\x21\x38\xBD\x54\xDD\x5D\x77\x5A\xA1\xDC\x5F\x7D\x9B\x54\x8C\x6A\x65\x6A\xAE\x01\x68\x0F\xA6\xB9\x44\xE9\xB1\xE2\x3C\x97\x43\x58\xDF\x69\x95\x32\xC9\x97\x89\x32\x49\x79\xB6\x7A\x92\x44\xD2\x4E\x7B\x81\x3C\xE2\x2A\xD4\x9C\x69\xC4\x41\xA6\x19\xB2\x88\x83\x14\x83\x93\x48\x37\xEB\x4F\x99\x43\x3A\x49\x32\x67\x0A\xE9\xE6\x0C\xCE\x19\xE4\xCB\xA8\xB5\x48\x21\xE4\x54\xA5\x48\x27\xDA\x33\x05\x6B\x37\x99\xA6\x0A\xD6\x6E\x52\xF4\x0B\xD6\xDE\xD6\x1F\x3D\x58\xFB\x4A\x32\x79\xB0\xF6\x76\x06\x53\xB0\x4E\x6E\x97\x61\x0F\xCB\x55\x06\x19\xB5\x06\x69\xB4\x18\xBD\x04\xE9\x42\x7A\xF6\xFC\xB1\xE0\x5C\xDF\x49\x88\xA1\xD9\x63\xE1\x99\xBE\xA7\x20\x33\xE6\x8E\x71\xE6\xF9\xA9\xAD\x32\x46\xE6\xF8\x32\xC2\x3A\x88\x92\xF4\x46\xAD\x3D\xFA\xD2\x9E\xF4\xE9\xA5\xB7\x50\xCD\xFA\xEA\x94\x5C\x8E\xF8\xE8\x1F\xC8\xF4\xD6\xAD\xAE\xAE\xC5\xBB\xF0\xC4\x6E\x65\xF1\x6E\x48\x12\xD3\xEB\x38\x78\xCD\x0F\x37\x97\xA7\xF2\xD8\x66\x92\xBE\x7C\xD8\x21\x51\x0E\x93\x73\x9A\x19\x64\x80\x13\x8C\x38\x85\x0C\x71\x12\xD7\x39\x64\x0C\xEB\x8F\x33\x89\x8C\x20\xC9\x34\xB3\xC8\x18\xCE\xE0\xFA\xB8\xF8\x65\x84\x05\x27\x50\xDE\x71\x8A\xBD\x9E\xA4\xE7\x4F\xD8\x4E\x93\xFC\xD0\x7C\xED\x56\xCD\x0D\x49\xD7\xAE\xA6\x5D\x38\x5B\x2F\x5B\xEE\xF7\x77\x80\xA9\x73\xF5\xB8\xE5\xFE\x08\xA6\x9F\x30\x53\xAF\xA0\xDC\x1F\xC1\x11\x9C\xF3\xF4\x08\xCB\x7A\xF2\x43\xC1\x44\x95\x75\xD7\x35\x93\x5E\x39\xB1\xF3\xFA\x58\xE7\x9C\xD8\x63\xED\x65\x89\x9C\xB8\x9A\x25\xD4\xFE\x0E\x30\x49\x4E\x9C\x6C\x01\x75\x04\xD3\x8F\x9D\x13\xD7\xB5\x7C\x3A\x82\x23\x0C\x58\x02\x19\x64\x95\x51\x96\x40\x46\x58\x3C\x85\x94\x18\xBB\x9C\xEE\xB8\x3C\x35\x30\x4B\x4F\x54\xB8\x76\x5F\xE5\x5A\x36\x47\xAF\xA5\x6C\x5D\x6E\x91\xBA\xBF\x73\x0C\x49\xD0\xCB\xD6\xAC\xAB\x5A\xA1\x1E\xEE\x04\x23\x67\xE7\x79\xD6\xA7\xAF\x63\x14\x3D\xFC\x85\x39\x69\xD7\x11\x18\xEB\x0C\x68\x2F\xE6\x93\x9E\xAD\xEC\x25\x91\x4B\x60\xA8\x84\x2A\x4C\xFE\xB5\x81\x8F\x21\xF6\x31\xF4\xBE\x80\x19\xDC\x8C\xA9\xE9\xAF\x52\x5D\x7E\x55\x77\x99\xB8\x45\xC3\xA8\x8E\xA3\x0E\xB2\xB3\x29\x2E\x84\x19\x84\x1F\x36\xAD\xD0\xB5\x17\xFE\xE5\x37\x1D\x7C\x14\x45\x5E\x12\xFB\xE0\x3B\x29\xCF\xEF\x93\x08\xD1\x30\xC2\xA5\xC2\x65\x3C\x55\x7F\x7E\xBD\x7C\xFE\xF5\xF2\x45\xC1\x5E\x88\xB5\x42\x18\xE0\x25\xF5\x9A\x8F\x97\x92\xE4\xF4\x20\xBC\xC3\xC2\x3F\x57\xDF\x41\xFE\xAB\xAB\xFF\xE7\x3D\x7F\x22\x0E\x11\xBB\xE4\xE0\xC9\x93\xEA\xAB\xFC\x95\x28\x4E\x2F\x48\xAD\x45\xD6\x66\x6C\x87\xDD\xDE\x30\x83\x42\xBF\x9C\x91\xF1\xDD\x64\x3D\x23\xE3\x5F\x9E\x91\xF1\xDD\x64\x1D\xCD\xF8\x02\xE2\x5B\x56\x08\x08\xF4\xDE\xDE\x5C\x2B\xCC\x9A\x6B\x4B\x9C\x3A\xB6\x1F\xBA\xE7\x04\x78\x66\x16\x08\xF4\x9E\x5E\x04\xA2\xFC\x53\x3A\x6D\xE6\x50\xE9\x3D\xD5\x26\xA2\x96\x49\xC7\x6D\x64\x1F\x8B\xB6\xEB\x2F\x05\x1E\x8B\xA5\xE5\xB7\x60\xF8\x41\x2E\x14\x46\x39\xC1\xEA\x3B\x30\x8E\xAF\x16\x82\xEF\xA0\xAF\xFB\xB5\xCD\x21\x9F\x4D\x58\xB5\x32\xCE\x77\xE8\xAF\x51\x8B\xB3\xF3\x22\xE1\xA5\xC5\xF7\x45\xD7\xF7\xDA\x94\x29\xDF\x21\x63\x44\x12\xC2\xED\x9A\x10\xF4\xF0\xB2\x41\xFF\x72\x20\x18\x05\x4F\x5F\x5D\x5D\x11\x9C\xF1\xCF\x2B\x89\x4F\x69\x46\x92\xCE\x97\xE3\xB8\x50\x30\x4C\xB2\xC6\xAE\xDA\x8B\xCD\xCE\x5A\xC1\xEF\x45\x77\xE9\xEE\xA8\x76\x57\xC2\xD2\x3D\x3E\x03\xA4\x32\x98\xB2\x2B\x45\xD5\xF5\x7E\xBC\xB7\xDC\xFB\x06\x6F\x1A\xAA\xFD\xC4\xB0\x53\x3F\xC2\x24\x48\xD3\x12\x43\x02\xA6\xF9\x7B\x4B\xAE\x82\xB7\x89\x0C\xE7\x8C\x89\x85\x77\x95\x93\xAD\x0A\x71\x62\x77\x75\x9D\x60\x1D\x66\x75\xAD\x48\xFE\xCE\xA2\xB9\x88\x90\xEA\x18\xA1\x87\x48\x1C\x88\xAD\x95\x4A\x09\xDE\x8E\x3E\x64\x0C\x5B\x3E\x6E\xB8\x52\x33\x74\xFC\x40\xE2\x4A\xB5\x90\xD2\xE6\x4A\x65\x14\x8A\xED\x77\xC7\x94\x3E\x94\xDF\x30\x6D\xAB\xEC\x15\xF2\x86\x6B\xFD\x27\x71\x5C\xFB\x77\x5F\xA6\x61\xD9\xFB\x13\x2F\x93\x8B\xE3\xF8\x35\x97\x69\xE4\xB0\xDF\x7D\x2B\xBB\x9A\x2B\x53\xE3\xE5\xF8\x22\x8E\xE5\x53\x1B\x67\xAA\xA9\x74\xAB\xEF\x23\x54\x15\xBC\x85\xFB\x31\xEB\x69\x1C\xD0\xF6\xAF\xA1\x4C\xA3\xAF\x5A\xFC\x7C\xA6\x38\xED\x34\x07\xF5\x98\xAD\x3A\xCE\x22\xC0\x8C\xB9\x46\x29\xA1\x52\x72\x8D\x72\xAE\xB8\xEE\x10\x2D\x37\xDD\xC2\xA7\xDA\x45\xBE\xA2\xA7\x4F\x91\xB9\x98\xB0\xDA\x52\xCA\x62\x92\xAC\xDA\xE7\xD7\x60\x20\x30\x3D\x2C\x3A\x5A\xDA\x81\x2E\xE7\x33\x5C\x2B\xD0\x60\x91\x47\xE2\x25\xE3\x5C\x9D\x01\x97\x0F\xF4\x95\x4E\x1F\xBD\xDD\x5A\x0D\xD1\xFE\x84\xCA\x03\x99\x03\xA9\xC0\xDD\xFB\x9D\xBA\x14\x68\x71\xCF\x79\xBF\xA2\x9D\x3A\xCD\xB3\x80\x05\xF4\x33\xD3\x60\xA9\xF0\x3C\x33\x33\x35\x0B\xD7\xFA\x9A\x7F\x18\xD3\x57\x85\x12\x96\x63\x8A\xF5\x1F\xE0\xF5\xDF\x63\x51\x34\xD0\xB1\x5C\x2A\x3B\x1D\xD3\xCF\x98\xBE\x3B\x85\x19\x0D\xE3\xBD\x40\xCF\x44\xC5\x24\x4D\xDB\xA6\xF5\x28\xCC\x0D\x5B\x11\xF3\xAF\x08\x39\x7E\x15\x6B\x72\x31\x86\x7F\xF4\x6A\x4E\x11\xBB\x7E\xD3\x6A\x72\xD9\x66\x72\x25\xFB\x92\xDB\x7C\xBE\xD4\x22\xC7\x2A\x9C\xC9\x5D\xC6\x05\xBC\xA9\x45\xB8\x29\xDD\xC9\x6D\x59\x73\x62\x5F\x72\x14\x62\x39\x47\xEA\x2E\xE0\x5C\x5E\xE4\x28\xD9\x2C\x2E\xE4\xB4\x62\x3C\x97\x2B\xB9\x09\xB3\x02\x97\xEA\x2C\xE8\xEC\xAE\xE5\x26\xA1\xF6\x38\xCA\x8B\xFA\x0F\x31\xFE\x88\x32\x87\x1D\xD9\x79\x0B\x7B\x71\x39\xF2\x0C\xC4\x15\xFA\x0D\xDA\xE5\x3E\x17\x7D\x8F\xF8\xE8\xA7\x0F\xA2\xB8\xBF\x67\x8D\xA8\x9D\xCE\x8A\xC1\xDD\xF5\xF1\xD7\x19\x00\x4B\x2C\x2A\x92\xF0\xF8\xD1\xE3\xA5\x35\x98\x66\x13\x9D\xF7\xD8\x2F\x42\x53\xD0\x8C\x0F\xA8\x29\x86\x15\xC4\xB2\xC4\x08\x99\x30\x5F\x2F\x5F\x88\x69\xE2\x3B\x41\x29\xFB\x0E\x8E\x4E\xBD\x74\x97\x57\x86\x15\x1A\xA5\x51\xEC\xF3\xA4\x45\x33\xD7\x93\xFF\xC0\x60\x35\x6B\x8A\x30\x8A\x3A\xC1\x9D\xA3\xE9\x80\xA9\xF1\x2C\xD5\xE8\x36\xA9\x9E\xA5\x8A\x65\x7E\x3A\x73\x2D\x1C\x8B\x8A\xB3\xD4\x4D\xAF\x78\x29\xC1\xE5\xE6\xCB\xA7\x3C\xC6\x9F\x50\xBC\xC7\xC2\x54\x54\xB7\xFD\x81\x8B\xA4\x62\x2D\x93\x6A\xDC\x52\xB5\x00\x67\x94\x24\x0F\x8A\x6E\x05\x3F\xE1\x83\x62\x0A\xD3\xF2\x73\x62\xEA\x41\x8E\xB5\x0A\x79\x1E\x96\x6C\x9F\x60\x3E\xE1\x3D\x3E\xA5\x57\x57\x1F\xD9\x94\x4D\x11\xC5\x57\x57\x1F\xF3\xEC\xC0\xDB\xAB\x32\x88\xFF\x6A\xCE\x20\x40\xBD\xFE\x85\x1E\x6E\xF1\x9B\x24\xF6\x11\xE5\x65\x8C\xB8\xC0\xA8\xF7\x2A\x2B\xB6\x41\x62\xBC\x39\x20\xF2\x26\x42\x59\xF6\x3A\x0F\xA3\x00\x93\x02\xA3\x98\x30\xAE\x6F\x93\x7B\xF5\xDD\x82\x61\x8A\xBE\xC5\x3E\xC1\x3B\x71\xBD\xBB\x33\x3D\xE7\x02\x6D\x98\xA4\x10\xD6\x87\x74\xDE\x51\x78\x93\xC4\x14\x85\x71\x36\xEA\x10\xBC\x49\x8E\x69\x4E\xF1\xE7\xF0\x98\x46\xB8\x6D\x24\x7A\x3A\xA3\xCC\xF1\x3A\x08\x8A\xD0\xFA\x92\xC8\x24\x26\x60\xEB\xFA\x96\xC3\x64\xAA\xBA\xFB\xF7\x1F\xEC\x63\x91\x51\xB3\xF7\xC0\x7D\xE0\xC1\x8F\xF0\x4D\x12\x31\x83\x39\x0E\xBB\x46\x69\x70\x84\xC0\xB2\x4D\x19\x19\x06\x6B\xE8\x11\xA1\xB4\x0C\xB0\xB4\x46\xBB\x70\x53\x9E\xFD\x95\x0D\x9D\x41\xD6\x9A\x3C\xB5\xBB\xB3\xB7\xE5\x08\x3B\x0F\x9E\x2C\x3E\x00\x83\x3E\x82\xB7\xD9\x88\x4F\xEE\x78\xCE\xCC\xC7\x31\xE4\xDB\x84\x76\x5D\x67\x68\x27\x35\xB9\x91\x0C\xAC\xC6\x36\xC9\x88\x31\xDF\x4A\xB4\x6F\xB0\x7F\xC2\x29\x46\x14\xF2\x17\xE7\xB3\x0C\xA3\x94\x30\x23\x48\x31\x43\xB9\x33\x96\x94\xFA\xF8\xFD\x13\xD3\xBA\xD1\xAD\x9C\x1C\x41\x96\x73\x78\x56\x99\xD7\x7D\x3B\x3F\x0D\x8D\xED\xB7\x9D\xAA\xD9\x4A\x04\x1A\xD2\x30\x89\xB5\xD0\x9F\x3B\x82\x87\x8B\x31\x4B\x08\x8F\x24\xE6\x38\x31\x3C\x5C\x98\xC7\x11\xC4\xA3\xBA\x70\x8F\x28\x1E\xD9\x77\x17\x0A\x63\x89\xC5\x9F\x28\xFA\x86\x49\x79\xD0\xAB\xF8\x21\xEC\xB3\xC8\x15\x8D\xAF\x7E\x11\x79\x71\x71\x7F\xF0\x5F\x90\xE5\x86\xA9\xD5\xF9\x91\x7A\x74\x76\x13\x31\x02\x4F\xCF\x17\x64\xD8\xA8\x31\xB2\x2D\x21\xAF\x22\x3F\x77\x3B\x46\x3F\xBE\xA1\x5C\x5E\xD2\x69\xF7\x9A\x61\x23\xDD\x46\xAA\x07\x11\xDB\xED\x0D\xA3\x0C\x14\x74\x07\xC5\x12\x4C\x7B\xA6\xE2\xB7\xC9\x1F\x78\x47\x3F\x22\x82\x63\xFB\x36\xFB\xC0\x72\xA5\x03\x9F\x49\xEB\x91\x0E\x72\x88\xDB\xFC\x63\xAA\x34\xFC\x89\xB7\x03\x67\xE1\x90\x00\x4C\xE9\x3F\x98\xD0\xD0\x47\xD1\x6B\x44\xDA\x1E\xCF\x47\x5F\x79\x82\xB8\x0F\xF4\xB2\x16\x75\xC6\x77\xA7\x0E\xF6\xEB\x3B\xD8\x1D\x58\xBC\x4D\xDE\x24\x51\x84\xD2\x0C\x03\x6B\x51\x03\x78\xB8\x2D\x49\x5B\xB9\x0F\x1D\x59\x1B\x69\xA9\xDB\xEF\xF1\x70\x59\x47\x57\x7E\x84\xA7\x17\x3B\x83\xF3\x7E\x22\x71\xF6\x9C\x4E\x53\x9B\xF3\x08\xF3\xA4\xF6\x81\x5C\x47\xAC\x7A\xA2\x40\x0F\x25\x43\x3C\x05\x5F\xA5\x85\xB2\x87\x53\x79\xDF\x49\xD6\x0E\x4F\x39\x76\xBA\xAD\x93\xC3\xA7\x70\x7F\xA8\xE7\x99\x96\xC4\xA3\x65\x90\xFE\x84\x5D\x03\xAE\x8B\x78\x3D\xF3\x22\xCC\x62\x68\x20\x6B\x54\xCF\x3D\x7A\x35\x85\xFA\x86\xAC\x7D\x48\x3B\xFA\xBE\xBB\x7F\xF4\x9D\x9A\x6F\xC2\x38\x64\x77\x38\x8E\x19\x1C\x66\xA2\xAE\x81\xE1\x2A\x56\xCF\xA0\xD0\xC9\x0F\x0D\x08\x89\xE2\xB9\x07\x83\xA4\x8C\x7B\x20\xF0\xE3\x32\x7F\x60\x14\x84\xF1\xBE\x2E\xB0\x0D\x4F\xF1\xDD\x9F\xB4\x3B\x92\x97\x8E\xB5\xF6\xA4\xE1\xE8\xBB\x43\xA8\x7E\xFE\x8E\x5A\x43\xF6\x06\xF9\x34\xA9\xE7\x76\xBE\x7C\xD6\x6B\x2A\xFF\xED\x99\x76\x99\x7A\x79\xFC\x90\x75\xB9\x21\xE8\x88\x5B\xBC\x90\xE1\xD4\x6B\x3C\xF8\x98\x46\xC8\xC7\x7C\x9D\x27\x8B\x92\xEF\x5E\x8A\xE8\xE1\xA5\x24\xDC\x93\x5A\xBA\x27\xAF\x54\xC1\x05\xD8\x94\x5A\x4B\xA0\xBA\x46\x7A\x9F\x70\x16\xBD\xE9\xCE\x23\x2F\xAF\xED\x56\x2A\xA4\x46\xEF\xF7\x63\x1A\x5D\x5D\x7D\x4A\xF2\x38\xB8\xEC\x4B\xDB\x37\x7A\xE8\xE7\x34\x0A\xFD\x36\x17\xE5\x48\xCC\x47\x27\x8D\xA5\x56\x03\xFC\xFA\xC8\x0D\xE0\x3E\x35\xCC\x69\xF5\x5F\x56\x62\xF5\x55\xA7\xDA\x7E\x5F\xDE\x58\xAB\x06\xBA\xF7\xAD\x5B\x74\xE1\xB9\xF5\x0C\x12\xA8\x3C\x1D\x95\xB7\xC5\x03\xE5\x0D\x58\xC3\x9C\x9D\x7E\xFA\xEA\xDB\xD9\xA9\xA0\x57\xAA\xE7\xA0\x82\x54\xB0\x9F\x83\xC0\xCE\xEB\xC1\xE7\xA0\x8C\xF2\x40\xA3\xAF\x24\xB8\xEE\x32\x9C\x83\xB2\xE2\xCE\xD8\x39\xC8\xDB\x5E\x68\x9D\x83\x16\x8E\xB3\xDE\x4A\xAA\xE6\x3E\x07\x71\xCF\x58\xAD\xB6\xA3\xC0\x67\xA3\xDA\x75\x10\xDC\x24\x51\x80\x6B\x75\x40\x85\x8D\x37\x10\x9E\xA5\xCE\xFD\x26\xFE\x55\xA9\xE0\xBE\x00\x7B\x36\x2A\x55\x7C\xDE\xE3\xEF\xA2\x22\xB2\xBA\x7A\xED\xDC\x79\x56\x5D\x8B\xD2\xA3\xD4\x43\x6B\x51\xC6\xB5\x44\x58\x8B\xBC\xC3\x4A\x84\xB5\x68\x71\x3E\x3B\x27\xE7\x60\x4D\xC7\x82\x6B\x25\x0B\x66\x72\xD2\x2C\x5F\xE8\x13\xCF\x69\x75\x5D\xF3\x3E\x3B\x9D\xBB\xED\x23\x9D\x8F\x92\xA3\x4C\x0C\x6B\x51\xC6\x75\x62\x58\x8B\xBC\xC3\x26\x86\xB5\x68\x21\xA4\xB2\x51\x0A\xFC\xBE\x8F\x41\x23\x32\x1F\xF1\x41\xC5\xAC\x47\x75\x95\x99\xE1\x6D\x0B\xCB\x16\xCB\xCA\xC5\xEB\x3E\x74\x8C\xC8\xBF\xE3\xD0\x4F\x02\xFC\x4F\x92\xE4\x29\x70\xF4\xB8\xAD\x1A\xAF\x81\x06\x3B\x08\x1D\x3F\x53\x44\xF3\x8C\x39\xEF\x2E\x8F\x22\x92\xC7\x78\x69\x39\xFC\x03\x22\x34\x59\x83\x24\x2A\x97\xAB\xAB\x1D\xBB\xBB\xEE\x45\x73\xF7\x91\x3E\x47\x54\xE7\xC2\x57\x21\xFC\xEF\xD9\x7F\x50\x14\x06\xFF\xFE\x72\xF3\xC2\xF1\x7A\x3F\x95\xCE\xD2\x6A\x14\x13\xD9\x31\x5D\x5A\x8A\x8C\x92\x08\xC7\x4B\x4B\x51\x65\xBC\x7F\x4B\x6C\x6D\x24\x2A\x4C\xE9\x83\x0B\xCE\xA5\xE9\x70\xEF\x51\x92\xCA\x08\x04\xD5\xEC\x30\x8B\x39\xDA\x92\x79\x9F\x09\x62\x05\xE2\xDB\x16\x89\x57\x61\x57\x4B\x7D\xB3\x9C\x70\xEF\xF1\x9E\x1F\x5D\x5F\x87\x38\xD7\x41\x60\x5E\xB7\x6B\xF8\xCF\x2A\xEA\xF9\x2C\x90\x08\xE9\xE7\x4B\xD2\x5C\xE4\x24\x7D\xEB\xCB\x96\xD6\x8D\xA9\x6E\x44\xC2\x6A\xCA\x93\x6C\x5E\x9D\xAC\x2E\xFE\x7E\xF3\xA6\x18\x4D\xE4\x53\x4C\xCC\x73\x92\x59\x08\xA7\xFC\xDB\x4C\x81\xEF\x32\x1F\xA5\xD8\x99\x91\x42\x49\x0D\xE9\x45\x95\x92\x87\x6E\x51\x51\xC0\xEA\x77\x2C\x53\x43\x35\xFE\x68\xB4\xA7\x95\x3C\xCC\x50\x94\x1E\xD0\x14\xA4\x47\x8E\xD7\x36\x27\x52\x93\xB5\x95\xEC\x53\x6B\x66\x18\x76\xB5\xC9\xD8\xD2\x48\x9C\x86\x1C\xCE\x98\x4F\xDA\x11\x6E\xB0\x9A\x49\xAE\x5E\x97\x60\x8D\x2D\x9B\x6B\x9E\x1C\x91\xA5\xFB\xE4\x37\xF6\x18\x2C\xF6\x9C\x37\xA3\xA2\xE2\x73\xED\x2C\x0C\xC5\xC7\xF9\xF9\x93\xD2\x12\x33\xFA\x7A\x52\x47\xFF\xA7\xD4\x25\xA5\xD7\x1F\xB7\xE6\x93\x66\xC6\xB5\x96\xF9\x83\xC1\xF1\xFE\xDB\xE2\xEF\x8F\x98\x44\xA6\xCF\x8D\x8C\xB5\x52\x3A\x90\xF9\x58\x2B\x9D\xE3\x88\xF1\x06\xA5\x34\x27\xF8\x3D\x3B\xC1\x6F\xBD\x3A\x64\x14\xAE\x50\x77\xF7\xDB\x4B\x86\x8A\xE0\x58\x15\xB4\xD2\x71\x9E\xEA\x5B\x29\x0D\xAF\x8B\xBB\xD9\x7D\x92\x62\xB7\xFF\xD0\x77\x7C\xCD\xBA\x53\xBC\x18\xEA\x9B\x91\x1E\x4D\x26\x11\xA5\xF0\x28\x9A\x14\xDE\x35\x17\xC7\x66\x3D\xEA\x16\x65\xA1\xEF\x65\x8C\xF8\x4B\xE8\x93\x19\x45\x9B\x47\x09\x0A\x69\xF6\xB2\xFC\x52\x86\x69\x11\x4C\xF8\x90\x06\x4A\x53\x2C\xE4\x57\xA7\xEF\x29\xCF\x3A\xE6\x2E\xB7\x11\x4C\x22\x83\x25\x19\x4D\xC2\xCF\x9A\xB4\xA6\x71\x67\x5B\xD8\xAB\x37\x8C\x2F\x2E\x94\xFC\x9E\xFE\xE2\xE2\x38\x65\xD6\x45\xA4\x1C\x6D\x0E\x99\xDF\xE9\x96\x9E\x6B\xA6\xA9\x81\xE6\x16\xD5\xE5\xF2\x92\xB9\x65\x52\xAF\x76\x59\x5C\x24\xE9\xC2\xF8\xE5\xA5\x19\xF9\x01\x6D\x79\x85\x46\xBA\xF8\x7B\x56\x45\x18\xEA\xEF\x31\xC5\xFB\xF6\x55\x9C\x75\x98\xD8\xF2\x25\x8B\x59\xE5\x1B\xB0\xFC\x3D\xF1\x70\xAE\x64\xDD\x75\x7A\xD7\x68\x59\x85\x99\xE8\xF1\xC4\xB0\xEA\x3B\xF1\xA0\x4E\xB8\x63\x3C\x9D\xE4\x4B\xAD\x01\x2E\x93\xF8\x07\x5F\x7C\x5E\x69\x52\x91\xE2\xD7\x44\x5F\x5D\xFD\x50\x9B\xA0\x6B\xD3\xDA\xEF\x49\x77\x25\xEB\xF8\x59\xCB\xD9\xEE\x13\x07\xBE\xEB\x3A\x1F\xEF\x6E\x1F\x63\x5D\x44\xAE\x75\x0C\x92\x78\x8E\x48\xFF\x88\xBA\x4C\xEF\x69\x27\xEE\x4F\x4B\xDE\xDA\x77\xFA\x15\x34\xF6\xA9\xFE\xC7\xAC\xBB\xF4\x21\xF9\x9F\x42\xF9\x27\x3F\xED\xB0\x3F\x71\x19\x74\xE9\x29\x7C\x09\x0B\xE8\x5F\x09\x5E\x30\xF4\x81\x79\x62\x59\x79\xBA\xCD\x1D\xAB\x91\xD5\x36\x9F\x2C\x2B\xE4\xAC\xEE\xD6\x9A\x6D\xE7\xF6\xB7\x76\x81\x56\xE4\x70\x9D\x84\x5D\xCC\xE3\xDA\xA5\x9C\xDE\xE5\x9C\xE7\xB8\x59\xFC\xCD\x5D\x9A\xA5\x9D\xAD\x97\xA4\xF3\x7A\x9A\xBB\x88\x33\xBA\x99\x6B\x41\x31\xAF\xBB\x39\x4B\xB5\x1A\xB7\xEB\x23\xF1\x42\xEE\xE7\x2C\xAA\xF0\x12\xF6\x47\x92\xEC\xAF\xAE\x7E\x8F\x33\x5A\xFC\x3F\xA4\xD7\x11\x95\x8D\x5D\x2F\x6E\xA8\x6D\x85\xC6\xC8\xB3\x90\x7A\xFD\x40\x31\x7C\x20\xD7\x1F\x44\xB7\x3C\x39\x24\x52\xED\x4C\xE3\xDD\x31\xA5\x0F\x7F\x86\x01\x3D\x54\xF6\x62\x2D\xD5\x12\x7E\x67\x7A\xFF\x42\xD4\x3F\x88\xDF\x2C\xB7\x62\xBF\x4F\x52\xC0\xC8\xAD\xDD\x6E\x50\x18\xD5\xEB\x02\x00\xE6\x8F\xE2\x1F\x71\xD1\x88\x37\xBF\x65\xDE\xF8\xF6\xE6\xBA\x52\xF5\xED\xCD\xB5\xF0\xDE\xAA\xD6\xB5\xFD\x8C\x02\xEF\xF3\x21\xA5\xE1\x31\xFC\x0B\xF8\xEC\x97\xFD\x38\x0B\xD8\x9B\x2F\x9D\xA5\x6C\xBD\x0D\xD3\x2F\x2F\x0B\x86\xAF\x98\xF2\x98\x50\xE1\x5B\x72\x7C\x0D\x4D\x5D\xE8\x34\x08\x04\xD8\x48\xC1\x69\x83\xB7\xDB\xA2\xF0\xF2\x7F\xA1\xB4\xDE\x1E\xF8\x17\x22\xDF\xF4\x13\xE8\xAA\x30\xCE\xBD\x1C\x6D\xEA\x48\x4F\xBC\xF3\xA2\xBB\x08\xC3\x2C\x60\xD3\x1E\x93\xBD\x61\xD4\xEC\xA8\x7D\xAD\x23\x10\xB1\x9A\x04\x66\xE6\x6A\x07\xA1\xB7\x45\xA3\x4F\xD8\x4F\x22\x76\x79\xFD\xD0\x41\xD7\x28\xD9\x74\xB3\xB1\x75\x54\x50\x23\x61\xD1\x92\xFD\x21\xEB\xE2\x1F\x10\x91\x77\x1E\xDB\x06\xDF\x8D\x88\x93\xAC\x43\x18\x1C\xF1\x31\xC3\x52\xD6\x28\x3F\x07\x53\x92\x13\x53\x9A\x5B\x70\xB4\xD2\x02\x73\x99\x01\xB3\x53\x1A\x06\x69\x88\x7E\xE3\xC6\xCA\x3A\x51\x74\xB0\x4E\x13\x32\xAD\x04\xDC\xCC\xD1\x7F\x98\x45\xD2\x37\x11\xA2\x14\xFA\xA4\x90\x8B\x89\xE5\xCE\x02\xA0\xF0\x85\xCF\xB9\xEF\xE3\x2C\x4B\x48\x73\x36\x82\x4D\x82\xD7\x84\xA0\x07\xB1\x1C\xB4\xC1\xB4\xFB\x79\xB4\x86\xDA\xDF\xA0\xAA\xB2\x59\x06\x34\x61\xF4\xA5\xF7\xBC\xBA\xF8\x47\xD1\xA0\x99\xE2\x4D\x1A\x38\x31\xB0\x0F\x93\x74\x0F\x35\x84\xA0\xDD\x2D\xEF\x79\x59\x42\xE8\x4B\x5E\x63\x3C\xFF\x7A\xF9\xE2\xE9\x13\x76\x08\x1F\x1E\x98\xA2\x3A\x09\xF0\xE9\x3F\x28\xCA\xC1\x7D\x47\x47\xFC\xDF\x1C\xBB\x3C\x7D\xE5\x22\x88\xCD\x5B\x00\xBC\xD9\x55\x75\x8F\x8C\xB7\xC9\x31\x8C\x79\x98\x29\x1F\xF7\xDC\x22\x64\xBC\x08\x51\x26\x32\xE3\x88\xBC\x3B\x86\xF4\x8F\x30\xA3\xAE\x83\x01\x5F\x19\xD6\x3C\xD1\xB4\x3C\xE3\x36\x88\x4B\xDA\x47\x9F\x5C\xFE\x3B\x8C\x69\x26\x5D\xA7\x30\xA2\x7A\x96\xA2\x40\x9D\x80\x80\x6A\xC0\x38\x47\x59\xE7\x66\xB9\x97\x46\x74\x9B\xA2\x46\x70\xB0\x67\x86\x1C\xF9\x19\x5B\x9E\x6C\xEB\x3F\xD4\x13\xB8\xDB\xC0\x8C\x37\x30\x60\x20\x6D\xA6\x1D\xC7\xB4\x9D\x8A\xE4\xCD\xE8\x23\x1B\xDD\x9A\xF5\x37\x6B\x8F\x9C\xD6\x7B\xAF\x59\x6E\x23\x31\xC6\x48\xE8\x0B\x16\x9B\x5D\xC7\xB0\x2B\x9F\x1B\xB7\xE7\xE4\x05\x9E\x93\x9F\xA9\xDB\x43\x9A\xFD\xFF\xF6\x33\x0D\xC0\xF9\x0F\xE8\x16\x46\x8B\x84\x11\x60\xF5\x90\x4D\xD0\x61\x12\x33\xFB\x7B\xBF\x6E\x23\xB0\xF9\xFD\x63\xB3\xFA\xB3\x92\xA5\xC5\xEF\xC3\xD8\x4F\x8E\x69\xF1\x94\xB0\x0D\xC5\x16\x00\x8F\xCD\xEA\xDB\xEE\xCE\xD2\xBB\x3B\xDB\x26\xCE\xC2\xEB\x69\x9B\xF1\x97\x58\x57\xDB\xAC\x3E\xF9\xEA\xFC\x66\xE2\xB5\x2D\x61\x6E\x23\x32\xED\x52\xE6\x66\xDF\x89\xF7\x62\x7D\x82\x11\xC5\x5E\x58\x14\x36\xCA\x21\xC1\x6D\x14\xE6\xDC\x11\x7F\x77\x0A\x33\x1A\xC6\x7B\x21\xF9\xB8\xEE\x87\x6F\xC3\x33\xEE\xBA\xBF\x60\xDE\x47\x7C\xFC\xA7\x6B\x65\xFD\x93\x98\xC2\x5A\xE7\x3E\x6E\x1B\x00\x55\xE7\x63\x56\x78\x8C\x1A\xF0\x31\xDB\x47\xAF\xC8\x1E\xB3\xB6\xA6\x63\xF5\x73\x9E\x7C\xB4\xBE\xEE\x30\xAB\x20\xCB\xB2\xBF\xBA\xFA\x7F\x45\xD7\x26\x2B\xBF\xE0\xAB\x78\x0A\x9A\xF2\x3D\xCD\x33\x91\x16\x1E\xE4\x8F\x04\xEF\xC2\xD3\xB5\xEF\xE3\xC8\xBB\x21\x49\x4C\xAF\xE3\xE0\x35\x7F\xAD\xBA\x5C\xD0\xB5\x5F\xE4\x3C\x11\xD5\x22\x07\x1C\xC8\xC5\xB6\xA9\xB2\x96\x85\xE6\xED\x78\xC4\x63\x3B\x1E\xC1\x3A\x7C\x7A\x77\xC9\xDF\x75\x76\xBD\xDB\xAF\xC0\xFF\x90\x16\xF1\x97\x49\xAF\xB8\x8B\xDE\xE0\xA3\x28\xF2\x92\xB8\xA0\xA0\xD7\xF6\xCF\xEF\x93\x08\xD1\x30\xC2\x25\xD9\xB2\xDC\xAD\xFE\x2C\x8D\xC0\x6D\x50\x95\xC2\x53\x8A\x3B\xD5\x75\xF8\x59\xA1\x77\xC7\xEB\xF0\xC7\xD2\x8E\x43\xA7\xBE\xBA\x71\x64\xA1\xDD\x3F\xCF\x30\x81\x99\xB8\x56\x57\x57\x5F\xF0\x89\x56\x13\xA9\xF4\x29\x98\xB1\x78\x8A\xC5\xED\x14\xA6\x33\x7D\xE5\x60\x12\xD7\xFA\x84\xEF\xF2\x90\xE0\x80\x4F\xF7\x52\xD9\x33\x49\x58\x09\xC9\xF2\xA9\xE6\x98\x4F\xA7\xD6\xF6\xF7\x58\xBB\x17\x77\x12\x3E\x45\x29\x19\x46\xF8\x4B\x52\xDE\x11\x51\xE6\xCD\x19\x52\xC5\xFB\xFC\x58\x5E\xF6\x91\x4D\xA7\x66\x59\xDB\x66\x1F\x62\xFC\x91\x5F\x51\x3E\x3E\x23\xE3\x39\xDA\x7A\x6A\xF2\x52\x92\x9C\x1E\x84\x45\x41\x9A\xA7\x51\xF5\x81\xDE\x91\xC4\x28\x0A\xF4\xE7\x4F\x9E\x94\x6B\x88\x75\x44\x76\xCC\x74\x9F\xDE\x5D\x8E\x33\xC8\x23\x69\x25\x8A\x86\xEF\x31\xC9\x70\x73\x97\x49\xFD\xAC\x31\x79\x39\x30\x68\x6C\x8D\x72\xB3\x47\xAA\x27\x8A\x15\xEA\xD9\x1B\x18\x4A\x38\x70\x65\xFA\xC6\xF8\xFD\xC1\x87\xD6\xE5\x02\x6E\x08\x5D\xBB\x49\x06\xC6\x75\x9C\x1C\x84\x1E\xA2\x51\xD9\xB7\xB2\xC5\x86\xFB\xA2\x96\xF4\xE8\x43\x2A\x36\x4F\x92\xED\xEB\x87\x58\x0D\xD9\xF3\x8E\x28\x2D\x25\x29\x1E\xFF\x10\x99\x49\x98\xB5\x19\x22\xC2\x59\x36\x3D\xF7\x4A\x02\x4A\x72\xEC\xB4\xC1\xB2\x94\x71\xAA\x9B\x55\xDB\x3E\xC3\xBE\xBC\xA4\x3E\xF0\xE1\xF7\xBE\x61\x08\xAC\x35\x4E\xEC\x08\xF6\x48\x04\xE4\x59\x8D\xBC\x2C\x60\x9A\x21\xE8\xE7\xD1\xF3\x2A\x30\xD0\xA9\xE7\xB7\xB6\xE0\xD7\xDB\x4C\xB2\xCD\x24\xDB\x4C\x32\xE3\x4C\xB2\xD5\x6E\x5B\xC4\x6D\x11\x37\x6B\xED\xB6\x45\xDC\x16\x71\x5B\xC4\xCD\x39\xC7\x39\xDF\xFC\xBC\x3D\x35\x6D\x4F\x4D\xE7\xF7\xD4\xB4\x3D\xF8\x6F\x2E\x7C\xE6\x2E\xBC\x65\xE1\xCD\x85\xCF\xDC\x85\x5D\xF7\x4D\xDE\x26\xD5\xB7\x08\x9C\x37\xD5\xAE\x63\xFF\x90\x94\x82\x2B\x1B\x62\x4F\x35\x5C\xB2\x17\x4E\x8F\xE8\x1F\xF1\x6C\xB6\xDC\xC4\xCB\x45\xD7\x25\x99\xB2\xDF\xF9\xF7\xDB\xAF\x7F\x0F\xDA\x76\x3D\x57\x23\x7C\xD3\xC7\x51\x20\x4D\x2D\x63\x23\x2C\xBA\x4A\x1E\x14\x6B\x8D\x96\xD2\x03\xA6\x1A\x69\x20\x6C\xD6\x64\x4C\x76\x28\xE7\x98\xAE\x55\x3A\x87\x7D\xEB\x55\x8B\xCE\xF7\xA9\x3F\x63\x44\xFC\x83\xF0\x55\x94\x16\x47\x6D\x01\x73\xA2\x9A\x44\xD5\xCB\x69\xD4\x3F\xFC\x4F\x18\x07\x56\x59\xD5\x63\x44\xC0\xD9\xFE\xD5\x7A\xAC\x66\xD8\xE6\x34\xCD\x3A\x8C\x2B\xBE\xB2\x72\x06\xE6\x7B\x1D\x52\xF6\xF1\xA6\xCD\x7E\xFD\xEC\xF7\x7E\x45\x71\xBD\x6E\xD3\x69\x65\xDA\x47\x44\x68\x88\x22\x26\xE4\x7B\xF7\x59\xDC\x3C\xB9\xB7\x4D\xD8\xCF\xD6\x57\x3B\xC8\x1F\x9B\xFF\xC1\xFF\x70\x3F\xBF\xE4\xD8\xCF\x50\x8E\x80\xBD\xB5\x07\x58\x8E\x9B\xC7\xD5\x27\xD6\x1A\x4D\xAB\xB6\x3F\x70\x96\x99\x1F\x36\x64\x5C\xC7\xE7\x22\x88\xA9\x76\x6C\x04\x38\x9E\x3A\xD7\x71\x7C\x88\xB5\xFB\xE9\x46\xA8\x37\x70\xAE\x8F\x99\xE3\x16\x45\x28\xF6\xB1\x87\x76\x14\x93\xF2\x25\xA0\x97\xA0\xD1\xBC\x5B\x94\xE1\x97\xA5\x95\x5E\x99\x4C\x2B\x61\xE9\x8F\xFC\x26\xBC\x01\x07\x0F\x01\x6D\x87\x1F\x10\x05\x4E\x0C\x0E\xEC\xBD\xFA\x01\xE8\x2E\x3A\xC1\xC7\xE4\x1E\xAF\x4C\x58\xF7\xB4\x26\x75\x53\x20\x55\xFA\x00\x3A\x09\xA0\x67\xE6\x44\x67\xEB\xD5\x45\x44\x23\x37\xE0\x30\xAB\x23\x33\x7B\xBA\xBE\x0E\x82\x22\x31\x7E\x49\xF8\xA4\x65\xFC\x16\xA4\x03\x7E\xB7\xD5\x89\x0E\xF4\x9C\x14\xF9\x4C\x11\xF9\x18\xE5\xD9\x07\xF2\xBF\x39\xCE\xEA\xD3\xD9\x1C\x5C\x7D\x20\x53\x68\xD2\xDF\x7C\x90\xDF\xD7\xE9\x91\x00\xC6\x17\xC1\x98\xF2\x66\x65\x6C\xF6\xBD\x82\xA9\xCC\xAD\x23\xE9\xD1\x25\xD7\x0D\xB3\x66\xF9\x00\xA2\xEB\x12\xF0\x4D\x12\xFB\x88\x7E\x20\xD7\x11\xBB\x4F\xA1\x79\xB2\x33\x33\x50\xDF\xB2\x36\xB2\xF2\xEB\x17\x36\x7B\xC4\xDA\x5C\x82\x49\x2F\x9A\xCD\xCC\x5B\x42\xBA\x41\x3E\x4D\x6A\x96\x61\x12\x2B\x6E\xE3\xCC\x61\x1D\x23\xEC\x3A\x3F\x2C\x62\xEB\x99\x98\x2E\x35\x10\xE0\xC4\xBE\x80\x1F\xB4\x54\x43\x73\x49\x64\x34\x46\xEF\x08\x5B\x81\x37\xD5\xCC\xDE\x27\x3C\x73\x9C\xB3\x32\xCD\xA7\xD3\x3B\xCC\x64\x7E\x8F\xEF\x51\x37\x6F\xE4\xA6\x58\x1B\x7F\x57\x7E\x43\x18\xFF\x11\x52\x4C\x50\x24\x16\xC3\x1D\x46\x6A\x66\x76\x4E\x85\xBC\xCC\xF0\x3D\xFE\xFE\xE6\x80\xC8\x9B\x48\x58\x64\xAF\x1B\x26\x28\xC9\xDF\xDD\xE5\xEC\x12\x28\xEB\x38\x36\xAF\x20\x7E\x49\x52\xE7\x1E\x7D\x19\x4D\xA8\x03\x54\xAC\xF4\x12\xAC\x25\x33\x77\xA1\x09\x4E\x36\xEE\x04\x9A\xF5\x01\xF1\x06\x20\xA9\x8B\x79\x99\x90\x63\x95\x8B\x84\x9E\x87\xD2\x14\xC7\x2E\x45\x87\xBB\x78\x82\x6E\x5D\x7C\xA7\xDA\x2A\x9D\x49\xBB\x6A\xB5\x7C\x2E\x76\x2E\x2E\x3E\xA3\xEA\x45\x4C\x2C\xA0\xBA\xED\x50\xED\xB4\x42\x68\x11\x67\xBE\x97\xE3\x59\x46\x49\x84\x63\x47\xE4\x8E\xB9\xCB\x42\x49\x4F\x55\x56\x19\x27\x3D\xB7\x74\x75\x55\x1B\xD3\xEF\x70\xCD\x4C\x07\x63\x59\xF3\xE9\x1A\x15\x77\x15\x10\xC8\xED\xDA\xED\x17\x72\x9D\xF0\x27\x8A\xBE\x61\x52\x5E\xAB\x54\xFC\x10\xAE\x6A\xD4\xC3\xA1\x2E\x43\xC0\xBA\xB0\x0B\xAB\x1F\xFC\x97\xB8\x8A\xF5\x26\x89\xEF\x31\xA1\x45\xD9\x92\x7D\x49\x5E\x3F\x50\x46\x46\xBA\x2F\x52\x15\x63\xE2\x01\x79\x3A\xCB\xA5\x4A\x04\x67\xE1\x5F\xE0\x36\x56\xD1\x99\xF3\x59\xB7\x89\x48\x1E\x63\x9A\x14\x6D\xAB\x16\xD3\x39\x5D\xAE\x54\x7E\x31\x49\xAF\x54\x44\xF7\xA2\x75\x7D\xB7\x2C\xB9\x2E\xEF\xAF\x5D\xF2\x45\xD6\x04\x56\x68\x94\x1E\xCB\x0C\xAB\xD3\x61\xC5\xB1\x6E\xB3\xDD\x4D\x42\xD8\x35\xA9\x73\xDB\xF0\x0C\x0C\x56\x2F\xAF\xBC\xCE\xC3\x28\xC0\x84\x2F\xD5\xF0\x83\x30\xEA\x25\xB7\xAB\xDD\xFB\xEF\xA4\x44\xFB\x9C\xD0\x97\x5C\xCB\x2C\x3E\x86\xA5\xD7\x75\x40\x04\x54\xC9\xBC\x82\x57\x62\x09\x81\xD1\xC1\x24\x26\x8E\x9F\x98\xEF\x5D\xDF\x26\xF7\xB8\x39\x1E\x70\x3E\x8E\x0A\x8A\xDF\xC7\x45\xDB\x08\x75\x75\xCE\x4E\x76\x5D\xBB\x5B\xBE\xC7\x7B\x5E\x78\x0C\x34\x8A\x44\x47\xAA\x7F\x9D\x59\x3A\x0F\xA8\x44\xE0\x7C\x4E\x4A\xB6\x28\xF2\x28\x3C\x48\x58\xD7\xD0\x31\xFF\x89\xA9\x98\x02\x7B\xEC\x6E\x3B\xD2\x94\xD6\xCE\x85\xC5\x0E\xBE\x94\x71\x75\xF5\x43\x6B\xEB\xB3\x0C\xD2\x85\xB0\xFB\xE3\xD6\xE7\xF0\x98\x46\xE1\x0E\x3C\xCC\x56\x4A\x24\xAD\x6B\x3A\x2C\x06\xE9\x2D\xE0\x93\x81\x8D\xB3\xF9\x28\x53\x77\x79\x01\x53\x4E\xA5\x60\xE7\xD3\x70\x33\x08\x30\x1B\xEB\x26\xAA\x03\x7C\x97\x97\x39\xAA\xA0\xC7\x5E\x35\x51\x57\xC7\xAD\xE9\xD0\xD8\xEB\x79\xB3\xAE\x1E\x04\xDE\x2D\xF2\xBF\x79\x3E\x4A\x91\x1F\x52\xF0\x58\xE8\x94\xE6\xED\x72\x3A\xC6\xC1\x31\x47\x72\x9D\x36\x9A\x43\xA8\x89\x69\x9B\x0D\x31\x4F\xD9\x53\x8E\xF3\x0F\x91\x93\xBC\x26\x8C\x22\x9C\xF9\xB8\xCA\x84\x6F\x92\xF4\x41\x1B\xCB\xD6\x95\x1B\x95\xCA\xE7\x43\x42\xE8\x7F\xC2\x2C\x6C\x3D\x53\xD0\x87\xFA\xC7\x24\x73\x26\xDE\xDE\x02\xBD\xE4\xB2\x1E\x51\xB4\xF1\x41\x71\xD5\xE4\xBE\x69\xBF\x98\x01\xF5\xE9\x67\x71\x03\xBE\x4D\x0C\xF6\xB3\x5E\x0D\x3F\xA7\xD8\x1D\x56\xD1\x17\x1A\x56\xFE\x6F\xEB\xAA\x27\x78\x0E\x73\x5E\x4B\x4A\x15\xE5\x82\x83\xD8\x5A\x20\x0F\x0B\x73\x79\x78\x3A\x1E\xE9\x19\x1A\x21\x5D\x73\xE6\x30\xFA\x23\x1D\x55\x1B\x49\xB4\x16\x0F\x1B\xA6\xEA\xA0\xD3\x6A\xA3\x29\xD8\x33\x19\x0D\x1D\xE5\xF1\x32\xCC\x30\x49\xF4\x29\xAC\x7A\x72\x1A\x56\x32\xA9\x54\xC6\x2D\x99\x54\xEA\x1F\x09\xEE\x92\xE9\xE4\xD5\xFE\x0E\x6C\x96\x2B\x2C\x16\x13\x65\x05\x56\xD1\x7C\xA9\xFC\xAD\x2D\x5C\xAB\xA9\x7F\x35\x92\x5A\xB2\xBA\x9C\xB8\x5D\x12\xC0\x9C\x5A\x39\xE7\xC7\xC5\xFC\x73\x48\x2A\x9D\xD7\x92\xD2\x54\xBA\xE0\x20\xB6\x15\x6B\x3D\xC2\xAD\x4D\x3B\x37\x12\x3D\x5D\xCD\x85\xF8\x64\x2E\xD3\x99\xB9\xC3\x54\x39\x6E\xD2\x58\x15\xFB\x1E\x6F\x70\x2E\x20\x65\x8F\xF7\x60\xE7\x91\x72\x70\x8C\x4C\x62\xAE\x81\xAF\x57\xCD\x6E\x3A\xC3\x1A\xE7\xAC\x36\x9B\x22\x07\x4D\x22\x68\x9F\x77\x9A\x17\x09\x86\xBE\xD3\xDA\x58\xE2\x58\x9E\x93\x7F\xC8\x0D\x83\xF6\xA4\xDC\x68\x77\xF7\xF6\x1F\x72\xC3\x20\x19\xDD\x68\x3B\x5F\x58\xBE\xDC\x26\x82\xAB\x8C\x0B\xEE\x64\x3D\x3B\xE2\xE3\x31\xB9\xC7\x2B\x91\xA6\xDB\xBB\x42\x2B\x91\x74\xAD\x43\x2B\x06\x41\x96\x46\x21\xF5\x6E\xF3\xDD\x0E\xDB\x09\x6B\x87\x27\xDC\xE4\xA9\x5E\x45\x4A\xF3\xEC\xC0\x84\xA9\x32\xA2\x09\xFF\xC9\x93\xCD\x50\xDE\x8E\x24\x31\xDD\x2C\x65\xB2\xD4\x93\xCD\xA1\x3A\x99\xC9\xC9\x9D\xA4\xCF\xCE\xAE\xC3\x5C\xBC\xF6\x59\x7F\xBA\x02\x26\xCB\xD5\x8A\xDA\x6D\x26\x3D\x07\x35\xEC\x55\xDE\x4A\xE5\x5F\xD8\xB5\xDD\x27\x98\xE5\x7D\xBB\x83\xAC\xAB\x76\xEE\x7E\x7A\xAC\xC8\xBB\x3B\x28\xB0\x84\x7B\x77\xAF\x0A\x16\xF2\xED\x1E\x82\xAE\xCF\xB1\x87\x29\xB1\xB4\x57\xF7\x90\x7E\x51\x97\xEE\x5C\xC1\x2D\xED\xDA\xDD\x05\x5E\xB1\x8B\x0F\x52\x66\x35\xAE\xDE\x5D\x0B\xEE\xF2\xFF\x7F\x00\x00\x00\xFF\xFF\x2A\x88\x2F\xEF\x0B\xCC\x03\x00") diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.wasm b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.wasm index 506aa7042..99cde3aaf 100644 Binary files a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.wasm and b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/opa/opa.wasm differ diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/wasm.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/wasm.go index fe496eea7..57357f1ab 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/wasm.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/compiler/wasm/wasm.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. // Package wasm contains an IR->WASM compiler backend. -// nolint: deadcode,varcheck // Package in development (2021). package wasm import ( @@ -22,16 +21,19 @@ import ( "github.com/open-policy-agent/opa/internal/wasm/instruction" "github.com/open-policy-agent/opa/internal/wasm/module" "github.com/open-policy-agent/opa/internal/wasm/types" + "github.com/open-policy-agent/opa/internal/wasm/util" + opatypes "github.com/open-policy-agent/opa/types" ) // Record Wasm ABI version in exported global variable const ( opaWasmABIVersionVal = 1 opaWasmABIVersionVar = "opa_wasm_abi_version" - opaWasmABIMinorVersionVal = 1 + opaWasmABIMinorVersionVal = 2 opaWasmABIMinorVersionVar = "opa_wasm_abi_minor_version" ) +// nolint: deadcode,varcheck const ( opaTypeNull int32 = iota + 1 opaTypeBoolean @@ -45,14 +47,11 @@ const ( ) const ( - opaFuncPrefix = "opa_" opaAbort = "opa_abort" opaRuntimeError = "opa_runtime_error" - opaJSONParse = "opa_json_parse" opaNull = "opa_null" opaBoolean = "opa_boolean" opaNumberInt = "opa_number_int" - opaNumberFloat = "opa_number_float" opaNumberRef = "opa_number_ref" opaNumberSize = "opa_number_size" opaArrayWithCap = "opa_array_with_cap" @@ -78,6 +77,7 @@ const ( opaMappingInit = "opa_mapping_init" opaMappingLookup = "opa_mapping_lookup" opaMPDInit = "opa_mpd_init" + opaMallocInit = "opa_malloc_init" ) var builtinsFunctions = map[string]string{ @@ -168,6 +168,8 @@ var builtinsFunctions = map[string]string{ ast.RegexFindAllStringSubmatch.Name: "opa_regex_find_all_string_submatch", ast.JSONRemove.Name: "builtin_json_remove", ast.JSONFilter.Name: "builtin_json_filter", + ast.Member.Name: "builtin_member", + ast.MemberWithKey.Name: "builtin_member3", } // If none of these is called from a policy, the resulting wasm @@ -180,6 +182,11 @@ var builtinsUsingRE2 = [...]string{ builtinsFunctions[ast.GlobMatch.Name], } +type externalFunc struct { + ID int32 + Decl *opatypes.Function +} + var builtinDispatchers = [...]string{ "opa_builtin0", "opa_builtin1", @@ -199,17 +206,17 @@ type Compiler struct { funcsCode []funcCode // compile functions' code - builtinStringAddrs map[int]uint32 // addresses of built-in string constants - externalFuncNameAddrs map[string]int32 // addresses of required built-in function names for listing - externalFuncs map[string]int32 // required built-in function ids - entrypointNameAddrs map[string]int32 // addresses of available entrypoint names for listing - entrypoints map[string]int32 // available entrypoint ids - stringOffset int32 // null-terminated string data base offset - stringAddrs []uint32 // null-terminated string constant addresses - opaStringAddrs []uint32 // addresses of interned opa_string_t - opaBoolAddrs map[ir.Bool]uint32 // addresses of interned opa_boolean_t - fileAddrs []uint32 // null-terminated string constant addresses, used for file names - funcs map[string]uint32 // maps imported and exported function names to function indices + builtinStringAddrs map[int]uint32 // addresses of built-in string constants + externalFuncNameAddrs map[string]int32 // addresses of required built-in function names for listing + externalFuncs map[string]externalFunc // required built-in function ids and types + entrypointNameAddrs map[string]int32 // addresses of available entrypoint names for listing + entrypoints map[string]int32 // available entrypoint ids + stringOffset int32 // null-terminated string data base offset + stringAddrs []uint32 // null-terminated string constant addresses + opaStringAddrs []uint32 // addresses of interned opa_string_t + opaBoolAddrs map[ir.Bool]uint32 // addresses of interned opa_boolean_t + fileAddrs []uint32 // null-terminated string constant addresses, used for file names + funcs map[string]uint32 // maps imported and exported function names to function indices nextLocal uint32 locals map[ir.Local]uint32 @@ -247,10 +254,12 @@ func New() *Compiler { c.stages = []func() error{ c.initModule, c.compileStringsAndBooleans, + c.addImportMemoryDecl, c.compileExternalFuncDecls, c.compileEntrypointDecls, c.compileFuncs, c.compilePlans, + c.emitABIVersionGlobals, // "local" optimizations c.removeUnusedCode, @@ -316,8 +325,6 @@ func (c *Compiler) initModule() error { return err } - c.emitABIVersionGlobals() - c.funcs = make(map[string]uint32) for _, fn := range c.module.Names.Functions { name := fn.Name @@ -362,19 +369,86 @@ func (c *Compiler) initModule() error { Results: []types.ValueType{types.I32}, }, true) - c.module.Export.Exports = append(c.module.Export.Exports, module.Export{ - Name: "memory", - Descriptor: module.ExportDescriptor{ - Type: module.MemoryExportType, - Index: 0, + // NOTE(sr): LLVM needs a section of linear memory to be zero'ed out and reserved, + // for static variables defined in the C code. When using imported memory, it adds + // a data segment to ensure that. When not using imported memory, it would ensure + // that a zero'ed out region is available by adjust the __heap_base address. + // Since we control "imported/not-imported" memory here, we make these adjustments + // here, too: + // + // a. the __heap_base exported variable is read, + // b. the __heap_base variable is removed from exports and globals + // c. a data segment filled with zeros of the proper length is added + var idx uint32 + var del int + for i, exp := range c.module.Export.Exports { + if exp.Name == "__heap_base" { + idx = exp.Descriptor.Index + del = i + } + } + heapBase := c.module.Global.Globals[idx].Init.Instrs[0].(instruction.I32Const).Value + + // (b) remove __heap_base export and global + c.module.Export.Exports = append(c.module.Export.Exports[:del], c.module.Export.Exports[del+1:]...) + c.module.Global.Globals = append(c.module.Global.Globals[:idx], c.module.Global.Globals[idx+1:]...) + + // (c) add data segment with zeros + offset, err := getLowestFreeDataSegmentOffset(c.module) + if err != nil { + return err + } + + c.module.Data.Segments = append(c.module.Data.Segments, module.DataSegment{ + Index: 0, + Offset: module.Expr{ + Instrs: []instruction.Instruction{ + instruction.I32Const{ + Value: offset, + }, + }, + }, + Init: bytes.Repeat([]byte{0}, int(heapBase-offset)), + }) + + return nil +} + +// NOTE(sr): The wasm module we start with, compiled via LLVM, has NO memory +// import or export. Here, we change that: the OPA-generated wasm module will +// +// a. import its memory +// b. re-export that memory +// c. have no "own" memory (in its memory section) +// +// (b) is provided by the LLVM base module, it already has an export of memory[0] +// (a) and (c) are taken care of here. +// +// In the future, we could change that, and here would be the place to do so. +func (c *Compiler) addImportMemoryDecl() error { + offset, err := getLowestFreeDataSegmentOffset(c.module) + if err != nil { + return err + } + + c.module.Import.Imports = append(c.module.Import.Imports, module.Import{ + Module: "env", + Name: "memory", + Descriptor: module.MemoryImport{ + Mem: module.MemType{ + Lim: module.Limit{ + Min: util.Pages(uint32(offset)), + }, + }, }, }) + c.module.Memory.Memories = nil return nil } // emitABIVersionGLobals adds globals for ABI [minor] version, exports them -func (c *Compiler) emitABIVersionGlobals() { +func (c *Compiler) emitABIVersionGlobals() error { abiVersionGlobals := []module.Global{ { Type: types.I32, @@ -413,6 +487,7 @@ func (c *Compiler) emitABIVersionGlobals() { } c.module.Global.Globals = append(c.module.Global.Globals, abiVersionGlobals...) c.module.Export.Exports = append(c.module.Export.Exports, abiVersionExports...) + return nil } // compileStringsAndBooleans compiles various string constants (strings, file names, @@ -568,7 +643,7 @@ func (c *Compiler) compileExternalFuncDecls() error { c.appendInstr(instruction.Call{Index: c.function(opaObject)}) c.appendInstr(instruction.SetLocal{Index: lobj}) - c.externalFuncs = make(map[string]int32) + c.externalFuncs = make(map[string]externalFunc) for index, decl := range c.policy.Static.BuiltinFuncs { if _, ok := builtinsFunctions[decl.Name]; !ok { @@ -578,7 +653,7 @@ func (c *Compiler) compileExternalFuncDecls() error { c.appendInstr(instruction.I64Const{Value: int64(index)}) c.appendInstr(instruction.Call{Index: c.function(opaNumberInt)}) c.appendInstr(instruction.Call{Index: c.function(opaObjectInsert)}) - c.externalFuncs[decl.Name] = int32(index) + c.externalFuncs[decl.Name] = externalFunc{ID: int32(index), Decl: decl.Decl} } } @@ -639,7 +714,7 @@ func (c *Compiler) compileFuncs() error { } } - if err := c.emitMapping(); err != nil { + if err := c.emitMappingAndStartFunc(); err != nil { return fmt.Errorf("writing mapping: %w", err) } @@ -817,7 +892,7 @@ func mapFunc(mapping ast.Object, fn *ir.Func, index int) (ast.Object, bool) { return mapping.Merge(curr) } -func (c *Compiler) emitMapping() error { +func (c *Compiler) emitMappingAndStartFunc() error { var indices []uint32 var ok bool mapping := ast.NewObject() @@ -873,10 +948,17 @@ func (c *Compiler) emitMapping() error { c.module.Table.Tables[0].Lim.Min = min c.module.Table.Tables[0].Lim.Max = &max + heapBase, err := getLowestFreeDataSegmentOffset(c.module) + if err != nil { + return err + } + // create function that calls `void opa_mapping_initialize(const char *s, const int l)` // with s being the offset of the data segment just written, and l its length fName := "_initialize" c.code = &module.CodeEntry{} + c.appendInstr(instruction.I32Const{Value: heapBase}) + c.appendInstr(instruction.Call{Index: c.function(opaMallocInit)}) c.appendInstr(instruction.Call{Index: c.function(opaMPDInit)}) c.appendInstr(instruction.I32Const{Value: dataOffset}) c.appendInstr(instruction.I32Const{Value: int32(len(jsonMap))}) @@ -901,20 +983,7 @@ func (c *Compiler) replaceBooleanFunc() error { c.appendInstr(instruction.GetLocal{Index: 0}) c.appendInstr(instruction.Select{}) - // replace the code segment - var idx uint32 - for _, fn := range c.module.Names.Functions { - if fn.Name == opaBoolean { - idx = fn.Index - uint32(c.functionImportCount()) - } - } - var buf bytes.Buffer - if err := encoding.WriteCodeEntry(&buf, c.code); err != nil { - return err - } - - c.module.Code.Segments[idx].Code = buf.Bytes() - return nil + return c.storeFunc(opaBoolean, c.code) } func (c *Compiler) compileBlock(block *ir.Block) ([]instruction.Instruction, error) { @@ -1042,10 +1111,6 @@ func (c *Compiler) compileBlock(block *ir.Block) ([]instruction.Instruction, err case *ir.MakeNullStmt: instrs = append(instrs, instruction.Call{Index: c.function(opaNull)}) instrs = append(instrs, instruction.SetLocal{Index: c.local(stmt.Target)}) - case *ir.MakeNumberFloatStmt: - instrs = append(instrs, instruction.F64Const{Value: stmt.Value}) - instrs = append(instrs, instruction.Call{Index: c.function(opaNumberFloat)}) - instrs = append(instrs, instruction.SetLocal{Index: c.local(stmt.Target)}) case *ir.MakeNumberIntStmt: instrs = append(instrs, instruction.I64Const{Value: stmt.Value}) instrs = append(instrs, instruction.Call{Index: c.function(opaNumberInt)}) @@ -1435,8 +1500,8 @@ func (c *Compiler) compileCallStmt(stmt *ir.CallStmt, result *[]instruction.Inst return c.compileInternalCall(stmt, index, result) } - if id, ok := c.externalFuncs[fn]; ok { - return c.compileExternalCall(stmt, id, result) + if ef, ok := c.externalFuncs[fn]; ok { + return c.compileExternalCall(stmt, ef, result) } c.errors = append(c.errors, fmt.Errorf("undefined function: %q", fn)) @@ -1464,7 +1529,7 @@ func (c *Compiler) compileInternalCall(stmt *ir.CallStmt, index uint32, result * return nil } -func (c *Compiler) compileExternalCall(stmt *ir.CallStmt, id int32, result *[]instruction.Instruction) error { +func (c *Compiler) compileExternalCall(stmt *ir.CallStmt, ef externalFunc, result *[]instruction.Instruction) error { if len(stmt.Args) >= len(builtinDispatchers) { c.errors = append(c.errors, fmt.Errorf("too many built-in call arguments: %q", stmt.Func)) @@ -1472,7 +1537,7 @@ func (c *Compiler) compileExternalCall(stmt *ir.CallStmt, id int32, result *[]in } instrs := *result - instrs = append(instrs, instruction.I32Const{Value: id}) + instrs = append(instrs, instruction.I32Const{Value: ef.ID}) instrs = append(instrs, instruction.I32Const{Value: 0}) // unused context parameter for _, arg := range stmt.Args { @@ -1480,20 +1545,32 @@ func (c *Compiler) compileExternalCall(stmt *ir.CallStmt, id int32, result *[]in } instrs = append(instrs, instruction.Call{Index: c.function(builtinDispatchers[len(stmt.Args)])}) - instrs = append(instrs, instruction.TeeLocal{Index: c.local(stmt.Result)}) - instrs = append(instrs, instruction.I32Eqz{}) - instrs = append(instrs, instruction.BrIf{Index: 0}) + + if ef.Decl.Result() != nil { + instrs = append(instrs, instruction.TeeLocal{Index: c.local(stmt.Result)}) + instrs = append(instrs, instruction.I32Eqz{}) + instrs = append(instrs, instruction.BrIf{Index: 0}) + } else { + instrs = append(instrs, instruction.Drop{}) + } + *result = instrs return nil } func (c *Compiler) emitFunctionDecl(name string, tpe module.FunctionType, export bool) { - typeIndex := c.emitFunctionType(tpe) - c.module.Function.TypeIndices = append(c.module.Function.TypeIndices, typeIndex) - c.module.Code.Segments = append(c.module.Code.Segments, module.RawCodeSegment{}) - idx := uint32((len(c.module.Function.TypeIndices) - 1) + c.functionImportCount()) - c.funcs[name] = idx + var idx uint32 + if old, ok := c.funcs[name]; ok { + c.debug.Printf("function declaration for %v is being emitted multiple times (overwriting old index %d)", name, old) + idx = old + } else { + typeIndex := c.emitFunctionType(tpe) + c.module.Function.TypeIndices = append(c.module.Function.TypeIndices, typeIndex) + c.module.Code.Segments = append(c.module.Code.Segments, module.RawCodeSegment{}) + idx = uint32((len(c.module.Function.TypeIndices) - 1) + c.functionImportCount()) + c.funcs[name] = idx + } if export { c.module.Export.Exports = append(c.module.Export.Exports, module.Export{ diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/future/filter_imports.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/future/filter_imports.go new file mode 100644 index 000000000..b0fdc8c66 --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/future/filter_imports.go @@ -0,0 +1,20 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +package future + +import "github.com/open-policy-agent/opa/ast" + +// FilterFutureImports filters OUT any future imports from the passed slice of +// `*ast.Import`s. +func FilterFutureImports(imps []*ast.Import) []*ast.Import { + ret := []*ast.Import{} + for _, imp := range imps { + path := imp.Path.Value.(ast.Ref) + if !ast.FutureRootDocument.Equal(path[0]) { + ret = append(ret, imp) + } + } + return ret +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/future/parser_opts.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/future/parser_opts.go new file mode 100644 index 000000000..804702b94 --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/future/parser_opts.go @@ -0,0 +1,42 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +package future + +import ( + "fmt" + + "github.com/open-policy-agent/opa/ast" +) + +// ParserOptionsFromFutureImports transforms a slice of `ast.Import`s into the +// `ast.ParserOptions` that can be used to parse a statement according to the +// included "future.keywords" and "future.keywords.xyz" imports. +func ParserOptionsFromFutureImports(imports []*ast.Import) (ast.ParserOptions, error) { + popts := ast.ParserOptions{ + FutureKeywords: []string{}, + } + for _, imp := range imports { + path := imp.Path.Value.(ast.Ref) + if !ast.FutureRootDocument.Equal(path[0]) { + continue + } + if len(path) >= 2 { + if string(path[1].Value.(ast.String)) != "keywords" { + return popts, fmt.Errorf("unknown future import: %v", imp) + } + if len(path) == 2 { + // retun, one "future.keywords" import means we can disregard any others + return ast.ParserOptions{AllFutureKeywords: true}, nil + } + } + if len(path) == 3 { + if imp.Alias != "" { + return popts, fmt.Errorf("alias not supported") + } + popts.FutureKeywords = append(popts.FutureKeywords, string(path[2].Value.(ast.String))) + } + } + return popts, nil +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/jsonLoader.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/jsonLoader.go index 1bf28bcd4..65ada35c0 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/jsonLoader.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/jsonLoader.go @@ -30,6 +30,7 @@ import ( "bytes" "encoding/json" "errors" + "fmt" "io" "io/ioutil" "net/http" @@ -42,6 +43,31 @@ import ( "github.com/xeipuuv/gojsonreference" ) +// NOTE(sr): We need to control from which hosts remote references are +// allowed to be resolved via HTTP requests. It's quite cumbersome to +// add extra parameters to all calls and interfaces involved, so we're +// using a global variable instead: +var allowNet map[string]struct{} + +func SetAllowNet(hosts []string) { + if hosts == nil { + allowNet = nil // resetting the global + return + } + allowNet = make(map[string]struct{}, len(hosts)) + for _, host := range hosts { + allowNet[host] = struct{}{} + } +} + +func isAllowed(ref *url.URL) bool { + if allowNet == nil { + return true + } + _, ok := allowNet[ref.Hostname()] + return ok +} + var osFS = osFileSystem(os.Open) // JSONLoader defines the JSON loader interface @@ -141,8 +167,6 @@ func (l *jsonReferenceLoader) LoadJSON() (interface{}, error) { refToURL := reference refToURL.GetUrl().Fragment = "" - var document interface{} - if reference.HasFileScheme { filename := strings.TrimPrefix(refToURL.String(), "file://") @@ -159,32 +183,27 @@ func (l *jsonReferenceLoader) LoadJSON() (interface{}, error) { filename = filepath.FromSlash(filename) } - document, err = l.loadFromFile(filename) - if err != nil { - return nil, err - } - - } else { - - document, err = l.loadFromHTTP(refToURL.String()) - if err != nil { - return nil, err - } + return l.loadFromFile(filename) + } + // NOTE(sr): hardcoded metaschema references are not subject to allow_net + // checking; their contents are hardcoded in the library! + // + // returned cached versions for metaschemas for drafts 4, 6 and 7 + // for performance and allow for easier offline use + if metaSchema := drafts.GetMetaSchema(refToURL.String()); metaSchema != "" { + return decodeJSONUsingNumber(strings.NewReader(metaSchema)) } - return document, nil + if isAllowed(refToURL.GetUrl()) { + return l.loadFromHTTP(refToURL.String()) + } + return nil, fmt.Errorf("remote reference loading disabled: %s", reference.String()) } func (l *jsonReferenceLoader) loadFromHTTP(address string) (interface{}, error) { - // returned cached versions for metaschemas for drafts 4, 6 and 7 - // for performance and allow for easier offline use - if metaSchema := drafts.GetMetaSchema(address); metaSchema != "" { - return decodeJSONUsingNumber(strings.NewReader(metaSchema)) - } - resp, err := http.Get(address) if err != nil { return nil, err diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/schema.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/schema.go index f30f36b4b..3e6f8c087 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/schema.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/schema.go @@ -701,7 +701,7 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *SubSchema) } for _, v := range anyOf { newSchema := &SubSchema{Property: KeyAnyOf, Parent: currentSchema, Ref: currentSchema.Ref} - currentSchema.anyOf = append(currentSchema.anyOf, newSchema) + currentSchema.AnyOf = append(currentSchema.AnyOf, newSchema) err := d.parseSchema(v, newSchema) if err != nil { return err @@ -714,7 +714,7 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *SubSchema) } for _, v := range allOf { newSchema := &SubSchema{Property: KeyAllOf, Parent: currentSchema, Ref: currentSchema.Ref} - currentSchema.allOf = append(currentSchema.allOf, newSchema) + currentSchema.AllOf = append(currentSchema.AllOf, newSchema) err := d.parseSchema(v, newSchema) if err != nil { return err diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/subSchema.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/subSchema.go index 4e1886482..d8bc0cb56 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/subSchema.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/subSchema.go @@ -142,8 +142,8 @@ type SubSchema struct { // validation : SubSchema oneOf []*SubSchema - anyOf []*SubSchema - allOf []*SubSchema + AnyOf []*SubSchema + AllOf []*SubSchema not *SubSchema _if *SubSchema // if/else are golang keywords _then *SubSchema diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/validation.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/validation.go index f8a11879b..a3c3e0146 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/validation.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/gojsonschema/validation.go @@ -271,12 +271,12 @@ func (v *SubSchema) validateSchema(currentSubSchema *SubSchema, currentNode inte internalLog(" %v", currentNode) } - if len(currentSubSchema.anyOf) > 0 { + if len(currentSubSchema.AnyOf) > 0 { validatedAnyOf := false var bestValidationResult *Result - for _, anyOfSchema := range currentSubSchema.anyOf { + for _, anyOfSchema := range currentSubSchema.AnyOf { if !validatedAnyOf { validationResult := anyOfSchema.subValidateWithContext(currentNode, context) validatedAnyOf = validationResult.Valid() @@ -325,10 +325,10 @@ func (v *SubSchema) validateSchema(currentSubSchema *SubSchema, currentNode inte } - if len(currentSubSchema.allOf) > 0 { + if len(currentSubSchema.AllOf) > 0 { nbValidated := 0 - for _, allOfSchema := range currentSubSchema.allOf { + for _, allOfSchema := range currentSubSchema.AllOf { validationResult := allOfSchema.subValidateWithContext(currentNode, context) if validationResult.Valid() { nbValidated++ @@ -336,7 +336,7 @@ func (v *SubSchema) validateSchema(currentSubSchema *SubSchema, currentNode inte result.mergeErrors(validationResult) } - if nbValidated != len(currentSubSchema.allOf) { + if nbValidated != len(currentSubSchema.AllOf) { result.addInternalError(new(NumberAllOfError), context, currentNode, ErrorDetails{}) } } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/ir/ir.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/ir/ir.go index 6a26af9fb..d907bce0c 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/ir/ir.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/ir/ir.go @@ -10,6 +10,8 @@ package ir import ( "fmt" + + "github.com/open-policy-agent/opa/types" ) type ( @@ -31,6 +33,7 @@ type ( // policy. BuiltinFunc struct { Name string + Decl *types.Function } // Plans represents a collection of named query plans to expose in the policy. @@ -312,15 +315,6 @@ type MakeNullStmt struct { Location } -// MakeNumberFloatStmt constructs a local variable that refers to a -// floating-point number value. -type MakeNumberFloatStmt struct { - Value float64 - Target Local - - Location -} - // MakeNumberIntStmt constructs a local variable that refers to an integer value. type MakeNumberIntStmt struct { Value int64 diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/interface.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/interface.go index 982297305..7a7d03ef1 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/interface.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/interface.go @@ -48,6 +48,7 @@ type RSAPublicKey struct { // RSAPrivateKey is a type of JWK generated from RSA private keys type RSAPrivateKey struct { *StandardHeaders + *jwa.AlgorithmParameters key *rsa.PrivateKey } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/rsa.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/rsa.go index c885ffffc..1a5cba47b 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/rsa.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jwk/rsa.go @@ -2,6 +2,7 @@ package jwk import ( "crypto/rsa" + "encoding/binary" "math/big" "github.com/pkg/errors" @@ -29,9 +30,37 @@ func newRSAPrivateKey(key *rsa.PrivateKey) (*RSAPrivateKey, error) { if err != nil { return nil, errors.Wrapf(err, "Failed to set Key Type") } + + var algoParams jwa.AlgorithmParameters + + // it is needed to use raw encoding to omit the "=" paddings at the end + algoParams.D = key.D.Bytes() + algoParams.P = key.Primes[0].Bytes() + algoParams.Q = key.Primes[1].Bytes() + algoParams.Dp = key.Precomputed.Dp.Bytes() + algoParams.Dq = key.Precomputed.Dq.Bytes() + algoParams.Qi = key.Precomputed.Qinv.Bytes() + + // "modulus" (N) from the public key in the private key + algoParams.N = key.PublicKey.N.Bytes() + + // make the E a.k.a "coprime" + // https://en.wikipedia.org/wiki/RSA_(cryptosystem) + coprime := make([]byte, 8) + binary.BigEndian.PutUint64(coprime, uint64(key.PublicKey.E)) + // find the 1st index of non 0x0 paddings from the beginning + i := 0 + for ; i < len(coprime); i++ { + if coprime[i] != 0x0 { + break + } + } + algoParams.E = coprime[i:] + return &RSAPrivateKey{ - StandardHeaders: &hdr, - key: key, + StandardHeaders: &hdr, + AlgorithmParameters: &algoParams, + key: key, }, nil } @@ -99,5 +128,6 @@ func (k *RSAPrivateKey) GenerateKey(keyJSON *RawKeyJSON) error { k.key = privateKey k.StandardHeaders = &keyJSON.StandardHeaders + k.AlgorithmParameters = &keyJSON.AlgorithmParameters return nil } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/jws.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/jws.go index 6fca28d23..bfa498bb0 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/jws.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/jws.go @@ -21,8 +21,10 @@ package jws import ( "bytes" + "crypto/rand" "encoding/base64" "encoding/json" + "io" "strings" "github.com/open-policy-agent/opa/internal/jwx/jwa" @@ -37,7 +39,7 @@ import ( // it in compact serialization format. In this format you may NOT use // multiple signers. // -func SignLiteral(payload []byte, alg jwa.SignatureAlgorithm, key interface{}, hdrBuf []byte) ([]byte, error) { +func SignLiteral(payload []byte, alg jwa.SignatureAlgorithm, key interface{}, hdrBuf []byte, rnd io.Reader) ([]byte, error) { encodedHdr := base64.RawURLEncoding.EncodeToString(hdrBuf) encodedPayload := base64.RawURLEncoding.EncodeToString(payload) signingInput := strings.Join( @@ -50,7 +52,14 @@ func SignLiteral(payload []byte, alg jwa.SignatureAlgorithm, key interface{}, hd if err != nil { return nil, errors.Wrap(err, `failed to create signer`) } - signature, err := signer.Sign([]byte(signingInput), key) + + var signature []byte + switch s := signer.(type) { + case *sign.ECDSASigner: + signature, err = s.SignWithRand([]byte(signingInput), key, rnd) + default: + signature, err = signer.Sign([]byte(signingInput), key) + } if err != nil { return nil, errors.Wrap(err, `failed to sign Payload`) } @@ -81,7 +90,9 @@ func SignWithOption(payload []byte, alg jwa.SignatureAlgorithm, key interface{}) if err != nil { return nil, errors.Wrap(err, `failed to marshal Headers`) } - return SignLiteral(payload, alg, key, hdrBuf) + // NOTE(sr): we don't use SignWithOption -- if we did, this rand.Reader + // should come from the BuiltinContext's Seed, too. + return SignLiteral(payload, alg, key, hdrBuf, rand.Reader) } // Verify checks if the given JWS message is verifiable using `alg` and `key`. diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/ecdsa.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/ecdsa.go index 702390680..62af72b6c 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/ecdsa.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/ecdsa.go @@ -4,6 +4,7 @@ import ( "crypto" "crypto/ecdsa" "crypto/rand" + "io" "github.com/open-policy-agent/opa/internal/jwx/jwa" @@ -25,7 +26,7 @@ func init() { } func makeECDSASignFunc(hash crypto.Hash) ecdsaSignFunc { - return ecdsaSignFunc(func(payload []byte, key *ecdsa.PrivateKey) ([]byte, error) { + return ecdsaSignFunc(func(payload []byte, key *ecdsa.PrivateKey, rnd io.Reader) ([]byte, error) { curveBits := key.Curve.Params().BitSize keyBytes := curveBits / 8 // Curve bits do not need to be a multiple of 8. @@ -34,7 +35,7 @@ func makeECDSASignFunc(hash crypto.Hash) ecdsaSignFunc { } h := hash.New() h.Write(payload) - r, s, err := ecdsa.Sign(rand.Reader, key, h.Sum(nil)) + r, s, err := ecdsa.Sign(rnd, key, h.Sum(nil)) if err != nil { return nil, errors.Wrap(err, "failed to sign payload using ecdsa") } @@ -69,8 +70,9 @@ func (s ECDSASigner) Algorithm() jwa.SignatureAlgorithm { return s.alg } -// Sign signs payload with a ECDSA private key -func (s ECDSASigner) Sign(payload []byte, key interface{}) ([]byte, error) { +// SignWithRand signs payload with a ECDSA private key and a provided randomness +// source (such as `rand.Reader`). +func (s ECDSASigner) SignWithRand(payload []byte, key interface{}, r io.Reader) ([]byte, error) { if key == nil { return nil, errors.New(`missing private key while signing payload`) } @@ -79,6 +81,10 @@ func (s ECDSASigner) Sign(payload []byte, key interface{}) ([]byte, error) { if !ok { return nil, errors.Errorf(`invalid key type %T. *ecdsa.PrivateKey is required`, key) } + return s.sign(payload, privateKey, r) +} - return s.sign(payload, privateKey) +// Sign signs payload with a ECDSA private key +func (s ECDSASigner) Sign(payload []byte, key interface{}) ([]byte, error) { + return s.SignWithRand(payload, key, rand.Reader) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/interface.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/interface.go index 42a10c42e..2ef2bee48 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/interface.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/jwx/jws/sign/interface.go @@ -3,6 +3,7 @@ package sign import ( "crypto/ecdsa" "crypto/rsa" + "io" "github.com/open-policy-agent/opa/internal/jwx/jwa" ) @@ -28,7 +29,7 @@ type RSASigner struct { sign rsaSignFunc } -type ecdsaSignFunc func([]byte, *ecdsa.PrivateKey) ([]byte, error) +type ecdsaSignFunc func([]byte, *ecdsa.PrivateKey, io.Reader) ([]byte, error) // ECDSASigner uses crypto/ecdsa to sign the payloads. type ECDSASigner struct { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/merge/merge.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/merge/merge.go index fa53236d0..16f39350b 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/merge/merge.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/merge/merge.go @@ -8,33 +8,57 @@ package merge // InterfaceMaps returns the result of merging a and b. If a and b cannot be // merged because of conflicting key-value pairs, ok is false. -func InterfaceMaps(a map[string]interface{}, b map[string]interface{}) (c map[string]interface{}, ok bool) { +func InterfaceMaps(a map[string]interface{}, b map[string]interface{}) (map[string]interface{}, bool) { - c = map[string]interface{}{} - for k := range a { - c[k] = a[k] + if a == nil { + return b, true } + if hasConflicts(a, b) { + return nil, false + } + + return merge(a, b), true +} + +func merge(a, b map[string]interface{}) map[string]interface{} { + for k := range b { add := b[k] - exist, ok := c[k] + exist, ok := a[k] + if !ok { + a[k] = add + continue + } + + existObj := exist.(map[string]interface{}) + addObj := add.(map[string]interface{}) + + a[k] = merge(existObj, addObj) + } + + return a +} + +func hasConflicts(a, b map[string]interface{}) bool { + for k := range b { + + add := b[k] + exist, ok := a[k] if !ok { - c[k] = add continue } existObj, existOk := exist.(map[string]interface{}) addObj, addOk := add.(map[string]interface{}) if !existOk || !addOk { - return nil, false + return true } - c[k], ok = InterfaceMaps(existObj, addObj) - if !ok { - return nil, false + if hasConflicts(existObj, addObj) { + return true } } - - return c, true + return false } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/planner/planner.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/planner/planner.go index 5061b1a6c..f3835f477 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/planner/planner.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/planner/planner.go @@ -33,7 +33,7 @@ type Planner struct { modules []*ast.Module // input modules to support queries strings map[string]int // global string constant indices files map[string]int // global file constant indices - externs map[string]struct{} // built-in functions that are required in execution environment + externs map[string]*ast.Builtin // built-in functions that are required in execution environment decls map[string]*ast.Builtin // built-in functions that may be provided in execution environment rules *ruletrie // rules that may be planned funcs *funcstack // functions that have been planned @@ -68,7 +68,7 @@ func New() *Planner { }, strings: map[string]int{}, files: map[string]int{}, - externs: map[string]struct{}{}, + externs: map[string]*ast.Builtin{}, lnext: ir.Unused, vars: newVarstack(map[ast.Var]ir.Local{ ast.InputRootDocument.Value.(ast.Var): ir.Input, @@ -725,6 +725,7 @@ func (p *Planner) planExprCall(e *ast.Expr, iter planiter) error { var relation bool var name string var arity int + var void bool var args []ir.LocalOrConst node := p.rules.Lookup(e.Operator()) @@ -743,8 +744,9 @@ func (p *Planner) planExprCall(e *ast.Expr, iter planiter) error { } else if decl, ok := p.decls[operator]; ok { relation = decl.Relation arity = len(decl.Decl.Args()) + void = decl.Decl.Result() == nil name = operator - p.externs[operator] = struct{}{} + p.externs[operator] = decl } else { return fmt.Errorf("illegal call: unknown operator %q", operator) } @@ -759,7 +761,7 @@ func (p *Planner) planExprCall(e *ast.Expr, iter planiter) error { return p.planExprCallRelation(name, arity, operands, args, iter) } - return p.planExprCallFunc(name, arity, operands, args, iter) + return p.planExprCallFunc(name, arity, void, operands, args, iter) } } @@ -814,7 +816,7 @@ func (p *Planner) planExprCallRelation(name string, arity int, operands []*ast.T }) } -func (p *Planner) planExprCallFunc(name string, arity int, operands []*ast.Term, args []ir.LocalOrConst, iter planiter) error { +func (p *Planner) planExprCallFunc(name string, arity int, void bool, operands []*ast.Term, args []ir.LocalOrConst, iter planiter) error { if len(operands) == arity { // definition: f(x) = y { ... } @@ -828,10 +830,12 @@ func (p *Planner) planExprCallFunc(name string, arity int, operands []*ast.Term, Result: ltarget, }) - p.appendStmt(&ir.NotEqualStmt{ - A: ltarget, - B: ir.Bool(false), - }) + if !void { + p.appendStmt(&ir.NotEqualStmt{ + A: ltarget, + B: ir.Bool(false), + }) + } return iter() }) @@ -1400,6 +1404,12 @@ func (p *Planner) planRef(ref ast.Ref, iter planiter) error { return p.planRefData(virtual, base, ref, 1, iter) } + if ref.Equal(ast.InputRootRef) { + p.appendStmt(&ir.IsDefinedStmt{ + Source: p.vars.GetOrEmpty(ast.InputRootDocument.Value.(ast.Var)), + }) + } + p.ltarget, ok = p.vars.Get(head) if !ok { return fmt.Errorf("illegal ref: unsafe head") @@ -1890,8 +1900,8 @@ func (p *Planner) planExterns() error { p.policy.Static.BuiltinFuncs = make([]*ir.BuiltinFunc, 0, len(p.externs)) - for name := range p.externs { - p.policy.Static.BuiltinFuncs = append(p.policy.Static.BuiltinFuncs, &ir.BuiltinFunc{Name: name}) + for name, decl := range p.externs { + p.policy.Static.BuiltinFuncs = append(p.policy.Static.BuiltinFuncs, &ir.BuiltinFunc{Name: name, Decl: decl.Decl}) } sort.Slice(p.policy.Static.BuiltinFuncs, func(i, j int) bool { @@ -1973,7 +1983,7 @@ func rewrittenVar(vars map[ast.Var]ast.Var, k ast.Var) ast.Var { // into ref's parth that is still to be planned; if the passed ref's vars // allow for optimization using CallDynamicStmt. // -// It's possible iff +// It's possible if all of these conditions hold: // - all vars in ref have been seen // - all ground terms (strings) match some child key on their respective // layer of the ruletrie diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/engine.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/engine.go new file mode 100644 index 000000000..36ee84450 --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/engine.go @@ -0,0 +1,65 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +package opa + +import ( + "context" +) + +// ErrEngineNotFound is returned by LookupEngine if no wasm engine was +// registered by that name. +var ErrEngineNotFound error = &errEngineNotFound{} + +type errEngineNotFound struct{} + +func (*errEngineNotFound) Error() string { return "engine not found" } +func (*errEngineNotFound) Lines() []string { + return []string{ + `WebAssembly runtime not supported in this build.`, + `----------------------------------------------------------------------------------`, + `Please download an OPA binary with Wasm enabled from`, + `https://www.openpolicyagent.org/docs/latest/#running-opa`, + `or build it yourself (with Wasm enabled).`, + `----------------------------------------------------------------------------------`, + } +} + +// Engine repesents a factory for instances of EvalEngine implementations +type Engine interface { + New() EvalEngine +} + +// EvalEngine is the interface implemented by an engine used to eval a policy +type EvalEngine interface { + Init() (EvalEngine, error) + Entrypoints(context.Context) (map[string]int32, error) + WithPolicyBytes([]byte) EvalEngine + WithDataJSON(interface{}) EvalEngine + Eval(context.Context, EvalOpts) (*Result, error) + SetData(context.Context, interface{}) error + SetDataPath(context.Context, []string, interface{}) error + RemoveDataPath(context.Context, []string) error + Close() +} + +var engines = map[string]Engine{} + +// RegisterEngine registers an evaluation engine by its target name. +// Note that the "rego" target is always available. +func RegisterEngine(name string, e Engine) { + if engines[name] != nil { + panic("duplicate engine registration") + } + engines[name] = e +} + +// LookupEngine allows retrieving an engine registered by name +func LookupEngine(name string) (Engine, error) { + e, ok := engines[name] + if !ok { + return nil, ErrEngineNotFound + } + return e, nil +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/nop.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/nop.go deleted file mode 100644 index 2c377c66f..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/nop.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2021 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -// +build !opa_wasm - -package opa - -import ( - "context" - "fmt" - "os" -) - -// OPA is a stub implementation of a opa.OPA. -type OPA struct { -} - -// New unimplemented. -func New() *OPA { - fmt.Fprintf(os.Stderr, `WebAssembly runtime not supported in this build. ----------------------------------------------------------------------------------- -Please download an OPA binay with Wasm enabled from - https://www.openpolicyagent.org/docs/latest/#running-opa -or build it yourself (with Wasm enabled). ----------------------------------------------------------------------------------- -`) - os.Exit(1) - return nil -} - -// WithPolicyBytes unimplemented. -func (o *OPA) WithPolicyBytes(policy []byte) *OPA { - panic("unreachable") -} - -// WithDataJSON unimplemented. -func (o *OPA) WithDataJSON(data interface{}) *OPA { - panic("unreachable") -} - -// Init unimplemented. -func (o *OPA) Init() (*OPA, error) { - panic("unreachable") -} - -// Eval unimplemented. -func (o *OPA) Eval(ctx context.Context, opts EvalOpts) (*Result, error) { - panic("unreachable") -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/opa.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/opa.go deleted file mode 100644 index 2d46145a8..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/opa.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2021 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -// +build opa_wasm - -package opa - -import ( - "context" - - wopa "github.com/open-policy-agent/opa/internal/wasm/sdk/opa" -) - -// OPA is an implementation of the OPA SDK. -type OPA struct { - opa *wopa.OPA -} - -// New constructs a new OPA instance. -func New() *OPA { - return &OPA{opa: wopa.New()} -} - -// WithPolicyBytes configures the compiled policy to load. -func (o *OPA) WithPolicyBytes(policy []byte) *OPA { - o.opa = o.opa.WithPolicyBytes(policy) - return o -} - -// WithDataJSON configures the JSON data to load. -func (o *OPA) WithDataJSON(data interface{}) *OPA { - o.opa = o.opa.WithDataJSON(data) - return o -} - -// Init initializes the OPA instance. -func (o *OPA) Init() (*OPA, error) { - i, err := o.opa.Init() - if err != nil { - return nil, err - } - o.opa = i - return o, nil -} - -// Eval evaluates the policy. -func (o *OPA) Eval(ctx context.Context, opts EvalOpts) (*Result, error) { - evalOptions := wopa.EvalOpts{ - Input: opts.Input, - Metrics: opts.Metrics, - Time: opts.Time, - } - - res, err := o.opa.Eval(ctx, evalOptions) - if err != nil { - return nil, err - } - - return &Result{Result: res.Result}, nil -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/options.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/options.go index 05f55bd45..ec6b2f0b5 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/options.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/rego/opa/options.go @@ -1,9 +1,12 @@ package opa import ( + "io" "time" "github.com/open-policy-agent/opa/metrics" + "github.com/open-policy-agent/opa/topdown/cache" + "github.com/open-policy-agent/opa/topdown/print" ) // Result holds the evaluation result. @@ -13,7 +16,11 @@ type Result struct { // EvalOpts define options for performing an evaluation. type EvalOpts struct { - Input *interface{} - Metrics metrics.Metrics - Time time.Time + Input *interface{} + Metrics metrics.Metrics + Entrypoint int32 + Time time.Time + Seed io.Reader + InterQueryBuiltinCache cache.InterQueryCache + PrintHook print.Hook } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/strings/strings.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/strings/strings.go new file mode 100644 index 000000000..63a71be7d --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/strings/strings.go @@ -0,0 +1,74 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +// Package strings contains helpers to perform string manipulation +package strings + +import ( + "path/filepath" + "strings" + + "github.com/open-policy-agent/opa/internal/lcss" +) + +// TruncateFilePaths truncates the given file paths to conform to the given +// "ideal" width and returns the shortened paths by replacing the middle parts of paths +// with "...", ex: bundle1/.../a/b/policy.rego +func TruncateFilePaths(maxIdealWidth, maxWidth int, path ...string) (map[string]string, int) { + var canShorten [][]byte + + for _, p := range path { + canShorten = append(canShorten, []byte(getPathFromFirstSeparator(p))) + } + + // Find the longest common path segment + var lcs string + if len(canShorten) > 1 { + lcs = string(lcss.LongestCommonSubstring(canShorten...)) + } else { + lcs = string(canShorten[0]) + } + + // Don't just swap in the full LCSS, trim it down to be the least amount of + // characters to reach our "ideal" width boundary giving as much + // detail as possible without going too long. + diff := maxIdealWidth - (maxWidth - len(lcs) + 3) + if diff > 0 { + if diff > len(lcs) { + lcs = "" + } else { + // Favor data on the right hand side of the path + lcs = lcs[:len(lcs)-diff] + } + } + + result := map[string]string{} + for _, p := range path { + result[p] = p + } + + longestLocation := maxWidth + + // Swap in "..." for the longest common path, but if it makes things better + if len(lcs) > 3 { + for path := range result { + result[path] = strings.Replace(path, lcs, "...", 1) + } + + // Drop the overall length down to match our substitution + longestLocation = longestLocation - (len(lcs) - 3) + } + + return result, longestLocation +} + +func getPathFromFirstSeparator(path string) string { + s := filepath.Dir(path) + s = strings.TrimPrefix(s, string(filepath.Separator)) + firstSlash := strings.IndexRune(s, filepath.Separator) + if firstSlash > 0 { + return s[firstSlash+1:] + } + return s +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/reader.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/reader.go index 5d4df041a..1ec265126 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/reader.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/reader.go @@ -143,8 +143,6 @@ func readSections(r io.Reader, m *module.Module) error { bufr := bytes.NewReader(buf) switch id { - case constant.MemorySectionID: - continue // ignore case constant.StartSectionID: if err := readStartSection(bufr, &m.Start); err != nil { return errors.Wrap(err, "start section") @@ -171,14 +169,18 @@ func readSections(r io.Reader, m *module.Module) error { if err := readImportSection(bufr, &m.Import); err != nil { return errors.Wrap(err, "import section") } - case constant.GlobalSectionID: - if err := readGlobalSection(bufr, &m.Global); err != nil { - return errors.Wrap(err, "global section") - } case constant.TableSectionID: if err := readTableSection(bufr, &m.Table); err != nil { return errors.Wrap(err, "table section") } + case constant.MemorySectionID: + if err := readMemorySection(bufr, &m.Memory); err != nil { + return errors.Wrap(err, "memory section") + } + case constant.GlobalSectionID: + if err := readGlobalSection(bufr, &m.Global); err != nil { + return errors.Wrap(err, "global section") + } case constant.FunctionSectionID: if err := readFunctionSection(bufr, &m.Function); err != nil { return errors.Wrap(err, "function section") @@ -390,6 +392,27 @@ func readTableSection(r io.Reader, s *module.TableSection) error { return nil } +func readMemorySection(r io.Reader, s *module.MemorySection) error { + + n, err := leb128.ReadVarUint32(r) + if err != nil { + return err + } + + for i := uint32(0); i < n; i++ { + + var mem module.Memory + + if err := readLimits(r, &mem.Lim); err != nil { + return err + } + + s.Memories = append(s.Memories, mem) + } + + return nil +} + func readGlobalSection(r io.Reader, s *module.GlobalSection) error { n, err := leb128.ReadVarUint32(r) diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/writer.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/writer.go index f153750ce..91e4389a2 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/writer.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/encoding/writer.go @@ -50,6 +50,10 @@ func WriteModule(w io.Writer, module *module.Module) error { return err } + if err := writeMemorySection(w, module.Memory); err != nil { + return err + } + if err := writeGlobalSection(w, module.Global); err != nil { return err } @@ -264,7 +268,31 @@ func writeTableSection(w io.Writer, s module.TableSection) error { } return writeRawSection(w, &buf) +} + +func writeMemorySection(w io.Writer, s module.MemorySection) error { + + if len(s.Memories) == 0 { + return nil + } + + if err := writeByte(w, constant.MemorySectionID); err != nil { + return err + } + var buf bytes.Buffer + + if err := leb128.WriteVarUint32(&buf, uint32(len(s.Memories))); err != nil { + return err + } + + for _, mem := range s.Memories { + if err := writeLimits(&buf, mem.Lim); err != nil { + return err + } + } + + return writeRawSection(w, &buf) } func writeExportSection(w io.Writer, s module.ExportSection) error { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/module/module.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/module/module.go index ca6521b0e..913863c10 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/module/module.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/module/module.go @@ -21,6 +21,7 @@ type ( Import ImportSection Function FunctionSection Table TableSection + Memory MemorySection Element ElementSection Global GlobalSection Export ExportSection @@ -55,6 +56,11 @@ type ( Tables []Table } + // MemorySection represents a Wasm memory section. + MemorySection struct { + Memories []Memory + } + // ElementSection represents a WASM element section. ElementSection struct { Segments []ElementSegment @@ -175,6 +181,11 @@ type ( Lim Limit } + // Memory represents a Wasm memory statement. + Memory struct { + Lim Limit + } + // Global represents a WASM global statement. Global struct { Type types.ValueType diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/bindings.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/bindings.go deleted file mode 100644 index 93d7f125e..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/bindings.go +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -package wasm - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "os" - "strconv" - "time" - - "github.com/bytecodealliance/wasmtime-go" - - "github.com/open-policy-agent/opa/ast" - "github.com/open-policy-agent/opa/metrics" - "github.com/open-policy-agent/opa/topdown" - "github.com/open-policy-agent/opa/topdown/builtins" -) - -func opaFunctions(dispatcher *builtinDispatcher, store *wasmtime.Store) map[string]*wasmtime.Extern { - - i32 := wasmtime.NewValType(wasmtime.KindI32) - - externs := map[string]*wasmtime.Extern{ - "opa_abort": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32}, nil), opaAbort).AsExtern(), - "opa_builtin0": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32, i32}, []*wasmtime.ValType{i32}), dispatcher.Call).AsExtern(), - "opa_builtin1": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32, i32, i32}, []*wasmtime.ValType{i32}), dispatcher.Call).AsExtern(), - "opa_builtin2": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32, i32, i32, i32}, []*wasmtime.ValType{i32}), dispatcher.Call).AsExtern(), - "opa_builtin3": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32, i32, i32, i32, i32}, []*wasmtime.ValType{i32}), dispatcher.Call).AsExtern(), - "opa_builtin4": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32, i32, i32, i32, i32, i32}, []*wasmtime.ValType{i32}), dispatcher.Call).AsExtern(), - "opa_println": wasmtime.NewFunc(store, wasmtime.NewFuncType([]*wasmtime.ValType{i32}, nil), opaPrintln).AsExtern(), - } - - return externs -} - -func opaAbort(caller *wasmtime.Caller, args []wasmtime.Val) ([]wasmtime.Val, *wasmtime.Trap) { - - data := caller.GetExport("memory").Memory().UnsafeData()[args[0].I32():] - - n := bytes.IndexByte(data, 0) - if n == -1 { - panic("invalid abort argument") - } - - panic(abortError{message: string(data[:n])}) -} - -func opaPrintln(caller *wasmtime.Caller, args []wasmtime.Val) ([]wasmtime.Val, *wasmtime.Trap) { - data := caller.GetExport("memory").Memory().UnsafeData()[args[0].I32():] - - n := bytes.IndexByte(data, 0) - if n == -1 { - panic("invalid opa_println argument") - } - - fmt.Fprintln(os.Stderr, string(data[:n])) - return nil, nil -} - -type builtinDispatcher struct { - ctx *topdown.BuiltinContext - builtins map[int32]topdown.BuiltinFunc -} - -func newBuiltinDispatcher() *builtinDispatcher { - return &builtinDispatcher{} -} - -func (d *builtinDispatcher) SetMap(m map[int32]topdown.BuiltinFunc) { - d.builtins = m -} - -// Reset is called in Eval before using the builtinDispatcher. -func (d *builtinDispatcher) Reset(ctx context.Context, ns time.Time) { - if ns.IsZero() { - ns = time.Now() - } - d.ctx = &topdown.BuiltinContext{ - Context: ctx, - Cancel: topdown.NewCancel(), - Runtime: nil, - Time: ast.NumberTerm(json.Number(strconv.FormatInt(ns.UnixNano(), 10))), - Metrics: metrics.New(), - Cache: make(builtins.Cache), - Location: nil, - Tracers: nil, - QueryID: 0, - ParentID: 0, - } - -} - -func (d *builtinDispatcher) Call(caller *wasmtime.Caller, args []wasmtime.Val) (result []wasmtime.Val, trap *wasmtime.Trap) { - - if d.ctx == nil { - panic("unreachable: uninitialized built-in dispatcher context") - } - - if d.builtins == nil { - panic("unreachable: uninitialized built-in dispatcher index") - } - - // Bridge ctx <-> topdown.Cancel - // - // If the ctx is cancelled (deadline expired, or manually cancelled), this will - // cause all topdown-builtins (host functions in wasm terms) to be aborted; if - // they check for this. That check occurrs in certain potentially-long-running - // builtins, currently only net.cidr_expand. - // Other potentially-long-running builtins use the passed context, forwarding - // it into stdlib functions: http.send - // The context-scenario should work out-of-the-box; the topdown.Cancel scenario - // is wired up via the go routine below. - done := make(chan struct{}) - defer close(done) - go func() { - select { - case <-done: - case <-d.ctx.Context.Done(): - d.ctx.Cancel.Cancel() - } - }() - - // We don't care for ctx cancellation in the exports called here: they are - // wasm module exports that the host function can make use of. - // If the ctx is cancelled, and we're evaluation this call stack: - // - // wasm func - // \---> host func [(*builtinDispatcher).Call] - // \---> wasm func [exports] - // - // then the ctx <-> interrupt bridging done in internal/wasm/vm.g will - // already have taken care of signalling the interrupt to the wasm - // instance. The instances checks for interrupts that may have happened - // at the head of every loop, and in the prologue of every function. - // - // See https://docs.wasmtime.dev/api/wasmtime/struct.Store.html#when-are-interrupts-delivered - - exports := getExports(caller) - - var convertedArgs []*ast.Term - - // first two args are the built-in identifier and context structure - for i := 2; i < len(args); i++ { - - x, err := fromWasmValue(exports, args[i].I32()) - if err != nil { - panic(builtinError{err: err}) - } - - convertedArgs = append(convertedArgs, x) - } - - var output *ast.Term - - err := d.builtins[args[0].I32()](*d.ctx, convertedArgs, func(t *ast.Term) error { - output = t - return nil - }) - if err != nil { - if errors.As(err, &topdown.Halt{}) { - var e *topdown.Error - if errors.As(err, &e) && e.Code == topdown.CancelErr { - panic(cancelledError{message: e.Message}) - } - panic(builtinError{err: err}) - } - // non-halt errors are treated as undefined ("non-strict eval" is the only - // mode in wasm), the `output == nil` case below will return NULL - } - - // if output is undefined, return NULL - if output == nil { - return []wasmtime.Val{wasmtime.ValI32(0)}, nil - } - - addr, err := toWasmValue(exports, output) - if err != nil { - panic(builtinError{err: err}) - } - - return []wasmtime.Val{wasmtime.ValI32(addr)}, nil -} - -type exports struct { - Memory *wasmtime.Memory - mallocFn *wasmtime.Func - valueDumpFn *wasmtime.Func - valueParseFn *wasmtime.Func -} - -func getExports(c *wasmtime.Caller) exports { - var e exports - e.Memory = c.GetExport("memory").Memory() - e.mallocFn = c.GetExport("opa_malloc").Func() - e.valueDumpFn = c.GetExport("opa_value_dump").Func() - e.valueParseFn = c.GetExport("opa_value_parse").Func() - return e -} - -func (e exports) Malloc(len int32) (int32, error) { - ptr, err := e.mallocFn.Call(len) - if err != nil { - return 0, err - } - return ptr.(int32), nil -} - -func (e exports) ValueDump(addr int32) (int32, error) { - result, err := e.valueDumpFn.Call(addr) - if err != nil { - return 0, err - } - return result.(int32), nil -} - -func (e exports) ValueParse(addr int32, len int32) (int32, error) { - result, err := e.valueParseFn.Call(addr, len) - if err != nil { - return 0, err - } - return result.(int32), nil -} - -func fromWasmValue(e exports, addr int32) (*ast.Term, error) { - - serialized, err := e.ValueDump(addr) - if err != nil { - return nil, err - } - - data := e.Memory.UnsafeData()[serialized:] - n := bytes.IndexByte(data, 0) - if n < 0 { - return nil, errors.New("invalid serialized value address") - } - - return ast.ParseTerm(string(data[0:n])) -} - -func toWasmValue(e exports, term *ast.Term) (int32, error) { - - raw := []byte(term.String()) - n := int32(len(raw)) - p, err := e.Malloc(n) - if err != nil { - return 0, err - } - - copy(e.Memory.UnsafeData()[p:p+n], raw) - addr, err := e.ValueParse(p, n) - if err != nil { - return 0, err - } - - return addr, nil -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/pool.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/pool.go deleted file mode 100644 index 2e85e2ba0..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/pool.go +++ /dev/null @@ -1,359 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -package wasm - -import ( - "bytes" - "context" - "sync" - - "github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors" - "github.com/open-policy-agent/opa/metrics" -) - -var errNotReady = errors.New(errors.NotReadyErr, "") - -// Pool maintains a pool of WebAssemly VM instances. -type Pool struct { - available chan struct{} - mutex sync.Mutex - dataMtx sync.Mutex - initialized bool - closed bool - policy []byte - parsedData []byte // Parsed parsedData memory segment, used to seed new VM's - parsedDataAddr int32 // Address for parsedData value root, used to seed new VM's - memoryMinPages uint32 - memoryMaxPages uint32 - vms []*VM // All current VM instances, acquired or not. - acquired []bool - pendingReinit *VM - blockedReinit chan struct{} -} - -// NewPool constructs a new pool with the pool and VM configuration provided. -func NewPool(poolSize, memoryMinPages, memoryMaxPages uint32) *Pool { - available := make(chan struct{}, poolSize) - for i := uint32(0); i < poolSize; i++ { - available <- struct{}{} - } - - return &Pool{ - memoryMinPages: memoryMinPages, - memoryMaxPages: memoryMaxPages, - available: available, - vms: make([]*VM, 0), - acquired: make([]bool, 0), - } -} - -// ParsedData returns a reference to the pools parsed external data used to -// initialize new VM's. -func (p *Pool) ParsedData() (int32, []byte) { - p.mutex.Lock() - defer p.mutex.Unlock() - return p.parsedDataAddr, p.parsedData -} - -// Policy returns the raw policy Wasm module used by VM's in the pool -func (p *Pool) Policy() []byte { - p.mutex.Lock() - defer p.mutex.Unlock() - return p.policy -} - -// Size returns the current number of VM's in the pool -func (p *Pool) Size() int { - return len(p.vms) -} - -// Acquire obtains a VM from the pool, waiting if all VMms are in use -// and building one as necessary. Returns either ErrNotReady or -// ErrInternal if an error. -func (p *Pool) Acquire(ctx context.Context, metrics metrics.Metrics) (*VM, error) { - metrics.Timer("wasm_pool_acquire").Start() - defer metrics.Timer("wasm_pool_acquire").Stop() - - select { - case <-ctx.Done(): - return nil, ctx.Err() - case <-p.available: - } - - p.mutex.Lock() - defer p.mutex.Unlock() - - if !p.initialized || p.closed { - return nil, errNotReady - } - - for i, vm := range p.vms { - if !p.acquired[i] { - p.acquired[i] = true - return vm, nil - } - } - - policy, parsedData, parsedDataAddr := p.policy, p.parsedData, p.parsedDataAddr - - p.mutex.Unlock() - vm, err := newVM(vmOpts{ - policy: policy, - data: nil, - parsedData: parsedData, - parsedDataAddr: parsedDataAddr, - memoryMin: p.memoryMinPages, - memoryMax: p.memoryMaxPages, - }) - p.mutex.Lock() - - if err != nil { - p.available <- struct{}{} - return nil, errors.New(errors.InternalErr, err.Error()) - } - - p.acquired = append(p.acquired, true) - p.vms = append(p.vms, vm) - return vm, nil -} - -// Release releases the VM back to the pool. -func (p *Pool) Release(vm *VM, metrics metrics.Metrics) { - metrics.Timer("wasm_pool_release").Start() - defer metrics.Timer("wasm_pool_release").Stop() - - p.mutex.Lock() - - // If the policy data setting is waiting for this one, don't release it back to the general consumption. - // Note the reinit is responsible for pushing to available channel once done with the VM. - if vm == p.pendingReinit { - p.mutex.Unlock() - p.blockedReinit <- struct{}{} - return - } - - for i := range p.vms { - if p.vms[i] == vm { - p.acquired[i] = false - p.mutex.Unlock() - p.available <- struct{}{} - return - } - } - - // VM instance not found anymore, hence pool reconfigured and can release the VM. - - p.mutex.Unlock() - p.available <- struct{}{} -} - -// SetPolicyData re-initializes the vms within the pool with the new policy -// and data. The re-initialization takes place atomically: all new vms -// are constructed in advance before touching the pool. Returns -// either ErrNotReady, ErrInvalidPolicy or ErrInternal if an error -// occurs. -func (p *Pool) SetPolicyData(ctx context.Context, policy []byte, data []byte) error { - p.dataMtx.Lock() - defer p.dataMtx.Unlock() - - p.mutex.Lock() - - if !p.initialized { - vm, err := newVM(vmOpts{ - policy: policy, - data: data, - parsedData: nil, - parsedDataAddr: 0, - memoryMin: p.memoryMinPages, - memoryMax: p.memoryMaxPages, - }) - - if err == nil { - parsedDataAddr, parsedData := vm.cloneDataSegment() - p.memoryMinPages = Pages(uint32(vm.memory.DataSize())) - p.vms = append(p.vms, vm) - p.acquired = append(p.acquired, false) - p.initialized = true - p.policy, p.parsedData, p.parsedDataAddr = policy, parsedData, parsedDataAddr - } else { - err = errors.New(errors.InvalidPolicyOrDataErr, err.Error()) - } - - p.mutex.Unlock() - return err - } - - if p.closed { - p.mutex.Unlock() - return errNotReady - } - - currentPolicy, currentData := p.policy, p.parsedData - p.mutex.Unlock() - - if bytes.Equal(policy, currentPolicy) && bytes.Equal(data, currentData) { - return nil - } - - err := p.setPolicyData(ctx, policy, data) - if err != nil { - return errors.New(errors.InternalErr, err.Error()) - } - - return nil -} - -// SetDataPath will update the current data on the VMs by setting the value at the -// specified path. If an error occurs the instance is still in a valid state, however -// the data will not have been modified. -func (p *Pool) SetDataPath(ctx context.Context, path []string, value interface{}) error { - p.dataMtx.Lock() - defer p.dataMtx.Unlock() - return p.updateVMs(func(vm *VM, opts vmOpts) error { - return vm.SetDataPath(ctx, path, value) - }) -} - -// RemoveDataPath will update the current data on the VMs by removing the value at the -// specified path. If an error occurs the instance is still in a valid state, however -// the data will not have been modified. -func (p *Pool) RemoveDataPath(ctx context.Context, path []string) error { - p.dataMtx.Lock() - defer p.dataMtx.Unlock() - return p.updateVMs(func(vm *VM, _ vmOpts) error { - return vm.RemoveDataPath(ctx, path) - }) -} - -// setPolicyData reinitializes the VMs one at a time. -func (p *Pool) setPolicyData(ctx context.Context, policy []byte, data []byte) error { - return p.updateVMs(func(vm *VM, opts vmOpts) error { - opts.policy = policy - opts.data = data - return vm.SetPolicyData(ctx, opts) - }) -} - -// updateVMs Iterates over each VM, waiting for each to safely acquire them, -// and applies the update function. If the first update succeeds any subsequent -// failures will remove the VM and continue through the pool. Otherwise an error -// will be returned. -func (p *Pool) updateVMs(update func(vm *VM, opts vmOpts) error) error { - var policy []byte - var parsedData []byte - var parsedDataAddr int32 - seedMemorySize := p.memoryMinPages - activated := false - i := 0 - for { - vm := p.Wait(i) - if vm == nil { - // All have been updated or removed. - return nil - } - - err := update(vm, vmOpts{ - policy: policy, - parsedData: parsedData, - parsedDataAddr: parsedDataAddr, - memoryMin: seedMemorySize, - memoryMax: p.memoryMaxPages, // The max pages cannot be changed while updating. - }) - - if err != nil { - // No guarantee about the VM state after an error; hence, remove. - p.remove(i) - p.Release(vm, metrics.New()) - - // After the first successful activation, proceed through all the VMs, ignoring the remaining errors. - if !activated { - return err - } - // Note: Do not increment i when it has been removed! That index is - // replaced by the last VM in the list so we must re-run with the - // same index. - } else { - if !activated { - // Activate the policy and data, now that a single VM has been reset without errors. - activated = true - policy = vm.policy - parsedDataAddr, parsedData = vm.cloneDataSegment() - seedMemorySize = Pages(uint32(vm.memory.DataSize())) - p.activate(policy, parsedData, parsedDataAddr, seedMemorySize) - } - - p.Release(vm, metrics.New()) - - // Only increment on success - i++ - } - } -} - -// Close waits for all the evaluations to finish and then releases the VMs. -func (p *Pool) Close() { - for range p.vms { - <-p.available - } - - p.mutex.Lock() - defer p.mutex.Unlock() - - p.closed = true - p.vms = nil -} - -// Wait steals the i'th VM instance. The VM has to be released afterwards. -func (p *Pool) Wait(i int) *VM { - p.mutex.Lock() - defer p.mutex.Unlock() - - if i == len(p.vms) { - return nil - } - - vm := p.vms[i] - isActive := p.acquired[i] - p.acquired[i] = true - - if isActive { - p.blockedReinit = make(chan struct{}, 1) - p.pendingReinit = vm - } - - p.mutex.Unlock() - - if isActive { - <-p.blockedReinit - } else { - <-p.available - } - - p.mutex.Lock() - p.pendingReinit = nil - return vm -} - -// remove removes the i'th vm. -func (p *Pool) remove(i int) { - p.mutex.Lock() - defer p.mutex.Unlock() - - n := len(p.vms) - if n > 1 { - p.vms[i] = p.vms[n-1] - p.acquired[i] = p.acquired[n-1] - } - - p.vms = p.vms[0 : n-1] - p.acquired = p.acquired[0 : n-1] -} - -func (p *Pool) activate(policy []byte, data []byte, dataAddr int32, minMemoryPages uint32) { - p.mutex.Lock() - defer p.mutex.Unlock() - - p.policy, p.parsedData, p.parsedDataAddr, p.memoryMinPages = policy, data, dataAddr, minMemoryPages -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/vm.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/vm.go deleted file mode 100644 index 5967bbf06..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/vm.go +++ /dev/null @@ -1,646 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -package wasm - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "time" - - "github.com/bytecodealliance/wasmtime-go" - _ "github.com/bytecodealliance/wasmtime-go/build/include" // to include the C headers. - _ "github.com/bytecodealliance/wasmtime-go/build/linux-x86_64" // to include the static lib for linking. - _ "github.com/bytecodealliance/wasmtime-go/build/macos-x86_64" // to include the static lib for linking. - _ "github.com/bytecodealliance/wasmtime-go/build/windows-x86_64" // to include the static lib for linking. - - "github.com/open-policy-agent/opa/ast" - sdk_errors "github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors" - "github.com/open-policy-agent/opa/metrics" - "github.com/open-policy-agent/opa/topdown" -) - -// VM is a wrapper around a Wasm VM instance -type VM struct { - dispatcher *builtinDispatcher - store *wasmtime.Store - instance *wasmtime.Instance // Pointer to avoid unintented destruction (triggering finalizers within). - intHandle *wasmtime.InterruptHandle - policy []byte - memory *wasmtime.Memory - memoryMin uint32 - memoryMax uint32 - entrypointIDs map[string]int32 - baseHeapPtr int32 - dataAddr int32 - evalHeapPtr int32 - eval func(context.Context, int32) error - evalCtxGetResult func(context.Context, int32) (int32, error) - evalCtxNew func(context.Context) (int32, error) - evalCtxSetData func(context.Context, int32, int32) error - evalCtxSetInput func(context.Context, int32, int32) error - evalCtxSetEntrypoint func(context.Context, int32, int32) error - heapPtrGet func(context.Context) (int32, error) - heapPtrSet func(context.Context, int32) error - jsonDump func(context.Context, int32) (int32, error) - jsonParse func(context.Context, int32, int32) (int32, error) - valueDump func(context.Context, int32) (int32, error) - valueParse func(context.Context, int32, int32) (int32, error) - malloc func(context.Context, int32) (int32, error) - free func(context.Context, int32) error - valueAddPath func(context.Context, int32, int32, int32) (int32, error) - valueRemovePath func(context.Context, int32, int32) (int32, error) -} - -type vmOpts struct { - policy []byte - data []byte - parsedData []byte - parsedDataAddr int32 - memoryMin uint32 - memoryMax uint32 -} - -func newVM(opts vmOpts) (*VM, error) { - ctx := context.Background() - v := &VM{} - cfg := wasmtime.NewConfig() - cfg.SetInterruptable(true) - store := wasmtime.NewStore(wasmtime.NewEngineWithConfig(cfg)) - memorytype := wasmtime.NewMemoryType(wasmtime.Limits{Min: opts.memoryMin, Max: opts.memoryMax}) - memory := wasmtime.NewMemory(store, memorytype) - - module, err := wasmtime.NewModule(store.Engine, opts.policy) - if err != nil { - return nil, err - } - - v.dispatcher = newBuiltinDispatcher() - externs := opaFunctions(v.dispatcher, store) - imports := []*wasmtime.Extern{} - for _, imp := range module.Imports() { - if imp.Type().MemoryType() != nil { - imports = append(imports, memory.AsExtern()) - } - if imp.Type().FuncType() == nil { - continue - } - if ext, ok := externs[*imp.Name()]; ok { - imports = append(imports, ext) - } else { - return nil, fmt.Errorf("cannot provide import %s", *imp.Name()) - } - } - - i, err := wasmtime.NewInstance(store, module, imports) - if err != nil { - return nil, err - } - v.intHandle, err = store.InterruptHandle() - if err != nil { - return nil, fmt.Errorf("get interrupt handle: %w", err) - } - - v.store = store - v.instance = i - v.policy = opts.policy - v.memory = memory - v.memoryMin = opts.memoryMin - v.memoryMax = opts.memoryMax - v.entrypointIDs = make(map[string]int32) - v.dataAddr = 0 - v.eval = func(ctx context.Context, a int32) error { return callVoid(ctx, v, "eval", a) } - v.evalCtxGetResult = func(ctx context.Context, a int32) (int32, error) { return call(ctx, v, "opa_eval_ctx_get_result", a) } - v.evalCtxNew = func(ctx context.Context) (int32, error) { return call(ctx, v, "opa_eval_ctx_new") } - v.evalCtxSetData = func(ctx context.Context, a int32, b int32) error { - return callVoid(ctx, v, "opa_eval_ctx_set_data", a, b) - } - v.evalCtxSetInput = func(ctx context.Context, a int32, b int32) error { - return callVoid(ctx, v, "opa_eval_ctx_set_input", a, b) - } - v.evalCtxSetEntrypoint = func(ctx context.Context, a int32, b int32) error { - return callVoid(ctx, v, "opa_eval_ctx_set_entrypoint", a, b) - } - v.free = func(ctx context.Context, a int32) error { return callVoid(ctx, v, "opa_free", a) } - v.heapPtrGet = func(ctx context.Context) (int32, error) { return call(ctx, v, "opa_heap_ptr_get") } - v.heapPtrSet = func(ctx context.Context, a int32) error { return callVoid(ctx, v, "opa_heap_ptr_set", a) } - v.jsonDump = func(ctx context.Context, a int32) (int32, error) { return call(ctx, v, "opa_json_dump", a) } - v.jsonParse = func(ctx context.Context, a int32, b int32) (int32, error) { - return call(ctx, v, "opa_json_parse", a, b) - } - v.valueDump = func(ctx context.Context, a int32) (int32, error) { return call(ctx, v, "opa_value_dump", a) } - v.valueParse = func(ctx context.Context, a int32, b int32) (int32, error) { - return call(ctx, v, "opa_value_parse", a, b) - } - v.malloc = func(ctx context.Context, a int32) (int32, error) { return call(ctx, v, "opa_malloc", a) } - v.valueAddPath = func(ctx context.Context, a int32, b int32, c int32) (int32, error) { - return call(ctx, v, "opa_value_add_path", a, b, c) - } - v.valueRemovePath = func(ctx context.Context, a int32, b int32) (int32, error) { - return call(ctx, v, "opa_value_remove_path", a, b) - } - - // Initialize the heap. - - if _, err := v.malloc(ctx, 0); err != nil { - return nil, err - } - - if v.baseHeapPtr, err = v.getHeapState(ctx); err != nil { - return nil, err - } - - // Optimization for cloning a vm, if provided a parsed data memory buffer - // insert it directly into the new vm's buffer and set pointers accordingly. - // This only works because the placement is deterministic (eg, for a given policy - // the base heap pointer and parsed data layout will always be the same). - if opts.parsedData != nil { - if uint32(memory.DataSize())-uint32(v.baseHeapPtr) < uint32(len(opts.parsedData)) { - delta := uint32(len(opts.parsedData)) - (uint32(memory.DataSize()) - uint32(v.baseHeapPtr)) - memory.Grow(uint(Pages(delta))) // TODO: Check return value? - } - mem := memory.UnsafeData() - for src, dest := 0, v.baseHeapPtr; src < len(opts.parsedData); src, dest = src+1, dest+1 { - mem[dest] = opts.parsedData[src] - } - v.dataAddr = opts.parsedDataAddr - v.evalHeapPtr = v.baseHeapPtr + int32(len(opts.parsedData)) - err := v.setHeapState(ctx, v.evalHeapPtr) - if err != nil { - return nil, err - } - } else if opts.data != nil { - if v.dataAddr, err = v.toRegoJSON(ctx, opts.data, true); err != nil { - return nil, err - } - } - - if v.evalHeapPtr, err = v.getHeapState(ctx); err != nil { - return nil, err - } - - // Construct the builtin id to name mappings. - - val, err := i.GetFunc("builtins").Call() - if err != nil { - return nil, err - } - - builtins, err := v.fromRegoJSON(ctx, val.(int32), true) - if err != nil { - return nil, err - } - - builtinMap := map[int32]topdown.BuiltinFunc{} - - for name, id := range builtins.(map[string]interface{}) { - f := topdown.GetBuiltin(name) - if f == nil { - return nil, fmt.Errorf("builtin '%s' not found", name) - } - - n, err := id.(json.Number).Int64() - if err != nil { - panic(err) - } - - builtinMap[int32(n)] = f - } - - v.dispatcher.SetMap(builtinMap) - - // Extract the entrypoint ID's - val, err = i.GetFunc("entrypoints").Call() - if err != nil { - return nil, err - } - - epMap, err := v.fromRegoJSON(ctx, val.(int32), true) - if err != nil { - return nil, err - } - - for ep, value := range epMap.(map[string]interface{}) { - id, err := value.(json.Number).Int64() - if err != nil { - return nil, err - } - v.entrypointIDs[ep] = int32(id) - } - - return v, nil -} - -// Eval performs an evaluation of the specified entrypoint, with any provided -// input, and returns the resulting value dumped to a string. -func (i *VM) Eval(ctx context.Context, entrypoint int32, input *interface{}, metrics metrics.Metrics, ns time.Time) ([]byte, error) { - metrics.Timer("wasm_vm_eval").Start() - defer metrics.Timer("wasm_vm_eval").Stop() - - metrics.Timer("wasm_vm_eval_prepare_input").Start() - - // Setting the ctx here ensures that it'll be available to builtins that - // make use of it (e.g. `http.send`); and it will spawn a go routine - // cancelling the builtins that use topdown.Cancel, when the context is - // cancelled. - i.dispatcher.Reset(ctx, ns) - - err := i.setHeapState(ctx, i.evalHeapPtr) - if err != nil { - return nil, err - } - - // Parse the input JSON and activate it with the data. - ctxAddr, err := i.evalCtxNew(ctx) - if err != nil { - return nil, err - } - - if i.dataAddr != 0 { - if err := i.evalCtxSetData(ctx, ctxAddr, i.dataAddr); err != nil { - return nil, err - } - } - - if err := i.evalCtxSetEntrypoint(ctx, ctxAddr, int32(entrypoint)); err != nil { - return nil, err - } - - if input != nil { - inputAddr, err := i.toRegoJSON(ctx, *input, false) - if err != nil { - return nil, err - } - - if err := i.evalCtxSetInput(ctx, ctxAddr, inputAddr); err != nil { - return nil, err - } - } - metrics.Timer("wasm_vm_eval_prepare_input").Stop() - - // Evaluate the policy. - metrics.Timer("wasm_vm_eval_execute").Start() - err = i.eval(ctx, ctxAddr) - metrics.Timer("wasm_vm_eval_execute").Stop() - if err != nil { - return nil, err - } - - metrics.Timer("wasm_vm_eval_prepare_result").Start() - resultAddr, err := i.evalCtxGetResult(ctx, ctxAddr) - if err != nil { - return nil, err - } - - serialized, err := i.valueDump(ctx, resultAddr) - if err != nil { - return nil, err - } - - data := i.memory.UnsafeData()[serialized:] - n := bytes.IndexByte(data, 0) - if n < 0 { - n = 0 - } - - metrics.Timer("wasm_vm_eval_prepare_result").Stop() - - // Skip free'ing input and result JSON as the heap will be reset next round anyway. - - return data[0:n], nil -} - -// SetPolicyData Will either update the VM's data or, if the policy changed, -// re-initialize the VM. -func (i *VM) SetPolicyData(ctx context.Context, opts vmOpts) error { - - if !bytes.Equal(opts.policy, i.policy) { - // Swap the instance to a new one, with new policy. - n, err := newVM(opts) - if err != nil { - return err - } - - *i = *n - return nil - } - - i.dataAddr = 0 - - var err error - if err = i.setHeapState(ctx, i.baseHeapPtr); err != nil { - return err - } - - if opts.parsedData != nil { - if uint32(i.memory.DataSize())-uint32(i.baseHeapPtr) < uint32(len(opts.parsedData)) { - delta := uint32(len(opts.parsedData)) - (uint32(i.memory.DataSize()) - uint32(i.baseHeapPtr)) - i.memory.Grow(uint(Pages(delta))) // TODO: Check return value - } - mem := i.memory.UnsafeData() - for src, dest := 0, i.baseHeapPtr; src < len(opts.parsedData); src, dest = src+1, dest+1 { - mem[dest] = opts.parsedData[src] - } - i.dataAddr = opts.parsedDataAddr - i.evalHeapPtr = i.baseHeapPtr + int32(len(opts.parsedData)) - err := i.setHeapState(ctx, i.evalHeapPtr) - if err != nil { - return err - } - } else if opts.data != nil { - if i.dataAddr, err = i.toRegoJSON(ctx, opts.data, true); err != nil { - return err - } - } - - if i.evalHeapPtr, err = i.getHeapState(ctx); err != nil { - return err - } - - return nil -} - -type abortError struct { - message string -} - -type cancelledError struct { - message string -} - -// Println is invoked if the policy WASM code calls opa_println(). -func (i *VM) Println(arg int32) { - data := i.memory.UnsafeData()[arg:] - n := bytes.IndexByte(data, 0) - if n == -1 { - panic("invalid opa_println argument") - } - - fmt.Printf("opa_println(): %s\n", string(data[:n])) -} - -type builtinError struct { - err error -} - -// Entrypoints returns a mapping of entrypoint name to ID for use by Eval(). -func (i *VM) Entrypoints() map[string]int32 { - return i.entrypointIDs -} - -// SetDataPath will update the current data on the VM by setting the value at the -// specified path. If an error occurs the instance is still in a valid state, however -// the data will not have been modified. -func (i *VM) SetDataPath(ctx context.Context, path []string, value interface{}) error { - // Reset the heap ptr before patching the vm to try and keep any - // new allocations safe from subsequent heap resets on eval. - err := i.setHeapState(ctx, i.evalHeapPtr) - if err != nil { - return err - } - - valueAddr, err := i.toRegoJSON(ctx, value, true) - if err != nil { - return err - } - - pathAddr, err := i.toRegoJSON(ctx, path, true) - if err != nil { - return err - } - - result, err := i.valueAddPath(ctx, i.dataAddr, pathAddr, valueAddr) - if err != nil { - return err - } - - // We don't need to free the value, assume it is "owned" as part of the - // overall data object now. - // We do need to free the path - - if err := i.free(ctx, pathAddr); err != nil { - return err - } - - // Update the eval heap pointer to accommodate for any new allocations done - // while patching. - i.evalHeapPtr, err = i.getHeapState(ctx) - if err != nil { - return err - } - - errc := result - if errc != 0 { - return fmt.Errorf("unable to set data value for path %v, err=%d", path, errc) - } - - return nil -} - -// RemoveDataPath will update the current data on the VM by removing the value at the -// specified path. If an error occurs the instance is still in a valid state, however -// the data will not have been modified. -func (i *VM) RemoveDataPath(ctx context.Context, path []string) error { - pathAddr, err := i.toRegoJSON(ctx, path, true) - if err != nil { - return err - } - - errc, err := i.valueRemovePath(ctx, i.dataAddr, pathAddr) - if err != nil { - return err - } - - if err := i.free(ctx, pathAddr); err != nil { - return err - } - - if errc != 0 { - return fmt.Errorf("unable to set data value for path %v, err=%d", path, errc) - } - - return nil -} - -// fromRegoJSON parses serialized JSON from the Wasm memory buffer into -// native go types. -func (i *VM) fromRegoJSON(ctx context.Context, addr int32, free bool) (interface{}, error) { - serialized, err := i.jsonDump(ctx, addr) - if err != nil { - return nil, err - } - - data := i.memory.UnsafeData()[serialized:] - n := bytes.IndexByte(data, 0) - if n < 0 { - n = 0 - } - - // Parse the result into go types. - - decoder := json.NewDecoder(bytes.NewReader(data[0:n])) - decoder.UseNumber() - - var result interface{} - if err := decoder.Decode(&result); err != nil { - return nil, err - } - - if free { - if err := i.free(ctx, serialized); err != nil { - return nil, err - } - } - - return result, nil -} - -// toRegoJSON converts go native JSON to Rego JSON. If the value is -// an AST type it will be dumped using its stringer. -func (i *VM) toRegoJSON(ctx context.Context, v interface{}, free bool) (int32, error) { - var raw []byte - switch v := v.(type) { - case []byte: - raw = v - case *ast.Term: - raw = []byte(v.String()) - case ast.Value: - raw = []byte(v.String()) - default: - var err error - raw, err = json.Marshal(v) - if err != nil { - return 0, err - } - } - - n := int32(len(raw)) - p, err := i.malloc(ctx, n) - if err != nil { - return 0, err - } - - copy(i.memory.UnsafeData()[p:p+n], raw) - - addr, err := i.valueParse(ctx, p, n) - if err != nil { - return 0, err - } - - if free { - if err := i.free(ctx, p); err != nil { - return 0, err - } - } - - return addr, nil -} - -func (i *VM) getHeapState(ctx context.Context) (int32, error) { - return i.heapPtrGet(ctx) -} - -func (i *VM) setHeapState(ctx context.Context, ptr int32) error { - return i.heapPtrSet(ctx, ptr) -} - -func (i *VM) cloneDataSegment() (int32, []byte) { - // The parsed data values sit between the base heap address and end - // at the eval heap pointer address. - srcData := i.memory.UnsafeData()[i.baseHeapPtr:i.evalHeapPtr] - patchedData := make([]byte, len(srcData)) - copy(patchedData, srcData) - return i.dataAddr, patchedData -} - -func call(ctx context.Context, vm *VM, name string, args ...int32) (int32, error) { - res, err := callOrCancel(ctx, vm, name, args...) - if err != nil { - return 0, err - } - return res.(int32), nil -} - -func callVoid(ctx context.Context, vm *VM, name string, args ...int32) error { - _, err := callOrCancel(ctx, vm, name, args...) - return err -} - -func callOrCancel(ctx context.Context, vm *VM, name string, args ...int32) (interface{}, error) { - sl := make([]interface{}, len(args)) - for i := range sl { - sl[i] = args[i] - } - - // `done` is closed when the eval is done; - // `ctxdone` is used to ensure that this goroutine is not running rogue; - // it may interact badly with other calls into this VM because of async - // execution. Concretely, there's no guarantee which branch of done or - // ctx.Done() is selected when they're both good to go. Hence, this may - // interrupt the VM long after _this_ functions is done. By tying them - // together (`<-ctxdone` at the end of callOrCancel, `close(ctxdone)` - // here), we can avoid that. - done := make(chan struct{}) - ctxdone := make(chan struct{}) - go func() { - select { - case <-ctx.Done(): - vm.intHandle.Interrupt() - case <-done: - } - close(ctxdone) - }() - - f := vm.instance.GetFunc(name) - // If this call into the VM ends up calling host functions (builtins not - // implemented in Wasm), and those panic, wasmtime will re-throw them, - // and this is where we deal with that: - res, err := func() (res interface{}, err error) { - defer close(done) - defer func() { - if e := recover(); e != nil { - switch e := e.(type) { - case abortError: - err = sdk_errors.New(sdk_errors.InternalErr, e.message) - case cancelledError: - err = sdk_errors.New(sdk_errors.CancelledErr, e.message) - case builtinError: - err = sdk_errors.New(sdk_errors.InternalErr, e.err.Error()) - default: - panic(e) - } - } - }() - res, err = f.Call(sl...) - return - }() - if err != nil { - // if last err was trap, extract information - var t *wasmtime.Trap - var msg string - if errors.As(err, &t) { - if len(t.Frames()) > 1 { - for _, fr := range t.Frames() { - if fun := fr.FuncName(); fun != nil { - if msg != "" { - msg = *fun + "/" + msg - } else { - msg = *fun - } - } - } - if msg != "" { - msg = "interrupted at " + msg - } - } - return 0, sdk_errors.New(sdk_errors.CancelledErr, msg) - } - return 0, err - } - <-ctxdone // wait for the goroutine that's checking ctx - return res, nil -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/capabilities/capabilities.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/capabilities/capabilities.go index 30ae3e3c8..9f939284e 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/capabilities/capabilities.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/capabilities/capabilities.go @@ -6,10 +6,7 @@ package capabilities -const abiVersion = 1 -const abiMinorVersion = 1 - // ABIVersions returns the ABI versions that this SDK supports func ABIVersions() [][2]int { - return [][2]int{{abiVersion, abiMinorVersion}} + return [][2]int{{1, 1}, {1, 2}} } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/config.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/config.go deleted file mode 100644 index 8c509b9ca..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/config.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -package opa - -import ( - "encoding/json" - "io/ioutil" - - "github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm" - "github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors" -) - -// WithPolicyFile configures a policy file to load. -func (o *OPA) WithPolicyFile(fileName string) *OPA { - policy, err := ioutil.ReadFile(fileName) - if err != nil { - o.configErr = errors.New(errors.InvalidConfigErr, err.Error()) - return o - } - - o.policy = policy - return o -} - -// WithPolicyBytes configures the compiled policy to load. -func (o *OPA) WithPolicyBytes(policy []byte) *OPA { - o.policy = policy - return o -} - -// WithDataFile configures the JSON data file to load. -func (o *OPA) WithDataFile(fileName string) *OPA { - data, err := ioutil.ReadFile(fileName) - if err != nil { - o.configErr = errors.New(errors.InvalidConfigErr, err.Error()) - return o - } - - o.data = data - return o -} - -// WithDataBytes configures the JSON data to load. -func (o *OPA) WithDataBytes(data []byte) *OPA { - o.data = data - return o -} - -// WithDataJSON configures the JSON data to load. -func (o *OPA) WithDataJSON(data interface{}) *OPA { - v, err := json.Marshal(data) - if err != nil { - o.configErr = errors.New(errors.InvalidConfigErr, err.Error()) - return o - } - - o.data = v - return o -} - -// WithMemoryLimits configures the memory limits (in bytes) for a single policy -// evaluation. -func (o *OPA) WithMemoryLimits(min, max uint32) *OPA { - if min < 2*wasm.PageSize { - o.configErr = errors.New(errors.InvalidConfigErr, "too low minimum memory limit") - return o - } - - if max == 0 { - max = 0xffffffff - } - - if min > max { - o.configErr = errors.New(errors.InvalidConfigErr, "too low maximum memory limit") - return o - } - - o.memoryMinPages, o.memoryMaxPages = wasm.Pages(min), wasm.Pages(max) - return o -} - -// WithPoolSize configures the maximum number of simultaneous policy -// evaluations, i.e., the maximum number of underlying WASM instances -// active at any time. The default is the number of logical CPUs -// usable for the process as per runtime.NumCPU(). -func (o *OPA) WithPoolSize(size uint32) *OPA { - if size == 0 { - o.configErr = errors.New(errors.InvalidConfigErr, "pool size") - return o - } - - o.poolSize = size - return o -} - -// WithErrorLogger configures an error logger invoked with all the errors. -func (o *OPA) WithErrorLogger(logger func(error)) *OPA { - o.logError = logger - return o -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors/errors.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors/errors.go deleted file mode 100644 index 12c24c090..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors/errors.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -package errors - -import ( - "errors" - "fmt" -) - -const ( - // InvalidConfigErr is the error code returned if the OPA initialization fails due to an invalid config. - InvalidConfigErr string = "invalid_config" - - // InvalidPolicyOrDataErr is the error code returned if either policy or data is invalid. - InvalidPolicyOrDataErr string = "invalid_policy_or_data" - - // InvalidBundleErr is the error code returned if the bundle loaded is corrupted. - InvalidBundleErr string = "invalid_bundle" - - // NotReadyErr is the error code returned if the OPA instance is not initialized. - NotReadyErr string = "not_ready" - - // InternalErr is the error code returned if the evaluation fails due to an internal error. - InternalErr string = "internal_error" - - // CancelledErr is the error code returned if the evaluation is cancelled. - CancelledErr string = "cancelled" -) - -// Error is the error code type returned by the SDK functions when an error occurs. -type Error struct { - Code string `json:"code"` - Message string `json:"message,omitempty"` -} - -// New returns a new error with the passed code -func New(code, msg string) error { - switch code { - case InvalidConfigErr, InvalidPolicyOrDataErr, InvalidBundleErr, NotReadyErr, InternalErr, CancelledErr: - return &Error{Code: code, Message: msg} - default: - panic("unknown error code: " + code) - } -} - -// IsError returns true if the err is an Error. -func IsError(err error) bool { - return errorHasCode(err, "") -} - -func errorHasCode(err error, code string) bool { - return errors.Is(err, &Error{Code: code}) -} - -// IsCancel returns true if err was caused by cancellation. -func IsCancel(err error) bool { - return errorHasCode(err, CancelledErr) -} - -// Is allows matching error types using errors.Is (see IsCancel). -func (e *Error) Is(target error) bool { - var t *Error - if errors.As(target, &t) { - return (t.Code == "" || e.Code == t.Code) && - (t.Message == "" || e.Message == t.Message) - } - return false -} - -func (e *Error) Error() string { - if e.Message == "" { - return e.Code - } - return fmt.Sprintf("%v: %v", e.Code, e.Message) -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/opa.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/opa.go deleted file mode 100644 index 1eda70faf..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/opa/opa.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -package opa - -import ( - "context" - "encoding/json" - "runtime" - "sync" - "time" - - "github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm" - "github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors" - sdk_errors "github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors" - "github.com/open-policy-agent/opa/metrics" -) - -var errNotReady = errors.New(errors.NotReadyErr, "") - -// OPA executes WebAssembly compiled Rego policies. -type OPA struct { - configErr error // Delayed configuration error, if any. - memoryMinPages uint32 - memoryMaxPages uint32 // 0 means no limit. - poolSize uint32 - pool *wasm.Pool - mutex sync.Mutex // To serialize access to SetPolicy, SetData and Close. - policy []byte // Current policy. - data []byte // Current data. - logError func(error) -} - -// Result holds the evaluation result. -type Result struct { - Result []byte -} - -// New constructs a new OPA SDK instance, ready to be configured with -// With functions. If no policy is provided as a part of -// configuration, policy (and data) needs to be set before invoking -// Eval. Once constructed and configured, the instance needs to be -// initialized before invoking the Eval. -func New() *OPA { - opa := &OPA{ - memoryMinPages: 16, - memoryMaxPages: 0x10000, // 4GB - poolSize: uint32(runtime.GOMAXPROCS(0)), - logError: func(error) {}, - } - - return opa -} - -// Init initializes the SDK instance after the construction and -// configuration. If the configuration is invalid, it returns -// ErrInvalidConfig. -func (o *OPA) Init() (*OPA, error) { - ctx := context.Background() - if o.configErr != nil { - return nil, o.configErr - } - - o.pool = wasm.NewPool(o.poolSize, o.memoryMinPages, o.memoryMaxPages) - - if len(o.policy) != 0 { - if err := o.pool.SetPolicyData(ctx, o.policy, o.data); err != nil { - return nil, err - } - } - - return o, nil -} - -// SetData updates the data for the subsequent Eval calls. Returns -// either ErrNotReady, ErrInvalidPolicyOrData, or ErrInternal if an -// error occurs. -func (o *OPA) SetData(ctx context.Context, v interface{}) error { - if o.pool == nil { - return errNotReady - } - - raw, err := json.Marshal(v) - if err != nil { - return sdk_errors.New(sdk_errors.InvalidPolicyOrDataErr, err.Error()) - } - - o.mutex.Lock() - defer o.mutex.Unlock() - - return o.setPolicyData(ctx, o.policy, raw) -} - -// SetDataPath will update the current data on the VMs by setting the value at the -// specified path. If an error occurs the instance is still in a valid state, however -// the data will not have been modified. -func (o *OPA) SetDataPath(ctx context.Context, path []string, value interface{}) error { - return o.pool.SetDataPath(ctx, path, value) -} - -// RemoveDataPath will update the current data on the VMs by removing the value at the -// specified path. If an error occurs the instance is still in a valid state, however -// the data will not have been modified. -func (o *OPA) RemoveDataPath(ctx context.Context, path []string) error { - return o.pool.RemoveDataPath(ctx, path) -} - -// SetPolicy updates the policy for the subsequent Eval calls. -// Returns either ErrNotReady, ErrInvalidPolicy or ErrInternal if an -// error occurs. -func (o *OPA) SetPolicy(ctx context.Context, p []byte) error { - if o.pool == nil { - return errNotReady - } - - o.mutex.Lock() - defer o.mutex.Unlock() - - return o.setPolicyData(ctx, p, o.data) -} - -// SetPolicyData updates both the policy and data for the subsequent -// Eval calls. Returns either ErrNotReady, ErrInvalidPolicyOrData, or -// ErrInternal if an error occurs. -func (o *OPA) SetPolicyData(ctx context.Context, policy []byte, data *interface{}) error { - if o.pool == nil { - return errNotReady - } - - var raw []byte - if data != nil { - var err error - raw, err = json.Marshal(*data) - if err != nil { - return sdk_errors.New(sdk_errors.InvalidPolicyOrDataErr, err.Error()) - } - } - - o.mutex.Lock() - defer o.mutex.Unlock() - - return o.setPolicyData(ctx, policy, raw) -} - -func (o *OPA) setPolicyData(ctx context.Context, policy []byte, data []byte) error { - if err := o.pool.SetPolicyData(ctx, policy, data); err != nil { - return err - } - - o.policy = policy - o.data = data - return nil -} - -// EvalOpts define options for performing an evaluation -type EvalOpts struct { - Entrypoint int32 - Input *interface{} - Metrics metrics.Metrics - Time time.Time -} - -// Eval evaluates the policy with the given input, returning the -// evaluation results. If no policy was configured at construction -// time nor set after, the function returns ErrNotReady. It returns -// ErrInternal if any other error occurs. -func (o *OPA) Eval(ctx context.Context, opts EvalOpts) (*Result, error) { - if o.pool == nil { - return nil, errNotReady - } - - m := opts.Metrics - if m == nil { - m = metrics.New() - } - - instance, err := o.pool.Acquire(ctx, m) - if err != nil { - return nil, err - } - - defer o.pool.Release(instance, m) - - result, err := instance.Eval(ctx, opts.Entrypoint, opts.Input, m, opts.Time) - if err != nil { - return nil, err - } - - return &Result{Result: result}, nil -} - -// Close waits until all the pending evaluations complete and then -// releases all the resources allocated. Eval will return ErrClosed -// afterwards. -func (o *OPA) Close() { - if o.pool == nil { - return - } - - o.mutex.Lock() - defer o.mutex.Unlock() - - o.pool.Close() -} - -// Entrypoints returns a mapping of entrypoint name to ID for use by Eval() and EvalBool(). -func (o *OPA) Entrypoints(ctx context.Context) (map[string]int32, error) { - instance, err := o.pool.Acquire(ctx, metrics.New()) - if err != nil { - return nil, err - } - - defer o.pool.Release(instance, metrics.New()) - - return instance.Entrypoints(), nil -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/util.go b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/util/util.go similarity index 97% rename from constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/util.go rename to constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/util/util.go index 74cfef3f2..42b81256e 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm/util.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/internal/wasm/util/util.go @@ -2,7 +2,7 @@ // Use of this source code is governed by an Apache2 // license that can be found in the LICENSE file. -package wasm +package util // PageSize represents the WASM page size in bytes. const PageSize = 65535 diff --git a/constraint/vendor/github.com/open-policy-agent/opa/loader/loader.go b/constraint/vendor/github.com/open-policy-agent/opa/loader/loader.go index 1901074e5..d2f7cee6c 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/loader/loader.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/loader/loader.go @@ -15,14 +15,12 @@ import ( "strings" "github.com/ghodss/yaml" - "github.com/pkg/errors" - - "github.com/open-policy-agent/opa/metrics" "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/bundle" fileurl "github.com/open-policy-agent/opa/internal/file/url" "github.com/open-policy-agent/opa/internal/merge" + "github.com/open-policy-agent/opa/metrics" "github.com/open-policy-agent/opa/storage" "github.com/open-policy-agent/opa/storage/inmem" "github.com/open-policy-agent/opa/util" @@ -193,7 +191,7 @@ func (fl fileLoader) AsBundle(path string) (*bundle.Bundle, error) { b, err := br.Read() if err != nil { - err = errors.Wrap(err, fmt.Sprintf("bundle %s", path)) + err = fmt.Errorf("bundle %s: %w", path, err) } return &b, err @@ -345,9 +343,8 @@ func loadOneSchema(path string) (interface{}, error) { } var schema interface{} - err = util.Unmarshal(bs, &schema) - if err != nil { - return nil, errors.Wrap(err, path) + if err := util.Unmarshal(bs, &schema); err != nil { + return nil, fmt.Errorf("%s: %w", path, err) } return schema, nil @@ -591,7 +588,7 @@ func loadKnownTypes(path string, bs []byte, m metrics.Metrics, opts ast.ParserOp if strings.HasSuffix(path, ".tar.gz") { r, err := loadBundleFile(path, bs, m) if err != nil { - err = errors.Wrap(err, fmt.Sprintf("bundle %s", path)) + err = fmt.Errorf("bundle %s: %w", path, err) } return r, err } @@ -646,7 +643,7 @@ func loadJSON(path string, bs []byte, m metrics.Metrics) (interface{}, error) { err := decoder.Decode(&x) m.Timer(metrics.RegoDataParse).Stop() if err != nil { - return nil, errors.Wrap(err, path) + return nil, fmt.Errorf("%s: %w", path, err) } return x, nil } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/metrics/metrics.go b/constraint/vendor/github.com/open-policy-agent/opa/metrics/metrics.go index 061267ae0..3974b794d 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/metrics/metrics.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/metrics/metrics.go @@ -52,6 +52,10 @@ type Metrics interface { json.Marshaler } +type TimerMetrics interface { + Timers() map[string]interface{} +} + type metrics struct { mtx sync.Mutex timers map[string]Timer @@ -155,6 +159,16 @@ func (m *metrics) All() map[string]interface{} { return result } +func (m *metrics) Timers() map[string]interface{} { + m.mtx.Lock() + defer m.mtx.Unlock() + ts := map[string]interface{}{} + for n, t := range m.timers { + ts[m.formatKey(n, t)] = t.Value() + } + return ts +} + func (m *metrics) Clear() { m.mtx.Lock() defer m.mtx.Unlock() @@ -287,3 +301,11 @@ func (c *counter) Add(n uint64) { func (c *counter) Value() interface{} { return atomic.LoadUint64(&c.c) } + +func Statistics(num ...int64) interface{} { + t := newHistogram() + for _, n := range num { + t.Update(n) + } + return t.Value() +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/rego/errors.go b/constraint/vendor/github.com/open-policy-agent/opa/rego/errors.go new file mode 100644 index 000000000..dcc5e2679 --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/rego/errors.go @@ -0,0 +1,24 @@ +package rego + +// HaltError is an error type to return from a custom function implementation +// that will abort the evaluation process (analogous to topdown.Halt). +type HaltError struct { + err error +} + +// Error delegates to the wrapped error +func (h *HaltError) Error() string { + return h.err.Error() +} + +// NewHaltError wraps an error such that the evaluation process will stop +// when it occurs. +func NewHaltError(err error) error { + return &HaltError{err: err} +} + +// ErrorDetails interface is satisfied by an error that provides further +// details. +type ErrorDetails interface { + Lines() []string +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/rego/rego.go b/constraint/vendor/github.com/open-policy-agent/opa/rego/rego.go index 821c535d6..29ed23525 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/rego/rego.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/rego/rego.go @@ -18,6 +18,7 @@ import ( "github.com/open-policy-agent/opa/bundle" bundleUtils "github.com/open-policy-agent/opa/internal/bundle" "github.com/open-policy-agent/opa/internal/compiler/wasm" + "github.com/open-policy-agent/opa/internal/future" "github.com/open-policy-agent/opa/internal/ir" "github.com/open-policy-agent/opa/internal/planner" "github.com/open-policy-agent/opa/internal/rego/opa" @@ -29,16 +30,22 @@ import ( "github.com/open-policy-agent/opa/storage/inmem" "github.com/open-policy-agent/opa/topdown" "github.com/open-policy-agent/opa/topdown/cache" + "github.com/open-policy-agent/opa/topdown/print" "github.com/open-policy-agent/opa/types" "github.com/open-policy-agent/opa/util" ) const ( defaultPartialNamespace = "partial" - targetWasm = "wasm" wasmVarPrefix = "^" ) +// nolint: deadcode,varcheck +const ( + targetWasm = "wasm" + targetRego = "rego" +) + // CompileResult represents the result of compiling a Rego query, zero or more // Rego modules, and arbitrary contextual data into an executable. type CompileResult struct { @@ -91,6 +98,7 @@ type preparedQuery struct { type EvalContext struct { hasInput bool time time.Time + seed io.Reader rawInput *interface{} parsedInput ast.Value metrics metrics.Metrics @@ -104,9 +112,11 @@ type EvalContext struct { disableInlining []ast.Ref parsedUnknowns []*ast.Term indexing bool + earlyExit bool interQueryBuiltinCache cache.InterQueryCache resolvers []refResolver sortSets bool + printHook print.Hook } // EvalOption defines a function to set an option on an EvalConfig @@ -209,6 +219,14 @@ func EvalRuleIndexing(enabled bool) EvalOption { } } +// EvalEarlyExit will disable 'early exit' optimizations for the +// evaluation. This should only be used when tracing in debug mode. +func EvalEarlyExit(enabled bool) EvalOption { + return func(e *EvalContext) { + e.earlyExit = enabled + } +} + // EvalTime sets the wall clock time to use during policy evaluation. // time.now_ns() calls will return this value. func EvalTime(x time.Time) EvalOption { @@ -217,6 +235,14 @@ func EvalTime(x time.Time) EvalOption { } } +// EvalSeed sets a reader that will seed randomization required by built-in functions. +// If a seed is not provided crypto/rand.Reader is used. +func EvalSeed(r io.Reader) EvalOption { + return func(e *EvalContext) { + e.seed = r + } +} + // EvalInterQueryBuiltinCache sets the inter-query cache that built-in functions can utilize // during evaluation. func EvalInterQueryBuiltinCache(c cache.InterQueryCache) EvalOption { @@ -239,6 +265,13 @@ func EvalSortSets(yes bool) EvalOption { } } +// EvalPrintHook sets the object to use for handling print statement outputs. +func EvalPrintHook(ph print.Hook) EvalOption { + return func(e *EvalContext) { + e.printHook = ph + } +} + func (pq preparedQuery) Modules() map[string]*ast.Module { mods := make(map[string]*ast.Module) @@ -274,7 +307,9 @@ func (pq preparedQuery) newEvalContext(ctx context.Context, options []EvalOption parsedUnknowns: pq.r.parsedUnknowns, compiledQuery: compiledQuery{}, indexing: true, + earlyExit: true, resolvers: pq.r.resolvers, + printHook: pq.r.printHook, } for _, o := range options { @@ -321,9 +356,11 @@ func (pq preparedQuery) newEvalContext(ctx context.Context, options []EvalOption // Note that it could still be nil ectx.rawInput = pq.r.rawInput } - ectx.parsedInput, err = pq.r.parseRawInput(ectx.rawInput, ectx.metrics) - if err != nil { - return nil, finishFunc, err + if pq.r.target != targetWasm { + ectx.parsedInput, err = pq.r.parseRawInput(ectx.rawInput, ectx.metrics) + if err != nil { + return nil, finishFunc, err + } } } @@ -374,69 +411,6 @@ func (pq PreparedPartialQuery) Partial(ctx context.Context, options ...EvalOptio return pq.r.partial(ctx, ectx) } -// Result defines the output of Rego evaluation. -type Result struct { - Expressions []*ExpressionValue `json:"expressions"` - Bindings Vars `json:"bindings,omitempty"` -} - -func newResult() Result { - return Result{ - Bindings: Vars{}, - } -} - -// Location defines a position in a Rego query or module. -type Location struct { - Row int `json:"row"` - Col int `json:"col"` -} - -// ExpressionValue defines the value of an expression in a Rego query. -type ExpressionValue struct { - Value interface{} `json:"value"` - Text string `json:"text"` - Location *Location `json:"location"` -} - -func newExpressionValue(expr *ast.Expr, value interface{}) *ExpressionValue { - result := &ExpressionValue{ - Value: value, - } - if expr.Location != nil { - result.Text = string(expr.Location.Text) - result.Location = &Location{ - Row: expr.Location.Row, - Col: expr.Location.Col, - } - } - return result -} - -func (ev *ExpressionValue) String() string { - return fmt.Sprint(ev.Value) -} - -// ResultSet represents a collection of output from Rego evaluation. An empty -// result set represents an undefined query. -type ResultSet []Result - -// Vars represents a collection of variable bindings. The keys are the variable -// names and the values are the binding values. -type Vars map[string]interface{} - -// WithoutWildcards returns a copy of v with wildcard variables removed. -func (v Vars) WithoutWildcards() Vars { - n := Vars{} - for k, v := range v { - if ast.Var(k).IsWildcard() || ast.Var(k).IsGenerated() { - continue - } - n[k] = v - } - return n -} - // Errors represents a collection of errors returned when evaluating Rego. type Errors []error @@ -521,6 +495,8 @@ type Rego struct { dump io.Writer runtime *ast.Term time time.Time + seed io.Reader + capabilities *ast.Capabilities builtinDecls map[string]*ast.Builtin builtinFuncs map[string]*topdown.Builtin unsafeBuiltins map[string]struct{} @@ -533,7 +509,10 @@ type Rego struct { resolvers []refResolver schemaSet *ast.SchemaSet target string // target type (wasm, rego, etc.) - opa *opa.OPA + opa opa.EvalEngine + generateJSON func(*ast.Term, *EvalContext) (interface{}, error) + printHook print.Hook + enablePrintStatements bool } // Function represents a built-in function that is callable in Rego. @@ -825,7 +804,7 @@ func ShallowInlining(yes bool) func(r *Rego) { // rules generated from policy. Synthetic support rules are still namespaced. func SkipPartialNamespace(yes bool) func(r *Rego) { return func(r *Rego) { - r.skipPartialNamespace = true + r.skipPartialNamespace = yes } } @@ -981,6 +960,14 @@ func Time(x time.Time) func(r *Rego) { } } +// Seed sets a reader that will seed randomization required by built-in functions. +// If a seed is not provided crypto/rand.Reader is used. +func Seed(r io.Reader) func(*Rego) { + return func(e *Rego) { + e.seed = r + } +} + // PrintTrace is a helper function to write a human-readable version of the // trace to the writer w. func PrintTrace(w io.Writer, r *Rego) { @@ -1045,6 +1032,15 @@ func Schemas(x *ast.SchemaSet) func(r *Rego) { } } +// Capabilities configures the underlying compiler's capabilities. +// This option is ignored for module compilation if the caller supplies the +// compiler. +func Capabilities(c *ast.Capabilities) func(r *Rego) { + return func(r *Rego) { + r.capabilities = c + } +} + // Target sets the runtime to exercise. func Target(t string) func(r *Rego) { return func(r *Rego) { @@ -1052,6 +1048,30 @@ func Target(t string) func(r *Rego) { } } +// GenerateJSON sets the AST to JSON converter for the results. +func GenerateJSON(f func(*ast.Term, *EvalContext) (interface{}, error)) func(r *Rego) { + return func(r *Rego) { + r.generateJSON = f + } +} + +// PrintHook sets the object to use for handling print statement outputs. +func PrintHook(h print.Hook) func(r *Rego) { + return func(r *Rego) { + r.printHook = h + } +} + +// EnablePrintStatements enables print() calls. If this option is not provided, +// print() calls will be erased from the policy. This option only applies to +// queries and policies that passed as raw strings, i.e., this function will not +// have any affect if the caller supplies the ast.Compiler instance. +func EnablePrintStatements(yes bool) func(r *Rego) { + return func(r *Rego) { + r.enablePrintStatements = yes + } +} + // New returns a new Rego object. func New(options ...func(r *Rego)) *Rego { @@ -1072,10 +1092,10 @@ func New(options ...func(r *Rego)) *Rego { r.compiler = ast.NewCompiler(). WithUnsafeBuiltins(r.unsafeBuiltins). WithBuiltins(r.builtinDecls). - WithDebug(r.dump) - if r.schemaSet != nil { - r.compiler.WithSchemas(r.schemaSet) - } + WithDebug(r.dump). + WithSchemas(r.schemaSet). + WithCapabilities(r.capabilities). + WithEnablePrintStatements(r.enablePrintStatements) } if r.store == nil { @@ -1103,6 +1123,10 @@ func New(options ...func(r *Rego)) *Rego { r.partialNamespace = defaultPartialNamespace } + if r.generateJSON == nil { + r.generateJSON = generateJSON + } + return r } @@ -1127,6 +1151,7 @@ func (r *Rego) Eval(ctx context.Context) (ResultSet, error) { EvalInstrument(r.instrument), EvalTime(r.time), EvalInterQueryBuiltinCache(r.interQueryBuiltinCache), + EvalSeed(r.seed), } for _, qt := range r.queryTracers { @@ -1461,6 +1486,11 @@ func (r *Rego) PrepareForEval(ctx context.Context, opts ...PrepareOption) (Prepa queries := []ast.Body{r.compiledQueries[evalQueryType].query} + e, err := opa.LookupEngine(targetWasm) + if err != nil { + return PreparedEvalQuery{}, err + } + // nolint: staticcheck // SA4006 false positive cr, err := r.compileWasm(modules, queries, evalQueryType) if err != nil { @@ -1475,7 +1505,7 @@ func (r *Rego) PrepareForEval(ctx context.Context, opts ...PrepareOption) (Prepa return PreparedEvalQuery{}, err } - o, err := opa.New().WithPolicyBytes(cr.Bytes).WithDataJSON(data).Init() + o, err := e.New().WithPolicyBytes(cr.Bytes).WithDataJSON(data).Init() if err != nil { _ = txnClose(ctx, err) // Ignore error return PreparedEvalQuery{}, err @@ -1542,11 +1572,6 @@ func (r *Rego) prepare(ctx context.Context, qType queryType, extras []extraStage return err } - r.schemaSet, err = r.schemas() - if err != nil { - return err - } - err = r.loadFiles(ctx, r.txn, r.metrics) if err != nil { return err @@ -1569,12 +1594,24 @@ func (r *Rego) prepare(ctx context.Context, qType queryType, extras []extraStage return err } - r.parsedQuery, err = r.parseQuery(r.metrics) + imports, err := r.prepareImports() if err != nil { return err } - err = r.compileAndCacheQuery(qType, r.parsedQuery, r.metrics, extras) + futureImports := []*ast.Import{} + for _, imp := range imports { + if imp.Path.Value.(ast.Ref).HasPrefix(ast.Ref([]*ast.Term{ast.FutureRootDocument})) { + futureImports = append(futureImports, imp) + } + } + + r.parsedQuery, err = r.parseQuery(futureImports, r.metrics) + if err != nil { + return err + } + + err = r.compileAndCacheQuery(qType, r.parsedQuery, imports, r.metrics, extras) if err != nil { return err } @@ -1692,13 +1729,6 @@ func (r *Rego) parseInput() (ast.Value, error) { return r.parseRawInput(r.rawInput, r.metrics) } -func (r *Rego) schemas() (*ast.SchemaSet, error) { - if r.schemaSet != nil { - return r.schemaSet, nil - } - return nil, nil -} - func (r *Rego) parseRawInput(rawInput *interface{}, m metrics.Metrics) (ast.Value, error) { var input ast.Value @@ -1720,7 +1750,7 @@ func (r *Rego) parseRawInput(rawInput *interface{}, m metrics.Metrics) (ast.Valu return ast.InterfaceToValue(*rawPtr) } -func (r *Rego) parseQuery(m metrics.Metrics) (ast.Body, error) { +func (r *Rego) parseQuery(futureImports []*ast.Import, m metrics.Metrics) (ast.Body, error) { if r.parsedQuery != nil { return r.parsedQuery, nil } @@ -1728,7 +1758,11 @@ func (r *Rego) parseQuery(m metrics.Metrics) (ast.Body, error) { m.Timer(metrics.RegoQueryParse).Start() defer m.Timer(metrics.RegoQueryParse).Stop() - return ast.ParseBody(r.query) + popts, err := future.ParserOptionsFromFutureImports(futureImports) + if err != nil { + return nil, err + } + return ast.ParseBodyWithOpts(r.query, popts) } func (r *Rego) compileModules(ctx context.Context, txn storage.Transaction, m metrics.Metrics) error { @@ -1773,7 +1807,7 @@ func (r *Rego) compileModules(ctx context.Context, txn storage.Transaction, m me return nil } -func (r *Rego) compileAndCacheQuery(qType queryType, query ast.Body, m metrics.Metrics, extras []extraStage) error { +func (r *Rego) compileAndCacheQuery(qType queryType, query ast.Body, imports []*ast.Import, m metrics.Metrics, extras []extraStage) error { m.Timer(metrics.RegoQueryCompile).Start() defer m.Timer(metrics.RegoQueryCompile).Stop() @@ -1782,7 +1816,7 @@ func (r *Rego) compileAndCacheQuery(qType queryType, query ast.Body, m metrics.M return nil } - qc, compiled, err := r.compileQuery(query, m, extras) + qc, compiled, err := r.compileQuery(query, imports, m, extras) if err != nil { return err } @@ -1795,19 +1829,7 @@ func (r *Rego) compileAndCacheQuery(qType queryType, query ast.Body, m metrics.M return nil } -func (r *Rego) compileQuery(query ast.Body, m metrics.Metrics, extras []extraStage) (ast.QueryCompiler, ast.Body, error) { - var pkg *ast.Package - - if r.pkg != "" { - var err error - pkg, err = ast.ParsePackage(fmt.Sprintf("package %v", r.pkg)) - if err != nil { - return nil, nil, err - } - } else { - pkg = r.parsedPackage - } - +func (r *Rego) prepareImports() ([]*ast.Import, error) { imports := r.parsedImports if len(r.imports) > 0 { @@ -1817,10 +1839,25 @@ func (r *Rego) compileQuery(query ast.Body, m metrics.Metrics, extras []extraSta } parsed, err := ast.ParseImports(strings.Join(s, "\n")) if err != nil { - return nil, nil, err + return nil, err } imports = append(imports, parsed...) } + return imports, nil +} + +func (r *Rego) compileQuery(query ast.Body, imports []*ast.Import, m metrics.Metrics, extras []extraStage) (ast.QueryCompiler, ast.Body, error) { + var pkg *ast.Package + + if r.pkg != "" { + var err error + pkg, err = ast.ParsePackage(fmt.Sprintf("package %v", r.pkg)) + if err != nil { + return nil, nil, err + } + } else { + pkg = r.parsedPackage + } qctx := ast.NewQueryContext(). WithPackage(pkg). @@ -1828,7 +1865,8 @@ func (r *Rego) compileQuery(query ast.Body, m metrics.Metrics, extras []extraSta qc := r.compiler.QueryCompiler(). WithContext(qctx). - WithUnsafeBuiltins(r.unsafeBuiltins) + WithUnsafeBuiltins(r.unsafeBuiltins). + WithEnablePrintStatements(r.enablePrintStatements) for _, extra := range extras { qc = qc.WithStageAfter(extra.after, extra.stage) @@ -1855,8 +1893,11 @@ func (r *Rego) eval(ctx context.Context, ectx *EvalContext) (ResultSet, error) { WithInstrumentation(ectx.instrumentation). WithRuntime(r.runtime). WithIndexing(ectx.indexing). + WithEarlyExit(ectx.earlyExit). WithInterQueryBuiltinCache(ectx.interQueryBuiltinCache). - WithStrictBuiltinErrors(r.strictBuiltinErrors) + WithStrictBuiltinErrors(r.strictBuiltinErrors). + WithSeed(ectx.seed). + WithPrintHook(ectx.printHook) if !ectx.time.IsZero() { q = q.WithTime(ectx.time) @@ -1906,16 +1947,19 @@ func (r *Rego) eval(ctx context.Context, ectx *EvalContext) (ResultSet, error) { func (r *Rego) evalWasm(ctx context.Context, ectx *EvalContext) (ResultSet, error) { - var input *interface{} + input := ectx.rawInput if ectx.parsedInput != nil { - i, err := ast.JSON(ectx.parsedInput) - if err != nil { - return nil, err - } + i := interface{}(ectx.parsedInput) input = &i } - - result, err := r.opa.Eval(ctx, opa.EvalOpts{Metrics: r.metrics, Input: input, Time: ectx.time}) + result, err := r.opa.Eval(ctx, opa.EvalOpts{ + Metrics: r.metrics, + Input: input, + Time: ectx.time, + Seed: ectx.seed, + InterQueryBuiltinCache: ectx.interQueryBuiltinCache, + PrintHook: ectx.printHook, + }) if err != nil { return nil, err } @@ -1962,7 +2006,7 @@ func (r *Rego) generateResult(qr topdown.QueryResult, ectx *EvalContext) (Result result := newResult() for k, term := range qr { - v, err := ast.JSONWithOpt(term.Value, ast.JSONOpt{SortSets: ectx.sortSets}) + v, err := r.generateJSON(term, ectx) if err != nil { return result, err } @@ -1982,7 +2026,7 @@ func (r *Rego) generateResult(qr topdown.QueryResult, ectx *EvalContext) (Result } if k, ok := r.capture[expr]; ok { - v, err := ast.JSONWithOpt(qr[k].Value, ast.JSONOpt{SortSets: ectx.sortSets}) + v, err := r.generateJSON(qr[k], ectx) if err != nil { return result, err } @@ -2117,11 +2161,14 @@ func (r *Rego) partial(ctx context.Context, ectx *EvalContext) (*PartialQueries, WithDisableInlining(ectx.disableInlining). WithRuntime(r.runtime). WithIndexing(ectx.indexing). + WithEarlyExit(ectx.earlyExit). WithPartialNamespace(ectx.partialNamespace). WithSkipPartialNamespace(r.skipPartialNamespace). WithShallowInlining(r.shallowInlining). WithInterQueryBuiltinCache(ectx.interQueryBuiltinCache). - WithStrictBuiltinErrors(r.strictBuiltinErrors) + WithStrictBuiltinErrors(r.strictBuiltinErrors). + WithSeed(ectx.seed). + WithPrintHook(ectx.printHook) if !ectx.time.IsZero() { q = q.WithTime(ectx.time) @@ -2186,7 +2233,8 @@ func (r *Rego) rewriteQueryToCaptureValue(qc ast.QueryCompiler, query ast.Body) expr.Terms = ast.Equality.Expr(terms, capture).Terms r.capture[expr] = capture.Value.(ast.Var) case []*ast.Term: - if r.compiler.GetArity(expr.Operator()) == len(terms)-1 { + tpe := r.compiler.TypeEnv.Get(terms[0]) + if !types.Void(tpe) && types.Arity(tpe) == len(terms)-1 { capture = r.generateTermVar() expr.Terms = append(terms, capture) r.capture[expr] = capture.Value.(ast.Var) @@ -2433,6 +2481,14 @@ func parseStringsToRefs(s []string) ([]ast.Ref, error) { // was defined. func finishFunction(name string, bctx topdown.BuiltinContext, result *ast.Term, err error, iter func(*ast.Term) error) error { if err != nil { + var e *HaltError + if errors.As(err, &e) { + return topdown.Halt{Err: &topdown.Error{ + Code: topdown.BuiltinErr, + Message: fmt.Sprintf("%v: %v", name, e.Error()), + Location: bctx.Location, + }} + } return &topdown.Error{ Code: topdown.BuiltinErr, Message: fmt.Sprintf("%v: %v", name, err.Error()), @@ -2458,3 +2514,7 @@ func newFunction(decl *Function, f topdown.BuiltinFunc) func(*Rego) { } } } + +func generateJSON(term *ast.Term, ectx *EvalContext) (interface{}, error) { + return ast.JSONWithOpt(term.Value, ast.JSONOpt{SortSets: ectx.sortSets}) +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/rego/resultset.go b/constraint/vendor/github.com/open-policy-agent/opa/rego/resultset.go new file mode 100644 index 000000000..e60fa6fbe --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/rego/resultset.go @@ -0,0 +1,90 @@ +package rego + +import ( + "fmt" + + "github.com/open-policy-agent/opa/ast" +) + +// ResultSet represents a collection of output from Rego evaluation. An empty +// result set represents an undefined query. +type ResultSet []Result + +// Vars represents a collection of variable bindings. The keys are the variable +// names and the values are the binding values. +type Vars map[string]interface{} + +// WithoutWildcards returns a copy of v with wildcard variables removed. +func (v Vars) WithoutWildcards() Vars { + n := Vars{} + for k, v := range v { + if ast.Var(k).IsWildcard() || ast.Var(k).IsGenerated() { + continue + } + n[k] = v + } + return n +} + +// Result defines the output of Rego evaluation. +type Result struct { + Expressions []*ExpressionValue `json:"expressions"` + Bindings Vars `json:"bindings,omitempty"` +} + +func newResult() Result { + return Result{ + Bindings: Vars{}, + } +} + +// Location defines a position in a Rego query or module. +type Location struct { + Row int `json:"row"` + Col int `json:"col"` +} + +// ExpressionValue defines the value of an expression in a Rego query. +type ExpressionValue struct { + Value interface{} `json:"value"` + Text string `json:"text"` + Location *Location `json:"location"` +} + +func newExpressionValue(expr *ast.Expr, value interface{}) *ExpressionValue { + result := &ExpressionValue{ + Value: value, + } + if expr.Location != nil { + result.Text = string(expr.Location.Text) + result.Location = &Location{ + Row: expr.Location.Row, + Col: expr.Location.Col, + } + } + return result +} + +func (ev *ExpressionValue) String() string { + return fmt.Sprint(ev.Value) +} + +// Allowed is a helper method that'll return true if all of these conditions hold: +// - the result set only has one element +// - there is only one expression in the result set's only element +// - that expression has the value `true` +// - there are no bindings. +// +// If bindings are present, this will yield `false`: it would be a pitfall to +// return `true` for a query like `data.authz.allow = x`, which always has result +// set element with value true, but could also have a binding `x: false`. +func (rs ResultSet) Allowed() bool { + if len(rs) == 1 && len(rs[0].Bindings) == 0 { + if exprs := rs[0].Expressions; len(exprs) == 1 { + if b, ok := exprs[0].Value.(bool); ok { + return b + } + } + } + return false +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/nop.go b/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/nop.go deleted file mode 100644 index 9fe98cb85..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/nop.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -// +build !opa_wasm - -package wasm - -import ( - "context" - "errors" - - "github.com/open-policy-agent/opa/ast" - "github.com/open-policy-agent/opa/resolver" -) - -// Resolver is a stub implementation of a resolver.Resolver. -type Resolver struct { -} - -// Entrypoints unimplemented. -func (r *Resolver) Entrypoints() []ast.Ref { - panic("unreachable") -} - -// Close unimplemented. -func (r *Resolver) Close() { - panic("unreachable") -} - -// Eval unimplemented. -func (r *Resolver) Eval(context.Context, resolver.Input) (resolver.Result, error) { - - panic("unreachable") -} - -// SetData unimplemented. -func (r *Resolver) SetData(context.Context, interface{}) error { - panic("unreachable") -} - -// SetDataPath unimplemented. -func (r *Resolver) SetDataPath(context.Context, []string, interface{}) error { - panic("unreachable") -} - -// RemoveDataPath unimplemented. -func (r *Resolver) RemoveDataPath(context.Context, []string) error { - panic("unreachable") -} - -// New unimplemented. Will always return an error. -func New([]ast.Ref, []byte, interface{}) (*Resolver, error) { - return nil, errors.New("WebAssembly runtime not supported in this build") -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/wasm.go b/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/wasm.go index 1b3dd0c52..9c13879dc 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/wasm.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/resolver/wasm/wasm.go @@ -2,8 +2,6 @@ // Use of this source code is governed by an Apache2 // license that can be found in the LICENSE file. -// +build opa_wasm - package wasm import ( @@ -11,16 +9,19 @@ import ( "fmt" "strconv" - "github.com/open-policy-agent/opa/internal/wasm/sdk/opa" - "github.com/open-policy-agent/opa/ast" + "github.com/open-policy-agent/opa/internal/rego/opa" "github.com/open-policy-agent/opa/resolver" ) // New creates a new Resolver instance which is using the Wasm module // policy for the given entrypoint ref. func New(entrypoints []ast.Ref, policy []byte, data interface{}) (*Resolver, error) { - o, err := opa.New(). + e, err := opa.LookupEngine("wasm") + if err != nil { + return nil, err + } + o, err := e.New(). WithPolicyBytes(policy). WithDataJSON(data). Init() @@ -63,7 +64,7 @@ func New(entrypoints []ast.Ref, policy []byte, data interface{}) (*Resolver, err type Resolver struct { entrypoints []ast.Ref entrypointIDs *ast.ValueMap - o *opa.OPA + o opa.EvalEngine } // Entrypoints returns a list of entrypoints this resolver is configured to diff --git a/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/inmem.go b/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/inmem.go index 4c91f4166..b69180049 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/inmem.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/inmem.go @@ -239,11 +239,8 @@ func (db *store) underlying(txn storage.Transaction) (*transaction, error) { return underlying, nil } -var doesNotExistMsg = "document does not exist" var rootMustBeObjectMsg = "root must be object" var rootCannotBeRemovedMsg = "root cannot be removed" -var outOfRangeMsg = "array index out of range" -var arrayIndexTypeMsg = "array index must be integer" func invalidPatchError(f string, a ...interface{}) *storage.Error { return &storage.Error{ @@ -251,19 +248,3 @@ func invalidPatchError(f string, a ...interface{}) *storage.Error { Message: fmt.Sprintf(f, a...), } } - -func notFoundError(path storage.Path) *storage.Error { - return notFoundErrorHint(path, doesNotExistMsg) -} - -func notFoundErrorHint(path storage.Path, hint string) *storage.Error { - return notFoundErrorf("%v: %v", path.String(), hint) -} - -func notFoundErrorf(f string, a ...interface{}) *storage.Error { - msg := fmt.Sprintf(f, a...) - return &storage.Error{ - Code: storage.NotFoundErr, - Message: msg, - } -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/txn.go b/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/txn.go index f97de6b0b..2f52972bd 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/txn.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/storage/inmem/txn.go @@ -11,6 +11,8 @@ import ( "github.com/open-policy-agent/opa/internal/deepcopy" "github.com/open-policy-agent/opa/storage" + "github.com/open-policy-agent/opa/storage/internal/errors" + "github.com/open-policy-agent/opa/storage/internal/ptr" ) // transaction implements the low-level read/write operations on the in-memory @@ -82,7 +84,7 @@ func (txn *transaction) Write(op storage.PatchOp, path storage.Path, value inter if update.path.Equal(path) { if update.remove { if op != storage.AddOp { - return notFoundError(path) + return errors.NewNotFoundError(path) } } txn.updates.Remove(curr) @@ -103,7 +105,7 @@ func (txn *transaction) Write(op storage.PatchOp, path storage.Path, value inter // existing update is mutated. if path.HasPrefix(update.path) { if update.remove { - return notFoundError(path) + return errors.NewNotFoundError(path) } suffix := path[len(update.path):] newUpdate, err := newUpdate(update.value, op, suffix, 0, value) @@ -174,7 +176,7 @@ func (txn *transaction) Commit() (result storage.TriggerEvent) { func (txn *transaction) Read(path storage.Path) (interface{}, error) { if !txn.write { - return ptr(txn.db.data, path) + return ptr.Ptr(txn.db.data, path) } merge := []*update{} @@ -185,9 +187,9 @@ func (txn *transaction) Read(path storage.Path) (interface{}, error) { if path.HasPrefix(update.path) { if update.remove { - return nil, notFoundError(path) + return nil, errors.NewNotFoundError(path) } - return ptr(update.value, path[len(update.path):]) + return ptr.Ptr(update.value, path[len(update.path):]) } if update.path.HasPrefix(path) { @@ -195,7 +197,7 @@ func (txn *transaction) Read(path storage.Path) (interface{}, error) { } } - data, err := ptr(txn.db.data, path) + data, err := ptr.Ptr(txn.db.data, path) if err != nil { return nil, err @@ -234,12 +236,12 @@ func (txn *transaction) GetPolicy(id string) ([]byte, error) { if !update.remove { return update.value, nil } - return nil, notFoundErrorf("policy id %q", id) + return nil, errors.NewNotFoundErrorf("policy id %q", id) } if exist, ok := txn.db.policies[id]; ok { return exist, nil } - return nil, notFoundErrorf("policy id %q", id) + return nil, errors.NewNotFoundErrorf("policy id %q", id) } func (txn *transaction) UpsertPolicy(id string, bs []byte) error { @@ -282,7 +284,7 @@ func newUpdate(data interface{}, op storage.PatchOp, path storage.Path, idx int, return newUpdateArray(data, op, path, idx, value) case nil, bool, json.Number, string: - return nil, notFoundError(path) + return nil, errors.NewNotFoundError(path) } return nil, &storage.Error{ @@ -304,7 +306,7 @@ func newUpdateArray(data []interface{}, op storage.PatchOp, path storage.Path, i return &update{path[:len(path)-1], false, cpy}, nil } - pos, err := validateArrayIndex(data, path[idx], path) + pos, err := ptr.ValidateArrayIndex(data, path[idx], path) if err != nil { return nil, err } @@ -330,7 +332,7 @@ func newUpdateArray(data []interface{}, op storage.PatchOp, path storage.Path, i } } - pos, err := validateArrayIndex(data, path[idx], path) + pos, err := ptr.ValidateArrayIndex(data, path[idx], path) if err != nil { return nil, err } @@ -344,7 +346,7 @@ func newUpdateObject(data map[string]interface{}, op storage.PatchOp, path stora switch op { case storage.ReplaceOp, storage.RemoveOp: if _, ok := data[path[idx]]; !ok { - return nil, notFoundError(path) + return nil, errors.NewNotFoundError(path) } } return &update{path, op == storage.RemoveOp, value}, nil @@ -354,13 +356,13 @@ func newUpdateObject(data map[string]interface{}, op storage.PatchOp, path stora return newUpdate(data, op, path, idx+1, value) } - return nil, notFoundError(path) + return nil, errors.NewNotFoundError(path) } func (u *update) Apply(data interface{}) interface{} { if len(u.path) == 0 { return u.value } - parent, err := ptr(data, u.path[:len(u.path)-1]) + parent, err := ptr.Ptr(data, u.path[:len(u.path)-1]) if err != nil { panic(err) } @@ -388,38 +390,3 @@ func (u *update) Relative(path storage.Path) *update { cpy.path = cpy.path[len(path):] return &cpy } - -func ptr(data interface{}, path storage.Path) (interface{}, error) { - node := data - for i := range path { - key := path[i] - switch curr := node.(type) { - case map[string]interface{}: - var ok bool - if node, ok = curr[key]; !ok { - return nil, notFoundError(path) - } - case []interface{}: - pos, err := validateArrayIndex(curr, key, path) - if err != nil { - return nil, err - } - node = curr[pos] - default: - return nil, notFoundError(path) - } - } - - return node, nil -} - -func validateArrayIndex(arr []interface{}, s string, path storage.Path) (int, error) { - idx, err := strconv.Atoi(s) - if err != nil { - return 0, notFoundErrorHint(path, arrayIndexTypeMsg) - } - if idx < 0 || idx >= len(arr) { - return 0, notFoundErrorHint(path, outOfRangeMsg) - } - return idx, nil -} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/storage/internal/errors/errors.go b/constraint/vendor/github.com/open-policy-agent/opa/storage/internal/errors/errors.go new file mode 100644 index 000000000..74792f63e --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/storage/internal/errors/errors.go @@ -0,0 +1,32 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +// Package errors contains reusable error-related code for the storage layer. +package errors + +import ( + "fmt" + + "github.com/open-policy-agent/opa/storage" +) + +const ArrayIndexTypeMsg = "array index must be integer" +const DoesNotExistMsg = "document does not exist" +const OutOfRangeMsg = "array index out of range" + +func NewNotFoundError(path storage.Path) *storage.Error { + return NewNotFoundErrorWithHint(path, DoesNotExistMsg) +} + +func NewNotFoundErrorWithHint(path storage.Path, hint string) *storage.Error { + return NewNotFoundErrorf("%v: %v", path.String(), hint) +} + +func NewNotFoundErrorf(f string, a ...interface{}) *storage.Error { + msg := fmt.Sprintf(f, a...) + return &storage.Error{ + Code: storage.NotFoundErr, + Message: msg, + } +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/storage/internal/ptr/ptr.go b/constraint/vendor/github.com/open-policy-agent/opa/storage/internal/ptr/ptr.go new file mode 100644 index 000000000..6778805fa --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/storage/internal/ptr/ptr.go @@ -0,0 +1,48 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +// Package ptr provides utilities for pointer operations using storage layer paths. +package ptr + +import ( + "strconv" + + "github.com/open-policy-agent/opa/storage" + "github.com/open-policy-agent/opa/storage/internal/errors" +) + +func Ptr(data interface{}, path storage.Path) (interface{}, error) { + node := data + for i := range path { + key := path[i] + switch curr := node.(type) { + case map[string]interface{}: + var ok bool + if node, ok = curr[key]; !ok { + return nil, errors.NewNotFoundError(path) + } + case []interface{}: + pos, err := ValidateArrayIndex(curr, key, path) + if err != nil { + return nil, err + } + node = curr[pos] + default: + return nil, errors.NewNotFoundError(path) + } + } + + return node, nil +} + +func ValidateArrayIndex(arr []interface{}, s string, path storage.Path) (int, error) { + idx, err := strconv.Atoi(s) + if err != nil { + return 0, errors.NewNotFoundErrorWithHint(path, errors.ArrayIndexTypeMsg) + } + if idx < 0 || idx >= len(arr) { + return 0, errors.NewNotFoundErrorWithHint(path, errors.OutOfRangeMsg) + } + return idx, nil +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/storage/path.go b/constraint/vendor/github.com/open-policy-agent/opa/storage/path.go index c1b514ccb..02ef4cab4 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/storage/path.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/storage/path.go @@ -127,7 +127,7 @@ func (p Path) Ref(head *ast.Term) (ref ast.Ref) { for i := range p { idx, err := strconv.ParseInt(p[i], 10, 64) if err == nil { - ref[i+1] = ast.IntNumberTerm(int(idx)) + ref[i+1] = ast.UIntNumberTerm(uint64(idx)) } else { ref[i+1] = ast.StringTerm(p[i]) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/aggregates.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/aggregates.go index 706d8afc9..63d60f56d 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/aggregates.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/aggregates.go @@ -206,6 +206,46 @@ func builtinAny(a ast.Value) (ast.Value, error) { } } +func builtinMember(_ BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { + containee := args[0] + switch c := args[1].Value.(type) { + case ast.Set: + return iter(ast.BooleanTerm(c.Contains(containee))) + case *ast.Array: + ret := false + c.Until(func(v *ast.Term) bool { + if v.Value.Compare(containee.Value) == 0 { + ret = true + } + return ret + }) + return iter(ast.BooleanTerm(ret)) + case ast.Object: + ret := false + c.Until(func(_, v *ast.Term) bool { + if v.Value.Compare(containee.Value) == 0 { + ret = true + } + return ret + }) + return iter(ast.BooleanTerm(ret)) + } + return iter(ast.BooleanTerm(false)) +} + +func builtinMemberWithKey(_ BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { + key, val := args[0], args[1] + switch c := args[2].Value.(type) { + case interface{ Get(*ast.Term) *ast.Term }: + ret := false + if act := c.Get(key); act != nil { + ret = act.Value.Compare(val.Value) == 0 + } + return iter(ast.BooleanTerm(ret)) + } + return iter(ast.BooleanTerm(false)) +} + func init() { RegisterFunctionalBuiltin1(ast.Count.Name, builtinCount) RegisterFunctionalBuiltin1(ast.Sum.Name, builtinSum) @@ -215,4 +255,6 @@ func init() { RegisterFunctionalBuiltin1(ast.Sort.Name, builtinSort) RegisterFunctionalBuiltin1(ast.Any.Name, builtinAny) RegisterFunctionalBuiltin1(ast.All.Name, builtinAll) + RegisterBuiltinFunc(ast.Member.Name, builtinMember) + RegisterBuiltinFunc(ast.MemberWithKey.Name, builtinMemberWithKey) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/builtins.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/builtins.go index e2578a568..425363812 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/builtins.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/builtins.go @@ -6,14 +6,16 @@ package topdown import ( "context" + "encoding/binary" "fmt" "io" - - "github.com/open-policy-agent/opa/metrics" - "github.com/open-policy-agent/opa/topdown/cache" + "math/rand" "github.com/open-policy-agent/opa/ast" + "github.com/open-policy-agent/opa/metrics" "github.com/open-policy-agent/opa/topdown/builtins" + "github.com/open-policy-agent/opa/topdown/cache" + "github.com/open-policy-agent/opa/topdown/print" ) type ( @@ -34,7 +36,7 @@ type ( BuiltinContext struct { Context context.Context // request context that was passed when query started Metrics metrics.Metrics // metrics registry for recording built-in specific metrics - Seed io.Reader // randomization seed + Seed io.Reader // randomization source Time *ast.Term // wall clock time Cancel Cancel // atomic value that signals evaluation to halt Runtime *ast.Term // runtime information on the OPA instance @@ -46,6 +48,8 @@ type ( TraceEnabled bool // indicates whether tracing is enabled for the evaluation QueryID uint64 // identifies query being evaluated ParentID uint64 // identifies parent of query being evaluated + PrintHook print.Hook // provides callback function to use for printing + rand *rand.Rand // randomization source for non-security-sensitive operations } // BuiltinFunc defines an interface for implementing built-in functions. @@ -56,6 +60,25 @@ type ( BuiltinFunc func(bctx BuiltinContext, operands []*ast.Term, iter func(*ast.Term) error) error ) +// Rand returns a random number generator based on the Seed for this built-in +// context. The random number will be re-used across multiple calls to this +// function. If a random number generator cannot be created, an error is +// returned. +func (bctx *BuiltinContext) Rand() (*rand.Rand, error) { + + if bctx.rand != nil { + return bctx.rand, nil + } + + seed, err := readInt64(bctx.Seed) + if err != nil { + return nil, err + } + + bctx.rand = rand.New(rand.NewSource(seed)) + return bctx.rand, nil +} + // RegisterBuiltinFunc adds a new built-in function to the evaluation engine. func RegisterBuiltinFunc(name string, f BuiltinFunc) { builtinFunctions[name] = builtinErrorWrapper(name, f) @@ -168,3 +191,12 @@ func handleBuiltinErr(name string, loc *ast.Location, err error) error { } } } + +func readInt64(r io.Reader) (int64, error) { + bs := make([]byte, 8) + n, err := io.ReadFull(r, bs) + if n != len(bs) || err != nil { + return 0, err + } + return int64(binary.BigEndian.Uint64(bs)), nil +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/cache/cache.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/cache/cache.go index 006084095..5e32b39c7 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/cache/cache.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/cache/cache.go @@ -123,7 +123,13 @@ func (c *cache) UpdateConfig(config *Config) { func (c *cache) unsafeInsert(k ast.Value, v InterQueryCacheValue) (dropped int) { size := v.SizeInBytes() limit := c.maxSizeBytes() + if limit > 0 { + if size > limit { + dropped++ + return dropped + } + for key := c.l.Front(); key != nil && (c.usage+size > limit); key = key.Next() { dropKey := key.Value.(ast.Value) c.unsafeDelete(dropKey) diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/cidr.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/cidr.go index 7c0e72f6c..2123698c7 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/cidr.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/cidr.go @@ -101,7 +101,8 @@ func builtinNetCIDRContains(a, b ast.Value) (ast.Value, error) { return nil, fmt.Errorf("not a valid textual representation of an IP address or CIDR: %s", string(bStr)) } - // We can determine if cidr A contains cidr B iff A contains the starting address of B and the last address in B. + // We can determine if cidr A contains cidr B if and only if A contains + // the starting address of B and the last address in B. cidrContained := false if cidrnetA.Contains(cidrnetB.IP) { // Only spend time calculating the last IP if the starting IP is already verified to be in cidr A diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/copypropagation/copypropagation.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/copypropagation/copypropagation.go index 20aac0f79..2dee16f09 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/copypropagation/copypropagation.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/copypropagation/copypropagation.go @@ -222,25 +222,34 @@ func (t bindingPlugTransform) Transform(x interface{}) (interface{}, error) { } } -func (t bindingPlugTransform) plugBindingsVar(pctx *plugContext, v ast.Var) (result ast.Value) { +func (t bindingPlugTransform) plugBindingsVar(pctx *plugContext, v ast.Var) ast.Value { - result = v + var result ast.Value = v // Apply union-find to remove redundant variables from input. - if root, ok := pctx.uf.Find(v); ok { + root, ok := pctx.uf.Find(v) + if ok { result = root.Value() } // Apply binding list to substitute remaining vars. - if v, ok := result.(ast.Var); ok { - if b := pctx.removedEqs.Get(v); b != nil { - if !pctx.negated || b.IsGround() { - result = b - } - } + v, ok = result.(ast.Var) + if !ok { + return result + } + b := pctx.removedEqs.Get(v) + if b == nil { + return result + } + if pctx.negated && !b.IsGround() { + return result } - return result + if r, ok := b.(ast.Ref); ok && r.OutputVars().Contains(v) { + return result + } + + return b } func (t bindingPlugTransform) plugBindingsRef(pctx *plugContext, v ast.Ref) ast.Ref { @@ -290,10 +299,12 @@ func (p *CopyPropagator) updateBindings(pctx *plugContext, expr *ast.Expr) bool } } else if expr.IsCall() { terms := expr.Terms.([]*ast.Term) - output := terms[len(terms)-1] - if k, ok := output.Value.(ast.Var); ok && !p.livevars.Contains(k) && !pctx.headvars.Contains(k) { - pctx.removedEqs.Put(k, ast.CallTerm(terms[:len(terms)-1]...).Value) - return false + if p.compiler.GetArity(expr.Operator()) == len(terms)-2 { // with captured output + output := terms[len(terms)-1] + if k, ok := output.Value.(ast.Var); ok && !p.livevars.Contains(k) && !pctx.headvars.Contains(k) { + pctx.removedEqs.Put(k, ast.CallTerm(terms[:len(terms)-1]...).Value) + return false + } } } return !isNoop(expr) diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/crypto.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/crypto.go index fe28c641d..502eb2648 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/crypto.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/crypto.go @@ -5,6 +5,7 @@ package topdown import ( + "bytes" "crypto/md5" "crypto/sha1" "crypto/sha256" @@ -18,6 +19,7 @@ import ( "strings" "github.com/open-policy-agent/opa/ast" + "github.com/open-policy-agent/opa/internal/jwx/jwk" "github.com/open-policy-agent/opa/topdown/builtins" "github.com/open-policy-agent/opa/util" ) @@ -29,70 +31,63 @@ const ( // blockTypeCertificateRequest indicates this PEM block contains a certificate // request. Exported for tests. blockTypeCertificateRequest = "CERTIFICATE REQUEST" + // blockTypeRSAPrivateKey indicates this PEM block contains a RSA private key. + // Exported for tests. + blockTypeRSAPrivateKey = "RSA PRIVATE KEY" + // blockTypeRSAPrivateKey indicates this PEM block contains a RSA private key. + // Exported for tests. + blockTypePrivateKey = "PRIVATE KEY" ) func builtinCryptoX509ParseCertificates(a ast.Value) (ast.Value, error) { - input, err := builtins.StringOperand(a, 1) if err != nil { return nil, err } - // data to be passed to x509.ParseCertificates - bytes := []byte(input) - - // if the input is not a PEM string, attempt to decode b64 - if str := string(input); !strings.HasPrefix(str, "-----BEGIN CERTIFICATE-----") { - bytes, err = base64.StdEncoding.DecodeString(str) - if err != nil { - return nil, err - } + certs, err := getX509CertsFromString(string(input)) + if err != nil { + return nil, err } - // attempt to decode input as PEM data - p, rest := pem.Decode(bytes) - if p != nil && p.Type != blockTypeCertificate { - return nil, fmt.Errorf("PEM data contains '%s', expected CERTIFICATE", p.Type) - } - if p != nil { - // if PEM decoded as a valid certificate, use its data as the DER input - bytes = p.Bytes - } + return ast.InterfaceToValue(certs) +} - // check for more certificates in the chain - if p != nil && len(rest) > 0 { - var p *pem.Block - for { - p, rest = pem.Decode(rest) - if p == nil { - // finish when no more PEM data is read - break - } - // reject any data that isn't exclusively certificates - if p.Type != blockTypeCertificate { - return nil, fmt.Errorf("PEM data contains '%s', expected CERTIFICATE", p.Type) - } - bytes = append(bytes, p.Bytes...) - } - } +func builtinCryptoX509ParseAndVerifyCertificates( + _ BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { - certs, err := x509.ParseCertificates(bytes) + a := args[0].Value + input, err := builtins.StringOperand(a, 1) if err != nil { - return nil, err + return err } - bs, err := json.Marshal(certs) + invalid := ast.ArrayTerm( + ast.BooleanTerm(false), + ast.NewTerm(ast.NewArray()), + ) + + certs, err := getX509CertsFromString(string(input)) if err != nil { - return nil, err + return iter(invalid) } - var x interface{} + verified, err := verifyX509CertificateChain(certs) + if err != nil { + return iter(invalid) + } - if err := util.UnmarshalJSON(bs, &x); err != nil { - return nil, err + value, err := ast.InterfaceToValue(verified) + if err != nil { + return err } - return ast.InterfaceToValue(x) + valid := ast.ArrayTerm( + ast.BooleanTerm(true), + ast.NewTerm(value), + ) + + return iter(valid) } func builtinCryptoX509ParseCertificateRequest(a ast.Value) (ast.Value, error) { @@ -138,6 +133,43 @@ func builtinCryptoX509ParseCertificateRequest(a ast.Value) (ast.Value, error) { return ast.InterfaceToValue(x) } +func builtinCryptoX509ParseRSAPrivateKey(_ BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { + + a := args[0].Value + input, err := builtins.StringOperand(a, 1) + if err != nil { + return err + } + + // get the raw private key + rawKey, err := getRSAPrivateKeyFromString(string(input)) + if err != nil { + return err + } + + rsaPrivateKey, err := jwk.New(rawKey) + if err != nil { + return err + } + + jsonKey, err := json.Marshal(rsaPrivateKey) + if err != nil { + return err + } + + var x interface{} + if err := util.UnmarshalJSON(jsonKey, &x); err != nil { + return err + } + + value, err := ast.InterfaceToValue(x) + if err != nil { + return err + } + + return iter(ast.NewTerm(value)) +} + func hashHelper(a ast.Value, h func(ast.String) string) (ast.Value, error) { s, err := builtins.StringOperand(a, 1) if err != nil { @@ -160,10 +192,122 @@ func builtinCryptoSha256(a ast.Value) (ast.Value, error) { func init() { RegisterFunctionalBuiltin1(ast.CryptoX509ParseCertificates.Name, builtinCryptoX509ParseCertificates) + RegisterBuiltinFunc(ast.CryptoX509ParseAndVerifyCertificates.Name, builtinCryptoX509ParseAndVerifyCertificates) RegisterFunctionalBuiltin1(ast.CryptoMd5.Name, builtinCryptoMd5) RegisterFunctionalBuiltin1(ast.CryptoSha1.Name, builtinCryptoSha1) RegisterFunctionalBuiltin1(ast.CryptoSha256.Name, builtinCryptoSha256) RegisterFunctionalBuiltin1(ast.CryptoX509ParseCertificateRequest.Name, builtinCryptoX509ParseCertificateRequest) + RegisterBuiltinFunc(ast.CryptoX509ParseRSAPrivateKey.Name, builtinCryptoX509ParseRSAPrivateKey) +} + +func verifyX509CertificateChain(certs []*x509.Certificate) ([]*x509.Certificate, error) { + if len(certs) < 2 { + return nil, builtins.NewOperandErr(1, "must supply at least two certificates to be able to verify") + } + + // first cert is the root + roots := x509.NewCertPool() + roots.AddCert(certs[0]) + + // all other certs except the last are intermediates + intermediates := x509.NewCertPool() + for i := 1; i < len(certs)-1; i++ { + intermediates.AddCert(certs[i]) + } + + // last cert is the leaf + leaf := certs[len(certs)-1] + + // verify the cert chain back to the root + verifyOpts := x509.VerifyOptions{ + Roots: roots, + Intermediates: intermediates, + } + chains, err := leaf.Verify(verifyOpts) + if err != nil { + return nil, err + } + + return chains[0], nil +} + +func getX509CertsFromString(certs string) ([]*x509.Certificate, error) { + // if the input is PEM handle that + if strings.HasPrefix(certs, "-----BEGIN") { + return getX509CertsFromPem([]byte(certs)) + } + + // assume input is base64 if not PEM + b64, err := base64.StdEncoding.DecodeString(certs) + if err != nil { + return nil, err + } + + // handle if the decoded base64 contains PEM rather than the expected DER + if bytes.HasPrefix(b64, []byte("-----BEGIN")) { + return getX509CertsFromPem(b64) + } + + // otherwise assume the contents are DER + return x509.ParseCertificates(b64) +} + +func getX509CertsFromPem(pemBlocks []byte) ([]*x509.Certificate, error) { + var decodedCerts []byte + for len(pemBlocks) > 0 { + p, r := pem.Decode(pemBlocks) + if p != nil && p.Type != blockTypeCertificate { + return nil, fmt.Errorf("PEM block type is '%s', expected %s", p.Type, blockTypeCertificate) + } + + if p == nil { + break + } + + pemBlocks = r + decodedCerts = append(decodedCerts, p.Bytes...) + } + + return x509.ParseCertificates(decodedCerts) +} + +func getRSAPrivateKeyFromString(key string) (interface{}, error) { + // if the input is PEM handle that + if strings.HasPrefix(key, "-----BEGIN") { + return getRSAPrivateKeyFromPEM([]byte(key)) + } + + // assume input is base64 if not PEM + b64, err := base64.StdEncoding.DecodeString(key) + if err != nil { + return nil, err + } + + return getRSAPrivateKeyFromPEM(b64) +} + +func getRSAPrivateKeyFromPEM(pemBlocks []byte) (interface{}, error) { + + // decode the pem into the Block struct + p, _ := pem.Decode(pemBlocks) + if p == nil { + return nil, fmt.Errorf("failed to parse PEM block containing the key") + } + + // if the key is in PKCS1 format + if p.Type == blockTypeRSAPrivateKey { + return x509.ParsePKCS1PrivateKey(p.Bytes) + } + + // if the key is in PKCS8 format + if p.Type == blockTypePrivateKey { + return x509.ParsePKCS8PrivateKey(p.Bytes) + } + + // unsupported key format + return nil, fmt.Errorf("PEM block type is '%s', expected %s or %s", p.Type, blockTypeRSAPrivateKey, + blockTypePrivateKey) + } // addCACertsFromFile adds CA certificates from filePath into the given pool. diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/eval.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/eval.go index 9b8fabe5c..3dbe15db5 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/eval.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/eval.go @@ -14,6 +14,7 @@ import ( "github.com/open-policy-agent/opa/topdown/builtins" "github.com/open-policy-agent/opa/topdown/cache" "github.com/open-policy-agent/opa/topdown/copypropagation" + "github.com/open-policy-agent/opa/topdown/print" ) type evalIterator func(*eval) error @@ -35,6 +36,16 @@ type builtinErrors struct { errs []error } +// earlyExitError is used to abort iteration where early exit is possible +type earlyExitError struct { + prev error + e *eval +} + +func (ee *earlyExitError) Error() string { + return fmt.Sprintf("%v: early exit", ee.e.query) +} + type eval struct { ctx context.Context metrics metrics.Metrics @@ -49,6 +60,7 @@ type eval struct { queryCompiler ast.QueryCompiler index int indexing bool + earlyExit bool bindings *bindings store storage.Store baseCache *baseCache @@ -77,6 +89,8 @@ type eval struct { genvarid int runtime *ast.Term builtinErrors *builtinErrors + printHook print.Hook + findOne bool } func (e *eval) Run(iter evalIterator) error { @@ -89,17 +103,32 @@ func (e *eval) Run(iter evalIterator) error { }) } +func (e *eval) String() string { + s := strings.Builder{} + e.string(&s) + return s.String() +} + +func (e *eval) string(s *strings.Builder) { + fmt.Fprintf(s, "') +} + func (e *eval) builtinFunc(name string) (*ast.Builtin, BuiltinFunc, bool) { decl, ok := ast.BuiltinMap[name] - if !ok { - bi, ok := e.builtins[name] + if ok { + f, ok := builtinFunctions[name] if ok { - return bi.Decl, bi.Func, true + return decl, f, true } } else { - f, ok := builtinFunctions[name] + bi, ok := e.builtins[name] if ok { - return decl, f, true + return bi.Decl, bi.Func, true } } return nil, nil, false @@ -111,6 +140,7 @@ func (e *eval) closure(query ast.Body) *eval { cpy.query = query cpy.queryID = cpy.queryIDFact.Next() cpy.parent = e + cpy.findOne = false return &cpy } @@ -121,6 +151,7 @@ func (e *eval) child(query ast.Body) *eval { cpy.queryID = cpy.queryIDFact.Next() cpy.bindings = newBindings(cpy.queryID, e.instr) cpy.parent = e + cpy.findOne = false return &cpy } @@ -155,7 +186,11 @@ func (e *eval) traceEnter(x ast.Node) { } func (e *eval) traceExit(x ast.Node) { - e.traceEvent(ExitOp, x, "", nil) + var msg string + if e.findOne { + msg = "early" + } + e.traceEvent(ExitOp, x, msg, nil) } func (e *eval) traceEval(x ast.Node) { @@ -263,7 +298,21 @@ func (e *eval) evalExpr(iter evalIterator) error { } if e.index >= len(e.query) { - return iter(e) + err := iter(e) + if err != nil { + ee, ok := err.(*earlyExitError) + if !ok { + return err + } + if !e.findOne { + return nil + } + return &earlyExitError{prev: ee, e: e} + } + if e.findOne && !e.partial() { // we've found one! + return &earlyExitError{e: e} + } + return nil } expr := e.query[e.index] @@ -389,7 +438,7 @@ func (e *eval) evalWith(iter evalIterator) error { } // Disable inlining on all references in the expression so the result of - // partial evaluation has the same semamntics w/ the with statements + // partial evaluation has the same semantics w/ the with statements // preserved. ast.WalkRefs(expr, func(x ast.Ref) bool { disable = append(disable, x.GroundPrefix()) @@ -443,8 +492,7 @@ func (e *eval) evalWith(iter evalIterator) error { return err } -func (e *eval) evalWithPush(input *ast.Term, data *ast.Term, targets []ast.Ref, disable []ast.Ref) (*ast.Term, *ast.Term) { - +func (e *eval) evalWithPush(input, data *ast.Term, targets, disable []ast.Ref) (*ast.Term, *ast.Term) { var oldInput *ast.Term if input != nil { @@ -467,7 +515,7 @@ func (e *eval) evalWithPush(input *ast.Term, data *ast.Term, targets []ast.Ref, return oldInput, oldData } -func (e *eval) evalWithPop(input *ast.Term, data *ast.Term) { +func (e *eval) evalWithPop(input, data *ast.Term) { e.inliningControl.PopDisable() e.targetStack.Pop() e.virtualCache.Pop() @@ -618,10 +666,21 @@ func (e *eval) evalCall(terms []*ast.Term, iter unifyIterator) error { ref := terms[0].Value.(ast.Ref) if ref[0].Equal(ast.DefaultRootDocument) { + var ir *ast.IndexResult + var err error + if e.partial() { + ir, err = e.getRules(ref, nil) + } else { + ir, err = e.getRules(ref, terms[1:]) + } + if err != nil { + return err + } eval := evalFunc{ e: e, ref: ref, terms: terms, + ir: ir, } return eval.eval(iter) } @@ -654,6 +713,7 @@ func (e *eval) evalCall(terms []*ast.Term, iter unifyIterator) error { TraceEnabled: e.traceEnabled, QueryID: e.queryID, ParentID: parentID, + PrintHook: e.printHook, } eval := evalBuiltin{ @@ -1025,23 +1085,34 @@ func (e *eval) buildComprehensionCacheObject(x *ast.ObjectComprehension, keys [] } func (e *eval) biunifyComprehensionPartial(a, b *ast.Term, b1, b2 *bindings, swap bool, iter unifyIterator) error { - cpyA := a.Copy() - - // Capture bindings available to the comprehension. We will add expressions - // to the comprehension body that ensure the comprehension body is safe. - // Currently this process adds _all_ bindings (even if they are not - // needed.) Eventually we may want to make the logic a bit smarter. - var extras []*ast.Expr - - err := b1.Iter(e.caller.bindings, func(k, v *ast.Term) error { - extras = append(extras, ast.Equality.Expr(k, v)) - return nil - }) - + var err error + cpyA, err := e.amendComprehension(a, b1) if err != nil { return err } + if ast.IsComprehension(b.Value) { + b, err = e.amendComprehension(b, b2) + if err != nil { + return err + } + } + + // The other term might need to be plugged so include the bindings. The + // bindings for the comprehension term are saved (for compatibility) but + // the eventual plug operation on the comprehension will be a no-op. + if !swap { + return e.saveUnify(cpyA, b, b1, b2, iter) + } + + return e.saveUnify(b, cpyA, b2, b1, iter) +} + +// amendComprehension captures bindings available to the comprehension, +// and used within its term or body. +func (e *eval) amendComprehension(a *ast.Term, b1 *bindings) (*ast.Term, error) { + cpyA := a.Copy() + // Namespace the variables in the body to avoid collision when the final // queries returned by partial evaluation. var body *ast.Body @@ -1054,23 +1125,22 @@ func (e *eval) biunifyComprehensionPartial(a, b *ast.Term, b1, b2 *bindings, swa case *ast.ObjectComprehension: body = &a.Body default: - return fmt.Errorf("illegal comprehension %T", a) + return nil, fmt.Errorf("illegal comprehension %T", a) } - for _, e := range extras { - body.Append(e) + vars := a.Vars() + err := b1.Iter(e.caller.bindings, func(k, v *ast.Term) error { + if vars.Contains(k.Value.(ast.Var)) { + body.Append(ast.Equality.Expr(k, v)) + } + return nil + }) + if err != nil { + return nil, err } b1.Namespace(cpyA, e.caller.bindings) - - // The other term might need to be plugged so include the bindings. The - // bindings for the comprehension term are saved (for compatibility) but - // the eventual plug operation on the comprehension will be a no-op. - if !swap { - return e.saveUnify(cpyA, b, b1, b2, iter) - } - - return e.saveUnify(b, cpyA, b2, b1, iter) + return cpyA, nil } func (e *eval) biunifyComprehensionArray(x *ast.ArrayComprehension, b *ast.Term, b1, b2 *bindings, iter unifyIterator) error { @@ -1233,7 +1303,7 @@ func (e *eval) saveInlinedNegatedExprs(exprs []*ast.Expr, iter unifyIterator) er return err } -func (e *eval) getRules(ref ast.Ref) (*ast.IndexResult, error) { +func (e *eval) getRules(ref ast.Ref, args []*ast.Term) (*ast.IndexResult, error) { e.instr.startTimer(evalOpRuleIndex) defer e.instr.stopTimer(evalOpRuleIndex) @@ -1245,48 +1315,78 @@ func (e *eval) getRules(ref ast.Ref) (*ast.IndexResult, error) { var result *ast.IndexResult var err error if e.indexing { - result, err = index.Lookup(e) + result, err = index.Lookup(&evalResolver{e: e, args: args}) } else { - result, err = index.AllRules(e) + result, err = index.AllRules(&evalResolver{e: e}) } - if err != nil { return nil, err } - var msg string + result.EarlyExit = result.EarlyExit && e.earlyExit + + var msg strings.Builder if len(result.Rules) == 1 { - msg = "(matched 1 rule)" + msg.WriteString("(matched 1 rule") } else { - var b strings.Builder - b.Grow(len("(matched NNNN rules)")) - b.WriteString("(matched ") - b.WriteString(strconv.FormatInt(int64(len(result.Rules)), 10)) - b.WriteString(" rules)") - msg = b.String() - } - e.traceIndex(e.query[e.index], msg, &ref) + msg.Grow(len("(matched NNNN rules)")) + msg.WriteString("(matched ") + msg.WriteString(strconv.Itoa(len(result.Rules))) + msg.WriteString(" rules") + } + if result.EarlyExit { + msg.WriteString(", early exit") + } + msg.WriteRune(')') + e.traceIndex(e.query[e.index], msg.String(), &ref) return result, err } func (e *eval) Resolve(ref ast.Ref) (ast.Value, error) { - e.instr.startTimer(evalOpResolve) + return (&evalResolver{e: e}).Resolve(ref) +} + +type evalResolver struct { + e *eval + args []*ast.Term +} + +func (e *evalResolver) Resolve(ref ast.Ref) (ast.Value, error) { + e.e.instr.startTimer(evalOpResolve) + + if e.e.inliningControl.Disabled(ref, true) || e.e.saveSet.Contains(ast.NewTerm(ref), nil) { + e.e.instr.stopTimer(evalOpResolve) + return nil, ast.UnknownValueErr{} + } - if e.inliningControl.Disabled(ref, true) || e.saveSet.Contains(ast.NewTerm(ref), nil) { - e.instr.stopTimer(evalOpResolve) + // Lookup of function argument values works by using the `args` ref[0], + // where the ast.Number in ref[1] references the function argument of + // that number. The callsite-local arguments are passed in e.args, + // indexed by argument index. + if ref[0].Equal(ast.FunctionArgRootDocument) { + v, ok := ref[1].Value.(ast.Number) + if ok { + i, ok := v.Int() + if ok && i >= 0 && i < len(e.args) { + e.e.instr.stopTimer(evalOpResolve) + plugged := e.e.bindings.PlugNamespaced(e.args[i], e.e.caller.bindings) + return plugged.Value, nil + } + } + e.e.instr.stopTimer(evalOpResolve) return nil, ast.UnknownValueErr{} } if ref[0].Equal(ast.InputRootDocument) { - if e.input != nil { - v, err := e.input.Value.Find(ref[1:]) + if e.e.input != nil { + v, err := e.e.input.Value.Find(ref[1:]) if err != nil { v = nil } - e.instr.stopTimer(evalOpResolve) + e.e.instr.stopTimer(evalOpResolve) return v, nil } - e.instr.stopTimer(evalOpResolve) + e.e.instr.stopTimer(evalOpResolve) return nil, nil } @@ -1294,16 +1394,16 @@ func (e *eval) Resolve(ref ast.Ref) (ast.Value, error) { var repValue ast.Value - if e.data != nil { - if v, err := e.data.Value.Find(ref[1:]); err == nil { + if e.e.data != nil { + if v, err := e.e.data.Value.Find(ref[1:]); err == nil { repValue = v } else { repValue = nil } } - if e.targetStack.Prefixed(ref) { - e.instr.stopTimer(evalOpResolve) + if e.e.targetStack.Prefixed(ref) { + e.e.instr.stopTimer(evalOpResolve) return repValue, nil } @@ -1314,11 +1414,11 @@ func (e *eval) Resolve(ref ast.Ref) (ast.Value, error) { // example, a 2MB JSON value can take upwards of 30 millisceonds to convert. // We cache the result of conversion here in case the same base document is // being read multiple times during evaluation. - realValue := e.baseCache.Get(ref) + realValue := e.e.baseCache.Get(ref) if realValue != nil { - e.instr.counterIncr(evalOpBaseCacheHit) + e.e.instr.counterIncr(evalOpBaseCacheHit) if repValue == nil { - e.instr.stopTimer(evalOpResolve) + e.e.instr.stopTimer(evalOpResolve) return realValue, nil } var ok bool @@ -1327,13 +1427,13 @@ func (e *eval) Resolve(ref ast.Ref) (ast.Value, error) { err = mergeConflictErr(ref[0].Location) } } else { - e.instr.counterIncr(evalOpBaseCacheMiss) - merged, err = e.resolveReadFromStorage(ref, repValue) + e.e.instr.counterIncr(evalOpBaseCacheMiss) + merged, err = e.e.resolveReadFromStorage(ref, repValue) } - e.instr.stopTimer(evalOpResolve) + e.e.instr.stopTimer(evalOpResolve) return merged, err } - e.instr.stopTimer(evalOpResolve) + e.e.instr.stopTimer(evalOpResolve) return nil, fmt.Errorf("illegal ref") } @@ -1365,22 +1465,41 @@ func (e *eval) resolveReadFromStorage(ref ast.Ref, a ast.Value) (ast.Value, erro } if len(path) == 0 { - obj := blob.(map[string]interface{}) - if len(obj) > 0 { - cpy := make(map[string]interface{}, len(obj)-1) - for k, v := range obj { - if string(ast.SystemDocumentKey) == k { - continue + switch obj := blob.(type) { + case map[string]interface{}: + if len(obj) > 0 { + cpy := make(map[string]interface{}, len(obj)-1) + for k, v := range obj { + if string(ast.SystemDocumentKey) != k { + cpy[k] = v + } } - cpy[k] = v + blob = cpy + } + case ast.Object: + if obj.Len() > 0 { + cpy := ast.NewObject() + if err := obj.Iter(func(k *ast.Term, v *ast.Term) error { + if !ast.SystemDocumentKey.Equal(k.Value) { + cpy.Insert(k, v) + } + return nil + }); err != nil { + return nil, err + } + blob = cpy + } - blob = cpy } } - v, err = ast.InterfaceToValue(blob) - if err != nil { - return nil, err + var ok bool + v, ok = blob.(ast.Value) + if !ok { + v, err = ast.InterfaceToValue(blob) + if err != nil { + return nil, err + } } } @@ -1428,7 +1547,7 @@ func (e *eval) getDeclArgsLen(x *ast.Expr) (int, error) { return len(bi.Decl.Args()), nil } - ir, err := e.getRules(operator) + ir, err := e.getRules(operator, nil) if err != nil { return -1, err } else if ir == nil || ir.Empty() { @@ -1454,7 +1573,7 @@ func (e evalBuiltin) eval(iter unifyIterator) error { operands[i] = e.e.bindings.Plug(e.terms[i]) } - numDeclArgs := len(e.bi.Decl.Args()) + numDeclArgs := len(e.bi.Decl.FuncArgs().Args) e.e.instr.startTimer(evalOpBuiltinCall) @@ -1464,7 +1583,9 @@ func (e evalBuiltin) eval(iter unifyIterator) error { var err error - if len(operands) == numDeclArgs { + if e.bi.Decl.Result() == nil { + err = iter() + } else if len(operands) == numDeclArgs { if output.Value.Compare(ast.Boolean(false)) != 0 { err = iter() } @@ -1481,11 +1602,11 @@ func (e evalBuiltin) eval(iter unifyIterator) error { }) if err != nil { - if h, ok := err.(Halt); !ok { + if t, ok := err.(Halt); ok { + err = t.Err + } else { e.e.builtinErrors.errs = append(e.e.builtinErrors.errs, err) err = nil - } else { - err = h.Err } } @@ -1497,31 +1618,43 @@ type evalFunc struct { e *eval ref ast.Ref terms []*ast.Term + ir *ast.IndexResult } func (e evalFunc) eval(iter unifyIterator) error { - ir, err := e.e.getRules(e.ref) - if err != nil { - return err - } - // default functions aren't supported: // https://github.com/open-policy-agent/opa/issues/2445 - if len(ir.Rules) == 0 { + if len(e.ir.Rules) == 0 { return nil } - argCount := len(ir.Rules[0].Head.Args) + argCount := len(e.ir.Rules[0].Head.Args) - if len(ir.Else) > 0 && e.e.unknown(e.e.query[e.e.index], e.e.bindings) { + if len(e.ir.Else) > 0 && e.e.unknown(e.e.query[e.e.index], e.e.bindings) { // Partial evaluation of ordered rules is not supported currently. Save the // expression and continue. This could be revisited in the future. return e.e.saveCall(argCount, e.terms, iter) } + if e.e.partial() && (e.e.inliningControl.shallow || e.e.inliningControl.Disabled(e.ref, false)) { + // check if the function definitions, or any of the arguments + // contain something unknown + unknown := e.e.unknown(e.ref, e.e.bindings) + for i := 1; !unknown && i <= argCount; i++ { + unknown = e.e.unknown(e.terms[i], e.e.bindings) + } + if unknown { + return e.partialEvalSupport(argCount, iter) + } + } + return suppressEarlyExit(e.evalValue(iter, argCount, e.ir.EarlyExit)) +} + +func (e evalFunc) evalValue(iter unifyIterator, argCount int, findOne bool) error { var cacheKey ast.Ref var hit bool + var err error if !e.e.partial() { cacheKey, hit, err = e.evalCache(argCount, iter) if err != nil { @@ -1533,14 +1666,14 @@ func (e evalFunc) eval(iter unifyIterator) error { var prev *ast.Term - for i := range ir.Rules { - next, err := e.evalOneRule(iter, ir.Rules[i], cacheKey, prev) + for _, rule := range e.ir.Rules { + next, err := e.evalOneRule(iter, rule, cacheKey, prev, findOne) if err != nil { return err } if next == nil { - for _, rule := range ir.Else[ir.Rules[i]] { - next, err = e.evalOneRule(iter, rule, cacheKey, prev) + for _, erule := range e.ir.Else[rule] { + next, err = e.evalOneRule(iter, erule, cacheKey, prev, findOne) if err != nil { return err } @@ -1585,9 +1718,10 @@ func (e evalFunc) evalCache(argCount int, iter unifyIterator) (ast.Ref, bool, er return cacheKey, false, nil } -func (e evalFunc) evalOneRule(iter unifyIterator, rule *ast.Rule, cacheKey ast.Ref, prev *ast.Term) (*ast.Term, error) { +func (e evalFunc) evalOneRule(iter unifyIterator, rule *ast.Rule, cacheKey ast.Ref, prev *ast.Term, findOne bool) (*ast.Term, error) { child := e.e.child(rule.Body) + child.findOne = findOne args := make([]*ast.Term, len(e.terms)-1) copy(args, rule.Head.Args) @@ -1619,6 +1753,9 @@ func (e evalFunc) evalOneRule(iter unifyIterator, rule *ast.Rule, cacheKey ast.R if len(rule.Head.Args) == len(e.terms)-1 { if result.Value.Compare(ast.Boolean(false)) == 0 { + if prev != nil && ast.Compare(prev, result) != 0 { + return functionConflictErr(rule.Location) + } return nil } } @@ -1651,6 +1788,75 @@ func (e evalFunc) evalOneRule(iter unifyIterator, rule *ast.Rule, cacheKey ast.R return result, err } +func (e evalFunc) partialEvalSupport(declArgsLen int, iter unifyIterator) error { + + path := e.e.namespaceRef(e.ref) + term := ast.NewTerm(path) + + if !e.e.saveSupport.Exists(path) { + for _, rule := range e.ir.Rules { + err := e.partialEvalSupportRule(rule, path) + if err != nil { + return err + } + } + } + + if !e.e.saveSupport.Exists(path) { // we haven't saved anything, nothing to call + return nil + } + + return e.e.saveCall(declArgsLen, append([]*ast.Term{term}, e.terms[1:]...), iter) +} + +func (e evalFunc) partialEvalSupportRule(rule *ast.Rule, path ast.Ref) error { + + child := e.e.child(rule.Body) + child.traceEnter(rule) + + e.e.saveStack.PushQuery(nil) + + // treat the function arguments as unknown during rule body evaluation + var args []*ast.Term + ast.WalkVars(rule.Head.Args, func(v ast.Var) bool { + args = append(args, ast.VarTerm(string(v))) + return false + }) + e.e.saveSet.Push(args, child.bindings) + + err := child.eval(func(child *eval) error { + child.traceExit(rule) + + current := e.e.saveStack.PopQuery() + plugged := current.Plug(e.e.caller.bindings) + + // Skip this rule body if it fails to type-check. + // Type-checking failure means the rule body will never succeed. + if e.e.compiler.PassesTypeCheck(plugged) { + head := &ast.Head{ + Name: rule.Head.Name, + Value: child.bindings.PlugNamespaced(rule.Head.Value, e.e.caller.bindings), + Args: make([]*ast.Term, len(rule.Head.Args)), + } + for i, a := range rule.Head.Args { + head.Args[i] = child.bindings.PlugNamespaced(a, e.e.caller.bindings) + } + + e.e.saveSupport.Insert(path, &ast.Rule{ + Head: head, + Body: plugged, + }) + } + child.traceRedo(rule) + e.e.saveStack.PushQuery(current) + return nil + }) + + e.e.saveSet.Pop() + e.e.saveStack.PopQuery() + return err +} + type evalTree struct { e *eval ref ast.Ref @@ -1679,12 +1885,10 @@ func (e evalTree) eval(iter unifyIterator) error { func (e evalTree) finish(iter unifyIterator) error { - // During partial evaluation it may not be possible to compute the value - // for this reference if it refers to a virtual document so save the entire - // expression. See "save: full extent" test case for an example. We also - // need to account for the inlining controls here to prevent base documents - // from being inlined when they should not be. - save := e.e.unknown(e.ref, e.e.bindings) + // In some cases, it may not be possible to PE the ref. If the path refers + // to virtual docs that PE does not support or base documents where inlining + // has been disabled, then we have to save. + save := e.e.unknown(e.plugged, e.e.bindings) if save { return e.e.saveUnify(ast.NewTerm(e.plugged), e.rterm, e.bindings, e.rbindings, iter) @@ -1876,7 +2080,7 @@ type evalVirtual struct { func (e evalVirtual) eval(iter unifyIterator) error { - ir, err := e.e.getRules(e.plugged[:e.pos+1]) + ir, err := e.e.getRules(e.plugged[:e.pos+1], nil) if err != nil { return err } @@ -1941,6 +2145,12 @@ type evalVirtualPartial struct { empty *ast.Term } +type evalVirtualPartialCacheHint struct { + key ast.Ref + hit bool + full bool +} + func (e evalVirtualPartial) eval(iter unifyIterator) error { unknown := e.e.unknown(e.ref[:e.pos+1], e.bindings) @@ -1970,17 +2180,25 @@ func (e evalVirtualPartial) evalEachRule(iter unifyIterator, unknown bool) error return nil } - key, hit, err := e.evalCache(iter) + hint, err := e.evalCache(iter) if err != nil { return err - } else if hit { + } else if hint.hit { return nil } - result := e.empty + if hint.full { + result, err := e.evalAllRulesNoCache(e.ir.Rules) + if err != nil { + return err + } + e.e.virtualCache.Put(hint.key, result) + return e.evalTerm(iter, e.pos+1, result, e.bindings) + } + result := e.empty for _, rule := range e.ir.Rules { - if err := e.evalOneRulePreUnify(iter, rule, key, result, unknown); err != nil { + if err := e.evalOneRulePreUnify(iter, rule, hint, result, unknown); err != nil { return err } } @@ -1990,12 +2208,33 @@ func (e evalVirtualPartial) evalEachRule(iter unifyIterator, unknown bool) error func (e evalVirtualPartial) evalAllRules(iter unifyIterator, rules []*ast.Rule) error { + cacheKey := e.plugged[:e.pos+1] + result := e.e.virtualCache.Get(cacheKey) + if result != nil { + e.e.instr.counterIncr(evalOpVirtualCacheHit) + return e.e.biunify(result, e.rterm, e.bindings, e.rbindings, iter) + } + + e.e.instr.counterIncr(evalOpVirtualCacheMiss) + + result, err := e.evalAllRulesNoCache(rules) + if err != nil { + return err + } + + if cacheKey != nil { + e.e.virtualCache.Put(cacheKey, result) + } + + return e.e.biunify(result, e.rterm, e.bindings, e.rbindings, iter) +} + +func (e evalVirtualPartial) evalAllRulesNoCache(rules []*ast.Rule) (*ast.Term, error) { result := e.empty for _, rule := range rules { child := e.e.child(rule.Body) child.traceEnter(rule) - err := child.eval(func(*eval) error { child.traceExit(rule) var err error @@ -2009,14 +2248,14 @@ func (e evalVirtualPartial) evalAllRules(iter unifyIterator, rules []*ast.Rule) }) if err != nil { - return err + return nil, err } } - return e.e.biunify(result, e.rterm, e.bindings, e.rbindings, iter) + return result, nil } -func (e evalVirtualPartial) evalOneRulePreUnify(iter unifyIterator, rule *ast.Rule, cacheKey ast.Ref, result *ast.Term, unknown bool) error { +func (e evalVirtualPartial) evalOneRulePreUnify(iter unifyIterator, rule *ast.Rule, hint evalVirtualPartialCacheHint, result *ast.Term, unknown bool) error { key := e.ref[e.pos+1] child := e.e.child(rule.Body) @@ -2033,9 +2272,9 @@ func (e evalVirtualPartial) evalOneRulePreUnify(iter unifyIterator, rule *ast.Ru term = rule.Head.Key } - if cacheKey != nil { + if hint.key != nil { result := child.bindings.Plug(term) - e.e.virtualCache.Put(cacheKey, result) + e.e.virtualCache.Put(hint.key, result) } // NOTE(tsandall): if the rule set depends on any unknowns then do @@ -2056,7 +2295,7 @@ func (e evalVirtualPartial) evalOneRulePreUnify(iter unifyIterator, rule *ast.Ru child.traceExit(rule) term, termbindings := child.bindings.apply(term) - err := e.evalTerm(iter, term, termbindings) + err := e.evalTerm(iter, e.pos+2, term, termbindings) if err != nil { return err } @@ -2114,7 +2353,7 @@ func (e evalVirtualPartial) evalOneRuleContinue(iter unifyIterator, rule *ast.Ru } term, termbindings := child.bindings.apply(term) - err := e.evalTerm(iter, term, termbindings) + err := e.evalTerm(iter, e.pos+2, term, termbindings) if err != nil { return err } @@ -2125,7 +2364,8 @@ func (e evalVirtualPartial) evalOneRuleContinue(iter unifyIterator, rule *ast.Ru func (e evalVirtualPartial) partialEvalSupport(iter unifyIterator) error { - path, term := e.e.savePackagePathAndTerm(e.plugged[:e.pos+1], e.ref) + path := e.e.namespaceRef(e.plugged[:e.pos+1]) + term := ast.NewTerm(e.e.namespaceRef(e.ref)) var defined bool @@ -2143,6 +2383,11 @@ func (e evalVirtualPartial) partialEvalSupport(iter unifyIterator) error { } if !defined { + if len(e.ref) != e.pos+1 { + return nil + } + + // the entire partial set/obj was queried, e.g. data.a.q (not data.a.q[x]) term = e.empty } @@ -2199,11 +2444,11 @@ func (e evalVirtualPartial) partialEvalSupportRule(rule *ast.Rule, path ast.Ref) return defined, err } -func (e evalVirtualPartial) evalTerm(iter unifyIterator, term *ast.Term, termbindings *bindings) error { +func (e evalVirtualPartial) evalTerm(iter unifyIterator, pos int, term *ast.Term, termbindings *bindings) error { eval := evalTerm{ e: e.e, ref: e.ref, - pos: e.pos + 2, + pos: pos, bindings: e.bindings, term: term, termbindings: termbindings, @@ -2213,34 +2458,38 @@ func (e evalVirtualPartial) evalTerm(iter unifyIterator, term *ast.Term, termbin return eval.eval(iter) } -func (e evalVirtualPartial) evalCache(iter unifyIterator) (ast.Ref, bool, error) { +func (e evalVirtualPartial) evalCache(iter unifyIterator) (evalVirtualPartialCacheHint, error) { + + var hint evalVirtualPartialCacheHint if e.e.unknown(e.ref[:e.pos+1], e.bindings) { - return nil, false, nil + return hint, nil } - var cacheKey ast.Ref - - if e.ir.Kind == ast.PartialObjectDoc { - - plugged := e.bindings.Plug(e.ref[e.pos+1]) + if cached := e.e.virtualCache.Get(e.plugged[:e.pos+1]); cached != nil { // have full extent cached + e.e.instr.counterIncr(evalOpVirtualCacheHit) + hint.hit = true + return hint, e.evalTerm(iter, e.pos+1, cached, e.bindings) + } - if plugged.IsGround() { - path := e.plugged[:e.pos+2] - path[len(path)-1] = plugged - cached := e.e.virtualCache.Get(path) + plugged := e.bindings.Plug(e.ref[e.pos+1]) - if cached != nil { - e.e.instr.counterIncr(evalOpVirtualCacheHit) - return nil, true, e.evalTerm(iter, cached, e.bindings) - } + if plugged.IsGround() { + hint.key = append(e.plugged[:e.pos+1], plugged) - e.e.instr.counterIncr(evalOpVirtualCacheMiss) - cacheKey = path + if cached := e.e.virtualCache.Get(hint.key); cached != nil { + e.e.instr.counterIncr(evalOpVirtualCacheHit) + hint.hit = true + return hint, e.evalTerm(iter, e.pos+2, cached, e.bindings) } + } else if _, ok := plugged.Value.(ast.Var); ok { + hint.full = true + hint.key = e.plugged[:e.pos+1] } - return cacheKey, false, nil + e.e.instr.counterIncr(evalOpVirtualCacheMiss) + + return hint, nil } func (e evalVirtualPartial) reduce(head *ast.Head, b *bindings, result *ast.Term) (*ast.Term, bool, error) { @@ -2289,7 +2538,7 @@ func (e evalVirtualComplete) eval(iter unifyIterator) error { } if !e.e.unknown(e.ref, e.bindings) { - return e.evalValue(iter) + return suppressEarlyExit(e.evalValue(iter, e.ir.EarlyExit)) } var generateSupport bool @@ -2311,7 +2560,7 @@ func (e evalVirtualComplete) eval(iter unifyIterator) error { return e.partialEval(iter) } -func (e evalVirtualComplete) evalValue(iter unifyIterator) error { +func (e evalVirtualComplete) evalValue(iter unifyIterator, findOne bool) error { cached := e.e.virtualCache.Get(e.plugged[:e.pos+1]) if cached != nil { e.e.instr.counterIncr(evalOpVirtualCacheHit) @@ -2322,14 +2571,14 @@ func (e evalVirtualComplete) evalValue(iter unifyIterator) error { var prev *ast.Term - for i := range e.ir.Rules { - next, err := e.evalValueRule(iter, e.ir.Rules[i], prev) + for _, rule := range e.ir.Rules { + next, err := e.evalValueRule(iter, rule, prev, findOne) if err != nil { return err } if next == nil { - for _, rule := range e.ir.Else[e.ir.Rules[i]] { - next, err = e.evalValueRule(iter, rule, prev) + for _, erule := range e.ir.Else[rule] { + next, err = e.evalValueRule(iter, erule, prev, findOne) if err != nil { return err } @@ -2344,19 +2593,19 @@ func (e evalVirtualComplete) evalValue(iter unifyIterator) error { } if e.ir.Default != nil && prev == nil { - _, err := e.evalValueRule(iter, e.ir.Default, prev) + _, err := e.evalValueRule(iter, e.ir.Default, prev, findOne) return err } return nil } -func (e evalVirtualComplete) evalValueRule(iter unifyIterator, rule *ast.Rule, prev *ast.Term) (*ast.Term, error) { +func (e evalVirtualComplete) evalValueRule(iter unifyIterator, rule *ast.Rule, prev *ast.Term, findOne bool) (*ast.Term, error) { child := e.e.child(rule.Body) + child.findOne = findOne child.traceEnter(rule) var result *ast.Term - err := child.eval(func(child *eval) error { child.traceExit(rule) result = child.bindings.Plug(rule.Head.Value) @@ -2414,7 +2663,8 @@ func (e evalVirtualComplete) partialEval(iter unifyIterator) error { func (e evalVirtualComplete) partialEvalSupport(iter unifyIterator) error { - path, term := e.e.savePackagePathAndTerm(e.plugged[:e.pos+1], e.ref) + path := e.e.namespaceRef(e.plugged[:e.pos+1]) + term := ast.NewTerm(e.e.namespaceRef(e.ref)) if !e.e.saveSupport.Exists(path) { @@ -2638,13 +2888,11 @@ func (e *eval) comprehensionIndex(term *ast.Term) *ast.ComprehensionIndex { return e.compiler.ComprehensionIndex(term) } -func (e *eval) savePackagePathAndTerm(plugged, ref ast.Ref) (ast.Ref, *ast.Term) { - +func (e *eval) namespaceRef(ref ast.Ref) ast.Ref { if e.skipSaveNamespace { - return plugged.Copy(), ast.NewTerm(ref.Copy()) + return ref.Copy() } - - return plugged.Insert(e.saveNamespace, 1), ast.NewTerm(ref.Insert(e.saveNamespace, 1)) + return ref.Insert(e.saveNamespace, 1) } type savePair struct { @@ -2896,3 +3144,11 @@ func refContainsNonScalar(ref ast.Ref) bool { } return false } + +func suppressEarlyExit(err error) error { + ee, ok := err.(*earlyExitError) + if !ok { + return err + } + return ee.prev // nil if we're done +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/http.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/http.go index 25e83ad86..02fee0c5a 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/http.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/http.go @@ -6,15 +6,18 @@ package topdown import ( "bytes" + "context" "crypto/tls" "crypto/x509" "encoding/json" "fmt" "io/ioutil" "math" + "net" "net/http" "net/url" "os" + "runtime" "strconv" "strings" "time" @@ -22,10 +25,17 @@ import ( "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/internal/version" "github.com/open-policy-agent/opa/topdown/builtins" + "github.com/open-policy-agent/opa/topdown/cache" "github.com/open-policy-agent/opa/util" ) -const defaultHTTPRequestTimeoutEnv = "HTTP_SEND_TIMEOUT" +type cachingMode string + +const ( + defaultHTTPRequestTimeoutEnv = "HTTP_SEND_TIMEOUT" + defaultCachingMode cachingMode = "serialized" + cachingModeDeserialized cachingMode = "deserialized" +) var defaultHTTPRequestTimeout = time.Second * 5 @@ -54,6 +64,7 @@ var allowedKeyNames = [...]string{ "force_cache", "force_cache_duration_seconds", "raise_error", + "caching_mode", } var ( @@ -220,6 +231,37 @@ func canonicalizeHeaders(headers map[string]interface{}) map[string]interface{} return canonicalized } +// useSocket examines the url for "unix://" and returns a *http.Transport with +// a DialContext that opens a socket (specified in the http call). +// The url is expected to contain socket=/path/to/socket (url encoded) +// Ex. "unix:localhost/end/point?socket=%2Ftmp%2Fhttp.sock" +func useSocket(rawURL string, tlsConfig *tls.Config) (bool, string, *http.Transport) { + u, err := url.Parse(rawURL) + if err != nil { + return false, "", nil + } + + if u.Scheme != "unix" || u.RawQuery == "" { + return false, rawURL, nil + } + + // Get the path to the socket + v, err := url.ParseQuery(u.RawQuery) + if err != nil { + return false, rawURL, nil + } + + tr := http.DefaultTransport.(*http.Transport).Clone() + tr.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { + return http.DefaultTransport.(*http.Transport).DialContext(ctx, u.Scheme, v.Get("socket")) + } + tr.TLSClientConfig = tlsConfig + tr.DisableKeepAlives = true + + rawURL = strings.Replace(rawURL, "unix:", "http:", 1) + return true, rawURL, tr +} + func createHTTPRequest(bctx BuiltinContext, obj ast.Object) (*http.Request, *http.Client, error) { var url string var method string @@ -353,7 +395,7 @@ func createHTTPRequest(bctx BuiltinContext, obj ast.Object) (*http.Request, *htt if err != nil { return nil, nil, err } - case "cache", "force_cache", "force_cache_duration_seconds", "force_json_decode", "raise_error": // no-op + case "cache", "force_cache", "force_cache_duration_seconds", "force_json_decode", "raise_error", "caching_mode": // no-op default: return nil, nil, fmt.Errorf("invalid parameter %q", key) } @@ -411,7 +453,7 @@ func createHTTPRequest(bctx BuiltinContext, obj ast.Object) (*http.Request, *htt // Check the system certificates config first so that we // load additional certificated into the correct pool. - if tlsUseSystemCerts != nil && *tlsUseSystemCerts { + if tlsUseSystemCerts != nil && *tlsUseSystemCerts && runtime.GOOS != "windows" { pool, err := x509.SystemCertPool() if err != nil { return nil, nil, err @@ -453,8 +495,19 @@ func createHTTPRequest(bctx BuiltinContext, obj ast.Object) (*http.Request, *htt } if isTLS { - client.Transport = &http.Transport{ - TLSClientConfig: &tlsConfig, + if ok, parsedURL, tr := useSocket(url, &tlsConfig); ok { + client.Transport = tr + url = parsedURL + } else { + tr := http.DefaultTransport.(*http.Transport).Clone() + tr.TLSClientConfig = &tlsConfig + tr.DisableKeepAlives = true + client.Transport = tr + } + } else { + if ok, parsedURL, tr := useSocket(url, nil); ok { + client.Transport = tr + url = parsedURL } } @@ -567,22 +620,27 @@ func insertIntoHTTPSendCache(bctx BuiltinContext, key ast.Object, value ast.Valu } // checkHTTPSendInterQueryCache checks for the given key's value in the inter-query cache -func checkHTTPSendInterQueryCache(bctx BuiltinContext, key ast.Object, req *http.Request, client *http.Client, forceJSONDecode bool, cacheParams *forceCacheParams) (ast.Value, error) { - requestCache := bctx.InterQueryBuiltinCache +func (c *interQueryCache) checkHTTPSendInterQueryCache() (ast.Value, error) { + requestCache := c.bctx.InterQueryBuiltinCache - value, found := requestCache.Get(key) + value, found := requestCache.Get(c.key) if !found { return nil, nil } - cachedResp, ok := value.(*interQueryCacheValue) - if !ok { - return nil, nil - } + var cachedRespData *interQueryCacheData - cachedRespData, err := cachedResp.copyCacheData() - if err != nil { - return nil, err + switch v := value.(type) { + case *interQueryCacheValue: + var err error + cachedRespData, err = v.copyCacheData() + if err != nil { + return nil, err + } + case *interQueryCacheData: + cachedRespData = v + default: + return nil, nil } headers, err := parseResponseHeaders(cachedRespData.Headers) @@ -591,15 +649,20 @@ func checkHTTPSendInterQueryCache(bctx BuiltinContext, key ast.Object, req *http } // check the freshness of the cached response - if isCachedResponseFresh(bctx, headers, cacheParams) { - return cachedRespData.formatToAST(forceJSONDecode) + if isCachedResponseFresh(c.bctx, headers, c.forceCacheParams) { + return cachedRespData.formatToAST(c.forceJSONDecode) + } + + c.httpReq, c.httpClient, err = createHTTPRequest(c.bctx, c.key) + if err != nil { + return nil, handleHTTPSendErr(c.bctx, err) } // check with the server if the stale response is still up-to-date. // If server returns a new response (ie. status_code=200), update the cache with the new response // If server returns an unmodified response (ie. status_code=304), update the headers for the existing response - result, modified, err := revalidateCachedResponse(req, client, headers) - requestCache.Delete(key) + result, modified, err := revalidateCachedResponse(c.httpReq, c.httpClient, headers) + requestCache.Delete(c.key) if err != nil || result == nil { return nil, err } @@ -615,22 +678,33 @@ func checkHTTPSendInterQueryCache(bctx BuiltinContext, key ast.Object, req *http } } - cv, err := cachedRespData.toCacheValue() + cachingMode, err := getCachingMode(c.key) if err != nil { return nil, err } - bctx.InterQueryBuiltinCache.Insert(key, cv) + var pcv cache.InterQueryCacheValue - return cachedRespData.formatToAST(forceJSONDecode) + if cachingMode == defaultCachingMode { + pcv, err = cachedRespData.toCacheValue() + if err != nil { + return nil, err + } + } else { + pcv = cachedRespData + } + + c.bctx.InterQueryBuiltinCache.Insert(c.key, pcv) + + return cachedRespData.formatToAST(c.forceJSONDecode) } - newValue, respBody, err := formatHTTPResponseToAST(result, forceJSONDecode) + newValue, respBody, err := formatHTTPResponseToAST(result, c.forceJSONDecode) if err != nil { return nil, err } - err = insertIntoHTTPSendInterQueryCache(bctx, key, result, respBody, cacheParams != nil) + err = insertIntoHTTPSendInterQueryCache(c.bctx, c.key, result, respBody, c.forceCacheParams != nil) if err != nil { return nil, err } @@ -646,7 +720,24 @@ func insertIntoHTTPSendInterQueryCache(bctx BuiltinContext, key ast.Value, resp requestCache := bctx.InterQueryBuiltinCache - pcv, err := newInterQueryCacheValue(resp, respBody) + obj, ok := key.(ast.Object) + if !ok { + return fmt.Errorf("interface conversion error") + } + + cachingMode, err := getCachingMode(obj) + if err != nil { + return err + } + + var pcv cache.InterQueryCacheValue + + if cachingMode == defaultCachingMode { + pcv, err = newInterQueryCacheValue(resp, respBody) + } else { + pcv, err = newInterQueryCacheData(resp, respBody) + } + if err != nil { return err } @@ -700,6 +791,25 @@ func getBoolValFromReqObj(req ast.Object, key *ast.Term) (bool, error) { return bool(b), nil } +func getCachingMode(req ast.Object) (cachingMode, error) { + key := ast.StringTerm("caching_mode") + var s ast.String + var ok bool + if v := req.Get(key); v != nil { + if s, ok = v.Value.(ast.String); !ok { + return "", fmt.Errorf("invalid value for %v field", key.String()) + } + + switch cachingMode(s) { + case defaultCachingMode, cachingModeDeserialized: + return cachingMode(s), nil + default: + return "", fmt.Errorf("invalid value specified for %v field: %v", key.String(), string(s)) + } + } + return cachingMode(defaultCachingMode), nil +} + type interQueryCacheValue struct { Data []byte } @@ -763,6 +873,10 @@ func (c *interQueryCacheData) toCacheValue() (*interQueryCacheValue, error) { return &interQueryCacheValue{Data: b}, nil } +func (c *interQueryCacheData) SizeInBytes() int64 { + return 0 +} + type responseHeaders struct { date time.Time // origination date and time of response cacheControl map[string]string // response cache-control header @@ -1081,23 +1195,19 @@ func newInterQueryCache(bctx BuiltinContext, key ast.Object, forceCacheParams *f func (c *interQueryCache) CheckCache() (ast.Value, error) { var err error - c.httpReq, c.httpClient, err = createHTTPRequest(c.bctx, c.key) - if err != nil { - return nil, handleHTTPSendErr(c.bctx, err) - } - c.forceJSONDecode, err = getBoolValFromReqObj(c.key, ast.StringTerm("force_json_decode")) if err != nil { return nil, handleHTTPSendErr(c.bctx, err) } - resp, err := checkHTTPSendInterQueryCache(c.bctx, c.key, c.httpReq, c.httpClient, c.forceJSONDecode, c.forceCacheParams) + resp, err := c.checkHTTPSendInterQueryCache() // fallback to the http send cache if response not found in the inter-query cache or inter-query cache look-up results // in an error if resp == nil || err != nil { return checkHTTPSendCache(c.bctx, c.key), nil } + return resp, err } @@ -1118,6 +1228,12 @@ func (c *interQueryCache) InsertIntoCache(value *http.Response) (ast.Value, erro // ExecuteHTTPRequest executes a HTTP request func (c *interQueryCache) ExecuteHTTPRequest() (*http.Response, error) { + var err error + c.httpReq, c.httpClient, err = createHTTPRequest(c.bctx, c.key) + if err != nil { + return nil, handleHTTPSendErr(c.bctx, err) + } + return executeHTTPRequest(c.httpReq, c.httpClient) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/net.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/net.go new file mode 100644 index 000000000..24b2d0b03 --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/net.go @@ -0,0 +1,57 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +package topdown + +import ( + "net" + + "github.com/open-policy-agent/opa/ast" + "github.com/open-policy-agent/opa/topdown/builtins" +) + +type lookupIPAddrCacheKey string + +// resolv is the same as net.DefaultResolver -- this is for mocking it out in tests +var resolv = &net.Resolver{} + +func builtinLookupIPAddr(bctx BuiltinContext, operands []*ast.Term, iter func(*ast.Term) error) error { + name, err := builtins.StringOperand(operands[0].Value, 1) + if err != nil { + return err + } + + key := lookupIPAddrCacheKey(name) + if val, ok := bctx.Cache.Get(key); ok { + return iter(val.(*ast.Term)) + } + + addrs, err := resolv.LookupIPAddr(bctx.Context, string(name)) + if err != nil { + // NOTE(sr): We can't do better than this right now, see https://github.com/golang/go/issues/36208 + if err.Error() == "operation was canceled" || err.Error() == "i/o timeout" { + return Halt{ + Err: &Error{ + Code: CancelErr, + Message: ast.NetLookupIPAddr.Name + ": " + err.Error(), + Location: bctx.Location, + }, + } + } + return err + } + + ret := ast.NewSet() + for _, a := range addrs { + ret.Add(ast.StringTerm(a.String())) + + } + t := ast.NewTerm(ret) + bctx.Cache.Put(key, t) + return iter(t) +} + +func init() { + RegisterBuiltinFunc(ast.NetLookupIPAddr.Name, builtinLookupIPAddr) +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/numbers.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/numbers.go index 74117bb95..9d57c8790 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/numbers.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/numbers.go @@ -5,12 +5,15 @@ package topdown import ( + "fmt" "math/big" "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/topdown/builtins" ) +type randIntCachingKey string + var one = big.NewInt(1) func builtinNumbersRange(bctx BuiltinContext, operands []*ast.Term, iter func(*ast.Term) error) error { @@ -53,6 +56,44 @@ func builtinNumbersRange(bctx BuiltinContext, operands []*ast.Term, iter func(*a return iter(ast.NewTerm(result)) } +func builtinRandIntn(bctx BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { + + strOp, err := builtins.StringOperand(args[0].Value, 1) + if err != nil { + return err + + } + + n, err := builtins.IntOperand(args[1].Value, 2) + if err != nil { + return err + } + + if n == 0 { + return iter(ast.IntNumberTerm(0)) + } + + if n < 0 { + n = -n + } + + var key = randIntCachingKey(fmt.Sprintf("%s-%d", strOp, n)) + + if val, ok := bctx.Cache.Get(key); ok { + return iter(val.(*ast.Term)) + } + + r, err := bctx.Rand() + if err != nil { + return err + } + result := ast.IntNumberTerm(r.Intn(n)) + bctx.Cache.Put(key, result) + + return iter(result) +} + func init() { RegisterBuiltinFunc(ast.NumbersRange.Name, builtinNumbersRange) + RegisterBuiltinFunc(ast.RandIntn.Name, builtinRandIntn) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/parse_bytes.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/parse_bytes.go index 9b26dad71..6e58d2327 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/parse_bytes.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/parse_bytes.go @@ -7,28 +7,30 @@ package topdown import ( "fmt" "math/big" - "strconv" "strings" + "unicode" "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/topdown/builtins" ) const ( - none float64 = 1 - kb = 1000 - ki = 1024 - mb = kb * 1000 - mi = ki * 1024 - gb = mb * 1000 - gi = mi * 1024 - tb = gb * 1000 - ti = gi * 1024 + none uint64 = 1 << (10 * iota) + ki + mi + gi + ti + pi + ei + + kb uint64 = 1000 + mb = kb * 1000 + gb = mb * 1000 + tb = gb * 1000 + pb = tb * 1000 + eb = pb * 1000 ) -// The rune values for 0..9 as well as the period symbol (for parsing floats) -var numRunes = []rune("0123456789.") - func parseNumBytesError(msg string) error { return fmt.Errorf("%s error: %s", ast.UnitsParseBytes.Name, msg) } @@ -43,111 +45,99 @@ var ( errIncludesSpaces = parseNumBytesError("spaces not allowed in resource strings") ) -func builtinNumBytes(a ast.Value) (ast.Value, error) { - var m float64 +func builtinNumBytes(bctx BuiltinContext, operands []*ast.Term, iter func(*ast.Term) error) error { + var m big.Float - raw, err := builtins.StringOperand(a, 1) + raw, err := builtins.StringOperand(operands[0].Value, 1) if err != nil { - return nil, err + return err } s := formatString(raw) if strings.Contains(s, " ") { - return nil, errIncludesSpaces + return errIncludesSpaces } - numStr, unitStr := extractNumAndUnit(s) - - if numStr == "" { - return nil, errNoAmount + num, unit := extractNumAndUnit(s) + if num == "" { + return errNoAmount } - switch unitStr { + switch unit { case "": - m = none + m.SetUint64(none) case "kb", "k": - m = kb + m.SetUint64(kb) case "kib", "ki": - m = ki + m.SetUint64(ki) case "mb", "m": - m = mb + m.SetUint64(mb) case "mib", "mi": - m = mi + m.SetUint64(mi) case "gb", "g": - m = gb + m.SetUint64(gb) case "gib", "gi": - m = gi + m.SetUint64(gi) case "tb", "t": - m = tb + m.SetUint64(tb) case "tib", "ti": - m = ti + m.SetUint64(ti) + case "pb", "p": + m.SetUint64(pb) + case "pib", "pi": + m.SetUint64(pi) + case "eb", "e": + m.SetUint64(eb) + case "eib", "ei": + m.SetUint64(ei) default: - return nil, errUnitNotRecognized(unitStr) + return errUnitNotRecognized(unit) } - num, err := strconv.ParseFloat(numStr, 64) - if err != nil { - return nil, errNumConv + numFloat, ok := new(big.Float).SetString(num) + if !ok { + return errNumConv } - total := num * m - - return builtins.IntToNumber(big.NewInt(int64(total))), nil + var total big.Int + numFloat.Mul(numFloat, &m).Int(&total) + return iter(ast.NewTerm(builtins.IntToNumber(&total))) } -// Makes the string lower case and removes spaces and quotation marks +// Makes the string lower case and removes quotation marks func formatString(s ast.String) string { str := string(s) lower := strings.ToLower(str) return strings.Replace(lower, "\"", "", -1) } -// Splits the string into a number string à la "10" or "10.2" and a unit string à la "gb" or "MiB" or "foo". Either -// can be an empty string (error handling is provided elsewhere). +// Splits the string into a number string à la "10" or "10.2" and a unit +// string à la "gb" or "MiB" or "foo". Either can be an empty string +// (error handling is provided elsewhere). func extractNumAndUnit(s string) (string, string) { - isNum := func(r rune) (isNum bool) { - for _, nr := range numRunes { - if nr == r { - return true - } - } - - return false + isNum := func(r rune) bool { + return unicode.IsDigit(r) || r == '.' } - // Returns the index of the first rune that's not a number (or 0 if there are only numbers) - getFirstNonNumIdx := func(s string) int { - for idx, r := range s { - if !isNum(r) { - return idx - } + firstNonNumIdx := -1 + for idx, r := range s { + if !isNum(r) { + firstNonNumIdx = idx + break } - - return 0 } - firstRuneIsNum := func(s string) bool { - return len(s) > 0 && isNum(rune(s[0])) - } - - firstNonNumIdx := getFirstNonNumIdx(s) - - // The string contains only a number - numOnly := firstNonNumIdx == 0 && firstRuneIsNum(s) - - // The string contains only a unit - unitOnly := firstNonNumIdx == 0 && !firstRuneIsNum(s) - - if numOnly { + if firstNonNumIdx == -1 { // only digits and '.' return s, "" - } else if unitOnly { + } + if firstNonNumIdx == 0 { // only units (starts with non-digit) return "", s - } else { - return s[0:firstNonNumIdx], s[firstNonNumIdx:] } + + return s[0:firstNonNumIdx], s[firstNonNumIdx:] } func init() { - RegisterFunctionalBuiltin1(ast.UnitsParseBytes.Name, builtinNumBytes) + RegisterBuiltinFunc(ast.UnitsParseBytes.Name, builtinNumBytes) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/print.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/print.go new file mode 100644 index 000000000..765b344b3 --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/print.go @@ -0,0 +1,86 @@ +// Copyright 2021 The OPA Authors. All rights reserved. +// Use of this source code is governed by an Apache2 +// license that can be found in the LICENSE file. + +package topdown + +import ( + "fmt" + "io" + "strings" + + "github.com/open-policy-agent/opa/ast" + "github.com/open-policy-agent/opa/topdown/builtins" + "github.com/open-policy-agent/opa/topdown/print" +) + +func NewPrintHook(w io.Writer) print.Hook { + return printHook{w: w} +} + +type printHook struct { + w io.Writer +} + +func (h printHook) Print(_ print.Context, msg string) error { + _, err := fmt.Fprintln(h.w, msg) + return err +} + +func builtinPrint(bctx BuiltinContext, operands []*ast.Term, iter func(*ast.Term) error) error { + + if bctx.PrintHook == nil { + return iter(nil) + } + + arr, err := builtins.ArrayOperand(operands[0].Value, 1) + if err != nil { + return err + } + + buf := make([]string, arr.Len()) + + err = builtinPrintCrossProductOperands(bctx, buf, arr, 0, func(buf []string) error { + pctx := print.Context{ + Context: bctx.Context, + Location: bctx.Location, + } + return bctx.PrintHook.Print(pctx, strings.Join(buf, " ")) + }) + if err != nil { + return err + } + + return iter(nil) +} + +func builtinPrintCrossProductOperands(bctx BuiltinContext, buf []string, operands *ast.Array, i int, f func([]string) error) error { + + if i >= operands.Len() { + return f(buf) + } + + xs, ok := operands.Elem(i).Value.(ast.Set) + if !ok { + return Halt{Err: internalErr(bctx.Location, fmt.Sprintf("illegal argument type: %v", ast.TypeName(operands.Elem(i).Value)))} + } + + if xs.Len() == 0 { + buf[i] = "" + return builtinPrintCrossProductOperands(bctx, buf, operands, i+1, f) + } + + return xs.Iter(func(x *ast.Term) error { + switch v := x.Value.(type) { + case ast.String: + buf[i] = string(v) + default: + buf[i] = v.String() + } + return builtinPrintCrossProductOperands(bctx, buf, operands, i+1, f) + }) +} + +func init() { + RegisterBuiltinFunc(ast.InternalPrint.Name, builtinPrint) +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/print/print.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/print/print.go new file mode 100644 index 000000000..0fb6abdca --- /dev/null +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/print/print.go @@ -0,0 +1,21 @@ +package print + +import ( + "context" + + "github.com/open-policy-agent/opa/ast" +) + +// Context provides the Hook implementation context about the print() call. +type Context struct { + Context context.Context // request context passed when query executed + Location *ast.Location // location of print call +} + +// Hook defines the interface that callers can implement to receive print +// statement outputs. If the hook returns an error, it will be surfaced if +// strict builtin error checking is enabled (otherwise, it will not halt +// execution.) +type Hook interface { + Print(Context, string) error +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/query.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/query.go index 207cf0eca..73d5e2583 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/query.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/query.go @@ -9,6 +9,7 @@ import ( "github.com/open-policy-agent/opa/resolver" "github.com/open-policy-agent/opa/topdown/cache" + "github.com/open-policy-agent/opa/topdown/print" "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/metrics" @@ -49,8 +50,10 @@ type Query struct { runtime *ast.Term builtins map[string]*Builtin indexing bool + earlyExit bool interQueryBuiltinCache cache.InterQueryCache strictBuiltinErrors bool + printHook print.Hook } // Builtin represents a built-in function that queries can call. @@ -65,6 +68,7 @@ func NewQuery(query ast.Body) *Query { query: query, genvarprefix: ast.WildcardPrefix, indexing: true, + earlyExit: true, external: newResolverTrie(), } } @@ -211,6 +215,13 @@ func (q *Query) WithIndexing(enabled bool) *Query { return q } +// WithEarlyExit will enable or disable using 'early exit' for the evaluation +// of the query. The default is enabled. +func (q *Query) WithEarlyExit(enabled bool) *Query { + q.earlyExit = enabled + return q +} + // WithSeed sets a reader that will seed randomization required by built-in functions. // If a seed is not provided crypto/rand.Reader is used. func (q *Query) WithSeed(r io.Reader) *Query { @@ -242,6 +253,11 @@ func (q *Query) WithResolver(ref ast.Ref, r resolver.Resolver) *Query { return q } +func (q *Query) WithPrintHook(h print.Hook) *Query { + q.printHook = h + return q +} + // PartialRun executes partial evaluation on the query with respect to unknown // values. Partial evaluation attempts to evaluate as much of the query as // possible without requiring values for the unknowns set on the query. The @@ -302,7 +318,9 @@ func (q *Query) PartialRun(ctx context.Context) (partials []ast.Body, support [] genvarprefix: q.genvarprefix, runtime: q.runtime, indexing: q.indexing, + earlyExit: q.earlyExit, builtinErrors: &builtinErrors{}, + printHook: q.printHook, } if len(q.disableInlining) > 0 { @@ -432,7 +450,9 @@ func (q *Query) Iter(ctx context.Context, iter func(QueryResult) error) error { genvarprefix: q.genvarprefix, runtime: q.runtime, indexing: q.indexing, + earlyExit: q.earlyExit, builtinErrors: &builtinErrors{}, + printHook: q.printHook, } e.caller = e q.metrics.Timer(metrics.RegoQueryEval).Start() diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/save.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/save.go index 851647da4..4ea644f0b 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/save.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/save.go @@ -57,7 +57,7 @@ func (ss *saveSet) contains(t *ast.Term, b *bindings) bool { return false } -// ContainsRecursive retruns true if the term t is or contains a term that is +// ContainsRecursive returns true if the term t is or contains a term that is // contained in the save set. This function will close over the binding list // when it encounters vars. func (ss *saveSet) ContainsRecursive(t *ast.Term, b *bindings) bool { @@ -347,7 +347,7 @@ func saveRequired(c *ast.Compiler, ic *inliningControl, icIgnoreInternal bool, s } else if ic.Disabled(v.ConstantPrefix(), icIgnoreInternal) { found = true } else { - for _, rule := range c.GetRulesDynamic(v) { + for _, rule := range c.GetRulesDynamicWithOpts(v, ast.RulesOptions{IncludeHiddenModules: false}) { if saveRequired(c, ic, icIgnoreInternal, ss, b, rule, true) { found = true break diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/strings.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/strings.go index 288246fbd..1fe2806c1 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/strings.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/strings.go @@ -88,6 +88,18 @@ func builtinConcat(a, b ast.Value) (ast.Value, error) { } func builtinIndexOf(a, b ast.Value) (ast.Value, error) { + runesEqual := func(a, b []rune) bool { + if len(a) != len(b) { + return false + } + for i, v := range a { + if v != b[i] { + return false + } + } + return true + } + base, err := builtins.StringOperand(a, 1) if err != nil { return nil, err @@ -97,9 +109,25 @@ func builtinIndexOf(a, b ast.Value) (ast.Value, error) { if err != nil { return nil, err } + if len(string(search)) == 0 { + return nil, fmt.Errorf("empty search character") + } + + baseRunes := []rune(string(base)) + searchRunes := []rune(string(search)) + searchLen := len(searchRunes) + + for i, r := range baseRunes { + if r == searchRunes[0] { + if len(baseRunes) >= i+searchLen { + if runesEqual(baseRunes[i:i+searchLen], searchRunes) { + return ast.IntNumberTerm(i).Value, nil + } + } + } + } - index := strings.Index(string(base), string(search)) - return ast.IntNumberTerm(index).Value, nil + return ast.IntNumberTerm(-1).Value, nil } func builtinSubstring(a, b, c ast.Value) (ast.Value, error) { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/tokens.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/tokens.go index 49045e32d..64828831f 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/tokens.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/tokens.go @@ -823,69 +823,66 @@ func (header *tokenHeader) valid() bool { return true } -func commonBuiltinJWTEncodeSign(inputHeaders, jwsPayload, jwkSrc string) (ast.Value, error) { +func commonBuiltinJWTEncodeSign(bctx BuiltinContext, inputHeaders, jwsPayload, jwkSrc string, iter func(*ast.Term) error) error { keys, err := jwk.ParseString(jwkSrc) if err != nil { - return nil, err + return err } key, err := keys.Keys[0].Materialize() if err != nil { - return nil, err + return err } if jwk.GetKeyTypeFromKey(key) != keys.Keys[0].GetKeyType() { - return nil, fmt.Errorf("JWK derived key type and keyType parameter do not match") + return fmt.Errorf("JWK derived key type and keyType parameter do not match") } standardHeaders := &jws.StandardHeaders{} jwsHeaders := []byte(inputHeaders) err = json.Unmarshal(jwsHeaders, standardHeaders) if err != nil { - return nil, err + return err } alg := standardHeaders.GetAlgorithm() if (standardHeaders.Type == "" || standardHeaders.Type == headerJwt) && !json.Valid([]byte(jwsPayload)) { - return nil, fmt.Errorf("type is JWT but payload is not JSON") + return fmt.Errorf("type is JWT but payload is not JSON") } // process payload and sign var jwsCompact []byte - jwsCompact, err = jws.SignLiteral([]byte(jwsPayload), alg, key, jwsHeaders) + jwsCompact, err = jws.SignLiteral([]byte(jwsPayload), alg, key, jwsHeaders, bctx.Seed) if err != nil { - return nil, err + return err } - return ast.String(jwsCompact), nil + return iter(ast.StringTerm(string(jwsCompact))) } -func builtinJWTEncodeSign(a ast.Value, b ast.Value, c ast.Value) (ast.Value, error) { - - jwkSrc := c.String() +func builtinJWTEncodeSign(bctx BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { - inputHeaders := a.String() - - jwsPayload := b.String() - - return commonBuiltinJWTEncodeSign(inputHeaders, jwsPayload, jwkSrc) + inputHeaders := args[0].String() + jwsPayload := args[1].String() + jwkSrc := args[2].String() + return commonBuiltinJWTEncodeSign(bctx, inputHeaders, jwsPayload, jwkSrc, iter) } -func builtinJWTEncodeSignRaw(a ast.Value, b ast.Value, c ast.Value) (ast.Value, error) { +func builtinJWTEncodeSignRaw(bctx BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { - jwkSrc, err := builtins.StringOperand(c, 1) + jwkSrc, err := builtins.StringOperand(args[2].Value, 3) if err != nil { - return nil, err + return err } - inputHeaders, err := builtins.StringOperand(a, 1) + inputHeaders, err := builtins.StringOperand(args[0].Value, 1) if err != nil { - return nil, err + return err } - jwsPayload, err := builtins.StringOperand(b, 1) + jwsPayload, err := builtins.StringOperand(args[1].Value, 2) if err != nil { - return nil, err + return err } - return commonBuiltinJWTEncodeSign(string(inputHeaders), string(jwsPayload), string(jwkSrc)) + return commonBuiltinJWTEncodeSign(bctx, string(inputHeaders), string(jwsPayload), string(jwkSrc), iter) } // Implements full JWT decoding, validation and verification. @@ -1111,6 +1108,6 @@ func init() { RegisterBuiltinFunc(ast.JWTVerifyHS384.Name, builtinJWTVerifyHS384) RegisterBuiltinFunc(ast.JWTVerifyHS512.Name, builtinJWTVerifyHS512) RegisterBuiltinFunc(ast.JWTDecodeVerify.Name, builtinJWTDecodeVerify) - RegisterFunctionalBuiltin3(ast.JWTEncodeSignRaw.Name, builtinJWTEncodeSignRaw) - RegisterFunctionalBuiltin3(ast.JWTEncodeSign.Name, builtinJWTEncodeSign) + RegisterBuiltinFunc(ast.JWTEncodeSignRaw.Name, builtinJWTEncodeSignRaw) + RegisterBuiltinFunc(ast.JWTEncodeSign.Name, builtinJWTEncodeSign) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/trace.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/trace.go index 93390ad00..49aa5aff6 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/trace.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/trace.go @@ -7,11 +7,11 @@ package topdown import ( "fmt" "io" - "path/filepath" "strings" + iStrs "github.com/open-policy-agent/opa/internal/strings" + "github.com/open-policy-agent/opa/ast" - "github.com/open-policy-agent/opa/internal/lcss" "github.com/open-policy-agent/opa/topdown/builtins" ) @@ -293,7 +293,7 @@ func getShortenedFileNames(trace []*Event) (map[string]string, int) { // Get a deduplicated list of all file paths // and the longest file path size fpAliases := map[string]string{} - var canShorten [][]byte + var canShorten []string longestLocation := 0 for _, event := range trace { if event.Location != nil { @@ -308,14 +308,7 @@ func getShortenedFileNames(trace []*Event) (map[string]string, int) { continue } - // Only try and shorten the middle parts of paths, ex: bundle1/.../a/b/policy.rego - path := filepath.Dir(event.Location.File) - path = strings.TrimPrefix(path, string(filepath.Separator)) - firstSlash := strings.IndexRune(path, filepath.Separator) - if firstSlash > 0 { - path = path[firstSlash+1:] - } - canShorten = append(canShorten, []byte(path)) + canShorten = append(canShorten, event.Location.File) // Default to just alias their full path fpAliases[event.Location.File] = event.Location.File @@ -330,36 +323,7 @@ func getShortenedFileNames(trace []*Event) (map[string]string, int) { } if len(canShorten) > 0 && longestLocation > maxIdealLocationWidth { - // Find the longest common path segment.. - var lcs string - if len(canShorten) > 1 { - lcs = string(lcss.LongestCommonSubstring(canShorten...)) - } else { - lcs = string(canShorten[0]) - } - - // Don't just swap in the full LCSS, trim it down to be the least amount of - // characters to reach our "ideal" width boundary giving as much - // detail as possible without going too long. - diff := maxIdealLocationWidth - (longestLocation - len(lcs) + 3) - if diff > 0 { - if diff > len(lcs) { - lcs = "" - } else { - // Favor data on the right hand side of the path - lcs = lcs[:len(lcs)-diff] - } - } - - // Swap in "..." for the longest common path, but if it makes things better - if len(lcs) > 3 { - for path := range fpAliases { - fpAliases[path] = strings.Replace(path, lcs, "...", 1) - } - - // Drop the overall length down to match our substitution - longestLocation = longestLocation - (len(lcs) - 3) - } + fpAliases, longestLocation = iStrs.TruncateFilePaths(maxIdealLocationWidth, longestLocation, canShorten...) } return fpAliases, longestLocation diff --git a/constraint/vendor/github.com/open-policy-agent/opa/topdown/uuid.go b/constraint/vendor/github.com/open-policy-agent/opa/topdown/uuid.go index 9e41c6d75..d08adb0ac 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/topdown/uuid.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/topdown/uuid.go @@ -13,22 +13,21 @@ type uuidCachingKey string func builtinUUIDRFC4122(bctx BuiltinContext, args []*ast.Term, iter func(*ast.Term) error) error { - var result *ast.Term var key = uuidCachingKey(args[0].Value.String()) - if val, ok := bctx.Cache.Get(key); !ok { - s, err := uuid.New(bctx.Seed) - if err != nil { - return err - } - - result = ast.NewTerm(ast.String(s)) - bctx.Cache.Put(key, result) + val, ok := bctx.Cache.Get(key) + if ok { + return iter(val.(*ast.Term)) + } - } else { - result = val.(*ast.Term) + s, err := uuid.New(bctx.Seed) + if err != nil { + return err } + result := ast.NewTerm(ast.String(s)) + bctx.Cache.Put(key, result) + return iter(result) } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/types/decode.go b/constraint/vendor/github.com/open-policy-agent/opa/types/decode.go index c05fc56be..4e123384a 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/types/decode.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/types/decode.go @@ -87,12 +87,25 @@ func Unmarshal(bs []byte) (result Type, err error) { case typeFunction: var decl rawdecl if err = util.UnmarshalJSON(bs, &decl); err == nil { - var args []Type - if args, err = unmarshalSlice(decl.Args); err == nil { - var ret Type - if ret, err = Unmarshal(decl.Result); err == nil { - result = NewFunction(args, ret) + args, err := unmarshalSlice(decl.Args) + if err != nil { + return nil, err + } + var ret Type + if len(decl.Result) > 0 { + ret, err = Unmarshal(decl.Result) + if err != nil { + return nil, err + } + } + if len(decl.Variadic) > 0 { + varargs, err := Unmarshal(decl.Variadic) + if err != nil { + return nil, err } + result = NewVariadicFunction(args, varargs, ret) + } else { + result = NewFunction(args, ret) } } default: @@ -136,8 +149,9 @@ type rawunion struct { } type rawdecl struct { - Args []json.RawMessage `json:"args"` - Result json.RawMessage `json:"result"` + Args []json.RawMessage `json:"args"` + Result json.RawMessage `json:"result"` + Variadic json.RawMessage `json:"variadic"` } func unmarshalSlice(elems []json.RawMessage) (result []Type, err error) { diff --git a/constraint/vendor/github.com/open-policy-agent/opa/types/types.go b/constraint/vendor/github.com/open-policy-agent/opa/types/types.go index 7d78061d8..9b5cc66c4 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/types/types.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/types/types.go @@ -346,16 +346,21 @@ func (t *Object) MarshalJSON() ([]byte, error) { // Select returns the type of the named property. func (t *Object) Select(name interface{}) Type { - for _, p := range t.static { - if util.Compare(p.Key, name) == 0 { - return p.Value - } + + pos := sort.Search(len(t.static), func(x int) bool { + return util.Compare(t.static[x].Key, name) >= 0 + }) + + if pos < len(t.static) && util.Compare(t.static[pos].Key, name) == 0 { + return t.static[pos].Value } + if t.dynamic != nil { if Contains(t.dynamic.Key, TypeOf(name)) { return t.dynamic.Value } } + return nil } @@ -371,6 +376,7 @@ func NewAny(of ...Type) Any { for i := range sl { sl[i] = of[i] } + sort.Sort(typeSlice(sl)) return sl } @@ -406,7 +412,14 @@ func (t Any) Merge(other Type) Any { if t.Contains(other) { return t } - return append(t, other) + cpy := make(Any, len(t)+1) + idx := sort.Search(len(t), func(i int) bool { + return Compare(t[i], other) >= 0 + }) + copy(cpy, t[:idx]) + cpy[idx] = other + copy(cpy[idx+1:], t[idx:]) + return cpy } // Union returns a new Any type that is the union of the two Any types. @@ -426,6 +439,7 @@ func (t Any) Union(other Any) Any { cpy = append(cpy, other[i]) } } + sort.Sort(typeSlice(cpy)) return cpy } @@ -443,8 +457,9 @@ func (t Any) String() string { // Function represents a function type. type Function struct { - args []Type - result Type + args []Type + result Type + variadic Type } // Args returns an argument list. @@ -452,6 +467,26 @@ func Args(x ...Type) []Type { return x } +// Void returns true if the function has no return value. This function returns +// false if x is not a function. +func Void(x Type) bool { + f, ok := x.(*Function) + return ok && f.Result() == nil +} + +// Arity returns the number of arguments in the function signature or zero if x +// is not a function. If the type is unknown, this function returns -1. +func Arity(x Type) int { + if x == nil { + return -1 + } + f, ok := x.(*Function) + if !ok { + return 0 + } + return len(f.FuncArgs().Args) +} + // NewFunction returns a new Function object where xs[:len(xs)-1] are arguments // and xs[len(xs)-1] is the result type. func NewFunction(args []Type, result Type) *Function { @@ -461,9 +496,31 @@ func NewFunction(args []Type, result Type) *Function { } } -// Args returns the function's argument types. +// NewVariadicFunction returns a new Function object. This function sets the +// variadic bit on the signature. Non-void variadic functions are not currently +// supported. +func NewVariadicFunction(args []Type, varargs Type, result Type) *Function { + if result != nil { + panic("illegal value: non-void variadic functions not supported") + } + return &Function{ + args: args, + variadic: varargs, + result: nil, + } +} + +// FuncArgs returns the function's arguments. +func (t *Function) FuncArgs() FuncArgs { + return FuncArgs{Args: t.Args(), Variadic: t.variadic} +} + +// Args returns the function's arguments as a slice, ignoring variadic arguments. +// Deprecated: Use FuncArgs instead. func (t *Function) Args() []Type { - return t.args + cpy := make([]Type, len(t.args)) + copy(cpy, t.args) + return cpy } // Result returns the function's result type. @@ -472,19 +529,7 @@ func (t *Function) Result() Type { } func (t *Function) String() string { - var args string - if len(t.args) != 1 { - args = "(" - } - buf := []string{} - for _, a := range t.Args() { - buf = append(buf, Sprint(a)) - } - args += strings.Join(buf, ", ") - if len(t.args) != 1 { - args += ")" - } - return fmt.Sprintf("%v => %v", args, Sprint(t.Result())) + return fmt.Sprintf("%v => %v", t.FuncArgs(), Sprint(t.Result())) } // MarshalJSON returns the JSON encoding of t. @@ -498,6 +543,9 @@ func (t *Function) MarshalJSON() ([]byte, error) { if t.result != nil { repr["result"] = t.result } + if t.variadic != nil { + repr["variadic"] = t.variadic + } return json.Marshal(repr) } @@ -526,17 +574,55 @@ func (t *Function) Union(other *Function) *Function { } else if t == nil { return other } + a := t.Args() b := other.Args() if len(a) != len(b) { return nil } + + aIsVariadic := t.FuncArgs().Variadic != nil + bIsVariadic := other.FuncArgs().Variadic != nil + + if aIsVariadic && !bIsVariadic { + return nil + } else if bIsVariadic && !aIsVariadic { + return nil + } + args := make([]Type, len(a)) for i := range a { args[i] = Or(a[i], b[i]) } - return NewFunction(args, Or(t.Result(), other.Result())) + result := NewFunction(args, Or(t.Result(), other.Result())) + result.variadic = Or(t.FuncArgs().Variadic, other.FuncArgs().Variadic) + + return result +} + +// FuncArgs represents the arguments that can be passed to a function. +type FuncArgs struct { + Args []Type `json:"args,omitempty"` + Variadic Type `json:"variadic,omitempty"` +} + +func (a FuncArgs) String() string { + var buf []string + for i := range a.Args { + buf = append(buf, Sprint(a.Args[i])) + } + if a.Variadic != nil { + buf = append(buf, Sprint(a.Variadic)+"...") + } + return "(" + strings.Join(buf, ", ") + ")" +} + +func (a FuncArgs) Arg(x int) Type { + if x < len(a.Args) { + return a.Args[x] + } + return a.Variadic } // Compare returns -1, 0, 1 based on comparison between a and b. @@ -620,8 +706,6 @@ func Compare(a, b Type) int { case Any: sl1 := typeSlice(a.(Any)) sl2 := typeSlice(b.(Any)) - sort.Sort(sl1) - sort.Sort(sl2) return typeSliceCompare(sl1, sl2) case *Function: fA := a.(*Function) @@ -636,7 +720,10 @@ func Compare(a, b Type) int { return cmp } } - return Compare(fA.result, fB.result) + if cmp := Compare(fA.result, fB.result); cmp != 0 { + return cmp + } + return Compare(fA.variadic, fB.variadic) default: panic("unreachable") } diff --git a/constraint/vendor/github.com/open-policy-agent/opa/version/version.go b/constraint/vendor/github.com/open-policy-agent/opa/version/version.go index 387a51626..982b5d106 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/version/version.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/version/version.go @@ -10,7 +10,7 @@ import ( ) // Version is the canonical version of OPA. -var Version = "0.29.4" +var Version = "0.35.0" // GoVersion is the version of Go this was built with var GoVersion = runtime.Version() diff --git a/constraint/vendor/github.com/open-policy-agent/opa/version/wasm.go b/constraint/vendor/github.com/open-policy-agent/opa/version/wasm.go index d33b4770c..c274a7827 100644 --- a/constraint/vendor/github.com/open-policy-agent/opa/version/wasm.go +++ b/constraint/vendor/github.com/open-policy-agent/opa/version/wasm.go @@ -2,9 +2,12 @@ // Use of this source code is governed by an Apache2 // license that can be found in the LICENSE file. -// +build opa_wasm - package version +import "github.com/open-policy-agent/opa/internal/rego/opa" + // WasmRuntimeAvailable indicates if a wasm runtime is available in this OPA. -const WasmRuntimeAvailable = true +func WasmRuntimeAvailable() bool { + _, err := opa.LookupEngine("wasm") + return err == nil +} diff --git a/constraint/vendor/github.com/open-policy-agent/opa/version/wasm_nop.go b/constraint/vendor/github.com/open-policy-agent/opa/version/wasm_nop.go deleted file mode 100644 index 7668f06f0..000000000 --- a/constraint/vendor/github.com/open-policy-agent/opa/version/wasm_nop.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2020 The OPA Authors. All rights reserved. -// Use of this source code is governed by an Apache2 -// license that can be found in the LICENSE file. - -// +build !opa_wasm - -package version - -// WasmRuntimeAvailable indicates if a wasm runtime is available in this OPA. -const WasmRuntimeAvailable = false diff --git a/constraint/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go b/constraint/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go index 18a99d5fa..c41ab37f3 100644 --- a/constraint/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go +++ b/constraint/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go @@ -22,43 +22,10 @@ type expvarCollector struct { exports map[string]*Desc } -// NewExpvarCollector returns a newly allocated expvar Collector that still has -// to be registered with a Prometheus registry. +// NewExpvarCollector is the obsolete version of collectors.NewExpvarCollector. +// See there for documentation. // -// An expvar Collector collects metrics from the expvar interface. It provides a -// quick way to expose numeric values that are already exported via expvar as -// Prometheus metrics. Note that the data models of expvar and Prometheus are -// fundamentally different, and that the expvar Collector is inherently slower -// than native Prometheus metrics. Thus, the expvar Collector is probably great -// for experiments and prototying, but you should seriously consider a more -// direct implementation of Prometheus metrics for monitoring production -// systems. -// -// The exports map has the following meaning: -// -// The keys in the map correspond to expvar keys, i.e. for every expvar key you -// want to export as Prometheus metric, you need an entry in the exports -// map. The descriptor mapped to each key describes how to export the expvar -// value. It defines the name and the help string of the Prometheus metric -// proxying the expvar value. The type will always be Untyped. -// -// For descriptors without variable labels, the expvar value must be a number or -// a bool. The number is then directly exported as the Prometheus sample -// value. (For a bool, 'false' translates to 0 and 'true' to 1). Expvar values -// that are not numbers or bools are silently ignored. -// -// If the descriptor has one variable label, the expvar value must be an expvar -// map. The keys in the expvar map become the various values of the one -// Prometheus label. The values in the expvar map must be numbers or bools again -// as above. -// -// For descriptors with more than one variable label, the expvar must be a -// nested expvar map, i.e. where the values of the topmost map are maps again -// etc. until a depth is reached that corresponds to the number of labels. The -// leaves of that structure must be numbers or bools as above to serve as the -// sample values. -// -// Anything that does not fit into the scheme above is silently ignored. +// Deprecated: Use collectors.NewExpvarCollector instead. func NewExpvarCollector(exports map[string]*Desc) Collector { return &expvarCollector{ exports: exports, diff --git a/constraint/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/constraint/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index db43ca5ba..a96ed1cee 100644 --- a/constraint/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/constraint/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -36,32 +36,10 @@ type goCollector struct { msMaxAge time.Duration // Maximum allowed age of old memstats. } -// NewGoCollector returns a collector that exports metrics about the current Go -// process. This includes memory stats. To collect those, runtime.ReadMemStats -// is called. This requires to “stop the world”, which usually only happens for -// garbage collection (GC). Take the following implications into account when -// deciding whether to use the Go collector: +// NewGoCollector is the obsolete version of collectors.NewGoCollector. +// See there for documentation. // -// 1. The performance impact of stopping the world is the more relevant the more -// frequently metrics are collected. However, with Go1.9 or later the -// stop-the-world time per metrics collection is very short (~25µs) so that the -// performance impact will only matter in rare cases. However, with older Go -// versions, the stop-the-world duration depends on the heap size and can be -// quite significant (~1.7 ms/GiB as per -// https://go-review.googlesource.com/c/go/+/34937). -// -// 2. During an ongoing GC, nothing else can stop the world. Therefore, if the -// metrics collection happens to coincide with GC, it will only complete after -// GC has finished. Usually, GC is fast enough to not cause problems. However, -// with a very large heap, GC might take multiple seconds, which is enough to -// cause scrape timeouts in common setups. To avoid this problem, the Go -// collector will use the memstats from a previous collection if -// runtime.ReadMemStats takes more than 1s. However, if there are no previously -// collected memstats, or their collection is more than 5m ago, the collection -// will block until runtime.ReadMemStats succeeds. -// -// NOTE: The problem is solved in Go 1.15, see -// https://github.com/golang/go/issues/19812 for the related Go issue. +// Deprecated: Use collectors.NewGoCollector instead. func NewGoCollector() Collector { return &goCollector{ goroutinesDesc: NewDesc( @@ -366,23 +344,10 @@ type memStatsMetrics []struct { valType ValueType } -// NewBuildInfoCollector returns a collector collecting a single metric -// "go_build_info" with the constant value 1 and three labels "path", "version", -// and "checksum". Their label values contain the main module path, version, and -// checksum, respectively. The labels will only have meaningful values if the -// binary is built with Go module support and from source code retrieved from -// the source repository (rather than the local file system). This is usually -// accomplished by building from outside of GOPATH, specifying the full address -// of the main package, e.g. "GO111MODULE=on go run -// github.com/prometheus/client_golang/examples/random". If built without Go -// module support, all label values will be "unknown". If built with Go module -// support but using the source code from the local file system, the "path" will -// be set appropriately, but "checksum" will be empty and "version" will be -// "(devel)". +// NewBuildInfoCollector is the obsolete version of collectors.NewBuildInfoCollector. +// See there for documentation. // -// This collector uses only the build information for the main module. See -// https://github.com/povilasv/prommod for an example of a collector for the -// module dependencies. +// Deprecated: Use collectors.NewBuildInfoCollector instead. func NewBuildInfoCollector() Collector { path, version, sum := "unknown", "unknown", "unknown" if bi, ok := debug.ReadBuildInfo(); ok { diff --git a/constraint/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/constraint/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index 3346fa1c5..8425640b3 100644 --- a/constraint/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/constraint/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -47,7 +47,12 @@ type Histogram interface { Metric Collector - // Observe adds a single observation to the histogram. + // Observe adds a single observation to the histogram. Observations are + // usually positive or zero. Negative observations are accepted but + // prevent current versions of Prometheus from properly detecting + // counter resets in the sum of observations. See + // https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations + // for details. Observe(float64) } diff --git a/constraint/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/constraint/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go index c46702d60..5bfe0ff5b 100644 --- a/constraint/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go +++ b/constraint/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go @@ -54,16 +54,10 @@ type ProcessCollectorOpts struct { ReportErrors bool } -// NewProcessCollector returns a collector which exports the current state of -// process metrics including CPU, memory and file descriptor usage as well as -// the process start time. The detailed behavior is defined by the provided -// ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a -// collector for the current process with an empty namespace string and no error -// reporting. +// NewProcessCollector is the obsolete version of collectors.NewProcessCollector. +// See there for documentation. // -// The collector only works on operating systems with a Linux-style proc -// filesystem and on Microsoft Windows. On other operating systems, it will not -// collect any metrics. +// Deprecated: Use collectors.NewProcessCollector instead. func NewProcessCollector(opts ProcessCollectorOpts) Collector { ns := "" if len(opts.Namespace) > 0 { diff --git a/constraint/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/constraint/vendor/github.com/prometheus/client_golang/prometheus/summary.go index fb5ce22bf..c5fa8ed7c 100644 --- a/constraint/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/constraint/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -55,7 +55,12 @@ type Summary interface { Metric Collector - // Observe adds a single observation to the summary. + // Observe adds a single observation to the summary. Observations are + // usually positive or zero. Negative observations are accepted but + // prevent current versions of Prometheus from properly detecting + // counter resets in the sum of observations. See + // https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations + // for details. Observe(float64) } @@ -121,7 +126,9 @@ type SummaryOpts struct { Objectives map[float64]float64 // MaxAge defines the duration for which an observation stays relevant - // for the summary. Must be positive. The default value is DefMaxAge. + // for the summary. Only applies to pre-calculated quantiles, does not + // apply to _sum and _count. Must be positive. The default value is + // DefMaxAge. MaxAge time.Duration // AgeBuckets is the number of buckets used to exclude observations that diff --git a/constraint/vendor/github.com/prometheus/common/expfmt/encode.go b/constraint/vendor/github.com/prometheus/common/expfmt/encode.go index bd4e34745..64dc0eb40 100644 --- a/constraint/vendor/github.com/prometheus/common/expfmt/encode.go +++ b/constraint/vendor/github.com/prometheus/common/expfmt/encode.go @@ -18,7 +18,7 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/proto" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. "github.com/matttproud/golang_protobuf_extensions/pbutil" "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg" diff --git a/constraint/vendor/github.com/prometheus/common/expfmt/text_parse.go b/constraint/vendor/github.com/prometheus/common/expfmt/text_parse.go index b6079b31e..84be0643e 100644 --- a/constraint/vendor/github.com/prometheus/common/expfmt/text_parse.go +++ b/constraint/vendor/github.com/prometheus/common/expfmt/text_parse.go @@ -24,7 +24,7 @@ import ( dto "github.com/prometheus/client_model/go" - "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/proto" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. "github.com/prometheus/common/model" ) diff --git a/constraint/vendor/github.com/prometheus/procfs/Makefile b/constraint/vendor/github.com/prometheus/procfs/Makefile index 616a0d25e..fa2bd5b52 100644 --- a/constraint/vendor/github.com/prometheus/procfs/Makefile +++ b/constraint/vendor/github.com/prometheus/procfs/Makefile @@ -18,6 +18,8 @@ include Makefile.common ./ttar -C $(dir $*) -x -f $*.ttar touch $@ +fixtures: fixtures/.unpacked + update_fixtures: rm -vf fixtures/.unpacked ./ttar -c -f fixtures.ttar fixtures/ diff --git a/constraint/vendor/github.com/prometheus/procfs/Makefile.common b/constraint/vendor/github.com/prometheus/procfs/Makefile.common index 3ac29c636..a1b1ca40f 100644 --- a/constraint/vendor/github.com/prometheus/procfs/Makefile.common +++ b/constraint/vendor/github.com/prometheus/procfs/Makefile.common @@ -78,12 +78,12 @@ ifneq ($(shell which gotestsum),) endif endif -PROMU_VERSION ?= 0.7.0 +PROMU_VERSION ?= 0.12.0 PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz GOLANGCI_LINT := GOLANGCI_LINT_OPTS ?= -GOLANGCI_LINT_VERSION ?= v1.18.0 +GOLANGCI_LINT_VERSION ?= v1.39.0 # golangci-lint only supports linux, darwin and windows platforms on i386/amd64. # windows isn't included here because of the path separator being different. ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) @@ -118,7 +118,7 @@ endif %: common-% ; .PHONY: common-all -common-all: precheck style check_license lint unused build test +common-all: precheck style check_license lint yamllint unused build test .PHONY: common-style common-style: @@ -198,6 +198,15 @@ else endif endif +.PHONY: common-yamllint +common-yamllint: + @echo ">> running yamllint on all YAML files in the repository" +ifeq (, $(shell which yamllint)) + @echo "yamllint not installed so skipping" +else + yamllint . +endif + # For backward-compatibility. .PHONY: common-staticcheck common-staticcheck: lint diff --git a/constraint/vendor/github.com/prometheus/procfs/README.md b/constraint/vendor/github.com/prometheus/procfs/README.md index 55d1e3261..43c37735a 100644 --- a/constraint/vendor/github.com/prometheus/procfs/README.md +++ b/constraint/vendor/github.com/prometheus/procfs/README.md @@ -6,8 +6,8 @@ metrics from the pseudo-filesystems /proc and /sys. *WARNING*: This package is a work in progress. Its API may still break in backwards-incompatible ways without warnings. Use it at your own risk. -[![GoDoc](https://godoc.org/github.com/prometheus/procfs?status.png)](https://godoc.org/github.com/prometheus/procfs) -[![Build Status](https://travis-ci.org/prometheus/procfs.svg?branch=master)](https://travis-ci.org/prometheus/procfs) +[![Go Reference](https://pkg.go.dev/badge/github.com/prometheus/procfs.svg)](https://pkg.go.dev/github.com/prometheus/procfs) +[![CircleCI](https://circleci.com/gh/prometheus/procfs/tree/master.svg?style=svg)](https://circleci.com/gh/prometheus/procfs/tree/master) [![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/procfs)](https://goreportcard.com/report/github.com/prometheus/procfs) ## Usage diff --git a/constraint/vendor/github.com/prometheus/procfs/cmdline.go b/constraint/vendor/github.com/prometheus/procfs/cmdline.go new file mode 100644 index 000000000..bf4f3b48c --- /dev/null +++ b/constraint/vendor/github.com/prometheus/procfs/cmdline.go @@ -0,0 +1,30 @@ +// Copyright 2021 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package procfs + +import ( + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// CmdLine returns the command line of the kernel. +func (fs FS) CmdLine() ([]string, error) { + data, err := util.ReadFileNoStat(fs.proc.Path("cmdline")) + if err != nil { + return nil, err + } + + return strings.Fields(string(data)), nil +} diff --git a/constraint/vendor/github.com/prometheus/procfs/doc.go b/constraint/vendor/github.com/prometheus/procfs/doc.go index e2acd6d40..d31a82600 100644 --- a/constraint/vendor/github.com/prometheus/procfs/doc.go +++ b/constraint/vendor/github.com/prometheus/procfs/doc.go @@ -31,7 +31,7 @@ // log.Fatalf("could not get process: %s", err) // } // -// stat, err := p.NewStat() +// stat, err := p.Stat() // if err != nil { // log.Fatalf("could not get process stat: %s", err) // } diff --git a/constraint/vendor/github.com/prometheus/procfs/fixtures.ttar b/constraint/vendor/github.com/prometheus/procfs/fixtures.ttar index 1e76173da..5e7eeef4a 100644 --- a/constraint/vendor/github.com/prometheus/procfs/fixtures.ttar +++ b/constraint/vendor/github.com/prometheus/procfs/fixtures.ttar @@ -644,6 +644,11 @@ Node 0, zone DMA32 759 572 791 475 194 45 12 0 Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/cmdline +Lines: 1 +BOOT_IMAGE=/vmlinuz-5.11.0-22-generic root=UUID=456a0345-450d-4f7b-b7c9-43e3241d99ad ro quiet splash vt.handoff=7 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/proc/cpuinfo Lines: 216 processor : 0 @@ -2204,6 +2209,23 @@ Lines: 1 00015c73 00020e76 F0000769 00000000 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/proc/net/stat +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/net/stat/arp_cache +Lines: 3 +entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs unresolved_discards table_fulls +00000014 00000001 00000002 00000003 00000004 00000005 00000006 00000007 00000008 00000009 0000000a 0000000b 0000000c +00000014 0000000d 0000000e 0000000f 00000010 00000011 00000012 00000013 00000014 00000015 00000016 00000017 00000018 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/net/stat/ndisc_cache +Lines: 3 +entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs unresolved_discards table_fulls +00000024 000000f0 000000f1 000000f2 000000f3 000000f4 000000f5 000000f6 000000f7 000000f8 000000f9 000000fa 000000fb +00000024 000000fc 000000fd 000000fe 000000ff 00000100 00000101 00000102 00000103 00000104 00000105 00000106 00000107 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/proc/net/tcp Lines: 4 sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode @@ -3455,6 +3477,460 @@ Mode: 664 Directory: fixtures/sys/class Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/drm +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/drm/card0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/drm/card0/device +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/aer_dev_correctable +Lines: 9 +RxErr 0 +BadTLP 0 +BadDLLP 0 +Rollover 0 +Timeout 0 +NonFatalErr 0 +CorrIntErr 0 +HeaderOF 0 +TOTAL_ERR_COR 0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/aer_dev_fatal +Lines: 19 +Undefined 0 +DLP 0 +SDES 0 +TLP 0 +FCP 0 +CmpltTO 0 +CmpltAbrt 0 +UnxCmplt 0 +RxOF 0 +MalfTLP 0 +ECRC 0 +UnsupReq 0 +ACSViol 0 +UncorrIntErr 0 +BlockedTLP 0 +AtomicOpBlocked 0 +TLPBlockedErr 0 +PoisonTLPBlocked 0 +TOTAL_ERR_FATAL 0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/aer_dev_nonfatal +Lines: 19 +Undefined 0 +DLP 0 +SDES 0 +TLP 0 +FCP 0 +CmpltTO 0 +CmpltAbrt 0 +UnxCmplt 0 +RxOF 0 +MalfTLP 0 +ECRC 0 +UnsupReq 0 +ACSViol 0 +UncorrIntErr 0 +BlockedTLP 0 +AtomicOpBlocked 0 +TLPBlockedErr 0 +PoisonTLPBlocked 0 +TOTAL_ERR_NONFATAL 0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/ari_enabled +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/boot_vga +Lines: 1 +1 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/broken_parity_status +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/class +Lines: 1 +0x030000 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/consistent_dma_mask_bits +Lines: 1 +44 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/current_link_speed +Lines: 1 +8.0 GT/s PCIe +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/current_link_width +Lines: 1 +16 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/d3cold_allowed +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/device +Lines: 1 +0x687f +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/dma_mask_bits +Lines: 1 +44 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/driver_override +Lines: 1 +(null) +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/enable +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/gpu_busy_percent +Lines: 1 +4 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/irq +Lines: 1 +95 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/local_cpulist +Lines: 1 +0-15 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/local_cpus +Lines: 1 +0000ffff +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/max_link_speed +Lines: 1 +8.0 GT/s PCIe +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/max_link_width +Lines: 1 +16 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_gtt_total +Lines: 1 +8573157376 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_gtt_used +Lines: 1 +144560128 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_vis_vram_total +Lines: 1 +8573157376 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_vis_vram_used +Lines: 1 +1490378752 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_vram_total +Lines: 1 +8573157376 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_vram_used +Lines: 1 +1490378752 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/mem_info_vram_vendor +Lines: 1 +samsung +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/modalias +Lines: 1 +pci:v00001002d0000687Fsv00001043sd000004C4bc03sc00i00 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/msi_bus +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/numa_node +Lines: 1 +-1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pcie_bw +Lines: 1 +6641 815 256 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pcie_replay_count +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/power_dpm_force_performance_level +Lines: 1 +manual +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/power_dpm_state +Lines: 1 +performance +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/power_state +Lines: 1 +D0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_cur_state +Lines: 1 +1 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_dpm_dcefclk +Lines: 5 +0: 600Mhz * +1: 720Mhz +2: 800Mhz +3: 847Mhz +4: 900Mhz +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_dpm_mclk +Lines: 4 +0: 167Mhz * +1: 500Mhz +2: 800Mhz +3: 945Mhz +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_dpm_pcie +Lines: 2 +0: 8.0GT/s, x16 +1: 8.0GT/s, x16 * +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_dpm_sclk +Lines: 8 +0: 852Mhz * +1: 991Mhz +2: 1084Mhz +3: 1138Mhz +4: 1200Mhz +5: 1401Mhz +6: 1536Mhz +7: 1630Mhz +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_dpm_socclk +Lines: 8 +0: 600Mhz +1: 720Mhz * +2: 800Mhz +3: 847Mhz +4: 900Mhz +5: 960Mhz +6: 1028Mhz +7: 1107Mhz +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_features +Lines: 32 +Current ppfeatures: 0x0000000019a1ff4f +FEATURES BITMASK ENABLEMENT +DPM_PREFETCHER 0x0000000000000001 Y +GFXCLK_DPM 0x0000000000000002 Y +UCLK_DPM 0x0000000000000004 Y +SOCCLK_DPM 0x0000000000000008 Y +UVD_DPM 0x0000000000000010 N +VCE_DPM 0x0000000000000020 N +ULV 0x0000000000000040 Y +MP0CLK_DPM 0x0000000000000080 N +LINK_DPM 0x0000000000000100 Y +DCEFCLK_DPM 0x0000000000000200 Y +AVFS 0x0000000000000400 Y +GFXCLK_DS 0x0000000000000800 Y +SOCCLK_DS 0x0000000000001000 Y +LCLK_DS 0x0000000000002000 Y +PPT 0x0000000000004000 Y +TDC 0x0000000000008000 Y +THERMAL 0x0000000000010000 Y +GFX_PER_CU_CG 0x0000000000020000 N +RM 0x0000000000040000 N +DCEFCLK_DS 0x0000000000080000 N +ACDC 0x0000000000100000 N +VR0HOT 0x0000000000200000 Y +VR1HOT 0x0000000000400000 N +FW_CTF 0x0000000000800000 Y +LED_DISPLAY 0x0000000001000000 Y +FAN_CONTROL 0x0000000002000000 N +FAST_PPT 0x0000000004000000 N +DIDT 0x0000000008000000 Y +ACG 0x0000000010000000 Y +PCC_LIMIT 0x0000000020000000 N +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_force_state +Lines: 1 + +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_mclk_od +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_num_states +Lines: 3 +states: 2 +0 boot +1 performance +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_od_clk_voltage +Lines: 18 +OD_SCLK: +0: 852Mhz 800mV +1: 991Mhz 900mV +2: 1084Mhz 950mV +3: 1138Mhz 1000mV +4: 1200Mhz 1050mV +5: 1401Mhz 1100mV +6: 1536Mhz 1150mV +7: 1630Mhz 1200mV +OD_MCLK: +0: 167Mhz 800mV +1: 500Mhz 800mV +2: 800Mhz 950mV +3: 945Mhz 1100mV +OD_RANGE: +SCLK: 852MHz 2400MHz +MCLK: 167MHz 1500MHz +VDDC: 800mV 1200mV +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_power_profile_mode +Lines: 8 +NUM MODE_NAME BUSY_SET_POINT FPS USE_RLC_BUSY MIN_ACTIVE_LEVEL + 0 BOOTUP_DEFAULT : 70 60 0 0 + 1 3D_FULL_SCREEN*: 70 60 1 3 + 2 POWER_SAVING : 90 60 0 0 + 3 VIDEO : 70 60 0 0 + 4 VR : 70 90 0 0 + 5 COMPUTE : 30 60 0 6 + 6 CUSTOM : 0 0 0 0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/pp_sclk_od +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/product_name +Lines: 1 + +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/product_number +Lines: 1 + +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/resource +Lines: 13 +0x0000007c00000000 0x0000007dffffffff 0x000000000014220c +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x0000007e00000000 0x0000007e0fffffff 0x000000000014220c +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x000000000000d000 0x000000000000d0ff 0x0000000000040101 +0x00000000fcd00000 0x00000000fcd7ffff 0x0000000000040200 +0x00000000fcd80000 0x00000000fcd9ffff 0x0000000000046200 +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x0000000000000000 0x0000000000000000 0x0000000000000000 +0x0000000000000000 0x0000000000000000 0x0000000000000000 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/revision +Lines: 1 +0xc1 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/serial_number +Lines: 1 + +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/subsystem_device +Lines: 1 +0x04c4 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/subsystem_vendor +Lines: 1 +0x1043 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/thermal_throttling_logging +Lines: 1 +0000:09:00.0: thermal throttling logging enabled, with interval 60 seconds +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/uevent +Lines: 6 +DRIVER=amdgpu +PCI_CLASS=30000 +PCI_ID=1002:687F +PCI_SUBSYS_ID=1043:04C4 +PCI_SLOT_NAME=0000:09:00.0 +MODALIAS=pci:v00001002d0000687Fsv00001043sd000004C4bc03sc00i00 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/unique_id +Lines: 1 +0123456789abcdef +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/vbios_version +Lines: 1 +115-D050PIL-100 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/drm/card0/device/vendor +Lines: 1 +0x1002 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/class/fc_host Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3592,140 +4068,262 @@ Mode: 644 Directory: fixtures/sys/class/infiniband Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/class/infiniband/mlx4_0 +Directory: fixtures/sys/class/infiniband/hfi1_0 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/board_id -Lines: 1 -SM_1141000001000 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/fw_ver +Path: fixtures/sys/class/infiniband/hfi1_0/board_id Lines: 1 -2.31.5050 +HPE 100Gb 1-port OP101 QSFP28 x16 PCIe Gen3 with Intel Omni-Path Adapter Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/hca_type +Path: fixtures/sys/class/infiniband/hfi1_0/fw_ver Lines: 1 -MT4099 +1.27.0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/class/infiniband/mlx4_0/ports +Directory: fixtures/sys/class/infiniband/hfi1_0/ports Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/class/infiniband/mlx4_0/ports/1 +Directory: fixtures/sys/class/infiniband/hfi1_0/ports/1 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters +Directory: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/VL15_dropped +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/VL15_dropped Lines: 1 0 -Mode: 664 +Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/excessive_buffer_overrun_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/excessive_buffer_overrun_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/link_downed +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/link_downed Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/link_error_recovery +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/link_error_recovery Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/local_link_integrity_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/local_link_integrity_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_constraint_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_rcv_constraint_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_data +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_rcv_data Lines: 1 -2221223609 +345091702026 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_rcv_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_packets +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_rcv_packets Lines: 1 -87169372 +638036947 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_remote_physical_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_rcv_remote_physical_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_switch_relay_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_rcv_switch_relay_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_constraint_errors +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_xmit_constraint_errors Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_data +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_xmit_data Lines: 1 -26509113295 +273558326543 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_discards +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_xmit_discards Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_packets +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_xmit_packets Lines: 1 -85734114 +568318856 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_wait +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/port_xmit_wait Lines: 1 -3599 +0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/symbol_error +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/counters/symbol_error Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/phys_state +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/phys_state Lines: 1 5: LinkUp Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/rate +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/rate Lines: 1 -40 Gb/sec (4X QDR) +100 Gb/sec (4X EDR) Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/state +Path: fixtures/sys/class/infiniband/hfi1_0/ports/1/state Lines: 1 4: ACTIVE Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/class/infiniband/mlx4_0/ports/2 +Directory: fixtures/sys/class/infiniband/mlx4_0 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters -Mode: 755 +Path: fixtures/sys/class/infiniband/mlx4_0/board_id +Lines: 1 +SM_1141000001000 +Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters/VL15_dropped +Path: fixtures/sys/class/infiniband/mlx4_0/fw_ver +Lines: 1 +2.31.5050 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/hca_type +Lines: 1 +MT4099 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/infiniband/mlx4_0/ports +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/infiniband/mlx4_0/ports/1 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/VL15_dropped +Lines: 1 +0 +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/excessive_buffer_overrun_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/link_downed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/link_error_recovery +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/local_link_integrity_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_constraint_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_data +Lines: 1 +2221223609 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_packets +Lines: 1 +87169372 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_remote_physical_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_rcv_switch_relay_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_constraint_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_data +Lines: 1 +26509113295 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_discards +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_packets +Lines: 1 +85734114 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/port_xmit_wait +Lines: 1 +3599 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/symbol_error +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/phys_state +Lines: 1 +5: LinkUp +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/rate +Lines: 1 +40 Gb/sec (4X QDR) +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/state +Lines: 1 +4: ACTIVE +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/infiniband/mlx4_0/ports/2 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters/VL15_dropped Lines: 1 0 Mode: 664 @@ -3960,6 +4558,32 @@ Lines: 1 1 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/nvme +Mode: 775 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/nvme/nvme0 +Mode: 775 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/nvme/nvme0/firmware_rev +Lines: 1 +1B2QEXP7 +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/nvme/nvme0/model +Lines: 1 +Samsung SSD 970 PRO 512GB +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/nvme/nvme0/serial +Lines: 1 +S680HF8N190894I +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/nvme/nvme0/state +Lines: 1 +live +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/class/power_supply Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4164,6 +4788,33 @@ Path: fixtures/sys/class/powercap/intel-rapl:a/uevent Lines: 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/scsi_tape +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/nst0 +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/nst0a +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/nst0l +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/nst0m +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/st0 +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/st0a +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/st0l +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/scsi_tape/st0m +SymlinkTo: ../../devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/class/thermal Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4575,6 +5226,475 @@ Mode: 444 Directory: fixtures/sys/devices/pci0000:00 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0a/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0l/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/nst0m/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0a/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0l/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/in_flight +Lines: 1 +1EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/io_ns +Lines: 1 +9247011087720EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/other_cnt +Lines: 1 +1409EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/read_byte_cnt +Lines: 1 +979383912EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/read_cnt +Lines: 1 +3741EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/read_ns +Lines: 1 +33788355744EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/resid_cnt +Lines: 1 +19EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/write_byte_cnt +Lines: 1 +1496246784000EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/write_cnt +Lines: 1 +53772916EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/pci0000:00/0000:00:00.0/host0/port-0:0/end_device-0:0/target0:0:0/0:0:0:0/scsi_tape/st0m/stats/write_ns +Lines: 1 +5233597394395EOF +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/devices/pci0000:00/0000:00:0d.0 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4978,35 +6098,6 @@ Mode: 644 Directory: fixtures/sys/devices/system Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/devices/system/node -Mode: 775 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/devices/system/node/node1 -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/devices/system/node/node1/vmstat -Lines: 6 -nr_free_pages 1 -nr_zone_inactive_anon 2 -nr_zone_active_anon 3 -nr_zone_inactive_file 4 -nr_zone_active_file 5 -nr_zone_unevictable 6 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/sys/devices/system/node/node2 -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/sys/devices/system/node/node2/vmstat -Lines: 6 -nr_free_pages 7 -nr_zone_inactive_anon 8 -nr_zone_active_anon 9 -nr_zone_inactive_file 10 -nr_zone_active_file 11 -nr_zone_unevictable 12 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/devices/system/clocksource Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5254,6 +6345,35 @@ Mode: 644 Directory: fixtures/sys/devices/system/cpu/cpufreq/policy1 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/system/node +Mode: 775 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/system/node/node1 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/system/node/node1/vmstat +Lines: 6 +nr_free_pages 1 +nr_zone_inactive_anon 2 +nr_zone_active_anon 3 +nr_zone_inactive_file 4 +nr_zone_active_file 5 +nr_zone_unevictable 6 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/devices/system/node/node2 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/devices/system/node/node2/vmstat +Lines: 6 +nr_free_pages 7 +nr_zone_inactive_anon 8 +nr_zone_active_anon 9 +nr_zone_inactive_file 10 +nr_zone_active_file 11 +nr_zone_unevictable 12 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/fs Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/constraint/vendor/github.com/prometheus/procfs/mdstat.go b/constraint/vendor/github.com/prometheus/procfs/mdstat.go index 4c4493bfa..f0b9e5f75 100644 --- a/constraint/vendor/github.com/prometheus/procfs/mdstat.go +++ b/constraint/vendor/github.com/prometheus/procfs/mdstat.go @@ -22,9 +22,12 @@ import ( ) var ( - statusLineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`) - recoveryLineRE = regexp.MustCompile(`\((\d+)/\d+\)`) - componentDeviceRE = regexp.MustCompile(`(.*)\[\d+\]`) + statusLineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[([U_]+)\]`) + recoveryLineBlocksRE = regexp.MustCompile(`\((\d+)/\d+\)`) + recoveryLinePctRE = regexp.MustCompile(`= (.+)%`) + recoveryLineFinishRE = regexp.MustCompile(`finish=(.+)min`) + recoveryLineSpeedRE = regexp.MustCompile(`speed=(.+)[A-Z]`) + componentDeviceRE = regexp.MustCompile(`(.*)\[\d+\]`) ) // MDStat holds info parsed from /proc/mdstat. @@ -39,12 +42,20 @@ type MDStat struct { DisksTotal int64 // Number of failed disks. DisksFailed int64 + // Number of "down" disks. (the _ indicator in the status line) + DisksDown int64 // Spare disks in the device. DisksSpare int64 // Number of blocks the device holds. BlocksTotal int64 // Number of blocks on the device that are in sync. BlocksSynced int64 + // progress percentage of current sync + BlocksSyncedPct float64 + // estimated finishing time for current sync (in minutes) + BlocksSyncedFinishTime float64 + // current sync speed (in Kilobytes/sec) + BlocksSyncedSpeed float64 // Name of md component devices Devices []string } @@ -91,7 +102,7 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { // Failed disks have the suffix (F) & Spare disks have the suffix (S). fail := int64(strings.Count(line, "(F)")) spare := int64(strings.Count(line, "(S)")) - active, total, size, err := evalStatusLine(lines[i], lines[i+1]) + active, total, down, size, err := evalStatusLine(lines[i], lines[i+1]) if err != nil { return nil, fmt.Errorf("error parsing md device lines: %w", err) @@ -105,6 +116,9 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { // If device is syncing at the moment, get the number of currently // synced bytes, otherwise that number equals the size of the device. syncedBlocks := size + speed := float64(0) + finish := float64(0) + pct := float64(0) recovering := strings.Contains(lines[syncLineIdx], "recovery") resyncing := strings.Contains(lines[syncLineIdx], "resync") checking := strings.Contains(lines[syncLineIdx], "check") @@ -124,7 +138,7 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { strings.Contains(lines[syncLineIdx], "DELAYED") { syncedBlocks = 0 } else { - syncedBlocks, err = evalRecoveryLine(lines[syncLineIdx]) + syncedBlocks, pct, finish, speed, err = evalRecoveryLine(lines[syncLineIdx]) if err != nil { return nil, fmt.Errorf("error parsing sync line in md device %q: %w", mdName, err) } @@ -132,69 +146,104 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { } mdStats = append(mdStats, MDStat{ - Name: mdName, - ActivityState: state, - DisksActive: active, - DisksFailed: fail, - DisksSpare: spare, - DisksTotal: total, - BlocksTotal: size, - BlocksSynced: syncedBlocks, - Devices: evalComponentDevices(deviceFields), + Name: mdName, + ActivityState: state, + DisksActive: active, + DisksFailed: fail, + DisksDown: down, + DisksSpare: spare, + DisksTotal: total, + BlocksTotal: size, + BlocksSynced: syncedBlocks, + BlocksSyncedPct: pct, + BlocksSyncedFinishTime: finish, + BlocksSyncedSpeed: speed, + Devices: evalComponentDevices(deviceFields), }) } return mdStats, nil } -func evalStatusLine(deviceLine, statusLine string) (active, total, size int64, err error) { +func evalStatusLine(deviceLine, statusLine string) (active, total, down, size int64, err error) { sizeStr := strings.Fields(statusLine)[0] size, err = strconv.ParseInt(sizeStr, 10, 64) if err != nil { - return 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) + return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) } if strings.Contains(deviceLine, "raid0") || strings.Contains(deviceLine, "linear") { // In the device deviceLine, only disks have a number associated with them in []. total = int64(strings.Count(deviceLine, "[")) - return total, total, size, nil + return total, total, 0, size, nil } if strings.Contains(deviceLine, "inactive") { - return 0, 0, size, nil + return 0, 0, 0, size, nil } matches := statusLineRE.FindStringSubmatch(statusLine) - if len(matches) != 4 { - return 0, 0, 0, fmt.Errorf("couldn't find all the substring matches: %s", statusLine) + if len(matches) != 5 { + return 0, 0, 0, 0, fmt.Errorf("couldn't find all the substring matches: %s", statusLine) } total, err = strconv.ParseInt(matches[2], 10, 64) if err != nil { - return 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) + return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) } active, err = strconv.ParseInt(matches[3], 10, 64) if err != nil { - return 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) + return 0, 0, 0, 0, fmt.Errorf("unexpected statusLine %q: %w", statusLine, err) } + down = int64(strings.Count(matches[4], "_")) - return active, total, size, nil + return active, total, down, size, nil } -func evalRecoveryLine(recoveryLine string) (syncedBlocks int64, err error) { - matches := recoveryLineRE.FindStringSubmatch(recoveryLine) +func evalRecoveryLine(recoveryLine string) (syncedBlocks int64, pct float64, finish float64, speed float64, err error) { + matches := recoveryLineBlocksRE.FindStringSubmatch(recoveryLine) if len(matches) != 2 { - return 0, fmt.Errorf("unexpected recoveryLine: %s", recoveryLine) + return 0, 0, 0, 0, fmt.Errorf("unexpected recoveryLine: %s", recoveryLine) } syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64) if err != nil { - return 0, fmt.Errorf("error parsing int from recoveryLine %q: %w", recoveryLine, err) + return 0, 0, 0, 0, fmt.Errorf("error parsing int from recoveryLine %q: %w", recoveryLine, err) } - return syncedBlocks, nil + // Get percentage complete + matches = recoveryLinePctRE.FindStringSubmatch(recoveryLine) + if len(matches) != 2 { + return syncedBlocks, 0, 0, 0, fmt.Errorf("unexpected recoveryLine matching percentage: %s", recoveryLine) + } + pct, err = strconv.ParseFloat(strings.TrimSpace(matches[1]), 64) + if err != nil { + return syncedBlocks, 0, 0, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) + } + + // Get time expected left to complete + matches = recoveryLineFinishRE.FindStringSubmatch(recoveryLine) + if len(matches) != 2 { + return syncedBlocks, pct, 0, 0, fmt.Errorf("unexpected recoveryLine matching est. finish time: %s", recoveryLine) + } + finish, err = strconv.ParseFloat(matches[1], 64) + if err != nil { + return syncedBlocks, pct, 0, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) + } + + // Get recovery speed + matches = recoveryLineSpeedRE.FindStringSubmatch(recoveryLine) + if len(matches) != 2 { + return syncedBlocks, pct, finish, 0, fmt.Errorf("unexpected recoveryLine matching speed: %s", recoveryLine) + } + speed, err = strconv.ParseFloat(matches[1], 64) + if err != nil { + return syncedBlocks, pct, finish, 0, fmt.Errorf("error parsing float from recoveryLine %q: %w", recoveryLine, err) + } + + return syncedBlocks, pct, finish, speed, nil } func evalComponentDevices(deviceFields []string) []string { diff --git a/constraint/vendor/github.com/prometheus/procfs/net_ip_socket.go b/constraint/vendor/github.com/prometheus/procfs/net_ip_socket.go index ac01dd847..8c9ee3de8 100644 --- a/constraint/vendor/github.com/prometheus/procfs/net_ip_socket.go +++ b/constraint/vendor/github.com/prometheus/procfs/net_ip_socket.go @@ -65,6 +65,7 @@ type ( TxQueue uint64 RxQueue uint64 UID uint64 + Inode uint64 } ) @@ -150,9 +151,9 @@ func parseIP(hexIP string) (net.IP, error) { // parseNetIPSocketLine parses a single line, represented by a list of fields. func parseNetIPSocketLine(fields []string) (*netIPSocketLine, error) { line := &netIPSocketLine{} - if len(fields) < 8 { + if len(fields) < 10 { return nil, fmt.Errorf( - "cannot parse net socket line as it has less then 8 columns %q", + "cannot parse net socket line as it has less then 10 columns %q", strings.Join(fields, " "), ) } @@ -216,5 +217,10 @@ func parseNetIPSocketLine(fields []string) (*netIPSocketLine, error) { return nil, fmt.Errorf("cannot parse uid value in socket line: %w", err) } + // inode + if line.Inode, err = strconv.ParseUint(fields[9], 0, 64); err != nil { + return nil, fmt.Errorf("cannot parse inode value in socket line: %w", err) + } + return line, nil } diff --git a/constraint/vendor/github.com/prometheus/procfs/netstat.go b/constraint/vendor/github.com/prometheus/procfs/netstat.go new file mode 100644 index 000000000..94d892f11 --- /dev/null +++ b/constraint/vendor/github.com/prometheus/procfs/netstat.go @@ -0,0 +1,68 @@ +// Copyright 2020 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package procfs + +import ( + "bufio" + "os" + "path/filepath" + "strconv" + "strings" +) + +// NetStat contains statistics for all the counters from one file +type NetStat struct { + Filename string + Stats map[string][]uint64 +} + +// NetStat retrieves stats from /proc/net/stat/ +func (fs FS) NetStat() ([]NetStat, error) { + statFiles, err := filepath.Glob(fs.proc.Path("net/stat/*")) + if err != nil { + return nil, err + } + + var netStatsTotal []NetStat + + for _, filePath := range statFiles { + file, err := os.Open(filePath) + if err != nil { + return nil, err + } + + netStatFile := NetStat{ + Filename: filepath.Base(filePath), + Stats: make(map[string][]uint64), + } + scanner := bufio.NewScanner(file) + scanner.Scan() + // First string is always a header for stats + var headers []string + headers = append(headers, strings.Fields(scanner.Text())...) + + // Other strings represent per-CPU counters + for scanner.Scan() { + for num, counter := range strings.Fields(scanner.Text()) { + value, err := strconv.ParseUint(counter, 16, 32) + if err != nil { + return nil, err + } + netStatFile.Stats[headers[num]] = append(netStatFile.Stats[headers[num]], value) + } + } + netStatsTotal = append(netStatsTotal, netStatFile) + } + return netStatsTotal, nil +} diff --git a/constraint/vendor/github.com/prometheus/procfs/proc_cgroup.go b/constraint/vendor/github.com/prometheus/procfs/proc_cgroup.go index 0094a13c0..be45b7987 100644 --- a/constraint/vendor/github.com/prometheus/procfs/proc_cgroup.go +++ b/constraint/vendor/github.com/prometheus/procfs/proc_cgroup.go @@ -90,7 +90,7 @@ func parseCgroups(data []byte) ([]Cgroup, error) { // control hierarchy running on this system. On every system (v1 and v2), all hierarchies contain all processes, // so the len of the returned struct is equal to the number of active hierarchies on this system func (p Proc) Cgroups() ([]Cgroup, error) { - data, err := util.ReadFileNoStat(fmt.Sprintf("/proc/%d/cgroup", p.PID)) + data, err := util.ReadFileNoStat(p.path("cgroup")) if err != nil { return nil, err } diff --git a/constraint/vendor/github.com/prometheus/procfs/proc_stat.go b/constraint/vendor/github.com/prometheus/procfs/proc_stat.go index 67ca0e9fb..8c7b6e80a 100644 --- a/constraint/vendor/github.com/prometheus/procfs/proc_stat.go +++ b/constraint/vendor/github.com/prometheus/procfs/proc_stat.go @@ -100,6 +100,15 @@ type ProcStat struct { VSize uint // Resident set size in pages. RSS int + // Soft limit in bytes on the rss of the process. + RSSLimit uint64 + // Real-time scheduling priority, a number in the range 1 to 99 for processes + // scheduled under a real-time policy, or 0, for non-real-time processes. + RTPriority uint + // Scheduling policy. + Policy uint + // Aggregated block I/O delays, measured in clock ticks (centiseconds). + DelayAcctBlkIOTicks uint64 proc fs.FS } @@ -119,7 +128,8 @@ func (p Proc) Stat() (ProcStat, error) { } var ( - ignore int + ignoreInt64 int64 + ignoreUint64 uint64 s = ProcStat{PID: p.PID, proc: p.fs} l = bytes.Index(data, []byte("(")) @@ -151,10 +161,28 @@ func (p Proc) Stat() (ProcStat, error) { &s.Priority, &s.Nice, &s.NumThreads, - &ignore, + &ignoreInt64, &s.Starttime, &s.VSize, &s.RSS, + &s.RSSLimit, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreUint64, + &ignoreInt64, + &ignoreInt64, + &s.RTPriority, + &s.Policy, + &s.DelayAcctBlkIOTicks, ) if err != nil { return ProcStat{}, err diff --git a/constraint/vendor/github.com/prometheus/procfs/zoneinfo.go b/constraint/vendor/github.com/prometheus/procfs/zoneinfo.go index 0b9bb6796..209e2ac98 100644 --- a/constraint/vendor/github.com/prometheus/procfs/zoneinfo.go +++ b/constraint/vendor/github.com/prometheus/procfs/zoneinfo.go @@ -99,7 +99,6 @@ func parseZoneinfo(zoneinfoData []byte) ([]Zoneinfo, error) { continue } if strings.HasPrefix(strings.TrimSpace(line), "per-node stats") { - zoneinfoElement.Zone = "" continue } parts := strings.Fields(strings.TrimSpace(line)) diff --git a/constraint/vendor/github.com/spf13/cobra/.travis.yml b/constraint/vendor/github.com/spf13/cobra/.travis.yml deleted file mode 100644 index e0a3b5004..000000000 --- a/constraint/vendor/github.com/spf13/cobra/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: go - -stages: - - test - - build - -go: - - 1.12.x - - 1.13.x - - tip - -env: GO111MODULE=on - -before_install: - - go get -u github.com/kyoh86/richgo - - go get -u github.com/mitchellh/gox - - curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin latest - -matrix: - allow_failures: - - go: tip - include: - - stage: build - go: 1.13.x - script: make cobra_generator - -script: - - make test diff --git a/constraint/vendor/github.com/spf13/cobra/README.md b/constraint/vendor/github.com/spf13/cobra/README.md index a1b13ddda..074e3979f 100644 --- a/constraint/vendor/github.com/spf13/cobra/README.md +++ b/constraint/vendor/github.com/spf13/cobra/README.md @@ -7,7 +7,6 @@ Cobra is used in many Go projects such as [Kubernetes](http://kubernetes.io/), name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra. [![](https://img.shields.io/github/workflow/status/spf13/cobra/Test?longCache=tru&label=Test&logo=github%20actions&logoColor=fff)](https://github.com/spf13/cobra/actions?query=workflow%3ATest) -[![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra) [![GoDoc](https://godoc.org/github.com/spf13/cobra?status.svg)](https://godoc.org/github.com/spf13/cobra) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra) [![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199) @@ -19,18 +18,18 @@ name a few. [This list](./projects_using_cobra.md) contains a more extensive lis * [Commands](#commands) * [Flags](#flags) - [Installing](#installing) -- [Getting Started](#getting-started) - * [Using the Cobra Generator](#using-the-cobra-generator) - * [Using the Cobra Library](#using-the-cobra-library) - * [Working with Flags](#working-with-flags) - * [Positional and Custom Arguments](#positional-and-custom-arguments) - * [Example](#example) - * [Help Command](#help-command) - * [Usage Message](#usage-message) - * [PreRun and PostRun Hooks](#prerun-and-postrun-hooks) - * [Suggestions when "unknown command" happens](#suggestions-when-unknown-command-happens) - * [Generating documentation for your command](#generating-documentation-for-your-command) - * [Generating shell completions](#generating-shell-completions) +- [Usage](#usage) + * [Using the Cobra Generator](user_guide.md#using-the-cobra-generator) + * [Using the Cobra Library](user_guide.md#using-the-cobra-library) + * [Working with Flags](user_guide.md#working-with-flags) + * [Positional and Custom Arguments](user_guide.md#positional-and-custom-arguments) + * [Example](user_guide.md#example) + * [Help Command](user_guide.md#help-command) + * [Usage Message](user_guide.md#usage-message) + * [PreRun and PostRun Hooks](user_guide.md#prerun-and-postrun-hooks) + * [Suggestions when "unknown command" happens](user_guide.md#suggestions-when-unknown-command-happens) + * [Generating documentation for your command](user_guide.md#generating-documentation-for-your-command) + * [Generating shell completions](user_guide.md#generating-shell-completions) - [Contributing](CONTRIBUTING.md) - [License](#license) @@ -117,643 +116,9 @@ Next, include Cobra in your application: import "github.com/spf13/cobra" ``` -# Getting Started +# Usage -While you are welcome to provide your own organization, typically a Cobra-based -application will follow the following organizational structure: - -``` - ▾ appName/ - ▾ cmd/ - add.go - your.go - commands.go - here.go - main.go -``` - -In a Cobra app, typically the main.go file is very bare. It serves one purpose: initializing Cobra. - -```go -package main - -import ( - "{pathToYourApp}/cmd" -) - -func main() { - cmd.Execute() -} -``` - -## Using the Cobra Generator - -Cobra provides its own program that will create your application and add any -commands you want. It's the easiest way to incorporate Cobra into your application. - -[Here](https://github.com/spf13/cobra/blob/master/cobra/README.md) you can find more information about it. - -## Using the Cobra Library - -To manually implement Cobra you need to create a bare main.go file and a rootCmd file. -You will optionally provide additional commands as you see fit. - -### Create rootCmd - -Cobra doesn't require any special constructors. Simply create your commands. - -Ideally you place this in app/cmd/root.go: - -```go -var rootCmd = &cobra.Command{ - Use: "hugo", - Short: "Hugo is a very fast static site generator", - Long: `A Fast and Flexible Static Site Generator built with - love by spf13 and friends in Go. - Complete documentation is available at http://hugo.spf13.com`, - Run: func(cmd *cobra.Command, args []string) { - // Do Stuff Here - }, -} - -func Execute() { - if err := rootCmd.Execute(); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } -} -``` - -You will additionally define flags and handle configuration in your init() function. - -For example cmd/root.go: - -```go -package cmd - -import ( - "fmt" - "os" - - homedir "github.com/mitchellh/go-homedir" - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -var ( - // Used for flags. - cfgFile string - userLicense string - - rootCmd = &cobra.Command{ - Use: "cobra", - Short: "A generator for Cobra based Applications", - Long: `Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, - } -) - -// Execute executes the root command. -func Execute() error { - return rootCmd.Execute() -} - -func init() { - cobra.OnInitialize(initConfig) - - rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)") - rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "author name for copyright attribution") - rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "name of license for the project") - rootCmd.PersistentFlags().Bool("viper", true, "use Viper for configuration") - viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author")) - viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper")) - viper.SetDefault("author", "NAME HERE ") - viper.SetDefault("license", "apache") - - rootCmd.AddCommand(addCmd) - rootCmd.AddCommand(initCmd) -} - -func initConfig() { - if cfgFile != "" { - // Use config file from the flag. - viper.SetConfigFile(cfgFile) - } else { - // Find home directory. - home, err := homedir.Dir() - cobra.CheckErr(err) - - // Search config in home directory with name ".cobra" (without extension). - viper.AddConfigPath(home) - viper.SetConfigName(".cobra") - } - - viper.AutomaticEnv() - - if err := viper.ReadInConfig(); err == nil { - fmt.Println("Using config file:", viper.ConfigFileUsed()) - } -} -``` - -### Create your main.go - -With the root command you need to have your main function execute it. -Execute should be run on the root for clarity, though it can be called on any command. - -In a Cobra app, typically the main.go file is very bare. It serves one purpose: to initialize Cobra. - -```go -package main - -import ( - "{pathToYourApp}/cmd" -) - -func main() { - cmd.Execute() -} -``` - -### Create additional commands - -Additional commands can be defined and typically are each given their own file -inside of the cmd/ directory. - -If you wanted to create a version command you would create cmd/version.go and -populate it with the following: - -```go -package cmd - -import ( - "fmt" - - "github.com/spf13/cobra" -) - -func init() { - rootCmd.AddCommand(versionCmd) -} - -var versionCmd = &cobra.Command{ - Use: "version", - Short: "Print the version number of Hugo", - Long: `All software has versions. This is Hugo's`, - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("Hugo Static Site Generator v0.9 -- HEAD") - }, -} -``` - -### Returning and handling errors - -If you wish to return an error to the caller of a command, `RunE` can be used. - -```go -package cmd - -import ( - "fmt" - - "github.com/spf13/cobra" -) - -func init() { - rootCmd.AddCommand(tryCmd) -} - -var tryCmd = &cobra.Command{ - Use: "try", - Short: "Try and possibly fail at something", - RunE: func(cmd *cobra.Command, args []string) error { - if err := someFunc(); err != nil { - return err - } - return nil - }, -} -``` - -The error can then be caught at the execute function call. - -## Working with Flags - -Flags provide modifiers to control how the action command operates. - -### Assign flags to a command - -Since the flags are defined and used in different locations, we need to -define a variable outside with the correct scope to assign the flag to -work with. - -```go -var Verbose bool -var Source string -``` - -There are two different approaches to assign a flag. - -### Persistent Flags - -A flag can be 'persistent', meaning that this flag will be available to the -command it's assigned to as well as every command under that command. For -global flags, assign a flag as a persistent flag on the root. - -```go -rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output") -``` - -### Local Flags - -A flag can also be assigned locally, which will only apply to that specific command. - -```go -localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from") -``` - -### Local Flag on Parent Commands - -By default, Cobra only parses local flags on the target command, and any local flags on -parent commands are ignored. By enabling `Command.TraverseChildren`, Cobra will -parse local flags on each command before executing the target command. - -```go -command := cobra.Command{ - Use: "print [OPTIONS] [COMMANDS]", - TraverseChildren: true, -} -``` - -### Bind Flags with Config - -You can also bind your flags with [viper](https://github.com/spf13/viper): -```go -var author string - -func init() { - rootCmd.PersistentFlags().StringVar(&author, "author", "YOUR NAME", "Author name for copyright attribution") - viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author")) -} -``` - -In this example, the persistent flag `author` is bound with `viper`. -**Note**: the variable `author` will not be set to the value from config, -when the `--author` flag is not provided by user. - -More in [viper documentation](https://github.com/spf13/viper#working-with-flags). - -### Required flags - -Flags are optional by default. If instead you wish your command to report an error -when a flag has not been set, mark it as required: -```go -rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)") -rootCmd.MarkFlagRequired("region") -``` - -Or, for persistent flags: -```go -rootCmd.PersistentFlags().StringVarP(&Region, "region", "r", "", "AWS region (required)") -rootCmd.MarkPersistentFlagRequired("region") -``` - -## Positional and Custom Arguments - -Validation of positional arguments can be specified using the `Args` field -of `Command`. - -The following validators are built in: - -- `NoArgs` - the command will report an error if there are any positional args. -- `ArbitraryArgs` - the command will accept any args. -- `OnlyValidArgs` - the command will report an error if there are any positional args that are not in the `ValidArgs` field of `Command`. -- `MinimumNArgs(int)` - the command will report an error if there are not at least N positional args. -- `MaximumNArgs(int)` - the command will report an error if there are more than N positional args. -- `ExactArgs(int)` - the command will report an error if there are not exactly N positional args. -- `ExactValidArgs(int)` - the command will report an error if there are not exactly N positional args OR if there are any positional args that are not in the `ValidArgs` field of `Command` -- `RangeArgs(min, max)` - the command will report an error if the number of args is not between the minimum and maximum number of expected args. - -An example of setting the custom validator: - -```go -var cmd = &cobra.Command{ - Short: "hello", - Args: func(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return errors.New("requires a color argument") - } - if myapp.IsValidColor(args[0]) { - return nil - } - return fmt.Errorf("invalid color specified: %s", args[0]) - }, - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("Hello, World!") - }, -} -``` - -## Example - -In the example below, we have defined three commands. Two are at the top level -and one (cmdTimes) is a child of one of the top commands. In this case the root -is not executable, meaning that a subcommand is required. This is accomplished -by not providing a 'Run' for the 'rootCmd'. - -We have only defined one flag for a single command. - -More documentation about flags is available at https://github.com/spf13/pflag - -```go -package main - -import ( - "fmt" - "strings" - - "github.com/spf13/cobra" -) - -func main() { - var echoTimes int - - var cmdPrint = &cobra.Command{ - Use: "print [string to print]", - Short: "Print anything to the screen", - Long: `print is for printing anything back to the screen. -For many years people have printed back to the screen.`, - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("Print: " + strings.Join(args, " ")) - }, - } - - var cmdEcho = &cobra.Command{ - Use: "echo [string to echo]", - Short: "Echo anything to the screen", - Long: `echo is for echoing anything back. -Echo works a lot like print, except it has a child command.`, - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("Echo: " + strings.Join(args, " ")) - }, - } - - var cmdTimes = &cobra.Command{ - Use: "times [string to echo]", - Short: "Echo anything to the screen more times", - Long: `echo things multiple times back to the user by providing -a count and a string.`, - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - for i := 0; i < echoTimes; i++ { - fmt.Println("Echo: " + strings.Join(args, " ")) - } - }, - } - - cmdTimes.Flags().IntVarP(&echoTimes, "times", "t", 1, "times to echo the input") - - var rootCmd = &cobra.Command{Use: "app"} - rootCmd.AddCommand(cmdPrint, cmdEcho) - cmdEcho.AddCommand(cmdTimes) - rootCmd.Execute() -} -``` - -For a more complete example of a larger application, please checkout [Hugo](http://gohugo.io/). - -## Help Command - -Cobra automatically adds a help command to your application when you have subcommands. -This will be called when a user runs 'app help'. Additionally, help will also -support all other commands as input. Say, for instance, you have a command called -'create' without any additional configuration; Cobra will work when 'app help -create' is called. Every command will automatically have the '--help' flag added. - -### Example - -The following output is automatically generated by Cobra. Nothing beyond the -command and flag definitions are needed. - - $ cobra help - - Cobra is a CLI library for Go that empowers applications. - This application is a tool to generate the needed files - to quickly create a Cobra application. - - Usage: - cobra [command] - - Available Commands: - add Add a command to a Cobra Application - help Help about any command - init Initialize a Cobra Application - - Flags: - -a, --author string author name for copyright attribution (default "YOUR NAME") - --config string config file (default is $HOME/.cobra.yaml) - -h, --help help for cobra - -l, --license string name of license for the project - --viper use Viper for configuration (default true) - - Use "cobra [command] --help" for more information about a command. - - -Help is just a command like any other. There is no special logic or behavior -around it. In fact, you can provide your own if you want. - -### Defining your own help - -You can provide your own Help command or your own template for the default command to use -with following functions: - -```go -cmd.SetHelpCommand(cmd *Command) -cmd.SetHelpFunc(f func(*Command, []string)) -cmd.SetHelpTemplate(s string) -``` - -The latter two will also apply to any children commands. - -## Usage Message - -When the user provides an invalid flag or invalid command, Cobra responds by -showing the user the 'usage'. - -### Example -You may recognize this from the help above. That's because the default help -embeds the usage as part of its output. - - $ cobra --invalid - Error: unknown flag: --invalid - Usage: - cobra [command] - - Available Commands: - add Add a command to a Cobra Application - help Help about any command - init Initialize a Cobra Application - - Flags: - -a, --author string author name for copyright attribution (default "YOUR NAME") - --config string config file (default is $HOME/.cobra.yaml) - -h, --help help for cobra - -l, --license string name of license for the project - --viper use Viper for configuration (default true) - - Use "cobra [command] --help" for more information about a command. - -### Defining your own usage -You can provide your own usage function or template for Cobra to use. -Like help, the function and template are overridable through public methods: - -```go -cmd.SetUsageFunc(f func(*Command) error) -cmd.SetUsageTemplate(s string) -``` - -## Version Flag - -Cobra adds a top-level '--version' flag if the Version field is set on the root command. -Running an application with the '--version' flag will print the version to stdout using -the version template. The template can be customized using the -`cmd.SetVersionTemplate(s string)` function. - -## PreRun and PostRun Hooks - -It is possible to run functions before or after the main `Run` function of your command. The `PersistentPreRun` and `PreRun` functions will be executed before `Run`. `PersistentPostRun` and `PostRun` will be executed after `Run`. The `Persistent*Run` functions will be inherited by children if they do not declare their own. These functions are run in the following order: - -- `PersistentPreRun` -- `PreRun` -- `Run` -- `PostRun` -- `PersistentPostRun` - -An example of two commands which use all of these features is below. When the subcommand is executed, it will run the root command's `PersistentPreRun` but not the root command's `PersistentPostRun`: - -```go -package main - -import ( - "fmt" - - "github.com/spf13/cobra" -) - -func main() { - - var rootCmd = &cobra.Command{ - Use: "root [sub]", - Short: "My root command", - PersistentPreRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside rootCmd PersistentPreRun with args: %v\n", args) - }, - PreRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside rootCmd PreRun with args: %v\n", args) - }, - Run: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside rootCmd Run with args: %v\n", args) - }, - PostRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside rootCmd PostRun with args: %v\n", args) - }, - PersistentPostRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside rootCmd PersistentPostRun with args: %v\n", args) - }, - } - - var subCmd = &cobra.Command{ - Use: "sub [no options!]", - Short: "My subcommand", - PreRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside subCmd PreRun with args: %v\n", args) - }, - Run: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside subCmd Run with args: %v\n", args) - }, - PostRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside subCmd PostRun with args: %v\n", args) - }, - PersistentPostRun: func(cmd *cobra.Command, args []string) { - fmt.Printf("Inside subCmd PersistentPostRun with args: %v\n", args) - }, - } - - rootCmd.AddCommand(subCmd) - - rootCmd.SetArgs([]string{""}) - rootCmd.Execute() - fmt.Println() - rootCmd.SetArgs([]string{"sub", "arg1", "arg2"}) - rootCmd.Execute() -} -``` - -Output: -``` -Inside rootCmd PersistentPreRun with args: [] -Inside rootCmd PreRun with args: [] -Inside rootCmd Run with args: [] -Inside rootCmd PostRun with args: [] -Inside rootCmd PersistentPostRun with args: [] - -Inside rootCmd PersistentPreRun with args: [arg1 arg2] -Inside subCmd PreRun with args: [arg1 arg2] -Inside subCmd Run with args: [arg1 arg2] -Inside subCmd PostRun with args: [arg1 arg2] -Inside subCmd PersistentPostRun with args: [arg1 arg2] -``` - -## Suggestions when "unknown command" happens - -Cobra will print automatic suggestions when "unknown command" errors happen. This allows Cobra to behave similarly to the `git` command when a typo happens. For example: - -``` -$ hugo srever -Error: unknown command "srever" for "hugo" - -Did you mean this? - server - -Run 'hugo --help' for usage. -``` - -Suggestions are automatic based on every subcommand registered and use an implementation of [Levenshtein distance](http://en.wikipedia.org/wiki/Levenshtein_distance). Every registered command that matches a minimum distance of 2 (ignoring case) will be displayed as a suggestion. - -If you need to disable suggestions or tweak the string distance in your command, use: - -```go -command.DisableSuggestions = true -``` - -or - -```go -command.SuggestionsMinimumDistance = 1 -``` - -You can also explicitly set names for which a given command will be suggested using the `SuggestFor` attribute. This allows suggestions for strings that are not close in terms of string distance, but makes sense in your set of commands and for some which you don't want aliases. Example: - -``` -$ kubectl remove -Error: unknown command "remove" for "kubectl" - -Did you mean this? - delete - -Run 'kubectl help' for usage. -``` - -## Generating documentation for your command - -Cobra can generate documentation based on subcommands, flags, etc. Read more about it in the [docs generation documentation](doc/README.md). - -## Generating shell completions - -Cobra can generate a shell-completion file for the following shells: bash, zsh, fish, PowerShell. If you add more information to your commands, these completions can be amazingly powerful and flexible. Read more about it in [Shell Completions](shell_completions.md). +See [User Guide](user_guide.md). # License diff --git a/constraint/vendor/github.com/spf13/cobra/bash_completions.go b/constraint/vendor/github.com/spf13/cobra/bash_completions.go index 710614793..733f4d121 100644 --- a/constraint/vendor/github.com/spf13/cobra/bash_completions.go +++ b/constraint/vendor/github.com/spf13/cobra/bash_completions.go @@ -384,7 +384,7 @@ func writePostscript(buf io.StringWriter, name string) { name = strings.Replace(name, ":", "__", -1) WriteStringAndCheck(buf, fmt.Sprintf("__start_%s()\n", name)) WriteStringAndCheck(buf, fmt.Sprintf(`{ - local cur prev words cword + local cur prev words cword split declare -A flaghash 2>/dev/null || : declare -A aliashash 2>/dev/null || : if declare -F _init_completion >/dev/null 2>&1; then @@ -400,11 +400,13 @@ func writePostscript(buf io.StringWriter, name string) { local flags_with_completion=() local flags_completion=() local commands=("%[1]s") + local command_aliases=() local must_have_one_flag=() local must_have_one_noun=() local has_completion_function local last_command local nouns=() + local noun_aliases=() __%[1]s_handle_word } @@ -510,6 +512,8 @@ func writeLocalNonPersistentFlag(buf io.StringWriter, flag *pflag.Flag) { // Setup annotations for go completions for registered flags func prepareCustomAnnotationsForFlags(cmd *Command) { + flagCompletionMutex.RLock() + defer flagCompletionMutex.RUnlock() for flag := range flagCompletionFunctions { // Make sure the completion script calls the __*_go_custom_completion function for // every registered flag. We need to do this here (and not when the flag was registered diff --git a/constraint/vendor/github.com/spf13/cobra/bash_completions.md b/constraint/vendor/github.com/spf13/cobra/bash_completions.md index 130f99b92..52919b2fa 100644 --- a/constraint/vendor/github.com/spf13/cobra/bash_completions.md +++ b/constraint/vendor/github.com/spf13/cobra/bash_completions.md @@ -6,6 +6,8 @@ Please refer to [Shell Completions](shell_completions.md) for details. For backward compatibility, Cobra still supports its legacy dynamic completion solution (described below). Unlike the `ValidArgsFunction` solution, the legacy solution will only work for Bash shell-completion and not for other shells. This legacy solution can be used along-side `ValidArgsFunction` and `RegisterFlagCompletionFunc()`, as long as both solutions are not used for the same command. This provides a path to gradually migrate from the legacy solution to the new solution. +**Note**: Cobra's default `completion` command uses bash completion V2. If you are currently using Cobra's legacy dynamic completion solution, you should not use the default `completion` command but continue using your own. + The legacy solution allows you to inject bash functions into the bash completion script. Those bash functions are responsible for providing the completion choices for your own completions. Some code that works in kubernetes: diff --git a/constraint/vendor/github.com/spf13/cobra/bash_completionsV2.go b/constraint/vendor/github.com/spf13/cobra/bash_completionsV2.go new file mode 100644 index 000000000..8859b57c4 --- /dev/null +++ b/constraint/vendor/github.com/spf13/cobra/bash_completionsV2.go @@ -0,0 +1,302 @@ +package cobra + +import ( + "bytes" + "fmt" + "io" + "os" +) + +func (c *Command) genBashCompletion(w io.Writer, includeDesc bool) error { + buf := new(bytes.Buffer) + genBashComp(buf, c.Name(), includeDesc) + _, err := buf.WriteTo(w) + return err +} + +func genBashComp(buf io.StringWriter, name string, includeDesc bool) { + compCmd := ShellCompRequestCmd + if !includeDesc { + compCmd = ShellCompNoDescRequestCmd + } + + WriteStringAndCheck(buf, fmt.Sprintf(`# bash completion V2 for %-36[1]s -*- shell-script -*- + +__%[1]s_debug() +{ + if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then + echo "$*" >> "${BASH_COMP_DEBUG_FILE}" + fi +} + +# Macs have bash3 for which the bash-completion package doesn't include +# _init_completion. This is a minimal version of that function. +__%[1]s_init_completion() +{ + COMPREPLY=() + _get_comp_words_by_ref "$@" cur prev words cword +} + +# This function calls the %[1]s program to obtain the completion +# results and the directive. It fills the 'out' and 'directive' vars. +__%[1]s_get_completion_results() { + local requestComp lastParam lastChar args + + # Prepare the command to request completions for the program. + # Calling ${words[0]} instead of directly %[1]s allows to handle aliases + args=("${words[@]:1}") + requestComp="${words[0]} %[2]s ${args[*]}" + + lastParam=${words[$((${#words[@]}-1))]} + lastChar=${lastParam:$((${#lastParam}-1)):1} + __%[1]s_debug "lastParam ${lastParam}, lastChar ${lastChar}" + + if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then + # If the last parameter is complete (there is a space following it) + # We add an extra empty parameter so we can indicate this to the go method. + __%[1]s_debug "Adding extra empty parameter" + requestComp="${requestComp} ''" + fi + + # When completing a flag with an = (e.g., %[1]s -n=) + # bash focuses on the part after the =, so we need to remove + # the flag part from $cur + if [[ "${cur}" == -*=* ]]; then + cur="${cur#*=}" + fi + + __%[1]s_debug "Calling ${requestComp}" + # Use eval to handle any environment variables and such + out=$(eval "${requestComp}" 2>/dev/null) + + # Extract the directive integer at the very end of the output following a colon (:) + directive=${out##*:} + # Remove the directive + out=${out%%:*} + if [ "${directive}" = "${out}" ]; then + # There is not directive specified + directive=0 + fi + __%[1]s_debug "The completion directive is: ${directive}" + __%[1]s_debug "The completions are: ${out[*]}" +} + +__%[1]s_process_completion_results() { + local shellCompDirectiveError=%[3]d + local shellCompDirectiveNoSpace=%[4]d + local shellCompDirectiveNoFileComp=%[5]d + local shellCompDirectiveFilterFileExt=%[6]d + local shellCompDirectiveFilterDirs=%[7]d + + if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then + # Error code. No completion. + __%[1]s_debug "Received error from custom completion go code" + return + else + if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then + if [[ $(type -t compopt) = "builtin" ]]; then + __%[1]s_debug "Activating no space" + compopt -o nospace + else + __%[1]s_debug "No space directive not supported in this version of bash" + fi + fi + if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then + if [[ $(type -t compopt) = "builtin" ]]; then + __%[1]s_debug "Activating no file completion" + compopt +o default + else + __%[1]s_debug "No file completion directive not supported in this version of bash" + fi + fi + fi + + if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then + # File extension filtering + local fullFilter filter filteringCmd + + # Do not use quotes around the $out variable or else newline + # characters will be kept. + for filter in ${out[*]}; do + fullFilter+="$filter|" + done + + filteringCmd="_filedir $fullFilter" + __%[1]s_debug "File filtering command: $filteringCmd" + $filteringCmd + elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then + # File completion for directories only + + # Use printf to strip any trailing newline + local subdir + subdir=$(printf "%%s" "${out[0]}") + if [ -n "$subdir" ]; then + __%[1]s_debug "Listing directories in $subdir" + pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return + else + __%[1]s_debug "Listing directories in ." + _filedir -d + fi + else + __%[1]s_handle_standard_completion_case + fi + + __%[1]s_handle_special_char "$cur" : + __%[1]s_handle_special_char "$cur" = +} + +__%[1]s_handle_standard_completion_case() { + local tab comp + tab=$(printf '\t') + + local longest=0 + # Look for the longest completion so that we can format things nicely + while IFS='' read -r comp; do + # Strip any description before checking the length + comp=${comp%%%%$tab*} + # Only consider the completions that match + comp=$(compgen -W "$comp" -- "$cur") + if ((${#comp}>longest)); then + longest=${#comp} + fi + done < <(printf "%%s\n" "${out[@]}") + + local completions=() + while IFS='' read -r comp; do + if [ -z "$comp" ]; then + continue + fi + + __%[1]s_debug "Original comp: $comp" + comp="$(__%[1]s_format_comp_descriptions "$comp" "$longest")" + __%[1]s_debug "Final comp: $comp" + completions+=("$comp") + done < <(printf "%%s\n" "${out[@]}") + + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${completions[*]}" -- "$cur") + + # If there is a single completion left, remove the description text + if [ ${#COMPREPLY[*]} -eq 1 ]; then + __%[1]s_debug "COMPREPLY[0]: ${COMPREPLY[0]}" + comp="${COMPREPLY[0]%%%% *}" + __%[1]s_debug "Removed description from single completion, which is now: ${comp}" + COMPREPLY=() + COMPREPLY+=("$comp") + fi +} + +__%[1]s_handle_special_char() +{ + local comp="$1" + local char=$2 + if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then + local word=${comp%%"${comp##*${char}}"} + local idx=${#COMPREPLY[*]} + while [[ $((--idx)) -ge 0 ]]; do + COMPREPLY[$idx]=${COMPREPLY[$idx]#"$word"} + done + fi +} + +__%[1]s_format_comp_descriptions() +{ + local tab + tab=$(printf '\t') + local comp="$1" + local longest=$2 + + # Properly format the description string which follows a tab character if there is one + if [[ "$comp" == *$tab* ]]; then + desc=${comp#*$tab} + comp=${comp%%%%$tab*} + + # $COLUMNS stores the current shell width. + # Remove an extra 4 because we add 2 spaces and 2 parentheses. + maxdesclength=$(( COLUMNS - longest - 4 )) + + # Make sure we can fit a description of at least 8 characters + # if we are to align the descriptions. + if [[ $maxdesclength -gt 8 ]]; then + # Add the proper number of spaces to align the descriptions + for ((i = ${#comp} ; i < longest ; i++)); do + comp+=" " + done + else + # Don't pad the descriptions so we can fit more text after the completion + maxdesclength=$(( COLUMNS - ${#comp} - 4 )) + fi + + # If there is enough space for any description text, + # truncate the descriptions that are too long for the shell width + if [ $maxdesclength -gt 0 ]; then + if [ ${#desc} -gt $maxdesclength ]; then + desc=${desc:0:$(( maxdesclength - 1 ))} + desc+="…" + fi + comp+=" ($desc)" + fi + fi + + # Must use printf to escape all special characters + printf "%%q" "${comp}" +} + +__start_%[1]s() +{ + local cur prev words cword split + + COMPREPLY=() + + # Call _init_completion from the bash-completion package + # to prepare the arguments properly + if declare -F _init_completion >/dev/null 2>&1; then + _init_completion -n "=:" || return + else + __%[1]s_init_completion -n "=:" || return + fi + + __%[1]s_debug + __%[1]s_debug "========= starting completion logic ==========" + __%[1]s_debug "cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}, cword is $cword" + + # The user could have moved the cursor backwards on the command-line. + # We need to trigger completion from the $cword location, so we need + # to truncate the command-line ($words) up to the $cword location. + words=("${words[@]:0:$cword+1}") + __%[1]s_debug "Truncated words[*]: ${words[*]}," + + local out directive + __%[1]s_get_completion_results + __%[1]s_process_completion_results +} + +if [[ $(type -t compopt) = "builtin" ]]; then + complete -o default -F __start_%[1]s %[1]s +else + complete -o default -o nospace -F __start_%[1]s %[1]s +fi + +# ex: ts=4 sw=4 et filetype=sh +`, name, compCmd, + ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp, + ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs)) +} + +// GenBashCompletionFileV2 generates Bash completion version 2. +func (c *Command) GenBashCompletionFileV2(filename string, includeDesc bool) error { + outFile, err := os.Create(filename) + if err != nil { + return err + } + defer outFile.Close() + + return c.GenBashCompletionV2(outFile, includeDesc) +} + +// GenBashCompletionV2 generates Bash completion file version 2 +// and writes it to the passed writer. +func (c *Command) GenBashCompletionV2(w io.Writer, includeDesc bool) error { + return c.genBashCompletion(w, includeDesc) +} diff --git a/constraint/vendor/github.com/spf13/cobra/command.go b/constraint/vendor/github.com/spf13/cobra/command.go index d6732ad11..2cc18891d 100644 --- a/constraint/vendor/github.com/spf13/cobra/command.go +++ b/constraint/vendor/github.com/spf13/cobra/command.go @@ -63,9 +63,9 @@ type Command struct { // Example is examples of how to use the command. Example string - // ValidArgs is list of all valid non-flag arguments that are accepted in bash completions + // ValidArgs is list of all valid non-flag arguments that are accepted in shell completions ValidArgs []string - // ValidArgsFunction is an optional function that provides valid non-flag arguments for bash completion. + // ValidArgsFunction is an optional function that provides valid non-flag arguments for shell completion. // It is a dynamic version of using ValidArgs. // Only one of ValidArgs and ValidArgsFunction can be used for a command. ValidArgsFunction func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) @@ -74,11 +74,12 @@ type Command struct { Args PositionalArgs // ArgAliases is List of aliases for ValidArgs. - // These are not suggested to the user in the bash completion, + // These are not suggested to the user in the shell completion, // but accepted if entered manually. ArgAliases []string - // BashCompletionFunction is custom functions used by the bash autocompletion generator. + // BashCompletionFunction is custom bash functions used by the legacy bash autocompletion generator. + // For portability with other shells, it is recommended to instead use ValidArgsFunction BashCompletionFunction string // Deprecated defines, if this command is deprecated and should print this string when used. @@ -168,6 +169,9 @@ type Command struct { //FParseErrWhitelist flag parse errors to be ignored FParseErrWhitelist FParseErrWhitelist + // CompletionOptions is a set of options to control the handling of shell completion + CompletionOptions CompletionOptions + // commandsAreSorted defines, if command slice are sorted or not. commandsAreSorted bool // commandCalledAs is the name or alias value used to call this command. @@ -884,7 +888,8 @@ func (c *Command) preRun() { } // ExecuteContext is the same as Execute(), but sets the ctx on the command. -// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle functions. +// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs +// functions. func (c *Command) ExecuteContext(ctx context.Context) error { c.ctx = ctx return c.Execute() @@ -898,6 +903,14 @@ func (c *Command) Execute() error { return err } +// ExecuteContextC is the same as ExecuteC(), but sets the ctx on the command. +// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs +// functions. +func (c *Command) ExecuteContextC(ctx context.Context) (*Command, error) { + c.ctx = ctx + return c.ExecuteC() +} + // ExecuteC executes the command. func (c *Command) ExecuteC() (cmd *Command, err error) { if c.ctx == nil { @@ -914,9 +927,10 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { preExecHookFn(c) } - // initialize help as the last point possible to allow for user - // overriding + // initialize help at the last point to allow for user overriding c.InitDefaultHelpCmd() + // initialize completion at the last point to allow for user overriding + c.initDefaultCompletionCmd() args := c.args @@ -925,7 +939,7 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { args = os.Args[1:] } - // initialize the hidden command to be used for bash completion + // initialize the hidden command to be used for shell completion c.initCompleteCmd(args) var flags []string diff --git a/constraint/vendor/github.com/spf13/cobra/custom_completions.go b/constraint/vendor/github.com/spf13/cobra/completions.go similarity index 70% rename from constraint/vendor/github.com/spf13/cobra/custom_completions.go rename to constraint/vendor/github.com/spf13/cobra/completions.go index fa060c147..b849b9c84 100644 --- a/constraint/vendor/github.com/spf13/cobra/custom_completions.go +++ b/constraint/vendor/github.com/spf13/cobra/completions.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "strings" + "sync" "github.com/spf13/pflag" ) @@ -17,13 +18,25 @@ const ( ShellCompNoDescRequestCmd = "__completeNoDesc" ) -// Global map of flag completion functions. +// Global map of flag completion functions. Make sure to use flagCompletionMutex before you try to read and write from it. var flagCompletionFunctions = map[*pflag.Flag]func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective){} +// lock for reading and writing from flagCompletionFunctions +var flagCompletionMutex = &sync.RWMutex{} + // ShellCompDirective is a bit map representing the different behaviors the shell // can be instructed to have once completions have been provided. type ShellCompDirective int +type flagCompError struct { + subCommand string + flagName string +} + +func (e *flagCompError) Error() string { + return "Subcommand '" + e.subCommand + "' does not support flag '" + e.flagName + "'" +} + const ( // ShellCompDirectiveError indicates an error occurred and completions should be ignored. ShellCompDirectiveError ShellCompDirective = 1 << iota @@ -34,7 +47,6 @@ const ( // ShellCompDirectiveNoFileComp indicates that the shell should not provide // file completion even when no completion is provided. - // This currently does not work for zsh or bash < 4 ShellCompDirectiveNoFileComp // ShellCompDirectiveFilterFileExt indicates that the provided completions @@ -63,12 +75,41 @@ const ( ShellCompDirectiveDefault ShellCompDirective = 0 ) +const ( + // Constants for the completion command + compCmdName = "completion" + compCmdNoDescFlagName = "no-descriptions" + compCmdNoDescFlagDesc = "disable completion descriptions" + compCmdNoDescFlagDefault = false +) + +// CompletionOptions are the options to control shell completion +type CompletionOptions struct { + // DisableDefaultCmd prevents Cobra from creating a default 'completion' command + DisableDefaultCmd bool + // DisableNoDescFlag prevents Cobra from creating the '--no-descriptions' flag + // for shells that support completion descriptions + DisableNoDescFlag bool + // DisableDescriptions turns off all completion descriptions for shells + // that support them + DisableDescriptions bool +} + +// NoFileCompletions can be used to disable file completion for commands that should +// not trigger file completions. +func NoFileCompletions(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) { + return nil, ShellCompDirectiveNoFileComp +} + // RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag. func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error { flag := c.Flag(flagName) if flag == nil { return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' does not exist", flagName) } + flagCompletionMutex.Lock() + defer flagCompletionMutex.Unlock() + if _, exists := flagCompletionFunctions[flag]; exists { return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' already registered", flagName) } @@ -149,10 +190,6 @@ func (c *Command) initCompleteCmd(args []string) { fmt.Fprintln(finalCmd.OutOrStdout(), comp) } - if directive >= shellCompDirectiveMaxValue { - directive = ShellCompDirectiveDefault - } - // As the last printout, print the completion directive for the completion script to parse. // The directive integer must be that last character following a single colon (:). // The completion script expects : @@ -195,23 +232,41 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi // Unable to find the real command. E.g., someInvalidCmd return c, []string{}, ShellCompDirectiveDefault, fmt.Errorf("Unable to find a command for arguments: %v", trimmedArgs) } + finalCmd.ctx = c.ctx // Check if we are doing flag value completion before parsing the flags. // This is important because if we are completing a flag value, we need to also // remove the flag name argument from the list of finalArgs or else the parsing // could fail due to an invalid value (incomplete) for the flag. - flag, finalArgs, toComplete, err := checkIfFlagCompletion(finalCmd, finalArgs, toComplete) - if err != nil { - // Error while attempting to parse flags - return finalCmd, []string{}, ShellCompDirectiveDefault, err - } + flag, finalArgs, toComplete, flagErr := checkIfFlagCompletion(finalCmd, finalArgs, toComplete) + + // Check if interspersed is false or -- was set on a previous arg. + // This works by counting the arguments. Normally -- is not counted as arg but + // if -- was already set or interspersed is false and there is already one arg then + // the extra added -- is counted as arg. + flagCompletion := true + _ = finalCmd.ParseFlags(append(finalArgs, "--")) + newArgCount := finalCmd.Flags().NArg() // Parse the flags early so we can check if required flags are set if err = finalCmd.ParseFlags(finalArgs); err != nil { return finalCmd, []string{}, ShellCompDirectiveDefault, fmt.Errorf("Error while parsing flags from args %v: %s", finalArgs, err.Error()) } - if flag != nil { + realArgCount := finalCmd.Flags().NArg() + if newArgCount > realArgCount { + // don't do flag completion (see above) + flagCompletion = false + } + // Error while attempting to parse flags + if flagErr != nil { + // If error type is flagCompError and we don't want flagCompletion we should ignore the error + if _, ok := flagErr.(*flagCompError); !(ok && !flagCompletion) { + return finalCmd, []string{}, ShellCompDirectiveDefault, flagErr + } + } + + if flag != nil && flagCompletion { // Check if we are completing a flag value subject to annotations if validExts, present := flag.Annotations[BashCompFilenameExt]; present { if len(validExts) != 0 { @@ -238,7 +293,7 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi // When doing completion of a flag name, as soon as an argument starts with // a '-' we know it is a flag. We cannot use isFlagArg() here as it requires // the flag name to be complete - if flag == nil && len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") { + if flag == nil && len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") && flagCompletion { var completions []string // First check for required flags @@ -302,7 +357,7 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi if len(finalArgs) == 0 && !foundLocalNonPersistentFlag { // We only complete sub-commands if: // - there are no arguments on the command-line and - // - there are no local, non-peristent flag on the command-line or TraverseChildren is true + // - there are no local, non-persistent flags on the command-line or TraverseChildren is true for _, subCmd := range finalCmd.Commands() { if subCmd.IsAvailableCommand() || subCmd == finalCmd.helpCommand { if strings.HasPrefix(subCmd.Name(), toComplete) { @@ -351,8 +406,10 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi // Find the completion function for the flag or command var completionFn func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) - if flag != nil { + if flag != nil && flagCompletion { + flagCompletionMutex.RLock() completionFn = flagCompletionFunctions[flag] + flagCompletionMutex.RUnlock() } else { completionFn = finalCmd.ValidArgsFunction } @@ -435,6 +492,7 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p var flagName string trimmedArgs := args flagWithEqual := false + orgLastArg := lastArg // When doing completion of a flag name, as soon as an argument starts with // a '-' we know it is a flag. We cannot use isFlagArg() here as that function @@ -442,7 +500,16 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p if len(lastArg) > 0 && lastArg[0] == '-' { if index := strings.Index(lastArg, "="); index >= 0 { // Flag with an = - flagName = strings.TrimLeft(lastArg[:index], "-") + if strings.HasPrefix(lastArg[:index], "--") { + // Flag has full name + flagName = lastArg[2:index] + } else { + // Flag is shorthand + // We have to get the last shorthand flag name + // e.g. `-asd` => d to provide the correct completion + // https://github.com/spf13/cobra/issues/1257 + flagName = lastArg[index-1 : index] + } lastArg = lastArg[index+1:] flagWithEqual = true } else { @@ -459,8 +526,16 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p // If the flag contains an = it means it has already been fully processed, // so we don't need to deal with it here. if index := strings.Index(prevArg, "="); index < 0 { - flagName = strings.TrimLeft(prevArg, "-") - + if strings.HasPrefix(prevArg, "--") { + // Flag has full name + flagName = prevArg[2:] + } else { + // Flag is shorthand + // We have to get the last shorthand flag name + // e.g. `-asd` => d to provide the correct completion + // https://github.com/spf13/cobra/issues/1257 + flagName = prevArg[len(prevArg)-1:] + } // Remove the uncompleted flag or else there could be an error created // for an invalid value for that flag trimmedArgs = args[:len(args)-1] @@ -476,9 +551,8 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p flag := findFlag(finalCmd, flagName) if flag == nil { - // Flag not supported by this command, nothing to complete - err := fmt.Errorf("Subcommand '%s' does not support flag '%s'", finalCmd.Name(), flagName) - return nil, nil, "", err + // Flag not supported by this command, the interspersed option might be set so return the original args + return nil, args, orgLastArg, &flagCompError{subCommand: finalCmd.Name(), flagName: flagName} } if !flagWithEqual { @@ -494,6 +568,156 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p return flag, trimmedArgs, lastArg, nil } +// initDefaultCompletionCmd adds a default 'completion' command to c. +// This function will do nothing if any of the following is true: +// 1- the feature has been explicitly disabled by the program, +// 2- c has no subcommands (to avoid creating one), +// 3- c already has a 'completion' command provided by the program. +func (c *Command) initDefaultCompletionCmd() { + if c.CompletionOptions.DisableDefaultCmd || !c.HasSubCommands() { + return + } + + for _, cmd := range c.commands { + if cmd.Name() == compCmdName || cmd.HasAlias(compCmdName) { + // A completion command is already available + return + } + } + + haveNoDescFlag := !c.CompletionOptions.DisableNoDescFlag && !c.CompletionOptions.DisableDescriptions + + completionCmd := &Command{ + Use: compCmdName, + Short: "generate the autocompletion script for the specified shell", + Long: fmt.Sprintf(` +Generate the autocompletion script for %[1]s for the specified shell. +See each sub-command's help for details on how to use the generated script. +`, c.Root().Name()), + Args: NoArgs, + ValidArgsFunction: NoFileCompletions, + } + c.AddCommand(completionCmd) + + out := c.OutOrStdout() + noDesc := c.CompletionOptions.DisableDescriptions + shortDesc := "generate the autocompletion script for %s" + bash := &Command{ + Use: "bash", + Short: fmt.Sprintf(shortDesc, "bash"), + Long: fmt.Sprintf(` +Generate the autocompletion script for the bash shell. + +This script depends on the 'bash-completion' package. +If it is not installed already, you can install it via your OS's package manager. + +To load completions in your current shell session: +$ source <(%[1]s completion bash) + +To load completions for every new session, execute once: +Linux: + $ %[1]s completion bash > /etc/bash_completion.d/%[1]s +MacOS: + $ %[1]s completion bash > /usr/local/etc/bash_completion.d/%[1]s + +You will need to start a new shell for this setup to take effect. + `, c.Root().Name()), + Args: NoArgs, + DisableFlagsInUseLine: true, + ValidArgsFunction: NoFileCompletions, + RunE: func(cmd *Command, args []string) error { + return cmd.Root().GenBashCompletionV2(out, !noDesc) + }, + } + if haveNoDescFlag { + bash.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc) + } + + zsh := &Command{ + Use: "zsh", + Short: fmt.Sprintf(shortDesc, "zsh"), + Long: fmt.Sprintf(` +Generate the autocompletion script for the zsh shell. + +If shell completion is not already enabled in your environment you will need +to enable it. You can execute the following once: + +$ echo "autoload -U compinit; compinit" >> ~/.zshrc + +To load completions for every new session, execute once: +# Linux: +$ %[1]s completion zsh > "${fpath[1]}/_%[1]s" +# macOS: +$ %[1]s completion zsh > /usr/local/share/zsh/site-functions/_%[1]s + +You will need to start a new shell for this setup to take effect. +`, c.Root().Name()), + Args: NoArgs, + ValidArgsFunction: NoFileCompletions, + RunE: func(cmd *Command, args []string) error { + if noDesc { + return cmd.Root().GenZshCompletionNoDesc(out) + } + return cmd.Root().GenZshCompletion(out) + }, + } + if haveNoDescFlag { + zsh.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc) + } + + fish := &Command{ + Use: "fish", + Short: fmt.Sprintf(shortDesc, "fish"), + Long: fmt.Sprintf(` +Generate the autocompletion script for the fish shell. + +To load completions in your current shell session: +$ %[1]s completion fish | source + +To load completions for every new session, execute once: +$ %[1]s completion fish > ~/.config/fish/completions/%[1]s.fish + +You will need to start a new shell for this setup to take effect. +`, c.Root().Name()), + Args: NoArgs, + ValidArgsFunction: NoFileCompletions, + RunE: func(cmd *Command, args []string) error { + return cmd.Root().GenFishCompletion(out, !noDesc) + }, + } + if haveNoDescFlag { + fish.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc) + } + + powershell := &Command{ + Use: "powershell", + Short: fmt.Sprintf(shortDesc, "powershell"), + Long: fmt.Sprintf(` +Generate the autocompletion script for powershell. + +To load completions in your current shell session: +PS C:\> %[1]s completion powershell | Out-String | Invoke-Expression + +To load completions for every new session, add the output of the above command +to your powershell profile. +`, c.Root().Name()), + Args: NoArgs, + ValidArgsFunction: NoFileCompletions, + RunE: func(cmd *Command, args []string) error { + if noDesc { + return cmd.Root().GenPowerShellCompletion(out) + } + return cmd.Root().GenPowerShellCompletionWithDesc(out) + + }, + } + if haveNoDescFlag { + powershell.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc) + } + + completionCmd.AddCommand(bash, zsh, fish, powershell) +} + func findFlag(cmd *Command, name string) *pflag.Flag { flagSet := cmd.Flags() if len(name) == 1 { diff --git a/constraint/vendor/github.com/spf13/cobra/fish_completions.go b/constraint/vendor/github.com/spf13/cobra/fish_completions.go index 3e112347d..bb57fd568 100644 --- a/constraint/vendor/github.com/spf13/cobra/fish_completions.go +++ b/constraint/vendor/github.com/spf13/cobra/fish_completions.go @@ -21,44 +21,47 @@ func genFishComp(buf io.StringWriter, name string, includeDesc bool) { WriteStringAndCheck(buf, fmt.Sprintf("# fish completion for %-36s -*- shell-script -*-\n", name)) WriteStringAndCheck(buf, fmt.Sprintf(` function __%[1]s_debug - set file "$BASH_COMP_DEBUG_FILE" + set -l file "$BASH_COMP_DEBUG_FILE" if test -n "$file" echo "$argv" >> $file end end function __%[1]s_perform_completion - __%[1]s_debug "Starting __%[1]s_perform_completion with: $argv" + __%[1]s_debug "Starting __%[1]s_perform_completion" - set args (string split -- " " "$argv") - set lastArg "$args[-1]" + # Extract all args except the last one + set -l args (commandline -opc) + # Extract the last arg and escape it in case it is a space + set -l lastArg (string escape -- (commandline -ct)) __%[1]s_debug "args: $args" __%[1]s_debug "last arg: $lastArg" - set emptyArg "" - if test -z "$lastArg" - __%[1]s_debug "Setting emptyArg" - set emptyArg \"\" - end - __%[1]s_debug "emptyArg: $emptyArg" - - if not type -q "$args[1]" - # This can happen when "complete --do-complete %[2]s" is called when running this script. - __%[1]s_debug "Cannot find $args[1]. No completions." - return - end + set -l requestComp "$args[1] %[3]s $args[2..-1] $lastArg" - set requestComp "$args[1] %[3]s $args[2..-1] $emptyArg" __%[1]s_debug "Calling $requestComp" + set -l results (eval $requestComp 2> /dev/null) + + # Some programs may output extra empty lines after the directive. + # Let's ignore them or else it will break completion. + # Ref: https://github.com/spf13/cobra/issues/1279 + for line in $results[-1..1] + if test (string trim -- $line) = "" + # Found an empty line, remove it + set results $results[1..-2] + else + # Found non-empty line, we have our proper output + break + end + end - set results (eval $requestComp 2> /dev/null) - set comps $results[1..-2] - set directiveLine $results[-1] + set -l comps $results[1..-2] + set -l directiveLine $results[-1] # For Fish, when completing a flag with an = (e.g., -n=) # completions must be prefixed with the flag - set flagPrefix (string match -r -- '-.*=' "$lastArg") + set -l flagPrefix (string match -r -- '-.*=' "$lastArg") __%[1]s_debug "Comps: $comps" __%[1]s_debug "DirectiveLine: $directiveLine" @@ -71,115 +74,124 @@ function __%[1]s_perform_completion printf "%%s\n" "$directiveLine" end -# This function does three things: -# 1- Obtain the completions and store them in the global __%[1]s_comp_results -# 2- Set the __%[1]s_comp_do_file_comp flag if file completion should be performed -# and unset it otherwise -# 3- Return true if the completion results are not empty +# This function does two things: +# - Obtain the completions and store them in the global __%[1]s_comp_results +# - Return false if file completion should be performed function __%[1]s_prepare_completions + __%[1]s_debug "" + __%[1]s_debug "========= starting completion logic ==========" + # Start fresh - set --erase __%[1]s_comp_do_file_comp set --erase __%[1]s_comp_results - # Check if the command-line is already provided. This is useful for testing. - if not set --query __%[1]s_comp_commandLine - # Use the -c flag to allow for completion in the middle of the line - set __%[1]s_comp_commandLine (commandline -c) - end - __%[1]s_debug "commandLine is: $__%[1]s_comp_commandLine" - - set results (__%[1]s_perform_completion "$__%[1]s_comp_commandLine") - set --erase __%[1]s_comp_commandLine + set -l results (__%[1]s_perform_completion) __%[1]s_debug "Completion results: $results" if test -z "$results" __%[1]s_debug "No completion, probably due to a failure" # Might as well do file completion, in case it helps - set --global __%[1]s_comp_do_file_comp 1 return 1 end - set directive (string sub --start 2 $results[-1]) + set -l directive (string sub --start 2 $results[-1]) set --global __%[1]s_comp_results $results[1..-2] __%[1]s_debug "Completions are: $__%[1]s_comp_results" __%[1]s_debug "Directive is: $directive" - set shellCompDirectiveError %[4]d - set shellCompDirectiveNoSpace %[5]d - set shellCompDirectiveNoFileComp %[6]d - set shellCompDirectiveFilterFileExt %[7]d - set shellCompDirectiveFilterDirs %[8]d + set -l shellCompDirectiveError %[4]d + set -l shellCompDirectiveNoSpace %[5]d + set -l shellCompDirectiveNoFileComp %[6]d + set -l shellCompDirectiveFilterFileExt %[7]d + set -l shellCompDirectiveFilterDirs %[8]d if test -z "$directive" set directive 0 end - set compErr (math (math --scale 0 $directive / $shellCompDirectiveError) %% 2) + set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) %% 2) if test $compErr -eq 1 __%[1]s_debug "Received error directive: aborting." # Might as well do file completion, in case it helps - set --global __%[1]s_comp_do_file_comp 1 return 1 end - set filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) %% 2) - set dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) %% 2) + set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) %% 2) + set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) %% 2) if test $filefilter -eq 1; or test $dirfilter -eq 1 __%[1]s_debug "File extension filtering or directory filtering not supported" # Do full file completion instead - set --global __%[1]s_comp_do_file_comp 1 return 1 end - set nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) %% 2) - set nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) %% 2) + set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) %% 2) + set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) %% 2) __%[1]s_debug "nospace: $nospace, nofiles: $nofiles" - # Important not to quote the variable for count to work - set numComps (count $__%[1]s_comp_results) - __%[1]s_debug "numComps: $numComps" - - if test $numComps -eq 1; and test $nospace -ne 0 - # To support the "nospace" directive we trick the shell - # by outputting an extra, longer completion. - __%[1]s_debug "Adding second completion to perform nospace directive" - set --append __%[1]s_comp_results $__%[1]s_comp_results[1]. - end - - if test $numComps -eq 0; and test $nofiles -eq 0 - __%[1]s_debug "Requesting file completion" - set --global __%[1]s_comp_do_file_comp 1 + # If we want to prevent a space, or if file completion is NOT disabled, + # we need to count the number of valid completions. + # To do so, we will filter on prefix as the completions we have received + # may not already be filtered so as to allow fish to match on different + # criteria than the prefix. + if test $nospace -ne 0; or test $nofiles -eq 0 + set -l prefix (commandline -t | string escape --style=regex) + __%[1]s_debug "prefix: $prefix" + + set -l completions (string match -r -- "^$prefix.*" $__%[1]s_comp_results) + set --global __%[1]s_comp_results $completions + __%[1]s_debug "Filtered completions are: $__%[1]s_comp_results" + + # Important not to quote the variable for count to work + set -l numComps (count $__%[1]s_comp_results) + __%[1]s_debug "numComps: $numComps" + + if test $numComps -eq 1; and test $nospace -ne 0 + # We must first split on \t to get rid of the descriptions to be + # able to check what the actual completion will be. + # We don't need descriptions anyway since there is only a single + # real completion which the shell will expand immediately. + set -l split (string split --max 1 \t $__%[1]s_comp_results[1]) + + # Fish won't add a space if the completion ends with any + # of the following characters: @=/:., + set -l lastChar (string sub -s -1 -- $split) + if not string match -r -q "[@=/:.,]" -- "$lastChar" + # In other cases, to support the "nospace" directive we trick the shell + # by outputting an extra, longer completion. + __%[1]s_debug "Adding second completion to perform nospace directive" + set --global __%[1]s_comp_results $split[1] $split[1]. + __%[1]s_debug "Completions are now: $__%[1]s_comp_results" + end + end + + if test $numComps -eq 0; and test $nofiles -eq 0 + # To be consistent with bash and zsh, we only trigger file + # completion when there are no other completions + __%[1]s_debug "Requesting file completion" + return 1 + end end - # If we don't want file completion, we must return true even if there - # are no completions found. This is because fish will perform the last - # completion command, even if its condition is false, if no other - # completion command was triggered - return (not set --query __%[1]s_comp_do_file_comp) + return 0 end # Since Fish completions are only loaded once the user triggers them, we trigger them ourselves # so we can properly delete any completions provided by another script. -# The space after the the program name is essential to trigger completion for the program -# and not completion of the program name itself. -complete --do-complete "%[2]s " > /dev/null 2>&1 -# Using '> /dev/null 2>&1' since '&>' is not supported in older versions of fish. +# Only do this if the program can be found, or else fish may print some errors; besides, +# the existing completions will only be loaded if the program can be found. +if type -q "%[2]s" + # The space after the program name is essential to trigger completion for the program + # and not completion of the program name itself. + # Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish. + complete --do-complete "%[2]s " > /dev/null 2>&1 +end # Remove any pre-existing completions for the program since we will be handling all of them. complete -c %[2]s -e -# The order in which the below two lines are defined is very important so that __%[1]s_prepare_completions -# is called first. It is __%[1]s_prepare_completions that sets up the __%[1]s_comp_do_file_comp variable. -# -# This completion will be run second as complete commands are added FILO. -# It triggers file completion choices when __%[1]s_comp_do_file_comp is set. -complete -c %[2]s -n 'set --query __%[1]s_comp_do_file_comp' - -# This completion will be run first as complete commands are added FILO. -# The call to __%[1]s_prepare_completions will setup both __%[1]s_comp_results and __%[1]s_comp_do_file_comp. -# It provides the program's completion choices. +# The call to __%[1]s_prepare_completions will setup __%[1]s_comp_results +# which provides the program's completion choices. complete -c %[2]s -n '__%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results' `, nameForVar, name, compCmd, diff --git a/constraint/vendor/github.com/spf13/cobra/go.mod b/constraint/vendor/github.com/spf13/cobra/go.mod index ff5614405..1fb9439dd 100644 --- a/constraint/vendor/github.com/spf13/cobra/go.mod +++ b/constraint/vendor/github.com/spf13/cobra/go.mod @@ -1,12 +1,11 @@ module github.com/spf13/cobra -go 1.12 +go 1.14 require ( github.com/cpuguy83/go-md2man/v2 v2.0.0 github.com/inconshreveable/mousetrap v1.0.0 - github.com/mitchellh/go-homedir v1.1.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.7.0 + github.com/spf13/viper v1.8.1 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/constraint/vendor/github.com/spf13/cobra/go.sum b/constraint/vendor/github.com/spf13/cobra/go.sum index 9328ee3ee..3e22df29a 100644 --- a/constraint/vendor/github.com/spf13/cobra/go.sum +++ b/constraint/vendor/github.com/spf13/cobra/go.sum @@ -5,74 +5,141 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +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/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -94,61 +161,50 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -156,49 +212,65 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +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/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -208,16 +280,26 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -226,35 +308,107 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -264,6 +418,7 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -271,16 +426,73 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -290,24 +502,91 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +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/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/constraint/vendor/github.com/spf13/cobra/powershell_completions.go b/constraint/vendor/github.com/spf13/cobra/powershell_completions.go index c55be71cd..59234c09f 100644 --- a/constraint/vendor/github.com/spf13/cobra/powershell_completions.go +++ b/constraint/vendor/github.com/spf13/cobra/powershell_completions.go @@ -86,7 +86,7 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock { # We add an extra empty parameter so we can indicate this to the go method. __%[1]s_debug "Adding extra empty parameter" `+" # We need to use `\"`\" to pass an empty argument a \"\" or '' does not work!!!"+` -`+" $RequestComp=\"$RequestComp\" + ' `\"`\"' "+` +`+" $RequestComp=\"$RequestComp\" + ' `\"`\"'"+` } __%[1]s_debug "Calling $RequestComp" @@ -140,19 +140,6 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock { $Space = "" } - if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) { - __%[1]s_debug "ShellCompDirectiveNoFileComp is called" - - if ($Values.Length -eq 0) { - # Just print an empty string here so the - # shell does not start to complete paths. - # We cannot use CompletionResult here because - # it does not accept an empty string as argument. - "" - return - } - } - if ((($Directive -band $ShellCompDirectiveFilterFileExt) -ne 0 ) -or (($Directive -band $ShellCompDirectiveFilterDirs) -ne 0 )) { __%[1]s_debug "ShellCompDirectiveFilterFileExt ShellCompDirectiveFilterDirs are not supported" @@ -165,20 +152,33 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock { # filter the result $_.Name -like "$WordToComplete*" - # Join the flag back if we have a equal sign flag + # Join the flag back if we have an equal sign flag if ( $IsEqualFlag ) { __%[1]s_debug "Join the equal sign flag back to the completion value" $_.Name = $Flag + "=" + $_.Name } } + if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) { + __%[1]s_debug "ShellCompDirectiveNoFileComp is called" + + if ($Values.Length -eq 0) { + # Just print an empty string here so the + # shell does not start to complete paths. + # We cannot use CompletionResult here because + # it does not accept an empty string as argument. + "" + return + } + } + # Get the current mode $Mode = (Get-PSReadLineKeyHandler | Where-Object {$_.Key -eq "Tab" }).Function __%[1]s_debug "Mode: $Mode" $Values | ForEach-Object { - # store temporay because switch will overwrite $_ + # store temporary because switch will overwrite $_ $comp = $_ # PowerShell supports three different completion modes diff --git a/constraint/vendor/github.com/spf13/cobra/shell_completions.md b/constraint/vendor/github.com/spf13/cobra/shell_completions.md index cd533ac3d..4ba06a11c 100644 --- a/constraint/vendor/github.com/spf13/cobra/shell_completions.md +++ b/constraint/vendor/github.com/spf13/cobra/shell_completions.md @@ -7,6 +7,15 @@ The currently supported shells are: - fish - PowerShell +Cobra will automatically provide your program with a fully functional `completion` command, +similarly to how it provides the `help` command. + +## Creating your own completion command + +If you do not wish to use the default `completion` command, you can choose to +provide your own, which will take precedence over the default one. (This also provides +backwards-compatibility with programs that already have their own `completion` command.) + If you are using the generator, you can create a completion command by running ```bash @@ -70,7 +79,7 @@ PowerShell: case "fish": cmd.Root().GenFishCompletion(os.Stdout, true) case "powershell": - cmd.Root().GenPowerShellCompletion(os.Stdout) + cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout) } }, } @@ -78,6 +87,26 @@ PowerShell: **Note:** The cobra generator may include messages printed to stdout, for example, if the config file is loaded; this will break the auto-completion script so must be removed. +## Adapting the default completion command + +Cobra provides a few options for the default `completion` command. To configure such options you must set +the `CompletionOptions` field on the *root* command. + +To tell Cobra *not* to provide the default `completion` command: +``` +rootCmd.CompletionOptions.DisableDefaultCmd = true +``` + +To tell Cobra *not* to provide the user with the `--no-descriptions` flag to the completion sub-commands: +``` +rootCmd.CompletionOptions.DisableNoDescFlag = true +``` + +To tell Cobra to completely disable descriptions for completions: +``` +rootCmd.CompletionOptions.DisableDescriptions = true +``` + # Customizing completions The generated completion scripts will automatically handle completing commands and flags. However, you can make your completions much more powerful by providing information to complete your program's nouns and flag values. @@ -323,7 +352,10 @@ cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, ``` ### Descriptions for completions -`zsh`, `fish` and `powershell` allow for descriptions to annotate completion choices. For commands and flags, Cobra will provide the descriptions automatically, based on usage information. For example, using zsh: +Cobra provides support for completion descriptions. Such descriptions are supported for each shell +(however, for bash, it is only available in the [completion V2 version](#bash-completion-v2)). +For commands and flags, Cobra will provide the descriptions automatically, based on usage information. +For example, using zsh: ``` $ helm s[tab] search -- search for a keyword in charts @@ -336,7 +368,7 @@ $ helm s[tab] search (search for a keyword in charts) show (show information of a chart) status (displays the status of the named release) ``` -Cobra allows you to add annotations to your own completions. Simply add the annotation text after each completion, following a `\t` separator. This technique applies to completions returned by `ValidArgs`, `ValidArgsFunction` and `RegisterFlagCompletionFunc()`. For example: +Cobra allows you to add descriptions to your own completions. Simply add the description text after each completion, following a `\t` separator. This technique applies to completions returned by `ValidArgs`, `ValidArgsFunction` and `RegisterFlagCompletionFunc()`. For example: ```go ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return []string{"harbor\tAn image registry", "thanos\tLong-term metrics"}, cobra.ShellCompDirectiveNoFileComp @@ -371,6 +403,37 @@ completion firstcommand secondcommand For backward compatibility, Cobra still supports its bash legacy dynamic completion solution. Please refer to [Bash Completions](bash_completions.md) for details. +### Bash completion V2 + +Cobra provides two versions for bash completion. The original bash completion (which started it all!) can be used by calling +`GenBashCompletion()` or `GenBashCompletionFile()`. + +A new V2 bash completion version is also available. This version can be used by calling `GenBashCompletionV2()` or +`GenBashCompletionFileV2()`. The V2 version does **not** support the legacy dynamic completion +(see [Bash Completions](bash_completions.md)) but instead works only with the Go dynamic completion +solution described in this document. +Unless your program already uses the legacy dynamic completion solution, it is recommended that you use the bash +completion V2 solution which provides the following extra features: +- Supports completion descriptions (like the other shells) +- Small completion script of less than 300 lines (v1 generates scripts of thousands of lines; `kubectl` for example has a bash v1 completion script of over 13K lines) +- Streamlined user experience thanks to a completion behavior aligned with the other shells + +`Bash` completion V2 supports descriptions for completions. When calling `GenBashCompletionV2()` or `GenBashCompletionFileV2()` +you must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra +will provide the description automatically based on usage information. You can choose to make this option configurable by +your users. + +``` +# With descriptions +$ helm s[tab][tab] +search (search for a keyword in charts) status (display the status of the named release) +show (show information of a chart) + +# Without descriptions +$ helm s[tab][tab] +search show status +``` +**Note**: Cobra's default `completion` command uses bash completion V2. If for some reason you need to use bash completion V1, you will need to implement your own `completion` command. ## Zsh completions Cobra supports native zsh completion generated from the root `cobra.Command`. diff --git a/constraint/vendor/github.com/spf13/cobra/user_guide.md b/constraint/vendor/github.com/spf13/cobra/user_guide.md new file mode 100644 index 000000000..311abce28 --- /dev/null +++ b/constraint/vendor/github.com/spf13/cobra/user_guide.md @@ -0,0 +1,637 @@ +# User Guide + +While you are welcome to provide your own organization, typically a Cobra-based +application will follow the following organizational structure: + +``` + ▾ appName/ + ▾ cmd/ + add.go + your.go + commands.go + here.go + main.go +``` + +In a Cobra app, typically the main.go file is very bare. It serves one purpose: initializing Cobra. + +```go +package main + +import ( + "{pathToYourApp}/cmd" +) + +func main() { + cmd.Execute() +} +``` + +## Using the Cobra Generator + +Cobra provides its own program that will create your application and add any +commands you want. It's the easiest way to incorporate Cobra into your application. + +[Here](https://github.com/spf13/cobra/blob/master/cobra/README.md) you can find more information about it. + +## Using the Cobra Library + +To manually implement Cobra you need to create a bare main.go file and a rootCmd file. +You will optionally provide additional commands as you see fit. + +### Create rootCmd + +Cobra doesn't require any special constructors. Simply create your commands. + +Ideally you place this in app/cmd/root.go: + +```go +var rootCmd = &cobra.Command{ + Use: "hugo", + Short: "Hugo is a very fast static site generator", + Long: `A Fast and Flexible Static Site Generator built with + love by spf13 and friends in Go. + Complete documentation is available at http://hugo.spf13.com`, + Run: func(cmd *cobra.Command, args []string) { + // Do Stuff Here + }, +} + +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} +``` + +You will additionally define flags and handle configuration in your init() function. + +For example cmd/root.go: + +```go +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +var ( + // Used for flags. + cfgFile string + userLicense string + + rootCmd = &cobra.Command{ + Use: "cobra", + Short: "A generator for Cobra based Applications", + Long: `Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + } +) + +// Execute executes the root command. +func Execute() error { + return rootCmd.Execute() +} + +func init() { + cobra.OnInitialize(initConfig) + + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)") + rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "author name for copyright attribution") + rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "name of license for the project") + rootCmd.PersistentFlags().Bool("viper", true, "use Viper for configuration") + viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author")) + viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper")) + viper.SetDefault("author", "NAME HERE ") + viper.SetDefault("license", "apache") + + rootCmd.AddCommand(addCmd) + rootCmd.AddCommand(initCmd) +} + +func initConfig() { + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } else { + // Find home directory. + home, err := os.UserHomeDir() + cobra.CheckErr(err) + + // Search config in home directory with name ".cobra" (without extension). + viper.AddConfigPath(home) + viper.SetConfigType("yaml") + viper.SetConfigName(".cobra") + } + + viper.AutomaticEnv() + + if err := viper.ReadInConfig(); err == nil { + fmt.Println("Using config file:", viper.ConfigFileUsed()) + } +} +``` + +### Create your main.go + +With the root command you need to have your main function execute it. +Execute should be run on the root for clarity, though it can be called on any command. + +In a Cobra app, typically the main.go file is very bare. It serves one purpose: to initialize Cobra. + +```go +package main + +import ( + "{pathToYourApp}/cmd" +) + +func main() { + cmd.Execute() +} +``` + +### Create additional commands + +Additional commands can be defined and typically are each given their own file +inside of the cmd/ directory. + +If you wanted to create a version command you would create cmd/version.go and +populate it with the following: + +```go +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(versionCmd) +} + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Print the version number of Hugo", + Long: `All software has versions. This is Hugo's`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Hugo Static Site Generator v0.9 -- HEAD") + }, +} +``` + +### Returning and handling errors + +If you wish to return an error to the caller of a command, `RunE` can be used. + +```go +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(tryCmd) +} + +var tryCmd = &cobra.Command{ + Use: "try", + Short: "Try and possibly fail at something", + RunE: func(cmd *cobra.Command, args []string) error { + if err := someFunc(); err != nil { + return err + } + return nil + }, +} +``` + +The error can then be caught at the execute function call. + +## Working with Flags + +Flags provide modifiers to control how the action command operates. + +### Assign flags to a command + +Since the flags are defined and used in different locations, we need to +define a variable outside with the correct scope to assign the flag to +work with. + +```go +var Verbose bool +var Source string +``` + +There are two different approaches to assign a flag. + +### Persistent Flags + +A flag can be 'persistent', meaning that this flag will be available to the +command it's assigned to as well as every command under that command. For +global flags, assign a flag as a persistent flag on the root. + +```go +rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output") +``` + +### Local Flags + +A flag can also be assigned locally, which will only apply to that specific command. + +```go +localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from") +``` + +### Local Flag on Parent Commands + +By default, Cobra only parses local flags on the target command, and any local flags on +parent commands are ignored. By enabling `Command.TraverseChildren`, Cobra will +parse local flags on each command before executing the target command. + +```go +command := cobra.Command{ + Use: "print [OPTIONS] [COMMANDS]", + TraverseChildren: true, +} +``` + +### Bind Flags with Config + +You can also bind your flags with [viper](https://github.com/spf13/viper): +```go +var author string + +func init() { + rootCmd.PersistentFlags().StringVar(&author, "author", "YOUR NAME", "Author name for copyright attribution") + viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author")) +} +``` + +In this example, the persistent flag `author` is bound with `viper`. +**Note**: the variable `author` will not be set to the value from config, +when the `--author` flag is not provided by user. + +More in [viper documentation](https://github.com/spf13/viper#working-with-flags). + +### Required flags + +Flags are optional by default. If instead you wish your command to report an error +when a flag has not been set, mark it as required: +```go +rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)") +rootCmd.MarkFlagRequired("region") +``` + +Or, for persistent flags: +```go +rootCmd.PersistentFlags().StringVarP(&Region, "region", "r", "", "AWS region (required)") +rootCmd.MarkPersistentFlagRequired("region") +``` + +## Positional and Custom Arguments + +Validation of positional arguments can be specified using the `Args` field +of `Command`. + +The following validators are built in: + +- `NoArgs` - the command will report an error if there are any positional args. +- `ArbitraryArgs` - the command will accept any args. +- `OnlyValidArgs` - the command will report an error if there are any positional args that are not in the `ValidArgs` field of `Command`. +- `MinimumNArgs(int)` - the command will report an error if there are not at least N positional args. +- `MaximumNArgs(int)` - the command will report an error if there are more than N positional args. +- `ExactArgs(int)` - the command will report an error if there are not exactly N positional args. +- `ExactValidArgs(int)` - the command will report an error if there are not exactly N positional args OR if there are any positional args that are not in the `ValidArgs` field of `Command` +- `RangeArgs(min, max)` - the command will report an error if the number of args is not between the minimum and maximum number of expected args. + +An example of setting the custom validator: + +```go +var cmd = &cobra.Command{ + Short: "hello", + Args: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return errors.New("requires a color argument") + } + if myapp.IsValidColor(args[0]) { + return nil + } + return fmt.Errorf("invalid color specified: %s", args[0]) + }, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Hello, World!") + }, +} +``` + +## Example + +In the example below, we have defined three commands. Two are at the top level +and one (cmdTimes) is a child of one of the top commands. In this case the root +is not executable, meaning that a subcommand is required. This is accomplished +by not providing a 'Run' for the 'rootCmd'. + +We have only defined one flag for a single command. + +More documentation about flags is available at https://github.com/spf13/pflag + +```go +package main + +import ( + "fmt" + "strings" + + "github.com/spf13/cobra" +) + +func main() { + var echoTimes int + + var cmdPrint = &cobra.Command{ + Use: "print [string to print]", + Short: "Print anything to the screen", + Long: `print is for printing anything back to the screen. +For many years people have printed back to the screen.`, + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Print: " + strings.Join(args, " ")) + }, + } + + var cmdEcho = &cobra.Command{ + Use: "echo [string to echo]", + Short: "Echo anything to the screen", + Long: `echo is for echoing anything back. +Echo works a lot like print, except it has a child command.`, + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("Echo: " + strings.Join(args, " ")) + }, + } + + var cmdTimes = &cobra.Command{ + Use: "times [string to echo]", + Short: "Echo anything to the screen more times", + Long: `echo things multiple times back to the user by providing +a count and a string.`, + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + for i := 0; i < echoTimes; i++ { + fmt.Println("Echo: " + strings.Join(args, " ")) + } + }, + } + + cmdTimes.Flags().IntVarP(&echoTimes, "times", "t", 1, "times to echo the input") + + var rootCmd = &cobra.Command{Use: "app"} + rootCmd.AddCommand(cmdPrint, cmdEcho) + cmdEcho.AddCommand(cmdTimes) + rootCmd.Execute() +} +``` + +For a more complete example of a larger application, please checkout [Hugo](http://gohugo.io/). + +## Help Command + +Cobra automatically adds a help command to your application when you have subcommands. +This will be called when a user runs 'app help'. Additionally, help will also +support all other commands as input. Say, for instance, you have a command called +'create' without any additional configuration; Cobra will work when 'app help +create' is called. Every command will automatically have the '--help' flag added. + +### Example + +The following output is automatically generated by Cobra. Nothing beyond the +command and flag definitions are needed. + + $ cobra help + + Cobra is a CLI library for Go that empowers applications. + This application is a tool to generate the needed files + to quickly create a Cobra application. + + Usage: + cobra [command] + + Available Commands: + add Add a command to a Cobra Application + help Help about any command + init Initialize a Cobra Application + + Flags: + -a, --author string author name for copyright attribution (default "YOUR NAME") + --config string config file (default is $HOME/.cobra.yaml) + -h, --help help for cobra + -l, --license string name of license for the project + --viper use Viper for configuration (default true) + + Use "cobra [command] --help" for more information about a command. + + +Help is just a command like any other. There is no special logic or behavior +around it. In fact, you can provide your own if you want. + +### Defining your own help + +You can provide your own Help command or your own template for the default command to use +with following functions: + +```go +cmd.SetHelpCommand(cmd *Command) +cmd.SetHelpFunc(f func(*Command, []string)) +cmd.SetHelpTemplate(s string) +``` + +The latter two will also apply to any children commands. + +## Usage Message + +When the user provides an invalid flag or invalid command, Cobra responds by +showing the user the 'usage'. + +### Example +You may recognize this from the help above. That's because the default help +embeds the usage as part of its output. + + $ cobra --invalid + Error: unknown flag: --invalid + Usage: + cobra [command] + + Available Commands: + add Add a command to a Cobra Application + help Help about any command + init Initialize a Cobra Application + + Flags: + -a, --author string author name for copyright attribution (default "YOUR NAME") + --config string config file (default is $HOME/.cobra.yaml) + -h, --help help for cobra + -l, --license string name of license for the project + --viper use Viper for configuration (default true) + + Use "cobra [command] --help" for more information about a command. + +### Defining your own usage +You can provide your own usage function or template for Cobra to use. +Like help, the function and template are overridable through public methods: + +```go +cmd.SetUsageFunc(f func(*Command) error) +cmd.SetUsageTemplate(s string) +``` + +## Version Flag + +Cobra adds a top-level '--version' flag if the Version field is set on the root command. +Running an application with the '--version' flag will print the version to stdout using +the version template. The template can be customized using the +`cmd.SetVersionTemplate(s string)` function. + +## PreRun and PostRun Hooks + +It is possible to run functions before or after the main `Run` function of your command. The `PersistentPreRun` and `PreRun` functions will be executed before `Run`. `PersistentPostRun` and `PostRun` will be executed after `Run`. The `Persistent*Run` functions will be inherited by children if they do not declare their own. These functions are run in the following order: + +- `PersistentPreRun` +- `PreRun` +- `Run` +- `PostRun` +- `PersistentPostRun` + +An example of two commands which use all of these features is below. When the subcommand is executed, it will run the root command's `PersistentPreRun` but not the root command's `PersistentPostRun`: + +```go +package main + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +func main() { + + var rootCmd = &cobra.Command{ + Use: "root [sub]", + Short: "My root command", + PersistentPreRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside rootCmd PersistentPreRun with args: %v\n", args) + }, + PreRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside rootCmd PreRun with args: %v\n", args) + }, + Run: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside rootCmd Run with args: %v\n", args) + }, + PostRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside rootCmd PostRun with args: %v\n", args) + }, + PersistentPostRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside rootCmd PersistentPostRun with args: %v\n", args) + }, + } + + var subCmd = &cobra.Command{ + Use: "sub [no options!]", + Short: "My subcommand", + PreRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside subCmd PreRun with args: %v\n", args) + }, + Run: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside subCmd Run with args: %v\n", args) + }, + PostRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside subCmd PostRun with args: %v\n", args) + }, + PersistentPostRun: func(cmd *cobra.Command, args []string) { + fmt.Printf("Inside subCmd PersistentPostRun with args: %v\n", args) + }, + } + + rootCmd.AddCommand(subCmd) + + rootCmd.SetArgs([]string{""}) + rootCmd.Execute() + fmt.Println() + rootCmd.SetArgs([]string{"sub", "arg1", "arg2"}) + rootCmd.Execute() +} +``` + +Output: +``` +Inside rootCmd PersistentPreRun with args: [] +Inside rootCmd PreRun with args: [] +Inside rootCmd Run with args: [] +Inside rootCmd PostRun with args: [] +Inside rootCmd PersistentPostRun with args: [] + +Inside rootCmd PersistentPreRun with args: [arg1 arg2] +Inside subCmd PreRun with args: [arg1 arg2] +Inside subCmd Run with args: [arg1 arg2] +Inside subCmd PostRun with args: [arg1 arg2] +Inside subCmd PersistentPostRun with args: [arg1 arg2] +``` + +## Suggestions when "unknown command" happens + +Cobra will print automatic suggestions when "unknown command" errors happen. This allows Cobra to behave similarly to the `git` command when a typo happens. For example: + +``` +$ hugo srever +Error: unknown command "srever" for "hugo" + +Did you mean this? + server + +Run 'hugo --help' for usage. +``` + +Suggestions are automatic based on every subcommand registered and use an implementation of [Levenshtein distance](http://en.wikipedia.org/wiki/Levenshtein_distance). Every registered command that matches a minimum distance of 2 (ignoring case) will be displayed as a suggestion. + +If you need to disable suggestions or tweak the string distance in your command, use: + +```go +command.DisableSuggestions = true +``` + +or + +```go +command.SuggestionsMinimumDistance = 1 +``` + +You can also explicitly set names for which a given command will be suggested using the `SuggestFor` attribute. This allows suggestions for strings that are not close in terms of string distance, but makes sense in your set of commands and for some which you don't want aliases. Example: + +``` +$ kubectl remove +Error: unknown command "remove" for "kubectl" + +Did you mean this? + delete + +Run 'kubectl help' for usage. +``` + +## Generating documentation for your command + +Cobra can generate documentation based on subcommands, flags, etc. Read more about it in the [docs generation documentation](doc/README.md). + +## Generating shell completions + +Cobra can generate a shell-completion file for the following shells: bash, zsh, fish, PowerShell. If you add more information to your commands, these completions can be amazingly powerful and flexible. Read more about it in [Shell Completions](shell_completions.md). diff --git a/constraint/vendor/github.com/spf13/cobra/zsh_completions.go b/constraint/vendor/github.com/spf13/cobra/zsh_completions.go index 2e840285f..1afec30ea 100644 --- a/constraint/vendor/github.com/spf13/cobra/zsh_completions.go +++ b/constraint/vendor/github.com/spf13/cobra/zsh_completions.go @@ -95,7 +95,7 @@ _%[1]s() local shellCompDirectiveFilterFileExt=%[6]d local shellCompDirectiveFilterDirs=%[7]d - local lastParam lastChar flagPrefix requestComp out directive compCount comp lastComp + local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace local -a completions __%[1]s_debug "\n========= starting completion logic ==========" @@ -163,7 +163,6 @@ _%[1]s() return fi - compCount=0 while IFS='\n' read -r comp; do if [ -n "$comp" ]; then # If requested, completions are returned with a description. @@ -175,13 +174,17 @@ _%[1]s() local tab=$(printf '\t') comp=${comp//$tab/:} - ((compCount++)) __%[1]s_debug "Adding completion: ${comp}" completions+=${comp} lastComp=$comp fi done < <(printf "%%s\n" "${out[@]}") + if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then + __%[1]s_debug "Activating nospace." + noSpace="-S ''" + fi + if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then # File extension filtering local filteringCmd @@ -208,25 +211,40 @@ _%[1]s() __%[1]s_debug "Listing directories in ." fi + local result _arguments '*:dirname:_files -/'" ${flagPrefix}" + result=$? if [ -n "$subdir" ]; then popd >/dev/null 2>&1 fi - elif [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ] && [ ${compCount} -eq 1 ]; then - __%[1]s_debug "Activating nospace." - # We can use compadd here as there is no description when - # there is only one completion. - compadd -S '' "${lastComp}" - elif [ ${compCount} -eq 0 ]; then - if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then - __%[1]s_debug "deactivating file completion" + return $result + else + __%[1]s_debug "Calling _describe" + if eval _describe "completions" completions $flagPrefix $noSpace; then + __%[1]s_debug "_describe found some completions" + + # Return the success of having called _describe + return 0 else - # Perform file completion - __%[1]s_debug "activating file completion" - _arguments '*:filename:_files'" ${flagPrefix}" + __%[1]s_debug "_describe did not find completions." + __%[1]s_debug "Checking if we should do file completion." + if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then + __%[1]s_debug "deactivating file completion" + + # We must return an error code here to let zsh know that there were no + # completions found by _describe; this is what will trigger other + # matching algorithms to attempt to find completions. + # For example zsh can match letters in the middle of words. + return 1 + else + # Perform file completion + __%[1]s_debug "Activating file completion" + + # We must return the result of this command, so it must be the + # last command, or else we must store its result to return it. + _arguments '*:filename:_files'" ${flagPrefix}" + fi fi - else - _describe "completions" completions $(echo $flagPrefix) fi } diff --git a/constraint/vendor/golang.org/x/crypto/AUTHORS b/constraint/vendor/golang.org/x/crypto/AUTHORS deleted file mode 100644 index 2b00ddba0..000000000 --- a/constraint/vendor/golang.org/x/crypto/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at https://tip.golang.org/AUTHORS. diff --git a/constraint/vendor/golang.org/x/crypto/CONTRIBUTORS b/constraint/vendor/golang.org/x/crypto/CONTRIBUTORS deleted file mode 100644 index 1fbd3e976..000000000 --- a/constraint/vendor/golang.org/x/crypto/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/constraint/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/constraint/vendor/golang.org/x/crypto/ssh/terminal/terminal.go deleted file mode 100644 index a4d1919a9..000000000 --- a/constraint/vendor/golang.org/x/crypto/ssh/terminal/terminal.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package terminal provides support functions for dealing with terminals, as -// commonly found on UNIX systems. -// -// Deprecated: this package moved to golang.org/x/term. -package terminal - -import ( - "io" - - "golang.org/x/term" -) - -// EscapeCodes contains escape sequences that can be written to the terminal in -// order to achieve different styles of text. -type EscapeCodes = term.EscapeCodes - -// Terminal contains the state for running a VT100 terminal that is capable of -// reading lines of input. -type Terminal = term.Terminal - -// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is -// a local terminal, that terminal must first have been put into raw mode. -// prompt is a string that is written at the start of each input line (i.e. -// "> "). -func NewTerminal(c io.ReadWriter, prompt string) *Terminal { - return term.NewTerminal(c, prompt) -} - -// ErrPasteIndicator may be returned from ReadLine as the error, in addition -// to valid line data. It indicates that bracketed paste mode is enabled and -// that the returned line consists only of pasted data. Programs may wish to -// interpret pasted data more literally than typed data. -var ErrPasteIndicator = term.ErrPasteIndicator - -// State contains the state of a terminal. -type State = term.State - -// IsTerminal returns whether the given file descriptor is a terminal. -func IsTerminal(fd int) bool { - return term.IsTerminal(fd) -} - -// ReadPassword reads a line of input from a terminal without local echo. This -// is commonly used for inputting passwords and other sensitive data. The slice -// returned does not include the \n. -func ReadPassword(fd int) ([]byte, error) { - return term.ReadPassword(fd) -} - -// MakeRaw puts the terminal connected to the given file descriptor into raw -// mode and returns the previous state of the terminal so that it can be -// restored. -func MakeRaw(fd int) (*State, error) { - return term.MakeRaw(fd) -} - -// Restore restores the terminal connected to the given file descriptor to a -// previous state. -func Restore(fd int, oldState *State) error { - return term.Restore(fd, oldState) -} - -// GetState returns the current state of a terminal which may be useful to -// restore the terminal after a signal. -func GetState(fd int) (*State, error) { - return term.GetState(fd) -} - -// GetSize returns the dimensions of the given terminal. -func GetSize(fd int) (width, height int, err error) { - return term.GetSize(fd) -} diff --git a/constraint/vendor/golang.org/x/net/http2/README b/constraint/vendor/golang.org/x/net/http2/README deleted file mode 100644 index 360d5aa37..000000000 --- a/constraint/vendor/golang.org/x/net/http2/README +++ /dev/null @@ -1,20 +0,0 @@ -This is a work-in-progress HTTP/2 implementation for Go. - -It will eventually live in the Go standard library and won't require -any changes to your code to use. It will just be automatic. - -Status: - -* The server support is pretty good. A few things are missing - but are being worked on. -* The client work has just started but shares a lot of code - is coming along much quicker. - -Docs are at https://godoc.org/golang.org/x/net/http2 - -Demo test server at https://http2.golang.org/ - -Help & bug reports welcome! - -Contributing: https://golang.org/doc/contribute.html -Bugs: https://golang.org/issue/new?title=x/net/http2:+ diff --git a/constraint/vendor/golang.org/x/net/http2/ascii.go b/constraint/vendor/golang.org/x/net/http2/ascii.go index 0c58d727c..17caa2058 100644 --- a/constraint/vendor/golang.org/x/net/http2/ascii.go +++ b/constraint/vendor/golang.org/x/net/http2/ascii.go @@ -6,6 +6,10 @@ package http2 import "strings" +// The HTTP protocols are defined in terms of ASCII, not Unicode. This file +// contains helper functions which may use Unicode-aware functions which would +// otherwise be unsafe and could introduce vulnerabilities if used improperly. + // asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t // are equal, ASCII-case-insensitively. func asciiEqualFold(s, t string) bool { diff --git a/constraint/vendor/golang.org/x/net/http2/client_conn_pool.go b/constraint/vendor/golang.org/x/net/http2/client_conn_pool.go index 652bc11a0..c936843ea 100644 --- a/constraint/vendor/golang.org/x/net/http2/client_conn_pool.go +++ b/constraint/vendor/golang.org/x/net/http2/client_conn_pool.go @@ -16,6 +16,12 @@ import ( // ClientConnPool manages a pool of HTTP/2 client connections. type ClientConnPool interface { + // GetClientConn returns a specific HTTP/2 connection (usually + // a TLS-TCP connection) to an HTTP/2 server. On success, the + // returned ClientConn accounts for the upcoming RoundTrip + // call, so the caller should not omit it. If the caller needs + // to, ClientConn.RoundTrip can be called with a bogus + // new(http.Request) to release the stream reservation. GetClientConn(req *http.Request, addr string) (*ClientConn, error) MarkDead(*ClientConn) } @@ -42,7 +48,7 @@ type clientConnPool struct { conns map[string][]*ClientConn // key is host:port dialing map[string]*dialCall // currently in-flight dials keys map[*ClientConn][]string - addConnCalls map[string]*addConnCall // in-flight addConnIfNeede calls + addConnCalls map[string]*addConnCall // in-flight addConnIfNeeded calls } func (p *clientConnPool) GetClientConn(req *http.Request, addr string) (*ClientConn, error) { @@ -54,28 +60,8 @@ const ( noDialOnMiss = false ) -// shouldTraceGetConn reports whether getClientConn should call any -// ClientTrace.GetConn hook associated with the http.Request. -// -// This complexity is needed to avoid double calls of the GetConn hook -// during the back-and-forth between net/http and x/net/http2 (when the -// net/http.Transport is upgraded to also speak http2), as well as support -// the case where x/net/http2 is being used directly. -func (p *clientConnPool) shouldTraceGetConn(st clientConnIdleState) bool { - // If our Transport wasn't made via ConfigureTransport, always - // trace the GetConn hook if provided, because that means the - // http2 package is being used directly and it's the one - // dialing, as opposed to net/http. - if _, ok := p.t.ConnPool.(noDialClientConnPool); !ok { - return true - } - // Otherwise, only use the GetConn hook if this connection has - // been used previously for other requests. For fresh - // connections, the net/http package does the dialing. - return !st.freshConn -} - func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMiss bool) (*ClientConn, error) { + // TODO(dneil): Dial a new connection when t.DisableKeepAlives is set? if isConnectionCloseRequest(req) && dialOnMiss { // It gets its own connection. traceGetConn(req, addr) @@ -89,10 +75,14 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis for { p.mu.Lock() for _, cc := range p.conns[addr] { - if st := cc.idleState(); st.canTakeNewRequest { - if p.shouldTraceGetConn(st) { + if cc.ReserveNewRequest() { + // When a connection is presented to us by the net/http package, + // the GetConn hook has already been called. + // Don't call it a second time here. + if !cc.getConnCalled { traceGetConn(req, addr) } + cc.getConnCalled = false p.mu.Unlock() return cc, nil } @@ -108,7 +98,13 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis if shouldRetryDial(call, req) { continue } - return call.res, call.err + cc, err := call.res, call.err + if err != nil { + return nil, err + } + if cc.ReserveNewRequest() { + return cc, nil + } } } @@ -205,6 +201,7 @@ func (c *addConnCall) run(t *Transport, key string, tc *tls.Conn) { if err != nil { c.err = err } else { + cc.getConnCalled = true // already called by the net/http package p.addConnLocked(key, cc) } delete(p.addConnCalls, key) diff --git a/constraint/vendor/golang.org/x/net/http2/errors.go b/constraint/vendor/golang.org/x/net/http2/errors.go index 71f2c4631..2663e5d28 100644 --- a/constraint/vendor/golang.org/x/net/http2/errors.go +++ b/constraint/vendor/golang.org/x/net/http2/errors.go @@ -53,6 +53,13 @@ func (e ErrCode) String() string { return fmt.Sprintf("unknown error code 0x%x", uint32(e)) } +func (e ErrCode) stringToken() string { + if s, ok := errCodeName[e]; ok { + return s + } + return fmt.Sprintf("ERR_UNKNOWN_%d", uint32(e)) +} + // ConnectionError is an error that results in the termination of the // entire connection. type ConnectionError ErrCode @@ -67,6 +74,11 @@ type StreamError struct { Cause error // optional additional detail } +// errFromPeer is a sentinel error value for StreamError.Cause to +// indicate that the StreamError was sent from the peer over the wire +// and wasn't locally generated in the Transport. +var errFromPeer = errors.New("received from peer") + func streamError(id uint32, code ErrCode) StreamError { return StreamError{StreamID: id, Code: code} } diff --git a/constraint/vendor/golang.org/x/net/http2/frame.go b/constraint/vendor/golang.org/x/net/http2/frame.go index 514c126c5..96a747905 100644 --- a/constraint/vendor/golang.org/x/net/http2/frame.go +++ b/constraint/vendor/golang.org/x/net/http2/frame.go @@ -122,7 +122,7 @@ var flagName = map[FrameType]map[Flags]string{ // a frameParser parses a frame given its FrameHeader and payload // bytes. The length of payload will always equal fh.Length (which // might be 0). -type frameParser func(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error) +type frameParser func(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) var frameParsers = map[FrameType]frameParser{ FrameData: parseDataFrame, @@ -267,6 +267,11 @@ type Framer struct { lastFrame Frame errDetail error + // countError is a non-nil func that's called on a frame parse + // error with some unique error path token. It's initialized + // from Transport.CountError or Server.CountError. + countError func(errToken string) + // lastHeaderStream is non-zero if the last frame was an // unfinished HEADERS/CONTINUATION. lastHeaderStream uint32 @@ -426,6 +431,7 @@ func NewFramer(w io.Writer, r io.Reader) *Framer { fr := &Framer{ w: w, r: r, + countError: func(string) {}, logReads: logFrameReads, logWrites: logFrameWrites, debugReadLoggerf: log.Printf, @@ -500,7 +506,7 @@ func (fr *Framer) ReadFrame() (Frame, error) { if _, err := io.ReadFull(fr.r, payload); err != nil { return nil, err } - f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, payload) + f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, fr.countError, payload) if err != nil { if ce, ok := err.(connError); ok { return nil, fr.connError(ce.Code, ce.Reason) @@ -588,13 +594,14 @@ func (f *DataFrame) Data() []byte { return f.data } -func parseDataFrame(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error) { +func parseDataFrame(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) { if fh.StreamID == 0 { // DATA frames MUST be associated with a stream. If a // DATA frame is received whose stream identifier // field is 0x0, the recipient MUST respond with a // connection error (Section 5.4.1) of type // PROTOCOL_ERROR. + countError("frame_data_stream_0") return nil, connError{ErrCodeProtocol, "DATA frame with stream ID 0"} } f := fc.getDataFrame() @@ -605,6 +612,7 @@ func parseDataFrame(fc *frameCache, fh FrameHeader, payload []byte) (Frame, erro var err error payload, padSize, err = readByte(payload) if err != nil { + countError("frame_data_pad_byte_short") return nil, err } } @@ -613,6 +621,7 @@ func parseDataFrame(fc *frameCache, fh FrameHeader, payload []byte) (Frame, erro // length of the frame payload, the recipient MUST // treat this as a connection error. // Filed: https://github.com/http2/http2-spec/issues/610 + countError("frame_data_pad_too_big") return nil, connError{ErrCodeProtocol, "pad size larger than data payload"} } f.data = payload[:len(payload)-int(padSize)] @@ -695,7 +704,7 @@ type SettingsFrame struct { p []byte } -func parseSettingsFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) { +func parseSettingsFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) { if fh.Flags.Has(FlagSettingsAck) && fh.Length > 0 { // When this (ACK 0x1) bit is set, the payload of the // SETTINGS frame MUST be empty. Receipt of a @@ -703,6 +712,7 @@ func parseSettingsFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) // field value other than 0 MUST be treated as a // connection error (Section 5.4.1) of type // FRAME_SIZE_ERROR. + countError("frame_settings_ack_with_length") return nil, ConnectionError(ErrCodeFrameSize) } if fh.StreamID != 0 { @@ -713,14 +723,17 @@ func parseSettingsFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) // field is anything other than 0x0, the endpoint MUST // respond with a connection error (Section 5.4.1) of // type PROTOCOL_ERROR. + countError("frame_settings_has_stream") return nil, ConnectionError(ErrCodeProtocol) } if len(p)%6 != 0 { + countError("frame_settings_mod_6") // Expecting even number of 6 byte settings. return nil, ConnectionError(ErrCodeFrameSize) } f := &SettingsFrame{FrameHeader: fh, p: p} if v, ok := f.Value(SettingInitialWindowSize); ok && v > (1<<31)-1 { + countError("frame_settings_window_size_too_big") // Values above the maximum flow control window size of 2^31 - 1 MUST // be treated as a connection error (Section 5.4.1) of type // FLOW_CONTROL_ERROR. @@ -832,11 +845,13 @@ type PingFrame struct { func (f *PingFrame) IsAck() bool { return f.Flags.Has(FlagPingAck) } -func parsePingFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) { +func parsePingFrame(_ *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) { if len(payload) != 8 { + countError("frame_ping_length") return nil, ConnectionError(ErrCodeFrameSize) } if fh.StreamID != 0 { + countError("frame_ping_has_stream") return nil, ConnectionError(ErrCodeProtocol) } f := &PingFrame{FrameHeader: fh} @@ -872,11 +887,13 @@ func (f *GoAwayFrame) DebugData() []byte { return f.debugData } -func parseGoAwayFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) { +func parseGoAwayFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) { if fh.StreamID != 0 { + countError("frame_goaway_has_stream") return nil, ConnectionError(ErrCodeProtocol) } if len(p) < 8 { + countError("frame_goaway_short") return nil, ConnectionError(ErrCodeFrameSize) } return &GoAwayFrame{ @@ -912,7 +929,7 @@ func (f *UnknownFrame) Payload() []byte { return f.p } -func parseUnknownFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) { +func parseUnknownFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) { return &UnknownFrame{fh, p}, nil } @@ -923,8 +940,9 @@ type WindowUpdateFrame struct { Increment uint32 // never read with high bit set } -func parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) { +func parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) { if len(p) != 4 { + countError("frame_windowupdate_bad_len") return nil, ConnectionError(ErrCodeFrameSize) } inc := binary.BigEndian.Uint32(p[:4]) & 0x7fffffff // mask off high reserved bit @@ -936,8 +954,10 @@ func parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, err // control window MUST be treated as a connection // error (Section 5.4.1). if fh.StreamID == 0 { + countError("frame_windowupdate_zero_inc_conn") return nil, ConnectionError(ErrCodeProtocol) } + countError("frame_windowupdate_zero_inc_stream") return nil, streamError(fh.StreamID, ErrCodeProtocol) } return &WindowUpdateFrame{ @@ -988,7 +1008,7 @@ func (f *HeadersFrame) HasPriority() bool { return f.FrameHeader.Flags.Has(FlagHeadersPriority) } -func parseHeadersFrame(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) { +func parseHeadersFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (_ Frame, err error) { hf := &HeadersFrame{ FrameHeader: fh, } @@ -997,11 +1017,13 @@ func parseHeadersFrame(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err er // is received whose stream identifier field is 0x0, the recipient MUST // respond with a connection error (Section 5.4.1) of type // PROTOCOL_ERROR. + countError("frame_headers_zero_stream") return nil, connError{ErrCodeProtocol, "HEADERS frame with stream ID 0"} } var padLength uint8 if fh.Flags.Has(FlagHeadersPadded) { if p, padLength, err = readByte(p); err != nil { + countError("frame_headers_pad_short") return } } @@ -1009,16 +1031,19 @@ func parseHeadersFrame(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err er var v uint32 p, v, err = readUint32(p) if err != nil { + countError("frame_headers_prio_short") return nil, err } hf.Priority.StreamDep = v & 0x7fffffff hf.Priority.Exclusive = (v != hf.Priority.StreamDep) // high bit was set p, hf.Priority.Weight, err = readByte(p) if err != nil { + countError("frame_headers_prio_weight_short") return nil, err } } - if len(p)-int(padLength) <= 0 { + if len(p)-int(padLength) < 0 { + countError("frame_headers_pad_too_big") return nil, streamError(fh.StreamID, ErrCodeProtocol) } hf.headerFragBuf = p[:len(p)-int(padLength)] @@ -1125,11 +1150,13 @@ func (p PriorityParam) IsZero() bool { return p == PriorityParam{} } -func parsePriorityFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) { +func parsePriorityFrame(_ *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) { if fh.StreamID == 0 { + countError("frame_priority_zero_stream") return nil, connError{ErrCodeProtocol, "PRIORITY frame with stream ID 0"} } if len(payload) != 5 { + countError("frame_priority_bad_length") return nil, connError{ErrCodeFrameSize, fmt.Sprintf("PRIORITY frame payload size was %d; want 5", len(payload))} } v := binary.BigEndian.Uint32(payload[:4]) @@ -1172,11 +1199,13 @@ type RSTStreamFrame struct { ErrCode ErrCode } -func parseRSTStreamFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) { +func parseRSTStreamFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) { if len(p) != 4 { + countError("frame_rststream_bad_len") return nil, ConnectionError(ErrCodeFrameSize) } if fh.StreamID == 0 { + countError("frame_rststream_zero_stream") return nil, ConnectionError(ErrCodeProtocol) } return &RSTStreamFrame{fh, ErrCode(binary.BigEndian.Uint32(p[:4]))}, nil @@ -1202,8 +1231,9 @@ type ContinuationFrame struct { headerFragBuf []byte } -func parseContinuationFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) { +func parseContinuationFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) { if fh.StreamID == 0 { + countError("frame_continuation_zero_stream") return nil, connError{ErrCodeProtocol, "CONTINUATION frame with stream ID 0"} } return &ContinuationFrame{fh, p}, nil @@ -1252,7 +1282,7 @@ func (f *PushPromiseFrame) HeadersEnded() bool { return f.FrameHeader.Flags.Has(FlagPushPromiseEndHeaders) } -func parsePushPromise(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) { +func parsePushPromise(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (_ Frame, err error) { pp := &PushPromiseFrame{ FrameHeader: fh, } @@ -1263,6 +1293,7 @@ func parsePushPromise(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err err // with. If the stream identifier field specifies the value // 0x0, a recipient MUST respond with a connection error // (Section 5.4.1) of type PROTOCOL_ERROR. + countError("frame_pushpromise_zero_stream") return nil, ConnectionError(ErrCodeProtocol) } // The PUSH_PROMISE frame includes optional padding. @@ -1270,18 +1301,21 @@ func parsePushPromise(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err err var padLength uint8 if fh.Flags.Has(FlagPushPromisePadded) { if p, padLength, err = readByte(p); err != nil { + countError("frame_pushpromise_pad_short") return } } p, pp.PromiseID, err = readUint32(p) if err != nil { + countError("frame_pushpromise_promiseid_short") return } pp.PromiseID = pp.PromiseID & (1<<31 - 1) if int(padLength) > len(p) { // like the DATA frame, error out if padding is longer than the body. + countError("frame_pushpromise_pad_too_big") return nil, ConnectionError(ErrCodeProtocol) } pp.headerFragBuf = p[:len(p)-int(padLength)] diff --git a/constraint/vendor/golang.org/x/net/http2/hpack/huffman.go b/constraint/vendor/golang.org/x/net/http2/hpack/huffman.go index a1ab2f056..fe0b84ccd 100644 --- a/constraint/vendor/golang.org/x/net/http2/hpack/huffman.go +++ b/constraint/vendor/golang.org/x/net/http2/hpack/huffman.go @@ -140,25 +140,29 @@ func buildRootHuffmanNode() { panic("unexpected size") } lazyRootHuffmanNode = newInternalNode() - for i, code := range huffmanCodes { - addDecoderNode(byte(i), code, huffmanCodeLen[i]) - } -} + // allocate a leaf node for each of the 256 symbols + leaves := new([256]node) + + for sym, code := range huffmanCodes { + codeLen := huffmanCodeLen[sym] + + cur := lazyRootHuffmanNode + for codeLen > 8 { + codeLen -= 8 + i := uint8(code >> codeLen) + if cur.children[i] == nil { + cur.children[i] = newInternalNode() + } + cur = cur.children[i] + } + shift := 8 - codeLen + start, end := int(uint8(code< 8 { - codeLen -= 8 - i := uint8(code >> codeLen) - if cur.children[i] == nil { - cur.children[i] = newInternalNode() + leaves[sym].sym = byte(sym) + leaves[sym].codeLen = codeLen + for i := start; i < start+end; i++ { + cur.children[i] = &leaves[sym] } - cur = cur.children[i] - } - shift := 8 - codeLen - start, end := int(uint8(code< 0 { sc.sendWindowUpdate(nil, int(diff)) @@ -860,6 +865,15 @@ func (sc *serverConn) serve() { case res := <-sc.wroteFrameCh: sc.wroteFrame(res) case res := <-sc.readFrameCh: + // Process any written frames before reading new frames from the client since a + // written frame could have triggered a new stream to be started. + if sc.writingFrameAsync { + select { + case wroteRes := <-sc.wroteFrameCh: + sc.wroteFrame(wroteRes) + default: + } + } if !sc.processFrameFromReader(res) { return } @@ -1394,7 +1408,7 @@ func (sc *serverConn) processFrame(f Frame) error { // First frame received must be SETTINGS. if !sc.sawFirstSettings { if _, ok := f.(*SettingsFrame); !ok { - return ConnectionError(ErrCodeProtocol) + return sc.countError("first_settings", ConnectionError(ErrCodeProtocol)) } sc.sawFirstSettings = true } @@ -1419,7 +1433,7 @@ func (sc *serverConn) processFrame(f Frame) error { case *PushPromiseFrame: // A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE // frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR. - return ConnectionError(ErrCodeProtocol) + return sc.countError("push_promise", ConnectionError(ErrCodeProtocol)) default: sc.vlogf("http2: server ignoring frame: %v", f.Header()) return nil @@ -1439,7 +1453,7 @@ func (sc *serverConn) processPing(f *PingFrame) error { // identifier field value other than 0x0, the recipient MUST // respond with a connection error (Section 5.4.1) of type // PROTOCOL_ERROR." - return ConnectionError(ErrCodeProtocol) + return sc.countError("ping_on_stream", ConnectionError(ErrCodeProtocol)) } if sc.inGoAway && sc.goAwayCode != ErrCodeNo { return nil @@ -1458,7 +1472,7 @@ func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error { // or PRIORITY on a stream in this state MUST be // treated as a connection error (Section 5.4.1) of // type PROTOCOL_ERROR." - return ConnectionError(ErrCodeProtocol) + return sc.countError("stream_idle", ConnectionError(ErrCodeProtocol)) } if st == nil { // "WINDOW_UPDATE can be sent by a peer that has sent a @@ -1469,7 +1483,7 @@ func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error { return nil } if !st.flow.add(int32(f.Increment)) { - return streamError(f.StreamID, ErrCodeFlowControl) + return sc.countError("bad_flow", streamError(f.StreamID, ErrCodeFlowControl)) } default: // connection-level flow control if !sc.flow.add(int32(f.Increment)) { @@ -1490,7 +1504,7 @@ func (sc *serverConn) processResetStream(f *RSTStreamFrame) error { // identifying an idle stream is received, the // recipient MUST treat this as a connection error // (Section 5.4.1) of type PROTOCOL_ERROR. - return ConnectionError(ErrCodeProtocol) + return sc.countError("reset_idle_stream", ConnectionError(ErrCodeProtocol)) } if st != nil { st.cancelCtx() @@ -1542,7 +1556,7 @@ func (sc *serverConn) processSettings(f *SettingsFrame) error { // Why is the peer ACKing settings we never sent? // The spec doesn't mention this case, but // hang up on them anyway. - return ConnectionError(ErrCodeProtocol) + return sc.countError("ack_mystery", ConnectionError(ErrCodeProtocol)) } return nil } @@ -1550,7 +1564,7 @@ func (sc *serverConn) processSettings(f *SettingsFrame) error { // This isn't actually in the spec, but hang up on // suspiciously large settings frames or those with // duplicate entries. - return ConnectionError(ErrCodeProtocol) + return sc.countError("settings_big_or_dups", ConnectionError(ErrCodeProtocol)) } if err := f.ForeachSetting(sc.processSetting); err != nil { return err @@ -1617,7 +1631,7 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error { // control window to exceed the maximum size as a // connection error (Section 5.4.1) of type // FLOW_CONTROL_ERROR." - return ConnectionError(ErrCodeFlowControl) + return sc.countError("setting_win_size", ConnectionError(ErrCodeFlowControl)) } } return nil @@ -1650,7 +1664,7 @@ func (sc *serverConn) processData(f *DataFrame) error { // or PRIORITY on a stream in this state MUST be // treated as a connection error (Section 5.4.1) of // type PROTOCOL_ERROR." - return ConnectionError(ErrCodeProtocol) + return sc.countError("data_on_idle", ConnectionError(ErrCodeProtocol)) } // "If a DATA frame is received whose stream is not in "open" @@ -1667,7 +1681,7 @@ func (sc *serverConn) processData(f *DataFrame) error { // and return any flow control bytes since we're not going // to consume them. if sc.inflow.available() < int32(f.Length) { - return streamError(id, ErrCodeFlowControl) + return sc.countError("data_flow", streamError(id, ErrCodeFlowControl)) } // Deduct the flow control from inflow, since we're // going to immediately add it back in @@ -1680,7 +1694,7 @@ func (sc *serverConn) processData(f *DataFrame) error { // Already have a stream error in flight. Don't send another. return nil } - return streamError(id, ErrCodeStreamClosed) + return sc.countError("closed", streamError(id, ErrCodeStreamClosed)) } if st.body == nil { panic("internal error: should have a body in this state") @@ -1692,12 +1706,12 @@ func (sc *serverConn) processData(f *DataFrame) error { // RFC 7540, sec 8.1.2.6: A request or response is also malformed if the // value of a content-length header field does not equal the sum of the // DATA frame payload lengths that form the body. - return streamError(id, ErrCodeProtocol) + return sc.countError("send_too_much", streamError(id, ErrCodeProtocol)) } if f.Length > 0 { // Check whether the client has flow control quota. if st.inflow.available() < int32(f.Length) { - return streamError(id, ErrCodeFlowControl) + return sc.countError("flow_on_data_length", streamError(id, ErrCodeFlowControl)) } st.inflow.take(int32(f.Length)) @@ -1705,7 +1719,7 @@ func (sc *serverConn) processData(f *DataFrame) error { wrote, err := st.body.Write(data) if err != nil { sc.sendWindowUpdate(nil, int(f.Length)-wrote) - return streamError(id, ErrCodeStreamClosed) + return sc.countError("body_write_err", streamError(id, ErrCodeStreamClosed)) } if wrote != len(data) { panic("internal error: bad Writer") @@ -1791,7 +1805,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { // stream identifier MUST respond with a connection error // (Section 5.4.1) of type PROTOCOL_ERROR. if id%2 != 1 { - return ConnectionError(ErrCodeProtocol) + return sc.countError("headers_even", ConnectionError(ErrCodeProtocol)) } // A HEADERS frame can be used to create a new stream or // send a trailer for an open one. If we already have a stream @@ -1808,7 +1822,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { // this state, it MUST respond with a stream error (Section 5.4.2) of // type STREAM_CLOSED. if st.state == stateHalfClosedRemote { - return streamError(id, ErrCodeStreamClosed) + return sc.countError("headers_half_closed", streamError(id, ErrCodeStreamClosed)) } return st.processTrailerHeaders(f) } @@ -1819,7 +1833,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { // receives an unexpected stream identifier MUST respond with // a connection error (Section 5.4.1) of type PROTOCOL_ERROR. if id <= sc.maxClientStreamID { - return ConnectionError(ErrCodeProtocol) + return sc.countError("stream_went_down", ConnectionError(ErrCodeProtocol)) } sc.maxClientStreamID = id @@ -1836,14 +1850,14 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { if sc.curClientStreams+1 > sc.advMaxStreams { if sc.unackedSettings == 0 { // They should know better. - return streamError(id, ErrCodeProtocol) + return sc.countError("over_max_streams", streamError(id, ErrCodeProtocol)) } // Assume it's a network race, where they just haven't // received our last SETTINGS update. But actually // this can't happen yet, because we don't yet provide // a way for users to adjust server parameters at // runtime. - return streamError(id, ErrCodeRefusedStream) + return sc.countError("over_max_streams_race", streamError(id, ErrCodeRefusedStream)) } initialState := stateOpen @@ -1853,7 +1867,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { st := sc.newStream(id, 0, initialState) if f.HasPriority() { - if err := checkPriority(f.StreamID, f.Priority); err != nil { + if err := sc.checkPriority(f.StreamID, f.Priority); err != nil { return err } sc.writeSched.AdjustStream(st.id, f.Priority) @@ -1897,15 +1911,15 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { sc := st.sc sc.serveG.check() if st.gotTrailerHeader { - return ConnectionError(ErrCodeProtocol) + return sc.countError("dup_trailers", ConnectionError(ErrCodeProtocol)) } st.gotTrailerHeader = true if !f.StreamEnded() { - return streamError(st.id, ErrCodeProtocol) + return sc.countError("trailers_not_ended", streamError(st.id, ErrCodeProtocol)) } if len(f.PseudoFields()) > 0 { - return streamError(st.id, ErrCodeProtocol) + return sc.countError("trailers_pseudo", streamError(st.id, ErrCodeProtocol)) } if st.trailer != nil { for _, hf := range f.RegularFields() { @@ -1914,7 +1928,7 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { // TODO: send more details to the peer somehow. But http2 has // no way to send debug data at a stream level. Discuss with // HTTP folk. - return streamError(st.id, ErrCodeProtocol) + return sc.countError("trailers_bogus", streamError(st.id, ErrCodeProtocol)) } st.trailer[key] = append(st.trailer[key], hf.Value) } @@ -1923,13 +1937,13 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { return nil } -func checkPriority(streamID uint32, p PriorityParam) error { +func (sc *serverConn) checkPriority(streamID uint32, p PriorityParam) error { if streamID == p.StreamDep { // Section 5.3.1: "A stream cannot depend on itself. An endpoint MUST treat // this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR." // Section 5.3.3 says that a stream can depend on one of its dependencies, // so it's only self-dependencies that are forbidden. - return streamError(streamID, ErrCodeProtocol) + return sc.countError("priority", streamError(streamID, ErrCodeProtocol)) } return nil } @@ -1938,7 +1952,7 @@ func (sc *serverConn) processPriority(f *PriorityFrame) error { if sc.inGoAway { return nil } - if err := checkPriority(f.StreamID, f.PriorityParam); err != nil { + if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil { return err } sc.writeSched.AdjustStream(f.StreamID, f.PriorityParam) @@ -1995,7 +2009,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res isConnect := rp.method == "CONNECT" if isConnect { if rp.path != "" || rp.scheme != "" || rp.authority == "" { - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { // See 8.1.2.6 Malformed Requests and Responses: @@ -2008,13 +2022,13 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res // "All HTTP/2 requests MUST include exactly one valid // value for the :method, :scheme, and :path // pseudo-header fields" - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol)) } bodyOpen := !f.StreamEnded() if rp.method == "HEAD" && bodyOpen { // HEAD requests can't have bodies - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, sc.countError("head_body", streamError(f.StreamID, ErrCodeProtocol)) } rp.header = make(http.Header) @@ -2097,7 +2111,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r var err error url_, err = url.ParseRequestURI(rp.path) if err != nil { - return nil, nil, streamError(st.id, ErrCodeProtocol) + return nil, nil, sc.countError("bad_path", streamError(st.id, ErrCodeProtocol)) } requestURI = rp.path } @@ -2980,3 +2994,31 @@ func h1ServerKeepAlivesDisabled(hs *http.Server) bool { } return false } + +func (sc *serverConn) countError(name string, err error) error { + if sc == nil || sc.srv == nil { + return err + } + f := sc.srv.CountError + if f == nil { + return err + } + var typ string + var code ErrCode + switch e := err.(type) { + case ConnectionError: + typ = "conn" + code = ErrCode(e) + case StreamError: + typ = "stream" + code = ErrCode(e.Code) + default: + return err + } + codeStr := errCodeName[code] + if codeStr == "" { + codeStr = strconv.Itoa(int(code)) + } + f(fmt.Sprintf("%s_%s_%s", typ, codeStr, name)) + return err +} diff --git a/constraint/vendor/golang.org/x/net/http2/transport.go b/constraint/vendor/golang.org/x/net/http2/transport.go index 7bd4b9c19..f135b0f75 100644 --- a/constraint/vendor/golang.org/x/net/http2/transport.go +++ b/constraint/vendor/golang.org/x/net/http2/transport.go @@ -24,6 +24,7 @@ import ( "net/http" "net/http/httptrace" "net/textproto" + "os" "sort" "strconv" "strings" @@ -51,6 +52,15 @@ const ( transportDefaultStreamMinRefresh = 4 << 10 defaultUserAgent = "Go-http-client/2.0" + + // initialMaxConcurrentStreams is a connections maxConcurrentStreams until + // it's received servers initial SETTINGS frame, which corresponds with the + // spec's minimum recommended value. + initialMaxConcurrentStreams = 100 + + // defaultMaxConcurrentStreams is a connections default maxConcurrentStreams + // if the server doesn't include one in its initial SETTINGS frame. + defaultMaxConcurrentStreams = 1000 ) // Transport is an HTTP/2 Transport. @@ -121,6 +131,17 @@ type Transport struct { // Defaults to 15s. PingTimeout time.Duration + // WriteByteTimeout is the timeout after which the connection will be + // closed no data can be written to it. The timeout begins when data is + // available to write, and is extended whenever any bytes are written. + WriteByteTimeout time.Duration + + // CountError, if non-nil, is called on HTTP/2 transport errors. + // It's intended to increment a metric for monitoring, such + // as an expvar or Prometheus metric. + // The errType consists of only ASCII word characters. + CountError func(errType string) + // t1, if non-nil, is the standard library Transport using // this transport. Its settings are used (but not its // RoundTrip method, etc). @@ -227,11 +248,12 @@ func (t *Transport) initConnPool() { // ClientConn is the state of a single HTTP/2 client connection to an // HTTP/2 server. type ClientConn struct { - t *Transport - tconn net.Conn // usually *tls.Conn, except specialized impls - tlsState *tls.ConnectionState // nil only for specialized impls - reused uint32 // whether conn is being reused; atomic - singleUse bool // whether being used for a single http.Request + t *Transport + tconn net.Conn // usually *tls.Conn, except specialized impls + tlsState *tls.ConnectionState // nil only for specialized impls + reused uint32 // whether conn is being reused; atomic + singleUse bool // whether being used for a single http.Request + getConnCalled bool // used by clientConnPool // readLoop goroutine fields: readerDone chan struct{} // closed on error @@ -244,87 +266,94 @@ type ClientConn struct { cond *sync.Cond // hold mu; broadcast on flow/closed changes flow flow // our conn-level flow control quota (cs.flow is per stream) inflow flow // peer's conn-level flow control + doNotReuse bool // whether conn is marked to not be reused for any future requests closing bool closed bool + seenSettings bool // true if we've seen a settings frame, false otherwise wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received goAwayDebug string // goAway frame's debug data, retained as a string streams map[uint32]*clientStream // client-initiated + streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip nextStreamID uint32 pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams pings map[[8]byte]chan struct{} // in flight ping data to notification channel - bw *bufio.Writer br *bufio.Reader - fr *Framer lastActive time.Time lastIdle time.Time // time last idle - // Settings from peer: (also guarded by mu) + // Settings from peer: (also guarded by wmu) maxFrameSize uint32 maxConcurrentStreams uint32 peerMaxHeaderListSize uint64 initialWindowSize uint32 - hbuf bytes.Buffer // HPACK encoder writes into this - henc *hpack.Encoder - freeBuf [][]byte + // reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests. + // Write to reqHeaderMu to lock it, read from it to unlock. + // Lock reqmu BEFORE mu or wmu. + reqHeaderMu chan struct{} - wmu sync.Mutex // held while writing; acquire AFTER mu if holding both - werr error // first write error that has occurred + // wmu is held while writing. + // Acquire BEFORE mu when holding both, to avoid blocking mu on network writes. + // Only acquire both at the same time when changing peer settings. + wmu sync.Mutex + bw *bufio.Writer + fr *Framer + werr error // first write error that has occurred + hbuf bytes.Buffer // HPACK encoder writes into this + henc *hpack.Encoder } // clientStream is the state for a single HTTP/2 stream. One of these // is created for each Transport.RoundTrip call. type clientStream struct { - cc *ClientConn - req *http.Request + cc *ClientConn + + // Fields of Request that we may access even after the response body is closed. + ctx context.Context + reqCancel <-chan struct{} + trace *httptrace.ClientTrace // or nil ID uint32 - resc chan resAndError bufPipe pipe // buffered pipe with the flow-controlled response payload - startedWrite bool // started request body write; guarded by cc.mu requestedGzip bool - on100 func() // optional code to run if get a 100 continue response + isHead bool + + abortOnce sync.Once + abort chan struct{} // closed to signal stream should end immediately + abortErr error // set if abort is closed + + peerClosed chan struct{} // closed when the peer sends an END_STREAM flag + donec chan struct{} // closed after the stream is in the closed state + on100 chan struct{} // buffered; written to if a 100 is received + + respHeaderRecv chan struct{} // closed when headers are received + res *http.Response // set if respHeaderRecv is closed flow flow // guarded by cc.mu inflow flow // guarded by cc.mu bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read readErr error // sticky read error; owned by transportResponseBody.Read - stopReqBody error // if non-nil, stop writing req body; guarded by cc.mu - didReset bool // whether we sent a RST_STREAM to the server; guarded by cc.mu - peerReset chan struct{} // closed on peer reset - resetErr error // populated before peerReset is closed + reqBody io.ReadCloser + reqBodyContentLength int64 // -1 means unknown + reqBodyClosed bool // body has been closed; guarded by cc.mu - done chan struct{} // closed when stream remove from cc.streams map; close calls guarded by cc.mu + // owned by writeRequest: + sentEndStream bool // sent an END_STREAM flag to the peer + sentHeaders bool // owned by clientConnReadLoop: firstByte bool // got the first response byte pastHeaders bool // got first MetaHeadersFrame (actual headers) pastTrailers bool // got optional second MetaHeadersFrame (trailers) num1xx uint8 // number of 1xx responses seen + readClosed bool // peer sent an END_STREAM flag + readAborted bool // read loop reset the stream trailer http.Header // accumulated trailers resTrailer *http.Header // client's Response.Trailer } -// awaitRequestCancel waits for the user to cancel a request or for the done -// channel to be signaled. A non-nil error is returned only if the request was -// canceled. -func awaitRequestCancel(req *http.Request, done <-chan struct{}) error { - ctx := req.Context() - if req.Cancel == nil && ctx.Done() == nil { - return nil - } - select { - case <-req.Cancel: - return errRequestCanceled - case <-ctx.Done(): - return ctx.Err() - case <-done: - return nil - } -} - var got1xxFuncForTests func(int, textproto.MIMEHeader) error // get1xxTraceFunc returns the value of request's httptrace.ClientTrace.Got1xxResponse func, @@ -336,73 +365,65 @@ func (cs *clientStream) get1xxTraceFunc() func(int, textproto.MIMEHeader) error return traceGot1xxResponseFunc(cs.trace) } -// awaitRequestCancel waits for the user to cancel a request, its context to -// expire, or for the request to be done (any way it might be removed from the -// cc.streams map: peer reset, successful completion, TCP connection breakage, -// etc). If the request is canceled, then cs will be canceled and closed. -func (cs *clientStream) awaitRequestCancel(req *http.Request) { - if err := awaitRequestCancel(req, cs.done); err != nil { - cs.cancelStream() - cs.bufPipe.CloseWithError(err) - } +func (cs *clientStream) abortStream(err error) { + cs.cc.mu.Lock() + defer cs.cc.mu.Unlock() + cs.abortStreamLocked(err) } -func (cs *clientStream) cancelStream() { - cc := cs.cc - cc.mu.Lock() - didReset := cs.didReset - cs.didReset = true - cc.mu.Unlock() - - if !didReset { - cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) - cc.forgetStreamID(cs.ID) +func (cs *clientStream) abortStreamLocked(err error) { + cs.abortOnce.Do(func() { + cs.abortErr = err + close(cs.abort) + }) + if cs.reqBody != nil && !cs.reqBodyClosed { + cs.reqBody.Close() + cs.reqBodyClosed = true } -} - -// checkResetOrDone reports any error sent in a RST_STREAM frame by the -// server, or errStreamClosed if the stream is complete. -func (cs *clientStream) checkResetOrDone() error { - select { - case <-cs.peerReset: - return cs.resetErr - case <-cs.done: - return errStreamClosed - default: - return nil + // TODO(dneil): Clean up tests where cs.cc.cond is nil. + if cs.cc.cond != nil { + // Wake up writeRequestBody if it is waiting on flow control. + cs.cc.cond.Broadcast() } } -func (cs *clientStream) getStartedWrite() bool { +func (cs *clientStream) abortRequestBodyWrite() { cc := cs.cc cc.mu.Lock() defer cc.mu.Unlock() - return cs.startedWrite -} - -func (cs *clientStream) abortRequestBodyWrite(err error) { - if err == nil { - panic("nil error") + if cs.reqBody != nil && !cs.reqBodyClosed { + cs.reqBody.Close() + cs.reqBodyClosed = true + cc.cond.Broadcast() } - cc := cs.cc - cc.mu.Lock() - cs.stopReqBody = err - cc.cond.Broadcast() - cc.mu.Unlock() } type stickyErrWriter struct { - w io.Writer - err *error + conn net.Conn + timeout time.Duration + err *error } func (sew stickyErrWriter) Write(p []byte) (n int, err error) { if *sew.err != nil { return 0, *sew.err } - n, err = sew.w.Write(p) - *sew.err = err - return + for { + if sew.timeout != 0 { + sew.conn.SetWriteDeadline(time.Now().Add(sew.timeout)) + } + nn, err := sew.conn.Write(p[n:]) + n += nn + if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) { + // Keep extending the deadline so long as we're making progress. + continue + } + if sew.timeout != 0 { + sew.conn.SetWriteDeadline(time.Time{}) + } + *sew.err = err + return n, err + } } // noCachedConnError is the concrete type of ErrNoCachedConn, which @@ -475,9 +496,9 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res } reused := !atomic.CompareAndSwapUint32(&cc.reused, 0, 1) traceGotConn(req, cc, reused) - res, gotErrAfterReqBodyWrite, err := cc.roundTrip(req) + res, err := cc.RoundTrip(req) if err != nil && retry <= 6 { - if req, err = shouldRetryRequest(req, err, gotErrAfterReqBodyWrite); err == nil { + if req, err = shouldRetryRequest(req, err); err == nil { // After the first retry, do exponential backoff with 10% jitter. if retry == 0 { continue @@ -488,7 +509,7 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res case <-time.After(time.Second * time.Duration(backoff)): continue case <-req.Context().Done(): - return nil, req.Context().Err() + err = req.Context().Err() } } } @@ -519,7 +540,7 @@ var ( // response headers. It is always called with a non-nil error. // It returns either a request to retry (either the same request, or a // modified clone), or an error if the request can't be replayed. -func shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*http.Request, error) { +func shouldRetryRequest(req *http.Request, err error) (*http.Request, error) { if !canRetryError(err) { return nil, err } @@ -532,7 +553,6 @@ func shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*htt // If the request body can be reset back to its original // state via the optional req.GetBody, do that. if req.GetBody != nil { - // TODO: consider a req.Body.Close here? or audit that all caller paths do? body, err := req.GetBody() if err != nil { return nil, err @@ -544,10 +564,8 @@ func shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*htt // The Request.Body can't reset back to the beginning, but we // don't seem to have started to read from it yet, so reuse - // the request directly. The "afterBodyWrite" means the - // bodyWrite process has started, which becomes true before - // the first Read. - if !afterBodyWrite { + // the request directly. + if err == errClientConnUnusable { return req, nil } @@ -559,6 +577,10 @@ func canRetryError(err error) bool { return true } if se, ok := err.(StreamError); ok { + if se.Code == ErrCodeProtocol && se.Cause == errFromPeer { + // See golang/go#47635, golang/go#42777 + return true + } return se.Code == ErrCodeRefusedStream } return false @@ -633,14 +655,15 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro tconn: c, readerDone: make(chan struct{}), nextStreamID: 1, - maxFrameSize: 16 << 10, // spec default - initialWindowSize: 65535, // spec default - maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough. - peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. + maxFrameSize: 16 << 10, // spec default + initialWindowSize: 65535, // spec default + maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings. + peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. streams: make(map[uint32]*clientStream), singleUse: singleUse, wantSettingsAck: true, pings: make(map[[8]byte]chan struct{}), + reqHeaderMu: make(chan struct{}, 1), } if d := t.idleConnTimeout(); d != 0 { cc.idleTimeout = d @@ -655,9 +678,16 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro // TODO: adjust this writer size to account for frame size + // MTU + crypto/tls record padding. - cc.bw = bufio.NewWriter(stickyErrWriter{c, &cc.werr}) + cc.bw = bufio.NewWriter(stickyErrWriter{ + conn: c, + timeout: t.WriteByteTimeout, + err: &cc.werr, + }) cc.br = bufio.NewReader(c) cc.fr = NewFramer(cc.bw, cc.br) + if t.CountError != nil { + cc.fr.countError = t.CountError + } cc.fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil) cc.fr.MaxHeaderListSize = t.maxHeaderListSize() @@ -710,6 +740,13 @@ func (cc *ClientConn) healthCheck() { } } +// SetDoNotReuse marks cc as not reusable for future HTTP requests. +func (cc *ClientConn) SetDoNotReuse() { + cc.mu.Lock() + defer cc.mu.Unlock() + cc.doNotReuse = true +} + func (cc *ClientConn) setGoAway(f *GoAwayFrame) { cc.mu.Lock() defer cc.mu.Unlock() @@ -727,27 +764,94 @@ func (cc *ClientConn) setGoAway(f *GoAwayFrame) { last := f.LastStreamID for streamID, cs := range cc.streams { if streamID > last { - select { - case cs.resc <- resAndError{err: errClientConnGotGoAway}: - default: - } + cs.abortStreamLocked(errClientConnGotGoAway) } } } // CanTakeNewRequest reports whether the connection can take a new request, // meaning it has not been closed or received or sent a GOAWAY. +// +// If the caller is going to immediately make a new request on this +// connection, use ReserveNewRequest instead. func (cc *ClientConn) CanTakeNewRequest() bool { cc.mu.Lock() defer cc.mu.Unlock() return cc.canTakeNewRequestLocked() } +// ReserveNewRequest is like CanTakeNewRequest but also reserves a +// concurrent stream in cc. The reservation is decremented on the +// next call to RoundTrip. +func (cc *ClientConn) ReserveNewRequest() bool { + cc.mu.Lock() + defer cc.mu.Unlock() + if st := cc.idleStateLocked(); !st.canTakeNewRequest { + return false + } + cc.streamsReserved++ + return true +} + +// ClientConnState describes the state of a ClientConn. +type ClientConnState struct { + // Closed is whether the connection is closed. + Closed bool + + // Closing is whether the connection is in the process of + // closing. It may be closing due to shutdown, being a + // single-use connection, being marked as DoNotReuse, or + // having received a GOAWAY frame. + Closing bool + + // StreamsActive is how many streams are active. + StreamsActive int + + // StreamsReserved is how many streams have been reserved via + // ClientConn.ReserveNewRequest. + StreamsReserved int + + // StreamsPending is how many requests have been sent in excess + // of the peer's advertised MaxConcurrentStreams setting and + // are waiting for other streams to complete. + StreamsPending int + + // MaxConcurrentStreams is how many concurrent streams the + // peer advertised as acceptable. Zero means no SETTINGS + // frame has been received yet. + MaxConcurrentStreams uint32 + + // LastIdle, if non-zero, is when the connection last + // transitioned to idle state. + LastIdle time.Time +} + +// State returns a snapshot of cc's state. +func (cc *ClientConn) State() ClientConnState { + cc.wmu.Lock() + maxConcurrent := cc.maxConcurrentStreams + if !cc.seenSettings { + maxConcurrent = 0 + } + cc.wmu.Unlock() + + cc.mu.Lock() + defer cc.mu.Unlock() + return ClientConnState{ + Closed: cc.closed, + Closing: cc.closing || cc.singleUse || cc.doNotReuse || cc.goAway != nil, + StreamsActive: len(cc.streams), + StreamsReserved: cc.streamsReserved, + StreamsPending: cc.pendingRequests, + LastIdle: cc.lastIdle, + MaxConcurrentStreams: maxConcurrent, + } +} + // clientConnIdleState describes the suitability of a client // connection to initiate a new RoundTrip request. type clientConnIdleState struct { canTakeNewRequest bool - freshConn bool // whether it's unused by any previous request } func (cc *ClientConn) idleState() clientConnIdleState { @@ -768,13 +872,13 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { // writing it. maxConcurrentOkay = true } else { - maxConcurrentOkay = int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) + maxConcurrentOkay = int64(len(cc.streams)+cc.streamsReserved+1) <= int64(cc.maxConcurrentStreams) } st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay && + !cc.doNotReuse && int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 && !cc.tooIdleLocked() - st.freshConn = cc.nextStreamID == 1 && st.canTakeNewRequest return } @@ -805,7 +909,7 @@ func (cc *ClientConn) onIdleTimeout() { func (cc *ClientConn) closeIfIdle() { cc.mu.Lock() - if len(cc.streams) > 0 { + if len(cc.streams) > 0 || cc.streamsReserved > 0 { cc.mu.Unlock() return } @@ -820,9 +924,15 @@ func (cc *ClientConn) closeIfIdle() { cc.tconn.Close() } +func (cc *ClientConn) isDoNotReuseAndIdle() bool { + cc.mu.Lock() + defer cc.mu.Unlock() + return cc.doNotReuse && len(cc.streams) == 0 +} + var shutdownEnterWaitStateHook = func() {} -// Shutdown gracefully close the client connection, waiting for running streams to complete. +// Shutdown gracefully closes the client connection, waiting for running streams to complete. func (cc *ClientConn) Shutdown(ctx context.Context) error { if err := cc.sendGoAway(); err != nil { return err @@ -861,15 +971,18 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { func (cc *ClientConn) sendGoAway() error { cc.mu.Lock() - defer cc.mu.Unlock() - cc.wmu.Lock() - defer cc.wmu.Unlock() - if cc.closing { + closing := cc.closing + cc.closing = true + maxStreamID := cc.nextStreamID + cc.mu.Unlock() + if closing { // GOAWAY sent already return nil } + + cc.wmu.Lock() + defer cc.wmu.Unlock() // Send a graceful shutdown frame to server - maxStreamID := cc.nextStreamID if err := cc.fr.WriteGoAway(maxStreamID, ErrCodeNo, nil); err != nil { return err } @@ -877,7 +990,6 @@ func (cc *ClientConn) sendGoAway() error { return err } // Prevent new requests - cc.closing = true return nil } @@ -885,17 +997,12 @@ func (cc *ClientConn) sendGoAway() error { // err is sent to streams. func (cc *ClientConn) closeForError(err error) error { cc.mu.Lock() + cc.closed = true + for _, cs := range cc.streams { + cs.abortStreamLocked(err) + } defer cc.cond.Broadcast() defer cc.mu.Unlock() - for id, cs := range cc.streams { - select { - case cs.resc <- resAndError{err: err}: - default: - } - cs.bufPipe.CloseWithError(err) - delete(cc.streams, id) - } - cc.closed = true return cc.tconn.Close() } @@ -910,47 +1017,10 @@ func (cc *ClientConn) Close() error { // closes the client connection immediately. In-flight requests are interrupted. func (cc *ClientConn) closeForLostPing() error { err := errors.New("http2: client connection lost") - return cc.closeForError(err) -} - -const maxAllocFrameSize = 512 << 10 - -// frameBuffer returns a scratch buffer suitable for writing DATA frames. -// They're capped at the min of the peer's max frame size or 512KB -// (kinda arbitrarily), but definitely capped so we don't allocate 4GB -// bufers. -func (cc *ClientConn) frameScratchBuffer() []byte { - cc.mu.Lock() - size := cc.maxFrameSize - if size > maxAllocFrameSize { - size = maxAllocFrameSize + if f := cc.t.CountError; f != nil { + f("conn_close_lost_ping") } - for i, buf := range cc.freeBuf { - if len(buf) >= int(size) { - cc.freeBuf[i] = nil - cc.mu.Unlock() - return buf[:size] - } - } - cc.mu.Unlock() - return make([]byte, size) -} - -func (cc *ClientConn) putFrameScratchBuffer(buf []byte) { - cc.mu.Lock() - defer cc.mu.Unlock() - const maxBufs = 4 // arbitrary; 4 concurrent requests per conn? investigate. - if len(cc.freeBuf) < maxBufs { - cc.freeBuf = append(cc.freeBuf, buf) - return - } - for i, old := range cc.freeBuf { - if old == nil { - cc.freeBuf[i] = buf - return - } - } - // forget about it. + return cc.closeForError(err) } // errRequestCanceled is a copy of net/http's errRequestCanceled because it's not @@ -1014,41 +1084,158 @@ func actualContentLength(req *http.Request) int64 { return -1 } +func (cc *ClientConn) decrStreamReservations() { + cc.mu.Lock() + defer cc.mu.Unlock() + cc.decrStreamReservationsLocked() +} + +func (cc *ClientConn) decrStreamReservationsLocked() { + if cc.streamsReserved > 0 { + cc.streamsReserved-- + } +} + func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { - resp, _, err := cc.roundTrip(req) - return resp, err + ctx := req.Context() + cs := &clientStream{ + cc: cc, + ctx: ctx, + reqCancel: req.Cancel, + isHead: req.Method == "HEAD", + reqBody: req.Body, + reqBodyContentLength: actualContentLength(req), + trace: httptrace.ContextClientTrace(ctx), + peerClosed: make(chan struct{}), + abort: make(chan struct{}), + respHeaderRecv: make(chan struct{}), + donec: make(chan struct{}), + } + go cs.doRequest(req) + + waitDone := func() error { + select { + case <-cs.donec: + return nil + case <-ctx.Done(): + return ctx.Err() + case <-cs.reqCancel: + return errRequestCanceled + } + } + + handleResponseHeaders := func() (*http.Response, error) { + res := cs.res + if res.StatusCode > 299 { + // On error or status code 3xx, 4xx, 5xx, etc abort any + // ongoing write, assuming that the server doesn't care + // about our request body. If the server replied with 1xx or + // 2xx, however, then assume the server DOES potentially + // want our body (e.g. full-duplex streaming: + // golang.org/issue/13444). If it turns out the server + // doesn't, they'll RST_STREAM us soon enough. This is a + // heuristic to avoid adding knobs to Transport. Hopefully + // we can keep it. + cs.abortRequestBodyWrite() + } + res.Request = req + res.TLS = cc.tlsState + if res.Body == noBody && actualContentLength(req) == 0 { + // If there isn't a request or response body still being + // written, then wait for the stream to be closed before + // RoundTrip returns. + if err := waitDone(); err != nil { + return nil, err + } + } + return res, nil + } + + for { + select { + case <-cs.respHeaderRecv: + return handleResponseHeaders() + case <-cs.abort: + select { + case <-cs.respHeaderRecv: + // If both cs.respHeaderRecv and cs.abort are signaling, + // pick respHeaderRecv. The server probably wrote the + // response and immediately reset the stream. + // golang.org/issue/49645 + return handleResponseHeaders() + default: + waitDone() + return nil, cs.abortErr + } + case <-ctx.Done(): + err := ctx.Err() + cs.abortStream(err) + return nil, err + case <-cs.reqCancel: + cs.abortStream(errRequestCanceled) + return nil, errRequestCanceled + } + } } -func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAfterReqBodyWrite bool, err error) { +// doRequest runs for the duration of the request lifetime. +// +// It sends the request and performs post-request cleanup (closing Request.Body, etc.). +func (cs *clientStream) doRequest(req *http.Request) { + err := cs.writeRequest(req) + cs.cleanupWriteRequest(err) +} + +// writeRequest sends a request. +// +// It returns nil after the request is written, the response read, +// and the request stream is half-closed by the peer. +// +// It returns non-nil if the request ends otherwise. +// If the returned error is StreamError, the error Code may be used in resetting the stream. +func (cs *clientStream) writeRequest(req *http.Request) (err error) { + cc := cs.cc + ctx := cs.ctx + if err := checkConnHeaders(req); err != nil { - return nil, false, err - } - if cc.idleTimer != nil { - cc.idleTimer.Stop() + return err } - trailers, err := commaSeparatedTrailers(req) - if err != nil { - return nil, false, err + // Acquire the new-request lock by writing to reqHeaderMu. + // This lock guards the critical section covering allocating a new stream ID + // (requires mu) and creating the stream (requires wmu). + if cc.reqHeaderMu == nil { + panic("RoundTrip on uninitialized ClientConn") // for tests + } + select { + case cc.reqHeaderMu <- struct{}{}: + case <-cs.reqCancel: + return errRequestCanceled + case <-ctx.Done(): + return ctx.Err() } - hasTrailers := trailers != "" cc.mu.Lock() - if err := cc.awaitOpenSlotForRequest(req); err != nil { + if cc.idleTimer != nil { + cc.idleTimer.Stop() + } + cc.decrStreamReservationsLocked() + if err := cc.awaitOpenSlotForStreamLocked(cs); err != nil { cc.mu.Unlock() - return nil, false, err + <-cc.reqHeaderMu + return err } - - body := req.Body - contentLen := actualContentLength(req) - hasBody := contentLen != 0 + cc.addStreamLocked(cs) // assigns stream ID + if isConnectionCloseRequest(req) { + cc.doNotReuse = true + } + cc.mu.Unlock() // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? - var requestedGzip bool if !cc.t.disableCompression() && req.Header.Get("Accept-Encoding") == "" && req.Header.Get("Range") == "" && - req.Method != "HEAD" { + !cs.isHead { // Request gzip only, not deflate. Deflate is ambiguous and // not as universally supported anyway. // See: https://zlib.net/zlib_faq.html#faq39 @@ -1061,195 +1248,224 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf // We don't request gzip if the request is for a range, since // auto-decoding a portion of a gzipped document will just fail // anyway. See https://golang.org/issue/8923 - requestedGzip = true + cs.requestedGzip = true } - // we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is - // sent by writeRequestBody below, along with any Trailers, - // again in form HEADERS{1}, CONTINUATION{0,}) - hdrs, err := cc.encodeHeaders(req, requestedGzip, trailers, contentLen) - if err != nil { - cc.mu.Unlock() - return nil, false, err + continueTimeout := cc.t.expectContinueTimeout() + if continueTimeout != 0 { + if !httpguts.HeaderValuesContainsToken(req.Header["Expect"], "100-continue") { + continueTimeout = 0 + } else { + cs.on100 = make(chan struct{}, 1) + } } - cs := cc.newStream() - cs.req = req - cs.trace = httptrace.ContextClientTrace(req.Context()) - cs.requestedGzip = requestedGzip - bodyWriter := cc.t.getBodyWriterState(cs, body) - cs.on100 = bodyWriter.on100 + // Past this point (where we send request headers), it is possible for + // RoundTrip to return successfully. Since the RoundTrip contract permits + // the caller to "mutate or reuse" the Request after closing the Response's Body, + // we must take care when referencing the Request from here on. + err = cs.encodeAndWriteHeaders(req) + <-cc.reqHeaderMu + if err != nil { + return err + } - defer func() { - cc.wmu.Lock() - werr := cc.werr - cc.wmu.Unlock() - if werr != nil { - cc.Close() + hasBody := cs.reqBodyContentLength != 0 + if !hasBody { + cs.sentEndStream = true + } else { + if continueTimeout != 0 { + traceWait100Continue(cs.trace) + timer := time.NewTimer(continueTimeout) + select { + case <-timer.C: + err = nil + case <-cs.on100: + err = nil + case <-cs.abort: + err = cs.abortErr + case <-ctx.Done(): + err = ctx.Err() + case <-cs.reqCancel: + err = errRequestCanceled + } + timer.Stop() + if err != nil { + traceWroteRequest(cs.trace, err) + return err + } } - }() - cc.wmu.Lock() - endStream := !hasBody && !hasTrailers - werr := cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs) - cc.wmu.Unlock() - traceWroteHeaders(cs.trace) - cc.mu.Unlock() - - if werr != nil { - if hasBody { - req.Body.Close() // per RoundTripper contract - bodyWriter.cancel() + if err = cs.writeRequestBody(req); err != nil { + if err != errStopReqBodyWrite { + traceWroteRequest(cs.trace, err) + return err + } + } else { + cs.sentEndStream = true } - cc.forgetStreamID(cs.ID) - // Don't bother sending a RST_STREAM (our write already failed; - // no need to keep writing) - traceWroteRequest(cs.trace, werr) - return nil, false, werr } + traceWroteRequest(cs.trace, err) + var respHeaderTimer <-chan time.Time - if hasBody { - bodyWriter.scheduleBodyWrite() - } else { - traceWroteRequest(cs.trace, nil) - if d := cc.responseHeaderTimeout(); d != 0 { - timer := time.NewTimer(d) - defer timer.Stop() - respHeaderTimer = timer.C + var respHeaderRecv chan struct{} + if d := cc.responseHeaderTimeout(); d != 0 { + timer := time.NewTimer(d) + defer timer.Stop() + respHeaderTimer = timer.C + respHeaderRecv = cs.respHeaderRecv + } + // Wait until the peer half-closes its end of the stream, + // or until the request is aborted (via context, error, or otherwise), + // whichever comes first. + for { + select { + case <-cs.peerClosed: + return nil + case <-respHeaderTimer: + return errTimeout + case <-respHeaderRecv: + respHeaderRecv = nil + respHeaderTimer = nil // keep waiting for END_STREAM + case <-cs.abort: + return cs.abortErr + case <-ctx.Done(): + return ctx.Err() + case <-cs.reqCancel: + return errRequestCanceled } } +} - readLoopResCh := cs.resc - bodyWritten := false - ctx := req.Context() +func (cs *clientStream) encodeAndWriteHeaders(req *http.Request) error { + cc := cs.cc + ctx := cs.ctx - handleReadLoopResponse := func(re resAndError) (*http.Response, bool, error) { - res := re.res - if re.err != nil || res.StatusCode > 299 { - // On error or status code 3xx, 4xx, 5xx, etc abort any - // ongoing write, assuming that the server doesn't care - // about our request body. If the server replied with 1xx or - // 2xx, however, then assume the server DOES potentially - // want our body (e.g. full-duplex streaming: - // golang.org/issue/13444). If it turns out the server - // doesn't, they'll RST_STREAM us soon enough. This is a - // heuristic to avoid adding knobs to Transport. Hopefully - // we can keep it. - bodyWriter.cancel() - cs.abortRequestBodyWrite(errStopReqBodyWrite) - if hasBody && !bodyWritten { - <-bodyWriter.resc - } - } - if re.err != nil { - cc.forgetStreamID(cs.ID) - return nil, cs.getStartedWrite(), re.err - } - res.Request = req - res.TLS = cc.tlsState - return res, false, nil + cc.wmu.Lock() + defer cc.wmu.Unlock() + + // If the request was canceled while waiting for cc.mu, just quit. + select { + case <-cs.abort: + return cs.abortErr + case <-ctx.Done(): + return ctx.Err() + case <-cs.reqCancel: + return errRequestCanceled + default: } - for { + // Encode headers. + // + // we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is + // sent by writeRequestBody below, along with any Trailers, + // again in form HEADERS{1}, CONTINUATION{0,}) + trailers, err := commaSeparatedTrailers(req) + if err != nil { + return err + } + hasTrailers := trailers != "" + contentLen := actualContentLength(req) + hasBody := contentLen != 0 + hdrs, err := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen) + if err != nil { + return err + } + + // Write the request. + endStream := !hasBody && !hasTrailers + cs.sentHeaders = true + err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs) + traceWroteHeaders(cs.trace) + return err +} + +// cleanupWriteRequest performs post-request tasks. +// +// If err (the result of writeRequest) is non-nil and the stream is not closed, +// cleanupWriteRequest will send a reset to the peer. +func (cs *clientStream) cleanupWriteRequest(err error) { + cc := cs.cc + + if cs.ID == 0 { + // We were canceled before creating the stream, so return our reservation. + cc.decrStreamReservations() + } + + // TODO: write h12Compare test showing whether + // Request.Body is closed by the Transport, + // and in multiple cases: server replies <=299 and >299 + // while still writing request body + cc.mu.Lock() + bodyClosed := cs.reqBodyClosed + cs.reqBodyClosed = true + cc.mu.Unlock() + if !bodyClosed && cs.reqBody != nil { + cs.reqBody.Close() + } + + if err != nil && cs.sentEndStream { + // If the connection is closed immediately after the response is read, + // we may be aborted before finishing up here. If the stream was closed + // cleanly on both sides, there is no error. select { - case re := <-readLoopResCh: - return handleReadLoopResponse(re) - case <-respHeaderTimer: - if !hasBody || bodyWritten { - cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) - } else { - bodyWriter.cancel() - cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) - <-bodyWriter.resc - } - cc.forgetStreamID(cs.ID) - return nil, cs.getStartedWrite(), errTimeout - case <-ctx.Done(): - if !hasBody || bodyWritten { - cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) - } else { - bodyWriter.cancel() - cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) - <-bodyWriter.resc - } - cc.forgetStreamID(cs.ID) - return nil, cs.getStartedWrite(), ctx.Err() - case <-req.Cancel: - if !hasBody || bodyWritten { - cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) - } else { - bodyWriter.cancel() - cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) - <-bodyWriter.resc - } - cc.forgetStreamID(cs.ID) - return nil, cs.getStartedWrite(), errRequestCanceled - case <-cs.peerReset: - // processResetStream already removed the - // stream from the streams map; no need for - // forgetStreamID. - return nil, cs.getStartedWrite(), cs.resetErr - case err := <-bodyWriter.resc: - bodyWritten = true - // Prefer the read loop's response, if available. Issue 16102. - select { - case re := <-readLoopResCh: - return handleReadLoopResponse(re) - default: - } - if err != nil { - cc.forgetStreamID(cs.ID) - return nil, cs.getStartedWrite(), err - } - if d := cc.responseHeaderTimeout(); d != 0 { - timer := time.NewTimer(d) - defer timer.Stop() - respHeaderTimer = timer.C + case <-cs.peerClosed: + err = nil + default: + } + } + if err != nil { + cs.abortStream(err) // possibly redundant, but harmless + if cs.sentHeaders { + if se, ok := err.(StreamError); ok { + if se.Cause != errFromPeer { + cc.writeStreamReset(cs.ID, se.Code, err) + } + } else { + cc.writeStreamReset(cs.ID, ErrCodeCancel, err) } } + cs.bufPipe.CloseWithError(err) // no-op if already closed + } else { + if cs.sentHeaders && !cs.sentEndStream { + cc.writeStreamReset(cs.ID, ErrCodeNo, nil) + } + cs.bufPipe.CloseWithError(errRequestCanceled) + } + if cs.ID != 0 { + cc.forgetStreamID(cs.ID) + } + + cc.wmu.Lock() + werr := cc.werr + cc.wmu.Unlock() + if werr != nil { + cc.Close() } + + close(cs.donec) } -// awaitOpenSlotForRequest waits until len(streams) < maxConcurrentStreams. +// awaitOpenSlotForStream waits until len(streams) < maxConcurrentStreams. // Must hold cc.mu. -func (cc *ClientConn) awaitOpenSlotForRequest(req *http.Request) error { - var waitingForConn chan struct{} - var waitingForConnErr error // guarded by cc.mu +func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error { for { cc.lastActive = time.Now() if cc.closed || !cc.canTakeNewRequestLocked() { - if waitingForConn != nil { - close(waitingForConn) - } return errClientConnUnusable } cc.lastIdle = time.Time{} - if int64(len(cc.streams))+1 <= int64(cc.maxConcurrentStreams) { - if waitingForConn != nil { - close(waitingForConn) - } + if int64(len(cc.streams)) < int64(cc.maxConcurrentStreams) { return nil } - // Unfortunately, we cannot wait on a condition variable and channel at - // the same time, so instead, we spin up a goroutine to check if the - // request is canceled while we wait for a slot to open in the connection. - if waitingForConn == nil { - waitingForConn = make(chan struct{}) - go func() { - if err := awaitRequestCancel(req, waitingForConn); err != nil { - cc.mu.Lock() - waitingForConnErr = err - cc.cond.Broadcast() - cc.mu.Unlock() - } - }() - } cc.pendingRequests++ cc.cond.Wait() cc.pendingRequests-- - if waitingForConnErr != nil { - return waitingForConnErr + select { + case <-cs.abort: + return cs.abortErr + default: } } } @@ -1276,10 +1492,6 @@ func (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, maxFrameSize cc.fr.WriteContinuation(streamID, endHeaders, chunk) } } - // TODO(bradfitz): this Flush could potentially block (as - // could the WriteHeaders call(s) above), which means they - // wouldn't respond to Request.Cancel being readable. That's - // rare, but this should probably be in a goroutine. cc.bw.Flush() return cc.werr } @@ -1295,32 +1507,59 @@ var ( errReqBodyTooLong = errors.New("http2: request body larger than specified content length") ) -func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (err error) { +// frameScratchBufferLen returns the length of a buffer to use for +// outgoing request bodies to read/write to/from. +// +// It returns max(1, min(peer's advertised max frame size, +// Request.ContentLength+1, 512KB)). +func (cs *clientStream) frameScratchBufferLen(maxFrameSize int) int { + const max = 512 << 10 + n := int64(maxFrameSize) + if n > max { + n = max + } + if cl := cs.reqBodyContentLength; cl != -1 && cl+1 < n { + // Add an extra byte past the declared content-length to + // give the caller's Request.Body io.Reader a chance to + // give us more bytes than they declared, so we can catch it + // early. + n = cl + 1 + } + if n < 1 { + return 1 + } + return int(n) // doesn't truncate; max is 512K +} + +var bufPool sync.Pool // of *[]byte + +func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { cc := cs.cc + body := cs.reqBody sentEnd := false // whether we sent the final DATA frame w/ END_STREAM - buf := cc.frameScratchBuffer() - defer cc.putFrameScratchBuffer(buf) - - defer func() { - traceWroteRequest(cs.trace, err) - // TODO: write h12Compare test showing whether - // Request.Body is closed by the Transport, - // and in multiple cases: server replies <=299 and >299 - // while still writing request body - cerr := bodyCloser.Close() - if err == nil { - err = cerr - } - }() - req := cs.req hasTrailers := req.Trailer != nil - remainLen := actualContentLength(req) + remainLen := cs.reqBodyContentLength hasContentLen := remainLen != -1 + cc.mu.Lock() + maxFrameSize := int(cc.maxFrameSize) + cc.mu.Unlock() + + // Scratch buffer for reading into & writing from. + scratchLen := cs.frameScratchBufferLen(maxFrameSize) + var buf []byte + if bp, ok := bufPool.Get().(*[]byte); ok && len(*bp) >= scratchLen { + defer bufPool.Put(bp) + buf = *bp + } else { + buf = make([]byte, scratchLen) + defer bufPool.Put(&buf) + } + var sawEOF bool for !sawEOF { - n, err := body.Read(buf[:len(buf)-1]) + n, err := body.Read(buf[:len(buf)]) if hasContentLen { remainLen -= int64(n) if remainLen == 0 && err == nil { @@ -1331,35 +1570,36 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( // to send the END_STREAM bit early, double-check that we're actually // at EOF. Subsequent reads should return (0, EOF) at this point. // If either value is different, we return an error in one of two ways below. + var scratch [1]byte var n1 int - n1, err = body.Read(buf[n:]) + n1, err = body.Read(scratch[:]) remainLen -= int64(n1) } if remainLen < 0 { err = errReqBodyTooLong - cc.writeStreamReset(cs.ID, ErrCodeCancel, err) return err } } - if err == io.EOF { - sawEOF = true - err = nil - } else if err != nil { - cc.writeStreamReset(cs.ID, ErrCodeCancel, err) - return err + if err != nil { + cc.mu.Lock() + bodyClosed := cs.reqBodyClosed + cc.mu.Unlock() + switch { + case bodyClosed: + return errStopReqBodyWrite + case err == io.EOF: + sawEOF = true + err = nil + default: + return err + } } remain := buf[:n] for len(remain) > 0 && err == nil { var allowed int32 allowed, err = cs.awaitFlowControl(len(remain)) - switch { - case err == errStopReqBodyWrite: - return err - case err == errStopReqBodyWriteAndCancel: - cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) - return err - case err != nil: + if err != nil { return err } cc.wmu.Lock() @@ -1390,24 +1630,26 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( return nil } - var trls []byte - if hasTrailers { - cc.mu.Lock() - trls, err = cc.encodeTrailers(req) - cc.mu.Unlock() - if err != nil { - cc.writeStreamReset(cs.ID, ErrCodeInternal, err) - cc.forgetStreamID(cs.ID) - return err - } - } - + // Since the RoundTrip contract permits the caller to "mutate or reuse" + // a request after the Response's Body is closed, verify that this hasn't + // happened before accessing the trailers. cc.mu.Lock() - maxFrameSize := int(cc.maxFrameSize) + trailer := req.Trailer + err = cs.abortErr cc.mu.Unlock() + if err != nil { + return err + } cc.wmu.Lock() defer cc.wmu.Unlock() + var trls []byte + if len(trailer) > 0 { + trls, err = cc.encodeTrailers(trailer) + if err != nil { + return err + } + } // Two ways to send END_STREAM: either with trailers, or // with an empty DATA frame. @@ -1428,17 +1670,24 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( // if the stream is dead. func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) { cc := cs.cc + ctx := cs.ctx cc.mu.Lock() defer cc.mu.Unlock() for { if cc.closed { return 0, errClientConnClosed } - if cs.stopReqBody != nil { - return 0, cs.stopReqBody + if cs.reqBodyClosed { + return 0, errStopReqBodyWrite } - if err := cs.checkResetOrDone(); err != nil { - return 0, err + select { + case <-cs.abort: + return 0, cs.abortErr + case <-ctx.Done(): + return 0, ctx.Err() + case <-cs.reqCancel: + return 0, errRequestCanceled + default: } if a := cs.flow.available(); a > 0 { take := a @@ -1456,9 +1705,14 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) } } -// requires cc.mu be held. +var errNilRequestURL = errors.New("http2: Request.URI is nil") + +// requires cc.wmu be held. func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { cc.hbuf.Reset() + if req.URL == nil { + return nil, errNilRequestURL + } host := req.Host if host == "" { @@ -1644,12 +1898,12 @@ func shouldSendReqContentLength(method string, contentLength int64) bool { } } -// requires cc.mu be held. -func (cc *ClientConn) encodeTrailers(req *http.Request) ([]byte, error) { +// requires cc.wmu be held. +func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { cc.hbuf.Reset() hlSize := uint64(0) - for k, vv := range req.Trailer { + for k, vv := range trailer { for _, v := range vv { hf := hpack.HeaderField{Name: k, Value: v} hlSize += uint64(hf.Size()) @@ -1659,7 +1913,7 @@ func (cc *ClientConn) encodeTrailers(req *http.Request) ([]byte, error) { return nil, errRequestHeaderListSize } - for k, vv := range req.Trailer { + for k, vv := range trailer { lowKey, ascii := asciiToLower(k) if !ascii { // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header @@ -1689,51 +1943,51 @@ type resAndError struct { } // requires cc.mu be held. -func (cc *ClientConn) newStream() *clientStream { - cs := &clientStream{ - cc: cc, - ID: cc.nextStreamID, - resc: make(chan resAndError, 1), - peerReset: make(chan struct{}), - done: make(chan struct{}), - } +func (cc *ClientConn) addStreamLocked(cs *clientStream) { cs.flow.add(int32(cc.initialWindowSize)) cs.flow.setConnFlow(&cc.flow) cs.inflow.add(transportDefaultStreamFlow) cs.inflow.setConnFlow(&cc.inflow) + cs.ID = cc.nextStreamID cc.nextStreamID += 2 cc.streams[cs.ID] = cs - return cs + if cs.ID == 0 { + panic("assigned stream ID 0") + } } func (cc *ClientConn) forgetStreamID(id uint32) { - cc.streamByID(id, true) -} - -func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream { cc.mu.Lock() - defer cc.mu.Unlock() - cs := cc.streams[id] - if andRemove && cs != nil && !cc.closed { - cc.lastActive = time.Now() - delete(cc.streams, id) - if len(cc.streams) == 0 && cc.idleTimer != nil { - cc.idleTimer.Reset(cc.idleTimeout) - cc.lastIdle = time.Now() - } - close(cs.done) - // Wake up checkResetOrDone via clientStream.awaitFlowControl and - // wake up RoundTrip if there is a pending request. - cc.cond.Broadcast() + slen := len(cc.streams) + delete(cc.streams, id) + if len(cc.streams) != slen-1 { + panic("forgetting unknown stream id") + } + cc.lastActive = time.Now() + if len(cc.streams) == 0 && cc.idleTimer != nil { + cc.idleTimer.Reset(cc.idleTimeout) + cc.lastIdle = time.Now() + } + // Wake up writeRequestBody via clientStream.awaitFlowControl and + // wake up RoundTrip if there is a pending request. + cc.cond.Broadcast() + + closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() + if closeOnIdle && cc.streamsReserved == 0 && len(cc.streams) == 0 { + if VerboseLogs { + cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2) + } + cc.closed = true + defer cc.tconn.Close() } - return cs + + cc.mu.Unlock() } // clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop. type clientConnReadLoop struct { - _ incomparable - cc *ClientConn - closeWhenIdle bool + _ incomparable + cc *ClientConn } // readLoop runs in its own goroutine and reads and dispatches frames. @@ -1793,23 +2047,49 @@ func (rl *clientConnReadLoop) cleanup() { } else if err == io.EOF { err = io.ErrUnexpectedEOF } + cc.closed = true for _, cs := range cc.streams { - cs.bufPipe.CloseWithError(err) // no-op if already closed select { - case cs.resc <- resAndError{err: err}: + case <-cs.peerClosed: + // The server closed the stream before closing the conn, + // so no need to interrupt it. default: + cs.abortStreamLocked(err) } - close(cs.done) } - cc.closed = true cc.cond.Broadcast() cc.mu.Unlock() } +// countReadFrameError calls Transport.CountError with a string +// representing err. +func (cc *ClientConn) countReadFrameError(err error) { + f := cc.t.CountError + if f == nil || err == nil { + return + } + if ce, ok := err.(ConnectionError); ok { + errCode := ErrCode(ce) + f(fmt.Sprintf("read_frame_conn_error_%s", errCode.stringToken())) + return + } + if errors.Is(err, io.EOF) { + f("read_frame_eof") + return + } + if errors.Is(err, io.ErrUnexpectedEOF) { + f("read_frame_unexpected_eof") + return + } + if errors.Is(err, ErrFrameTooLarge) { + f("read_frame_too_large") + return + } + f("read_frame_other") +} + func (rl *clientConnReadLoop) run() error { cc := rl.cc - rl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse - gotReply := false // ever saw a HEADERS reply gotSettings := false readIdleTimeout := cc.t.ReadIdleTimeout var t *time.Timer @@ -1826,9 +2106,7 @@ func (rl *clientConnReadLoop) run() error { cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) } if se, ok := err.(StreamError); ok { - if cs := cc.streamByID(se.StreamID, false); cs != nil { - cs.cc.writeStreamReset(cs.ID, se.Code, err) - cs.cc.forgetStreamID(cs.ID) + if cs := rl.streamByID(se.StreamID); cs != nil { if se.Cause == nil { se.Cause = cc.fr.errDetail } @@ -1836,6 +2114,7 @@ func (rl *clientConnReadLoop) run() error { } continue } else if err != nil { + cc.countReadFrameError(err) return err } if VerboseLogs { @@ -1848,22 +2127,16 @@ func (rl *clientConnReadLoop) run() error { } gotSettings = true } - maybeIdle := false // whether frame might transition us to idle switch f := f.(type) { case *MetaHeadersFrame: err = rl.processHeaders(f) - maybeIdle = true - gotReply = true case *DataFrame: err = rl.processData(f) - maybeIdle = true case *GoAwayFrame: err = rl.processGoAway(f) - maybeIdle = true case *RSTStreamFrame: err = rl.processResetStream(f) - maybeIdle = true case *SettingsFrame: err = rl.processSettings(f) case *PushPromiseFrame: @@ -1881,38 +2154,24 @@ func (rl *clientConnReadLoop) run() error { } return err } - if rl.closeWhenIdle && gotReply && maybeIdle { - cc.closeIfIdle() - } } } func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { - cc := rl.cc - cs := cc.streamByID(f.StreamID, false) + cs := rl.streamByID(f.StreamID) if cs == nil { // We'd get here if we canceled a request while the // server had its response still in flight. So if this // was just something we canceled, ignore it. return nil } - if f.StreamEnded() { - // Issue 20521: If the stream has ended, streamByID() causes - // clientStream.done to be closed, which causes the request's bodyWriter - // to be closed with an errStreamClosed, which may be received by - // clientConn.RoundTrip before the result of processing these headers. - // Deferring stream closure allows the header processing to occur first. - // clientConn.RoundTrip may still receive the bodyWriter error first, but - // the fix for issue 16102 prioritises any response. - // - // Issue 22413: If there is no request body, we should close the - // stream before writing to cs.resc so that the stream is closed - // immediately once RoundTrip returns. - if cs.req.Body != nil { - defer cc.forgetStreamID(f.StreamID) - } else { - cc.forgetStreamID(f.StreamID) - } + if cs.readClosed { + rl.endStreamError(cs, StreamError{ + StreamID: f.StreamID, + Code: ErrCodeProtocol, + Cause: errors.New("protocol error: headers after END_STREAM"), + }) + return nil } if !cs.firstByte { if cs.trace != nil { @@ -1936,9 +2195,11 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { return err } // Any other error type is a stream error. - cs.cc.writeStreamReset(f.StreamID, ErrCodeProtocol, err) - cc.forgetStreamID(cs.ID) - cs.resc <- resAndError{err: err} + rl.endStreamError(cs, StreamError{ + StreamID: f.StreamID, + Code: ErrCodeProtocol, + Cause: err, + }) return nil // return nil from process* funcs to keep conn alive } if res == nil { @@ -1946,7 +2207,11 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { return nil } cs.resTrailer = &res.Trailer - cs.resc <- resAndError{res: res} + cs.res = res + close(cs.respHeaderRecv) + if f.StreamEnded() { + rl.endStream(cs) + } return nil } @@ -2008,6 +2273,9 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra } if statusCode >= 100 && statusCode <= 199 { + if f.StreamEnded() { + return nil, errors.New("1xx informational response with END_STREAM flag") + } cs.num1xx++ const max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http if cs.num1xx > max1xxResponses { @@ -2020,42 +2288,49 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra } if statusCode == 100 { traceGot100Continue(cs.trace) - if cs.on100 != nil { - cs.on100() // forces any write delay timer to fire + select { + case cs.on100 <- struct{}{}: + default: } } cs.pastHeaders = false // do it all again return nil, nil } - streamEnded := f.StreamEnded() - isHead := cs.req.Method == "HEAD" - if !streamEnded || isHead { - res.ContentLength = -1 - if clens := res.Header["Content-Length"]; len(clens) == 1 { - if cl, err := strconv.ParseUint(clens[0], 10, 63); err == nil { - res.ContentLength = int64(cl) - } else { - // TODO: care? unlike http/1, it won't mess up our framing, so it's - // more safe smuggling-wise to ignore. - } - } else if len(clens) > 1 { + res.ContentLength = -1 + if clens := res.Header["Content-Length"]; len(clens) == 1 { + if cl, err := strconv.ParseUint(clens[0], 10, 63); err == nil { + res.ContentLength = int64(cl) + } else { // TODO: care? unlike http/1, it won't mess up our framing, so it's // more safe smuggling-wise to ignore. } + } else if len(clens) > 1 { + // TODO: care? unlike http/1, it won't mess up our framing, so it's + // more safe smuggling-wise to ignore. + } else if f.StreamEnded() && !cs.isHead { + res.ContentLength = 0 } - if streamEnded || isHead { + if cs.isHead { res.Body = noBody return res, nil } - cs.bufPipe = pipe{b: &dataBuffer{expected: res.ContentLength}} + if f.StreamEnded() { + if res.ContentLength > 0 { + res.Body = missingBody{} + } else { + res.Body = noBody + } + return res, nil + } + + cs.bufPipe.setBuffer(&dataBuffer{expected: res.ContentLength}) cs.bytesRemain = res.ContentLength res.Body = transportResponseBody{cs} - go cs.awaitRequestCancel(cs.req) - if cs.requestedGzip && res.Header.Get("Content-Encoding") == "gzip" { + if cs.requestedGzip && asciiEqualFold(res.Header.Get("Content-Encoding"), "gzip") { res.Header.Del("Content-Encoding") res.Header.Del("Content-Length") res.ContentLength = -1 @@ -2094,8 +2369,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr } // transportResponseBody is the concrete type of Transport.RoundTrip's -// Response.Body. It is an io.ReadCloser. On Read, it reads from cs.body. -// On Close it sends RST_STREAM if EOF wasn't already seen. +// Response.Body. It is an io.ReadCloser. type transportResponseBody struct { cs *clientStream } @@ -2113,7 +2387,7 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) { n = int(cs.bytesRemain) if err == nil { err = errors.New("net/http: server replied with more than declared Content-Length; truncated") - cc.writeStreamReset(cs.ID, ErrCodeProtocol, err) + cs.abortStream(err) } cs.readErr = err return int(cs.bytesRemain), err @@ -2131,8 +2405,6 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) { } cc.mu.Lock() - defer cc.mu.Unlock() - var connAdd, streamAdd int32 // Check the conn-level first, before the stream-level. if v := cc.inflow.available(); v < transportDefaultConnFlow/2 { @@ -2149,6 +2421,8 @@ func (b transportResponseBody) Read(p []byte) (n int, err error) { cs.inflow.add(streamAdd) } } + cc.mu.Unlock() + if connAdd != 0 || streamAdd != 0 { cc.wmu.Lock() defer cc.wmu.Unlock() @@ -2169,34 +2443,45 @@ func (b transportResponseBody) Close() error { cs := b.cs cc := cs.cc - serverSentStreamEnd := cs.bufPipe.Err() == io.EOF unread := cs.bufPipe.Len() - - if unread > 0 || !serverSentStreamEnd { + if unread > 0 { cc.mu.Lock() - cc.wmu.Lock() - if !serverSentStreamEnd { - cc.fr.WriteRSTStream(cs.ID, ErrCodeCancel) - cs.didReset = true - } // Return connection-level flow control. if unread > 0 { cc.inflow.add(int32(unread)) + } + cc.mu.Unlock() + + // TODO(dneil): Acquiring this mutex can block indefinitely. + // Move flow control return to a goroutine? + cc.wmu.Lock() + // Return connection-level flow control. + if unread > 0 { cc.fr.WriteWindowUpdate(0, uint32(unread)) } cc.bw.Flush() cc.wmu.Unlock() - cc.mu.Unlock() } cs.bufPipe.BreakWithError(errClosedResponseBody) - cc.forgetStreamID(cs.ID) + cs.abortStream(errClosedResponseBody) + + select { + case <-cs.donec: + case <-cs.ctx.Done(): + // See golang/go#49366: The net/http package can cancel the + // request context after the response body is fully read. + // Don't treat this as an error. + return nil + case <-cs.reqCancel: + return errRequestCanceled + } return nil } func (rl *clientConnReadLoop) processData(f *DataFrame) error { cc := rl.cc - cs := cc.streamByID(f.StreamID, f.StreamEnded()) + cs := rl.streamByID(f.StreamID) data := f.Data() if cs == nil { cc.mu.Lock() @@ -2225,6 +2510,14 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { } return nil } + if cs.readClosed { + cc.logf("protocol error: received DATA after END_STREAM") + rl.endStreamError(cs, StreamError{ + StreamID: f.StreamID, + Code: ErrCodeProtocol, + }) + return nil + } if !cs.firstByte { cc.logf("protocol error: received DATA before a HEADERS frame") rl.endStreamError(cs, StreamError{ @@ -2234,7 +2527,7 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { return nil } if f.Length > 0 { - if cs.req.Method == "HEAD" && len(data) > 0 { + if cs.isHead && len(data) > 0 { cc.logf("protocol error: received DATA on a HEAD request") rl.endStreamError(cs, StreamError{ StreamID: f.StreamID, @@ -2256,30 +2549,39 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { if pad := int(f.Length) - len(data); pad > 0 { refund += pad } - // Return len(data) now if the stream is already closed, - // since data will never be read. - didReset := cs.didReset - if didReset { - refund += len(data) + + didReset := false + var err error + if len(data) > 0 { + if _, err = cs.bufPipe.Write(data); err != nil { + // Return len(data) now if the stream is already closed, + // since data will never be read. + didReset = true + refund += len(data) + } } + if refund > 0 { cc.inflow.add(int32(refund)) + if !didReset { + cs.inflow.add(int32(refund)) + } + } + cc.mu.Unlock() + + if refund > 0 { cc.wmu.Lock() cc.fr.WriteWindowUpdate(0, uint32(refund)) if !didReset { - cs.inflow.add(int32(refund)) cc.fr.WriteWindowUpdate(cs.ID, uint32(refund)) } cc.bw.Flush() cc.wmu.Unlock() } - cc.mu.Unlock() - if len(data) > 0 && !didReset { - if _, err := cs.bufPipe.Write(data); err != nil { - rl.endStreamError(cs, err) - return err - } + if err != nil { + rl.endStreamError(cs, err) + return nil } } @@ -2292,24 +2594,32 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { func (rl *clientConnReadLoop) endStream(cs *clientStream) { // TODO: check that any declared content-length matches, like // server.go's (*stream).endStream method. - rl.endStreamError(cs, nil) + if !cs.readClosed { + cs.readClosed = true + // Close cs.bufPipe and cs.peerClosed with cc.mu held to avoid a + // race condition: The caller can read io.EOF from Response.Body + // and close the body before we close cs.peerClosed, causing + // cleanupWriteRequest to send a RST_STREAM. + rl.cc.mu.Lock() + defer rl.cc.mu.Unlock() + cs.bufPipe.closeWithErrorAndCode(io.EOF, cs.copyTrailers) + close(cs.peerClosed) + } } func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { - var code func() - if err == nil { - err = io.EOF - code = cs.copyTrailers - } - if isConnectionCloseRequest(cs.req) { - rl.closeWhenIdle = true - } - cs.bufPipe.closeWithErrorAndCode(err, code) + cs.readAborted = true + cs.abortStream(err) +} - select { - case cs.resc <- resAndError{err: err}: - default: +func (rl *clientConnReadLoop) streamByID(id uint32) *clientStream { + rl.cc.mu.Lock() + defer rl.cc.mu.Unlock() + cs := rl.cc.streams[id] + if cs != nil && !cs.readAborted { + return cs } + return nil } func (cs *clientStream) copyTrailers() { @@ -2328,12 +2638,33 @@ func (rl *clientConnReadLoop) processGoAway(f *GoAwayFrame) error { if f.ErrCode != 0 { // TODO: deal with GOAWAY more. particularly the error code cc.vlogf("transport got GOAWAY with error code = %v", f.ErrCode) + if fn := cc.t.CountError; fn != nil { + fn("recv_goaway_" + f.ErrCode.stringToken()) + } + } cc.setGoAway(f) return nil } func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { + cc := rl.cc + // Locking both mu and wmu here allows frame encoding to read settings with only wmu held. + // Acquiring wmu when f.IsAck() is unnecessary, but convenient and mostly harmless. + cc.wmu.Lock() + defer cc.wmu.Unlock() + + if err := rl.processSettingsNoWrite(f); err != nil { + return err + } + if !f.IsAck() { + cc.fr.WriteSettingsAck() + cc.bw.Flush() + } + return nil +} + +func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { cc := rl.cc cc.mu.Lock() defer cc.mu.Unlock() @@ -2346,12 +2677,14 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { return ConnectionError(ErrCodeProtocol) } + var seenMaxConcurrentStreams bool err := f.ForeachSetting(func(s Setting) error { switch s.ID { case SettingMaxFrameSize: cc.maxFrameSize = s.Val case SettingMaxConcurrentStreams: cc.maxConcurrentStreams = s.Val + seenMaxConcurrentStreams = true case SettingMaxHeaderListSize: cc.peerMaxHeaderListSize = uint64(s.Val) case SettingInitialWindowSize: @@ -2383,17 +2716,23 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { return err } - cc.wmu.Lock() - defer cc.wmu.Unlock() + if !cc.seenSettings { + if !seenMaxConcurrentStreams { + // This was the servers initial SETTINGS frame and it + // didn't contain a MAX_CONCURRENT_STREAMS field so + // increase the number of concurrent streams this + // connection can establish to our default. + cc.maxConcurrentStreams = defaultMaxConcurrentStreams + } + cc.seenSettings = true + } - cc.fr.WriteSettingsAck() - cc.bw.Flush() - return cc.werr + return nil } func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { cc := rl.cc - cs := cc.streamByID(f.StreamID, false) + cs := rl.streamByID(f.StreamID) if f.StreamID != 0 && cs == nil { return nil } @@ -2413,24 +2752,22 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { } func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { - cs := rl.cc.streamByID(f.StreamID, true) + cs := rl.streamByID(f.StreamID) if cs == nil { - // TODO: return error if server tries to RST_STEAM an idle stream + // TODO: return error if server tries to RST_STREAM an idle stream return nil } - select { - case <-cs.peerReset: - // Already reset. - // This is the only goroutine - // which closes this, so there - // isn't a race. - default: - err := streamError(cs.ID, f.ErrCode) - cs.resetErr = err - close(cs.peerReset) - cs.bufPipe.CloseWithError(err) - cs.cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl + serr := streamError(cs.ID, f.ErrCode) + serr.Cause = errFromPeer + if f.ErrCode == ErrCodeProtocol { + rl.cc.SetDoNotReuse() } + if fn := cs.cc.t.CountError; fn != nil { + fn("recv_rststream_" + f.ErrCode.stringToken()) + } + cs.abortStream(serr) + + cs.bufPipe.CloseWithError(serr) return nil } @@ -2452,19 +2789,24 @@ func (cc *ClientConn) Ping(ctx context.Context) error { } cc.mu.Unlock() } - cc.wmu.Lock() - if err := cc.fr.WritePing(false, p); err != nil { - cc.wmu.Unlock() - return err - } - if err := cc.bw.Flush(); err != nil { - cc.wmu.Unlock() - return err - } - cc.wmu.Unlock() + errc := make(chan error, 1) + go func() { + cc.wmu.Lock() + defer cc.wmu.Unlock() + if err := cc.fr.WritePing(false, p); err != nil { + errc <- err + return + } + if err := cc.bw.Flush(); err != nil { + errc <- err + return + } + }() select { case <-c: return nil + case err := <-errc: + return err case <-ctx.Done(): return ctx.Err() case <-cc.readerDone: @@ -2541,6 +2883,11 @@ func (t *Transport) logf(format string, args ...interface{}) { var noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil)) +type missingBody struct{} + +func (missingBody) Close() error { return nil } +func (missingBody) Read([]byte) (int, error) { return 0, io.ErrUnexpectedEOF } + func strSliceContains(ss []string, s string) bool { for _, v := range ss { if v == s { @@ -2586,87 +2933,6 @@ type errorReader struct{ err error } func (r errorReader) Read(p []byte) (int, error) { return 0, r.err } -// bodyWriterState encapsulates various state around the Transport's writing -// of the request body, particularly regarding doing delayed writes of the body -// when the request contains "Expect: 100-continue". -type bodyWriterState struct { - cs *clientStream - timer *time.Timer // if non-nil, we're doing a delayed write - fnonce *sync.Once // to call fn with - fn func() // the code to run in the goroutine, writing the body - resc chan error // result of fn's execution - delay time.Duration // how long we should delay a delayed write for -} - -func (t *Transport) getBodyWriterState(cs *clientStream, body io.Reader) (s bodyWriterState) { - s.cs = cs - if body == nil { - return - } - resc := make(chan error, 1) - s.resc = resc - s.fn = func() { - cs.cc.mu.Lock() - cs.startedWrite = true - cs.cc.mu.Unlock() - resc <- cs.writeRequestBody(body, cs.req.Body) - } - s.delay = t.expectContinueTimeout() - if s.delay == 0 || - !httpguts.HeaderValuesContainsToken( - cs.req.Header["Expect"], - "100-continue") { - return - } - s.fnonce = new(sync.Once) - - // Arm the timer with a very large duration, which we'll - // intentionally lower later. It has to be large now because - // we need a handle to it before writing the headers, but the - // s.delay value is defined to not start until after the - // request headers were written. - const hugeDuration = 365 * 24 * time.Hour - s.timer = time.AfterFunc(hugeDuration, func() { - s.fnonce.Do(s.fn) - }) - return -} - -func (s bodyWriterState) cancel() { - if s.timer != nil { - if s.timer.Stop() { - s.resc <- nil - } - } -} - -func (s bodyWriterState) on100() { - if s.timer == nil { - // If we didn't do a delayed write, ignore the server's - // bogus 100 continue response. - return - } - s.timer.Stop() - go func() { s.fnonce.Do(s.fn) }() -} - -// scheduleBodyWrite starts writing the body, either immediately (in -// the common case) or after the delay timeout. It should not be -// called until after the headers have been written. -func (s bodyWriterState) scheduleBodyWrite() { - if s.timer == nil { - // We're not doing a delayed write (see - // getBodyWriterState), so just start the writing - // goroutine immediately. - go s.fn() - return - } - traceWait100Continue(s.cs.trace) - if s.timer.Stop() { - s.timer.Reset(s.delay) - } -} - // isConnectionCloseRequest reports whether req should use its own // connection for a single request and then close the connection. func isConnectionCloseRequest(req *http.Request) bool { diff --git a/constraint/vendor/golang.org/x/net/idna/go118.go b/constraint/vendor/golang.org/x/net/idna/go118.go new file mode 100644 index 000000000..c5c4338db --- /dev/null +++ b/constraint/vendor/golang.org/x/net/idna/go118.go @@ -0,0 +1,14 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.18 +// +build go1.18 + +package idna + +// Transitional processing is disabled by default in Go 1.18. +// https://golang.org/issue/47510 +const transitionalLookup = false diff --git a/constraint/vendor/golang.org/x/net/idna/idna10.0.0.go b/constraint/vendor/golang.org/x/net/idna/idna10.0.0.go index 5208ba6cb..64ccf85fe 100644 --- a/constraint/vendor/golang.org/x/net/idna/idna10.0.0.go +++ b/constraint/vendor/golang.org/x/net/idna/idna10.0.0.go @@ -59,10 +59,10 @@ type Option func(*options) // Transitional sets a Profile to use the Transitional mapping as defined in UTS // #46. This will cause, for example, "ß" to be mapped to "ss". Using the // transitional mapping provides a compromise between IDNA2003 and IDNA2008 -// compatibility. It is used by most browsers when resolving domain names. This +// compatibility. It is used by some browsers when resolving domain names. This // option is only meaningful if combined with MapForLookup. func Transitional(transitional bool) Option { - return func(o *options) { o.transitional = true } + return func(o *options) { o.transitional = transitional } } // VerifyDNSLength sets whether a Profile should fail if any of the IDN parts @@ -284,7 +284,7 @@ var ( punycode = &Profile{} lookup = &Profile{options{ - transitional: true, + transitional: transitionalLookup, useSTD3Rules: true, checkHyphens: true, checkJoiners: true, diff --git a/constraint/vendor/golang.org/x/net/idna/idna9.0.0.go b/constraint/vendor/golang.org/x/net/idna/idna9.0.0.go index 55f718f12..aae6aac87 100644 --- a/constraint/vendor/golang.org/x/net/idna/idna9.0.0.go +++ b/constraint/vendor/golang.org/x/net/idna/idna9.0.0.go @@ -58,10 +58,10 @@ type Option func(*options) // Transitional sets a Profile to use the Transitional mapping as defined in UTS // #46. This will cause, for example, "ß" to be mapped to "ss". Using the // transitional mapping provides a compromise between IDNA2003 and IDNA2008 -// compatibility. It is used by most browsers when resolving domain names. This +// compatibility. It is used by some browsers when resolving domain names. This // option is only meaningful if combined with MapForLookup. func Transitional(transitional bool) Option { - return func(o *options) { o.transitional = true } + return func(o *options) { o.transitional = transitional } } // VerifyDNSLength sets whether a Profile should fail if any of the IDN parts diff --git a/constraint/vendor/golang.org/x/net/idna/pre_go118.go b/constraint/vendor/golang.org/x/net/idna/pre_go118.go new file mode 100644 index 000000000..3aaccab1c --- /dev/null +++ b/constraint/vendor/golang.org/x/net/idna/pre_go118.go @@ -0,0 +1,12 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.18 +// +build !go1.18 + +package idna + +const transitionalLookup = true diff --git a/constraint/vendor/golang.org/x/net/idna/punycode.go b/constraint/vendor/golang.org/x/net/idna/punycode.go index 02c7d59af..e8e3ac11a 100644 --- a/constraint/vendor/golang.org/x/net/idna/punycode.go +++ b/constraint/vendor/golang.org/x/net/idna/punycode.go @@ -49,6 +49,7 @@ func decode(encoded string) (string, error) { } } i, n, bias := int32(0), initialN, initialBias + overflow := false for pos < len(encoded) { oldI, w := i, int32(1) for k := base; ; k += base { @@ -60,29 +61,32 @@ func decode(encoded string) (string, error) { return "", punyError(encoded) } pos++ - i += digit * w - if i < 0 { + i, overflow = madd(i, digit, w) + if overflow { return "", punyError(encoded) } t := k - bias - if t < tmin { + if k <= bias { t = tmin - } else if t > tmax { + } else if k >= bias+tmax { t = tmax } if digit < t { break } - w *= base - t - if w >= math.MaxInt32/base { + w, overflow = madd(0, w, base-t) + if overflow { return "", punyError(encoded) } } + if len(output) >= 1024 { + return "", punyError(encoded) + } x := int32(len(output) + 1) bias = adapt(i-oldI, x, oldI == 0) n += i / x i %= x - if n > utf8.MaxRune || len(output) >= 1024 { + if n < 0 || n > utf8.MaxRune { return "", punyError(encoded) } output = append(output, 0) @@ -115,6 +119,7 @@ func encode(prefix, s string) (string, error) { if b > 0 { output = append(output, '-') } + overflow := false for remaining != 0 { m := int32(0x7fffffff) for _, r := range s { @@ -122,8 +127,8 @@ func encode(prefix, s string) (string, error) { m = r } } - delta += (m - n) * (h + 1) - if delta < 0 { + delta, overflow = madd(delta, m-n, h+1) + if overflow { return "", punyError(s) } n = m @@ -141,9 +146,9 @@ func encode(prefix, s string) (string, error) { q := delta for k := base; ; k += base { t := k - bias - if t < tmin { + if k <= bias { t = tmin - } else if t > tmax { + } else if k >= bias+tmax { t = tmax } if q < t { @@ -164,6 +169,15 @@ func encode(prefix, s string) (string, error) { return string(output), nil } +// madd computes a + (b * c), detecting overflow. +func madd(a, b, c int32) (next int32, overflow bool) { + p := int64(b) * int64(c) + if p > math.MaxInt32-int64(a) { + return 0, true + } + return a + int32(p), false +} + func decodeDigit(x byte) (digit int32, ok bool) { switch { case '0' <= x && x <= '9': diff --git a/constraint/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go b/constraint/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go index 87ae9d2a3..c9b69937a 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go +++ b/constraint/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.5 // +build go1.5 package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/pwd_plan9.go b/constraint/vendor/golang.org/x/sys/plan9/pwd_plan9.go index c07c798bc..98bf56b73 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/pwd_plan9.go +++ b/constraint/vendor/golang.org/x/sys/plan9/pwd_plan9.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.5 // +build !go1.5 package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/race.go b/constraint/vendor/golang.org/x/sys/plan9/race.go index 42edd93ef..62377d2ff 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/race.go +++ b/constraint/vendor/golang.org/x/sys/plan9/race.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build plan9 && race // +build plan9,race package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/race0.go b/constraint/vendor/golang.org/x/sys/plan9/race0.go index c89cf8fc0..f8da30876 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/race0.go +++ b/constraint/vendor/golang.org/x/sys/plan9/race0.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build plan9 && !race // +build plan9,!race package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/str.go b/constraint/vendor/golang.org/x/sys/plan9/str.go index 4f7f9ad7c..55fa8d025 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/str.go +++ b/constraint/vendor/golang.org/x/sys/plan9/str.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build plan9 // +build plan9 package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/syscall.go b/constraint/vendor/golang.org/x/sys/plan9/syscall.go index e7363a2f5..602473cba 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/syscall.go +++ b/constraint/vendor/golang.org/x/sys/plan9/syscall.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build plan9 // +build plan9 // Package plan9 contains an interface to the low-level operating system diff --git a/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go b/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go index 6819bc209..3f40b9bd7 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go +++ b/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go @@ -1,6 +1,7 @@ // go run mksyscall.go -l32 -plan9 -tags plan9,386 syscall_plan9.go // Code generated by the command above; see README.md. DO NOT EDIT. +//go:build plan9 && 386 // +build plan9,386 package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go b/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go index 418abbbfc..0e6a96aa4 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go +++ b/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go @@ -1,6 +1,7 @@ // go run mksyscall.go -l32 -plan9 -tags plan9,amd64 syscall_plan9.go // Code generated by the command above; see README.md. DO NOT EDIT. +//go:build plan9 && amd64 // +build plan9,amd64 package plan9 diff --git a/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go b/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go index 3e8a1a58c..244c501b7 100644 --- a/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go +++ b/constraint/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go @@ -1,6 +1,7 @@ // go run mksyscall.go -l32 -plan9 -tags plan9,arm syscall_plan9.go // Code generated by the command above; see README.md. DO NOT EDIT. +//go:build plan9 && arm // +build plan9,arm package plan9 diff --git a/constraint/vendor/golang.org/x/sys/unix/README.md b/constraint/vendor/golang.org/x/sys/unix/README.md index 579d2d735..7d3c060e1 100644 --- a/constraint/vendor/golang.org/x/sys/unix/README.md +++ b/constraint/vendor/golang.org/x/sys/unix/README.md @@ -76,7 +76,7 @@ arguments can be passed to the kernel. The third is for low-level use by the ForkExec wrapper. Unlike the first two, it does not call into the scheduler to let it know that a system call is running. -When porting Go to an new architecture/OS, this file must be implemented for +When porting Go to a new architecture/OS, this file must be implemented for each GOOS/GOARCH pair. ### mksysnum @@ -107,7 +107,7 @@ prototype can be exported (capitalized) or not. Adding a new syscall often just requires adding a new `//sys` function prototype with the desired arguments and a capitalized name so it is exported. However, if you want the interface to the syscall to be different, often one will make an -unexported `//sys` prototype, an then write a custom wrapper in +unexported `//sys` prototype, and then write a custom wrapper in `syscall_${GOOS}.go`. ### types files @@ -137,7 +137,7 @@ some `#if/#elif` macros in your include statements. This script is used to generate the system's various constants. This doesn't just include the error numbers and error strings, but also the signal numbers -an a wide variety of miscellaneous constants. The constants come from the list +and a wide variety of miscellaneous constants. The constants come from the list of include files in the `includes_${uname}` variable. A regex then picks out the desired `#define` statements, and generates the corresponding Go constants. The error numbers and strings are generated from `#include `, and the @@ -149,7 +149,7 @@ To add a constant, add the header that includes it to the appropriate variable. Then, edit the regex (if necessary) to match the desired constant. Avoid making the regex too broad to avoid matching unintended constants. -### mkmerge.go +### internal/mkmerge This program is used to extract duplicate const, func, and type declarations from the generated architecture-specific files listed below, and merge these diff --git a/constraint/vendor/golang.org/x/sys/unix/ifreq_linux.go b/constraint/vendor/golang.org/x/sys/unix/ifreq_linux.go new file mode 100644 index 000000000..934af313c --- /dev/null +++ b/constraint/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -0,0 +1,149 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux +// +build linux + +package unix + +import ( + "bytes" + "unsafe" +) + +// Helpers for dealing with ifreq since it contains a union and thus requires a +// lot of unsafe.Pointer casts to use properly. + +// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq +// contains an interface name and a union of arbitrary data which can be +// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq +// function. +// +// Use the Name method to access the stored interface name. The union data +// fields can be get and set using the following methods: +// - Uint16/SetUint16: flags +// - Uint32/SetUint32: ifindex, metric, mtu +type Ifreq struct{ raw ifreq } + +// NewIfreq creates an Ifreq with the input network interface name after +// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required) +// bytes. +func NewIfreq(name string) (*Ifreq, error) { + // Leave room for terminating NULL byte. + if len(name) >= IFNAMSIZ { + return nil, EINVAL + } + + var ifr ifreq + copy(ifr.Ifrn[:], name) + + return &Ifreq{raw: ifr}, nil +} + +// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc. + +// Name returns the interface name associated with the Ifreq. +func (ifr *Ifreq) Name() string { + // BytePtrToString requires a NULL terminator or the program may crash. If + // one is not present, just return the empty string. + if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) { + return "" + } + + return BytePtrToString(&ifr.raw.Ifrn[0]) +} + +// According to netdevice(7), only AF_INET addresses are returned for numerous +// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port +// field and other data is always empty. + +// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C +// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not +// AF_INET, an error is returned. +func (ifr *Ifreq) Inet4Addr() ([]byte, error) { + raw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0])) + if raw.Family != AF_INET { + // Cannot safely interpret raw.Addr bytes as an IPv4 address. + return nil, EINVAL + } + + return raw.Addr[:], nil +} + +// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an +// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length +// or an error will be returned. +func (ifr *Ifreq) SetInet4Addr(v []byte) error { + if len(v) != 4 { + return EINVAL + } + + var addr [4]byte + copy(addr[:], v) + + ifr.clear() + *(*RawSockaddrInet4)( + unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]), + ) = RawSockaddrInet4{ + // Always set IP family as ioctls would require it anyway. + Family: AF_INET, + Addr: addr, + } + + return nil +} + +// Uint16 returns the Ifreq union data as a C short/Go uint16 value. +func (ifr *Ifreq) Uint16() uint16 { + return *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) +} + +// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data. +func (ifr *Ifreq) SetUint16(v uint16) { + ifr.clear() + *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v +} + +// Uint32 returns the Ifreq union data as a C int/Go uint32 value. +func (ifr *Ifreq) Uint32() uint32 { + return *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) +} + +// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data. +func (ifr *Ifreq) SetUint32(v uint32) { + ifr.clear() + *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v +} + +// clear zeroes the ifreq's union field to prevent trailing garbage data from +// being sent to the kernel if an ifreq is reused. +func (ifr *Ifreq) clear() { + for i := range ifr.raw.Ifru { + ifr.raw.Ifru[i] = 0 + } +} + +// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as +// IoctlGetEthtoolDrvinfo which use these APIs under the hood. + +// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData, +// use the Ifreq.withData method. +type ifreqData struct { + name [IFNAMSIZ]byte + // A type separate from ifreq is required in order to comply with the + // unsafe.Pointer rules since the "pointer-ness" of data would not be + // preserved if it were cast into the byte array of a raw ifreq. + data unsafe.Pointer + // Pad to the same size as ifreq. + _ [len(ifreq{}.Ifru) - SizeofPtr]byte +} + +// withData produces an ifreqData with the pointer p set for ioctls which require +// arbitrary pointer data. +func (ifr Ifreq) withData(p unsafe.Pointer) ifreqData { + return ifreqData{ + name: ifr.raw.Ifrn, + data: p, + } +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ioctl_linux.go b/constraint/vendor/golang.org/x/sys/unix/ioctl_linux.go index 48773f730..1dadead21 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/constraint/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -5,7 +5,6 @@ package unix import ( - "runtime" "unsafe" ) @@ -22,56 +21,42 @@ func IoctlRetInt(fd int, req uint) (int, error) { func IoctlGetUint32(fd int, req uint) (uint32, error) { var value uint32 - err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return value, err } func IoctlGetRTCTime(fd int) (*RTCTime, error) { var value RTCTime - err := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value))) + err := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value)) return &value, err } func IoctlSetRTCTime(fd int, value *RTCTime) error { - err := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err + return ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value)) } func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) { var value RTCWkAlrm - err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value))) + err := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value)) return &value, err } func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error { - err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err -} - -type ifreqEthtool struct { - name [IFNAMSIZ]byte - data unsafe.Pointer + return ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value)) } // IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network // device specified by ifname. func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { - // Leave room for terminating NULL byte. - if len(ifname) >= IFNAMSIZ { - return nil, EINVAL + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err } - value := EthtoolDrvinfo{ - Cmd: ETHTOOL_GDRVINFO, - } - ifreq := ifreqEthtool{ - data: unsafe.Pointer(&value), - } - copy(ifreq.name[:], ifname) - err := ioctl(fd, SIOCETHTOOL, uintptr(unsafe.Pointer(&ifreq))) - runtime.KeepAlive(ifreq) + value := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd) return &value, err } @@ -80,7 +65,7 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { // https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) { var value WatchdogInfo - err := ioctl(fd, WDIOC_GETSUPPORT, uintptr(unsafe.Pointer(&value))) + err := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value)) return &value, err } @@ -88,6 +73,7 @@ func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) { // more information, see: // https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. func IoctlWatchdogKeepalive(fd int) error { + // arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr. return ioctl(fd, WDIOC_KEEPALIVE, 0) } @@ -95,9 +81,7 @@ func IoctlWatchdogKeepalive(fd int) error { // range of data conveyed in value to the file associated with the file // descriptor destFd. See the ioctl_ficlonerange(2) man page for details. func IoctlFileCloneRange(destFd int, value *FileCloneRange) error { - err := ioctl(destFd, FICLONERANGE, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err + return ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value)) } // IoctlFileClone performs an FICLONE ioctl operation to clone the entire file @@ -148,7 +132,7 @@ func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error { rawinfo.Reserved = value.Info[i].Reserved } - err := ioctl(srcFd, FIDEDUPERANGE, uintptr(unsafe.Pointer(&buf[0]))) + err := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0])) // Output for i := range value.Info { @@ -166,31 +150,47 @@ func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error { } func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error { - err := ioctl(fd, HIDIOCGRDESC, uintptr(unsafe.Pointer(value))) - runtime.KeepAlive(value) - return err + return ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value)) } func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) { var value HIDRawDevInfo - err := ioctl(fd, HIDIOCGRAWINFO, uintptr(unsafe.Pointer(&value))) + err := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value)) return &value, err } func IoctlHIDGetRawName(fd int) (string, error) { var value [_HIDIOCGRAWNAME_LEN]byte - err := ioctl(fd, _HIDIOCGRAWNAME, uintptr(unsafe.Pointer(&value[0]))) + err := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0])) return ByteSliceToString(value[:]), err } func IoctlHIDGetRawPhys(fd int) (string, error) { var value [_HIDIOCGRAWPHYS_LEN]byte - err := ioctl(fd, _HIDIOCGRAWPHYS, uintptr(unsafe.Pointer(&value[0]))) + err := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0])) return ByteSliceToString(value[:]), err } func IoctlHIDGetRawUniq(fd int) (string, error) { var value [_HIDIOCGRAWUNIQ_LEN]byte - err := ioctl(fd, _HIDIOCGRAWUNIQ, uintptr(unsafe.Pointer(&value[0]))) + err := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0])) return ByteSliceToString(value[:]), err } + +// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or +// output. See the netdevice(7) man page for details. +func IoctlIfreq(fd int, req uint, value *Ifreq) error { + // It is possible we will add more fields to *Ifreq itself later to prevent + // misuse, so pass the raw *ifreq directly. + return ioctlPtr(fd, req, unsafe.Pointer(&value.raw)) +} + +// TODO(mdlayher): export if and when IfreqData is exported. + +// ioctlIfreqData performs an ioctl using an ifreqData structure for input +// and/or output. See the netdevice(7) man page for details. +func ioctlIfreqData(fd int, req uint, value *ifreqData) error { + // The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are + // identical so pass *IfreqData directly. + return ioctlPtr(fd, req, unsafe.Pointer(value)) +} diff --git a/constraint/vendor/golang.org/x/sys/unix/mkall.sh b/constraint/vendor/golang.org/x/sys/unix/mkall.sh index 396aadf86..ee7362348 100644 --- a/constraint/vendor/golang.org/x/sys/unix/mkall.sh +++ b/constraint/vendor/golang.org/x/sys/unix/mkall.sh @@ -50,7 +50,7 @@ if [[ "$GOOS" = "linux" ]]; then # Use the Docker-based build system # Files generated through docker (use $cmd so you can Ctl-C the build or run) $cmd docker build --tag generate:$GOOS $GOOS - $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")" && /bin/pwd):/build generate:$GOOS + $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS exit fi diff --git a/constraint/vendor/golang.org/x/sys/unix/mkerrors.sh b/constraint/vendor/golang.org/x/sys/unix/mkerrors.sh index c4e3e1eee..4945739ea 100644 --- a/constraint/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/constraint/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -54,7 +54,7 @@ includes_AIX=' includes_Darwin=' #define _DARWIN_C_SOURCE -#define KERNEL +#define KERNEL 1 #define _DARWIN_USE_64_BIT_INODE #define __APPLE_USE_RFC_3542 #include @@ -75,6 +75,7 @@ includes_Darwin=' #include #include #include +#include #include #include #include @@ -82,6 +83,9 @@ includes_Darwin=' #include #include #include + +// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk. +#define TIOCREMOTE 0x80047469 ' includes_DragonFly=' @@ -217,8 +221,6 @@ struct ltchars { #include #include #include -#include -#include #include #include #include @@ -231,14 +233,17 @@ struct ltchars { #include #include #include +#include #include #include #include #include #include +#include #include #include #include +#include #include #include #include @@ -466,7 +471,6 @@ ccflags="$@" $2 !~ /^EQUIV_/ && $2 !~ /^EXPR_/ && $2 !~ /^EVIOC/ && - $2 !~ /^EV_/ && $2 ~ /^E[A-Z0-9_]+$/ || $2 ~ /^B[0-9_]+$/ || $2 ~ /^(OLD|NEW)DEV$/ || @@ -498,10 +502,14 @@ ccflags="$@" $2 ~ /^O?XTABS$/ || $2 ~ /^TC[IO](ON|OFF)$/ || $2 ~ /^IN_/ || + $2 ~ /^LANDLOCK_/ || $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ || + $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || + $2 ~ /^NFC_.*_(MAX)?SIZE$/ || + $2 ~ /^RAW_PAYLOAD_/ || $2 ~ /^TP_STATUS_/ || $2 ~ /^FALLOC_/ || $2 ~ /^ICMPV?6?_(FILTER|SEC)/ || @@ -513,7 +521,7 @@ ccflags="$@" $2 ~ /^HW_MACHINE$/ || $2 ~ /^SYSCTL_VERS/ || $2 !~ "MNT_BITS" && - $2 ~ /^(MS|MNT|UMOUNT)_/ || + $2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ || $2 ~ /^NS_GET_/ || $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || $2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ || @@ -559,6 +567,7 @@ ccflags="$@" $2 ~ /^KEYCTL_/ || $2 ~ /^PERF_/ || $2 ~ /^SECCOMP_MODE_/ || + $2 ~ /^SEEK_/ || $2 ~ /^SPLICE_/ || $2 ~ /^SYNC_FILE_RANGE_/ || $2 !~ /^AUDIT_RECORD_MAGIC/ && diff --git a/constraint/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/constraint/vendor/golang.org/x/sys/unix/sockcmsg_linux.go index 8bf457059..5f63147e0 100644 --- a/constraint/vendor/golang.org/x/sys/unix/sockcmsg_linux.go +++ b/constraint/vendor/golang.org/x/sys/unix/sockcmsg_linux.go @@ -34,3 +34,52 @@ func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) return &ucred, nil } + +// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO. +func PktInfo4(info *Inet4Pktinfo) []byte { + b := make([]byte, CmsgSpace(SizeofInet4Pktinfo)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_IP + h.Type = IP_PKTINFO + h.SetLen(CmsgLen(SizeofInet4Pktinfo)) + *(*Inet4Pktinfo)(h.data(0)) = *info + return b +} + +// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO. +func PktInfo6(info *Inet6Pktinfo) []byte { + b := make([]byte, CmsgSpace(SizeofInet6Pktinfo)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_IPV6 + h.Type = IPV6_PKTINFO + h.SetLen(CmsgLen(SizeofInet6Pktinfo)) + *(*Inet6Pktinfo)(h.data(0)) = *info + return b +} + +// ParseOrigDstAddr decodes a socket control message containing the original +// destination address. To receive such a message the IP_RECVORIGDSTADDR or +// IPV6_RECVORIGDSTADDR option must be enabled on the socket. +func ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) { + switch { + case m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR: + pp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0])) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.Addr = pp.Addr + return sa, nil + + case m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR: + pp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0])) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + sa.Addr = pp.Addr + return sa, nil + + default: + return nil, EINVAL + } +} diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_aix.go b/constraint/vendor/golang.org/x/sys/unix/syscall_aix.go index d8efb715f..6192750ce 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -70,9 +70,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil } @@ -85,9 +83,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil } @@ -261,9 +257,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil case AF_INET6: @@ -272,9 +266,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } return nil, EAFNOSUPPORT @@ -385,6 +377,11 @@ func (w WaitStatus) TrapCause() int { return -1 } //sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range +func Fsync(fd int) error { + return fsyncRange(fd, O_SYNC, 0, 0) +} + /* * Direct access */ @@ -401,7 +398,6 @@ func (w WaitStatus) TrapCause() int { return -1 } //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys Fdatasync(fd int) (err error) -//sys Fsync(fd int) (err error) // readdir_r //sysnb Getpgid(pid int) (pgid int, err error) diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_bsd.go b/constraint/vendor/golang.org/x/sys/unix/syscall_bsd.go index 95ac3946b..0ce452326 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -163,9 +163,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil } @@ -179,9 +177,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil } @@ -210,9 +206,7 @@ func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Nlen = sa.Nlen sa.raw.Alen = sa.Alen sa.raw.Slen = sa.Slen - for i := 0; i < len(sa.raw.Data); i++ { - sa.raw.Data[i] = sa.Data[i] - } + sa.raw.Data = sa.Data return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil } @@ -228,9 +222,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa.Nlen = pp.Nlen sa.Alen = pp.Alen sa.Slen = pp.Slen - for i := 0; i < len(sa.Data); i++ { - sa.Data[i] = pp.Data[i] - } + sa.Data = pp.Data return sa, nil case AF_UNIX: @@ -262,9 +254,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil case AF_INET6: @@ -273,9 +263,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } return anyToSockaddrGOOS(fd, rsa) diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_darwin.go b/constraint/vendor/golang.org/x/sys/unix/syscall_darwin.go index 9945e5f96..8826f4143 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -13,6 +13,7 @@ package unix import ( + "fmt" "runtime" "syscall" "unsafe" @@ -47,6 +48,30 @@ func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil } +// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. +// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables +// bidirectional communication between a hypervisor and its guest virtual +// machines. +type SockaddrVM struct { + // CID and Port specify a context ID and port address for a VM socket. + // Guests have a unique CID, and hosts may have a well-known CID of: + // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. + // - VMADDR_CID_LOCAL: refers to local communication (loopback). + // - VMADDR_CID_HOST: refers to other processes on the host. + CID uint32 + Port uint32 + raw RawSockaddrVM +} + +func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Len = SizeofSockaddrVM + sa.raw.Family = AF_VSOCK + sa.raw.Port = sa.Port + sa.raw.Cid = sa.CID + + return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil +} + func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { switch rsa.Addr.Family { case AF_SYSTEM: @@ -57,6 +82,13 @@ func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa.Unit = pp.Sc_unit return sa, nil } + case AF_VSOCK: + pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) + sa := &SockaddrVM{ + CID: pp.Cid, + Port: pp.Port, + } + return sa, nil } return nil, EAFNOSUPPORT } @@ -398,8 +430,62 @@ func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { return x, err } +func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + var kinfo KinfoProc + n := uintptr(SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofKinfoProc { + return nil, EIO + } + return &kinfo, nil +} + +func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } + + // Read into buffer of that size. + buf := make([]KinfoProc, n/SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { + return nil, err + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n/SizeofKinfoProc], nil +} + //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) +//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) +//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) +//sys shmdt(addr uintptr) (err error) +//sys shmget(key int, size int, flag int) (id int, err error) + /* * Exposed directly */ @@ -557,10 +643,6 @@ func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { // Msgget // Msgsnd // Msgrcv -// Shmat -// Shmctl -// Shmdt -// Shmget // Shm_open // Shm_unlink // Sem_open diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_illumos.go b/constraint/vendor/golang.org/x/sys/unix/syscall_illumos.go index 8c5357683..8d5f294c4 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_illumos.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_illumos.go @@ -162,6 +162,14 @@ func (l *Lifreq) GetLifruInt() int { return *(*int)(unsafe.Pointer(&l.Lifru[0])) } +func (l *Lifreq) SetLifruUint(d uint) { + *(*uint)(unsafe.Pointer(&l.Lifru[0])) = d +} + +func (l *Lifreq) GetLifruUint() uint { + return *(*uint)(unsafe.Pointer(&l.Lifru[0])) +} + func IoctlLifreq(fd int, req uint, l *Lifreq) error { return ioctl(fd, req, uintptr(unsafe.Pointer(l))) } diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux.go index 2dd7c8e34..4bc5baf77 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -13,7 +13,6 @@ package unix import ( "encoding/binary" - "runtime" "syscall" "unsafe" ) @@ -38,6 +37,13 @@ func Creat(path string, mode uint32) (fd int, err error) { return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) } +func EpollCreate(size int) (fd int, err error) { + if size <= 0 { + return -1, EINVAL + } + return EpollCreate1(0) +} + //sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) //sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) @@ -66,11 +72,22 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { return fchmodat(dirfd, path, mode) } -//sys ioctl(fd int, req uint, arg uintptr) (err error) +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} -// ioctl itself should not be exposed directly, but additional get/set -// functions for specific types are permissible. -// These are defined in ioctl.go and ioctl_linux.go. +//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL +//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL + +// ioctl itself should not be exposed directly, but additional get/set functions +// for specific types are permissible. These are defined in ioctl.go and +// ioctl_linux.go. +// +// The third argument to ioctl is often a pointer but sometimes an integer. +// Callers should use ioctlPtr when the third argument is a pointer and ioctl +// when the third argument is an integer. +// +// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr. //sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) @@ -102,6 +119,23 @@ func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) { return openat2(dirfd, path, how, SizeofOpenHow) } +func Pipe(p []int) error { + return Pipe2(p, 0) +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return err +} + //sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { @@ -111,6 +145,15 @@ func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error return ppoll(&fds[0], len(fds), timeout, sigmask) } +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + return Ppoll(fds, ts, nil) +} + //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) func Readlink(path string, buf []byte) (n int, err error) { @@ -161,27 +204,7 @@ func Utimes(path string, tv []Timeval) error { //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) func UtimesNano(path string, ts []Timespec) error { - if ts == nil { - err := utimensat(AT_FDCWD, path, nil, 0) - if err != ENOSYS { - return err - } - return utimes(path, nil) - } - if len(ts) != 2 { - return EINVAL - } - err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) - if err != ENOSYS { - return err - } - // If the utimensat syscall isn't available (utimensat was added to Linux - // in 2.6.22, Released, 8 July 2007) then fall back to utimes - var tv [2]Timeval - for i := 0; i < 2; i++ { - tv[i] = NsecToTimeval(TimespecToNsec(ts[i])) - } - return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) + return UtimesNanoAt(AT_FDCWD, path, ts, 0) } func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { @@ -349,9 +372,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil } @@ -364,9 +385,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil } @@ -415,9 +434,7 @@ func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Hatype = sa.Hatype sa.raw.Pkttype = sa.Pkttype sa.raw.Halen = sa.Halen - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil } @@ -832,12 +849,10 @@ func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) { if sa.Addr == nil { return nil, 0, EINVAL } - sa.raw.Family = AF_TIPC sa.raw.Scope = int8(sa.Scope) sa.raw.Addrtype = sa.Addr.tipcAddrtype() sa.raw.Addr = sa.Addr.tipcAddr() - return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil } @@ -851,9 +866,7 @@ type SockaddrL2TPIP struct { func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_INET sa.raw.Conn_id = sa.ConnId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil } @@ -869,9 +882,7 @@ func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_INET6 sa.raw.Conn_id = sa.ConnId sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil } @@ -904,6 +915,46 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil } +type SockaddrNFC struct { + DeviceIdx uint32 + TargetIdx uint32 + NFCProtocol uint32 + raw RawSockaddrNFC +} + +func (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Sa_family = AF_NFC + sa.raw.Dev_idx = sa.DeviceIdx + sa.raw.Target_idx = sa.TargetIdx + sa.raw.Nfc_protocol = sa.NFCProtocol + return unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil +} + +type SockaddrNFCLLCP struct { + DeviceIdx uint32 + TargetIdx uint32 + NFCProtocol uint32 + DestinationSAP uint8 + SourceSAP uint8 + ServiceName string + raw RawSockaddrNFCLLCP +} + +func (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Sa_family = AF_NFC + sa.raw.Dev_idx = sa.DeviceIdx + sa.raw.Target_idx = sa.TargetIdx + sa.raw.Nfc_protocol = sa.NFCProtocol + sa.raw.Dsap = sa.DestinationSAP + sa.raw.Ssap = sa.SourceSAP + if len(sa.ServiceName) > len(sa.raw.Service_name) { + return nil, 0, EINVAL + } + copy(sa.raw.Service_name[:], sa.ServiceName) + sa.raw.SetServiceNameLen(len(sa.ServiceName)) + return unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil +} + var socketProtocol = func(fd int) (int, error) { return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) } @@ -927,9 +978,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa.Hatype = pp.Hatype sa.Pkttype = pp.Pkttype sa.Halen = pp.Halen - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil case AF_UNIX: @@ -968,18 +1017,14 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa)) sa := new(SockaddrL2TPIP) sa.ConnId = pp.Conn_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil default: pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } @@ -995,9 +1040,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa := new(SockaddrL2TPIP6) sa.ConnId = pp.Conn_id sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil default: pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) @@ -1005,9 +1048,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } @@ -1144,6 +1185,37 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { } return sa, nil } + case AF_NFC: + proto, err := socketProtocol(fd) + if err != nil { + return nil, err + } + switch proto { + case NFC_SOCKPROTO_RAW: + pp := (*RawSockaddrNFC)(unsafe.Pointer(rsa)) + sa := &SockaddrNFC{ + DeviceIdx: pp.Dev_idx, + TargetIdx: pp.Target_idx, + NFCProtocol: pp.Nfc_protocol, + } + return sa, nil + case NFC_SOCKPROTO_LLCP: + pp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa)) + if uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) { + return nil, EINVAL + } + sa := &SockaddrNFCLLCP{ + DeviceIdx: pp.Dev_idx, + TargetIdx: pp.Target_idx, + NFCProtocol: pp.Nfc_protocol, + DestinationSAP: pp.Dsap, + SourceSAP: pp.Ssap, + ServiceName: string(pp.Service_name[:pp.Service_name_len]), + } + return sa, nil + default: + return nil, EINVAL + } } return nil, EAFNOSUPPORT } @@ -1151,11 +1223,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { func Accept(fd int) (nfd int, sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny - // Try accept4 first for Android, then try accept for kernel older than 2.6.28 nfd, err = accept4(fd, &rsa, &len, 0) - if err == ENOSYS { - nfd, err = accept(fd, &rsa, &len) - } if err != nil { return } @@ -1277,6 +1345,13 @@ func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error { return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp)) } +func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) { + if len(o) == 0 { + return EINVAL + } + return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o))) +} + // Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) // KeyctlInt calls keyctl commands in which each argument is an int. @@ -1700,6 +1775,16 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri return mount(source, target, fstype, flags, datap) } +//sys mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR + +// MountSetattr is a wrapper for mount_setattr(2). +// https://man7.org/linux/man-pages/man2/mount_setattr.2.html +// +// Requires kernel >= 5.12. +func MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error { + return mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr)) +} + func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { if raceenabled { raceReleaseMerge(unsafe.Pointer(&ioSync)) @@ -1731,11 +1816,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Dup(oldfd int) (fd int, err error) func Dup2(oldfd, newfd int) error { - // Android O and newer blocks dup2; riscv and arm64 don't implement dup2. - if runtime.GOOS == "android" || runtime.GOARCH == "riscv64" || runtime.GOARCH == "arm64" { - return Dup3(oldfd, newfd, 0) - } - return dup2(oldfd, newfd) + return Dup3(oldfd, newfd, 0) } //sys Dup3(oldfd int, newfd int, flags int) (err error) @@ -1788,7 +1869,7 @@ func Getpgrp() (pid int) { //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT -//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 +//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) //sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 //sys read(fd int, p []byte) (n int, err error) @@ -2223,6 +2304,14 @@ type RemoteIovec struct { //sys ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV //sys ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV +//sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN +//sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD + +//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) +//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) +//sys shmdt(addr uintptr) (err error) +//sys shmget(key int, size int, flag int) (id int, err error) + /* * Unimplemented */ @@ -2304,10 +2393,6 @@ type RemoteIovec struct { // SetRobustList // SetThreadArea // SetTidAddress -// Shmat -// Shmctl -// Shmdt -// Shmget // Sigaltstack // Swapoff // Swapon diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_386.go index 7b52e5d8a..5f757e8aa 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -19,36 +19,8 @@ func setTimeval(sec, usec int64) Timeval { return Timeval{Sec: int32(sec), Usec: int32(usec)} } -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - // 64-bit file system and 32-bit uid calls // (386 default is 32-bit file system and 16-bit uid). -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 @@ -59,7 +31,6 @@ func Pipe2(p []int, flags int) (err error) { //sysnb Geteuid() (euid int) = SYS_GETEUID32 //sysnb Getgid() (gid int) = SYS_GETGID32 //sysnb Getuid() (uid int) = SYS_GETUID32 -//sysnb InotifyInit() (fd int, err error) //sys Ioperm(from int, num int, on int) (err error) //sys Iopl(level int) (err error) //sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 @@ -105,7 +76,7 @@ const rlimInf32 = ^uint32(0) const rlimInf64 = ^uint64(0) func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, nil, rlim) + err = Prlimit(0, resource, nil, rlim) if err != ENOSYS { return err } @@ -133,7 +104,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, rlim, nil) + err = Prlimit(0, resource, rlim, nil) if err != ENOSYS { return err } @@ -378,11 +349,6 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint32(length) } -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) } diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 28b764115..4299125aa 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -7,8 +7,6 @@ package unix -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -21,17 +19,6 @@ package unix //sysnb Getgid() (gid int) //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) -//sysnb inotifyInit() (fd int, err error) - -func InotifyInit() (fd int, err error) { - // First try inotify_init1, because Android's seccomp policy blocks the latter. - fd, err = InotifyInit1(0) - if err == ENOSYS { - fd, err = inotifyInit() - } - return -} - //sys Ioperm(from int, num int, on int) (err error) //sys Iopl(level int) (err error) //sys Lchown(path string, uid int, gid int) (err error) @@ -126,32 +113,6 @@ func setTimeval(sec, usec int64) Timeval { return Timeval{Sec: sec, Usec: usec} } -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - func (r *PtraceRegs) PC() uint64 { return r.Rip } func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } @@ -172,13 +133,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) } //sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index 68877728e..79edeb9cb 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -19,36 +19,6 @@ func setTimeval(sec, usec int64) Timeval { return Timeval{Sec: int32(sec), Usec: int32(usec)} } -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - // Try pipe2 first for Android O, then try pipe for kernel 2.6.23. - err = pipe2(&pp, 0) - if err == ENOSYS { - err = pipe(&pp) - } - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { newoffset, errno := seek(fd, offset, whence) if errno != 0 { @@ -76,8 +46,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { // 64-bit file system and 32-bit uid calls // (16-bit uid calls are not always supported in newer kernels) -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 @@ -86,7 +54,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { //sysnb Geteuid() (euid int) = SYS_GETEUID32 //sysnb Getgid() (gid int) = SYS_GETGID32 //sysnb Getuid() (uid int) = SYS_GETUID32 -//sysnb InotifyInit() (fd int, err error) //sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 @@ -184,7 +151,7 @@ const rlimInf32 = ^uint32(0) const rlimInf64 = ^uint64(0) func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, nil, rlim) + err = Prlimit(0, resource, nil, rlim) if err != ENOSYS { return err } @@ -212,7 +179,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, rlim, nil) + err = Prlimit(0, resource, rlim, nil) if err != ENOSYS { return err } @@ -256,13 +223,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint32(length) } -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) } //sys armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 7ed703476..862890de2 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -9,13 +9,6 @@ package unix import "unsafe" -func EpollCreate(size int) (fd int, err error) { - if size <= 0 { - return -1, EINVAL - } - return EpollCreate1(0) -} - //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -145,33 +138,9 @@ func utimes(path string, tv *[2]Timeval) (err error) { return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) } -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, 0) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - // Getrlimit prefers the prlimit64 system call. See issue 38604. func Getrlimit(resource int, rlim *Rlimit) error { - err := prlimit(0, resource, nil, rlim) + err := Prlimit(0, resource, nil, rlim) if err != ENOSYS { return err } @@ -180,7 +149,7 @@ func Getrlimit(resource int, rlim *Rlimit) error { // Setrlimit prefers the prlimit64 system call. See issue 38604. func Setrlimit(resource int, rlim *Rlimit) error { - err := prlimit(0, resource, rlim, nil) + err := Prlimit(0, resource, rlim, nil) if err != ENOSYS { return err } @@ -207,31 +176,15 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } -func InotifyInit() (fd int, err error) { - return InotifyInit1(0) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) } -// dup2 exists because func Dup3 in syscall_linux.go references -// it in an unreachable path. dup2 isn't available on arm64. -func dup2(oldfd int, newfd int) error - func Pause() error { _, err := ppoll(nil, 0, nil, nil) return err } -func Poll(fds []PollFd, timeout int) (n int, err error) { - var ts *Timespec - if timeout >= 0 { - ts = new(Timespec) - *ts = NsecToTimespec(int64(timeout) * 1e6) - } - if len(fds) == 0 { - return ppoll(nil, 0, ts, nil) - } - return ppoll(&fds[0], len(fds), ts, nil) -} - //sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 06dec06fa..8932e34ad 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -8,8 +8,6 @@ package unix -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -94,30 +92,6 @@ func setTimeval(sec, usec int64) Timeval { return Timeval{Sec: sec, Usec: usec} } -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, 0) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - func Ioperm(from int, num int, on int) (err error) { return ENOSYS } @@ -217,15 +191,6 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } -func InotifyInit() (fd int, err error) { - return InotifyInit1(0) -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) } diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index 8f0d0a5b5..7821c25d9 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -15,8 +15,6 @@ import ( func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -60,7 +58,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -//sysnb InotifyInit() (fd int, err error) //sys Ioperm(from int, num int, on int) (err error) //sys Iopl(level int) (err error) @@ -113,29 +110,6 @@ func setTimeval(sec, usec int64) Timeval { return Timeval{Sec: int32(sec), Usec: int32(usec)} } -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe() (p1 int, p2 int, err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - p[0], p[1], err = pipe() - return -} - //sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { @@ -157,7 +131,7 @@ type rlimit32 struct { //sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, nil, rlim) + err = Prlimit(0, resource, nil, rlim) if err != ENOSYS { return err } @@ -185,7 +159,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, rlim, nil) + err = Prlimit(0, resource, rlim, nil) if err != ENOSYS { return err } @@ -229,11 +203,6 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint32(length) } -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) } diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go index 7e65e088d..c5053a0f0 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -3,8 +3,7 @@ // license that can be found in the LICENSE file. //go:build linux && ppc -// +build linux -// +build ppc +// +build linux,ppc package unix @@ -13,8 +12,6 @@ import ( "unsafe" ) -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 @@ -24,7 +21,6 @@ import ( //sysnb Geteuid() (euid int) //sysnb Getgid() (gid int) //sysnb Getuid() (uid int) -//sysnb InotifyInit() (fd int, err error) //sys Ioperm(from int, num int, on int) (err error) //sys Iopl(level int) (err error) //sys Lchown(path string, uid int, gid int) (err error) @@ -143,7 +139,7 @@ const rlimInf32 = ^uint32(0) const rlimInf64 = ^uint64(0) func Getrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, nil, rlim) + err = Prlimit(0, resource, nil, rlim) if err != ENOSYS { return err } @@ -171,7 +167,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = prlimit(0, resource, rlim, nil) + err = Prlimit(0, resource, rlim, nil) if err != ENOSYS { return err } @@ -215,39 +211,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint32(length) } -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint32(length) } //sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index 0b1f0d6da..25786c421 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -8,8 +8,6 @@ package unix -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -22,7 +20,6 @@ package unix //sysnb Getgid() (gid int) //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT //sysnb Getuid() (uid int) -//sysnb InotifyInit() (fd int, err error) //sys Ioperm(from int, num int, on int) (err error) //sys Iopl(level int) (err error) //sys Lchown(path string, uid int, gid int) (err error) @@ -100,39 +97,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) } //sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index ce9bcd317..6f9f71041 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -9,13 +9,6 @@ package unix import "unsafe" -func EpollCreate(size int) (fd int, err error) { - if size <= 0 { - return -1, EINVAL - } - return EpollCreate1(0) -} - //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -144,30 +137,6 @@ func utimes(path string, tv *[2]Timeval) (err error) { return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) } -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, 0) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - func (r *PtraceRegs) PC() uint64 { return r.Pc } func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } @@ -188,8 +157,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } -func InotifyInit() (fd int, err error) { - return InotifyInit1(0) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) } func Pause() error { @@ -197,18 +166,6 @@ func Pause() error { return err } -func Poll(fds []PollFd, timeout int) (n int, err error) { - var ts *Timespec - if timeout >= 0 { - ts = new(Timespec) - *ts = NsecToTimespec(int64(timeout) * 1e6) - } - if len(fds) == 0 { - return ppoll(nil, 0, ts, nil) - } - return ppoll(&fds[0], len(fds), ts, nil) -} - func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) } @@ -225,7 +182,3 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } - -// dup2 exists because func Dup3 in syscall_linux.go references -// it in an unreachable path. dup2 isn't available on arm64. -func dup2(oldfd int, newfd int) error diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index a1e45694b..6aa59cb27 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -11,8 +11,6 @@ import ( "unsafe" ) -//sys dup2(oldfd int, newfd int) (err error) -//sysnb EpollCreate(size int) (fd int, err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) @@ -25,7 +23,6 @@ import ( //sysnb Getgid() (gid int) //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) -//sysnb InotifyInit() (fd int, err error) //sys Lchown(path string, uid int, gid int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) @@ -77,30 +74,6 @@ func setTimeval(sec, usec int64) Timeval { return Timeval{Sec: sec, Usec: usec} } -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0. - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - func Ioperm(from int, num int, on int) (err error) { return ENOSYS } @@ -129,6 +102,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + // Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. // mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { @@ -320,15 +297,6 @@ func Shutdown(s, how int) error { return nil } -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) -} - //sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index 49055a3cf..bbe8d174f 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -9,7 +9,6 @@ package unix //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 -//sys dup2(oldfd int, newfd int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 @@ -20,7 +19,6 @@ package unix //sysnb Getgid() (gid int) //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) -//sysnb InotifyInit() (fd int, err error) //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) @@ -116,37 +114,6 @@ func (cmsg *Cmsghdr) SetLen(length int) { cmsg.Len = uint64(length) } -//sysnb pipe(p *[2]_C_int) (err error) - -func Pipe(p []int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe(&pp) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) (err error) { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err = pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) - -func Poll(fds []PollFd, timeout int) (n int, err error) { - if len(fds) == 0 { - return poll(nil, 0, timeout) - } - return poll(&fds[0], len(fds), timeout) +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) } diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_solaris.go b/constraint/vendor/golang.org/x/sys/unix/syscall_solaris.go index 77fcde7c1..8b88ac213 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -13,7 +13,10 @@ package unix import ( + "fmt" + "os" "runtime" + "sync" "syscall" "unsafe" ) @@ -89,9 +92,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil } @@ -104,9 +105,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil } @@ -414,9 +413,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil case AF_INET6: @@ -425,9 +422,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } return nil, EAFNOSUPPORT @@ -744,3 +739,240 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e func Munmap(b []byte) (err error) { return mapper.Munmap(b) } + +// Event Ports + +type fileObjCookie struct { + fobj *fileObj + cookie interface{} +} + +// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports. +type EventPort struct { + port int + mu sync.Mutex + fds map[uintptr]interface{} + paths map[string]*fileObjCookie +} + +// PortEvent is an abstraction of the port_event C struct. +// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD +// to see if Path or Fd was the event source. The other will be +// uninitialized. +type PortEvent struct { + Cookie interface{} + Events int32 + Fd uintptr + Path string + Source uint16 + fobj *fileObj +} + +// NewEventPort creates a new EventPort including the +// underlying call to port_create(3c). +func NewEventPort() (*EventPort, error) { + port, err := port_create() + if err != nil { + return nil, err + } + e := &EventPort{ + port: port, + fds: make(map[uintptr]interface{}), + paths: make(map[string]*fileObjCookie), + } + return e, nil +} + +//sys port_create() (n int, err error) +//sys port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) +//sys port_dissociate(port int, source int, object uintptr) (n int, err error) +//sys port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) +//sys port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) + +// Close closes the event port. +func (e *EventPort) Close() error { + e.mu.Lock() + defer e.mu.Unlock() + e.fds = nil + e.paths = nil + return Close(e.port) +} + +// PathIsWatched checks to see if path is associated with this EventPort. +func (e *EventPort) PathIsWatched(path string) bool { + e.mu.Lock() + defer e.mu.Unlock() + _, found := e.paths[path] + return found +} + +// FdIsWatched checks to see if fd is associated with this EventPort. +func (e *EventPort) FdIsWatched(fd uintptr) bool { + e.mu.Lock() + defer e.mu.Unlock() + _, found := e.fds[fd] + return found +} + +// AssociatePath wraps port_associate(3c) for a filesystem path including +// creating the necessary file_obj from the provided stat information. +func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error { + e.mu.Lock() + defer e.mu.Unlock() + if _, found := e.paths[path]; found { + return fmt.Errorf("%v is already associated with this Event Port", path) + } + fobj, err := createFileObj(path, stat) + if err != nil { + return err + } + fCookie := &fileObjCookie{fobj, cookie} + _, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie))) + if err != nil { + return err + } + e.paths[path] = fCookie + return nil +} + +// DissociatePath wraps port_dissociate(3c) for a filesystem path. +func (e *EventPort) DissociatePath(path string) error { + e.mu.Lock() + defer e.mu.Unlock() + f, ok := e.paths[path] + if !ok { + return fmt.Errorf("%v is not associated with this Event Port", path) + } + _, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj))) + if err != nil { + return err + } + delete(e.paths, path) + return nil +} + +// AssociateFd wraps calls to port_associate(3c) on file descriptors. +func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error { + e.mu.Lock() + defer e.mu.Unlock() + if _, found := e.fds[fd]; found { + return fmt.Errorf("%v is already associated with this Event Port", fd) + } + pcookie := &cookie + _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(pcookie))) + if err != nil { + return err + } + e.fds[fd] = pcookie + return nil +} + +// DissociateFd wraps calls to port_dissociate(3c) on file descriptors. +func (e *EventPort) DissociateFd(fd uintptr) error { + e.mu.Lock() + defer e.mu.Unlock() + _, ok := e.fds[fd] + if !ok { + return fmt.Errorf("%v is not associated with this Event Port", fd) + } + _, err := port_dissociate(e.port, PORT_SOURCE_FD, fd) + if err != nil { + return err + } + delete(e.fds, fd) + return nil +} + +func createFileObj(name string, stat os.FileInfo) (*fileObj, error) { + fobj := new(fileObj) + bs, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + fobj.Name = (*int8)(unsafe.Pointer(&bs[0])) + s := stat.Sys().(*syscall.Stat_t) + fobj.Atim.Sec = s.Atim.Sec + fobj.Atim.Nsec = s.Atim.Nsec + fobj.Mtim.Sec = s.Mtim.Sec + fobj.Mtim.Nsec = s.Mtim.Nsec + fobj.Ctim.Sec = s.Ctim.Sec + fobj.Ctim.Nsec = s.Ctim.Nsec + return fobj, nil +} + +// GetOne wraps port_get(3c) and returns a single PortEvent. +func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) { + pe := new(portEvent) + _, err := port_get(e.port, pe, t) + if err != nil { + return nil, err + } + p := new(PortEvent) + p.Events = pe.Events + p.Source = pe.Source + e.mu.Lock() + defer e.mu.Unlock() + switch pe.Source { + case PORT_SOURCE_FD: + p.Fd = uintptr(pe.Object) + cookie := (*interface{})(unsafe.Pointer(pe.User)) + p.Cookie = *cookie + delete(e.fds, p.Fd) + case PORT_SOURCE_FILE: + p.fobj = (*fileObj)(unsafe.Pointer(uintptr(pe.Object))) + p.Path = BytePtrToString((*byte)(unsafe.Pointer(p.fobj.Name))) + cookie := (*interface{})(unsafe.Pointer(pe.User)) + p.Cookie = *cookie + delete(e.paths, p.Path) + } + return p, nil +} + +// Pending wraps port_getn(3c) and returns how many events are pending. +func (e *EventPort) Pending() (int, error) { + var n uint32 = 0 + _, err := port_getn(e.port, nil, 0, &n, nil) + return int(n), err +} + +// Get wraps port_getn(3c) and fills a slice of PortEvent. +// It will block until either min events have been received +// or the timeout has been exceeded. It will return how many +// events were actually received along with any error information. +func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) { + if min == 0 { + return 0, fmt.Errorf("need to request at least one event or use Pending() instead") + } + if len(s) < min { + return 0, fmt.Errorf("len(s) (%d) is less than min events requested (%d)", len(s), min) + } + got := uint32(min) + max := uint32(len(s)) + var err error + ps := make([]portEvent, max, max) + _, err = port_getn(e.port, &ps[0], max, &got, timeout) + // got will be trustworthy with ETIME, but not any other error. + if err != nil && err != ETIME { + return 0, err + } + e.mu.Lock() + defer e.mu.Unlock() + for i := 0; i < int(got); i++ { + s[i].Events = ps[i].Events + s[i].Source = ps[i].Source + switch ps[i].Source { + case PORT_SOURCE_FD: + s[i].Fd = uintptr(ps[i].Object) + cookie := (*interface{})(unsafe.Pointer(ps[i].User)) + s[i].Cookie = *cookie + delete(e.fds, s[i].Fd) + case PORT_SOURCE_FILE: + s[i].fobj = (*fileObj)(unsafe.Pointer(uintptr(ps[i].Object))) + s[i].Path = BytePtrToString((*byte)(unsafe.Pointer(s[i].fobj.Name))) + cookie := (*interface{})(unsafe.Pointer(ps[i].User)) + s[i].Cookie = *cookie + delete(e.paths, s[i].Path) + } + } + return int(got), err +} diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_unix.go b/constraint/vendor/golang.org/x/sys/unix/syscall_unix.go index a7618ceb5..cf296a243 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -313,6 +313,10 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { return } +func Send(s int, buf []byte, flags int) (err error) { + return sendto(s, buf, flags, nil, 0) +} + func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { ptr, n, err := to.sockaddr() if err != nil { diff --git a/constraint/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/constraint/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 1ffd8bfcf..5fb76a146 100644 --- a/constraint/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/constraint/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -67,9 +67,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil } @@ -83,9 +81,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil } @@ -144,9 +140,7 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil case AF_INET6: @@ -155,9 +149,7 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } return nil, EAFNOSUPPORT diff --git a/constraint/vendor/golang.org/x/sys/unix/sysvshm_linux.go b/constraint/vendor/golang.org/x/sys/unix/sysvshm_linux.go new file mode 100644 index 000000000..2c3a4437f --- /dev/null +++ b/constraint/vendor/golang.org/x/sys/unix/sysvshm_linux.go @@ -0,0 +1,21 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux +// +build linux + +package unix + +import "runtime" + +// SysvShmCtl performs control operations on the shared memory segment +// specified by id. +func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) { + if runtime.GOARCH == "arm" || + runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" { + cmd |= ipc_64 + } + + return shmctl(id, cmd, desc) +} diff --git a/constraint/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/constraint/vendor/golang.org/x/sys/unix/sysvshm_unix.go new file mode 100644 index 000000000..0bb4c8de5 --- /dev/null +++ b/constraint/vendor/golang.org/x/sys/unix/sysvshm_unix.go @@ -0,0 +1,61 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (darwin && !ios) || linux +// +build darwin,!ios linux + +package unix + +import ( + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +// SysvShmAttach attaches the Sysv shared memory segment associated with the +// shared memory identifier id. +func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) { + addr, errno := shmat(id, addr, flag) + if errno != nil { + return nil, errno + } + + // Retrieve the size of the shared memory to enable slice creation + var info SysvShmDesc + + _, err := SysvShmCtl(id, IPC_STAT, &info) + if err != nil { + // release the shared memory if we can't find the size + + // ignoring error from shmdt as there's nothing sensible to return here + shmdt(addr) + return nil, err + } + + // Use unsafe to convert addr into a []byte. + // TODO: convert to unsafe.Slice once we can assume Go 1.17 + var b []byte + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b)) + hdr.Data = unsafe.Pointer(addr) + hdr.Cap = int(info.Segsz) + hdr.Len = int(info.Segsz) + return b, nil +} + +// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach. +// +// It is not safe to use the slice after calling this function. +func SysvShmDetach(data []byte) error { + if len(data) == 0 { + return EINVAL + } + + return shmdt(uintptr(unsafe.Pointer(&data[0]))) +} + +// SysvShmGet returns the Sysv shared memory identifier associated with key. +// If the IPC_CREAT flag is specified a new segment is created. +func SysvShmGet(key, size, flag int) (id int, err error) { + return shmget(key, size, flag) +} diff --git a/constraint/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go b/constraint/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go new file mode 100644 index 000000000..71bddefdb --- /dev/null +++ b/constraint/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go @@ -0,0 +1,14 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && !ios +// +build darwin,!ios + +package unix + +// SysvShmCtl performs control operations on the shared memory segment +// specified by id. +func SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) { + return shmctl(id, cmd, desc) +} diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 991996b60..476a1c7e7 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -12,1550 +12,1582 @@ package unix import "syscall" const ( - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1c - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1e - AF_IPX = 0x17 - AF_ISDN = 0x1c - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x29 - AF_NATM = 0x1f - AF_NDRV = 0x1b - AF_NETBIOS = 0x21 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PPP = 0x22 - AF_PUP = 0x4 - AF_RESERVED_36 = 0x24 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_SYSTEM = 0x20 - AF_SYS_CONTROL = 0x2 - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_UTUN = 0x26 - AF_VSOCK = 0x28 - ALTWERASE = 0x200 - ATTR_BIT_MAP_COUNT = 0x5 - ATTR_CMN_ACCESSMASK = 0x20000 - ATTR_CMN_ACCTIME = 0x1000 - ATTR_CMN_ADDEDTIME = 0x10000000 - ATTR_CMN_BKUPTIME = 0x2000 - ATTR_CMN_CHGTIME = 0x800 - ATTR_CMN_CRTIME = 0x200 - ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 - ATTR_CMN_DEVID = 0x2 - ATTR_CMN_DOCUMENT_ID = 0x100000 - ATTR_CMN_ERROR = 0x20000000 - ATTR_CMN_EXTENDED_SECURITY = 0x400000 - ATTR_CMN_FILEID = 0x2000000 - ATTR_CMN_FLAGS = 0x40000 - ATTR_CMN_FNDRINFO = 0x4000 - ATTR_CMN_FSID = 0x4 - ATTR_CMN_FULLPATH = 0x8000000 - ATTR_CMN_GEN_COUNT = 0x80000 - ATTR_CMN_GRPID = 0x10000 - ATTR_CMN_GRPUUID = 0x1000000 - ATTR_CMN_MODTIME = 0x400 - ATTR_CMN_NAME = 0x1 - ATTR_CMN_NAMEDATTRCOUNT = 0x80000 - ATTR_CMN_NAMEDATTRLIST = 0x100000 - ATTR_CMN_OBJID = 0x20 - ATTR_CMN_OBJPERMANENTID = 0x40 - ATTR_CMN_OBJTAG = 0x10 - ATTR_CMN_OBJTYPE = 0x8 - ATTR_CMN_OWNERID = 0x8000 - ATTR_CMN_PARENTID = 0x4000000 - ATTR_CMN_PAROBJID = 0x80 - ATTR_CMN_RETURNED_ATTRS = 0x80000000 - ATTR_CMN_SCRIPT = 0x100 - ATTR_CMN_SETMASK = 0x51c7ff00 - ATTR_CMN_USERACCESS = 0x200000 - ATTR_CMN_UUID = 0x800000 - ATTR_CMN_VALIDMASK = 0xffffffff - ATTR_CMN_VOLSETMASK = 0x6700 - ATTR_FILE_ALLOCSIZE = 0x4 - ATTR_FILE_CLUMPSIZE = 0x10 - ATTR_FILE_DATAALLOCSIZE = 0x400 - ATTR_FILE_DATAEXTENTS = 0x800 - ATTR_FILE_DATALENGTH = 0x200 - ATTR_FILE_DEVTYPE = 0x20 - ATTR_FILE_FILETYPE = 0x40 - ATTR_FILE_FORKCOUNT = 0x80 - ATTR_FILE_FORKLIST = 0x100 - ATTR_FILE_IOBLOCKSIZE = 0x8 - ATTR_FILE_LINKCOUNT = 0x1 - ATTR_FILE_RSRCALLOCSIZE = 0x2000 - ATTR_FILE_RSRCEXTENTS = 0x4000 - ATTR_FILE_RSRCLENGTH = 0x1000 - ATTR_FILE_SETMASK = 0x20 - ATTR_FILE_TOTALSIZE = 0x2 - ATTR_FILE_VALIDMASK = 0x37ff - ATTR_VOL_ALLOCATIONCLUMP = 0x40 - ATTR_VOL_ATTRIBUTES = 0x40000000 - ATTR_VOL_CAPABILITIES = 0x20000 - ATTR_VOL_DIRCOUNT = 0x400 - ATTR_VOL_ENCODINGSUSED = 0x10000 - ATTR_VOL_FILECOUNT = 0x200 - ATTR_VOL_FSTYPE = 0x1 - ATTR_VOL_INFO = 0x80000000 - ATTR_VOL_IOBLOCKSIZE = 0x80 - ATTR_VOL_MAXOBJCOUNT = 0x800 - ATTR_VOL_MINALLOCATION = 0x20 - ATTR_VOL_MOUNTEDDEVICE = 0x8000 - ATTR_VOL_MOUNTFLAGS = 0x4000 - ATTR_VOL_MOUNTPOINT = 0x1000 - ATTR_VOL_NAME = 0x2000 - ATTR_VOL_OBJCOUNT = 0x100 - ATTR_VOL_QUOTA_SIZE = 0x10000000 - ATTR_VOL_RESERVED_SIZE = 0x20000000 - ATTR_VOL_SETMASK = 0x80002000 - ATTR_VOL_SIGNATURE = 0x2 - ATTR_VOL_SIZE = 0x4 - ATTR_VOL_SPACEAVAIL = 0x10 - ATTR_VOL_SPACEFREE = 0x8 - ATTR_VOL_UUID = 0x40000 - ATTR_VOL_VALIDMASK = 0xf007ffff - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc00c4279 - BIOCGETIF = 0x4020426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x8010427e - BIOCSETIF = 0x8020426c - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x8000 - BSDLY = 0x8000 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_MONOTONIC_RAW_APPROX = 0x5 - CLOCK_PROCESS_CPUTIME_ID = 0xc - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x10 - CLOCK_UPTIME_RAW = 0x8 - CLOCK_UPTIME_RAW_APPROX = 0x9 - CLONE_NOFOLLOW = 0x1 - CLONE_NOOWNERCOPY = 0x2 - CR0 = 0x0 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTLIOCGINFO = 0xc0644e03 - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x10a - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_DARWIN = 0x10a - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0xf - EVFILT_FS = -0x9 - EVFILT_MACHPORT = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x11 - EVFILT_THREADMARKER = 0x11 - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xa - EVFILT_VM = -0xc - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DISPATCH2 = 0x180 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG0 = 0x1000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_OOBAND = 0x2000 - EV_POLL = 0x1000 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EV_UDATA_SPECIFIC = 0x100 - EV_VANISHED = 0x200 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FF1 = 0x4000 - FFDLY = 0x4000 - FLUSHO = 0x800000 - FSOPT_ATTR_CMN_EXTENDED = 0x20 - FSOPT_NOFOLLOW = 0x1 - FSOPT_NOINMEMUPDATE = 0x2 - FSOPT_PACK_INVAL_ATTRS = 0x8 - FSOPT_REPORT_FULLSIZE = 0x4 - FSOPT_RETURN_REALDEV = 0x200 - F_ADDFILESIGS = 0x3d - F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 - F_ADDFILESIGS_INFO = 0x67 - F_ADDFILESIGS_RETURN = 0x61 - F_ADDFILESUPPL = 0x68 - F_ADDSIGS = 0x3b - F_ALLOCATEALL = 0x4 - F_ALLOCATECONTIG = 0x2 - F_BARRIERFSYNC = 0x55 - F_CHECK_LV = 0x62 - F_CHKCLEAN = 0x29 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x43 - F_FINDSIGS = 0x4e - F_FLUSH_DATA = 0x28 - F_FREEZE_FS = 0x35 - F_FULLFSYNC = 0x33 - F_GETCODEDIR = 0x48 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETLKPID = 0x42 - F_GETNOSIGPIPE = 0x4a - F_GETOWN = 0x5 - F_GETPATH = 0x32 - F_GETPATH_MTMINFO = 0x47 - F_GETPATH_NOFIRMLINK = 0x66 - F_GETPROTECTIONCLASS = 0x3f - F_GETPROTECTIONLEVEL = 0x4d - F_GETSIGSINFO = 0x69 - F_GLOBAL_NOCACHE = 0x37 - F_LOG2PHYS = 0x31 - F_LOG2PHYS_EXT = 0x41 - F_NOCACHE = 0x30 - F_NODIRECT = 0x3e - F_OK = 0x0 - F_PATHPKG_CHECK = 0x34 - F_PEOFPOSMODE = 0x3 - F_PREALLOCATE = 0x2a - F_PUNCHHOLE = 0x63 - F_RDADVISE = 0x2c - F_RDAHEAD = 0x2d - F_RDLCK = 0x1 - F_SETBACKINGSTORE = 0x46 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETLKWTIMEOUT = 0xa - F_SETNOSIGPIPE = 0x49 - F_SETOWN = 0x6 - F_SETPROTECTIONCLASS = 0x40 - F_SETSIZE = 0x2b - F_SINGLE_WRITER = 0x4c - F_SPECULATIVE_READ = 0x65 - F_THAW_FS = 0x36 - F_TRANSCODEKEY = 0x4b - F_TRIM_ACTIVE_FILE = 0x64 - F_UNLCK = 0x2 - F_VOLPOSMODE = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_6LOWPAN = 0x40 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_CELLULAR = 0xff - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FAITH = 0x38 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIF = 0x37 - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IEEE1394 = 0x90 - IFT_IEEE8023ADLAG = 0x88 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_L2VLAN = 0x87 - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PDP = 0xff - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PKTAP = 0xfe - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_STF = 0x39 - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LINKLOCALNETNUM = 0xa9fe0000 - IN_LOOPBACKNET = 0x7f - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_2292DSTOPTS = 0x17 - IPV6_2292HOPLIMIT = 0x14 - IPV6_2292HOPOPTS = 0x16 - IPV6_2292NEXTHOP = 0x15 - IPV6_2292PKTINFO = 0x13 - IPV6_2292PKTOPTIONS = 0x19 - IPV6_2292RTHDR = 0x18 - IPV6_3542DSTOPTS = 0x32 - IPV6_3542HOPLIMIT = 0x2f - IPV6_3542HOPOPTS = 0x31 - IPV6_3542NEXTHOP = 0x30 - IPV6_3542PKTINFO = 0x2e - IPV6_3542RTHDR = 0x33 - IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 - IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 - IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDV6ONLY = 0x1b - IPV6_BOUND_IF = 0x7d - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOW_ECN_MASK = 0x3000 - IPV6_FRAGTTL = 0x3c - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x3d - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x23 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x39 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x24 - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BLOCK_SOURCE = 0x48 - IP_BOUND_IF = 0x19 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x1c - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW_ADD = 0x28 - IP_FW_DEL = 0x29 - IP_FW_FLUSH = 0x2a - IP_FW_GET = 0x2c - IP_FW_RESETLOG = 0x2d - IP_FW_ZERO = 0x2b - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_IFINDEX = 0x42 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_NAT__XXX = 0x37 - IP_OFFMASK = 0x1fff - IP_OLD_FW_ADD = 0x32 - IP_OLD_FW_DEL = 0x33 - IP_OLD_FW_FLUSH = 0x34 - IP_OLD_FW_GET = 0x36 - IP_OLD_FW_RESETLOG = 0x38 - IP_OLD_FW_ZERO = 0x35 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x1b - IP_RECVTTL = 0x18 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_STRIPHDR = 0x17 - IP_TOS = 0x3 - IP_TRAFFIC_MGT_BACKGROUND = 0x41 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_PEERCRED = 0x1 - LOCAL_PEEREPID = 0x3 - LOCAL_PEEREUUID = 0x5 - LOCAL_PEERPID = 0x2 - LOCAL_PEERTOKEN = 0x6 - LOCAL_PEERUUID = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_CAN_REUSE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_FREE_REUSABLE = 0x7 - MADV_FREE_REUSE = 0x8 - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MADV_ZERO_WIRED_PAGES = 0x6 - MAP_32BIT = 0x8000 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_JIT = 0x800 - MAP_NOCACHE = 0x400 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESILIENT_CODESIGN = 0x2000 - MAP_RESILIENT_MEDIA = 0x4000 - MAP_SHARED = 0x1 - MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 - MAP_UNIX03 = 0x40000 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x400000 - MNT_CMDFLAGS = 0xf0000 - MNT_CPROTECT = 0x80 - MNT_DEFWRITE = 0x2000000 - MNT_DONTBROWSE = 0x100000 - MNT_DOVOLFS = 0x8000 - MNT_DWAIT = 0x4 - MNT_EXPORTED = 0x100 - MNT_EXT_ROOT_DATA_VOL = 0x1 - MNT_FORCE = 0x80000 - MNT_IGNORE_OWNERSHIP = 0x200000 - MNT_JOURNALED = 0x800000 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NOATIME = 0x10000000 - MNT_NOBLOCK = 0x20000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOUSERXATTR = 0x1000000 - MNT_NOWAIT = 0x2 - MNT_QUARANTINE = 0x400 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_REMOVABLE = 0x200 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x40000000 - MNT_STRICTATIME = 0x80000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNKNOWNPERMISSIONS = 0x200000 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xd7f0f7ff - MNT_WAIT = 0x1 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FLUSH = 0x400 - MSG_HAVEMORE = 0x2000 - MSG_HOLD = 0x800 - MSG_NEEDSA = 0x10000 - MSG_NOSIGNAL = 0x80000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_RCVMORE = 0x4000 - MSG_SEND = 0x1000 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITSTREAM = 0x200 - MS_ASYNC = 0x1 - MS_DEACTIVATE = 0x8 - MS_INVALIDATE = 0x2 - MS_KILLPAGES = 0x4 - MS_SYNC = 0x10 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_DUMP2 = 0x7 - NET_RT_FLAGS = 0x2 - NET_RT_FLAGS_PRIV = 0xa - NET_RT_IFLIST = 0x3 - NET_RT_IFLIST2 = 0x6 - NET_RT_MAXID = 0xb - NET_RT_STAT = 0x4 - NET_RT_TRASH = 0x5 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x100 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSOLUTE = 0x8 - NOTE_ATTRIB = 0x8 - NOTE_BACKGROUND = 0x40 - NOTE_CHILD = 0x4 - NOTE_CRITICAL = 0x20 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXITSTATUS = 0x4000000 - NOTE_EXIT_CSERROR = 0x40000 - NOTE_EXIT_DECRYPTFAIL = 0x10000 - NOTE_EXIT_DETAIL = 0x2000000 - NOTE_EXIT_DETAIL_MASK = 0x70000 - NOTE_EXIT_MEMORY = 0x20000 - NOTE_EXIT_REPARENTED = 0x80000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_FUNLOCK = 0x100 - NOTE_LEEWAY = 0x10 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MACHTIME = 0x100 - NOTE_MACH_CONTINUOUS_TIME = 0x80 - NOTE_NONE = 0x80 - NOTE_NSECONDS = 0x4 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = -0x100000 - NOTE_PDATAMASK = 0xfffff - NOTE_REAP = 0x10000000 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_SIGNAL = 0x8000000 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x2 - NOTE_VM_ERROR = 0x10000000 - NOTE_VM_PRESSURE = 0x80000000 - NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 - NOTE_VM_PRESSURE_TERMINATE = 0x40000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_ALERT = 0x20000000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x1000000 - O_CREAT = 0x200 - O_DIRECTORY = 0x100000 - O_DP_GETRAWENCRYPTED = 0x1 - O_DP_GETRAWUNENCRYPTED = 0x2 - O_DSYNC = 0x400000 - O_EVTONLY = 0x8000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x20000 - O_NOFOLLOW = 0x100 - O_NOFOLLOW_ANY = 0x20000000 - O_NONBLOCK = 0x4 - O_POPUP = 0x80000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYMLINK = 0x200000 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_ATTACH = 0xa - PT_ATTACHEXC = 0xe - PT_CONTINUE = 0x7 - PT_DENY_ATTACH = 0x1f - PT_DETACH = 0xb - PT_FIRSTMACH = 0x20 - PT_FORCEQUOTA = 0x1e - PT_KILL = 0x8 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_READ_U = 0x3 - PT_SIGEXC = 0xc - PT_STEP = 0x9 - PT_THUPDATE = 0xd - PT_TRACE_ME = 0x0 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - PT_WRITE_U = 0x6 - RLIMIT_AS = 0x5 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_CPU_USAGE_MONITOR = 0x2 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_CONDEMNED = 0x2000000 - RTF_DEAD = 0x20000000 - RTF_DELCLONE = 0x80 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_IFREF = 0x4000000 - RTF_IFSCOPE = 0x1000000 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_NOIFREF = 0x2000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_PROXY = 0x8000000 - RTF_REJECT = 0x8 - RTF_ROUTER = 0x10000000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_GET2 = 0x14 - RTM_IFINFO = 0xe - RTM_IFINFO2 = 0x12 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_NEWMADDR2 = 0x13 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIMESTAMP_MONOTONIC = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCARPIPLL = 0xc0206928 - SIOCATMARK = 0x40047307 - SIOCAUTOADDR = 0xc0206926 - SIOCAUTONETMASK = 0x80206927 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFPHYADDR = 0x80206941 - SIOCGDRVSPEC = 0xc028697b - SIOCGETVLAN = 0xc020697f - SIOCGHIWAT = 0x40047301 - SIOCGIF6LOWPAN = 0xc02069c5 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALTMTU = 0xc0206948 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBOND = 0xc0206947 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020695b - SIOCGIFCONF = 0xc00c6924 - SIOCGIFDEVMTU = 0xc0206944 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFFUNCTIONALTYPE = 0xc02069ad - SIOCGIFGENERIC = 0xc020693a - SIOCGIFKPI = 0xc0206987 - SIOCGIFMAC = 0xc0206982 - SIOCGIFMEDIA = 0xc02c6938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206940 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc020693f - SIOCGIFSTATUS = 0xc331693d - SIOCGIFVLAN = 0xc020697f - SIOCGIFWAKEFLAGS = 0xc0206988 - SIOCGIFXMEDIA = 0xc02c6948 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCIFCREATE = 0xc0206978 - SIOCIFCREATE2 = 0xc020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106981 - SIOCRSLVMULTI = 0xc010693b - SIOCSDRVSPEC = 0x8028697b - SIOCSETVLAN = 0x8020697e - SIOCSHIWAT = 0x80047300 - SIOCSIF6LOWPAN = 0x802069c4 - SIOCSIFADDR = 0x8020690c - SIOCSIFALTMTU = 0x80206945 - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBOND = 0x80206946 - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020695a - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFKPI = 0x80206986 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206983 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x8040693e - SIOCSIFPHYS = 0x80206936 - SIOCSIFVLAN = 0x8020697e - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_DONTTRUNC = 0x2000 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1010 - SO_LINGER = 0x80 - SO_LINGER_SEC = 0x1080 - SO_NETSVC_MARKING_LEVEL = 0x1119 - SO_NET_SERVICE_TYPE = 0x1116 - SO_NKE = 0x1021 - SO_NOADDRERR = 0x1023 - SO_NOSIGPIPE = 0x1022 - SO_NOTIFYCONFLICT = 0x1026 - SO_NP_EXTENSIONS = 0x1083 - SO_NREAD = 0x1020 - SO_NUMRCVPKT = 0x1112 - SO_NWRITE = 0x1024 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1011 - SO_RANDOMPORT = 0x1082 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSESHAREUID = 0x1025 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TIMESTAMP_MONOTONIC = 0x800 - SO_TYPE = 0x1008 - SO_UPCALLCLOSEWAIT = 0x1027 - SO_USELOOPBACK = 0x40 - SO_WANTMORE = 0x4000 - SO_WANTOOBFLAG = 0x8000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0x4 - TABDLY = 0xc04 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_CONNECTIONTIMEOUT = 0x20 - TCP_CONNECTION_INFO = 0x106 - TCP_ENABLE_ECN = 0x104 - TCP_FASTOPEN = 0x105 - TCP_KEEPALIVE = 0x10 - TCP_KEEPCNT = 0x102 - TCP_KEEPINTVL = 0x101 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0xd8 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NOTSENT_LOWAT = 0x201 - TCP_RXT_CONNDROPTIME = 0x80 - TCP_RXT_FINDROP = 0x100 - TCP_SENDMOREACKS = 0x103 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCDSIMICROCODE = 0x20007455 - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x40487413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGWINSZ = 0x40087468 - TIOCIXOFF = 0x20007480 - TIOCIXON = 0x20007481 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTYGNAME = 0x40807453 - TIOCPTYGRANT = 0x20007454 - TIOCPTYUNLK = 0x20007452 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCONS = 0x20007463 - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x80487414 - TIOCSETAF = 0x80487416 - TIOCSETAW = 0x80487415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_LOADAVG = 0x2 - VM_MACHFACTOR = 0x4 - VM_MAXID = 0x6 - VM_METER = 0x1 - VM_SWAPUSAGE = 0x5 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x10 - WCOREFLAG = 0x80 - WEXITED = 0x4 - WNOHANG = 0x1 - WNOWAIT = 0x20 - WORDSIZE = 0x40 - WSTOPPED = 0x8 - WUNTRACED = 0x2 - XATTR_CREATE = 0x2 - XATTR_NODEFAULT = 0x10 - XATTR_NOFOLLOW = 0x1 - XATTR_NOSECURITY = 0x8 - XATTR_REPLACE = 0x4 - XATTR_SHOWCOMPRESSION = 0x20 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_SYS_CONTROL = 0x2 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + AF_VSOCK = 0x28 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x51c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_SPACEUSED = 0x800000 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf087ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CLONE_NOFOLLOW = 0x1 + CLONE_NOOWNERCOPY = 0x2 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTLIOCGINFO = 0xc0644e03 + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x10a + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_DARWIN = 0x10a + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x11 + EVFILT_THREADMARKER = 0x11 + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + FSOPT_RETURN_REALDEV = 0x200 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_INFO = 0x67 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDFILESUPPL = 0x68 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPATH_NOFIRMLINK = 0x66 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GETSIGSINFO = 0x69 + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_SPECULATIVE_READ = 0x65 + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6LOWPAN = 0x40 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1 + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_3542DSTOPTS = 0x32 + IPV6_3542HOPLIMIT = 0x2f + IPV6_3542HOPOPTS = 0x31 + IPV6_3542NEXTHOP = 0x30 + IPV6_3542PKTINFO = 0x2e + IPV6_3542RTHDR = 0x33 + IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 + IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 + IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x3000 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x3d + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x39 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x1c + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_PEERCRED = 0x1 + LOCAL_PEEREPID = 0x3 + LOCAL_PEEREUUID = 0x5 + LOCAL_PEERPID = 0x2 + LOCAL_PEERTOKEN = 0x6 + LOCAL_PEERUUID = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_32BIT = 0x8000 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 + MAP_UNIX03 = 0x40000 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_EXT_ROOT_DATA_VOL = 0x1 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_REMOVABLE = 0x200 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x40000000 + MNT_STRICTATIME = 0x80000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xd7f0f7ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_NOSIGNAL = 0x80000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_FLAGS_PRIV = 0xa + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xb + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NFDBITS = 0x20 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACHTIME = 0x100 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NOFOLLOW_ANY = 0x20000000 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DEAD = 0x20000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_GLOBAL = 0x40000000 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SEEK_CUR = 0x1 + SEEK_DATA = 0x4 + SEEK_END = 0x2 + SEEK_HOLE = 0x3 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIF6LOWPAN = 0xc02069c5 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFFUNCTIONALTYPE = 0xc02069ad + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGIFXMEDIA = 0xc02c6948 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIF6LOWPAN = 0x802069c4 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1 + SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4 + SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2 + SO_TRACKER_TRANSPARENCY_VERSION = 0x3 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCPOPT_CC = 0xb + TCPOPT_CCECHO = 0xd + TCPOPT_CCNEW = 0xc + TCPOPT_EOL = 0x0 + TCPOPT_FASTOPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_HDR = 0x1010500 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SACK_PERMIT_HDR = 0x1010402 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_TSTAMP_HDR = 0x101080a + TCPOPT_WINDOW = 0x3 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 ) // Errors diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index e644eaf5e..e36f5178d 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -12,1550 +12,1582 @@ package unix import "syscall" const ( - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1c - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1e - AF_IPX = 0x17 - AF_ISDN = 0x1c - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x29 - AF_NATM = 0x1f - AF_NDRV = 0x1b - AF_NETBIOS = 0x21 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PPP = 0x22 - AF_PUP = 0x4 - AF_RESERVED_36 = 0x24 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_SYSTEM = 0x20 - AF_SYS_CONTROL = 0x2 - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_UTUN = 0x26 - AF_VSOCK = 0x28 - ALTWERASE = 0x200 - ATTR_BIT_MAP_COUNT = 0x5 - ATTR_CMN_ACCESSMASK = 0x20000 - ATTR_CMN_ACCTIME = 0x1000 - ATTR_CMN_ADDEDTIME = 0x10000000 - ATTR_CMN_BKUPTIME = 0x2000 - ATTR_CMN_CHGTIME = 0x800 - ATTR_CMN_CRTIME = 0x200 - ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 - ATTR_CMN_DEVID = 0x2 - ATTR_CMN_DOCUMENT_ID = 0x100000 - ATTR_CMN_ERROR = 0x20000000 - ATTR_CMN_EXTENDED_SECURITY = 0x400000 - ATTR_CMN_FILEID = 0x2000000 - ATTR_CMN_FLAGS = 0x40000 - ATTR_CMN_FNDRINFO = 0x4000 - ATTR_CMN_FSID = 0x4 - ATTR_CMN_FULLPATH = 0x8000000 - ATTR_CMN_GEN_COUNT = 0x80000 - ATTR_CMN_GRPID = 0x10000 - ATTR_CMN_GRPUUID = 0x1000000 - ATTR_CMN_MODTIME = 0x400 - ATTR_CMN_NAME = 0x1 - ATTR_CMN_NAMEDATTRCOUNT = 0x80000 - ATTR_CMN_NAMEDATTRLIST = 0x100000 - ATTR_CMN_OBJID = 0x20 - ATTR_CMN_OBJPERMANENTID = 0x40 - ATTR_CMN_OBJTAG = 0x10 - ATTR_CMN_OBJTYPE = 0x8 - ATTR_CMN_OWNERID = 0x8000 - ATTR_CMN_PARENTID = 0x4000000 - ATTR_CMN_PAROBJID = 0x80 - ATTR_CMN_RETURNED_ATTRS = 0x80000000 - ATTR_CMN_SCRIPT = 0x100 - ATTR_CMN_SETMASK = 0x51c7ff00 - ATTR_CMN_USERACCESS = 0x200000 - ATTR_CMN_UUID = 0x800000 - ATTR_CMN_VALIDMASK = 0xffffffff - ATTR_CMN_VOLSETMASK = 0x6700 - ATTR_FILE_ALLOCSIZE = 0x4 - ATTR_FILE_CLUMPSIZE = 0x10 - ATTR_FILE_DATAALLOCSIZE = 0x400 - ATTR_FILE_DATAEXTENTS = 0x800 - ATTR_FILE_DATALENGTH = 0x200 - ATTR_FILE_DEVTYPE = 0x20 - ATTR_FILE_FILETYPE = 0x40 - ATTR_FILE_FORKCOUNT = 0x80 - ATTR_FILE_FORKLIST = 0x100 - ATTR_FILE_IOBLOCKSIZE = 0x8 - ATTR_FILE_LINKCOUNT = 0x1 - ATTR_FILE_RSRCALLOCSIZE = 0x2000 - ATTR_FILE_RSRCEXTENTS = 0x4000 - ATTR_FILE_RSRCLENGTH = 0x1000 - ATTR_FILE_SETMASK = 0x20 - ATTR_FILE_TOTALSIZE = 0x2 - ATTR_FILE_VALIDMASK = 0x37ff - ATTR_VOL_ALLOCATIONCLUMP = 0x40 - ATTR_VOL_ATTRIBUTES = 0x40000000 - ATTR_VOL_CAPABILITIES = 0x20000 - ATTR_VOL_DIRCOUNT = 0x400 - ATTR_VOL_ENCODINGSUSED = 0x10000 - ATTR_VOL_FILECOUNT = 0x200 - ATTR_VOL_FSTYPE = 0x1 - ATTR_VOL_INFO = 0x80000000 - ATTR_VOL_IOBLOCKSIZE = 0x80 - ATTR_VOL_MAXOBJCOUNT = 0x800 - ATTR_VOL_MINALLOCATION = 0x20 - ATTR_VOL_MOUNTEDDEVICE = 0x8000 - ATTR_VOL_MOUNTFLAGS = 0x4000 - ATTR_VOL_MOUNTPOINT = 0x1000 - ATTR_VOL_NAME = 0x2000 - ATTR_VOL_OBJCOUNT = 0x100 - ATTR_VOL_QUOTA_SIZE = 0x10000000 - ATTR_VOL_RESERVED_SIZE = 0x20000000 - ATTR_VOL_SETMASK = 0x80002000 - ATTR_VOL_SIGNATURE = 0x2 - ATTR_VOL_SIZE = 0x4 - ATTR_VOL_SPACEAVAIL = 0x10 - ATTR_VOL_SPACEFREE = 0x8 - ATTR_VOL_UUID = 0x40000 - ATTR_VOL_VALIDMASK = 0xf007ffff - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc00c4279 - BIOCGETIF = 0x4020426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x8010427e - BIOCSETIF = 0x8020426c - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x8000 - BSDLY = 0x8000 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_MONOTONIC_RAW_APPROX = 0x5 - CLOCK_PROCESS_CPUTIME_ID = 0xc - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x10 - CLOCK_UPTIME_RAW = 0x8 - CLOCK_UPTIME_RAW_APPROX = 0x9 - CLONE_NOFOLLOW = 0x1 - CLONE_NOOWNERCOPY = 0x2 - CR0 = 0x0 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTLIOCGINFO = 0xc0644e03 - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0x10a - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_DARWIN = 0x10a - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0xf - EVFILT_FS = -0x9 - EVFILT_MACHPORT = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0x11 - EVFILT_THREADMARKER = 0x11 - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xa - EVFILT_VM = -0xc - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DISPATCH2 = 0x180 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG0 = 0x1000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_OOBAND = 0x2000 - EV_POLL = 0x1000 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EV_UDATA_SPECIFIC = 0x100 - EV_VANISHED = 0x200 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FF1 = 0x4000 - FFDLY = 0x4000 - FLUSHO = 0x800000 - FSOPT_ATTR_CMN_EXTENDED = 0x20 - FSOPT_NOFOLLOW = 0x1 - FSOPT_NOINMEMUPDATE = 0x2 - FSOPT_PACK_INVAL_ATTRS = 0x8 - FSOPT_REPORT_FULLSIZE = 0x4 - FSOPT_RETURN_REALDEV = 0x200 - F_ADDFILESIGS = 0x3d - F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 - F_ADDFILESIGS_INFO = 0x67 - F_ADDFILESIGS_RETURN = 0x61 - F_ADDFILESUPPL = 0x68 - F_ADDSIGS = 0x3b - F_ALLOCATEALL = 0x4 - F_ALLOCATECONTIG = 0x2 - F_BARRIERFSYNC = 0x55 - F_CHECK_LV = 0x62 - F_CHKCLEAN = 0x29 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x43 - F_FINDSIGS = 0x4e - F_FLUSH_DATA = 0x28 - F_FREEZE_FS = 0x35 - F_FULLFSYNC = 0x33 - F_GETCODEDIR = 0x48 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETLKPID = 0x42 - F_GETNOSIGPIPE = 0x4a - F_GETOWN = 0x5 - F_GETPATH = 0x32 - F_GETPATH_MTMINFO = 0x47 - F_GETPATH_NOFIRMLINK = 0x66 - F_GETPROTECTIONCLASS = 0x3f - F_GETPROTECTIONLEVEL = 0x4d - F_GETSIGSINFO = 0x69 - F_GLOBAL_NOCACHE = 0x37 - F_LOG2PHYS = 0x31 - F_LOG2PHYS_EXT = 0x41 - F_NOCACHE = 0x30 - F_NODIRECT = 0x3e - F_OK = 0x0 - F_PATHPKG_CHECK = 0x34 - F_PEOFPOSMODE = 0x3 - F_PREALLOCATE = 0x2a - F_PUNCHHOLE = 0x63 - F_RDADVISE = 0x2c - F_RDAHEAD = 0x2d - F_RDLCK = 0x1 - F_SETBACKINGSTORE = 0x46 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETLKWTIMEOUT = 0xa - F_SETNOSIGPIPE = 0x49 - F_SETOWN = 0x6 - F_SETPROTECTIONCLASS = 0x40 - F_SETSIZE = 0x2b - F_SINGLE_WRITER = 0x4c - F_SPECULATIVE_READ = 0x65 - F_THAW_FS = 0x36 - F_TRANSCODEKEY = 0x4b - F_TRIM_ACTIVE_FILE = 0x64 - F_UNLCK = 0x2 - F_VOLPOSMODE = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_6LOWPAN = 0x40 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_CELLULAR = 0xff - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FAITH = 0x38 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIF = 0x37 - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IEEE1394 = 0x90 - IFT_IEEE8023ADLAG = 0x88 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_L2VLAN = 0x87 - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PDP = 0xff - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PKTAP = 0xfe - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_STF = 0x39 - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LINKLOCALNETNUM = 0xa9fe0000 - IN_LOOPBACKNET = 0x7f - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_2292DSTOPTS = 0x17 - IPV6_2292HOPLIMIT = 0x14 - IPV6_2292HOPOPTS = 0x16 - IPV6_2292NEXTHOP = 0x15 - IPV6_2292PKTINFO = 0x13 - IPV6_2292PKTOPTIONS = 0x19 - IPV6_2292RTHDR = 0x18 - IPV6_3542DSTOPTS = 0x32 - IPV6_3542HOPLIMIT = 0x2f - IPV6_3542HOPOPTS = 0x31 - IPV6_3542NEXTHOP = 0x30 - IPV6_3542PKTINFO = 0x2e - IPV6_3542RTHDR = 0x33 - IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 - IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 - IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDV6ONLY = 0x1b - IPV6_BOUND_IF = 0x7d - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOW_ECN_MASK = 0x3000 - IPV6_FRAGTTL = 0x3c - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x3d - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x23 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x39 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x24 - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BLOCK_SOURCE = 0x48 - IP_BOUND_IF = 0x19 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x1c - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW_ADD = 0x28 - IP_FW_DEL = 0x29 - IP_FW_FLUSH = 0x2a - IP_FW_GET = 0x2c - IP_FW_RESETLOG = 0x2d - IP_FW_ZERO = 0x2b - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_IFINDEX = 0x42 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_NAT__XXX = 0x37 - IP_OFFMASK = 0x1fff - IP_OLD_FW_ADD = 0x32 - IP_OLD_FW_DEL = 0x33 - IP_OLD_FW_FLUSH = 0x34 - IP_OLD_FW_GET = 0x36 - IP_OLD_FW_RESETLOG = 0x38 - IP_OLD_FW_ZERO = 0x35 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x1b - IP_RECVTTL = 0x18 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_STRIPHDR = 0x17 - IP_TOS = 0x3 - IP_TRAFFIC_MGT_BACKGROUND = 0x41 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCAL_PEERCRED = 0x1 - LOCAL_PEEREPID = 0x3 - LOCAL_PEEREUUID = 0x5 - LOCAL_PEERPID = 0x2 - LOCAL_PEERTOKEN = 0x6 - LOCAL_PEERUUID = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_CAN_REUSE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_FREE_REUSABLE = 0x7 - MADV_FREE_REUSE = 0x8 - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MADV_ZERO_WIRED_PAGES = 0x6 - MAP_32BIT = 0x8000 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_JIT = 0x800 - MAP_NOCACHE = 0x400 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESILIENT_CODESIGN = 0x2000 - MAP_RESILIENT_MEDIA = 0x4000 - MAP_SHARED = 0x1 - MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 - MAP_UNIX03 = 0x40000 - MCAST_BLOCK_SOURCE = 0x54 - MCAST_EXCLUDE = 0x2 - MCAST_INCLUDE = 0x1 - MCAST_JOIN_GROUP = 0x50 - MCAST_JOIN_SOURCE_GROUP = 0x52 - MCAST_LEAVE_GROUP = 0x51 - MCAST_LEAVE_SOURCE_GROUP = 0x53 - MCAST_UNBLOCK_SOURCE = 0x55 - MCAST_UNDEFINED = 0x0 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x400000 - MNT_CMDFLAGS = 0xf0000 - MNT_CPROTECT = 0x80 - MNT_DEFWRITE = 0x2000000 - MNT_DONTBROWSE = 0x100000 - MNT_DOVOLFS = 0x8000 - MNT_DWAIT = 0x4 - MNT_EXPORTED = 0x100 - MNT_EXT_ROOT_DATA_VOL = 0x1 - MNT_FORCE = 0x80000 - MNT_IGNORE_OWNERSHIP = 0x200000 - MNT_JOURNALED = 0x800000 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NOATIME = 0x10000000 - MNT_NOBLOCK = 0x20000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOUSERXATTR = 0x1000000 - MNT_NOWAIT = 0x2 - MNT_QUARANTINE = 0x400 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_REMOVABLE = 0x200 - MNT_ROOTFS = 0x4000 - MNT_SNAPSHOT = 0x40000000 - MNT_STRICTATIME = 0x80000000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNKNOWNPERMISSIONS = 0x200000 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0xd7f0f7ff - MNT_WAIT = 0x1 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FLUSH = 0x400 - MSG_HAVEMORE = 0x2000 - MSG_HOLD = 0x800 - MSG_NEEDSA = 0x10000 - MSG_NOSIGNAL = 0x80000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_RCVMORE = 0x4000 - MSG_SEND = 0x1000 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITSTREAM = 0x200 - MS_ASYNC = 0x1 - MS_DEACTIVATE = 0x8 - MS_INVALIDATE = 0x2 - MS_KILLPAGES = 0x4 - MS_SYNC = 0x10 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_DUMP2 = 0x7 - NET_RT_FLAGS = 0x2 - NET_RT_FLAGS_PRIV = 0xa - NET_RT_IFLIST = 0x3 - NET_RT_IFLIST2 = 0x6 - NET_RT_MAXID = 0xb - NET_RT_STAT = 0x4 - NET_RT_TRASH = 0x5 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x100 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSOLUTE = 0x8 - NOTE_ATTRIB = 0x8 - NOTE_BACKGROUND = 0x40 - NOTE_CHILD = 0x4 - NOTE_CRITICAL = 0x20 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXITSTATUS = 0x4000000 - NOTE_EXIT_CSERROR = 0x40000 - NOTE_EXIT_DECRYPTFAIL = 0x10000 - NOTE_EXIT_DETAIL = 0x2000000 - NOTE_EXIT_DETAIL_MASK = 0x70000 - NOTE_EXIT_MEMORY = 0x20000 - NOTE_EXIT_REPARENTED = 0x80000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_FUNLOCK = 0x100 - NOTE_LEEWAY = 0x10 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MACHTIME = 0x100 - NOTE_MACH_CONTINUOUS_TIME = 0x80 - NOTE_NONE = 0x80 - NOTE_NSECONDS = 0x4 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = -0x100000 - NOTE_PDATAMASK = 0xfffff - NOTE_REAP = 0x10000000 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_SIGNAL = 0x8000000 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x2 - NOTE_VM_ERROR = 0x10000000 - NOTE_VM_PRESSURE = 0x80000000 - NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 - NOTE_VM_PRESSURE_TERMINATE = 0x40000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_ALERT = 0x20000000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x1000000 - O_CREAT = 0x200 - O_DIRECTORY = 0x100000 - O_DP_GETRAWENCRYPTED = 0x1 - O_DP_GETRAWUNENCRYPTED = 0x2 - O_DSYNC = 0x400000 - O_EVTONLY = 0x8000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x20000 - O_NOFOLLOW = 0x100 - O_NOFOLLOW_ANY = 0x20000000 - O_NONBLOCK = 0x4 - O_POPUP = 0x80000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYMLINK = 0x200000 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_ATTACH = 0xa - PT_ATTACHEXC = 0xe - PT_CONTINUE = 0x7 - PT_DENY_ATTACH = 0x1f - PT_DETACH = 0xb - PT_FIRSTMACH = 0x20 - PT_FORCEQUOTA = 0x1e - PT_KILL = 0x8 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_READ_U = 0x3 - PT_SIGEXC = 0xc - PT_STEP = 0x9 - PT_THUPDATE = 0xd - PT_TRACE_ME = 0x0 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - PT_WRITE_U = 0x6 - RLIMIT_AS = 0x5 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_CPU_USAGE_MONITOR = 0x2 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_CONDEMNED = 0x2000000 - RTF_DEAD = 0x20000000 - RTF_DELCLONE = 0x80 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_IFREF = 0x4000000 - RTF_IFSCOPE = 0x1000000 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_NOIFREF = 0x2000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_PROXY = 0x8000000 - RTF_REJECT = 0x8 - RTF_ROUTER = 0x10000000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_GET2 = 0x14 - RTM_IFINFO = 0xe - RTM_IFINFO2 = 0x12 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_NEWMADDR2 = 0x13 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIMESTAMP_MONOTONIC = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCARPIPLL = 0xc0206928 - SIOCATMARK = 0x40047307 - SIOCAUTOADDR = 0xc0206926 - SIOCAUTONETMASK = 0x80206927 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFPHYADDR = 0x80206941 - SIOCGDRVSPEC = 0xc028697b - SIOCGETVLAN = 0xc020697f - SIOCGHIWAT = 0x40047301 - SIOCGIF6LOWPAN = 0xc02069c5 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALTMTU = 0xc0206948 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBOND = 0xc0206947 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020695b - SIOCGIFCONF = 0xc00c6924 - SIOCGIFDEVMTU = 0xc0206944 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFFUNCTIONALTYPE = 0xc02069ad - SIOCGIFGENERIC = 0xc020693a - SIOCGIFKPI = 0xc0206987 - SIOCGIFMAC = 0xc0206982 - SIOCGIFMEDIA = 0xc02c6938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206940 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc020693f - SIOCGIFSTATUS = 0xc331693d - SIOCGIFVLAN = 0xc020697f - SIOCGIFWAKEFLAGS = 0xc0206988 - SIOCGIFXMEDIA = 0xc02c6948 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCIFCREATE = 0xc0206978 - SIOCIFCREATE2 = 0xc020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106981 - SIOCRSLVMULTI = 0xc010693b - SIOCSDRVSPEC = 0x8028697b - SIOCSETVLAN = 0x8020697e - SIOCSHIWAT = 0x80047300 - SIOCSIF6LOWPAN = 0x802069c4 - SIOCSIFADDR = 0x8020690c - SIOCSIFALTMTU = 0x80206945 - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBOND = 0x80206946 - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020695a - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFKPI = 0x80206986 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206983 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x8040693e - SIOCSIFPHYS = 0x80206936 - SIOCSIFVLAN = 0x8020697e - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_LOCAL = 0x0 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_DONTTRUNC = 0x2000 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1010 - SO_LINGER = 0x80 - SO_LINGER_SEC = 0x1080 - SO_NETSVC_MARKING_LEVEL = 0x1119 - SO_NET_SERVICE_TYPE = 0x1116 - SO_NKE = 0x1021 - SO_NOADDRERR = 0x1023 - SO_NOSIGPIPE = 0x1022 - SO_NOTIFYCONFLICT = 0x1026 - SO_NP_EXTENSIONS = 0x1083 - SO_NREAD = 0x1020 - SO_NUMRCVPKT = 0x1112 - SO_NWRITE = 0x1024 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1011 - SO_RANDOMPORT = 0x1082 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSESHAREUID = 0x1025 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TIMESTAMP_MONOTONIC = 0x800 - SO_TYPE = 0x1008 - SO_UPCALLCLOSEWAIT = 0x1027 - SO_USELOOPBACK = 0x40 - SO_WANTMORE = 0x4000 - SO_WANTOOBFLAG = 0x8000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0x4 - TABDLY = 0xc04 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_CONNECTIONTIMEOUT = 0x20 - TCP_CONNECTION_INFO = 0x106 - TCP_ENABLE_ECN = 0x104 - TCP_FASTOPEN = 0x105 - TCP_KEEPALIVE = 0x10 - TCP_KEEPCNT = 0x102 - TCP_KEEPINTVL = 0x101 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0xd8 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NOTSENT_LOWAT = 0x201 - TCP_RXT_CONNDROPTIME = 0x80 - TCP_RXT_FINDROP = 0x100 - TCP_SENDMOREACKS = 0x103 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCDSIMICROCODE = 0x20007455 - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x40487413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGWINSZ = 0x40087468 - TIOCIXOFF = 0x20007480 - TIOCIXON = 0x20007481 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTYGNAME = 0x40807453 - TIOCPTYGRANT = 0x20007454 - TIOCPTYUNLK = 0x20007452 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCONS = 0x20007463 - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x80487414 - TIOCSETAF = 0x80487416 - TIOCSETAW = 0x80487415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_LOADAVG = 0x2 - VM_MACHFACTOR = 0x4 - VM_MAXID = 0x6 - VM_METER = 0x1 - VM_SWAPUSAGE = 0x5 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x10 - WCOREFLAG = 0x80 - WEXITED = 0x4 - WNOHANG = 0x1 - WNOWAIT = 0x20 - WORDSIZE = 0x40 - WSTOPPED = 0x8 - WUNTRACED = 0x2 - XATTR_CREATE = 0x2 - XATTR_NODEFAULT = 0x10 - XATTR_NOFOLLOW = 0x1 - XATTR_NOSECURITY = 0x8 - XATTR_REPLACE = 0x4 - XATTR_SHOWCOMPRESSION = 0x20 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x29 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_SYS_CONTROL = 0x2 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + AF_VSOCK = 0x28 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x51c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_SPACEUSED = 0x800000 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf087ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CLONE_NOFOLLOW = 0x1 + CLONE_NOOWNERCOPY = 0x2 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTLIOCGINFO = 0xc0644e03 + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x10a + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_DARWIN = 0x10a + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x11 + EVFILT_THREADMARKER = 0x11 + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + FSOPT_RETURN_REALDEV = 0x200 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_INFO = 0x67 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDFILESUPPL = 0x68 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPATH_NOFIRMLINK = 0x66 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GETSIGSINFO = 0x69 + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_SPECULATIVE_READ = 0x65 + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6LOWPAN = 0x40 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x400473d1 + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_3542DSTOPTS = 0x32 + IPV6_3542HOPLIMIT = 0x2f + IPV6_3542HOPOPTS = 0x31 + IPV6_3542NEXTHOP = 0x30 + IPV6_3542PKTINFO = 0x2e + IPV6_3542RTHDR = 0x33 + IPV6_ADDR_MC_FLAGS_PREFIX = 0x20 + IPV6_ADDR_MC_FLAGS_TRANSIENT = 0x10 + IPV6_ADDR_MC_FLAGS_UNICAST_BASED = 0x30 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x3000 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x3d + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x39 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x1c + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCAL_PEERCRED = 0x1 + LOCAL_PEEREPID = 0x3 + LOCAL_PEEREUUID = 0x5 + LOCAL_PEERPID = 0x2 + LOCAL_PEERTOKEN = 0x6 + LOCAL_PEERUUID = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_32BIT = 0x8000 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MAP_TRANSLATED_ALLOW_EXECUTE = 0x20000 + MAP_UNIX03 = 0x40000 + MCAST_BLOCK_SOURCE = 0x54 + MCAST_EXCLUDE = 0x2 + MCAST_INCLUDE = 0x1 + MCAST_JOIN_GROUP = 0x50 + MCAST_JOIN_SOURCE_GROUP = 0x52 + MCAST_LEAVE_GROUP = 0x51 + MCAST_LEAVE_SOURCE_GROUP = 0x53 + MCAST_UNBLOCK_SOURCE = 0x55 + MCAST_UNDEFINED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_EXT_ROOT_DATA_VOL = 0x1 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_REMOVABLE = 0x200 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x40000000 + MNT_STRICTATIME = 0x80000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xd7f0f7ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_NOSIGNAL = 0x80000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_FLAGS_PRIV = 0xa + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xb + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NFDBITS = 0x20 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACHTIME = 0x100 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NOFOLLOW_ANY = 0x20000000 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DEAD = 0x20000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_GLOBAL = 0x40000000 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SEEK_CUR = 0x1 + SEEK_DATA = 0x4 + SEEK_END = 0x2 + SEEK_HOLE = 0x3 + SEEK_SET = 0x0 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIF6LOWPAN = 0xc02069c5 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFFUNCTIONALTYPE = 0xc02069ad + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGIFXMEDIA = 0xc02c6948 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIF6LOWPAN = 0x802069c4 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_LOCAL = 0x0 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1 + SO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4 + SO_TRACKER_ATTRIBUTE_FLAGS_TRACKER = 0x2 + SO_TRACKER_TRANSPARENCY_VERSION = 0x3 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCPOPT_CC = 0xb + TCPOPT_CCECHO = 0xd + TCPOPT_CCNEW = 0xc + TCPOPT_EOL = 0x0 + TCPOPT_FASTOPEN = 0x22 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_HDR = 0x1010500 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_SACK_PERMIT_HDR = 0x1010402 + TCPOPT_SIGNATURE = 0x13 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_TSTAMP_HDR = 0x101080a + TCPOPT_WINDOW = 0x3 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 ) // Errors diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go index 9c7c5e165..440900112 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -1297,6 +1297,11 @@ const ( SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go index b265abb25..64520d312 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -1298,6 +1298,11 @@ const ( SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go index 3df99f285..99e9a0e06 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -1276,6 +1276,11 @@ const ( SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go index 218d39906..4c8377114 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go @@ -1298,6 +1298,11 @@ const ( SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 SCM_TIME_INFO = 0x7 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_SET = 0x0 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux.go index 4e4583b61..d175aae89 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -1,4 +1,4 @@ -// Code generated by mkmerge.go; DO NOT EDIT. +// Code generated by mkmerge; DO NOT EDIT. //go:build linux // +build linux @@ -116,6 +116,7 @@ const ( ARPHRD_LAPB = 0x204 ARPHRD_LOCALTLK = 0x305 ARPHRD_LOOPBACK = 0x304 + ARPHRD_MCTP = 0x122 ARPHRD_METRICOM = 0x17 ARPHRD_NETLINK = 0x338 ARPHRD_NETROM = 0x0 @@ -228,7 +229,11 @@ const ( BPF_OR = 0x40 BPF_PSEUDO_BTF_ID = 0x3 BPF_PSEUDO_CALL = 0x1 + BPF_PSEUDO_FUNC = 0x4 + BPF_PSEUDO_KFUNC_CALL = 0x2 BPF_PSEUDO_MAP_FD = 0x1 + BPF_PSEUDO_MAP_IDX = 0x5 + BPF_PSEUDO_MAP_IDX_VALUE = 0x6 BPF_PSEUDO_MAP_VALUE = 0x2 BPF_RET = 0x6 BPF_RSH = 0x70 @@ -468,6 +473,7 @@ const ( DM_DEV_WAIT = 0xc138fd08 DM_DIR = "mapper" DM_GET_TARGET_VERSION = 0xc138fd11 + DM_IMA_MEASUREMENT_FLAG = 0x80000 DM_INACTIVE_PRESENT_FLAG = 0x40 DM_INTERNAL_SUSPEND_FLAG = 0x40000 DM_IOCTL = 0xfd @@ -475,6 +481,8 @@ const ( DM_LIST_VERSIONS = 0xc138fd0d DM_MAX_TYPE_NAME = 0x10 DM_NAME_LEN = 0x80 + DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID = 0x2 + DM_NAME_LIST_FLAG_HAS_UUID = 0x1 DM_NOFLUSH_FLAG = 0x800 DM_PERSISTENT_DEV_FLAG = 0x8 DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000 @@ -494,9 +502,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2021-02-01)" + DM_VERSION_EXTRA = "-ioctl (2021-03-22)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x2c + DM_VERSION_MINOR = 0x2d DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -710,6 +718,7 @@ const ( ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 ETH_P_MAP = 0xf9 + ETH_P_MCTP = 0xfa ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 @@ -745,6 +754,21 @@ const ( ETH_P_WCCP = 0x883e ETH_P_X25 = 0x805 ETH_P_XDSA = 0xf8 + EV_ABS = 0x3 + EV_CNT = 0x20 + EV_FF = 0x15 + EV_FF_STATUS = 0x17 + EV_KEY = 0x1 + EV_LED = 0x11 + EV_MAX = 0x1f + EV_MSC = 0x4 + EV_PWR = 0x16 + EV_REL = 0x2 + EV_REP = 0x14 + EV_SND = 0x12 + EV_SW = 0x5 + EV_SYN = 0x0 + EV_VERSION = 0x10001 EXABYTE_ENABLE_NEST = 0xf0 EXT2_SUPER_MAGIC = 0xef53 EXT3_SUPER_MAGIC = 0xef53 @@ -783,9 +807,11 @@ const ( FAN_DELETE_SELF = 0x400 FAN_DENY = 0x2 FAN_ENABLE_AUDIT = 0x40 + FAN_EPIDFD = -0x2 FAN_EVENT_INFO_TYPE_DFID = 0x3 FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_PIDFD = 0x4 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_MARK_ADD = 0x1 @@ -805,6 +831,7 @@ const ( FAN_MOVE_SELF = 0x800 FAN_NOFD = -0x1 FAN_NONBLOCK = 0x2 + FAN_NOPIDFD = -0x1 FAN_ONDIR = 0x40000000 FAN_OPEN = 0x20 FAN_OPEN_EXEC = 0x1000 @@ -815,6 +842,7 @@ const ( FAN_REPORT_DIR_FID = 0x400 FAN_REPORT_FID = 0x200 FAN_REPORT_NAME = 0x800 + FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TID = 0x100 FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 @@ -981,12 +1009,6 @@ const ( HPFS_SUPER_MAGIC = 0xf995e849 HUGETLBFS_MAGIC = 0x958458f6 IBSHIFT = 0x10 - ICMPV6_FILTER = 0x1 - ICMPV6_FILTER_BLOCK = 0x1 - ICMPV6_FILTER_BLOCKOTHERS = 0x3 - ICMPV6_FILTER_PASS = 0x2 - ICMPV6_FILTER_PASSONLY = 0x4 - ICMP_FILTER = 0x1 ICRNL = 0x100 IFA_F_DADFAILED = 0x8 IFA_F_DEPRECATED = 0x20 @@ -1257,6 +1279,7 @@ const ( KEXEC_ARCH_PARISC = 0xf0000 KEXEC_ARCH_PPC = 0x140000 KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_RISCV = 0xf30000 KEXEC_ARCH_S390 = 0x160000 KEXEC_ARCH_SH = 0x2a0000 KEXEC_ARCH_X86_64 = 0x3e0000 @@ -1332,6 +1355,20 @@ const ( KEY_SPEC_THREAD_KEYRING = -0x1 KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LANDLOCK_ACCESS_FS_EXECUTE = 0x1 + LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800 + LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40 + LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80 + LANDLOCK_ACCESS_FS_MAKE_FIFO = 0x400 + LANDLOCK_ACCESS_FS_MAKE_REG = 0x100 + LANDLOCK_ACCESS_FS_MAKE_SOCK = 0x200 + LANDLOCK_ACCESS_FS_MAKE_SYM = 0x1000 + LANDLOCK_ACCESS_FS_READ_DIR = 0x8 + LANDLOCK_ACCESS_FS_READ_FILE = 0x4 + LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 + LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 + LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 + LANDLOCK_CREATE_RULESET_VERSION = 0x1 LINUX_REBOOT_CMD_CAD_OFF = 0x0 LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef LINUX_REBOOT_CMD_HALT = 0xcdef0123 @@ -1382,6 +1419,8 @@ const ( MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 MADV_PAGEOUT = 0x15 + MADV_POPULATE_READ = 0x16 + MADV_POPULATE_WRITE = 0x17 MADV_RANDOM = 0x1 MADV_REMOVE = 0x9 MADV_SEQUENTIAL = 0x2 @@ -1437,6 +1476,18 @@ const ( MNT_FORCE = 0x1 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MOUNT_ATTR_IDMAP = 0x100000 + MOUNT_ATTR_NOATIME = 0x10 + MOUNT_ATTR_NODEV = 0x4 + MOUNT_ATTR_NODIRATIME = 0x80 + MOUNT_ATTR_NOEXEC = 0x8 + MOUNT_ATTR_NOSUID = 0x2 + MOUNT_ATTR_NOSYMFOLLOW = 0x200000 + MOUNT_ATTR_RDONLY = 0x1 + MOUNT_ATTR_RELATIME = 0x0 + MOUNT_ATTR_SIZE_VER0 = 0x20 + MOUNT_ATTR_STRICTATIME = 0x20 + MOUNT_ATTR__ATIME = 0x70 MSDOS_SUPER_MAGIC = 0x4d44 MSG_BATCH = 0x40000 MSG_CMSG_CLOEXEC = 0x40000000 @@ -1566,6 +1617,59 @@ const ( NETLINK_XFRM = 0x6 NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFC_ATR_REQ_GB_MAXSIZE = 0x30 + NFC_ATR_REQ_MAXSIZE = 0x40 + NFC_ATR_RES_GB_MAXSIZE = 0x2f + NFC_ATR_RES_MAXSIZE = 0x40 + NFC_COMM_ACTIVE = 0x0 + NFC_COMM_PASSIVE = 0x1 + NFC_DEVICE_NAME_MAXSIZE = 0x8 + NFC_DIRECTION_RX = 0x0 + NFC_DIRECTION_TX = 0x1 + NFC_FIRMWARE_NAME_MAXSIZE = 0x20 + NFC_GB_MAXSIZE = 0x30 + NFC_GENL_MCAST_EVENT_NAME = "events" + NFC_GENL_NAME = "nfc" + NFC_GENL_VERSION = 0x1 + NFC_HEADER_SIZE = 0x1 + NFC_ISO15693_UID_MAXSIZE = 0x8 + NFC_LLCP_MAX_SERVICE_NAME = 0x3f + NFC_LLCP_MIUX = 0x1 + NFC_LLCP_REMOTE_LTO = 0x3 + NFC_LLCP_REMOTE_MIU = 0x2 + NFC_LLCP_REMOTE_RW = 0x4 + NFC_LLCP_RW = 0x0 + NFC_NFCID1_MAXSIZE = 0xa + NFC_NFCID2_MAXSIZE = 0x8 + NFC_NFCID3_MAXSIZE = 0xa + NFC_PROTO_FELICA = 0x3 + NFC_PROTO_FELICA_MASK = 0x8 + NFC_PROTO_ISO14443 = 0x4 + NFC_PROTO_ISO14443_B = 0x6 + NFC_PROTO_ISO14443_B_MASK = 0x40 + NFC_PROTO_ISO14443_MASK = 0x10 + NFC_PROTO_ISO15693 = 0x7 + NFC_PROTO_ISO15693_MASK = 0x80 + NFC_PROTO_JEWEL = 0x1 + NFC_PROTO_JEWEL_MASK = 0x2 + NFC_PROTO_MAX = 0x8 + NFC_PROTO_MIFARE = 0x2 + NFC_PROTO_MIFARE_MASK = 0x4 + NFC_PROTO_NFC_DEP = 0x5 + NFC_PROTO_NFC_DEP_MASK = 0x20 + NFC_RAW_HEADER_SIZE = 0x2 + NFC_RF_INITIATOR = 0x0 + NFC_RF_NONE = 0x2 + NFC_RF_TARGET = 0x1 + NFC_SENSB_RES_MAXSIZE = 0xc + NFC_SENSF_RES_MAXSIZE = 0x12 + NFC_SE_DISABLED = 0x0 + NFC_SE_EMBEDDED = 0x2 + NFC_SE_ENABLED = 0x1 + NFC_SE_UICC = 0x1 + NFC_SOCKPROTO_LLCP = 0x1 + NFC_SOCKPROTO_MAX = 0x2 + NFC_SOCKPROTO_RAW = 0x0 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 NFNLGRP_CONNTRACK_DESTROY = 0x3 @@ -1583,11 +1687,12 @@ const ( NFNL_MSG_BATCH_END = 0x11 NFNL_NFA_NEST = 0x8000 NFNL_SUBSYS_ACCT = 0x7 - NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_COUNT = 0xd NFNL_SUBSYS_CTHELPER = 0x9 NFNL_SUBSYS_CTNETLINK = 0x1 NFNL_SUBSYS_CTNETLINK_EXP = 0x2 NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_HOOK = 0xc NFNL_SUBSYS_IPSET = 0x6 NFNL_SUBSYS_NFTABLES = 0xa NFNL_SUBSYS_NFT_COMPAT = 0xb @@ -1703,14 +1808,19 @@ const ( PERF_ATTR_SIZE_VER4 = 0x68 PERF_ATTR_SIZE_VER5 = 0x70 PERF_ATTR_SIZE_VER6 = 0x78 + PERF_ATTR_SIZE_VER7 = 0x80 PERF_AUX_FLAG_COLLISION = 0x8 + PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 + PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 PERF_AUX_FLAG_OVERWRITE = 0x2 PERF_AUX_FLAG_PARTIAL = 0x4 + PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00 PERF_AUX_FLAG_TRUNCATED = 0x1 PERF_FLAG_FD_CLOEXEC = 0x8 PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_HW_EVENT_MASK = 0xffffffff PERF_MAX_CONTEXTS_PER_STACK = 0x8 PERF_MAX_STACK_DEPTH = 0x7f PERF_MEM_BLK_ADDR = 0x4 @@ -1769,6 +1879,7 @@ const ( PERF_MEM_TLB_OS = 0x40 PERF_MEM_TLB_SHIFT = 0x1a PERF_MEM_TLB_WK = 0x20 + PERF_PMU_TYPE_SHIFT = 0x20 PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER = 0x1 PERF_RECORD_MISC_COMM_EXEC = 0x2000 PERF_RECORD_MISC_CPUMODE_MASK = 0x7 @@ -1868,7 +1979,15 @@ const ( PR_PAC_APGAKEY = 0x10 PR_PAC_APIAKEY = 0x1 PR_PAC_APIBKEY = 0x2 + PR_PAC_GET_ENABLED_KEYS = 0x3d PR_PAC_RESET_KEYS = 0x36 + PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_SCHED_CORE = 0x3e + PR_SCHED_CORE_CREATE = 0x1 + PR_SCHED_CORE_GET = 0x0 + PR_SCHED_CORE_MAX = 0x4 + PR_SCHED_CORE_SHARE_FROM = 0x3 + PR_SCHED_CORE_SHARE_TO = 0x2 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -1912,6 +2031,7 @@ const ( PR_SPEC_ENABLE = 0x2 PR_SPEC_FORCE_DISABLE = 0x8 PR_SPEC_INDIRECT_BRANCH = 0x1 + PR_SPEC_L1D_FLUSH = 0x2 PR_SPEC_NOT_AFFECTED = 0x0 PR_SPEC_PRCTL = 0x1 PR_SPEC_STORE_BYPASS = 0x0 @@ -1950,6 +2070,7 @@ const ( PTRACE_GETREGSET = 0x4204 PTRACE_GETSIGINFO = 0x4202 PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_RSEQ_CONFIGURATION = 0x420f PTRACE_GET_SYSCALL_INFO = 0x420e PTRACE_INTERRUPT = 0x4207 PTRACE_KILL = 0x8 @@ -1991,6 +2112,11 @@ const ( QNX4_SUPER_MAGIC = 0x2f QNX6_SUPER_MAGIC = 0x68191122 RAMFS_MAGIC = 0x858458f6 + RAW_PAYLOAD_DIGITAL = 0x3 + RAW_PAYLOAD_HCI = 0x2 + RAW_PAYLOAD_LLCP = 0x0 + RAW_PAYLOAD_NCI = 0x1 + RAW_PAYLOAD_PROPRIETARY = 0x4 RDTGROUP_SUPER_MAGIC = 0x7655821 REISERFS_SUPER_MAGIC = 0x52654973 RENAME_EXCHANGE = 0x2 @@ -2105,6 +2231,7 @@ const ( RTM_DELNEIGH = 0x1d RTM_DELNETCONF = 0x51 RTM_DELNEXTHOP = 0x69 + RTM_DELNEXTHOPBUCKET = 0x75 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -2135,6 +2262,7 @@ const ( RTM_GETNEIGHTBL = 0x42 RTM_GETNETCONF = 0x52 RTM_GETNEXTHOP = 0x6a + RTM_GETNEXTHOPBUCKET = 0x76 RTM_GETNSID = 0x5a RTM_GETQDISC = 0x26 RTM_GETROUTE = 0x1a @@ -2143,7 +2271,7 @@ const ( RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e RTM_GETVLAN = 0x72 - RTM_MAX = 0x73 + RTM_MAX = 0x77 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 @@ -2157,6 +2285,7 @@ const ( RTM_NEWNEIGHTBL = 0x40 RTM_NEWNETCONF = 0x50 RTM_NEWNEXTHOP = 0x68 + RTM_NEWNEXTHOPBUCKET = 0x74 RTM_NEWNSID = 0x58 RTM_NEWNVLAN = 0x70 RTM_NEWPREFIX = 0x34 @@ -2166,8 +2295,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x19 - RTM_NR_MSGTYPES = 0x64 + RTM_NR_FAMILIES = 0x1a + RTM_NR_MSGTYPES = 0x68 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -2195,6 +2324,7 @@ const ( RTPROT_MROUTED = 0x11 RTPROT_MRT = 0xa RTPROT_NTK = 0xf + RTPROT_OPENR = 0x63 RTPROT_OSPF = 0xbc RTPROT_RA = 0x9 RTPROT_REDIRECT = 0x1 @@ -2225,7 +2355,14 @@ const ( SECCOMP_MODE_DISABLED = 0x0 SECCOMP_MODE_FILTER = 0x2 SECCOMP_MODE_STRICT = 0x1 + SECRETMEM_MAGIC = 0x5345434d SECURITYFS_MAGIC = 0x73636673 + SEEK_CUR = 0x1 + SEEK_DATA = 0x3 + SEEK_END = 0x2 + SEEK_HOLE = 0x4 + SEEK_MAX = 0x4 + SEEK_SET = 0x0 SELINUX_MAGIC = 0xf97cff8c SHUT_RD = 0x0 SHUT_RDWR = 0x2 @@ -2330,12 +2467,15 @@ const ( SMART_WRITE_THRESHOLDS = 0xd7 SMB_SUPER_MAGIC = 0x517b SOCKFS_MAGIC = 0x534f434b + SOCK_BUF_LOCK_MASK = 0x3 SOCK_DCCP = 0x6 SOCK_IOC_TYPE = 0x89 SOCK_PACKET = 0xa SOCK_RAW = 0x3 + SOCK_RCVBUF_LOCK = 0x2 SOCK_RDM = 0x4 SOCK_SEQPACKET = 0x5 + SOCK_SNDBUF_LOCK = 0x1 SOL_AAL = 0x109 SOL_ALG = 0x117 SOL_ATM = 0x108 @@ -2472,6 +2612,14 @@ const ( TCOFLUSH = 0x1 TCOOFF = 0x0 TCOON = 0x1 + TCPOPT_EOL = 0x0 + TCPOPT_MAXSEG = 0x2 + TCPOPT_NOP = 0x1 + TCPOPT_SACK = 0x5 + TCPOPT_SACK_PERMITTED = 0x4 + TCPOPT_TIMESTAMP = 0x8 + TCPOPT_TSTAMP_HDR = 0x101080a + TCPOPT_WINDOW = 0x3 TCP_CC_INFO = 0x1a TCP_CM_INQ = 0x24 TCP_CONGESTION = 0xd diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 09fc559ed..3ca40ca7f 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -5,7 +5,7 @@ // +build 386,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/_const.go package unix @@ -147,6 +147,7 @@ const ( NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x400c4d19 OTPGETREGIONCOUNT = 0x40044d0e OTPGETREGIONINFO = 0x400c4d0f OTPLOCK = 0x800c4d10 @@ -292,6 +293,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -308,6 +310,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 75730cc22..ead332091 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -5,7 +5,7 @@ // +build amd64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/_const.go package unix @@ -147,6 +147,7 @@ const ( NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x400c4d19 OTPGETREGIONCOUNT = 0x40044d0e OTPGETREGIONINFO = 0x400c4d0f OTPLOCK = 0x800c4d10 @@ -293,6 +294,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -309,6 +311,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 127cf17ad..39bdc9455 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -5,7 +5,7 @@ // +build arm,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x400c4d19 OTPGETREGIONCOUNT = 0x40044d0e OTPGETREGIONINFO = 0x400c4d0f OTPLOCK = 0x800c4d10 @@ -299,6 +300,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -315,6 +317,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 957ca1ff1..9aec987db 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -5,7 +5,7 @@ // +build arm64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go package unix @@ -148,6 +148,7 @@ const ( NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x400c4d19 OTPGETREGIONCOUNT = 0x40044d0e OTPGETREGIONINFO = 0x400c4d0f OTPLOCK = 0x800c4d10 @@ -289,6 +290,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -305,6 +307,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 314a2054f..a8bba9491 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -5,7 +5,7 @@ // +build mips,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -292,6 +293,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -308,6 +310,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 457e8de97..ee9e7e202 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -5,7 +5,7 @@ // +build mips64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -292,6 +293,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -308,6 +310,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 33cd28f6b..ba4b288a3 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -5,7 +5,7 @@ // +build mips64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -292,6 +293,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -308,6 +310,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 0e085ba14..bc93afc36 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -5,7 +5,7 @@ // +build mipsle,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -292,6 +293,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -308,6 +310,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 1b5928cff..9295e6947 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -5,7 +5,7 @@ // +build ppc,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -147,6 +147,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -347,6 +348,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -363,6 +365,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index f3a41d6ec..1fa081c9a 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -5,7 +5,7 @@ // +build ppc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -147,6 +147,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -351,6 +352,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -367,6 +369,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 6a5a555d5..74b321149 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -5,7 +5,7 @@ // +build ppc64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -147,6 +147,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -351,6 +352,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -367,6 +369,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index a4da67edb..c91c8ac5b 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -5,7 +5,7 @@ // +build riscv64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x400c4d19 OTPGETREGIONCOUNT = 0x40044d0e OTPGETREGIONINFO = 0x400c4d0f OTPLOCK = 0x800c4d10 @@ -280,6 +281,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -296,6 +298,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index a7028e0ef..b66bf2228 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -5,7 +5,7 @@ // +build s390x,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go package unix @@ -145,6 +145,7 @@ const ( NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x400c4d19 OTPGETREGIONCOUNT = 0x40044d0e OTPGETREGIONINFO = 0x400c4d0f OTPLOCK = 0x800c4d10 @@ -355,6 +356,7 @@ const ( SO_BPF_EXTENSIONS = 0x30 SO_BROADCAST = 0x6 SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 SO_BUSY_POLL = 0x2e SO_BUSY_POLL_BUDGET = 0x46 SO_CNX_ADVICE = 0x35 @@ -371,6 +373,7 @@ const ( SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 SO_NOFCS = 0x2b SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index ed3b3286c..f7fb149b0 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -5,7 +5,7 @@ // +build sparc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go package unix @@ -150,6 +150,7 @@ const ( NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 + OTPERASE = 0x800c4d19 OTPGETREGIONCOUNT = 0x80044d0e OTPGETREGIONINFO = 0x800c4d0f OTPLOCK = 0x400c4d10 @@ -346,6 +347,7 @@ const ( SO_BPF_EXTENSIONS = 0x32 SO_BROADCAST = 0x20 SO_BSDCOMPAT = 0x400 + SO_BUF_LOCK = 0x51 SO_BUSY_POLL = 0x30 SO_BUSY_POLL_BUDGET = 0x49 SO_CNX_ADVICE = 0x37 @@ -362,6 +364,7 @@ const ( SO_MARK = 0x22 SO_MAX_PACING_RATE = 0x31 SO_MEMINFO = 0x39 + SO_NETNS_COOKIE = 0x50 SO_NOFCS = 0x27 SO_OOBINLINE = 0x100 SO_PASSCRED = 0x2 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go index 593cc0fef..6d56edc05 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -1020,7 +1020,10 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 diff --git a/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go index a4e4c2231..aef6c0856 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go @@ -1020,7 +1020,10 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go index 91a23cc72..85e0cc386 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -17,6 +17,7 @@ int getdirent(int, uintptr_t, size_t); int wait4(int, uintptr_t, int, uintptr_t); int ioctl(int, int, uintptr_t); int fcntl(uintptr_t, int, uintptr_t); +int fsync_range(int, int, long long, long long); int acct(uintptr_t); int chdir(uintptr_t); int chroot(uintptr_t); @@ -29,7 +30,6 @@ int fchmod(int, unsigned int); int fchmodat(int, uintptr_t, unsigned int, int); int fchownat(int, uintptr_t, int, int, int); int fdatasync(int); -int fsync(int); int getpgid(int); int getpgrp(); int getpid(); @@ -255,6 +255,16 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fsyncRange(fd int, how int, start int64, length int64) (err error) { + r0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Acct(path string) (err error) { _p0 := uintptr(unsafe.Pointer(C.CString(path))) r0, er := C.acct(C.uintptr_t(_p0)) @@ -379,16 +389,6 @@ func Fdatasync(fd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fsync(fd int) (err error) { - r0, er := C.fsync(C.int(fd)) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getpgid(pid int) (pgid int, err error) { r0, er := C.getpgid(C.int(pid)) pgid = int(r0) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go index 33c2609b8..f1d4a73b0 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -135,6 +135,16 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fsyncRange(fd int, how int, start int64, length int64) (err error) { + _, e1 := callfsync_range(fd, how, start, length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Acct(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -283,16 +293,6 @@ func Fdatasync(fd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fsync(fd int) (err error) { - _, e1 := callfsync(fd) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getpgid(pid int) (pgid int, err error) { r0, e1 := callgetpgid(pid) pgid = int(r0) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go index 8b737fa97..2caa5adf9 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go @@ -18,6 +18,7 @@ import ( //go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o" //go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o" //go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fsync_range fsync_range "libc.a/shr_64.o" //go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o" //go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o" //go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o" @@ -30,7 +31,6 @@ import ( //go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o" //go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o" //go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_fsync fsync "libc.a/shr_64.o" //go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o" //go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o" //go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o" @@ -136,6 +136,7 @@ import ( //go:linkname libc_wait4 libc_wait4 //go:linkname libc_ioctl libc_ioctl //go:linkname libc_fcntl libc_fcntl +//go:linkname libc_fsync_range libc_fsync_range //go:linkname libc_acct libc_acct //go:linkname libc_chdir libc_chdir //go:linkname libc_chroot libc_chroot @@ -148,7 +149,6 @@ import ( //go:linkname libc_fchmodat libc_fchmodat //go:linkname libc_fchownat libc_fchownat //go:linkname libc_fdatasync libc_fdatasync -//go:linkname libc_fsync libc_fsync //go:linkname libc_getpgid libc_getpgid //go:linkname libc_getpgrp libc_getpgrp //go:linkname libc_getpid libc_getpid @@ -257,6 +257,7 @@ var ( libc_wait4, libc_ioctl, libc_fcntl, + libc_fsync_range, libc_acct, libc_chdir, libc_chroot, @@ -269,7 +270,6 @@ var ( libc_fchmodat, libc_fchownat, libc_fdatasync, - libc_fsync, libc_getpgid, libc_getpgrp, libc_getpid, @@ -430,6 +430,13 @@ func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0) return @@ -514,13 +521,6 @@ func callfdatasync(fd int) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callfsync(fd int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func callgetpgid(pid int) (r1 uintptr, e1 Errno) { r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) return diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go index 3c260917e..944a714b1 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go @@ -16,6 +16,7 @@ int getdirent(int, uintptr_t, size_t); int wait4(int, uintptr_t, int, uintptr_t); int ioctl(int, int, uintptr_t); int fcntl(uintptr_t, int, uintptr_t); +int fsync_range(int, int, long long, long long); int acct(uintptr_t); int chdir(uintptr_t); int chroot(uintptr_t); @@ -28,7 +29,6 @@ int fchmod(int, unsigned int); int fchmodat(int, uintptr_t, unsigned int, int); int fchownat(int, uintptr_t, int, int, int); int fdatasync(int); -int fsync(int); int getpgid(int); int getpgrp(); int getpid(); @@ -199,6 +199,14 @@ func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { r1 = uintptr(C.acct(C.uintptr_t(_p0))) e1 = syscall.GetErrno() @@ -295,14 +303,6 @@ func callfdatasync(fd int) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callfsync(fd int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.fsync(C.int(fd))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func callgetpgid(pid int) (r1 uintptr, e1 Errno) { r1 = uintptr(C.getpgid(C.int(pid))) e1 = syscall.GetErrno() diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index d4efe8d45..0ae0ed4cb 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -734,6 +734,65 @@ var libc_sendfile_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + result = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmdt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag)) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmget_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index bc169c2ab..eac6ca806 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -264,6 +264,30 @@ TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) +TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmat(SB) + +GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) + +TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmctl(SB) + +GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) + +TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmdt(SB) + +GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) + +TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmget(SB) + +GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) + TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_access(SB) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index f2ee2bd33..cf71be3ed 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -734,6 +734,65 @@ var libc_sendfile_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + r0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmat shmat "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + r0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + result = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmctl shmctl "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + _, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmdt_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmdt shmdt "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + r0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag)) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_shmget_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_shmget shmget "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 33e19776d..4ebcf2175 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -264,6 +264,30 @@ TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) +TEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmat(SB) + +GLOBL ·libc_shmat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB) + +TEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmctl(SB) + +GLOBL ·libc_shmctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB) + +TEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmdt(SB) + +GLOBL ·libc_shmdt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB) + +TEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_shmget(SB) + +GLOBL ·libc_shmget_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB) + TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_access(SB) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 7305cc915..93edda4c4 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1,4 +1,4 @@ -// Code generated by mkmerge.go; DO NOT EDIT. +// Code generated by mkmerge; DO NOT EDIT. //go:build linux // +build linux @@ -48,6 +48,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(oldpath) @@ -100,6 +110,16 @@ func openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err e // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -389,6 +409,21 @@ func mount(source string, target string, fstype string, flags uintptr, data *byt // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Acct(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1201,7 +1236,7 @@ func PivotRoot(newroot string, putold string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { +func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) if e1 != 0 { err = errnoErr(e1) @@ -1935,8 +1970,63 @@ func ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags u // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) +func PidfdOpen(pid int, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + r0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + result = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + _, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + r0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag)) + id = int(r0) if e1 != 0 { err = errnoErr(e1) } diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index e37096e4d..ff90c81e7 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -46,37 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -181,17 +150,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -566,14 +524,3 @@ func utimes(path string, times *[2]Timeval) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 9919d8486..fa7d3dbe4 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -191,17 +170,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func inotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -711,27 +679,6 @@ func utimes(path string, times *[2]Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(cmdline) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index 076754d48..654f91530 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -46,16 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) @@ -235,27 +225,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -340,17 +309,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Lchown(path string, uid int, gid int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -681,17 +639,6 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32)) if e1 != 0 { diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index 4703cf3c3..6d1552885 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -544,17 +523,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -706,18 +674,6 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe() (p1 int, p2 int, err error) { - r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) - p1 = int(r0) - p2 = int(r1) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) xaddr = uintptr(r0) @@ -746,14 +702,3 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index a134f9a4d..1e20d72df 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -717,14 +696,3 @@ func stat(path string, st *stat_t) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index b1fff2d94..82b5e2d9e 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -717,14 +696,3 @@ func stat(path string, st *stat_t) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index d13d6da01..a0440c1d4 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -544,17 +523,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -706,18 +674,6 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe() (p1 int, p2 int, err error) { - r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) - p1 = int(r0) - p2 = int(r1) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) xaddr = uintptr(r0) @@ -746,14 +702,3 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go index 927cf1a00..5864b9ca6 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -161,17 +140,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -717,27 +685,6 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n)) if e1 != 0 { diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index da8ec0396..beeb49e34 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -191,17 +170,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -763,27 +731,6 @@ func utimes(path string, times *[2]Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) if e1 != 0 { diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index 083f493bb..53139b82c 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -191,17 +170,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Ioperm(from int, num int, on int) (err error) { _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) if e1 != 0 { @@ -763,27 +731,6 @@ func utimes(path string, times *[2]Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) if e1 != 0 { diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index bb347407d..202add37d 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -46,27 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func EpollCreate(size int) (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -191,17 +170,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Lchown(path string, uid int, gid int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -553,17 +521,6 @@ func utimes(path string, times *[2]Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(cmdline) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 8edc517e1..2ab268c34 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -73,16 +73,6 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func dup2(oldfd int, newfd int) (err error) { - _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -180,17 +170,6 @@ func Getuid() (uid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func InotifyInit() (fd int, err error) { - r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Lchown(path string, uid int, gid int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -718,24 +697,3 @@ func utimes(path string, times *[2]Timeval) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]_C_int) (err error) { - _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 4e18d5c99..b5f926cee 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -141,6 +141,11 @@ import ( //go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_port_create port_create "libc.so" +//go:cgo_import_dynamic libc_port_associate port_associate "libc.so" +//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" +//go:cgo_import_dynamic libc_port_get port_get "libc.so" +//go:cgo_import_dynamic libc_port_getn port_getn "libc.so" //go:linkname procpipe libc_pipe //go:linkname procpipe2 libc_pipe2 @@ -272,6 +277,11 @@ import ( //go:linkname procgetpeername libc_getpeername //go:linkname procsetsockopt libc_setsockopt //go:linkname procrecvfrom libc_recvfrom +//go:linkname procport_create libc_port_create +//go:linkname procport_associate libc_port_associate +//go:linkname procport_dissociate libc_port_dissociate +//go:linkname procport_get libc_port_get +//go:linkname procport_getn libc_port_getn var ( procpipe, @@ -403,7 +413,12 @@ var ( proc__xnet_getsockopt, procgetpeername, procsetsockopt, - procrecvfrom syscallFunc + procrecvfrom, + procport_create, + procport_associate, + procport_dissociate, + procport_get, + procport_getn syscallFunc ) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1981,3 +1996,58 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_create() (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_dissociate(port int, source int, object uintptr) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index fbc59b7fd..31847d230 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -439,4 +439,10 @@ const ( SYS_PROCESS_MADVISE = 440 SYS_EPOLL_PWAIT2 = 441 SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 04d16d771..3503cbbde 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -7,358 +7,364 @@ package unix const ( - SYS_READ = 0 - SYS_WRITE = 1 - SYS_OPEN = 2 - SYS_CLOSE = 3 - SYS_STAT = 4 - SYS_FSTAT = 5 - SYS_LSTAT = 6 - SYS_POLL = 7 - SYS_LSEEK = 8 - SYS_MMAP = 9 - SYS_MPROTECT = 10 - SYS_MUNMAP = 11 - SYS_BRK = 12 - SYS_RT_SIGACTION = 13 - SYS_RT_SIGPROCMASK = 14 - SYS_RT_SIGRETURN = 15 - SYS_IOCTL = 16 - SYS_PREAD64 = 17 - SYS_PWRITE64 = 18 - SYS_READV = 19 - SYS_WRITEV = 20 - SYS_ACCESS = 21 - SYS_PIPE = 22 - SYS_SELECT = 23 - SYS_SCHED_YIELD = 24 - SYS_MREMAP = 25 - SYS_MSYNC = 26 - SYS_MINCORE = 27 - SYS_MADVISE = 28 - SYS_SHMGET = 29 - SYS_SHMAT = 30 - SYS_SHMCTL = 31 - SYS_DUP = 32 - SYS_DUP2 = 33 - SYS_PAUSE = 34 - SYS_NANOSLEEP = 35 - SYS_GETITIMER = 36 - SYS_ALARM = 37 - SYS_SETITIMER = 38 - SYS_GETPID = 39 - SYS_SENDFILE = 40 - SYS_SOCKET = 41 - SYS_CONNECT = 42 - SYS_ACCEPT = 43 - SYS_SENDTO = 44 - SYS_RECVFROM = 45 - SYS_SENDMSG = 46 - SYS_RECVMSG = 47 - SYS_SHUTDOWN = 48 - SYS_BIND = 49 - SYS_LISTEN = 50 - SYS_GETSOCKNAME = 51 - SYS_GETPEERNAME = 52 - SYS_SOCKETPAIR = 53 - SYS_SETSOCKOPT = 54 - SYS_GETSOCKOPT = 55 - SYS_CLONE = 56 - SYS_FORK = 57 - SYS_VFORK = 58 - SYS_EXECVE = 59 - SYS_EXIT = 60 - SYS_WAIT4 = 61 - SYS_KILL = 62 - SYS_UNAME = 63 - SYS_SEMGET = 64 - SYS_SEMOP = 65 - SYS_SEMCTL = 66 - SYS_SHMDT = 67 - SYS_MSGGET = 68 - SYS_MSGSND = 69 - SYS_MSGRCV = 70 - SYS_MSGCTL = 71 - SYS_FCNTL = 72 - SYS_FLOCK = 73 - SYS_FSYNC = 74 - SYS_FDATASYNC = 75 - SYS_TRUNCATE = 76 - SYS_FTRUNCATE = 77 - SYS_GETDENTS = 78 - SYS_GETCWD = 79 - SYS_CHDIR = 80 - SYS_FCHDIR = 81 - SYS_RENAME = 82 - SYS_MKDIR = 83 - SYS_RMDIR = 84 - SYS_CREAT = 85 - SYS_LINK = 86 - SYS_UNLINK = 87 - SYS_SYMLINK = 88 - SYS_READLINK = 89 - SYS_CHMOD = 90 - SYS_FCHMOD = 91 - SYS_CHOWN = 92 - SYS_FCHOWN = 93 - SYS_LCHOWN = 94 - SYS_UMASK = 95 - SYS_GETTIMEOFDAY = 96 - SYS_GETRLIMIT = 97 - SYS_GETRUSAGE = 98 - SYS_SYSINFO = 99 - SYS_TIMES = 100 - SYS_PTRACE = 101 - SYS_GETUID = 102 - SYS_SYSLOG = 103 - SYS_GETGID = 104 - SYS_SETUID = 105 - SYS_SETGID = 106 - SYS_GETEUID = 107 - SYS_GETEGID = 108 - SYS_SETPGID = 109 - SYS_GETPPID = 110 - SYS_GETPGRP = 111 - SYS_SETSID = 112 - SYS_SETREUID = 113 - SYS_SETREGID = 114 - SYS_GETGROUPS = 115 - SYS_SETGROUPS = 116 - SYS_SETRESUID = 117 - SYS_GETRESUID = 118 - SYS_SETRESGID = 119 - SYS_GETRESGID = 120 - SYS_GETPGID = 121 - SYS_SETFSUID = 122 - SYS_SETFSGID = 123 - SYS_GETSID = 124 - SYS_CAPGET = 125 - SYS_CAPSET = 126 - SYS_RT_SIGPENDING = 127 - SYS_RT_SIGTIMEDWAIT = 128 - SYS_RT_SIGQUEUEINFO = 129 - SYS_RT_SIGSUSPEND = 130 - SYS_SIGALTSTACK = 131 - SYS_UTIME = 132 - SYS_MKNOD = 133 - SYS_USELIB = 134 - SYS_PERSONALITY = 135 - SYS_USTAT = 136 - SYS_STATFS = 137 - SYS_FSTATFS = 138 - SYS_SYSFS = 139 - SYS_GETPRIORITY = 140 - SYS_SETPRIORITY = 141 - SYS_SCHED_SETPARAM = 142 - SYS_SCHED_GETPARAM = 143 - SYS_SCHED_SETSCHEDULER = 144 - SYS_SCHED_GETSCHEDULER = 145 - SYS_SCHED_GET_PRIORITY_MAX = 146 - SYS_SCHED_GET_PRIORITY_MIN = 147 - SYS_SCHED_RR_GET_INTERVAL = 148 - SYS_MLOCK = 149 - SYS_MUNLOCK = 150 - SYS_MLOCKALL = 151 - SYS_MUNLOCKALL = 152 - SYS_VHANGUP = 153 - SYS_MODIFY_LDT = 154 - SYS_PIVOT_ROOT = 155 - SYS__SYSCTL = 156 - SYS_PRCTL = 157 - SYS_ARCH_PRCTL = 158 - SYS_ADJTIMEX = 159 - SYS_SETRLIMIT = 160 - SYS_CHROOT = 161 - SYS_SYNC = 162 - SYS_ACCT = 163 - SYS_SETTIMEOFDAY = 164 - SYS_MOUNT = 165 - SYS_UMOUNT2 = 166 - SYS_SWAPON = 167 - SYS_SWAPOFF = 168 - SYS_REBOOT = 169 - SYS_SETHOSTNAME = 170 - SYS_SETDOMAINNAME = 171 - SYS_IOPL = 172 - SYS_IOPERM = 173 - SYS_CREATE_MODULE = 174 - SYS_INIT_MODULE = 175 - SYS_DELETE_MODULE = 176 - SYS_GET_KERNEL_SYMS = 177 - SYS_QUERY_MODULE = 178 - SYS_QUOTACTL = 179 - SYS_NFSSERVCTL = 180 - SYS_GETPMSG = 181 - SYS_PUTPMSG = 182 - SYS_AFS_SYSCALL = 183 - SYS_TUXCALL = 184 - SYS_SECURITY = 185 - SYS_GETTID = 186 - SYS_READAHEAD = 187 - SYS_SETXATTR = 188 - SYS_LSETXATTR = 189 - SYS_FSETXATTR = 190 - SYS_GETXATTR = 191 - SYS_LGETXATTR = 192 - SYS_FGETXATTR = 193 - SYS_LISTXATTR = 194 - SYS_LLISTXATTR = 195 - SYS_FLISTXATTR = 196 - SYS_REMOVEXATTR = 197 - SYS_LREMOVEXATTR = 198 - SYS_FREMOVEXATTR = 199 - SYS_TKILL = 200 - SYS_TIME = 201 - SYS_FUTEX = 202 - SYS_SCHED_SETAFFINITY = 203 - SYS_SCHED_GETAFFINITY = 204 - SYS_SET_THREAD_AREA = 205 - SYS_IO_SETUP = 206 - SYS_IO_DESTROY = 207 - SYS_IO_GETEVENTS = 208 - SYS_IO_SUBMIT = 209 - SYS_IO_CANCEL = 210 - SYS_GET_THREAD_AREA = 211 - SYS_LOOKUP_DCOOKIE = 212 - SYS_EPOLL_CREATE = 213 - SYS_EPOLL_CTL_OLD = 214 - SYS_EPOLL_WAIT_OLD = 215 - SYS_REMAP_FILE_PAGES = 216 - SYS_GETDENTS64 = 217 - SYS_SET_TID_ADDRESS = 218 - SYS_RESTART_SYSCALL = 219 - SYS_SEMTIMEDOP = 220 - SYS_FADVISE64 = 221 - SYS_TIMER_CREATE = 222 - SYS_TIMER_SETTIME = 223 - SYS_TIMER_GETTIME = 224 - SYS_TIMER_GETOVERRUN = 225 - SYS_TIMER_DELETE = 226 - SYS_CLOCK_SETTIME = 227 - SYS_CLOCK_GETTIME = 228 - SYS_CLOCK_GETRES = 229 - SYS_CLOCK_NANOSLEEP = 230 - SYS_EXIT_GROUP = 231 - SYS_EPOLL_WAIT = 232 - SYS_EPOLL_CTL = 233 - SYS_TGKILL = 234 - SYS_UTIMES = 235 - SYS_VSERVER = 236 - SYS_MBIND = 237 - SYS_SET_MEMPOLICY = 238 - SYS_GET_MEMPOLICY = 239 - SYS_MQ_OPEN = 240 - SYS_MQ_UNLINK = 241 - SYS_MQ_TIMEDSEND = 242 - SYS_MQ_TIMEDRECEIVE = 243 - SYS_MQ_NOTIFY = 244 - SYS_MQ_GETSETATTR = 245 - SYS_KEXEC_LOAD = 246 - SYS_WAITID = 247 - SYS_ADD_KEY = 248 - SYS_REQUEST_KEY = 249 - SYS_KEYCTL = 250 - SYS_IOPRIO_SET = 251 - SYS_IOPRIO_GET = 252 - SYS_INOTIFY_INIT = 253 - SYS_INOTIFY_ADD_WATCH = 254 - SYS_INOTIFY_RM_WATCH = 255 - SYS_MIGRATE_PAGES = 256 - SYS_OPENAT = 257 - SYS_MKDIRAT = 258 - SYS_MKNODAT = 259 - SYS_FCHOWNAT = 260 - SYS_FUTIMESAT = 261 - SYS_NEWFSTATAT = 262 - SYS_UNLINKAT = 263 - SYS_RENAMEAT = 264 - SYS_LINKAT = 265 - SYS_SYMLINKAT = 266 - SYS_READLINKAT = 267 - SYS_FCHMODAT = 268 - SYS_FACCESSAT = 269 - SYS_PSELECT6 = 270 - SYS_PPOLL = 271 - SYS_UNSHARE = 272 - SYS_SET_ROBUST_LIST = 273 - SYS_GET_ROBUST_LIST = 274 - SYS_SPLICE = 275 - SYS_TEE = 276 - SYS_SYNC_FILE_RANGE = 277 - SYS_VMSPLICE = 278 - SYS_MOVE_PAGES = 279 - SYS_UTIMENSAT = 280 - SYS_EPOLL_PWAIT = 281 - SYS_SIGNALFD = 282 - SYS_TIMERFD_CREATE = 283 - SYS_EVENTFD = 284 - SYS_FALLOCATE = 285 - SYS_TIMERFD_SETTIME = 286 - SYS_TIMERFD_GETTIME = 287 - SYS_ACCEPT4 = 288 - SYS_SIGNALFD4 = 289 - SYS_EVENTFD2 = 290 - SYS_EPOLL_CREATE1 = 291 - SYS_DUP3 = 292 - SYS_PIPE2 = 293 - SYS_INOTIFY_INIT1 = 294 - SYS_PREADV = 295 - SYS_PWRITEV = 296 - SYS_RT_TGSIGQUEUEINFO = 297 - SYS_PERF_EVENT_OPEN = 298 - SYS_RECVMMSG = 299 - SYS_FANOTIFY_INIT = 300 - SYS_FANOTIFY_MARK = 301 - SYS_PRLIMIT64 = 302 - SYS_NAME_TO_HANDLE_AT = 303 - SYS_OPEN_BY_HANDLE_AT = 304 - SYS_CLOCK_ADJTIME = 305 - SYS_SYNCFS = 306 - SYS_SENDMMSG = 307 - SYS_SETNS = 308 - SYS_GETCPU = 309 - SYS_PROCESS_VM_READV = 310 - SYS_PROCESS_VM_WRITEV = 311 - SYS_KCMP = 312 - SYS_FINIT_MODULE = 313 - SYS_SCHED_SETATTR = 314 - SYS_SCHED_GETATTR = 315 - SYS_RENAMEAT2 = 316 - SYS_SECCOMP = 317 - SYS_GETRANDOM = 318 - SYS_MEMFD_CREATE = 319 - SYS_KEXEC_FILE_LOAD = 320 - SYS_BPF = 321 - SYS_EXECVEAT = 322 - SYS_USERFAULTFD = 323 - SYS_MEMBARRIER = 324 - SYS_MLOCK2 = 325 - SYS_COPY_FILE_RANGE = 326 - SYS_PREADV2 = 327 - SYS_PWRITEV2 = 328 - SYS_PKEY_MPROTECT = 329 - SYS_PKEY_ALLOC = 330 - SYS_PKEY_FREE = 331 - SYS_STATX = 332 - SYS_IO_PGETEVENTS = 333 - SYS_RSEQ = 334 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_READ = 0 + SYS_WRITE = 1 + SYS_OPEN = 2 + SYS_CLOSE = 3 + SYS_STAT = 4 + SYS_FSTAT = 5 + SYS_LSTAT = 6 + SYS_POLL = 7 + SYS_LSEEK = 8 + SYS_MMAP = 9 + SYS_MPROTECT = 10 + SYS_MUNMAP = 11 + SYS_BRK = 12 + SYS_RT_SIGACTION = 13 + SYS_RT_SIGPROCMASK = 14 + SYS_RT_SIGRETURN = 15 + SYS_IOCTL = 16 + SYS_PREAD64 = 17 + SYS_PWRITE64 = 18 + SYS_READV = 19 + SYS_WRITEV = 20 + SYS_ACCESS = 21 + SYS_PIPE = 22 + SYS_SELECT = 23 + SYS_SCHED_YIELD = 24 + SYS_MREMAP = 25 + SYS_MSYNC = 26 + SYS_MINCORE = 27 + SYS_MADVISE = 28 + SYS_SHMGET = 29 + SYS_SHMAT = 30 + SYS_SHMCTL = 31 + SYS_DUP = 32 + SYS_DUP2 = 33 + SYS_PAUSE = 34 + SYS_NANOSLEEP = 35 + SYS_GETITIMER = 36 + SYS_ALARM = 37 + SYS_SETITIMER = 38 + SYS_GETPID = 39 + SYS_SENDFILE = 40 + SYS_SOCKET = 41 + SYS_CONNECT = 42 + SYS_ACCEPT = 43 + SYS_SENDTO = 44 + SYS_RECVFROM = 45 + SYS_SENDMSG = 46 + SYS_RECVMSG = 47 + SYS_SHUTDOWN = 48 + SYS_BIND = 49 + SYS_LISTEN = 50 + SYS_GETSOCKNAME = 51 + SYS_GETPEERNAME = 52 + SYS_SOCKETPAIR = 53 + SYS_SETSOCKOPT = 54 + SYS_GETSOCKOPT = 55 + SYS_CLONE = 56 + SYS_FORK = 57 + SYS_VFORK = 58 + SYS_EXECVE = 59 + SYS_EXIT = 60 + SYS_WAIT4 = 61 + SYS_KILL = 62 + SYS_UNAME = 63 + SYS_SEMGET = 64 + SYS_SEMOP = 65 + SYS_SEMCTL = 66 + SYS_SHMDT = 67 + SYS_MSGGET = 68 + SYS_MSGSND = 69 + SYS_MSGRCV = 70 + SYS_MSGCTL = 71 + SYS_FCNTL = 72 + SYS_FLOCK = 73 + SYS_FSYNC = 74 + SYS_FDATASYNC = 75 + SYS_TRUNCATE = 76 + SYS_FTRUNCATE = 77 + SYS_GETDENTS = 78 + SYS_GETCWD = 79 + SYS_CHDIR = 80 + SYS_FCHDIR = 81 + SYS_RENAME = 82 + SYS_MKDIR = 83 + SYS_RMDIR = 84 + SYS_CREAT = 85 + SYS_LINK = 86 + SYS_UNLINK = 87 + SYS_SYMLINK = 88 + SYS_READLINK = 89 + SYS_CHMOD = 90 + SYS_FCHMOD = 91 + SYS_CHOWN = 92 + SYS_FCHOWN = 93 + SYS_LCHOWN = 94 + SYS_UMASK = 95 + SYS_GETTIMEOFDAY = 96 + SYS_GETRLIMIT = 97 + SYS_GETRUSAGE = 98 + SYS_SYSINFO = 99 + SYS_TIMES = 100 + SYS_PTRACE = 101 + SYS_GETUID = 102 + SYS_SYSLOG = 103 + SYS_GETGID = 104 + SYS_SETUID = 105 + SYS_SETGID = 106 + SYS_GETEUID = 107 + SYS_GETEGID = 108 + SYS_SETPGID = 109 + SYS_GETPPID = 110 + SYS_GETPGRP = 111 + SYS_SETSID = 112 + SYS_SETREUID = 113 + SYS_SETREGID = 114 + SYS_GETGROUPS = 115 + SYS_SETGROUPS = 116 + SYS_SETRESUID = 117 + SYS_GETRESUID = 118 + SYS_SETRESGID = 119 + SYS_GETRESGID = 120 + SYS_GETPGID = 121 + SYS_SETFSUID = 122 + SYS_SETFSGID = 123 + SYS_GETSID = 124 + SYS_CAPGET = 125 + SYS_CAPSET = 126 + SYS_RT_SIGPENDING = 127 + SYS_RT_SIGTIMEDWAIT = 128 + SYS_RT_SIGQUEUEINFO = 129 + SYS_RT_SIGSUSPEND = 130 + SYS_SIGALTSTACK = 131 + SYS_UTIME = 132 + SYS_MKNOD = 133 + SYS_USELIB = 134 + SYS_PERSONALITY = 135 + SYS_USTAT = 136 + SYS_STATFS = 137 + SYS_FSTATFS = 138 + SYS_SYSFS = 139 + SYS_GETPRIORITY = 140 + SYS_SETPRIORITY = 141 + SYS_SCHED_SETPARAM = 142 + SYS_SCHED_GETPARAM = 143 + SYS_SCHED_SETSCHEDULER = 144 + SYS_SCHED_GETSCHEDULER = 145 + SYS_SCHED_GET_PRIORITY_MAX = 146 + SYS_SCHED_GET_PRIORITY_MIN = 147 + SYS_SCHED_RR_GET_INTERVAL = 148 + SYS_MLOCK = 149 + SYS_MUNLOCK = 150 + SYS_MLOCKALL = 151 + SYS_MUNLOCKALL = 152 + SYS_VHANGUP = 153 + SYS_MODIFY_LDT = 154 + SYS_PIVOT_ROOT = 155 + SYS__SYSCTL = 156 + SYS_PRCTL = 157 + SYS_ARCH_PRCTL = 158 + SYS_ADJTIMEX = 159 + SYS_SETRLIMIT = 160 + SYS_CHROOT = 161 + SYS_SYNC = 162 + SYS_ACCT = 163 + SYS_SETTIMEOFDAY = 164 + SYS_MOUNT = 165 + SYS_UMOUNT2 = 166 + SYS_SWAPON = 167 + SYS_SWAPOFF = 168 + SYS_REBOOT = 169 + SYS_SETHOSTNAME = 170 + SYS_SETDOMAINNAME = 171 + SYS_IOPL = 172 + SYS_IOPERM = 173 + SYS_CREATE_MODULE = 174 + SYS_INIT_MODULE = 175 + SYS_DELETE_MODULE = 176 + SYS_GET_KERNEL_SYMS = 177 + SYS_QUERY_MODULE = 178 + SYS_QUOTACTL = 179 + SYS_NFSSERVCTL = 180 + SYS_GETPMSG = 181 + SYS_PUTPMSG = 182 + SYS_AFS_SYSCALL = 183 + SYS_TUXCALL = 184 + SYS_SECURITY = 185 + SYS_GETTID = 186 + SYS_READAHEAD = 187 + SYS_SETXATTR = 188 + SYS_LSETXATTR = 189 + SYS_FSETXATTR = 190 + SYS_GETXATTR = 191 + SYS_LGETXATTR = 192 + SYS_FGETXATTR = 193 + SYS_LISTXATTR = 194 + SYS_LLISTXATTR = 195 + SYS_FLISTXATTR = 196 + SYS_REMOVEXATTR = 197 + SYS_LREMOVEXATTR = 198 + SYS_FREMOVEXATTR = 199 + SYS_TKILL = 200 + SYS_TIME = 201 + SYS_FUTEX = 202 + SYS_SCHED_SETAFFINITY = 203 + SYS_SCHED_GETAFFINITY = 204 + SYS_SET_THREAD_AREA = 205 + SYS_IO_SETUP = 206 + SYS_IO_DESTROY = 207 + SYS_IO_GETEVENTS = 208 + SYS_IO_SUBMIT = 209 + SYS_IO_CANCEL = 210 + SYS_GET_THREAD_AREA = 211 + SYS_LOOKUP_DCOOKIE = 212 + SYS_EPOLL_CREATE = 213 + SYS_EPOLL_CTL_OLD = 214 + SYS_EPOLL_WAIT_OLD = 215 + SYS_REMAP_FILE_PAGES = 216 + SYS_GETDENTS64 = 217 + SYS_SET_TID_ADDRESS = 218 + SYS_RESTART_SYSCALL = 219 + SYS_SEMTIMEDOP = 220 + SYS_FADVISE64 = 221 + SYS_TIMER_CREATE = 222 + SYS_TIMER_SETTIME = 223 + SYS_TIMER_GETTIME = 224 + SYS_TIMER_GETOVERRUN = 225 + SYS_TIMER_DELETE = 226 + SYS_CLOCK_SETTIME = 227 + SYS_CLOCK_GETTIME = 228 + SYS_CLOCK_GETRES = 229 + SYS_CLOCK_NANOSLEEP = 230 + SYS_EXIT_GROUP = 231 + SYS_EPOLL_WAIT = 232 + SYS_EPOLL_CTL = 233 + SYS_TGKILL = 234 + SYS_UTIMES = 235 + SYS_VSERVER = 236 + SYS_MBIND = 237 + SYS_SET_MEMPOLICY = 238 + SYS_GET_MEMPOLICY = 239 + SYS_MQ_OPEN = 240 + SYS_MQ_UNLINK = 241 + SYS_MQ_TIMEDSEND = 242 + SYS_MQ_TIMEDRECEIVE = 243 + SYS_MQ_NOTIFY = 244 + SYS_MQ_GETSETATTR = 245 + SYS_KEXEC_LOAD = 246 + SYS_WAITID = 247 + SYS_ADD_KEY = 248 + SYS_REQUEST_KEY = 249 + SYS_KEYCTL = 250 + SYS_IOPRIO_SET = 251 + SYS_IOPRIO_GET = 252 + SYS_INOTIFY_INIT = 253 + SYS_INOTIFY_ADD_WATCH = 254 + SYS_INOTIFY_RM_WATCH = 255 + SYS_MIGRATE_PAGES = 256 + SYS_OPENAT = 257 + SYS_MKDIRAT = 258 + SYS_MKNODAT = 259 + SYS_FCHOWNAT = 260 + SYS_FUTIMESAT = 261 + SYS_NEWFSTATAT = 262 + SYS_UNLINKAT = 263 + SYS_RENAMEAT = 264 + SYS_LINKAT = 265 + SYS_SYMLINKAT = 266 + SYS_READLINKAT = 267 + SYS_FCHMODAT = 268 + SYS_FACCESSAT = 269 + SYS_PSELECT6 = 270 + SYS_PPOLL = 271 + SYS_UNSHARE = 272 + SYS_SET_ROBUST_LIST = 273 + SYS_GET_ROBUST_LIST = 274 + SYS_SPLICE = 275 + SYS_TEE = 276 + SYS_SYNC_FILE_RANGE = 277 + SYS_VMSPLICE = 278 + SYS_MOVE_PAGES = 279 + SYS_UTIMENSAT = 280 + SYS_EPOLL_PWAIT = 281 + SYS_SIGNALFD = 282 + SYS_TIMERFD_CREATE = 283 + SYS_EVENTFD = 284 + SYS_FALLOCATE = 285 + SYS_TIMERFD_SETTIME = 286 + SYS_TIMERFD_GETTIME = 287 + SYS_ACCEPT4 = 288 + SYS_SIGNALFD4 = 289 + SYS_EVENTFD2 = 290 + SYS_EPOLL_CREATE1 = 291 + SYS_DUP3 = 292 + SYS_PIPE2 = 293 + SYS_INOTIFY_INIT1 = 294 + SYS_PREADV = 295 + SYS_PWRITEV = 296 + SYS_RT_TGSIGQUEUEINFO = 297 + SYS_PERF_EVENT_OPEN = 298 + SYS_RECVMMSG = 299 + SYS_FANOTIFY_INIT = 300 + SYS_FANOTIFY_MARK = 301 + SYS_PRLIMIT64 = 302 + SYS_NAME_TO_HANDLE_AT = 303 + SYS_OPEN_BY_HANDLE_AT = 304 + SYS_CLOCK_ADJTIME = 305 + SYS_SYNCFS = 306 + SYS_SENDMMSG = 307 + SYS_SETNS = 308 + SYS_GETCPU = 309 + SYS_PROCESS_VM_READV = 310 + SYS_PROCESS_VM_WRITEV = 311 + SYS_KCMP = 312 + SYS_FINIT_MODULE = 313 + SYS_SCHED_SETATTR = 314 + SYS_SCHED_GETATTR = 315 + SYS_RENAMEAT2 = 316 + SYS_SECCOMP = 317 + SYS_GETRANDOM = 318 + SYS_MEMFD_CREATE = 319 + SYS_KEXEC_FILE_LOAD = 320 + SYS_BPF = 321 + SYS_EXECVEAT = 322 + SYS_USERFAULTFD = 323 + SYS_MEMBARRIER = 324 + SYS_MLOCK2 = 325 + SYS_COPY_FILE_RANGE = 326 + SYS_PREADV2 = 327 + SYS_PWRITEV2 = 328 + SYS_PKEY_MPROTECT = 329 + SYS_PKEY_ALLOC = 330 + SYS_PKEY_FREE = 331 + SYS_STATX = 332 + SYS_IO_PGETEVENTS = 333 + SYS_RSEQ = 334 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 3b1c10513..5ecd24bf6 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -7,6 +7,7 @@ package unix const ( + SYS_SYSCALL_MASK = 0 SYS_RESTART_SYSCALL = 0 SYS_EXIT = 1 SYS_FORK = 2 @@ -403,4 +404,9 @@ const ( SYS_PROCESS_MADVISE = 440 SYS_EPOLL_PWAIT2 = 441 SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 3198adcf7..7e5c94cc7 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -7,303 +7,309 @@ package unix const ( - SYS_IO_SETUP = 0 - SYS_IO_DESTROY = 1 - SYS_IO_SUBMIT = 2 - SYS_IO_CANCEL = 3 - SYS_IO_GETEVENTS = 4 - SYS_SETXATTR = 5 - SYS_LSETXATTR = 6 - SYS_FSETXATTR = 7 - SYS_GETXATTR = 8 - SYS_LGETXATTR = 9 - SYS_FGETXATTR = 10 - SYS_LISTXATTR = 11 - SYS_LLISTXATTR = 12 - SYS_FLISTXATTR = 13 - SYS_REMOVEXATTR = 14 - SYS_LREMOVEXATTR = 15 - SYS_FREMOVEXATTR = 16 - SYS_GETCWD = 17 - SYS_LOOKUP_DCOOKIE = 18 - SYS_EVENTFD2 = 19 - SYS_EPOLL_CREATE1 = 20 - SYS_EPOLL_CTL = 21 - SYS_EPOLL_PWAIT = 22 - SYS_DUP = 23 - SYS_DUP3 = 24 - SYS_FCNTL = 25 - SYS_INOTIFY_INIT1 = 26 - SYS_INOTIFY_ADD_WATCH = 27 - SYS_INOTIFY_RM_WATCH = 28 - SYS_IOCTL = 29 - SYS_IOPRIO_SET = 30 - SYS_IOPRIO_GET = 31 - SYS_FLOCK = 32 - SYS_MKNODAT = 33 - SYS_MKDIRAT = 34 - SYS_UNLINKAT = 35 - SYS_SYMLINKAT = 36 - SYS_LINKAT = 37 - SYS_RENAMEAT = 38 - SYS_UMOUNT2 = 39 - SYS_MOUNT = 40 - SYS_PIVOT_ROOT = 41 - SYS_NFSSERVCTL = 42 - SYS_STATFS = 43 - SYS_FSTATFS = 44 - SYS_TRUNCATE = 45 - SYS_FTRUNCATE = 46 - SYS_FALLOCATE = 47 - SYS_FACCESSAT = 48 - SYS_CHDIR = 49 - SYS_FCHDIR = 50 - SYS_CHROOT = 51 - SYS_FCHMOD = 52 - SYS_FCHMODAT = 53 - SYS_FCHOWNAT = 54 - SYS_FCHOWN = 55 - SYS_OPENAT = 56 - SYS_CLOSE = 57 - SYS_VHANGUP = 58 - SYS_PIPE2 = 59 - SYS_QUOTACTL = 60 - SYS_GETDENTS64 = 61 - SYS_LSEEK = 62 - SYS_READ = 63 - SYS_WRITE = 64 - SYS_READV = 65 - SYS_WRITEV = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_PREADV = 69 - SYS_PWRITEV = 70 - SYS_SENDFILE = 71 - SYS_PSELECT6 = 72 - SYS_PPOLL = 73 - SYS_SIGNALFD4 = 74 - SYS_VMSPLICE = 75 - SYS_SPLICE = 76 - SYS_TEE = 77 - SYS_READLINKAT = 78 - SYS_FSTATAT = 79 - SYS_FSTAT = 80 - SYS_SYNC = 81 - SYS_FSYNC = 82 - SYS_FDATASYNC = 83 - SYS_SYNC_FILE_RANGE = 84 - SYS_TIMERFD_CREATE = 85 - SYS_TIMERFD_SETTIME = 86 - SYS_TIMERFD_GETTIME = 87 - SYS_UTIMENSAT = 88 - SYS_ACCT = 89 - SYS_CAPGET = 90 - SYS_CAPSET = 91 - SYS_PERSONALITY = 92 - SYS_EXIT = 93 - SYS_EXIT_GROUP = 94 - SYS_WAITID = 95 - SYS_SET_TID_ADDRESS = 96 - SYS_UNSHARE = 97 - SYS_FUTEX = 98 - SYS_SET_ROBUST_LIST = 99 - SYS_GET_ROBUST_LIST = 100 - SYS_NANOSLEEP = 101 - SYS_GETITIMER = 102 - SYS_SETITIMER = 103 - SYS_KEXEC_LOAD = 104 - SYS_INIT_MODULE = 105 - SYS_DELETE_MODULE = 106 - SYS_TIMER_CREATE = 107 - SYS_TIMER_GETTIME = 108 - SYS_TIMER_GETOVERRUN = 109 - SYS_TIMER_SETTIME = 110 - SYS_TIMER_DELETE = 111 - SYS_CLOCK_SETTIME = 112 - SYS_CLOCK_GETTIME = 113 - SYS_CLOCK_GETRES = 114 - SYS_CLOCK_NANOSLEEP = 115 - SYS_SYSLOG = 116 - SYS_PTRACE = 117 - SYS_SCHED_SETPARAM = 118 - SYS_SCHED_SETSCHEDULER = 119 - SYS_SCHED_GETSCHEDULER = 120 - SYS_SCHED_GETPARAM = 121 - SYS_SCHED_SETAFFINITY = 122 - SYS_SCHED_GETAFFINITY = 123 - SYS_SCHED_YIELD = 124 - SYS_SCHED_GET_PRIORITY_MAX = 125 - SYS_SCHED_GET_PRIORITY_MIN = 126 - SYS_SCHED_RR_GET_INTERVAL = 127 - SYS_RESTART_SYSCALL = 128 - SYS_KILL = 129 - SYS_TKILL = 130 - SYS_TGKILL = 131 - SYS_SIGALTSTACK = 132 - SYS_RT_SIGSUSPEND = 133 - SYS_RT_SIGACTION = 134 - SYS_RT_SIGPROCMASK = 135 - SYS_RT_SIGPENDING = 136 - SYS_RT_SIGTIMEDWAIT = 137 - SYS_RT_SIGQUEUEINFO = 138 - SYS_RT_SIGRETURN = 139 - SYS_SETPRIORITY = 140 - SYS_GETPRIORITY = 141 - SYS_REBOOT = 142 - SYS_SETREGID = 143 - SYS_SETGID = 144 - SYS_SETREUID = 145 - SYS_SETUID = 146 - SYS_SETRESUID = 147 - SYS_GETRESUID = 148 - SYS_SETRESGID = 149 - SYS_GETRESGID = 150 - SYS_SETFSUID = 151 - SYS_SETFSGID = 152 - SYS_TIMES = 153 - SYS_SETPGID = 154 - SYS_GETPGID = 155 - SYS_GETSID = 156 - SYS_SETSID = 157 - SYS_GETGROUPS = 158 - SYS_SETGROUPS = 159 - SYS_UNAME = 160 - SYS_SETHOSTNAME = 161 - SYS_SETDOMAINNAME = 162 - SYS_GETRLIMIT = 163 - SYS_SETRLIMIT = 164 - SYS_GETRUSAGE = 165 - SYS_UMASK = 166 - SYS_PRCTL = 167 - SYS_GETCPU = 168 - SYS_GETTIMEOFDAY = 169 - SYS_SETTIMEOFDAY = 170 - SYS_ADJTIMEX = 171 - SYS_GETPID = 172 - SYS_GETPPID = 173 - SYS_GETUID = 174 - SYS_GETEUID = 175 - SYS_GETGID = 176 - SYS_GETEGID = 177 - SYS_GETTID = 178 - SYS_SYSINFO = 179 - SYS_MQ_OPEN = 180 - SYS_MQ_UNLINK = 181 - SYS_MQ_TIMEDSEND = 182 - SYS_MQ_TIMEDRECEIVE = 183 - SYS_MQ_NOTIFY = 184 - SYS_MQ_GETSETATTR = 185 - SYS_MSGGET = 186 - SYS_MSGCTL = 187 - SYS_MSGRCV = 188 - SYS_MSGSND = 189 - SYS_SEMGET = 190 - SYS_SEMCTL = 191 - SYS_SEMTIMEDOP = 192 - SYS_SEMOP = 193 - SYS_SHMGET = 194 - SYS_SHMCTL = 195 - SYS_SHMAT = 196 - SYS_SHMDT = 197 - SYS_SOCKET = 198 - SYS_SOCKETPAIR = 199 - SYS_BIND = 200 - SYS_LISTEN = 201 - SYS_ACCEPT = 202 - SYS_CONNECT = 203 - SYS_GETSOCKNAME = 204 - SYS_GETPEERNAME = 205 - SYS_SENDTO = 206 - SYS_RECVFROM = 207 - SYS_SETSOCKOPT = 208 - SYS_GETSOCKOPT = 209 - SYS_SHUTDOWN = 210 - SYS_SENDMSG = 211 - SYS_RECVMSG = 212 - SYS_READAHEAD = 213 - SYS_BRK = 214 - SYS_MUNMAP = 215 - SYS_MREMAP = 216 - SYS_ADD_KEY = 217 - SYS_REQUEST_KEY = 218 - SYS_KEYCTL = 219 - SYS_CLONE = 220 - SYS_EXECVE = 221 - SYS_MMAP = 222 - SYS_FADVISE64 = 223 - SYS_SWAPON = 224 - SYS_SWAPOFF = 225 - SYS_MPROTECT = 226 - SYS_MSYNC = 227 - SYS_MLOCK = 228 - SYS_MUNLOCK = 229 - SYS_MLOCKALL = 230 - SYS_MUNLOCKALL = 231 - SYS_MINCORE = 232 - SYS_MADVISE = 233 - SYS_REMAP_FILE_PAGES = 234 - SYS_MBIND = 235 - SYS_GET_MEMPOLICY = 236 - SYS_SET_MEMPOLICY = 237 - SYS_MIGRATE_PAGES = 238 - SYS_MOVE_PAGES = 239 - SYS_RT_TGSIGQUEUEINFO = 240 - SYS_PERF_EVENT_OPEN = 241 - SYS_ACCEPT4 = 242 - SYS_RECVMMSG = 243 - SYS_ARCH_SPECIFIC_SYSCALL = 244 - SYS_WAIT4 = 260 - SYS_PRLIMIT64 = 261 - SYS_FANOTIFY_INIT = 262 - SYS_FANOTIFY_MARK = 263 - SYS_NAME_TO_HANDLE_AT = 264 - SYS_OPEN_BY_HANDLE_AT = 265 - SYS_CLOCK_ADJTIME = 266 - SYS_SYNCFS = 267 - SYS_SETNS = 268 - SYS_SENDMMSG = 269 - SYS_PROCESS_VM_READV = 270 - SYS_PROCESS_VM_WRITEV = 271 - SYS_KCMP = 272 - SYS_FINIT_MODULE = 273 - SYS_SCHED_SETATTR = 274 - SYS_SCHED_GETATTR = 275 - SYS_RENAMEAT2 = 276 - SYS_SECCOMP = 277 - SYS_GETRANDOM = 278 - SYS_MEMFD_CREATE = 279 - SYS_BPF = 280 - SYS_EXECVEAT = 281 - SYS_USERFAULTFD = 282 - SYS_MEMBARRIER = 283 - SYS_MLOCK2 = 284 - SYS_COPY_FILE_RANGE = 285 - SYS_PREADV2 = 286 - SYS_PWRITEV2 = 287 - SYS_PKEY_MPROTECT = 288 - SYS_PKEY_ALLOC = 289 - SYS_PKEY_FREE = 290 - SYS_STATX = 291 - SYS_IO_PGETEVENTS = 292 - SYS_RSEQ = 293 - SYS_KEXEC_FILE_LOAD = 294 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_RENAMEAT = 38 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index c877ec6e6..e1e2a2bf5 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -424,4 +424,9 @@ const ( SYS_PROCESS_MADVISE = 4440 SYS_EPOLL_PWAIT2 = 4441 SYS_MOUNT_SETATTR = 4442 + SYS_QUOTACTL_FD = 4443 + SYS_LANDLOCK_CREATE_RULESET = 4444 + SYS_LANDLOCK_ADD_RULE = 4445 + SYS_LANDLOCK_RESTRICT_SELF = 4446 + SYS_PROCESS_MRELEASE = 4448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index b5f290372..7651915a3 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -7,351 +7,356 @@ package unix const ( - SYS_READ = 5000 - SYS_WRITE = 5001 - SYS_OPEN = 5002 - SYS_CLOSE = 5003 - SYS_STAT = 5004 - SYS_FSTAT = 5005 - SYS_LSTAT = 5006 - SYS_POLL = 5007 - SYS_LSEEK = 5008 - SYS_MMAP = 5009 - SYS_MPROTECT = 5010 - SYS_MUNMAP = 5011 - SYS_BRK = 5012 - SYS_RT_SIGACTION = 5013 - SYS_RT_SIGPROCMASK = 5014 - SYS_IOCTL = 5015 - SYS_PREAD64 = 5016 - SYS_PWRITE64 = 5017 - SYS_READV = 5018 - SYS_WRITEV = 5019 - SYS_ACCESS = 5020 - SYS_PIPE = 5021 - SYS__NEWSELECT = 5022 - SYS_SCHED_YIELD = 5023 - SYS_MREMAP = 5024 - SYS_MSYNC = 5025 - SYS_MINCORE = 5026 - SYS_MADVISE = 5027 - SYS_SHMGET = 5028 - SYS_SHMAT = 5029 - SYS_SHMCTL = 5030 - SYS_DUP = 5031 - SYS_DUP2 = 5032 - SYS_PAUSE = 5033 - SYS_NANOSLEEP = 5034 - SYS_GETITIMER = 5035 - SYS_SETITIMER = 5036 - SYS_ALARM = 5037 - SYS_GETPID = 5038 - SYS_SENDFILE = 5039 - SYS_SOCKET = 5040 - SYS_CONNECT = 5041 - SYS_ACCEPT = 5042 - SYS_SENDTO = 5043 - SYS_RECVFROM = 5044 - SYS_SENDMSG = 5045 - SYS_RECVMSG = 5046 - SYS_SHUTDOWN = 5047 - SYS_BIND = 5048 - SYS_LISTEN = 5049 - SYS_GETSOCKNAME = 5050 - SYS_GETPEERNAME = 5051 - SYS_SOCKETPAIR = 5052 - SYS_SETSOCKOPT = 5053 - SYS_GETSOCKOPT = 5054 - SYS_CLONE = 5055 - SYS_FORK = 5056 - SYS_EXECVE = 5057 - SYS_EXIT = 5058 - SYS_WAIT4 = 5059 - SYS_KILL = 5060 - SYS_UNAME = 5061 - SYS_SEMGET = 5062 - SYS_SEMOP = 5063 - SYS_SEMCTL = 5064 - SYS_SHMDT = 5065 - SYS_MSGGET = 5066 - SYS_MSGSND = 5067 - SYS_MSGRCV = 5068 - SYS_MSGCTL = 5069 - SYS_FCNTL = 5070 - SYS_FLOCK = 5071 - SYS_FSYNC = 5072 - SYS_FDATASYNC = 5073 - SYS_TRUNCATE = 5074 - SYS_FTRUNCATE = 5075 - SYS_GETDENTS = 5076 - SYS_GETCWD = 5077 - SYS_CHDIR = 5078 - SYS_FCHDIR = 5079 - SYS_RENAME = 5080 - SYS_MKDIR = 5081 - SYS_RMDIR = 5082 - SYS_CREAT = 5083 - SYS_LINK = 5084 - SYS_UNLINK = 5085 - SYS_SYMLINK = 5086 - SYS_READLINK = 5087 - SYS_CHMOD = 5088 - SYS_FCHMOD = 5089 - SYS_CHOWN = 5090 - SYS_FCHOWN = 5091 - SYS_LCHOWN = 5092 - SYS_UMASK = 5093 - SYS_GETTIMEOFDAY = 5094 - SYS_GETRLIMIT = 5095 - SYS_GETRUSAGE = 5096 - SYS_SYSINFO = 5097 - SYS_TIMES = 5098 - SYS_PTRACE = 5099 - SYS_GETUID = 5100 - SYS_SYSLOG = 5101 - SYS_GETGID = 5102 - SYS_SETUID = 5103 - SYS_SETGID = 5104 - SYS_GETEUID = 5105 - SYS_GETEGID = 5106 - SYS_SETPGID = 5107 - SYS_GETPPID = 5108 - SYS_GETPGRP = 5109 - SYS_SETSID = 5110 - SYS_SETREUID = 5111 - SYS_SETREGID = 5112 - SYS_GETGROUPS = 5113 - SYS_SETGROUPS = 5114 - SYS_SETRESUID = 5115 - SYS_GETRESUID = 5116 - SYS_SETRESGID = 5117 - SYS_GETRESGID = 5118 - SYS_GETPGID = 5119 - SYS_SETFSUID = 5120 - SYS_SETFSGID = 5121 - SYS_GETSID = 5122 - SYS_CAPGET = 5123 - SYS_CAPSET = 5124 - SYS_RT_SIGPENDING = 5125 - SYS_RT_SIGTIMEDWAIT = 5126 - SYS_RT_SIGQUEUEINFO = 5127 - SYS_RT_SIGSUSPEND = 5128 - SYS_SIGALTSTACK = 5129 - SYS_UTIME = 5130 - SYS_MKNOD = 5131 - SYS_PERSONALITY = 5132 - SYS_USTAT = 5133 - SYS_STATFS = 5134 - SYS_FSTATFS = 5135 - SYS_SYSFS = 5136 - SYS_GETPRIORITY = 5137 - SYS_SETPRIORITY = 5138 - SYS_SCHED_SETPARAM = 5139 - SYS_SCHED_GETPARAM = 5140 - SYS_SCHED_SETSCHEDULER = 5141 - SYS_SCHED_GETSCHEDULER = 5142 - SYS_SCHED_GET_PRIORITY_MAX = 5143 - SYS_SCHED_GET_PRIORITY_MIN = 5144 - SYS_SCHED_RR_GET_INTERVAL = 5145 - SYS_MLOCK = 5146 - SYS_MUNLOCK = 5147 - SYS_MLOCKALL = 5148 - SYS_MUNLOCKALL = 5149 - SYS_VHANGUP = 5150 - SYS_PIVOT_ROOT = 5151 - SYS__SYSCTL = 5152 - SYS_PRCTL = 5153 - SYS_ADJTIMEX = 5154 - SYS_SETRLIMIT = 5155 - SYS_CHROOT = 5156 - SYS_SYNC = 5157 - SYS_ACCT = 5158 - SYS_SETTIMEOFDAY = 5159 - SYS_MOUNT = 5160 - SYS_UMOUNT2 = 5161 - SYS_SWAPON = 5162 - SYS_SWAPOFF = 5163 - SYS_REBOOT = 5164 - SYS_SETHOSTNAME = 5165 - SYS_SETDOMAINNAME = 5166 - SYS_CREATE_MODULE = 5167 - SYS_INIT_MODULE = 5168 - SYS_DELETE_MODULE = 5169 - SYS_GET_KERNEL_SYMS = 5170 - SYS_QUERY_MODULE = 5171 - SYS_QUOTACTL = 5172 - SYS_NFSSERVCTL = 5173 - SYS_GETPMSG = 5174 - SYS_PUTPMSG = 5175 - SYS_AFS_SYSCALL = 5176 - SYS_RESERVED177 = 5177 - SYS_GETTID = 5178 - SYS_READAHEAD = 5179 - SYS_SETXATTR = 5180 - SYS_LSETXATTR = 5181 - SYS_FSETXATTR = 5182 - SYS_GETXATTR = 5183 - SYS_LGETXATTR = 5184 - SYS_FGETXATTR = 5185 - SYS_LISTXATTR = 5186 - SYS_LLISTXATTR = 5187 - SYS_FLISTXATTR = 5188 - SYS_REMOVEXATTR = 5189 - SYS_LREMOVEXATTR = 5190 - SYS_FREMOVEXATTR = 5191 - SYS_TKILL = 5192 - SYS_RESERVED193 = 5193 - SYS_FUTEX = 5194 - SYS_SCHED_SETAFFINITY = 5195 - SYS_SCHED_GETAFFINITY = 5196 - SYS_CACHEFLUSH = 5197 - SYS_CACHECTL = 5198 - SYS_SYSMIPS = 5199 - SYS_IO_SETUP = 5200 - SYS_IO_DESTROY = 5201 - SYS_IO_GETEVENTS = 5202 - SYS_IO_SUBMIT = 5203 - SYS_IO_CANCEL = 5204 - SYS_EXIT_GROUP = 5205 - SYS_LOOKUP_DCOOKIE = 5206 - SYS_EPOLL_CREATE = 5207 - SYS_EPOLL_CTL = 5208 - SYS_EPOLL_WAIT = 5209 - SYS_REMAP_FILE_PAGES = 5210 - SYS_RT_SIGRETURN = 5211 - SYS_SET_TID_ADDRESS = 5212 - SYS_RESTART_SYSCALL = 5213 - SYS_SEMTIMEDOP = 5214 - SYS_FADVISE64 = 5215 - SYS_TIMER_CREATE = 5216 - SYS_TIMER_SETTIME = 5217 - SYS_TIMER_GETTIME = 5218 - SYS_TIMER_GETOVERRUN = 5219 - SYS_TIMER_DELETE = 5220 - SYS_CLOCK_SETTIME = 5221 - SYS_CLOCK_GETTIME = 5222 - SYS_CLOCK_GETRES = 5223 - SYS_CLOCK_NANOSLEEP = 5224 - SYS_TGKILL = 5225 - SYS_UTIMES = 5226 - SYS_MBIND = 5227 - SYS_GET_MEMPOLICY = 5228 - SYS_SET_MEMPOLICY = 5229 - SYS_MQ_OPEN = 5230 - SYS_MQ_UNLINK = 5231 - SYS_MQ_TIMEDSEND = 5232 - SYS_MQ_TIMEDRECEIVE = 5233 - SYS_MQ_NOTIFY = 5234 - SYS_MQ_GETSETATTR = 5235 - SYS_VSERVER = 5236 - SYS_WAITID = 5237 - SYS_ADD_KEY = 5239 - SYS_REQUEST_KEY = 5240 - SYS_KEYCTL = 5241 - SYS_SET_THREAD_AREA = 5242 - SYS_INOTIFY_INIT = 5243 - SYS_INOTIFY_ADD_WATCH = 5244 - SYS_INOTIFY_RM_WATCH = 5245 - SYS_MIGRATE_PAGES = 5246 - SYS_OPENAT = 5247 - SYS_MKDIRAT = 5248 - SYS_MKNODAT = 5249 - SYS_FCHOWNAT = 5250 - SYS_FUTIMESAT = 5251 - SYS_NEWFSTATAT = 5252 - SYS_UNLINKAT = 5253 - SYS_RENAMEAT = 5254 - SYS_LINKAT = 5255 - SYS_SYMLINKAT = 5256 - SYS_READLINKAT = 5257 - SYS_FCHMODAT = 5258 - SYS_FACCESSAT = 5259 - SYS_PSELECT6 = 5260 - SYS_PPOLL = 5261 - SYS_UNSHARE = 5262 - SYS_SPLICE = 5263 - SYS_SYNC_FILE_RANGE = 5264 - SYS_TEE = 5265 - SYS_VMSPLICE = 5266 - SYS_MOVE_PAGES = 5267 - SYS_SET_ROBUST_LIST = 5268 - SYS_GET_ROBUST_LIST = 5269 - SYS_KEXEC_LOAD = 5270 - SYS_GETCPU = 5271 - SYS_EPOLL_PWAIT = 5272 - SYS_IOPRIO_SET = 5273 - SYS_IOPRIO_GET = 5274 - SYS_UTIMENSAT = 5275 - SYS_SIGNALFD = 5276 - SYS_TIMERFD = 5277 - SYS_EVENTFD = 5278 - SYS_FALLOCATE = 5279 - SYS_TIMERFD_CREATE = 5280 - SYS_TIMERFD_GETTIME = 5281 - SYS_TIMERFD_SETTIME = 5282 - SYS_SIGNALFD4 = 5283 - SYS_EVENTFD2 = 5284 - SYS_EPOLL_CREATE1 = 5285 - SYS_DUP3 = 5286 - SYS_PIPE2 = 5287 - SYS_INOTIFY_INIT1 = 5288 - SYS_PREADV = 5289 - SYS_PWRITEV = 5290 - SYS_RT_TGSIGQUEUEINFO = 5291 - SYS_PERF_EVENT_OPEN = 5292 - SYS_ACCEPT4 = 5293 - SYS_RECVMMSG = 5294 - SYS_FANOTIFY_INIT = 5295 - SYS_FANOTIFY_MARK = 5296 - SYS_PRLIMIT64 = 5297 - SYS_NAME_TO_HANDLE_AT = 5298 - SYS_OPEN_BY_HANDLE_AT = 5299 - SYS_CLOCK_ADJTIME = 5300 - SYS_SYNCFS = 5301 - SYS_SENDMMSG = 5302 - SYS_SETNS = 5303 - SYS_PROCESS_VM_READV = 5304 - SYS_PROCESS_VM_WRITEV = 5305 - SYS_KCMP = 5306 - SYS_FINIT_MODULE = 5307 - SYS_GETDENTS64 = 5308 - SYS_SCHED_SETATTR = 5309 - SYS_SCHED_GETATTR = 5310 - SYS_RENAMEAT2 = 5311 - SYS_SECCOMP = 5312 - SYS_GETRANDOM = 5313 - SYS_MEMFD_CREATE = 5314 - SYS_BPF = 5315 - SYS_EXECVEAT = 5316 - SYS_USERFAULTFD = 5317 - SYS_MEMBARRIER = 5318 - SYS_MLOCK2 = 5319 - SYS_COPY_FILE_RANGE = 5320 - SYS_PREADV2 = 5321 - SYS_PWRITEV2 = 5322 - SYS_PKEY_MPROTECT = 5323 - SYS_PKEY_ALLOC = 5324 - SYS_PKEY_FREE = 5325 - SYS_STATX = 5326 - SYS_RSEQ = 5327 - SYS_IO_PGETEVENTS = 5328 - SYS_PIDFD_SEND_SIGNAL = 5424 - SYS_IO_URING_SETUP = 5425 - SYS_IO_URING_ENTER = 5426 - SYS_IO_URING_REGISTER = 5427 - SYS_OPEN_TREE = 5428 - SYS_MOVE_MOUNT = 5429 - SYS_FSOPEN = 5430 - SYS_FSCONFIG = 5431 - SYS_FSMOUNT = 5432 - SYS_FSPICK = 5433 - SYS_PIDFD_OPEN = 5434 - SYS_CLONE3 = 5435 - SYS_CLOSE_RANGE = 5436 - SYS_OPENAT2 = 5437 - SYS_PIDFD_GETFD = 5438 - SYS_FACCESSAT2 = 5439 - SYS_PROCESS_MADVISE = 5440 - SYS_EPOLL_PWAIT2 = 5441 - SYS_MOUNT_SETATTR = 5442 + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 + SYS_RSEQ = 5327 + SYS_IO_PGETEVENTS = 5328 + SYS_PIDFD_SEND_SIGNAL = 5424 + SYS_IO_URING_SETUP = 5425 + SYS_IO_URING_ENTER = 5426 + SYS_IO_URING_REGISTER = 5427 + SYS_OPEN_TREE = 5428 + SYS_MOVE_MOUNT = 5429 + SYS_FSOPEN = 5430 + SYS_FSCONFIG = 5431 + SYS_FSMOUNT = 5432 + SYS_FSPICK = 5433 + SYS_PIDFD_OPEN = 5434 + SYS_CLONE3 = 5435 + SYS_CLOSE_RANGE = 5436 + SYS_OPENAT2 = 5437 + SYS_PIDFD_GETFD = 5438 + SYS_FACCESSAT2 = 5439 + SYS_PROCESS_MADVISE = 5440 + SYS_EPOLL_PWAIT2 = 5441 + SYS_MOUNT_SETATTR = 5442 + SYS_QUOTACTL_FD = 5443 + SYS_LANDLOCK_CREATE_RULESET = 5444 + SYS_LANDLOCK_ADD_RULE = 5445 + SYS_LANDLOCK_RESTRICT_SELF = 5446 + SYS_PROCESS_MRELEASE = 5448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 46077689a..a26a2c050 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -7,351 +7,356 @@ package unix const ( - SYS_READ = 5000 - SYS_WRITE = 5001 - SYS_OPEN = 5002 - SYS_CLOSE = 5003 - SYS_STAT = 5004 - SYS_FSTAT = 5005 - SYS_LSTAT = 5006 - SYS_POLL = 5007 - SYS_LSEEK = 5008 - SYS_MMAP = 5009 - SYS_MPROTECT = 5010 - SYS_MUNMAP = 5011 - SYS_BRK = 5012 - SYS_RT_SIGACTION = 5013 - SYS_RT_SIGPROCMASK = 5014 - SYS_IOCTL = 5015 - SYS_PREAD64 = 5016 - SYS_PWRITE64 = 5017 - SYS_READV = 5018 - SYS_WRITEV = 5019 - SYS_ACCESS = 5020 - SYS_PIPE = 5021 - SYS__NEWSELECT = 5022 - SYS_SCHED_YIELD = 5023 - SYS_MREMAP = 5024 - SYS_MSYNC = 5025 - SYS_MINCORE = 5026 - SYS_MADVISE = 5027 - SYS_SHMGET = 5028 - SYS_SHMAT = 5029 - SYS_SHMCTL = 5030 - SYS_DUP = 5031 - SYS_DUP2 = 5032 - SYS_PAUSE = 5033 - SYS_NANOSLEEP = 5034 - SYS_GETITIMER = 5035 - SYS_SETITIMER = 5036 - SYS_ALARM = 5037 - SYS_GETPID = 5038 - SYS_SENDFILE = 5039 - SYS_SOCKET = 5040 - SYS_CONNECT = 5041 - SYS_ACCEPT = 5042 - SYS_SENDTO = 5043 - SYS_RECVFROM = 5044 - SYS_SENDMSG = 5045 - SYS_RECVMSG = 5046 - SYS_SHUTDOWN = 5047 - SYS_BIND = 5048 - SYS_LISTEN = 5049 - SYS_GETSOCKNAME = 5050 - SYS_GETPEERNAME = 5051 - SYS_SOCKETPAIR = 5052 - SYS_SETSOCKOPT = 5053 - SYS_GETSOCKOPT = 5054 - SYS_CLONE = 5055 - SYS_FORK = 5056 - SYS_EXECVE = 5057 - SYS_EXIT = 5058 - SYS_WAIT4 = 5059 - SYS_KILL = 5060 - SYS_UNAME = 5061 - SYS_SEMGET = 5062 - SYS_SEMOP = 5063 - SYS_SEMCTL = 5064 - SYS_SHMDT = 5065 - SYS_MSGGET = 5066 - SYS_MSGSND = 5067 - SYS_MSGRCV = 5068 - SYS_MSGCTL = 5069 - SYS_FCNTL = 5070 - SYS_FLOCK = 5071 - SYS_FSYNC = 5072 - SYS_FDATASYNC = 5073 - SYS_TRUNCATE = 5074 - SYS_FTRUNCATE = 5075 - SYS_GETDENTS = 5076 - SYS_GETCWD = 5077 - SYS_CHDIR = 5078 - SYS_FCHDIR = 5079 - SYS_RENAME = 5080 - SYS_MKDIR = 5081 - SYS_RMDIR = 5082 - SYS_CREAT = 5083 - SYS_LINK = 5084 - SYS_UNLINK = 5085 - SYS_SYMLINK = 5086 - SYS_READLINK = 5087 - SYS_CHMOD = 5088 - SYS_FCHMOD = 5089 - SYS_CHOWN = 5090 - SYS_FCHOWN = 5091 - SYS_LCHOWN = 5092 - SYS_UMASK = 5093 - SYS_GETTIMEOFDAY = 5094 - SYS_GETRLIMIT = 5095 - SYS_GETRUSAGE = 5096 - SYS_SYSINFO = 5097 - SYS_TIMES = 5098 - SYS_PTRACE = 5099 - SYS_GETUID = 5100 - SYS_SYSLOG = 5101 - SYS_GETGID = 5102 - SYS_SETUID = 5103 - SYS_SETGID = 5104 - SYS_GETEUID = 5105 - SYS_GETEGID = 5106 - SYS_SETPGID = 5107 - SYS_GETPPID = 5108 - SYS_GETPGRP = 5109 - SYS_SETSID = 5110 - SYS_SETREUID = 5111 - SYS_SETREGID = 5112 - SYS_GETGROUPS = 5113 - SYS_SETGROUPS = 5114 - SYS_SETRESUID = 5115 - SYS_GETRESUID = 5116 - SYS_SETRESGID = 5117 - SYS_GETRESGID = 5118 - SYS_GETPGID = 5119 - SYS_SETFSUID = 5120 - SYS_SETFSGID = 5121 - SYS_GETSID = 5122 - SYS_CAPGET = 5123 - SYS_CAPSET = 5124 - SYS_RT_SIGPENDING = 5125 - SYS_RT_SIGTIMEDWAIT = 5126 - SYS_RT_SIGQUEUEINFO = 5127 - SYS_RT_SIGSUSPEND = 5128 - SYS_SIGALTSTACK = 5129 - SYS_UTIME = 5130 - SYS_MKNOD = 5131 - SYS_PERSONALITY = 5132 - SYS_USTAT = 5133 - SYS_STATFS = 5134 - SYS_FSTATFS = 5135 - SYS_SYSFS = 5136 - SYS_GETPRIORITY = 5137 - SYS_SETPRIORITY = 5138 - SYS_SCHED_SETPARAM = 5139 - SYS_SCHED_GETPARAM = 5140 - SYS_SCHED_SETSCHEDULER = 5141 - SYS_SCHED_GETSCHEDULER = 5142 - SYS_SCHED_GET_PRIORITY_MAX = 5143 - SYS_SCHED_GET_PRIORITY_MIN = 5144 - SYS_SCHED_RR_GET_INTERVAL = 5145 - SYS_MLOCK = 5146 - SYS_MUNLOCK = 5147 - SYS_MLOCKALL = 5148 - SYS_MUNLOCKALL = 5149 - SYS_VHANGUP = 5150 - SYS_PIVOT_ROOT = 5151 - SYS__SYSCTL = 5152 - SYS_PRCTL = 5153 - SYS_ADJTIMEX = 5154 - SYS_SETRLIMIT = 5155 - SYS_CHROOT = 5156 - SYS_SYNC = 5157 - SYS_ACCT = 5158 - SYS_SETTIMEOFDAY = 5159 - SYS_MOUNT = 5160 - SYS_UMOUNT2 = 5161 - SYS_SWAPON = 5162 - SYS_SWAPOFF = 5163 - SYS_REBOOT = 5164 - SYS_SETHOSTNAME = 5165 - SYS_SETDOMAINNAME = 5166 - SYS_CREATE_MODULE = 5167 - SYS_INIT_MODULE = 5168 - SYS_DELETE_MODULE = 5169 - SYS_GET_KERNEL_SYMS = 5170 - SYS_QUERY_MODULE = 5171 - SYS_QUOTACTL = 5172 - SYS_NFSSERVCTL = 5173 - SYS_GETPMSG = 5174 - SYS_PUTPMSG = 5175 - SYS_AFS_SYSCALL = 5176 - SYS_RESERVED177 = 5177 - SYS_GETTID = 5178 - SYS_READAHEAD = 5179 - SYS_SETXATTR = 5180 - SYS_LSETXATTR = 5181 - SYS_FSETXATTR = 5182 - SYS_GETXATTR = 5183 - SYS_LGETXATTR = 5184 - SYS_FGETXATTR = 5185 - SYS_LISTXATTR = 5186 - SYS_LLISTXATTR = 5187 - SYS_FLISTXATTR = 5188 - SYS_REMOVEXATTR = 5189 - SYS_LREMOVEXATTR = 5190 - SYS_FREMOVEXATTR = 5191 - SYS_TKILL = 5192 - SYS_RESERVED193 = 5193 - SYS_FUTEX = 5194 - SYS_SCHED_SETAFFINITY = 5195 - SYS_SCHED_GETAFFINITY = 5196 - SYS_CACHEFLUSH = 5197 - SYS_CACHECTL = 5198 - SYS_SYSMIPS = 5199 - SYS_IO_SETUP = 5200 - SYS_IO_DESTROY = 5201 - SYS_IO_GETEVENTS = 5202 - SYS_IO_SUBMIT = 5203 - SYS_IO_CANCEL = 5204 - SYS_EXIT_GROUP = 5205 - SYS_LOOKUP_DCOOKIE = 5206 - SYS_EPOLL_CREATE = 5207 - SYS_EPOLL_CTL = 5208 - SYS_EPOLL_WAIT = 5209 - SYS_REMAP_FILE_PAGES = 5210 - SYS_RT_SIGRETURN = 5211 - SYS_SET_TID_ADDRESS = 5212 - SYS_RESTART_SYSCALL = 5213 - SYS_SEMTIMEDOP = 5214 - SYS_FADVISE64 = 5215 - SYS_TIMER_CREATE = 5216 - SYS_TIMER_SETTIME = 5217 - SYS_TIMER_GETTIME = 5218 - SYS_TIMER_GETOVERRUN = 5219 - SYS_TIMER_DELETE = 5220 - SYS_CLOCK_SETTIME = 5221 - SYS_CLOCK_GETTIME = 5222 - SYS_CLOCK_GETRES = 5223 - SYS_CLOCK_NANOSLEEP = 5224 - SYS_TGKILL = 5225 - SYS_UTIMES = 5226 - SYS_MBIND = 5227 - SYS_GET_MEMPOLICY = 5228 - SYS_SET_MEMPOLICY = 5229 - SYS_MQ_OPEN = 5230 - SYS_MQ_UNLINK = 5231 - SYS_MQ_TIMEDSEND = 5232 - SYS_MQ_TIMEDRECEIVE = 5233 - SYS_MQ_NOTIFY = 5234 - SYS_MQ_GETSETATTR = 5235 - SYS_VSERVER = 5236 - SYS_WAITID = 5237 - SYS_ADD_KEY = 5239 - SYS_REQUEST_KEY = 5240 - SYS_KEYCTL = 5241 - SYS_SET_THREAD_AREA = 5242 - SYS_INOTIFY_INIT = 5243 - SYS_INOTIFY_ADD_WATCH = 5244 - SYS_INOTIFY_RM_WATCH = 5245 - SYS_MIGRATE_PAGES = 5246 - SYS_OPENAT = 5247 - SYS_MKDIRAT = 5248 - SYS_MKNODAT = 5249 - SYS_FCHOWNAT = 5250 - SYS_FUTIMESAT = 5251 - SYS_NEWFSTATAT = 5252 - SYS_UNLINKAT = 5253 - SYS_RENAMEAT = 5254 - SYS_LINKAT = 5255 - SYS_SYMLINKAT = 5256 - SYS_READLINKAT = 5257 - SYS_FCHMODAT = 5258 - SYS_FACCESSAT = 5259 - SYS_PSELECT6 = 5260 - SYS_PPOLL = 5261 - SYS_UNSHARE = 5262 - SYS_SPLICE = 5263 - SYS_SYNC_FILE_RANGE = 5264 - SYS_TEE = 5265 - SYS_VMSPLICE = 5266 - SYS_MOVE_PAGES = 5267 - SYS_SET_ROBUST_LIST = 5268 - SYS_GET_ROBUST_LIST = 5269 - SYS_KEXEC_LOAD = 5270 - SYS_GETCPU = 5271 - SYS_EPOLL_PWAIT = 5272 - SYS_IOPRIO_SET = 5273 - SYS_IOPRIO_GET = 5274 - SYS_UTIMENSAT = 5275 - SYS_SIGNALFD = 5276 - SYS_TIMERFD = 5277 - SYS_EVENTFD = 5278 - SYS_FALLOCATE = 5279 - SYS_TIMERFD_CREATE = 5280 - SYS_TIMERFD_GETTIME = 5281 - SYS_TIMERFD_SETTIME = 5282 - SYS_SIGNALFD4 = 5283 - SYS_EVENTFD2 = 5284 - SYS_EPOLL_CREATE1 = 5285 - SYS_DUP3 = 5286 - SYS_PIPE2 = 5287 - SYS_INOTIFY_INIT1 = 5288 - SYS_PREADV = 5289 - SYS_PWRITEV = 5290 - SYS_RT_TGSIGQUEUEINFO = 5291 - SYS_PERF_EVENT_OPEN = 5292 - SYS_ACCEPT4 = 5293 - SYS_RECVMMSG = 5294 - SYS_FANOTIFY_INIT = 5295 - SYS_FANOTIFY_MARK = 5296 - SYS_PRLIMIT64 = 5297 - SYS_NAME_TO_HANDLE_AT = 5298 - SYS_OPEN_BY_HANDLE_AT = 5299 - SYS_CLOCK_ADJTIME = 5300 - SYS_SYNCFS = 5301 - SYS_SENDMMSG = 5302 - SYS_SETNS = 5303 - SYS_PROCESS_VM_READV = 5304 - SYS_PROCESS_VM_WRITEV = 5305 - SYS_KCMP = 5306 - SYS_FINIT_MODULE = 5307 - SYS_GETDENTS64 = 5308 - SYS_SCHED_SETATTR = 5309 - SYS_SCHED_GETATTR = 5310 - SYS_RENAMEAT2 = 5311 - SYS_SECCOMP = 5312 - SYS_GETRANDOM = 5313 - SYS_MEMFD_CREATE = 5314 - SYS_BPF = 5315 - SYS_EXECVEAT = 5316 - SYS_USERFAULTFD = 5317 - SYS_MEMBARRIER = 5318 - SYS_MLOCK2 = 5319 - SYS_COPY_FILE_RANGE = 5320 - SYS_PREADV2 = 5321 - SYS_PWRITEV2 = 5322 - SYS_PKEY_MPROTECT = 5323 - SYS_PKEY_ALLOC = 5324 - SYS_PKEY_FREE = 5325 - SYS_STATX = 5326 - SYS_RSEQ = 5327 - SYS_IO_PGETEVENTS = 5328 - SYS_PIDFD_SEND_SIGNAL = 5424 - SYS_IO_URING_SETUP = 5425 - SYS_IO_URING_ENTER = 5426 - SYS_IO_URING_REGISTER = 5427 - SYS_OPEN_TREE = 5428 - SYS_MOVE_MOUNT = 5429 - SYS_FSOPEN = 5430 - SYS_FSCONFIG = 5431 - SYS_FSMOUNT = 5432 - SYS_FSPICK = 5433 - SYS_PIDFD_OPEN = 5434 - SYS_CLONE3 = 5435 - SYS_CLOSE_RANGE = 5436 - SYS_OPENAT2 = 5437 - SYS_PIDFD_GETFD = 5438 - SYS_FACCESSAT2 = 5439 - SYS_PROCESS_MADVISE = 5440 - SYS_EPOLL_PWAIT2 = 5441 - SYS_MOUNT_SETATTR = 5442 + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 + SYS_RSEQ = 5327 + SYS_IO_PGETEVENTS = 5328 + SYS_PIDFD_SEND_SIGNAL = 5424 + SYS_IO_URING_SETUP = 5425 + SYS_IO_URING_ENTER = 5426 + SYS_IO_URING_REGISTER = 5427 + SYS_OPEN_TREE = 5428 + SYS_MOVE_MOUNT = 5429 + SYS_FSOPEN = 5430 + SYS_FSCONFIG = 5431 + SYS_FSMOUNT = 5432 + SYS_FSPICK = 5433 + SYS_PIDFD_OPEN = 5434 + SYS_CLONE3 = 5435 + SYS_CLOSE_RANGE = 5436 + SYS_OPENAT2 = 5437 + SYS_PIDFD_GETFD = 5438 + SYS_FACCESSAT2 = 5439 + SYS_PROCESS_MADVISE = 5440 + SYS_EPOLL_PWAIT2 = 5441 + SYS_MOUNT_SETATTR = 5442 + SYS_QUOTACTL_FD = 5443 + SYS_LANDLOCK_CREATE_RULESET = 5444 + SYS_LANDLOCK_ADD_RULE = 5445 + SYS_LANDLOCK_RESTRICT_SELF = 5446 + SYS_PROCESS_MRELEASE = 5448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index 80e6696b3..fda9a6a99 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -424,4 +424,9 @@ const ( SYS_PROCESS_MADVISE = 4440 SYS_EPOLL_PWAIT2 = 4441 SYS_MOUNT_SETATTR = 4442 + SYS_QUOTACTL_FD = 4443 + SYS_LANDLOCK_CREATE_RULESET = 4444 + SYS_LANDLOCK_ADD_RULE = 4445 + SYS_LANDLOCK_RESTRICT_SELF = 4446 + SYS_PROCESS_MRELEASE = 4448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index b9d697ffb..e8496150d 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -431,4 +431,9 @@ const ( SYS_PROCESS_MADVISE = 440 SYS_EPOLL_PWAIT2 = 441 SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 08edc54d3..5ee0678a3 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -7,400 +7,405 @@ package unix const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAITPID = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_TIME = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BREAK = 17 - SYS_OLDSTAT = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_STIME = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_OLDFSTAT = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_STTY = 31 - SYS_GTTY = 32 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_FTIME = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_PROF = 44 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_LOCK = 53 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_MPX = 56 - SYS_SETPGID = 57 - SYS_ULIMIT = 58 - SYS_OLDOLDUNAME = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SGETMASK = 68 - SYS_SSETMASK = 69 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRLIMIT = 76 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SELECT = 82 - SYS_SYMLINK = 83 - SYS_OLDLSTAT = 84 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_PROFIL = 98 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_IOPERM = 101 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_OLDUNAME = 109 - SYS_IOPL = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_VM86 = 113 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_MODIFY_LDT = 123 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_QUERY_MODULE = 166 - SYS_POLL = 167 - SYS_NFSSERVCTL = 168 - SYS_SETRESGID = 169 - SYS_GETRESGID = 170 - SYS_PRCTL = 171 - SYS_RT_SIGRETURN = 172 - SYS_RT_SIGACTION = 173 - SYS_RT_SIGPROCMASK = 174 - SYS_RT_SIGPENDING = 175 - SYS_RT_SIGTIMEDWAIT = 176 - SYS_RT_SIGQUEUEINFO = 177 - SYS_RT_SIGSUSPEND = 178 - SYS_PREAD64 = 179 - SYS_PWRITE64 = 180 - SYS_CHOWN = 181 - SYS_GETCWD = 182 - SYS_CAPGET = 183 - SYS_CAPSET = 184 - SYS_SIGALTSTACK = 185 - SYS_SENDFILE = 186 - SYS_GETPMSG = 187 - SYS_PUTPMSG = 188 - SYS_VFORK = 189 - SYS_UGETRLIMIT = 190 - SYS_READAHEAD = 191 - SYS_PCICONFIG_READ = 198 - SYS_PCICONFIG_WRITE = 199 - SYS_PCICONFIG_IOBASE = 200 - SYS_MULTIPLEXER = 201 - SYS_GETDENTS64 = 202 - SYS_PIVOT_ROOT = 203 - SYS_MADVISE = 205 - SYS_MINCORE = 206 - SYS_GETTID = 207 - SYS_TKILL = 208 - SYS_SETXATTR = 209 - SYS_LSETXATTR = 210 - SYS_FSETXATTR = 211 - SYS_GETXATTR = 212 - SYS_LGETXATTR = 213 - SYS_FGETXATTR = 214 - SYS_LISTXATTR = 215 - SYS_LLISTXATTR = 216 - SYS_FLISTXATTR = 217 - SYS_REMOVEXATTR = 218 - SYS_LREMOVEXATTR = 219 - SYS_FREMOVEXATTR = 220 - SYS_FUTEX = 221 - SYS_SCHED_SETAFFINITY = 222 - SYS_SCHED_GETAFFINITY = 223 - SYS_TUXCALL = 225 - SYS_IO_SETUP = 227 - SYS_IO_DESTROY = 228 - SYS_IO_GETEVENTS = 229 - SYS_IO_SUBMIT = 230 - SYS_IO_CANCEL = 231 - SYS_SET_TID_ADDRESS = 232 - SYS_FADVISE64 = 233 - SYS_EXIT_GROUP = 234 - SYS_LOOKUP_DCOOKIE = 235 - SYS_EPOLL_CREATE = 236 - SYS_EPOLL_CTL = 237 - SYS_EPOLL_WAIT = 238 - SYS_REMAP_FILE_PAGES = 239 - SYS_TIMER_CREATE = 240 - SYS_TIMER_SETTIME = 241 - SYS_TIMER_GETTIME = 242 - SYS_TIMER_GETOVERRUN = 243 - SYS_TIMER_DELETE = 244 - SYS_CLOCK_SETTIME = 245 - SYS_CLOCK_GETTIME = 246 - SYS_CLOCK_GETRES = 247 - SYS_CLOCK_NANOSLEEP = 248 - SYS_SWAPCONTEXT = 249 - SYS_TGKILL = 250 - SYS_UTIMES = 251 - SYS_STATFS64 = 252 - SYS_FSTATFS64 = 253 - SYS_RTAS = 255 - SYS_SYS_DEBUG_SETCONTEXT = 256 - SYS_MIGRATE_PAGES = 258 - SYS_MBIND = 259 - SYS_GET_MEMPOLICY = 260 - SYS_SET_MEMPOLICY = 261 - SYS_MQ_OPEN = 262 - SYS_MQ_UNLINK = 263 - SYS_MQ_TIMEDSEND = 264 - SYS_MQ_TIMEDRECEIVE = 265 - SYS_MQ_NOTIFY = 266 - SYS_MQ_GETSETATTR = 267 - SYS_KEXEC_LOAD = 268 - SYS_ADD_KEY = 269 - SYS_REQUEST_KEY = 270 - SYS_KEYCTL = 271 - SYS_WAITID = 272 - SYS_IOPRIO_SET = 273 - SYS_IOPRIO_GET = 274 - SYS_INOTIFY_INIT = 275 - SYS_INOTIFY_ADD_WATCH = 276 - SYS_INOTIFY_RM_WATCH = 277 - SYS_SPU_RUN = 278 - SYS_SPU_CREATE = 279 - SYS_PSELECT6 = 280 - SYS_PPOLL = 281 - SYS_UNSHARE = 282 - SYS_SPLICE = 283 - SYS_TEE = 284 - SYS_VMSPLICE = 285 - SYS_OPENAT = 286 - SYS_MKDIRAT = 287 - SYS_MKNODAT = 288 - SYS_FCHOWNAT = 289 - SYS_FUTIMESAT = 290 - SYS_NEWFSTATAT = 291 - SYS_UNLINKAT = 292 - SYS_RENAMEAT = 293 - SYS_LINKAT = 294 - SYS_SYMLINKAT = 295 - SYS_READLINKAT = 296 - SYS_FCHMODAT = 297 - SYS_FACCESSAT = 298 - SYS_GET_ROBUST_LIST = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_MOVE_PAGES = 301 - SYS_GETCPU = 302 - SYS_EPOLL_PWAIT = 303 - SYS_UTIMENSAT = 304 - SYS_SIGNALFD = 305 - SYS_TIMERFD_CREATE = 306 - SYS_EVENTFD = 307 - SYS_SYNC_FILE_RANGE2 = 308 - SYS_FALLOCATE = 309 - SYS_SUBPAGE_PROT = 310 - SYS_TIMERFD_SETTIME = 311 - SYS_TIMERFD_GETTIME = 312 - SYS_SIGNALFD4 = 313 - SYS_EVENTFD2 = 314 - SYS_EPOLL_CREATE1 = 315 - SYS_DUP3 = 316 - SYS_PIPE2 = 317 - SYS_INOTIFY_INIT1 = 318 - SYS_PERF_EVENT_OPEN = 319 - SYS_PREADV = 320 - SYS_PWRITEV = 321 - SYS_RT_TGSIGQUEUEINFO = 322 - SYS_FANOTIFY_INIT = 323 - SYS_FANOTIFY_MARK = 324 - SYS_PRLIMIT64 = 325 - SYS_SOCKET = 326 - SYS_BIND = 327 - SYS_CONNECT = 328 - SYS_LISTEN = 329 - SYS_ACCEPT = 330 - SYS_GETSOCKNAME = 331 - SYS_GETPEERNAME = 332 - SYS_SOCKETPAIR = 333 - SYS_SEND = 334 - SYS_SENDTO = 335 - SYS_RECV = 336 - SYS_RECVFROM = 337 - SYS_SHUTDOWN = 338 - SYS_SETSOCKOPT = 339 - SYS_GETSOCKOPT = 340 - SYS_SENDMSG = 341 - SYS_RECVMSG = 342 - SYS_RECVMMSG = 343 - SYS_ACCEPT4 = 344 - SYS_NAME_TO_HANDLE_AT = 345 - SYS_OPEN_BY_HANDLE_AT = 346 - SYS_CLOCK_ADJTIME = 347 - SYS_SYNCFS = 348 - SYS_SENDMMSG = 349 - SYS_SETNS = 350 - SYS_PROCESS_VM_READV = 351 - SYS_PROCESS_VM_WRITEV = 352 - SYS_FINIT_MODULE = 353 - SYS_KCMP = 354 - SYS_SCHED_SETATTR = 355 - SYS_SCHED_GETATTR = 356 - SYS_RENAMEAT2 = 357 - SYS_SECCOMP = 358 - SYS_GETRANDOM = 359 - SYS_MEMFD_CREATE = 360 - SYS_BPF = 361 - SYS_EXECVEAT = 362 - SYS_SWITCH_ENDIAN = 363 - SYS_USERFAULTFD = 364 - SYS_MEMBARRIER = 365 - SYS_MLOCK2 = 378 - SYS_COPY_FILE_RANGE = 379 - SYS_PREADV2 = 380 - SYS_PWRITEV2 = 381 - SYS_KEXEC_FILE_LOAD = 382 - SYS_STATX = 383 - SYS_PKEY_ALLOC = 384 - SYS_PKEY_FREE = 385 - SYS_PKEY_MPROTECT = 386 - SYS_RSEQ = 387 - SYS_IO_PGETEVENTS = 388 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 33b33b083..29c0f9a39 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -7,400 +7,405 @@ package unix const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAITPID = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_TIME = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BREAK = 17 - SYS_OLDSTAT = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_STIME = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_OLDFSTAT = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_STTY = 31 - SYS_GTTY = 32 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_FTIME = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_PROF = 44 - SYS_BRK = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_LOCK = 53 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_MPX = 56 - SYS_SETPGID = 57 - SYS_ULIMIT = 58 - SYS_OLDOLDUNAME = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SGETMASK = 68 - SYS_SSETMASK = 69 - SYS_SETREUID = 70 - SYS_SETREGID = 71 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRLIMIT = 76 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_GETGROUPS = 80 - SYS_SETGROUPS = 81 - SYS_SELECT = 82 - SYS_SYMLINK = 83 - SYS_OLDLSTAT = 84 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_FCHOWN = 95 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_PROFIL = 98 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_IOPERM = 101 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_OLDUNAME = 109 - SYS_IOPL = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_VM86 = 113 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_MODIFY_LDT = 123 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_SETFSUID = 138 - SYS_SETFSGID = 139 - SYS__LLSEEK = 140 - SYS_GETDENTS = 141 - SYS__NEWSELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_SETRESUID = 164 - SYS_GETRESUID = 165 - SYS_QUERY_MODULE = 166 - SYS_POLL = 167 - SYS_NFSSERVCTL = 168 - SYS_SETRESGID = 169 - SYS_GETRESGID = 170 - SYS_PRCTL = 171 - SYS_RT_SIGRETURN = 172 - SYS_RT_SIGACTION = 173 - SYS_RT_SIGPROCMASK = 174 - SYS_RT_SIGPENDING = 175 - SYS_RT_SIGTIMEDWAIT = 176 - SYS_RT_SIGQUEUEINFO = 177 - SYS_RT_SIGSUSPEND = 178 - SYS_PREAD64 = 179 - SYS_PWRITE64 = 180 - SYS_CHOWN = 181 - SYS_GETCWD = 182 - SYS_CAPGET = 183 - SYS_CAPSET = 184 - SYS_SIGALTSTACK = 185 - SYS_SENDFILE = 186 - SYS_GETPMSG = 187 - SYS_PUTPMSG = 188 - SYS_VFORK = 189 - SYS_UGETRLIMIT = 190 - SYS_READAHEAD = 191 - SYS_PCICONFIG_READ = 198 - SYS_PCICONFIG_WRITE = 199 - SYS_PCICONFIG_IOBASE = 200 - SYS_MULTIPLEXER = 201 - SYS_GETDENTS64 = 202 - SYS_PIVOT_ROOT = 203 - SYS_MADVISE = 205 - SYS_MINCORE = 206 - SYS_GETTID = 207 - SYS_TKILL = 208 - SYS_SETXATTR = 209 - SYS_LSETXATTR = 210 - SYS_FSETXATTR = 211 - SYS_GETXATTR = 212 - SYS_LGETXATTR = 213 - SYS_FGETXATTR = 214 - SYS_LISTXATTR = 215 - SYS_LLISTXATTR = 216 - SYS_FLISTXATTR = 217 - SYS_REMOVEXATTR = 218 - SYS_LREMOVEXATTR = 219 - SYS_FREMOVEXATTR = 220 - SYS_FUTEX = 221 - SYS_SCHED_SETAFFINITY = 222 - SYS_SCHED_GETAFFINITY = 223 - SYS_TUXCALL = 225 - SYS_IO_SETUP = 227 - SYS_IO_DESTROY = 228 - SYS_IO_GETEVENTS = 229 - SYS_IO_SUBMIT = 230 - SYS_IO_CANCEL = 231 - SYS_SET_TID_ADDRESS = 232 - SYS_FADVISE64 = 233 - SYS_EXIT_GROUP = 234 - SYS_LOOKUP_DCOOKIE = 235 - SYS_EPOLL_CREATE = 236 - SYS_EPOLL_CTL = 237 - SYS_EPOLL_WAIT = 238 - SYS_REMAP_FILE_PAGES = 239 - SYS_TIMER_CREATE = 240 - SYS_TIMER_SETTIME = 241 - SYS_TIMER_GETTIME = 242 - SYS_TIMER_GETOVERRUN = 243 - SYS_TIMER_DELETE = 244 - SYS_CLOCK_SETTIME = 245 - SYS_CLOCK_GETTIME = 246 - SYS_CLOCK_GETRES = 247 - SYS_CLOCK_NANOSLEEP = 248 - SYS_SWAPCONTEXT = 249 - SYS_TGKILL = 250 - SYS_UTIMES = 251 - SYS_STATFS64 = 252 - SYS_FSTATFS64 = 253 - SYS_RTAS = 255 - SYS_SYS_DEBUG_SETCONTEXT = 256 - SYS_MIGRATE_PAGES = 258 - SYS_MBIND = 259 - SYS_GET_MEMPOLICY = 260 - SYS_SET_MEMPOLICY = 261 - SYS_MQ_OPEN = 262 - SYS_MQ_UNLINK = 263 - SYS_MQ_TIMEDSEND = 264 - SYS_MQ_TIMEDRECEIVE = 265 - SYS_MQ_NOTIFY = 266 - SYS_MQ_GETSETATTR = 267 - SYS_KEXEC_LOAD = 268 - SYS_ADD_KEY = 269 - SYS_REQUEST_KEY = 270 - SYS_KEYCTL = 271 - SYS_WAITID = 272 - SYS_IOPRIO_SET = 273 - SYS_IOPRIO_GET = 274 - SYS_INOTIFY_INIT = 275 - SYS_INOTIFY_ADD_WATCH = 276 - SYS_INOTIFY_RM_WATCH = 277 - SYS_SPU_RUN = 278 - SYS_SPU_CREATE = 279 - SYS_PSELECT6 = 280 - SYS_PPOLL = 281 - SYS_UNSHARE = 282 - SYS_SPLICE = 283 - SYS_TEE = 284 - SYS_VMSPLICE = 285 - SYS_OPENAT = 286 - SYS_MKDIRAT = 287 - SYS_MKNODAT = 288 - SYS_FCHOWNAT = 289 - SYS_FUTIMESAT = 290 - SYS_NEWFSTATAT = 291 - SYS_UNLINKAT = 292 - SYS_RENAMEAT = 293 - SYS_LINKAT = 294 - SYS_SYMLINKAT = 295 - SYS_READLINKAT = 296 - SYS_FCHMODAT = 297 - SYS_FACCESSAT = 298 - SYS_GET_ROBUST_LIST = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_MOVE_PAGES = 301 - SYS_GETCPU = 302 - SYS_EPOLL_PWAIT = 303 - SYS_UTIMENSAT = 304 - SYS_SIGNALFD = 305 - SYS_TIMERFD_CREATE = 306 - SYS_EVENTFD = 307 - SYS_SYNC_FILE_RANGE2 = 308 - SYS_FALLOCATE = 309 - SYS_SUBPAGE_PROT = 310 - SYS_TIMERFD_SETTIME = 311 - SYS_TIMERFD_GETTIME = 312 - SYS_SIGNALFD4 = 313 - SYS_EVENTFD2 = 314 - SYS_EPOLL_CREATE1 = 315 - SYS_DUP3 = 316 - SYS_PIPE2 = 317 - SYS_INOTIFY_INIT1 = 318 - SYS_PERF_EVENT_OPEN = 319 - SYS_PREADV = 320 - SYS_PWRITEV = 321 - SYS_RT_TGSIGQUEUEINFO = 322 - SYS_FANOTIFY_INIT = 323 - SYS_FANOTIFY_MARK = 324 - SYS_PRLIMIT64 = 325 - SYS_SOCKET = 326 - SYS_BIND = 327 - SYS_CONNECT = 328 - SYS_LISTEN = 329 - SYS_ACCEPT = 330 - SYS_GETSOCKNAME = 331 - SYS_GETPEERNAME = 332 - SYS_SOCKETPAIR = 333 - SYS_SEND = 334 - SYS_SENDTO = 335 - SYS_RECV = 336 - SYS_RECVFROM = 337 - SYS_SHUTDOWN = 338 - SYS_SETSOCKOPT = 339 - SYS_GETSOCKOPT = 340 - SYS_SENDMSG = 341 - SYS_RECVMSG = 342 - SYS_RECVMMSG = 343 - SYS_ACCEPT4 = 344 - SYS_NAME_TO_HANDLE_AT = 345 - SYS_OPEN_BY_HANDLE_AT = 346 - SYS_CLOCK_ADJTIME = 347 - SYS_SYNCFS = 348 - SYS_SENDMMSG = 349 - SYS_SETNS = 350 - SYS_PROCESS_VM_READV = 351 - SYS_PROCESS_VM_WRITEV = 352 - SYS_FINIT_MODULE = 353 - SYS_KCMP = 354 - SYS_SCHED_SETATTR = 355 - SYS_SCHED_GETATTR = 356 - SYS_RENAMEAT2 = 357 - SYS_SECCOMP = 358 - SYS_GETRANDOM = 359 - SYS_MEMFD_CREATE = 360 - SYS_BPF = 361 - SYS_EXECVEAT = 362 - SYS_SWITCH_ENDIAN = 363 - SYS_USERFAULTFD = 364 - SYS_MEMBARRIER = 365 - SYS_MLOCK2 = 378 - SYS_COPY_FILE_RANGE = 379 - SYS_PREADV2 = 380 - SYS_PWRITEV2 = 381 - SYS_KEXEC_FILE_LOAD = 382 - SYS_STATX = 383 - SYS_PKEY_ALLOC = 384 - SYS_PKEY_FREE = 385 - SYS_PKEY_MPROTECT = 386 - SYS_RSEQ = 387 - SYS_IO_PGETEVENTS = 388 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 66c8a8e09..5c9a9a3b6 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -7,302 +7,307 @@ package unix const ( - SYS_IO_SETUP = 0 - SYS_IO_DESTROY = 1 - SYS_IO_SUBMIT = 2 - SYS_IO_CANCEL = 3 - SYS_IO_GETEVENTS = 4 - SYS_SETXATTR = 5 - SYS_LSETXATTR = 6 - SYS_FSETXATTR = 7 - SYS_GETXATTR = 8 - SYS_LGETXATTR = 9 - SYS_FGETXATTR = 10 - SYS_LISTXATTR = 11 - SYS_LLISTXATTR = 12 - SYS_FLISTXATTR = 13 - SYS_REMOVEXATTR = 14 - SYS_LREMOVEXATTR = 15 - SYS_FREMOVEXATTR = 16 - SYS_GETCWD = 17 - SYS_LOOKUP_DCOOKIE = 18 - SYS_EVENTFD2 = 19 - SYS_EPOLL_CREATE1 = 20 - SYS_EPOLL_CTL = 21 - SYS_EPOLL_PWAIT = 22 - SYS_DUP = 23 - SYS_DUP3 = 24 - SYS_FCNTL = 25 - SYS_INOTIFY_INIT1 = 26 - SYS_INOTIFY_ADD_WATCH = 27 - SYS_INOTIFY_RM_WATCH = 28 - SYS_IOCTL = 29 - SYS_IOPRIO_SET = 30 - SYS_IOPRIO_GET = 31 - SYS_FLOCK = 32 - SYS_MKNODAT = 33 - SYS_MKDIRAT = 34 - SYS_UNLINKAT = 35 - SYS_SYMLINKAT = 36 - SYS_LINKAT = 37 - SYS_UMOUNT2 = 39 - SYS_MOUNT = 40 - SYS_PIVOT_ROOT = 41 - SYS_NFSSERVCTL = 42 - SYS_STATFS = 43 - SYS_FSTATFS = 44 - SYS_TRUNCATE = 45 - SYS_FTRUNCATE = 46 - SYS_FALLOCATE = 47 - SYS_FACCESSAT = 48 - SYS_CHDIR = 49 - SYS_FCHDIR = 50 - SYS_CHROOT = 51 - SYS_FCHMOD = 52 - SYS_FCHMODAT = 53 - SYS_FCHOWNAT = 54 - SYS_FCHOWN = 55 - SYS_OPENAT = 56 - SYS_CLOSE = 57 - SYS_VHANGUP = 58 - SYS_PIPE2 = 59 - SYS_QUOTACTL = 60 - SYS_GETDENTS64 = 61 - SYS_LSEEK = 62 - SYS_READ = 63 - SYS_WRITE = 64 - SYS_READV = 65 - SYS_WRITEV = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_PREADV = 69 - SYS_PWRITEV = 70 - SYS_SENDFILE = 71 - SYS_PSELECT6 = 72 - SYS_PPOLL = 73 - SYS_SIGNALFD4 = 74 - SYS_VMSPLICE = 75 - SYS_SPLICE = 76 - SYS_TEE = 77 - SYS_READLINKAT = 78 - SYS_FSTATAT = 79 - SYS_FSTAT = 80 - SYS_SYNC = 81 - SYS_FSYNC = 82 - SYS_FDATASYNC = 83 - SYS_SYNC_FILE_RANGE = 84 - SYS_TIMERFD_CREATE = 85 - SYS_TIMERFD_SETTIME = 86 - SYS_TIMERFD_GETTIME = 87 - SYS_UTIMENSAT = 88 - SYS_ACCT = 89 - SYS_CAPGET = 90 - SYS_CAPSET = 91 - SYS_PERSONALITY = 92 - SYS_EXIT = 93 - SYS_EXIT_GROUP = 94 - SYS_WAITID = 95 - SYS_SET_TID_ADDRESS = 96 - SYS_UNSHARE = 97 - SYS_FUTEX = 98 - SYS_SET_ROBUST_LIST = 99 - SYS_GET_ROBUST_LIST = 100 - SYS_NANOSLEEP = 101 - SYS_GETITIMER = 102 - SYS_SETITIMER = 103 - SYS_KEXEC_LOAD = 104 - SYS_INIT_MODULE = 105 - SYS_DELETE_MODULE = 106 - SYS_TIMER_CREATE = 107 - SYS_TIMER_GETTIME = 108 - SYS_TIMER_GETOVERRUN = 109 - SYS_TIMER_SETTIME = 110 - SYS_TIMER_DELETE = 111 - SYS_CLOCK_SETTIME = 112 - SYS_CLOCK_GETTIME = 113 - SYS_CLOCK_GETRES = 114 - SYS_CLOCK_NANOSLEEP = 115 - SYS_SYSLOG = 116 - SYS_PTRACE = 117 - SYS_SCHED_SETPARAM = 118 - SYS_SCHED_SETSCHEDULER = 119 - SYS_SCHED_GETSCHEDULER = 120 - SYS_SCHED_GETPARAM = 121 - SYS_SCHED_SETAFFINITY = 122 - SYS_SCHED_GETAFFINITY = 123 - SYS_SCHED_YIELD = 124 - SYS_SCHED_GET_PRIORITY_MAX = 125 - SYS_SCHED_GET_PRIORITY_MIN = 126 - SYS_SCHED_RR_GET_INTERVAL = 127 - SYS_RESTART_SYSCALL = 128 - SYS_KILL = 129 - SYS_TKILL = 130 - SYS_TGKILL = 131 - SYS_SIGALTSTACK = 132 - SYS_RT_SIGSUSPEND = 133 - SYS_RT_SIGACTION = 134 - SYS_RT_SIGPROCMASK = 135 - SYS_RT_SIGPENDING = 136 - SYS_RT_SIGTIMEDWAIT = 137 - SYS_RT_SIGQUEUEINFO = 138 - SYS_RT_SIGRETURN = 139 - SYS_SETPRIORITY = 140 - SYS_GETPRIORITY = 141 - SYS_REBOOT = 142 - SYS_SETREGID = 143 - SYS_SETGID = 144 - SYS_SETREUID = 145 - SYS_SETUID = 146 - SYS_SETRESUID = 147 - SYS_GETRESUID = 148 - SYS_SETRESGID = 149 - SYS_GETRESGID = 150 - SYS_SETFSUID = 151 - SYS_SETFSGID = 152 - SYS_TIMES = 153 - SYS_SETPGID = 154 - SYS_GETPGID = 155 - SYS_GETSID = 156 - SYS_SETSID = 157 - SYS_GETGROUPS = 158 - SYS_SETGROUPS = 159 - SYS_UNAME = 160 - SYS_SETHOSTNAME = 161 - SYS_SETDOMAINNAME = 162 - SYS_GETRLIMIT = 163 - SYS_SETRLIMIT = 164 - SYS_GETRUSAGE = 165 - SYS_UMASK = 166 - SYS_PRCTL = 167 - SYS_GETCPU = 168 - SYS_GETTIMEOFDAY = 169 - SYS_SETTIMEOFDAY = 170 - SYS_ADJTIMEX = 171 - SYS_GETPID = 172 - SYS_GETPPID = 173 - SYS_GETUID = 174 - SYS_GETEUID = 175 - SYS_GETGID = 176 - SYS_GETEGID = 177 - SYS_GETTID = 178 - SYS_SYSINFO = 179 - SYS_MQ_OPEN = 180 - SYS_MQ_UNLINK = 181 - SYS_MQ_TIMEDSEND = 182 - SYS_MQ_TIMEDRECEIVE = 183 - SYS_MQ_NOTIFY = 184 - SYS_MQ_GETSETATTR = 185 - SYS_MSGGET = 186 - SYS_MSGCTL = 187 - SYS_MSGRCV = 188 - SYS_MSGSND = 189 - SYS_SEMGET = 190 - SYS_SEMCTL = 191 - SYS_SEMTIMEDOP = 192 - SYS_SEMOP = 193 - SYS_SHMGET = 194 - SYS_SHMCTL = 195 - SYS_SHMAT = 196 - SYS_SHMDT = 197 - SYS_SOCKET = 198 - SYS_SOCKETPAIR = 199 - SYS_BIND = 200 - SYS_LISTEN = 201 - SYS_ACCEPT = 202 - SYS_CONNECT = 203 - SYS_GETSOCKNAME = 204 - SYS_GETPEERNAME = 205 - SYS_SENDTO = 206 - SYS_RECVFROM = 207 - SYS_SETSOCKOPT = 208 - SYS_GETSOCKOPT = 209 - SYS_SHUTDOWN = 210 - SYS_SENDMSG = 211 - SYS_RECVMSG = 212 - SYS_READAHEAD = 213 - SYS_BRK = 214 - SYS_MUNMAP = 215 - SYS_MREMAP = 216 - SYS_ADD_KEY = 217 - SYS_REQUEST_KEY = 218 - SYS_KEYCTL = 219 - SYS_CLONE = 220 - SYS_EXECVE = 221 - SYS_MMAP = 222 - SYS_FADVISE64 = 223 - SYS_SWAPON = 224 - SYS_SWAPOFF = 225 - SYS_MPROTECT = 226 - SYS_MSYNC = 227 - SYS_MLOCK = 228 - SYS_MUNLOCK = 229 - SYS_MLOCKALL = 230 - SYS_MUNLOCKALL = 231 - SYS_MINCORE = 232 - SYS_MADVISE = 233 - SYS_REMAP_FILE_PAGES = 234 - SYS_MBIND = 235 - SYS_GET_MEMPOLICY = 236 - SYS_SET_MEMPOLICY = 237 - SYS_MIGRATE_PAGES = 238 - SYS_MOVE_PAGES = 239 - SYS_RT_TGSIGQUEUEINFO = 240 - SYS_PERF_EVENT_OPEN = 241 - SYS_ACCEPT4 = 242 - SYS_RECVMMSG = 243 - SYS_ARCH_SPECIFIC_SYSCALL = 244 - SYS_WAIT4 = 260 - SYS_PRLIMIT64 = 261 - SYS_FANOTIFY_INIT = 262 - SYS_FANOTIFY_MARK = 263 - SYS_NAME_TO_HANDLE_AT = 264 - SYS_OPEN_BY_HANDLE_AT = 265 - SYS_CLOCK_ADJTIME = 266 - SYS_SYNCFS = 267 - SYS_SETNS = 268 - SYS_SENDMMSG = 269 - SYS_PROCESS_VM_READV = 270 - SYS_PROCESS_VM_WRITEV = 271 - SYS_KCMP = 272 - SYS_FINIT_MODULE = 273 - SYS_SCHED_SETATTR = 274 - SYS_SCHED_GETATTR = 275 - SYS_RENAMEAT2 = 276 - SYS_SECCOMP = 277 - SYS_GETRANDOM = 278 - SYS_MEMFD_CREATE = 279 - SYS_BPF = 280 - SYS_EXECVEAT = 281 - SYS_USERFAULTFD = 282 - SYS_MEMBARRIER = 283 - SYS_MLOCK2 = 284 - SYS_COPY_FILE_RANGE = 285 - SYS_PREADV2 = 286 - SYS_PWRITEV2 = 287 - SYS_PKEY_MPROTECT = 288 - SYS_PKEY_ALLOC = 289 - SYS_PKEY_FREE = 290 - SYS_STATX = 291 - SYS_IO_PGETEVENTS = 292 - SYS_RSEQ = 293 - SYS_KEXEC_FILE_LOAD = 294 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index aea5760ce..913f50f98 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -7,365 +7,370 @@ package unix const ( - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_RESTART_SYSCALL = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECVE = 11 - SYS_CHDIR = 12 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_MOUNT = 21 - SYS_UMOUNT = 22 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_RENAME = 38 - SYS_MKDIR = 39 - SYS_RMDIR = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_BRK = 45 - SYS_SIGNAL = 48 - SYS_ACCT = 51 - SYS_UMOUNT2 = 52 - SYS_IOCTL = 54 - SYS_FCNTL = 55 - SYS_SETPGID = 57 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_USTAT = 62 - SYS_DUP2 = 63 - SYS_GETPPID = 64 - SYS_GETPGRP = 65 - SYS_SETSID = 66 - SYS_SIGACTION = 67 - SYS_SIGSUSPEND = 72 - SYS_SIGPENDING = 73 - SYS_SETHOSTNAME = 74 - SYS_SETRLIMIT = 75 - SYS_GETRUSAGE = 77 - SYS_GETTIMEOFDAY = 78 - SYS_SETTIMEOFDAY = 79 - SYS_SYMLINK = 83 - SYS_READLINK = 85 - SYS_USELIB = 86 - SYS_SWAPON = 87 - SYS_REBOOT = 88 - SYS_READDIR = 89 - SYS_MMAP = 90 - SYS_MUNMAP = 91 - SYS_TRUNCATE = 92 - SYS_FTRUNCATE = 93 - SYS_FCHMOD = 94 - SYS_GETPRIORITY = 96 - SYS_SETPRIORITY = 97 - SYS_STATFS = 99 - SYS_FSTATFS = 100 - SYS_SOCKETCALL = 102 - SYS_SYSLOG = 103 - SYS_SETITIMER = 104 - SYS_GETITIMER = 105 - SYS_STAT = 106 - SYS_LSTAT = 107 - SYS_FSTAT = 108 - SYS_LOOKUP_DCOOKIE = 110 - SYS_VHANGUP = 111 - SYS_IDLE = 112 - SYS_WAIT4 = 114 - SYS_SWAPOFF = 115 - SYS_SYSINFO = 116 - SYS_IPC = 117 - SYS_FSYNC = 118 - SYS_SIGRETURN = 119 - SYS_CLONE = 120 - SYS_SETDOMAINNAME = 121 - SYS_UNAME = 122 - SYS_ADJTIMEX = 124 - SYS_MPROTECT = 125 - SYS_SIGPROCMASK = 126 - SYS_CREATE_MODULE = 127 - SYS_INIT_MODULE = 128 - SYS_DELETE_MODULE = 129 - SYS_GET_KERNEL_SYMS = 130 - SYS_QUOTACTL = 131 - SYS_GETPGID = 132 - SYS_FCHDIR = 133 - SYS_BDFLUSH = 134 - SYS_SYSFS = 135 - SYS_PERSONALITY = 136 - SYS_AFS_SYSCALL = 137 - SYS_GETDENTS = 141 - SYS_SELECT = 142 - SYS_FLOCK = 143 - SYS_MSYNC = 144 - SYS_READV = 145 - SYS_WRITEV = 146 - SYS_GETSID = 147 - SYS_FDATASYNC = 148 - SYS__SYSCTL = 149 - SYS_MLOCK = 150 - SYS_MUNLOCK = 151 - SYS_MLOCKALL = 152 - SYS_MUNLOCKALL = 153 - SYS_SCHED_SETPARAM = 154 - SYS_SCHED_GETPARAM = 155 - SYS_SCHED_SETSCHEDULER = 156 - SYS_SCHED_GETSCHEDULER = 157 - SYS_SCHED_YIELD = 158 - SYS_SCHED_GET_PRIORITY_MAX = 159 - SYS_SCHED_GET_PRIORITY_MIN = 160 - SYS_SCHED_RR_GET_INTERVAL = 161 - SYS_NANOSLEEP = 162 - SYS_MREMAP = 163 - SYS_QUERY_MODULE = 167 - SYS_POLL = 168 - SYS_NFSSERVCTL = 169 - SYS_PRCTL = 172 - SYS_RT_SIGRETURN = 173 - SYS_RT_SIGACTION = 174 - SYS_RT_SIGPROCMASK = 175 - SYS_RT_SIGPENDING = 176 - SYS_RT_SIGTIMEDWAIT = 177 - SYS_RT_SIGQUEUEINFO = 178 - SYS_RT_SIGSUSPEND = 179 - SYS_PREAD64 = 180 - SYS_PWRITE64 = 181 - SYS_GETCWD = 183 - SYS_CAPGET = 184 - SYS_CAPSET = 185 - SYS_SIGALTSTACK = 186 - SYS_SENDFILE = 187 - SYS_GETPMSG = 188 - SYS_PUTPMSG = 189 - SYS_VFORK = 190 - SYS_GETRLIMIT = 191 - SYS_LCHOWN = 198 - SYS_GETUID = 199 - SYS_GETGID = 200 - SYS_GETEUID = 201 - SYS_GETEGID = 202 - SYS_SETREUID = 203 - SYS_SETREGID = 204 - SYS_GETGROUPS = 205 - SYS_SETGROUPS = 206 - SYS_FCHOWN = 207 - SYS_SETRESUID = 208 - SYS_GETRESUID = 209 - SYS_SETRESGID = 210 - SYS_GETRESGID = 211 - SYS_CHOWN = 212 - SYS_SETUID = 213 - SYS_SETGID = 214 - SYS_SETFSUID = 215 - SYS_SETFSGID = 216 - SYS_PIVOT_ROOT = 217 - SYS_MINCORE = 218 - SYS_MADVISE = 219 - SYS_GETDENTS64 = 220 - SYS_READAHEAD = 222 - SYS_SETXATTR = 224 - SYS_LSETXATTR = 225 - SYS_FSETXATTR = 226 - SYS_GETXATTR = 227 - SYS_LGETXATTR = 228 - SYS_FGETXATTR = 229 - SYS_LISTXATTR = 230 - SYS_LLISTXATTR = 231 - SYS_FLISTXATTR = 232 - SYS_REMOVEXATTR = 233 - SYS_LREMOVEXATTR = 234 - SYS_FREMOVEXATTR = 235 - SYS_GETTID = 236 - SYS_TKILL = 237 - SYS_FUTEX = 238 - SYS_SCHED_SETAFFINITY = 239 - SYS_SCHED_GETAFFINITY = 240 - SYS_TGKILL = 241 - SYS_IO_SETUP = 243 - SYS_IO_DESTROY = 244 - SYS_IO_GETEVENTS = 245 - SYS_IO_SUBMIT = 246 - SYS_IO_CANCEL = 247 - SYS_EXIT_GROUP = 248 - SYS_EPOLL_CREATE = 249 - SYS_EPOLL_CTL = 250 - SYS_EPOLL_WAIT = 251 - SYS_SET_TID_ADDRESS = 252 - SYS_FADVISE64 = 253 - SYS_TIMER_CREATE = 254 - SYS_TIMER_SETTIME = 255 - SYS_TIMER_GETTIME = 256 - SYS_TIMER_GETOVERRUN = 257 - SYS_TIMER_DELETE = 258 - SYS_CLOCK_SETTIME = 259 - SYS_CLOCK_GETTIME = 260 - SYS_CLOCK_GETRES = 261 - SYS_CLOCK_NANOSLEEP = 262 - SYS_STATFS64 = 265 - SYS_FSTATFS64 = 266 - SYS_REMAP_FILE_PAGES = 267 - SYS_MBIND = 268 - SYS_GET_MEMPOLICY = 269 - SYS_SET_MEMPOLICY = 270 - SYS_MQ_OPEN = 271 - SYS_MQ_UNLINK = 272 - SYS_MQ_TIMEDSEND = 273 - SYS_MQ_TIMEDRECEIVE = 274 - SYS_MQ_NOTIFY = 275 - SYS_MQ_GETSETATTR = 276 - SYS_KEXEC_LOAD = 277 - SYS_ADD_KEY = 278 - SYS_REQUEST_KEY = 279 - SYS_KEYCTL = 280 - SYS_WAITID = 281 - SYS_IOPRIO_SET = 282 - SYS_IOPRIO_GET = 283 - SYS_INOTIFY_INIT = 284 - SYS_INOTIFY_ADD_WATCH = 285 - SYS_INOTIFY_RM_WATCH = 286 - SYS_MIGRATE_PAGES = 287 - SYS_OPENAT = 288 - SYS_MKDIRAT = 289 - SYS_MKNODAT = 290 - SYS_FCHOWNAT = 291 - SYS_FUTIMESAT = 292 - SYS_NEWFSTATAT = 293 - SYS_UNLINKAT = 294 - SYS_RENAMEAT = 295 - SYS_LINKAT = 296 - SYS_SYMLINKAT = 297 - SYS_READLINKAT = 298 - SYS_FCHMODAT = 299 - SYS_FACCESSAT = 300 - SYS_PSELECT6 = 301 - SYS_PPOLL = 302 - SYS_UNSHARE = 303 - SYS_SET_ROBUST_LIST = 304 - SYS_GET_ROBUST_LIST = 305 - SYS_SPLICE = 306 - SYS_SYNC_FILE_RANGE = 307 - SYS_TEE = 308 - SYS_VMSPLICE = 309 - SYS_MOVE_PAGES = 310 - SYS_GETCPU = 311 - SYS_EPOLL_PWAIT = 312 - SYS_UTIMES = 313 - SYS_FALLOCATE = 314 - SYS_UTIMENSAT = 315 - SYS_SIGNALFD = 316 - SYS_TIMERFD = 317 - SYS_EVENTFD = 318 - SYS_TIMERFD_CREATE = 319 - SYS_TIMERFD_SETTIME = 320 - SYS_TIMERFD_GETTIME = 321 - SYS_SIGNALFD4 = 322 - SYS_EVENTFD2 = 323 - SYS_INOTIFY_INIT1 = 324 - SYS_PIPE2 = 325 - SYS_DUP3 = 326 - SYS_EPOLL_CREATE1 = 327 - SYS_PREADV = 328 - SYS_PWRITEV = 329 - SYS_RT_TGSIGQUEUEINFO = 330 - SYS_PERF_EVENT_OPEN = 331 - SYS_FANOTIFY_INIT = 332 - SYS_FANOTIFY_MARK = 333 - SYS_PRLIMIT64 = 334 - SYS_NAME_TO_HANDLE_AT = 335 - SYS_OPEN_BY_HANDLE_AT = 336 - SYS_CLOCK_ADJTIME = 337 - SYS_SYNCFS = 338 - SYS_SETNS = 339 - SYS_PROCESS_VM_READV = 340 - SYS_PROCESS_VM_WRITEV = 341 - SYS_S390_RUNTIME_INSTR = 342 - SYS_KCMP = 343 - SYS_FINIT_MODULE = 344 - SYS_SCHED_SETATTR = 345 - SYS_SCHED_GETATTR = 346 - SYS_RENAMEAT2 = 347 - SYS_SECCOMP = 348 - SYS_GETRANDOM = 349 - SYS_MEMFD_CREATE = 350 - SYS_BPF = 351 - SYS_S390_PCI_MMIO_WRITE = 352 - SYS_S390_PCI_MMIO_READ = 353 - SYS_EXECVEAT = 354 - SYS_USERFAULTFD = 355 - SYS_MEMBARRIER = 356 - SYS_RECVMMSG = 357 - SYS_SENDMMSG = 358 - SYS_SOCKET = 359 - SYS_SOCKETPAIR = 360 - SYS_BIND = 361 - SYS_CONNECT = 362 - SYS_LISTEN = 363 - SYS_ACCEPT4 = 364 - SYS_GETSOCKOPT = 365 - SYS_SETSOCKOPT = 366 - SYS_GETSOCKNAME = 367 - SYS_GETPEERNAME = 368 - SYS_SENDTO = 369 - SYS_SENDMSG = 370 - SYS_RECVFROM = 371 - SYS_RECVMSG = 372 - SYS_SHUTDOWN = 373 - SYS_MLOCK2 = 374 - SYS_COPY_FILE_RANGE = 375 - SYS_PREADV2 = 376 - SYS_PWRITEV2 = 377 - SYS_S390_GUARDED_STORAGE = 378 - SYS_STATX = 379 - SYS_S390_STHYI = 380 - SYS_KEXEC_FILE_LOAD = 381 - SYS_IO_PGETEVENTS = 382 - SYS_RSEQ = 383 - SYS_PKEY_MPROTECT = 384 - SYS_PKEY_ALLOC = 385 - SYS_PKEY_FREE = 386 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLONE3 = 435 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_RESTART_SYSCALL = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SIGNAL = 48 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_LOOKUP_DCOOKIE = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_GETDENTS = 141 + SYS_SELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_GETRLIMIT = 191 + SYS_LCHOWN = 198 + SYS_GETUID = 199 + SYS_GETGID = 200 + SYS_GETEUID = 201 + SYS_GETEGID = 202 + SYS_SETREUID = 203 + SYS_SETREGID = 204 + SYS_GETGROUPS = 205 + SYS_SETGROUPS = 206 + SYS_FCHOWN = 207 + SYS_SETRESUID = 208 + SYS_GETRESUID = 209 + SYS_SETRESGID = 210 + SYS_GETRESGID = 211 + SYS_CHOWN = 212 + SYS_SETUID = 213 + SYS_SETGID = 214 + SYS_SETFSUID = 215 + SYS_SETFSGID = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_READAHEAD = 222 + SYS_SETXATTR = 224 + SYS_LSETXATTR = 225 + SYS_FSETXATTR = 226 + SYS_GETXATTR = 227 + SYS_LGETXATTR = 228 + SYS_FGETXATTR = 229 + SYS_LISTXATTR = 230 + SYS_LLISTXATTR = 231 + SYS_FLISTXATTR = 232 + SYS_REMOVEXATTR = 233 + SYS_LREMOVEXATTR = 234 + SYS_FREMOVEXATTR = 235 + SYS_GETTID = 236 + SYS_TKILL = 237 + SYS_FUTEX = 238 + SYS_SCHED_SETAFFINITY = 239 + SYS_SCHED_GETAFFINITY = 240 + SYS_TGKILL = 241 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_EPOLL_CREATE = 249 + SYS_EPOLL_CTL = 250 + SYS_EPOLL_WAIT = 251 + SYS_SET_TID_ADDRESS = 252 + SYS_FADVISE64 = 253 + SYS_TIMER_CREATE = 254 + SYS_TIMER_SETTIME = 255 + SYS_TIMER_GETTIME = 256 + SYS_TIMER_GETOVERRUN = 257 + SYS_TIMER_DELETE = 258 + SYS_CLOCK_SETTIME = 259 + SYS_CLOCK_GETTIME = 260 + SYS_CLOCK_GETRES = 261 + SYS_CLOCK_NANOSLEEP = 262 + SYS_STATFS64 = 265 + SYS_FSTATFS64 = 266 + SYS_REMAP_FILE_PAGES = 267 + SYS_MBIND = 268 + SYS_GET_MEMPOLICY = 269 + SYS_SET_MEMPOLICY = 270 + SYS_MQ_OPEN = 271 + SYS_MQ_UNLINK = 272 + SYS_MQ_TIMEDSEND = 273 + SYS_MQ_TIMEDRECEIVE = 274 + SYS_MQ_NOTIFY = 275 + SYS_MQ_GETSETATTR = 276 + SYS_KEXEC_LOAD = 277 + SYS_ADD_KEY = 278 + SYS_REQUEST_KEY = 279 + SYS_KEYCTL = 280 + SYS_WAITID = 281 + SYS_IOPRIO_SET = 282 + SYS_IOPRIO_GET = 283 + SYS_INOTIFY_INIT = 284 + SYS_INOTIFY_ADD_WATCH = 285 + SYS_INOTIFY_RM_WATCH = 286 + SYS_MIGRATE_PAGES = 287 + SYS_OPENAT = 288 + SYS_MKDIRAT = 289 + SYS_MKNODAT = 290 + SYS_FCHOWNAT = 291 + SYS_FUTIMESAT = 292 + SYS_NEWFSTATAT = 293 + SYS_UNLINKAT = 294 + SYS_RENAMEAT = 295 + SYS_LINKAT = 296 + SYS_SYMLINKAT = 297 + SYS_READLINKAT = 298 + SYS_FCHMODAT = 299 + SYS_FACCESSAT = 300 + SYS_PSELECT6 = 301 + SYS_PPOLL = 302 + SYS_UNSHARE = 303 + SYS_SET_ROBUST_LIST = 304 + SYS_GET_ROBUST_LIST = 305 + SYS_SPLICE = 306 + SYS_SYNC_FILE_RANGE = 307 + SYS_TEE = 308 + SYS_VMSPLICE = 309 + SYS_MOVE_PAGES = 310 + SYS_GETCPU = 311 + SYS_EPOLL_PWAIT = 312 + SYS_UTIMES = 313 + SYS_FALLOCATE = 314 + SYS_UTIMENSAT = 315 + SYS_SIGNALFD = 316 + SYS_TIMERFD = 317 + SYS_EVENTFD = 318 + SYS_TIMERFD_CREATE = 319 + SYS_TIMERFD_SETTIME = 320 + SYS_TIMERFD_GETTIME = 321 + SYS_SIGNALFD4 = 322 + SYS_EVENTFD2 = 323 + SYS_INOTIFY_INIT1 = 324 + SYS_PIPE2 = 325 + SYS_DUP3 = 326 + SYS_EPOLL_CREATE1 = 327 + SYS_PREADV = 328 + SYS_PWRITEV = 329 + SYS_RT_TGSIGQUEUEINFO = 330 + SYS_PERF_EVENT_OPEN = 331 + SYS_FANOTIFY_INIT = 332 + SYS_FANOTIFY_MARK = 333 + SYS_PRLIMIT64 = 334 + SYS_NAME_TO_HANDLE_AT = 335 + SYS_OPEN_BY_HANDLE_AT = 336 + SYS_CLOCK_ADJTIME = 337 + SYS_SYNCFS = 338 + SYS_SETNS = 339 + SYS_PROCESS_VM_READV = 340 + SYS_PROCESS_VM_WRITEV = 341 + SYS_S390_RUNTIME_INSTR = 342 + SYS_KCMP = 343 + SYS_FINIT_MODULE = 344 + SYS_SCHED_SETATTR = 345 + SYS_SCHED_GETATTR = 346 + SYS_RENAMEAT2 = 347 + SYS_SECCOMP = 348 + SYS_GETRANDOM = 349 + SYS_MEMFD_CREATE = 350 + SYS_BPF = 351 + SYS_S390_PCI_MMIO_WRITE = 352 + SYS_S390_PCI_MMIO_READ = 353 + SYS_EXECVEAT = 354 + SYS_USERFAULTFD = 355 + SYS_MEMBARRIER = 356 + SYS_RECVMMSG = 357 + SYS_SENDMMSG = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_MLOCK2 = 374 + SYS_COPY_FILE_RANGE = 375 + SYS_PREADV2 = 376 + SYS_PWRITEV2 = 377 + SYS_S390_GUARDED_STORAGE = 378 + SYS_STATX = 379 + SYS_S390_STHYI = 380 + SYS_KEXEC_FILE_LOAD = 381 + SYS_IO_PGETEVENTS = 382 + SYS_RSEQ = 383 + SYS_PKEY_MPROTECT = 384 + SYS_PKEY_ALLOC = 385 + SYS_PKEY_FREE = 386 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 488ca848d..0de03a722 100644 --- a/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -7,379 +7,384 @@ package unix const ( - SYS_RESTART_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAIT4 = 7 - SYS_CREAT = 8 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_EXECV = 11 - SYS_CHDIR = 12 - SYS_CHOWN = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_LCHOWN = 16 - SYS_BRK = 17 - SYS_PERFCTR = 18 - SYS_LSEEK = 19 - SYS_GETPID = 20 - SYS_CAPGET = 21 - SYS_CAPSET = 22 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_VMSPLICE = 25 - SYS_PTRACE = 26 - SYS_ALARM = 27 - SYS_SIGALTSTACK = 28 - SYS_PAUSE = 29 - SYS_UTIME = 30 - SYS_ACCESS = 33 - SYS_NICE = 34 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_STAT = 38 - SYS_SENDFILE = 39 - SYS_LSTAT = 40 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_TIMES = 43 - SYS_UMOUNT2 = 45 - SYS_SETGID = 46 - SYS_GETGID = 47 - SYS_SIGNAL = 48 - SYS_GETEUID = 49 - SYS_GETEGID = 50 - SYS_ACCT = 51 - SYS_MEMORY_ORDERING = 52 - SYS_IOCTL = 54 - SYS_REBOOT = 55 - SYS_SYMLINK = 57 - SYS_READLINK = 58 - SYS_EXECVE = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_FSTAT = 62 - SYS_FSTAT64 = 63 - SYS_GETPAGESIZE = 64 - SYS_MSYNC = 65 - SYS_VFORK = 66 - SYS_PREAD64 = 67 - SYS_PWRITE64 = 68 - SYS_MMAP = 71 - SYS_MUNMAP = 73 - SYS_MPROTECT = 74 - SYS_MADVISE = 75 - SYS_VHANGUP = 76 - SYS_MINCORE = 78 - SYS_GETGROUPS = 79 - SYS_SETGROUPS = 80 - SYS_GETPGRP = 81 - SYS_SETITIMER = 83 - SYS_SWAPON = 85 - SYS_GETITIMER = 86 - SYS_SETHOSTNAME = 88 - SYS_DUP2 = 90 - SYS_FCNTL = 92 - SYS_SELECT = 93 - SYS_FSYNC = 95 - SYS_SETPRIORITY = 96 - SYS_SOCKET = 97 - SYS_CONNECT = 98 - SYS_ACCEPT = 99 - SYS_GETPRIORITY = 100 - SYS_RT_SIGRETURN = 101 - SYS_RT_SIGACTION = 102 - SYS_RT_SIGPROCMASK = 103 - SYS_RT_SIGPENDING = 104 - SYS_RT_SIGTIMEDWAIT = 105 - SYS_RT_SIGQUEUEINFO = 106 - SYS_RT_SIGSUSPEND = 107 - SYS_SETRESUID = 108 - SYS_GETRESUID = 109 - SYS_SETRESGID = 110 - SYS_GETRESGID = 111 - SYS_RECVMSG = 113 - SYS_SENDMSG = 114 - SYS_GETTIMEOFDAY = 116 - SYS_GETRUSAGE = 117 - SYS_GETSOCKOPT = 118 - SYS_GETCWD = 119 - SYS_READV = 120 - SYS_WRITEV = 121 - SYS_SETTIMEOFDAY = 122 - SYS_FCHOWN = 123 - SYS_FCHMOD = 124 - SYS_RECVFROM = 125 - SYS_SETREUID = 126 - SYS_SETREGID = 127 - SYS_RENAME = 128 - SYS_TRUNCATE = 129 - SYS_FTRUNCATE = 130 - SYS_FLOCK = 131 - SYS_LSTAT64 = 132 - SYS_SENDTO = 133 - SYS_SHUTDOWN = 134 - SYS_SOCKETPAIR = 135 - SYS_MKDIR = 136 - SYS_RMDIR = 137 - SYS_UTIMES = 138 - SYS_STAT64 = 139 - SYS_SENDFILE64 = 140 - SYS_GETPEERNAME = 141 - SYS_FUTEX = 142 - SYS_GETTID = 143 - SYS_GETRLIMIT = 144 - SYS_SETRLIMIT = 145 - SYS_PIVOT_ROOT = 146 - SYS_PRCTL = 147 - SYS_PCICONFIG_READ = 148 - SYS_PCICONFIG_WRITE = 149 - SYS_GETSOCKNAME = 150 - SYS_INOTIFY_INIT = 151 - SYS_INOTIFY_ADD_WATCH = 152 - SYS_POLL = 153 - SYS_GETDENTS64 = 154 - SYS_INOTIFY_RM_WATCH = 156 - SYS_STATFS = 157 - SYS_FSTATFS = 158 - SYS_UMOUNT = 159 - SYS_SCHED_SET_AFFINITY = 160 - SYS_SCHED_GET_AFFINITY = 161 - SYS_GETDOMAINNAME = 162 - SYS_SETDOMAINNAME = 163 - SYS_UTRAP_INSTALL = 164 - SYS_QUOTACTL = 165 - SYS_SET_TID_ADDRESS = 166 - SYS_MOUNT = 167 - SYS_USTAT = 168 - SYS_SETXATTR = 169 - SYS_LSETXATTR = 170 - SYS_FSETXATTR = 171 - SYS_GETXATTR = 172 - SYS_LGETXATTR = 173 - SYS_GETDENTS = 174 - SYS_SETSID = 175 - SYS_FCHDIR = 176 - SYS_FGETXATTR = 177 - SYS_LISTXATTR = 178 - SYS_LLISTXATTR = 179 - SYS_FLISTXATTR = 180 - SYS_REMOVEXATTR = 181 - SYS_LREMOVEXATTR = 182 - SYS_SIGPENDING = 183 - SYS_QUERY_MODULE = 184 - SYS_SETPGID = 185 - SYS_FREMOVEXATTR = 186 - SYS_TKILL = 187 - SYS_EXIT_GROUP = 188 - SYS_UNAME = 189 - SYS_INIT_MODULE = 190 - SYS_PERSONALITY = 191 - SYS_REMAP_FILE_PAGES = 192 - SYS_EPOLL_CREATE = 193 - SYS_EPOLL_CTL = 194 - SYS_EPOLL_WAIT = 195 - SYS_IOPRIO_SET = 196 - SYS_GETPPID = 197 - SYS_SIGACTION = 198 - SYS_SGETMASK = 199 - SYS_SSETMASK = 200 - SYS_SIGSUSPEND = 201 - SYS_OLDLSTAT = 202 - SYS_USELIB = 203 - SYS_READDIR = 204 - SYS_READAHEAD = 205 - SYS_SOCKETCALL = 206 - SYS_SYSLOG = 207 - SYS_LOOKUP_DCOOKIE = 208 - SYS_FADVISE64 = 209 - SYS_FADVISE64_64 = 210 - SYS_TGKILL = 211 - SYS_WAITPID = 212 - SYS_SWAPOFF = 213 - SYS_SYSINFO = 214 - SYS_IPC = 215 - SYS_SIGRETURN = 216 - SYS_CLONE = 217 - SYS_IOPRIO_GET = 218 - SYS_ADJTIMEX = 219 - SYS_SIGPROCMASK = 220 - SYS_CREATE_MODULE = 221 - SYS_DELETE_MODULE = 222 - SYS_GET_KERNEL_SYMS = 223 - SYS_GETPGID = 224 - SYS_BDFLUSH = 225 - SYS_SYSFS = 226 - SYS_AFS_SYSCALL = 227 - SYS_SETFSUID = 228 - SYS_SETFSGID = 229 - SYS__NEWSELECT = 230 - SYS_SPLICE = 232 - SYS_STIME = 233 - SYS_STATFS64 = 234 - SYS_FSTATFS64 = 235 - SYS__LLSEEK = 236 - SYS_MLOCK = 237 - SYS_MUNLOCK = 238 - SYS_MLOCKALL = 239 - SYS_MUNLOCKALL = 240 - SYS_SCHED_SETPARAM = 241 - SYS_SCHED_GETPARAM = 242 - SYS_SCHED_SETSCHEDULER = 243 - SYS_SCHED_GETSCHEDULER = 244 - SYS_SCHED_YIELD = 245 - SYS_SCHED_GET_PRIORITY_MAX = 246 - SYS_SCHED_GET_PRIORITY_MIN = 247 - SYS_SCHED_RR_GET_INTERVAL = 248 - SYS_NANOSLEEP = 249 - SYS_MREMAP = 250 - SYS__SYSCTL = 251 - SYS_GETSID = 252 - SYS_FDATASYNC = 253 - SYS_NFSSERVCTL = 254 - SYS_SYNC_FILE_RANGE = 255 - SYS_CLOCK_SETTIME = 256 - SYS_CLOCK_GETTIME = 257 - SYS_CLOCK_GETRES = 258 - SYS_CLOCK_NANOSLEEP = 259 - SYS_SCHED_GETAFFINITY = 260 - SYS_SCHED_SETAFFINITY = 261 - SYS_TIMER_SETTIME = 262 - SYS_TIMER_GETTIME = 263 - SYS_TIMER_GETOVERRUN = 264 - SYS_TIMER_DELETE = 265 - SYS_TIMER_CREATE = 266 - SYS_VSERVER = 267 - SYS_IO_SETUP = 268 - SYS_IO_DESTROY = 269 - SYS_IO_SUBMIT = 270 - SYS_IO_CANCEL = 271 - SYS_IO_GETEVENTS = 272 - SYS_MQ_OPEN = 273 - SYS_MQ_UNLINK = 274 - SYS_MQ_TIMEDSEND = 275 - SYS_MQ_TIMEDRECEIVE = 276 - SYS_MQ_NOTIFY = 277 - SYS_MQ_GETSETATTR = 278 - SYS_WAITID = 279 - SYS_TEE = 280 - SYS_ADD_KEY = 281 - SYS_REQUEST_KEY = 282 - SYS_KEYCTL = 283 - SYS_OPENAT = 284 - SYS_MKDIRAT = 285 - SYS_MKNODAT = 286 - SYS_FCHOWNAT = 287 - SYS_FUTIMESAT = 288 - SYS_FSTATAT64 = 289 - SYS_UNLINKAT = 290 - SYS_RENAMEAT = 291 - SYS_LINKAT = 292 - SYS_SYMLINKAT = 293 - SYS_READLINKAT = 294 - SYS_FCHMODAT = 295 - SYS_FACCESSAT = 296 - SYS_PSELECT6 = 297 - SYS_PPOLL = 298 - SYS_UNSHARE = 299 - SYS_SET_ROBUST_LIST = 300 - SYS_GET_ROBUST_LIST = 301 - SYS_MIGRATE_PAGES = 302 - SYS_MBIND = 303 - SYS_GET_MEMPOLICY = 304 - SYS_SET_MEMPOLICY = 305 - SYS_KEXEC_LOAD = 306 - SYS_MOVE_PAGES = 307 - SYS_GETCPU = 308 - SYS_EPOLL_PWAIT = 309 - SYS_UTIMENSAT = 310 - SYS_SIGNALFD = 311 - SYS_TIMERFD_CREATE = 312 - SYS_EVENTFD = 313 - SYS_FALLOCATE = 314 - SYS_TIMERFD_SETTIME = 315 - SYS_TIMERFD_GETTIME = 316 - SYS_SIGNALFD4 = 317 - SYS_EVENTFD2 = 318 - SYS_EPOLL_CREATE1 = 319 - SYS_DUP3 = 320 - SYS_PIPE2 = 321 - SYS_INOTIFY_INIT1 = 322 - SYS_ACCEPT4 = 323 - SYS_PREADV = 324 - SYS_PWRITEV = 325 - SYS_RT_TGSIGQUEUEINFO = 326 - SYS_PERF_EVENT_OPEN = 327 - SYS_RECVMMSG = 328 - SYS_FANOTIFY_INIT = 329 - SYS_FANOTIFY_MARK = 330 - SYS_PRLIMIT64 = 331 - SYS_NAME_TO_HANDLE_AT = 332 - SYS_OPEN_BY_HANDLE_AT = 333 - SYS_CLOCK_ADJTIME = 334 - SYS_SYNCFS = 335 - SYS_SENDMMSG = 336 - SYS_SETNS = 337 - SYS_PROCESS_VM_READV = 338 - SYS_PROCESS_VM_WRITEV = 339 - SYS_KERN_FEATURES = 340 - SYS_KCMP = 341 - SYS_FINIT_MODULE = 342 - SYS_SCHED_SETATTR = 343 - SYS_SCHED_GETATTR = 344 - SYS_RENAMEAT2 = 345 - SYS_SECCOMP = 346 - SYS_GETRANDOM = 347 - SYS_MEMFD_CREATE = 348 - SYS_BPF = 349 - SYS_EXECVEAT = 350 - SYS_MEMBARRIER = 351 - SYS_USERFAULTFD = 352 - SYS_BIND = 353 - SYS_LISTEN = 354 - SYS_SETSOCKOPT = 355 - SYS_MLOCK2 = 356 - SYS_COPY_FILE_RANGE = 357 - SYS_PREADV2 = 358 - SYS_PWRITEV2 = 359 - SYS_STATX = 360 - SYS_IO_PGETEVENTS = 361 - SYS_PKEY_MPROTECT = 362 - SYS_PKEY_ALLOC = 363 - SYS_PKEY_FREE = 364 - SYS_RSEQ = 365 - SYS_SEMTIMEDOP = 392 - SYS_SEMGET = 393 - SYS_SEMCTL = 394 - SYS_SHMGET = 395 - SYS_SHMCTL = 396 - SYS_SHMAT = 397 - SYS_SHMDT = 398 - SYS_MSGGET = 399 - SYS_MSGSND = 400 - SYS_MSGRCV = 401 - SYS_MSGCTL = 402 - SYS_PIDFD_SEND_SIGNAL = 424 - SYS_IO_URING_SETUP = 425 - SYS_IO_URING_ENTER = 426 - SYS_IO_URING_REGISTER = 427 - SYS_OPEN_TREE = 428 - SYS_MOVE_MOUNT = 429 - SYS_FSOPEN = 430 - SYS_FSCONFIG = 431 - SYS_FSMOUNT = 432 - SYS_FSPICK = 433 - SYS_PIDFD_OPEN = 434 - SYS_CLOSE_RANGE = 436 - SYS_OPENAT2 = 437 - SYS_PIDFD_GETFD = 438 - SYS_FACCESSAT2 = 439 - SYS_PROCESS_MADVISE = 440 - SYS_EPOLL_PWAIT2 = 441 - SYS_MOUNT_SETATTR = 442 + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECV = 11 + SYS_CHDIR = 12 + SYS_CHOWN = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BRK = 17 + SYS_PERFCTR = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_CAPGET = 21 + SYS_CAPSET = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_VMSPLICE = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_SIGALTSTACK = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_STAT = 38 + SYS_SENDFILE = 39 + SYS_LSTAT = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_UMOUNT2 = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_MEMORY_ORDERING = 52 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_FSTAT = 62 + SYS_FSTAT64 = 63 + SYS_GETPAGESIZE = 64 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_MMAP = 71 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_VHANGUP = 76 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_SETHOSTNAME = 88 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_ACCEPT = 99 + SYS_GETPRIORITY = 100 + SYS_RT_SIGRETURN = 101 + SYS_RT_SIGACTION = 102 + SYS_RT_SIGPROCMASK = 103 + SYS_RT_SIGPENDING = 104 + SYS_RT_SIGTIMEDWAIT = 105 + SYS_RT_SIGQUEUEINFO = 106 + SYS_RT_SIGSUSPEND = 107 + SYS_SETRESUID = 108 + SYS_GETRESUID = 109 + SYS_SETRESGID = 110 + SYS_GETRESGID = 111 + SYS_RECVMSG = 113 + SYS_SENDMSG = 114 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_GETCWD = 119 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_RECVFROM = 125 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_TRUNCATE = 129 + SYS_FTRUNCATE = 130 + SYS_FLOCK = 131 + SYS_LSTAT64 = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_STAT64 = 139 + SYS_SENDFILE64 = 140 + SYS_GETPEERNAME = 141 + SYS_FUTEX = 142 + SYS_GETTID = 143 + SYS_GETRLIMIT = 144 + SYS_SETRLIMIT = 145 + SYS_PIVOT_ROOT = 146 + SYS_PRCTL = 147 + SYS_PCICONFIG_READ = 148 + SYS_PCICONFIG_WRITE = 149 + SYS_GETSOCKNAME = 150 + SYS_INOTIFY_INIT = 151 + SYS_INOTIFY_ADD_WATCH = 152 + SYS_POLL = 153 + SYS_GETDENTS64 = 154 + SYS_INOTIFY_RM_WATCH = 156 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UMOUNT = 159 + SYS_SCHED_SET_AFFINITY = 160 + SYS_SCHED_GET_AFFINITY = 161 + SYS_GETDOMAINNAME = 162 + SYS_SETDOMAINNAME = 163 + SYS_UTRAP_INSTALL = 164 + SYS_QUOTACTL = 165 + SYS_SET_TID_ADDRESS = 166 + SYS_MOUNT = 167 + SYS_USTAT = 168 + SYS_SETXATTR = 169 + SYS_LSETXATTR = 170 + SYS_FSETXATTR = 171 + SYS_GETXATTR = 172 + SYS_LGETXATTR = 173 + SYS_GETDENTS = 174 + SYS_SETSID = 175 + SYS_FCHDIR = 176 + SYS_FGETXATTR = 177 + SYS_LISTXATTR = 178 + SYS_LLISTXATTR = 179 + SYS_FLISTXATTR = 180 + SYS_REMOVEXATTR = 181 + SYS_LREMOVEXATTR = 182 + SYS_SIGPENDING = 183 + SYS_QUERY_MODULE = 184 + SYS_SETPGID = 185 + SYS_FREMOVEXATTR = 186 + SYS_TKILL = 187 + SYS_EXIT_GROUP = 188 + SYS_UNAME = 189 + SYS_INIT_MODULE = 190 + SYS_PERSONALITY = 191 + SYS_REMAP_FILE_PAGES = 192 + SYS_EPOLL_CREATE = 193 + SYS_EPOLL_CTL = 194 + SYS_EPOLL_WAIT = 195 + SYS_IOPRIO_SET = 196 + SYS_GETPPID = 197 + SYS_SIGACTION = 198 + SYS_SGETMASK = 199 + SYS_SSETMASK = 200 + SYS_SIGSUSPEND = 201 + SYS_OLDLSTAT = 202 + SYS_USELIB = 203 + SYS_READDIR = 204 + SYS_READAHEAD = 205 + SYS_SOCKETCALL = 206 + SYS_SYSLOG = 207 + SYS_LOOKUP_DCOOKIE = 208 + SYS_FADVISE64 = 209 + SYS_FADVISE64_64 = 210 + SYS_TGKILL = 211 + SYS_WAITPID = 212 + SYS_SWAPOFF = 213 + SYS_SYSINFO = 214 + SYS_IPC = 215 + SYS_SIGRETURN = 216 + SYS_CLONE = 217 + SYS_IOPRIO_GET = 218 + SYS_ADJTIMEX = 219 + SYS_SIGPROCMASK = 220 + SYS_CREATE_MODULE = 221 + SYS_DELETE_MODULE = 222 + SYS_GET_KERNEL_SYMS = 223 + SYS_GETPGID = 224 + SYS_BDFLUSH = 225 + SYS_SYSFS = 226 + SYS_AFS_SYSCALL = 227 + SYS_SETFSUID = 228 + SYS_SETFSGID = 229 + SYS__NEWSELECT = 230 + SYS_SPLICE = 232 + SYS_STIME = 233 + SYS_STATFS64 = 234 + SYS_FSTATFS64 = 235 + SYS__LLSEEK = 236 + SYS_MLOCK = 237 + SYS_MUNLOCK = 238 + SYS_MLOCKALL = 239 + SYS_MUNLOCKALL = 240 + SYS_SCHED_SETPARAM = 241 + SYS_SCHED_GETPARAM = 242 + SYS_SCHED_SETSCHEDULER = 243 + SYS_SCHED_GETSCHEDULER = 244 + SYS_SCHED_YIELD = 245 + SYS_SCHED_GET_PRIORITY_MAX = 246 + SYS_SCHED_GET_PRIORITY_MIN = 247 + SYS_SCHED_RR_GET_INTERVAL = 248 + SYS_NANOSLEEP = 249 + SYS_MREMAP = 250 + SYS__SYSCTL = 251 + SYS_GETSID = 252 + SYS_FDATASYNC = 253 + SYS_NFSSERVCTL = 254 + SYS_SYNC_FILE_RANGE = 255 + SYS_CLOCK_SETTIME = 256 + SYS_CLOCK_GETTIME = 257 + SYS_CLOCK_GETRES = 258 + SYS_CLOCK_NANOSLEEP = 259 + SYS_SCHED_GETAFFINITY = 260 + SYS_SCHED_SETAFFINITY = 261 + SYS_TIMER_SETTIME = 262 + SYS_TIMER_GETTIME = 263 + SYS_TIMER_GETOVERRUN = 264 + SYS_TIMER_DELETE = 265 + SYS_TIMER_CREATE = 266 + SYS_VSERVER = 267 + SYS_IO_SETUP = 268 + SYS_IO_DESTROY = 269 + SYS_IO_SUBMIT = 270 + SYS_IO_CANCEL = 271 + SYS_IO_GETEVENTS = 272 + SYS_MQ_OPEN = 273 + SYS_MQ_UNLINK = 274 + SYS_MQ_TIMEDSEND = 275 + SYS_MQ_TIMEDRECEIVE = 276 + SYS_MQ_NOTIFY = 277 + SYS_MQ_GETSETATTR = 278 + SYS_WAITID = 279 + SYS_TEE = 280 + SYS_ADD_KEY = 281 + SYS_REQUEST_KEY = 282 + SYS_KEYCTL = 283 + SYS_OPENAT = 284 + SYS_MKDIRAT = 285 + SYS_MKNODAT = 286 + SYS_FCHOWNAT = 287 + SYS_FUTIMESAT = 288 + SYS_FSTATAT64 = 289 + SYS_UNLINKAT = 290 + SYS_RENAMEAT = 291 + SYS_LINKAT = 292 + SYS_SYMLINKAT = 293 + SYS_READLINKAT = 294 + SYS_FCHMODAT = 295 + SYS_FACCESSAT = 296 + SYS_PSELECT6 = 297 + SYS_PPOLL = 298 + SYS_UNSHARE = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_GET_ROBUST_LIST = 301 + SYS_MIGRATE_PAGES = 302 + SYS_MBIND = 303 + SYS_GET_MEMPOLICY = 304 + SYS_SET_MEMPOLICY = 305 + SYS_KEXEC_LOAD = 306 + SYS_MOVE_PAGES = 307 + SYS_GETCPU = 308 + SYS_EPOLL_PWAIT = 309 + SYS_UTIMENSAT = 310 + SYS_SIGNALFD = 311 + SYS_TIMERFD_CREATE = 312 + SYS_EVENTFD = 313 + SYS_FALLOCATE = 314 + SYS_TIMERFD_SETTIME = 315 + SYS_TIMERFD_GETTIME = 316 + SYS_SIGNALFD4 = 317 + SYS_EVENTFD2 = 318 + SYS_EPOLL_CREATE1 = 319 + SYS_DUP3 = 320 + SYS_PIPE2 = 321 + SYS_INOTIFY_INIT1 = 322 + SYS_ACCEPT4 = 323 + SYS_PREADV = 324 + SYS_PWRITEV = 325 + SYS_RT_TGSIGQUEUEINFO = 326 + SYS_PERF_EVENT_OPEN = 327 + SYS_RECVMMSG = 328 + SYS_FANOTIFY_INIT = 329 + SYS_FANOTIFY_MARK = 330 + SYS_PRLIMIT64 = 331 + SYS_NAME_TO_HANDLE_AT = 332 + SYS_OPEN_BY_HANDLE_AT = 333 + SYS_CLOCK_ADJTIME = 334 + SYS_SYNCFS = 335 + SYS_SENDMMSG = 336 + SYS_SETNS = 337 + SYS_PROCESS_VM_READV = 338 + SYS_PROCESS_VM_WRITEV = 339 + SYS_KERN_FEATURES = 340 + SYS_KCMP = 341 + SYS_FINIT_MODULE = 342 + SYS_SCHED_SETATTR = 343 + SYS_SCHED_GETATTR = 344 + SYS_RENAMEAT2 = 345 + SYS_SECCOMP = 346 + SYS_GETRANDOM = 347 + SYS_MEMFD_CREATE = 348 + SYS_BPF = 349 + SYS_EXECVEAT = 350 + SYS_MEMBARRIER = 351 + SYS_USERFAULTFD = 352 + SYS_BIND = 353 + SYS_LISTEN = 354 + SYS_SETSOCKOPT = 355 + SYS_MLOCK2 = 356 + SYS_COPY_FILE_RANGE = 357 + SYS_PREADV2 = 358 + SYS_PWRITEV2 = 359 + SYS_STATX = 360 + SYS_IO_PGETEVENTS = 361 + SYS_PKEY_MPROTECT = 362 + SYS_PKEY_ALLOC = 363 + SYS_PKEY_FREE = 364 + SYS_RSEQ = 365 + SYS_SEMTIMEDOP = 392 + SYS_SEMGET = 393 + SYS_SEMCTL = 394 + SYS_SHMGET = 395 + SYS_SHMCTL = 396 + SYS_SHMAT = 397 + SYS_SHMDT = 398 + SYS_MSGGET = 399 + SYS_MSGSND = 400 + SYS_MSGRCV = 401 + SYS_MSGCTL = 402 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 ) diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index 2673e6c59..885842c0e 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -209,6 +209,92 @@ type RawSockaddrCtl struct { Sc_reserved [5]uint32 } +type RawSockaddrVM struct { + Len uint8 + Family uint8 + Reserved1 uint16 + Port uint32 + Cid uint32 +} + +type XVSockPCB struct { + Xv_len uint32 + Xv_vsockpp uint64 + Xvp_local_cid uint32 + Xvp_local_port uint32 + Xvp_remote_cid uint32 + Xvp_remote_port uint32 + Xvp_rxcnt uint32 + Xvp_txcnt uint32 + Xvp_peer_rxhiwat uint32 + Xvp_peer_rxcnt uint32 + Xvp_last_pid int32 + Xvp_gencnt uint64 + Xv_socket XSocket + _ [4]byte +} + +type XSocket struct { + Xso_len uint32 + Xso_so uint32 + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + So_pcb uint32 + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSocket64 struct { + Xso_len uint32 + _ [8]byte + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + _ [8]byte + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSockbuf struct { + Cc uint32 + Hiwat uint32 + Mbcnt uint32 + Mbmax uint32 + Lowat int32 + Flags int16 + Timeo int16 +} + +type XVSockPgen struct { + Len uint32 + Count uint64 + Gen uint64 + Sogen uint64 +} + type _Socklen uint32 type Xucred struct { @@ -287,6 +373,11 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x14 SizeofSockaddrCtl = 0x20 + SizeofSockaddrVM = 0xc + SizeofXvsockpcb = 0xa8 + SizeofXSocket = 0x64 + SizeofXSockbuf = 0x18 + SizeofXVSockPgen = 0x20 SizeofXucred = 0x4c SizeofLinger = 0x8 SizeofIovec = 0x10 @@ -535,3 +626,143 @@ type CtlInfo struct { Id uint32 Name [96]byte } + +const SizeofKinfoProc = 0x288 + +type Eproc struct { + Paddr uintptr + Sess uintptr + Pcred Pcred + Ucred Ucred + Vm Vmspace + Ppid int32 + Pgid int32 + Jobc int16 + Tdev int32 + Tpgid int32 + Tsess uintptr + Wmesg [8]byte + Xsize int32 + Xrssize int16 + Xccount int16 + Xswrss int16 + Flag int32 + Login [12]byte + Spare [4]int32 + _ [4]byte +} + +type ExternProc struct { + P_starttime Timeval + P_vmspace *Vmspace + P_sigacts uintptr + P_flag int32 + P_stat int8 + P_pid int32 + P_oppid int32 + P_dupfd int32 + User_stack *int8 + Exit_thread *byte + P_debugger int32 + Sigwait int32 + P_estcpu uint32 + P_cpticks int32 + P_pctcpu uint32 + P_wchan *byte + P_wmesg *int8 + P_swtime uint32 + P_slptime uint32 + P_realtimer Itimerval + P_rtime Timeval + P_uticks uint64 + P_sticks uint64 + P_iticks uint64 + P_traceflag int32 + P_tracep uintptr + P_siglist int32 + P_textvp uintptr + P_holdcnt int32 + P_sigmask uint32 + P_sigignore uint32 + P_sigcatch uint32 + P_priority uint8 + P_usrpri uint8 + P_nice int8 + P_comm [17]byte + P_pgrp uintptr + P_addr uintptr + P_xstat uint16 + P_acflag uint16 + P_ru *Rusage +} + +type Itimerval struct { + Interval Timeval + Value Timeval +} + +type KinfoProc struct { + Proc ExternProc + Eproc Eproc +} + +type Vmspace struct { + Dummy int32 + Dummy2 *int8 + Dummy3 [5]int32 + Dummy4 [3]*int8 +} + +type Pcred struct { + Pc_lock [72]int8 + Pc_ucred uintptr + P_ruid uint32 + P_svuid uint32 + P_rgid uint32 + P_svgid uint32 + P_refcnt int32 + _ [4]byte +} + +type Ucred struct { + Ref int32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 +} + +type SysvIpcPerm struct { + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ uint16 + _ int32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Lpid int32 + Cpid int32 + Nattch uint16 + _ [34]byte +} + +const ( + IPC_CREAT = 0x200 + IPC_EXCL = 0x400 + IPC_NOWAIT = 0x800 + IPC_PRIVATE = 0x0 +) + +const ( + IPC_RMID = 0x0 + IPC_SET = 0x1 + IPC_STAT = 0x2 +) + +const ( + SHM_RDONLY = 0x1000 + SHM_RND = 0x2000 +) diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 1465cbcff..b23c02337 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -209,6 +209,92 @@ type RawSockaddrCtl struct { Sc_reserved [5]uint32 } +type RawSockaddrVM struct { + Len uint8 + Family uint8 + Reserved1 uint16 + Port uint32 + Cid uint32 +} + +type XVSockPCB struct { + Xv_len uint32 + Xv_vsockpp uint64 + Xvp_local_cid uint32 + Xvp_local_port uint32 + Xvp_remote_cid uint32 + Xvp_remote_port uint32 + Xvp_rxcnt uint32 + Xvp_txcnt uint32 + Xvp_peer_rxhiwat uint32 + Xvp_peer_rxcnt uint32 + Xvp_last_pid int32 + Xvp_gencnt uint64 + Xv_socket XSocket + _ [4]byte +} + +type XSocket struct { + Xso_len uint32 + Xso_so uint32 + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + So_pcb uint32 + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSocket64 struct { + Xso_len uint32 + _ [8]byte + So_type int16 + So_options int16 + So_linger int16 + So_state int16 + _ [8]byte + Xso_protocol int32 + Xso_family int32 + So_qlen int16 + So_incqlen int16 + So_qlimit int16 + So_timeo int16 + So_error uint16 + So_pgid int32 + So_oobmark uint32 + So_rcv XSockbuf + So_snd XSockbuf + So_uid uint32 +} + +type XSockbuf struct { + Cc uint32 + Hiwat uint32 + Mbcnt uint32 + Mbmax uint32 + Lowat int32 + Flags int16 + Timeo int16 +} + +type XVSockPgen struct { + Len uint32 + Count uint64 + Gen uint64 + Sogen uint64 +} + type _Socklen uint32 type Xucred struct { @@ -287,6 +373,11 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x14 SizeofSockaddrCtl = 0x20 + SizeofSockaddrVM = 0xc + SizeofXvsockpcb = 0xa8 + SizeofXSocket = 0x64 + SizeofXSockbuf = 0x18 + SizeofXVSockPgen = 0x20 SizeofXucred = 0x4c SizeofLinger = 0x8 SizeofIovec = 0x10 @@ -535,3 +626,143 @@ type CtlInfo struct { Id uint32 Name [96]byte } + +const SizeofKinfoProc = 0x288 + +type Eproc struct { + Paddr uintptr + Sess uintptr + Pcred Pcred + Ucred Ucred + Vm Vmspace + Ppid int32 + Pgid int32 + Jobc int16 + Tdev int32 + Tpgid int32 + Tsess uintptr + Wmesg [8]byte + Xsize int32 + Xrssize int16 + Xccount int16 + Xswrss int16 + Flag int32 + Login [12]byte + Spare [4]int32 + _ [4]byte +} + +type ExternProc struct { + P_starttime Timeval + P_vmspace *Vmspace + P_sigacts uintptr + P_flag int32 + P_stat int8 + P_pid int32 + P_oppid int32 + P_dupfd int32 + User_stack *int8 + Exit_thread *byte + P_debugger int32 + Sigwait int32 + P_estcpu uint32 + P_cpticks int32 + P_pctcpu uint32 + P_wchan *byte + P_wmesg *int8 + P_swtime uint32 + P_slptime uint32 + P_realtimer Itimerval + P_rtime Timeval + P_uticks uint64 + P_sticks uint64 + P_iticks uint64 + P_traceflag int32 + P_tracep uintptr + P_siglist int32 + P_textvp uintptr + P_holdcnt int32 + P_sigmask uint32 + P_sigignore uint32 + P_sigcatch uint32 + P_priority uint8 + P_usrpri uint8 + P_nice int8 + P_comm [17]byte + P_pgrp uintptr + P_addr uintptr + P_xstat uint16 + P_acflag uint16 + P_ru *Rusage +} + +type Itimerval struct { + Interval Timeval + Value Timeval +} + +type KinfoProc struct { + Proc ExternProc + Eproc Eproc +} + +type Vmspace struct { + Dummy int32 + Dummy2 *int8 + Dummy3 [5]int32 + Dummy4 [3]*int8 +} + +type Pcred struct { + Pc_lock [72]int8 + Pc_ucred uintptr + P_ruid uint32 + P_svuid uint32 + P_rgid uint32 + P_svgid uint32 + P_refcnt int32 + _ [4]byte +} + +type Ucred struct { + Ref int32 + Uid uint32 + Ngroups int16 + Groups [16]uint32 +} + +type SysvIpcPerm struct { + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ uint16 + _ int32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Lpid int32 + Cpid int32 + Nattch uint16 + _ [34]byte +} + +const ( + IPC_CREAT = 0x200 + IPC_EXCL = 0x400 + IPC_NOWAIT = 0x800 + IPC_PRIVATE = 0x0 +) + +const ( + IPC_RMID = 0x0 + IPC_SET = 0x1 + IPC_STAT = 0x2 +) + +const ( + SHM_RDONLY = 0x1000 + SHM_RND = 0x2000 +) diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go index 1d049d7a1..d0ba8e9b8 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -431,6 +431,9 @@ type Winsize struct { const ( AT_FDCWD = 0xfffafdcd AT_SYMLINK_NOFOLLOW = 0x1 + AT_REMOVEDIR = 0x2 + AT_EACCESS = 0x4 + AT_SYMLINK_FOLLOW = 0x8 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go index c51bc88ff..4eec078e5 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -31,6 +31,8 @@ type Timeval struct { Usec int32 } +type Time_t int32 + type Rusage struct { Utime Timeval Stime Timeval @@ -672,9 +674,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x800 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go index 395b69187..7622904a5 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -31,6 +31,8 @@ type Timeval struct { Usec int64 } +type Time_t int64 + type Rusage struct { Utime Timeval Stime Timeval @@ -675,9 +677,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x800 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go index d3f9d2541..19223ce8e 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -33,6 +33,8 @@ type Timeval struct { _ [4]byte } +type Time_t int32 + type Rusage struct { Utime Timeval Stime Timeval @@ -656,9 +658,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x800 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go index 434d6e8e8..8e3e33f67 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -31,6 +31,8 @@ type Timeval struct { Usec int64 } +type Time_t int64 + type Rusage struct { Utime Timeval Stime Timeval @@ -653,9 +655,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x800 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go index 236f37ef6..4c485261d 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go @@ -13,6 +13,8 @@ const ( I_STR = 0x5308 I_POP = 0x5303 I_PUSH = 0x5302 + I_LINK = 0x530c + I_UNLINK = 0x530d I_PLINK = 0x5316 I_PUNLINK = 0x5317 diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux.go index c9b2c9aae..37b521436 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -1,4 +1,4 @@ -// Code generated by mkmerge.go; DO NOT EDIT. +// Code generated by mkmerge; DO NOT EDIT. //go:build linux // +build linux @@ -351,6 +351,13 @@ type RawSockaddrIUCV struct { Name [8]int8 } +type RawSockaddrNFC struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 +} + type _Socklen uint32 type Linger struct { @@ -445,6 +452,11 @@ type CanFilter struct { Mask uint32 } +type TCPRepairOpt struct { + Code uint32 + Val uint32 +} + const ( SizeofSockaddrInet4 = 0x10 SizeofSockaddrInet6 = 0x1c @@ -464,6 +476,7 @@ const ( SizeofSockaddrL2TPIP = 0x10 SizeofSockaddrL2TPIP6 = 0x20 SizeofSockaddrIUCV = 0x20 + SizeofSockaddrNFC = 0x10 SizeofLinger = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc @@ -476,6 +489,7 @@ const ( SizeofUcred = 0xc SizeofTCPInfo = 0x68 SizeofCanFilter = 0x8 + SizeofTCPRepairOpt = 0x8 ) const ( @@ -673,6 +687,16 @@ type NdMsg struct { Type uint8 } +const ( + ICMP_FILTER = 0x1 + + ICMPV6_FILTER = 0x1 + ICMPV6_FILTER_BLOCK = 0x1 + ICMPV6_FILTER_BLOCKOTHERS = 0x3 + ICMPV6_FILTER_PASS = 0x2 + ICMPV6_FILTER_PASSONLY = 0x4 +) + const ( SizeofSockFilter = 0x8 ) @@ -719,6 +743,8 @@ const ( AT_STATX_FORCE_SYNC = 0x2000 AT_STATX_DONT_SYNC = 0x4000 + AT_RECURSIVE = 0x8000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 @@ -993,7 +1019,7 @@ const ( PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 PERF_COUNT_SW_BPF_OUTPUT = 0xa - PERF_COUNT_SW_MAX = 0xb + PERF_COUNT_SW_MAX = 0xc PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 PERF_SAMPLE_TIME = 0x4 @@ -1765,6 +1791,8 @@ const ( NFPROTO_NUMPROTO = 0xd ) +const SO_ORIGINAL_DST = 0x50 + type Nfgenmsg struct { Nfgen_family uint8 Version uint8 @@ -2330,8 +2358,8 @@ const ( SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 - SOF_TIMESTAMPING_LAST = 0x4000 - SOF_TIMESTAMPING_MASK = 0x7fff + SOF_TIMESTAMPING_LAST = 0x8000 + SOF_TIMESTAMPING_MASK = 0xffff SCM_TSTAMP_SND = 0x0 SCM_TSTAMP_SCHED = 0x1 @@ -2907,7 +2935,7 @@ const ( DEVLINK_CMD_TRAP_POLICER_NEW = 0x47 DEVLINK_CMD_TRAP_POLICER_DEL = 0x48 DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49 - DEVLINK_CMD_MAX = 0x49 + DEVLINK_CMD_MAX = 0x4d DEVLINK_PORT_TYPE_NOTSET = 0x0 DEVLINK_PORT_TYPE_AUTO = 0x1 DEVLINK_PORT_TYPE_ETH = 0x2 @@ -3130,7 +3158,7 @@ const ( DEVLINK_ATTR_RELOAD_ACTION_INFO = 0xa2 DEVLINK_ATTR_RELOAD_ACTION_STATS = 0xa3 DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 0xa4 - DEVLINK_ATTR_MAX = 0xa4 + DEVLINK_ATTR_MAX = 0xa9 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 @@ -3238,7 +3266,8 @@ const ( LWTUNNEL_ENCAP_BPF = 0x6 LWTUNNEL_ENCAP_SEG6_LOCAL = 0x7 LWTUNNEL_ENCAP_RPL = 0x8 - LWTUNNEL_ENCAP_MAX = 0x8 + LWTUNNEL_ENCAP_IOAM6 = 0x9 + LWTUNNEL_ENCAP_MAX = 0x9 MPLS_IPTUNNEL_UNSPEC = 0x0 MPLS_IPTUNNEL_DST = 0x1 @@ -3426,7 +3455,7 @@ const ( ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c - ETHTOOL_MSG_USER_MAX = 0x1c + ETHTOOL_MSG_USER_MAX = 0x21 ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3457,7 +3486,7 @@ const ( ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d - ETHTOOL_MSG_KERNEL_MAX = 0x1d + ETHTOOL_MSG_KERNEL_MAX = 0x22 ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 @@ -3591,7 +3620,9 @@ const ( ETHTOOL_A_COALESCE_TX_USECS_HIGH = 0x15 ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 0x16 ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 - ETHTOOL_A_COALESCE_MAX = 0x17 + ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 + ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 + ETHTOOL_A_COALESCE_MAX = 0x19 ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 @@ -3828,3 +3859,112 @@ const ( MTD_FILE_MODE_OTP_USER = 0x2 MTD_FILE_MODE_RAW = 0x3 ) + +const ( + NFC_CMD_UNSPEC = 0x0 + NFC_CMD_GET_DEVICE = 0x1 + NFC_CMD_DEV_UP = 0x2 + NFC_CMD_DEV_DOWN = 0x3 + NFC_CMD_DEP_LINK_UP = 0x4 + NFC_CMD_DEP_LINK_DOWN = 0x5 + NFC_CMD_START_POLL = 0x6 + NFC_CMD_STOP_POLL = 0x7 + NFC_CMD_GET_TARGET = 0x8 + NFC_EVENT_TARGETS_FOUND = 0x9 + NFC_EVENT_DEVICE_ADDED = 0xa + NFC_EVENT_DEVICE_REMOVED = 0xb + NFC_EVENT_TARGET_LOST = 0xc + NFC_EVENT_TM_ACTIVATED = 0xd + NFC_EVENT_TM_DEACTIVATED = 0xe + NFC_CMD_LLC_GET_PARAMS = 0xf + NFC_CMD_LLC_SET_PARAMS = 0x10 + NFC_CMD_ENABLE_SE = 0x11 + NFC_CMD_DISABLE_SE = 0x12 + NFC_CMD_LLC_SDREQ = 0x13 + NFC_EVENT_LLC_SDRES = 0x14 + NFC_CMD_FW_DOWNLOAD = 0x15 + NFC_EVENT_SE_ADDED = 0x16 + NFC_EVENT_SE_REMOVED = 0x17 + NFC_EVENT_SE_CONNECTIVITY = 0x18 + NFC_EVENT_SE_TRANSACTION = 0x19 + NFC_CMD_GET_SE = 0x1a + NFC_CMD_SE_IO = 0x1b + NFC_CMD_ACTIVATE_TARGET = 0x1c + NFC_CMD_VENDOR = 0x1d + NFC_CMD_DEACTIVATE_TARGET = 0x1e + NFC_ATTR_UNSPEC = 0x0 + NFC_ATTR_DEVICE_INDEX = 0x1 + NFC_ATTR_DEVICE_NAME = 0x2 + NFC_ATTR_PROTOCOLS = 0x3 + NFC_ATTR_TARGET_INDEX = 0x4 + NFC_ATTR_TARGET_SENS_RES = 0x5 + NFC_ATTR_TARGET_SEL_RES = 0x6 + NFC_ATTR_TARGET_NFCID1 = 0x7 + NFC_ATTR_TARGET_SENSB_RES = 0x8 + NFC_ATTR_TARGET_SENSF_RES = 0x9 + NFC_ATTR_COMM_MODE = 0xa + NFC_ATTR_RF_MODE = 0xb + NFC_ATTR_DEVICE_POWERED = 0xc + NFC_ATTR_IM_PROTOCOLS = 0xd + NFC_ATTR_TM_PROTOCOLS = 0xe + NFC_ATTR_LLC_PARAM_LTO = 0xf + NFC_ATTR_LLC_PARAM_RW = 0x10 + NFC_ATTR_LLC_PARAM_MIUX = 0x11 + NFC_ATTR_SE = 0x12 + NFC_ATTR_LLC_SDP = 0x13 + NFC_ATTR_FIRMWARE_NAME = 0x14 + NFC_ATTR_SE_INDEX = 0x15 + NFC_ATTR_SE_TYPE = 0x16 + NFC_ATTR_SE_AID = 0x17 + NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS = 0x18 + NFC_ATTR_SE_APDU = 0x19 + NFC_ATTR_TARGET_ISO15693_DSFID = 0x1a + NFC_ATTR_TARGET_ISO15693_UID = 0x1b + NFC_ATTR_SE_PARAMS = 0x1c + NFC_ATTR_VENDOR_ID = 0x1d + NFC_ATTR_VENDOR_SUBCMD = 0x1e + NFC_ATTR_VENDOR_DATA = 0x1f + NFC_SDP_ATTR_UNSPEC = 0x0 + NFC_SDP_ATTR_URI = 0x1 + NFC_SDP_ATTR_SAP = 0x2 +) + +type LandlockRulesetAttr struct { + Access_fs uint64 +} + +type LandlockPathBeneathAttr struct { + Allowed_access uint64 + Parent_fd int32 +} + +const ( + LANDLOCK_RULE_PATH_BENEATH = 0x1 +) + +const ( + IPC_CREAT = 0x200 + IPC_EXCL = 0x400 + IPC_NOWAIT = 0x800 + IPC_PRIVATE = 0x0 + + ipc_64 = 0x100 +) + +const ( + IPC_RMID = 0x0 + IPC_SET = 0x1 + IPC_STAT = 0x2 +) + +const ( + SHM_RDONLY = 0x1000 + SHM_RND = 0x2000 +) + +type MountAttr struct { + Attr_set uint64 + Attr_clr uint64 + Propagation uint64 + Userns_fd uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 4d4d283de..bea254945 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && linux @@ -128,6 +128,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -159,10 +170,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + const ( - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc ) const ( @@ -618,3 +635,36 @@ const ( PPS_GETCAP = 0x800470a3 PPS_FETCH = 0xc00470a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ [2]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Atime_high uint32 + Dtime uint32 + Dtime_high uint32 + Ctime uint32 + Ctime_high uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + _ uint32 + _ uint32 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 8a2eed5ec..b8c8f2894 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && linux @@ -130,6 +130,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -162,10 +173,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -636,3 +653,33 @@ const ( PPS_GETCAP = 0x800870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 94b34add6..4db443016 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && linux @@ -134,6 +134,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + type RawSockaddr struct { Family uint16 Data [14]uint8 @@ -165,10 +176,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + const ( - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc ) const ( @@ -613,3 +630,36 @@ const ( PPS_GETCAP = 0x800470a3 PPS_FETCH = 0xc00470a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint16 + _ [2]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Atime_high uint32 + Dtime uint32 + Dtime_high uint32 + Ctime uint32 + Ctime_high uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + _ uint32 + _ uint32 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 2143de4d5..3ebcad8a8 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && linux @@ -131,6 +131,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -163,10 +174,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -615,3 +632,33 @@ const ( PPS_GETCAP = 0x800870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index a40216eee..3eb33e48a 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips && linux @@ -133,6 +133,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -164,10 +175,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + const ( - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc ) const ( @@ -619,3 +636,35 @@ const ( PPS_GETCAP = 0x400470a3 PPS_FETCH = 0xc00470a4 ) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Dtime uint32 + Ctime uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + Atime_high uint16 + Dtime_high uint16 + Ctime_high uint16 + _ uint16 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index e834b069f..79a944672 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64 && linux @@ -131,6 +131,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -163,10 +174,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -618,3 +635,33 @@ const ( PPS_GETCAP = 0x400870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index e31083b04..8f4b107ca 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64le && linux @@ -131,6 +131,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -163,10 +174,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -618,3 +635,33 @@ const ( PPS_GETCAP = 0x400870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index 42811f7fb..e4eb21798 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mipsle && linux @@ -133,6 +133,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -164,10 +175,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + const ( - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc ) const ( @@ -619,3 +636,35 @@ const ( PPS_GETCAP = 0x400470a3 PPS_FETCH = 0xc00470a4 ) + +const ( + PIDFD_NONBLOCK = 0x80 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint32 + _ uint32 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint32 + Atime uint32 + Dtime uint32 + Ctime uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + Atime_high uint16 + Dtime_high uint16 + Ctime_high uint16 + _ uint16 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index af7a72017..d5b21f0f7 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc && linux @@ -134,6 +134,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint32 +} + type RawSockaddr struct { Family uint16 Data [14]uint8 @@ -165,10 +176,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [16]byte +} + const ( - SizeofIovec = 0x8 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc + SizeofSockaddrNFCLLCP = 0x58 + SizeofIovec = 0x8 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc ) const ( @@ -625,3 +642,37 @@ const ( PPS_GETCAP = 0x400470a3 PPS_FETCH = 0xc00470a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + Seq uint32 + _ uint32 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime_high uint32 + Atime uint32 + Dtime_high uint32 + Dtime uint32 + Ctime_high uint32 + Ctime uint32 + _ uint32 + Segsz uint32 + Cpid int32 + Lpid int32 + Nattch uint32 + _ uint32 + _ uint32 + _ [4]byte +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 2a3afbaef..5188d142b 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64 && linux @@ -132,6 +132,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]uint8 @@ -164,10 +175,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -625,3 +642,32 @@ const ( PPS_GETCAP = 0x400870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + Seq uint32 + _ uint32 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime int64 + Dtime int64 + Ctime int64 + Segsz uint64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index c0de30a65..de4dd4c73 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64le && linux @@ -132,6 +132,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]uint8 @@ -164,10 +175,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -625,3 +642,32 @@ const ( PPS_GETCAP = 0x400870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + Seq uint32 + _ uint32 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime int64 + Dtime int64 + Ctime int64 + Segsz uint64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 74faf2e91..dccbf9b06 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build riscv64 && linux @@ -131,6 +131,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]uint8 @@ -163,10 +174,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -643,3 +660,33 @@ const ( PPS_GETCAP = 0x800870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 9a8f0c2c6..635880610 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build s390x && linux @@ -130,6 +130,17 @@ const ( FADV_NOREUSE = 0x7 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -162,10 +173,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -639,3 +656,32 @@ const ( PPS_GETCAP = 0x800870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ uint16 + Seq uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 72cdda75b..765edc13f 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build sparc64 && linux @@ -134,6 +134,17 @@ const ( FADV_NOREUSE = 0x5 ) +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -166,10 +177,16 @@ type Cmsghdr struct { Type int32 } +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + const ( - SizeofIovec = 0x10 - SizeofMsghdr = 0x38 - SizeofCmsghdr = 0x10 + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 ) const ( @@ -620,3 +637,32 @@ const ( PPS_GETCAP = 0x400870a3 PPS_FETCH = 0xc00870a4 ) + +const ( + PIDFD_NONBLOCK = 0x4000 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ uint16 + Seq uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Atime int64 + Dtime int64 + Ctime int64 + Segsz uint64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go index b10e73abf..2fd2060e6 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -445,8 +445,10 @@ type Ptmget struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go index 28ed6d55a..6a5a1a8ae 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -453,8 +453,10 @@ type Ptmget struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go index 4ba196ebe..84cc8d01e 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -450,8 +450,10 @@ type Ptmget struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go index dd642bd9c..c844e7096 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go @@ -453,8 +453,10 @@ type Ptmget struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x400 + AT_EACCESS = 0x100 AT_SYMLINK_NOFOLLOW = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_REMOVEDIR = 0x800 ) type PollFd struct { diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go index 1fdb0e5fa..baf5fe650 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -438,8 +438,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x4 + AT_EACCESS = 0x1 AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 ) type PollFd struct { @@ -562,12 +564,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go index e2fc93c7c..e21ae8ecf 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -438,8 +438,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x4 + AT_EACCESS = 0x1 AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 ) type PollFd struct { @@ -562,12 +564,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go index 8d34b5a2f..f190651cd 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -439,8 +439,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x4 + AT_EACCESS = 0x1 AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 ) type PollFd struct { @@ -563,12 +565,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go index ea8f1a0d9..84747c582 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go @@ -432,8 +432,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x4 + AT_EACCESS = 0x1 AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 ) type PollFd struct { @@ -556,12 +558,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go index ec6e8bc3f..ac5c8b637 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go @@ -432,8 +432,10 @@ type Winsize struct { const ( AT_FDCWD = -0x64 - AT_SYMLINK_FOLLOW = 0x4 + AT_EACCESS = 0x1 AT_SYMLINK_NOFOLLOW = 0x2 + AT_SYMLINK_FOLLOW = 0x4 + AT_REMOVEDIR = 0x8 ) type PollFd struct { @@ -556,12 +558,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/constraint/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/constraint/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go index 85effef9c..ad4aad279 100644 --- a/constraint/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +++ b/constraint/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -440,3 +440,43 @@ const ( POLLWRBAND = 0x100 POLLWRNORM = 0x4 ) + +type fileObj struct { + Atim Timespec + Mtim Timespec + Ctim Timespec + Pad [3]uint64 + Name *int8 +} + +type portEvent struct { + Events int32 + Source uint16 + Pad uint16 + Object uint64 + User *byte +} + +const ( + PORT_SOURCE_AIO = 0x1 + PORT_SOURCE_TIMER = 0x2 + PORT_SOURCE_USER = 0x3 + PORT_SOURCE_FD = 0x4 + PORT_SOURCE_ALERT = 0x5 + PORT_SOURCE_MQ = 0x6 + PORT_SOURCE_FILE = 0x7 + PORT_ALERT_SET = 0x1 + PORT_ALERT_UPDATE = 0x2 + PORT_ALERT_INVALID = 0x3 + FILE_ACCESS = 0x1 + FILE_MODIFIED = 0x2 + FILE_ATTRIB = 0x4 + FILE_TRUNC = 0x100000 + FILE_NOFOLLOW = 0x10000000 + FILE_DELETE = 0x10 + FILE_RENAME_TO = 0x20 + FILE_RENAME_FROM = 0x40 + UNMOUNTED = 0x20000000 + MOUNTEDOVER = 0x40000000 + FILE_EXCEPTION = 0x60000070 +) diff --git a/constraint/vendor/golang.org/x/sys/windows/aliases.go b/constraint/vendor/golang.org/x/sys/windows/aliases.go index af3af60db..a20ebea63 100644 --- a/constraint/vendor/golang.org/x/sys/windows/aliases.go +++ b/constraint/vendor/golang.org/x/sys/windows/aliases.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build windows -// +build go1.9 +//go:build windows && go1.9 +// +build windows,go1.9 package windows diff --git a/constraint/vendor/golang.org/x/sys/windows/eventlog.go b/constraint/vendor/golang.org/x/sys/windows/eventlog.go index 40af946e1..2cd60645e 100644 --- a/constraint/vendor/golang.org/x/sys/windows/eventlog.go +++ b/constraint/vendor/golang.org/x/sys/windows/eventlog.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build windows // +build windows package windows diff --git a/constraint/vendor/golang.org/x/sys/windows/memory_windows.go b/constraint/vendor/golang.org/x/sys/windows/memory_windows.go index 1adb60739..6dc0920a8 100644 --- a/constraint/vendor/golang.org/x/sys/windows/memory_windows.go +++ b/constraint/vendor/golang.org/x/sys/windows/memory_windows.go @@ -35,3 +35,14 @@ const ( QUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008 QUOTA_LIMITS_HARDWS_MAX_ENABLE = 0x00000004 ) + +type MemoryBasicInformation struct { + BaseAddress uintptr + AllocationBase uintptr + AllocationProtect uint32 + PartitionId uint16 + RegionSize uintptr + State uint32 + Protect uint32 + Type uint32 +} diff --git a/constraint/vendor/golang.org/x/sys/windows/mksyscall.go b/constraint/vendor/golang.org/x/sys/windows/mksyscall.go index 328e3b2ac..8563f79c5 100644 --- a/constraint/vendor/golang.org/x/sys/windows/mksyscall.go +++ b/constraint/vendor/golang.org/x/sys/windows/mksyscall.go @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build generate // +build generate package windows -//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go +//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go setupapi_windows.go diff --git a/constraint/vendor/golang.org/x/sys/windows/race.go b/constraint/vendor/golang.org/x/sys/windows/race.go index a74e3e24b..9196b089c 100644 --- a/constraint/vendor/golang.org/x/sys/windows/race.go +++ b/constraint/vendor/golang.org/x/sys/windows/race.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build windows && race // +build windows,race package windows diff --git a/constraint/vendor/golang.org/x/sys/windows/race0.go b/constraint/vendor/golang.org/x/sys/windows/race0.go index e44a3cbf6..7bae4817a 100644 --- a/constraint/vendor/golang.org/x/sys/windows/race0.go +++ b/constraint/vendor/golang.org/x/sys/windows/race0.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build windows && !race // +build windows,!race package windows diff --git a/constraint/vendor/golang.org/x/sys/windows/security_windows.go b/constraint/vendor/golang.org/x/sys/windows/security_windows.go index 111c10d3a..d414ef13b 100644 --- a/constraint/vendor/golang.org/x/sys/windows/security_windows.go +++ b/constraint/vendor/golang.org/x/sys/windows/security_windows.go @@ -889,6 +889,7 @@ type WTS_SESSION_INFO struct { //sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken //sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW //sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory +//sys WTSGetActiveConsoleSessionId() (sessionID uint32) type ACL struct { aclRevision byte diff --git a/constraint/vendor/golang.org/x/sys/windows/service.go b/constraint/vendor/golang.org/x/sys/windows/service.go index b269850d0..f8deca839 100644 --- a/constraint/vendor/golang.org/x/sys/windows/service.go +++ b/constraint/vendor/golang.org/x/sys/windows/service.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build windows // +build windows package windows @@ -16,8 +17,6 @@ const ( SC_MANAGER_ALL_ACCESS = 0xf003f ) -//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW - const ( SERVICE_KERNEL_DRIVER = 1 SERVICE_FILE_SYSTEM_DRIVER = 2 @@ -132,6 +131,14 @@ const ( SC_EVENT_DATABASE_CHANGE = 0 SC_EVENT_PROPERTY_CHANGE = 1 SC_EVENT_STATUS_CHANGE = 2 + + SERVICE_START_REASON_DEMAND = 0x00000001 + SERVICE_START_REASON_AUTO = 0x00000002 + SERVICE_START_REASON_TRIGGER = 0x00000004 + SERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008 + SERVICE_START_REASON_DELAYEDAUTO = 0x00000010 + + SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 ) type SERVICE_STATUS struct { @@ -216,6 +223,7 @@ type QUERY_SERVICE_LOCK_STATUS struct { LockDuration uint32 } +//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW //sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle //sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW //sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW @@ -235,3 +243,5 @@ type QUERY_SERVICE_LOCK_STATUS struct { //sys NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW //sys SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications? //sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? +//sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW +//sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? diff --git a/constraint/vendor/golang.org/x/sys/windows/setupapi_windows.go b/constraint/vendor/golang.org/x/sys/windows/setupapi_windows.go new file mode 100644 index 000000000..14027da3f --- /dev/null +++ b/constraint/vendor/golang.org/x/sys/windows/setupapi_windows.go @@ -0,0 +1,1425 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "encoding/binary" + "errors" + "fmt" + "runtime" + "strings" + "syscall" + "unsafe" +) + +// This file contains functions that wrap SetupAPI.dll and CfgMgr32.dll, +// core system functions for managing hardware devices, drivers, and the PnP tree. +// Information about these APIs can be found at: +// https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi +// https://docs.microsoft.com/en-us/windows/win32/devinst/cfgmgr32- + +const ( + ERROR_EXPECTED_SECTION_NAME Errno = 0x20000000 | 0xC0000000 | 0 + ERROR_BAD_SECTION_NAME_LINE Errno = 0x20000000 | 0xC0000000 | 1 + ERROR_SECTION_NAME_TOO_LONG Errno = 0x20000000 | 0xC0000000 | 2 + ERROR_GENERAL_SYNTAX Errno = 0x20000000 | 0xC0000000 | 3 + ERROR_WRONG_INF_STYLE Errno = 0x20000000 | 0xC0000000 | 0x100 + ERROR_SECTION_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x101 + ERROR_LINE_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x102 + ERROR_NO_BACKUP Errno = 0x20000000 | 0xC0000000 | 0x103 + ERROR_NO_ASSOCIATED_CLASS Errno = 0x20000000 | 0xC0000000 | 0x200 + ERROR_CLASS_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x201 + ERROR_DUPLICATE_FOUND Errno = 0x20000000 | 0xC0000000 | 0x202 + ERROR_NO_DRIVER_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x203 + ERROR_KEY_DOES_NOT_EXIST Errno = 0x20000000 | 0xC0000000 | 0x204 + ERROR_INVALID_DEVINST_NAME Errno = 0x20000000 | 0xC0000000 | 0x205 + ERROR_INVALID_CLASS Errno = 0x20000000 | 0xC0000000 | 0x206 + ERROR_DEVINST_ALREADY_EXISTS Errno = 0x20000000 | 0xC0000000 | 0x207 + ERROR_DEVINFO_NOT_REGISTERED Errno = 0x20000000 | 0xC0000000 | 0x208 + ERROR_INVALID_REG_PROPERTY Errno = 0x20000000 | 0xC0000000 | 0x209 + ERROR_NO_INF Errno = 0x20000000 | 0xC0000000 | 0x20A + ERROR_NO_SUCH_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x20B + ERROR_CANT_LOAD_CLASS_ICON Errno = 0x20000000 | 0xC0000000 | 0x20C + ERROR_INVALID_CLASS_INSTALLER Errno = 0x20000000 | 0xC0000000 | 0x20D + ERROR_DI_DO_DEFAULT Errno = 0x20000000 | 0xC0000000 | 0x20E + ERROR_DI_NOFILECOPY Errno = 0x20000000 | 0xC0000000 | 0x20F + ERROR_INVALID_HWPROFILE Errno = 0x20000000 | 0xC0000000 | 0x210 + ERROR_NO_DEVICE_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x211 + ERROR_DEVINFO_LIST_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x212 + ERROR_DEVINFO_DATA_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x213 + ERROR_DI_BAD_PATH Errno = 0x20000000 | 0xC0000000 | 0x214 + ERROR_NO_CLASSINSTALL_PARAMS Errno = 0x20000000 | 0xC0000000 | 0x215 + ERROR_FILEQUEUE_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x216 + ERROR_BAD_SERVICE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x217 + ERROR_NO_CLASS_DRIVER_LIST Errno = 0x20000000 | 0xC0000000 | 0x218 + ERROR_NO_ASSOCIATED_SERVICE Errno = 0x20000000 | 0xC0000000 | 0x219 + ERROR_NO_DEFAULT_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x21A + ERROR_DEVICE_INTERFACE_ACTIVE Errno = 0x20000000 | 0xC0000000 | 0x21B + ERROR_DEVICE_INTERFACE_REMOVED Errno = 0x20000000 | 0xC0000000 | 0x21C + ERROR_BAD_INTERFACE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x21D + ERROR_NO_SUCH_INTERFACE_CLASS Errno = 0x20000000 | 0xC0000000 | 0x21E + ERROR_INVALID_REFERENCE_STRING Errno = 0x20000000 | 0xC0000000 | 0x21F + ERROR_INVALID_MACHINENAME Errno = 0x20000000 | 0xC0000000 | 0x220 + ERROR_REMOTE_COMM_FAILURE Errno = 0x20000000 | 0xC0000000 | 0x221 + ERROR_MACHINE_UNAVAILABLE Errno = 0x20000000 | 0xC0000000 | 0x222 + ERROR_NO_CONFIGMGR_SERVICES Errno = 0x20000000 | 0xC0000000 | 0x223 + ERROR_INVALID_PROPPAGE_PROVIDER Errno = 0x20000000 | 0xC0000000 | 0x224 + ERROR_NO_SUCH_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x225 + ERROR_DI_POSTPROCESSING_REQUIRED Errno = 0x20000000 | 0xC0000000 | 0x226 + ERROR_INVALID_COINSTALLER Errno = 0x20000000 | 0xC0000000 | 0x227 + ERROR_NO_COMPAT_DRIVERS Errno = 0x20000000 | 0xC0000000 | 0x228 + ERROR_NO_DEVICE_ICON Errno = 0x20000000 | 0xC0000000 | 0x229 + ERROR_INVALID_INF_LOGCONFIG Errno = 0x20000000 | 0xC0000000 | 0x22A + ERROR_DI_DONT_INSTALL Errno = 0x20000000 | 0xC0000000 | 0x22B + ERROR_INVALID_FILTER_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22C + ERROR_NON_WINDOWS_NT_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22D + ERROR_NON_WINDOWS_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22E + ERROR_NO_CATALOG_FOR_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x22F + ERROR_DEVINSTALL_QUEUE_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x230 + ERROR_NOT_DISABLEABLE Errno = 0x20000000 | 0xC0000000 | 0x231 + ERROR_CANT_REMOVE_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x232 + ERROR_INVALID_TARGET Errno = 0x20000000 | 0xC0000000 | 0x233 + ERROR_DRIVER_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x234 + ERROR_IN_WOW64 Errno = 0x20000000 | 0xC0000000 | 0x235 + ERROR_SET_SYSTEM_RESTORE_POINT Errno = 0x20000000 | 0xC0000000 | 0x236 + ERROR_SCE_DISABLED Errno = 0x20000000 | 0xC0000000 | 0x238 + ERROR_UNKNOWN_EXCEPTION Errno = 0x20000000 | 0xC0000000 | 0x239 + ERROR_PNP_REGISTRY_ERROR Errno = 0x20000000 | 0xC0000000 | 0x23A + ERROR_REMOTE_REQUEST_UNSUPPORTED Errno = 0x20000000 | 0xC0000000 | 0x23B + ERROR_NOT_AN_INSTALLED_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x23C + ERROR_INF_IN_USE_BY_DEVICES Errno = 0x20000000 | 0xC0000000 | 0x23D + ERROR_DI_FUNCTION_OBSOLETE Errno = 0x20000000 | 0xC0000000 | 0x23E + ERROR_NO_AUTHENTICODE_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x23F + ERROR_AUTHENTICODE_DISALLOWED Errno = 0x20000000 | 0xC0000000 | 0x240 + ERROR_AUTHENTICODE_TRUSTED_PUBLISHER Errno = 0x20000000 | 0xC0000000 | 0x241 + ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED Errno = 0x20000000 | 0xC0000000 | 0x242 + ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Errno = 0x20000000 | 0xC0000000 | 0x243 + ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x244 + ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE Errno = 0x20000000 | 0xC0000000 | 0x245 + ERROR_DEVICE_INSTALLER_NOT_READY Errno = 0x20000000 | 0xC0000000 | 0x246 + ERROR_DRIVER_STORE_ADD_FAILED Errno = 0x20000000 | 0xC0000000 | 0x247 + ERROR_DEVICE_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x248 + ERROR_DRIVER_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x249 + ERROR_WRONG_INF_TYPE Errno = 0x20000000 | 0xC0000000 | 0x24A + ERROR_FILE_HASH_NOT_IN_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x24B + ERROR_DRIVER_STORE_DELETE_FAILED Errno = 0x20000000 | 0xC0000000 | 0x24C + ERROR_UNRECOVERABLE_STACK_OVERFLOW Errno = 0x20000000 | 0xC0000000 | 0x300 + EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW + ERROR_NO_DEFAULT_INTERFACE_DEVICE Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE + ERROR_INTERFACE_DEVICE_ACTIVE Errno = ERROR_DEVICE_INTERFACE_ACTIVE + ERROR_INTERFACE_DEVICE_REMOVED Errno = ERROR_DEVICE_INTERFACE_REMOVED + ERROR_NO_SUCH_INTERFACE_DEVICE Errno = ERROR_NO_SUCH_DEVICE_INTERFACE +) + +const ( + MAX_DEVICE_ID_LEN = 200 + MAX_DEVNODE_ID_LEN = MAX_DEVICE_ID_LEN + MAX_GUID_STRING_LEN = 39 // 38 chars + terminator null + MAX_CLASS_NAME_LEN = 32 + MAX_PROFILE_LEN = 80 + MAX_CONFIG_VALUE = 9999 + MAX_INSTANCE_VALUE = 9999 + CONFIGMG_VERSION = 0x0400 +) + +// Maximum string length constants +const ( + LINE_LEN = 256 // Windows 9x-compatible maximum for displayable strings coming from a device INF. + MAX_INF_STRING_LENGTH = 4096 // Actual maximum size of an INF string (including string substitutions). + MAX_INF_SECTION_NAME_LENGTH = 255 // For Windows 9x compatibility, INF section names should be constrained to 32 characters. + MAX_TITLE_LEN = 60 + MAX_INSTRUCTION_LEN = 256 + MAX_LABEL_LEN = 30 + MAX_SERVICE_NAME_LEN = 256 + MAX_SUBTITLE_LEN = 256 +) + +const ( + // SP_MAX_MACHINENAME_LENGTH defines maximum length of a machine name in the format expected by ConfigMgr32 CM_Connect_Machine (i.e., "\\\\MachineName\0"). + SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3 +) + +// HSPFILEQ is type for setup file queue +type HSPFILEQ uintptr + +// DevInfo holds reference to device information set +type DevInfo Handle + +// DEVINST is a handle usually recognized by cfgmgr32 APIs +type DEVINST uint32 + +// DevInfoData is a device information structure (references a device instance that is a member of a device information set) +type DevInfoData struct { + size uint32 + ClassGUID GUID + DevInst DEVINST + _ uintptr +} + +// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supersedes the functionality of SetupDiGetDeviceInfoListClass). +type DevInfoListDetailData struct { + size uint32 // Use unsafeSizeOf method + ClassGUID GUID + RemoteMachineHandle Handle + remoteMachineName [SP_MAX_MACHINENAME_LENGTH]uint16 +} + +func (*DevInfoListDetailData) unsafeSizeOf() uint32 { + if unsafe.Sizeof(uintptr(0)) == 4 { + // Windows declares this with pshpack1.h + return uint32(unsafe.Offsetof(DevInfoListDetailData{}.remoteMachineName) + unsafe.Sizeof(DevInfoListDetailData{}.remoteMachineName)) + } + return uint32(unsafe.Sizeof(DevInfoListDetailData{})) +} + +func (data *DevInfoListDetailData) RemoteMachineName() string { + return UTF16ToString(data.remoteMachineName[:]) +} + +func (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error { + str, err := UTF16FromString(remoteMachineName) + if err != nil { + return err + } + copy(data.remoteMachineName[:], str) + return nil +} + +// DI_FUNCTION is function type for device installer +type DI_FUNCTION uint32 + +const ( + DIF_SELECTDEVICE DI_FUNCTION = 0x00000001 + DIF_INSTALLDEVICE DI_FUNCTION = 0x00000002 + DIF_ASSIGNRESOURCES DI_FUNCTION = 0x00000003 + DIF_PROPERTIES DI_FUNCTION = 0x00000004 + DIF_REMOVE DI_FUNCTION = 0x00000005 + DIF_FIRSTTIMESETUP DI_FUNCTION = 0x00000006 + DIF_FOUNDDEVICE DI_FUNCTION = 0x00000007 + DIF_SELECTCLASSDRIVERS DI_FUNCTION = 0x00000008 + DIF_VALIDATECLASSDRIVERS DI_FUNCTION = 0x00000009 + DIF_INSTALLCLASSDRIVERS DI_FUNCTION = 0x0000000A + DIF_CALCDISKSPACE DI_FUNCTION = 0x0000000B + DIF_DESTROYPRIVATEDATA DI_FUNCTION = 0x0000000C + DIF_VALIDATEDRIVER DI_FUNCTION = 0x0000000D + DIF_DETECT DI_FUNCTION = 0x0000000F + DIF_INSTALLWIZARD DI_FUNCTION = 0x00000010 + DIF_DESTROYWIZARDDATA DI_FUNCTION = 0x00000011 + DIF_PROPERTYCHANGE DI_FUNCTION = 0x00000012 + DIF_ENABLECLASS DI_FUNCTION = 0x00000013 + DIF_DETECTVERIFY DI_FUNCTION = 0x00000014 + DIF_INSTALLDEVICEFILES DI_FUNCTION = 0x00000015 + DIF_UNREMOVE DI_FUNCTION = 0x00000016 + DIF_SELECTBESTCOMPATDRV DI_FUNCTION = 0x00000017 + DIF_ALLOW_INSTALL DI_FUNCTION = 0x00000018 + DIF_REGISTERDEVICE DI_FUNCTION = 0x00000019 + DIF_NEWDEVICEWIZARD_PRESELECT DI_FUNCTION = 0x0000001A + DIF_NEWDEVICEWIZARD_SELECT DI_FUNCTION = 0x0000001B + DIF_NEWDEVICEWIZARD_PREANALYZE DI_FUNCTION = 0x0000001C + DIF_NEWDEVICEWIZARD_POSTANALYZE DI_FUNCTION = 0x0000001D + DIF_NEWDEVICEWIZARD_FINISHINSTALL DI_FUNCTION = 0x0000001E + DIF_INSTALLINTERFACES DI_FUNCTION = 0x00000020 + DIF_DETECTCANCEL DI_FUNCTION = 0x00000021 + DIF_REGISTER_COINSTALLERS DI_FUNCTION = 0x00000022 + DIF_ADDPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000023 + DIF_ADDPROPERTYPAGE_BASIC DI_FUNCTION = 0x00000024 + DIF_TROUBLESHOOTER DI_FUNCTION = 0x00000026 + DIF_POWERMESSAGEWAKE DI_FUNCTION = 0x00000027 + DIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028 + DIF_UPDATEDRIVER_UI DI_FUNCTION = 0x00000029 + DIF_FINISHINSTALL_ACTION DI_FUNCTION = 0x0000002A +) + +// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set) +type DevInstallParams struct { + size uint32 + Flags DI_FLAGS + FlagsEx DI_FLAGSEX + hwndParent uintptr + InstallMsgHandler uintptr + InstallMsgHandlerContext uintptr + FileQueue HSPFILEQ + _ uintptr + _ uint32 + driverPath [MAX_PATH]uint16 +} + +func (params *DevInstallParams) DriverPath() string { + return UTF16ToString(params.driverPath[:]) +} + +func (params *DevInstallParams) SetDriverPath(driverPath string) error { + str, err := UTF16FromString(driverPath) + if err != nil { + return err + } + copy(params.driverPath[:], str) + return nil +} + +// DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values +type DI_FLAGS uint32 + +const ( + // Flags for choosing a device + DI_SHOWOEM DI_FLAGS = 0x00000001 // support Other... button + DI_SHOWCOMPAT DI_FLAGS = 0x00000002 // show compatibility list + DI_SHOWCLASS DI_FLAGS = 0x00000004 // show class list + DI_SHOWALL DI_FLAGS = 0x00000007 // both class & compat list shown + DI_NOVCP DI_FLAGS = 0x00000008 // don't create a new copy queue--use caller-supplied FileQueue + DI_DIDCOMPAT DI_FLAGS = 0x00000010 // Searched for compatible devices + DI_DIDCLASS DI_FLAGS = 0x00000020 // Searched for class devices + DI_AUTOASSIGNRES DI_FLAGS = 0x00000040 // No UI for resources if possible + + // Flags returned by DiInstallDevice to indicate need to reboot/restart + DI_NEEDRESTART DI_FLAGS = 0x00000080 // Reboot required to take effect + DI_NEEDREBOOT DI_FLAGS = 0x00000100 // "" + + // Flags for device installation + DI_NOBROWSE DI_FLAGS = 0x00000200 // no Browse... in InsertDisk + + // Flags set by DiBuildDriverInfoList + DI_MULTMFGS DI_FLAGS = 0x00000400 // Set if multiple manufacturers in class driver list + + // Flag indicates that device is disabled + DI_DISABLED DI_FLAGS = 0x00000800 // Set if device disabled + + // Flags for Device/Class Properties + DI_GENERALPAGE_ADDED DI_FLAGS = 0x00001000 + DI_RESOURCEPAGE_ADDED DI_FLAGS = 0x00002000 + + // Flag to indicate the setting properties for this Device (or class) caused a change so the Dev Mgr UI probably needs to be updated. + DI_PROPERTIES_CHANGE DI_FLAGS = 0x00004000 + + // Flag to indicate that the sorting from the INF file should be used. + DI_INF_IS_SORTED DI_FLAGS = 0x00008000 + + // Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched. + DI_ENUMSINGLEINF DI_FLAGS = 0x00010000 + + // Flag that prevents ConfigMgr from removing/re-enumerating devices during device + // registration, installation, and deletion. + DI_DONOTCALLCONFIGMG DI_FLAGS = 0x00020000 + + // The following flag can be used to install a device disabled + DI_INSTALLDISABLED DI_FLAGS = 0x00040000 + + // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver + // list from its existing class driver list, instead of the normal INF search. + DI_COMPAT_FROM_CLASS DI_FLAGS = 0x00080000 + + // This flag is set if the Class Install params should be used. + DI_CLASSINSTALLPARAMS DI_FLAGS = 0x00100000 + + // This flag is set if the caller of DiCallClassInstaller does NOT want the internal default action performed if the Class installer returns ERROR_DI_DO_DEFAULT. + DI_NODI_DEFAULTACTION DI_FLAGS = 0x00200000 + + // Flags for device installation + DI_QUIETINSTALL DI_FLAGS = 0x00800000 // don't confuse the user with questions or excess info + DI_NOFILECOPY DI_FLAGS = 0x01000000 // No file Copy necessary + DI_FORCECOPY DI_FLAGS = 0x02000000 // Force files to be copied from install path + DI_DRIVERPAGE_ADDED DI_FLAGS = 0x04000000 // Prop provider added Driver page. + DI_USECI_SELECTSTRINGS DI_FLAGS = 0x08000000 // Use Class Installer Provided strings in the Select Device Dlg + DI_OVERRIDE_INFFLAGS DI_FLAGS = 0x10000000 // Override INF flags + DI_PROPS_NOCHANGEUSAGE DI_FLAGS = 0x20000000 // No Enable/Disable in General Props + + DI_NOSELECTICONS DI_FLAGS = 0x40000000 // No small icons in select device dialogs + + DI_NOWRITE_IDS DI_FLAGS = 0x80000000 // Don't write HW & Compat IDs on install +) + +// DI_FLAGSEX is SP_DEVINSTALL_PARAMS.FlagsEx values +type DI_FLAGSEX uint32 + +const ( + DI_FLAGSEX_CI_FAILED DI_FLAGSEX = 0x00000004 // Failed to Load/Call class installer + DI_FLAGSEX_FINISHINSTALL_ACTION DI_FLAGSEX = 0x00000008 // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context. + DI_FLAGSEX_DIDINFOLIST DI_FLAGSEX = 0x00000010 // Did the Class Info List + DI_FLAGSEX_DIDCOMPATINFO DI_FLAGSEX = 0x00000020 // Did the Compat Info List + DI_FLAGSEX_FILTERCLASSES DI_FLAGSEX = 0x00000040 + DI_FLAGSEX_SETFAILEDINSTALL DI_FLAGSEX = 0x00000080 + DI_FLAGSEX_DEVICECHANGE DI_FLAGSEX = 0x00000100 + DI_FLAGSEX_ALWAYSWRITEIDS DI_FLAGSEX = 0x00000200 + DI_FLAGSEX_PROPCHANGE_PENDING DI_FLAGSEX = 0x00000400 // One or more device property sheets have had changes made to them, and need to have a DIF_PROPERTYCHANGE occur. + DI_FLAGSEX_ALLOWEXCLUDEDDRVS DI_FLAGSEX = 0x00000800 + DI_FLAGSEX_NOUIONQUERYREMOVE DI_FLAGSEX = 0x00001000 + DI_FLAGSEX_USECLASSFORCOMPAT DI_FLAGSEX = 0x00002000 // Use the device's class when building compat drv list. (Ignored if DI_COMPAT_FROM_CLASS flag is specified.) + DI_FLAGSEX_NO_DRVREG_MODIFY DI_FLAGSEX = 0x00008000 // Don't run AddReg and DelReg for device's software (driver) key. + DI_FLAGSEX_IN_SYSTEM_SETUP DI_FLAGSEX = 0x00010000 // Installation is occurring during initial system setup. + DI_FLAGSEX_INET_DRIVER DI_FLAGSEX = 0x00020000 // Driver came from Windows Update + DI_FLAGSEX_APPENDDRIVERLIST DI_FLAGSEX = 0x00040000 // Cause SetupDiBuildDriverInfoList to append a new driver list to an existing list. + DI_FLAGSEX_PREINSTALLBACKUP DI_FLAGSEX = 0x00080000 // not used + DI_FLAGSEX_BACKUPONREPLACE DI_FLAGSEX = 0x00100000 // not used + DI_FLAGSEX_DRIVERLIST_FROM_URL DI_FLAGSEX = 0x00200000 // build driver list from INF(s) retrieved from URL specified in SP_DEVINSTALL_PARAMS.DriverPath (empty string means Windows Update website) + DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS DI_FLAGSEX = 0x00800000 // Don't include old Internet drivers when building a driver list. Ignored on Windows Vista and later. + DI_FLAGSEX_POWERPAGE_ADDED DI_FLAGSEX = 0x01000000 // class installer added their own power page + DI_FLAGSEX_FILTERSIMILARDRIVERS DI_FLAGSEX = 0x02000000 // only include similar drivers in class list + DI_FLAGSEX_INSTALLEDDRIVER DI_FLAGSEX = 0x04000000 // only add the installed driver to the class or compat driver list. Used in calls to SetupDiBuildDriverInfoList + DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE DI_FLAGSEX = 0x08000000 // Don't remove identical driver nodes from the class list + DI_FLAGSEX_ALTPLATFORM_DRVSEARCH DI_FLAGSEX = 0x10000000 // Build driver list based on alternate platform information specified in associated file queue + DI_FLAGSEX_RESTART_DEVICE_ONLY DI_FLAGSEX = 0x20000000 // only restart the device drivers are being installed on as opposed to restarting all devices using those drivers. + DI_FLAGSEX_RECURSIVESEARCH DI_FLAGSEX = 0x40000000 // Tell SetupDiBuildDriverInfoList to do a recursive search + DI_FLAGSEX_SEARCH_PUBLISHED_INFS DI_FLAGSEX = 0x80000000 // Tell SetupDiBuildDriverInfoList to do a "published INF" search +) + +// ClassInstallHeader is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure. +type ClassInstallHeader struct { + size uint32 + InstallFunction DI_FUNCTION +} + +func MakeClassInstallHeader(installFunction DI_FUNCTION) *ClassInstallHeader { + hdr := &ClassInstallHeader{InstallFunction: installFunction} + hdr.size = uint32(unsafe.Sizeof(*hdr)) + return hdr +} + +// DICS_STATE specifies values indicating a change in a device's state +type DICS_STATE uint32 + +const ( + DICS_ENABLE DICS_STATE = 0x00000001 // The device is being enabled. + DICS_DISABLE DICS_STATE = 0x00000002 // The device is being disabled. + DICS_PROPCHANGE DICS_STATE = 0x00000003 // The properties of the device have changed. + DICS_START DICS_STATE = 0x00000004 // The device is being started (if the request is for the currently active hardware profile). + DICS_STOP DICS_STATE = 0x00000005 // The device is being stopped. The driver stack will be unloaded and the CSCONFIGFLAG_DO_NOT_START flag will be set for the device. +) + +// DICS_FLAG specifies the scope of a device property change +type DICS_FLAG uint32 + +const ( + DICS_FLAG_GLOBAL DICS_FLAG = 0x00000001 // make change in all hardware profiles + DICS_FLAG_CONFIGSPECIFIC DICS_FLAG = 0x00000002 // make change in specified profile only + DICS_FLAG_CONFIGGENERAL DICS_FLAG = 0x00000004 // 1 or more hardware profile-specific changes to follow (obsolete) +) + +// PropChangeParams is a structure corresponding to a DIF_PROPERTYCHANGE install function. +type PropChangeParams struct { + ClassInstallHeader ClassInstallHeader + StateChange DICS_STATE + Scope DICS_FLAG + HwProfile uint32 +} + +// DI_REMOVEDEVICE specifies the scope of the device removal +type DI_REMOVEDEVICE uint32 + +const ( + DI_REMOVEDEVICE_GLOBAL DI_REMOVEDEVICE = 0x00000001 // Make this change in all hardware profiles. Remove information about the device from the registry. + DI_REMOVEDEVICE_CONFIGSPECIFIC DI_REMOVEDEVICE = 0x00000002 // Make this change to only the hardware profile specified by HwProfile. this flag only applies to root-enumerated devices. When Windows removes the device from the last hardware profile in which it was configured, Windows performs a global removal. +) + +// RemoveDeviceParams is a structure corresponding to a DIF_REMOVE install function. +type RemoveDeviceParams struct { + ClassInstallHeader ClassInstallHeader + Scope DI_REMOVEDEVICE + HwProfile uint32 +} + +// DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set) +type DrvInfoData struct { + size uint32 + DriverType uint32 + _ uintptr + description [LINE_LEN]uint16 + mfgName [LINE_LEN]uint16 + providerName [LINE_LEN]uint16 + DriverDate Filetime + DriverVersion uint64 +} + +func (data *DrvInfoData) Description() string { + return UTF16ToString(data.description[:]) +} + +func (data *DrvInfoData) SetDescription(description string) error { + str, err := UTF16FromString(description) + if err != nil { + return err + } + copy(data.description[:], str) + return nil +} + +func (data *DrvInfoData) MfgName() string { + return UTF16ToString(data.mfgName[:]) +} + +func (data *DrvInfoData) SetMfgName(mfgName string) error { + str, err := UTF16FromString(mfgName) + if err != nil { + return err + } + copy(data.mfgName[:], str) + return nil +} + +func (data *DrvInfoData) ProviderName() string { + return UTF16ToString(data.providerName[:]) +} + +func (data *DrvInfoData) SetProviderName(providerName string) error { + str, err := UTF16FromString(providerName) + if err != nil { + return err + } + copy(data.providerName[:], str) + return nil +} + +// IsNewer method returns true if DrvInfoData date and version is newer than supplied parameters. +func (data *DrvInfoData) IsNewer(driverDate Filetime, driverVersion uint64) bool { + if data.DriverDate.HighDateTime > driverDate.HighDateTime { + return true + } + if data.DriverDate.HighDateTime < driverDate.HighDateTime { + return false + } + + if data.DriverDate.LowDateTime > driverDate.LowDateTime { + return true + } + if data.DriverDate.LowDateTime < driverDate.LowDateTime { + return false + } + + if data.DriverVersion > driverVersion { + return true + } + if data.DriverVersion < driverVersion { + return false + } + + return false +} + +// DrvInfoDetailData is driver information details structure (provides detailed information about a particular driver information structure) +type DrvInfoDetailData struct { + size uint32 // Use unsafeSizeOf method + InfDate Filetime + compatIDsOffset uint32 + compatIDsLength uint32 + _ uintptr + sectionName [LINE_LEN]uint16 + infFileName [MAX_PATH]uint16 + drvDescription [LINE_LEN]uint16 + hardwareID [1]uint16 +} + +func (*DrvInfoDetailData) unsafeSizeOf() uint32 { + if unsafe.Sizeof(uintptr(0)) == 4 { + // Windows declares this with pshpack1.h + return uint32(unsafe.Offsetof(DrvInfoDetailData{}.hardwareID) + unsafe.Sizeof(DrvInfoDetailData{}.hardwareID)) + } + return uint32(unsafe.Sizeof(DrvInfoDetailData{})) +} + +func (data *DrvInfoDetailData) SectionName() string { + return UTF16ToString(data.sectionName[:]) +} + +func (data *DrvInfoDetailData) InfFileName() string { + return UTF16ToString(data.infFileName[:]) +} + +func (data *DrvInfoDetailData) DrvDescription() string { + return UTF16ToString(data.drvDescription[:]) +} + +func (data *DrvInfoDetailData) HardwareID() string { + if data.compatIDsOffset > 1 { + bufW := data.getBuf() + return UTF16ToString(bufW[:wcslen(bufW)]) + } + + return "" +} + +func (data *DrvInfoDetailData) CompatIDs() []string { + a := make([]string, 0) + + if data.compatIDsLength > 0 { + bufW := data.getBuf() + bufW = bufW[data.compatIDsOffset : data.compatIDsOffset+data.compatIDsLength] + for i := 0; i < len(bufW); { + j := i + wcslen(bufW[i:]) + if i < j { + a = append(a, UTF16ToString(bufW[i:j])) + } + i = j + 1 + } + } + + return a +} + +func (data *DrvInfoDetailData) getBuf() []uint16 { + len := (data.size - uint32(unsafe.Offsetof(data.hardwareID))) / 2 + sl := struct { + addr *uint16 + len int + cap int + }{&data.hardwareID[0], int(len), int(len)} + return *(*[]uint16)(unsafe.Pointer(&sl)) +} + +// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list. +func (data *DrvInfoDetailData) IsCompatible(hwid string) bool { + hwidLC := strings.ToLower(hwid) + if strings.ToLower(data.HardwareID()) == hwidLC { + return true + } + a := data.CompatIDs() + for i := range a { + if strings.ToLower(a[i]) == hwidLC { + return true + } + } + + return false +} + +// DICD flags control SetupDiCreateDeviceInfo +type DICD uint32 + +const ( + DICD_GENERATE_ID DICD = 0x00000001 + DICD_INHERIT_CLASSDRVS DICD = 0x00000002 +) + +// SUOI flags control SetupUninstallOEMInf +type SUOI uint32 + +const ( + SUOI_FORCEDELETE SUOI = 0x0001 +) + +// SPDIT flags to distinguish between class drivers and +// device drivers. (Passed in 'DriverType' parameter of +// driver information list APIs) +type SPDIT uint32 + +const ( + SPDIT_NODRIVER SPDIT = 0x00000000 + SPDIT_CLASSDRIVER SPDIT = 0x00000001 + SPDIT_COMPATDRIVER SPDIT = 0x00000002 +) + +// DIGCF flags control what is included in the device information set built by SetupDiGetClassDevs +type DIGCF uint32 + +const ( + DIGCF_DEFAULT DIGCF = 0x00000001 // only valid with DIGCF_DEVICEINTERFACE + DIGCF_PRESENT DIGCF = 0x00000002 + DIGCF_ALLCLASSES DIGCF = 0x00000004 + DIGCF_PROFILE DIGCF = 0x00000008 + DIGCF_DEVICEINTERFACE DIGCF = 0x00000010 +) + +// DIREG specifies values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey. +type DIREG uint32 + +const ( + DIREG_DEV DIREG = 0x00000001 // Open/Create/Delete device key + DIREG_DRV DIREG = 0x00000002 // Open/Create/Delete driver key + DIREG_BOTH DIREG = 0x00000004 // Delete both driver and Device key +) + +// SPDRP specifies device registry property codes +// (Codes marked as read-only (R) may only be used for +// SetupDiGetDeviceRegistryProperty) +// +// These values should cover the same set of registry properties +// as defined by the CM_DRP codes in cfgmgr32.h. +// +// Note that SPDRP codes are zero based while CM_DRP codes are one based! +type SPDRP uint32 + +const ( + SPDRP_DEVICEDESC SPDRP = 0x00000000 // DeviceDesc (R/W) + SPDRP_HARDWAREID SPDRP = 0x00000001 // HardwareID (R/W) + SPDRP_COMPATIBLEIDS SPDRP = 0x00000002 // CompatibleIDs (R/W) + SPDRP_SERVICE SPDRP = 0x00000004 // Service (R/W) + SPDRP_CLASS SPDRP = 0x00000007 // Class (R--tied to ClassGUID) + SPDRP_CLASSGUID SPDRP = 0x00000008 // ClassGUID (R/W) + SPDRP_DRIVER SPDRP = 0x00000009 // Driver (R/W) + SPDRP_CONFIGFLAGS SPDRP = 0x0000000A // ConfigFlags (R/W) + SPDRP_MFG SPDRP = 0x0000000B // Mfg (R/W) + SPDRP_FRIENDLYNAME SPDRP = 0x0000000C // FriendlyName (R/W) + SPDRP_LOCATION_INFORMATION SPDRP = 0x0000000D // LocationInformation (R/W) + SPDRP_PHYSICAL_DEVICE_OBJECT_NAME SPDRP = 0x0000000E // PhysicalDeviceObjectName (R) + SPDRP_CAPABILITIES SPDRP = 0x0000000F // Capabilities (R) + SPDRP_UI_NUMBER SPDRP = 0x00000010 // UiNumber (R) + SPDRP_UPPERFILTERS SPDRP = 0x00000011 // UpperFilters (R/W) + SPDRP_LOWERFILTERS SPDRP = 0x00000012 // LowerFilters (R/W) + SPDRP_BUSTYPEGUID SPDRP = 0x00000013 // BusTypeGUID (R) + SPDRP_LEGACYBUSTYPE SPDRP = 0x00000014 // LegacyBusType (R) + SPDRP_BUSNUMBER SPDRP = 0x00000015 // BusNumber (R) + SPDRP_ENUMERATOR_NAME SPDRP = 0x00000016 // Enumerator Name (R) + SPDRP_SECURITY SPDRP = 0x00000017 // Security (R/W, binary form) + SPDRP_SECURITY_SDS SPDRP = 0x00000018 // Security (W, SDS form) + SPDRP_DEVTYPE SPDRP = 0x00000019 // Device Type (R/W) + SPDRP_EXCLUSIVE SPDRP = 0x0000001A // Device is exclusive-access (R/W) + SPDRP_CHARACTERISTICS SPDRP = 0x0000001B // Device Characteristics (R/W) + SPDRP_ADDRESS SPDRP = 0x0000001C // Device Address (R) + SPDRP_UI_NUMBER_DESC_FORMAT SPDRP = 0x0000001D // UiNumberDescFormat (R/W) + SPDRP_DEVICE_POWER_DATA SPDRP = 0x0000001E // Device Power Data (R) + SPDRP_REMOVAL_POLICY SPDRP = 0x0000001F // Removal Policy (R) + SPDRP_REMOVAL_POLICY_HW_DEFAULT SPDRP = 0x00000020 // Hardware Removal Policy (R) + SPDRP_REMOVAL_POLICY_OVERRIDE SPDRP = 0x00000021 // Removal Policy Override (RW) + SPDRP_INSTALL_STATE SPDRP = 0x00000022 // Device Install State (R) + SPDRP_LOCATION_PATHS SPDRP = 0x00000023 // Device Location Paths (R) + SPDRP_BASE_CONTAINERID SPDRP = 0x00000024 // Base ContainerID (R) + + SPDRP_MAXIMUM_PROPERTY SPDRP = 0x00000025 // Upper bound on ordinals +) + +// DEVPROPTYPE represents the property-data-type identifier that specifies the +// data type of a device property value in the unified device property model. +type DEVPROPTYPE uint32 + +const ( + DEVPROP_TYPEMOD_ARRAY DEVPROPTYPE = 0x00001000 + DEVPROP_TYPEMOD_LIST DEVPROPTYPE = 0x00002000 + + DEVPROP_TYPE_EMPTY DEVPROPTYPE = 0x00000000 + DEVPROP_TYPE_NULL DEVPROPTYPE = 0x00000001 + DEVPROP_TYPE_SBYTE DEVPROPTYPE = 0x00000002 + DEVPROP_TYPE_BYTE DEVPROPTYPE = 0x00000003 + DEVPROP_TYPE_INT16 DEVPROPTYPE = 0x00000004 + DEVPROP_TYPE_UINT16 DEVPROPTYPE = 0x00000005 + DEVPROP_TYPE_INT32 DEVPROPTYPE = 0x00000006 + DEVPROP_TYPE_UINT32 DEVPROPTYPE = 0x00000007 + DEVPROP_TYPE_INT64 DEVPROPTYPE = 0x00000008 + DEVPROP_TYPE_UINT64 DEVPROPTYPE = 0x00000009 + DEVPROP_TYPE_FLOAT DEVPROPTYPE = 0x0000000A + DEVPROP_TYPE_DOUBLE DEVPROPTYPE = 0x0000000B + DEVPROP_TYPE_DECIMAL DEVPROPTYPE = 0x0000000C + DEVPROP_TYPE_GUID DEVPROPTYPE = 0x0000000D + DEVPROP_TYPE_CURRENCY DEVPROPTYPE = 0x0000000E + DEVPROP_TYPE_DATE DEVPROPTYPE = 0x0000000F + DEVPROP_TYPE_FILETIME DEVPROPTYPE = 0x00000010 + DEVPROP_TYPE_BOOLEAN DEVPROPTYPE = 0x00000011 + DEVPROP_TYPE_STRING DEVPROPTYPE = 0x00000012 + DEVPROP_TYPE_STRING_LIST DEVPROPTYPE = DEVPROP_TYPE_STRING | DEVPROP_TYPEMOD_LIST + DEVPROP_TYPE_SECURITY_DESCRIPTOR DEVPROPTYPE = 0x00000013 + DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING DEVPROPTYPE = 0x00000014 + DEVPROP_TYPE_DEVPROPKEY DEVPROPTYPE = 0x00000015 + DEVPROP_TYPE_DEVPROPTYPE DEVPROPTYPE = 0x00000016 + DEVPROP_TYPE_BINARY DEVPROPTYPE = DEVPROP_TYPE_BYTE | DEVPROP_TYPEMOD_ARRAY + DEVPROP_TYPE_ERROR DEVPROPTYPE = 0x00000017 + DEVPROP_TYPE_NTSTATUS DEVPROPTYPE = 0x00000018 + DEVPROP_TYPE_STRING_INDIRECT DEVPROPTYPE = 0x00000019 + + MAX_DEVPROP_TYPE DEVPROPTYPE = 0x00000019 + MAX_DEVPROP_TYPEMOD DEVPROPTYPE = 0x00002000 + + DEVPROP_MASK_TYPE DEVPROPTYPE = 0x00000FFF + DEVPROP_MASK_TYPEMOD DEVPROPTYPE = 0x0000F000 +) + +// DEVPROPGUID specifies a property category. +type DEVPROPGUID GUID + +// DEVPROPID uniquely identifies the property within the property category. +type DEVPROPID uint32 + +const DEVPROPID_FIRST_USABLE DEVPROPID = 2 + +// DEVPROPKEY represents a device property key for a device property in the +// unified device property model. +type DEVPROPKEY struct { + FmtID DEVPROPGUID + PID DEVPROPID +} + +// CONFIGRET is a return value or error code from cfgmgr32 APIs +type CONFIGRET uint32 + +func (ret CONFIGRET) Error() string { + if win32Error, ok := ret.Unwrap().(Errno); ok { + return fmt.Sprintf("%s (CfgMgr error: 0x%08x)", win32Error.Error(), uint32(ret)) + } + return fmt.Sprintf("CfgMgr error: 0x%08x", uint32(ret)) +} + +func (ret CONFIGRET) Win32Error(defaultError Errno) Errno { + return cm_MapCrToWin32Err(ret, defaultError) +} + +func (ret CONFIGRET) Unwrap() error { + const noMatch = Errno(^uintptr(0)) + win32Error := ret.Win32Error(noMatch) + if win32Error == noMatch { + return nil + } + return win32Error +} + +const ( + CR_SUCCESS CONFIGRET = 0x00000000 + CR_DEFAULT CONFIGRET = 0x00000001 + CR_OUT_OF_MEMORY CONFIGRET = 0x00000002 + CR_INVALID_POINTER CONFIGRET = 0x00000003 + CR_INVALID_FLAG CONFIGRET = 0x00000004 + CR_INVALID_DEVNODE CONFIGRET = 0x00000005 + CR_INVALID_DEVINST = CR_INVALID_DEVNODE + CR_INVALID_RES_DES CONFIGRET = 0x00000006 + CR_INVALID_LOG_CONF CONFIGRET = 0x00000007 + CR_INVALID_ARBITRATOR CONFIGRET = 0x00000008 + CR_INVALID_NODELIST CONFIGRET = 0x00000009 + CR_DEVNODE_HAS_REQS CONFIGRET = 0x0000000A + CR_DEVINST_HAS_REQS = CR_DEVNODE_HAS_REQS + CR_INVALID_RESOURCEID CONFIGRET = 0x0000000B + CR_DLVXD_NOT_FOUND CONFIGRET = 0x0000000C + CR_NO_SUCH_DEVNODE CONFIGRET = 0x0000000D + CR_NO_SUCH_DEVINST = CR_NO_SUCH_DEVNODE + CR_NO_MORE_LOG_CONF CONFIGRET = 0x0000000E + CR_NO_MORE_RES_DES CONFIGRET = 0x0000000F + CR_ALREADY_SUCH_DEVNODE CONFIGRET = 0x00000010 + CR_ALREADY_SUCH_DEVINST = CR_ALREADY_SUCH_DEVNODE + CR_INVALID_RANGE_LIST CONFIGRET = 0x00000011 + CR_INVALID_RANGE CONFIGRET = 0x00000012 + CR_FAILURE CONFIGRET = 0x00000013 + CR_NO_SUCH_LOGICAL_DEV CONFIGRET = 0x00000014 + CR_CREATE_BLOCKED CONFIGRET = 0x00000015 + CR_NOT_SYSTEM_VM CONFIGRET = 0x00000016 + CR_REMOVE_VETOED CONFIGRET = 0x00000017 + CR_APM_VETOED CONFIGRET = 0x00000018 + CR_INVALID_LOAD_TYPE CONFIGRET = 0x00000019 + CR_BUFFER_SMALL CONFIGRET = 0x0000001A + CR_NO_ARBITRATOR CONFIGRET = 0x0000001B + CR_NO_REGISTRY_HANDLE CONFIGRET = 0x0000001C + CR_REGISTRY_ERROR CONFIGRET = 0x0000001D + CR_INVALID_DEVICE_ID CONFIGRET = 0x0000001E + CR_INVALID_DATA CONFIGRET = 0x0000001F + CR_INVALID_API CONFIGRET = 0x00000020 + CR_DEVLOADER_NOT_READY CONFIGRET = 0x00000021 + CR_NEED_RESTART CONFIGRET = 0x00000022 + CR_NO_MORE_HW_PROFILES CONFIGRET = 0x00000023 + CR_DEVICE_NOT_THERE CONFIGRET = 0x00000024 + CR_NO_SUCH_VALUE CONFIGRET = 0x00000025 + CR_WRONG_TYPE CONFIGRET = 0x00000026 + CR_INVALID_PRIORITY CONFIGRET = 0x00000027 + CR_NOT_DISABLEABLE CONFIGRET = 0x00000028 + CR_FREE_RESOURCES CONFIGRET = 0x00000029 + CR_QUERY_VETOED CONFIGRET = 0x0000002A + CR_CANT_SHARE_IRQ CONFIGRET = 0x0000002B + CR_NO_DEPENDENT CONFIGRET = 0x0000002C + CR_SAME_RESOURCES CONFIGRET = 0x0000002D + CR_NO_SUCH_REGISTRY_KEY CONFIGRET = 0x0000002E + CR_INVALID_MACHINENAME CONFIGRET = 0x0000002F + CR_REMOTE_COMM_FAILURE CONFIGRET = 0x00000030 + CR_MACHINE_UNAVAILABLE CONFIGRET = 0x00000031 + CR_NO_CM_SERVICES CONFIGRET = 0x00000032 + CR_ACCESS_DENIED CONFIGRET = 0x00000033 + CR_CALL_NOT_IMPLEMENTED CONFIGRET = 0x00000034 + CR_INVALID_PROPERTY CONFIGRET = 0x00000035 + CR_DEVICE_INTERFACE_ACTIVE CONFIGRET = 0x00000036 + CR_NO_SUCH_DEVICE_INTERFACE CONFIGRET = 0x00000037 + CR_INVALID_REFERENCE_STRING CONFIGRET = 0x00000038 + CR_INVALID_CONFLICT_LIST CONFIGRET = 0x00000039 + CR_INVALID_INDEX CONFIGRET = 0x0000003A + CR_INVALID_STRUCTURE_SIZE CONFIGRET = 0x0000003B + NUM_CR_RESULTS CONFIGRET = 0x0000003C +) + +const ( + CM_GET_DEVICE_INTERFACE_LIST_PRESENT = 0 // only currently 'live' device interfaces + CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES = 1 // all registered device interfaces, live or not +) + +const ( + DN_ROOT_ENUMERATED = 0x00000001 // Was enumerated by ROOT + DN_DRIVER_LOADED = 0x00000002 // Has Register_Device_Driver + DN_ENUM_LOADED = 0x00000004 // Has Register_Enumerator + DN_STARTED = 0x00000008 // Is currently configured + DN_MANUAL = 0x00000010 // Manually installed + DN_NEED_TO_ENUM = 0x00000020 // May need reenumeration + DN_NOT_FIRST_TIME = 0x00000040 // Has received a config + DN_HARDWARE_ENUM = 0x00000080 // Enum generates hardware ID + DN_LIAR = 0x00000100 // Lied about can reconfig once + DN_HAS_MARK = 0x00000200 // Not CM_Create_DevInst lately + DN_HAS_PROBLEM = 0x00000400 // Need device installer + DN_FILTERED = 0x00000800 // Is filtered + DN_MOVED = 0x00001000 // Has been moved + DN_DISABLEABLE = 0x00002000 // Can be disabled + DN_REMOVABLE = 0x00004000 // Can be removed + DN_PRIVATE_PROBLEM = 0x00008000 // Has a private problem + DN_MF_PARENT = 0x00010000 // Multi function parent + DN_MF_CHILD = 0x00020000 // Multi function child + DN_WILL_BE_REMOVED = 0x00040000 // DevInst is being removed + DN_NOT_FIRST_TIMEE = 0x00080000 // Has received a config enumerate + DN_STOP_FREE_RES = 0x00100000 // When child is stopped, free resources + DN_REBAL_CANDIDATE = 0x00200000 // Don't skip during rebalance + DN_BAD_PARTIAL = 0x00400000 // This devnode's log_confs do not have same resources + DN_NT_ENUMERATOR = 0x00800000 // This devnode's is an NT enumerator + DN_NT_DRIVER = 0x01000000 // This devnode's is an NT driver + DN_NEEDS_LOCKING = 0x02000000 // Devnode need lock resume processing + DN_ARM_WAKEUP = 0x04000000 // Devnode can be the wakeup device + DN_APM_ENUMERATOR = 0x08000000 // APM aware enumerator + DN_APM_DRIVER = 0x10000000 // APM aware driver + DN_SILENT_INSTALL = 0x20000000 // Silent install + DN_NO_SHOW_IN_DM = 0x40000000 // No show in device manager + DN_BOOT_LOG_PROB = 0x80000000 // Had a problem during preassignment of boot log conf + DN_NEED_RESTART = DN_LIAR // System needs to be restarted for this Devnode to work properly + DN_DRIVER_BLOCKED = DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode + DN_LEGACY_DRIVER = DN_MOVED // This device is using a legacy driver + DN_CHILD_WITH_INVALID_ID = DN_HAS_MARK // One or more children have invalid IDs + DN_DEVICE_DISCONNECTED = DN_NEEDS_LOCKING // The function driver for a device reported that the device is not connected. Typically this means a wireless device is out of range. + DN_QUERY_REMOVE_PENDING = DN_MF_PARENT // Device is part of a set of related devices collectively pending query-removal + DN_QUERY_REMOVE_ACTIVE = DN_MF_CHILD // Device is actively engaged in a query-remove IRP + DN_CHANGEABLE_FLAGS = DN_NOT_FIRST_TIME | DN_HARDWARE_ENUM | DN_HAS_MARK | DN_DISABLEABLE | DN_REMOVABLE | DN_MF_CHILD | DN_MF_PARENT | DN_NOT_FIRST_TIMEE | DN_STOP_FREE_RES | DN_REBAL_CANDIDATE | DN_NT_ENUMERATOR | DN_NT_DRIVER | DN_SILENT_INSTALL | DN_NO_SHOW_IN_DM +) + +//sys setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiCreateDeviceInfoListExW + +// SetupDiCreateDeviceInfoListEx function creates an empty device information set on a remote or a local computer and optionally associates the set with a device setup class. +func SetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName string) (deviceInfoSet DevInfo, err error) { + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0) +} + +//sys setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW + +// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. +func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) { + data := &DevInfoListDetailData{} + data.size = data.unsafeSizeOf() + + return data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data) +} + +// DeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. +func (deviceInfoSet DevInfo) DeviceInfoListDetail() (*DevInfoListDetailData, error) { + return SetupDiGetDeviceInfoListDetail(deviceInfoSet) +} + +//sys setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCreateDeviceInfoW + +// SetupDiCreateDeviceInfo function creates a new device information element and adds it as a new member to the specified device information set. +func SetupDiCreateDeviceInfo(deviceInfoSet DevInfo, deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (deviceInfoData *DevInfoData, err error) { + deviceNameUTF16, err := UTF16PtrFromString(deviceName) + if err != nil { + return + } + + var deviceDescriptionUTF16 *uint16 + if deviceDescription != "" { + deviceDescriptionUTF16, err = UTF16PtrFromString(deviceDescription) + if err != nil { + return + } + } + + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiCreateDeviceInfo(deviceInfoSet, deviceNameUTF16, classGUID, deviceDescriptionUTF16, hwndParent, creationFlags, data) +} + +// CreateDeviceInfo method creates a new device information element and adds it as a new member to the specified device information set. +func (deviceInfoSet DevInfo) CreateDeviceInfo(deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (*DevInfoData, error) { + return SetupDiCreateDeviceInfo(deviceInfoSet, deviceName, classGUID, deviceDescription, hwndParent, creationFlags) +} + +//sys setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiEnumDeviceInfo + +// SetupDiEnumDeviceInfo function returns a DevInfoData structure that specifies a device information element in a device information set. +func SetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex int) (*DevInfoData, error) { + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiEnumDeviceInfo(deviceInfoSet, uint32(memberIndex), data) +} + +// EnumDeviceInfo method returns a DevInfoData structure that specifies a device information element in a device information set. +func (deviceInfoSet DevInfo) EnumDeviceInfo(memberIndex int) (*DevInfoData, error) { + return SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex) +} + +// SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. +//sys SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiDestroyDeviceInfoList + +// Close method deletes a device information set and frees all associated memory. +func (deviceInfoSet DevInfo) Close() error { + return SetupDiDestroyDeviceInfoList(deviceInfoSet) +} + +//sys SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiBuildDriverInfoList + +// BuildDriverInfoList method builds a list of drivers that is associated with a specific device or with the global class driver list for a device information set. +func (deviceInfoSet DevInfo) BuildDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error { + return SetupDiBuildDriverInfoList(deviceInfoSet, deviceInfoData, driverType) +} + +//sys SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiCancelDriverInfoSearch + +// CancelDriverInfoSearch method cancels a driver list search that is currently in progress in a different thread. +func (deviceInfoSet DevInfo) CancelDriverInfoSearch() error { + return SetupDiCancelDriverInfoSearch(deviceInfoSet) +} + +//sys setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiEnumDriverInfoW + +// SetupDiEnumDriverInfo function enumerates the members of a driver list. +func SetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) { + data := &DrvInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, uint32(memberIndex), data) +} + +// EnumDriverInfo method enumerates the members of a driver list. +func (deviceInfoSet DevInfo) EnumDriverInfo(deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) { + return SetupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, memberIndex) +} + +//sys setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiGetSelectedDriverW + +// SetupDiGetSelectedDriver function retrieves the selected driver for a device information set or a particular device information element. +func SetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DrvInfoData, error) { + data := &DrvInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiGetSelectedDriver(deviceInfoSet, deviceInfoData, data) +} + +// SelectedDriver method retrieves the selected driver for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SelectedDriver(deviceInfoData *DevInfoData) (*DrvInfoData, error) { + return SetupDiGetSelectedDriver(deviceInfoSet, deviceInfoData) +} + +//sys SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiSetSelectedDriverW + +// SetSelectedDriver method sets, or resets, the selected driver for a device information element or the selected class driver for a device information set. +func (deviceInfoSet DevInfo) SetSelectedDriver(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) error { + return SetupDiSetSelectedDriver(deviceInfoSet, deviceInfoData, driverInfoData) +} + +//sys setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDriverInfoDetailW + +// SetupDiGetDriverInfoDetail function retrieves driver information detail for a device information set or a particular device information element in the device information set. +func SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) { + reqSize := uint32(2048) + for { + buf := make([]byte, reqSize) + data := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0])) + data.size = data.unsafeSizeOf() + err := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + data.size = reqSize + return data, nil + } +} + +// DriverInfoDetail method retrieves driver information detail for a device information set or a particular device information element in the device information set. +func (deviceInfoSet DevInfo) DriverInfoDetail(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) { + return SetupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData) +} + +//sys SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiDestroyDriverInfoList + +// DestroyDriverInfoList method deletes a driver list. +func (deviceInfoSet DevInfo) DestroyDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error { + return SetupDiDestroyDriverInfoList(deviceInfoSet, deviceInfoData, driverType) +} + +//sys setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiGetClassDevsExW + +// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer. +func SetupDiGetClassDevsEx(classGUID *GUID, enumerator string, hwndParent uintptr, flags DIGCF, deviceInfoSet DevInfo, machineName string) (handle DevInfo, err error) { + var enumeratorUTF16 *uint16 + if enumerator != "" { + enumeratorUTF16, err = UTF16PtrFromString(enumerator) + if err != nil { + return + } + } + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + return setupDiGetClassDevsEx(classGUID, enumeratorUTF16, hwndParent, flags, deviceInfoSet, machineNameUTF16, 0) +} + +// SetupDiCallClassInstaller function calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code). +//sys SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCallClassInstaller + +// CallClassInstaller member calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code). +func (deviceInfoSet DevInfo) CallClassInstaller(installFunction DI_FUNCTION, deviceInfoData *DevInfoData) error { + return SetupDiCallClassInstaller(installFunction, deviceInfoSet, deviceInfoData) +} + +// SetupDiOpenDevRegKey function opens a registry key for device-specific configuration information. +//sys SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) [failretval==InvalidHandle] = setupapi.SetupDiOpenDevRegKey + +// OpenDevRegKey method opens a registry key for device-specific configuration information. +func (deviceInfoSet DevInfo) OpenDevRegKey(DeviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (Handle, error) { + return SetupDiOpenDevRegKey(deviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired) +} + +//sys setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) = setupapi.SetupDiGetDevicePropertyW + +// SetupDiGetDeviceProperty function retrieves a specified device instance property. +func SetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY) (value interface{}, err error) { + reqSize := uint32(256) + for { + var dataType DEVPROPTYPE + buf := make([]byte, reqSize) + err = setupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, propertyKey, &dataType, &buf[0], uint32(len(buf)), &reqSize, 0) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return + } + switch dataType { + case DEVPROP_TYPE_STRING: + ret := UTF16ToString(bufToUTF16(buf)) + runtime.KeepAlive(buf) + return ret, nil + } + return nil, errors.New("unimplemented property type") + } +} + +//sys setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceRegistryPropertyW + +// SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. +func SetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP) (value interface{}, err error) { + reqSize := uint32(256) + for { + var dataType uint32 + buf := make([]byte, reqSize) + err = setupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &dataType, &buf[0], uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return + } + return getRegistryValue(buf[:reqSize], dataType) + } +} + +func getRegistryValue(buf []byte, dataType uint32) (interface{}, error) { + switch dataType { + case REG_SZ: + ret := UTF16ToString(bufToUTF16(buf)) + runtime.KeepAlive(buf) + return ret, nil + case REG_EXPAND_SZ: + value := UTF16ToString(bufToUTF16(buf)) + if value == "" { + return "", nil + } + p, err := syscall.UTF16PtrFromString(value) + if err != nil { + return "", err + } + ret := make([]uint16, 100) + for { + n, err := ExpandEnvironmentStrings(p, &ret[0], uint32(len(ret))) + if err != nil { + return "", err + } + if n <= uint32(len(ret)) { + return UTF16ToString(ret[:n]), nil + } + ret = make([]uint16, n) + } + case REG_BINARY: + return buf, nil + case REG_DWORD_LITTLE_ENDIAN: + return binary.LittleEndian.Uint32(buf), nil + case REG_DWORD_BIG_ENDIAN: + return binary.BigEndian.Uint32(buf), nil + case REG_MULTI_SZ: + bufW := bufToUTF16(buf) + a := []string{} + for i := 0; i < len(bufW); { + j := i + wcslen(bufW[i:]) + if i < j { + a = append(a, UTF16ToString(bufW[i:j])) + } + i = j + 1 + } + runtime.KeepAlive(buf) + return a, nil + case REG_QWORD_LITTLE_ENDIAN: + return binary.LittleEndian.Uint64(buf), nil + default: + return nil, fmt.Errorf("Unsupported registry value type: %v", dataType) + } +} + +// bufToUTF16 function reinterprets []byte buffer as []uint16 +func bufToUTF16(buf []byte) []uint16 { + sl := struct { + addr *uint16 + len int + cap int + }{(*uint16)(unsafe.Pointer(&buf[0])), len(buf) / 2, cap(buf) / 2} + return *(*[]uint16)(unsafe.Pointer(&sl)) +} + +// utf16ToBuf function reinterprets []uint16 as []byte +func utf16ToBuf(buf []uint16) []byte { + sl := struct { + addr *byte + len int + cap int + }{(*byte)(unsafe.Pointer(&buf[0])), len(buf) * 2, cap(buf) * 2} + return *(*[]byte)(unsafe.Pointer(&sl)) +} + +func wcslen(str []uint16) int { + for i := 0; i < len(str); i++ { + if str[i] == 0 { + return i + } + } + return len(str) +} + +// DeviceRegistryProperty method retrieves a specified Plug and Play device property. +func (deviceInfoSet DevInfo) DeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP) (interface{}, error) { + return SetupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property) +} + +//sys setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) = setupapi.SetupDiSetDeviceRegistryPropertyW + +// SetupDiSetDeviceRegistryProperty function sets a Plug and Play device property for a device. +func SetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error { + return setupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &propertyBuffers[0], uint32(len(propertyBuffers))) +} + +// SetDeviceRegistryProperty function sets a Plug and Play device property for a device. +func (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error { + return SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers) +} + +// SetDeviceRegistryPropertyString method sets a Plug and Play device property string for a device. +func (deviceInfoSet DevInfo) SetDeviceRegistryPropertyString(deviceInfoData *DevInfoData, property SPDRP, str string) error { + str16, err := UTF16FromString(str) + if err != nil { + return err + } + err = SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, utf16ToBuf(append(str16, 0))) + runtime.KeepAlive(str16) + return err +} + +//sys setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW + +// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element. +func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) { + params := &DevInstallParams{} + params.size = uint32(unsafe.Sizeof(*params)) + + return params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params) +} + +// DeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (*DevInstallParams, error) { + return SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData) +} + +//sys setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW + +// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device. +func SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) { + reqSize := uint32(1024) + for { + buf := make([]uint16, reqSize) + err := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return "", err + } + return UTF16ToString(buf), nil + } +} + +// DeviceInstanceID method retrieves the instance ID of the device. +func (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) { + return SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData) +} + +// SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element. +//sys SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW + +// ClassInstallParams method retrieves class installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) ClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) error { + return SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize) +} + +//sys SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW + +// SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error { + return SetupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, deviceInstallParams) +} + +// SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element. +//sys SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW + +// SetClassInstallParams method sets or clears class install parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SetClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) error { + return SetupDiSetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize) +} + +//sys setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassNameFromGuidExW + +// SetupDiClassNameFromGuidEx function retrieves the class name associated with a class GUID. The class can be installed on a local or remote computer. +func SetupDiClassNameFromGuidEx(classGUID *GUID, machineName string) (className string, err error) { + var classNameUTF16 [MAX_CLASS_NAME_LEN]uint16 + + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + + err = setupDiClassNameFromGuidEx(classGUID, &classNameUTF16[0], MAX_CLASS_NAME_LEN, nil, machineNameUTF16, 0) + if err != nil { + return + } + + className = UTF16ToString(classNameUTF16[:]) + return +} + +//sys setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassGuidsFromNameExW + +// SetupDiClassGuidsFromNameEx function retrieves the GUIDs associated with the specified class name. This resulting list contains the classes currently installed on a local or remote computer. +func SetupDiClassGuidsFromNameEx(className string, machineName string) ([]GUID, error) { + classNameUTF16, err := UTF16PtrFromString(className) + if err != nil { + return nil, err + } + + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return nil, err + } + } + + reqSize := uint32(4) + for { + buf := make([]GUID, reqSize) + err = setupDiClassGuidsFromNameEx(classNameUTF16, &buf[0], uint32(len(buf)), &reqSize, machineNameUTF16, 0) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + return buf[:reqSize], nil + } +} + +//sys setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiGetSelectedDevice + +// SetupDiGetSelectedDevice function retrieves the selected device information element in a device information set. +func SetupDiGetSelectedDevice(deviceInfoSet DevInfo) (*DevInfoData, error) { + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiGetSelectedDevice(deviceInfoSet, data) +} + +// SelectedDevice method retrieves the selected device information element in a device information set. +func (deviceInfoSet DevInfo) SelectedDevice() (*DevInfoData, error) { + return SetupDiGetSelectedDevice(deviceInfoSet) +} + +// SetupDiSetSelectedDevice function sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard. +//sys SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiSetSelectedDevice + +// SetSelectedDevice method sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard. +func (deviceInfoSet DevInfo) SetSelectedDevice(deviceInfoData *DevInfoData) error { + return SetupDiSetSelectedDevice(deviceInfoSet, deviceInfoData) +} + +//sys setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) = setupapi.SetupUninstallOEMInfW + +// SetupUninstallOEMInf uninstalls the specified driver. +func SetupUninstallOEMInf(infFileName string, flags SUOI) error { + infFileName16, err := UTF16PtrFromString(infFileName) + if err != nil { + return err + } + return setupUninstallOEMInf(infFileName16, flags, 0) +} + +//sys cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) = CfgMgr32.CM_MapCrToWin32Err + +//sys cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_List_SizeW +//sys cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_ListW + +func CM_Get_Device_Interface_List(deviceID string, interfaceClass *GUID, flags uint32) ([]string, error) { + deviceID16, err := UTF16PtrFromString(deviceID) + if err != nil { + return nil, err + } + var buf []uint16 + var buflen uint32 + for { + if ret := cm_Get_Device_Interface_List_Size(&buflen, interfaceClass, deviceID16, flags); ret != CR_SUCCESS { + return nil, ret + } + buf = make([]uint16, buflen) + if ret := cm_Get_Device_Interface_List(interfaceClass, deviceID16, &buf[0], buflen, flags); ret == CR_SUCCESS { + break + } else if ret != CR_BUFFER_SMALL { + return nil, ret + } + } + var interfaces []string + for i := 0; i < len(buf); { + j := i + wcslen(buf[i:]) + if i < j { + interfaces = append(interfaces, UTF16ToString(buf[i:j])) + } + i = j + 1 + } + if interfaces == nil { + return nil, ERROR_NO_SUCH_DEVICE_INTERFACE + } + return interfaces, nil +} + +//sys cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_DevNode_Status + +func CM_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) error { + ret := cm_Get_DevNode_Status(status, problemNumber, devInst, flags) + if ret == CR_SUCCESS { + return nil + } + return ret +} diff --git a/constraint/vendor/golang.org/x/sys/windows/setupapierrors_windows.go b/constraint/vendor/golang.org/x/sys/windows/setupapierrors_windows.go deleted file mode 100644 index 1681810e0..000000000 --- a/constraint/vendor/golang.org/x/sys/windows/setupapierrors_windows.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -import "syscall" - -const ( - ERROR_EXPECTED_SECTION_NAME syscall.Errno = 0x20000000 | 0xC0000000 | 0 - ERROR_BAD_SECTION_NAME_LINE syscall.Errno = 0x20000000 | 0xC0000000 | 1 - ERROR_SECTION_NAME_TOO_LONG syscall.Errno = 0x20000000 | 0xC0000000 | 2 - ERROR_GENERAL_SYNTAX syscall.Errno = 0x20000000 | 0xC0000000 | 3 - ERROR_WRONG_INF_STYLE syscall.Errno = 0x20000000 | 0xC0000000 | 0x100 - ERROR_SECTION_NOT_FOUND syscall.Errno = 0x20000000 | 0xC0000000 | 0x101 - ERROR_LINE_NOT_FOUND syscall.Errno = 0x20000000 | 0xC0000000 | 0x102 - ERROR_NO_BACKUP syscall.Errno = 0x20000000 | 0xC0000000 | 0x103 - ERROR_NO_ASSOCIATED_CLASS syscall.Errno = 0x20000000 | 0xC0000000 | 0x200 - ERROR_CLASS_MISMATCH syscall.Errno = 0x20000000 | 0xC0000000 | 0x201 - ERROR_DUPLICATE_FOUND syscall.Errno = 0x20000000 | 0xC0000000 | 0x202 - ERROR_NO_DRIVER_SELECTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x203 - ERROR_KEY_DOES_NOT_EXIST syscall.Errno = 0x20000000 | 0xC0000000 | 0x204 - ERROR_INVALID_DEVINST_NAME syscall.Errno = 0x20000000 | 0xC0000000 | 0x205 - ERROR_INVALID_CLASS syscall.Errno = 0x20000000 | 0xC0000000 | 0x206 - ERROR_DEVINST_ALREADY_EXISTS syscall.Errno = 0x20000000 | 0xC0000000 | 0x207 - ERROR_DEVINFO_NOT_REGISTERED syscall.Errno = 0x20000000 | 0xC0000000 | 0x208 - ERROR_INVALID_REG_PROPERTY syscall.Errno = 0x20000000 | 0xC0000000 | 0x209 - ERROR_NO_INF syscall.Errno = 0x20000000 | 0xC0000000 | 0x20A - ERROR_NO_SUCH_DEVINST syscall.Errno = 0x20000000 | 0xC0000000 | 0x20B - ERROR_CANT_LOAD_CLASS_ICON syscall.Errno = 0x20000000 | 0xC0000000 | 0x20C - ERROR_INVALID_CLASS_INSTALLER syscall.Errno = 0x20000000 | 0xC0000000 | 0x20D - ERROR_DI_DO_DEFAULT syscall.Errno = 0x20000000 | 0xC0000000 | 0x20E - ERROR_DI_NOFILECOPY syscall.Errno = 0x20000000 | 0xC0000000 | 0x20F - ERROR_INVALID_HWPROFILE syscall.Errno = 0x20000000 | 0xC0000000 | 0x210 - ERROR_NO_DEVICE_SELECTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x211 - ERROR_DEVINFO_LIST_LOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x212 - ERROR_DEVINFO_DATA_LOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x213 - ERROR_DI_BAD_PATH syscall.Errno = 0x20000000 | 0xC0000000 | 0x214 - ERROR_NO_CLASSINSTALL_PARAMS syscall.Errno = 0x20000000 | 0xC0000000 | 0x215 - ERROR_FILEQUEUE_LOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x216 - ERROR_BAD_SERVICE_INSTALLSECT syscall.Errno = 0x20000000 | 0xC0000000 | 0x217 - ERROR_NO_CLASS_DRIVER_LIST syscall.Errno = 0x20000000 | 0xC0000000 | 0x218 - ERROR_NO_ASSOCIATED_SERVICE syscall.Errno = 0x20000000 | 0xC0000000 | 0x219 - ERROR_NO_DEFAULT_DEVICE_INTERFACE syscall.Errno = 0x20000000 | 0xC0000000 | 0x21A - ERROR_DEVICE_INTERFACE_ACTIVE syscall.Errno = 0x20000000 | 0xC0000000 | 0x21B - ERROR_DEVICE_INTERFACE_REMOVED syscall.Errno = 0x20000000 | 0xC0000000 | 0x21C - ERROR_BAD_INTERFACE_INSTALLSECT syscall.Errno = 0x20000000 | 0xC0000000 | 0x21D - ERROR_NO_SUCH_INTERFACE_CLASS syscall.Errno = 0x20000000 | 0xC0000000 | 0x21E - ERROR_INVALID_REFERENCE_STRING syscall.Errno = 0x20000000 | 0xC0000000 | 0x21F - ERROR_INVALID_MACHINENAME syscall.Errno = 0x20000000 | 0xC0000000 | 0x220 - ERROR_REMOTE_COMM_FAILURE syscall.Errno = 0x20000000 | 0xC0000000 | 0x221 - ERROR_MACHINE_UNAVAILABLE syscall.Errno = 0x20000000 | 0xC0000000 | 0x222 - ERROR_NO_CONFIGMGR_SERVICES syscall.Errno = 0x20000000 | 0xC0000000 | 0x223 - ERROR_INVALID_PROPPAGE_PROVIDER syscall.Errno = 0x20000000 | 0xC0000000 | 0x224 - ERROR_NO_SUCH_DEVICE_INTERFACE syscall.Errno = 0x20000000 | 0xC0000000 | 0x225 - ERROR_DI_POSTPROCESSING_REQUIRED syscall.Errno = 0x20000000 | 0xC0000000 | 0x226 - ERROR_INVALID_COINSTALLER syscall.Errno = 0x20000000 | 0xC0000000 | 0x227 - ERROR_NO_COMPAT_DRIVERS syscall.Errno = 0x20000000 | 0xC0000000 | 0x228 - ERROR_NO_DEVICE_ICON syscall.Errno = 0x20000000 | 0xC0000000 | 0x229 - ERROR_INVALID_INF_LOGCONFIG syscall.Errno = 0x20000000 | 0xC0000000 | 0x22A - ERROR_DI_DONT_INSTALL syscall.Errno = 0x20000000 | 0xC0000000 | 0x22B - ERROR_INVALID_FILTER_DRIVER syscall.Errno = 0x20000000 | 0xC0000000 | 0x22C - ERROR_NON_WINDOWS_NT_DRIVER syscall.Errno = 0x20000000 | 0xC0000000 | 0x22D - ERROR_NON_WINDOWS_DRIVER syscall.Errno = 0x20000000 | 0xC0000000 | 0x22E - ERROR_NO_CATALOG_FOR_OEM_INF syscall.Errno = 0x20000000 | 0xC0000000 | 0x22F - ERROR_DEVINSTALL_QUEUE_NONNATIVE syscall.Errno = 0x20000000 | 0xC0000000 | 0x230 - ERROR_NOT_DISABLEABLE syscall.Errno = 0x20000000 | 0xC0000000 | 0x231 - ERROR_CANT_REMOVE_DEVINST syscall.Errno = 0x20000000 | 0xC0000000 | 0x232 - ERROR_INVALID_TARGET syscall.Errno = 0x20000000 | 0xC0000000 | 0x233 - ERROR_DRIVER_NONNATIVE syscall.Errno = 0x20000000 | 0xC0000000 | 0x234 - ERROR_IN_WOW64 syscall.Errno = 0x20000000 | 0xC0000000 | 0x235 - ERROR_SET_SYSTEM_RESTORE_POINT syscall.Errno = 0x20000000 | 0xC0000000 | 0x236 - ERROR_SCE_DISABLED syscall.Errno = 0x20000000 | 0xC0000000 | 0x238 - ERROR_UNKNOWN_EXCEPTION syscall.Errno = 0x20000000 | 0xC0000000 | 0x239 - ERROR_PNP_REGISTRY_ERROR syscall.Errno = 0x20000000 | 0xC0000000 | 0x23A - ERROR_REMOTE_REQUEST_UNSUPPORTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x23B - ERROR_NOT_AN_INSTALLED_OEM_INF syscall.Errno = 0x20000000 | 0xC0000000 | 0x23C - ERROR_INF_IN_USE_BY_DEVICES syscall.Errno = 0x20000000 | 0xC0000000 | 0x23D - ERROR_DI_FUNCTION_OBSOLETE syscall.Errno = 0x20000000 | 0xC0000000 | 0x23E - ERROR_NO_AUTHENTICODE_CATALOG syscall.Errno = 0x20000000 | 0xC0000000 | 0x23F - ERROR_AUTHENTICODE_DISALLOWED syscall.Errno = 0x20000000 | 0xC0000000 | 0x240 - ERROR_AUTHENTICODE_TRUSTED_PUBLISHER syscall.Errno = 0x20000000 | 0xC0000000 | 0x241 - ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED syscall.Errno = 0x20000000 | 0xC0000000 | 0x242 - ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED syscall.Errno = 0x20000000 | 0xC0000000 | 0x243 - ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH syscall.Errno = 0x20000000 | 0xC0000000 | 0x244 - ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE syscall.Errno = 0x20000000 | 0xC0000000 | 0x245 - ERROR_DEVICE_INSTALLER_NOT_READY syscall.Errno = 0x20000000 | 0xC0000000 | 0x246 - ERROR_DRIVER_STORE_ADD_FAILED syscall.Errno = 0x20000000 | 0xC0000000 | 0x247 - ERROR_DEVICE_INSTALL_BLOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x248 - ERROR_DRIVER_INSTALL_BLOCKED syscall.Errno = 0x20000000 | 0xC0000000 | 0x249 - ERROR_WRONG_INF_TYPE syscall.Errno = 0x20000000 | 0xC0000000 | 0x24A - ERROR_FILE_HASH_NOT_IN_CATALOG syscall.Errno = 0x20000000 | 0xC0000000 | 0x24B - ERROR_DRIVER_STORE_DELETE_FAILED syscall.Errno = 0x20000000 | 0xC0000000 | 0x24C - ERROR_UNRECOVERABLE_STACK_OVERFLOW syscall.Errno = 0x20000000 | 0xC0000000 | 0x300 - EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW syscall.Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW - ERROR_NO_DEFAULT_INTERFACE_DEVICE syscall.Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE - ERROR_INTERFACE_DEVICE_ACTIVE syscall.Errno = ERROR_DEVICE_INTERFACE_ACTIVE - ERROR_INTERFACE_DEVICE_REMOVED syscall.Errno = ERROR_DEVICE_INTERFACE_REMOVED - ERROR_NO_SUCH_INTERFACE_DEVICE syscall.Errno = ERROR_NO_SUCH_DEVICE_INTERFACE -) diff --git a/constraint/vendor/golang.org/x/sys/windows/str.go b/constraint/vendor/golang.org/x/sys/windows/str.go index 917cc2aae..4fc01434e 100644 --- a/constraint/vendor/golang.org/x/sys/windows/str.go +++ b/constraint/vendor/golang.org/x/sys/windows/str.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build windows // +build windows package windows diff --git a/constraint/vendor/golang.org/x/sys/windows/syscall.go b/constraint/vendor/golang.org/x/sys/windows/syscall.go index 6122f557a..72074d582 100644 --- a/constraint/vendor/golang.org/x/sys/windows/syscall.go +++ b/constraint/vendor/golang.org/x/sys/windows/syscall.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build windows // +build windows // Package windows contains an interface to the low-level operating system diff --git a/constraint/vendor/golang.org/x/sys/windows/syscall_windows.go b/constraint/vendor/golang.org/x/sys/windows/syscall_windows.go index 1215b2ae2..7702bbb8d 100644 --- a/constraint/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/constraint/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -248,6 +248,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW //sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW //sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW +//sys ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW //sys CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock //sys DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock //sys getTickCount64() (ms uint64) = kernel32.GetTickCount64 @@ -274,6 +275,11 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc //sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree //sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect +//sys VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx +//sys VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery +//sys VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx +//sys ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory +//sys WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory //sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile //sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW //sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW @@ -396,8 +402,18 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys LoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource //sys LockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource +// Version APIs +//sys GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW +//sys GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW +//sys VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW + // Process Status API (PSAPI) //sys EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses +//sys EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules +//sys EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx +//sys GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation +//sys GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW +//sys GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW // NT Native APIs //sys rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb @@ -408,11 +424,16 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString //sys NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile //sys NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile +//sys NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile //sys RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus //sys RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus //sys RtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl //sys NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess //sys NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess +//sys NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation +//sys NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation +//sys RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable +//sys RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable // syscall interface implementation for other packages @@ -873,9 +894,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil } @@ -895,9 +914,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } + sa.raw.Addr = sa.Addr return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil } @@ -970,9 +987,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil case AF_INET6: @@ -981,9 +996,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } + sa.Addr = pp.Addr return sa, nil } return nil, syscall.EAFNOSUPPORT diff --git a/constraint/vendor/golang.org/x/sys/windows/types_windows.go b/constraint/vendor/golang.org/x/sys/windows/types_windows.go index 1f733398e..286dd1eab 100644 --- a/constraint/vendor/golang.org/x/sys/windows/types_windows.go +++ b/constraint/vendor/golang.org/x/sys/windows/types_windows.go @@ -66,9 +66,21 @@ var signals = [...]string{ } const ( - FILE_LIST_DIRECTORY = 0x00000001 - FILE_APPEND_DATA = 0x00000004 + FILE_READ_DATA = 0x00000001 + FILE_READ_ATTRIBUTES = 0x00000080 + FILE_READ_EA = 0x00000008 + FILE_WRITE_DATA = 0x00000002 FILE_WRITE_ATTRIBUTES = 0x00000100 + FILE_WRITE_EA = 0x00000010 + FILE_APPEND_DATA = 0x00000004 + FILE_EXECUTE = 0x00000020 + + FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE + FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE + FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE + + FILE_LIST_DIRECTORY = 0x00000001 + FILE_TRAVERSE = 0x00000020 FILE_SHARE_READ = 0x00000001 FILE_SHARE_WRITE = 0x00000002 @@ -242,6 +254,14 @@ const ( TH32CS_INHERIT = 0x80000000 ) +const ( + // flags for EnumProcessModulesEx + LIST_MODULES_32BIT = 0x01 + LIST_MODULES_64BIT = 0x02 + LIST_MODULES_ALL = 0x03 + LIST_MODULES_DEFAULT = 0x00 +) + const ( // filters for ReadDirectoryChangesW and FindFirstChangeNotificationW FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 @@ -680,7 +700,7 @@ const ( WTD_CHOICE_CERT = 5 WTD_STATEACTION_IGNORE = 0x00000000 - WTD_STATEACTION_VERIFY = 0x00000010 + WTD_STATEACTION_VERIFY = 0x00000001 WTD_STATEACTION_CLOSE = 0x00000002 WTD_STATEACTION_AUTO_CACHE = 0x00000003 WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004 @@ -1781,7 +1801,53 @@ type reparseDataBuffer struct { } const ( - FSCTL_GET_REPARSE_POINT = 0x900A8 + FSCTL_CREATE_OR_GET_OBJECT_ID = 0x0900C0 + FSCTL_DELETE_OBJECT_ID = 0x0900A0 + FSCTL_DELETE_REPARSE_POINT = 0x0900AC + FSCTL_DUPLICATE_EXTENTS_TO_FILE = 0x098344 + FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX = 0x0983E8 + FSCTL_FILESYSTEM_GET_STATISTICS = 0x090060 + FSCTL_FILE_LEVEL_TRIM = 0x098208 + FSCTL_FIND_FILES_BY_SID = 0x09008F + FSCTL_GET_COMPRESSION = 0x09003C + FSCTL_GET_INTEGRITY_INFORMATION = 0x09027C + FSCTL_GET_NTFS_VOLUME_DATA = 0x090064 + FSCTL_GET_REFS_VOLUME_DATA = 0x0902D8 + FSCTL_GET_OBJECT_ID = 0x09009C + FSCTL_GET_REPARSE_POINT = 0x0900A8 + FSCTL_GET_RETRIEVAL_POINTER_COUNT = 0x09042B + FSCTL_GET_RETRIEVAL_POINTERS = 0x090073 + FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3 + FSCTL_IS_PATHNAME_VALID = 0x09002C + FSCTL_LMR_SET_LINK_TRACKING_INFORMATION = 0x1400EC + FSCTL_MARK_HANDLE = 0x0900FC + FSCTL_OFFLOAD_READ = 0x094264 + FSCTL_OFFLOAD_WRITE = 0x098268 + FSCTL_PIPE_PEEK = 0x11400C + FSCTL_PIPE_TRANSCEIVE = 0x11C017 + FSCTL_PIPE_WAIT = 0x110018 + FSCTL_QUERY_ALLOCATED_RANGES = 0x0940CF + FSCTL_QUERY_FAT_BPB = 0x090058 + FSCTL_QUERY_FILE_REGIONS = 0x090284 + FSCTL_QUERY_ON_DISK_VOLUME_INFO = 0x09013C + FSCTL_QUERY_SPARING_INFO = 0x090138 + FSCTL_READ_FILE_USN_DATA = 0x0900EB + FSCTL_RECALL_FILE = 0x090117 + FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT = 0x090440 + FSCTL_SET_COMPRESSION = 0x09C040 + FSCTL_SET_DEFECT_MANAGEMENT = 0x098134 + FSCTL_SET_ENCRYPTION = 0x0900D7 + FSCTL_SET_INTEGRITY_INFORMATION = 0x09C280 + FSCTL_SET_INTEGRITY_INFORMATION_EX = 0x090380 + FSCTL_SET_OBJECT_ID = 0x090098 + FSCTL_SET_OBJECT_ID_EXTENDED = 0x0900BC + FSCTL_SET_REPARSE_POINT = 0x0900A4 + FSCTL_SET_SPARSE = 0x0900C4 + FSCTL_SET_ZERO_DATA = 0x0980C8 + FSCTL_SET_ZERO_ON_DEALLOCATION = 0x090194 + FSCTL_SIS_COPYFILE = 0x090100 + FSCTL_WRITE_USN_CLOSE_RECORD = 0x0900EF + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 IO_REPARSE_TAG_SYMLINK = 0xA000000C @@ -2300,6 +2366,12 @@ type LIST_ENTRY struct { Blink *LIST_ENTRY } +type RUNTIME_FUNCTION struct { + BeginAddress uint32 + EndAddress uint32 + UnwindData uint32 +} + type LDR_DATA_TABLE_ENTRY struct { reserved1 [2]uintptr InMemoryOrderLinks LIST_ENTRY @@ -2490,6 +2562,60 @@ const ( FILE_PIPE_SERVER_END = 0x00000001 ) +const ( + // FileInformationClass for NtSetInformationFile + FileBasicInformation = 4 + FileRenameInformation = 10 + FileDispositionInformation = 13 + FilePositionInformation = 14 + FileEndOfFileInformation = 20 + FileValidDataLengthInformation = 39 + FileShortNameInformation = 40 + FileIoPriorityHintInformation = 43 + FileReplaceCompletionInformation = 61 + FileDispositionInformationEx = 64 + FileCaseSensitiveInformation = 71 + FileLinkInformation = 72 + FileCaseSensitiveInformationForceAccessCheck = 75 + FileKnownFolderInformation = 76 + + // Flags for FILE_RENAME_INFORMATION + FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001 + FILE_RENAME_POSIX_SEMANTICS = 0x00000002 + FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE = 0x00000004 + FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008 + FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE = 0x00000010 + FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE = 0x00000020 + FILE_RENAME_PRESERVE_AVAILABLE_SPACE = 0x00000030 + FILE_RENAME_IGNORE_READONLY_ATTRIBUTE = 0x00000040 + FILE_RENAME_FORCE_RESIZE_TARGET_SR = 0x00000080 + FILE_RENAME_FORCE_RESIZE_SOURCE_SR = 0x00000100 + FILE_RENAME_FORCE_RESIZE_SR = 0x00000180 + + // Flags for FILE_DISPOSITION_INFORMATION_EX + FILE_DISPOSITION_DO_NOT_DELETE = 0x00000000 + FILE_DISPOSITION_DELETE = 0x00000001 + FILE_DISPOSITION_POSIX_SEMANTICS = 0x00000002 + FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004 + FILE_DISPOSITION_ON_CLOSE = 0x00000008 + FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010 + + // Flags for FILE_CASE_SENSITIVE_INFORMATION + FILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001 + + // Flags for FILE_LINK_INFORMATION + FILE_LINK_REPLACE_IF_EXISTS = 0x00000001 + FILE_LINK_POSIX_SEMANTICS = 0x00000002 + FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008 + FILE_LINK_NO_INCREASE_AVAILABLE_SPACE = 0x00000010 + FILE_LINK_NO_DECREASE_AVAILABLE_SPACE = 0x00000020 + FILE_LINK_PRESERVE_AVAILABLE_SPACE = 0x00000030 + FILE_LINK_IGNORE_READONLY_ATTRIBUTE = 0x00000040 + FILE_LINK_FORCE_RESIZE_TARGET_SR = 0x00000080 + FILE_LINK_FORCE_RESIZE_SOURCE_SR = 0x00000100 + FILE_LINK_FORCE_RESIZE_SR = 0x00000180 +) + // ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess. const ( ProcessBasicInformation = iota @@ -2606,6 +2732,203 @@ type PROCESS_BASIC_INFORMATION struct { InheritedFromUniqueProcessId uintptr } +// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation +const ( + SystemBasicInformation = iota + SystemProcessorInformation + SystemPerformanceInformation + SystemTimeOfDayInformation + SystemPathInformation + SystemProcessInformation + SystemCallCountInformation + SystemDeviceInformation + SystemProcessorPerformanceInformation + SystemFlagsInformation + SystemCallTimeInformation + SystemModuleInformation + SystemLocksInformation + SystemStackTraceInformation + SystemPagedPoolInformation + SystemNonPagedPoolInformation + SystemHandleInformation + SystemObjectInformation + SystemPageFileInformation + SystemVdmInstemulInformation + SystemVdmBopInformation + SystemFileCacheInformation + SystemPoolTagInformation + SystemInterruptInformation + SystemDpcBehaviorInformation + SystemFullMemoryInformation + SystemLoadGdiDriverInformation + SystemUnloadGdiDriverInformation + SystemTimeAdjustmentInformation + SystemSummaryMemoryInformation + SystemMirrorMemoryInformation + SystemPerformanceTraceInformation + systemObsolete0 + SystemExceptionInformation + SystemCrashDumpStateInformation + SystemKernelDebuggerInformation + SystemContextSwitchInformation + SystemRegistryQuotaInformation + SystemExtendServiceTableInformation + SystemPrioritySeperation + SystemVerifierAddDriverInformation + SystemVerifierRemoveDriverInformation + SystemProcessorIdleInformation + SystemLegacyDriverInformation + SystemCurrentTimeZoneInformation + SystemLookasideInformation + SystemTimeSlipNotification + SystemSessionCreate + SystemSessionDetach + SystemSessionInformation + SystemRangeStartInformation + SystemVerifierInformation + SystemVerifierThunkExtend + SystemSessionProcessInformation + SystemLoadGdiDriverInSystemSpace + SystemNumaProcessorMap + SystemPrefetcherInformation + SystemExtendedProcessInformation + SystemRecommendedSharedDataAlignment + SystemComPlusPackage + SystemNumaAvailableMemory + SystemProcessorPowerInformation + SystemEmulationBasicInformation + SystemEmulationProcessorInformation + SystemExtendedHandleInformation + SystemLostDelayedWriteInformation + SystemBigPoolInformation + SystemSessionPoolTagInformation + SystemSessionMappedViewInformation + SystemHotpatchInformation + SystemObjectSecurityMode + SystemWatchdogTimerHandler + SystemWatchdogTimerInformation + SystemLogicalProcessorInformation + SystemWow64SharedInformationObsolete + SystemRegisterFirmwareTableInformationHandler + SystemFirmwareTableInformation + SystemModuleInformationEx + SystemVerifierTriageInformation + SystemSuperfetchInformation + SystemMemoryListInformation + SystemFileCacheInformationEx + SystemThreadPriorityClientIdInformation + SystemProcessorIdleCycleTimeInformation + SystemVerifierCancellationInformation + SystemProcessorPowerInformationEx + SystemRefTraceInformation + SystemSpecialPoolInformation + SystemProcessIdInformation + SystemErrorPortInformation + SystemBootEnvironmentInformation + SystemHypervisorInformation + SystemVerifierInformationEx + SystemTimeZoneInformation + SystemImageFileExecutionOptionsInformation + SystemCoverageInformation + SystemPrefetchPatchInformation + SystemVerifierFaultsInformation + SystemSystemPartitionInformation + SystemSystemDiskInformation + SystemProcessorPerformanceDistribution + SystemNumaProximityNodeInformation + SystemDynamicTimeZoneInformation + SystemCodeIntegrityInformation + SystemProcessorMicrocodeUpdateInformation + SystemProcessorBrandString + SystemVirtualAddressInformation + SystemLogicalProcessorAndGroupInformation + SystemProcessorCycleTimeInformation + SystemStoreInformation + SystemRegistryAppendString + SystemAitSamplingValue + SystemVhdBootInformation + SystemCpuQuotaInformation + SystemNativeBasicInformation + systemSpare1 + SystemLowPriorityIoInformation + SystemTpmBootEntropyInformation + SystemVerifierCountersInformation + SystemPagedPoolInformationEx + SystemSystemPtesInformationEx + SystemNodeDistanceInformation + SystemAcpiAuditInformation + SystemBasicPerformanceInformation + SystemQueryPerformanceCounterInformation + SystemSessionBigPoolInformation + SystemBootGraphicsInformation + SystemScrubPhysicalMemoryInformation + SystemBadPageInformation + SystemProcessorProfileControlArea + SystemCombinePhysicalMemoryInformation + SystemEntropyInterruptTimingCallback + SystemConsoleInformation + SystemPlatformBinaryInformation + SystemThrottleNotificationInformation + SystemHypervisorProcessorCountInformation + SystemDeviceDataInformation + SystemDeviceDataEnumerationInformation + SystemMemoryTopologyInformation + SystemMemoryChannelInformation + SystemBootLogoInformation + SystemProcessorPerformanceInformationEx + systemSpare0 + SystemSecureBootPolicyInformation + SystemPageFileInformationEx + SystemSecureBootInformation + SystemEntropyInterruptTimingRawInformation + SystemPortableWorkspaceEfiLauncherInformation + SystemFullProcessInformation + SystemKernelDebuggerInformationEx + SystemBootMetadataInformation + SystemSoftRebootInformation + SystemElamCertificateInformation + SystemOfflineDumpConfigInformation + SystemProcessorFeaturesInformation + SystemRegistryReconciliationInformation + SystemEdidInformation + SystemManufacturingInformation + SystemEnergyEstimationConfigInformation + SystemHypervisorDetailInformation + SystemProcessorCycleStatsInformation + SystemVmGenerationCountInformation + SystemTrustedPlatformModuleInformation + SystemKernelDebuggerFlags + SystemCodeIntegrityPolicyInformation + SystemIsolatedUserModeInformation + SystemHardwareSecurityTestInterfaceResultsInformation + SystemSingleModuleInformation + SystemAllowedCpuSetsInformation + SystemDmaProtectionInformation + SystemInterruptCpuSetsInformation + SystemSecureBootPolicyFullInformation + SystemCodeIntegrityPolicyFullInformation + SystemAffinitizedInterruptProcessorInformation + SystemRootSiloInformation +) + +type RTL_PROCESS_MODULE_INFORMATION struct { + Section Handle + MappedBase uintptr + ImageBase uintptr + ImageSize uint32 + Flags uint32 + LoadOrderIndex uint16 + InitOrderIndex uint16 + LoadCount uint16 + OffsetToFileName uint16 + FullPathName [256]byte +} + +type RTL_PROCESS_MODULES struct { + NumberOfModules uint32 + Modules [1]RTL_PROCESS_MODULE_INFORMATION +} + // Constants for LocalAlloc flags. const ( LMEM_FIXED = 0x0 @@ -2700,6 +3023,22 @@ var ( RT_MANIFEST ResourceID = 24 ) +type VS_FIXEDFILEINFO struct { + Signature uint32 + StrucVersion uint32 + FileVersionMS uint32 + FileVersionLS uint32 + ProductVersionMS uint32 + ProductVersionLS uint32 + FileFlagsMask uint32 + FileFlags uint32 + FileOS uint32 + FileType uint32 + FileSubtype uint32 + FileDateMS uint32 + FileDateLS uint32 +} + type COAUTHIDENTITY struct { User *uint16 UserLength uint32 @@ -2773,3 +3112,9 @@ const ( // Flag for QueryFullProcessImageName. const PROCESS_NAME_NATIVE = 1 + +type ModuleInfo struct { + BaseOfDll uintptr + SizeOfImage uint32 + EntryPoint uintptr +} diff --git a/constraint/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/constraint/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 148de0ffb..bf0dd8fca 100644 --- a/constraint/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/constraint/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -36,6 +36,7 @@ func errnoErr(e syscall.Errno) error { } var ( + modCfgMgr32 = NewLazySystemDLL("CfgMgr32.dll") modadvapi32 = NewLazySystemDLL("advapi32.dll") modcrypt32 = NewLazySystemDLL("crypt32.dll") moddnsapi = NewLazySystemDLL("dnsapi.dll") @@ -48,13 +49,19 @@ var ( modpsapi = NewLazySystemDLL("psapi.dll") modsechost = NewLazySystemDLL("sechost.dll") modsecur32 = NewLazySystemDLL("secur32.dll") + modsetupapi = NewLazySystemDLL("setupapi.dll") modshell32 = NewLazySystemDLL("shell32.dll") moduser32 = NewLazySystemDLL("user32.dll") moduserenv = NewLazySystemDLL("userenv.dll") + modversion = NewLazySystemDLL("version.dll") modwintrust = NewLazySystemDLL("wintrust.dll") modws2_32 = NewLazySystemDLL("ws2_32.dll") modwtsapi32 = NewLazySystemDLL("wtsapi32.dll") + procCM_Get_DevNode_Status = modCfgMgr32.NewProc("CM_Get_DevNode_Status") + procCM_Get_Device_Interface_ListW = modCfgMgr32.NewProc("CM_Get_Device_Interface_ListW") + procCM_Get_Device_Interface_List_SizeW = modCfgMgr32.NewProc("CM_Get_Device_Interface_List_SizeW") + procCM_MapCrToWin32Err = modCfgMgr32.NewProc("CM_MapCrToWin32Err") procAdjustTokenGroups = modadvapi32.NewProc("AdjustTokenGroups") procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") @@ -114,6 +121,7 @@ var ( procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") + procQueryServiceDynamicInformation = modadvapi32.NewProc("QueryServiceDynamicInformation") procQueryServiceLockStatusW = modadvapi32.NewProc("QueryServiceLockStatusW") procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus") procQueryServiceStatusEx = modadvapi32.NewProc("QueryServiceStatusEx") @@ -124,6 +132,7 @@ var ( procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW") + procRegisterServiceCtrlHandlerExW = modadvapi32.NewProc("RegisterServiceCtrlHandlerExW") procReportEventW = modadvapi32.NewProc("ReportEventW") procRevertToSelf = modadvapi32.NewProc("RevertToSelf") procSetEntriesInAclW = modadvapi32.NewProc("SetEntriesInAclW") @@ -196,6 +205,7 @@ var ( procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") procExitProcess = modkernel32.NewProc("ExitProcess") + procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") procFindClose = modkernel32.NewProc("FindClose") procFindCloseChangeNotification = modkernel32.NewProc("FindCloseChangeNotification") procFindFirstChangeNotificationW = modkernel32.NewProc("FindFirstChangeNotificationW") @@ -303,6 +313,7 @@ var ( procReadConsoleW = modkernel32.NewProc("ReadConsoleW") procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") procReadFile = modkernel32.NewProc("ReadFile") + procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory") procReleaseMutex = modkernel32.NewProc("ReleaseMutex") procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") procResetEvent = modkernel32.NewProc("ResetEvent") @@ -345,11 +356,16 @@ var ( procVirtualFree = modkernel32.NewProc("VirtualFree") procVirtualLock = modkernel32.NewProc("VirtualLock") procVirtualProtect = modkernel32.NewProc("VirtualProtect") + procVirtualProtectEx = modkernel32.NewProc("VirtualProtectEx") + procVirtualQuery = modkernel32.NewProc("VirtualQuery") + procVirtualQueryEx = modkernel32.NewProc("VirtualQueryEx") procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId") procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects") procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") procWriteFile = modkernel32.NewProc("WriteFile") + procWriteProcessMemory = modkernel32.NewProc("WriteProcessMemory") procAcceptEx = modmswsock.NewProc("AcceptEx") procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs") procTransmitFile = modmswsock.NewProc("TransmitFile") @@ -359,8 +375,13 @@ var ( procNtCreateFile = modntdll.NewProc("NtCreateFile") procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess") + procNtQuerySystemInformation = modntdll.NewProc("NtQuerySystemInformation") + procNtSetInformationFile = modntdll.NewProc("NtSetInformationFile") procNtSetInformationProcess = modntdll.NewProc("NtSetInformationProcess") + procNtSetSystemInformation = modntdll.NewProc("NtSetSystemInformation") + procRtlAddFunctionTable = modntdll.NewProc("RtlAddFunctionTable") procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") + procRtlDeleteFunctionTable = modntdll.NewProc("RtlDeleteFunctionTable") procRtlDosPathNameToNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToNtPathName_U_WithStatus") procRtlDosPathNameToRelativeNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToRelativeNtPathName_U_WithStatus") procRtlGetCurrentPeb = modntdll.NewProc("RtlGetCurrentPeb") @@ -376,11 +397,44 @@ var ( procCoTaskMemFree = modole32.NewProc("CoTaskMemFree") procCoUninitialize = modole32.NewProc("CoUninitialize") procStringFromGUID2 = modole32.NewProc("StringFromGUID2") + procEnumProcessModules = modpsapi.NewProc("EnumProcessModules") + procEnumProcessModulesEx = modpsapi.NewProc("EnumProcessModulesEx") procEnumProcesses = modpsapi.NewProc("EnumProcesses") + procGetModuleBaseNameW = modpsapi.NewProc("GetModuleBaseNameW") + procGetModuleFileNameExW = modpsapi.NewProc("GetModuleFileNameExW") + procGetModuleInformation = modpsapi.NewProc("GetModuleInformation") procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications") procUnsubscribeServiceChangeNotifications = modsechost.NewProc("UnsubscribeServiceChangeNotifications") procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") procTranslateNameW = modsecur32.NewProc("TranslateNameW") + procSetupDiBuildDriverInfoList = modsetupapi.NewProc("SetupDiBuildDriverInfoList") + procSetupDiCallClassInstaller = modsetupapi.NewProc("SetupDiCallClassInstaller") + procSetupDiCancelDriverInfoSearch = modsetupapi.NewProc("SetupDiCancelDriverInfoSearch") + procSetupDiClassGuidsFromNameExW = modsetupapi.NewProc("SetupDiClassGuidsFromNameExW") + procSetupDiClassNameFromGuidExW = modsetupapi.NewProc("SetupDiClassNameFromGuidExW") + procSetupDiCreateDeviceInfoListExW = modsetupapi.NewProc("SetupDiCreateDeviceInfoListExW") + procSetupDiCreateDeviceInfoW = modsetupapi.NewProc("SetupDiCreateDeviceInfoW") + procSetupDiDestroyDeviceInfoList = modsetupapi.NewProc("SetupDiDestroyDeviceInfoList") + procSetupDiDestroyDriverInfoList = modsetupapi.NewProc("SetupDiDestroyDriverInfoList") + procSetupDiEnumDeviceInfo = modsetupapi.NewProc("SetupDiEnumDeviceInfo") + procSetupDiEnumDriverInfoW = modsetupapi.NewProc("SetupDiEnumDriverInfoW") + procSetupDiGetClassDevsExW = modsetupapi.NewProc("SetupDiGetClassDevsExW") + procSetupDiGetClassInstallParamsW = modsetupapi.NewProc("SetupDiGetClassInstallParamsW") + procSetupDiGetDeviceInfoListDetailW = modsetupapi.NewProc("SetupDiGetDeviceInfoListDetailW") + procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW") + procSetupDiGetDeviceInstanceIdW = modsetupapi.NewProc("SetupDiGetDeviceInstanceIdW") + procSetupDiGetDevicePropertyW = modsetupapi.NewProc("SetupDiGetDevicePropertyW") + procSetupDiGetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiGetDeviceRegistryPropertyW") + procSetupDiGetDriverInfoDetailW = modsetupapi.NewProc("SetupDiGetDriverInfoDetailW") + procSetupDiGetSelectedDevice = modsetupapi.NewProc("SetupDiGetSelectedDevice") + procSetupDiGetSelectedDriverW = modsetupapi.NewProc("SetupDiGetSelectedDriverW") + procSetupDiOpenDevRegKey = modsetupapi.NewProc("SetupDiOpenDevRegKey") + procSetupDiSetClassInstallParamsW = modsetupapi.NewProc("SetupDiSetClassInstallParamsW") + procSetupDiSetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW") + procSetupDiSetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiSetDeviceRegistryPropertyW") + procSetupDiSetSelectedDevice = modsetupapi.NewProc("SetupDiSetSelectedDevice") + procSetupDiSetSelectedDriverW = modsetupapi.NewProc("SetupDiSetSelectedDriverW") + procSetupUninstallOEMInfW = modsetupapi.NewProc("SetupUninstallOEMInfW") procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath") procShellExecuteW = modshell32.NewProc("ShellExecuteW") @@ -391,6 +445,9 @@ var ( procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") + procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") + procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") + procVerQueryValueW = modversion.NewProc("VerQueryValueW") procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") @@ -425,6 +482,30 @@ var ( procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken") ) +func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0) + ret = CONFIGRET(r0) + return +} + +func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0) + ret = CONFIGRET(r0) + return +} + +func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0) + ret = CONFIGRET(r0) + return +} + +func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) { + r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0) + ret = Errno(r0) + return +} + func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) { var _p0 uint32 if resetToDefault { @@ -955,6 +1036,18 @@ func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, buf return } +func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) { + err = procQueryServiceDynamicInformation.Find() + if err != nil { + return + } + r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) { r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) if r1 == 0 { @@ -1044,6 +1137,15 @@ func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Hand return } +func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) if r1 == 0 { @@ -1673,6 +1775,15 @@ func ExitProcess(exitcode uint32) { return } +func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + func FindClose(handle Handle) (err error) { r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) if r1 == 0 { @@ -2630,6 +2741,14 @@ func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) ( return } +func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func ReleaseMutex(mutex Handle) (err error) { r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0) if r1 == 0 { @@ -2984,6 +3103,30 @@ func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect return } +func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func VirtualUnlock(addr uintptr, length uintptr) (err error) { r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) if r1 == 0 { @@ -2992,6 +3135,12 @@ func VirtualUnlock(addr uintptr, length uintptr) (err error) { return } +func WTSGetActiveConsoleSessionId() (sessionID uint32) { + r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0) + sessionID = uint32(r0) + return +} + func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) { var _p0 uint32 if waitAll { @@ -3034,6 +3183,14 @@ func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) return } +func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) if r1 == 0 { @@ -3103,6 +3260,22 @@ func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe return } +func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) { r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0) if r0 != 0 { @@ -3111,6 +3284,20 @@ func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.P return } +func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) { + r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) + ret = r0 != 0 + return +} + func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0) if r0 != 0 { @@ -3119,6 +3306,12 @@ func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { return } +func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) { + r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0) + ret = r0 != 0 + return +} + func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) if r0 != 0 { @@ -3218,6 +3411,22 @@ func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) { return } +func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) { var _p0 *uint32 if len(processIds) > 0 { @@ -3230,6 +3439,30 @@ func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) { return } +func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) { ret = procSubscribeServiceChangeNotifications.Find() if ret != nil { @@ -3267,6 +3500,233 @@ func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint return } +func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { + r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + handle = DevInfo(r0) + if handle == DevInfo(InvalidHandle) { + err = errnoErr(e1) + } + return +} + +func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { + r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + handle = DevInfo(r0) + if handle == DevInfo(InvalidHandle) { + err = errnoErr(e1) + } + return +} + +func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) { + r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) + key = Handle(r0) + if key == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0)) @@ -3352,6 +3812,58 @@ func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { return } +func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(filename) + if err != nil { + return + } + return _GetFileVersionInfoSize(_p0, zeroHandle) +} + +func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0) + bufSize = uint32(r0) + if bufSize == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(filename) + if err != nil { + return + } + return _GetFileVersionInfo(_p0, handle, bufSize, buffer) +} + +func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(subBlock) + if err != nil { + return + } + return _VerQueryValue(block, _p0, pointerToBufferPointer, bufSize) +} + +func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) if r0 != 0 { diff --git a/constraint/vendor/golang.org/x/text/internal/language/language.go b/constraint/vendor/golang.org/x/text/internal/language/language.go index f41aedcfc..6105bc7fa 100644 --- a/constraint/vendor/golang.org/x/text/internal/language/language.go +++ b/constraint/vendor/golang.org/x/text/internal/language/language.go @@ -251,6 +251,13 @@ func (t Tag) Parent() Tag { // ParseExtension parses s as an extension and returns it on success. func ParseExtension(s string) (ext string, err error) { + defer func() { + if recover() != nil { + ext = "" + err = ErrSyntax + } + }() + scan := makeScannerString(s) var end int if n := len(scan.token); n != 1 { @@ -461,7 +468,14 @@ func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) { // ParseBase parses a 2- or 3-letter ISO 639 code. // It returns a ValueError if s is a well-formed but unknown language identifier // or another error if another error occurred. -func ParseBase(s string) (Language, error) { +func ParseBase(s string) (l Language, err error) { + defer func() { + if recover() != nil { + l = 0 + err = ErrSyntax + } + }() + if n := len(s); n < 2 || 3 < n { return 0, ErrSyntax } @@ -472,7 +486,14 @@ func ParseBase(s string) (Language, error) { // ParseScript parses a 4-letter ISO 15924 code. // It returns a ValueError if s is a well-formed but unknown script identifier // or another error if another error occurred. -func ParseScript(s string) (Script, error) { +func ParseScript(s string) (scr Script, err error) { + defer func() { + if recover() != nil { + scr = 0 + err = ErrSyntax + } + }() + if len(s) != 4 { return 0, ErrSyntax } @@ -489,7 +510,14 @@ func EncodeM49(r int) (Region, error) { // ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code. // It returns a ValueError if s is a well-formed but unknown region identifier // or another error if another error occurred. -func ParseRegion(s string) (Region, error) { +func ParseRegion(s string) (r Region, err error) { + defer func() { + if recover() != nil { + r = 0 + err = ErrSyntax + } + }() + if n := len(s); n < 2 || 3 < n { return 0, ErrSyntax } @@ -578,7 +606,14 @@ type Variant struct { // ParseVariant parses and returns a Variant. An error is returned if s is not // a valid variant. -func ParseVariant(s string) (Variant, error) { +func ParseVariant(s string) (v Variant, err error) { + defer func() { + if recover() != nil { + v = Variant{} + err = ErrSyntax + } + }() + s = strings.ToLower(s) if id, ok := variantIndex[s]; ok { return Variant{id, s}, nil diff --git a/constraint/vendor/golang.org/x/text/internal/language/parse.go b/constraint/vendor/golang.org/x/text/internal/language/parse.go index c696fd0bd..47ee0fed1 100644 --- a/constraint/vendor/golang.org/x/text/internal/language/parse.go +++ b/constraint/vendor/golang.org/x/text/internal/language/parse.go @@ -232,6 +232,13 @@ func Parse(s string) (t Tag, err error) { if s == "" { return Und, ErrSyntax } + defer func() { + if recover() != nil { + t = Und + err = ErrSyntax + return + } + }() if len(s) <= maxAltTaglen { b := [maxAltTaglen]byte{} for i, c := range s { diff --git a/constraint/vendor/golang.org/x/text/language/parse.go b/constraint/vendor/golang.org/x/text/language/parse.go index 11acfd885..59b041008 100644 --- a/constraint/vendor/golang.org/x/text/language/parse.go +++ b/constraint/vendor/golang.org/x/text/language/parse.go @@ -43,6 +43,13 @@ func Parse(s string) (t Tag, err error) { // https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // The resulting tag is canonicalized using the canonicalization type c. func (c CanonType) Parse(s string) (t Tag, err error) { + defer func() { + if recover() != nil { + t = Tag{} + err = language.ErrSyntax + } + }() + tt, err := language.Parse(s) if err != nil { return makeTag(tt), err @@ -79,6 +86,13 @@ func Compose(part ...interface{}) (t Tag, err error) { // tag is returned after canonicalizing using CanonType c. If one or more errors // are encountered, one of the errors is returned. func (c CanonType) Compose(part ...interface{}) (t Tag, err error) { + defer func() { + if recover() != nil { + t = Tag{} + err = language.ErrSyntax + } + }() + var b language.Builder if err = update(&b, part...); err != nil { return und, err @@ -142,6 +156,14 @@ var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight") // Tags with a weight of zero will be dropped. An error will be returned if the // input could not be parsed. func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) { + defer func() { + if recover() != nil { + tag = nil + q = nil + err = language.ErrSyntax + } + }() + var entry string for s != "" { if entry, s = split(s, ','); entry == "" { diff --git a/constraint/vendor/golang.org/x/time/rate/rate.go b/constraint/vendor/golang.org/x/time/rate/rate.go index a98fe7782..b0b982e9c 100644 --- a/constraint/vendor/golang.org/x/time/rate/rate.go +++ b/constraint/vendor/golang.org/x/time/rate/rate.go @@ -145,7 +145,6 @@ func (r *Reservation) DelayFrom(now time.Time) time.Duration { // Cancel is shorthand for CancelAt(time.Now()). func (r *Reservation) Cancel() { r.CancelAt(time.Now()) - return } // CancelAt indicates that the reservation holder will not perform the reserved action @@ -186,8 +185,6 @@ func (r *Reservation) CancelAt(now time.Time) { r.lim.lastEvent = prevEvent } } - - return } // Reserve is shorthand for ReserveN(time.Now(), 1). @@ -309,15 +306,27 @@ func (lim *Limiter) SetBurstAt(now time.Time, newBurst int) { // reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN. func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duration) Reservation { lim.mu.Lock() + defer lim.mu.Unlock() if lim.limit == Inf { - lim.mu.Unlock() return Reservation{ ok: true, lim: lim, tokens: n, timeToAct: now, } + } else if lim.limit == 0 { + var ok bool + if lim.burst >= n { + ok = true + lim.burst -= n + } + return Reservation{ + ok: ok, + lim: lim, + tokens: lim.burst, + timeToAct: now, + } } now, last, tokens := lim.advance(now) @@ -354,7 +363,6 @@ func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duratio lim.last = last } - lim.mu.Unlock() return r } @@ -367,36 +375,31 @@ func (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time, last = now } - // Avoid making delta overflow below when last is very old. - maxElapsed := lim.limit.durationFromTokens(float64(lim.burst) - lim.tokens) - elapsed := now.Sub(last) - if elapsed > maxElapsed { - elapsed = maxElapsed - } - // Calculate the new number of tokens, due to time that passed. + elapsed := now.Sub(last) delta := lim.limit.tokensFromDuration(elapsed) tokens := lim.tokens + delta if burst := float64(lim.burst); tokens > burst { tokens = burst } - return now, last, tokens } // durationFromTokens is a unit conversion function from the number of tokens to the duration // of time it takes to accumulate them at a rate of limit tokens per second. func (limit Limit) durationFromTokens(tokens float64) time.Duration { + if limit <= 0 { + return InfDuration + } seconds := tokens / float64(limit) - return time.Nanosecond * time.Duration(1e9*seconds) + return time.Duration(float64(time.Second) * seconds) } // tokensFromDuration is a unit conversion function from a time duration to the number of tokens // which could be accumulated during that duration at a rate of limit tokens per second. func (limit Limit) tokensFromDuration(d time.Duration) float64 { - // Split the integer and fractional parts ourself to minimize rounding errors. - // See golang.org/issues/34861. - sec := float64(d/time.Second) * float64(limit) - nsec := float64(d%time.Second) * float64(limit) - return sec + nsec/1e9 + if limit <= 0 { + return 0 + } + return d.Seconds() * float64(limit) } diff --git a/constraint/vendor/google.golang.org/protobuf/encoding/prototext/decode.go b/constraint/vendor/google.golang.org/protobuf/encoding/prototext/decode.go index 8fb1d9e08..179d6e8fc 100644 --- a/constraint/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +++ b/constraint/vendor/google.golang.org/protobuf/encoding/prototext/decode.go @@ -744,9 +744,6 @@ func (d decoder) skipValue() error { // Skip items. This will not validate whether skipped values are // of the same type or not, same behavior as C++ // TextFormat::Parser::AllowUnknownField(true) version 3.8.0. - if err := d.skipValue(); err != nil { - return err - } } } } diff --git a/constraint/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/constraint/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go index aa66bdd06..da289ccce 100644 --- a/constraint/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +++ b/constraint/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go @@ -263,3 +263,8 @@ func (e *Encoder) Snapshot() encoderState { func (e *Encoder) Reset(es encoderState) { e.encoderState = es } + +// AppendString appends the escaped form of the input string to b. +func AppendString(b []byte, s string) []byte { + return appendString(b, s, false) +} diff --git a/constraint/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/constraint/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go index 3759b010c..029feeefd 100644 --- a/constraint/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +++ b/constraint/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go @@ -440,6 +440,13 @@ func legacyMerge(in piface.MergeInput) piface.MergeOutput { if !ok { return piface.MergeOutput{} } + if !in.Source.IsValid() { + // Legacy Marshal methods may not function on nil messages. + // Check for a typed nil source only after we confirm that + // legacy Marshal/Unmarshal methods are present, for + // consistency. + return piface.MergeOutput{Flags: piface.MergeComplete} + } b, err := marshaler.Marshal() if err != nil { return piface.MergeOutput{} diff --git a/constraint/vendor/google.golang.org/protobuf/internal/version/version.go b/constraint/vendor/google.golang.org/protobuf/internal/version/version.go index 5879131da..14e774fb2 100644 --- a/constraint/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/constraint/vendor/google.golang.org/protobuf/internal/version/version.go @@ -52,8 +52,8 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 26 - Patch = 0 + Minor = 27 + Patch = 1 PreRelease = "" ) diff --git a/constraint/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go b/constraint/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go index 66dcbcd0d..59f024c44 100644 --- a/constraint/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +++ b/constraint/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go @@ -94,7 +94,8 @@ type Files struct { // Note that enum values are in the top-level since that are in the same // scope as the parent enum. descsByName map[protoreflect.FullName]interface{} - filesByPath map[string]protoreflect.FileDescriptor + filesByPath map[string][]protoreflect.FileDescriptor + numFiles int } type packageDescriptor struct { @@ -117,17 +118,16 @@ func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error { r.descsByName = map[protoreflect.FullName]interface{}{ "": &packageDescriptor{}, } - r.filesByPath = make(map[string]protoreflect.FileDescriptor) + r.filesByPath = make(map[string][]protoreflect.FileDescriptor) } path := file.Path() - if prev := r.filesByPath[path]; prev != nil { + if prev := r.filesByPath[path]; len(prev) > 0 { r.checkGenProtoConflict(path) err := errors.New("file %q is already registered", file.Path()) - err = amendErrorWithCaller(err, prev, file) - if r == GlobalFiles && ignoreConflict(file, err) { - err = nil + err = amendErrorWithCaller(err, prev[0], file) + if !(r == GlobalFiles && ignoreConflict(file, err)) { + return err } - return err } for name := file.Package(); name != ""; name = name.Parent() { @@ -168,7 +168,8 @@ func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error { rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) { r.descsByName[d.FullName()] = d }) - r.filesByPath[path] = file + r.filesByPath[path] = append(r.filesByPath[path], file) + r.numFiles++ return nil } @@ -308,6 +309,7 @@ func (s *nameSuffix) Pop() (name protoreflect.Name) { // FindFileByPath looks up a file by the path. // // This returns (nil, NotFound) if not found. +// This returns an error if multiple files have the same path. func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { if r == nil { return nil, NotFound @@ -316,13 +318,19 @@ func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) globalMutex.RLock() defer globalMutex.RUnlock() } - if fd, ok := r.filesByPath[path]; ok { - return fd, nil + fds := r.filesByPath[path] + switch len(fds) { + case 0: + return nil, NotFound + case 1: + return fds[0], nil + default: + return nil, errors.New("multiple files named %q", path) } - return nil, NotFound } -// NumFiles reports the number of registered files. +// NumFiles reports the number of registered files, +// including duplicate files with the same name. func (r *Files) NumFiles() int { if r == nil { return 0 @@ -331,10 +339,11 @@ func (r *Files) NumFiles() int { globalMutex.RLock() defer globalMutex.RUnlock() } - return len(r.filesByPath) + return r.numFiles } // RangeFiles iterates over all registered files while f returns true. +// If multiple files have the same name, RangeFiles iterates over all of them. // The iteration order is undefined. func (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool) { if r == nil { @@ -344,9 +353,11 @@ func (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool) { globalMutex.RLock() defer globalMutex.RUnlock() } - for _, file := range r.filesByPath { - if !f(file) { - return + for _, files := range r.filesByPath { + for _, file := range files { + if !f(file) { + return + } } } } diff --git a/constraint/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/constraint/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go index f77239fc3..abe4ab511 100644 --- a/constraint/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +++ b/constraint/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go @@ -43,7 +43,6 @@ package descriptorpb import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoiface "google.golang.org/protobuf/runtime/protoiface" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" @@ -829,15 +828,6 @@ func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3} } -var extRange_ExtensionRangeOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use ExtensionRangeOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*ExtensionRangeOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_ExtensionRangeOptions -} - func (x *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { if x != nil { return x.UninterpretedOption @@ -1520,15 +1510,6 @@ func (*FileOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{10} } -var extRange_FileOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use FileOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*FileOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_FileOptions -} - func (x *FileOptions) GetJavaPackage() string { if x != nil && x.JavaPackage != nil { return *x.JavaPackage @@ -1776,15 +1757,6 @@ func (*MessageOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{11} } -var extRange_MessageOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use MessageOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*MessageOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_MessageOptions -} - func (x *MessageOptions) GetMessageSetWireFormat() bool { if x != nil && x.MessageSetWireFormat != nil { return *x.MessageSetWireFormat @@ -1930,15 +1902,6 @@ func (*FieldOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12} } -var extRange_FieldOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use FieldOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*FieldOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_FieldOptions -} - func (x *FieldOptions) GetCtype() FieldOptions_CType { if x != nil && x.Ctype != nil { return *x.Ctype @@ -2030,15 +1993,6 @@ func (*OneofOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{13} } -var extRange_OneofOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use OneofOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*OneofOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_OneofOptions -} - func (x *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { if x != nil { return x.UninterpretedOption @@ -2101,15 +2055,6 @@ func (*EnumOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{14} } -var extRange_EnumOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use EnumOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*EnumOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_EnumOptions -} - func (x *EnumOptions) GetAllowAlias() bool { if x != nil && x.AllowAlias != nil { return *x.AllowAlias @@ -2183,15 +2128,6 @@ func (*EnumValueOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{15} } -var extRange_EnumValueOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use EnumValueOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*EnumValueOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_EnumValueOptions -} - func (x *EnumValueOptions) GetDeprecated() bool { if x != nil && x.Deprecated != nil { return *x.Deprecated @@ -2258,15 +2194,6 @@ func (*ServiceOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{16} } -var extRange_ServiceOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use ServiceOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*ServiceOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_ServiceOptions -} - func (x *ServiceOptions) GetDeprecated() bool { if x != nil && x.Deprecated != nil { return *x.Deprecated @@ -2335,15 +2262,6 @@ func (*MethodOptions) Descriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{17} } -var extRange_MethodOptions = []protoiface.ExtensionRangeV1{ - {Start: 1000, End: 536870911}, -} - -// Deprecated: Use MethodOptions.ProtoReflect.Descriptor.ExtensionRanges instead. -func (*MethodOptions) ExtensionRangeArray() []protoiface.ExtensionRangeV1 { - return extRange_MethodOptions -} - func (x *MethodOptions) GetDeprecated() bool { if x != nil && x.Deprecated != nil { return *x.Deprecated diff --git a/constraint/vendor/gopkg.in/yaml.v3/.travis.yml b/constraint/vendor/gopkg.in/yaml.v3/.travis.yml deleted file mode 100644 index a130fe883..000000000 --- a/constraint/vendor/gopkg.in/yaml.v3/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: go - -go: - - "1.4.x" - - "1.5.x" - - "1.6.x" - - "1.7.x" - - "1.8.x" - - "1.9.x" - - "1.10.x" - - "1.11.x" - - "1.12.x" - - "1.13.x" - - "1.14.x" - - "tip" - -go_import_path: gopkg.in/yaml.v3 diff --git a/constraint/vendor/gopkg.in/yaml.v3/decode.go b/constraint/vendor/gopkg.in/yaml.v3/decode.go index 21c0dacfd..df36e3a30 100644 --- a/constraint/vendor/gopkg.in/yaml.v3/decode.go +++ b/constraint/vendor/gopkg.in/yaml.v3/decode.go @@ -399,7 +399,7 @@ func (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good // // If n holds a null value, prepare returns before doing anything. func (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { - if n.ShortTag() == nullTag || n.Kind == 0 && n.IsZero() { + if n.ShortTag() == nullTag { return out, false, false } again := true @@ -808,8 +808,10 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { } } + mapIsNew := false if out.IsNil() { out.Set(reflect.MakeMap(outt)) + mapIsNew = true } for i := 0; i < l; i += 2 { if isMerge(n.Content[i]) { @@ -826,7 +828,7 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { failf("invalid map key: %#v", k.Interface()) } e := reflect.New(et).Elem() - if d.unmarshal(n.Content[i+1], e) { + if d.unmarshal(n.Content[i+1], e) || n.Content[i+1].ShortTag() == nullTag && (mapIsNew || !out.MapIndex(k).IsValid()) { out.SetMapIndex(k, e) } } diff --git a/constraint/vendor/gopkg.in/yaml.v3/emitterc.go b/constraint/vendor/gopkg.in/yaml.v3/emitterc.go index c29217ef5..0f47c9ca8 100644 --- a/constraint/vendor/gopkg.in/yaml.v3/emitterc.go +++ b/constraint/vendor/gopkg.in/yaml.v3/emitterc.go @@ -814,26 +814,24 @@ func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_ } } if len(emitter.key_line_comment) > 0 { - // [Go] A line comment was previously provided for the key. Handle it before - // the value so the inline comments are placed correctly. - if yaml_emitter_silent_nil_event(emitter, event) && len(emitter.line_comment) == 0 { - // Nothing other than the line comment will be written on the line. - emitter.line_comment = emitter.key_line_comment - emitter.key_line_comment = nil - } else { - // An actual value is coming, so emit the comment line. + // [Go] Line comments are generally associated with the value, but when there's + // no value on the same line as a mapping key they end up attached to the + // key itself. + if event.typ == yaml_SCALAR_EVENT { + if len(emitter.line_comment) == 0 { + // A scalar is coming and it has no line comments by itself yet, + // so just let it handle the line comment as usual. If it has a + // line comment, we can't have both so the one from the key is lost. + emitter.line_comment = emitter.key_line_comment + emitter.key_line_comment = nil + } + } else if event.sequence_style() != yaml_FLOW_SEQUENCE_STYLE && (event.typ == yaml_MAPPING_START_EVENT || event.typ == yaml_SEQUENCE_START_EVENT) { + // An indented block follows, so write the comment right now. emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment if !yaml_emitter_process_line_comment(emitter) { return false } emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment - // Indent in unless it's a block that will reindent anyway. - if event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || (event.typ != yaml_MAPPING_START_EVENT && event.typ != yaml_SEQUENCE_START_EVENT) { - emitter.indent = emitter.best_indent*((emitter.indent+emitter.best_indent)/emitter.best_indent) - if !yaml_emitter_write_indent(emitter) { - return false - } - } } } emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) @@ -1896,7 +1894,7 @@ func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bo if !yaml_emitter_write_block_scalar_hints(emitter, value) { return false } - if !put_break(emitter) { + if !yaml_emitter_process_line_comment(emitter) { return false } //emitter.indention = true @@ -1933,10 +1931,10 @@ func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) boo if !yaml_emitter_write_block_scalar_hints(emitter, value) { return false } - - if !put_break(emitter) { + if !yaml_emitter_process_line_comment(emitter) { return false } + //emitter.indention = true emitter.whitespace = true diff --git a/constraint/vendor/gopkg.in/yaml.v3/encode.go b/constraint/vendor/gopkg.in/yaml.v3/encode.go index 45e8d1e1b..de9e72a3e 100644 --- a/constraint/vendor/gopkg.in/yaml.v3/encode.go +++ b/constraint/vendor/gopkg.in/yaml.v3/encode.go @@ -120,6 +120,11 @@ func (e *encoder) marshal(tag string, in reflect.Value) { e.nodev(in) return case Node: + if !in.CanAddr() { + var n = reflect.New(in.Type()).Elem() + n.Set(in) + in = n + } e.nodev(in.Addr()) return case time.Time: diff --git a/constraint/vendor/gopkg.in/yaml.v3/scannerc.go b/constraint/vendor/gopkg.in/yaml.v3/scannerc.go index d9a539c39..ca0070108 100644 --- a/constraint/vendor/gopkg.in/yaml.v3/scannerc.go +++ b/constraint/vendor/gopkg.in/yaml.v3/scannerc.go @@ -2260,10 +2260,9 @@ func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, l } } if parser.buffer[parser.buffer_pos] == '#' { - // TODO Test this and then re-enable it. - //if !yaml_parser_scan_line_comment(parser, start_mark) { - // return false - //} + if !yaml_parser_scan_line_comment(parser, start_mark) { + return false + } for !is_breakz(parser.buffer, parser.buffer_pos) { skip(parser) if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { @@ -2892,6 +2891,10 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo var token_mark = token.start_mark var start_mark yaml_mark_t + var next_indent = parser.indent + if next_indent < 0 { + next_indent = 0 + } var recent_empty = false var first_empty = parser.newlines <= 1 @@ -2923,15 +2926,18 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo continue } c := parser.buffer[parser.buffer_pos+peek] - if is_breakz(parser.buffer, parser.buffer_pos+peek) || parser.flow_level > 0 && (c == ']' || c == '}') { + var close_flow = parser.flow_level > 0 && (c == ']' || c == '}') + if close_flow || is_breakz(parser.buffer, parser.buffer_pos+peek) { // Got line break or terminator. - if !recent_empty { - if first_empty && (start_mark.line == foot_line || start_mark.column-1 < parser.indent) { + if close_flow || !recent_empty { + if close_flow || first_empty && (start_mark.line == foot_line && token.typ != yaml_VALUE_TOKEN || start_mark.column-1 < next_indent) { // This is the first empty line and there were no empty lines before, // so this initial part of the comment is a foot of the prior token // instead of being a head for the following one. Split it up. + // Alternatively, this might also be the last comment inside a flow + // scope, so it must be a footer. if len(text) > 0 { - if start_mark.column-1 < parser.indent { + if start_mark.column-1 < next_indent { // If dedented it's unrelated to the prior token. token_mark = start_mark } @@ -2962,7 +2968,7 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo continue } - if len(text) > 0 && column < parser.indent+1 && column != start_mark.column { + if len(text) > 0 && (close_flow || column-1 < next_indent && column != start_mark.column) { // The comment at the different indentation is a foot of the // preceding data rather than a head of the upcoming one. parser.comments = append(parser.comments, yaml_comment_t{ @@ -3013,6 +3019,10 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo peek = 0 column = 0 line = parser.mark.line + next_indent = parser.indent + if next_indent < 0 { + next_indent = 0 + } } if len(text) > 0 { diff --git a/constraint/vendor/gopkg.in/yaml.v3/yaml.go b/constraint/vendor/gopkg.in/yaml.v3/yaml.go index 56e8a8490..8cec6da48 100644 --- a/constraint/vendor/gopkg.in/yaml.v3/yaml.go +++ b/constraint/vendor/gopkg.in/yaml.v3/yaml.go @@ -449,6 +449,11 @@ func (n *Node) ShortTag() string { case ScalarNode: tag, _ := resolve("", n.Value) return tag + case 0: + // Special case to make the zero value convenient. + if n.IsZero() { + return nullTag + } } return "" } diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go b/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go index adc47be7f..0f8019c54 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go @@ -342,13 +342,13 @@ func init() { } var fileDescriptor_aaac5994f79683e8 = []byte{ - // 1104 bytes of a gzipped FileDescriptorProto + // 1102 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0x4f, 0x6f, 0x1b, 0x45, 0x14, 0xcf, 0xc6, 0x76, 0x63, 0x8f, 0xf3, 0xa7, 0x19, 0xa0, 0x35, 0xa1, 0xf2, 0x5a, 0x46, 0x42, 0x46, 0xc0, 0x6e, 0x13, 0x4a, 0xa9, 0xb8, 0xa0, 0x6c, 0xf8, 0xa3, 0x88, 0xa4, 0x8d, 0x26, 0x6d, - 0x8a, 0x50, 0x0e, 0x1d, 0xaf, 0xc7, 0xf6, 0x10, 0x7b, 0x67, 0x35, 0x33, 0xeb, 0x92, 0x1b, 0x1f, - 0x81, 0xaf, 0x00, 0x9f, 0x82, 0x1b, 0xe2, 0x96, 0x63, 0x8f, 0x39, 0xa0, 0x85, 0x2c, 0x17, 0x0e, - 0x7c, 0x82, 0x9c, 0xd0, 0xcc, 0xae, 0x77, 0xfd, 0x27, 0x09, 0x56, 0x0e, 0x3d, 0xe5, 0xb6, 0xf3, + 0x8a, 0x50, 0x0e, 0x1d, 0xaf, 0xc7, 0xf6, 0x10, 0x7b, 0x67, 0x35, 0x33, 0x6b, 0xc8, 0x8d, 0x8f, + 0xc0, 0x57, 0x80, 0x4f, 0xc1, 0x0d, 0x71, 0xcb, 0xb1, 0xc7, 0x1c, 0xd0, 0x42, 0x96, 0x0b, 0x07, + 0x3e, 0x41, 0x4e, 0x68, 0x66, 0xd7, 0xbb, 0xfe, 0x93, 0xa4, 0x56, 0x0e, 0x3d, 0xe5, 0xb6, 0xf3, 0x7b, 0xf3, 0x7e, 0x6f, 0xde, 0xdb, 0xf7, 0xde, 0x0f, 0xec, 0x1c, 0x3d, 0x12, 0x16, 0x65, 0xf6, 0x51, 0xd0, 0x24, 0xdc, 0x23, 0x92, 0x08, 0x7b, 0x40, 0xbc, 0x16, 0xe3, 0x76, 0x62, 0xc0, 0x3e, 0xb5, 0x71, 0xab, 0x4f, 0x85, 0xa0, 0xcc, 0xe3, 0xa4, 0x43, 0x85, 0xe4, 0x58, 0x52, 0xe6, 0xd9, @@ -357,61 +357,61 @@ var fileDescriptor_aaac5994f79683e8 = []byte{ 0xe5, 0xb2, 0xbe, 0xdd, 0x61, 0x1d, 0x66, 0x6b, 0xdf, 0x66, 0xd0, 0xd6, 0x27, 0x7d, 0xd0, 0x5f, 0x31, 0xe7, 0xda, 0x83, 0xec, 0x21, 0x7d, 0xec, 0x76, 0xa9, 0x47, 0xf8, 0xb1, 0xed, 0x1f, 0x75, 0x14, 0x20, 0xec, 0x3e, 0x91, 0xf8, 0x82, 0x97, 0xac, 0xd9, 0x97, 0x79, 0xf1, 0xc0, 0x93, 0xb4, - 0x4f, 0xa6, 0x1c, 0x1e, 0xfe, 0x9f, 0x83, 0x70, 0xbb, 0xa4, 0x8f, 0x27, 0xfd, 0xea, 0xbf, 0x2d, - 0x80, 0x95, 0xdd, 0x40, 0x62, 0x49, 0xbd, 0xce, 0x73, 0xd2, 0xec, 0x32, 0x76, 0x04, 0x6b, 0x20, - 0xef, 0xe1, 0x3e, 0xa9, 0x18, 0x35, 0xa3, 0x51, 0x72, 0x16, 0x4f, 0x42, 0x73, 0x2e, 0x0a, 0xcd, - 0xfc, 0x63, 0xdc, 0x27, 0x48, 0x5b, 0x20, 0x07, 0x8b, 0x6e, 0x8f, 0x12, 0x4f, 0x6e, 0x31, 0xaf, - 0x4d, 0x3b, 0x95, 0xf9, 0x9a, 0xd1, 0x28, 0x6f, 0x3c, 0xb2, 0x66, 0xa8, 0x9f, 0x95, 0x44, 0xd9, - 0x1a, 0xf1, 0x77, 0xde, 0x4c, 0x62, 0x2c, 0x8e, 0xa2, 0x68, 0x2c, 0x06, 0x3c, 0x04, 0x05, 0x1e, - 0xf4, 0x88, 0xa8, 0xe4, 0x6a, 0xb9, 0x46, 0x79, 0xe3, 0xd3, 0x99, 0x82, 0xa1, 0xa0, 0x47, 0x9e, - 0x53, 0xd9, 0x7d, 0xe2, 0x93, 0x18, 0x14, 0xce, 0x52, 0x12, 0xab, 0xa0, 0x6c, 0x02, 0xc5, 0xa4, - 0x70, 0x07, 0x2c, 0xb5, 0x31, 0xed, 0x05, 0x9c, 0xec, 0xb1, 0x1e, 0x75, 0x8f, 0x2b, 0x79, 0x9d, - 0xfc, 0x7b, 0x51, 0x68, 0x2e, 0x7d, 0x35, 0x6a, 0x38, 0x0f, 0xcd, 0xd5, 0x31, 0xe0, 0xe9, 0xb1, - 0x4f, 0xd0, 0xb8, 0x33, 0xfc, 0x02, 0x94, 0xfb, 0x58, 0xba, 0xdd, 0x84, 0xab, 0xa4, 0xb9, 0xea, - 0x51, 0x68, 0x96, 0x77, 0x33, 0xf8, 0x3c, 0x34, 0x57, 0x46, 0x8e, 0x9a, 0x67, 0xd4, 0x0d, 0xfe, - 0x00, 0x56, 0x55, 0xb5, 0x85, 0x8f, 0x5d, 0xb2, 0x4f, 0x7a, 0xc4, 0x95, 0x8c, 0x57, 0x0a, 0xba, - 0xd4, 0x1f, 0x8f, 0x64, 0x9f, 0xfe, 0x6f, 0xcb, 0x3f, 0xea, 0x28, 0x40, 0x58, 0xaa, 0xad, 0x54, - 0xfa, 0x3b, 0xb8, 0x49, 0x7a, 0x43, 0x57, 0xe7, 0xad, 0x28, 0x34, 0x57, 0x1f, 0x4f, 0x32, 0xa2, - 0xe9, 0x20, 0x90, 0x81, 0x65, 0xd6, 0xfc, 0x9e, 0xb8, 0x32, 0x0d, 0x5b, 0xbe, 0x7e, 0x58, 0x18, - 0x85, 0xe6, 0xf2, 0x93, 0x31, 0x3a, 0x34, 0x41, 0xaf, 0x0a, 0x26, 0x68, 0x8b, 0x7c, 0xd9, 0x6e, - 0x13, 0x57, 0x8a, 0xca, 0xad, 0xac, 0x60, 0xfb, 0x19, 0xac, 0x0a, 0x96, 0x1d, 0xb7, 0x7a, 0x58, - 0x08, 0x34, 0xea, 0x06, 0x3f, 0x03, 0xcb, 0xaa, 0xd7, 0x59, 0x20, 0xf7, 0x89, 0xcb, 0xbc, 0x96, - 0xa8, 0x2c, 0xd4, 0x8c, 0x46, 0x21, 0x7e, 0xc1, 0xd3, 0x31, 0x0b, 0x9a, 0xb8, 0x09, 0x9f, 0x81, - 0xbb, 0x69, 0x17, 0x21, 0x32, 0xa0, 0xe4, 0xe5, 0x01, 0xe1, 0xea, 0x20, 0x2a, 0xc5, 0x5a, 0xae, + 0x4f, 0xa6, 0x1c, 0x1e, 0xbe, 0xca, 0x41, 0xb8, 0x5d, 0xd2, 0xc7, 0x93, 0x7e, 0xf5, 0xdf, 0x17, + 0xc0, 0xca, 0x6e, 0x20, 0xb1, 0xa4, 0x5e, 0xe7, 0x39, 0x69, 0x76, 0x19, 0x3b, 0x82, 0x35, 0x90, + 0xf7, 0x70, 0x9f, 0x54, 0x8c, 0x9a, 0xd1, 0x28, 0x39, 0x8b, 0x27, 0xa1, 0x39, 0x17, 0x85, 0x66, + 0xfe, 0x31, 0xee, 0x13, 0xa4, 0x2d, 0x90, 0x83, 0x45, 0xb7, 0x47, 0x89, 0x27, 0xb7, 0x98, 0xd7, + 0xa6, 0x9d, 0xca, 0x7c, 0xcd, 0x68, 0x94, 0x37, 0x1e, 0x59, 0x33, 0xd4, 0xcf, 0x4a, 0xa2, 0x6c, + 0x8d, 0xf8, 0x3b, 0x6f, 0x26, 0x31, 0x16, 0x47, 0x51, 0x34, 0x16, 0x03, 0x1e, 0x82, 0x02, 0x0f, + 0x7a, 0x44, 0x54, 0x72, 0xb5, 0x5c, 0xa3, 0xbc, 0xf1, 0xe9, 0x4c, 0xc1, 0x50, 0xd0, 0x23, 0xcf, + 0xa9, 0xec, 0x3e, 0xf1, 0x49, 0x0c, 0x0a, 0x67, 0x29, 0x89, 0x55, 0x50, 0x36, 0x81, 0x62, 0x52, + 0xb8, 0x03, 0x96, 0xda, 0x98, 0xf6, 0x02, 0x4e, 0xf6, 0x58, 0x8f, 0xba, 0xc7, 0x95, 0xbc, 0x4e, + 0xfe, 0xbd, 0x28, 0x34, 0x97, 0xbe, 0x1a, 0x35, 0x9c, 0x87, 0xe6, 0xea, 0x18, 0xf0, 0xf4, 0xd8, + 0x27, 0x68, 0xdc, 0x19, 0x7e, 0x01, 0xca, 0x7d, 0x2c, 0xdd, 0x6e, 0xc2, 0x55, 0xd2, 0x5c, 0xf5, + 0x28, 0x34, 0xcb, 0xbb, 0x19, 0x7c, 0x1e, 0x9a, 0x2b, 0x23, 0x47, 0xcd, 0x33, 0xea, 0x06, 0x7f, + 0x04, 0xab, 0xaa, 0xda, 0xc2, 0xc7, 0x2e, 0xd9, 0x27, 0x3d, 0xe2, 0x4a, 0xc6, 0x2b, 0x05, 0x5d, + 0xea, 0x8f, 0x47, 0xb2, 0x4f, 0xff, 0xb7, 0xe5, 0x1f, 0x75, 0x14, 0x20, 0x2c, 0xd5, 0x56, 0x2a, + 0xfd, 0x1d, 0xdc, 0x24, 0xbd, 0xa1, 0xab, 0xf3, 0x56, 0x14, 0x9a, 0xab, 0x8f, 0x27, 0x19, 0xd1, + 0x74, 0x10, 0xc8, 0xc0, 0x32, 0x6b, 0x7e, 0x4f, 0x5c, 0x99, 0x86, 0x2d, 0x5f, 0x3f, 0x2c, 0x8c, + 0x42, 0x73, 0xf9, 0xc9, 0x18, 0x1d, 0x9a, 0xa0, 0x57, 0x05, 0x13, 0xb4, 0x45, 0xbe, 0x6c, 0xb7, + 0x89, 0x2b, 0x45, 0xe5, 0x56, 0x56, 0xb0, 0xfd, 0x0c, 0x56, 0x05, 0xcb, 0x8e, 0x5b, 0x3d, 0x2c, + 0x04, 0x1a, 0x75, 0x83, 0x9f, 0x81, 0x65, 0xd5, 0xeb, 0x2c, 0x90, 0xfb, 0xc4, 0x65, 0x5e, 0x4b, + 0x54, 0x16, 0x6a, 0x46, 0xa3, 0x10, 0xbf, 0xe0, 0xe9, 0x98, 0x05, 0x4d, 0xdc, 0x84, 0xcf, 0xc0, + 0xdd, 0xb4, 0x8b, 0x10, 0x19, 0x50, 0xf2, 0xc3, 0x01, 0xe1, 0xea, 0x20, 0x2a, 0xc5, 0x5a, 0xae, 0x51, 0x72, 0xde, 0x89, 0x42, 0xf3, 0xee, 0xe6, 0xc5, 0x57, 0xd0, 0x65, 0xbe, 0xf0, 0x05, 0x80, 0x9c, 0x50, 0x6f, 0xc0, 0x5c, 0xdd, 0x7e, 0x49, 0x43, 0x00, 0x9d, 0xdf, 0xfd, 0x28, 0x34, 0x21, 0x9a, 0xb2, 0x9e, 0x87, 0xe6, 0x9d, 0x69, 0x54, 0xb7, 0xc7, 0x05, 0x5c, 0xf5, 0x53, 0x03, 0xdc, 0x9b, 0x98, 0xe0, 0x78, 0x62, 0x82, 0xb8, 0xe3, 0xe1, 0x0b, 0x50, 0x54, 0x3f, 0xa6, 0x85, 0x25, 0xd6, 0x23, 0x5d, 0xde, 0xb8, 0x3f, 0xdb, 0x6f, 0x8c, 0xff, 0xd9, 0x2e, 0x91, 0xd8, 0x81, 0xc9, 0xd0, 0x80, 0x0c, 0x43, 0x29, 0x2b, 0x3c, 0x00, 0xc5, 0x24, 0xb2, 0xa8, 0xcc, 0xeb, 0xe9, 0x7c, - 0x30, 0xd3, 0x74, 0x4e, 0x3c, 0xdb, 0xc9, 0xab, 0x28, 0xa8, 0xf8, 0x32, 0xe1, 0xaa, 0xff, 0x63, - 0x80, 0xda, 0x55, 0xa9, 0xed, 0x50, 0x21, 0xe1, 0xe1, 0x54, 0x7a, 0xd6, 0x8c, 0x5d, 0x4a, 0x45, - 0x9c, 0xdc, 0xed, 0x24, 0xb9, 0xe2, 0x10, 0x19, 0x49, 0xad, 0x0d, 0x0a, 0x54, 0x92, 0xfe, 0x30, - 0xaf, 0xcd, 0xeb, 0xe4, 0x35, 0xf6, 0xe6, 0x6c, 0xff, 0x6c, 0x2b, 0x5e, 0x14, 0xd3, 0xd7, 0x7f, - 0x37, 0x40, 0x5e, 0x2d, 0x24, 0xf8, 0x01, 0x28, 0x61, 0x9f, 0x7e, 0xcd, 0x59, 0xe0, 0x8b, 0x8a, - 0xa1, 0x3b, 0x6f, 0x29, 0x0a, 0xcd, 0xd2, 0xe6, 0xde, 0x76, 0x0c, 0xa2, 0xcc, 0x0e, 0xd7, 0x41, - 0x19, 0xfb, 0x34, 0x6d, 0xd4, 0x79, 0x7d, 0x7d, 0x45, 0x8d, 0xcd, 0xe6, 0xde, 0x76, 0xda, 0x9c, - 0xa3, 0x77, 0x14, 0x3f, 0x27, 0x82, 0x05, 0xdc, 0x4d, 0x56, 0x69, 0xc2, 0x8f, 0x86, 0x20, 0xca, - 0xec, 0xf0, 0x43, 0x50, 0x10, 0x2e, 0xf3, 0x49, 0xb2, 0x0d, 0xef, 0xa8, 0x67, 0xef, 0x2b, 0xe0, - 0x3c, 0x34, 0x4b, 0xfa, 0x43, 0xb7, 0x65, 0x7c, 0xa9, 0xfe, 0x8b, 0x01, 0xe0, 0xf4, 0xc2, 0x85, - 0x9f, 0x03, 0xc0, 0xd2, 0x53, 0x92, 0x92, 0xa9, 0x7b, 0x29, 0x45, 0xcf, 0x43, 0x73, 0x29, 0x3d, - 0x69, 0xca, 0x11, 0x17, 0xf8, 0x0d, 0xc8, 0xab, 0x25, 0x9d, 0xa8, 0xcc, 0xfb, 0x33, 0x2f, 0xfe, - 0x4c, 0xba, 0xd4, 0x09, 0x69, 0x92, 0xfa, 0xcf, 0x06, 0xb8, 0xbd, 0x4f, 0xf8, 0x80, 0xba, 0x04, - 0x91, 0x36, 0xe1, 0xc4, 0x73, 0x09, 0xb4, 0x41, 0x29, 0x5d, 0x82, 0x89, 0xec, 0xad, 0x26, 0xbe, - 0xa5, 0x74, 0x61, 0xa2, 0xec, 0x4e, 0x2a, 0x91, 0xf3, 0x97, 0x4a, 0xe4, 0x3d, 0x90, 0xf7, 0xb1, - 0xec, 0x56, 0x72, 0xfa, 0x46, 0x51, 0x59, 0xf7, 0xb0, 0xec, 0x22, 0x8d, 0x6a, 0x2b, 0xe3, 0x52, - 0xd7, 0xb5, 0x90, 0x58, 0x19, 0x97, 0x48, 0xa3, 0xf5, 0x3f, 0x6f, 0x81, 0xd5, 0x03, 0xdc, 0xa3, - 0xad, 0x1b, 0x59, 0xbe, 0x91, 0xe5, 0x2b, 0x65, 0x19, 0xdc, 0xc8, 0xf2, 0x75, 0x64, 0xb9, 0xfe, - 0x87, 0x01, 0xaa, 0x53, 0x13, 0xf6, 0xba, 0x65, 0xf3, 0xdb, 0x29, 0xd9, 0x7c, 0x38, 0xd3, 0xf4, - 0x4c, 0x3d, 0x7c, 0x4a, 0x38, 0xff, 0x35, 0x40, 0xfd, 0xea, 0xf4, 0x5e, 0x83, 0x74, 0x76, 0xc7, - 0xa5, 0x73, 0xeb, 0x7a, 0xb9, 0xcd, 0x22, 0x9e, 0xbf, 0x1a, 0xe0, 0x8d, 0x0b, 0xf6, 0x17, 0x7c, - 0x1b, 0xe4, 0x02, 0xde, 0x4b, 0x56, 0xf0, 0x42, 0x14, 0x9a, 0xb9, 0x67, 0x68, 0x07, 0x29, 0x0c, - 0x1e, 0x82, 0x05, 0x11, 0xab, 0x40, 0x92, 0xf9, 0x27, 0x33, 0x3d, 0x6f, 0x52, 0x39, 0x9c, 0x72, - 0x14, 0x9a, 0x0b, 0x43, 0x74, 0x48, 0x09, 0x1b, 0xa0, 0xe8, 0x62, 0x27, 0xf0, 0x5a, 0x89, 0x6a, - 0x2d, 0x3a, 0x8b, 0xaa, 0x48, 0x5b, 0x9b, 0x31, 0x86, 0x52, 0xab, 0xd3, 0x38, 0x39, 0xab, 0xce, - 0xbd, 0x3a, 0xab, 0xce, 0x9d, 0x9e, 0x55, 0xe7, 0x7e, 0x8c, 0xaa, 0xc6, 0x49, 0x54, 0x35, 0x5e, - 0x45, 0x55, 0xe3, 0x34, 0xaa, 0x1a, 0x7f, 0x45, 0x55, 0xe3, 0xa7, 0xbf, 0xab, 0x73, 0xdf, 0xcd, - 0x0f, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x57, 0x91, 0x2c, 0x7b, 0xeb, 0x0e, 0x00, 0x00, + 0x30, 0xd3, 0x74, 0x4e, 0x3c, 0xdb, 0xc9, 0xab, 0x28, 0x28, 0xe5, 0xaa, 0xff, 0x6b, 0x80, 0xda, + 0x55, 0xa9, 0xed, 0x50, 0x21, 0xe1, 0xe1, 0x54, 0x7a, 0xd6, 0x8c, 0x5d, 0x4a, 0x45, 0x9c, 0xdc, + 0xed, 0x24, 0xb9, 0xe2, 0x10, 0x19, 0x49, 0xad, 0x0d, 0x0a, 0x54, 0x92, 0xfe, 0x30, 0xaf, 0xcd, + 0xeb, 0xe4, 0x35, 0xf6, 0xe6, 0x6c, 0xff, 0x6c, 0x2b, 0x5e, 0x14, 0xd3, 0xd7, 0xff, 0x30, 0x40, + 0x5e, 0x2d, 0x24, 0xf8, 0x01, 0x28, 0x61, 0x9f, 0x7e, 0xcd, 0x59, 0xe0, 0x8b, 0x8a, 0xa1, 0x3b, + 0x6f, 0x29, 0x0a, 0xcd, 0xd2, 0xe6, 0xde, 0x76, 0x0c, 0xa2, 0xcc, 0x0e, 0xd7, 0x41, 0x19, 0xfb, + 0x34, 0x6d, 0xd4, 0x79, 0x7d, 0x7d, 0x45, 0x8d, 0xcd, 0xe6, 0xde, 0x76, 0xda, 0x9c, 0xa3, 0x77, + 0x14, 0x3f, 0x27, 0x82, 0x05, 0xdc, 0x4d, 0x56, 0x69, 0xc2, 0x8f, 0x86, 0x20, 0xca, 0xec, 0xf0, + 0x43, 0x50, 0x10, 0x2e, 0xf3, 0x49, 0xb2, 0x0d, 0xef, 0xa8, 0x67, 0xef, 0x2b, 0xe0, 0x3c, 0x34, + 0x4b, 0xfa, 0x43, 0xb7, 0x65, 0x7c, 0xa9, 0xfe, 0xab, 0x01, 0xe0, 0xf4, 0xc2, 0x85, 0x9f, 0x03, + 0xc0, 0xd2, 0x53, 0x92, 0x92, 0xa9, 0x7b, 0x29, 0x45, 0xcf, 0x43, 0x73, 0x29, 0x3d, 0x69, 0xca, + 0x11, 0x17, 0xf8, 0x0d, 0xc8, 0xab, 0x25, 0x9d, 0xa8, 0xcc, 0xfb, 0x33, 0x2f, 0xfe, 0x4c, 0xba, + 0xd4, 0x09, 0x69, 0x92, 0xfa, 0x2f, 0x06, 0xb8, 0xbd, 0x4f, 0xf8, 0x80, 0xba, 0x04, 0x91, 0x36, + 0xe1, 0xc4, 0x73, 0x09, 0xb4, 0x41, 0x29, 0x5d, 0x82, 0x89, 0xec, 0xad, 0x26, 0xbe, 0xa5, 0x74, + 0x61, 0xa2, 0xec, 0x4e, 0x2a, 0x91, 0xf3, 0x97, 0x4a, 0xe4, 0x3d, 0x90, 0xf7, 0xb1, 0xec, 0x56, + 0x72, 0xfa, 0x46, 0x51, 0x59, 0xf7, 0xb0, 0xec, 0x22, 0x8d, 0x6a, 0x2b, 0xe3, 0x52, 0xd7, 0xb5, + 0x90, 0x58, 0x19, 0x97, 0x48, 0xa3, 0xf5, 0xbf, 0x6e, 0x81, 0xd5, 0x03, 0xdc, 0xa3, 0xad, 0x1b, + 0x59, 0xbe, 0x91, 0xe5, 0x2b, 0x65, 0x19, 0xdc, 0xc8, 0xf2, 0x75, 0x64, 0xb9, 0xfe, 0xa7, 0x01, + 0xaa, 0x53, 0x13, 0xf6, 0xba, 0x65, 0xf3, 0xdb, 0x29, 0xd9, 0x7c, 0x38, 0xd3, 0xf4, 0x4c, 0x3d, + 0x7c, 0x4a, 0x38, 0xff, 0x33, 0x40, 0xfd, 0xea, 0xf4, 0x5e, 0x83, 0x74, 0x76, 0xc7, 0xa5, 0x73, + 0xeb, 0x7a, 0xb9, 0xcd, 0x22, 0x9e, 0xbf, 0x19, 0xe0, 0x8d, 0x0b, 0xf6, 0x17, 0x7c, 0x1b, 0xe4, + 0x02, 0xde, 0x4b, 0x56, 0xf0, 0x42, 0x14, 0x9a, 0xb9, 0x67, 0x68, 0x07, 0x29, 0x0c, 0x1e, 0x82, + 0x05, 0x11, 0xab, 0x40, 0x92, 0xf9, 0x27, 0x33, 0x3d, 0x6f, 0x52, 0x39, 0x9c, 0x72, 0x14, 0x9a, + 0x0b, 0x43, 0x74, 0x48, 0x09, 0x1b, 0xa0, 0xe8, 0x62, 0x27, 0xf0, 0x5a, 0x89, 0x6a, 0x2d, 0x3a, + 0x8b, 0xaa, 0x48, 0x5b, 0x9b, 0x31, 0x86, 0x52, 0xab, 0xd3, 0x38, 0x39, 0xab, 0xce, 0xbd, 0x3c, + 0xab, 0xce, 0x9d, 0x9e, 0x55, 0xe7, 0x7e, 0x8a, 0xaa, 0xc6, 0x49, 0x54, 0x35, 0x5e, 0x46, 0x55, + 0xe3, 0x34, 0xaa, 0x1a, 0x7f, 0x47, 0x55, 0xe3, 0xe7, 0x7f, 0xaa, 0x73, 0xdf, 0xcd, 0x0f, 0xd6, + 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x84, 0xf2, 0xb0, 0x00, 0xeb, 0x0e, 0x00, 0x00, } func (m *MutatingWebhook) Marshal() (dAtA []byte, err error) { @@ -1858,10 +1858,7 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1978,10 +1975,7 @@ func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2098,10 +2092,7 @@ func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2280,10 +2271,7 @@ func (m *Rule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2398,10 +2386,7 @@ func (m *RuleWithOperations) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2568,10 +2553,7 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2943,10 +2925,7 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3063,10 +3042,7 @@ func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3183,10 +3159,7 @@ func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3339,10 +3312,7 @@ func (m *WebhookClientConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.proto b/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.proto index 16ab9d5d6..c23bb4bee 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1/generated.proto @@ -134,7 +134,7 @@ message MutatingWebhook { // SideEffects states whether this webhook has side effects. // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. optional string sideEffects = 6; @@ -384,7 +384,7 @@ message ValidatingWebhook { // SideEffects states whether this webhook has side effects. // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. optional string sideEffects = 6; diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1/register.go b/constraint/vendor/k8s.io/api/admissionregistration/v1/register.go index 716ce7fc5..e42a8bce3 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1/register.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1/register.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) +// GroupName is the group name for this API. const GroupName = "admissionregistration.k8s.io" // SchemeGroupVersion is group version used to register these objects @@ -32,12 +33,14 @@ func Resource(resource string) schema.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } +// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. +// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. var ( - // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. - // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme. + AddToScheme = localSchemeBuilder.AddToScheme ) // Adds the list of known types to scheme. diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1/types.go b/constraint/vendor/k8s.io/api/admissionregistration/v1/types.go index 74b878287..ff544c3a3 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1/types.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1/types.go @@ -63,6 +63,7 @@ type Rule struct { Scope *ScopeType `json:"scope,omitempty" protobuf:"bytes,4,rep,name=scope"` } +// ScopeType specifies a scope for a Rule. type ScopeType string const ( @@ -75,6 +76,7 @@ const ( AllScopes ScopeType = "*" ) +// FailurePolicyType specifies a failure policy that defines how unrecognized errors from the admission endpoint are handled. type FailurePolicyType string const ( @@ -84,16 +86,17 @@ const ( Fail FailurePolicyType = "Fail" ) -// MatchPolicyType specifies the type of match policy +// MatchPolicyType specifies the type of match policy. type MatchPolicyType string const ( - // Exact means requests should only be sent to the webhook if they exactly match a given rule + // Exact means requests should only be sent to the webhook if they exactly match a given rule. Exact MatchPolicyType = "Exact" // Equivalent means requests should be sent to the webhook if they modify a resource listed in rules via another API group or version. Equivalent MatchPolicyType = "Equivalent" ) +// SideEffectClass specifies the types of side effects a webhook may have. type SideEffectClass string const ( @@ -276,7 +279,7 @@ type ValidatingWebhook struct { // SideEffects states whether this webhook has side effects. // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. SideEffects *SideEffectClass `json:"sideEffects" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` @@ -405,7 +408,7 @@ type MutatingWebhook struct { // SideEffects states whether this webhook has side effects. // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. SideEffects *SideEffectClass `json:"sideEffects" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` @@ -472,6 +475,7 @@ type RuleWithOperations struct { Rule `json:",inline" protobuf:"bytes,2,opt,name=rule"` } +// OperationType specifies an operation for a request. type OperationType string // The constants should be kept in sync with those defined in k8s.io/kubernetes/pkg/admission/interface.go. diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go index 5ec59304c..ba92729c3 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go @@ -36,7 +36,7 @@ var map_MutatingWebhook = map[string]string{ "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Equivalent\"", "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", - "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", + "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission chain and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 10 seconds.", "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy.", "reinvocationPolicy": "reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. Allowed values are \"Never\" and \"IfNeeded\".\n\nNever: the webhook will not be called more than once in a single admission evaluation.\n\nIfNeeded: the webhook will be called at least one additional time as part of the admission evaluation if the object being admitted is modified by other admission plugins after the initial webhook call. Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. Note: * the number of additional invocations is not guaranteed to be exactly one. * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. * webhooks that use this option may be reordered to minimize the number of additional invocations. * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead.\n\nDefaults to \"Never\".", @@ -108,7 +108,7 @@ var map_ValidatingWebhook = map[string]string{ "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Equivalent\"", "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", - "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", + "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission chain and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 10 seconds.", "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy.", } diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go index c98aa7477..9f0988ca7 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go @@ -342,77 +342,77 @@ func init() { } var fileDescriptor_abeea74cbc46f55a = []byte{ - // 1114 bytes of a gzipped FileDescriptorProto + // 1112 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0x4d, 0x6f, 0x23, 0x45, - 0x13, 0xce, 0xc4, 0xf6, 0xda, 0x6e, 0x27, 0xbb, 0x9b, 0x7e, 0x5f, 0x76, 0x4d, 0x58, 0x79, 0x2c, - 0x1f, 0x90, 0x25, 0xd8, 0x99, 0x4d, 0x40, 0x08, 0x16, 0x10, 0x8a, 0x03, 0x0b, 0x91, 0x92, 0xdd, - 0xd0, 0xd9, 0x0f, 0x89, 0x0f, 0x69, 0xdb, 0xe3, 0xb2, 0xdd, 0xd8, 0x9e, 0x1e, 0x4d, 0xf7, 0x38, + 0x13, 0xce, 0xc4, 0xf6, 0xda, 0x6e, 0x27, 0x9b, 0x4d, 0xbf, 0x2f, 0xbb, 0x26, 0xac, 0x3c, 0x96, + 0x0f, 0xc8, 0x12, 0xec, 0xcc, 0x26, 0x20, 0x04, 0x0b, 0x08, 0xc5, 0x81, 0x85, 0x48, 0xc9, 0x6e, + 0xe8, 0xec, 0x87, 0xc4, 0x87, 0xb4, 0xed, 0x71, 0xd9, 0x6e, 0x6c, 0x4f, 0x8f, 0xa6, 0x7b, 0xbc, 0xe4, 0xc6, 0x4f, 0xe0, 0x2f, 0x70, 0xe2, 0x57, 0x70, 0xe0, 0x16, 0x6e, 0x7b, 0xdc, 0x0b, 0x23, 0x32, 0x9c, 0x38, 0x70, 0xe0, 0x9a, 0x13, 0x9a, 0x9e, 0xf6, 0xf8, 0x2b, 0x59, 0x4c, 0x90, 0xf6, 0x94, 0xdb, 0xf4, 0x53, 0x5d, 0x4f, 0x75, 0xd5, 0x54, 0xd5, 0x83, 0x3e, 0xef, 0xbd, 0x2b, 0x2c, 0xc6, 0xed, 0x5e, 0xd0, 0x04, 0xdf, 0x05, 0x09, 0xc2, 0x1e, 0x82, 0xdb, 0xe2, 0xbe, 0xad, 0x0d, 0xd4, 0x63, 0x36, 0x6d, 0x0d, 0x98, 0x10, 0x8c, 0xbb, 0x3e, 0x74, 0x98, 0x90, 0x3e, 0x95, 0x8c, - 0xbb, 0xf6, 0x70, 0xa3, 0x09, 0x92, 0x6e, 0xd8, 0x1d, 0x70, 0xc1, 0xa7, 0x12, 0x5a, 0x96, 0xe7, - 0x73, 0xc9, 0x71, 0x3d, 0xf1, 0xb4, 0xa8, 0xc7, 0xac, 0x33, 0x3d, 0x2d, 0xed, 0xb9, 0x7e, 0xbb, + 0xbb, 0xf6, 0x70, 0xb3, 0x09, 0x92, 0x6e, 0xda, 0x1d, 0x70, 0xc1, 0xa7, 0x12, 0x5a, 0x96, 0xe7, + 0x73, 0xc9, 0x71, 0x3d, 0xf1, 0xb4, 0xa8, 0xc7, 0xac, 0x33, 0x3d, 0x2d, 0xed, 0xb9, 0x71, 0xab, 0xc3, 0x64, 0x37, 0x68, 0x5a, 0x0e, 0x1f, 0xd8, 0x1d, 0xde, 0xe1, 0xb6, 0x22, 0x68, 0x06, 0x6d, - 0x75, 0x52, 0x07, 0xf5, 0x95, 0x10, 0xaf, 0xbf, 0x3d, 0x7e, 0xd2, 0x80, 0x3a, 0x5d, 0xe6, 0x82, - 0x7f, 0x64, 0x7b, 0xbd, 0x4e, 0x0c, 0x08, 0x7b, 0x00, 0x92, 0xda, 0xc3, 0xb9, 0xe7, 0xac, 0xdb, + 0x75, 0x52, 0x07, 0xf5, 0x95, 0x10, 0x6f, 0xbc, 0x3d, 0x7e, 0xd2, 0x80, 0x3a, 0x5d, 0xe6, 0x82, + 0x7f, 0x64, 0x7b, 0xbd, 0x4e, 0x0c, 0x08, 0x7b, 0x00, 0x92, 0xda, 0xc3, 0xb9, 0xe7, 0x6c, 0xd8, 0xe7, 0x79, 0xf9, 0x81, 0x2b, 0xd9, 0x00, 0xe6, 0x1c, 0xde, 0xf9, 0x27, 0x07, 0xe1, 0x74, 0x61, - 0x40, 0x67, 0xfd, 0x6a, 0xbf, 0xe4, 0xd1, 0xb5, 0xbd, 0x40, 0x52, 0xc9, 0xdc, 0xce, 0x13, 0x68, - 0x76, 0x39, 0xef, 0xe1, 0x2a, 0xca, 0xba, 0x74, 0x00, 0x65, 0xa3, 0x6a, 0xd4, 0x8b, 0x8d, 0x95, - 0xe3, 0xd0, 0x5c, 0x8a, 0x42, 0x33, 0x7b, 0x9f, 0x0e, 0x80, 0x28, 0x0b, 0x3e, 0x44, 0x2b, 0x4e, - 0x9f, 0x81, 0x2b, 0xb7, 0xb9, 0xdb, 0x66, 0x9d, 0xf2, 0x72, 0xd5, 0xa8, 0x97, 0x36, 0x3f, 0xb4, - 0x16, 0x2d, 0xa2, 0xa5, 0x43, 0x6d, 0x4f, 0x90, 0x34, 0xfe, 0xaf, 0x03, 0xad, 0x4c, 0xa2, 0x64, - 0x2a, 0x10, 0xa6, 0x28, 0xe7, 0x07, 0x7d, 0x10, 0xe5, 0x4c, 0x35, 0x53, 0x2f, 0x6d, 0x7e, 0xb0, - 0x78, 0x44, 0x12, 0xf4, 0xe1, 0x09, 0x93, 0xdd, 0x07, 0x1e, 0x24, 0x16, 0xd1, 0x58, 0xd5, 0x01, - 0x73, 0xb1, 0x4d, 0x90, 0x84, 0x19, 0xef, 0xa2, 0xd5, 0x36, 0x65, 0xfd, 0xc0, 0x87, 0x7d, 0xde, - 0x67, 0xce, 0x51, 0x39, 0xab, 0xca, 0xf0, 0x7a, 0x14, 0x9a, 0xab, 0xf7, 0x26, 0x0d, 0xa7, 0xa1, - 0xb9, 0x36, 0x05, 0x3c, 0x3c, 0xf2, 0x80, 0x4c, 0x3b, 0xe3, 0x8f, 0x51, 0x69, 0x40, 0xa5, 0xd3, - 0xd5, 0x5c, 0x45, 0xc5, 0x55, 0x8b, 0x42, 0xb3, 0xb4, 0x37, 0x86, 0x4f, 0x43, 0xf3, 0xda, 0xc4, - 0x51, 0xf1, 0x4c, 0xba, 0xe1, 0x6f, 0xd1, 0x5a, 0x5c, 0x77, 0xe1, 0x51, 0x07, 0x0e, 0xa0, 0x0f, - 0x8e, 0xe4, 0x7e, 0x39, 0xa7, 0x8a, 0xfe, 0xd6, 0x44, 0x09, 0xd2, 0x3f, 0x6f, 0x79, 0xbd, 0x4e, - 0x0c, 0x08, 0x2b, 0x6e, 0x30, 0x6b, 0xb8, 0x61, 0xed, 0xd2, 0x26, 0xf4, 0x47, 0xae, 0x8d, 0x57, - 0xa2, 0xd0, 0x5c, 0xbb, 0x3f, 0xcb, 0x48, 0xe6, 0x83, 0x60, 0x8e, 0xae, 0xf2, 0xe6, 0x37, 0xe0, - 0xc8, 0x34, 0x6c, 0xe9, 0xe2, 0x61, 0x71, 0x14, 0x9a, 0x57, 0x1f, 0x4c, 0xd1, 0x91, 0x19, 0xfa, - 0xb8, 0x60, 0x82, 0xb5, 0xe0, 0x93, 0x76, 0x1b, 0x1c, 0x29, 0xca, 0x57, 0xc6, 0x05, 0x3b, 0x18, - 0xc3, 0x71, 0xc1, 0xc6, 0xc7, 0xed, 0x3e, 0x15, 0x82, 0x4c, 0xba, 0xe1, 0xbb, 0xe8, 0x6a, 0xdc, - 0xf5, 0x3c, 0x90, 0x07, 0xe0, 0x70, 0xb7, 0x25, 0xca, 0xf9, 0xaa, 0x51, 0xcf, 0x25, 0x2f, 0x78, - 0x38, 0x65, 0x21, 0x33, 0x37, 0xf1, 0x23, 0x74, 0x33, 0x6d, 0x25, 0x02, 0x43, 0x06, 0x87, 0x8f, - 0xc1, 0x8f, 0x0f, 0xa2, 0x5c, 0xa8, 0x66, 0xea, 0xc5, 0xc6, 0x6b, 0x51, 0x68, 0xde, 0xdc, 0x3a, - 0xfb, 0x0a, 0x39, 0xcf, 0x17, 0x3f, 0x45, 0xd8, 0x07, 0xe6, 0x0e, 0xb9, 0xa3, 0xda, 0x4f, 0x37, - 0x04, 0x52, 0xf9, 0xdd, 0x89, 0x42, 0x13, 0x93, 0x39, 0xeb, 0x69, 0x68, 0xde, 0x98, 0x47, 0x55, - 0x7b, 0x9c, 0xc1, 0x55, 0xfb, 0xd5, 0x40, 0xb7, 0x66, 0x66, 0x39, 0x19, 0x9b, 0x20, 0xe9, 0x78, - 0xfc, 0x14, 0x15, 0xe2, 0x1f, 0xd3, 0xa2, 0x92, 0xaa, 0xe1, 0x2e, 0x6d, 0xde, 0x59, 0xec, 0x37, - 0x26, 0xff, 0x6c, 0x0f, 0x24, 0x6d, 0x60, 0x3d, 0x34, 0x68, 0x8c, 0x91, 0x94, 0x15, 0x7f, 0x89, + 0x40, 0x67, 0xfd, 0x6a, 0xbf, 0xe4, 0xd1, 0xda, 0x7e, 0x20, 0xa9, 0x64, 0x6e, 0xe7, 0x31, 0x34, + 0xbb, 0x9c, 0xf7, 0x70, 0x15, 0x65, 0x5d, 0x3a, 0x80, 0xb2, 0x51, 0x35, 0xea, 0xc5, 0xc6, 0xca, + 0x71, 0x68, 0x2e, 0x45, 0xa1, 0x99, 0xbd, 0x47, 0x07, 0x40, 0x94, 0x05, 0x3f, 0x45, 0x2b, 0x4e, + 0x9f, 0x81, 0x2b, 0x77, 0xb8, 0xdb, 0x66, 0x9d, 0xf2, 0x72, 0xd5, 0xa8, 0x97, 0xb6, 0x3e, 0xb4, + 0x16, 0x2d, 0xa2, 0xa5, 0x43, 0xed, 0x4c, 0x90, 0x34, 0xfe, 0xaf, 0x03, 0xad, 0x4c, 0xa2, 0x64, + 0x2a, 0x10, 0xa6, 0x28, 0xe7, 0x07, 0x7d, 0x10, 0xe5, 0x4c, 0x35, 0x53, 0x2f, 0x6d, 0x7d, 0xb0, + 0x78, 0x44, 0x12, 0xf4, 0xe1, 0x31, 0x93, 0xdd, 0xfb, 0x1e, 0x24, 0x16, 0xd1, 0x58, 0xd5, 0x01, + 0x73, 0xb1, 0x4d, 0x90, 0x84, 0x19, 0xef, 0xa1, 0xd5, 0x36, 0x65, 0xfd, 0xc0, 0x87, 0x03, 0xde, + 0x67, 0xce, 0x51, 0x39, 0xab, 0xca, 0xf0, 0x7a, 0x14, 0x9a, 0xab, 0x77, 0x27, 0x0d, 0xa7, 0xa1, + 0xb9, 0x3e, 0x05, 0x3c, 0x38, 0xf2, 0x80, 0x4c, 0x3b, 0xe3, 0x8f, 0x51, 0x69, 0x40, 0xa5, 0xd3, + 0xd5, 0x5c, 0x45, 0xc5, 0x55, 0x8b, 0x42, 0xb3, 0xb4, 0x3f, 0x86, 0x4f, 0x43, 0x73, 0x6d, 0xe2, + 0xa8, 0x78, 0x26, 0xdd, 0xf0, 0xb7, 0x68, 0x3d, 0xae, 0xbb, 0xf0, 0xa8, 0x03, 0x87, 0xd0, 0x07, + 0x47, 0x72, 0xbf, 0x9c, 0x53, 0x45, 0x7f, 0x6b, 0xa2, 0x04, 0xe9, 0x9f, 0xb7, 0xbc, 0x5e, 0x27, + 0x06, 0x84, 0x15, 0x37, 0x98, 0x35, 0xdc, 0xb4, 0xf6, 0x68, 0x13, 0xfa, 0x23, 0xd7, 0xc6, 0x2b, + 0x51, 0x68, 0xae, 0xdf, 0x9b, 0x65, 0x24, 0xf3, 0x41, 0x30, 0x47, 0x57, 0x79, 0xf3, 0x1b, 0x70, + 0x64, 0x1a, 0xb6, 0x74, 0xf1, 0xb0, 0x38, 0x0a, 0xcd, 0xab, 0xf7, 0xa7, 0xe8, 0xc8, 0x0c, 0x7d, + 0x5c, 0x30, 0xc1, 0x5a, 0xf0, 0x49, 0xbb, 0x0d, 0x8e, 0x14, 0xe5, 0x2b, 0xe3, 0x82, 0x1d, 0x8e, + 0xe1, 0xb8, 0x60, 0xe3, 0xe3, 0x4e, 0x9f, 0x0a, 0x41, 0x26, 0xdd, 0xf0, 0x1d, 0x74, 0x35, 0xee, + 0x7a, 0x1e, 0xc8, 0x43, 0x70, 0xb8, 0xdb, 0x12, 0xe5, 0x7c, 0xd5, 0xa8, 0xe7, 0x92, 0x17, 0x3c, + 0x98, 0xb2, 0x90, 0x99, 0x9b, 0xf8, 0x21, 0xba, 0x91, 0xb6, 0x12, 0x81, 0x21, 0x83, 0xa7, 0x8f, + 0xc0, 0x8f, 0x0f, 0xa2, 0x5c, 0xa8, 0x66, 0xea, 0xc5, 0xc6, 0x6b, 0x51, 0x68, 0xde, 0xd8, 0x3e, + 0xfb, 0x0a, 0x39, 0xcf, 0x17, 0x3f, 0x41, 0xd8, 0x07, 0xe6, 0x0e, 0xb9, 0xa3, 0xda, 0x4f, 0x37, + 0x04, 0x52, 0xf9, 0xdd, 0x8e, 0x42, 0x13, 0x93, 0x39, 0xeb, 0x69, 0x68, 0x5e, 0x9f, 0x47, 0x55, + 0x7b, 0x9c, 0xc1, 0x55, 0xfb, 0xd5, 0x40, 0x37, 0x67, 0x66, 0x39, 0x19, 0x9b, 0x20, 0xe9, 0x78, + 0xfc, 0x04, 0x15, 0xe2, 0x1f, 0xd3, 0xa2, 0x92, 0xaa, 0xe1, 0x2e, 0x6d, 0xdd, 0x5e, 0xec, 0x37, + 0x26, 0xff, 0x6c, 0x1f, 0x24, 0x6d, 0x60, 0x3d, 0x34, 0x68, 0x8c, 0x91, 0x94, 0x15, 0x7f, 0x89, 0x0a, 0x3a, 0xb2, 0x28, 0x2f, 0xab, 0x11, 0x7d, 0x6f, 0xf1, 0x11, 0x9d, 0x79, 0x7b, 0x23, 0x1b, - 0x87, 0x22, 0x85, 0x43, 0x4d, 0x58, 0xfb, 0xd3, 0x40, 0xd5, 0x17, 0xe5, 0xb7, 0xcb, 0x84, 0xc4, - 0x5f, 0xcd, 0xe5, 0x68, 0x2d, 0xd8, 0xaa, 0x4c, 0x24, 0x19, 0x5e, 0xd7, 0x19, 0x16, 0x46, 0xc8, - 0x44, 0x7e, 0x3d, 0x94, 0x63, 0x12, 0x06, 0xa3, 0xe4, 0xee, 0x5d, 0x38, 0xb9, 0xa9, 0x87, 0x8f, - 0x37, 0xd1, 0x4e, 0x4c, 0x4e, 0x92, 0x18, 0xb5, 0x9f, 0x0d, 0x94, 0x8d, 0x57, 0x13, 0x7e, 0x03, - 0x15, 0xa9, 0xc7, 0x3e, 0xf5, 0x79, 0xe0, 0x89, 0xb2, 0xa1, 0x7a, 0x70, 0x35, 0x0a, 0xcd, 0xe2, - 0xd6, 0xfe, 0x4e, 0x02, 0x92, 0xb1, 0x1d, 0x6f, 0xa0, 0x12, 0xf5, 0x58, 0xda, 0xb2, 0xcb, 0xea, - 0xfa, 0xb5, 0x78, 0x80, 0xb6, 0xf6, 0x77, 0xd2, 0x36, 0x9d, 0xbc, 0x13, 0xf3, 0xfb, 0x20, 0x78, - 0xe0, 0x3b, 0x7a, 0xb3, 0x6a, 0x7e, 0x32, 0x02, 0xc9, 0xd8, 0x8e, 0xdf, 0x44, 0x39, 0xe1, 0x70, - 0x0f, 0xf4, 0x5e, 0xbc, 0x11, 0x3f, 0xfb, 0x20, 0x06, 0x4e, 0x43, 0xb3, 0xa8, 0x3e, 0x54, 0x83, - 0x26, 0x97, 0x6a, 0x3f, 0x1a, 0x08, 0xcf, 0xaf, 0x5e, 0xfc, 0x11, 0x42, 0x3c, 0x3d, 0xe9, 0x94, - 0x4c, 0xd5, 0x55, 0x29, 0x7a, 0x1a, 0x9a, 0xab, 0xe9, 0x49, 0x51, 0x4e, 0xb8, 0xe0, 0x7d, 0x94, - 0x8d, 0xd7, 0xb5, 0x56, 0x1e, 0xeb, 0xdf, 0xe9, 0xc0, 0x58, 0xd3, 0xe2, 0x13, 0x51, 0x4c, 0xb5, - 0x1f, 0x0c, 0x74, 0xfd, 0x00, 0xfc, 0x21, 0x73, 0x80, 0x40, 0x1b, 0x7c, 0x70, 0x1d, 0xc0, 0x36, - 0x2a, 0xa6, 0x3b, 0x51, 0xeb, 0xe1, 0x9a, 0xf6, 0x2d, 0xa6, 0xfb, 0x93, 0x8c, 0xef, 0xa4, 0xda, - 0xb9, 0x7c, 0xae, 0x76, 0xde, 0x42, 0x59, 0x8f, 0xca, 0x6e, 0x39, 0xa3, 0x6e, 0x14, 0x62, 0xeb, - 0x3e, 0x95, 0x5d, 0xa2, 0x50, 0x65, 0xe5, 0xbe, 0x54, 0xc5, 0xcd, 0x69, 0x2b, 0xf7, 0x25, 0x51, - 0x68, 0xed, 0x8f, 0x2b, 0x68, 0xed, 0x31, 0xed, 0xb3, 0xd6, 0xa5, 0x5e, 0x5f, 0xea, 0xf5, 0x82, - 0x7a, 0x8d, 0x2e, 0xf5, 0xfa, 0x22, 0x7a, 0x5d, 0x3b, 0x31, 0x50, 0x65, 0x6e, 0xd6, 0x5e, 0xb6, - 0x9e, 0x7e, 0x3d, 0xa7, 0xa7, 0xef, 0x2f, 0x3e, 0x42, 0x73, 0xaf, 0x9f, 0x53, 0xd4, 0xbf, 0x0c, - 0x54, 0x7b, 0x71, 0x8e, 0x2f, 0x41, 0x53, 0x07, 0xd3, 0x9a, 0xfa, 0xd9, 0x7f, 0x48, 0x70, 0x11, - 0x55, 0xfd, 0xc9, 0x40, 0xff, 0x3b, 0x63, 0x9d, 0xe1, 0x57, 0x51, 0x26, 0xf0, 0xfb, 0x7a, 0x2d, - 0xe7, 0xa3, 0xd0, 0xcc, 0x3c, 0x22, 0xbb, 0x24, 0xc6, 0x30, 0x45, 0x79, 0x91, 0x28, 0x83, 0x4e, - 0xff, 0xee, 0xe2, 0x6f, 0x9c, 0x95, 0x94, 0x46, 0x29, 0x0a, 0xcd, 0xfc, 0x08, 0x1d, 0xf1, 0xe2, - 0x3a, 0x2a, 0x38, 0xb4, 0x11, 0xb8, 0x2d, 0xad, 0x69, 0x2b, 0x8d, 0x95, 0xb8, 0x5c, 0xdb, 0x5b, - 0x09, 0x46, 0x52, 0x6b, 0xe3, 0xf6, 0xf1, 0x49, 0x65, 0xe9, 0xd9, 0x49, 0x65, 0xe9, 0xf9, 0x49, - 0x65, 0xe9, 0xbb, 0xa8, 0x62, 0x1c, 0x47, 0x15, 0xe3, 0x59, 0x54, 0x31, 0x9e, 0x47, 0x15, 0xe3, - 0xb7, 0xa8, 0x62, 0x7c, 0xff, 0x7b, 0x65, 0xe9, 0x8b, 0xbc, 0x8e, 0xff, 0x77, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xae, 0x27, 0x2b, 0xcb, 0x2c, 0x0f, 0x00, 0x00, + 0x87, 0x22, 0x29, 0x61, 0xed, 0x4f, 0x03, 0x55, 0x5f, 0x94, 0xdf, 0x1e, 0x13, 0x12, 0x7f, 0x35, + 0x97, 0xa3, 0xb5, 0x60, 0xab, 0x32, 0x91, 0x64, 0x78, 0x4d, 0x67, 0x58, 0x18, 0x21, 0x13, 0xf9, + 0xf5, 0x50, 0x8e, 0x49, 0x18, 0x8c, 0x92, 0xbb, 0x7b, 0xe1, 0xe4, 0xa6, 0x1e, 0x3e, 0xde, 0x44, + 0xbb, 0x31, 0x39, 0x49, 0x62, 0xd4, 0x7e, 0x36, 0x50, 0x36, 0x5e, 0x4d, 0xf8, 0x0d, 0x54, 0xa4, + 0x1e, 0xfb, 0xd4, 0xe7, 0x81, 0x27, 0xca, 0x86, 0xea, 0xc1, 0xd5, 0x28, 0x34, 0x8b, 0xdb, 0x07, + 0xbb, 0x09, 0x48, 0xc6, 0x76, 0xbc, 0x89, 0x4a, 0xd4, 0x63, 0x69, 0xcb, 0x2e, 0xab, 0xeb, 0x6b, + 0xf1, 0x00, 0x6d, 0x1f, 0xec, 0xa6, 0x6d, 0x3a, 0x79, 0x27, 0xe6, 0xf7, 0x41, 0xf0, 0xc0, 0x77, + 0xf4, 0x66, 0xd5, 0xfc, 0x64, 0x04, 0x92, 0xb1, 0x1d, 0xbf, 0x89, 0x72, 0xc2, 0xe1, 0x1e, 0xe8, + 0xbd, 0x78, 0x3d, 0x7e, 0xf6, 0x61, 0x0c, 0x9c, 0x86, 0x66, 0x51, 0x7d, 0xa8, 0x06, 0x4d, 0x2e, + 0xd5, 0x7e, 0x34, 0x10, 0x9e, 0x5f, 0xbd, 0xf8, 0x23, 0x84, 0x78, 0x7a, 0xd2, 0x29, 0x99, 0xaa, + 0xab, 0x52, 0xf4, 0x34, 0x34, 0x57, 0xd3, 0x93, 0xa2, 0x9c, 0x70, 0xc1, 0x07, 0x28, 0x1b, 0xaf, + 0x6b, 0xad, 0x3c, 0xd6, 0xbf, 0xd3, 0x81, 0xb1, 0xa6, 0xc5, 0x27, 0xa2, 0x98, 0x6a, 0x3f, 0x18, + 0xe8, 0xda, 0x21, 0xf8, 0x43, 0xe6, 0x00, 0x81, 0x36, 0xf8, 0xe0, 0x3a, 0x80, 0x6d, 0x54, 0x4c, + 0x77, 0xa2, 0xd6, 0xc3, 0x75, 0xed, 0x5b, 0x4c, 0xf7, 0x27, 0x19, 0xdf, 0x49, 0xb5, 0x73, 0xf9, + 0x5c, 0xed, 0xbc, 0x89, 0xb2, 0x1e, 0x95, 0xdd, 0x72, 0x46, 0xdd, 0x28, 0xc4, 0xd6, 0x03, 0x2a, + 0xbb, 0x44, 0xa1, 0xca, 0xca, 0x7d, 0xa9, 0x8a, 0x9b, 0xd3, 0x56, 0xee, 0x4b, 0xa2, 0xd0, 0xda, + 0x1f, 0x57, 0xd0, 0xfa, 0x23, 0xda, 0x67, 0xad, 0x4b, 0xbd, 0xbe, 0xd4, 0xeb, 0x05, 0xf5, 0x1a, + 0x5d, 0xea, 0xf5, 0x45, 0xf4, 0xba, 0x76, 0x62, 0xa0, 0xca, 0xdc, 0xac, 0xbd, 0x6c, 0x3d, 0xfd, + 0x7a, 0x4e, 0x4f, 0xdf, 0x5f, 0x7c, 0x84, 0xe6, 0x5e, 0x3f, 0xa7, 0xa8, 0x7f, 0x19, 0xa8, 0xf6, + 0xe2, 0x1c, 0x5f, 0x82, 0xa6, 0x0e, 0xa6, 0x35, 0xf5, 0xb3, 0xff, 0x90, 0xe0, 0x22, 0xaa, 0xfa, + 0x93, 0x81, 0xfe, 0x77, 0xc6, 0x3a, 0xc3, 0xaf, 0xa2, 0x4c, 0xe0, 0xf7, 0xf5, 0x5a, 0xce, 0x47, + 0xa1, 0x99, 0x79, 0x48, 0xf6, 0x48, 0x8c, 0x61, 0x8a, 0xf2, 0x22, 0x51, 0x06, 0x9d, 0xfe, 0x9d, + 0xc5, 0xdf, 0x38, 0x2b, 0x29, 0x8d, 0x52, 0x14, 0x9a, 0xf9, 0x11, 0x3a, 0xe2, 0xc5, 0x75, 0x54, + 0x70, 0x68, 0x23, 0x70, 0x5b, 0x5a, 0xd3, 0x56, 0x1a, 0x2b, 0x71, 0xb9, 0x76, 0xb6, 0x13, 0x8c, + 0xa4, 0xd6, 0xc6, 0xad, 0xe3, 0x93, 0xca, 0xd2, 0xb3, 0x93, 0xca, 0xd2, 0xf3, 0x93, 0xca, 0xd2, + 0x77, 0x51, 0xc5, 0x38, 0x8e, 0x2a, 0xc6, 0xb3, 0xa8, 0x62, 0x3c, 0x8f, 0x2a, 0xc6, 0x6f, 0x51, + 0xc5, 0xf8, 0xfe, 0xf7, 0xca, 0xd2, 0x17, 0x79, 0x1d, 0xff, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xcc, 0x27, 0xa9, 0x41, 0x2c, 0x0f, 0x00, 0x00, } func (m *MutatingWebhook) Marshal() (dAtA []byte, err error) { @@ -1859,10 +1859,7 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1979,10 +1976,7 @@ func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2099,10 +2093,7 @@ func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2281,10 +2272,7 @@ func (m *Rule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2399,10 +2387,7 @@ func (m *RuleWithOperations) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2569,10 +2554,7 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2944,10 +2926,7 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3064,10 +3043,7 @@ func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3184,10 +3160,7 @@ func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3340,10 +3313,7 @@ func (m *WebhookClientConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto index bdae74037..2752f4fae 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto @@ -134,7 +134,7 @@ message MutatingWebhook { // SideEffects states whether this webhook has side effects. // Acceptable values are: Unknown, None, Some, NoneOnDryRun // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. Defaults to Unknown. // +optional @@ -388,7 +388,7 @@ message ValidatingWebhook { // SideEffects states whether this webhook has side effects. // Acceptable values are: Unknown, None, Some, NoneOnDryRun // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. Defaults to Unknown. // +optional diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/register.go b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/register.go index d126da9fb..098744cf6 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/register.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/register.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) +// GroupName is the group name for this API. const GroupName = "admissionregistration.k8s.io" // SchemeGroupVersion is group version used to register these objects @@ -32,12 +33,14 @@ func Resource(resource string) schema.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } +// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. +// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. var ( - // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. - // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + // SchemeBuilder points to a list of functions added to Scheme. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme. + AddToScheme = localSchemeBuilder.AddToScheme ) // Adds the list of known types to scheme. diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types.go b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types.go index 2297b7e13..630ea1f57 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types.go @@ -63,6 +63,7 @@ type Rule struct { Scope *ScopeType `json:"scope,omitempty" protobuf:"bytes,4,rep,name=scope"` } +// ScopeType specifies a scope for a Rule. type ScopeType string const ( @@ -75,6 +76,7 @@ const ( AllScopes ScopeType = "*" ) +// FailurePolicyType specifies a failure policy that defines how unrecognized errors from the admission endpoint are handled. type FailurePolicyType string const ( @@ -94,6 +96,7 @@ const ( Equivalent MatchPolicyType = "Equivalent" ) +// SideEffectClass specifies the types of side effects a webhook may have. type SideEffectClass string const ( @@ -294,7 +297,7 @@ type ValidatingWebhook struct { // SideEffects states whether this webhook has side effects. // Acceptable values are: Unknown, None, Some, NoneOnDryRun // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. Defaults to Unknown. // +optional @@ -426,7 +429,7 @@ type MutatingWebhook struct { // SideEffects states whether this webhook has side effects. // Acceptable values are: Unknown, None, Some, NoneOnDryRun // Webhooks with side effects MUST implement a reconciliation system, since a request may be - // rejected by a future step in the admission change and the side effects therefore need to be undone. + // rejected by a future step in the admission chain and the side effects therefore need to be undone. // Requests with the dryRun attribute will be auto-rejected if they match a webhook with // sideEffects == Unknown or Some. Defaults to Unknown. // +optional @@ -496,6 +499,7 @@ type RuleWithOperations struct { Rule `json:",inline" protobuf:"bytes,2,opt,name=rule"` } +// OperationType specifies an operation for a request. type OperationType string // The constants should be kept in sync with those defined in k8s.io/kubernetes/pkg/admission/interface.go. diff --git a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go index f682172bb..314c3afae 100644 --- a/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go @@ -36,7 +36,7 @@ var map_MutatingWebhook = map[string]string{ "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Exact\"", "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", - "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", + "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission chain and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", "reinvocationPolicy": "reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. Allowed values are \"Never\" and \"IfNeeded\".\n\nNever: the webhook will not be called more than once in a single admission evaluation.\n\nIfNeeded: the webhook will be called at least one additional time as part of the admission evaluation if the object being admitted is modified by other admission plugins after the initial webhook call. Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. Note: * the number of additional invocations is not guaranteed to be exactly one. * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. * webhooks that use this option may be reordered to minimize the number of additional invocations. * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead.\n\nDefaults to \"Never\".", @@ -108,7 +108,7 @@ var map_ValidatingWebhook = map[string]string{ "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Exact\"", "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", - "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", + "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission chain and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", } diff --git a/constraint/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go index 0af1c09d1..ee12c7d0d 100644 --- a/constraint/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go @@ -902,10 +902,7 @@ func (m *ServerStorageVersion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1054,10 +1051,7 @@ func (m *StorageVersion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1287,10 +1281,7 @@ func (m *StorageVersionCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1407,10 +1398,7 @@ func (m *StorageVersionList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1460,10 +1448,7 @@ func (m *StorageVersionSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1614,10 +1599,7 @@ func (m *StorageVersionStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/apps/v1/generated.pb.go b/constraint/vendor/k8s.io/api/apps/v1/generated.pb.go index 6ef25f50f..19fe45638 100644 --- a/constraint/vendor/k8s.io/api/apps/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/apps/v1/generated.pb.go @@ -870,132 +870,132 @@ func init() { var fileDescriptor_e1014cab6f31e43b = []byte{ // 2031 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x24, 0x47, - 0x1d, 0x75, 0xcf, 0x87, 0x3d, 0x2e, 0xaf, 0xed, 0xdd, 0xb2, 0xb1, 0x27, 0xbb, 0x64, 0x66, 0x19, + 0x15, 0x77, 0xcf, 0x87, 0x3d, 0x2e, 0xaf, 0xed, 0xdd, 0xb2, 0xb1, 0x27, 0xbb, 0x64, 0x66, 0x19, 0x60, 0xe3, 0x64, 0xb3, 0x3d, 0xec, 0x66, 0x13, 0xa1, 0x2c, 0x02, 0x79, 0xc6, 0x21, 0x84, 0x78, 0x6c, 0x53, 0x5e, 0xef, 0x61, 0x09, 0x12, 0xe5, 0xe9, 0xda, 0x71, 0xc7, 0xfd, 0xa5, 0xee, 0xea, - 0x61, 0x47, 0x5c, 0x10, 0x12, 0x9c, 0x38, 0xf0, 0x9f, 0x20, 0x84, 0xe0, 0x86, 0x22, 0xc4, 0x65, - 0x2f, 0x48, 0x11, 0x17, 0x72, 0xb2, 0xd8, 0xc9, 0x09, 0xa1, 0x1c, 0xb9, 0xe4, 0x02, 0xaa, 0xea, - 0xea, 0xef, 0x6a, 0xcf, 0xd8, 0x9b, 0x38, 0x24, 0xca, 0xcd, 0x53, 0xf5, 0x7e, 0xaf, 0x7f, 0x55, - 0xf5, 0xab, 0x7a, 0xaf, 0xab, 0x0d, 0xee, 0x1d, 0x7f, 0xdb, 0x53, 0x75, 0xbb, 0x7d, 0xec, 0x1f, - 0x12, 0xd7, 0x22, 0x94, 0x78, 0xed, 0x21, 0xb1, 0x34, 0xdb, 0x6d, 0x8b, 0x0e, 0xec, 0xe8, 0x6d, - 0xec, 0x38, 0x5e, 0x7b, 0x78, 0xbb, 0x3d, 0x20, 0x16, 0x71, 0x31, 0x25, 0x9a, 0xea, 0xb8, 0x36, - 0xb5, 0x21, 0x0c, 0x30, 0x2a, 0x76, 0x74, 0x95, 0x61, 0xd4, 0xe1, 0xed, 0xab, 0xb7, 0x06, 0x3a, - 0x3d, 0xf2, 0x0f, 0xd5, 0xbe, 0x6d, 0xb6, 0x07, 0xf6, 0xc0, 0x6e, 0x73, 0xe8, 0xa1, 0xff, 0x88, - 0xff, 0xe2, 0x3f, 0xf8, 0x5f, 0x01, 0xc5, 0xd5, 0x56, 0xe2, 0x31, 0x7d, 0xdb, 0x25, 0x92, 0xc7, - 0x5c, 0xbd, 0x1b, 0x63, 0x4c, 0xdc, 0x3f, 0xd2, 0x2d, 0xe2, 0x8e, 0xda, 0xce, 0xf1, 0x80, 0x35, - 0x78, 0x6d, 0x93, 0x50, 0x2c, 0x8b, 0x6a, 0x17, 0x45, 0xb9, 0xbe, 0x45, 0x75, 0x93, 0xe4, 0x02, - 0x5e, 0x9b, 0x14, 0xe0, 0xf5, 0x8f, 0x88, 0x89, 0x73, 0x71, 0xaf, 0x14, 0xc5, 0xf9, 0x54, 0x37, - 0xda, 0xba, 0x45, 0x3d, 0xea, 0x66, 0x83, 0x5a, 0xff, 0x51, 0x00, 0xec, 0xda, 0x16, 0x75, 0x6d, - 0xc3, 0x20, 0x2e, 0x22, 0x43, 0xdd, 0xd3, 0x6d, 0x0b, 0xfe, 0x14, 0xd4, 0xd8, 0x78, 0x34, 0x4c, - 0x71, 0x5d, 0xb9, 0xae, 0x6c, 0x2c, 0xdc, 0xf9, 0x96, 0x1a, 0x4f, 0x72, 0x44, 0xaf, 0x3a, 0xc7, - 0x03, 0xd6, 0xe0, 0xa9, 0x0c, 0xad, 0x0e, 0x6f, 0xab, 0xbb, 0x87, 0xef, 0x92, 0x3e, 0xed, 0x11, - 0x8a, 0x3b, 0xf0, 0xc9, 0x49, 0x73, 0x66, 0x7c, 0xd2, 0x04, 0x71, 0x1b, 0x8a, 0x58, 0xe1, 0x2e, - 0xa8, 0x70, 0xf6, 0x12, 0x67, 0xbf, 0x55, 0xc8, 0x2e, 0x06, 0xad, 0x22, 0xfc, 0xb3, 0x37, 0x1e, - 0x53, 0x62, 0xb1, 0xf4, 0x3a, 0x97, 0x04, 0x75, 0x65, 0x0b, 0x53, 0x8c, 0x38, 0x11, 0x7c, 0x19, - 0xd4, 0x5c, 0x91, 0x7e, 0xbd, 0x7c, 0x5d, 0xd9, 0x28, 0x77, 0x2e, 0x0b, 0x54, 0x2d, 0x1c, 0x16, - 0x8a, 0x10, 0xad, 0xbf, 0x2a, 0x60, 0x2d, 0x3f, 0xee, 0x6d, 0xdd, 0xa3, 0xf0, 0x9d, 0xdc, 0xd8, - 0xd5, 0xe9, 0xc6, 0xce, 0xa2, 0xf9, 0xc8, 0xa3, 0x07, 0x87, 0x2d, 0x89, 0x71, 0xbf, 0x0d, 0xaa, - 0x3a, 0x25, 0xa6, 0x57, 0x2f, 0x5d, 0x2f, 0x6f, 0x2c, 0xdc, 0xb9, 0xa1, 0xe6, 0x6b, 0x57, 0xcd, - 0x27, 0xd6, 0x59, 0x14, 0x94, 0xd5, 0xb7, 0x58, 0x30, 0x0a, 0x38, 0x5a, 0xff, 0x55, 0xc0, 0xfc, - 0x16, 0x26, 0xa6, 0x6d, 0xed, 0x13, 0x7a, 0x01, 0x8b, 0xd6, 0x05, 0x15, 0xcf, 0x21, 0x7d, 0xb1, - 0x68, 0x5f, 0x93, 0xe5, 0x1e, 0xa5, 0xb3, 0xef, 0x90, 0x7e, 0xbc, 0x50, 0xec, 0x17, 0xe2, 0xc1, - 0xf0, 0x6d, 0x30, 0xeb, 0x51, 0x4c, 0x7d, 0x8f, 0x2f, 0xd3, 0xc2, 0x9d, 0xaf, 0x9f, 0x4e, 0xc3, - 0xa1, 0x9d, 0x25, 0x41, 0x34, 0x1b, 0xfc, 0x46, 0x82, 0xa2, 0xf5, 0xaf, 0x12, 0x80, 0x11, 0xb6, - 0x6b, 0x5b, 0x9a, 0x4e, 0x59, 0xfd, 0xbe, 0x0e, 0x2a, 0x74, 0xe4, 0x10, 0x3e, 0x0d, 0xf3, 0x9d, - 0x1b, 0x61, 0x16, 0xf7, 0x47, 0x0e, 0xf9, 0xf8, 0xa4, 0xb9, 0x96, 0x8f, 0x60, 0x3d, 0x88, 0xc7, - 0xc0, 0xed, 0x28, 0xbf, 0x12, 0x8f, 0xbe, 0x9b, 0x7e, 0xf4, 0xc7, 0x27, 0x4d, 0xc9, 0x61, 0xa1, - 0x46, 0x4c, 0xe9, 0x04, 0xe1, 0x10, 0x40, 0x03, 0x7b, 0xf4, 0xbe, 0x8b, 0x2d, 0x2f, 0x78, 0x92, - 0x6e, 0x12, 0x31, 0xf2, 0x97, 0xa6, 0x5b, 0x1e, 0x16, 0xd1, 0xb9, 0x2a, 0xb2, 0x80, 0xdb, 0x39, - 0x36, 0x24, 0x79, 0x02, 0xbc, 0x01, 0x66, 0x5d, 0x82, 0x3d, 0xdb, 0xaa, 0x57, 0xf8, 0x28, 0xa2, - 0x09, 0x44, 0xbc, 0x15, 0x89, 0x5e, 0xf8, 0x22, 0x98, 0x33, 0x89, 0xe7, 0xe1, 0x01, 0xa9, 0x57, - 0x39, 0x70, 0x59, 0x00, 0xe7, 0x7a, 0x41, 0x33, 0x0a, 0xfb, 0x5b, 0xbf, 0x57, 0xc0, 0x62, 0x34, - 0x73, 0x17, 0xb0, 0x55, 0x3a, 0xe9, 0xad, 0xf2, 0xfc, 0xa9, 0x75, 0x52, 0xb0, 0x43, 0xde, 0x2b, - 0x27, 0x72, 0x66, 0x45, 0x08, 0x7f, 0x02, 0x6a, 0x1e, 0x31, 0x48, 0x9f, 0xda, 0xae, 0xc8, 0xf9, - 0x95, 0x29, 0x73, 0xc6, 0x87, 0xc4, 0xd8, 0x17, 0xa1, 0x9d, 0x4b, 0x2c, 0xe9, 0xf0, 0x17, 0x8a, - 0x28, 0xe1, 0x8f, 0x40, 0x8d, 0x12, 0xd3, 0x31, 0x30, 0x25, 0x62, 0x9b, 0xa4, 0xea, 0x9b, 0x95, - 0x0b, 0x23, 0xdb, 0xb3, 0xb5, 0xfb, 0x02, 0xc6, 0x37, 0x4a, 0x34, 0x0f, 0x61, 0x2b, 0x8a, 0x68, - 0xe0, 0x31, 0x58, 0xf2, 0x1d, 0x8d, 0x21, 0x29, 0x3b, 0xba, 0x07, 0x23, 0x51, 0x3e, 0x37, 0x4f, - 0x9d, 0x90, 0x83, 0x54, 0x48, 0x67, 0x4d, 0x3c, 0x60, 0x29, 0xdd, 0x8e, 0x32, 0xd4, 0x70, 0x13, - 0x2c, 0x9b, 0xba, 0x85, 0x08, 0xd6, 0x46, 0xfb, 0xa4, 0x6f, 0x5b, 0x9a, 0xc7, 0x0b, 0xa8, 0xda, - 0x59, 0x17, 0x04, 0xcb, 0xbd, 0x74, 0x37, 0xca, 0xe2, 0xe1, 0x36, 0x58, 0x0d, 0xcf, 0xd9, 0x1f, - 0xe8, 0x1e, 0xb5, 0xdd, 0xd1, 0xb6, 0x6e, 0xea, 0xb4, 0x3e, 0xcb, 0x79, 0xea, 0xe3, 0x93, 0xe6, - 0x2a, 0x92, 0xf4, 0x23, 0x69, 0x54, 0xeb, 0x37, 0xb3, 0x60, 0x39, 0x73, 0x1a, 0xc0, 0x07, 0x60, - 0xad, 0xef, 0xbb, 0x2e, 0xb1, 0xe8, 0x8e, 0x6f, 0x1e, 0x12, 0x77, 0xbf, 0x7f, 0x44, 0x34, 0xdf, - 0x20, 0x1a, 0x5f, 0xd1, 0x6a, 0xa7, 0x21, 0x72, 0x5d, 0xeb, 0x4a, 0x51, 0xa8, 0x20, 0x1a, 0xfe, - 0x10, 0x40, 0x8b, 0x37, 0xf5, 0x74, 0xcf, 0x8b, 0x38, 0x4b, 0x9c, 0x33, 0xda, 0x80, 0x3b, 0x39, - 0x04, 0x92, 0x44, 0xb1, 0x1c, 0x35, 0xe2, 0xe9, 0x2e, 0xd1, 0xb2, 0x39, 0x96, 0xd3, 0x39, 0x6e, - 0x49, 0x51, 0xa8, 0x20, 0x1a, 0xbe, 0x0a, 0x16, 0x82, 0xa7, 0xf1, 0x39, 0x17, 0x8b, 0xb3, 0x22, - 0xc8, 0x16, 0x76, 0xe2, 0x2e, 0x94, 0xc4, 0xb1, 0xa1, 0xd9, 0x87, 0x1e, 0x71, 0x87, 0x44, 0x7b, - 0x33, 0xf0, 0x00, 0x4c, 0x28, 0xab, 0x5c, 0x28, 0xa3, 0xa1, 0xed, 0xe6, 0x10, 0x48, 0x12, 0xc5, - 0x86, 0x16, 0x54, 0x4d, 0x6e, 0x68, 0xb3, 0xe9, 0xa1, 0x1d, 0x48, 0x51, 0xa8, 0x20, 0x9a, 0xd5, - 0x5e, 0x90, 0xf2, 0xe6, 0x10, 0xeb, 0x06, 0x3e, 0x34, 0x48, 0x7d, 0x2e, 0x5d, 0x7b, 0x3b, 0xe9, - 0x6e, 0x94, 0xc5, 0xc3, 0x37, 0xc1, 0x95, 0xa0, 0xe9, 0xc0, 0xc2, 0x11, 0x49, 0x8d, 0x93, 0x3c, - 0x27, 0x48, 0xae, 0xec, 0x64, 0x01, 0x28, 0x1f, 0x03, 0x5f, 0x07, 0x4b, 0x7d, 0xdb, 0x30, 0x78, - 0x3d, 0x76, 0x6d, 0xdf, 0xa2, 0xf5, 0x79, 0xce, 0x02, 0xd9, 0x1e, 0xea, 0xa6, 0x7a, 0x50, 0x06, - 0x09, 0x1f, 0x02, 0xd0, 0x0f, 0xe5, 0xc0, 0xab, 0x83, 0x62, 0xa1, 0xcf, 0xeb, 0x50, 0x2c, 0xc0, - 0x51, 0x93, 0x87, 0x12, 0x6c, 0xad, 0xf7, 0x14, 0xb0, 0x5e, 0xb0, 0xc7, 0xe1, 0xf7, 0x52, 0xaa, - 0x77, 0x33, 0xa3, 0x7a, 0xd7, 0x0a, 0xc2, 0x12, 0xd2, 0xd7, 0x07, 0x8b, 0xcc, 0x77, 0xe8, 0xd6, - 0x20, 0x80, 0x88, 0x13, 0xec, 0x25, 0x59, 0xee, 0x28, 0x09, 0x8c, 0x8f, 0xe1, 0x2b, 0xe3, 0x93, - 0xe6, 0x62, 0xaa, 0x0f, 0xa5, 0x39, 0x5b, 0xbf, 0x2c, 0x01, 0xb0, 0x45, 0x1c, 0xc3, 0x1e, 0x99, - 0xc4, 0xba, 0x08, 0xd7, 0xb2, 0x95, 0x72, 0x2d, 0x2d, 0xe9, 0x42, 0x44, 0xf9, 0x14, 0xda, 0x96, - 0xed, 0x8c, 0x6d, 0xf9, 0xc6, 0x04, 0x9e, 0xd3, 0x7d, 0xcb, 0x3f, 0xca, 0x60, 0x25, 0x06, 0xc7, - 0xc6, 0xe5, 0x5e, 0x6a, 0x09, 0x5f, 0xc8, 0x2c, 0xe1, 0xba, 0x24, 0xe4, 0x53, 0x73, 0x2e, 0xef, - 0x82, 0x25, 0xe6, 0x2b, 0x82, 0x55, 0xe3, 0xae, 0x65, 0xf6, 0xcc, 0xae, 0x25, 0x52, 0x9d, 0xed, - 0x14, 0x13, 0xca, 0x30, 0x17, 0xb8, 0xa4, 0xb9, 0xcf, 0xa3, 0x4b, 0xfa, 0x83, 0x02, 0x96, 0xe2, - 0x65, 0xba, 0x00, 0x9b, 0xd4, 0x4d, 0xdb, 0xa4, 0xc6, 0xe9, 0x75, 0x59, 0xe0, 0x93, 0xfe, 0x5e, - 0x49, 0x66, 0xcd, 0x8d, 0xd2, 0x06, 0x7b, 0xa1, 0x72, 0x0c, 0xbd, 0x8f, 0x3d, 0x21, 0xab, 0x97, - 0x82, 0x97, 0xa9, 0xa0, 0x0d, 0x45, 0xbd, 0x29, 0x4b, 0x55, 0xfa, 0x74, 0x2d, 0x55, 0xf9, 0x93, - 0xb1, 0x54, 0xf7, 0x41, 0xcd, 0x0b, 0xcd, 0x54, 0x85, 0x53, 0xde, 0x98, 0xb4, 0x9d, 0x85, 0x8f, - 0x8a, 0x58, 0x23, 0x07, 0x15, 0x31, 0xc9, 0xbc, 0x53, 0xf5, 0xb3, 0xf4, 0x4e, 0xac, 0xbc, 0x1d, - 0xec, 0x7b, 0x44, 0xe3, 0x5b, 0xa9, 0x16, 0x97, 0xf7, 0x1e, 0x6f, 0x45, 0xa2, 0x17, 0x1e, 0x80, - 0x75, 0xc7, 0xb5, 0x07, 0x2e, 0xf1, 0xbc, 0x2d, 0x82, 0x35, 0x43, 0xb7, 0x48, 0x38, 0x80, 0x40, - 0xf5, 0xae, 0x8d, 0x4f, 0x9a, 0xeb, 0x7b, 0x72, 0x08, 0x2a, 0x8a, 0x6d, 0xfd, 0xb9, 0x02, 0x2e, - 0x67, 0x4f, 0xc4, 0x02, 0x23, 0xa2, 0x9c, 0xcb, 0x88, 0xbc, 0x9c, 0x28, 0xd1, 0xc0, 0xa5, 0x25, - 0xde, 0xf9, 0x73, 0x65, 0xba, 0x09, 0x96, 0x85, 0xf1, 0x08, 0x3b, 0x85, 0x15, 0x8b, 0x96, 0xe7, - 0x20, 0xdd, 0x8d, 0xb2, 0x78, 0x78, 0x0f, 0x2c, 0xba, 0xdc, 0x5b, 0x85, 0x04, 0x81, 0x3f, 0xf9, - 0x8a, 0x20, 0x58, 0x44, 0xc9, 0x4e, 0x94, 0xc6, 0x32, 0x6f, 0x12, 0x5b, 0x8e, 0x90, 0xa0, 0x92, - 0xf6, 0x26, 0x9b, 0x59, 0x00, 0xca, 0xc7, 0xc0, 0x1e, 0x58, 0xf1, 0xad, 0x3c, 0x55, 0x50, 0x6b, - 0xd7, 0x04, 0xd5, 0xca, 0x41, 0x1e, 0x82, 0x64, 0x71, 0xf0, 0xc7, 0x29, 0xbb, 0x32, 0xcb, 0x4f, - 0x91, 0x17, 0x4e, 0xdf, 0x0e, 0x53, 0xfb, 0x15, 0x89, 0x8f, 0xaa, 0x4d, 0xeb, 0xa3, 0x5a, 0x7f, - 0x52, 0x00, 0xcc, 0x6f, 0xc1, 0x89, 0x2f, 0xf7, 0xb9, 0x88, 0x84, 0x44, 0x6a, 0x72, 0x87, 0x73, - 0x73, 0xb2, 0xc3, 0x89, 0x4f, 0xd0, 0xe9, 0x2c, 0x8e, 0x98, 0xde, 0x8b, 0xb9, 0x98, 0x99, 0xc2, - 0xe2, 0xc4, 0xf9, 0x3c, 0x9b, 0xc5, 0x49, 0xf0, 0x9c, 0x6e, 0x71, 0xfe, 0x5d, 0x02, 0x2b, 0x31, - 0x78, 0x6a, 0x8b, 0x23, 0x09, 0xf9, 0xf2, 0x72, 0x66, 0x3a, 0xdb, 0x11, 0x4f, 0xdd, 0xff, 0x89, - 0xed, 0x88, 0x13, 0x2a, 0xb0, 0x1d, 0xbf, 0x2b, 0x25, 0xb3, 0x3e, 0xa3, 0xed, 0xf8, 0x04, 0xae, - 0x2a, 0x3e, 0x77, 0xce, 0xa5, 0xf5, 0x97, 0x32, 0xb8, 0x9c, 0xdd, 0x82, 0x29, 0x1d, 0x54, 0x26, - 0xea, 0xe0, 0x1e, 0x58, 0x7d, 0xe4, 0x1b, 0xc6, 0x88, 0x8f, 0x21, 0x21, 0x86, 0x81, 0x82, 0x7e, - 0x55, 0x44, 0xae, 0x7e, 0x5f, 0x82, 0x41, 0xd2, 0xc8, 0xbc, 0x2c, 0x56, 0x9e, 0x55, 0x16, 0xab, - 0xe7, 0x90, 0x45, 0xb9, 0xb3, 0x28, 0x9f, 0xcb, 0x59, 0x4c, 0xad, 0x89, 0x92, 0xe3, 0x6a, 0xe2, - 0x3b, 0xfc, 0xaf, 0x15, 0xb0, 0x26, 0x7f, 0x7d, 0x86, 0x06, 0x58, 0x32, 0xf1, 0xe3, 0xe4, 0xe5, - 0xc5, 0x24, 0xc1, 0xf0, 0xa9, 0x6e, 0xa8, 0xc1, 0xd7, 0x1d, 0xf5, 0x2d, 0x8b, 0xee, 0xba, 0xfb, - 0xd4, 0xd5, 0xad, 0x41, 0x20, 0xb0, 0xbd, 0x14, 0x17, 0xca, 0x70, 0xb7, 0x3e, 0x54, 0xc0, 0x7a, - 0x81, 0xca, 0x5d, 0x6c, 0x26, 0xf0, 0x21, 0xa8, 0x99, 0xf8, 0xf1, 0xbe, 0xef, 0x0e, 0x42, 0x49, - 0x3e, 0xfb, 0x73, 0xf8, 0x2e, 0xec, 0x09, 0x16, 0x14, 0xf1, 0xb5, 0x76, 0xc1, 0xf5, 0xd4, 0x20, - 0xd9, 0xa6, 0x21, 0x8f, 0x7c, 0x83, 0xef, 0x1f, 0xe1, 0x29, 0x6e, 0x82, 0x79, 0x07, 0xbb, 0x54, - 0x8f, 0xcc, 0x68, 0xb5, 0xb3, 0x38, 0x3e, 0x69, 0xce, 0xef, 0x85, 0x8d, 0x28, 0xee, 0x6f, 0xfd, - 0xaa, 0x04, 0x16, 0x12, 0x24, 0x17, 0xa0, 0xef, 0x6f, 0xa4, 0xf4, 0x5d, 0xfa, 0xc5, 0x24, 0x39, - 0xaa, 0x22, 0x81, 0xef, 0x65, 0x04, 0xfe, 0x9b, 0x93, 0x88, 0x4e, 0x57, 0xf8, 0x8f, 0x4a, 0x60, - 0x35, 0x81, 0x8e, 0x25, 0xfe, 0x3b, 0x29, 0x89, 0xdf, 0xc8, 0x48, 0x7c, 0x5d, 0x16, 0xf3, 0xa5, - 0xc6, 0x4f, 0xd6, 0xf8, 0x3f, 0x2a, 0x60, 0x39, 0x31, 0x77, 0x17, 0x20, 0xf2, 0x5b, 0x69, 0x91, - 0x6f, 0x4e, 0xa8, 0x97, 0x02, 0x95, 0x7f, 0x52, 0x4d, 0xe5, 0xfd, 0x85, 0xbf, 0x5d, 0xf8, 0x39, - 0x58, 0x1d, 0xda, 0x86, 0x6f, 0x92, 0xae, 0x81, 0x75, 0x33, 0x04, 0x30, 0x55, 0x64, 0x93, 0xf8, - 0xa2, 0x94, 0x9e, 0xb8, 0x9e, 0xee, 0x51, 0x62, 0xd1, 0x07, 0x71, 0x64, 0xac, 0xc5, 0x0f, 0x24, - 0x74, 0x48, 0xfa, 0x10, 0xf8, 0x2a, 0x58, 0x60, 0x6a, 0xa6, 0xf7, 0xc9, 0x0e, 0x36, 0xc3, 0x9a, - 0x8a, 0xbe, 0x0f, 0xec, 0xc7, 0x5d, 0x28, 0x89, 0x83, 0x47, 0x60, 0xc5, 0xb1, 0xb5, 0x1e, 0xb6, - 0xf0, 0x80, 0xb0, 0xf3, 0x7f, 0xcf, 0x36, 0xf4, 0xfe, 0x88, 0xdf, 0x3b, 0xcc, 0x77, 0x5e, 0x0b, - 0xdf, 0x29, 0xf7, 0xf2, 0x10, 0xe6, 0xd9, 0x25, 0xcd, 0x7c, 0x3f, 0xcb, 0x28, 0xa1, 0x99, 0xfb, - 0x9c, 0x35, 0x97, 0xfb, 0x1f, 0x00, 0x59, 0x71, 0x9d, 0xf3, 0x83, 0x56, 0xd1, 0x8d, 0x4a, 0xed, - 0x5c, 0x5f, 0xa3, 0x3e, 0xaa, 0x80, 0x2b, 0xb9, 0x03, 0xf2, 0x33, 0xbc, 0xd3, 0xc8, 0x39, 0xaf, - 0xf2, 0x19, 0x9c, 0xd7, 0x26, 0x58, 0x16, 0x1f, 0xc2, 0x32, 0xc6, 0x2d, 0x32, 0xd0, 0xdd, 0x74, - 0x37, 0xca, 0xe2, 0x65, 0x77, 0x2a, 0xd5, 0x33, 0xde, 0xa9, 0x24, 0xb3, 0x10, 0xff, 0xbf, 0x11, - 0x54, 0x5d, 0x3e, 0x0b, 0xf1, 0x6f, 0x1c, 0x59, 0x3c, 0xfc, 0x6e, 0x58, 0x52, 0x11, 0xc3, 0x1c, - 0x67, 0xc8, 0xd4, 0x48, 0x44, 0x90, 0x41, 0x3f, 0xd3, 0xc7, 0x9e, 0x77, 0x24, 0x1f, 0x7b, 0x36, - 0x26, 0x94, 0xf2, 0xf4, 0x56, 0xf1, 0x6f, 0x0a, 0x78, 0xae, 0x70, 0x0f, 0xc0, 0xcd, 0x94, 0xce, - 0xde, 0xca, 0xe8, 0xec, 0xf3, 0x85, 0x81, 0x09, 0xb1, 0x35, 0xe5, 0x17, 0x22, 0x77, 0x27, 0x5e, - 0x88, 0x48, 0x5c, 0xd4, 0xe4, 0x9b, 0x91, 0xce, 0xc6, 0x93, 0xa7, 0x8d, 0x99, 0xf7, 0x9f, 0x36, - 0x66, 0x3e, 0x78, 0xda, 0x98, 0xf9, 0xc5, 0xb8, 0xa1, 0x3c, 0x19, 0x37, 0x94, 0xf7, 0xc7, 0x0d, - 0xe5, 0x83, 0x71, 0x43, 0xf9, 0xe7, 0xb8, 0xa1, 0xfc, 0xf6, 0xc3, 0xc6, 0xcc, 0xc3, 0xd2, 0xf0, - 0xf6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x59, 0xb3, 0x11, 0xc0, 0x12, 0x26, 0x00, 0x00, + 0x61, 0x47, 0x5c, 0x10, 0x12, 0x37, 0x0e, 0xfc, 0x27, 0x08, 0x21, 0xb8, 0xa1, 0x08, 0x71, 0xd9, + 0x0b, 0x52, 0xc4, 0x85, 0x9c, 0x2c, 0x76, 0x72, 0x42, 0x28, 0x47, 0x2e, 0xb9, 0x80, 0xaa, 0xba, + 0xfa, 0xbb, 0xda, 0x33, 0xf6, 0x26, 0xce, 0x87, 0x72, 0xf3, 0x54, 0xfd, 0xde, 0xaf, 0xde, 0xab, + 0x7a, 0x55, 0xef, 0xd7, 0x55, 0x06, 0xf7, 0x8e, 0xbf, 0xeb, 0xa9, 0xba, 0xdd, 0x3e, 0xf6, 0x0f, + 0x89, 0x6b, 0x11, 0x4a, 0xbc, 0xf6, 0x90, 0x58, 0x9a, 0xed, 0xb6, 0x45, 0x07, 0x76, 0xf4, 0x36, + 0x76, 0x1c, 0xaf, 0x3d, 0xbc, 0xdd, 0x1e, 0x10, 0x8b, 0xb8, 0x98, 0x12, 0x4d, 0x75, 0x5c, 0x9b, + 0xda, 0x10, 0x06, 0x18, 0x15, 0x3b, 0xba, 0xca, 0x30, 0xea, 0xf0, 0xf6, 0xd5, 0x5b, 0x03, 0x9d, + 0x1e, 0xf9, 0x87, 0x6a, 0xdf, 0x36, 0xdb, 0x03, 0x7b, 0x60, 0xb7, 0x39, 0xf4, 0xd0, 0x7f, 0xc4, + 0x7f, 0xf1, 0x1f, 0xfc, 0xaf, 0x80, 0xe2, 0x6a, 0x2b, 0x31, 0x4c, 0xdf, 0x76, 0x89, 0x64, 0x98, + 0xab, 0x77, 0x63, 0x8c, 0x89, 0xfb, 0x47, 0xba, 0x45, 0xdc, 0x51, 0xdb, 0x39, 0x1e, 0xb0, 0x06, + 0xaf, 0x6d, 0x12, 0x8a, 0x65, 0x56, 0xed, 0x22, 0x2b, 0xd7, 0xb7, 0xa8, 0x6e, 0x92, 0x9c, 0xc1, + 0x6b, 0x93, 0x0c, 0xbc, 0xfe, 0x11, 0x31, 0x71, 0xce, 0xee, 0x95, 0x22, 0x3b, 0x9f, 0xea, 0x46, + 0x5b, 0xb7, 0xa8, 0x47, 0xdd, 0xac, 0x51, 0xeb, 0xbf, 0x0a, 0x80, 0x5d, 0xdb, 0xa2, 0xae, 0x6d, + 0x18, 0xc4, 0x45, 0x64, 0xa8, 0x7b, 0xba, 0x6d, 0xc1, 0x9f, 0x83, 0x1a, 0x8b, 0x47, 0xc3, 0x14, + 0xd7, 0x95, 0xeb, 0xca, 0xc6, 0xc2, 0x9d, 0xef, 0xa8, 0xf1, 0x24, 0x47, 0xf4, 0xaa, 0x73, 0x3c, + 0x60, 0x0d, 0x9e, 0xca, 0xd0, 0xea, 0xf0, 0xb6, 0xba, 0x7b, 0xf8, 0x2e, 0xe9, 0xd3, 0x1e, 0xa1, + 0xb8, 0x03, 0x9f, 0x9c, 0x34, 0x67, 0xc6, 0x27, 0x4d, 0x10, 0xb7, 0xa1, 0x88, 0x15, 0xee, 0x82, + 0x0a, 0x67, 0x2f, 0x71, 0xf6, 0x5b, 0x85, 0xec, 0x22, 0x68, 0x15, 0xe1, 0x5f, 0xbc, 0xf1, 0x98, + 0x12, 0x8b, 0xb9, 0xd7, 0xb9, 0x24, 0xa8, 0x2b, 0x5b, 0x98, 0x62, 0xc4, 0x89, 0xe0, 0xcb, 0xa0, + 0xe6, 0x0a, 0xf7, 0xeb, 0xe5, 0xeb, 0xca, 0x46, 0xb9, 0x73, 0x59, 0xa0, 0x6a, 0x61, 0x58, 0x28, + 0x42, 0xb4, 0xfe, 0xa6, 0x80, 0xb5, 0x7c, 0xdc, 0xdb, 0xba, 0x47, 0xe1, 0x3b, 0xb9, 0xd8, 0xd5, + 0xe9, 0x62, 0x67, 0xd6, 0x3c, 0xf2, 0x68, 0xe0, 0xb0, 0x25, 0x11, 0xf7, 0xdb, 0xa0, 0xaa, 0x53, + 0x62, 0x7a, 0xf5, 0xd2, 0xf5, 0xf2, 0xc6, 0xc2, 0x9d, 0x1b, 0x6a, 0x3e, 0x77, 0xd5, 0xbc, 0x63, + 0x9d, 0x45, 0x41, 0x59, 0x7d, 0x8b, 0x19, 0xa3, 0x80, 0xa3, 0xf5, 0x3f, 0x05, 0xcc, 0x6f, 0x61, + 0x62, 0xda, 0xd6, 0x3e, 0xa1, 0x17, 0xb0, 0x68, 0x5d, 0x50, 0xf1, 0x1c, 0xd2, 0x17, 0x8b, 0xf6, + 0x0d, 0x99, 0xef, 0x91, 0x3b, 0xfb, 0x0e, 0xe9, 0xc7, 0x0b, 0xc5, 0x7e, 0x21, 0x6e, 0x0c, 0xdf, + 0x06, 0xb3, 0x1e, 0xc5, 0xd4, 0xf7, 0xf8, 0x32, 0x2d, 0xdc, 0xf9, 0xe6, 0xe9, 0x34, 0x1c, 0xda, + 0x59, 0x12, 0x44, 0xb3, 0xc1, 0x6f, 0x24, 0x28, 0x5a, 0xff, 0x2e, 0x01, 0x18, 0x61, 0xbb, 0xb6, + 0xa5, 0xe9, 0x94, 0xe5, 0xef, 0xeb, 0xa0, 0x42, 0x47, 0x0e, 0xe1, 0xd3, 0x30, 0xdf, 0xb9, 0x11, + 0x7a, 0x71, 0x7f, 0xe4, 0x90, 0x8f, 0x4f, 0x9a, 0x6b, 0x79, 0x0b, 0xd6, 0x83, 0xb8, 0x0d, 0xdc, + 0x8e, 0xfc, 0x2b, 0x71, 0xeb, 0xbb, 0xe9, 0xa1, 0x3f, 0x3e, 0x69, 0x4a, 0x0e, 0x0b, 0x35, 0x62, + 0x4a, 0x3b, 0x08, 0x87, 0x00, 0x1a, 0xd8, 0xa3, 0xf7, 0x5d, 0x6c, 0x79, 0xc1, 0x48, 0xba, 0x49, + 0x44, 0xe4, 0x2f, 0x4d, 0xb7, 0x3c, 0xcc, 0xa2, 0x73, 0x55, 0x78, 0x01, 0xb7, 0x73, 0x6c, 0x48, + 0x32, 0x02, 0xbc, 0x01, 0x66, 0x5d, 0x82, 0x3d, 0xdb, 0xaa, 0x57, 0x78, 0x14, 0xd1, 0x04, 0x22, + 0xde, 0x8a, 0x44, 0x2f, 0x7c, 0x11, 0xcc, 0x99, 0xc4, 0xf3, 0xf0, 0x80, 0xd4, 0xab, 0x1c, 0xb8, + 0x2c, 0x80, 0x73, 0xbd, 0xa0, 0x19, 0x85, 0xfd, 0xad, 0x3f, 0x28, 0x60, 0x31, 0x9a, 0xb9, 0x0b, + 0xd8, 0x2a, 0x9d, 0xf4, 0x56, 0x79, 0xfe, 0xd4, 0x3c, 0x29, 0xd8, 0x21, 0xef, 0x95, 0x13, 0x3e, + 0xb3, 0x24, 0x84, 0x3f, 0x03, 0x35, 0x8f, 0x18, 0xa4, 0x4f, 0x6d, 0x57, 0xf8, 0xfc, 0xca, 0x94, + 0x3e, 0xe3, 0x43, 0x62, 0xec, 0x0b, 0xd3, 0xce, 0x25, 0xe6, 0x74, 0xf8, 0x0b, 0x45, 0x94, 0xf0, + 0x27, 0xa0, 0x46, 0x89, 0xe9, 0x18, 0x98, 0x12, 0xb1, 0x4d, 0x52, 0xf9, 0xcd, 0xd2, 0x85, 0x91, + 0xed, 0xd9, 0xda, 0x7d, 0x01, 0xe3, 0x1b, 0x25, 0x9a, 0x87, 0xb0, 0x15, 0x45, 0x34, 0xf0, 0x18, + 0x2c, 0xf9, 0x8e, 0xc6, 0x90, 0x94, 0x1d, 0xdd, 0x83, 0x91, 0x48, 0x9f, 0x9b, 0xa7, 0x4e, 0xc8, + 0x41, 0xca, 0xa4, 0xb3, 0x26, 0x06, 0x58, 0x4a, 0xb7, 0xa3, 0x0c, 0x35, 0xdc, 0x04, 0xcb, 0xa6, + 0x6e, 0x21, 0x82, 0xb5, 0xd1, 0x3e, 0xe9, 0xdb, 0x96, 0xe6, 0xf1, 0x04, 0xaa, 0x76, 0xd6, 0x05, + 0xc1, 0x72, 0x2f, 0xdd, 0x8d, 0xb2, 0x78, 0xb8, 0x0d, 0x56, 0xc3, 0x73, 0xf6, 0x47, 0xba, 0x47, + 0x6d, 0x77, 0xb4, 0xad, 0x9b, 0x3a, 0xad, 0xcf, 0x72, 0x9e, 0xfa, 0xf8, 0xa4, 0xb9, 0x8a, 0x24, + 0xfd, 0x48, 0x6a, 0xd5, 0xfa, 0xed, 0x2c, 0x58, 0xce, 0x9c, 0x06, 0xf0, 0x01, 0x58, 0xeb, 0xfb, + 0xae, 0x4b, 0x2c, 0xba, 0xe3, 0x9b, 0x87, 0xc4, 0xdd, 0xef, 0x1f, 0x11, 0xcd, 0x37, 0x88, 0xc6, + 0x57, 0xb4, 0xda, 0x69, 0x08, 0x5f, 0xd7, 0xba, 0x52, 0x14, 0x2a, 0xb0, 0x86, 0x3f, 0x06, 0xd0, + 0xe2, 0x4d, 0x3d, 0xdd, 0xf3, 0x22, 0xce, 0x12, 0xe7, 0x8c, 0x36, 0xe0, 0x4e, 0x0e, 0x81, 0x24, + 0x56, 0xcc, 0x47, 0x8d, 0x78, 0xba, 0x4b, 0xb4, 0xac, 0x8f, 0xe5, 0xb4, 0x8f, 0x5b, 0x52, 0x14, + 0x2a, 0xb0, 0x86, 0xaf, 0x82, 0x85, 0x60, 0x34, 0x3e, 0xe7, 0x62, 0x71, 0x56, 0x04, 0xd9, 0xc2, + 0x4e, 0xdc, 0x85, 0x92, 0x38, 0x16, 0x9a, 0x7d, 0xe8, 0x11, 0x77, 0x48, 0xb4, 0x37, 0x03, 0x0d, + 0xc0, 0x0a, 0x65, 0x95, 0x17, 0xca, 0x28, 0xb4, 0xdd, 0x1c, 0x02, 0x49, 0xac, 0x58, 0x68, 0x41, + 0xd6, 0xe4, 0x42, 0x9b, 0x4d, 0x87, 0x76, 0x20, 0x45, 0xa1, 0x02, 0x6b, 0x96, 0x7b, 0x81, 0xcb, + 0x9b, 0x43, 0xac, 0x1b, 0xf8, 0xd0, 0x20, 0xf5, 0xb9, 0x74, 0xee, 0xed, 0xa4, 0xbb, 0x51, 0x16, + 0x0f, 0xdf, 0x04, 0x57, 0x82, 0xa6, 0x03, 0x0b, 0x47, 0x24, 0x35, 0x4e, 0xf2, 0x9c, 0x20, 0xb9, + 0xb2, 0x93, 0x05, 0xa0, 0xbc, 0x0d, 0x7c, 0x1d, 0x2c, 0xf5, 0x6d, 0xc3, 0xe0, 0xf9, 0xd8, 0xb5, + 0x7d, 0x8b, 0xd6, 0xe7, 0x39, 0x0b, 0x64, 0x7b, 0xa8, 0x9b, 0xea, 0x41, 0x19, 0x24, 0x7c, 0x08, + 0x40, 0x3f, 0x2c, 0x07, 0x5e, 0x1d, 0x14, 0x17, 0xfa, 0x7c, 0x1d, 0x8a, 0x0b, 0x70, 0xd4, 0xe4, + 0xa1, 0x04, 0x5b, 0xeb, 0x3d, 0x05, 0xac, 0x17, 0xec, 0x71, 0xf8, 0x83, 0x54, 0xd5, 0xbb, 0x99, + 0xa9, 0x7a, 0xd7, 0x0a, 0xcc, 0x12, 0xa5, 0xaf, 0x0f, 0x16, 0x99, 0xee, 0xd0, 0xad, 0x41, 0x00, + 0x11, 0x27, 0xd8, 0x4b, 0x32, 0xdf, 0x51, 0x12, 0x18, 0x1f, 0xc3, 0x57, 0xc6, 0x27, 0xcd, 0xc5, + 0x54, 0x1f, 0x4a, 0x73, 0xb6, 0x7e, 0x5d, 0x02, 0x60, 0x8b, 0x38, 0x86, 0x3d, 0x32, 0x89, 0x75, + 0x11, 0xaa, 0x65, 0x2b, 0xa5, 0x5a, 0x5a, 0xd2, 0x85, 0x88, 0xfc, 0x29, 0x94, 0x2d, 0xdb, 0x19, + 0xd9, 0xf2, 0xad, 0x09, 0x3c, 0xa7, 0xeb, 0x96, 0x7f, 0x96, 0xc1, 0x4a, 0x0c, 0x8e, 0x85, 0xcb, + 0xbd, 0xd4, 0x12, 0xbe, 0x90, 0x59, 0xc2, 0x75, 0x89, 0xc9, 0xa7, 0xa6, 0x5c, 0xde, 0x05, 0x4b, + 0x4c, 0x57, 0x04, 0xab, 0xc6, 0x55, 0xcb, 0xec, 0x99, 0x55, 0x4b, 0x54, 0x75, 0xb6, 0x53, 0x4c, + 0x28, 0xc3, 0x5c, 0xa0, 0x92, 0xe6, 0xbe, 0x88, 0x2a, 0xe9, 0x8f, 0x0a, 0x58, 0x8a, 0x97, 0xe9, + 0x02, 0x64, 0x52, 0x37, 0x2d, 0x93, 0x1a, 0xa7, 0xe7, 0x65, 0x81, 0x4e, 0xfa, 0x47, 0x25, 0xe9, + 0x35, 0x17, 0x4a, 0x1b, 0xec, 0x83, 0xca, 0x31, 0xf4, 0x3e, 0xf6, 0x44, 0x59, 0xbd, 0x14, 0x7c, + 0x4c, 0x05, 0x6d, 0x28, 0xea, 0x4d, 0x49, 0xaa, 0xd2, 0xa7, 0x2b, 0xa9, 0xca, 0x9f, 0x8c, 0xa4, + 0xba, 0x0f, 0x6a, 0x5e, 0x28, 0xa6, 0x2a, 0x9c, 0xf2, 0xc6, 0xa4, 0xed, 0x2c, 0x74, 0x54, 0xc4, + 0x1a, 0x29, 0xa8, 0x88, 0x49, 0xa6, 0x9d, 0xaa, 0x9f, 0xa5, 0x76, 0x62, 0xe9, 0xed, 0x60, 0xdf, + 0x23, 0x1a, 0xdf, 0x4a, 0xb5, 0x38, 0xbd, 0xf7, 0x78, 0x2b, 0x12, 0xbd, 0xf0, 0x00, 0xac, 0x3b, + 0xae, 0x3d, 0x70, 0x89, 0xe7, 0x6d, 0x11, 0xac, 0x19, 0xba, 0x45, 0xc2, 0x00, 0x82, 0xaa, 0x77, + 0x6d, 0x7c, 0xd2, 0x5c, 0xdf, 0x93, 0x43, 0x50, 0x91, 0x6d, 0xeb, 0x2f, 0x15, 0x70, 0x39, 0x7b, + 0x22, 0x16, 0x08, 0x11, 0xe5, 0x5c, 0x42, 0xe4, 0xe5, 0x44, 0x8a, 0x06, 0x2a, 0x2d, 0xf1, 0xcd, + 0x9f, 0x4b, 0xd3, 0x4d, 0xb0, 0x2c, 0x84, 0x47, 0xd8, 0x29, 0xa4, 0x58, 0xb4, 0x3c, 0x07, 0xe9, + 0x6e, 0x94, 0xc5, 0xc3, 0x7b, 0x60, 0xd1, 0xe5, 0xda, 0x2a, 0x24, 0x08, 0xf4, 0xc9, 0xd7, 0x04, + 0xc1, 0x22, 0x4a, 0x76, 0xa2, 0x34, 0x96, 0x69, 0x93, 0x58, 0x72, 0x84, 0x04, 0x95, 0xb4, 0x36, + 0xd9, 0xcc, 0x02, 0x50, 0xde, 0x06, 0xf6, 0xc0, 0x8a, 0x6f, 0xe5, 0xa9, 0x82, 0x5c, 0xbb, 0x26, + 0xa8, 0x56, 0x0e, 0xf2, 0x10, 0x24, 0xb3, 0x83, 0x3f, 0x4d, 0xc9, 0x95, 0x59, 0x7e, 0x8a, 0xbc, + 0x70, 0xfa, 0x76, 0x98, 0x5a, 0xaf, 0x48, 0x74, 0x54, 0x6d, 0x5a, 0x1d, 0xd5, 0xfa, 0xb3, 0x02, + 0x60, 0x7e, 0x0b, 0x4e, 0xfc, 0xb8, 0xcf, 0x59, 0x24, 0x4a, 0xa4, 0x26, 0x57, 0x38, 0x37, 0x27, + 0x2b, 0x9c, 0xf8, 0x04, 0x9d, 0x4e, 0xe2, 0x88, 0xe9, 0xbd, 0x98, 0x8b, 0x99, 0x29, 0x24, 0x4e, + 0xec, 0xcf, 0xb3, 0x49, 0x9c, 0x04, 0xcf, 0xe9, 0x12, 0xe7, 0x3f, 0x25, 0xb0, 0x12, 0x83, 0xa7, + 0x96, 0x38, 0x12, 0x93, 0xaf, 0x2e, 0x67, 0xa6, 0x93, 0x1d, 0xf1, 0xd4, 0x7d, 0x4e, 0x64, 0x47, + 0xec, 0x50, 0x81, 0xec, 0xf8, 0x7d, 0x29, 0xe9, 0xf5, 0x19, 0x65, 0xc7, 0x27, 0x70, 0x55, 0xf1, + 0x85, 0x53, 0x2e, 0xad, 0xbf, 0x96, 0xc1, 0xe5, 0xec, 0x16, 0x4c, 0xd5, 0x41, 0x65, 0x62, 0x1d, + 0xdc, 0x03, 0xab, 0x8f, 0x7c, 0xc3, 0x18, 0xf1, 0x18, 0x12, 0xc5, 0x30, 0xa8, 0xa0, 0x5f, 0x17, + 0x96, 0xab, 0x3f, 0x94, 0x60, 0x90, 0xd4, 0x32, 0x5f, 0x16, 0x2b, 0xcf, 0x5a, 0x16, 0xab, 0xe7, + 0x28, 0x8b, 0x72, 0x65, 0x51, 0x3e, 0x97, 0xb2, 0x98, 0xba, 0x26, 0x4a, 0x8e, 0xab, 0x89, 0xdf, + 0xf0, 0x63, 0x05, 0xac, 0xc9, 0x3f, 0x9f, 0xa1, 0x01, 0x96, 0x4c, 0xfc, 0x38, 0x79, 0x79, 0x31, + 0xa9, 0x60, 0xf8, 0x54, 0x37, 0xd4, 0xe0, 0x75, 0x47, 0x7d, 0xcb, 0xa2, 0xbb, 0xee, 0x3e, 0x75, + 0x75, 0x6b, 0x10, 0x14, 0xd8, 0x5e, 0x8a, 0x0b, 0x65, 0xb8, 0xe1, 0x43, 0x50, 0x33, 0xf1, 0xe3, + 0x7d, 0xdf, 0x1d, 0x84, 0x85, 0xf0, 0xec, 0xe3, 0xf0, 0xdc, 0xef, 0x09, 0x16, 0x14, 0xf1, 0xb5, + 0x3e, 0x54, 0xc0, 0x7a, 0x41, 0x05, 0xfd, 0x12, 0x45, 0xb9, 0x0b, 0xae, 0xa7, 0x82, 0x64, 0x1b, + 0x92, 0x3c, 0xf2, 0x0d, 0xbe, 0x37, 0x85, 0x5e, 0xb9, 0x09, 0xe6, 0x1d, 0xec, 0x52, 0x3d, 0x12, + 0xba, 0xd5, 0xce, 0xe2, 0xf8, 0xa4, 0x39, 0xbf, 0x17, 0x36, 0xa2, 0xb8, 0xbf, 0xf5, 0x9b, 0x12, + 0x58, 0x48, 0x90, 0x5c, 0x80, 0x76, 0x78, 0x23, 0xa5, 0x1d, 0xa4, 0xaf, 0x31, 0xc9, 0xa8, 0x8a, + 0xc4, 0x43, 0x2f, 0x23, 0x1e, 0xbe, 0x3d, 0x89, 0xe8, 0x74, 0xf5, 0xf0, 0x51, 0x09, 0xac, 0x26, + 0xd0, 0xb1, 0x7c, 0xf8, 0x5e, 0x4a, 0x3e, 0x6c, 0x64, 0xe4, 0x43, 0x5d, 0x66, 0xf3, 0x95, 0x7e, + 0x98, 0xac, 0x1f, 0xfe, 0xa4, 0x80, 0xe5, 0xc4, 0xdc, 0x5d, 0x80, 0x80, 0xd8, 0x4a, 0x0b, 0x88, + 0xe6, 0x84, 0x7c, 0x29, 0x50, 0x10, 0x4f, 0xaa, 0x29, 0xbf, 0xbf, 0xf4, 0x37, 0x17, 0xbf, 0x04, + 0xab, 0x43, 0xdb, 0xf0, 0x4d, 0xd2, 0x35, 0xb0, 0x6e, 0x86, 0x00, 0x56, 0x71, 0xd9, 0x24, 0xbe, + 0x28, 0xa5, 0x27, 0xae, 0xa7, 0x7b, 0x94, 0x58, 0xf4, 0x41, 0x6c, 0x19, 0xd7, 0xf9, 0x07, 0x12, + 0x3a, 0x24, 0x1d, 0x04, 0xbe, 0x0a, 0x16, 0x58, 0xa5, 0xd4, 0xfb, 0x64, 0x07, 0x9b, 0x61, 0x4e, + 0x45, 0x6f, 0x0f, 0xfb, 0x71, 0x17, 0x4a, 0xe2, 0xe0, 0x11, 0x58, 0x71, 0x6c, 0xad, 0x87, 0x2d, + 0x3c, 0x20, 0xec, 0xfc, 0xdf, 0xb3, 0x0d, 0xbd, 0x3f, 0xe2, 0x77, 0x1a, 0xf3, 0x9d, 0xd7, 0xc2, + 0xef, 0xd5, 0xbd, 0x3c, 0x84, 0x7d, 0x0f, 0x48, 0x9a, 0xf9, 0x7e, 0x96, 0x51, 0x42, 0x33, 0xf7, + 0x54, 0x36, 0x97, 0xfb, 0xff, 0x02, 0x59, 0x72, 0x9d, 0xf3, 0xb1, 0xac, 0xe8, 0xb6, 0xa6, 0x76, + 0xae, 0x97, 0xae, 0x8f, 0x2a, 0xe0, 0x4a, 0xee, 0x80, 0xfc, 0x0c, 0xef, 0x4b, 0x72, 0xaa, 0xae, + 0x7c, 0x06, 0x55, 0xb7, 0x09, 0x96, 0xc5, 0x23, 0x5b, 0x46, 0x14, 0x46, 0xe2, 0xbc, 0x9b, 0xee, + 0x46, 0x59, 0xbc, 0xec, 0xbe, 0xa6, 0x7a, 0xc6, 0xfb, 0x9a, 0xa4, 0x17, 0xe2, 0x7f, 0x43, 0x82, + 0xac, 0xcb, 0x7b, 0x21, 0xfe, 0x45, 0x24, 0x8b, 0x87, 0xdf, 0x0f, 0x53, 0x2a, 0x62, 0x98, 0xe3, + 0x0c, 0x99, 0x1c, 0x89, 0x08, 0x32, 0xe8, 0x67, 0x7a, 0x48, 0x7a, 0x47, 0xf2, 0x90, 0xb4, 0x31, + 0x21, 0x95, 0xa7, 0x97, 0xa1, 0x7f, 0x57, 0xc0, 0x73, 0x85, 0x7b, 0x00, 0x6e, 0xa6, 0xea, 0xec, + 0xad, 0x4c, 0x9d, 0x7d, 0xbe, 0xd0, 0x30, 0x51, 0x6c, 0x4d, 0xf9, 0x65, 0xcb, 0xdd, 0x89, 0x97, + 0x2d, 0x12, 0x15, 0x35, 0xf9, 0xd6, 0xa5, 0xb3, 0xf1, 0xe4, 0x69, 0x63, 0xe6, 0xfd, 0xa7, 0x8d, + 0x99, 0x0f, 0x9e, 0x36, 0x66, 0x7e, 0x35, 0x6e, 0x28, 0x4f, 0xc6, 0x0d, 0xe5, 0xfd, 0x71, 0x43, + 0xf9, 0x60, 0xdc, 0x50, 0xfe, 0x35, 0x6e, 0x28, 0xbf, 0xfb, 0xb0, 0x31, 0xf3, 0xb0, 0x34, 0xbc, + 0xfd, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xc9, 0x16, 0xd9, 0x6e, 0x26, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { @@ -2035,6 +2035,18 @@ func (m *RollingUpdateDaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.MaxUnavailable != nil { { size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) @@ -2849,6 +2861,10 @@ func (m *RollingUpdateDaemonSet) Size() (n int) { l = m.MaxUnavailable.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.MaxSurge != nil { + l = m.MaxSurge.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -3306,6 +3322,7 @@ func (this *RollingUpdateDaemonSet) String() string { } s := strings.Join([]string{`&RollingUpdateDaemonSet{`, `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -3557,10 +3574,7 @@ func (m *ControllerRevision) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3677,10 +3691,7 @@ func (m *ControllerRevisionList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3829,10 +3840,7 @@ func (m *DaemonSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4043,10 +4051,7 @@ func (m *DaemonSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4163,10 +4168,7 @@ func (m *DaemonSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4357,10 +4359,7 @@ func (m *DaemonSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4616,10 +4615,7 @@ func (m *DaemonSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4737,10 +4733,7 @@ func (m *DaemonSetUpdateStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4889,10 +4882,7 @@ func (m *Deployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5136,10 +5126,7 @@ func (m *DeploymentCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5256,10 +5243,7 @@ func (m *DeploymentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5510,10 +5494,7 @@ func (m *DeploymentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5731,10 +5712,7 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5852,10 +5830,7 @@ func (m *DeploymentStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6004,10 +5979,7 @@ func (m *ReplicaSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6218,10 +6190,7 @@ func (m *ReplicaSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6338,10 +6307,7 @@ func (m *ReplicaSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6499,10 +6465,7 @@ func (m *ReplicaSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6681,10 +6644,7 @@ func (m *ReplicaSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6764,16 +6724,49 @@ func (m *RollingUpdateDaemonSet) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSurge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxSurge == nil { + m.MaxSurge = &intstr.IntOrString{} + } + if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6895,10 +6888,7 @@ func (m *RollingUpdateDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6968,10 +6958,7 @@ func (m *RollingUpdateStatefulSetStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7120,10 +7107,7 @@ func (m *StatefulSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7334,10 +7318,7 @@ func (m *StatefulSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7454,10 +7435,7 @@ func (m *StatefulSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7747,10 +7725,7 @@ func (m *StatefulSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8013,10 +7988,7 @@ func (m *StatefulSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8134,10 +8106,7 @@ func (m *StatefulSetUpdateStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/apps/v1/generated.proto b/constraint/vendor/k8s.io/api/apps/v1/generated.proto index 3ee640462..d4689d88b 100644 --- a/constraint/vendor/k8s.io/api/apps/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/apps/v1/generated.proto @@ -479,19 +479,41 @@ message RollingUpdateDaemonSet { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total // number of DaemonSet pods at the start of the update (ex: 10%). Absolute - // number is calculated from percentage by rounding up. - // This cannot be 0. + // number is calculated from percentage by rounding down to a minimum of one. + // This cannot be 0 if MaxSurge is 0 // Default value is 1. // Example: when this is set to 30%, at most 30% of the total number of nodes // that should be running the daemon pod (i.e. status.desiredNumberScheduled) - // can have their pods stopped for an update at any given - // time. The update starts by stopping at most 30% of those DaemonSet pods - // and then brings up new DaemonSet pods in their place. Once the new pods - // are available, it then proceeds onto other DaemonSet pods, thus ensuring - // that at least 70% of original number of DaemonSet pods are available at - // all times during the update. + // can have their pods stopped for an update at any given time. The update + // starts by stopping at most 30% of those DaemonSet pods and then brings + // up new DaemonSet pods in their place. Once the new pods are available, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times during + // the update. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 1; + + // The maximum number of nodes with an existing available DaemonSet pod that + // can have an updated DaemonSet pod during during an update. + // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up to a minimum of 1. + // Default value is 0. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their a new pod created before the old pod is marked as deleted. + // The update starts by launching new pods on 30% of nodes. Once an updated + // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod + // on that node is marked deleted. If the old pod becomes unavailable for any + // reason (Ready transitions to false, is evicted, or is drained) an updated + // pod is immediatedly created on that node without considering surge limits. + // Allowing surge implies the possibility that the resources consumed by the + // daemonset on any given node can double if the readiness check fails, and + // so resource intensive daemonsets should take into account that they may + // cause evictions during disruption. + // This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate. + // +optional + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } // Spec to control the desired behavior of rolling update. diff --git a/constraint/vendor/k8s.io/api/apps/v1/types.go b/constraint/vendor/k8s.io/api/apps/v1/types.go index e003a0c4f..48299f18e 100644 --- a/constraint/vendor/k8s.io/api/apps/v1/types.go +++ b/constraint/vendor/k8s.io/api/apps/v1/types.go @@ -488,19 +488,41 @@ type RollingUpdateDaemonSet struct { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total // number of DaemonSet pods at the start of the update (ex: 10%). Absolute - // number is calculated from percentage by rounding up. - // This cannot be 0. + // number is calculated from percentage by rounding down to a minimum of one. + // This cannot be 0 if MaxSurge is 0 // Default value is 1. // Example: when this is set to 30%, at most 30% of the total number of nodes // that should be running the daemon pod (i.e. status.desiredNumberScheduled) - // can have their pods stopped for an update at any given - // time. The update starts by stopping at most 30% of those DaemonSet pods - // and then brings up new DaemonSet pods in their place. Once the new pods - // are available, it then proceeds onto other DaemonSet pods, thus ensuring - // that at least 70% of original number of DaemonSet pods are available at - // all times during the update. + // can have their pods stopped for an update at any given time. The update + // starts by stopping at most 30% of those DaemonSet pods and then brings + // up new DaemonSet pods in their place. Once the new pods are available, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times during + // the update. // +optional MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"` + + // The maximum number of nodes with an existing available DaemonSet pod that + // can have an updated DaemonSet pod during during an update. + // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up to a minimum of 1. + // Default value is 0. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their a new pod created before the old pod is marked as deleted. + // The update starts by launching new pods on 30% of nodes. Once an updated + // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod + // on that node is marked deleted. If the old pod becomes unavailable for any + // reason (Ready transitions to false, is evicted, or is drained) an updated + // pod is immediatedly created on that node without considering surge limits. + // Allowing surge implies the possibility that the resources consumed by the + // daemonset on any given node can double if the readiness check fails, and + // so resource intensive daemonsets should take into account that they may + // cause evictions during disruption. + // This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate. + // +optional + MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } // DaemonSetSpec is the specification of a daemon set. diff --git a/constraint/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go index 3f0299d03..b9783ad20 100644 --- a/constraint/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go @@ -262,7 +262,8 @@ func (ReplicaSetStatus) SwaggerDoc() map[string]string { var map_RollingUpdateDaemonSet = map[string]string{ "": "Spec to control the desired behavior of daemon set rolling update.", - "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding down to a minimum of one. This cannot be 0 if MaxSurge is 0 Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + "maxSurge": "The maximum number of nodes with an existing available DaemonSet pod that can have an updated DaemonSet pod during during an update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up to a minimum of 1. Default value is 0. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their a new pod created before the old pod is marked as deleted. The update starts by launching new pods on 30% of nodes. Once an updated pod is available (Ready for at least minReadySeconds) the old DaemonSet pod on that node is marked deleted. If the old pod becomes unavailable for any reason (Ready transitions to false, is evicted, or is drained) an updated pod is immediatedly created on that node without considering surge limits. Allowing surge implies the possibility that the resources consumed by the daemonset on any given node can double if the readiness check fails, and so resource intensive daemonsets should take into account that they may cause evictions during disruption. This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate.", } func (RollingUpdateDaemonSet) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go index 7b7ff385c..0c8054852 100644 --- a/constraint/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go @@ -544,6 +544,11 @@ func (in *RollingUpdateDaemonSet) DeepCopyInto(out *RollingUpdateDaemonSet) { *out = new(intstr.IntOrString) **out = **in } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } return } diff --git a/constraint/vendor/k8s.io/api/apps/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/apps/v1beta1/generated.pb.go index f81b55901..6bc56e382 100644 --- a/constraint/vendor/k8s.io/api/apps/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/apps/v1beta1/generated.pb.go @@ -2734,10 +2734,7 @@ func (m *ControllerRevision) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2854,10 +2851,7 @@ func (m *ControllerRevisionList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3006,10 +3000,7 @@ func (m *Deployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3253,10 +3244,7 @@ func (m *DeploymentCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3373,10 +3361,7 @@ func (m *DeploymentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3568,7 +3553,7 @@ func (m *DeploymentRollback) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -3618,10 +3603,7 @@ func (m *DeploymentRollback) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3908,10 +3890,7 @@ func (m *DeploymentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4129,10 +4108,7 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4250,10 +4226,7 @@ func (m *DeploymentStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4322,10 +4295,7 @@ func (m *RollbackConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4447,10 +4417,7 @@ func (m *RollingUpdateDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4520,10 +4487,7 @@ func (m *RollingUpdateStatefulSetStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4672,10 +4636,7 @@ func (m *Scale) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4744,10 +4705,7 @@ func (m *ScaleSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4926,7 +4884,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -4975,10 +4933,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5127,10 +5082,7 @@ func (m *StatefulSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5341,10 +5293,7 @@ func (m *StatefulSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5461,10 +5410,7 @@ func (m *StatefulSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5754,10 +5700,7 @@ func (m *StatefulSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6021,10 +5964,7 @@ func (m *StatefulSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6142,10 +6082,7 @@ func (m *StatefulSetUpdateStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/apps/v1beta2/generated.pb.go b/constraint/vendor/k8s.io/api/apps/v1beta2/generated.pb.go index 8a9f20052..b2e5c2e97 100644 --- a/constraint/vendor/k8s.io/api/apps/v1beta2/generated.pb.go +++ b/constraint/vendor/k8s.io/api/apps/v1beta2/generated.pb.go @@ -957,143 +957,143 @@ func init() { } var fileDescriptor_42fe616264472f7e = []byte{ - // 2171 bytes of a gzipped FileDescriptorProto + // 2169 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1c, 0xb7, 0xf9, 0xd6, 0xec, 0x87, 0xb4, 0xa2, 0x2c, 0xc9, 0xa6, 0xf4, 0x93, 0x36, 0xf2, 0xaf, 0x2b, 0x63, 0x13, 0x38, 0x4a, 0x6c, 0xcd, 0xda, 0xca, 0x07, 0x12, 0xbb, 0x68, 0xab, 0x95, 0x52, 0xdb, 0x81, 0xbe, 0x42, 0x59, 0x06, 0x1a, 0xb4, 0xa8, 0xa9, 0x5d, 0x7a, 0x35, 0xd1, 0x7c, 0x61, 0x86, 0xb3, - 0xf5, 0xa2, 0x97, 0x9e, 0x0a, 0x14, 0x28, 0xd0, 0xf6, 0xda, 0x7f, 0xa2, 0xb7, 0xa2, 0x68, 0x6f, - 0x45, 0x50, 0xf8, 0x52, 0x20, 0xe8, 0x25, 0x39, 0x09, 0xf5, 0xe6, 0x54, 0x14, 0xbd, 0x14, 0xe8, - 0x25, 0x40, 0x81, 0x82, 0x1c, 0xce, 0x07, 0xe7, 0xc3, 0x3b, 0x52, 0x1c, 0xa5, 0x29, 0x72, 0xd3, - 0x92, 0xcf, 0xfb, 0xf0, 0x7d, 0xc9, 0x97, 0x7c, 0x1f, 0x72, 0x04, 0xbe, 0x73, 0xfc, 0x96, 0xab, - 0x6a, 0x56, 0xeb, 0xd8, 0x3b, 0x24, 0x8e, 0x49, 0x28, 0x71, 0x5b, 0x7d, 0x62, 0x76, 0x2d, 0xa7, - 0x25, 0x3a, 0xb0, 0xad, 0xb5, 0xb0, 0x6d, 0xbb, 0xad, 0xfe, 0xcd, 0x43, 0x42, 0xf1, 0x5a, 0xab, - 0x47, 0x4c, 0xe2, 0x60, 0x4a, 0xba, 0xaa, 0xed, 0x58, 0xd4, 0x82, 0x8b, 0x3e, 0x50, 0xc5, 0xb6, - 0xa6, 0x32, 0xa0, 0x2a, 0x80, 0x4b, 0xab, 0x3d, 0x8d, 0x1e, 0x79, 0x87, 0x6a, 0xc7, 0x32, 0x5a, - 0x3d, 0xab, 0x67, 0xb5, 0x38, 0xfe, 0xd0, 0x7b, 0xc4, 0x7f, 0xf1, 0x1f, 0xfc, 0x2f, 0x9f, 0x67, - 0xa9, 0x19, 0x1b, 0xb0, 0x63, 0x39, 0xa4, 0xd5, 0xbf, 0x99, 0x1c, 0x6b, 0xe9, 0xf5, 0x08, 0x63, - 0xe0, 0xce, 0x91, 0x66, 0x12, 0x67, 0xd0, 0xb2, 0x8f, 0x7b, 0xac, 0xc1, 0x6d, 0x19, 0x84, 0xe2, - 0x2c, 0xab, 0x56, 0x9e, 0x95, 0xe3, 0x99, 0x54, 0x33, 0x48, 0xca, 0xe0, 0xcd, 0x51, 0x06, 0x6e, - 0xe7, 0x88, 0x18, 0x38, 0x65, 0xf7, 0x5a, 0x9e, 0x9d, 0x47, 0x35, 0xbd, 0xa5, 0x99, 0xd4, 0xa5, - 0x4e, 0xd2, 0xa8, 0xf9, 0x2f, 0x05, 0xc0, 0x0d, 0xcb, 0xa4, 0x8e, 0xa5, 0xeb, 0xc4, 0x41, 0xa4, - 0xaf, 0xb9, 0x9a, 0x65, 0xc2, 0x87, 0xa0, 0xc6, 0xe2, 0xe9, 0x62, 0x8a, 0xeb, 0xca, 0x15, 0x65, - 0x65, 0x6a, 0xed, 0x86, 0x1a, 0xcd, 0x74, 0x48, 0xaf, 0xda, 0xc7, 0x3d, 0xd6, 0xe0, 0xaa, 0x0c, - 0xad, 0xf6, 0x6f, 0xaa, 0xbb, 0x87, 0x1f, 0x90, 0x0e, 0xdd, 0x26, 0x14, 0xb7, 0xe1, 0x93, 0x93, - 0xe5, 0xb1, 0xe1, 0xc9, 0x32, 0x88, 0xda, 0x50, 0xc8, 0x0a, 0x77, 0x41, 0x85, 0xb3, 0x97, 0x38, - 0xfb, 0x6a, 0x2e, 0xbb, 0x08, 0x5a, 0x45, 0xf8, 0x47, 0xef, 0x3c, 0xa6, 0xc4, 0x64, 0xee, 0xb5, - 0x2f, 0x08, 0xea, 0xca, 0x26, 0xa6, 0x18, 0x71, 0x22, 0x78, 0x1d, 0xd4, 0x1c, 0xe1, 0x7e, 0xbd, - 0x7c, 0x45, 0x59, 0x29, 0xb7, 0x2f, 0x0a, 0x54, 0x2d, 0x08, 0x0b, 0x85, 0x88, 0xe6, 0x13, 0x05, - 0x2c, 0xa4, 0xe3, 0xde, 0xd2, 0x5c, 0x0a, 0xbf, 0x9f, 0x8a, 0x5d, 0x2d, 0x16, 0x3b, 0xb3, 0xe6, - 0x91, 0x87, 0x03, 0x07, 0x2d, 0xb1, 0xb8, 0xf7, 0x40, 0x55, 0xa3, 0xc4, 0x70, 0xeb, 0xa5, 0x2b, - 0xe5, 0x95, 0xa9, 0xb5, 0x6b, 0x6a, 0x4e, 0x02, 0xab, 0x69, 0xef, 0xda, 0xd3, 0x82, 0xb7, 0x7a, - 0x8f, 0x31, 0x20, 0x9f, 0xa8, 0xf9, 0xb3, 0x12, 0x98, 0xdc, 0xc4, 0xc4, 0xb0, 0xcc, 0x7d, 0x42, - 0xcf, 0x61, 0xe5, 0xee, 0x82, 0x8a, 0x6b, 0x93, 0x8e, 0x58, 0xb9, 0xab, 0xb9, 0x01, 0x84, 0x3e, - 0xed, 0xdb, 0xa4, 0x13, 0x2d, 0x19, 0xfb, 0x85, 0x38, 0x03, 0xdc, 0x03, 0xe3, 0x2e, 0xc5, 0xd4, - 0x73, 0xf9, 0x82, 0x4d, 0xad, 0xad, 0x14, 0xe0, 0xe2, 0xf8, 0xf6, 0x8c, 0x60, 0x1b, 0xf7, 0x7f, - 0x23, 0xc1, 0xd3, 0xfc, 0x5b, 0x09, 0xc0, 0x10, 0xbb, 0x61, 0x99, 0x5d, 0x8d, 0xb2, 0x74, 0xbe, - 0x05, 0x2a, 0x74, 0x60, 0x13, 0x3e, 0x21, 0x93, 0xed, 0xab, 0x81, 0x2b, 0xf7, 0x07, 0x36, 0xf9, - 0xec, 0x64, 0x79, 0x21, 0x6d, 0xc1, 0x7a, 0x10, 0xb7, 0x81, 0x5b, 0xa1, 0x93, 0x25, 0x6e, 0xfd, - 0xba, 0x3c, 0xf4, 0x67, 0x27, 0xcb, 0x19, 0x67, 0x87, 0x1a, 0x32, 0xc9, 0x0e, 0xc2, 0x3e, 0x80, - 0x3a, 0x76, 0xe9, 0x7d, 0x07, 0x9b, 0xae, 0x3f, 0x92, 0x66, 0x10, 0x11, 0xfe, 0xab, 0xc5, 0x16, - 0x8a, 0x59, 0xb4, 0x97, 0x84, 0x17, 0x70, 0x2b, 0xc5, 0x86, 0x32, 0x46, 0x80, 0x57, 0xc1, 0xb8, - 0x43, 0xb0, 0x6b, 0x99, 0xf5, 0x0a, 0x8f, 0x22, 0x9c, 0x40, 0xc4, 0x5b, 0x91, 0xe8, 0x85, 0xaf, - 0x80, 0x09, 0x83, 0xb8, 0x2e, 0xee, 0x91, 0x7a, 0x95, 0x03, 0x67, 0x05, 0x70, 0x62, 0xdb, 0x6f, - 0x46, 0x41, 0x7f, 0xf3, 0xb7, 0x0a, 0x98, 0x0e, 0x67, 0xee, 0x1c, 0x76, 0xce, 0x1d, 0x79, 0xe7, - 0x34, 0x47, 0x27, 0x4b, 0xce, 0x86, 0xf9, 0xb0, 0x1c, 0x73, 0x9c, 0xa5, 0x23, 0xfc, 0x01, 0xa8, - 0xb9, 0x44, 0x27, 0x1d, 0x6a, 0x39, 0xc2, 0xf1, 0xd7, 0x0a, 0x3a, 0x8e, 0x0f, 0x89, 0xbe, 0x2f, - 0x4c, 0xdb, 0x17, 0x98, 0xe7, 0xc1, 0x2f, 0x14, 0x52, 0xc2, 0xf7, 0x40, 0x8d, 0x12, 0xc3, 0xd6, - 0x31, 0x25, 0x62, 0xd7, 0xbc, 0x18, 0x77, 0x9e, 0xe5, 0x0c, 0x23, 0xdb, 0xb3, 0xba, 0xf7, 0x05, - 0x8c, 0x6f, 0x99, 0x70, 0x32, 0x82, 0x56, 0x14, 0xd2, 0x40, 0x1b, 0xcc, 0x78, 0x76, 0x97, 0x21, - 0x29, 0x3b, 0xce, 0x7b, 0x03, 0x91, 0x43, 0x37, 0x46, 0xcf, 0xca, 0x81, 0x64, 0xd7, 0x5e, 0x10, - 0xa3, 0xcc, 0xc8, 0xed, 0x28, 0xc1, 0x0f, 0xd7, 0xc1, 0xac, 0xa1, 0x99, 0x88, 0xe0, 0xee, 0x60, - 0x9f, 0x74, 0x2c, 0xb3, 0xeb, 0xf2, 0x54, 0xaa, 0xb6, 0x17, 0x05, 0xc1, 0xec, 0xb6, 0xdc, 0x8d, - 0x92, 0x78, 0xb8, 0x05, 0xe6, 0x83, 0x03, 0xf8, 0xae, 0xe6, 0x52, 0xcb, 0x19, 0x6c, 0x69, 0x86, - 0x46, 0xeb, 0xe3, 0x9c, 0xa7, 0x3e, 0x3c, 0x59, 0x9e, 0x47, 0x19, 0xfd, 0x28, 0xd3, 0xaa, 0xf9, - 0xab, 0x71, 0x30, 0x9b, 0x38, 0x17, 0xe0, 0x03, 0xb0, 0xd0, 0xf1, 0x1c, 0x87, 0x98, 0x74, 0xc7, - 0x33, 0x0e, 0x89, 0xb3, 0xdf, 0x39, 0x22, 0x5d, 0x4f, 0x27, 0x5d, 0xbe, 0xac, 0xd5, 0x76, 0x43, - 0xf8, 0xba, 0xb0, 0x91, 0x89, 0x42, 0x39, 0xd6, 0xf0, 0x5d, 0x00, 0x4d, 0xde, 0xb4, 0xad, 0xb9, - 0x6e, 0xc8, 0x59, 0xe2, 0x9c, 0xe1, 0x56, 0xdc, 0x49, 0x21, 0x50, 0x86, 0x15, 0xf3, 0xb1, 0x4b, - 0x5c, 0xcd, 0x21, 0xdd, 0xa4, 0x8f, 0x65, 0xd9, 0xc7, 0xcd, 0x4c, 0x14, 0xca, 0xb1, 0x86, 0x6f, - 0x80, 0x29, 0x7f, 0x34, 0x3e, 0xe7, 0x62, 0x71, 0xe6, 0x04, 0xd9, 0xd4, 0x4e, 0xd4, 0x85, 0xe2, - 0x38, 0x16, 0x9a, 0x75, 0xe8, 0x12, 0xa7, 0x4f, 0xba, 0x77, 0x7c, 0x71, 0xc0, 0x2a, 0x68, 0x95, - 0x57, 0xd0, 0x30, 0xb4, 0xdd, 0x14, 0x02, 0x65, 0x58, 0xb1, 0xd0, 0xfc, 0xac, 0x49, 0x85, 0x36, - 0x2e, 0x87, 0x76, 0x90, 0x89, 0x42, 0x39, 0xd6, 0x2c, 0xf7, 0x7c, 0x97, 0xd7, 0xfb, 0x58, 0xd3, - 0xf1, 0xa1, 0x4e, 0xea, 0x13, 0x72, 0xee, 0xed, 0xc8, 0xdd, 0x28, 0x89, 0x87, 0x77, 0xc0, 0x25, - 0xbf, 0xe9, 0xc0, 0xc4, 0x21, 0x49, 0x8d, 0x93, 0xbc, 0x20, 0x48, 0x2e, 0xed, 0x24, 0x01, 0x28, - 0x6d, 0x03, 0x6f, 0x81, 0x99, 0x8e, 0xa5, 0xeb, 0x3c, 0x1f, 0x37, 0x2c, 0xcf, 0xa4, 0xf5, 0x49, - 0xce, 0x02, 0xd9, 0x1e, 0xda, 0x90, 0x7a, 0x50, 0x02, 0x09, 0x7f, 0x08, 0x40, 0x27, 0x28, 0x0c, - 0x6e, 0x1d, 0x8c, 0x50, 0x00, 0xe9, 0xb2, 0x14, 0x55, 0xe6, 0xb0, 0xc9, 0x45, 0x31, 0xca, 0xe6, - 0x87, 0x0a, 0x58, 0xcc, 0xd9, 0xe8, 0xf0, 0xdb, 0x52, 0x11, 0xbc, 0x96, 0x28, 0x82, 0x97, 0x73, - 0xcc, 0x62, 0x95, 0xf0, 0x08, 0x4c, 0x33, 0x41, 0xa2, 0x99, 0x3d, 0x1f, 0x22, 0xce, 0xb2, 0x56, - 0x6e, 0x00, 0x28, 0x8e, 0x8e, 0x4e, 0xe5, 0x4b, 0xc3, 0x93, 0xe5, 0x69, 0xa9, 0x0f, 0xc9, 0xc4, - 0xcd, 0x9f, 0x97, 0x00, 0xd8, 0x24, 0xb6, 0x6e, 0x0d, 0x0c, 0x62, 0x9e, 0x87, 0xa6, 0xb9, 0x27, - 0x69, 0x9a, 0x97, 0xf3, 0x97, 0x24, 0x74, 0x2a, 0x57, 0xd4, 0xbc, 0x97, 0x10, 0x35, 0xaf, 0x14, - 0x21, 0x7b, 0xb6, 0xaa, 0xf9, 0xb8, 0x0c, 0xe6, 0x22, 0x70, 0x24, 0x6b, 0x6e, 0x4b, 0x2b, 0xfa, - 0x72, 0x62, 0x45, 0x17, 0x33, 0x4c, 0xbe, 0x30, 0x5d, 0xf3, 0x01, 0x98, 0x61, 0xaa, 0xc3, 0x5f, - 0x3f, 0xae, 0x69, 0xc6, 0x4f, 0xad, 0x69, 0xc2, 0x4a, 0xb4, 0x25, 0x31, 0xa1, 0x04, 0x73, 0x8e, - 0x86, 0x9a, 0xf8, 0x2a, 0x6a, 0xa8, 0xdf, 0x29, 0x60, 0x26, 0x5a, 0xa6, 0x73, 0x10, 0x51, 0x77, - 0x65, 0x11, 0xf5, 0x62, 0x81, 0xe4, 0xcc, 0x51, 0x51, 0x1f, 0x57, 0xe2, 0xae, 0x73, 0x19, 0xb5, - 0xc2, 0xae, 0x60, 0xb6, 0xae, 0x75, 0xb0, 0x2b, 0xea, 0xed, 0x05, 0xff, 0xfa, 0xe5, 0xb7, 0xa1, - 0xb0, 0x57, 0x12, 0x5c, 0xa5, 0x2f, 0x56, 0x70, 0x95, 0x9f, 0x8f, 0xe0, 0xfa, 0x1e, 0xa8, 0xb9, - 0x81, 0xd4, 0xaa, 0x70, 0xca, 0x6b, 0x85, 0x36, 0xb6, 0x50, 0x59, 0x21, 0x75, 0xa8, 0xaf, 0x42, - 0xba, 0x2c, 0x65, 0x55, 0xfd, 0x32, 0x95, 0x15, 0x4b, 0x74, 0x1b, 0x7b, 0x2e, 0xe9, 0xf2, 0x4d, - 0x55, 0x8b, 0x12, 0x7d, 0x8f, 0xb7, 0x22, 0xd1, 0x0b, 0x0f, 0xc0, 0xa2, 0xed, 0x58, 0x3d, 0x87, - 0xb8, 0xee, 0x26, 0xc1, 0x5d, 0x5d, 0x33, 0x49, 0x10, 0x80, 0x5f, 0x13, 0x2f, 0x0f, 0x4f, 0x96, - 0x17, 0xf7, 0xb2, 0x21, 0x28, 0xcf, 0xb6, 0xf9, 0xc7, 0x0a, 0xb8, 0x98, 0x3c, 0x1b, 0x73, 0x64, - 0x8a, 0x72, 0x26, 0x99, 0x72, 0x3d, 0x96, 0xa7, 0xbe, 0x86, 0x8b, 0x3d, 0x15, 0xa4, 0x72, 0x75, - 0x1d, 0xcc, 0x0a, 0x59, 0x12, 0x74, 0x0a, 0xa1, 0x16, 0x2e, 0xcf, 0x81, 0xdc, 0x8d, 0x92, 0x78, - 0x78, 0x1b, 0x4c, 0x3b, 0x5c, 0x79, 0x05, 0x04, 0xbe, 0x7a, 0xf9, 0x3f, 0x41, 0x30, 0x8d, 0xe2, - 0x9d, 0x48, 0xc6, 0x32, 0xe5, 0x12, 0x09, 0x92, 0x80, 0xa0, 0x22, 0x2b, 0x97, 0xf5, 0x24, 0x00, - 0xa5, 0x6d, 0xe0, 0x36, 0x98, 0xf3, 0xcc, 0x34, 0x95, 0x9f, 0x6b, 0x97, 0x05, 0xd5, 0xdc, 0x41, - 0x1a, 0x82, 0xb2, 0xec, 0xe0, 0x43, 0x49, 0xcc, 0x8c, 0xf3, 0xf3, 0xe4, 0x7a, 0x81, 0x3d, 0x51, - 0x58, 0xcd, 0x64, 0x48, 0xad, 0x5a, 0x51, 0xa9, 0xd5, 0xfc, 0x83, 0x02, 0x60, 0x7a, 0x1f, 0x8e, - 0x7c, 0x09, 0x48, 0x59, 0xc4, 0x2a, 0xa6, 0x96, 0xad, 0x7f, 0x6e, 0x14, 0xd4, 0x3f, 0xd1, 0x81, - 0x5a, 0x4c, 0x00, 0x89, 0x89, 0x3e, 0x9f, 0x47, 0x9d, 0xa2, 0x02, 0x28, 0x72, 0xea, 0x39, 0x08, - 0xa0, 0x18, 0xd9, 0xb3, 0x05, 0xd0, 0xdf, 0x4b, 0x60, 0x2e, 0x02, 0x17, 0x16, 0x40, 0x19, 0x26, - 0x5f, 0x3f, 0xec, 0x14, 0x13, 0x25, 0xd1, 0xd4, 0xfd, 0x37, 0x89, 0x92, 0xc8, 0xab, 0x1c, 0x51, - 0xf2, 0x9b, 0x52, 0xdc, 0xf5, 0x53, 0x8a, 0x92, 0xe7, 0xf0, 0xc2, 0xf1, 0x95, 0xd3, 0x35, 0xcd, - 0x3f, 0x95, 0xc1, 0xc5, 0xe4, 0x3e, 0x94, 0x0a, 0xa4, 0x32, 0xb2, 0x40, 0xee, 0x81, 0xf9, 0x47, - 0x9e, 0xae, 0x0f, 0x78, 0x0c, 0xb1, 0x2a, 0xe9, 0x97, 0xd6, 0xff, 0x17, 0x96, 0xf3, 0xdf, 0xcd, - 0xc0, 0xa0, 0x4c, 0xcb, 0x74, 0xbd, 0xac, 0x7c, 0xde, 0x7a, 0x59, 0x3d, 0x43, 0xbd, 0xcc, 0x96, - 0x1c, 0xe5, 0x33, 0x49, 0x8e, 0xd3, 0x15, 0xcb, 0x8c, 0x83, 0x6b, 0xe4, 0xd5, 0xff, 0xa7, 0x0a, - 0x58, 0xc8, 0xbe, 0x70, 0x43, 0x1d, 0xcc, 0x18, 0xf8, 0x71, 0xfc, 0xe1, 0x63, 0x54, 0x11, 0xf1, - 0xa8, 0xa6, 0xab, 0xfe, 0x27, 0x23, 0xf5, 0x9e, 0x49, 0x77, 0x9d, 0x7d, 0xea, 0x68, 0x66, 0xcf, - 0xaf, 0xbc, 0xdb, 0x12, 0x17, 0x4a, 0x70, 0x37, 0x3f, 0x55, 0xc0, 0x62, 0x4e, 0xe5, 0x3b, 0x5f, - 0x4f, 0xe0, 0xfb, 0xa0, 0x66, 0xe0, 0xc7, 0xfb, 0x9e, 0xd3, 0xcb, 0xaa, 0xd5, 0xc5, 0xc6, 0xe1, - 0x5b, 0x71, 0x5b, 0xb0, 0xa0, 0x90, 0xaf, 0xb9, 0x0b, 0xae, 0x48, 0x41, 0xb2, 0x9d, 0x43, 0x1e, - 0x79, 0x3a, 0xdf, 0x44, 0x42, 0x6c, 0x5c, 0x03, 0x93, 0x36, 0x76, 0xa8, 0x16, 0x4a, 0xd5, 0x6a, - 0x7b, 0x7a, 0x78, 0xb2, 0x3c, 0xb9, 0x17, 0x34, 0xa2, 0xa8, 0xbf, 0xf9, 0x6f, 0x05, 0x54, 0xf7, - 0x3b, 0x58, 0x27, 0xe7, 0x50, 0xed, 0x37, 0xa5, 0x6a, 0x9f, 0xff, 0x92, 0xce, 0xfd, 0xc9, 0x2d, - 0xf4, 0x5b, 0x89, 0x42, 0xff, 0xd2, 0x08, 0x9e, 0x67, 0xd7, 0xf8, 0xb7, 0xc1, 0x64, 0x38, 0xdc, - 0xe9, 0x0e, 0xa0, 0xe6, 0xaf, 0x4b, 0x60, 0x2a, 0x36, 0xc4, 0x29, 0x8f, 0xaf, 0x87, 0xd2, 0x99, - 0xcd, 0x36, 0xe6, 0x5a, 0x91, 0x40, 0xd4, 0xe0, 0x7c, 0x7e, 0xc7, 0xa4, 0x4e, 0xfc, 0x82, 0x97, - 0x3e, 0xb6, 0xbf, 0x05, 0x66, 0x28, 0x76, 0x7a, 0x84, 0x06, 0x7d, 0x7c, 0xc2, 0x26, 0xa3, 0x07, - 0x8f, 0xfb, 0x52, 0x2f, 0x4a, 0xa0, 0x97, 0x6e, 0x83, 0x69, 0x69, 0x30, 0x78, 0x11, 0x94, 0x8f, - 0xc9, 0xc0, 0x97, 0x3d, 0x88, 0xfd, 0x09, 0xe7, 0x41, 0xb5, 0x8f, 0x75, 0xcf, 0xcf, 0xf3, 0x49, - 0xe4, 0xff, 0xb8, 0x55, 0x7a, 0x4b, 0x69, 0xfe, 0x82, 0x4d, 0x4e, 0x94, 0x9c, 0xe7, 0x90, 0x5d, - 0xef, 0x4a, 0xd9, 0x95, 0xff, 0x51, 0x2f, 0xbe, 0x65, 0xf2, 0x72, 0x0c, 0x25, 0x72, 0xec, 0xd5, - 0x42, 0x6c, 0xcf, 0xce, 0xb4, 0x7f, 0x94, 0xc0, 0x7c, 0x0c, 0x1d, 0xc9, 0xc9, 0x6f, 0x4a, 0x72, - 0x72, 0x25, 0x21, 0x27, 0xeb, 0x59, 0x36, 0x5f, 0xeb, 0xc9, 0xd1, 0x7a, 0xf2, 0xf7, 0x0a, 0x98, - 0x8d, 0xcd, 0xdd, 0x39, 0x08, 0xca, 0x7b, 0xb2, 0xa0, 0x7c, 0xa9, 0x48, 0xd2, 0xe4, 0x28, 0xca, - 0x3f, 0x57, 0x25, 0xe7, 0xff, 0xe7, 0xdf, 0xb9, 0x7e, 0x0c, 0xe6, 0xfb, 0x96, 0xee, 0x19, 0x64, - 0x43, 0xc7, 0x9a, 0x11, 0x00, 0x98, 0x02, 0x2b, 0x27, 0xef, 0x72, 0x21, 0x3d, 0x71, 0x5c, 0xcd, - 0xa5, 0xc4, 0xa4, 0x0f, 0x22, 0xcb, 0x48, 0xf7, 0x3d, 0xc8, 0xa0, 0x43, 0x99, 0x83, 0xc0, 0x37, - 0xc0, 0x14, 0x53, 0x4e, 0x5a, 0x87, 0xec, 0x60, 0x23, 0x48, 0xac, 0xf0, 0x13, 0xd6, 0x7e, 0xd4, - 0x85, 0xe2, 0x38, 0x78, 0x04, 0xe6, 0x6c, 0xab, 0xbb, 0x8d, 0x4d, 0xdc, 0x23, 0x4c, 0x66, 0xec, - 0x59, 0xba, 0xd6, 0x19, 0xf0, 0xc7, 0xaf, 0xc9, 0xf6, 0x9b, 0xc1, 0xc3, 0xc6, 0x5e, 0x1a, 0xc2, - 0x2e, 0x89, 0x19, 0xcd, 0x7c, 0x53, 0x67, 0x51, 0x42, 0x27, 0xf5, 0xd9, 0xd5, 0x7f, 0x76, 0x5e, - 0x2b, 0x92, 0x61, 0x67, 0xfc, 0xf0, 0x9a, 0xf7, 0xb6, 0x57, 0x3b, 0xd3, 0x57, 0xd3, 0x7f, 0x56, - 0xc0, 0xa5, 0xd4, 0x51, 0xf9, 0x25, 0xbe, 0xae, 0xa5, 0xa4, 0x7e, 0xf9, 0x14, 0x52, 0x7f, 0x1d, - 0xcc, 0x8a, 0x0f, 0xb6, 0x89, 0x9b, 0x42, 0x78, 0x63, 0xdb, 0x90, 0xbb, 0x51, 0x12, 0x9f, 0xf5, - 0xba, 0x57, 0x3d, 0xe5, 0xeb, 0x5e, 0xdc, 0x0b, 0xf1, 0x0f, 0x48, 0x7e, 0xea, 0xa5, 0xbd, 0x10, - 0xff, 0x87, 0x94, 0xc4, 0x33, 0x85, 0xe0, 0xb3, 0x86, 0x0c, 0x13, 0xb2, 0x42, 0x38, 0x90, 0x7a, - 0x51, 0x02, 0xfd, 0xb9, 0x3e, 0x4a, 0xe2, 0x8c, 0x8f, 0x92, 0xab, 0x45, 0xf2, 0xb9, 0xf8, 0xdd, - 0xe4, 0x2f, 0x0a, 0x78, 0x21, 0x77, 0x23, 0xc0, 0x75, 0xa9, 0xec, 0xae, 0x26, 0xca, 0xee, 0x37, - 0x72, 0x0d, 0x63, 0xb5, 0xd7, 0xc9, 0x7e, 0x9a, 0x7b, 0xbb, 0xd8, 0xd3, 0x5c, 0x86, 0x76, 0x1f, - 0xfd, 0x46, 0xd7, 0x5e, 0x7d, 0xf2, 0xb4, 0x31, 0xf6, 0xd1, 0xd3, 0xc6, 0xd8, 0x27, 0x4f, 0x1b, - 0x63, 0x3f, 0x19, 0x36, 0x94, 0x27, 0xc3, 0x86, 0xf2, 0xd1, 0xb0, 0xa1, 0x7c, 0x32, 0x6c, 0x28, - 0x7f, 0x1d, 0x36, 0x94, 0x5f, 0x7e, 0xda, 0x18, 0x7b, 0x7f, 0x42, 0x8c, 0xf8, 0x9f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x70, 0x2d, 0x26, 0x9d, 0xec, 0x28, 0x00, 0x00, + 0xf5, 0xa2, 0x97, 0x5e, 0x0b, 0x14, 0x68, 0x7b, 0xed, 0x3f, 0xd1, 0x5b, 0x51, 0xb4, 0xb7, 0x22, + 0x28, 0x7c, 0x29, 0x10, 0xf4, 0x92, 0x9c, 0x84, 0x7a, 0x73, 0x2a, 0x8a, 0x5e, 0x0a, 0xf4, 0x12, + 0xa0, 0x40, 0x41, 0x0e, 0xe7, 0x83, 0xf3, 0xe1, 0x1d, 0x29, 0x8e, 0xd2, 0x04, 0xb9, 0x69, 0xc9, + 0xe7, 0x7d, 0xf8, 0xbe, 0xe4, 0x4b, 0xbe, 0x0f, 0x39, 0x02, 0xdf, 0x3b, 0x7e, 0xcb, 0x55, 0x35, + 0xab, 0x75, 0xec, 0x1d, 0x12, 0xc7, 0x24, 0x94, 0xb8, 0xad, 0x3e, 0x31, 0xbb, 0x96, 0xd3, 0x12, + 0x1d, 0xd8, 0xd6, 0x5a, 0xd8, 0xb6, 0xdd, 0x56, 0xff, 0xe6, 0x21, 0xa1, 0x78, 0xad, 0xd5, 0x23, + 0x26, 0x71, 0x30, 0x25, 0x5d, 0xd5, 0x76, 0x2c, 0x6a, 0xc1, 0x45, 0x1f, 0xa8, 0x62, 0x5b, 0x53, + 0x19, 0x50, 0x15, 0xc0, 0xa5, 0xd5, 0x9e, 0x46, 0x8f, 0xbc, 0x43, 0xb5, 0x63, 0x19, 0xad, 0x9e, + 0xd5, 0xb3, 0x5a, 0x1c, 0x7f, 0xe8, 0x3d, 0xe2, 0xbf, 0xf8, 0x0f, 0xfe, 0x97, 0xcf, 0xb3, 0xd4, + 0x8c, 0x0d, 0xd8, 0xb1, 0x1c, 0xd2, 0xea, 0xdf, 0x4c, 0x8e, 0xb5, 0xf4, 0x7a, 0x84, 0x31, 0x70, + 0xe7, 0x48, 0x33, 0x89, 0x33, 0x68, 0xd9, 0xc7, 0x3d, 0xd6, 0xe0, 0xb6, 0x0c, 0x42, 0x71, 0x96, + 0x55, 0x2b, 0xcf, 0xca, 0xf1, 0x4c, 0xaa, 0x19, 0x24, 0x65, 0xf0, 0xe6, 0x28, 0x03, 0xb7, 0x73, + 0x44, 0x0c, 0x9c, 0xb2, 0x7b, 0x2d, 0xcf, 0xce, 0xa3, 0x9a, 0xde, 0xd2, 0x4c, 0xea, 0x52, 0x27, + 0x69, 0xd4, 0xfc, 0xb7, 0x02, 0xe0, 0x86, 0x65, 0x52, 0xc7, 0xd2, 0x75, 0xe2, 0x20, 0xd2, 0xd7, + 0x5c, 0xcd, 0x32, 0xe1, 0x43, 0x50, 0x63, 0xf1, 0x74, 0x31, 0xc5, 0x75, 0xe5, 0x8a, 0xb2, 0x32, + 0xb5, 0x76, 0x43, 0x8d, 0x66, 0x3a, 0xa4, 0x57, 0xed, 0xe3, 0x1e, 0x6b, 0x70, 0x55, 0x86, 0x56, + 0xfb, 0x37, 0xd5, 0xdd, 0xc3, 0x0f, 0x48, 0x87, 0x6e, 0x13, 0x8a, 0xdb, 0xf0, 0xc9, 0xc9, 0xf2, + 0xd8, 0xf0, 0x64, 0x19, 0x44, 0x6d, 0x28, 0x64, 0x85, 0xbb, 0xa0, 0xc2, 0xd9, 0x4b, 0x9c, 0x7d, + 0x35, 0x97, 0x5d, 0x04, 0xad, 0x22, 0xfc, 0x93, 0x77, 0x1e, 0x53, 0x62, 0x32, 0xf7, 0xda, 0x17, + 0x04, 0x75, 0x65, 0x13, 0x53, 0x8c, 0x38, 0x11, 0xbc, 0x0e, 0x6a, 0x8e, 0x70, 0xbf, 0x5e, 0xbe, + 0xa2, 0xac, 0x94, 0xdb, 0x17, 0x05, 0xaa, 0x16, 0x84, 0x85, 0x42, 0x44, 0xf3, 0x89, 0x02, 0x16, + 0xd2, 0x71, 0x6f, 0x69, 0x2e, 0x85, 0x3f, 0x4c, 0xc5, 0xae, 0x16, 0x8b, 0x9d, 0x59, 0xf3, 0xc8, + 0xc3, 0x81, 0x83, 0x96, 0x58, 0xdc, 0x7b, 0xa0, 0xaa, 0x51, 0x62, 0xb8, 0xf5, 0xd2, 0x95, 0xf2, + 0xca, 0xd4, 0xda, 0x35, 0x35, 0x27, 0x81, 0xd5, 0xb4, 0x77, 0xed, 0x69, 0xc1, 0x5b, 0xbd, 0xc7, + 0x18, 0x90, 0x4f, 0xd4, 0xfc, 0x79, 0x09, 0x4c, 0x6e, 0x62, 0x62, 0x58, 0xe6, 0x3e, 0xa1, 0xe7, + 0xb0, 0x72, 0x77, 0x41, 0xc5, 0xb5, 0x49, 0x47, 0xac, 0xdc, 0xd5, 0xdc, 0x00, 0x42, 0x9f, 0xf6, + 0x6d, 0xd2, 0x89, 0x96, 0x8c, 0xfd, 0x42, 0x9c, 0x01, 0xee, 0x81, 0x71, 0x97, 0x62, 0xea, 0xb9, + 0x7c, 0xc1, 0xa6, 0xd6, 0x56, 0x0a, 0x70, 0x71, 0x7c, 0x7b, 0x46, 0xb0, 0x8d, 0xfb, 0xbf, 0x91, + 0xe0, 0x69, 0xfe, 0xbd, 0x04, 0x60, 0x88, 0xdd, 0xb0, 0xcc, 0xae, 0x46, 0x59, 0x3a, 0xdf, 0x02, + 0x15, 0x3a, 0xb0, 0x09, 0x9f, 0x90, 0xc9, 0xf6, 0xd5, 0xc0, 0x95, 0xfb, 0x03, 0x9b, 0x7c, 0x76, + 0xb2, 0xbc, 0x90, 0xb6, 0x60, 0x3d, 0x88, 0xdb, 0xc0, 0xad, 0xd0, 0xc9, 0x12, 0xb7, 0x7e, 0x5d, + 0x1e, 0xfa, 0xb3, 0x93, 0xe5, 0x8c, 0xb3, 0x43, 0x0d, 0x99, 0x64, 0x07, 0x61, 0x1f, 0x40, 0x1d, + 0xbb, 0xf4, 0xbe, 0x83, 0x4d, 0xd7, 0x1f, 0x49, 0x33, 0x88, 0x08, 0xff, 0xd5, 0x62, 0x0b, 0xc5, + 0x2c, 0xda, 0x4b, 0xc2, 0x0b, 0xb8, 0x95, 0x62, 0x43, 0x19, 0x23, 0xc0, 0xab, 0x60, 0xdc, 0x21, + 0xd8, 0xb5, 0xcc, 0x7a, 0x85, 0x47, 0x11, 0x4e, 0x20, 0xe2, 0xad, 0x48, 0xf4, 0xc2, 0x57, 0xc0, + 0x84, 0x41, 0x5c, 0x17, 0xf7, 0x48, 0xbd, 0xca, 0x81, 0xb3, 0x02, 0x38, 0xb1, 0xed, 0x37, 0xa3, + 0xa0, 0xbf, 0xf9, 0x3b, 0x05, 0x4c, 0x87, 0x33, 0x77, 0x0e, 0x3b, 0xe7, 0x8e, 0xbc, 0x73, 0x9a, + 0xa3, 0x93, 0x25, 0x67, 0xc3, 0x7c, 0x58, 0x8e, 0x39, 0xce, 0xd2, 0x11, 0xfe, 0x08, 0xd4, 0x5c, + 0xa2, 0x93, 0x0e, 0xb5, 0x1c, 0xe1, 0xf8, 0x6b, 0x05, 0x1d, 0xc7, 0x87, 0x44, 0xdf, 0x17, 0xa6, + 0xed, 0x0b, 0xcc, 0xf3, 0xe0, 0x17, 0x0a, 0x29, 0xe1, 0x7b, 0xa0, 0x46, 0x89, 0x61, 0xeb, 0x98, + 0x12, 0xb1, 0x6b, 0x5e, 0x8c, 0x3b, 0xcf, 0x72, 0x86, 0x91, 0xed, 0x59, 0xdd, 0xfb, 0x02, 0xc6, + 0xb7, 0x4c, 0x38, 0x19, 0x41, 0x2b, 0x0a, 0x69, 0xa0, 0x0d, 0x66, 0x3c, 0xbb, 0xcb, 0x90, 0x94, + 0x1d, 0xe7, 0xbd, 0x81, 0xc8, 0xa1, 0x1b, 0xa3, 0x67, 0xe5, 0x40, 0xb2, 0x6b, 0x2f, 0x88, 0x51, + 0x66, 0xe4, 0x76, 0x94, 0xe0, 0x87, 0xeb, 0x60, 0xd6, 0xd0, 0x4c, 0x44, 0x70, 0x77, 0xb0, 0x4f, + 0x3a, 0x96, 0xd9, 0x75, 0x79, 0x2a, 0x55, 0xdb, 0x8b, 0x82, 0x60, 0x76, 0x5b, 0xee, 0x46, 0x49, + 0x3c, 0xdc, 0x02, 0xf3, 0xc1, 0x01, 0x7c, 0x57, 0x73, 0xa9, 0xe5, 0x0c, 0xb6, 0x34, 0x43, 0xa3, + 0xf5, 0x71, 0xce, 0x53, 0x1f, 0x9e, 0x2c, 0xcf, 0xa3, 0x8c, 0x7e, 0x94, 0x69, 0xd5, 0xfc, 0xf5, + 0x38, 0x98, 0x4d, 0x9c, 0x0b, 0xf0, 0x01, 0x58, 0xe8, 0x78, 0x8e, 0x43, 0x4c, 0xba, 0xe3, 0x19, + 0x87, 0xc4, 0xd9, 0xef, 0x1c, 0x91, 0xae, 0xa7, 0x93, 0x2e, 0x5f, 0xd6, 0x6a, 0xbb, 0x21, 0x7c, + 0x5d, 0xd8, 0xc8, 0x44, 0xa1, 0x1c, 0x6b, 0xf8, 0x2e, 0x80, 0x26, 0x6f, 0xda, 0xd6, 0x5c, 0x37, + 0xe4, 0x2c, 0x71, 0xce, 0x70, 0x2b, 0xee, 0xa4, 0x10, 0x28, 0xc3, 0x8a, 0xf9, 0xd8, 0x25, 0xae, + 0xe6, 0x90, 0x6e, 0xd2, 0xc7, 0xb2, 0xec, 0xe3, 0x66, 0x26, 0x0a, 0xe5, 0x58, 0xc3, 0x37, 0xc0, + 0x94, 0x3f, 0x1a, 0x9f, 0x73, 0xb1, 0x38, 0x73, 0x82, 0x6c, 0x6a, 0x27, 0xea, 0x42, 0x71, 0x1c, + 0x0b, 0xcd, 0x3a, 0x74, 0x89, 0xd3, 0x27, 0xdd, 0x3b, 0xbe, 0x38, 0x60, 0x15, 0xb4, 0xca, 0x2b, + 0x68, 0x18, 0xda, 0x6e, 0x0a, 0x81, 0x32, 0xac, 0x58, 0x68, 0x7e, 0xd6, 0xa4, 0x42, 0x1b, 0x97, + 0x43, 0x3b, 0xc8, 0x44, 0xa1, 0x1c, 0x6b, 0x96, 0x7b, 0xbe, 0xcb, 0xeb, 0x7d, 0xac, 0xe9, 0xf8, + 0x50, 0x27, 0xf5, 0x09, 0x39, 0xf7, 0x76, 0xe4, 0x6e, 0x94, 0xc4, 0xc3, 0x3b, 0xe0, 0x92, 0xdf, + 0x74, 0x60, 0xe2, 0x90, 0xa4, 0xc6, 0x49, 0x5e, 0x10, 0x24, 0x97, 0x76, 0x92, 0x00, 0x94, 0xb6, + 0x81, 0xb7, 0xc0, 0x4c, 0xc7, 0xd2, 0x75, 0x9e, 0x8f, 0x1b, 0x96, 0x67, 0xd2, 0xfa, 0x24, 0x67, + 0x81, 0x6c, 0x0f, 0x6d, 0x48, 0x3d, 0x28, 0x81, 0x84, 0x3f, 0x06, 0xa0, 0x13, 0x14, 0x06, 0xb7, + 0x0e, 0x46, 0x28, 0x80, 0x74, 0x59, 0x8a, 0x2a, 0x73, 0xd8, 0xe4, 0xa2, 0x18, 0x65, 0xf3, 0x43, + 0x05, 0x2c, 0xe6, 0x6c, 0x74, 0xf8, 0x5d, 0xa9, 0x08, 0x5e, 0x4b, 0x14, 0xc1, 0xcb, 0x39, 0x66, + 0xb1, 0x4a, 0x78, 0x04, 0xa6, 0x99, 0x20, 0xd1, 0xcc, 0x9e, 0x0f, 0x11, 0x67, 0x59, 0x2b, 0x37, + 0x00, 0x14, 0x47, 0x47, 0xa7, 0xf2, 0xa5, 0xe1, 0xc9, 0xf2, 0xb4, 0xd4, 0x87, 0x64, 0xe2, 0xe6, + 0x2f, 0x4a, 0x00, 0x6c, 0x12, 0x5b, 0xb7, 0x06, 0x06, 0x31, 0xcf, 0x43, 0xd3, 0xdc, 0x93, 0x34, + 0xcd, 0xcb, 0xf9, 0x4b, 0x12, 0x3a, 0x95, 0x2b, 0x6a, 0xde, 0x4b, 0x88, 0x9a, 0x57, 0x8a, 0x90, + 0x3d, 0x5b, 0xd5, 0x7c, 0x5c, 0x06, 0x73, 0x11, 0x38, 0x92, 0x35, 0xb7, 0xa5, 0x15, 0x7d, 0x39, + 0xb1, 0xa2, 0x8b, 0x19, 0x26, 0x5f, 0x98, 0xae, 0xf9, 0x00, 0xcc, 0x30, 0xd5, 0xe1, 0xaf, 0x1f, + 0xd7, 0x34, 0xe3, 0xa7, 0xd6, 0x34, 0x61, 0x25, 0xda, 0x92, 0x98, 0x50, 0x82, 0x39, 0x47, 0x43, + 0x4d, 0x7c, 0x15, 0x35, 0xd4, 0xef, 0x15, 0x30, 0x13, 0x2d, 0xd3, 0x39, 0x88, 0xa8, 0xbb, 0xb2, + 0x88, 0x7a, 0xb1, 0x40, 0x72, 0xe6, 0xa8, 0xa8, 0x8f, 0x2b, 0x71, 0xd7, 0xb9, 0x8c, 0x5a, 0x61, + 0x57, 0x30, 0x5b, 0xd7, 0x3a, 0xd8, 0x15, 0xf5, 0xf6, 0x82, 0x7f, 0xfd, 0xf2, 0xdb, 0x50, 0xd8, + 0x2b, 0x09, 0xae, 0xd2, 0x17, 0x2b, 0xb8, 0xca, 0xcf, 0x47, 0x70, 0xfd, 0x00, 0xd4, 0xdc, 0x40, + 0x6a, 0x55, 0x38, 0xe5, 0xb5, 0x42, 0x1b, 0x5b, 0xa8, 0xac, 0x90, 0x3a, 0xd4, 0x57, 0x21, 0x5d, + 0x96, 0xb2, 0xaa, 0x7e, 0x99, 0xca, 0x8a, 0x25, 0xba, 0x8d, 0x3d, 0x97, 0x74, 0xf9, 0xa6, 0xaa, + 0x45, 0x89, 0xbe, 0xc7, 0x5b, 0x91, 0xe8, 0x85, 0x07, 0x60, 0xd1, 0x76, 0xac, 0x9e, 0x43, 0x5c, + 0x77, 0x93, 0xe0, 0xae, 0xae, 0x99, 0x24, 0x08, 0xc0, 0xaf, 0x89, 0x97, 0x87, 0x27, 0xcb, 0x8b, + 0x7b, 0xd9, 0x10, 0x94, 0x67, 0xdb, 0xfc, 0x53, 0x05, 0x5c, 0x4c, 0x9e, 0x8d, 0x39, 0x32, 0x45, + 0x39, 0x93, 0x4c, 0xb9, 0x1e, 0xcb, 0x53, 0x5f, 0xc3, 0xc5, 0x9e, 0x0a, 0x52, 0xb9, 0xba, 0x0e, + 0x66, 0x85, 0x2c, 0x09, 0x3a, 0x85, 0x50, 0x0b, 0x97, 0xe7, 0x40, 0xee, 0x46, 0x49, 0x3c, 0xbc, + 0x0d, 0xa6, 0x1d, 0xae, 0xbc, 0x02, 0x02, 0x5f, 0xbd, 0xfc, 0x9f, 0x20, 0x98, 0x46, 0xf1, 0x4e, + 0x24, 0x63, 0x99, 0x72, 0x89, 0x04, 0x49, 0x40, 0x50, 0x91, 0x95, 0xcb, 0x7a, 0x12, 0x80, 0xd2, + 0x36, 0x70, 0x1b, 0xcc, 0x79, 0x66, 0x9a, 0xca, 0xcf, 0xb5, 0xcb, 0x82, 0x6a, 0xee, 0x20, 0x0d, + 0x41, 0x59, 0x76, 0xf0, 0xa1, 0x24, 0x66, 0xc6, 0xf9, 0x79, 0x72, 0xbd, 0xc0, 0x9e, 0x28, 0xac, + 0x66, 0x32, 0xa4, 0x56, 0xad, 0xa8, 0xd4, 0x6a, 0xfe, 0x51, 0x01, 0x30, 0xbd, 0x0f, 0x47, 0xbe, + 0x04, 0xa4, 0x2c, 0x62, 0x15, 0x53, 0xcb, 0xd6, 0x3f, 0x37, 0x0a, 0xea, 0x9f, 0xe8, 0x40, 0x2d, + 0x26, 0x80, 0xc4, 0x44, 0x9f, 0xcf, 0xa3, 0x4e, 0x51, 0x01, 0x14, 0x39, 0xf5, 0x1c, 0x04, 0x50, + 0x8c, 0xec, 0xd9, 0x02, 0xe8, 0x1f, 0x25, 0x30, 0x17, 0x81, 0x0b, 0x0b, 0xa0, 0x0c, 0x93, 0x6f, + 0x1e, 0x76, 0x8a, 0x89, 0x92, 0x68, 0xea, 0xfe, 0x97, 0x44, 0x49, 0xe4, 0x55, 0x8e, 0x28, 0xf9, + 0x6d, 0x29, 0xee, 0xfa, 0x29, 0x45, 0xc9, 0x73, 0x78, 0xe1, 0xf8, 0xca, 0xe9, 0x9a, 0xe6, 0x9f, + 0xcb, 0xe0, 0x62, 0x72, 0x1f, 0x4a, 0x05, 0x52, 0x19, 0x59, 0x20, 0xf7, 0xc0, 0xfc, 0x23, 0x4f, + 0xd7, 0x07, 0x3c, 0x86, 0x58, 0x95, 0xf4, 0x4b, 0xeb, 0xff, 0x0b, 0xcb, 0xf9, 0xef, 0x67, 0x60, + 0x50, 0xa6, 0x65, 0xba, 0x5e, 0x56, 0x3e, 0x6f, 0xbd, 0xac, 0x9e, 0xa1, 0x5e, 0x66, 0x4b, 0x8e, + 0xf2, 0x99, 0x24, 0xc7, 0xe9, 0x8a, 0x65, 0xc6, 0xc1, 0x35, 0xf2, 0xea, 0x3f, 0x54, 0xc0, 0x42, + 0xf6, 0x85, 0x1b, 0xea, 0x60, 0xc6, 0xc0, 0x8f, 0xe3, 0x0f, 0x1f, 0xa3, 0x8a, 0x88, 0x47, 0x35, + 0x5d, 0xf5, 0x3f, 0x19, 0xa9, 0xf7, 0x4c, 0xba, 0xeb, 0xec, 0x53, 0x47, 0x33, 0x7b, 0x7e, 0xe5, + 0xdd, 0x96, 0xb8, 0x50, 0x82, 0x1b, 0xbe, 0x0f, 0x6a, 0x06, 0x7e, 0xbc, 0xef, 0x39, 0xbd, 0xac, + 0x0a, 0x59, 0x6c, 0x1c, 0xbe, 0x01, 0xb6, 0x05, 0x0b, 0x0a, 0xf9, 0x9a, 0x9f, 0x2a, 0x60, 0x31, + 0xa7, 0xaa, 0x7e, 0x8d, 0xa2, 0xdc, 0x05, 0x57, 0xa4, 0x20, 0xd9, 0xae, 0x24, 0x8f, 0x3c, 0x9d, + 0x6f, 0x50, 0x21, 0x64, 0xae, 0x81, 0x49, 0x1b, 0x3b, 0x54, 0x0b, 0x65, 0x70, 0xb5, 0x3d, 0x3d, + 0x3c, 0x59, 0x9e, 0xdc, 0x0b, 0x1a, 0x51, 0xd4, 0xdf, 0xfc, 0x8f, 0x02, 0xaa, 0xfb, 0x1d, 0xac, + 0x93, 0x73, 0x50, 0x12, 0x9b, 0x92, 0x92, 0xc8, 0x7f, 0xa5, 0xe7, 0xfe, 0xe4, 0x8a, 0x88, 0xad, + 0x84, 0x88, 0x78, 0x69, 0x04, 0xcf, 0xb3, 0xf5, 0xc3, 0xdb, 0x60, 0x32, 0x1c, 0xee, 0x74, 0x87, + 0x5b, 0xf3, 0x37, 0x25, 0x30, 0x15, 0x1b, 0xe2, 0x94, 0x47, 0xe3, 0x43, 0xa9, 0x1e, 0xb0, 0x4d, + 0xbf, 0x56, 0x24, 0x10, 0x35, 0x38, 0xfb, 0xdf, 0x31, 0xa9, 0x13, 0xbf, 0x3c, 0xa6, 0x4b, 0xc2, + 0x77, 0xc0, 0x0c, 0xc5, 0x4e, 0x8f, 0xd0, 0xa0, 0x8f, 0x4f, 0xd8, 0x64, 0xf4, 0x98, 0x72, 0x5f, + 0xea, 0x45, 0x09, 0xf4, 0xd2, 0x6d, 0x30, 0x2d, 0x0d, 0x06, 0x2f, 0x82, 0xf2, 0x31, 0x19, 0xf8, + 0x92, 0x0a, 0xb1, 0x3f, 0xe1, 0x3c, 0xa8, 0xf6, 0xb1, 0xee, 0xf9, 0x79, 0x3e, 0x89, 0xfc, 0x1f, + 0xb7, 0x4a, 0x6f, 0x29, 0xcd, 0x5f, 0xb2, 0xc9, 0x89, 0x92, 0xf3, 0x1c, 0xb2, 0xeb, 0x5d, 0x29, + 0xbb, 0xf2, 0x3f, 0x18, 0xc6, 0xb7, 0x4c, 0x5e, 0x8e, 0xa1, 0x44, 0x8e, 0xbd, 0x5a, 0x88, 0xed, + 0xd9, 0x99, 0xf6, 0xcf, 0x12, 0x98, 0x8f, 0xa1, 0x23, 0xa9, 0xfa, 0x6d, 0x49, 0xaa, 0xae, 0x24, + 0xa4, 0x6a, 0x3d, 0xcb, 0xe6, 0x1b, 0xad, 0x3a, 0x5a, 0xab, 0xfe, 0x41, 0x01, 0xb3, 0xb1, 0xb9, + 0x3b, 0x07, 0xb1, 0x7a, 0x4f, 0x16, 0xab, 0x2f, 0x15, 0x49, 0x9a, 0x1c, 0xb5, 0xfa, 0x97, 0xaa, + 0xe4, 0xfc, 0xd7, 0xfe, 0x0d, 0xed, 0xa7, 0x60, 0xbe, 0x6f, 0xe9, 0x9e, 0x41, 0x36, 0x74, 0xac, + 0x19, 0x01, 0x80, 0xa9, 0xbb, 0x72, 0xf2, 0x9e, 0x18, 0xd2, 0x13, 0xc7, 0xd5, 0x5c, 0x4a, 0x4c, + 0xfa, 0x20, 0xb2, 0x8c, 0x34, 0xe5, 0x83, 0x0c, 0x3a, 0x94, 0x39, 0x08, 0x7c, 0x03, 0x4c, 0x31, + 0x55, 0xa6, 0x75, 0xc8, 0x0e, 0x36, 0x82, 0xc4, 0x0a, 0x3f, 0x8f, 0xed, 0x47, 0x5d, 0x28, 0x8e, + 0x83, 0x47, 0x60, 0xce, 0xb6, 0xba, 0xdb, 0xd8, 0xc4, 0x3d, 0xc2, 0x64, 0xc6, 0x9e, 0xa5, 0x6b, + 0x9d, 0x01, 0x7f, 0x58, 0x9b, 0x6c, 0xbf, 0x19, 0x3c, 0x9a, 0xec, 0xa5, 0x21, 0xec, 0x02, 0x9a, + 0xd1, 0xcc, 0x37, 0x75, 0x16, 0x25, 0x74, 0x52, 0x9f, 0x74, 0xfd, 0x27, 0xed, 0xb5, 0x22, 0x19, + 0x76, 0xc6, 0x8f, 0xba, 0x79, 0xef, 0x86, 0xb5, 0x33, 0x7d, 0x91, 0xfd, 0x57, 0x05, 0x5c, 0x4a, + 0x1d, 0x95, 0x5f, 0xe2, 0xcb, 0x5d, 0xea, 0x1a, 0x51, 0x3e, 0xc5, 0x35, 0x62, 0x1d, 0xcc, 0x8a, + 0x8f, 0xc1, 0x89, 0x5b, 0x48, 0x78, 0x1b, 0xdc, 0x90, 0xbb, 0x51, 0x12, 0x9f, 0xf5, 0x72, 0x58, + 0x3d, 0xe5, 0xcb, 0x61, 0xdc, 0x0b, 0xf1, 0xcf, 0x4d, 0x7e, 0xea, 0xa5, 0xbd, 0x10, 0xff, 0xe3, + 0x94, 0xc4, 0x33, 0x85, 0xe0, 0xb3, 0x86, 0x0c, 0x13, 0xb2, 0x42, 0x38, 0x90, 0x7a, 0x51, 0x02, + 0xfd, 0xb9, 0x3e, 0x78, 0xe2, 0x8c, 0x0f, 0x9e, 0xab, 0x45, 0xf2, 0xb9, 0xf8, 0xbd, 0xe7, 0xaf, + 0x0a, 0x78, 0x21, 0x77, 0x23, 0xc0, 0x75, 0xa9, 0xec, 0xae, 0x26, 0xca, 0xee, 0xb7, 0x72, 0x0d, + 0x63, 0xb5, 0xd7, 0xc9, 0x7e, 0xf6, 0x7b, 0xbb, 0xd8, 0xb3, 0x5f, 0x86, 0x76, 0x1f, 0xfd, 0xfe, + 0xd7, 0x5e, 0x7d, 0xf2, 0xb4, 0x31, 0xf6, 0xd1, 0xd3, 0xc6, 0xd8, 0x27, 0x4f, 0x1b, 0x63, 0x3f, + 0x1b, 0x36, 0x94, 0x27, 0xc3, 0x86, 0xf2, 0xd1, 0xb0, 0xa1, 0x7c, 0x32, 0x6c, 0x28, 0x7f, 0x1b, + 0x36, 0x94, 0x5f, 0x7d, 0xda, 0x18, 0x7b, 0x7f, 0x42, 0x8c, 0xf8, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xd0, 0xf7, 0x24, 0x13, 0x48, 0x29, 0x00, 0x00, } func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { @@ -2133,6 +2133,18 @@ func (m *RollingUpdateDaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.MaxUnavailable != nil { { size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) @@ -3081,6 +3093,10 @@ func (m *RollingUpdateDaemonSet) Size() (n int) { l = m.MaxUnavailable.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.MaxSurge != nil { + l = m.MaxSurge.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -3583,6 +3599,7 @@ func (this *RollingUpdateDaemonSet) String() string { } s := strings.Join([]string{`&RollingUpdateDaemonSet{`, `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -3878,10 +3895,7 @@ func (m *ControllerRevision) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3998,10 +4012,7 @@ func (m *ControllerRevisionList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4150,10 +4161,7 @@ func (m *DaemonSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4364,10 +4372,7 @@ func (m *DaemonSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4484,10 +4489,7 @@ func (m *DaemonSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4678,10 +4680,7 @@ func (m *DaemonSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4937,10 +4936,7 @@ func (m *DaemonSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5058,10 +5054,7 @@ func (m *DaemonSetUpdateStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5210,10 +5203,7 @@ func (m *Deployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5457,10 +5447,7 @@ func (m *DeploymentCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5577,10 +5564,7 @@ func (m *DeploymentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5831,10 +5815,7 @@ func (m *DeploymentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6052,10 +6033,7 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6173,10 +6151,7 @@ func (m *DeploymentStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6325,10 +6300,7 @@ func (m *ReplicaSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6539,10 +6511,7 @@ func (m *ReplicaSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6659,10 +6628,7 @@ func (m *ReplicaSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6820,10 +6786,7 @@ func (m *ReplicaSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7002,10 +6965,7 @@ func (m *ReplicaSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7085,16 +7045,49 @@ func (m *RollingUpdateDaemonSet) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSurge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxSurge == nil { + m.MaxSurge = &intstr.IntOrString{} + } + if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7216,10 +7209,7 @@ func (m *RollingUpdateDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7289,10 +7279,7 @@ func (m *RollingUpdateStatefulSetStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7441,10 +7428,7 @@ func (m *Scale) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7513,10 +7497,7 @@ func (m *ScaleSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7695,7 +7676,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7744,10 +7725,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7896,10 +7874,7 @@ func (m *StatefulSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8110,10 +8085,7 @@ func (m *StatefulSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8230,10 +8202,7 @@ func (m *StatefulSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8523,10 +8492,7 @@ func (m *StatefulSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8789,10 +8755,7 @@ func (m *StatefulSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8910,10 +8873,7 @@ func (m *StatefulSetUpdateStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/apps/v1beta2/generated.proto b/constraint/vendor/k8s.io/api/apps/v1beta2/generated.proto index 1ea7e23a8..ff306ba6a 100644 --- a/constraint/vendor/k8s.io/api/apps/v1beta2/generated.proto +++ b/constraint/vendor/k8s.io/api/apps/v1beta2/generated.proto @@ -487,19 +487,41 @@ message RollingUpdateDaemonSet { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total // number of DaemonSet pods at the start of the update (ex: 10%). Absolute - // number is calculated from percentage by rounding up. - // This cannot be 0. + // number is calculated from percentage by rounding down to a minimum of one. + // This cannot be 0 if MaxSurge is 0 // Default value is 1. // Example: when this is set to 30%, at most 30% of the total number of nodes // that should be running the daemon pod (i.e. status.desiredNumberScheduled) - // can have their pods stopped for an update at any given - // time. The update starts by stopping at most 30% of those DaemonSet pods - // and then brings up new DaemonSet pods in their place. Once the new pods - // are available, it then proceeds onto other DaemonSet pods, thus ensuring - // that at least 70% of original number of DaemonSet pods are available at - // all times during the update. + // can have their pods stopped for an update at any given time. The update + // starts by stopping at most 30% of those DaemonSet pods and then brings + // up new DaemonSet pods in their place. Once the new pods are available, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times during + // the update. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 1; + + // The maximum number of nodes with an existing available DaemonSet pod that + // can have an updated DaemonSet pod during during an update. + // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up to a minimum of 1. + // Default value is 0. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their a new pod created before the old pod is marked as deleted. + // The update starts by launching new pods on 30% of nodes. Once an updated + // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod + // on that node is marked deleted. If the old pod becomes unavailable for any + // reason (Ready transitions to false, is evicted, or is drained) an updated + // pod is immediatedly created on that node without considering surge limits. + // Allowing surge implies the possibility that the resources consumed by the + // daemonset on any given node can double if the readiness check fails, and + // so resource intensive daemonsets should take into account that they may + // cause evictions during disruption. + // This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate. + // +optional + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } // Spec to control the desired behavior of rolling update. diff --git a/constraint/vendor/k8s.io/api/apps/v1beta2/types.go b/constraint/vendor/k8s.io/api/apps/v1beta2/types.go index fc542ac1c..316a0ad24 100644 --- a/constraint/vendor/k8s.io/api/apps/v1beta2/types.go +++ b/constraint/vendor/k8s.io/api/apps/v1beta2/types.go @@ -554,19 +554,41 @@ type RollingUpdateDaemonSet struct { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total // number of DaemonSet pods at the start of the update (ex: 10%). Absolute - // number is calculated from percentage by rounding up. - // This cannot be 0. + // number is calculated from percentage by rounding down to a minimum of one. + // This cannot be 0 if MaxSurge is 0 // Default value is 1. // Example: when this is set to 30%, at most 30% of the total number of nodes // that should be running the daemon pod (i.e. status.desiredNumberScheduled) - // can have their pods stopped for an update at any given - // time. The update starts by stopping at most 30% of those DaemonSet pods - // and then brings up new DaemonSet pods in their place. Once the new pods - // are available, it then proceeds onto other DaemonSet pods, thus ensuring - // that at least 70% of original number of DaemonSet pods are available at - // all times during the update. + // can have their pods stopped for an update at any given time. The update + // starts by stopping at most 30% of those DaemonSet pods and then brings + // up new DaemonSet pods in their place. Once the new pods are available, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times during + // the update. // +optional MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"` + + // The maximum number of nodes with an existing available DaemonSet pod that + // can have an updated DaemonSet pod during during an update. + // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up to a minimum of 1. + // Default value is 0. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their a new pod created before the old pod is marked as deleted. + // The update starts by launching new pods on 30% of nodes. Once an updated + // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod + // on that node is marked deleted. If the old pod becomes unavailable for any + // reason (Ready transitions to false, is evicted, or is drained) an updated + // pod is immediatedly created on that node without considering surge limits. + // Allowing surge implies the possibility that the resources consumed by the + // daemonset on any given node can double if the readiness check fails, and + // so resource intensive daemonsets should take into account that they may + // cause evictions during disruption. + // This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate. + // +optional + MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } // DaemonSetSpec is the specification of a daemon set. diff --git a/constraint/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go index 822158a18..51d552234 100644 --- a/constraint/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go @@ -262,7 +262,8 @@ func (ReplicaSetStatus) SwaggerDoc() map[string]string { var map_RollingUpdateDaemonSet = map[string]string{ "": "Spec to control the desired behavior of daemon set rolling update.", - "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding down to a minimum of one. This cannot be 0 if MaxSurge is 0 Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + "maxSurge": "The maximum number of nodes with an existing available DaemonSet pod that can have an updated DaemonSet pod during during an update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up to a minimum of 1. Default value is 0. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their a new pod created before the old pod is marked as deleted. The update starts by launching new pods on 30% of nodes. Once an updated pod is available (Ready for at least minReadySeconds) the old DaemonSet pod on that node is marked deleted. If the old pod becomes unavailable for any reason (Ready transitions to false, is evicted, or is drained) an updated pod is immediatedly created on that node without considering surge limits. Allowing surge implies the possibility that the resources consumed by the daemonset on any given node can double if the readiness check fails, and so resource intensive daemonsets should take into account that they may cause evictions during disruption. This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate.", } func (RollingUpdateDaemonSet) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go index 127bf095f..0a84d1b08 100644 --- a/constraint/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go @@ -544,6 +544,11 @@ func (in *RollingUpdateDaemonSet) DeepCopyInto(out *RollingUpdateDaemonSet) { *out = new(intstr.IntOrString) **out = **in } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } return } diff --git a/constraint/vendor/k8s.io/api/authentication/v1/generated.pb.go b/constraint/vendor/k8s.io/api/authentication/v1/generated.pb.go index 6524f8ca9..89e7e9204 100644 --- a/constraint/vendor/k8s.io/api/authentication/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/authentication/v1/generated.pb.go @@ -316,64 +316,64 @@ func init() { } var fileDescriptor_2953ea822e7ffe1e = []byte{ - // 903 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0x8e, 0xf3, 0xa3, 0x4a, 0x26, 0xdb, 0xd2, 0xce, 0xb2, 0x52, 0x54, 0x20, 0x2e, 0x5e, 0x09, - 0x55, 0xc0, 0xda, 0x9b, 0x08, 0xc1, 0x6a, 0x91, 0x90, 0x6a, 0x1a, 0x41, 0x84, 0x60, 0x57, 0xb3, - 0xdb, 0x82, 0x38, 0x31, 0xb1, 0x5f, 0x53, 0x13, 0x3c, 0x36, 0xf6, 0x38, 0x6c, 0x6e, 0xfb, 0x27, - 0x70, 0x04, 0x89, 0x03, 0x7f, 0x04, 0x12, 0xff, 0x42, 0x8f, 0x2b, 0x4e, 0x3d, 0xa0, 0x88, 0x9a, - 0x2b, 0x47, 0x4e, 0x9c, 0xd0, 0x8c, 0xa7, 0x71, 0x9c, 0xb4, 0x69, 0x4e, 0x7b, 0x8b, 0xdf, 0xfb, - 0xde, 0xf7, 0xde, 0xfb, 0xe6, 0xcb, 0x0c, 0xea, 0x8d, 0x1e, 0xc4, 0xa6, 0x17, 0x58, 0xa3, 0x64, - 0x00, 0x11, 0x03, 0x0e, 0xb1, 0x35, 0x06, 0xe6, 0x06, 0x91, 0xa5, 0x12, 0x34, 0xf4, 0x2c, 0x9a, - 0xf0, 0x53, 0x60, 0xdc, 0x73, 0x28, 0xf7, 0x02, 0x66, 0x8d, 0x3b, 0xd6, 0x10, 0x18, 0x44, 0x94, - 0x83, 0x6b, 0x86, 0x51, 0xc0, 0x03, 0xfc, 0x7a, 0x86, 0x36, 0x69, 0xe8, 0x99, 0x45, 0xb4, 0x39, - 0xee, 0xec, 0xde, 0x1b, 0x7a, 0xfc, 0x34, 0x19, 0x98, 0x4e, 0xe0, 0x5b, 0xc3, 0x60, 0x18, 0x58, - 0xb2, 0x68, 0x90, 0x9c, 0xc8, 0x2f, 0xf9, 0x21, 0x7f, 0x65, 0x64, 0xbb, 0xef, 0xe5, 0xad, 0x7d, - 0xea, 0x9c, 0x7a, 0x0c, 0xa2, 0x89, 0x15, 0x8e, 0x86, 0x22, 0x10, 0x5b, 0x3e, 0x70, 0x7a, 0xc5, - 0x08, 0xbb, 0xd6, 0x75, 0x55, 0x51, 0xc2, 0xb8, 0xe7, 0xc3, 0x52, 0xc1, 0xfb, 0x37, 0x15, 0xc4, - 0xce, 0x29, 0xf8, 0x74, 0xb1, 0xce, 0xf8, 0x43, 0x43, 0xaf, 0xda, 0x41, 0xc2, 0xdc, 0x47, 0x83, - 0x6f, 0xc1, 0xe1, 0x04, 0x4e, 0x20, 0x02, 0xe6, 0x00, 0xde, 0x43, 0xd5, 0x91, 0xc7, 0xdc, 0x96, - 0xb6, 0xa7, 0xed, 0x37, 0xec, 0x5b, 0x67, 0x53, 0xbd, 0x94, 0x4e, 0xf5, 0xea, 0x67, 0x1e, 0x73, - 0x89, 0xcc, 0xe0, 0x2e, 0x42, 0xf4, 0x71, 0xff, 0x18, 0xa2, 0xd8, 0x0b, 0x58, 0xab, 0x2c, 0x71, - 0x58, 0xe1, 0xd0, 0xc1, 0x2c, 0x43, 0xe6, 0x50, 0x82, 0x95, 0x51, 0x1f, 0x5a, 0x95, 0x22, 0xeb, - 0x17, 0xd4, 0x07, 0x22, 0x33, 0xd8, 0x46, 0x95, 0xa4, 0x7f, 0xd8, 0xaa, 0x4a, 0xc0, 0x7d, 0x05, - 0xa8, 0x1c, 0xf5, 0x0f, 0xff, 0x9b, 0xea, 0x6f, 0x5e, 0xb7, 0x24, 0x9f, 0x84, 0x10, 0x9b, 0x47, - 0xfd, 0x43, 0x22, 0x8a, 0x8d, 0x0f, 0x10, 0xea, 0x3d, 0xe3, 0x11, 0x3d, 0xa6, 0xdf, 0x25, 0x80, - 0x75, 0x54, 0xf3, 0x38, 0xf8, 0x71, 0x4b, 0xdb, 0xab, 0xec, 0x37, 0xec, 0x46, 0x3a, 0xd5, 0x6b, - 0x7d, 0x11, 0x20, 0x59, 0xfc, 0x61, 0xfd, 0xa7, 0x5f, 0xf5, 0xd2, 0xf3, 0x3f, 0xf7, 0x4a, 0xc6, - 0x2f, 0x65, 0x74, 0xeb, 0x69, 0x30, 0x02, 0x46, 0xe0, 0xfb, 0x04, 0x62, 0x8e, 0xbf, 0x41, 0x75, - 0x71, 0x44, 0x2e, 0xe5, 0x54, 0x2a, 0xd1, 0xec, 0xde, 0x37, 0x73, 0x77, 0xcc, 0x86, 0x30, 0xc3, - 0xd1, 0x50, 0x04, 0x62, 0x53, 0xa0, 0xcd, 0x71, 0xc7, 0xcc, 0xe4, 0xfc, 0x1c, 0x38, 0xcd, 0x35, - 0xc9, 0x63, 0x64, 0xc6, 0x8a, 0x1f, 0xa3, 0x6a, 0x1c, 0x82, 0x23, 0xf5, 0x6b, 0x76, 0x4d, 0x73, - 0x95, 0xf7, 0xcc, 0xf9, 0xd9, 0x9e, 0x84, 0xe0, 0xe4, 0x0a, 0x8a, 0x2f, 0x22, 0x99, 0xf0, 0x57, - 0x68, 0x23, 0xe6, 0x94, 0x27, 0xb1, 0x54, 0xb9, 0x38, 0xf1, 0x4d, 0x9c, 0xb2, 0xce, 0xde, 0x52, - 0xac, 0x1b, 0xd9, 0x37, 0x51, 0x7c, 0xc6, 0xbf, 0x1a, 0xda, 0x5e, 0x1c, 0x01, 0xbf, 0x83, 0x1a, - 0x34, 0x71, 0x3d, 0x61, 0x9a, 0x4b, 0x89, 0x37, 0xd3, 0xa9, 0xde, 0x38, 0xb8, 0x0c, 0x92, 0x3c, - 0x8f, 0x3f, 0x46, 0x3b, 0xf0, 0x2c, 0xf4, 0x22, 0xd9, 0xfd, 0x09, 0x38, 0x01, 0x73, 0x63, 0x79, - 0xd6, 0x15, 0xfb, 0x4e, 0x3a, 0xd5, 0x77, 0x7a, 0x8b, 0x49, 0xb2, 0x8c, 0xc7, 0x0c, 0x6d, 0x0d, - 0x0a, 0x96, 0x55, 0x8b, 0x76, 0x57, 0x2f, 0x7a, 0x95, 0xcd, 0x6d, 0x9c, 0x4e, 0xf5, 0xad, 0x62, - 0x86, 0x2c, 0xb0, 0x1b, 0xbf, 0x69, 0x08, 0x2f, 0xab, 0x84, 0xef, 0xa2, 0x1a, 0x17, 0x51, 0xf5, - 0x17, 0xd9, 0x54, 0xa2, 0xd5, 0x32, 0x68, 0x96, 0xc3, 0x13, 0x74, 0x3b, 0x5f, 0xe0, 0xa9, 0xe7, - 0x43, 0xcc, 0xa9, 0x1f, 0xaa, 0xd3, 0x7e, 0x7b, 0x3d, 0x2f, 0x89, 0x32, 0xfb, 0x35, 0x45, 0x7f, - 0xbb, 0xb7, 0x4c, 0x47, 0xae, 0xea, 0x61, 0xfc, 0x5c, 0x46, 0x4d, 0x35, 0xf6, 0xd8, 0x83, 0x1f, - 0x5e, 0x82, 0x97, 0x1f, 0x15, 0xbc, 0x7c, 0x6f, 0x2d, 0xdf, 0x89, 0xd1, 0xae, 0xb5, 0xf2, 0x97, - 0x0b, 0x56, 0xb6, 0xd6, 0xa7, 0x5c, 0xed, 0x64, 0x07, 0xbd, 0xb2, 0xd0, 0x7f, 0xbd, 0xe3, 0x2c, - 0x98, 0xbd, 0xbc, 0xda, 0xec, 0xc6, 0x3f, 0x1a, 0xda, 0x59, 0x1a, 0x09, 0x7f, 0x88, 0x36, 0xe7, - 0x26, 0x87, 0xec, 0x86, 0xad, 0xdb, 0x77, 0x54, 0xbf, 0xcd, 0x83, 0xf9, 0x24, 0x29, 0x62, 0xf1, - 0xa7, 0xa8, 0x9a, 0xc4, 0x10, 0x29, 0x85, 0xdf, 0x5a, 0x2d, 0xc7, 0x51, 0x0c, 0x51, 0x9f, 0x9d, - 0x04, 0xb9, 0xb4, 0x22, 0x42, 0x24, 0x43, 0x71, 0x93, 0xea, 0x0d, 0x7f, 0xdb, 0xbb, 0xa8, 0x06, - 0x51, 0x14, 0x44, 0xea, 0xde, 0x9e, 0x69, 0xd3, 0x13, 0x41, 0x92, 0xe5, 0x8c, 0xdf, 0xcb, 0xa8, - 0x7e, 0xd9, 0x12, 0xbf, 0x8b, 0xea, 0xa2, 0x8d, 0xbc, 0xec, 0x33, 0x41, 0xb7, 0x55, 0x91, 0xc4, - 0x88, 0x38, 0x99, 0x21, 0xf0, 0x1b, 0xa8, 0x92, 0x78, 0xae, 0x7a, 0x43, 0x9a, 0x73, 0x97, 0x3e, - 0x11, 0x71, 0x6c, 0xa0, 0x8d, 0x61, 0x14, 0x24, 0xa1, 0xb0, 0x81, 0x18, 0x14, 0x89, 0x13, 0xfd, - 0x44, 0x46, 0x88, 0xca, 0xe0, 0x63, 0x54, 0x03, 0x71, 0xe7, 0xcb, 0x5d, 0x9a, 0xdd, 0xce, 0x7a, - 0xd2, 0x98, 0xf2, 0x9d, 0xe8, 0x31, 0x1e, 0x4d, 0xe6, 0xb6, 0x12, 0x31, 0x92, 0xd1, 0xed, 0x0e, - 0xd4, 0x5b, 0x22, 0x31, 0x78, 0x1b, 0x55, 0x46, 0x30, 0xc9, 0x36, 0x22, 0xe2, 0x27, 0xfe, 0x08, - 0xd5, 0xc6, 0xe2, 0x99, 0x51, 0x47, 0xb2, 0xbf, 0xba, 0x6f, 0xfe, 0x2c, 0x91, 0xac, 0xec, 0x61, - 0xf9, 0x81, 0x66, 0xef, 0x9f, 0x5d, 0xb4, 0x4b, 0x2f, 0x2e, 0xda, 0xa5, 0xf3, 0x8b, 0x76, 0xe9, - 0x79, 0xda, 0xd6, 0xce, 0xd2, 0xb6, 0xf6, 0x22, 0x6d, 0x6b, 0xe7, 0x69, 0x5b, 0xfb, 0x2b, 0x6d, - 0x6b, 0x3f, 0xfe, 0xdd, 0x2e, 0x7d, 0x5d, 0x1e, 0x77, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x8c, - 0x44, 0x87, 0xd0, 0xe2, 0x08, 0x00, 0x00, + // 906 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x6f, 0xe3, 0xc4, + 0x17, 0x8f, 0xf3, 0xa3, 0x4a, 0x26, 0xdb, 0x7e, 0xdb, 0xd9, 0xef, 0x4a, 0x51, 0x81, 0xa4, 0x78, + 0x25, 0x54, 0x01, 0x6b, 0x6f, 0x22, 0x04, 0xab, 0x45, 0x42, 0xaa, 0x69, 0x04, 0x11, 0x82, 0x5d, + 0xcd, 0x6e, 0x0b, 0xe2, 0xc4, 0xc4, 0x7e, 0x4d, 0x87, 0xe0, 0xb1, 0xb1, 0xc7, 0x61, 0x73, 0xdb, + 0x3f, 0x81, 0x23, 0x48, 0x1c, 0xf8, 0x23, 0x90, 0xf8, 0x17, 0x7a, 0x5c, 0x71, 0xda, 0x03, 0x8a, + 0xa8, 0xb9, 0x72, 0xe4, 0xc4, 0x09, 0xcd, 0x78, 0x5a, 0xc7, 0x49, 0x9b, 0xe6, 0xc4, 0x2d, 0x7e, + 0xef, 0xf3, 0x3e, 0xef, 0xbd, 0xcf, 0x7c, 0x32, 0x83, 0xfa, 0xe3, 0x07, 0xb1, 0xc5, 0x02, 0x7b, + 0x9c, 0x0c, 0x21, 0xe2, 0x20, 0x20, 0xb6, 0x27, 0xc0, 0xbd, 0x20, 0xb2, 0x75, 0x82, 0x86, 0xcc, + 0xa6, 0x89, 0x38, 0x05, 0x2e, 0x98, 0x4b, 0x05, 0x0b, 0xb8, 0x3d, 0xe9, 0xda, 0x23, 0xe0, 0x10, + 0x51, 0x01, 0x9e, 0x15, 0x46, 0x81, 0x08, 0xf0, 0xab, 0x19, 0xda, 0xa2, 0x21, 0xb3, 0x8a, 0x68, + 0x6b, 0xd2, 0xdd, 0xbd, 0x37, 0x62, 0xe2, 0x34, 0x19, 0x5a, 0x6e, 0xe0, 0xdb, 0xa3, 0x60, 0x14, + 0xd8, 0xaa, 0x68, 0x98, 0x9c, 0xa8, 0x2f, 0xf5, 0xa1, 0x7e, 0x65, 0x64, 0xbb, 0xef, 0xe4, 0xad, + 0x7d, 0xea, 0x9e, 0x32, 0x0e, 0xd1, 0xd4, 0x0e, 0xc7, 0x23, 0x19, 0x88, 0x6d, 0x1f, 0x04, 0xbd, + 0x62, 0x84, 0x5d, 0xfb, 0xba, 0xaa, 0x28, 0xe1, 0x82, 0xf9, 0xb0, 0x54, 0xf0, 0xee, 0x4d, 0x05, + 0xb1, 0x7b, 0x0a, 0x3e, 0x5d, 0xac, 0x33, 0x7f, 0x33, 0xd0, 0xff, 0x9d, 0x20, 0xe1, 0xde, 0xa3, + 0xe1, 0xd7, 0xe0, 0x0a, 0x02, 0x27, 0x10, 0x01, 0x77, 0x01, 0xef, 0xa1, 0xea, 0x98, 0x71, 0xaf, + 0x65, 0xec, 0x19, 0xfb, 0x0d, 0xe7, 0xd6, 0xd9, 0xac, 0x53, 0x4a, 0x67, 0x9d, 0xea, 0x27, 0x8c, + 0x7b, 0x44, 0x65, 0x70, 0x0f, 0x21, 0x1a, 0xb2, 0x63, 0x88, 0x62, 0x16, 0xf0, 0x56, 0x59, 0xe1, + 0xb0, 0xc6, 0xa1, 0x83, 0xc7, 0x03, 0x9d, 0x21, 0x73, 0x28, 0xc9, 0xca, 0xa9, 0x0f, 0xad, 0x4a, + 0x91, 0xf5, 0x33, 0xea, 0x03, 0x51, 0x19, 0xec, 0xa0, 0x4a, 0x32, 0x38, 0x6c, 0x55, 0x15, 0xe0, + 0xbe, 0x06, 0x54, 0x8e, 0x06, 0x87, 0xff, 0xcc, 0x3a, 0xaf, 0x5f, 0xb7, 0xa4, 0x98, 0x86, 0x10, + 0x5b, 0x47, 0x83, 0x43, 0x22, 0x8b, 0xcd, 0xf7, 0x10, 0xea, 0x3f, 0x13, 0x11, 0x3d, 0xa6, 0xdf, + 0x24, 0x80, 0x3b, 0xa8, 0xc6, 0x04, 0xf8, 0x71, 0xcb, 0xd8, 0xab, 0xec, 0x37, 0x9c, 0x46, 0x3a, + 0xeb, 0xd4, 0x06, 0x32, 0x40, 0xb2, 0xf8, 0xc3, 0xfa, 0x0f, 0x3f, 0x77, 0x4a, 0xcf, 0x7f, 0xdf, + 0x2b, 0x99, 0x3f, 0x95, 0xd1, 0xad, 0xa7, 0xc1, 0x18, 0x38, 0x81, 0x6f, 0x13, 0x88, 0x05, 0xfe, + 0x0a, 0xd5, 0xe5, 0x11, 0x79, 0x54, 0x50, 0xa5, 0x44, 0xb3, 0x77, 0xdf, 0xca, 0xdd, 0x71, 0x39, + 0x84, 0x15, 0x8e, 0x47, 0x32, 0x10, 0x5b, 0x12, 0x6d, 0x4d, 0xba, 0x56, 0x26, 0xe7, 0xa7, 0x20, + 0x68, 0xae, 0x49, 0x1e, 0x23, 0x97, 0xac, 0xf8, 0x31, 0xaa, 0xc6, 0x21, 0xb8, 0x4a, 0xbf, 0x66, + 0xcf, 0xb2, 0x56, 0x79, 0xcf, 0x9a, 0x9f, 0xed, 0x49, 0x08, 0x6e, 0xae, 0xa0, 0xfc, 0x22, 0x8a, + 0x09, 0x7f, 0x81, 0x36, 0x62, 0x41, 0x45, 0x12, 0x2b, 0x95, 0x8b, 0x13, 0xdf, 0xc4, 0xa9, 0xea, + 0x9c, 0x2d, 0xcd, 0xba, 0x91, 0x7d, 0x13, 0xcd, 0x67, 0xfe, 0x6d, 0xa0, 0xed, 0xc5, 0x11, 0xf0, + 0x5b, 0xa8, 0x41, 0x13, 0x8f, 0x49, 0xd3, 0x5c, 0x48, 0xbc, 0x99, 0xce, 0x3a, 0x8d, 0x83, 0x8b, + 0x20, 0xc9, 0xf3, 0xf8, 0x43, 0xb4, 0x03, 0xcf, 0x42, 0x16, 0xa9, 0xee, 0x4f, 0xc0, 0x0d, 0xb8, + 0x17, 0xab, 0xb3, 0xae, 0x38, 0x77, 0xd2, 0x59, 0x67, 0xa7, 0xbf, 0x98, 0x24, 0xcb, 0x78, 0xcc, + 0xd1, 0xd6, 0xb0, 0x60, 0x59, 0xbd, 0x68, 0x6f, 0xf5, 0xa2, 0x57, 0xd9, 0xdc, 0xc1, 0xe9, 0xac, + 0xb3, 0x55, 0xcc, 0x90, 0x05, 0x76, 0xf3, 0x17, 0x03, 0xe1, 0x65, 0x95, 0xf0, 0x5d, 0x54, 0x13, + 0x32, 0xaa, 0xff, 0x22, 0x9b, 0x5a, 0xb4, 0x5a, 0x06, 0xcd, 0x72, 0x78, 0x8a, 0x6e, 0xe7, 0x0b, + 0x3c, 0x65, 0x3e, 0xc4, 0x82, 0xfa, 0xa1, 0x3e, 0xed, 0x37, 0xd7, 0xf3, 0x92, 0x2c, 0x73, 0x5e, + 0xd1, 0xf4, 0xb7, 0xfb, 0xcb, 0x74, 0xe4, 0xaa, 0x1e, 0xe6, 0x8f, 0x65, 0xd4, 0xd4, 0x63, 0x4f, + 0x18, 0x7c, 0xf7, 0x1f, 0x78, 0xf9, 0x51, 0xc1, 0xcb, 0xf7, 0xd6, 0xf2, 0x9d, 0x1c, 0xed, 0x5a, + 0x2b, 0x7f, 0xbe, 0x60, 0x65, 0x7b, 0x7d, 0xca, 0xd5, 0x4e, 0x76, 0xd1, 0xff, 0x16, 0xfa, 0xaf, + 0x77, 0x9c, 0x05, 0xb3, 0x97, 0x57, 0x9b, 0xdd, 0xfc, 0xcb, 0x40, 0x3b, 0x4b, 0x23, 0xe1, 0xf7, + 0xd1, 0xe6, 0xdc, 0xe4, 0x90, 0xdd, 0xb0, 0x75, 0xe7, 0x8e, 0xee, 0xb7, 0x79, 0x30, 0x9f, 0x24, + 0x45, 0x2c, 0xfe, 0x18, 0x55, 0x93, 0x18, 0x22, 0xad, 0xf0, 0x1b, 0xab, 0xe5, 0x38, 0x8a, 0x21, + 0x1a, 0xf0, 0x93, 0x20, 0x97, 0x56, 0x46, 0x88, 0x62, 0x28, 0x6e, 0x52, 0xbd, 0xe1, 0x6f, 0x7b, + 0x17, 0xd5, 0x20, 0x8a, 0x82, 0x48, 0xdf, 0xdb, 0x97, 0xda, 0xf4, 0x65, 0x90, 0x64, 0x39, 0xf3, + 0xd7, 0x32, 0xaa, 0x5f, 0xb4, 0xc4, 0x6f, 0xa3, 0xba, 0x6c, 0xa3, 0x2e, 0xfb, 0x4c, 0xd0, 0x6d, + 0x5d, 0xa4, 0x30, 0x32, 0x4e, 0x2e, 0x11, 0xf8, 0x35, 0x54, 0x49, 0x98, 0xa7, 0xdf, 0x90, 0xe6, + 0xdc, 0xa5, 0x4f, 0x64, 0x1c, 0x9b, 0x68, 0x63, 0x14, 0x05, 0x49, 0x28, 0x6d, 0x20, 0x07, 0x45, + 0xf2, 0x44, 0x3f, 0x52, 0x11, 0xa2, 0x33, 0xf8, 0x18, 0xd5, 0x40, 0xde, 0xf9, 0x6a, 0x97, 0x66, + 0xaf, 0xbb, 0x9e, 0x34, 0x96, 0x7a, 0x27, 0xfa, 0x5c, 0x44, 0xd3, 0xb9, 0xad, 0x64, 0x8c, 0x64, + 0x74, 0xbb, 0x43, 0xfd, 0x96, 0x28, 0x0c, 0xde, 0x46, 0x95, 0x31, 0x4c, 0xb3, 0x8d, 0x88, 0xfc, + 0x89, 0x3f, 0x40, 0xb5, 0x89, 0x7c, 0x66, 0xf4, 0x91, 0xec, 0xaf, 0xee, 0x9b, 0x3f, 0x4b, 0x24, + 0x2b, 0x7b, 0x58, 0x7e, 0x60, 0x38, 0xfb, 0x67, 0xe7, 0xed, 0xd2, 0x8b, 0xf3, 0x76, 0xe9, 0xe5, + 0x79, 0xbb, 0xf4, 0x3c, 0x6d, 0x1b, 0x67, 0x69, 0xdb, 0x78, 0x91, 0xb6, 0x8d, 0x97, 0x69, 0xdb, + 0xf8, 0x23, 0x6d, 0x1b, 0xdf, 0xff, 0xd9, 0x2e, 0x7d, 0x59, 0x9e, 0x74, 0xff, 0x0d, 0x00, 0x00, + 0xff, 0xff, 0x51, 0xcc, 0x53, 0x28, 0xe2, 0x08, 0x00, 0x00, } func (m *BoundObjectReference) Marshal() (dAtA []byte, err error) { @@ -1264,10 +1264,7 @@ func (m *BoundObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1349,10 +1346,7 @@ func (m *ExtraValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1501,10 +1495,7 @@ func (m *TokenRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1642,10 +1633,7 @@ func (m *TokenRequestSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1760,10 +1748,7 @@ func (m *TokenRequestStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1912,10 +1897,7 @@ func (m *TokenReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2029,10 +2011,7 @@ func (m *TokenReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2199,10 +2178,7 @@ func (m *TokenReviewStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2460,7 +2436,7 @@ func (m *UserInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -2477,10 +2453,7 @@ func (m *UserInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/authentication/v1/generated.proto b/constraint/vendor/k8s.io/api/authentication/v1/generated.proto index 2fb124364..c91fd92a5 100644 --- a/constraint/vendor/k8s.io/api/authentication/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/authentication/v1/generated.proto @@ -36,7 +36,7 @@ message BoundObjectReference { // API version of the referent. // +optional - optional string aPIVersion = 2; + optional string apiVersion = 2; // Name of the referent. // +optional diff --git a/constraint/vendor/k8s.io/api/authentication/v1/types.go b/constraint/vendor/k8s.io/api/authentication/v1/types.go index 668b72038..6f5f0ad1a 100644 --- a/constraint/vendor/k8s.io/api/authentication/v1/types.go +++ b/constraint/vendor/k8s.io/api/authentication/v1/types.go @@ -178,7 +178,7 @@ type BoundObjectReference struct { Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` // API version of the referent. // +optional - APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=aPIVersion"` + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"` // Name of the referent. // +optional diff --git a/constraint/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go index 6c391dbfa..3d8f76515 100644 --- a/constraint/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go @@ -737,10 +737,7 @@ func (m *ExtraValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -889,10 +886,7 @@ func (m *TokenReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1006,10 +1000,7 @@ func (m *TokenReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1176,10 +1167,7 @@ func (m *TokenReviewStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1437,7 +1425,7 @@ func (m *UserInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1454,10 +1442,7 @@ func (m *UserInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/authorization/v1/generated.pb.go b/constraint/vendor/k8s.io/api/authorization/v1/generated.pb.go index dbc0bdc71..66c7c06ae 100644 --- a/constraint/vendor/k8s.io/api/authorization/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/authorization/v1/generated.pb.go @@ -1793,10 +1793,7 @@ func (m *ExtraValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1945,10 +1942,7 @@ func (m *LocalSubjectAccessReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2062,10 +2056,7 @@ func (m *NonResourceAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2179,10 +2170,7 @@ func (m *NonResourceRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2456,10 +2444,7 @@ func (m *ResourceAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2637,10 +2622,7 @@ func (m *ResourceRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2789,10 +2771,7 @@ func (m *SelfSubjectAccessReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2914,10 +2893,7 @@ func (m *SelfSubjectAccessReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3066,10 +3042,7 @@ func (m *SelfSubjectRulesReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3151,10 +3124,7 @@ func (m *SelfSubjectRulesReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3303,10 +3273,7 @@ func (m *SubjectAccessReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3604,7 +3571,7 @@ func (m *SubjectAccessReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -3653,10 +3620,7 @@ func (m *SubjectAccessReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3810,10 +3774,7 @@ func (m *SubjectAccessReviewStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3983,10 +3944,7 @@ func (m *SubjectRulesReviewStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go index 647c0c582..4331d3e5b 100644 --- a/constraint/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go @@ -1793,10 +1793,7 @@ func (m *ExtraValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1945,10 +1942,7 @@ func (m *LocalSubjectAccessReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2062,10 +2056,7 @@ func (m *NonResourceAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2179,10 +2170,7 @@ func (m *NonResourceRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2456,10 +2444,7 @@ func (m *ResourceAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2637,10 +2622,7 @@ func (m *ResourceRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2789,10 +2771,7 @@ func (m *SelfSubjectAccessReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2914,10 +2893,7 @@ func (m *SelfSubjectAccessReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3066,10 +3042,7 @@ func (m *SelfSubjectRulesReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3151,10 +3124,7 @@ func (m *SelfSubjectRulesReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3303,10 +3273,7 @@ func (m *SubjectAccessReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3604,7 +3571,7 @@ func (m *SubjectAccessReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -3653,10 +3620,7 @@ func (m *SubjectAccessReviewSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3810,10 +3774,7 @@ func (m *SubjectAccessReviewStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3983,10 +3944,7 @@ func (m *SubjectRulesReviewStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/autoscaling/v1/generated.pb.go b/constraint/vendor/k8s.io/api/autoscaling/v1/generated.pb.go index 1de893f7e..a6ff299d7 100644 --- a/constraint/vendor/k8s.io/api/autoscaling/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/autoscaling/v1/generated.pb.go @@ -2750,10 +2750,7 @@ func (m *ContainerResourceMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2920,10 +2917,7 @@ func (m *ContainerResourceMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3069,10 +3063,7 @@ func (m *CrossVersionObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3262,10 +3253,7 @@ func (m *ExternalMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3452,10 +3440,7 @@ func (m *ExternalMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3604,10 +3589,7 @@ func (m *HorizontalPodAutoscaler) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3818,10 +3800,7 @@ func (m *HorizontalPodAutoscalerCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3938,10 +3917,7 @@ func (m *HorizontalPodAutoscalerList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4083,10 +4059,7 @@ func (m *HorizontalPodAutoscalerSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4250,10 +4223,7 @@ func (m *HorizontalPodAutoscalerStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4515,10 +4485,7 @@ func (m *MetricSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4780,10 +4747,7 @@ func (m *MetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5003,10 +4967,7 @@ func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5226,10 +5187,7 @@ func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5380,10 +5338,7 @@ func (m *PodsMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5534,10 +5489,7 @@ func (m *PodsMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5675,10 +5627,7 @@ func (m *ResourceMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5813,10 +5762,7 @@ func (m *ResourceMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5965,10 +5911,7 @@ func (m *Scale) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6037,10 +5980,7 @@ func (m *ScaleSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6141,10 +6081,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go b/constraint/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go index 750808f8d..28832c152 100644 --- a/constraint/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go @@ -2540,10 +2540,7 @@ func (m *ContainerResourceMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2710,10 +2707,7 @@ func (m *ContainerResourceMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2859,10 +2853,7 @@ func (m *CrossVersionObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3052,10 +3043,7 @@ func (m *ExternalMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3242,10 +3230,7 @@ func (m *ExternalMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3394,10 +3379,7 @@ func (m *HorizontalPodAutoscaler) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3608,10 +3590,7 @@ func (m *HorizontalPodAutoscalerCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3728,10 +3707,7 @@ func (m *HorizontalPodAutoscalerList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3887,10 +3863,7 @@ func (m *HorizontalPodAutoscalerSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4102,10 +4075,7 @@ func (m *HorizontalPodAutoscalerStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4367,10 +4337,7 @@ func (m *MetricSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4632,10 +4599,7 @@ func (m *MetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4855,10 +4819,7 @@ func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5078,10 +5039,7 @@ func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5232,10 +5190,7 @@ func (m *PodsMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5386,10 +5341,7 @@ func (m *PodsMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5527,10 +5479,7 @@ func (m *ResourceMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5665,10 +5614,7 @@ func (m *ResourceMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go b/constraint/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go index 43e06f9eb..cece3c877 100644 --- a/constraint/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go +++ b/constraint/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go @@ -2995,10 +2995,7 @@ func (m *ContainerResourceMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3145,10 +3142,7 @@ func (m *ContainerResourceMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3294,10 +3288,7 @@ func (m *CrossVersionObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3413,10 +3404,7 @@ func (m *ExternalMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3532,10 +3520,7 @@ func (m *ExternalMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3655,10 +3640,7 @@ func (m *HPAScalingPolicy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3795,10 +3777,7 @@ func (m *HPAScalingRules) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3947,10 +3926,7 @@ func (m *HorizontalPodAutoscaler) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4072,10 +4048,7 @@ func (m *HorizontalPodAutoscalerBehavior) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4286,10 +4259,7 @@ func (m *HorizontalPodAutoscalerCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4406,10 +4376,7 @@ func (m *HorizontalPodAutoscalerList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4601,10 +4568,7 @@ func (m *HorizontalPodAutoscalerSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4816,10 +4780,7 @@ func (m *HorizontalPodAutoscalerStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4937,10 +4898,7 @@ func (m *MetricIdentifier) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5202,10 +5160,7 @@ func (m *MetricSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5467,10 +5422,7 @@ func (m *MetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5644,10 +5596,7 @@ func (m *MetricTarget) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5789,10 +5738,7 @@ func (m *MetricValueStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5941,10 +5887,7 @@ func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6093,10 +6036,7 @@ func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6212,10 +6152,7 @@ func (m *PodsMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6331,10 +6268,7 @@ func (m *PodsMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6449,10 +6383,7 @@ func (m *ResourceMetricSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6567,10 +6498,7 @@ func (m *ResourceMetricStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/batch/v1/generated.pb.go b/constraint/vendor/k8s.io/api/batch/v1/generated.pb.go index 35944e726..1407caebc 100644 --- a/constraint/vendor/k8s.io/api/batch/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/batch/v1/generated.pb.go @@ -26,6 +26,7 @@ import ( proto "github.com/gogo/protobuf/proto" k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" math "math" @@ -45,10 +46,122 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +func (m *CronJob) Reset() { *m = CronJob{} } +func (*CronJob) ProtoMessage() {} +func (*CronJob) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{0} +} +func (m *CronJob) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJob) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJob.Merge(m, src) +} +func (m *CronJob) XXX_Size() int { + return m.Size() +} +func (m *CronJob) XXX_DiscardUnknown() { + xxx_messageInfo_CronJob.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJob proto.InternalMessageInfo + +func (m *CronJobList) Reset() { *m = CronJobList{} } +func (*CronJobList) ProtoMessage() {} +func (*CronJobList) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{1} +} +func (m *CronJobList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobList.Merge(m, src) +} +func (m *CronJobList) XXX_Size() int { + return m.Size() +} +func (m *CronJobList) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobList.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobList proto.InternalMessageInfo + +func (m *CronJobSpec) Reset() { *m = CronJobSpec{} } +func (*CronJobSpec) ProtoMessage() {} +func (*CronJobSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{2} +} +func (m *CronJobSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobSpec.Merge(m, src) +} +func (m *CronJobSpec) XXX_Size() int { + return m.Size() +} +func (m *CronJobSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobSpec proto.InternalMessageInfo + +func (m *CronJobStatus) Reset() { *m = CronJobStatus{} } +func (*CronJobStatus) ProtoMessage() {} +func (*CronJobStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{3} +} +func (m *CronJobStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobStatus.Merge(m, src) +} +func (m *CronJobStatus) XXX_Size() int { + return m.Size() +} +func (m *CronJobStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobStatus proto.InternalMessageInfo + func (m *Job) Reset() { *m = Job{} } func (*Job) ProtoMessage() {} func (*Job) Descriptor() ([]byte, []int) { - return fileDescriptor_3b52da57c93de713, []int{0} + return fileDescriptor_3b52da57c93de713, []int{4} } func (m *Job) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -76,7 +189,7 @@ var xxx_messageInfo_Job proto.InternalMessageInfo func (m *JobCondition) Reset() { *m = JobCondition{} } func (*JobCondition) ProtoMessage() {} func (*JobCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_3b52da57c93de713, []int{1} + return fileDescriptor_3b52da57c93de713, []int{5} } func (m *JobCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -104,7 +217,7 @@ var xxx_messageInfo_JobCondition proto.InternalMessageInfo func (m *JobList) Reset() { *m = JobList{} } func (*JobList) ProtoMessage() {} func (*JobList) Descriptor() ([]byte, []int) { - return fileDescriptor_3b52da57c93de713, []int{2} + return fileDescriptor_3b52da57c93de713, []int{6} } func (m *JobList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -132,7 +245,7 @@ var xxx_messageInfo_JobList proto.InternalMessageInfo func (m *JobSpec) Reset() { *m = JobSpec{} } func (*JobSpec) ProtoMessage() {} func (*JobSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_3b52da57c93de713, []int{3} + return fileDescriptor_3b52da57c93de713, []int{7} } func (m *JobSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -160,7 +273,7 @@ var xxx_messageInfo_JobSpec proto.InternalMessageInfo func (m *JobStatus) Reset() { *m = JobStatus{} } func (*JobStatus) ProtoMessage() {} func (*JobStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_3b52da57c93de713, []int{4} + return fileDescriptor_3b52da57c93de713, []int{8} } func (m *JobStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -185,12 +298,45 @@ func (m *JobStatus) XXX_DiscardUnknown() { var xxx_messageInfo_JobStatus proto.InternalMessageInfo +func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } +func (*JobTemplateSpec) ProtoMessage() {} +func (*JobTemplateSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{9} +} +func (m *JobTemplateSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobTemplateSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobTemplateSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobTemplateSpec.Merge(m, src) +} +func (m *JobTemplateSpec) XXX_Size() int { + return m.Size() +} +func (m *JobTemplateSpec) XXX_DiscardUnknown() { + xxx_messageInfo_JobTemplateSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_JobTemplateSpec proto.InternalMessageInfo + func init() { + proto.RegisterType((*CronJob)(nil), "k8s.io.api.batch.v1.CronJob") + proto.RegisterType((*CronJobList)(nil), "k8s.io.api.batch.v1.CronJobList") + proto.RegisterType((*CronJobSpec)(nil), "k8s.io.api.batch.v1.CronJobSpec") + proto.RegisterType((*CronJobStatus)(nil), "k8s.io.api.batch.v1.CronJobStatus") proto.RegisterType((*Job)(nil), "k8s.io.api.batch.v1.Job") proto.RegisterType((*JobCondition)(nil), "k8s.io.api.batch.v1.JobCondition") proto.RegisterType((*JobList)(nil), "k8s.io.api.batch.v1.JobList") proto.RegisterType((*JobSpec)(nil), "k8s.io.api.batch.v1.JobSpec") proto.RegisterType((*JobStatus)(nil), "k8s.io.api.batch.v1.JobStatus") + proto.RegisterType((*JobTemplateSpec)(nil), "k8s.io.api.batch.v1.JobTemplateSpec") } func init() { @@ -198,69 +344,92 @@ func init() { } var fileDescriptor_3b52da57c93de713 = []byte{ - // 929 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x5d, 0x6f, 0xe3, 0x44, - 0x14, 0xad, 0x9b, 0xa6, 0x4d, 0xa6, 0x1f, 0x5b, 0x06, 0x55, 0x1b, 0x0a, 0xb2, 0x97, 0x20, 0xa1, - 0x82, 0x84, 0x4d, 0x4b, 0x85, 0x10, 0x02, 0xa4, 0x75, 0x51, 0x25, 0xaa, 0x54, 0x5b, 0x26, 0x59, - 0x21, 0x21, 0x90, 0x18, 0xdb, 0x37, 0x89, 0x89, 0xed, 0xb1, 0x3c, 0x93, 0x48, 0x7d, 0xe3, 0x27, - 0xf0, 0x23, 0x10, 0x7f, 0x82, 0x77, 0xd4, 0xc7, 0x7d, 0xdc, 0x27, 0x8b, 0x9a, 0x1f, 0xc0, 0xfb, - 0x3e, 0xa1, 0x19, 0x3b, 0xb6, 0xd3, 0x26, 0xa2, 0xcb, 0x5b, 0xe6, 0xcc, 0x39, 0xe7, 0x5e, 0xcf, - 0x3d, 0xb9, 0xe8, 0x8b, 0xc9, 0x67, 0xdc, 0xf4, 0x99, 0x35, 0x99, 0x3a, 0x90, 0x44, 0x20, 0x80, - 0x5b, 0x33, 0x88, 0x3c, 0x96, 0x58, 0xc5, 0x05, 0x8d, 0x7d, 0xcb, 0xa1, 0xc2, 0x1d, 0x5b, 0xb3, - 0x63, 0x6b, 0x04, 0x11, 0x24, 0x54, 0x80, 0x67, 0xc6, 0x09, 0x13, 0x0c, 0xbf, 0x99, 0x93, 0x4c, - 0x1a, 0xfb, 0xa6, 0x22, 0x99, 0xb3, 0xe3, 0xc3, 0x8f, 0x46, 0xbe, 0x18, 0x4f, 0x1d, 0xd3, 0x65, - 0xa1, 0x35, 0x62, 0x23, 0x66, 0x29, 0xae, 0x33, 0x1d, 0xaa, 0x93, 0x3a, 0xa8, 0x5f, 0xb9, 0xc7, - 0x61, 0xb7, 0x56, 0xc8, 0x65, 0x09, 0x2c, 0xa9, 0x73, 0x78, 0x5a, 0x71, 0x42, 0xea, 0x8e, 0xfd, - 0x08, 0x92, 0x6b, 0x2b, 0x9e, 0x8c, 0x24, 0xc0, 0xad, 0x10, 0x04, 0x5d, 0xa6, 0xb2, 0x56, 0xa9, - 0x92, 0x69, 0x24, 0xfc, 0x10, 0xee, 0x09, 0x3e, 0xfd, 0x2f, 0x01, 0x77, 0xc7, 0x10, 0xd2, 0xbb, - 0xba, 0xee, 0x3f, 0x1a, 0x6a, 0x5c, 0x30, 0x07, 0xff, 0x84, 0x5a, 0xb2, 0x17, 0x8f, 0x0a, 0xda, - 0xd1, 0x9e, 0x68, 0x47, 0xdb, 0x27, 0x1f, 0x9b, 0xd5, 0x0b, 0x95, 0x96, 0x66, 0x3c, 0x19, 0x49, - 0x80, 0x9b, 0x92, 0x6d, 0xce, 0x8e, 0xcd, 0x67, 0xce, 0xcf, 0xe0, 0x8a, 0x4b, 0x10, 0xd4, 0xc6, - 0x37, 0xa9, 0xb1, 0x96, 0xa5, 0x06, 0xaa, 0x30, 0x52, 0xba, 0xe2, 0xaf, 0xd0, 0x06, 0x8f, 0xc1, - 0xed, 0xac, 0x2b, 0xf7, 0x77, 0xcc, 0x25, 0xef, 0x6f, 0x5e, 0x30, 0xa7, 0x1f, 0x83, 0x6b, 0xef, - 0x14, 0x4e, 0x1b, 0xf2, 0x44, 0x94, 0x0e, 0x9f, 0xa3, 0x4d, 0x2e, 0xa8, 0x98, 0xf2, 0x4e, 0x43, - 0x39, 0xe8, 0x2b, 0x1d, 0x14, 0xcb, 0xde, 0x2b, 0x3c, 0x36, 0xf3, 0x33, 0x29, 0xd4, 0xdd, 0x3f, - 0x1b, 0x68, 0xe7, 0x82, 0x39, 0x67, 0x2c, 0xf2, 0x7c, 0xe1, 0xb3, 0x08, 0x9f, 0xa2, 0x0d, 0x71, - 0x1d, 0x83, 0xfa, 0xec, 0xb6, 0xfd, 0x64, 0x5e, 0x7a, 0x70, 0x1d, 0xc3, 0xab, 0xd4, 0xd8, 0xaf, - 0x73, 0x25, 0x46, 0x14, 0x1b, 0xf7, 0xca, 0x76, 0xd6, 0x95, 0xee, 0x74, 0xb1, 0xdc, 0xab, 0xd4, - 0x58, 0x92, 0x0e, 0xb3, 0x74, 0x5a, 0x6c, 0x0a, 0x8f, 0xd0, 0x6e, 0x40, 0xb9, 0xb8, 0x4a, 0x98, - 0x03, 0x03, 0x3f, 0x84, 0xe2, 0x1b, 0x3f, 0x7c, 0xd8, 0x0c, 0xa4, 0xc2, 0x3e, 0x28, 0x1a, 0xd8, - 0xed, 0xd5, 0x8d, 0xc8, 0xa2, 0x2f, 0x9e, 0x21, 0x2c, 0x81, 0x41, 0x42, 0x23, 0x9e, 0x7f, 0x92, - 0xac, 0xb6, 0xf1, 0xda, 0xd5, 0x0e, 0x8b, 0x6a, 0xb8, 0x77, 0xcf, 0x8d, 0x2c, 0xa9, 0x80, 0xdf, - 0x47, 0x9b, 0x09, 0x50, 0xce, 0xa2, 0x4e, 0x53, 0x3d, 0x57, 0x39, 0x1d, 0xa2, 0x50, 0x52, 0xdc, - 0xe2, 0x0f, 0xd0, 0x56, 0x08, 0x9c, 0xd3, 0x11, 0x74, 0x36, 0x15, 0xf1, 0x51, 0x41, 0xdc, 0xba, - 0xcc, 0x61, 0x32, 0xbf, 0xef, 0xfe, 0xae, 0xa1, 0xad, 0x0b, 0xe6, 0xf4, 0x7c, 0x2e, 0xf0, 0x0f, - 0xf7, 0xe2, 0x6b, 0x3e, 0xec, 0x63, 0xa4, 0x5a, 0x85, 0x77, 0xbf, 0xa8, 0xd3, 0x9a, 0x23, 0xb5, - 0xe8, 0x7e, 0x89, 0x9a, 0xbe, 0x80, 0x50, 0x8e, 0xba, 0x71, 0xb4, 0x7d, 0xd2, 0x59, 0x95, 0x3c, - 0x7b, 0xb7, 0x30, 0x69, 0x7e, 0x23, 0xe9, 0x24, 0x57, 0x75, 0xff, 0xd8, 0x50, 0x8d, 0xca, 0x2c, - 0xe3, 0x63, 0xb4, 0x1d, 0xd3, 0x84, 0x06, 0x01, 0x04, 0x3e, 0x0f, 0x55, 0xaf, 0x4d, 0xfb, 0x51, - 0x96, 0x1a, 0xdb, 0x57, 0x15, 0x4c, 0xea, 0x1c, 0x29, 0x71, 0x59, 0x18, 0x07, 0x20, 0x1f, 0x33, - 0x8f, 0x5b, 0x21, 0x39, 0xab, 0x60, 0x52, 0xe7, 0xe0, 0x67, 0xe8, 0x80, 0xba, 0xc2, 0x9f, 0xc1, - 0xd7, 0x40, 0xbd, 0xc0, 0x8f, 0xa0, 0x0f, 0x2e, 0x8b, 0xbc, 0xfc, 0xaf, 0xd3, 0xb0, 0xdf, 0xca, - 0x52, 0xe3, 0xe0, 0xe9, 0x32, 0x02, 0x59, 0xae, 0xc3, 0xa7, 0x68, 0xc7, 0xa1, 0xee, 0x84, 0x0d, - 0x87, 0x3d, 0x3f, 0xf4, 0x45, 0x67, 0x4b, 0x35, 0xb1, 0x9f, 0xa5, 0xc6, 0x8e, 0x5d, 0xc3, 0xc9, - 0x02, 0x0b, 0xff, 0x88, 0x5a, 0x1c, 0x02, 0x70, 0x05, 0x4b, 0x8a, 0x88, 0x7d, 0xf2, 0xc0, 0xa9, - 0x50, 0x07, 0x82, 0x7e, 0x21, 0xb5, 0x77, 0xe4, 0x58, 0xe6, 0x27, 0x52, 0x5a, 0xe2, 0xcf, 0xd1, - 0x5e, 0x48, 0xa3, 0x29, 0x2d, 0x99, 0x2a, 0x5b, 0x2d, 0x1b, 0x67, 0xa9, 0xb1, 0x77, 0xb9, 0x70, - 0x43, 0xee, 0x30, 0xf1, 0xb7, 0xa8, 0x25, 0x20, 0x8c, 0x03, 0x2a, 0xf2, 0xa0, 0x6d, 0x9f, 0xbc, - 0x57, 0x9f, 0xaa, 0xfc, 0xbf, 0xca, 0x46, 0xae, 0x98, 0x37, 0x28, 0x68, 0x6a, 0x31, 0x95, 0x29, - 0x99, 0xa3, 0xa4, 0xb4, 0xc1, 0xcf, 0xd1, 0x63, 0x21, 0x82, 0xe2, 0xc5, 0x9e, 0x0e, 0x05, 0x24, - 0xe7, 0x7e, 0xe4, 0xf3, 0x31, 0x78, 0x9d, 0x96, 0x7a, 0xae, 0xb7, 0xb3, 0xd4, 0x78, 0x3c, 0x18, - 0xf4, 0x96, 0x51, 0xc8, 0x2a, 0x6d, 0xf7, 0xb7, 0x06, 0x6a, 0x97, 0x5b, 0x0d, 0x3f, 0x47, 0xc8, - 0x9d, 0xef, 0x10, 0xde, 0xd1, 0x54, 0x1e, 0xdf, 0x5d, 0x95, 0xc7, 0x72, 0xdb, 0x54, 0xab, 0xb9, - 0x84, 0x38, 0xa9, 0x19, 0xe1, 0xef, 0x50, 0x9b, 0x0b, 0x9a, 0x08, 0xb5, 0x0d, 0xd6, 0x5f, 0x7b, - 0x1b, 0xec, 0x66, 0xa9, 0xd1, 0xee, 0xcf, 0x0d, 0x48, 0xe5, 0x85, 0x87, 0x68, 0xaf, 0x0a, 0xe6, - 0xff, 0xdc, 0x6c, 0x6a, 0x9e, 0x67, 0x0b, 0x2e, 0xe4, 0x8e, 0xab, 0xdc, 0x2f, 0x79, 0x72, 0x55, - 0xd0, 0x9a, 0xd5, 0x7e, 0xc9, 0x63, 0x4e, 0x8a, 0x5b, 0x6c, 0xa1, 0x36, 0x9f, 0xba, 0x2e, 0x80, - 0x07, 0x9e, 0x8a, 0x4b, 0xd3, 0x7e, 0xa3, 0xa0, 0xb6, 0xfb, 0xf3, 0x0b, 0x52, 0x71, 0xa4, 0xf1, - 0x90, 0xfa, 0x01, 0x78, 0x2a, 0x26, 0x35, 0xe3, 0x73, 0x85, 0x92, 0xe2, 0xd6, 0x3e, 0xba, 0xb9, - 0xd5, 0xd7, 0x5e, 0xdc, 0xea, 0x6b, 0x2f, 0x6f, 0xf5, 0xb5, 0x5f, 0x32, 0x5d, 0xbb, 0xc9, 0x74, - 0xed, 0x45, 0xa6, 0x6b, 0x2f, 0x33, 0x5d, 0xfb, 0x2b, 0xd3, 0xb5, 0x5f, 0xff, 0xd6, 0xd7, 0xbe, - 0x5f, 0x9f, 0x1d, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x73, 0xe7, 0x7a, 0xb8, 0x08, 0x00, - 0x00, + // 1304 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xce, 0xc6, 0x71, 0x6c, 0x8f, 0x93, 0xd4, 0x9d, 0xd2, 0xd6, 0x98, 0xca, 0x1b, 0x4c, 0x41, + 0x01, 0xc1, 0x9a, 0x94, 0x08, 0x21, 0x04, 0x48, 0xd9, 0x54, 0x15, 0x0d, 0x8e, 0x1a, 0xc6, 0xa9, + 0x90, 0xa0, 0x20, 0xc6, 0xbb, 0x63, 0x67, 0x9b, 0xdd, 0x9d, 0xd5, 0xce, 0xd8, 0x22, 0x37, 0x7e, + 0x02, 0xbf, 0x02, 0x71, 0x42, 0x48, 0xdc, 0x39, 0xa2, 0x1e, 0x7b, 0xec, 0x69, 0x45, 0x97, 0x1b, + 0x17, 0xee, 0xe1, 0x82, 0x76, 0x76, 0xbc, 0xbb, 0xb6, 0x77, 0x43, 0xd3, 0x43, 0xc5, 0xcd, 0xfb, + 0xe6, 0xfb, 0xbe, 0x79, 0x7e, 0xef, 0xcd, 0x7b, 0x0f, 0x7c, 0x74, 0xf2, 0x01, 0xd3, 0x2c, 0xda, + 0x3d, 0x19, 0x0f, 0x88, 0xef, 0x12, 0x4e, 0x58, 0x77, 0x42, 0x5c, 0x93, 0xfa, 0x5d, 0x79, 0x80, + 0x3d, 0xab, 0x3b, 0xc0, 0xdc, 0x38, 0xee, 0x4e, 0xb6, 0xbb, 0x23, 0xe2, 0x12, 0x1f, 0x73, 0x62, + 0x6a, 0x9e, 0x4f, 0x39, 0x85, 0x57, 0x62, 0x90, 0x86, 0x3d, 0x4b, 0x13, 0x20, 0x6d, 0xb2, 0xdd, + 0x7a, 0x67, 0x64, 0xf1, 0xe3, 0xf1, 0x40, 0x33, 0xa8, 0xd3, 0x1d, 0xd1, 0x11, 0xed, 0x0a, 0xec, + 0x60, 0x3c, 0x14, 0x5f, 0xe2, 0x43, 0xfc, 0x8a, 0x35, 0x5a, 0x9d, 0xcc, 0x45, 0x06, 0xf5, 0x49, + 0xce, 0x3d, 0xad, 0x9d, 0x14, 0xe3, 0x60, 0xe3, 0xd8, 0x72, 0x89, 0x7f, 0xda, 0xf5, 0x4e, 0x46, + 0x91, 0x81, 0x75, 0x1d, 0xc2, 0x71, 0x1e, 0xab, 0x5b, 0xc4, 0xf2, 0xc7, 0x2e, 0xb7, 0x1c, 0xb2, + 0x40, 0x78, 0xff, 0xbf, 0x08, 0xcc, 0x38, 0x26, 0x0e, 0x9e, 0xe7, 0x75, 0xfe, 0x51, 0x40, 0x65, + 0xcf, 0xa7, 0xee, 0x3e, 0x1d, 0xc0, 0x6f, 0x41, 0x35, 0xf2, 0xc7, 0xc4, 0x1c, 0x37, 0x95, 0x4d, + 0x65, 0xab, 0x7e, 0xeb, 0x5d, 0x2d, 0x8d, 0x52, 0x22, 0xab, 0x79, 0x27, 0xa3, 0xc8, 0xc0, 0xb4, + 0x08, 0xad, 0x4d, 0xb6, 0xb5, 0x7b, 0x83, 0x87, 0xc4, 0xe0, 0x07, 0x84, 0x63, 0x1d, 0x3e, 0x0a, + 0xd4, 0xa5, 0x30, 0x50, 0x41, 0x6a, 0x43, 0x89, 0x2a, 0xd4, 0xc1, 0x0a, 0xf3, 0x88, 0xd1, 0x5c, + 0x16, 0xea, 0x9b, 0x5a, 0x4e, 0x0e, 0x34, 0xe9, 0x4d, 0xdf, 0x23, 0x86, 0xbe, 0x26, 0xd5, 0x56, + 0xa2, 0x2f, 0x24, 0xb8, 0x70, 0x1f, 0xac, 0x32, 0x8e, 0xf9, 0x98, 0x35, 0x4b, 0x42, 0xa5, 0x73, + 0xae, 0x8a, 0x40, 0xea, 0x1b, 0x52, 0x67, 0x35, 0xfe, 0x46, 0x52, 0xa1, 0xf3, 0xb3, 0x02, 0xea, + 0x12, 0xd9, 0xb3, 0x18, 0x87, 0x0f, 0x16, 0x22, 0xa0, 0x3d, 0x5b, 0x04, 0x22, 0xb6, 0xf8, 0xff, + 0x0d, 0x79, 0x53, 0x75, 0x6a, 0xc9, 0xfc, 0xfb, 0x5d, 0x50, 0xb6, 0x38, 0x71, 0x58, 0x73, 0x79, + 0xb3, 0xb4, 0x55, 0xbf, 0x75, 0xe3, 0x3c, 0xc7, 0xf5, 0x75, 0x29, 0x54, 0xbe, 0x1b, 0x51, 0x50, + 0xcc, 0xec, 0xfc, 0xb4, 0x92, 0x38, 0x1c, 0x85, 0x04, 0xbe, 0x0d, 0xaa, 0x51, 0x62, 0xcd, 0xb1, + 0x4d, 0x84, 0xc3, 0xb5, 0xd4, 0x81, 0xbe, 0xb4, 0xa3, 0x04, 0x01, 0xef, 0x83, 0xeb, 0x8c, 0x63, + 0x9f, 0x5b, 0xee, 0xe8, 0x36, 0xc1, 0xa6, 0x6d, 0xb9, 0xa4, 0x4f, 0x0c, 0xea, 0x9a, 0x4c, 0x64, + 0xa4, 0xa4, 0xbf, 0x12, 0x06, 0xea, 0xf5, 0x7e, 0x3e, 0x04, 0x15, 0x71, 0xe1, 0x03, 0x70, 0xd9, + 0xa0, 0xae, 0x31, 0xf6, 0x7d, 0xe2, 0x1a, 0xa7, 0x87, 0xd4, 0xb6, 0x8c, 0x53, 0x91, 0x9c, 0x9a, + 0xae, 0x49, 0x6f, 0x2e, 0xef, 0xcd, 0x03, 0xce, 0xf2, 0x8c, 0x68, 0x51, 0x08, 0xbe, 0x0e, 0x2a, + 0x6c, 0xcc, 0x3c, 0xe2, 0x9a, 0xcd, 0x95, 0x4d, 0x65, 0xab, 0xaa, 0xd7, 0xc3, 0x40, 0xad, 0xf4, + 0x63, 0x13, 0x9a, 0x9e, 0xc1, 0xaf, 0x40, 0xfd, 0x21, 0x1d, 0x1c, 0x11, 0xc7, 0xb3, 0x31, 0x27, + 0xcd, 0xb2, 0xc8, 0xde, 0xcd, 0xdc, 0x10, 0xef, 0xa7, 0x38, 0x51, 0x65, 0x57, 0xa4, 0x93, 0xf5, + 0xcc, 0x01, 0xca, 0xaa, 0xc1, 0x6f, 0x40, 0x8b, 0x8d, 0x0d, 0x83, 0x30, 0x36, 0x1c, 0xdb, 0xfb, + 0x74, 0xc0, 0x3e, 0xb5, 0x18, 0xa7, 0xfe, 0x69, 0xcf, 0x72, 0x2c, 0xde, 0x5c, 0xdd, 0x54, 0xb6, + 0xca, 0x7a, 0x3b, 0x0c, 0xd4, 0x56, 0xbf, 0x10, 0x85, 0xce, 0x51, 0x80, 0x08, 0x5c, 0x1b, 0x62, + 0xcb, 0x26, 0xe6, 0x82, 0x76, 0x45, 0x68, 0xb7, 0xc2, 0x40, 0xbd, 0x76, 0x27, 0x17, 0x81, 0x0a, + 0x98, 0x9d, 0xdf, 0x96, 0xc1, 0xfa, 0xcc, 0x2b, 0x80, 0x9f, 0x81, 0x55, 0x6c, 0x70, 0x6b, 0x12, + 0x95, 0x4a, 0x54, 0x80, 0xaf, 0x65, 0xa3, 0x13, 0xf5, 0xaf, 0xf4, 0x2d, 0x23, 0x32, 0x24, 0x51, + 0x12, 0x48, 0xfa, 0x74, 0x76, 0x05, 0x15, 0x49, 0x09, 0x68, 0x83, 0x86, 0x8d, 0x19, 0x9f, 0x56, + 0xd9, 0x91, 0xe5, 0x10, 0x91, 0x9f, 0xfa, 0xad, 0xb7, 0x9e, 0xed, 0xc9, 0x44, 0x0c, 0xfd, 0xa5, + 0x30, 0x50, 0x1b, 0xbd, 0x39, 0x1d, 0xb4, 0xa0, 0x0c, 0x7d, 0x00, 0x85, 0x2d, 0x09, 0xa1, 0xb8, + 0xaf, 0x7c, 0xe1, 0xfb, 0xae, 0x85, 0x81, 0x0a, 0x7b, 0x0b, 0x4a, 0x28, 0x47, 0xbd, 0xf3, 0xb7, + 0x02, 0x4a, 0x2f, 0xa6, 0x2d, 0x7e, 0x32, 0xd3, 0x16, 0x6f, 0x14, 0x15, 0x6d, 0x61, 0x4b, 0xbc, + 0x33, 0xd7, 0x12, 0xdb, 0x85, 0x0a, 0xe7, 0xb7, 0xc3, 0xdf, 0x4b, 0x60, 0x6d, 0x9f, 0x0e, 0xf6, + 0xa8, 0x6b, 0x5a, 0xdc, 0xa2, 0x2e, 0xdc, 0x01, 0x2b, 0xfc, 0xd4, 0x9b, 0xb6, 0x96, 0xcd, 0xe9, + 0xd5, 0x47, 0xa7, 0x1e, 0x39, 0x0b, 0xd4, 0x46, 0x16, 0x1b, 0xd9, 0x90, 0x40, 0xc3, 0x5e, 0xe2, + 0xce, 0xb2, 0xe0, 0xed, 0xcc, 0x5e, 0x77, 0x16, 0xa8, 0x39, 0x83, 0x53, 0x4b, 0x94, 0x66, 0x9d, + 0x82, 0x23, 0xb0, 0x1e, 0x25, 0xe7, 0xd0, 0xa7, 0x83, 0xb8, 0xca, 0x4a, 0x17, 0xce, 0xfa, 0x55, + 0xe9, 0xc0, 0x7a, 0x2f, 0x2b, 0x84, 0x66, 0x75, 0xe1, 0x24, 0xae, 0xb1, 0x23, 0x1f, 0xbb, 0x2c, + 0xfe, 0x4b, 0xcf, 0x57, 0xd3, 0x2d, 0x79, 0x9b, 0xa8, 0xb3, 0x59, 0x35, 0x94, 0x73, 0x03, 0x7c, + 0x03, 0xac, 0xfa, 0x04, 0x33, 0xea, 0x8a, 0x7a, 0xae, 0xa5, 0xd9, 0x41, 0xc2, 0x8a, 0xe4, 0x29, + 0x7c, 0x13, 0x54, 0x1c, 0xc2, 0x18, 0x1e, 0x11, 0xd1, 0x71, 0x6a, 0xfa, 0x25, 0x09, 0xac, 0x1c, + 0xc4, 0x66, 0x34, 0x3d, 0xef, 0xfc, 0xa8, 0x80, 0xca, 0x8b, 0x99, 0x69, 0x1f, 0xcf, 0xce, 0xb4, + 0x66, 0x51, 0xe5, 0x15, 0xcc, 0xb3, 0x5f, 0xca, 0xc2, 0x51, 0x31, 0xcb, 0xb6, 0x41, 0xdd, 0xc3, + 0x3e, 0xb6, 0x6d, 0x62, 0x5b, 0xcc, 0x11, 0xbe, 0x96, 0xf5, 0x4b, 0x51, 0x5f, 0x3e, 0x4c, 0xcd, + 0x28, 0x8b, 0x89, 0x28, 0x06, 0x75, 0x3c, 0x9b, 0x44, 0xc1, 0x8c, 0xcb, 0x4d, 0x52, 0xf6, 0x52, + 0x33, 0xca, 0x62, 0xe0, 0x3d, 0x70, 0x35, 0xee, 0x60, 0xf3, 0x13, 0xb0, 0x24, 0x26, 0xe0, 0xcb, + 0x61, 0xa0, 0x5e, 0xdd, 0xcd, 0x03, 0xa0, 0x7c, 0x1e, 0xdc, 0x01, 0x6b, 0x03, 0x6c, 0x9c, 0xd0, + 0xe1, 0x30, 0xdb, 0xb1, 0x1b, 0x61, 0xa0, 0xae, 0xe9, 0x19, 0x3b, 0x9a, 0x41, 0xc1, 0xaf, 0x41, + 0x95, 0x11, 0x9b, 0x18, 0x9c, 0xfa, 0xb2, 0xc4, 0xde, 0x7b, 0xc6, 0xac, 0xe0, 0x01, 0xb1, 0xfb, + 0x92, 0xaa, 0xaf, 0x89, 0x49, 0x2f, 0xbf, 0x50, 0x22, 0x09, 0x3f, 0x04, 0x1b, 0x0e, 0x76, 0xc7, + 0x38, 0x41, 0x8a, 0xda, 0xaa, 0xea, 0x30, 0x0c, 0xd4, 0x8d, 0x83, 0x99, 0x13, 0x34, 0x87, 0x84, + 0x9f, 0x83, 0x2a, 0x9f, 0x8e, 0xd1, 0x55, 0xe1, 0x5a, 0xee, 0xa0, 0x38, 0xa4, 0xe6, 0xcc, 0x14, + 0x4d, 0xaa, 0x24, 0x19, 0xa1, 0x89, 0x4c, 0xb4, 0x78, 0x70, 0x6e, 0xcb, 0x88, 0xed, 0x0e, 0x39, + 0xf1, 0xef, 0x58, 0xae, 0xc5, 0x8e, 0x89, 0xd9, 0xac, 0x8a, 0x70, 0x89, 0xc5, 0xe3, 0xe8, 0xa8, + 0x97, 0x07, 0x41, 0x45, 0x5c, 0xd8, 0x03, 0x1b, 0x69, 0x6a, 0x0f, 0xa8, 0x49, 0x9a, 0x35, 0xf1, + 0x30, 0x6e, 0x46, 0xff, 0x72, 0x6f, 0xe6, 0xe4, 0x6c, 0xc1, 0x82, 0xe6, 0xb8, 0xd9, 0x45, 0x03, + 0x14, 0x2f, 0x1a, 0x9d, 0xbf, 0x4a, 0xa0, 0x96, 0xce, 0xd4, 0xfb, 0x00, 0x18, 0xd3, 0xc6, 0xc5, + 0xe4, 0x5c, 0x7d, 0xb5, 0xe8, 0x11, 0x24, 0x2d, 0x2e, 0x9d, 0x07, 0x89, 0x89, 0xa1, 0x8c, 0x10, + 0xfc, 0x02, 0xd4, 0xc4, 0xb6, 0x25, 0x5a, 0xd0, 0xf2, 0x85, 0x5b, 0xd0, 0x7a, 0x18, 0xa8, 0xb5, + 0xfe, 0x54, 0x00, 0xa5, 0x5a, 0x70, 0x98, 0x0d, 0xd9, 0x73, 0xb6, 0x53, 0x38, 0x1b, 0x5e, 0x71, + 0xc5, 0x9c, 0x6a, 0xd4, 0xd4, 0xe4, 0xae, 0xb1, 0x22, 0x12, 0x5c, 0xb4, 0x46, 0x74, 0x41, 0x4d, + 0xec, 0x45, 0xc4, 0x24, 0xa6, 0xa8, 0xd1, 0xb2, 0x7e, 0x59, 0x42, 0x6b, 0xfd, 0xe9, 0x01, 0x4a, + 0x31, 0x91, 0x70, 0xbc, 0xf0, 0xc8, 0xb5, 0x2b, 0x11, 0x8e, 0xd7, 0x23, 0x24, 0x4f, 0xe1, 0x6d, + 0xd0, 0x90, 0x2e, 0x11, 0xf3, 0xae, 0x6b, 0x92, 0xef, 0x08, 0x13, 0x4f, 0xb3, 0xa6, 0x37, 0x25, + 0xa3, 0xb1, 0x37, 0x77, 0x8e, 0x16, 0x18, 0x9d, 0x5f, 0x15, 0x70, 0x69, 0x6e, 0x5d, 0xfc, 0xff, + 0xef, 0x03, 0xfa, 0xd6, 0xa3, 0xa7, 0xed, 0xa5, 0xc7, 0x4f, 0xdb, 0x4b, 0x4f, 0x9e, 0xb6, 0x97, + 0xbe, 0x0f, 0xdb, 0xca, 0xa3, 0xb0, 0xad, 0x3c, 0x0e, 0xdb, 0xca, 0x93, 0xb0, 0xad, 0xfc, 0x11, + 0xb6, 0x95, 0x1f, 0xfe, 0x6c, 0x2f, 0x7d, 0xb9, 0x3c, 0xd9, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, + 0x5a, 0x54, 0xec, 0x5f, 0x44, 0x0f, 0x00, 0x00, } -func (m *Job) Marshal() (dAtA []byte, err error) { +func (m *CronJob) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -270,12 +439,12 @@ func (m *Job) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Job) MarshalTo(dAtA []byte) (int, error) { +func (m *CronJob) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -313,70 +482,7 @@ func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *JobCondition) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *JobCondition) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *JobCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x32 - i -= len(m.Reason) - copy(dAtA[i:], m.Reason) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i-- - dAtA[i] = 0x2a - { - size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.LastProbeTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - i -= len(m.Status) - copy(dAtA[i:], m.Status) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i-- - dAtA[i] = 0x12 - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *JobList) Marshal() (dAtA []byte, err error) { +func (m *CronJobList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -386,12 +492,12 @@ func (m *JobList) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *JobList) MarshalTo(dAtA []byte) (int, error) { +func (m *CronJobList) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *JobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronJobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -423,7 +529,7 @@ func (m *JobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *JobSpec) Marshal() (dAtA []byte, err error) { +func (m *CronJobSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -433,28 +539,28 @@ func (m *JobSpec) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *JobSpec) MarshalTo(dAtA []byte) (int, error) { +func (m *CronJobSpec) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *JobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronJobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.TTLSecondsAfterFinished != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.TTLSecondsAfterFinished)) + if m.FailedJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) i-- - dAtA[i] = 0x40 + dAtA[i] = 0x38 } - if m.BackoffLimit != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.BackoffLimit)) + if m.SuccessfulJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) i-- - dAtA[i] = 0x38 + dAtA[i] = 0x30 } { - size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.JobTemplate.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -462,48 +568,36 @@ func (m *JobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 - if m.ManualSelector != nil { + dAtA[i] = 0x2a + if m.Suspend != nil { i-- - if *m.ManualSelector { + if *m.Suspend { dAtA[i] = 1 } else { dAtA[i] = 0 } i-- - dAtA[i] = 0x28 - } - if m.Selector != nil { - { - size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.ActiveDeadlineSeconds != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) - i-- - dAtA[i] = 0x18 + dAtA[i] = 0x20 } - if m.Completions != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.Completions)) + i -= len(m.ConcurrencyPolicy) + copy(dAtA[i:], m.ConcurrencyPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) + i-- + dAtA[i] = 0x1a + if m.StartingDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) i-- dAtA[i] = 0x10 } - if m.Parallelism != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.Parallelism)) - i-- - dAtA[i] = 0x8 - } + i -= len(m.Schedule) + copy(dAtA[i:], m.Schedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *JobStatus) Marshal() (dAtA []byte, err error) { +func (m *CronJobStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -513,28 +607,19 @@ func (m *JobStatus) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *JobStatus) MarshalTo(dAtA []byte) (int, error) { +func (m *CronJobStatus) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *CronJobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - i = encodeVarintGenerated(dAtA, i, uint64(m.Failed)) - i-- - dAtA[i] = 0x30 - i = encodeVarintGenerated(dAtA, i, uint64(m.Succeeded)) - i-- - dAtA[i] = 0x28 - i = encodeVarintGenerated(dAtA, i, uint64(m.Active)) - i-- - dAtA[i] = 0x20 - if m.CompletionTime != nil { + if m.LastSuccessfulTime != nil { { - size, err := m.CompletionTime.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LastSuccessfulTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -542,11 +627,11 @@ func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x2a } - if m.StartTime != nil { + if m.LastScheduleTime != nil { { - size, err := m.StartTime.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.LastScheduleTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -554,12 +639,12 @@ func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x22 } - if len(m.Conditions) > 0 { - for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Active) > 0 { + for iNdEx := len(m.Active) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Active[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -573,222 +658,1429 @@ func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - offset -= sovGenerated(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *Job) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base + return dAtA[:n], nil } -func (m *Job) Size() (n int) { - if m == nil { - return 0 - } + +func (m *Job) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *JobCondition) Size() (n int) { - if m == nil { - return 0 +func (m *JobCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } + return dAtA[:n], nil +} + +func (m *JobCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastProbeTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.LastProbeTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *JobList) Size() (n int) { - if m == nil { - return 0 +func (m *JobList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } + return dAtA[:n], nil +} + +func (m *JobList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - return n + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *JobSpec) Size() (n int) { - if m == nil { - return 0 +func (m *JobSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } + return dAtA[:n], nil +} + +func (m *JobSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Parallelism != nil { - n += 1 + sovGenerated(uint64(*m.Parallelism)) + if m.Suspend != nil { + i-- + if *m.Suspend { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 } - if m.Completions != nil { - n += 1 + sovGenerated(uint64(*m.Completions)) + if m.CompletionMode != nil { + i -= len(*m.CompletionMode) + copy(dAtA[i:], *m.CompletionMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.CompletionMode))) + i-- + dAtA[i] = 0x4a } - if m.ActiveDeadlineSeconds != nil { - n += 1 + sovGenerated(uint64(*m.ActiveDeadlineSeconds)) + if m.TTLSecondsAfterFinished != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TTLSecondsAfterFinished)) + i-- + dAtA[i] = 0x40 } - if m.Selector != nil { - l = m.Selector.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.BackoffLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.BackoffLimit)) + i-- + dAtA[i] = 0x38 + } + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x32 if m.ManualSelector != nil { - n += 2 + i-- + if *m.ManualSelector { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 } - l = m.Template.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.BackoffLimit != nil { - n += 1 + sovGenerated(uint64(*m.BackoffLimit)) + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - if m.TTLSecondsAfterFinished != nil { - n += 1 + sovGenerated(uint64(*m.TTLSecondsAfterFinished)) + if m.ActiveDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) + i-- + dAtA[i] = 0x18 } - return n + if m.Completions != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Completions)) + i-- + dAtA[i] = 0x10 + } + if m.Parallelism != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Parallelism)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } -func (m *JobStatus) Size() (n int) { - if m == nil { - return 0 +func (m *JobStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } + return dAtA[:n], nil +} + +func (m *JobStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.CompletedIndexes) + copy(dAtA[i:], m.CompletedIndexes) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CompletedIndexes))) + i-- + dAtA[i] = 0x3a + i = encodeVarintGenerated(dAtA, i, uint64(m.Failed)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.Succeeded)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.Active)) + i-- + dAtA[i] = 0x20 + if m.CompletionTime != nil { + { + size, err := m.CompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } if m.StartTime != nil { - l = m.StartTime.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.StartTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - if m.CompletionTime != nil { - l = m.CompletionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - n += 1 + sovGenerated(uint64(m.Active)) - n += 1 + sovGenerated(uint64(m.Succeeded)) - n += 1 + sovGenerated(uint64(m.Failed)) - return n + return len(dAtA) - i, nil } -func sovGenerated(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 +func (m *JobTemplateSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + +func (m *JobTemplateSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (this *Job) String() string { - if this == nil { - return "nil" + +func (m *JobTemplateSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - s := strings.Join([]string{`&Job{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "JobStatus", "JobStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (this *JobCondition) String() string { - if this == nil { - return "nil" + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ } - s := strings.Join([]string{`&JobCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastProbeTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastProbeTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s + dAtA[offset] = uint8(v) + return base } -func (this *JobList) String() string { - if this == nil { - return "nil" +func (m *CronJob) Size() (n int) { + if m == nil { + return 0 } - repeatedStringForItems := "[]Job{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Job", "Job", 1), `&`, ``, 1) + "," + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CronJobList) Size() (n int) { + if m == nil { + return 0 } - repeatedStringForItems += "}" - s := strings.Join([]string{`&JobList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *JobSpec) String() string { - if this == nil { - return "nil" + +func (m *CronJobSpec) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&JobSpec{`, - `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, - `Completions:` + valueToStringGenerated(this.Completions) + `,`, - `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, - `ManualSelector:` + valueToStringGenerated(this.ManualSelector) + `,`, - `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, - `BackoffLimit:` + valueToStringGenerated(this.BackoffLimit) + `,`, - `TTLSecondsAfterFinished:` + valueToStringGenerated(this.TTLSecondsAfterFinished) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Schedule) + n += 1 + l + sovGenerated(uint64(l)) + if m.StartingDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) + } + l = len(m.ConcurrencyPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.Suspend != nil { + n += 2 + } + l = m.JobTemplate.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.SuccessfulJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.SuccessfulJobsHistoryLimit)) + } + if m.FailedJobsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.FailedJobsHistoryLimit)) + } + return n } -func (this *JobStatus) String() string { - if this == nil { - return "nil" + +func (m *CronJobStatus) Size() (n int) { + if m == nil { + return 0 } - repeatedStringForConditions := "[]JobCondition{" - for _, f := range this.Conditions { - repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "JobCondition", "JobCondition", 1), `&`, ``, 1) + "," + var l int + _ = l + if len(m.Active) > 0 { + for _, e := range m.Active { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.LastScheduleTime != nil { + l = m.LastScheduleTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastSuccessfulTime != nil { + l = m.LastSuccessfulTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *Job) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *JobCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastProbeTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *JobList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *JobSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Parallelism != nil { + n += 1 + sovGenerated(uint64(*m.Parallelism)) + } + if m.Completions != nil { + n += 1 + sovGenerated(uint64(*m.Completions)) + } + if m.ActiveDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.ActiveDeadlineSeconds)) + } + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ManualSelector != nil { + n += 2 + } + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.BackoffLimit != nil { + n += 1 + sovGenerated(uint64(*m.BackoffLimit)) + } + if m.TTLSecondsAfterFinished != nil { + n += 1 + sovGenerated(uint64(*m.TTLSecondsAfterFinished)) + } + if m.CompletionMode != nil { + l = len(*m.CompletionMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Suspend != nil { + n += 2 + } + return n +} + +func (m *JobStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.StartTime != nil { + l = m.StartTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CompletionTime != nil { + l = m.CompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.Active)) + n += 1 + sovGenerated(uint64(m.Succeeded)) + n += 1 + sovGenerated(uint64(m.Failed)) + l = len(m.CompletedIndexes) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *JobTemplateSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CronJob) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CronJob{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CronJobSpec", "CronJobSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronJobStatus", "CronJobStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CronJobList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]CronJob{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CronJob", "CronJob", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CronJobList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *CronJobSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CronJobSpec{`, + `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, + `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, + `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, + `Suspend:` + valueToStringGenerated(this.Suspend) + `,`, + `JobTemplate:` + strings.Replace(strings.Replace(this.JobTemplate.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, + `SuccessfulJobsHistoryLimit:` + valueToStringGenerated(this.SuccessfulJobsHistoryLimit) + `,`, + `FailedJobsHistoryLimit:` + valueToStringGenerated(this.FailedJobsHistoryLimit) + `,`, + `}`, + }, "") + return s +} +func (this *CronJobStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForActive := "[]ObjectReference{" + for _, f := range this.Active { + repeatedStringForActive += fmt.Sprintf("%v", f) + "," + } + repeatedStringForActive += "}" + s := strings.Join([]string{`&CronJobStatus{`, + `Active:` + repeatedStringForActive + `,`, + `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "v1.Time", 1) + `,`, + `LastSuccessfulTime:` + strings.Replace(fmt.Sprintf("%v", this.LastSuccessfulTime), "Time", "v1.Time", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Job) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Job{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "JobStatus", "JobStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastProbeTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *JobList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Job{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Job", "Job", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&JobList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *JobSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobSpec{`, + `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, + `Completions:` + valueToStringGenerated(this.Completions) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `ManualSelector:` + valueToStringGenerated(this.ManualSelector) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `BackoffLimit:` + valueToStringGenerated(this.BackoffLimit) + `,`, + `TTLSecondsAfterFinished:` + valueToStringGenerated(this.TTLSecondsAfterFinished) + `,`, + `CompletionMode:` + valueToStringGenerated(this.CompletionMode) + `,`, + `Suspend:` + valueToStringGenerated(this.Suspend) + `,`, + `}`, + }, "") + return s +} +func (this *JobStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]JobCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "JobCondition", "JobCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&JobStatus{`, + `Conditions:` + repeatedStringForConditions + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "v1.Time", 1) + `,`, + `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "v1.Time", 1) + `,`, + `Active:` + fmt.Sprintf("%v", this.Active) + `,`, + `Succeeded:` + fmt.Sprintf("%v", this.Succeeded) + `,`, + `Failed:` + fmt.Sprintf("%v", this.Failed) + `,`, + `CompletedIndexes:` + fmt.Sprintf("%v", this.CompletedIndexes) + `,`, + `}`, + }, "") + return s +} +func (this *JobTemplateSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobTemplateSpec{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CronJob) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CronJob: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronJob: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CronJobList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CronJobList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronJobList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CronJob{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CronJobSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CronJobSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronJobSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Schedule", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Schedule = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.StartingDeadlineSeconds = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConcurrencyPolicy = ConcurrencyPolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Suspend = &b + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JobTemplate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.JobTemplate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SuccessfulJobsHistoryLimit = &v + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedJobsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FailedJobsHistoryLimit = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CronJobStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CronJobStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CronJobStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Active = append(m.Active, v11.ObjectReference{}) + if err := m.Active[len(m.Active)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastScheduleTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastScheduleTime == nil { + m.LastScheduleTime = &v1.Time{} + } + if err := m.LastScheduleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastSuccessfulTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastSuccessfulTime == nil { + m.LastSuccessfulTime = &v1.Time{} + } + if err := m.LastSuccessfulTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - repeatedStringForConditions += "}" - s := strings.Join([]string{`&JobStatus{`, - `Conditions:` + repeatedStringForConditions + `,`, - `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "v1.Time", 1) + `,`, - `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "v1.Time", 1) + `,`, - `Active:` + fmt.Sprintf("%v", this.Active) + `,`, - `Succeeded:` + fmt.Sprintf("%v", this.Succeeded) + `,`, - `Failed:` + fmt.Sprintf("%v", this.Failed) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" + + if iNdEx > l { + return io.ErrUnexpectedEOF } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) + return nil } func (m *Job) Unmarshal(dAtA []byte) error { l := len(dAtA) @@ -924,10 +2216,7 @@ func (m *Job) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1171,10 +2460,7 @@ func (m *JobCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1291,10 +2577,7 @@ func (m *JobList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1528,16 +2811,67 @@ func (m *JobSpec) Unmarshal(dAtA []byte) error { } } m.TTLSecondsAfterFinished = &v + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := CompletionMode(dAtA[iNdEx:postIndex]) + m.CompletionMode = &s + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Suspend = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1744,16 +3078,161 @@ func (m *JobStatus) Unmarshal(dAtA []byte) error { break } } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletedIndexes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CompletedIndexes = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *JobTemplateSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: JobTemplateSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: JobTemplateSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/batch/v1/generated.proto b/constraint/vendor/k8s.io/api/batch/v1/generated.proto index 7548c04dc..04f0e7ea7 100644 --- a/constraint/vendor/k8s.io/api/batch/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/batch/v1/generated.proto @@ -29,6 +29,88 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1"; +// CronJob represents the configuration of a single cron job. +message CronJob { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the desired behavior of a cron job, including the schedule. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional CronJobSpec spec = 2; + + // Current status of a cron job. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional CronJobStatus status = 3; +} + +// CronJobList is a collection of cron jobs. +message CronJobList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of CronJobs. + repeated CronJob items = 2; +} + +// CronJobSpec describes how the job execution will look like and when it will actually run. +message CronJobSpec { + // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. + optional string schedule = 1; + + // Optional deadline in seconds for starting the job if it misses scheduled + // time for any reason. Missed jobs executions will be counted as failed ones. + // +optional + optional int64 startingDeadlineSeconds = 2; + + // Specifies how to treat concurrent executions of a Job. + // Valid values are: + // - "Allow" (default): allows CronJobs to run concurrently; + // - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; + // - "Replace": cancels currently running job and replaces it with a new one + // +optional + optional string concurrencyPolicy = 3; + + // This flag tells the controller to suspend subsequent executions, it does + // not apply to already started executions. Defaults to false. + // +optional + optional bool suspend = 4; + + // Specifies the job that will be created when executing a CronJob. + optional JobTemplateSpec jobTemplate = 5; + + // The number of successful finished jobs to retain. Value must be non-negative integer. + // Defaults to 3. + // +optional + optional int32 successfulJobsHistoryLimit = 6; + + // The number of failed finished jobs to retain. Value must be non-negative integer. + // Defaults to 1. + // +optional + optional int32 failedJobsHistoryLimit = 7; +} + +// CronJobStatus represents the current state of a cron job. +message CronJobStatus { + // A list of pointers to currently running jobs. + // +optional + // +listType=atomic + repeated k8s.io.api.core.v1.ObjectReference active = 1; + + // Information when was the last time the job was successfully scheduled. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScheduleTime = 4; + + // Information when was the last time the job successfully completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastSuccessfulTime = 5; +} + // Job represents the configuration of a single job. message Job { // Standard object's metadata. @@ -102,8 +184,11 @@ message JobSpec { // +optional optional int32 completions = 2; - // Specifies the duration in seconds relative to the startTime that the job may be active - // before the system tries to terminate it; value must be positive integer + // Specifies the duration in seconds relative to the startTime that the job + // may be continuously active before the system tries to terminate it; value + // must be positive integer. If a Job is suspended (at creation or through an + // update), this timer will effectively be stopped and reset when the Job is + // resumed again. // +optional optional int64 activeDeadlineSeconds = 3; @@ -146,21 +231,61 @@ message JobSpec { // TTLAfterFinished feature. // +optional optional int32 ttlSecondsAfterFinished = 8; + + // CompletionMode specifies how Pod completions are tracked. It can be + // `NonIndexed` (default) or `Indexed`. + // + // `NonIndexed` means that the Job is considered complete when there have + // been .spec.completions successfully completed Pods. Each Pod completion is + // homologous to each other. + // + // `Indexed` means that the Pods of a + // Job get an associated completion index from 0 to (.spec.completions - 1), + // available in the annotation batch.kubernetes.io/job-completion-index. + // The Job is considered complete when there is one successfully completed Pod + // for each index. + // When value is `Indexed`, .spec.completions must be specified and + // `.spec.parallelism` must be less than or equal to 10^5. + // + // This field is alpha-level and is only honored by servers that enable the + // IndexedJob feature gate. More completion modes can be added in the future. + // If the Job controller observes a mode that it doesn't recognize, the + // controller skips updates for the Job. + // +optional + optional string completionMode = 9; + + // Suspend specifies whether the Job controller should create Pods or not. If + // a Job is created with suspend set to true, no Pods are created by the Job + // controller. If a Job is suspended after creation (i.e. the flag goes from + // false to true), the Job controller will delete all active Pods associated + // with this Job. Users must design their workload to gracefully handle this. + // Suspending a Job will reset the StartTime field of the Job, effectively + // resetting the ActiveDeadlineSeconds timer too. This is an alpha field and + // requires the SuspendJob feature gate to be enabled; otherwise this field + // may not be set to true. Defaults to false. + // +optional + optional bool suspend = 10; } // JobStatus represents the current state of a Job. message JobStatus { - // The latest available observations of an object's current state. - // When a job fails, one of the conditions will have type == "Failed". + // The latest available observations of an object's current state. When a Job + // fails, one of the conditions will have type "Failed" and status true. When + // a Job is suspended, one of the conditions will have type "Suspended" and + // status true; when the Job is resumed, the status of this condition will + // become false. When a Job is completed, one of the conditions will have + // type "Complete" and status true. // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ // +optional // +patchMergeKey=type // +patchStrategy=merge + // +listType=atomic repeated JobCondition conditions = 1; - // Represents time when the job was acknowledged by the job controller. - // It is not guaranteed to be set in happens-before order across separate operations. - // It is represented in RFC3339 form and is in UTC. + // Represents time when the job controller started processing a job. When a + // Job is created in the suspended state, this field is not set until the + // first time it is resumed. This field is reset every time a Job is resumed + // from suspension. It is represented in RFC3339 form and is in UTC. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startTime = 2; @@ -182,5 +307,28 @@ message JobStatus { // The number of pods which reached phase Failed. // +optional optional int32 failed = 6; + + // CompletedIndexes holds the completed indexes when .spec.completionMode = + // "Indexed" in a text format. The indexes are represented as decimal integers + // separated by commas. The numbers are listed in increasing order. Three or + // more consecutive numbers are compressed and represented by the first and + // last element of the series, separated by a hyphen. + // For example, if the completed indexes are 1, 3, 4, 5 and 7, they are + // represented as "1,3-5,7". + // +optional + optional string completedIndexes = 7; +} + +// JobTemplateSpec describes the data a Job should have when created from a template +message JobTemplateSpec { + // Standard object's metadata of the jobs created from this template. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the desired behavior of the job. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional JobSpec spec = 2; } diff --git a/constraint/vendor/k8s.io/api/batch/v1/register.go b/constraint/vendor/k8s.io/api/batch/v1/register.go index 32fa51f0e..17029cdf2 100644 --- a/constraint/vendor/k8s.io/api/batch/v1/register.go +++ b/constraint/vendor/k8s.io/api/batch/v1/register.go @@ -46,6 +46,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, + &CronJob{}, + &CronJobList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil diff --git a/constraint/vendor/k8s.io/api/batch/v1/types.go b/constraint/vendor/k8s.io/api/batch/v1/types.go index fd478874a..12f4b04cb 100644 --- a/constraint/vendor/k8s.io/api/batch/v1/types.go +++ b/constraint/vendor/k8s.io/api/batch/v1/types.go @@ -21,6 +21,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +const JobCompletionIndexAnnotationAlpha = "batch.kubernetes.io/job-completion-index" + // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -57,6 +59,22 @@ type JobList struct { Items []Job `json:"items" protobuf:"bytes,2,rep,name=items"` } +// CompletionMode specifies how Pod completions of a Job are tracked. +type CompletionMode string + +const ( + // NonIndexedCompletion is a Job completion mode. In this mode, the Job is + // considered complete when there have been .spec.completions + // successfully completed Pods. Pod completions are homologous to each other. + NonIndexedCompletion CompletionMode = "NonIndexed" + + // IndexedCompletion is a Job completion mode. In this mode, the Pods of a + // Job get an associated completion index from 0 to (.spec.completions - 1). + // The Job is considered complete when a Pod completes for each completion + // index. + IndexedCompletion CompletionMode = "Indexed" +) + // JobSpec describes how the job execution will look like. type JobSpec struct { @@ -77,8 +95,11 @@ type JobSpec struct { // +optional Completions *int32 `json:"completions,omitempty" protobuf:"varint,2,opt,name=completions"` - // Specifies the duration in seconds relative to the startTime that the job may be active - // before the system tries to terminate it; value must be positive integer + // Specifies the duration in seconds relative to the startTime that the job + // may be continuously active before the system tries to terminate it; value + // must be positive integer. If a Job is suspended (at creation or through an + // update), this timer will effectively be stopped and reset when the Job is + // resumed again. // +optional ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty" protobuf:"varint,3,opt,name=activeDeadlineSeconds"` @@ -126,21 +147,61 @@ type JobSpec struct { // TTLAfterFinished feature. // +optional TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty" protobuf:"varint,8,opt,name=ttlSecondsAfterFinished"` + + // CompletionMode specifies how Pod completions are tracked. It can be + // `NonIndexed` (default) or `Indexed`. + // + // `NonIndexed` means that the Job is considered complete when there have + // been .spec.completions successfully completed Pods. Each Pod completion is + // homologous to each other. + // + // `Indexed` means that the Pods of a + // Job get an associated completion index from 0 to (.spec.completions - 1), + // available in the annotation batch.kubernetes.io/job-completion-index. + // The Job is considered complete when there is one successfully completed Pod + // for each index. + // When value is `Indexed`, .spec.completions must be specified and + // `.spec.parallelism` must be less than or equal to 10^5. + // + // This field is alpha-level and is only honored by servers that enable the + // IndexedJob feature gate. More completion modes can be added in the future. + // If the Job controller observes a mode that it doesn't recognize, the + // controller skips updates for the Job. + // +optional + CompletionMode *CompletionMode `json:"completionMode,omitempty" protobuf:"bytes,9,opt,name=completionMode,casttype=CompletionMode"` + + // Suspend specifies whether the Job controller should create Pods or not. If + // a Job is created with suspend set to true, no Pods are created by the Job + // controller. If a Job is suspended after creation (i.e. the flag goes from + // false to true), the Job controller will delete all active Pods associated + // with this Job. Users must design their workload to gracefully handle this. + // Suspending a Job will reset the StartTime field of the Job, effectively + // resetting the ActiveDeadlineSeconds timer too. This is an alpha field and + // requires the SuspendJob feature gate to be enabled; otherwise this field + // may not be set to true. Defaults to false. + // +optional + Suspend *bool `json:"suspend,omitempty" protobuf:"varint,10,opt,name=suspend"` } // JobStatus represents the current state of a Job. type JobStatus struct { - // The latest available observations of an object's current state. - // When a job fails, one of the conditions will have type == "Failed". + // The latest available observations of an object's current state. When a Job + // fails, one of the conditions will have type "Failed" and status true. When + // a Job is suspended, one of the conditions will have type "Suspended" and + // status true; when the Job is resumed, the status of this condition will + // become false. When a Job is completed, one of the conditions will have + // type "Complete" and status true. // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ // +optional // +patchMergeKey=type // +patchStrategy=merge + // +listType=atomic Conditions []JobCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` - // Represents time when the job was acknowledged by the job controller. - // It is not guaranteed to be set in happens-before order across separate operations. - // It is represented in RFC3339 form and is in UTC. + // Represents time when the job controller started processing a job. When a + // Job is created in the suspended state, this field is not set until the + // first time it is resumed. This field is reset every time a Job is resumed + // from suspension. It is represented in RFC3339 form and is in UTC. // +optional StartTime *metav1.Time `json:"startTime,omitempty" protobuf:"bytes,2,opt,name=startTime"` @@ -162,12 +223,24 @@ type JobStatus struct { // The number of pods which reached phase Failed. // +optional Failed int32 `json:"failed,omitempty" protobuf:"varint,6,opt,name=failed"` + + // CompletedIndexes holds the completed indexes when .spec.completionMode = + // "Indexed" in a text format. The indexes are represented as decimal integers + // separated by commas. The numbers are listed in increasing order. Three or + // more consecutive numbers are compressed and represented by the first and + // last element of the series, separated by a hyphen. + // For example, if the completed indexes are 1, 3, 4, 5 and 7, they are + // represented as "1,3-5,7". + // +optional + CompletedIndexes string `json:"completedIndexes,omitempty" protobuf:"bytes,7,opt,name=completedIndexes"` } type JobConditionType string // These are valid conditions of a job. const ( + // JobSuspended means the job has been suspended. + JobSuspended JobConditionType = "Suspended" // JobComplete means the job has completed its execution. JobComplete JobConditionType = "Complete" // JobFailed means the job has failed its execution. @@ -193,3 +266,125 @@ type JobCondition struct { // +optional Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` } + +// JobTemplateSpec describes the data a Job should have when created from a template +type JobTemplateSpec struct { + // Standard object's metadata of the jobs created from this template. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the desired behavior of the job. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CronJob represents the configuration of a single cron job. +type CronJob struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the desired behavior of a cron job, including the schedule. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Spec CronJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Current status of a cron job. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Status CronJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CronJobList is a collection of cron jobs. +type CronJobList struct { + metav1.TypeMeta `json:",inline"` + + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of CronJobs. + Items []CronJob `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// CronJobSpec describes how the job execution will look like and when it will actually run. +type CronJobSpec struct { + + // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. + Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` + + // Optional deadline in seconds for starting the job if it misses scheduled + // time for any reason. Missed jobs executions will be counted as failed ones. + // +optional + StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,2,opt,name=startingDeadlineSeconds"` + + // Specifies how to treat concurrent executions of a Job. + // Valid values are: + // - "Allow" (default): allows CronJobs to run concurrently; + // - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; + // - "Replace": cancels currently running job and replaces it with a new one + // +optional + ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` + + // This flag tells the controller to suspend subsequent executions, it does + // not apply to already started executions. Defaults to false. + // +optional + Suspend *bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"` + + // Specifies the job that will be created when executing a CronJob. + JobTemplate JobTemplateSpec `json:"jobTemplate" protobuf:"bytes,5,opt,name=jobTemplate"` + + // The number of successful finished jobs to retain. Value must be non-negative integer. + // Defaults to 3. + // +optional + SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,6,opt,name=successfulJobsHistoryLimit"` + + // The number of failed finished jobs to retain. Value must be non-negative integer. + // Defaults to 1. + // +optional + FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=failedJobsHistoryLimit"` +} + +// ConcurrencyPolicy describes how the job will be handled. +// Only one of the following concurrent policies may be specified. +// If none of the following policies is specified, the default one +// is AllowConcurrent. +type ConcurrencyPolicy string + +const ( + // AllowConcurrent allows CronJobs to run concurrently. + AllowConcurrent ConcurrencyPolicy = "Allow" + + // ForbidConcurrent forbids concurrent runs, skipping next run if previous + // hasn't finished yet. + ForbidConcurrent ConcurrencyPolicy = "Forbid" + + // ReplaceConcurrent cancels currently running job and replaces it with a new one. + ReplaceConcurrent ConcurrencyPolicy = "Replace" +) + +// CronJobStatus represents the current state of a cron job. +type CronJobStatus struct { + // A list of pointers to currently running jobs. + // +optional + // +listType=atomic + Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"` + + // Information when was the last time the job was successfully scheduled. + // +optional + LastScheduleTime *metav1.Time `json:"lastScheduleTime,omitempty" protobuf:"bytes,4,opt,name=lastScheduleTime"` + + // Information when was the last time the job successfully completed. + // +optional + LastSuccessfulTime *metav1.Time `json:"lastSuccessfulTime,omitempty" protobuf:"bytes,5,opt,name=lastSuccessfulTime"` +} diff --git a/constraint/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go index 0d8003a72..d98c5edeb 100644 --- a/constraint/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go @@ -27,6 +27,53 @@ package v1 // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_CronJob = map[string]string{ + "": "CronJob represents the configuration of a single cron job.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", +} + +func (CronJob) SwaggerDoc() map[string]string { + return map_CronJob +} + +var map_CronJobList = map[string]string{ + "": "CronJobList is a collection of cron jobs.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "items is the list of CronJobs.", +} + +func (CronJobList) SwaggerDoc() map[string]string { + return map_CronJobList +} + +var map_CronJobSpec = map[string]string{ + "": "CronJobSpec describes how the job execution will look like and when it will actually run.", + "schedule": "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", + "startingDeadlineSeconds": "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", + "concurrencyPolicy": "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", + "suspend": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", + "jobTemplate": "Specifies the job that will be created when executing a CronJob.", + "successfulJobsHistoryLimit": "The number of successful finished jobs to retain. Value must be non-negative integer. Defaults to 3.", + "failedJobsHistoryLimit": "The number of failed finished jobs to retain. Value must be non-negative integer. Defaults to 1.", +} + +func (CronJobSpec) SwaggerDoc() map[string]string { + return map_CronJobSpec +} + +var map_CronJobStatus = map[string]string{ + "": "CronJobStatus represents the current state of a cron job.", + "active": "A list of pointers to currently running jobs.", + "lastScheduleTime": "Information when was the last time the job was successfully scheduled.", + "lastSuccessfulTime": "Information when was the last time the job successfully completed.", +} + +func (CronJobStatus) SwaggerDoc() map[string]string { + return map_CronJobStatus +} + var map_Job = map[string]string{ "": "Job represents the configuration of a single job.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", @@ -66,12 +113,14 @@ var map_JobSpec = map[string]string{ "": "JobSpec describes how the job execution will look like.", "parallelism": "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", "completions": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", + "activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be continuously active before the system tries to terminate it; value must be positive integer. If a Job is suspended (at creation or through an update), this timer will effectively be stopped and reset when the Job is resumed again.", "backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6", "selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", "manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", "template": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", "ttlSecondsAfterFinished": "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.", + "completionMode": "CompletionMode specifies how Pod completions are tracked. It can be `NonIndexed` (default) or `Indexed`.\n\n`NonIndexed` means that the Job is considered complete when there have been .spec.completions successfully completed Pods. Each Pod completion is homologous to each other.\n\n`Indexed` means that the Pods of a Job get an associated completion index from 0 to (.spec.completions - 1), available in the annotation batch.kubernetes.io/job-completion-index. The Job is considered complete when there is one successfully completed Pod for each index. When value is `Indexed`, .spec.completions must be specified and `.spec.parallelism` must be less than or equal to 10^5.\n\nThis field is alpha-level and is only honored by servers that enable the IndexedJob feature gate. More completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, the controller skips updates for the Job.", + "suspend": "Suspend specifies whether the Job controller should create Pods or not. If a Job is created with suspend set to true, no Pods are created by the Job controller. If a Job is suspended after creation (i.e. the flag goes from false to true), the Job controller will delete all active Pods associated with this Job. Users must design their workload to gracefully handle this. Suspending a Job will reset the StartTime field of the Job, effectively resetting the ActiveDeadlineSeconds timer too. This is an alpha field and requires the SuspendJob feature gate to be enabled; otherwise this field may not be set to true. Defaults to false.", } func (JobSpec) SwaggerDoc() map[string]string { @@ -79,17 +128,28 @@ func (JobSpec) SwaggerDoc() map[string]string { } var map_JobStatus = map[string]string{ - "": "JobStatus represents the current state of a Job.", - "conditions": "The latest available observations of an object's current state. When a job fails, one of the conditions will have type == \"Failed\". More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "startTime": "Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - "completionTime": "Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. The completion time is only set when the job finishes successfully.", - "active": "The number of actively running pods.", - "succeeded": "The number of pods which reached phase Succeeded.", - "failed": "The number of pods which reached phase Failed.", + "": "JobStatus represents the current state of a Job.", + "conditions": "The latest available observations of an object's current state. When a Job fails, one of the conditions will have type \"Failed\" and status true. When a Job is suspended, one of the conditions will have type \"Suspended\" and status true; when the Job is resumed, the status of this condition will become false. When a Job is completed, one of the conditions will have type \"Complete\" and status true. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + "startTime": "Represents time when the job controller started processing a job. When a Job is created in the suspended state, this field is not set until the first time it is resumed. This field is reset every time a Job is resumed from suspension. It is represented in RFC3339 form and is in UTC.", + "completionTime": "Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC. The completion time is only set when the job finishes successfully.", + "active": "The number of actively running pods.", + "succeeded": "The number of pods which reached phase Succeeded.", + "failed": "The number of pods which reached phase Failed.", + "completedIndexes": "CompletedIndexes holds the completed indexes when .spec.completionMode = \"Indexed\" in a text format. The indexes are represented as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the completed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\".", } func (JobStatus) SwaggerDoc() map[string]string { return map_JobStatus } +var map_JobTemplateSpec = map[string]string{ + "": "JobTemplateSpec describes the data a Job should have when created from a template", + "metadata": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", +} + +func (JobTemplateSpec) SwaggerDoc() map[string]string { + return map_JobTemplateSpec +} + // AUTO-GENERATED FUNCTIONS END HERE diff --git a/constraint/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go index beba55ace..6018ad1d3 100644 --- a/constraint/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go @@ -21,10 +21,138 @@ limitations under the License. package v1 import ( + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronJob) DeepCopyInto(out *CronJob) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJob. +func (in *CronJob) DeepCopy() *CronJob { + if in == nil { + return nil + } + out := new(CronJob) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CronJob) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronJobList) DeepCopyInto(out *CronJobList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CronJob, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJobList. +func (in *CronJobList) DeepCopy() *CronJobList { + if in == nil { + return nil + } + out := new(CronJobList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CronJobList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronJobSpec) DeepCopyInto(out *CronJobSpec) { + *out = *in + if in.StartingDeadlineSeconds != nil { + in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds + *out = new(int64) + **out = **in + } + if in.Suspend != nil { + in, out := &in.Suspend, &out.Suspend + *out = new(bool) + **out = **in + } + in.JobTemplate.DeepCopyInto(&out.JobTemplate) + if in.SuccessfulJobsHistoryLimit != nil { + in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit + *out = new(int32) + **out = **in + } + if in.FailedJobsHistoryLimit != nil { + in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJobSpec. +func (in *CronJobSpec) DeepCopy() *CronJobSpec { + if in == nil { + return nil + } + out := new(CronJobSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CronJobStatus) DeepCopyInto(out *CronJobStatus) { + *out = *in + if in.Active != nil { + in, out := &in.Active, &out.Active + *out = make([]corev1.ObjectReference, len(*in)) + copy(*out, *in) + } + if in.LastScheduleTime != nil { + in, out := &in.LastScheduleTime, &out.LastScheduleTime + *out = (*in).DeepCopy() + } + if in.LastSuccessfulTime != nil { + in, out := &in.LastSuccessfulTime, &out.LastSuccessfulTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJobStatus. +func (in *CronJobStatus) DeepCopy() *CronJobStatus { + if in == nil { + return nil + } + out := new(CronJobStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Job) DeepCopyInto(out *Job) { *out = *in @@ -143,6 +271,16 @@ func (in *JobSpec) DeepCopyInto(out *JobSpec) { *out = new(int32) **out = **in } + if in.CompletionMode != nil { + in, out := &in.CompletionMode, &out.CompletionMode + *out = new(CompletionMode) + **out = **in + } + if in.Suspend != nil { + in, out := &in.Suspend, &out.Suspend + *out = new(bool) + **out = **in + } return } @@ -186,3 +324,21 @@ func (in *JobStatus) DeepCopy() *JobStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *JobTemplateSpec) DeepCopyInto(out *JobTemplateSpec) { + *out = *in + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JobTemplateSpec. +func (in *JobTemplateSpec) DeepCopy() *JobTemplateSpec { + if in == nil { + return nil + } + out := new(JobTemplateSpec) + in.DeepCopyInto(out) + return out +} diff --git a/constraint/vendor/k8s.io/api/batch/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/batch/v1beta1/generated.pb.go index 69c4054bf..93794f057 100644 --- a/constraint/vendor/k8s.io/api/batch/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/batch/v1beta1/generated.pb.go @@ -227,56 +227,57 @@ func init() { } var fileDescriptor_e57b277b05179ae7 = []byte{ - // 771 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0xc7, 0xe3, 0x34, 0xbf, 0x76, 0xc2, 0x42, 0xd7, 0xa0, 0x5d, 0x2b, 0x20, 0x27, 0x64, 0xb5, - 0x22, 0x20, 0x76, 0x4c, 0x2b, 0x84, 0x38, 0x21, 0xad, 0x17, 0x2d, 0x50, 0x8a, 0x16, 0x39, 0x45, - 0x48, 0xa8, 0x42, 0x1d, 0x8f, 0x5f, 0x92, 0x69, 0x6c, 0x8f, 0xe5, 0x19, 0x47, 0xca, 0x8d, 0x0b, - 0x77, 0xfe, 0x11, 0x4e, 0xfc, 0x13, 0x11, 0xa7, 0x1e, 0x7b, 0x8a, 0xa8, 0xf9, 0x2f, 0x38, 0x21, - 0x4f, 0x9c, 0x1f, 0xcd, 0x8f, 0xb6, 0x7b, 0xe9, 0xcd, 0xf3, 0xe6, 0xfb, 0xfd, 0xcc, 0xf3, 0x7b, - 0x6f, 0x06, 0xbd, 0x18, 0x7e, 0x29, 0x30, 0xe3, 0xd6, 0x30, 0x71, 0x21, 0x0e, 0x41, 0x82, 0xb0, - 0x46, 0x10, 0x7a, 0x3c, 0xb6, 0xf2, 0x0d, 0x12, 0x31, 0xcb, 0x25, 0x92, 0x0e, 0xac, 0xd1, 0x81, - 0x0b, 0x92, 0x1c, 0x58, 0x7d, 0x08, 0x21, 0x26, 0x12, 0x3c, 0x1c, 0xc5, 0x5c, 0x72, 0xdd, 0x98, - 0x29, 0x31, 0x89, 0x18, 0x56, 0x4a, 0x9c, 0x2b, 0x1b, 0xcf, 0xfb, 0x4c, 0x0e, 0x12, 0x17, 0x53, - 0x1e, 0x58, 0x7d, 0xde, 0xe7, 0x96, 0x32, 0xb8, 0x49, 0x4f, 0xad, 0xd4, 0x42, 0x7d, 0xcd, 0x40, - 0x8d, 0xa7, 0x5b, 0x8e, 0x5c, 0x3f, 0xad, 0xd1, 0x5e, 0x11, 0x51, 0x1e, 0xc3, 0x36, 0xcd, 0xe7, - 0x4b, 0x4d, 0x40, 0xe8, 0x80, 0x85, 0x10, 0x8f, 0xad, 0x68, 0xd8, 0xcf, 0x02, 0xc2, 0x0a, 0x40, - 0x92, 0x6d, 0x2e, 0x6b, 0x97, 0x2b, 0x4e, 0x42, 0xc9, 0x02, 0xd8, 0x30, 0x7c, 0x71, 0x9b, 0x41, - 0xd0, 0x01, 0x04, 0x64, 0xdd, 0xd7, 0xfe, 0xbd, 0x88, 0xaa, 0x2f, 0x63, 0x1e, 0x1e, 0x71, 0x57, - 0x3f, 0x43, 0xb5, 0x2c, 0x1f, 0x8f, 0x48, 0x62, 0x68, 0x2d, 0xad, 0x53, 0x3f, 0xfc, 0x0c, 0x2f, - 0xeb, 0xb9, 0xc0, 0xe2, 0x68, 0xd8, 0xcf, 0x02, 0x02, 0x67, 0x6a, 0x3c, 0x3a, 0xc0, 0xaf, 0xdd, - 0x73, 0xa0, 0xf2, 0x07, 0x90, 0xc4, 0xd6, 0x27, 0xd3, 0x66, 0x21, 0x9d, 0x36, 0xd1, 0x32, 0xe6, - 0x2c, 0xa8, 0xfa, 0x37, 0xa8, 0x24, 0x22, 0xa0, 0x46, 0x51, 0xd1, 0x9f, 0xe1, 0x5d, 0xdd, 0xc2, - 0x79, 0x4a, 0xdd, 0x08, 0xa8, 0xfd, 0x56, 0x8e, 0x2c, 0x65, 0x2b, 0x47, 0x01, 0xf4, 0xd7, 0xa8, - 0x22, 0x24, 0x91, 0x89, 0x30, 0xf6, 0x14, 0xea, 0xa3, 0xdb, 0x51, 0x4a, 0x6e, 0xbf, 0x9d, 0xc3, - 0x2a, 0xb3, 0xb5, 0x93, 0x63, 0xda, 0x7f, 0x69, 0xa8, 0x9e, 0x2b, 0x8f, 0x99, 0x90, 0xfa, 0xe9, - 0x46, 0x2d, 0xf0, 0xdd, 0x6a, 0x91, 0xb9, 0x55, 0x25, 0xf6, 0xf3, 0x93, 0x6a, 0xf3, 0xc8, 0x4a, - 0x1d, 0x5e, 0xa1, 0x32, 0x93, 0x10, 0x08, 0xa3, 0xd8, 0xda, 0xeb, 0xd4, 0x0f, 0x3f, 0xbc, 0x35, - 0x7b, 0xfb, 0x61, 0x4e, 0x2b, 0x7f, 0x97, 0xf9, 0x9c, 0x99, 0xbd, 0xfd, 0x67, 0x69, 0x91, 0x75, - 0x56, 0x1c, 0xfd, 0x53, 0x54, 0xcb, 0xfa, 0xec, 0x25, 0x3e, 0xa8, 0xac, 0x1f, 0x2c, 0xb3, 0xe8, - 0xe6, 0x71, 0x67, 0xa1, 0xd0, 0x7f, 0x42, 0x4f, 0x84, 0x24, 0xb1, 0x64, 0x61, 0xff, 0x6b, 0x20, - 0x9e, 0xcf, 0x42, 0xe8, 0x02, 0xe5, 0xa1, 0x27, 0x54, 0x83, 0xf6, 0xec, 0xf7, 0xd3, 0x69, 0xf3, - 0x49, 0x77, 0xbb, 0xc4, 0xd9, 0xe5, 0xd5, 0x4f, 0xd1, 0x23, 0xca, 0x43, 0x9a, 0xc4, 0x31, 0x84, - 0x74, 0xfc, 0x23, 0xf7, 0x19, 0x1d, 0xab, 0x36, 0x3d, 0xb0, 0x71, 0x9e, 0xcd, 0xa3, 0x97, 0xeb, - 0x82, 0xff, 0xb6, 0x05, 0x9d, 0x4d, 0x90, 0xfe, 0x0c, 0x55, 0x45, 0x22, 0x22, 0x08, 0x3d, 0xa3, - 0xd4, 0xd2, 0x3a, 0x35, 0xbb, 0x9e, 0x4e, 0x9b, 0xd5, 0xee, 0x2c, 0xe4, 0xcc, 0xf7, 0xf4, 0x33, - 0x54, 0x3f, 0xe7, 0xee, 0x09, 0x04, 0x91, 0x4f, 0x24, 0x18, 0x65, 0xd5, 0xc2, 0x8f, 0x77, 0xd7, - 0xf9, 0x68, 0x29, 0x56, 0x43, 0xf7, 0x6e, 0x9e, 0x69, 0x7d, 0x65, 0xc3, 0x59, 0x45, 0xea, 0xbf, - 0xa2, 0x86, 0x48, 0x28, 0x05, 0x21, 0x7a, 0x89, 0x7f, 0xc4, 0x5d, 0xf1, 0x2d, 0x13, 0x92, 0xc7, - 0xe3, 0x63, 0x16, 0x30, 0x69, 0x54, 0x5a, 0x5a, 0xa7, 0x6c, 0x9b, 0xe9, 0xb4, 0xd9, 0xe8, 0xee, - 0x54, 0x39, 0x37, 0x10, 0x74, 0x07, 0x3d, 0xee, 0x11, 0xe6, 0x83, 0xb7, 0xc1, 0xae, 0x2a, 0x76, - 0x23, 0x9d, 0x36, 0x1f, 0xbf, 0xda, 0xaa, 0x70, 0x76, 0x38, 0xdb, 0x7f, 0x6b, 0xe8, 0xe1, 0xb5, - 0xfb, 0xa0, 0x7f, 0x8f, 0x2a, 0x84, 0x4a, 0x36, 0xca, 0xe6, 0x25, 0x1b, 0xc5, 0xa7, 0xab, 0x25, - 0xca, 0xde, 0xb4, 0xe5, 0xfd, 0x76, 0xa0, 0x07, 0x59, 0x27, 0x60, 0x79, 0x89, 0x5e, 0x28, 0xab, - 0x93, 0x23, 0x74, 0x1f, 0xed, 0xfb, 0x44, 0xc8, 0xf9, 0xa8, 0x9d, 0xb0, 0x00, 0x54, 0x93, 0xea, - 0x87, 0x9f, 0xdc, 0xed, 0xf2, 0x64, 0x0e, 0xfb, 0xbd, 0x74, 0xda, 0xdc, 0x3f, 0x5e, 0xe3, 0x38, - 0x1b, 0xe4, 0xf6, 0x44, 0x43, 0xab, 0xdd, 0xb9, 0x87, 0xe7, 0xeb, 0x67, 0x54, 0x93, 0xf3, 0x89, - 0x2a, 0xbe, 0xe9, 0x44, 0x2d, 0x6e, 0xe2, 0x62, 0x9c, 0x16, 0xb0, 0xec, 0xf5, 0x79, 0x67, 0x4d, - 0x7f, 0x0f, 0xbf, 0xf3, 0xd5, 0xb5, 0xd7, 0xf8, 0x83, 0x6d, 0xbf, 0x82, 0x6f, 0x78, 0x84, 0xed, - 0xe7, 0x93, 0x2b, 0xb3, 0x70, 0x71, 0x65, 0x16, 0x2e, 0xaf, 0xcc, 0xc2, 0x6f, 0xa9, 0xa9, 0x4d, - 0x52, 0x53, 0xbb, 0x48, 0x4d, 0xed, 0x32, 0x35, 0xb5, 0x7f, 0x52, 0x53, 0xfb, 0xe3, 0x5f, 0xb3, - 0xf0, 0x4b, 0x35, 0x2f, 0xc8, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x9f, 0xb3, 0xdd, 0xdf, - 0x07, 0x00, 0x00, + // 794 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xc7, 0xbd, 0x4e, 0x1c, 0xbb, 0x63, 0x0a, 0xe9, 0x80, 0x52, 0xcb, 0xa0, 0xdd, 0xe0, 0xaa, + 0x22, 0x20, 0x3a, 0x4b, 0x22, 0x84, 0x38, 0x21, 0x75, 0x8b, 0x0a, 0x84, 0xa0, 0xa2, 0x71, 0x11, + 0x12, 0xaa, 0x50, 0x67, 0x67, 0x5f, 0x9c, 0x69, 0x76, 0x77, 0x56, 0x3b, 0xb3, 0x91, 0x72, 0xe3, + 0xc2, 0x9d, 0x2f, 0xc2, 0x89, 0x3b, 0xe7, 0x1c, 0x7b, 0xec, 0x69, 0x45, 0x96, 0x6f, 0xc1, 0x09, + 0xed, 0x78, 0xbd, 0x76, 0xed, 0x75, 0xd3, 0x5e, 0x72, 0xf3, 0xbc, 0xf9, 0xff, 0x7f, 0xf3, 0xf6, + 0xbd, 0x37, 0x63, 0x74, 0xff, 0xf4, 0x4b, 0x45, 0x84, 0x74, 0x4f, 0x33, 0x1f, 0xd2, 0x18, 0x34, + 0x28, 0xf7, 0x0c, 0xe2, 0x40, 0xa6, 0x6e, 0xb5, 0xc1, 0x12, 0xe1, 0xfa, 0x4c, 0xf3, 0x13, 0xf7, + 0x6c, 0xdf, 0x07, 0xcd, 0xf6, 0xdd, 0x09, 0xc4, 0x90, 0x32, 0x0d, 0x01, 0x49, 0x52, 0xa9, 0x25, + 0x1e, 0x4c, 0x95, 0x84, 0x25, 0x82, 0x18, 0x25, 0xa9, 0x94, 0xc3, 0x7b, 0x13, 0xa1, 0x4f, 0x32, + 0x9f, 0x70, 0x19, 0xb9, 0x13, 0x39, 0x91, 0xae, 0x31, 0xf8, 0xd9, 0xb1, 0x59, 0x99, 0x85, 0xf9, + 0x35, 0x05, 0x0d, 0xef, 0x34, 0x1c, 0xb9, 0x7c, 0xda, 0x70, 0xb4, 0x20, 0xe2, 0x32, 0x85, 0x26, + 0xcd, 0xe7, 0x73, 0x4d, 0xc4, 0xf8, 0x89, 0x88, 0x21, 0x3d, 0x77, 0x93, 0xd3, 0x49, 0x19, 0x50, + 0x6e, 0x04, 0x9a, 0x35, 0xb9, 0xdc, 0x75, 0xae, 0x34, 0x8b, 0xb5, 0x88, 0x60, 0xc5, 0xf0, 0xc5, + 0x55, 0x06, 0xc5, 0x4f, 0x20, 0x62, 0xcb, 0xbe, 0xd1, 0xef, 0x6d, 0xd4, 0x7d, 0x90, 0xca, 0xf8, + 0x50, 0xfa, 0xf8, 0x29, 0xea, 0x95, 0xf9, 0x04, 0x4c, 0xb3, 0x81, 0xb5, 0x6b, 0xed, 0xf5, 0x0f, + 0x3e, 0x23, 0xf3, 0x7a, 0xd6, 0x58, 0x92, 0x9c, 0x4e, 0xca, 0x80, 0x22, 0xa5, 0x9a, 0x9c, 0xed, + 0x93, 0x47, 0xfe, 0x33, 0xe0, 0xfa, 0x07, 0xd0, 0xcc, 0xc3, 0x17, 0xb9, 0xd3, 0x2a, 0x72, 0x07, + 0xcd, 0x63, 0xb4, 0xa6, 0xe2, 0x6f, 0xd0, 0xa6, 0x4a, 0x80, 0x0f, 0xda, 0x86, 0x7e, 0x97, 0xac, + 0xeb, 0x16, 0xa9, 0x52, 0x1a, 0x27, 0xc0, 0xbd, 0xb7, 0x2a, 0xe4, 0x66, 0xb9, 0xa2, 0x06, 0x80, + 0x1f, 0xa1, 0x2d, 0xa5, 0x99, 0xce, 0xd4, 0x60, 0xc3, 0xa0, 0x3e, 0xba, 0x1a, 0x65, 0xe4, 0xde, + 0xdb, 0x15, 0x6c, 0x6b, 0xba, 0xa6, 0x15, 0x66, 0xf4, 0x97, 0x85, 0xfa, 0x95, 0xf2, 0x48, 0x28, + 0x8d, 0x9f, 0xac, 0xd4, 0x82, 0xbc, 0x5e, 0x2d, 0x4a, 0xb7, 0xa9, 0xc4, 0x76, 0x75, 0x52, 0x6f, + 0x16, 0x59, 0xa8, 0xc3, 0x43, 0xd4, 0x11, 0x1a, 0x22, 0x35, 0x68, 0xef, 0x6e, 0xec, 0xf5, 0x0f, + 0x3e, 0xbc, 0x32, 0x7b, 0xef, 0x66, 0x45, 0xeb, 0x7c, 0x57, 0xfa, 0xe8, 0xd4, 0x3e, 0xfa, 0x73, + 0xb3, 0xce, 0xba, 0x2c, 0x0e, 0xfe, 0x14, 0xf5, 0xca, 0x3e, 0x07, 0x59, 0x08, 0x26, 0xeb, 0x1b, + 0xf3, 0x2c, 0xc6, 0x55, 0x9c, 0xd6, 0x0a, 0xfc, 0x13, 0xba, 0xad, 0x34, 0x4b, 0xb5, 0x88, 0x27, + 0x5f, 0x03, 0x0b, 0x42, 0x11, 0xc3, 0x18, 0xb8, 0x8c, 0x03, 0x65, 0x1a, 0xb4, 0xe1, 0xbd, 0x5f, + 0xe4, 0xce, 0xed, 0x71, 0xb3, 0x84, 0xae, 0xf3, 0xe2, 0x27, 0xe8, 0x16, 0x97, 0x31, 0xcf, 0xd2, + 0x14, 0x62, 0x7e, 0xfe, 0xa3, 0x0c, 0x05, 0x3f, 0x37, 0x6d, 0xba, 0xe1, 0x91, 0x2a, 0x9b, 0x5b, + 0x0f, 0x96, 0x05, 0xff, 0x35, 0x05, 0xe9, 0x2a, 0x08, 0xdf, 0x45, 0x5d, 0x95, 0xa9, 0x04, 0xe2, + 0x60, 0xb0, 0xb9, 0x6b, 0xed, 0xf5, 0xbc, 0x7e, 0x91, 0x3b, 0xdd, 0xf1, 0x34, 0x44, 0x67, 0x7b, + 0xf8, 0x29, 0xea, 0x3f, 0x93, 0xfe, 0x63, 0x88, 0x92, 0x90, 0x69, 0x18, 0x74, 0x4c, 0x0b, 0x3f, + 0x5e, 0x5f, 0xe7, 0xc3, 0xb9, 0xd8, 0x0c, 0xdd, 0xbb, 0x55, 0xa6, 0xfd, 0x85, 0x0d, 0xba, 0x88, + 0xc4, 0xbf, 0xa2, 0xa1, 0xca, 0x38, 0x07, 0xa5, 0x8e, 0xb3, 0xf0, 0x50, 0xfa, 0xea, 0x5b, 0xa1, + 0xb4, 0x4c, 0xcf, 0x8f, 0x44, 0x24, 0xf4, 0x60, 0x6b, 0xd7, 0xda, 0xeb, 0x78, 0x76, 0x91, 0x3b, + 0xc3, 0xf1, 0x5a, 0x15, 0x7d, 0x05, 0x01, 0x53, 0xb4, 0x73, 0xcc, 0x44, 0x08, 0xc1, 0x0a, 0xbb, + 0x6b, 0xd8, 0xc3, 0x22, 0x77, 0x76, 0x1e, 0x36, 0x2a, 0xe8, 0x1a, 0xe7, 0xe8, 0xef, 0x36, 0xba, + 0xf9, 0xd2, 0x7d, 0xc0, 0xdf, 0xa3, 0x2d, 0xc6, 0xb5, 0x38, 0x2b, 0xe7, 0xa5, 0x1c, 0xc5, 0x3b, + 0x8b, 0x25, 0x2a, 0xdf, 0xb4, 0xf9, 0xfd, 0xa6, 0x70, 0x0c, 0x65, 0x27, 0x60, 0x7e, 0x89, 0xee, + 0x1b, 0x2b, 0xad, 0x10, 0x38, 0x44, 0xdb, 0x21, 0x53, 0x7a, 0x36, 0x6a, 0x8f, 0x45, 0x04, 0xa6, + 0x49, 0xfd, 0x83, 0x4f, 0x5e, 0xef, 0xf2, 0x94, 0x0e, 0xef, 0xbd, 0x22, 0x77, 0xb6, 0x8f, 0x96, + 0x38, 0x74, 0x85, 0x8c, 0x53, 0x84, 0x4d, 0xac, 0x2e, 0xa1, 0x39, 0xaf, 0xf3, 0xc6, 0xe7, 0xed, + 0x14, 0xb9, 0x83, 0x8f, 0x56, 0x48, 0xb4, 0x81, 0x3e, 0xba, 0xb0, 0xd0, 0xe2, 0x44, 0x5c, 0xc3, + 0x93, 0xf9, 0x33, 0xea, 0xe9, 0xd9, 0x14, 0xb7, 0xdf, 0x74, 0x8a, 0xeb, 0xdb, 0x5f, 0x8f, 0x70, + 0x0d, 0x2b, 0x5f, 0xbc, 0x77, 0x96, 0xf4, 0xd7, 0xf0, 0x39, 0x5f, 0xbd, 0xf4, 0x0f, 0xf0, 0x41, + 0xd3, 0xa7, 0x90, 0x57, 0x3c, 0xfc, 0xde, 0xbd, 0x8b, 0x4b, 0xbb, 0xf5, 0xfc, 0xd2, 0x6e, 0xbd, + 0xb8, 0xb4, 0x5b, 0xbf, 0x15, 0xb6, 0x75, 0x51, 0xd8, 0xd6, 0xf3, 0xc2, 0xb6, 0x5e, 0x14, 0xb6, + 0xf5, 0x4f, 0x61, 0x5b, 0x7f, 0xfc, 0x6b, 0xb7, 0x7e, 0xe9, 0x56, 0x05, 0xf9, 0x3f, 0x00, 0x00, + 0xff, 0xff, 0xe9, 0xe0, 0x40, 0x92, 0x53, 0x08, 0x00, 0x00, } func (m *CronJob) Marshal() (dAtA []byte, err error) { @@ -467,6 +468,18 @@ func (m *CronJobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LastSuccessfulTime != nil { + { + size, err := m.LastSuccessfulTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if m.LastScheduleTime != nil { { size, err := m.LastScheduleTime.MarshalToSizedBuffer(dAtA[:i]) @@ -668,6 +681,10 @@ func (m *CronJobStatus) Size() (n int) { l = m.LastScheduleTime.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.LastSuccessfulTime != nil { + l = m.LastSuccessfulTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -759,6 +776,7 @@ func (this *CronJobStatus) String() string { s := strings.Join([]string{`&CronJobStatus{`, `Active:` + repeatedStringForActive + `,`, `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "v1.Time", 1) + `,`, + `LastSuccessfulTime:` + strings.Replace(fmt.Sprintf("%v", this.LastSuccessfulTime), "Time", "v1.Time", 1) + `,`, `}`, }, "") return s @@ -927,10 +945,7 @@ func (m *CronJob) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1047,10 +1062,7 @@ func (m *CronJobList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1278,10 +1290,7 @@ func (m *CronJobSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1395,16 +1404,49 @@ func (m *CronJobStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastSuccessfulTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastSuccessfulTime == nil { + m.LastSuccessfulTime = &v1.Time{} + } + if err := m.LastSuccessfulTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1520,10 +1562,7 @@ func (m *JobTemplate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1639,10 +1678,7 @@ func (m *JobTemplateSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/batch/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/batch/v1beta1/generated.proto index 4dab09a52..b4f998c1a 100644 --- a/constraint/vendor/k8s.io/api/batch/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/batch/v1beta1/generated.proto @@ -102,11 +102,16 @@ message CronJobSpec { message CronJobStatus { // A list of pointers to currently running jobs. // +optional + // +listType=atomic repeated k8s.io.api.core.v1.ObjectReference active = 1; // Information when was the last time the job was successfully scheduled. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScheduleTime = 4; + + // Information when was the last time the job successfully completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastSuccessfulTime = 5; } // JobTemplate describes a template for creating copies of a predefined pod. diff --git a/constraint/vendor/k8s.io/api/batch/v1beta1/types.go b/constraint/vendor/k8s.io/api/batch/v1beta1/types.go index 6f49cc2a3..cd9af7a9e 100644 --- a/constraint/vendor/k8s.io/api/batch/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/batch/v1beta1/types.go @@ -56,7 +56,9 @@ type JobTemplateSpec struct { // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.8 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 +// +k8s:prerelease-lifecycle-gen:replacement=batch,v1,CronJob // CronJob represents the configuration of a single cron job. type CronJob struct { @@ -79,7 +81,9 @@ type CronJob struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.8 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 +// +k8s:prerelease-lifecycle-gen:replacement=batch,v1,CronJobList // CronJobList is a collection of cron jobs. type CronJobList struct { @@ -156,9 +160,14 @@ const ( type CronJobStatus struct { // A list of pointers to currently running jobs. // +optional + // +listType=atomic Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"` // Information when was the last time the job was successfully scheduled. // +optional LastScheduleTime *metav1.Time `json:"lastScheduleTime,omitempty" protobuf:"bytes,4,opt,name=lastScheduleTime"` + + // Information when was the last time the job successfully completed. + // +optional + LastSuccessfulTime *metav1.Time `json:"lastSuccessfulTime,omitempty" protobuf:"bytes,5,opt,name=lastSuccessfulTime"` } diff --git a/constraint/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go index ecc914446..997389812 100644 --- a/constraint/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go @@ -64,9 +64,10 @@ func (CronJobSpec) SwaggerDoc() map[string]string { } var map_CronJobStatus = map[string]string{ - "": "CronJobStatus represents the current state of a cron job.", - "active": "A list of pointers to currently running jobs.", - "lastScheduleTime": "Information when was the last time the job was successfully scheduled.", + "": "CronJobStatus represents the current state of a cron job.", + "active": "A list of pointers to currently running jobs.", + "lastScheduleTime": "Information when was the last time the job was successfully scheduled.", + "lastSuccessfulTime": "Information when was the last time the job successfully completed.", } func (CronJobStatus) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go index 7c9dcb742..77244485b 100644 --- a/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go @@ -135,6 +135,10 @@ func (in *CronJobStatus) DeepCopyInto(out *CronJobStatus) { in, out := &in.LastScheduleTime, &out.LastScheduleTime *out = (*in).DeepCopy() } + if in.LastSuccessfulTime != nil { + in, out := &in.LastSuccessfulTime, &out.LastSuccessfulTime + *out = (*in).DeepCopy() + } return } diff --git a/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go b/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go index 63bae5f1e..5379f896c 100644 --- a/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go +++ b/constraint/vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go @@ -20,6 +20,10 @@ limitations under the License. package v1beta1 +import ( + schema "k8s.io/apimachinery/pkg/runtime/schema" +) + // APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. func (in *CronJob) APILifecycleIntroduced() (major, minor int) { @@ -29,7 +33,13 @@ func (in *CronJob) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *CronJob) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *CronJob) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "CronJob"} } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. @@ -47,7 +57,13 @@ func (in *CronJobList) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *CronJobList) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *CronJobList) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "CronJobList"} } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go deleted file mode 100644 index 3e58dbb92..000000000 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go +++ /dev/null @@ -1,1743 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: k8s.io/kubernetes/vendor/k8s.io/api/batch/v2alpha1/generated.proto - -package v2alpha1 - -import ( - fmt "fmt" - - io "io" - - proto "github.com/gogo/protobuf/proto" - v11 "k8s.io/api/core/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - math "math" - math_bits "math/bits" - reflect "reflect" - strings "strings" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -func (m *CronJob) Reset() { *m = CronJob{} } -func (*CronJob) ProtoMessage() {} -func (*CronJob) Descriptor() ([]byte, []int) { - return fileDescriptor_5495a0550fe29c46, []int{0} -} -func (m *CronJob) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CronJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *CronJob) XXX_Merge(src proto.Message) { - xxx_messageInfo_CronJob.Merge(m, src) -} -func (m *CronJob) XXX_Size() int { - return m.Size() -} -func (m *CronJob) XXX_DiscardUnknown() { - xxx_messageInfo_CronJob.DiscardUnknown(m) -} - -var xxx_messageInfo_CronJob proto.InternalMessageInfo - -func (m *CronJobList) Reset() { *m = CronJobList{} } -func (*CronJobList) ProtoMessage() {} -func (*CronJobList) Descriptor() ([]byte, []int) { - return fileDescriptor_5495a0550fe29c46, []int{1} -} -func (m *CronJobList) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CronJobList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *CronJobList) XXX_Merge(src proto.Message) { - xxx_messageInfo_CronJobList.Merge(m, src) -} -func (m *CronJobList) XXX_Size() int { - return m.Size() -} -func (m *CronJobList) XXX_DiscardUnknown() { - xxx_messageInfo_CronJobList.DiscardUnknown(m) -} - -var xxx_messageInfo_CronJobList proto.InternalMessageInfo - -func (m *CronJobSpec) Reset() { *m = CronJobSpec{} } -func (*CronJobSpec) ProtoMessage() {} -func (*CronJobSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_5495a0550fe29c46, []int{2} -} -func (m *CronJobSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CronJobSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *CronJobSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_CronJobSpec.Merge(m, src) -} -func (m *CronJobSpec) XXX_Size() int { - return m.Size() -} -func (m *CronJobSpec) XXX_DiscardUnknown() { - xxx_messageInfo_CronJobSpec.DiscardUnknown(m) -} - -var xxx_messageInfo_CronJobSpec proto.InternalMessageInfo - -func (m *CronJobStatus) Reset() { *m = CronJobStatus{} } -func (*CronJobStatus) ProtoMessage() {} -func (*CronJobStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_5495a0550fe29c46, []int{3} -} -func (m *CronJobStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CronJobStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *CronJobStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_CronJobStatus.Merge(m, src) -} -func (m *CronJobStatus) XXX_Size() int { - return m.Size() -} -func (m *CronJobStatus) XXX_DiscardUnknown() { - xxx_messageInfo_CronJobStatus.DiscardUnknown(m) -} - -var xxx_messageInfo_CronJobStatus proto.InternalMessageInfo - -func (m *JobTemplate) Reset() { *m = JobTemplate{} } -func (*JobTemplate) ProtoMessage() {} -func (*JobTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_5495a0550fe29c46, []int{4} -} -func (m *JobTemplate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *JobTemplate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *JobTemplate) XXX_Merge(src proto.Message) { - xxx_messageInfo_JobTemplate.Merge(m, src) -} -func (m *JobTemplate) XXX_Size() int { - return m.Size() -} -func (m *JobTemplate) XXX_DiscardUnknown() { - xxx_messageInfo_JobTemplate.DiscardUnknown(m) -} - -var xxx_messageInfo_JobTemplate proto.InternalMessageInfo - -func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } -func (*JobTemplateSpec) ProtoMessage() {} -func (*JobTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_5495a0550fe29c46, []int{5} -} -func (m *JobTemplateSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *JobTemplateSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *JobTemplateSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_JobTemplateSpec.Merge(m, src) -} -func (m *JobTemplateSpec) XXX_Size() int { - return m.Size() -} -func (m *JobTemplateSpec) XXX_DiscardUnknown() { - xxx_messageInfo_JobTemplateSpec.DiscardUnknown(m) -} - -var xxx_messageInfo_JobTemplateSpec proto.InternalMessageInfo - -func init() { - proto.RegisterType((*CronJob)(nil), "k8s.io.api.batch.v2alpha1.CronJob") - proto.RegisterType((*CronJobList)(nil), "k8s.io.api.batch.v2alpha1.CronJobList") - proto.RegisterType((*CronJobSpec)(nil), "k8s.io.api.batch.v2alpha1.CronJobSpec") - proto.RegisterType((*CronJobStatus)(nil), "k8s.io.api.batch.v2alpha1.CronJobStatus") - proto.RegisterType((*JobTemplate)(nil), "k8s.io.api.batch.v2alpha1.JobTemplate") - proto.RegisterType((*JobTemplateSpec)(nil), "k8s.io.api.batch.v2alpha1.JobTemplateSpec") -} - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v2alpha1/generated.proto", fileDescriptor_5495a0550fe29c46) -} - -var fileDescriptor_5495a0550fe29c46 = []byte{ - // 774 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x4d, 0x6f, 0xdb, 0x36, - 0x18, 0xc7, 0x2d, 0xc7, 0x6f, 0xa1, 0x97, 0x2d, 0xd1, 0x86, 0xc4, 0xf3, 0x06, 0xd9, 0x50, 0xb0, - 0xc1, 0x18, 0x36, 0x6a, 0x09, 0x86, 0x61, 0xa7, 0x01, 0x53, 0x86, 0x36, 0x4d, 0x53, 0x34, 0x90, - 0x53, 0xa0, 0x28, 0x82, 0xa2, 0x14, 0x45, 0xdb, 0x8c, 0x25, 0x51, 0x10, 0x29, 0x03, 0xbe, 0xf5, - 0xd6, 0x6b, 0x3f, 0x49, 0x2f, 0xed, 0x87, 0x48, 0x7b, 0xca, 0x31, 0x27, 0xa3, 0x51, 0xbf, 0x45, - 0x4f, 0x85, 0x68, 0xf9, 0x25, 0x7e, 0x49, 0xd2, 0x4b, 0x6e, 0xe2, 0xa3, 0xff, 0xff, 0xc7, 0x87, - 0xcf, 0xf3, 0x90, 0xc0, 0xec, 0xfe, 0xc3, 0x21, 0x65, 0x46, 0x37, 0xb2, 0x49, 0xe8, 0x13, 0x41, - 0xb8, 0xd1, 0x23, 0xbe, 0xc3, 0x42, 0x23, 0xfd, 0x81, 0x02, 0x6a, 0xd8, 0x48, 0xe0, 0x8e, 0xd1, - 0xdb, 0x45, 0x6e, 0xd0, 0x41, 0x3b, 0x46, 0x9b, 0xf8, 0x24, 0x44, 0x82, 0x38, 0x30, 0x08, 0x99, - 0x60, 0xea, 0x8f, 0x43, 0x29, 0x44, 0x01, 0x85, 0x52, 0x0a, 0x47, 0xd2, 0xea, 0x1f, 0x6d, 0x2a, - 0x3a, 0x91, 0x0d, 0x31, 0xf3, 0x8c, 0x36, 0x6b, 0x33, 0x43, 0x3a, 0xec, 0xa8, 0x25, 0x57, 0x72, - 0x21, 0xbf, 0x86, 0xa4, 0xea, 0xf6, 0xfc, 0xa6, 0x73, 0xdb, 0x55, 0xf5, 0x29, 0x11, 0x66, 0x21, - 0x59, 0xa4, 0xf9, 0x6b, 0xa2, 0xf1, 0x10, 0xee, 0x50, 0x9f, 0x84, 0x7d, 0x23, 0xe8, 0xb6, 0x93, - 0x00, 0x37, 0x3c, 0x22, 0xd0, 0x22, 0x97, 0xb1, 0xcc, 0x15, 0x46, 0xbe, 0xa0, 0x1e, 0x99, 0x33, - 0xfc, 0x7d, 0x93, 0x81, 0xe3, 0x0e, 0xf1, 0xd0, 0xac, 0x4f, 0x7f, 0x95, 0x05, 0xc5, 0xbd, 0x90, - 0xf9, 0x07, 0xcc, 0x56, 0x5f, 0x80, 0x52, 0x92, 0x8f, 0x83, 0x04, 0xaa, 0x28, 0x75, 0xa5, 0x51, - 0xde, 0xfd, 0x13, 0x4e, 0x0a, 0x3a, 0xc6, 0xc2, 0xa0, 0xdb, 0x4e, 0x02, 0x1c, 0x26, 0x6a, 0xd8, - 0xdb, 0x81, 0x8f, 0xed, 0x53, 0x82, 0xc5, 0x23, 0x22, 0x90, 0xa9, 0x9e, 0x0d, 0x6a, 0x99, 0x78, - 0x50, 0x03, 0x93, 0x98, 0x35, 0xa6, 0xaa, 0xfb, 0x20, 0xc7, 0x03, 0x82, 0x2b, 0x59, 0x49, 0xff, - 0x15, 0x2e, 0x6d, 0x17, 0x4c, 0x73, 0x6a, 0x06, 0x04, 0x9b, 0xdf, 0xa4, 0xcc, 0x5c, 0xb2, 0xb2, - 0x24, 0x41, 0x3d, 0x02, 0x05, 0x2e, 0x90, 0x88, 0x78, 0x65, 0x45, 0xb2, 0x1a, 0xb7, 0x60, 0x49, - 0xbd, 0xf9, 0x6d, 0x4a, 0x2b, 0x0c, 0xd7, 0x56, 0xca, 0xd1, 0xdf, 0x29, 0xa0, 0x9c, 0x2a, 0x0f, - 0x29, 0x17, 0xea, 0xc9, 0x5c, 0x35, 0xe0, 0xed, 0xaa, 0x91, 0xb8, 0x65, 0x2d, 0xd6, 0xd3, 0x9d, - 0x4a, 0xa3, 0xc8, 0x54, 0x25, 0xee, 0x83, 0x3c, 0x15, 0xc4, 0xe3, 0x95, 0x6c, 0x7d, 0xa5, 0x51, - 0xde, 0xd5, 0x6f, 0x4e, 0xdf, 0x5c, 0x4b, 0x71, 0xf9, 0x07, 0x89, 0xd1, 0x1a, 0xfa, 0xf5, 0x37, - 0xb9, 0x71, 0xda, 0x49, 0x79, 0xd4, 0xdf, 0x41, 0x29, 0x69, 0xb5, 0x13, 0xb9, 0x44, 0xa6, 0xbd, - 0x3a, 0x49, 0xa3, 0x99, 0xc6, 0xad, 0xb1, 0x42, 0x7d, 0x02, 0xb6, 0xb8, 0x40, 0xa1, 0xa0, 0x7e, - 0xfb, 0x7f, 0x82, 0x1c, 0x97, 0xfa, 0xa4, 0x49, 0x30, 0xf3, 0x1d, 0x2e, 0x7b, 0xb4, 0x62, 0xfe, - 0x14, 0x0f, 0x6a, 0x5b, 0xcd, 0xc5, 0x12, 0x6b, 0x99, 0x57, 0x3d, 0x01, 0x1b, 0x98, 0xf9, 0x38, - 0x0a, 0x43, 0xe2, 0xe3, 0xfe, 0x11, 0x73, 0x29, 0xee, 0xcb, 0x46, 0xad, 0x9a, 0x30, 0xcd, 0x66, - 0x63, 0x6f, 0x56, 0xf0, 0x79, 0x51, 0xd0, 0x9a, 0x07, 0xa9, 0xbf, 0x80, 0x22, 0x8f, 0x78, 0x40, - 0x7c, 0xa7, 0x92, 0xab, 0x2b, 0x8d, 0x92, 0x59, 0x8e, 0x07, 0xb5, 0x62, 0x73, 0x18, 0xb2, 0x46, - 0xff, 0x54, 0x04, 0xca, 0xa7, 0xcc, 0x3e, 0x26, 0x5e, 0xe0, 0x22, 0x41, 0x2a, 0x79, 0xd9, 0xc3, - 0xdf, 0xae, 0x29, 0xf4, 0xc1, 0x44, 0x2d, 0xe7, 0xee, 0xfb, 0x34, 0xd5, 0xf2, 0xd4, 0x0f, 0x6b, - 0x9a, 0xa9, 0x3e, 0x07, 0x55, 0x1e, 0x61, 0x4c, 0x38, 0x6f, 0x45, 0xee, 0x01, 0xb3, 0xf9, 0x3e, - 0xe5, 0x82, 0x85, 0xfd, 0x43, 0xea, 0x51, 0x51, 0x29, 0xd4, 0x95, 0x46, 0xde, 0xd4, 0xe2, 0x41, - 0xad, 0xda, 0x5c, 0xaa, 0xb2, 0xae, 0x21, 0xa8, 0x16, 0xd8, 0x6c, 0x21, 0xea, 0x12, 0x67, 0x8e, - 0x5d, 0x94, 0xec, 0x6a, 0x3c, 0xa8, 0x6d, 0xde, 0x5b, 0xa8, 0xb0, 0x96, 0x38, 0xf5, 0x0f, 0x0a, - 0x58, 0xbb, 0x72, 0x23, 0xd4, 0x87, 0xa0, 0x80, 0xb0, 0xa0, 0xbd, 0x64, 0x60, 0x92, 0x61, 0xdc, - 0x9e, 0xae, 0x51, 0xf2, 0xae, 0x4d, 0xee, 0xb8, 0x45, 0x5a, 0x24, 0x69, 0x05, 0x99, 0x5c, 0xa3, - 0xff, 0xa4, 0xd5, 0x4a, 0x11, 0xaa, 0x0b, 0xd6, 0x5d, 0xc4, 0xc5, 0x68, 0xd6, 0x8e, 0xa9, 0x47, - 0x64, 0x97, 0xae, 0x96, 0xfe, 0x9a, 0xeb, 0x93, 0x38, 0xcc, 0x1f, 0xe2, 0x41, 0x6d, 0xfd, 0x70, - 0x86, 0x63, 0xcd, 0x91, 0xf5, 0xf7, 0x0a, 0x98, 0xee, 0xce, 0x1d, 0x3c, 0x61, 0x4f, 0x41, 0x49, - 0x8c, 0x46, 0x2a, 0xfb, 0xd5, 0x23, 0x35, 0xbe, 0x8b, 0xe3, 0x79, 0x1a, 0xd3, 0xf4, 0xb7, 0x0a, - 0xf8, 0x6e, 0x46, 0x7f, 0x07, 0xe7, 0xf9, 0xf7, 0xca, 0x93, 0xfc, 0xf3, 0x82, 0xb3, 0xc8, 0x53, - 0x2c, 0x7b, 0x88, 0x4d, 0x78, 0x76, 0xa9, 0x65, 0xce, 0x2f, 0xb5, 0xcc, 0xc5, 0xa5, 0x96, 0x79, - 0x19, 0x6b, 0xca, 0x59, 0xac, 0x29, 0xe7, 0xb1, 0xa6, 0x5c, 0xc4, 0x9a, 0xf2, 0x31, 0xd6, 0x94, - 0xd7, 0x9f, 0xb4, 0xcc, 0xb3, 0xd2, 0xa8, 0x22, 0x5f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x20, 0x1c, - 0xcf, 0x94, 0xe7, 0x07, 0x00, 0x00, -} - -func (m *CronJob) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CronJob) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CronJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *CronJobList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CronJobList) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CronJobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Items) > 0 { - for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *CronJobSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CronJobSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CronJobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.FailedJobsHistoryLimit != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) - i-- - dAtA[i] = 0x38 - } - if m.SuccessfulJobsHistoryLimit != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) - i-- - dAtA[i] = 0x30 - } - { - size, err := m.JobTemplate.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if m.Suspend != nil { - i-- - if *m.Suspend { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - i -= len(m.ConcurrencyPolicy) - copy(dAtA[i:], m.ConcurrencyPolicy) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) - i-- - dAtA[i] = 0x1a - if m.StartingDeadlineSeconds != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) - i-- - dAtA[i] = 0x10 - } - i -= len(m.Schedule) - copy(dAtA[i:], m.Schedule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *CronJobStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CronJobStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CronJobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LastScheduleTime != nil { - { - size, err := m.LastScheduleTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if len(m.Active) > 0 { - for iNdEx := len(m.Active) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Active[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *JobTemplate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *JobTemplate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *JobTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *JobTemplateSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *JobTemplateSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *JobTemplateSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - offset -= sovGenerated(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *CronJob) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *CronJobList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *CronJobSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Schedule) - n += 1 + l + sovGenerated(uint64(l)) - if m.StartingDeadlineSeconds != nil { - n += 1 + sovGenerated(uint64(*m.StartingDeadlineSeconds)) - } - l = len(m.ConcurrencyPolicy) - n += 1 + l + sovGenerated(uint64(l)) - if m.Suspend != nil { - n += 2 - } - l = m.JobTemplate.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.SuccessfulJobsHistoryLimit != nil { - n += 1 + sovGenerated(uint64(*m.SuccessfulJobsHistoryLimit)) - } - if m.FailedJobsHistoryLimit != nil { - n += 1 + sovGenerated(uint64(*m.FailedJobsHistoryLimit)) - } - return n -} - -func (m *CronJobStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Active) > 0 { - for _, e := range m.Active { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.LastScheduleTime != nil { - l = m.LastScheduleTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *JobTemplate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Template.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *JobTemplateSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func sovGenerated(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *CronJob) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CronJob{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CronJobSpec", "CronJobSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronJobStatus", "CronJobStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *CronJobList) String() string { - if this == nil { - return "nil" - } - repeatedStringForItems := "[]CronJob{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CronJob", "CronJob", 1), `&`, ``, 1) + "," - } - repeatedStringForItems += "}" - s := strings.Join([]string{`&CronJobList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s -} -func (this *CronJobSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CronJobSpec{`, - `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, - `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, - `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, - `Suspend:` + valueToStringGenerated(this.Suspend) + `,`, - `JobTemplate:` + strings.Replace(strings.Replace(this.JobTemplate.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, - `SuccessfulJobsHistoryLimit:` + valueToStringGenerated(this.SuccessfulJobsHistoryLimit) + `,`, - `FailedJobsHistoryLimit:` + valueToStringGenerated(this.FailedJobsHistoryLimit) + `,`, - `}`, - }, "") - return s -} -func (this *CronJobStatus) String() string { - if this == nil { - return "nil" - } - repeatedStringForActive := "[]ObjectReference{" - for _, f := range this.Active { - repeatedStringForActive += fmt.Sprintf("%v", f) + "," - } - repeatedStringForActive += "}" - s := strings.Join([]string{`&CronJobStatus{`, - `Active:` + repeatedStringForActive + `,`, - `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "v1.Time", 1) + `,`, - `}`, - }, "") - return s -} -func (this *JobTemplate) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&JobTemplate{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *JobTemplateSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&JobTemplateSpec{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "JobSpec", "v12.JobSpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *CronJob) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CronJob: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CronJob: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CronJobList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CronJobList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CronJobList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, CronJob{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CronJobSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CronJobSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CronJobSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Schedule", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Schedule = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StartingDeadlineSeconds", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.StartingDeadlineSeconds = &v - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConcurrencyPolicy", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConcurrencyPolicy = ConcurrencyPolicy(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Suspend", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.Suspend = &b - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JobTemplate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.JobTemplate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulJobsHistoryLimit", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.SuccessfulJobsHistoryLimit = &v - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FailedJobsHistoryLimit", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.FailedJobsHistoryLimit = &v - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CronJobStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CronJobStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CronJobStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Active = append(m.Active, v11.ObjectReference{}) - if err := m.Active[len(m.Active)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastScheduleTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LastScheduleTime == nil { - m.LastScheduleTime = &v1.Time{} - } - if err := m.LastScheduleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JobTemplate) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: JobTemplate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JobTemplate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JobTemplateSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: JobTemplateSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JobTemplateSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenerated(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthGenerated - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenerated - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") -) diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/generated.proto b/constraint/vendor/k8s.io/api/batch/v2alpha1/generated.proto deleted file mode 100644 index f538d50cd..000000000 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/generated.proto +++ /dev/null @@ -1,135 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - -// This file was autogenerated by go-to-protobuf. Do not edit it manually! - -syntax = "proto2"; - -package k8s.io.api.batch.v2alpha1; - -import "k8s.io/api/batch/v1/generated.proto"; -import "k8s.io/api/core/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; - -// Package-wide variables from generator "generated". -option go_package = "v2alpha1"; - -// CronJob represents the configuration of a single cron job. -message CronJob { - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // Specification of the desired behavior of a cron job, including the schedule. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional CronJobSpec spec = 2; - - // Current status of a cron job. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional CronJobStatus status = 3; -} - -// CronJobList is a collection of cron jobs. -message CronJobList { - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; - - // items is the list of CronJobs. - repeated CronJob items = 2; -} - -// CronJobSpec describes how the job execution will look like and when it will actually run. -message CronJobSpec { - // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. - optional string schedule = 1; - - // Optional deadline in seconds for starting the job if it misses scheduled - // time for any reason. Missed jobs executions will be counted as failed ones. - // +optional - optional int64 startingDeadlineSeconds = 2; - - // Specifies how to treat concurrent executions of a Job. - // Valid values are: - // - "Allow" (default): allows CronJobs to run concurrently; - // - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - // - "Replace": cancels currently running job and replaces it with a new one - // +optional - optional string concurrencyPolicy = 3; - - // This flag tells the controller to suspend subsequent executions, it does - // not apply to already started executions. Defaults to false. - // +optional - optional bool suspend = 4; - - // Specifies the job that will be created when executing a CronJob. - optional JobTemplateSpec jobTemplate = 5; - - // The number of successful finished jobs to retain. - // This is a pointer to distinguish between explicit zero and not specified. - // +optional - optional int32 successfulJobsHistoryLimit = 6; - - // The number of failed finished jobs to retain. - // This is a pointer to distinguish between explicit zero and not specified. - // +optional - optional int32 failedJobsHistoryLimit = 7; -} - -// CronJobStatus represents the current state of a cron job. -message CronJobStatus { - // A list of pointers to currently running jobs. - // +optional - repeated k8s.io.api.core.v1.ObjectReference active = 1; - - // Information when was the last time the job was successfully scheduled. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScheduleTime = 4; -} - -// JobTemplate describes a template for creating copies of a predefined pod. -message JobTemplate { - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // Defines jobs that will be created from this template. - // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional JobTemplateSpec template = 2; -} - -// JobTemplateSpec describes the data a Job should have when created from a template -message JobTemplateSpec { - // Standard object's metadata of the jobs created from this template. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // Specification of the desired behavior of the job. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional k8s.io.api.batch.v1.JobSpec spec = 2; -} - diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/types.go b/constraint/vendor/k8s.io/api/batch/v2alpha1/types.go deleted file mode 100644 index 465e614ae..000000000 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/types.go +++ /dev/null @@ -1,156 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v2alpha1 - -import ( - batchv1 "k8s.io/api/batch/v1" - "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// JobTemplate describes a template for creating copies of a predefined pod. -type JobTemplate struct { - metav1.TypeMeta `json:",inline"` - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // Defines jobs that will be created from this template. - // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Template JobTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` -} - -// JobTemplateSpec describes the data a Job should have when created from a template -type JobTemplateSpec struct { - // Standard object's metadata of the jobs created from this template. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // Specification of the desired behavior of the job. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Spec batchv1.JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` -} - -// +genclient -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// CronJob represents the configuration of a single cron job. -type CronJob struct { - metav1.TypeMeta `json:",inline"` - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // Specification of the desired behavior of a cron job, including the schedule. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Spec CronJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - - // Current status of a cron job. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Status CronJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// CronJobList is a collection of cron jobs. -type CronJobList struct { - metav1.TypeMeta `json:",inline"` - - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // items is the list of CronJobs. - Items []CronJob `json:"items" protobuf:"bytes,2,rep,name=items"` -} - -// CronJobSpec describes how the job execution will look like and when it will actually run. -type CronJobSpec struct { - - // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. - Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"` - - // Optional deadline in seconds for starting the job if it misses scheduled - // time for any reason. Missed jobs executions will be counted as failed ones. - // +optional - StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,2,opt,name=startingDeadlineSeconds"` - - // Specifies how to treat concurrent executions of a Job. - // Valid values are: - // - "Allow" (default): allows CronJobs to run concurrently; - // - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - // - "Replace": cancels currently running job and replaces it with a new one - // +optional - ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"` - - // This flag tells the controller to suspend subsequent executions, it does - // not apply to already started executions. Defaults to false. - // +optional - Suspend *bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"` - - // Specifies the job that will be created when executing a CronJob. - JobTemplate JobTemplateSpec `json:"jobTemplate" protobuf:"bytes,5,opt,name=jobTemplate"` - - // The number of successful finished jobs to retain. - // This is a pointer to distinguish between explicit zero and not specified. - // +optional - SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,6,opt,name=successfulJobsHistoryLimit"` - - // The number of failed finished jobs to retain. - // This is a pointer to distinguish between explicit zero and not specified. - // +optional - FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=failedJobsHistoryLimit"` -} - -// ConcurrencyPolicy describes how the job will be handled. -// Only one of the following concurrent policies may be specified. -// If none of the following policies is specified, the default one -// is AllowConcurrent. -type ConcurrencyPolicy string - -const ( - // AllowConcurrent allows CronJobs to run concurrently. - AllowConcurrent ConcurrencyPolicy = "Allow" - - // ForbidConcurrent forbids concurrent runs, skipping next run if previous - // hasn't finished yet. - ForbidConcurrent ConcurrencyPolicy = "Forbid" - - // ReplaceConcurrent cancels currently running job and replaces it with a new one. - ReplaceConcurrent ConcurrencyPolicy = "Replace" -) - -// CronJobStatus represents the current state of a cron job. -type CronJobStatus struct { - // A list of pointers to currently running jobs. - // +optional - Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"` - - // Information when was the last time the job was successfully scheduled. - // +optional - LastScheduleTime *metav1.Time `json:"lastScheduleTime,omitempty" protobuf:"bytes,4,opt,name=lastScheduleTime"` -} diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go deleted file mode 100644 index bc80eca48..000000000 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go +++ /dev/null @@ -1,96 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v2alpha1 - -// This file contains a collection of methods that can be used from go-restful to -// generate Swagger API documentation for its models. Please read this PR for more -// information on the implementation: https://github.com/emicklei/go-restful/pull/215 -// -// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if -// they are on one line! For multiple line or blocks that you want to ignore use ---. -// Any context after a --- is ignored. -// -// Those methods can be generated by using hack/update-generated-swagger-docs.sh - -// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_CronJob = map[string]string{ - "": "CronJob represents the configuration of a single cron job.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - "status": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", -} - -func (CronJob) SwaggerDoc() map[string]string { - return map_CronJob -} - -var map_CronJobList = map[string]string{ - "": "CronJobList is a collection of cron jobs.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "items": "items is the list of CronJobs.", -} - -func (CronJobList) SwaggerDoc() map[string]string { - return map_CronJobList -} - -var map_CronJobSpec = map[string]string{ - "": "CronJobSpec describes how the job execution will look like and when it will actually run.", - "schedule": "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", - "startingDeadlineSeconds": "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", - "concurrencyPolicy": "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", - "suspend": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", - "jobTemplate": "Specifies the job that will be created when executing a CronJob.", - "successfulJobsHistoryLimit": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", - "failedJobsHistoryLimit": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", -} - -func (CronJobSpec) SwaggerDoc() map[string]string { - return map_CronJobSpec -} - -var map_CronJobStatus = map[string]string{ - "": "CronJobStatus represents the current state of a cron job.", - "active": "A list of pointers to currently running jobs.", - "lastScheduleTime": "Information when was the last time the job was successfully scheduled.", -} - -func (CronJobStatus) SwaggerDoc() map[string]string { - return map_CronJobStatus -} - -var map_JobTemplate = map[string]string{ - "": "JobTemplate describes a template for creating copies of a predefined pod.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "template": "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", -} - -func (JobTemplate) SwaggerDoc() map[string]string { - return map_JobTemplate -} - -var map_JobTemplateSpec = map[string]string{ - "": "JobTemplateSpec describes the data a Job should have when created from a template", - "metadata": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", -} - -func (JobTemplateSpec) SwaggerDoc() map[string]string { - return map_JobTemplateSpec -} - -// AUTO-GENERATED FUNCTIONS END HERE diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 1b03f6745..000000000 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,194 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v2alpha1 - -import ( - v1 "k8s.io/api/core/v1" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CronJob) DeepCopyInto(out *CronJob) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJob. -func (in *CronJob) DeepCopy() *CronJob { - if in == nil { - return nil - } - out := new(CronJob) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CronJob) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CronJobList) DeepCopyInto(out *CronJobList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]CronJob, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJobList. -func (in *CronJobList) DeepCopy() *CronJobList { - if in == nil { - return nil - } - out := new(CronJobList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CronJobList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CronJobSpec) DeepCopyInto(out *CronJobSpec) { - *out = *in - if in.StartingDeadlineSeconds != nil { - in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds - *out = new(int64) - **out = **in - } - if in.Suspend != nil { - in, out := &in.Suspend, &out.Suspend - *out = new(bool) - **out = **in - } - in.JobTemplate.DeepCopyInto(&out.JobTemplate) - if in.SuccessfulJobsHistoryLimit != nil { - in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit - *out = new(int32) - **out = **in - } - if in.FailedJobsHistoryLimit != nil { - in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJobSpec. -func (in *CronJobSpec) DeepCopy() *CronJobSpec { - if in == nil { - return nil - } - out := new(CronJobSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CronJobStatus) DeepCopyInto(out *CronJobStatus) { - *out = *in - if in.Active != nil { - in, out := &in.Active, &out.Active - *out = make([]v1.ObjectReference, len(*in)) - copy(*out, *in) - } - if in.LastScheduleTime != nil { - in, out := &in.LastScheduleTime, &out.LastScheduleTime - *out = (*in).DeepCopy() - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CronJobStatus. -func (in *CronJobStatus) DeepCopy() *CronJobStatus { - if in == nil { - return nil - } - out := new(CronJobStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *JobTemplate) DeepCopyInto(out *JobTemplate) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Template.DeepCopyInto(&out.Template) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JobTemplate. -func (in *JobTemplate) DeepCopy() *JobTemplate { - if in == nil { - return nil - } - out := new(JobTemplate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *JobTemplate) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *JobTemplateSpec) DeepCopyInto(out *JobTemplateSpec) { - *out = *in - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JobTemplateSpec. -func (in *JobTemplateSpec) DeepCopy() *JobTemplateSpec { - if in == nil { - return nil - } - out := new(JobTemplateSpec) - in.DeepCopyInto(out) - return out -} diff --git a/constraint/vendor/k8s.io/api/certificates/v1/generated.pb.go b/constraint/vendor/k8s.io/api/certificates/v1/generated.pb.go index d2cf41a25..fca7d2115 100644 --- a/constraint/vendor/k8s.io/api/certificates/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/certificates/v1/generated.pb.go @@ -989,10 +989,7 @@ func (m *CertificateSigningRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1236,10 +1233,7 @@ func (m *CertificateSigningRequestCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1356,10 +1350,7 @@ func (m *CertificateSigningRequestList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1683,7 +1674,7 @@ func (m *CertificateSigningRequestSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1732,10 +1723,7 @@ func (m *CertificateSigningRequestSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1853,10 +1841,7 @@ func (m *CertificateSigningRequestStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1938,10 +1923,7 @@ func (m *ExtraValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go index 1729931b8..f21256f48 100644 --- a/constraint/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go @@ -993,10 +993,7 @@ func (m *CertificateSigningRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1240,10 +1237,7 @@ func (m *CertificateSigningRequestCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1360,10 +1354,7 @@ func (m *CertificateSigningRequestList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1687,7 +1678,7 @@ func (m *CertificateSigningRequestSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1737,10 +1728,7 @@ func (m *CertificateSigningRequestSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1858,10 +1846,7 @@ func (m *CertificateSigningRequestStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1943,10 +1928,7 @@ func (m *ExtraValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/coordination/v1/generated.pb.go b/constraint/vendor/k8s.io/api/coordination/v1/generated.pb.go index 22c3d624e..d5ed0f27c 100644 --- a/constraint/vendor/k8s.io/api/coordination/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/coordination/v1/generated.pb.go @@ -554,10 +554,7 @@ func (m *Lease) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -674,10 +671,7 @@ func (m *LeaseList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -872,10 +866,7 @@ func (m *LeaseSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go index 57a314cfd..bcd00d445 100644 --- a/constraint/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go @@ -554,10 +554,7 @@ func (m *Lease) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -674,10 +671,7 @@ func (m *LeaseList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -872,10 +866,7 @@ func (m *LeaseSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/core/v1/annotation_key_constants.go b/constraint/vendor/k8s.io/api/core/v1/annotation_key_constants.go index d3ebf8628..22476b2bd 100644 --- a/constraint/vendor/k8s.io/api/core/v1/annotation_key_constants.go +++ b/constraint/vendor/k8s.io/api/core/v1/annotation_key_constants.go @@ -123,9 +123,32 @@ const ( // https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md EndpointsLastChangeTriggerTime = "endpoints.kubernetes.io/last-change-trigger-time" + // EndpointsOverCapacity will be set on an Endpoints resource when it + // exceeds the maximum capacity of 1000 addresses. Inititially the Endpoints + // controller will set this annotation with a value of "warning". In a + // future release, the controller may set this annotation with a value of + // "truncated" to indicate that any addresses exceeding the limit of 1000 + // have been truncated from the Endpoints resource. + EndpointsOverCapacity = "endpoints.kubernetes.io/over-capacity" + // MigratedPluginsAnnotationKey is the annotation key, set for CSINode objects, that is a comma-separated // list of in-tree plugins that will be serviced by the CSI backend on the Node represented by CSINode. // This annotation is used by the Attach Detach Controller to determine whether to use the in-tree or // CSI Backend for a volume plugin on a specific node. MigratedPluginsAnnotationKey = "storage.alpha.kubernetes.io/migrated-plugins" + + // PodDeletionCost can be used to set to an int32 that represent the cost of deleting + // a pod compared to other pods belonging to the same ReplicaSet. Pods with lower + // deletion cost are preferred to be deleted before pods with higher deletion cost. + // Note that this is honored on a best-effort basis, and so it does not offer guarantees on + // pod deletion order. + // The implicit deletion cost for pods that don't set the annotation is 0, negative values are permitted. + // + // This annotation is alpha-level and is only honored when PodDeletionCost feature is enabled. + PodDeletionCost = "controller.kubernetes.io/pod-deletion-cost" + + // AnnotationTopologyAwareHints can be used to enable or disable Topology + // Aware Hints for a Service. This may be set to "Auto" or "Disabled". Any + // other value is treated as "Disabled". + AnnotationTopologyAwareHints = "service.kubernetes.io/topology-aware-hints" ) diff --git a/constraint/vendor/k8s.io/api/core/v1/generated.pb.go b/constraint/vendor/k8s.io/api/core/v1/generated.pb.go index 5dcc5eb77..286a82ecd 100644 --- a/constraint/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/core/v1/generated.pb.go @@ -6116,882 +6116,887 @@ func init() { } var fileDescriptor_83c10c24ec417dc9 = []byte{ - // 13999 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x5c, 0xd7, - 0x79, 0x98, 0xef, 0x2e, 0x5e, 0xfb, 0xe1, 0x7d, 0x40, 0x52, 0x20, 0x24, 0x12, 0xd4, 0x95, 0x4d, - 0x51, 0x96, 0x04, 0x9a, 0x7a, 0xd8, 0x8a, 0x64, 0x2b, 0x06, 0xb0, 0x00, 0xb9, 0x22, 0x01, 0xae, - 0xce, 0x82, 0xa4, 0xed, 0xc8, 0x1e, 0x5f, 0xec, 0x1e, 0x00, 0x57, 0xd8, 0xbd, 0x77, 0x75, 0xef, - 0x5d, 0x90, 0x50, 0x9d, 0x69, 0xea, 0x3c, 0x9d, 0x47, 0xc7, 0xd3, 0xc9, 0xf4, 0x91, 0x64, 0x32, - 0x9d, 0x34, 0x9d, 0xc4, 0x75, 0xdb, 0x69, 0x9a, 0x34, 0x49, 0xe3, 0xb4, 0x49, 0x9b, 0x3e, 0xd2, - 0xfe, 0x48, 0xd3, 0x4c, 0x1b, 0x67, 0x26, 0x53, 0x34, 0x61, 0x3a, 0xcd, 0xf8, 0x47, 0x93, 0xb4, - 0x49, 0x7f, 0x14, 0xcd, 0x34, 0x9d, 0xf3, 0xbc, 0xe7, 0xdc, 0xc7, 0xee, 0x82, 0x02, 0x61, 0xd9, - 0xa3, 0x7f, 0xbb, 0xe7, 0xfb, 0xce, 0x77, 0xce, 0x3d, 0xcf, 0xef, 0x7c, 0x4f, 0x78, 0x65, 0xf7, - 0xa5, 0x70, 0xc1, 0xf5, 0x2f, 0xef, 0x76, 0x36, 0x49, 0xe0, 0x91, 0x88, 0x84, 0x97, 0xf7, 0x88, - 0xd7, 0xf0, 0x83, 0xcb, 0x02, 0xe0, 0xb4, 0xdd, 0xcb, 0x75, 0x3f, 0x20, 0x97, 0xf7, 0xae, 0x5c, - 0xde, 0x26, 0x1e, 0x09, 0x9c, 0x88, 0x34, 0x16, 0xda, 0x81, 0x1f, 0xf9, 0x08, 0x71, 0x9c, 0x05, - 0xa7, 0xed, 0x2e, 0x50, 0x9c, 0x85, 0xbd, 0x2b, 0x73, 0xcf, 0x6e, 0xbb, 0xd1, 0x4e, 0x67, 0x73, - 0xa1, 0xee, 0xb7, 0x2e, 0x6f, 0xfb, 0xdb, 0xfe, 0x65, 0x86, 0xba, 0xd9, 0xd9, 0x62, 0xff, 0xd8, - 0x1f, 0xf6, 0x8b, 0x93, 0x98, 0x7b, 0x21, 0x6e, 0xa6, 0xe5, 0xd4, 0x77, 0x5c, 0x8f, 0x04, 0xfb, - 0x97, 0xdb, 0xbb, 0xdb, 0xac, 0xdd, 0x80, 0x84, 0x7e, 0x27, 0xa8, 0x93, 0x64, 0xc3, 0x5d, 0x6b, - 0x85, 0x97, 0x5b, 0x24, 0x72, 0x32, 0xba, 0x3b, 0x77, 0x39, 0xaf, 0x56, 0xd0, 0xf1, 0x22, 0xb7, - 0x95, 0x6e, 0xe6, 0xc3, 0xbd, 0x2a, 0x84, 0xf5, 0x1d, 0xd2, 0x72, 0x52, 0xf5, 0x9e, 0xcf, 0xab, - 0xd7, 0x89, 0xdc, 0xe6, 0x65, 0xd7, 0x8b, 0xc2, 0x28, 0x48, 0x56, 0xb2, 0xbf, 0x6a, 0xc1, 0x85, - 0xc5, 0x3b, 0xb5, 0x95, 0xa6, 0x13, 0x46, 0x6e, 0x7d, 0xa9, 0xe9, 0xd7, 0x77, 0x6b, 0x91, 0x1f, - 0x90, 0xdb, 0x7e, 0xb3, 0xd3, 0x22, 0x35, 0x36, 0x10, 0xe8, 0x19, 0x18, 0xd9, 0x63, 0xff, 0x2b, - 0xe5, 0x59, 0xeb, 0x82, 0x75, 0xa9, 0xb4, 0x34, 0xf5, 0xeb, 0x07, 0xf3, 0xef, 0xbb, 0x7f, 0x30, - 0x3f, 0x72, 0x5b, 0x94, 0x63, 0x85, 0x81, 0x2e, 0xc2, 0xd0, 0x56, 0xb8, 0xb1, 0xdf, 0x26, 0xb3, - 0x05, 0x86, 0x3b, 0x21, 0x70, 0x87, 0x56, 0x6b, 0xb4, 0x14, 0x0b, 0x28, 0xba, 0x0c, 0xa5, 0xb6, - 0x13, 0x44, 0x6e, 0xe4, 0xfa, 0xde, 0x6c, 0xf1, 0x82, 0x75, 0x69, 0x70, 0x69, 0x5a, 0xa0, 0x96, - 0xaa, 0x12, 0x80, 0x63, 0x1c, 0xda, 0x8d, 0x80, 0x38, 0x8d, 0x9b, 0x5e, 0x73, 0x7f, 0x76, 0xe0, - 0x82, 0x75, 0x69, 0x24, 0xee, 0x06, 0x16, 0xe5, 0x58, 0x61, 0xd8, 0x3f, 0x52, 0x80, 0x91, 0xc5, - 0xad, 0x2d, 0xd7, 0x73, 0xa3, 0x7d, 0x74, 0x1b, 0xc6, 0x3c, 0xbf, 0x41, 0xe4, 0x7f, 0xf6, 0x15, - 0xa3, 0xcf, 0x5d, 0x58, 0x48, 0x2f, 0xa5, 0x85, 0x75, 0x0d, 0x6f, 0x69, 0xea, 0xfe, 0xc1, 0xfc, - 0x98, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x68, 0xdb, 0x6f, 0x28, 0xb2, 0x05, 0x46, 0x76, 0x3e, - 0x8b, 0x6c, 0x35, 0x46, 0x5b, 0x9a, 0xbc, 0x7f, 0x30, 0x3f, 0xaa, 0x15, 0x60, 0x9d, 0x08, 0xda, - 0x84, 0x49, 0xfa, 0xd7, 0x8b, 0x5c, 0x45, 0xb7, 0xc8, 0xe8, 0x3e, 0x91, 0x47, 0x57, 0x43, 0x5d, - 0x9a, 0xb9, 0x7f, 0x30, 0x3f, 0x99, 0x28, 0xc4, 0x49, 0x82, 0xf6, 0xdb, 0x30, 0xb1, 0x18, 0x45, - 0x4e, 0x7d, 0x87, 0x34, 0xf8, 0x0c, 0xa2, 0x17, 0x60, 0xc0, 0x73, 0x5a, 0x44, 0xcc, 0xef, 0x05, - 0x31, 0xb0, 0x03, 0xeb, 0x4e, 0x8b, 0x1c, 0x1e, 0xcc, 0x4f, 0xdd, 0xf2, 0xdc, 0xb7, 0x3a, 0x62, - 0x55, 0xd0, 0x32, 0xcc, 0xb0, 0xd1, 0x73, 0x00, 0x0d, 0xb2, 0xe7, 0xd6, 0x49, 0xd5, 0x89, 0x76, - 0xc4, 0x7c, 0x23, 0x51, 0x17, 0xca, 0x0a, 0x82, 0x35, 0x2c, 0xfb, 0x1e, 0x94, 0x16, 0xf7, 0x7c, - 0xb7, 0x51, 0xf5, 0x1b, 0x21, 0xda, 0x85, 0xc9, 0x76, 0x40, 0xb6, 0x48, 0xa0, 0x8a, 0x66, 0xad, - 0x0b, 0xc5, 0x4b, 0xa3, 0xcf, 0x5d, 0xca, 0xfc, 0x58, 0x13, 0x75, 0xc5, 0x8b, 0x82, 0xfd, 0xa5, - 0x47, 0x44, 0x7b, 0x93, 0x09, 0x28, 0x4e, 0x52, 0xb6, 0xff, 0x55, 0x01, 0x4e, 0x2f, 0xbe, 0xdd, - 0x09, 0x48, 0xd9, 0x0d, 0x77, 0x93, 0x2b, 0xbc, 0xe1, 0x86, 0xbb, 0xeb, 0xf1, 0x08, 0xa8, 0xa5, - 0x55, 0x16, 0xe5, 0x58, 0x61, 0xa0, 0x67, 0x61, 0x98, 0xfe, 0xbe, 0x85, 0x2b, 0xe2, 0x93, 0x67, - 0x04, 0xf2, 0x68, 0xd9, 0x89, 0x9c, 0x32, 0x07, 0x61, 0x89, 0x83, 0xd6, 0x60, 0xb4, 0xce, 0x36, - 0xe4, 0xf6, 0x9a, 0xdf, 0x20, 0x6c, 0x32, 0x4b, 0x4b, 0x4f, 0x53, 0xf4, 0xe5, 0xb8, 0xf8, 0xf0, - 0x60, 0x7e, 0x96, 0xf7, 0x4d, 0x90, 0xd0, 0x60, 0x58, 0xaf, 0x8f, 0x6c, 0xb5, 0xbf, 0x06, 0x18, - 0x25, 0xc8, 0xd8, 0x5b, 0x97, 0xb4, 0xad, 0x32, 0xc8, 0xb6, 0xca, 0x58, 0xf6, 0x36, 0x41, 0x57, - 0x60, 0x60, 0xd7, 0xf5, 0x1a, 0xb3, 0x43, 0x8c, 0xd6, 0x39, 0x3a, 0xe7, 0xd7, 0x5d, 0xaf, 0x71, - 0x78, 0x30, 0x3f, 0x6d, 0x74, 0x87, 0x16, 0x62, 0x86, 0x6a, 0xff, 0xa9, 0x05, 0xf3, 0x0c, 0xb6, - 0xea, 0x36, 0x49, 0x95, 0x04, 0xa1, 0x1b, 0x46, 0xc4, 0x8b, 0x8c, 0x01, 0x7d, 0x0e, 0x20, 0x24, - 0xf5, 0x80, 0x44, 0xda, 0x90, 0xaa, 0x85, 0x51, 0x53, 0x10, 0xac, 0x61, 0xd1, 0x03, 0x21, 0xdc, - 0x71, 0x02, 0xb6, 0xbe, 0xc4, 0xc0, 0xaa, 0x03, 0xa1, 0x26, 0x01, 0x38, 0xc6, 0x31, 0x0e, 0x84, - 0x62, 0xaf, 0x03, 0x01, 0x7d, 0x0c, 0x26, 0xe3, 0xc6, 0xc2, 0xb6, 0x53, 0x97, 0x03, 0xc8, 0xb6, - 0x4c, 0xcd, 0x04, 0xe1, 0x24, 0xae, 0xfd, 0xf7, 0x2c, 0xb1, 0x78, 0xe8, 0x57, 0xbf, 0xcb, 0xbf, - 0xd5, 0xfe, 0x45, 0x0b, 0x86, 0x97, 0x5c, 0xaf, 0xe1, 0x7a, 0xdb, 0xe8, 0xb3, 0x30, 0x42, 0xef, - 0xa6, 0x86, 0x13, 0x39, 0xe2, 0xdc, 0xfb, 0x90, 0xb6, 0xb7, 0xd4, 0x55, 0xb1, 0xd0, 0xde, 0xdd, - 0xa6, 0x05, 0xe1, 0x02, 0xc5, 0xa6, 0xbb, 0xed, 0xe6, 0xe6, 0x9b, 0xa4, 0x1e, 0xad, 0x91, 0xc8, - 0x89, 0x3f, 0x27, 0x2e, 0xc3, 0x8a, 0x2a, 0xba, 0x0e, 0x43, 0x91, 0x13, 0x6c, 0x93, 0x48, 0x1c, - 0x80, 0x99, 0x07, 0x15, 0xaf, 0x89, 0xe9, 0x8e, 0x24, 0x5e, 0x9d, 0xc4, 0xd7, 0xc2, 0x06, 0xab, - 0x8a, 0x05, 0x09, 0xfb, 0x87, 0x86, 0xe1, 0xec, 0x72, 0xad, 0x92, 0xb3, 0xae, 0x2e, 0xc2, 0x50, - 0x23, 0x70, 0xf7, 0x48, 0x20, 0xc6, 0x59, 0x51, 0x29, 0xb3, 0x52, 0x2c, 0xa0, 0xe8, 0x25, 0x18, - 0xe3, 0x17, 0xd2, 0x35, 0xc7, 0x6b, 0x34, 0xe5, 0x10, 0x9f, 0x12, 0xd8, 0x63, 0xb7, 0x35, 0x18, - 0x36, 0x30, 0x8f, 0xb8, 0xa8, 0x2e, 0x26, 0x36, 0x63, 0xde, 0x65, 0xf7, 0x05, 0x0b, 0xa6, 0x78, - 0x33, 0x8b, 0x51, 0x14, 0xb8, 0x9b, 0x9d, 0x88, 0x84, 0xb3, 0x83, 0xec, 0xa4, 0x5b, 0xce, 0x1a, - 0xad, 0xdc, 0x11, 0x58, 0xb8, 0x9d, 0xa0, 0xc2, 0x0f, 0xc1, 0x59, 0xd1, 0xee, 0x54, 0x12, 0x8c, - 0x53, 0xcd, 0xa2, 0xef, 0xb4, 0x60, 0xae, 0xee, 0x7b, 0x51, 0xe0, 0x37, 0x9b, 0x24, 0xa8, 0x76, - 0x36, 0x9b, 0x6e, 0xb8, 0xc3, 0xd7, 0x29, 0x26, 0x5b, 0xec, 0x24, 0xc8, 0x99, 0x43, 0x85, 0x24, - 0xe6, 0xf0, 0xfc, 0xfd, 0x83, 0xf9, 0xb9, 0xe5, 0x5c, 0x52, 0xb8, 0x4b, 0x33, 0x68, 0x17, 0x10, - 0xbd, 0x4a, 0x6b, 0x91, 0xb3, 0x4d, 0xe2, 0xc6, 0x87, 0xfb, 0x6f, 0xfc, 0xcc, 0xfd, 0x83, 0x79, - 0xb4, 0x9e, 0x22, 0x81, 0x33, 0xc8, 0xa2, 0xb7, 0xe0, 0x14, 0x2d, 0x4d, 0x7d, 0xeb, 0x48, 0xff, - 0xcd, 0xcd, 0xde, 0x3f, 0x98, 0x3f, 0xb5, 0x9e, 0x41, 0x04, 0x67, 0x92, 0x46, 0xdf, 0x61, 0xc1, - 0xd9, 0xf8, 0xf3, 0x57, 0xee, 0xb5, 0x1d, 0xaf, 0x11, 0x37, 0x5c, 0xea, 0xbf, 0x61, 0x7a, 0x26, - 0x9f, 0x5d, 0xce, 0xa3, 0x84, 0xf3, 0x1b, 0x99, 0x5b, 0x86, 0xd3, 0x99, 0xab, 0x05, 0x4d, 0x41, - 0x71, 0x97, 0x70, 0x2e, 0xa8, 0x84, 0xe9, 0x4f, 0x74, 0x0a, 0x06, 0xf7, 0x9c, 0x66, 0x47, 0x6c, - 0x14, 0xcc, 0xff, 0xbc, 0x5c, 0x78, 0xc9, 0xb2, 0xff, 0x75, 0x11, 0x26, 0x97, 0x6b, 0x95, 0x07, - 0xda, 0x85, 0xfa, 0x35, 0x54, 0xe8, 0x7a, 0x0d, 0xc5, 0x97, 0x5a, 0x31, 0xf7, 0x52, 0xfb, 0xcb, - 0x19, 0x5b, 0x68, 0x80, 0x6d, 0xa1, 0x6f, 0xc9, 0xd9, 0x42, 0xc7, 0xbc, 0x71, 0xf6, 0x72, 0x56, - 0xd1, 0x20, 0x9b, 0xcc, 0x4c, 0x8e, 0xe5, 0x86, 0x5f, 0x77, 0x9a, 0xc9, 0xa3, 0xef, 0x88, 0x4b, - 0xe9, 0x78, 0xe6, 0xb1, 0x0e, 0x63, 0xcb, 0x4e, 0xdb, 0xd9, 0x74, 0x9b, 0x6e, 0xe4, 0x92, 0x10, - 0x3d, 0x09, 0x45, 0xa7, 0xd1, 0x60, 0xdc, 0x56, 0x69, 0xe9, 0xf4, 0xfd, 0x83, 0xf9, 0xe2, 0x62, - 0x83, 0x5e, 0xfb, 0xa0, 0xb0, 0xf6, 0x31, 0xc5, 0x40, 0x1f, 0x84, 0x81, 0x46, 0xe0, 0xb7, 0x67, - 0x0b, 0x0c, 0x93, 0xee, 0xba, 0x81, 0x72, 0xe0, 0xb7, 0x13, 0xa8, 0x0c, 0xc7, 0xfe, 0xd5, 0x02, - 0x3c, 0xb6, 0x4c, 0xda, 0x3b, 0xab, 0xb5, 0x9c, 0xf3, 0xfb, 0x12, 0x8c, 0xb4, 0x7c, 0xcf, 0x8d, - 0xfc, 0x20, 0x14, 0x4d, 0xb3, 0x15, 0xb1, 0x26, 0xca, 0xb0, 0x82, 0xa2, 0x0b, 0x30, 0xd0, 0x8e, - 0x99, 0xca, 0x31, 0xc9, 0x90, 0x32, 0x76, 0x92, 0x41, 0x28, 0x46, 0x27, 0x24, 0x81, 0x58, 0x31, - 0x0a, 0xe3, 0x56, 0x48, 0x02, 0xcc, 0x20, 0xf1, 0xcd, 0x4c, 0xef, 0x6c, 0x71, 0x42, 0x27, 0x6e, - 0x66, 0x0a, 0xc1, 0x1a, 0x16, 0xaa, 0x42, 0x29, 0x4c, 0xcc, 0x6c, 0x5f, 0xdb, 0x74, 0x9c, 0x5d, - 0xdd, 0x6a, 0x26, 0x63, 0x22, 0xc6, 0x8d, 0x32, 0xd4, 0xf3, 0xea, 0xfe, 0x4a, 0x01, 0x10, 0x1f, - 0xc2, 0x6f, 0xb0, 0x81, 0xbb, 0x95, 0x1e, 0xb8, 0xfe, 0xb7, 0xc4, 0x71, 0x8d, 0xde, 0x9f, 0x59, - 0xf0, 0xd8, 0xb2, 0xeb, 0x35, 0x48, 0x90, 0xb3, 0x00, 0x1f, 0xce, 0x5b, 0xf6, 0x68, 0x4c, 0x83, - 0xb1, 0xc4, 0x06, 0x8e, 0x61, 0x89, 0xd9, 0x7f, 0x6c, 0x01, 0xe2, 0x9f, 0xfd, 0xae, 0xfb, 0xd8, - 0x5b, 0xe9, 0x8f, 0x3d, 0x86, 0x65, 0x61, 0xdf, 0x80, 0x89, 0xe5, 0xa6, 0x4b, 0xbc, 0xa8, 0x52, - 0x5d, 0xf6, 0xbd, 0x2d, 0x77, 0x1b, 0xbd, 0x0c, 0x13, 0x91, 0xdb, 0x22, 0x7e, 0x27, 0xaa, 0x91, - 0xba, 0xef, 0xb1, 0x97, 0xa4, 0x75, 0x69, 0x70, 0x09, 0xdd, 0x3f, 0x98, 0x9f, 0xd8, 0x30, 0x20, - 0x38, 0x81, 0x69, 0xff, 0x2e, 0x1d, 0x3f, 0xbf, 0xd5, 0xf6, 0x3d, 0xe2, 0x45, 0xcb, 0xbe, 0xd7, - 0xe0, 0x12, 0x87, 0x97, 0x61, 0x20, 0xa2, 0xe3, 0xc1, 0xc7, 0xee, 0xa2, 0xdc, 0x28, 0x74, 0x14, - 0x0e, 0x0f, 0xe6, 0xcf, 0xa4, 0x6b, 0xb0, 0x71, 0x62, 0x75, 0xd0, 0xb7, 0xc0, 0x50, 0x18, 0x39, - 0x51, 0x27, 0x14, 0xa3, 0xf9, 0xb8, 0x1c, 0xcd, 0x1a, 0x2b, 0x3d, 0x3c, 0x98, 0x9f, 0x54, 0xd5, - 0x78, 0x11, 0x16, 0x15, 0xd0, 0x53, 0x30, 0xdc, 0x22, 0x61, 0xe8, 0x6c, 0xcb, 0xdb, 0x70, 0x52, - 0xd4, 0x1d, 0x5e, 0xe3, 0xc5, 0x58, 0xc2, 0xd1, 0x13, 0x30, 0x48, 0x82, 0xc0, 0x0f, 0xc4, 0x1e, - 0x1d, 0x17, 0x88, 0x83, 0x2b, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0x1f, 0x2c, 0x98, 0x54, 0x7d, 0xe5, - 0x6d, 0x9d, 0xc0, 0xab, 0xe0, 0x53, 0x00, 0x75, 0xf9, 0x81, 0x21, 0xbb, 0x3d, 0x46, 0x9f, 0xbb, - 0x98, 0x79, 0x51, 0xa7, 0x86, 0x31, 0xa6, 0xac, 0x8a, 0x42, 0xac, 0x51, 0xb3, 0xff, 0x99, 0x05, - 0x33, 0x89, 0x2f, 0xba, 0xe1, 0x86, 0x11, 0x7a, 0x23, 0xf5, 0x55, 0x0b, 0xfd, 0x7d, 0x15, 0xad, - 0xcd, 0xbe, 0x49, 0x2d, 0x65, 0x59, 0xa2, 0x7d, 0xd1, 0x35, 0x18, 0x74, 0x23, 0xd2, 0x92, 0x1f, - 0xf3, 0x44, 0xd7, 0x8f, 0xe1, 0xbd, 0x8a, 0x67, 0xa4, 0x42, 0x6b, 0x62, 0x4e, 0xc0, 0xfe, 0xd5, - 0x22, 0x94, 0xf8, 0xb2, 0x5d, 0x73, 0xda, 0x27, 0x30, 0x17, 0x4f, 0x43, 0xc9, 0x6d, 0xb5, 0x3a, - 0x91, 0xb3, 0x29, 0x8e, 0xf3, 0x11, 0xbe, 0xb5, 0x2a, 0xb2, 0x10, 0xc7, 0x70, 0x54, 0x81, 0x01, - 0xd6, 0x15, 0xfe, 0x95, 0x4f, 0x66, 0x7f, 0xa5, 0xe8, 0xfb, 0x42, 0xd9, 0x89, 0x1c, 0xce, 0x49, - 0xa9, 0x7b, 0x84, 0x16, 0x61, 0x46, 0x02, 0x39, 0x00, 0x9b, 0xae, 0xe7, 0x04, 0xfb, 0xb4, 0x6c, - 0xb6, 0xc8, 0x08, 0x3e, 0xdb, 0x9d, 0xe0, 0x92, 0xc2, 0xe7, 0x64, 0xd5, 0x87, 0xc5, 0x00, 0xac, - 0x11, 0x9d, 0xfb, 0x08, 0x94, 0x14, 0xf2, 0x51, 0x18, 0xa2, 0xb9, 0x8f, 0xc1, 0x64, 0xa2, 0xad, - 0x5e, 0xd5, 0xc7, 0x74, 0x7e, 0xea, 0x97, 0xd8, 0x91, 0x21, 0x7a, 0xbd, 0xe2, 0xed, 0x89, 0x23, - 0xf7, 0x6d, 0x38, 0xd5, 0xcc, 0x38, 0xc9, 0xc4, 0xbc, 0xf6, 0x7f, 0xf2, 0x3d, 0x26, 0x3e, 0xfb, - 0x54, 0x16, 0x14, 0x67, 0xb6, 0x41, 0x79, 0x04, 0xbf, 0x4d, 0x37, 0x88, 0xd3, 0xd4, 0xd9, 0xed, - 0x9b, 0xa2, 0x0c, 0x2b, 0x28, 0x3d, 0xef, 0x4e, 0xa9, 0xce, 0x5f, 0x27, 0xfb, 0x35, 0xd2, 0x24, - 0xf5, 0xc8, 0x0f, 0xbe, 0xae, 0xdd, 0x3f, 0xc7, 0x47, 0x9f, 0x1f, 0x97, 0xa3, 0x82, 0x40, 0xf1, - 0x3a, 0xd9, 0xe7, 0x53, 0xa1, 0x7f, 0x5d, 0xb1, 0xeb, 0xd7, 0xfd, 0x8c, 0x05, 0xe3, 0xea, 0xeb, - 0x4e, 0xe0, 0x5c, 0x58, 0x32, 0xcf, 0x85, 0x73, 0x5d, 0x17, 0x78, 0xce, 0x89, 0xf0, 0x95, 0x02, - 0x9c, 0x55, 0x38, 0xf4, 0x6d, 0xc0, 0xff, 0x88, 0x55, 0x75, 0x19, 0x4a, 0x9e, 0x92, 0x5a, 0x59, - 0xa6, 0xb8, 0x28, 0x96, 0x59, 0xc5, 0x38, 0x94, 0xc5, 0xf3, 0x62, 0xd1, 0xd2, 0x98, 0x2e, 0xce, - 0x15, 0xa2, 0xdb, 0x25, 0x28, 0x76, 0xdc, 0x86, 0xb8, 0x60, 0x3e, 0x24, 0x47, 0xfb, 0x56, 0xa5, - 0x7c, 0x78, 0x30, 0xff, 0x78, 0x9e, 0x2a, 0x81, 0xde, 0x6c, 0xe1, 0xc2, 0xad, 0x4a, 0x19, 0xd3, - 0xca, 0x68, 0x11, 0x26, 0xa5, 0xb6, 0xe4, 0x36, 0x65, 0xb7, 0x7c, 0x4f, 0xdc, 0x43, 0x4a, 0x26, - 0x8b, 0x4d, 0x30, 0x4e, 0xe2, 0xa3, 0x32, 0x4c, 0xed, 0x76, 0x36, 0x49, 0x93, 0x44, 0xfc, 0x83, - 0xaf, 0x13, 0x2e, 0xb1, 0x2c, 0xc5, 0x2f, 0xb3, 0xeb, 0x09, 0x38, 0x4e, 0xd5, 0xb0, 0xff, 0x82, - 0xdd, 0x07, 0x62, 0xf4, 0xaa, 0x81, 0x4f, 0x17, 0x16, 0xa5, 0xfe, 0xf5, 0x5c, 0xce, 0xfd, 0xac, - 0x8a, 0xeb, 0x64, 0x7f, 0xc3, 0xa7, 0x9c, 0x79, 0xf6, 0xaa, 0x30, 0xd6, 0xfc, 0x40, 0xd7, 0x35, - 0xff, 0x73, 0x05, 0x38, 0xad, 0x46, 0xc0, 0x60, 0x02, 0xbf, 0xd1, 0xc7, 0xe0, 0x0a, 0x8c, 0x36, - 0xc8, 0x96, 0xd3, 0x69, 0x46, 0x4a, 0x7c, 0x3e, 0xc8, 0x55, 0x28, 0xe5, 0xb8, 0x18, 0xeb, 0x38, - 0x47, 0x18, 0xb6, 0xff, 0x3d, 0xca, 0x2e, 0xe2, 0xc8, 0xa1, 0x6b, 0x5c, 0xed, 0x1a, 0x2b, 0x77, - 0xd7, 0x3c, 0x01, 0x83, 0x6e, 0x8b, 0x32, 0x66, 0x05, 0x93, 0xdf, 0xaa, 0xd0, 0x42, 0xcc, 0x61, - 0xe8, 0x03, 0x30, 0x5c, 0xf7, 0x5b, 0x2d, 0xc7, 0x6b, 0xb0, 0x2b, 0xaf, 0xb4, 0x34, 0x4a, 0x79, - 0xb7, 0x65, 0x5e, 0x84, 0x25, 0x0c, 0x3d, 0x06, 0x03, 0x4e, 0xb0, 0xcd, 0x65, 0x18, 0xa5, 0xa5, - 0x11, 0xda, 0xd2, 0x62, 0xb0, 0x1d, 0x62, 0x56, 0x4a, 0x9f, 0x60, 0x77, 0xfd, 0x60, 0xd7, 0xf5, - 0xb6, 0xcb, 0x6e, 0x20, 0xb6, 0x84, 0xba, 0x0b, 0xef, 0x28, 0x08, 0xd6, 0xb0, 0xd0, 0x2a, 0x0c, - 0xb6, 0xfd, 0x20, 0x0a, 0x67, 0x87, 0xd8, 0x70, 0x3f, 0x9e, 0x73, 0x10, 0xf1, 0xaf, 0xad, 0xfa, - 0x41, 0x14, 0x7f, 0x00, 0xfd, 0x17, 0x62, 0x5e, 0x1d, 0xdd, 0x80, 0x61, 0xe2, 0xed, 0xad, 0x06, - 0x7e, 0x6b, 0x76, 0x26, 0x9f, 0xd2, 0x0a, 0x47, 0xe1, 0xcb, 0x2c, 0xe6, 0x51, 0x45, 0x31, 0x96, - 0x24, 0xd0, 0xb7, 0x40, 0x91, 0x78, 0x7b, 0xb3, 0xc3, 0x8c, 0xd2, 0x5c, 0x0e, 0xa5, 0xdb, 0x4e, - 0x10, 0x9f, 0xf9, 0x2b, 0xde, 0x1e, 0xa6, 0x75, 0xd0, 0x27, 0xa1, 0x24, 0x0f, 0x8c, 0x50, 0x08, - 0xeb, 0x32, 0x17, 0xac, 0x3c, 0x66, 0x30, 0x79, 0xab, 0xe3, 0x06, 0xa4, 0x45, 0xbc, 0x28, 0x8c, - 0x4f, 0x48, 0x09, 0x0d, 0x71, 0x4c, 0x0d, 0x7d, 0x52, 0x4a, 0x88, 0xd7, 0xfc, 0x8e, 0x17, 0x85, - 0xb3, 0x25, 0xd6, 0xbd, 0x4c, 0xdd, 0xdd, 0xed, 0x18, 0x2f, 0x29, 0x42, 0xe6, 0x95, 0xb1, 0x41, - 0x0a, 0x7d, 0x1a, 0xc6, 0xf9, 0x7f, 0xae, 0x01, 0x0b, 0x67, 0x4f, 0x33, 0xda, 0x17, 0xf2, 0x69, - 0x73, 0xc4, 0xa5, 0xd3, 0x82, 0xf8, 0xb8, 0x5e, 0x1a, 0x62, 0x93, 0x1a, 0xc2, 0x30, 0xde, 0x74, - 0xf7, 0x88, 0x47, 0xc2, 0xb0, 0x1a, 0xf8, 0x9b, 0x64, 0x16, 0xd8, 0xc0, 0x9c, 0xcd, 0xd6, 0x98, - 0xf9, 0x9b, 0x64, 0x69, 0x9a, 0xd2, 0xbc, 0xa1, 0xd7, 0xc1, 0x26, 0x09, 0x74, 0x0b, 0x26, 0xe8, - 0x8b, 0xcd, 0x8d, 0x89, 0x8e, 0xf6, 0x22, 0xca, 0xde, 0x55, 0xd8, 0xa8, 0x84, 0x13, 0x44, 0xd0, - 0x4d, 0x18, 0x0b, 0x23, 0x27, 0x88, 0x3a, 0x6d, 0x4e, 0xf4, 0x4c, 0x2f, 0xa2, 0x4c, 0xe1, 0x5a, - 0xd3, 0xaa, 0x60, 0x83, 0x00, 0x7a, 0x0d, 0x4a, 0x4d, 0x77, 0x8b, 0xd4, 0xf7, 0xeb, 0x4d, 0x32, - 0x3b, 0xc6, 0xa8, 0x65, 0x1e, 0x2a, 0x37, 0x24, 0x12, 0xe7, 0x73, 0xd5, 0x5f, 0x1c, 0x57, 0x47, - 0xb7, 0xe1, 0x4c, 0x44, 0x82, 0x96, 0xeb, 0x39, 0xf4, 0x30, 0x10, 0x4f, 0x2b, 0xa6, 0xc8, 0x1c, - 0x67, 0xbb, 0xed, 0xbc, 0x98, 0x8d, 0x33, 0x1b, 0x99, 0x58, 0x38, 0xa7, 0x36, 0xba, 0x07, 0xb3, - 0x19, 0x10, 0xbf, 0xe9, 0xd6, 0xf7, 0x67, 0x4f, 0x31, 0xca, 0x1f, 0x15, 0x94, 0x67, 0x37, 0x72, - 0xf0, 0x0e, 0xbb, 0xc0, 0x70, 0x2e, 0x75, 0x74, 0x13, 0x26, 0xd9, 0x09, 0x54, 0xed, 0x34, 0x9b, - 0xa2, 0xc1, 0x09, 0xd6, 0xe0, 0x07, 0xe4, 0x7d, 0x5c, 0x31, 0xc1, 0x87, 0x07, 0xf3, 0x10, 0xff, - 0xc3, 0xc9, 0xda, 0x68, 0x93, 0xe9, 0xcc, 0x3a, 0x81, 0x1b, 0xed, 0xd3, 0x73, 0x83, 0xdc, 0x8b, - 0x66, 0x27, 0xbb, 0xca, 0x2b, 0x74, 0x54, 0xa5, 0x58, 0xd3, 0x0b, 0x71, 0x92, 0x20, 0x3d, 0x52, - 0xc3, 0xa8, 0xe1, 0x7a, 0xb3, 0x53, 0xfc, 0x5d, 0x22, 0x4f, 0xa4, 0x1a, 0x2d, 0xc4, 0x1c, 0xc6, - 0xf4, 0x65, 0xf4, 0xc7, 0x4d, 0x7a, 0x73, 0x4d, 0x33, 0xc4, 0x58, 0x5f, 0x26, 0x01, 0x38, 0xc6, - 0xa1, 0xcc, 0x64, 0x14, 0xed, 0xcf, 0x22, 0x86, 0xaa, 0x0e, 0x96, 0x8d, 0x8d, 0x4f, 0x62, 0x5a, - 0x6e, 0x6f, 0xc2, 0x84, 0x3a, 0x08, 0xd9, 0x98, 0xa0, 0x79, 0x18, 0x64, 0xec, 0x93, 0x90, 0xae, - 0x95, 0x68, 0x17, 0x18, 0x6b, 0x85, 0x79, 0x39, 0xeb, 0x82, 0xfb, 0x36, 0x59, 0xda, 0x8f, 0x08, - 0x7f, 0xd3, 0x17, 0xb5, 0x2e, 0x48, 0x00, 0x8e, 0x71, 0xec, 0xff, 0xc7, 0xd9, 0xd0, 0xf8, 0xb4, - 0xed, 0xe3, 0x7e, 0x79, 0x06, 0x46, 0x76, 0xfc, 0x30, 0xa2, 0xd8, 0xac, 0x8d, 0xc1, 0x98, 0xf1, - 0xbc, 0x26, 0xca, 0xb1, 0xc2, 0x40, 0xaf, 0xc0, 0x78, 0x5d, 0x6f, 0x40, 0x5c, 0x8e, 0xea, 0x18, - 0x31, 0x5a, 0xc7, 0x26, 0x2e, 0x7a, 0x09, 0x46, 0x98, 0x0d, 0x48, 0xdd, 0x6f, 0x0a, 0xae, 0x4d, - 0xde, 0xf0, 0x23, 0x55, 0x51, 0x7e, 0xa8, 0xfd, 0xc6, 0x0a, 0x1b, 0x5d, 0x84, 0x21, 0xda, 0x85, - 0x4a, 0x55, 0x5c, 0x4b, 0x4a, 0x50, 0x74, 0x8d, 0x95, 0x62, 0x01, 0xb5, 0xff, 0x5a, 0x41, 0x1b, - 0x65, 0xfa, 0x1e, 0x26, 0xa8, 0x0a, 0xc3, 0x77, 0x1d, 0x37, 0x72, 0xbd, 0x6d, 0xc1, 0x7f, 0x3c, - 0xd5, 0xf5, 0x8e, 0x62, 0x95, 0xee, 0xf0, 0x0a, 0xfc, 0x16, 0x15, 0x7f, 0xb0, 0x24, 0x43, 0x29, - 0x06, 0x1d, 0xcf, 0xa3, 0x14, 0x0b, 0xfd, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe, 0x60, 0x49, - 0x06, 0xbd, 0x01, 0x20, 0x77, 0x18, 0x69, 0x08, 0xdb, 0x8b, 0x67, 0x7a, 0x13, 0xdd, 0x50, 0x75, - 0x96, 0x26, 0xe8, 0x1d, 0x1d, 0xff, 0xc7, 0x1a, 0x3d, 0x3b, 0x62, 0x7c, 0x5a, 0xba, 0x33, 0xe8, - 0xdb, 0xe8, 0x12, 0x77, 0x82, 0x88, 0x34, 0x16, 0x23, 0x31, 0x38, 0x1f, 0xec, 0xef, 0x91, 0xb2, - 0xe1, 0xb6, 0x88, 0xbe, 0x1d, 0x04, 0x11, 0x1c, 0xd3, 0xb3, 0x7f, 0xa1, 0x08, 0xb3, 0x79, 0xdd, - 0xa5, 0x8b, 0x8e, 0xdc, 0x73, 0xa3, 0x65, 0xca, 0x5e, 0x59, 0xe6, 0xa2, 0x5b, 0x11, 0xe5, 0x58, - 0x61, 0xd0, 0xd9, 0x0f, 0xdd, 0x6d, 0xf9, 0xc6, 0x1c, 0x8c, 0x67, 0xbf, 0xc6, 0x4a, 0xb1, 0x80, - 0x52, 0xbc, 0x80, 0x38, 0xa1, 0x30, 0xee, 0xd1, 0x56, 0x09, 0x66, 0xa5, 0x58, 0x40, 0x75, 0x69, - 0xd7, 0x40, 0x0f, 0x69, 0x97, 0x31, 0x44, 0x83, 0xc7, 0x3b, 0x44, 0xe8, 0x33, 0x00, 0x5b, 0xae, - 0xe7, 0x86, 0x3b, 0x8c, 0xfa, 0xd0, 0x91, 0xa9, 0x2b, 0xe6, 0x6c, 0x55, 0x51, 0xc1, 0x1a, 0x45, - 0xf4, 0x22, 0x8c, 0xaa, 0x0d, 0x58, 0x29, 0x33, 0x4d, 0xa7, 0x66, 0x39, 0x12, 0x9f, 0x46, 0x65, - 0xac, 0xe3, 0xd9, 0x6f, 0x26, 0xd7, 0x8b, 0xd8, 0x01, 0xda, 0xf8, 0x5a, 0xfd, 0x8e, 0x6f, 0xa1, - 0xfb, 0xf8, 0xda, 0x5f, 0x2b, 0xc2, 0xa4, 0xd1, 0x58, 0x27, 0xec, 0xe3, 0xcc, 0xba, 0x4a, 0x0f, - 0x70, 0x27, 0x22, 0x62, 0xff, 0xd9, 0xbd, 0xb7, 0x8a, 0x7e, 0xc8, 0xd3, 0x1d, 0xc0, 0xeb, 0xa3, - 0xcf, 0x40, 0xa9, 0xe9, 0x84, 0x4c, 0x72, 0x46, 0xc4, 0xbe, 0xeb, 0x87, 0x58, 0xfc, 0x30, 0x71, - 0xc2, 0x48, 0xbb, 0x35, 0x39, 0xed, 0x98, 0x24, 0xbd, 0x69, 0x28, 0x7f, 0x22, 0xad, 0xc7, 0x54, - 0x27, 0x28, 0x13, 0xb3, 0x8f, 0x39, 0x0c, 0xbd, 0x04, 0x63, 0x01, 0x61, 0xab, 0x62, 0x99, 0x72, - 0x73, 0x6c, 0x99, 0x0d, 0xc6, 0x6c, 0x1f, 0xd6, 0x60, 0xd8, 0xc0, 0x8c, 0xdf, 0x06, 0x43, 0x5d, - 0xde, 0x06, 0x4f, 0xc1, 0x30, 0xfb, 0xa1, 0x56, 0x80, 0x9a, 0x8d, 0x0a, 0x2f, 0xc6, 0x12, 0x9e, - 0x5c, 0x30, 0x23, 0xfd, 0x2d, 0x18, 0xfa, 0xfa, 0x10, 0x8b, 0x9a, 0x69, 0x99, 0x47, 0xf8, 0x29, - 0x27, 0x96, 0x3c, 0x96, 0x30, 0xfb, 0x83, 0x30, 0x51, 0x76, 0x48, 0xcb, 0xf7, 0x56, 0xbc, 0x46, - 0xdb, 0x77, 0xbd, 0x08, 0xcd, 0xc2, 0x00, 0xbb, 0x44, 0xf8, 0x11, 0x30, 0x40, 0x1b, 0xc2, 0x03, - 0xf4, 0x41, 0x60, 0x6f, 0xc3, 0xe9, 0xb2, 0x7f, 0xd7, 0xbb, 0xeb, 0x04, 0x8d, 0xc5, 0x6a, 0x45, - 0x7b, 0x5f, 0xaf, 0xcb, 0xf7, 0x1d, 0x37, 0xda, 0xca, 0x3c, 0x7a, 0xb5, 0x9a, 0x9c, 0xad, 0x5d, - 0x75, 0x9b, 0x24, 0x47, 0x0a, 0xf2, 0x37, 0x0a, 0x46, 0x4b, 0x31, 0xbe, 0xd2, 0x6a, 0x59, 0xb9, - 0x5a, 0xad, 0xd7, 0x61, 0x64, 0xcb, 0x25, 0xcd, 0x06, 0x26, 0x5b, 0x62, 0x25, 0x3e, 0x99, 0x6f, - 0x87, 0xb2, 0x4a, 0x31, 0xa5, 0xd4, 0x8b, 0xbf, 0x0e, 0x57, 0x45, 0x65, 0xac, 0xc8, 0xa0, 0x5d, - 0x98, 0x92, 0x0f, 0x06, 0x09, 0x15, 0xeb, 0xf2, 0xa9, 0x6e, 0xaf, 0x10, 0x93, 0xf8, 0xa9, 0xfb, - 0x07, 0xf3, 0x53, 0x38, 0x41, 0x06, 0xa7, 0x08, 0xd3, 0xe7, 0x60, 0x8b, 0x9e, 0xc0, 0x03, 0x6c, - 0xf8, 0xd9, 0x73, 0x90, 0xbd, 0x6c, 0x59, 0xa9, 0xfd, 0x63, 0x16, 0x3c, 0x92, 0x1a, 0x19, 0xf1, - 0xc2, 0x3f, 0xe6, 0x59, 0x48, 0xbe, 0xb8, 0x0b, 0xbd, 0x5f, 0xdc, 0xf6, 0xdf, 0xb7, 0xe0, 0xd4, - 0x4a, 0xab, 0x1d, 0xed, 0x97, 0x5d, 0x53, 0x05, 0xf5, 0x11, 0x18, 0x6a, 0x91, 0x86, 0xdb, 0x69, - 0x89, 0x99, 0x9b, 0x97, 0xa7, 0xd4, 0x1a, 0x2b, 0x3d, 0x3c, 0x98, 0x1f, 0xaf, 0x45, 0x7e, 0xe0, - 0x6c, 0x13, 0x5e, 0x80, 0x05, 0x3a, 0x3b, 0xeb, 0xdd, 0xb7, 0xc9, 0x0d, 0xb7, 0xe5, 0x4a, 0xbb, - 0xa2, 0xae, 0x32, 0xbb, 0x05, 0x39, 0xa0, 0x0b, 0xaf, 0x77, 0x1c, 0x2f, 0x72, 0xa3, 0x7d, 0xa1, - 0x3d, 0x92, 0x44, 0x70, 0x4c, 0xcf, 0xfe, 0xaa, 0x05, 0x93, 0x72, 0xdd, 0x2f, 0x36, 0x1a, 0x01, - 0x09, 0x43, 0x34, 0x07, 0x05, 0xb7, 0x2d, 0x7a, 0x09, 0xa2, 0x97, 0x85, 0x4a, 0x15, 0x17, 0xdc, - 0xb6, 0x64, 0xcb, 0xd8, 0x41, 0x58, 0x34, 0x15, 0x69, 0xd7, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x12, - 0x8c, 0x78, 0x7e, 0x83, 0xdb, 0x76, 0xf1, 0x2b, 0x8d, 0x2d, 0xb0, 0x75, 0x51, 0x86, 0x15, 0x14, - 0x55, 0xa1, 0xc4, 0xcd, 0x9e, 0xe2, 0x45, 0xdb, 0x97, 0xf1, 0x14, 0xfb, 0xb2, 0x0d, 0x59, 0x13, - 0xc7, 0x44, 0xec, 0x5f, 0xb1, 0x60, 0x4c, 0x7e, 0x59, 0x9f, 0x3c, 0x27, 0xdd, 0x5a, 0x31, 0xbf, - 0x19, 0x6f, 0x2d, 0xca, 0x33, 0x32, 0x88, 0xc1, 0x2a, 0x16, 0x8f, 0xc4, 0x2a, 0x5e, 0x81, 0x51, - 0xa7, 0xdd, 0xae, 0x9a, 0x7c, 0x26, 0x5b, 0x4a, 0x8b, 0x71, 0x31, 0xd6, 0x71, 0xec, 0x1f, 0x2d, - 0xc0, 0x84, 0xfc, 0x82, 0x5a, 0x67, 0x33, 0x24, 0x11, 0xda, 0x80, 0x92, 0xc3, 0x67, 0x89, 0xc8, - 0x45, 0xfe, 0x44, 0xb6, 0x1c, 0xc1, 0x98, 0xd2, 0xf8, 0xc2, 0x5f, 0x94, 0xb5, 0x71, 0x4c, 0x08, - 0x35, 0x61, 0xda, 0xf3, 0x23, 0x76, 0xf8, 0x2b, 0x78, 0x37, 0xd5, 0x4e, 0x92, 0xfa, 0x59, 0x41, - 0x7d, 0x7a, 0x3d, 0x49, 0x05, 0xa7, 0x09, 0xa3, 0x15, 0x29, 0x9b, 0x29, 0xe6, 0x0b, 0x03, 0xf4, - 0x89, 0xcb, 0x16, 0xcd, 0xd8, 0xbf, 0x6c, 0x41, 0x49, 0xa2, 0x9d, 0x84, 0x16, 0x6f, 0x0d, 0x86, - 0x43, 0x36, 0x09, 0x72, 0x68, 0xec, 0x6e, 0x1d, 0xe7, 0xf3, 0x15, 0xdf, 0x69, 0xfc, 0x7f, 0x88, - 0x25, 0x0d, 0x26, 0x9a, 0x57, 0xdd, 0x7f, 0x97, 0x88, 0xe6, 0x55, 0x7f, 0x72, 0x2e, 0xa5, 0x3f, - 0x64, 0x7d, 0xd6, 0x64, 0x5d, 0x94, 0xf5, 0x6a, 0x07, 0x64, 0xcb, 0xbd, 0x97, 0x64, 0xbd, 0xaa, - 0xac, 0x14, 0x0b, 0x28, 0x7a, 0x03, 0xc6, 0xea, 0x52, 0x26, 0x1b, 0xef, 0xf0, 0x8b, 0x5d, 0xf5, - 0x03, 0x4a, 0x95, 0xc4, 0x65, 0x21, 0xcb, 0x5a, 0x7d, 0x6c, 0x50, 0x33, 0xcd, 0x08, 0x8a, 0xbd, - 0xcc, 0x08, 0x62, 0xba, 0xf9, 0x4a, 0xf5, 0x1f, 0xb7, 0x60, 0x88, 0xcb, 0xe2, 0xfa, 0x13, 0x85, - 0x6a, 0x9a, 0xb5, 0x78, 0xec, 0x6e, 0xd3, 0x42, 0xa1, 0x29, 0x43, 0x6b, 0x50, 0x62, 0x3f, 0x98, - 0x2c, 0xb1, 0x98, 0x6f, 0x75, 0xcf, 0x5b, 0xd5, 0x3b, 0x78, 0x5b, 0x56, 0xc3, 0x31, 0x05, 0xfb, - 0x87, 0x8b, 0xf4, 0x74, 0x8b, 0x51, 0x8d, 0x4b, 0xdf, 0x7a, 0x78, 0x97, 0x7e, 0xe1, 0x61, 0x5d, - 0xfa, 0xdb, 0x30, 0x59, 0xd7, 0xf4, 0x70, 0xf1, 0x4c, 0x5e, 0xea, 0xba, 0x48, 0x34, 0x95, 0x1d, - 0x97, 0xb2, 0x2c, 0x9b, 0x44, 0x70, 0x92, 0x2a, 0xfa, 0x36, 0x18, 0xe3, 0xf3, 0x2c, 0x5a, 0xe1, - 0x96, 0x18, 0x1f, 0xc8, 0x5f, 0x2f, 0x7a, 0x13, 0x5c, 0x2a, 0xa7, 0x55, 0xc7, 0x06, 0x31, 0xfb, - 0x4f, 0x2c, 0x40, 0x2b, 0xed, 0x1d, 0xd2, 0x22, 0x81, 0xd3, 0x8c, 0xc5, 0xe9, 0xdf, 0x6f, 0xc1, - 0x2c, 0x49, 0x15, 0x2f, 0xfb, 0xad, 0x96, 0x78, 0xb4, 0xe4, 0xbc, 0xab, 0x57, 0x72, 0xea, 0x28, - 0xb7, 0x84, 0xd9, 0x3c, 0x0c, 0x9c, 0xdb, 0x1e, 0x5a, 0x83, 0x19, 0x7e, 0x4b, 0x2a, 0x80, 0x66, - 0x7b, 0xfd, 0xa8, 0x20, 0x3c, 0xb3, 0x91, 0x46, 0xc1, 0x59, 0xf5, 0xec, 0xef, 0x1a, 0x83, 0xdc, - 0x5e, 0xbc, 0xa7, 0x47, 0x78, 0x4f, 0x8f, 0xf0, 0x9e, 0x1e, 0xe1, 0x3d, 0x3d, 0xc2, 0x7b, 0x7a, - 0x84, 0x6f, 0x7a, 0x3d, 0xc2, 0x1f, 0x59, 0x30, 0x93, 0xbe, 0x06, 0x4e, 0x82, 0x31, 0xef, 0xc0, - 0x4c, 0xfa, 0xae, 0xeb, 0x6a, 0x67, 0x97, 0xee, 0x67, 0x7c, 0xef, 0x65, 0x7c, 0x03, 0xce, 0xa2, - 0x6f, 0xff, 0x9a, 0x05, 0xa7, 0x15, 0xb2, 0xf1, 0xd2, 0xff, 0x1c, 0xcc, 0xf0, 0xf3, 0x65, 0xb9, - 0xe9, 0xb8, 0xad, 0x0d, 0xd2, 0x6a, 0x37, 0x9d, 0x48, 0x9a, 0x19, 0x5c, 0xc9, 0xdc, 0xaa, 0x09, - 0x13, 0x5d, 0xa3, 0xe2, 0xd2, 0x23, 0xb4, 0x5f, 0x19, 0x00, 0x9c, 0xd5, 0x8c, 0x61, 0x94, 0x5a, - 0xe8, 0x69, 0x26, 0xfc, 0x0b, 0x23, 0x30, 0xb8, 0xb2, 0x47, 0xbc, 0xe8, 0x04, 0x26, 0xaa, 0x0e, - 0x13, 0xae, 0xb7, 0xe7, 0x37, 0xf7, 0x48, 0x83, 0xc3, 0x8f, 0xf2, 0xd0, 0x3f, 0x23, 0x48, 0x4f, - 0x54, 0x0c, 0x12, 0x38, 0x41, 0xf2, 0x61, 0x08, 0xdb, 0xaf, 0xc2, 0x10, 0xbf, 0xe3, 0x84, 0xa4, - 0x3d, 0xf3, 0x4a, 0x63, 0x83, 0x28, 0x6e, 0xee, 0x58, 0x11, 0xc0, 0xef, 0x50, 0x51, 0x1d, 0xbd, - 0x09, 0x13, 0x5b, 0x6e, 0x10, 0x46, 0x1b, 0x6e, 0x8b, 0x84, 0x91, 0xd3, 0x6a, 0x3f, 0x80, 0x70, - 0x5d, 0x8d, 0xc3, 0xaa, 0x41, 0x09, 0x27, 0x28, 0xa3, 0x6d, 0x18, 0x6f, 0x3a, 0x7a, 0x53, 0xc3, - 0x47, 0x6e, 0x4a, 0x5d, 0x9e, 0x37, 0x74, 0x42, 0xd8, 0xa4, 0x4b, 0x4f, 0x9b, 0x3a, 0x93, 0x0f, - 0x8f, 0x30, 0xa9, 0x89, 0x3a, 0x6d, 0xb8, 0x60, 0x98, 0xc3, 0x28, 0x1f, 0xc8, 0xec, 0x87, 0x4b, - 0x26, 0x1f, 0xa8, 0x59, 0x09, 0x7f, 0x16, 0x4a, 0x84, 0x0e, 0x21, 0x25, 0x2c, 0xee, 0xdf, 0xcb, - 0xfd, 0xf5, 0x75, 0xcd, 0xad, 0x07, 0xbe, 0xa9, 0xd6, 0x58, 0x91, 0x94, 0x70, 0x4c, 0x14, 0x2d, - 0xc3, 0x50, 0x48, 0x02, 0x97, 0x84, 0xe2, 0x26, 0xee, 0x32, 0x8d, 0x0c, 0x8d, 0xbb, 0xde, 0xf0, - 0xdf, 0x58, 0x54, 0xa5, 0xcb, 0xcb, 0x61, 0x12, 0x5f, 0x76, 0x57, 0x6a, 0xcb, 0x6b, 0x91, 0x95, - 0x62, 0x01, 0x45, 0xaf, 0xc1, 0x70, 0x40, 0x9a, 0x4c, 0x6f, 0x36, 0xde, 0xff, 0x22, 0xe7, 0x6a, - 0x38, 0x5e, 0x0f, 0x4b, 0x02, 0xe8, 0x3a, 0xa0, 0x80, 0x50, 0x3e, 0xd2, 0xf5, 0xb6, 0x95, 0x55, - 0xad, 0xb8, 0x87, 0xd4, 0xb9, 0x85, 0x63, 0x0c, 0xe9, 0x05, 0x85, 0x33, 0xaa, 0xa1, 0xab, 0x30, - 0xad, 0x4a, 0x2b, 0x5e, 0x18, 0x39, 0xf4, 0xfc, 0x9f, 0x64, 0xb4, 0x94, 0x18, 0x07, 0x27, 0x11, - 0x70, 0xba, 0x8e, 0xfd, 0x25, 0x0b, 0xf8, 0x38, 0x9f, 0x80, 0xf0, 0xe2, 0x55, 0x53, 0x78, 0x71, - 0x36, 0x77, 0xe6, 0x72, 0x04, 0x17, 0x5f, 0xb2, 0x60, 0x54, 0x9b, 0xd9, 0x78, 0xcd, 0x5a, 0x5d, - 0xd6, 0x6c, 0x07, 0xa6, 0xe8, 0x4a, 0xbf, 0xb9, 0x19, 0x92, 0x60, 0x8f, 0x34, 0xd8, 0xc2, 0x2c, - 0x3c, 0xd8, 0xc2, 0x54, 0x16, 0x7c, 0x37, 0x12, 0x04, 0x71, 0xaa, 0x09, 0xfb, 0xb3, 0xb2, 0xab, - 0xca, 0xe0, 0xb1, 0xae, 0xe6, 0x3c, 0x61, 0xf0, 0xa8, 0x66, 0x15, 0xc7, 0x38, 0x74, 0xab, 0xed, - 0xf8, 0x61, 0x94, 0x34, 0x78, 0xbc, 0xe6, 0x87, 0x11, 0x66, 0x10, 0xfb, 0x79, 0x80, 0x95, 0x7b, - 0xa4, 0xce, 0x57, 0xac, 0xfe, 0xb6, 0xb2, 0xf2, 0xdf, 0x56, 0xf6, 0x6f, 0x59, 0x30, 0xb1, 0xba, - 0x6c, 0xdc, 0x73, 0x0b, 0x00, 0xfc, 0x41, 0x78, 0xe7, 0xce, 0xba, 0xb4, 0x16, 0xe0, 0x0a, 0x5f, - 0x55, 0x8a, 0x35, 0x0c, 0x74, 0x16, 0x8a, 0xcd, 0x8e, 0x27, 0xa4, 0xab, 0xc3, 0x94, 0x7b, 0xb8, - 0xd1, 0xf1, 0x30, 0x2d, 0xd3, 0x3c, 0x2e, 0x8a, 0x7d, 0x7b, 0x5c, 0xf4, 0x8c, 0x7c, 0x80, 0xe6, - 0x61, 0xf0, 0xee, 0x5d, 0xb7, 0xc1, 0xfd, 0x4b, 0x85, 0x25, 0xc3, 0x9d, 0x3b, 0x95, 0x72, 0x88, - 0x79, 0xb9, 0xfd, 0xc5, 0x22, 0xcc, 0xad, 0x36, 0xc9, 0xbd, 0x77, 0xe8, 0x63, 0xdb, 0xaf, 0xbf, - 0xc8, 0xd1, 0xe4, 0x54, 0x47, 0xf5, 0x09, 0xea, 0x3d, 0x1e, 0x5b, 0x30, 0xcc, 0xed, 0xfd, 0xa4, - 0xc7, 0xed, 0x2b, 0x59, 0xad, 0xe7, 0x0f, 0xc8, 0x02, 0xb7, 0x1b, 0x14, 0x0e, 0x83, 0xea, 0xc2, - 0x14, 0xa5, 0x58, 0x12, 0x9f, 0x7b, 0x19, 0xc6, 0x74, 0xcc, 0x23, 0x79, 0xe7, 0xfd, 0x95, 0x22, - 0x4c, 0xd1, 0x1e, 0x3c, 0xd4, 0x89, 0xb8, 0x95, 0x9e, 0x88, 0xe3, 0xf6, 0xd0, 0xea, 0x3d, 0x1b, - 0x6f, 0x24, 0x67, 0xe3, 0x4a, 0xde, 0x6c, 0x9c, 0xf4, 0x1c, 0x7c, 0xa7, 0x05, 0x33, 0xab, 0x4d, - 0xbf, 0xbe, 0x9b, 0xf0, 0xa2, 0x7a, 0x11, 0x46, 0xe9, 0x71, 0x1c, 0x1a, 0x0e, 0xfe, 0x46, 0xc8, - 0x07, 0x01, 0xc2, 0x3a, 0x9e, 0x56, 0xed, 0xd6, 0xad, 0x4a, 0x39, 0x2b, 0x52, 0x84, 0x00, 0x61, - 0x1d, 0xcf, 0xfe, 0x0d, 0x0b, 0xce, 0x5d, 0x5d, 0x5e, 0x89, 0x97, 0x62, 0x2a, 0x58, 0xc5, 0x45, - 0x18, 0x6a, 0x37, 0xb4, 0xae, 0xc4, 0xd2, 0xe7, 0x32, 0xeb, 0x85, 0x80, 0xbe, 0x5b, 0x02, 0xb1, - 0xfc, 0xb4, 0x05, 0x33, 0x57, 0xdd, 0x88, 0xde, 0xae, 0xc9, 0xb0, 0x09, 0xf4, 0x7a, 0x0d, 0xdd, - 0xc8, 0x0f, 0xf6, 0x93, 0x61, 0x13, 0xb0, 0x82, 0x60, 0x0d, 0x8b, 0xb7, 0xbc, 0xe7, 0x32, 0x4b, - 0xf3, 0x82, 0xa9, 0x87, 0xc3, 0xa2, 0x1c, 0x2b, 0x0c, 0xfa, 0x61, 0x0d, 0x37, 0x60, 0x22, 0xcc, - 0x7d, 0x71, 0xc2, 0xaa, 0x0f, 0x2b, 0x4b, 0x00, 0x8e, 0x71, 0xe8, 0x6b, 0x6e, 0xfe, 0x6a, 0xb3, - 0x13, 0x46, 0x24, 0xd8, 0x0a, 0x73, 0x4e, 0xc7, 0xe7, 0xa1, 0x44, 0xa4, 0xc2, 0x40, 0xf4, 0x5a, - 0x71, 0x8c, 0x4a, 0x93, 0xc0, 0xa3, 0x37, 0x28, 0xbc, 0x3e, 0x7c, 0x32, 0x8f, 0xe6, 0x54, 0xb7, - 0x0a, 0x88, 0xe8, 0x6d, 0xe9, 0xe1, 0x2c, 0x98, 0x5f, 0xfc, 0x4a, 0x0a, 0x8a, 0x33, 0x6a, 0xd8, - 0x3f, 0x66, 0xc1, 0x69, 0xf5, 0xc1, 0xef, 0xba, 0xcf, 0xb4, 0x7f, 0xb6, 0x00, 0xe3, 0xd7, 0x36, - 0x36, 0xaa, 0x57, 0x49, 0x24, 0xae, 0xed, 0xde, 0x66, 0x00, 0x58, 0xd3, 0x66, 0x76, 0x7b, 0xcc, - 0x75, 0x22, 0xb7, 0xb9, 0xc0, 0xa3, 0x22, 0x2d, 0x54, 0xbc, 0xe8, 0x66, 0x50, 0x8b, 0x02, 0xd7, - 0xdb, 0xce, 0xd4, 0x7f, 0x4a, 0xe6, 0xa2, 0x98, 0xc7, 0x5c, 0xa0, 0xe7, 0x61, 0x88, 0x85, 0x65, - 0x92, 0x93, 0xf0, 0xa8, 0x7a, 0x0b, 0xb1, 0xd2, 0xc3, 0x83, 0xf9, 0xd2, 0x2d, 0x5c, 0xe1, 0x7f, - 0xb0, 0x40, 0x45, 0xb7, 0x60, 0x74, 0x27, 0x8a, 0xda, 0xd7, 0x88, 0xd3, 0xa0, 0x4f, 0x77, 0x7e, - 0x1c, 0x9e, 0xcf, 0x3a, 0x0e, 0xe9, 0x20, 0x70, 0xb4, 0xf8, 0x04, 0x89, 0xcb, 0x42, 0xac, 0xd3, - 0xb1, 0x6b, 0x00, 0x31, 0xec, 0x98, 0x14, 0x39, 0xf6, 0x1f, 0x58, 0x30, 0xcc, 0x23, 0x64, 0x04, - 0xe8, 0xa3, 0x30, 0x40, 0xee, 0x91, 0xba, 0xe0, 0x78, 0x33, 0x3b, 0x1c, 0x73, 0x5a, 0x5c, 0x20, - 0x4d, 0xff, 0x63, 0x56, 0x0b, 0x5d, 0x83, 0x61, 0xda, 0xdb, 0xab, 0x2a, 0x5c, 0xc8, 0xe3, 0x79, - 0x5f, 0xac, 0xa6, 0x9d, 0x33, 0x67, 0xa2, 0x08, 0xcb, 0xea, 0x4c, 0x7b, 0x5e, 0x6f, 0xd7, 0xe8, - 0x89, 0x1d, 0x75, 0x63, 0x2c, 0x36, 0x96, 0xab, 0x1c, 0x49, 0x50, 0xe3, 0xda, 0x73, 0x59, 0x88, - 0x63, 0x22, 0xf6, 0x06, 0x94, 0xe8, 0xa4, 0x2e, 0x36, 0x5d, 0xa7, 0xbb, 0x41, 0xc0, 0xd3, 0x50, - 0x92, 0xea, 0xfe, 0x50, 0x78, 0xc6, 0x33, 0xaa, 0xd2, 0x1a, 0x20, 0xc4, 0x31, 0xdc, 0xde, 0x82, - 0x53, 0xcc, 0x78, 0xd3, 0x89, 0x76, 0x8c, 0x3d, 0xd6, 0x7b, 0x31, 0x3f, 0x23, 0x1e, 0x90, 0x7c, - 0x66, 0x66, 0x35, 0xe7, 0xd3, 0x31, 0x49, 0x31, 0x7e, 0x4c, 0xda, 0x5f, 0x1b, 0x80, 0x47, 0x2b, - 0xb5, 0xfc, 0xe0, 0x29, 0x2f, 0xc1, 0x18, 0xe7, 0x4b, 0xe9, 0xd2, 0x76, 0x9a, 0xa2, 0x5d, 0x25, - 0x89, 0xde, 0xd0, 0x60, 0xd8, 0xc0, 0x44, 0xe7, 0xa0, 0xe8, 0xbe, 0xe5, 0x25, 0x5d, 0xb3, 0x2a, - 0xaf, 0xaf, 0x63, 0x5a, 0x4e, 0xc1, 0x94, 0xc5, 0xe5, 0x77, 0x87, 0x02, 0x2b, 0x36, 0xf7, 0x55, - 0x98, 0x70, 0xc3, 0x7a, 0xe8, 0x56, 0x3c, 0x7a, 0xce, 0x68, 0x27, 0x95, 0x12, 0x6e, 0xd0, 0x4e, - 0x2b, 0x28, 0x4e, 0x60, 0x6b, 0x17, 0xd9, 0x60, 0xdf, 0x6c, 0x72, 0x4f, 0x57, 0x71, 0xfa, 0x02, - 0x68, 0xb3, 0xaf, 0x0b, 0x99, 0x4a, 0x41, 0xbc, 0x00, 0xf8, 0x07, 0x87, 0x58, 0xc2, 0xe8, 0xcb, - 0xb1, 0xbe, 0xe3, 0xb4, 0x17, 0x3b, 0xd1, 0x4e, 0xd9, 0x0d, 0xeb, 0xfe, 0x1e, 0x09, 0xf6, 0xd9, - 0xa3, 0x7f, 0x24, 0x7e, 0x39, 0x2a, 0xc0, 0xf2, 0xb5, 0xc5, 0x2a, 0xc5, 0xc4, 0xe9, 0x3a, 0x68, - 0x11, 0x26, 0x65, 0x61, 0x8d, 0x84, 0xec, 0x0a, 0x1b, 0x65, 0x64, 0x94, 0xb3, 0x94, 0x28, 0x56, - 0x44, 0x92, 0xf8, 0x26, 0x27, 0x0d, 0xc7, 0xc1, 0x49, 0x7f, 0x04, 0xc6, 0x5d, 0xcf, 0x8d, 0x5c, - 0x27, 0xf2, 0xb9, 0x3e, 0x8c, 0xbf, 0xef, 0x99, 0xa0, 0xbf, 0xa2, 0x03, 0xb0, 0x89, 0x67, 0xff, - 0xb7, 0x01, 0x98, 0x66, 0xd3, 0xf6, 0xde, 0x0a, 0xfb, 0x66, 0x5a, 0x61, 0xb7, 0xd2, 0x2b, 0xec, - 0x38, 0x9e, 0x08, 0x0f, 0xbc, 0xcc, 0xde, 0x84, 0x92, 0xf2, 0x0f, 0x93, 0x0e, 0xa2, 0x56, 0x8e, - 0x83, 0x68, 0x6f, 0xee, 0x43, 0x9a, 0xd8, 0x15, 0x33, 0x4d, 0xec, 0xfe, 0x96, 0x05, 0xb1, 0x82, - 0x07, 0x5d, 0x83, 0x52, 0xdb, 0x67, 0x96, 0xa3, 0x81, 0x34, 0xc7, 0x7e, 0x34, 0xf3, 0xa2, 0xe2, - 0x97, 0x22, 0xff, 0xf8, 0xaa, 0xac, 0x81, 0xe3, 0xca, 0x68, 0x09, 0x86, 0xdb, 0x01, 0xa9, 0x45, - 0x2c, 0x86, 0x4a, 0x4f, 0x3a, 0x7c, 0x8d, 0x70, 0x7c, 0x2c, 0x2b, 0xda, 0x3f, 0x67, 0x01, 0x70, - 0x2b, 0x36, 0xc7, 0xdb, 0x26, 0x27, 0x20, 0xb5, 0x2e, 0xc3, 0x40, 0xd8, 0x26, 0xf5, 0x6e, 0x36, - 0xbd, 0x71, 0x7f, 0x6a, 0x6d, 0x52, 0x8f, 0x07, 0x9c, 0xfe, 0xc3, 0xac, 0xb6, 0xfd, 0xdd, 0x00, - 0x13, 0x31, 0x5a, 0x25, 0x22, 0x2d, 0xf4, 0xac, 0x11, 0x53, 0xe1, 0x6c, 0x22, 0xa6, 0x42, 0x89, - 0x61, 0x6b, 0x02, 0xd2, 0x37, 0xa1, 0xd8, 0x72, 0xee, 0x09, 0x09, 0xd8, 0xd3, 0xdd, 0xbb, 0x41, - 0xe9, 0x2f, 0xac, 0x39, 0xf7, 0xf8, 0x23, 0xf1, 0x69, 0xb9, 0x40, 0xd6, 0x9c, 0x7b, 0x87, 0xdc, - 0x72, 0x97, 0x1d, 0x52, 0x37, 0xdc, 0x30, 0xfa, 0xfc, 0x7f, 0x8d, 0xff, 0xb3, 0x65, 0x47, 0x1b, - 0x61, 0x6d, 0xb9, 0x9e, 0x30, 0xd0, 0xea, 0xab, 0x2d, 0xd7, 0x4b, 0xb6, 0xe5, 0x7a, 0x7d, 0xb4, - 0xe5, 0x7a, 0xe8, 0x6d, 0x18, 0x16, 0xf6, 0x93, 0x22, 0x86, 0xd1, 0xe5, 0x3e, 0xda, 0x13, 0xe6, - 0x97, 0xbc, 0xcd, 0xcb, 0xf2, 0x11, 0x2c, 0x4a, 0x7b, 0xb6, 0x2b, 0x1b, 0x44, 0x7f, 0xdd, 0x82, - 0x09, 0xf1, 0x1b, 0x93, 0xb7, 0x3a, 0x24, 0x8c, 0x04, 0xef, 0xf9, 0xe1, 0xfe, 0xfb, 0x20, 0x2a, - 0xf2, 0xae, 0x7c, 0x58, 0x1e, 0xb3, 0x26, 0xb0, 0x67, 0x8f, 0x12, 0xbd, 0x40, 0xff, 0xd0, 0x82, - 0x53, 0x2d, 0xe7, 0x1e, 0x6f, 0x91, 0x97, 0x61, 0x27, 0x72, 0x7d, 0x61, 0x87, 0xf0, 0xd1, 0xfe, - 0xa6, 0x3f, 0x55, 0x9d, 0x77, 0x52, 0x2a, 0x4b, 0x4f, 0x65, 0xa1, 0xf4, 0xec, 0x6a, 0x66, 0xbf, - 0xe6, 0xb6, 0x60, 0x44, 0xae, 0xb7, 0x0c, 0x51, 0x43, 0x59, 0x67, 0xac, 0x8f, 0x6c, 0xbe, 0xaa, - 0xc7, 0x2a, 0xa0, 0xed, 0x88, 0xb5, 0xf6, 0x50, 0xdb, 0x79, 0x13, 0xc6, 0xf4, 0x35, 0xf6, 0x50, - 0xdb, 0x7a, 0x0b, 0x66, 0x32, 0xd6, 0xd2, 0x43, 0x6d, 0xf2, 0x2e, 0x9c, 0xcd, 0x5d, 0x1f, 0x0f, - 0xb3, 0x61, 0xfb, 0x67, 0x2d, 0xfd, 0x1c, 0x3c, 0x01, 0xd5, 0xc1, 0xb2, 0xa9, 0x3a, 0x38, 0xdf, - 0x7d, 0xe7, 0xe4, 0xe8, 0x0f, 0xde, 0xd0, 0x3b, 0x4d, 0x4f, 0x75, 0xf4, 0x1a, 0x0c, 0x35, 0x69, - 0x89, 0xb4, 0xc2, 0xb5, 0x7b, 0xef, 0xc8, 0x98, 0x97, 0x62, 0xe5, 0x21, 0x16, 0x14, 0xec, 0x5f, - 0xb4, 0x60, 0xe0, 0x04, 0x46, 0x02, 0x9b, 0x23, 0xf1, 0x6c, 0x2e, 0x69, 0x11, 0x5e, 0x79, 0x01, - 0x3b, 0x77, 0x57, 0xee, 0x45, 0xc4, 0x0b, 0xd9, 0x53, 0x31, 0x73, 0x60, 0x7e, 0xd2, 0x82, 0x99, - 0x1b, 0xbe, 0xd3, 0x58, 0x72, 0x9a, 0x8e, 0x57, 0x27, 0x41, 0xc5, 0xdb, 0x3e, 0x92, 0x09, 0x79, - 0xa1, 0xa7, 0x09, 0xf9, 0xb2, 0xb4, 0xc0, 0x1a, 0xc8, 0x9f, 0x3f, 0xca, 0x48, 0x26, 0xa3, 0xcc, - 0x18, 0xb6, 0xc2, 0x3b, 0x80, 0xf4, 0x5e, 0x0a, 0x87, 0x1e, 0x0c, 0xc3, 0x2e, 0xef, 0xaf, 0x98, - 0xc4, 0x27, 0xb3, 0x19, 0xbc, 0xd4, 0xe7, 0x69, 0xae, 0x2a, 0xbc, 0x00, 0x4b, 0x42, 0xf6, 0x4b, - 0x90, 0x19, 0x15, 0xa0, 0xb7, 0xf0, 0xc1, 0xfe, 0x24, 0x4c, 0xb3, 0x9a, 0x47, 0x7c, 0x18, 0xdb, - 0x09, 0xd9, 0x66, 0x46, 0xbc, 0x40, 0xfb, 0x0b, 0x16, 0x4c, 0xae, 0x27, 0xc2, 0xa8, 0x5d, 0x64, - 0xda, 0xd0, 0x0c, 0x91, 0x7a, 0x8d, 0x95, 0x62, 0x01, 0x3d, 0x76, 0x49, 0xd6, 0x5f, 0x58, 0x10, - 0x07, 0xea, 0x38, 0x01, 0xf6, 0x6d, 0xd9, 0x60, 0xdf, 0x32, 0x25, 0x2c, 0xaa, 0x3b, 0x79, 0xdc, - 0x1b, 0xba, 0xae, 0x42, 0x58, 0x75, 0x11, 0xae, 0xc4, 0x64, 0xf8, 0x52, 0x9c, 0x30, 0xe3, 0x5c, - 0xc9, 0xa0, 0x56, 0xf6, 0x6f, 0x17, 0x00, 0x29, 0xdc, 0xbe, 0x43, 0x6c, 0xa5, 0x6b, 0x1c, 0x4f, - 0x88, 0xad, 0x3d, 0x40, 0x4c, 0x9f, 0x1f, 0x38, 0x5e, 0xc8, 0xc9, 0xba, 0x42, 0x76, 0x77, 0x34, - 0x63, 0x81, 0x39, 0xd1, 0x24, 0xba, 0x91, 0xa2, 0x86, 0x33, 0x5a, 0xd0, 0xec, 0x34, 0x06, 0xfb, - 0xb5, 0xd3, 0x18, 0xea, 0xe1, 0xb4, 0xf7, 0x33, 0x16, 0x8c, 0xab, 0x61, 0x7a, 0x97, 0x98, 0xd4, - 0xab, 0xfe, 0xe4, 0x1c, 0xa0, 0x55, 0xad, 0xcb, 0xec, 0x62, 0xf9, 0x56, 0xe6, 0x7c, 0xe9, 0x34, - 0xdd, 0xb7, 0x89, 0x0a, 0x70, 0x38, 0x2f, 0x9c, 0x29, 0x45, 0xe9, 0xe1, 0xc1, 0xfc, 0xb8, 0xfa, - 0xc7, 0x03, 0x2a, 0xc7, 0x55, 0xe8, 0x91, 0x3c, 0x99, 0x58, 0x8a, 0xe8, 0x45, 0x18, 0x6c, 0xef, - 0x38, 0x21, 0x49, 0xb8, 0x1e, 0x0d, 0x56, 0x69, 0xe1, 0xe1, 0xc1, 0xfc, 0x84, 0xaa, 0xc0, 0x4a, - 0x30, 0xc7, 0xee, 0x3f, 0x70, 0x59, 0x7a, 0x71, 0xf6, 0x0c, 0x5c, 0xf6, 0x27, 0x16, 0x0c, 0xac, - 0xfb, 0x8d, 0x93, 0x38, 0x02, 0x5e, 0x35, 0x8e, 0x80, 0xc7, 0xf2, 0x62, 0xdd, 0xe7, 0xee, 0xfe, - 0xd5, 0xc4, 0xee, 0x3f, 0x9f, 0x4b, 0xa1, 0xfb, 0xc6, 0x6f, 0xc1, 0x28, 0x8b, 0xa0, 0x2f, 0xdc, - 0xac, 0x9e, 0x37, 0x36, 0xfc, 0x7c, 0x62, 0xc3, 0x4f, 0x6a, 0xa8, 0xda, 0x4e, 0x7f, 0x0a, 0x86, - 0x85, 0xdf, 0x4e, 0xd2, 0x87, 0x55, 0xe0, 0x62, 0x09, 0xb7, 0x7f, 0xbc, 0x08, 0x46, 0xc4, 0x7e, - 0xf4, 0xcb, 0x16, 0x2c, 0x04, 0xdc, 0x9e, 0xb7, 0x51, 0xee, 0x04, 0xae, 0xb7, 0x5d, 0xab, 0xef, - 0x90, 0x46, 0xa7, 0xe9, 0x7a, 0xdb, 0x95, 0x6d, 0xcf, 0x57, 0xc5, 0x2b, 0xf7, 0x48, 0xbd, 0xc3, - 0x94, 0x60, 0x3d, 0xd2, 0x03, 0x28, 0xbb, 0xf8, 0xe7, 0xee, 0x1f, 0xcc, 0x2f, 0xe0, 0x23, 0xd1, - 0xc6, 0x47, 0xec, 0x0b, 0xfa, 0x0d, 0x0b, 0x2e, 0xf3, 0x40, 0xf6, 0xfd, 0xf7, 0xbf, 0xcb, 0x6b, - 0xb9, 0x2a, 0x49, 0xc5, 0x44, 0x36, 0x48, 0xd0, 0x5a, 0xfa, 0x88, 0x18, 0xd0, 0xcb, 0xd5, 0xa3, - 0xb5, 0x85, 0x8f, 0xda, 0x39, 0xfb, 0x5f, 0x14, 0x61, 0x5c, 0x04, 0xb8, 0x12, 0x77, 0xc0, 0x8b, - 0xc6, 0x92, 0x78, 0x3c, 0xb1, 0x24, 0xa6, 0x0d, 0xe4, 0xe3, 0x39, 0xfe, 0x43, 0x98, 0xa6, 0x87, - 0xf3, 0x35, 0xe2, 0x04, 0xd1, 0x26, 0x71, 0xb8, 0xf9, 0x55, 0xf1, 0xc8, 0xa7, 0xbf, 0x12, 0xcf, - 0xdd, 0x48, 0x12, 0xc3, 0x69, 0xfa, 0xdf, 0x4c, 0x77, 0x8e, 0x07, 0x53, 0xa9, 0x18, 0x65, 0x9f, - 0x82, 0x92, 0x72, 0x3a, 0x11, 0x87, 0x4e, 0xf7, 0x50, 0x7f, 0x49, 0x0a, 0x5c, 0x84, 0x16, 0x3b, - 0x3c, 0xc5, 0xe4, 0xec, 0x7f, 0x54, 0x30, 0x1a, 0xe4, 0x93, 0xb8, 0x0e, 0x23, 0x4e, 0x18, 0xba, - 0xdb, 0x1e, 0x69, 0x88, 0x1d, 0xfb, 0xfe, 0xbc, 0x1d, 0x6b, 0x34, 0xc3, 0x1c, 0x7f, 0x16, 0x45, - 0x4d, 0xac, 0x68, 0xa0, 0x6b, 0xdc, 0xc8, 0x6d, 0x4f, 0xbe, 0xf7, 0xfa, 0xa3, 0x06, 0xd2, 0x0c, - 0x6e, 0x8f, 0x60, 0x51, 0x1f, 0x7d, 0x9a, 0x5b, 0x21, 0x5e, 0xf7, 0xfc, 0xbb, 0xde, 0x55, 0xdf, - 0x97, 0x41, 0x24, 0xfa, 0x23, 0x38, 0x2d, 0x6d, 0x0f, 0x55, 0x75, 0x6c, 0x52, 0xeb, 0x2f, 0xe8, - 0xe7, 0xe7, 0x60, 0x86, 0x92, 0x36, 0x7d, 0xbc, 0x43, 0x44, 0x60, 0x52, 0x44, 0x4f, 0x93, 0x65, - 0x62, 0xec, 0x32, 0x9f, 0x72, 0x66, 0xed, 0x58, 0x8e, 0x7c, 0xdd, 0x24, 0x81, 0x93, 0x34, 0xed, - 0x9f, 0xb2, 0x80, 0xf9, 0xbb, 0x9e, 0x00, 0x3f, 0xf2, 0x31, 0x93, 0x1f, 0x99, 0xcd, 0x1b, 0xe4, - 0x1c, 0x56, 0xe4, 0x05, 0xbe, 0xb2, 0xaa, 0x81, 0x7f, 0x6f, 0x5f, 0x98, 0x8e, 0xf4, 0x7e, 0x7f, - 0xd8, 0xff, 0xd7, 0xe2, 0x87, 0x98, 0x72, 0x09, 0x41, 0xdf, 0x0e, 0x23, 0x75, 0xa7, 0xed, 0xd4, - 0x79, 0x7a, 0x99, 0x5c, 0x89, 0x9e, 0x51, 0x69, 0x61, 0x59, 0xd4, 0xe0, 0x12, 0x2a, 0x19, 0x85, - 0x6f, 0x44, 0x16, 0xf7, 0x94, 0x4a, 0xa9, 0x26, 0xe7, 0x76, 0x61, 0xdc, 0x20, 0xf6, 0x50, 0xc5, - 0x19, 0xdf, 0xce, 0xaf, 0x58, 0x15, 0x35, 0xb2, 0x05, 0xd3, 0x9e, 0xf6, 0x9f, 0x5e, 0x28, 0xf2, - 0x71, 0xf9, 0xfe, 0x5e, 0x97, 0x28, 0xbb, 0x7d, 0x34, 0x57, 0xda, 0x04, 0x19, 0x9c, 0xa6, 0x6c, - 0xff, 0x84, 0x05, 0x8f, 0xe8, 0x88, 0x9a, 0xb7, 0x4e, 0x2f, 0x1d, 0x41, 0x19, 0x46, 0xfc, 0x36, - 0x09, 0x9c, 0xc8, 0x0f, 0xc4, 0xad, 0x71, 0x49, 0x0e, 0xfa, 0x4d, 0x51, 0x7e, 0x28, 0x82, 0xb3, - 0x4b, 0xea, 0xb2, 0x1c, 0xab, 0x9a, 0xf4, 0xf5, 0xc9, 0x06, 0x23, 0x14, 0x7e, 0x59, 0xec, 0x0c, - 0x60, 0xea, 0xf2, 0x10, 0x0b, 0x88, 0xfd, 0x35, 0x8b, 0x2f, 0x2c, 0xbd, 0xeb, 0xe8, 0x2d, 0x98, - 0x6a, 0x39, 0x51, 0x7d, 0x67, 0xe5, 0x5e, 0x3b, 0xe0, 0x1a, 0x17, 0x39, 0x4e, 0x4f, 0xf7, 0x1a, - 0x27, 0xed, 0x23, 0x63, 0xc3, 0xca, 0xb5, 0x04, 0x31, 0x9c, 0x22, 0x8f, 0x36, 0x61, 0x94, 0x95, - 0x31, 0x97, 0xc3, 0xb0, 0x1b, 0x6b, 0x90, 0xd7, 0x9a, 0xb2, 0x38, 0x58, 0x8b, 0xe9, 0x60, 0x9d, - 0xa8, 0xfd, 0xe5, 0x22, 0xdf, 0xed, 0x8c, 0x95, 0x7f, 0x0a, 0x86, 0xdb, 0x7e, 0x63, 0xb9, 0x52, - 0xc6, 0x62, 0x16, 0xd4, 0x35, 0x52, 0xe5, 0xc5, 0x58, 0xc2, 0xd1, 0x25, 0x18, 0x11, 0x3f, 0xa5, - 0x86, 0x8c, 0x9d, 0xcd, 0x02, 0x2f, 0xc4, 0x0a, 0x8a, 0x9e, 0x03, 0x68, 0x07, 0xfe, 0x9e, 0xdb, - 0x60, 0xa1, 0x30, 0x8a, 0xa6, 0xb1, 0x50, 0x55, 0x41, 0xb0, 0x86, 0x85, 0x5e, 0x81, 0xf1, 0x8e, - 0x17, 0x72, 0x76, 0x44, 0x0b, 0x7c, 0xab, 0xcc, 0x58, 0x6e, 0xe9, 0x40, 0x6c, 0xe2, 0xa2, 0x45, - 0x18, 0x8a, 0x1c, 0x66, 0xfc, 0x32, 0x98, 0x6f, 0x7c, 0xbb, 0x41, 0x31, 0xf4, 0x4c, 0x26, 0xb4, - 0x02, 0x16, 0x15, 0xd1, 0xa7, 0xa4, 0xf7, 0x2f, 0x3f, 0xd8, 0x85, 0xd5, 0x7b, 0x7f, 0x97, 0x80, - 0xe6, 0xfb, 0x2b, 0xac, 0xe9, 0x0d, 0x5a, 0xe8, 0x65, 0x00, 0x72, 0x2f, 0x22, 0x81, 0xe7, 0x34, - 0x95, 0x6d, 0x99, 0xe2, 0x0b, 0xca, 0xfe, 0xba, 0x1f, 0xdd, 0x0a, 0xc9, 0x8a, 0xc2, 0xc0, 0x1a, - 0xb6, 0xfd, 0x1b, 0x25, 0x80, 0x98, 0x6f, 0x47, 0x6f, 0xa7, 0x0e, 0xae, 0x67, 0xba, 0x73, 0xfa, - 0xc7, 0x77, 0x6a, 0xa1, 0xef, 0xb1, 0x60, 0xd4, 0x69, 0x36, 0xfd, 0xba, 0xc3, 0x43, 0x13, 0x17, - 0xba, 0x1f, 0x9c, 0xa2, 0xfd, 0xc5, 0xb8, 0x06, 0xef, 0xc2, 0xf3, 0x72, 0x85, 0x6a, 0x90, 0x9e, - 0xbd, 0xd0, 0x1b, 0x46, 0x1f, 0x92, 0x4f, 0xc5, 0xa2, 0x31, 0x94, 0xea, 0xa9, 0x58, 0x62, 0x77, - 0x84, 0xfe, 0x4a, 0xbc, 0x65, 0xbc, 0x12, 0x07, 0xf2, 0xdd, 0x1b, 0x0d, 0xf6, 0xb5, 0xd7, 0x03, - 0x11, 0x55, 0xf5, 0x50, 0x07, 0x83, 0xf9, 0xbe, 0x84, 0xda, 0x3b, 0xa9, 0x47, 0x98, 0x83, 0x37, - 0x61, 0xb2, 0x61, 0x32, 0x01, 0x62, 0x25, 0x3e, 0x99, 0x47, 0x37, 0xc1, 0x33, 0xc4, 0xd7, 0x7e, - 0x02, 0x80, 0x93, 0x84, 0x51, 0x95, 0x47, 0xbe, 0xa8, 0x78, 0x5b, 0xbe, 0xf0, 0xbc, 0xb0, 0x73, - 0xe7, 0x72, 0x3f, 0x8c, 0x48, 0x8b, 0x62, 0xc6, 0xb7, 0xfb, 0xba, 0xa8, 0x8b, 0x15, 0x15, 0xf4, - 0x1a, 0x0c, 0x31, 0x67, 0xb2, 0x70, 0x76, 0x24, 0x5f, 0xe2, 0x6c, 0x86, 0x72, 0x8b, 0x37, 0x24, - 0xfb, 0x1b, 0x62, 0x41, 0x01, 0x5d, 0x93, 0xae, 0x9a, 0x61, 0xc5, 0xbb, 0x15, 0x12, 0xe6, 0xaa, - 0x59, 0x5a, 0x7a, 0x7f, 0xec, 0x85, 0xc9, 0xcb, 0x33, 0xf3, 0x9d, 0x19, 0x35, 0x29, 0x17, 0x25, - 0xfe, 0xcb, 0x34, 0x6a, 0xb3, 0x90, 0xdf, 0x3d, 0x33, 0xd5, 0x5a, 0x3c, 0x9c, 0xb7, 0x4d, 0x12, - 0x38, 0x49, 0x93, 0x72, 0xa4, 0x7c, 0xd7, 0x0b, 0xdf, 0x8d, 0x5e, 0x67, 0x07, 0x7f, 0x88, 0xb3, - 0xdb, 0x88, 0x97, 0x60, 0x51, 0xff, 0x44, 0xd9, 0x83, 0x39, 0x0f, 0xa6, 0x92, 0x5b, 0xf4, 0xa1, - 0xb2, 0x23, 0x7f, 0x30, 0x00, 0x13, 0xe6, 0x92, 0x42, 0x97, 0xa1, 0x24, 0x88, 0xa8, 0xd4, 0x07, - 0x6a, 0x97, 0xac, 0x49, 0x00, 0x8e, 0x71, 0x58, 0xc6, 0x0b, 0x56, 0x5d, 0x33, 0xd6, 0x8d, 0x33, - 0x5e, 0x28, 0x08, 0xd6, 0xb0, 0xe8, 0xc3, 0x6a, 0xd3, 0xf7, 0x23, 0x75, 0x21, 0xa9, 0x75, 0xb7, - 0xc4, 0x4a, 0xb1, 0x80, 0xd2, 0x8b, 0x68, 0x97, 0x04, 0x1e, 0x69, 0x9a, 0x41, 0x92, 0xd5, 0x45, - 0x74, 0x5d, 0x07, 0x62, 0x13, 0x97, 0x5e, 0xa7, 0x7e, 0xc8, 0x16, 0xb2, 0x78, 0xbe, 0xc5, 0xc6, - 0xcf, 0x35, 0xee, 0x2d, 0x2e, 0xe1, 0xe8, 0x93, 0xf0, 0x88, 0x0a, 0x04, 0x85, 0xb9, 0x36, 0x43, - 0xb6, 0x38, 0x64, 0x48, 0x5b, 0x1e, 0x59, 0xce, 0x46, 0xc3, 0x79, 0xf5, 0xd1, 0xab, 0x30, 0x21, - 0x58, 0x7c, 0x49, 0x71, 0xd8, 0x34, 0xb0, 0xb9, 0x6e, 0x40, 0x71, 0x02, 0x5b, 0x86, 0x79, 0x66, - 0x5c, 0xb6, 0xa4, 0x30, 0x92, 0x0e, 0xf3, 0xac, 0xc3, 0x71, 0xaa, 0x06, 0x5a, 0x84, 0x49, 0xce, - 0x83, 0xb9, 0xde, 0x36, 0x9f, 0x13, 0xe1, 0x5a, 0xa5, 0xb6, 0xd4, 0x4d, 0x13, 0x8c, 0x93, 0xf8, - 0xe8, 0x25, 0x18, 0x73, 0x82, 0xfa, 0x8e, 0x1b, 0x91, 0x7a, 0xd4, 0x09, 0xb8, 0xcf, 0x95, 0x66, - 0xa1, 0xb4, 0xa8, 0xc1, 0xb0, 0x81, 0x69, 0xbf, 0x0d, 0x33, 0x19, 0x61, 0x24, 0xe8, 0xc2, 0x71, - 0xda, 0xae, 0xfc, 0xa6, 0x84, 0x19, 0xf3, 0x62, 0xb5, 0x22, 0xbf, 0x46, 0xc3, 0xa2, 0xab, 0x93, - 0x85, 0x9b, 0xd0, 0xb2, 0x26, 0xaa, 0xd5, 0xb9, 0x2a, 0x01, 0x38, 0xc6, 0xb1, 0xff, 0x57, 0x01, - 0x26, 0x33, 0x74, 0x2b, 0x2c, 0x73, 0x5f, 0xe2, 0x91, 0x12, 0x27, 0xea, 0x33, 0xa3, 0x86, 0x17, - 0x8e, 0x10, 0x35, 0xbc, 0xd8, 0x2b, 0x6a, 0xf8, 0xc0, 0x3b, 0x89, 0x1a, 0x6e, 0x8e, 0xd8, 0x60, - 0x5f, 0x23, 0x96, 0x11, 0x69, 0x7c, 0xe8, 0x88, 0x91, 0xc6, 0x8d, 0x41, 0x1f, 0xee, 0x63, 0xd0, - 0x7f, 0xb8, 0x00, 0x53, 0x49, 0x4b, 0xca, 0x13, 0x90, 0xdb, 0xbe, 0x66, 0xc8, 0x6d, 0x2f, 0xf5, - 0xe3, 0x38, 0x9b, 0x2b, 0xc3, 0xc5, 0x09, 0x19, 0xee, 0x07, 0xfb, 0xa2, 0xd6, 0x5d, 0x9e, 0xfb, - 0x77, 0x0a, 0x70, 0x3a, 0xd3, 0x73, 0xf7, 0x04, 0xc6, 0xe6, 0xa6, 0x31, 0x36, 0xcf, 0xf6, 0xed, - 0x54, 0x9c, 0x3b, 0x40, 0x77, 0x12, 0x03, 0x74, 0xb9, 0x7f, 0x92, 0xdd, 0x47, 0xe9, 0xab, 0x45, - 0x38, 0x9f, 0x59, 0x2f, 0x16, 0x7b, 0xae, 0x1a, 0x62, 0xcf, 0xe7, 0x12, 0x62, 0x4f, 0xbb, 0x7b, - 0xed, 0xe3, 0x91, 0x83, 0x0a, 0x77, 0x59, 0x16, 0x13, 0xe1, 0x01, 0x65, 0xa0, 0x86, 0xbb, 0xac, - 0x22, 0x84, 0x4d, 0xba, 0xdf, 0x4c, 0xb2, 0xcf, 0x7f, 0x67, 0xc1, 0xd9, 0xcc, 0xb9, 0x39, 0x01, - 0x59, 0xd7, 0xba, 0x29, 0xeb, 0x7a, 0xaa, 0xef, 0xd5, 0x9a, 0x23, 0xfc, 0xfa, 0xb5, 0x81, 0x9c, - 0x6f, 0x61, 0x2f, 0xf9, 0x9b, 0x30, 0xea, 0xd4, 0xeb, 0x24, 0x0c, 0xd7, 0xfc, 0x86, 0x0a, 0x8c, - 0xfc, 0x2c, 0x7b, 0x67, 0xc5, 0xc5, 0x87, 0x07, 0xf3, 0x73, 0x49, 0x12, 0x31, 0x18, 0xeb, 0x14, - 0xd0, 0xa7, 0x61, 0x24, 0x14, 0xf7, 0xa6, 0x98, 0xfb, 0xe7, 0xfb, 0x1c, 0x1c, 0x67, 0x93, 0x34, - 0xcd, 0xc8, 0x4d, 0x4a, 0x52, 0xa1, 0x48, 0x9a, 0x51, 0x5e, 0x0a, 0xc7, 0x1a, 0xe5, 0xe5, 0x39, - 0x80, 0x3d, 0xf5, 0x18, 0x48, 0xca, 0x1f, 0xb4, 0x67, 0x82, 0x86, 0x85, 0x3e, 0x0e, 0x53, 0x21, - 0x0f, 0x6d, 0xb8, 0xdc, 0x74, 0x42, 0xe6, 0x2c, 0x23, 0x56, 0x21, 0x8b, 0x0e, 0x55, 0x4b, 0xc0, - 0x70, 0x0a, 0x1b, 0xad, 0xca, 0x56, 0x59, 0x1c, 0x46, 0xbe, 0x30, 0x2f, 0xc6, 0x2d, 0x8a, 0xbc, - 0xc1, 0xa7, 0x92, 0xc3, 0xcf, 0x06, 0x5e, 0xab, 0x89, 0x3e, 0x0d, 0x40, 0x97, 0x8f, 0x90, 0x43, - 0x0c, 0xe7, 0x1f, 0x9e, 0xf4, 0x54, 0x69, 0x64, 0xda, 0xf6, 0x32, 0x0f, 0xd7, 0xb2, 0x22, 0x82, - 0x35, 0x82, 0xf6, 0x0f, 0x0f, 0xc0, 0xa3, 0x5d, 0xce, 0x48, 0xb4, 0x68, 0xea, 0x61, 0x9f, 0x4e, - 0x3e, 0xae, 0xe7, 0x32, 0x2b, 0x1b, 0xaf, 0xed, 0xc4, 0x52, 0x2c, 0xbc, 0xe3, 0xa5, 0xf8, 0x03, - 0x96, 0x26, 0xf6, 0xe0, 0x16, 0x9f, 0x1f, 0x3b, 0xe2, 0xd9, 0x7f, 0x8c, 0x72, 0x90, 0xad, 0x0c, - 0x61, 0xc2, 0x73, 0x7d, 0x77, 0xa7, 0x6f, 0xe9, 0xc2, 0xc9, 0x4a, 0x89, 0x7f, 0xcb, 0x82, 0x73, - 0x5d, 0x43, 0x7c, 0x7c, 0x03, 0x32, 0x0c, 0xf6, 0xe7, 0x2d, 0x78, 0x3c, 0xb3, 0x86, 0x61, 0x66, - 0x74, 0x19, 0x4a, 0x75, 0x5a, 0xa8, 0x79, 0x69, 0xc6, 0xee, 0xeb, 0x12, 0x80, 0x63, 0x9c, 0x23, - 0x86, 0x2f, 0xf9, 0x15, 0x0b, 0x52, 0x9b, 0xfe, 0x04, 0x6e, 0x9f, 0x8a, 0x79, 0xfb, 0xbc, 0xbf, - 0x9f, 0xd1, 0xcc, 0xb9, 0x78, 0xfe, 0x78, 0x12, 0xce, 0xe4, 0x78, 0x29, 0xed, 0xc1, 0xf4, 0x76, - 0x9d, 0x98, 0xfe, 0xaf, 0xdd, 0xa2, 0xc8, 0x74, 0x75, 0x96, 0x65, 0x99, 0x4d, 0xa7, 0x53, 0x28, - 0x38, 0xdd, 0x04, 0xfa, 0xbc, 0x05, 0xa7, 0x9c, 0xbb, 0xe1, 0x0a, 0xe5, 0x22, 0xdc, 0xfa, 0x52, - 0xd3, 0xaf, 0xef, 0xd2, 0x23, 0x5a, 0x6e, 0x84, 0x17, 0x32, 0x25, 0x3b, 0x77, 0x6a, 0x29, 0x7c, - 0xa3, 0x79, 0x96, 0xea, 0x35, 0x0b, 0x0b, 0x67, 0xb6, 0x85, 0xb0, 0x88, 0xff, 0x4f, 0xdf, 0x28, - 0x5d, 0x3c, 0xb4, 0xb3, 0xdc, 0xc9, 0xf8, 0xb5, 0x28, 0x21, 0x58, 0xd1, 0x41, 0x9f, 0x85, 0xd2, - 0xb6, 0xf4, 0xf1, 0xcc, 0xb8, 0x76, 0xe3, 0x81, 0xec, 0xee, 0xf9, 0xca, 0xd5, 0xb3, 0x0a, 0x09, - 0xc7, 0x44, 0xd1, 0xab, 0x50, 0xf4, 0xb6, 0xc2, 0x6e, 0xd9, 0x52, 0x13, 0x76, 0x78, 0x3c, 0x0e, - 0xc2, 0xfa, 0x6a, 0x0d, 0xd3, 0x8a, 0xe8, 0x1a, 0x14, 0x83, 0xcd, 0x86, 0x10, 0x4b, 0x66, 0x6e, - 0x52, 0xbc, 0x54, 0xce, 0xe9, 0x15, 0xa3, 0x84, 0x97, 0xca, 0x98, 0x92, 0x40, 0x55, 0x18, 0x64, - 0xae, 0x3d, 0xe2, 0x92, 0xcb, 0x64, 0xe7, 0xbb, 0xb8, 0xc8, 0xf1, 0x60, 0x09, 0x0c, 0x01, 0x73, - 0x42, 0x68, 0x03, 0x86, 0xea, 0x2c, 0xb3, 0xa6, 0x88, 0x1b, 0xf7, 0xa1, 0x4c, 0x01, 0x64, 0x97, - 0x94, 0xa3, 0x42, 0x1e, 0xc7, 0x30, 0xb0, 0xa0, 0xc5, 0xa8, 0x92, 0xf6, 0xce, 0x56, 0x28, 0x32, - 0x41, 0x67, 0x53, 0xed, 0x92, 0x49, 0x57, 0x50, 0x65, 0x18, 0x58, 0xd0, 0x42, 0x2f, 0x43, 0x61, - 0xab, 0x2e, 0xdc, 0x76, 0x32, 0x25, 0x91, 0x66, 0x28, 0x8b, 0xa5, 0xa1, 0xfb, 0x07, 0xf3, 0x85, - 0xd5, 0x65, 0x5c, 0xd8, 0xaa, 0xa3, 0x75, 0x18, 0xde, 0xe2, 0xce, 0xef, 0x42, 0xd8, 0xf8, 0x64, - 0xb6, 0x5f, 0x7e, 0xca, 0x3f, 0x9e, 0x7b, 0xac, 0x08, 0x00, 0x96, 0x44, 0x58, 0x38, 0x7d, 0xe5, - 0xc4, 0x2f, 0x42, 0xac, 0x2d, 0x1c, 0x2d, 0xf0, 0x02, 0x67, 0x3a, 0xe2, 0x50, 0x00, 0x58, 0xa3, - 0x48, 0x57, 0xb5, 0x23, 0xd3, 0xf1, 0x8b, 0x60, 0x33, 0x99, 0xab, 0x5a, 0xe5, 0xec, 0xef, 0xb6, - 0xaa, 0x15, 0x12, 0x8e, 0x89, 0xa2, 0x5d, 0x18, 0xdf, 0x0b, 0xdb, 0x3b, 0x44, 0x6e, 0x69, 0x16, - 0x7b, 0x26, 0xe7, 0x5e, 0xbe, 0x2d, 0x10, 0xdd, 0x20, 0xea, 0x38, 0xcd, 0xd4, 0x29, 0xc4, 0x74, - 0xfa, 0xb7, 0x75, 0x62, 0xd8, 0xa4, 0x4d, 0x87, 0xff, 0xad, 0x8e, 0xbf, 0xb9, 0x1f, 0x11, 0x11, - 0x19, 0x2d, 0x73, 0xf8, 0x5f, 0xe7, 0x28, 0xe9, 0xe1, 0x17, 0x00, 0x2c, 0x89, 0xa0, 0xdb, 0x62, - 0x78, 0xd8, 0xe9, 0x39, 0x95, 0x1f, 0xbe, 0x74, 0x51, 0x22, 0xe5, 0x0c, 0x0a, 0x3b, 0x2d, 0x63, - 0x52, 0xec, 0x94, 0x6c, 0xef, 0xf8, 0x91, 0xef, 0x25, 0x4e, 0xe8, 0xe9, 0xfc, 0x53, 0xb2, 0x9a, - 0x81, 0x9f, 0x3e, 0x25, 0xb3, 0xb0, 0x70, 0x66, 0x5b, 0xa8, 0x01, 0x13, 0x6d, 0x3f, 0x88, 0xee, - 0xfa, 0x81, 0x5c, 0x5f, 0xa8, 0x8b, 0xb0, 0xc4, 0xc0, 0x14, 0x2d, 0xb2, 0xa0, 0x83, 0x26, 0x04, - 0x27, 0x68, 0xa2, 0x4f, 0xc0, 0x70, 0x58, 0x77, 0x9a, 0xa4, 0x72, 0x73, 0x76, 0x26, 0xff, 0xfa, - 0xa9, 0x71, 0x94, 0x9c, 0xd5, 0xc5, 0x63, 0xef, 0x73, 0x14, 0x2c, 0xc9, 0xa1, 0x55, 0x18, 0x64, - 0xe9, 0xd2, 0x58, 0x18, 0xbf, 0x9c, 0x28, 0xac, 0x29, 0xab, 0x68, 0x7e, 0x36, 0xb1, 0x62, 0xcc, - 0xab, 0xd3, 0x3d, 0x20, 0xde, 0x0c, 0x7e, 0x38, 0x7b, 0x3a, 0x7f, 0x0f, 0x88, 0xa7, 0xc6, 0xcd, - 0x5a, 0xb7, 0x3d, 0xa0, 0x90, 0x70, 0x4c, 0x94, 0x9e, 0xcc, 0xf4, 0x34, 0x3d, 0xd3, 0xc5, 0x9c, - 0x27, 0xf7, 0x2c, 0x65, 0x27, 0x33, 0x3d, 0x49, 0x29, 0x09, 0xfb, 0xf7, 0x86, 0xd3, 0x3c, 0x0b, - 0x7b, 0x65, 0x7e, 0x97, 0x95, 0x52, 0x40, 0x7e, 0xb8, 0x5f, 0xa1, 0xd7, 0x31, 0xb2, 0xe0, 0x9f, - 0xb7, 0xe0, 0x4c, 0x3b, 0xf3, 0x43, 0x04, 0x03, 0xd0, 0x9f, 0xec, 0x8c, 0x7f, 0xba, 0x0a, 0xf9, - 0x98, 0x0d, 0xc7, 0x39, 0x2d, 0x25, 0x9f, 0x39, 0xc5, 0x77, 0xfc, 0xcc, 0x59, 0x83, 0x11, 0xc6, - 0x64, 0xf6, 0xc8, 0x34, 0x9d, 0x7c, 0xed, 0x31, 0x56, 0x62, 0x59, 0x54, 0xc4, 0x8a, 0x04, 0xfa, - 0x41, 0x0b, 0xce, 0x25, 0xbb, 0x8e, 0x09, 0x03, 0x8b, 0x38, 0x91, 0xfc, 0x81, 0xbb, 0x2a, 0xbe, - 0x3f, 0xc5, 0xff, 0x1b, 0xc8, 0x87, 0xbd, 0x10, 0x70, 0xf7, 0xc6, 0x50, 0x39, 0xe3, 0x85, 0x3d, - 0x64, 0x6a, 0x15, 0xfa, 0x78, 0x65, 0xbf, 0x00, 0x63, 0x2d, 0xbf, 0xe3, 0x45, 0xc2, 0xfa, 0x47, - 0x58, 0x22, 0x30, 0x0d, 0xfc, 0x9a, 0x56, 0x8e, 0x0d, 0xac, 0xc4, 0xdb, 0x7c, 0xe4, 0x81, 0xdf, - 0xe6, 0x6f, 0xc0, 0x98, 0xa7, 0x99, 0xab, 0x0a, 0x7e, 0xe0, 0x62, 0x7e, 0x8c, 0x57, 0xdd, 0xb8, - 0x95, 0xf7, 0x52, 0x2f, 0xc1, 0x06, 0xb5, 0x93, 0x7d, 0xf0, 0x7d, 0xc9, 0xca, 0x60, 0xea, 0xb9, - 0x08, 0xe0, 0xa3, 0xa6, 0x08, 0xe0, 0x62, 0x52, 0x04, 0x90, 0x92, 0x28, 0x1b, 0xaf, 0xff, 0xfe, - 0x53, 0xd8, 0xf4, 0x1b, 0x08, 0xd1, 0x6e, 0xc2, 0x85, 0x5e, 0xd7, 0x12, 0x33, 0x03, 0x6b, 0x28, - 0xfd, 0x61, 0x6c, 0x06, 0xd6, 0xa8, 0x94, 0x31, 0x83, 0xf4, 0x1b, 0x62, 0xc7, 0xfe, 0x1f, 0x16, - 0x14, 0xab, 0x7e, 0xe3, 0x04, 0x1e, 0xbc, 0x1f, 0x33, 0x1e, 0xbc, 0x8f, 0x66, 0x5f, 0x88, 0x8d, - 0x5c, 0x79, 0xf8, 0x4a, 0x42, 0x1e, 0x7e, 0x2e, 0x8f, 0x40, 0x77, 0xe9, 0xf7, 0x4f, 0x16, 0x61, - 0xb4, 0xea, 0x37, 0x94, 0x0d, 0xf6, 0xaf, 0x3d, 0x88, 0x0d, 0x76, 0x6e, 0x22, 0x06, 0x8d, 0x32, - 0xb3, 0x1e, 0x93, 0xee, 0xa7, 0xdf, 0x60, 0xa6, 0xd8, 0x77, 0x88, 0xbb, 0xbd, 0x13, 0x91, 0x46, - 0xf2, 0x73, 0x4e, 0xce, 0x14, 0xfb, 0xbf, 0x5b, 0x30, 0x99, 0x68, 0x1d, 0x35, 0x61, 0xbc, 0xa9, - 0x4b, 0x5b, 0xc5, 0x3a, 0x7d, 0x20, 0x41, 0xad, 0x30, 0x65, 0xd5, 0x8a, 0xb0, 0x49, 0x1c, 0x2d, - 0x00, 0x28, 0xf5, 0xa3, 0x14, 0xeb, 0x31, 0xae, 0x5f, 0xe9, 0x27, 0x43, 0xac, 0x61, 0xa0, 0x17, - 0x61, 0x34, 0xf2, 0xdb, 0x7e, 0xd3, 0xdf, 0xde, 0xbf, 0x4e, 0x64, 0x50, 0x27, 0x65, 0xa0, 0xb6, - 0x11, 0x83, 0xb0, 0x8e, 0x67, 0xff, 0x74, 0x91, 0x7f, 0xa8, 0x17, 0xb9, 0xef, 0xad, 0xc9, 0x77, - 0xf7, 0x9a, 0xfc, 0xaa, 0x05, 0x53, 0xb4, 0x75, 0x66, 0x03, 0x23, 0x2f, 0x5b, 0x15, 0xdb, 0xd9, - 0xea, 0x12, 0xdb, 0xf9, 0x22, 0x3d, 0xbb, 0x1a, 0x7e, 0x27, 0x12, 0x12, 0x34, 0xed, 0x70, 0xa2, - 0xa5, 0x58, 0x40, 0x05, 0x1e, 0x09, 0x02, 0xe1, 0xb7, 0xa7, 0xe3, 0x91, 0x20, 0xc0, 0x02, 0x2a, - 0x43, 0x3f, 0x0f, 0x64, 0x87, 0x7e, 0xe6, 0x21, 0x2a, 0x85, 0xb5, 0x84, 0x60, 0x7b, 0xb4, 0x10, - 0x95, 0xd2, 0x8c, 0x22, 0xc6, 0xb1, 0x7f, 0xb6, 0x08, 0x63, 0x55, 0xbf, 0x11, 0x2b, 0x00, 0x5f, - 0x30, 0x14, 0x80, 0x17, 0x12, 0x0a, 0xc0, 0x29, 0x1d, 0xf7, 0x3d, 0x75, 0xdf, 0xd7, 0x4b, 0xdd, - 0xf7, 0xcf, 0x2d, 0x36, 0x6b, 0xe5, 0xf5, 0x1a, 0x37, 0xa9, 0x42, 0x57, 0x60, 0x94, 0x1d, 0x48, - 0xcc, 0x51, 0x54, 0x6a, 0xc5, 0x58, 0x4a, 0xa3, 0xf5, 0xb8, 0x18, 0xeb, 0x38, 0xe8, 0x12, 0x8c, - 0x84, 0xc4, 0x09, 0xea, 0x3b, 0xea, 0x8c, 0x13, 0x2a, 0x2c, 0x5e, 0x86, 0x15, 0x14, 0xbd, 0x1e, - 0x47, 0x47, 0x2c, 0xe6, 0x3b, 0x9e, 0xe9, 0xfd, 0xe1, 0x5b, 0x24, 0x3f, 0x24, 0xa2, 0x7d, 0x07, - 0x50, 0x1a, 0xbf, 0x8f, 0xb0, 0x60, 0xf3, 0x66, 0x58, 0xb0, 0x52, 0x2a, 0x24, 0xd8, 0x9f, 0x5b, - 0x30, 0x51, 0xf5, 0x1b, 0x74, 0xeb, 0x7e, 0x33, 0xed, 0x53, 0x3d, 0x34, 0xec, 0x50, 0x97, 0xd0, - 0xb0, 0x4f, 0xc0, 0x60, 0xd5, 0x6f, 0x54, 0xaa, 0xdd, 0xbc, 0xbe, 0xed, 0xbf, 0x6b, 0xc1, 0x70, - 0xd5, 0x6f, 0x9c, 0x80, 0x70, 0xfe, 0xa3, 0xa6, 0x70, 0xfe, 0x91, 0x9c, 0x75, 0x93, 0x23, 0x8f, - 0xff, 0xdb, 0x03, 0x30, 0x4e, 0xfb, 0xe9, 0x6f, 0xcb, 0xa9, 0x34, 0x86, 0xcd, 0xea, 0x63, 0xd8, - 0x28, 0x2f, 0xec, 0x37, 0x9b, 0xfe, 0xdd, 0xe4, 0xb4, 0xae, 0xb2, 0x52, 0x2c, 0xa0, 0xe8, 0x19, - 0x18, 0x69, 0x07, 0x64, 0xcf, 0xf5, 0x05, 0x93, 0xa9, 0xa9, 0x3a, 0xaa, 0xa2, 0x1c, 0x2b, 0x0c, - 0xfa, 0x38, 0x0b, 0x5d, 0xaf, 0x4e, 0x6a, 0xa4, 0xee, 0x7b, 0x0d, 0x2e, 0xbf, 0x2e, 0x8a, 0xf4, - 0x0e, 0x5a, 0x39, 0x36, 0xb0, 0xd0, 0x1d, 0x28, 0xb1, 0xff, 0xec, 0xd8, 0x39, 0x7a, 0xa2, 0x50, - 0x91, 0x38, 0x4e, 0x10, 0xc0, 0x31, 0x2d, 0xf4, 0x1c, 0x40, 0x24, 0x63, 0x80, 0x87, 0x22, 0x04, - 0x94, 0x62, 0xc8, 0x55, 0x74, 0xf0, 0x10, 0x6b, 0x58, 0xe8, 0x69, 0x28, 0x45, 0x8e, 0xdb, 0xbc, - 0xe1, 0x7a, 0x24, 0x64, 0x72, 0xe9, 0xa2, 0xcc, 0xdf, 0x26, 0x0a, 0x71, 0x0c, 0xa7, 0x0c, 0x11, - 0x8b, 0x8f, 0xc0, 0xd3, 0x0c, 0x8f, 0x30, 0x6c, 0xc6, 0x10, 0xdd, 0x50, 0xa5, 0x58, 0xc3, 0x40, - 0x3b, 0xf0, 0x98, 0xeb, 0xb1, 0x54, 0x08, 0xa4, 0xb6, 0xeb, 0xb6, 0x37, 0x6e, 0xd4, 0x6e, 0x93, - 0xc0, 0xdd, 0xda, 0x5f, 0x72, 0xea, 0xbb, 0xc4, 0x93, 0x29, 0x20, 0xdf, 0x2f, 0xba, 0xf8, 0x58, - 0xa5, 0x0b, 0x2e, 0xee, 0x4a, 0xc9, 0x7e, 0x09, 0x4e, 0x57, 0xfd, 0x46, 0xd5, 0x0f, 0xa2, 0x55, - 0x3f, 0xb8, 0xeb, 0x04, 0x0d, 0xb9, 0x52, 0xe6, 0x65, 0xac, 0x02, 0x7a, 0x14, 0x0e, 0xf2, 0x83, - 0xc2, 0x88, 0x43, 0xf0, 0x3c, 0x63, 0xbe, 0x8e, 0xe8, 0x61, 0x53, 0x67, 0x6c, 0x80, 0xca, 0x0b, - 0x72, 0xd5, 0x89, 0x08, 0xba, 0xc9, 0xf2, 0x1d, 0xc7, 0x37, 0xa2, 0xa8, 0xfe, 0x94, 0x96, 0xef, - 0x38, 0x06, 0x66, 0x5e, 0xa1, 0x66, 0x7d, 0xfb, 0x7f, 0x0e, 0xb2, 0xc3, 0x31, 0x91, 0x5b, 0x02, - 0x7d, 0x06, 0x26, 0x42, 0x72, 0xc3, 0xf5, 0x3a, 0xf7, 0xa4, 0x4c, 0xa0, 0x8b, 0x8f, 0x54, 0x6d, - 0x45, 0xc7, 0xe4, 0x92, 0x45, 0xb3, 0x0c, 0x27, 0xa8, 0xa1, 0x16, 0x4c, 0xdc, 0x75, 0xbd, 0x86, - 0x7f, 0x37, 0x94, 0xf4, 0x47, 0xf2, 0x05, 0x8c, 0x77, 0x38, 0x66, 0xa2, 0x8f, 0x46, 0x73, 0x77, - 0x0c, 0x62, 0x38, 0x41, 0x9c, 0x2e, 0xc0, 0xa0, 0xe3, 0x2d, 0x86, 0xb7, 0x42, 0x12, 0x88, 0xcc, - 0xd5, 0x6c, 0x01, 0x62, 0x59, 0x88, 0x63, 0x38, 0x5d, 0x80, 0xec, 0xcf, 0xd5, 0xc0, 0xef, 0xf0, - 0x48, 0xfd, 0x62, 0x01, 0x62, 0x55, 0x8a, 0x35, 0x0c, 0xba, 0x41, 0xd9, 0xbf, 0x75, 0xdf, 0xc3, - 0xbe, 0x1f, 0xc9, 0x2d, 0xcd, 0x72, 0xa5, 0x6a, 0xe5, 0xd8, 0xc0, 0x42, 0xab, 0x80, 0xc2, 0x4e, - 0xbb, 0xdd, 0x64, 0xc6, 0x17, 0x4e, 0x93, 0x91, 0xe2, 0x8a, 0xef, 0x22, 0x0f, 0x60, 0x5a, 0x4b, - 0x41, 0x71, 0x46, 0x0d, 0x7a, 0x56, 0x6f, 0x89, 0xae, 0x0e, 0xb2, 0xae, 0x72, 0x65, 0x44, 0x8d, - 0xf7, 0x53, 0xc2, 0xd0, 0x0a, 0x0c, 0x87, 0xfb, 0x61, 0x3d, 0x12, 0x91, 0xd8, 0x72, 0xd2, 0x07, - 0xd5, 0x18, 0x8a, 0x96, 0xbd, 0x8e, 0x57, 0xc1, 0xb2, 0x2e, 0xaa, 0xc3, 0x8c, 0xa0, 0xb8, 0xbc, - 0xe3, 0x78, 0x2a, 0x19, 0x0b, 0xb7, 0x41, 0xbd, 0x72, 0xff, 0x60, 0x7e, 0x46, 0xb4, 0xac, 0x83, - 0x0f, 0x0f, 0xe6, 0xcf, 0x54, 0xfd, 0x46, 0x06, 0x04, 0x67, 0x51, 0xe3, 0x8b, 0xaf, 0x5e, 0xf7, - 0x5b, 0xed, 0x6a, 0xe0, 0x6f, 0xb9, 0x4d, 0xd2, 0x4d, 0xa1, 0x53, 0x33, 0x30, 0xc5, 0xe2, 0x33, - 0xca, 0x70, 0x82, 0x9a, 0xfd, 0xed, 0x8c, 0x9f, 0x61, 0xc9, 0x9a, 0xa3, 0x4e, 0x40, 0x50, 0x0b, - 0xc6, 0xdb, 0x6c, 0x9b, 0x88, 0xf8, 0xf9, 0x62, 0xad, 0xbf, 0xd0, 0xa7, 0x60, 0xe2, 0x2e, 0xbd, - 0x06, 0x94, 0xe0, 0x90, 0xbd, 0xf8, 0xaa, 0x3a, 0x39, 0x6c, 0x52, 0xb7, 0x7f, 0xec, 0x11, 0x76, - 0x23, 0xd6, 0xb8, 0xb4, 0x61, 0x58, 0x98, 0xbc, 0x8b, 0xa7, 0xd5, 0x5c, 0xbe, 0xd8, 0x2b, 0x9e, - 0x16, 0x61, 0x36, 0x8f, 0x65, 0x5d, 0xf4, 0x69, 0x98, 0xa0, 0x2f, 0x15, 0x2d, 0x0b, 0xca, 0xa9, - 0xfc, 0xd0, 0x04, 0x71, 0xf2, 0x13, 0x2d, 0xb7, 0x86, 0x5e, 0x19, 0x27, 0x88, 0xa1, 0xd7, 0x99, - 0x71, 0x86, 0x99, 0x60, 0xa5, 0x07, 0x69, 0xdd, 0x0e, 0x43, 0x92, 0xd5, 0x88, 0xe4, 0x25, 0x6f, - 0xb1, 0x1f, 0x6e, 0xf2, 0x16, 0x74, 0x03, 0xc6, 0x45, 0xc6, 0x62, 0xb1, 0x72, 0x8b, 0x86, 0x34, - 0x6e, 0x1c, 0xeb, 0xc0, 0xc3, 0x64, 0x01, 0x36, 0x2b, 0xa3, 0x6d, 0x38, 0xa7, 0x65, 0x10, 0xba, - 0x1a, 0x38, 0x4c, 0xa5, 0xee, 0xb2, 0xe3, 0x54, 0xbb, 0xab, 0x1f, 0xbf, 0x7f, 0x30, 0x7f, 0x6e, - 0xa3, 0x1b, 0x22, 0xee, 0x4e, 0x07, 0xdd, 0x84, 0xd3, 0xdc, 0xb1, 0xb6, 0x4c, 0x9c, 0x46, 0xd3, - 0xf5, 0x14, 0x33, 0xc0, 0xb7, 0xfc, 0xd9, 0xfb, 0x07, 0xf3, 0xa7, 0x17, 0xb3, 0x10, 0x70, 0x76, - 0x3d, 0xf4, 0x51, 0x28, 0x35, 0xbc, 0x50, 0x8c, 0xc1, 0x90, 0x91, 0xa4, 0xa9, 0x54, 0x5e, 0xaf, - 0xa9, 0xef, 0x8f, 0xff, 0xe0, 0xb8, 0x02, 0xda, 0xe6, 0x12, 0x5b, 0x25, 0x20, 0x19, 0x4e, 0x05, - 0x16, 0x4a, 0x8a, 0xda, 0x0c, 0xd7, 0x3a, 0xae, 0xaa, 0x50, 0x16, 0xe7, 0x86, 0xd7, 0x9d, 0x41, - 0x18, 0xbd, 0x06, 0x88, 0xbe, 0x20, 0xdc, 0x3a, 0x59, 0xac, 0xb3, 0xe4, 0x0c, 0x4c, 0xc0, 0x3d, - 0x62, 0x3a, 0x7b, 0xd5, 0x52, 0x18, 0x38, 0xa3, 0x16, 0xba, 0x46, 0x4f, 0x15, 0xbd, 0x54, 0x9c, - 0x5a, 0x2a, 0xa5, 0x5e, 0x99, 0xb4, 0x03, 0x52, 0x77, 0x22, 0xd2, 0x30, 0x29, 0xe2, 0x44, 0x3d, - 0xd4, 0x80, 0xc7, 0x9c, 0x4e, 0xe4, 0x33, 0x61, 0xb8, 0x89, 0xba, 0xe1, 0xef, 0x12, 0x8f, 0xe9, - 0xa1, 0x46, 0x96, 0x2e, 0x50, 0x6e, 0x63, 0xb1, 0x0b, 0x1e, 0xee, 0x4a, 0x85, 0x72, 0x89, 0x2a, - 0x87, 0x2e, 0x98, 0xe1, 0x92, 0x32, 0xf2, 0xe8, 0xbe, 0x08, 0xa3, 0x3b, 0x7e, 0x18, 0xad, 0x93, - 0xe8, 0xae, 0x1f, 0xec, 0x8a, 0xa8, 0x97, 0x71, 0xa4, 0xe4, 0x18, 0x84, 0x75, 0x3c, 0xfa, 0x0c, - 0x64, 0x56, 0x12, 0x95, 0x32, 0x53, 0x50, 0x8f, 0xc4, 0x67, 0xcc, 0x35, 0x5e, 0x8c, 0x25, 0x5c, - 0xa2, 0x56, 0xaa, 0xcb, 0x4c, 0xd9, 0x9c, 0x40, 0xad, 0x54, 0x97, 0xb1, 0x84, 0xd3, 0xe5, 0x1a, - 0xee, 0x38, 0x01, 0xa9, 0x06, 0x7e, 0x9d, 0x84, 0x5a, 0x7c, 0xee, 0x47, 0x79, 0x4c, 0x4f, 0xba, - 0x5c, 0x6b, 0x59, 0x08, 0x38, 0xbb, 0x1e, 0x22, 0xe9, 0xec, 0x59, 0x13, 0xf9, 0x5a, 0x82, 0x34, - 0x3f, 0xd3, 0x67, 0x02, 0x2d, 0x0f, 0xa6, 0x54, 0xde, 0x2e, 0x1e, 0xc5, 0x33, 0x9c, 0x9d, 0x64, - 0x6b, 0xbb, 0xff, 0x10, 0xa0, 0x4a, 0xef, 0x52, 0x49, 0x50, 0xc2, 0x29, 0xda, 0x46, 0x44, 0xac, - 0xa9, 0x9e, 0x11, 0xb1, 0x2e, 0x43, 0x29, 0xec, 0x6c, 0x36, 0xfc, 0x96, 0xe3, 0x7a, 0x4c, 0xd9, - 0xac, 0xbd, 0x47, 0x6a, 0x12, 0x80, 0x63, 0x1c, 0xb4, 0x0a, 0x23, 0x8e, 0x54, 0xaa, 0xa0, 0xfc, - 0x18, 0x28, 0x4a, 0x95, 0xc2, 0xc3, 0x02, 0x48, 0x35, 0x8a, 0xaa, 0x8b, 0x5e, 0x81, 0x71, 0xe1, - 0x18, 0x2a, 0x52, 0x46, 0xce, 0x98, 0xde, 0x3b, 0x35, 0x1d, 0x88, 0x4d, 0x5c, 0x74, 0x0b, 0x46, - 0x23, 0xbf, 0xc9, 0x5c, 0x50, 0x28, 0x9b, 0x77, 0x26, 0x3f, 0x9a, 0xd7, 0x86, 0x42, 0xd3, 0xe5, - 0x99, 0xaa, 0x2a, 0xd6, 0xe9, 0xa0, 0x0d, 0xbe, 0xde, 0x59, 0x9c, 0x6a, 0x12, 0xce, 0x3e, 0x92, - 0x7f, 0x27, 0xa9, 0x70, 0xd6, 0xe6, 0x76, 0x10, 0x35, 0xb1, 0x4e, 0x06, 0x5d, 0x85, 0xe9, 0x76, - 0xe0, 0xfa, 0x6c, 0x4d, 0x28, 0x7d, 0xda, 0xac, 0x99, 0x24, 0xa7, 0x9a, 0x44, 0xc0, 0xe9, 0x3a, - 0xcc, 0xaf, 0x57, 0x14, 0xce, 0x9e, 0xe5, 0x59, 0xa5, 0xf9, 0xf3, 0x8e, 0x97, 0x61, 0x05, 0x45, - 0x6b, 0xec, 0x24, 0xe6, 0x92, 0x89, 0xd9, 0xb9, 0xfc, 0xb0, 0x2b, 0xba, 0x04, 0x83, 0x33, 0xaf, - 0xea, 0x2f, 0x8e, 0x29, 0xa0, 0x86, 0x96, 0x7e, 0x90, 0xbe, 0x18, 0xc2, 0xd9, 0xc7, 0xba, 0x98, - 0xaa, 0x25, 0x9e, 0x17, 0x31, 0x43, 0x60, 0x14, 0x87, 0x38, 0x41, 0x13, 0x7d, 0x1c, 0xa6, 0x44, - 0xb0, 0xb8, 0x78, 0x98, 0xce, 0xc5, 0x86, 0xbd, 0x38, 0x01, 0xc3, 0x29, 0x6c, 0x1e, 0xbf, 0xdf, - 0xd9, 0x6c, 0x12, 0x71, 0xf4, 0xdd, 0x70, 0xbd, 0xdd, 0x70, 0xf6, 0x3c, 0x3b, 0x1f, 0x44, 0xfc, - 0xfe, 0x24, 0x14, 0x67, 0xd4, 0x40, 0x1b, 0x30, 0xd5, 0x0e, 0x08, 0x69, 0x31, 0x46, 0x5f, 0xdc, - 0x67, 0xf3, 0xdc, 0xad, 0x9d, 0xf6, 0xa4, 0x9a, 0x80, 0x1d, 0x66, 0x94, 0xe1, 0x14, 0x05, 0x74, - 0x17, 0x46, 0xfc, 0x3d, 0x12, 0xec, 0x10, 0xa7, 0x31, 0x7b, 0xa1, 0x8b, 0xa1, 0xb9, 0xb8, 0xdc, - 0x6e, 0x0a, 0xdc, 0x84, 0x0e, 0x5e, 0x16, 0xf7, 0xd6, 0xc1, 0xcb, 0xc6, 0xd0, 0x0f, 0x59, 0x70, - 0x56, 0x8a, 0xed, 0x6b, 0x6d, 0x3a, 0xea, 0xcb, 0xbe, 0x17, 0x46, 0x01, 0x77, 0xc4, 0x7e, 0x3c, - 0xdf, 0x39, 0x79, 0x23, 0xa7, 0x92, 0x12, 0x8e, 0x9e, 0xcd, 0xc3, 0x08, 0x71, 0x7e, 0x8b, 0x68, - 0x19, 0xa6, 0x43, 0x12, 0xc9, 0xc3, 0x68, 0x31, 0x5c, 0x7d, 0xbd, 0xbc, 0x3e, 0xfb, 0x04, 0xf7, - 0x22, 0xa7, 0x9b, 0xa1, 0x96, 0x04, 0xe2, 0x34, 0xfe, 0xdc, 0xb7, 0xc2, 0x74, 0xea, 0xfa, 0x3f, - 0x4a, 0x5e, 0x92, 0xb9, 0x5d, 0x18, 0x37, 0x86, 0xf8, 0xa1, 0xea, 0x70, 0xff, 0xcd, 0x30, 0x94, - 0x94, 0x7e, 0x0f, 0x5d, 0x36, 0xd5, 0xb6, 0x67, 0x93, 0x6a, 0xdb, 0x11, 0xfa, 0xae, 0xd7, 0x35, - 0xb5, 0x1b, 0x19, 0xb1, 0xb3, 0xf2, 0x36, 0x74, 0xff, 0x4e, 0xd1, 0x9a, 0xb8, 0xb6, 0xd8, 0xb7, - 0xfe, 0x77, 0xa0, 0xab, 0x04, 0xf8, 0x2a, 0x4c, 0x7b, 0x3e, 0xe3, 0x39, 0x49, 0x43, 0x32, 0x14, - 0x8c, 0x6f, 0x28, 0xe9, 0xc1, 0x28, 0x12, 0x08, 0x38, 0x5d, 0x87, 0x36, 0xc8, 0x2f, 0xfe, 0xa4, - 0xc8, 0x99, 0xf3, 0x05, 0x58, 0x40, 0xd1, 0x13, 0x30, 0xd8, 0xf6, 0x1b, 0x95, 0xaa, 0xe0, 0x37, - 0xb5, 0x88, 0x8d, 0x8d, 0x4a, 0x15, 0x73, 0x18, 0x5a, 0x84, 0x21, 0xf6, 0x23, 0x9c, 0x1d, 0xcb, - 0x8f, 0x3a, 0xc0, 0x6a, 0x68, 0x59, 0x5f, 0x58, 0x05, 0x2c, 0x2a, 0x32, 0xd1, 0x17, 0x65, 0xd2, - 0x99, 0xe8, 0x6b, 0xf8, 0x01, 0x45, 0x5f, 0x92, 0x00, 0x8e, 0x69, 0xa1, 0x7b, 0x70, 0xda, 0x78, - 0x18, 0xf1, 0x25, 0x42, 0x42, 0xe1, 0xf9, 0xfc, 0x44, 0xd7, 0x17, 0x91, 0xd0, 0x17, 0x9f, 0x13, - 0x9d, 0x3e, 0x5d, 0xc9, 0xa2, 0x84, 0xb3, 0x1b, 0x40, 0x4d, 0x98, 0xae, 0xa7, 0x5a, 0x1d, 0xe9, - 0xbf, 0x55, 0x35, 0xa1, 0xe9, 0x16, 0xd3, 0x84, 0xd1, 0x2b, 0x30, 0xf2, 0x96, 0x1f, 0xb2, 0xb3, - 0x5a, 0xf0, 0xc8, 0xd2, 0x6d, 0x76, 0xe4, 0xf5, 0x9b, 0x35, 0x56, 0x7e, 0x78, 0x30, 0x3f, 0x5a, - 0xf5, 0x1b, 0xf2, 0x2f, 0x56, 0x15, 0xd0, 0xf7, 0x5a, 0x30, 0x97, 0x7e, 0x79, 0xa9, 0x4e, 0x8f, - 0xf7, 0xdf, 0x69, 0x5b, 0x34, 0x3a, 0xb7, 0x92, 0x4b, 0x0e, 0x77, 0x69, 0xca, 0xfe, 0x25, 0xae, - 0xdb, 0x15, 0x1a, 0x20, 0x12, 0x76, 0x9a, 0x27, 0x91, 0xec, 0x72, 0xc5, 0x50, 0x4e, 0x3d, 0xb0, - 0xfd, 0xc0, 0xbf, 0xb4, 0x98, 0xfd, 0xc0, 0x09, 0x3a, 0x0a, 0xbc, 0x0e, 0x23, 0x91, 0x4c, 0x59, - 0xda, 0x25, 0x3f, 0xa7, 0xd6, 0x29, 0x66, 0x43, 0xa1, 0x38, 0x56, 0x95, 0x9d, 0x54, 0x91, 0xb1, - 0xff, 0x09, 0x9f, 0x01, 0x09, 0x39, 0x01, 0x1d, 0x40, 0xd9, 0xd4, 0x01, 0xcc, 0xf7, 0xf8, 0x82, - 0x1c, 0x5d, 0xc0, 0x3f, 0x36, 0xfb, 0xcd, 0x24, 0x35, 0xef, 0x76, 0xc3, 0x15, 0xfb, 0x0b, 0x16, - 0x40, 0x1c, 0x10, 0x97, 0xc9, 0x97, 0xfd, 0x40, 0x66, 0x3a, 0xcc, 0xca, 0xe9, 0xf3, 0x12, 0xe5, - 0x51, 0xfd, 0xc8, 0xaf, 0xfb, 0x4d, 0xa1, 0xe1, 0x7a, 0x2c, 0x56, 0x43, 0xf0, 0xf2, 0x43, 0xed, - 0x37, 0x56, 0xd8, 0x68, 0x5e, 0x86, 0xdf, 0x2a, 0xc6, 0x8a, 0x31, 0x23, 0xf4, 0xd6, 0x8f, 0x58, - 0x70, 0x2a, 0xcb, 0xea, 0x94, 0xbe, 0x78, 0xb8, 0xcc, 0x4a, 0x19, 0x15, 0xa9, 0xd9, 0xbc, 0x2d, - 0xca, 0xb1, 0xc2, 0xe8, 0x3b, 0x7f, 0xd7, 0xd1, 0x22, 0xd1, 0xde, 0x84, 0xf1, 0x6a, 0x40, 0xb4, - 0xcb, 0xf5, 0x55, 0xee, 0xd2, 0xcd, 0xfb, 0xf3, 0xcc, 0x91, 0xdd, 0xb9, 0xed, 0x2f, 0x17, 0xe0, - 0x14, 0xb7, 0x0a, 0x58, 0xdc, 0xf3, 0xdd, 0x46, 0xd5, 0x6f, 0x88, 0xdc, 0x6b, 0x9f, 0x82, 0xb1, - 0xb6, 0x26, 0x68, 0xec, 0x16, 0x55, 0x51, 0x17, 0x48, 0xc6, 0xa2, 0x11, 0xbd, 0x14, 0x1b, 0xb4, - 0x50, 0x03, 0xc6, 0xc8, 0x9e, 0x5b, 0x57, 0xaa, 0xe5, 0xc2, 0x91, 0x2f, 0x3a, 0xd5, 0xca, 0x8a, - 0x46, 0x07, 0x1b, 0x54, 0x1f, 0x42, 0x56, 0x5d, 0xfb, 0x47, 0x2d, 0x78, 0x24, 0x27, 0x06, 0x23, - 0x6d, 0xee, 0x2e, 0xb3, 0xbf, 0x10, 0xcb, 0x56, 0x35, 0xc7, 0xad, 0x32, 0xb0, 0x80, 0xa2, 0x4f, - 0x00, 0x70, 0xab, 0x0a, 0xfa, 0xe4, 0xee, 0x15, 0xac, 0xce, 0x88, 0xb3, 0xa5, 0x85, 0x4c, 0x92, - 0xf5, 0xb1, 0x46, 0xcb, 0xfe, 0xa9, 0x22, 0x0c, 0xf2, 0x04, 0xe9, 0xab, 0x30, 0xbc, 0xc3, 0x33, - 0x52, 0xf4, 0x93, 0xfc, 0x22, 0x16, 0x86, 0xf0, 0x02, 0x2c, 0x2b, 0xa3, 0x35, 0x98, 0xe1, 0x19, - 0x3d, 0x9a, 0x65, 0xd2, 0x74, 0xf6, 0xa5, 0xe4, 0x8e, 0x67, 0xc3, 0x54, 0x12, 0xcc, 0x4a, 0x1a, - 0x05, 0x67, 0xd5, 0x43, 0xaf, 0xc2, 0x04, 0x7d, 0x49, 0xf9, 0x9d, 0x48, 0x52, 0xe2, 0xb9, 0x3c, - 0xd4, 0xd3, 0x6d, 0xc3, 0x80, 0xe2, 0x04, 0x36, 0x7d, 0xcc, 0xb7, 0x53, 0x32, 0xca, 0xc1, 0xf8, - 0x31, 0x6f, 0xca, 0x25, 0x4d, 0x5c, 0x66, 0x6e, 0xda, 0x61, 0xc6, 0xb5, 0x1b, 0x3b, 0x01, 0x09, - 0x77, 0xfc, 0x66, 0x83, 0x31, 0x7d, 0x83, 0x9a, 0xb9, 0x69, 0x02, 0x8e, 0x53, 0x35, 0x28, 0x95, - 0x2d, 0xc7, 0x6d, 0x76, 0x02, 0x12, 0x53, 0x19, 0x32, 0xa9, 0xac, 0x26, 0xe0, 0x38, 0x55, 0x83, - 0xae, 0xa3, 0xd3, 0xd5, 0xc0, 0xa7, 0x07, 0xa9, 0x0c, 0x2c, 0xa3, 0x6c, 0x88, 0x87, 0xa5, 0x0f, - 0x6c, 0x97, 0x10, 0x6c, 0xc2, 0xca, 0x92, 0x53, 0x30, 0x0c, 0x08, 0x6a, 0xc2, 0xfb, 0x55, 0x52, - 0x41, 0x57, 0x60, 0x54, 0xe4, 0x69, 0x60, 0xa6, 0xae, 0x7c, 0xea, 0x98, 0xc1, 0x43, 0x39, 0x2e, - 0xc6, 0x3a, 0x8e, 0xfd, 0x7d, 0x05, 0x98, 0xc9, 0xf0, 0x55, 0xe0, 0x47, 0xd5, 0xb6, 0x1b, 0x46, - 0x2a, 0xe3, 0x9f, 0x76, 0x54, 0xf1, 0x72, 0xac, 0x30, 0xe8, 0x7e, 0xe0, 0x87, 0x61, 0xf2, 0x00, - 0x14, 0xb6, 0xc0, 0x02, 0x7a, 0xc4, 0xdc, 0x79, 0x17, 0x60, 0xa0, 0x13, 0x12, 0x19, 0x3c, 0x51, - 0x5d, 0x0d, 0x4c, 0x0f, 0xc6, 0x20, 0x94, 0x55, 0xdf, 0x56, 0x2a, 0x25, 0x8d, 0x55, 0xe7, 0x4a, - 0x25, 0x0e, 0xa3, 0x9d, 0x8b, 0x88, 0xe7, 0x78, 0x91, 0x60, 0xe8, 0xe3, 0x28, 0x60, 0xac, 0x14, - 0x0b, 0xa8, 0xfd, 0xc5, 0x22, 0x9c, 0xcd, 0xf5, 0x5e, 0xa2, 0x5d, 0x6f, 0xf9, 0x9e, 0x1b, 0xf9, - 0xca, 0x92, 0x84, 0x47, 0xfe, 0x22, 0xed, 0x9d, 0x35, 0x51, 0x8e, 0x15, 0x06, 0xba, 0x08, 0x83, - 0x4c, 0x8a, 0x96, 0xca, 0x7d, 0xb8, 0x54, 0xe6, 0xa1, 0x60, 0x38, 0xb8, 0xef, 0xbc, 0xb2, 0x4f, - 0xd0, 0x5b, 0xd2, 0x6f, 0x26, 0x0f, 0x2d, 0xda, 0x5d, 0xdf, 0x6f, 0x62, 0x06, 0x44, 0x1f, 0x10, - 0xe3, 0x95, 0x30, 0x9d, 0xc0, 0x4e, 0xc3, 0x0f, 0xb5, 0x41, 0x7b, 0x0a, 0x86, 0x77, 0xc9, 0x7e, - 0xe0, 0x7a, 0xdb, 0x49, 0x93, 0x9a, 0xeb, 0xbc, 0x18, 0x4b, 0xb8, 0x99, 0xc6, 0x6a, 0xf8, 0xb8, - 0x13, 0xc2, 0x8e, 0xf4, 0xbc, 0x02, 0x7f, 0xa0, 0x08, 0x93, 0x78, 0xa9, 0xfc, 0xde, 0x44, 0xdc, - 0x4a, 0x4f, 0xc4, 0x71, 0x27, 0x84, 0xed, 0x3d, 0x1b, 0x3f, 0x6f, 0xc1, 0x24, 0xcb, 0x16, 0x21, - 0x62, 0x46, 0xb9, 0xbe, 0x77, 0x02, 0xec, 0xe6, 0x13, 0x30, 0x18, 0xd0, 0x46, 0x93, 0x49, 0x0f, - 0x59, 0x4f, 0x30, 0x87, 0xa1, 0xc7, 0x60, 0x80, 0x75, 0x81, 0x4e, 0xde, 0x18, 0xcf, 0x17, 0x55, - 0x76, 0x22, 0x07, 0xb3, 0x52, 0x16, 0x08, 0x05, 0x93, 0x76, 0xd3, 0xe5, 0x9d, 0x8e, 0x75, 0x9c, - 0xef, 0x0e, 0xbf, 0xe6, 0xcc, 0xae, 0xbd, 0xb3, 0x40, 0x28, 0xd9, 0x24, 0xbb, 0x3f, 0xe5, 0xfe, - 0xa8, 0x00, 0xe7, 0x33, 0xeb, 0xf5, 0x1d, 0x08, 0xa5, 0x7b, 0xed, 0x87, 0x99, 0x0f, 0xa0, 0x78, - 0x82, 0x06, 0x8b, 0x03, 0xfd, 0x72, 0x98, 0x83, 0x7d, 0xc4, 0x27, 0xc9, 0x1c, 0xb2, 0x77, 0x49, - 0x7c, 0x92, 0xcc, 0xbe, 0xe5, 0x3c, 0x45, 0xff, 0xa2, 0x90, 0xf3, 0x2d, 0xec, 0x51, 0x7a, 0x89, - 0x9e, 0x33, 0x0c, 0x18, 0xca, 0x87, 0x1e, 0x3f, 0x63, 0x78, 0x19, 0x56, 0x50, 0xb4, 0x08, 0x93, - 0x2d, 0xd7, 0xa3, 0x87, 0xcf, 0xbe, 0xc9, 0xf8, 0xa9, 0xf0, 0x51, 0x6b, 0x26, 0x18, 0x27, 0xf1, - 0x91, 0xab, 0xc5, 0x2e, 0x29, 0xe4, 0xa7, 0x11, 0xcf, 0xed, 0xed, 0x82, 0xa9, 0xff, 0x55, 0xa3, - 0x98, 0x11, 0xc7, 0x64, 0x4d, 0x93, 0x45, 0x14, 0xfb, 0x97, 0x45, 0x8c, 0x65, 0xcb, 0x21, 0xe6, - 0x5e, 0x81, 0xf1, 0x07, 0x16, 0x3e, 0xdb, 0x5f, 0x2d, 0xc2, 0xa3, 0x5d, 0xb6, 0x3d, 0x3f, 0xeb, - 0x8d, 0x39, 0xd0, 0xce, 0xfa, 0xd4, 0x3c, 0x54, 0xe1, 0xd4, 0x56, 0xa7, 0xd9, 0xdc, 0x67, 0x3e, - 0x01, 0xa4, 0x21, 0x31, 0x04, 0x4f, 0x29, 0x1f, 0xe0, 0xa7, 0x56, 0x33, 0x70, 0x70, 0x66, 0x4d, - 0xca, 0xd0, 0xd3, 0x9b, 0x64, 0x5f, 0x91, 0x4a, 0x30, 0xf4, 0x58, 0x07, 0x62, 0x13, 0x17, 0x5d, - 0x85, 0x69, 0x67, 0xcf, 0x71, 0x79, 0x00, 0x58, 0x49, 0x80, 0x73, 0xf4, 0x4a, 0x66, 0xb8, 0x98, - 0x44, 0xc0, 0xe9, 0x3a, 0xe8, 0x35, 0x40, 0xfe, 0x26, 0xb3, 0xf6, 0x6d, 0x5c, 0x25, 0x9e, 0x50, - 0xd3, 0xb1, 0xb9, 0x2b, 0xc6, 0x47, 0xc2, 0xcd, 0x14, 0x06, 0xce, 0xa8, 0x95, 0x88, 0x05, 0x32, - 0x94, 0x1f, 0x0b, 0xa4, 0xfb, 0xb9, 0xd8, 0x33, 0x15, 0xc5, 0x7f, 0xb1, 0xe8, 0xf5, 0xc5, 0x99, - 0x7c, 0x33, 0xa4, 0xdd, 0x2b, 0xcc, 0xcc, 0x8e, 0xcb, 0x13, 0xb5, 0x08, 0x16, 0xa7, 0x35, 0x33, - 0xbb, 0x18, 0x88, 0x4d, 0x5c, 0xbe, 0x20, 0xc2, 0xd8, 0x71, 0xd2, 0x60, 0xf1, 0x45, 0xdc, 0x1d, - 0x85, 0x81, 0x3e, 0x09, 0xc3, 0x0d, 0x77, 0xcf, 0x0d, 0x85, 0x34, 0xe5, 0xc8, 0xaa, 0x8b, 0xf8, - 0x1c, 0x2c, 0x73, 0x32, 0x58, 0xd2, 0xb3, 0x7f, 0xa0, 0x00, 0xe3, 0xb2, 0xc5, 0xd7, 0x3b, 0x7e, - 0xe4, 0x9c, 0xc0, 0xb5, 0x7c, 0xd5, 0xb8, 0x96, 0x3f, 0xd0, 0x2d, 0xf8, 0x10, 0xeb, 0x52, 0xee, - 0x75, 0x7c, 0x33, 0x71, 0x1d, 0x3f, 0xd9, 0x9b, 0x54, 0xf7, 0x6b, 0xf8, 0x9f, 0x5a, 0x30, 0x6d, - 0xe0, 0x9f, 0xc0, 0x6d, 0xb0, 0x6a, 0xde, 0x06, 0x8f, 0xf7, 0xfc, 0x86, 0x9c, 0x5b, 0xe0, 0xbb, - 0x8b, 0x89, 0xbe, 0xb3, 0xd3, 0xff, 0x2d, 0x18, 0xd8, 0x71, 0x82, 0x46, 0xb7, 0x60, 0xeb, 0xa9, - 0x4a, 0x0b, 0xd7, 0x9c, 0x40, 0xe8, 0x29, 0x9f, 0x51, 0x59, 0xbc, 0x9d, 0xa0, 0xb7, 0x8e, 0x92, - 0x35, 0x85, 0x5e, 0x82, 0xa1, 0xb0, 0xee, 0xb7, 0x95, 0x15, 0xff, 0x05, 0x9e, 0xe1, 0x9b, 0x96, - 0x1c, 0x1e, 0xcc, 0x23, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0x3e, 0xfa, 0x14, 0x8c, 0xb3, 0x5f, 0xca, - 0x68, 0xa8, 0x98, 0x9f, 0x98, 0xa9, 0xa6, 0x23, 0x72, 0x8b, 0x3a, 0xa3, 0x08, 0x9b, 0xa4, 0xe6, - 0xb6, 0xa1, 0xa4, 0x3e, 0xeb, 0xa1, 0xea, 0x06, 0xff, 0x63, 0x11, 0x66, 0x32, 0xd6, 0x1c, 0x0a, - 0x8d, 0x99, 0xb8, 0xd2, 0xe7, 0x52, 0x7d, 0x87, 0x73, 0x11, 0xb2, 0xd7, 0x50, 0x43, 0xac, 0xad, - 0xbe, 0x1b, 0xbd, 0x15, 0x92, 0x64, 0xa3, 0xb4, 0xa8, 0x77, 0xa3, 0xb4, 0xb1, 0x13, 0x1b, 0x6a, - 0xda, 0x90, 0xea, 0xe9, 0x43, 0x9d, 0xd3, 0x3f, 0x2d, 0xc2, 0xa9, 0xac, 0x78, 0x68, 0xe8, 0x73, - 0x89, 0x54, 0x7f, 0x2f, 0xf4, 0x1b, 0x49, 0x8d, 0xe7, 0xff, 0xe3, 0x32, 0xe0, 0xa5, 0x05, 0x33, - 0xf9, 0x5f, 0xcf, 0x61, 0x16, 0x6d, 0xb2, 0xa0, 0x00, 0x01, 0x4f, 0xd1, 0x28, 0x8f, 0x8f, 0x0f, - 0xf7, 0xdd, 0x01, 0x91, 0xdb, 0x31, 0x4c, 0x18, 0x24, 0xc8, 0xe2, 0xde, 0x06, 0x09, 0xb2, 0xe5, - 0x39, 0x17, 0x46, 0xb5, 0xaf, 0x79, 0xa8, 0x33, 0xbe, 0x4b, 0x6f, 0x2b, 0xad, 0xdf, 0x0f, 0x75, - 0xd6, 0x7f, 0xd4, 0x82, 0x84, 0x8d, 0xba, 0x12, 0x8b, 0x59, 0xb9, 0x62, 0xb1, 0x0b, 0x30, 0x10, - 0xf8, 0x4d, 0x92, 0xcc, 0x89, 0x87, 0xfd, 0x26, 0xc1, 0x0c, 0x42, 0x31, 0xa2, 0x58, 0xd8, 0x31, - 0xa6, 0x3f, 0xe4, 0xc4, 0x13, 0xed, 0x09, 0x18, 0x6c, 0x92, 0x3d, 0xd2, 0x4c, 0xa6, 0x2e, 0xb9, - 0x41, 0x0b, 0x31, 0x87, 0xd9, 0x3f, 0x3f, 0x00, 0xe7, 0xba, 0x86, 0xd5, 0xa0, 0xcf, 0xa1, 0x6d, - 0x27, 0x22, 0x77, 0x9d, 0xfd, 0x64, 0x8e, 0x81, 0xab, 0xbc, 0x18, 0x4b, 0x38, 0xf3, 0x22, 0xe2, - 0xa1, 0x82, 0x13, 0x42, 0x44, 0x11, 0x21, 0x58, 0x40, 0x4d, 0xa1, 0x54, 0xf1, 0x38, 0x84, 0x52, - 0xcf, 0x01, 0x84, 0x61, 0x93, 0x5b, 0xf2, 0x34, 0x84, 0x7b, 0x52, 0x1c, 0x52, 0xba, 0x76, 0x43, - 0x40, 0xb0, 0x86, 0x85, 0xca, 0x30, 0xd5, 0x0e, 0xfc, 0x88, 0xcb, 0x64, 0xcb, 0xdc, 0xd8, 0x6d, - 0xd0, 0x8c, 0x68, 0x50, 0x4d, 0xc0, 0x71, 0xaa, 0x06, 0x7a, 0x11, 0x46, 0x45, 0x94, 0x83, 0xaa, - 0xef, 0x37, 0x85, 0x18, 0x48, 0xd9, 0x7f, 0xd5, 0x62, 0x10, 0xd6, 0xf1, 0xb4, 0x6a, 0x4c, 0xd0, - 0x3b, 0x9c, 0x59, 0x8d, 0x0b, 0x7b, 0x35, 0xbc, 0x44, 0x6c, 0xc4, 0x91, 0xbe, 0x62, 0x23, 0xc6, - 0x82, 0xb1, 0x52, 0xdf, 0xba, 0x2d, 0xe8, 0x29, 0x4a, 0xfa, 0x99, 0x01, 0x98, 0x11, 0x0b, 0xe7, - 0x61, 0x2f, 0x97, 0x5b, 0xe9, 0xe5, 0x72, 0x1c, 0xa2, 0xb3, 0xf7, 0xd6, 0xcc, 0x49, 0xaf, 0x99, - 0x1f, 0xb4, 0xc0, 0x64, 0xaf, 0xd0, 0x5f, 0xca, 0x4d, 0xd2, 0xf2, 0x62, 0x2e, 0xbb, 0xd6, 0x90, - 0x17, 0xc8, 0x3b, 0x4c, 0xd7, 0x62, 0xff, 0x67, 0x0b, 0x1e, 0xef, 0x49, 0x11, 0xad, 0x40, 0x89, - 0xf1, 0x80, 0xda, 0xeb, 0xec, 0x49, 0x65, 0x0c, 0x2b, 0x01, 0x39, 0x2c, 0x69, 0x5c, 0x13, 0xad, - 0xa4, 0xb2, 0xe1, 0x3c, 0x95, 0x91, 0x0d, 0xe7, 0xb4, 0x31, 0x3c, 0x0f, 0x98, 0x0e, 0xe7, 0xfb, - 0xe9, 0x8d, 0x63, 0x38, 0xa2, 0xa0, 0x0f, 0x1b, 0x62, 0x3f, 0x3b, 0x21, 0xf6, 0x43, 0x26, 0xb6, - 0x76, 0x87, 0x7c, 0x1c, 0xa6, 0x58, 0xf8, 0x23, 0x66, 0x9a, 0x2d, 0x5c, 0x64, 0x0a, 0xb1, 0xf9, - 0xe5, 0x8d, 0x04, 0x0c, 0xa7, 0xb0, 0xed, 0x3f, 0x2c, 0xc2, 0x10, 0xdf, 0x7e, 0x27, 0xf0, 0x26, - 0x7c, 0x1a, 0x4a, 0x6e, 0xab, 0xd5, 0xe1, 0x09, 0x4e, 0x06, 0xb9, 0x5f, 0x2c, 0x9d, 0xa7, 0x8a, - 0x2c, 0xc4, 0x31, 0x1c, 0xad, 0x0a, 0x89, 0x73, 0x97, 0x08, 0x8b, 0xbc, 0xe3, 0x0b, 0x65, 0x27, - 0x72, 0x38, 0x83, 0xa3, 0xee, 0xd9, 0x58, 0x36, 0x8d, 0x3e, 0x03, 0x10, 0x46, 0x81, 0xeb, 0x6d, - 0xd3, 0x32, 0x11, 0x50, 0xf4, 0x83, 0x5d, 0xa8, 0xd5, 0x14, 0x32, 0xa7, 0x19, 0x9f, 0x39, 0x0a, - 0x80, 0x35, 0x8a, 0x68, 0xc1, 0xb8, 0xe9, 0xe7, 0x12, 0x73, 0x07, 0x9c, 0x6a, 0x3c, 0x67, 0x73, - 0x1f, 0x81, 0x92, 0x22, 0xde, 0x4b, 0xfe, 0x34, 0xa6, 0xb3, 0x45, 0x1f, 0x83, 0xc9, 0x44, 0xdf, - 0x8e, 0x24, 0xbe, 0xfa, 0x05, 0x0b, 0x26, 0x79, 0x67, 0x56, 0xbc, 0x3d, 0x71, 0x1b, 0xbc, 0x0d, - 0xa7, 0x9a, 0x19, 0xa7, 0xb2, 0x98, 0xfe, 0xfe, 0x4f, 0x71, 0x25, 0xae, 0xca, 0x82, 0xe2, 0xcc, - 0x36, 0xd0, 0x25, 0xba, 0xe3, 0xe8, 0xa9, 0xeb, 0x34, 0x85, 0x9b, 0xec, 0x18, 0xdf, 0x6d, 0xbc, - 0x0c, 0x2b, 0xa8, 0xfd, 0x3b, 0x16, 0x4c, 0xf3, 0x9e, 0x5f, 0x27, 0xfb, 0xea, 0x6c, 0xfa, 0x7a, - 0xf6, 0x5d, 0xa4, 0xd6, 0x2a, 0xe4, 0xa4, 0xd6, 0xd2, 0x3f, 0xad, 0xd8, 0xf5, 0xd3, 0xbe, 0x6c, - 0x81, 0x58, 0x21, 0x27, 0x20, 0x84, 0xf8, 0x56, 0x53, 0x08, 0x31, 0x97, 0xbf, 0x09, 0x72, 0xa4, - 0x0f, 0x7f, 0x6e, 0xc1, 0x14, 0x47, 0x88, 0xb5, 0xe5, 0x5f, 0xd7, 0x79, 0xe8, 0x27, 0x01, 0xef, - 0x75, 0xb2, 0xbf, 0xe1, 0x57, 0x9d, 0x68, 0x27, 0xfb, 0xa3, 0x8c, 0xc9, 0x1a, 0xe8, 0x3a, 0x59, - 0x0d, 0xb9, 0x81, 0x8e, 0x90, 0xd5, 0xfb, 0xc8, 0x99, 0x27, 0xec, 0xaf, 0x59, 0x80, 0x78, 0x33, - 0x06, 0xe3, 0x46, 0xd9, 0x21, 0x56, 0xaa, 0x5d, 0x74, 0xf1, 0xd1, 0xa4, 0x20, 0x58, 0xc3, 0x3a, - 0x96, 0xe1, 0x49, 0x98, 0x3c, 0x14, 0x7b, 0x9b, 0x3c, 0x1c, 0x61, 0x44, 0xff, 0xed, 0x10, 0x24, - 0x9d, 0x71, 0xd0, 0x6d, 0x18, 0xab, 0x3b, 0x6d, 0x67, 0xd3, 0x6d, 0xba, 0x91, 0x4b, 0xc2, 0x6e, - 0xb6, 0x52, 0xcb, 0x1a, 0x9e, 0x50, 0x52, 0x6b, 0x25, 0xd8, 0xa0, 0x83, 0x16, 0x00, 0xda, 0x81, - 0xbb, 0xe7, 0x36, 0xc9, 0x36, 0x93, 0x95, 0x30, 0xc7, 0x7c, 0x6e, 0x00, 0x24, 0x4b, 0xb1, 0x86, - 0x91, 0xe1, 0xf9, 0x5c, 0x7c, 0xc8, 0x9e, 0xcf, 0x70, 0x62, 0x9e, 0xcf, 0x03, 0x47, 0xf2, 0x7c, - 0x1e, 0x39, 0xb2, 0xe7, 0xf3, 0x60, 0x5f, 0x9e, 0xcf, 0x18, 0xce, 0x48, 0xde, 0x93, 0xfe, 0x5f, - 0x75, 0x9b, 0x44, 0x3c, 0x38, 0x78, 0x34, 0x81, 0xb9, 0xfb, 0x07, 0xf3, 0x67, 0x70, 0x26, 0x06, - 0xce, 0xa9, 0x89, 0x3e, 0x01, 0xb3, 0x4e, 0xb3, 0xe9, 0xdf, 0x55, 0x93, 0xba, 0x12, 0xd6, 0x9d, - 0x26, 0x57, 0x42, 0x0c, 0x33, 0xaa, 0x8f, 0xdd, 0x3f, 0x98, 0x9f, 0x5d, 0xcc, 0xc1, 0xc1, 0xb9, - 0xb5, 0xd1, 0x47, 0xa1, 0xd4, 0x0e, 0xfc, 0xfa, 0x9a, 0xe6, 0x31, 0x78, 0x9e, 0x0e, 0x60, 0x55, - 0x16, 0x1e, 0x1e, 0xcc, 0x8f, 0xab, 0x3f, 0xec, 0xc2, 0x8f, 0x2b, 0x64, 0xb8, 0x32, 0x8f, 0x1e, - 0xab, 0x2b, 0xf3, 0x2e, 0xcc, 0xd4, 0x48, 0xe0, 0xb2, 0x1c, 0xe0, 0x8d, 0xf8, 0x7c, 0xda, 0x80, - 0x52, 0x90, 0x38, 0x91, 0xfb, 0x8a, 0x7a, 0xa8, 0xa5, 0x00, 0x90, 0x27, 0x70, 0x4c, 0xc8, 0xfe, - 0x3f, 0x16, 0x0c, 0x0b, 0xe7, 0x9b, 0x13, 0xe0, 0x1a, 0x17, 0x0d, 0x4d, 0xc2, 0x7c, 0xf6, 0x80, - 0xb1, 0xce, 0xe4, 0xea, 0x10, 0x2a, 0x09, 0x1d, 0xc2, 0xe3, 0xdd, 0x88, 0x74, 0xd7, 0x1e, 0xfc, - 0xcd, 0x22, 0xe5, 0xde, 0x0d, 0x37, 0xd0, 0x87, 0x3f, 0x04, 0xeb, 0x30, 0x1c, 0x0a, 0x37, 0xc4, - 0x42, 0xbe, 0xdd, 0x7c, 0x72, 0x12, 0x63, 0x3b, 0x36, 0xe1, 0x78, 0x28, 0x89, 0x64, 0xfa, 0x37, - 0x16, 0x1f, 0xa2, 0x7f, 0x63, 0x2f, 0x47, 0xd9, 0x81, 0xe3, 0x70, 0x94, 0xb5, 0xbf, 0xc2, 0x6e, - 0x4e, 0xbd, 0xfc, 0x04, 0x98, 0xaa, 0xab, 0xe6, 0x1d, 0x6b, 0x77, 0x59, 0x59, 0xa2, 0x53, 0x39, - 0xcc, 0xd5, 0xcf, 0x59, 0x70, 0x2e, 0xe3, 0xab, 0x34, 0x4e, 0xeb, 0x19, 0x18, 0x71, 0x3a, 0x0d, - 0x57, 0xed, 0x65, 0x4d, 0x9f, 0xb8, 0x28, 0xca, 0xb1, 0xc2, 0x40, 0xcb, 0x30, 0x4d, 0xee, 0xb5, - 0x5d, 0xae, 0x4a, 0xd5, 0x8d, 0x4d, 0x8b, 0xdc, 0x63, 0x6b, 0x25, 0x09, 0xc4, 0x69, 0x7c, 0x15, - 0x9c, 0xa4, 0x98, 0x1b, 0x9c, 0xe4, 0x1f, 0x58, 0x30, 0xaa, 0x1c, 0xf1, 0x1e, 0xfa, 0x68, 0x7f, - 0xdc, 0x1c, 0xed, 0x47, 0xbb, 0x8c, 0x76, 0xce, 0x30, 0xff, 0x56, 0x41, 0xf5, 0xb7, 0xea, 0x07, - 0x51, 0x1f, 0x1c, 0xdc, 0x83, 0x9b, 0xc7, 0x5f, 0x81, 0x51, 0xa7, 0xdd, 0x96, 0x00, 0x69, 0x83, - 0xc6, 0x62, 0xd8, 0xc6, 0xc5, 0x58, 0xc7, 0x51, 0xd6, 0xfa, 0xc5, 0x5c, 0x6b, 0xfd, 0x06, 0x40, - 0xe4, 0x04, 0xdb, 0x24, 0xa2, 0x65, 0x22, 0x90, 0x58, 0xfe, 0x79, 0xd3, 0x89, 0xdc, 0xe6, 0x82, - 0xeb, 0x45, 0x61, 0x14, 0x2c, 0x54, 0xbc, 0xe8, 0x66, 0xc0, 0x9f, 0x90, 0x5a, 0xa4, 0x1e, 0x45, - 0x0b, 0x6b, 0x74, 0xa5, 0xd3, 0x39, 0x6b, 0x63, 0xd0, 0x34, 0x66, 0x58, 0x17, 0xe5, 0x58, 0x61, - 0xd8, 0x1f, 0x61, 0xb7, 0x0f, 0x1b, 0xd3, 0xa3, 0x85, 0xb6, 0xf9, 0xf2, 0xa8, 0x9a, 0x0d, 0xa6, - 0xc9, 0x2c, 0xeb, 0x01, 0x74, 0xba, 0x1f, 0xf6, 0xb4, 0x61, 0xdd, 0x77, 0x2c, 0x8e, 0xb2, 0x83, - 0xbe, 0x2d, 0x65, 0xa0, 0xf2, 0x6c, 0x8f, 0x5b, 0xe3, 0x08, 0x26, 0x29, 0x2c, 0xa1, 0x05, 0x0b, - 0xf7, 0x5f, 0xa9, 0x8a, 0x7d, 0xa1, 0x25, 0xb4, 0x10, 0x00, 0x1c, 0xe3, 0x50, 0x66, 0x4a, 0xfd, - 0x09, 0x67, 0x51, 0x1c, 0xd8, 0x51, 0x61, 0x87, 0x58, 0xc3, 0x40, 0x97, 0x85, 0x40, 0x81, 0xeb, - 0x05, 0x1e, 0x4d, 0x08, 0x14, 0xe4, 0x70, 0x69, 0x52, 0xa0, 0x2b, 0x30, 0xaa, 0x72, 0xda, 0x56, - 0x79, 0xaa, 0x54, 0xb1, 0xcc, 0x56, 0xe2, 0x62, 0xac, 0xe3, 0xa0, 0x0d, 0x98, 0x0c, 0xb9, 0x9c, - 0x4d, 0x45, 0xdb, 0xe5, 0xf2, 0xca, 0x0f, 0x4a, 0x2b, 0xa0, 0x9a, 0x09, 0x3e, 0x64, 0x45, 0xfc, - 0x74, 0x92, 0x8e, 0xe1, 0x49, 0x12, 0xe8, 0x55, 0x98, 0x68, 0xfa, 0x4e, 0x63, 0xc9, 0x69, 0x3a, - 0x5e, 0x9d, 0x8d, 0xcf, 0x88, 0x99, 0x1a, 0xf1, 0x86, 0x01, 0xc5, 0x09, 0x6c, 0xca, 0xbc, 0xe9, - 0x25, 0x22, 0x42, 0xb4, 0xe3, 0x6d, 0x93, 0x50, 0x64, 0x28, 0x65, 0xcc, 0xdb, 0x8d, 0x1c, 0x1c, - 0x9c, 0x5b, 0x1b, 0xbd, 0x04, 0x63, 0xf2, 0xf3, 0xb5, 0x38, 0x0a, 0xb1, 0xe3, 0x83, 0x06, 0xc3, - 0x06, 0x26, 0xba, 0x0b, 0xa7, 0xe5, 0xff, 0x8d, 0xc0, 0xd9, 0xda, 0x72, 0xeb, 0xc2, 0xb9, 0x98, - 0x7b, 0x48, 0x2e, 0x4a, 0x37, 0xbe, 0x95, 0x2c, 0xa4, 0xc3, 0x83, 0xf9, 0x0b, 0x62, 0xd4, 0x32, - 0xe1, 0x6c, 0x12, 0xb3, 0xe9, 0xa3, 0x35, 0x98, 0xd9, 0x21, 0x4e, 0x33, 0xda, 0x59, 0xde, 0x21, - 0xf5, 0x5d, 0xb9, 0xe9, 0x58, 0x74, 0x06, 0xcd, 0x5d, 0xe0, 0x5a, 0x1a, 0x05, 0x67, 0xd5, 0x43, - 0x6f, 0xc0, 0x6c, 0xbb, 0xb3, 0xd9, 0x74, 0xc3, 0x9d, 0x75, 0x3f, 0x62, 0xa6, 0x40, 0x2a, 0x45, - 0xae, 0x08, 0xe3, 0xa0, 0xe2, 0x5f, 0x54, 0x73, 0xf0, 0x70, 0x2e, 0x05, 0xf4, 0x36, 0x9c, 0x4e, - 0x2c, 0x06, 0xe1, 0xc8, 0x3e, 0x91, 0x1f, 0x6f, 0xbf, 0x96, 0x55, 0x41, 0xc4, 0x84, 0xc8, 0x02, - 0xe1, 0xec, 0x26, 0xe8, 0xe3, 0x43, 0x0b, 0x70, 0x1a, 0xce, 0x4e, 0xc5, 0x36, 0xcb, 0x5a, 0x14, - 0xd4, 0x10, 0x1b, 0x58, 0xe8, 0x65, 0x00, 0xb7, 0xbd, 0xea, 0xb4, 0xdc, 0x26, 0x7d, 0x64, 0xce, - 0xb0, 0x3a, 0xf4, 0xc1, 0x01, 0x95, 0xaa, 0x2c, 0xa5, 0xa7, 0xba, 0xf8, 0xb7, 0x8f, 0x35, 0x6c, - 0x54, 0x85, 0x09, 0xf1, 0x6f, 0x5f, 0x2c, 0x86, 0x69, 0xe5, 0x69, 0x3e, 0x21, 0x6b, 0xa8, 0x15, - 0x80, 0xcc, 0x12, 0x36, 0xe7, 0x89, 0xfa, 0x68, 0x1b, 0xce, 0x89, 0x1c, 0xcc, 0x44, 0x5f, 0xdd, - 0x72, 0xf6, 0x42, 0x16, 0x1e, 0x7f, 0x84, 0x07, 0x90, 0x59, 0xec, 0x86, 0x88, 0xbb, 0xd3, 0x79, - 0x67, 0x16, 0x70, 0xbf, 0x6d, 0xd1, 0xda, 0x1a, 0x97, 0x8c, 0x3e, 0x0b, 0x63, 0xfa, 0x9e, 0x13, - 0x37, 0xfe, 0xc5, 0x6c, 0x26, 0x52, 0xdb, 0x9b, 0x9c, 0xc7, 0x56, 0xfb, 0x4f, 0x87, 0x61, 0x83, - 0x22, 0xaa, 0x67, 0xb8, 0x51, 0x5f, 0xee, 0x8f, 0xa3, 0xe8, 0xdf, 0x00, 0x8c, 0x40, 0xf6, 0x92, - 0x43, 0x37, 0x60, 0xa4, 0xde, 0x74, 0x89, 0x17, 0x55, 0xaa, 0xdd, 0x02, 0x9f, 0x2d, 0x0b, 0x1c, - 0xb1, 0x86, 0x45, 0xcc, 0x78, 0x5e, 0x86, 0x15, 0x05, 0xfb, 0x57, 0x0b, 0x30, 0xdf, 0x23, 0x01, - 0x41, 0x42, 0x1d, 0x64, 0xf5, 0xa5, 0x0e, 0x5a, 0x94, 0x39, 0x98, 0xd7, 0x13, 0x92, 0xa6, 0x44, - 0x7e, 0xe5, 0x58, 0xde, 0x94, 0xc4, 0xef, 0xdb, 0x3c, 0x5f, 0xd7, 0x28, 0x0d, 0xf4, 0x74, 0x30, - 0x31, 0x34, 0xc9, 0x83, 0xfd, 0x3f, 0x3f, 0x73, 0xb5, 0x82, 0xf6, 0x57, 0x0a, 0x70, 0x5a, 0x0d, - 0xe1, 0x37, 0xef, 0xc0, 0xdd, 0x4a, 0x0f, 0xdc, 0x31, 0xe8, 0x54, 0xed, 0x9b, 0x30, 0xc4, 0x23, - 0xb9, 0xf5, 0xc1, 0xf6, 0x3e, 0x61, 0x06, 0x3d, 0x55, 0x9c, 0x96, 0x11, 0xf8, 0xf4, 0x7b, 0x2d, - 0x98, 0xdc, 0x58, 0xae, 0xd6, 0xfc, 0xfa, 0x2e, 0x89, 0x16, 0xf9, 0x33, 0x05, 0x6b, 0x0e, 0xa7, - 0x0f, 0xc2, 0x9a, 0x66, 0x31, 0xbd, 0x17, 0x60, 0x60, 0xc7, 0x0f, 0xa3, 0xa4, 0xc1, 0xc5, 0x35, - 0x3f, 0x8c, 0x30, 0x83, 0xd8, 0xbf, 0x6b, 0xc1, 0xe0, 0x86, 0xe3, 0x7a, 0x91, 0x14, 0xce, 0x5b, - 0x39, 0xc2, 0xf9, 0x7e, 0xbe, 0x0b, 0xbd, 0x08, 0x43, 0x64, 0x6b, 0x8b, 0xd4, 0x23, 0x31, 0xab, - 0xd2, 0x5b, 0x7f, 0x68, 0x85, 0x95, 0x52, 0x3e, 0x8c, 0x35, 0xc6, 0xff, 0x62, 0x81, 0x8c, 0xee, - 0x40, 0x29, 0x72, 0x5b, 0x64, 0xb1, 0xd1, 0x10, 0x2a, 0xeb, 0x07, 0x88, 0x38, 0xb0, 0x21, 0x09, - 0xe0, 0x98, 0x96, 0xfd, 0xc5, 0x02, 0x40, 0x1c, 0x02, 0xa7, 0xd7, 0x27, 0x2e, 0xa5, 0x94, 0x99, - 0x17, 0x33, 0x94, 0x99, 0x28, 0x26, 0x98, 0xa1, 0xc9, 0x54, 0xc3, 0x54, 0xec, 0x6b, 0x98, 0x06, - 0x8e, 0x32, 0x4c, 0xcb, 0x30, 0x1d, 0x87, 0xf0, 0x31, 0x23, 0x98, 0xb1, 0xa7, 0xe9, 0x46, 0x12, - 0x88, 0xd3, 0xf8, 0x36, 0x81, 0x0b, 0x2a, 0x92, 0x89, 0xb8, 0xd1, 0x98, 0x45, 0xb4, 0xae, 0x1c, - 0xee, 0x31, 0x4e, 0xb1, 0xb6, 0xb6, 0x90, 0xab, 0xad, 0xfd, 0x09, 0x0b, 0x4e, 0x25, 0xdb, 0x61, - 0x2e, 0xaa, 0x5f, 0xb0, 0xe0, 0x34, 0xd3, 0x59, 0xb3, 0x56, 0xd3, 0x1a, 0xf2, 0x17, 0xba, 0x46, - 0x67, 0xc9, 0xe9, 0x71, 0x1c, 0x16, 0x62, 0x2d, 0x8b, 0x34, 0xce, 0x6e, 0xd1, 0xfe, 0x4f, 0x05, - 0x98, 0xcd, 0x0b, 0xeb, 0xc2, 0x1c, 0x26, 0x9c, 0x7b, 0xb5, 0x5d, 0x72, 0x57, 0x98, 0xa5, 0xc7, - 0x0e, 0x13, 0xbc, 0x18, 0x4b, 0x78, 0x32, 0xa6, 0x7c, 0xa1, 0xbf, 0x98, 0xf2, 0x68, 0x07, 0xa6, - 0xef, 0xee, 0x10, 0xef, 0x96, 0x17, 0x3a, 0x91, 0x1b, 0x6e, 0xb9, 0x4c, 0xbf, 0xcb, 0xd7, 0xcd, - 0xcb, 0xd2, 0x78, 0xfc, 0x4e, 0x12, 0xe1, 0xf0, 0x60, 0xfe, 0x9c, 0x51, 0x10, 0x77, 0x99, 0x1f, - 0x24, 0x38, 0x4d, 0x34, 0x1d, 0x92, 0x7f, 0xe0, 0x21, 0x86, 0xe4, 0xb7, 0xbf, 0x60, 0xc1, 0xd9, - 0xdc, 0x3c, 0xa0, 0xe8, 0x12, 0x8c, 0x38, 0x6d, 0x97, 0x8b, 0xc8, 0xc5, 0x31, 0xca, 0x44, 0x31, - 0xd5, 0x0a, 0x17, 0x90, 0x2b, 0xa8, 0xca, 0x4f, 0x5e, 0xc8, 0xcd, 0x4f, 0xde, 0x33, 0xdd, 0xb8, - 0xfd, 0x3d, 0x16, 0x08, 0x67, 0xcf, 0x3e, 0xce, 0xee, 0x4f, 0xc1, 0xd8, 0x5e, 0x3a, 0x6d, 0xcf, - 0x85, 0x7c, 0xef, 0x57, 0x91, 0xac, 0x47, 0x31, 0x64, 0x46, 0x8a, 0x1e, 0x83, 0x96, 0xdd, 0x00, - 0x01, 0x2d, 0x13, 0x26, 0x00, 0xee, 0xdd, 0x9b, 0xe7, 0x00, 0x1a, 0x0c, 0x57, 0x4b, 0xf2, 0xae, - 0x6e, 0xe6, 0xb2, 0x82, 0x60, 0x0d, 0xcb, 0xfe, 0xf7, 0x05, 0x18, 0x95, 0x69, 0x62, 0x3a, 0x5e, - 0x3f, 0x62, 0x9a, 0x23, 0xe5, 0x8d, 0xa4, 0xaf, 0x78, 0x26, 0x47, 0xac, 0xc6, 0xd2, 0x2d, 0xf5, - 0x8a, 0x5f, 0x93, 0x00, 0x1c, 0xe3, 0xd0, 0x5d, 0x14, 0x76, 0x36, 0x19, 0x7a, 0xc2, 0x35, 0xb1, - 0xc6, 0x8b, 0xb1, 0x84, 0xa3, 0x4f, 0xc0, 0x14, 0xaf, 0x17, 0xf8, 0x6d, 0x67, 0x9b, 0xeb, 0x1e, - 0x06, 0x55, 0x4c, 0x81, 0xa9, 0xb5, 0x04, 0xec, 0xf0, 0x60, 0xfe, 0x54, 0xb2, 0x8c, 0x29, 0xd5, - 0x52, 0x54, 0x98, 0x89, 0x11, 0x6f, 0x84, 0xee, 0xfe, 0x94, 0x65, 0x52, 0x0c, 0xc2, 0x3a, 0x9e, - 0xfd, 0x59, 0x40, 0xe9, 0x84, 0x39, 0xe8, 0x35, 0x6e, 0x57, 0xea, 0x06, 0xa4, 0xd1, 0x4d, 0xc9, - 0xa6, 0x7b, 0xce, 0x4b, 0xaf, 0x22, 0x5e, 0x0b, 0xab, 0xfa, 0xf6, 0x5f, 0x2d, 0xc2, 0x54, 0xd2, - 0x8f, 0x1a, 0x5d, 0x83, 0x21, 0xce, 0x7a, 0x08, 0xf2, 0x5d, 0x6c, 0x38, 0x34, 0xef, 0x6b, 0x76, - 0x08, 0x0b, 0xee, 0x45, 0xd4, 0x47, 0x6f, 0xc0, 0x68, 0xc3, 0xbf, 0xeb, 0xdd, 0x75, 0x82, 0xc6, - 0x62, 0xb5, 0x22, 0x96, 0x73, 0xe6, 0xa3, 0xb2, 0x1c, 0xa3, 0xe9, 0x1e, 0xdd, 0x4c, 0x5f, 0x19, - 0x83, 0xb0, 0x4e, 0x0e, 0x6d, 0xb0, 0xf8, 0xde, 0x5b, 0xee, 0xf6, 0x9a, 0xd3, 0xee, 0xe6, 0x64, - 0xb0, 0x2c, 0x91, 0x34, 0xca, 0xe3, 0x22, 0x08, 0x38, 0x07, 0xe0, 0x98, 0x10, 0xfa, 0x1c, 0xcc, - 0x84, 0x39, 0xa2, 0xee, 0xbc, 0xfc, 0x69, 0xdd, 0xa4, 0xbf, 0x4b, 0x8f, 0xd0, 0xe7, 0x7e, 0x96, - 0x50, 0x3c, 0xab, 0x19, 0xfb, 0x47, 0x4e, 0x81, 0xb1, 0x89, 0x8d, 0x74, 0x9a, 0xd6, 0x31, 0xa5, - 0xd3, 0xc4, 0x30, 0x42, 0x5a, 0xed, 0x68, 0xbf, 0xec, 0x06, 0xdd, 0x92, 0x4c, 0xaf, 0x08, 0x9c, - 0x34, 0x4d, 0x09, 0xc1, 0x8a, 0x4e, 0x76, 0xce, 0xd3, 0xe2, 0xd7, 0x31, 0xe7, 0xe9, 0xc0, 0x09, - 0xe6, 0x3c, 0x5d, 0x87, 0xe1, 0x6d, 0x37, 0xc2, 0xa4, 0xed, 0x0b, 0xa6, 0x3f, 0x73, 0x1d, 0x5e, - 0xe5, 0x28, 0xe9, 0xec, 0x7a, 0x02, 0x80, 0x25, 0x11, 0xf4, 0x9a, 0xda, 0x81, 0x43, 0xf9, 0x0f, - 0xf3, 0xb4, 0xb1, 0x41, 0xe6, 0x1e, 0x14, 0x99, 0x4d, 0x87, 0x1f, 0x34, 0xb3, 0xe9, 0xaa, 0xcc, - 0x47, 0x3a, 0x92, 0xef, 0x11, 0xc4, 0xd2, 0x8d, 0xf6, 0xc8, 0x42, 0x7a, 0x5b, 0xcf, 0xe1, 0x5a, - 0xca, 0x3f, 0x09, 0x54, 0x7a, 0xd6, 0x3e, 0x33, 0xb7, 0x7e, 0x8f, 0x05, 0xa7, 0xdb, 0x59, 0xe9, - 0x8c, 0x85, 0x5e, 0xfe, 0xc5, 0xbe, 0x33, 0x26, 0x1b, 0x0d, 0x32, 0x79, 0x56, 0x26, 0x1a, 0xce, - 0x6e, 0x8e, 0x0e, 0x74, 0xb0, 0xd9, 0x10, 0xfa, 0xe1, 0x27, 0x72, 0x52, 0xc0, 0x76, 0x49, 0xfc, - 0xba, 0x91, 0x91, 0x6e, 0xf4, 0xfd, 0x79, 0xe9, 0x46, 0xfb, 0x4e, 0x32, 0xfa, 0x9a, 0x4a, 0xfe, - 0x3a, 0x9e, 0xbf, 0x94, 0x78, 0x6a, 0xd7, 0x9e, 0x29, 0x5f, 0x5f, 0x53, 0x29, 0x5f, 0xbb, 0x04, - 0x6f, 0xe5, 0x09, 0x5d, 0x7b, 0x26, 0x7a, 0xd5, 0x92, 0xb5, 0x4e, 0x1e, 0x4f, 0xb2, 0x56, 0xe3, - 0xaa, 0xe1, 0xf9, 0x42, 0x9f, 0xee, 0x71, 0xd5, 0x18, 0x74, 0xbb, 0x5f, 0x36, 0x3c, 0x31, 0xed, - 0xf4, 0x03, 0x25, 0xa6, 0xbd, 0xad, 0x27, 0x7a, 0x45, 0x3d, 0x32, 0x99, 0x52, 0xa4, 0x3e, 0xd3, - 0xbb, 0xde, 0xd6, 0x2f, 0xc0, 0x99, 0x7c, 0xba, 0xea, 0x9e, 0x4b, 0xd3, 0xcd, 0xbc, 0x02, 0x53, - 0x69, 0x63, 0x4f, 0x9d, 0x4c, 0xda, 0xd8, 0xd3, 0xc7, 0x9e, 0x36, 0xf6, 0xcc, 0x09, 0xa4, 0x8d, - 0x7d, 0xe4, 0x04, 0xd3, 0xc6, 0xde, 0x66, 0xc6, 0x2c, 0x3c, 0x64, 0x8e, 0x08, 0x36, 0x9b, 0x1d, - 0xd8, 0x34, 0x2b, 0xae, 0x0e, 0xff, 0x38, 0x05, 0xc2, 0x31, 0xa9, 0x8c, 0x74, 0xb4, 0xb3, 0x0f, - 0x21, 0x1d, 0xed, 0x7a, 0x9c, 0x8e, 0xf6, 0x6c, 0xfe, 0x54, 0x67, 0xb8, 0x3f, 0xe4, 0x24, 0xa1, - 0xbd, 0xad, 0x27, 0x8f, 0x7d, 0xb4, 0x8b, 0xc6, 0x22, 0x4b, 0xf0, 0xd8, 0x25, 0x65, 0xec, 0xab, - 0x3c, 0x65, 0xec, 0x63, 0xf9, 0x27, 0x79, 0xf2, 0xba, 0x33, 0x12, 0xc5, 0xd2, 0x7e, 0xa9, 0xb0, - 0x86, 0x2c, 0xac, 0x6e, 0x4e, 0xbf, 0x54, 0x5c, 0xc4, 0x74, 0xbf, 0x14, 0x08, 0xc7, 0xa4, 0xec, - 0xef, 0x2b, 0xc0, 0xf9, 0xee, 0xfb, 0x2d, 0x96, 0xa6, 0x56, 0x63, 0x05, 0x6e, 0x42, 0x9a, 0xca, - 0xdf, 0x6c, 0x31, 0x56, 0xdf, 0x51, 0xda, 0xae, 0xc2, 0xb4, 0xf2, 0x9b, 0x68, 0xba, 0xf5, 0xfd, - 0xf5, 0xf8, 0xe5, 0xab, 0x7c, 0xcd, 0x6b, 0x49, 0x04, 0x9c, 0xae, 0x83, 0x16, 0x61, 0xd2, 0x28, - 0xac, 0x94, 0xc5, 0xdb, 0x4c, 0x89, 0x6f, 0x6b, 0x26, 0x18, 0x27, 0xf1, 0xed, 0x2f, 0x59, 0xf0, - 0x48, 0x4e, 0xa6, 0xb7, 0xbe, 0x83, 0x90, 0x6d, 0xc1, 0x64, 0xdb, 0xac, 0xda, 0x23, 0x6e, 0xa2, - 0x91, 0x4f, 0x4e, 0xf5, 0x35, 0x01, 0xc0, 0x49, 0xa2, 0xf6, 0x9f, 0x59, 0x70, 0xae, 0xab, 0x21, - 0x20, 0xc2, 0x70, 0x66, 0xbb, 0x15, 0x3a, 0xcb, 0x01, 0x69, 0x10, 0x2f, 0x72, 0x9d, 0x66, 0xad, - 0x4d, 0xea, 0x9a, 0x3c, 0x9c, 0x59, 0xd4, 0x5d, 0x5d, 0xab, 0x2d, 0xa6, 0x31, 0x70, 0x4e, 0x4d, - 0xb4, 0x0a, 0x28, 0x0d, 0x11, 0x33, 0xcc, 0x02, 0x34, 0xa7, 0xe9, 0xe1, 0x8c, 0x1a, 0xe8, 0x23, - 0x30, 0xae, 0x0c, 0x0c, 0xb5, 0x19, 0x67, 0x07, 0x3b, 0xd6, 0x01, 0xd8, 0xc4, 0x5b, 0xba, 0xf4, - 0xeb, 0xbf, 0x7f, 0xfe, 0x7d, 0xbf, 0xf9, 0xfb, 0xe7, 0xdf, 0xf7, 0x3b, 0xbf, 0x7f, 0xfe, 0x7d, - 0xdf, 0x71, 0xff, 0xbc, 0xf5, 0xeb, 0xf7, 0xcf, 0x5b, 0xbf, 0x79, 0xff, 0xbc, 0xf5, 0x3b, 0xf7, - 0xcf, 0x5b, 0xbf, 0x77, 0xff, 0xbc, 0xf5, 0xc5, 0x3f, 0x38, 0xff, 0xbe, 0x4f, 0x15, 0xf6, 0xae, - 0xfc, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xad, 0xf2, 0xaa, 0x3b, 0x4d, 0x03, 0x01, 0x00, + // 14066 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x1c, 0xd9, + 0x75, 0x18, 0xac, 0x9e, 0xc1, 0x6b, 0x0e, 0xde, 0x17, 0x24, 0x17, 0xc4, 0x2e, 0x09, 0x6e, 0x53, + 0xe2, 0x72, 0xb5, 0xbb, 0xa0, 0xb8, 0x0f, 0x69, 0xbd, 0x2b, 0xad, 0x05, 0x60, 0x00, 0x72, 0x96, + 0x04, 0x38, 0x7b, 0x07, 0x24, 0x25, 0x79, 0xa5, 0x52, 0x63, 0xe6, 0x02, 0x68, 0x61, 0xa6, 0x7b, + 0xb6, 0xbb, 0x07, 0x24, 0xf6, 0x93, 0xeb, 0xf3, 0x27, 0x3f, 0xe5, 0xc7, 0x57, 0xaa, 0x94, 0xf3, + 0xb2, 0x5d, 0xae, 0x94, 0xe3, 0x54, 0xac, 0x38, 0x49, 0xc5, 0xb1, 0x63, 0x3b, 0x96, 0x13, 0x3b, + 0x71, 0x1e, 0x4e, 0x7e, 0x38, 0x8e, 0x2b, 0xb1, 0x5c, 0xe5, 0x0a, 0x62, 0xd3, 0x49, 0xb9, 0xf4, + 0x23, 0xb6, 0x13, 0x3b, 0x3f, 0x82, 0xb8, 0xe2, 0xd4, 0x7d, 0xf6, 0xbd, 0xfd, 0x98, 0x19, 0x70, + 0x41, 0x68, 0xa5, 0xda, 0x7f, 0x33, 0xf7, 0x9c, 0x7b, 0xee, 0xed, 0xfb, 0x3c, 0xf7, 0x3c, 0xe1, + 0xd5, 0xdd, 0x97, 0xc3, 0x05, 0xd7, 0xbf, 0xb2, 0xdb, 0xd9, 0x24, 0x81, 0x47, 0x22, 0x12, 0x5e, + 0xd9, 0x23, 0x5e, 0xc3, 0x0f, 0xae, 0x08, 0x80, 0xd3, 0x76, 0xaf, 0xd4, 0xfd, 0x80, 0x5c, 0xd9, + 0xbb, 0x7a, 0x65, 0x9b, 0x78, 0x24, 0x70, 0x22, 0xd2, 0x58, 0x68, 0x07, 0x7e, 0xe4, 0x23, 0xc4, + 0x71, 0x16, 0x9c, 0xb6, 0xbb, 0x40, 0x71, 0x16, 0xf6, 0xae, 0xce, 0x3d, 0xb7, 0xed, 0x46, 0x3b, + 0x9d, 0xcd, 0x85, 0xba, 0xdf, 0xba, 0xb2, 0xed, 0x6f, 0xfb, 0x57, 0x18, 0xea, 0x66, 0x67, 0x8b, + 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0x4e, 0x62, 0xee, 0xc5, 0xb8, 0x99, 0x96, 0x53, 0xdf, 0x71, 0x3d, + 0x12, 0xec, 0x5f, 0x69, 0xef, 0x6e, 0xb3, 0x76, 0x03, 0x12, 0xfa, 0x9d, 0xa0, 0x4e, 0x92, 0x0d, + 0x77, 0xad, 0x15, 0x5e, 0x69, 0x91, 0xc8, 0xc9, 0xe8, 0xee, 0xdc, 0x95, 0xbc, 0x5a, 0x41, 0xc7, + 0x8b, 0xdc, 0x56, 0xba, 0x99, 0x0f, 0xf7, 0xaa, 0x10, 0xd6, 0x77, 0x48, 0xcb, 0x49, 0xd5, 0x7b, + 0x21, 0xaf, 0x5e, 0x27, 0x72, 0x9b, 0x57, 0x5c, 0x2f, 0x0a, 0xa3, 0x20, 0x59, 0xc9, 0xfe, 0xaa, + 0x05, 0x17, 0x16, 0xef, 0xd6, 0x56, 0x9a, 0x4e, 0x18, 0xb9, 0xf5, 0xa5, 0xa6, 0x5f, 0xdf, 0xad, + 0x45, 0x7e, 0x40, 0xee, 0xf8, 0xcd, 0x4e, 0x8b, 0xd4, 0xd8, 0x40, 0xa0, 0x67, 0x61, 0x64, 0x8f, + 0xfd, 0xaf, 0x94, 0x67, 0xad, 0x0b, 0xd6, 0xe5, 0xd2, 0xd2, 0xd4, 0xaf, 0x1f, 0xcc, 0xbf, 0xef, + 0xc1, 0xc1, 0xfc, 0xc8, 0x1d, 0x51, 0x8e, 0x15, 0x06, 0xba, 0x04, 0x43, 0x5b, 0xe1, 0xc6, 0x7e, + 0x9b, 0xcc, 0x16, 0x18, 0xee, 0x84, 0xc0, 0x1d, 0x5a, 0xad, 0xd1, 0x52, 0x2c, 0xa0, 0xe8, 0x0a, + 0x94, 0xda, 0x4e, 0x10, 0xb9, 0x91, 0xeb, 0x7b, 0xb3, 0xc5, 0x0b, 0xd6, 0xe5, 0xc1, 0xa5, 0x69, + 0x81, 0x5a, 0xaa, 0x4a, 0x00, 0x8e, 0x71, 0x68, 0x37, 0x02, 0xe2, 0x34, 0x6e, 0x79, 0xcd, 0xfd, + 0xd9, 0x81, 0x0b, 0xd6, 0xe5, 0x91, 0xb8, 0x1b, 0x58, 0x94, 0x63, 0x85, 0x61, 0xff, 0x48, 0x01, + 0x46, 0x16, 0xb7, 0xb6, 0x5c, 0xcf, 0x8d, 0xf6, 0xd1, 0x1d, 0x18, 0xf3, 0xfc, 0x06, 0x91, 0xff, + 0xd9, 0x57, 0x8c, 0x3e, 0x7f, 0x61, 0x21, 0xbd, 0x94, 0x16, 0xd6, 0x35, 0xbc, 0xa5, 0xa9, 0x07, + 0x07, 0xf3, 0x63, 0x7a, 0x09, 0x36, 0xe8, 0x20, 0x0c, 0xa3, 0x6d, 0xbf, 0xa1, 0xc8, 0x16, 0x18, + 0xd9, 0xf9, 0x2c, 0xb2, 0xd5, 0x18, 0x6d, 0x69, 0xf2, 0xc1, 0xc1, 0xfc, 0xa8, 0x56, 0x80, 0x75, + 0x22, 0x68, 0x13, 0x26, 0xe9, 0x5f, 0x2f, 0x72, 0x15, 0xdd, 0x22, 0xa3, 0x7b, 0x31, 0x8f, 0xae, + 0x86, 0xba, 0x34, 0xf3, 0xe0, 0x60, 0x7e, 0x32, 0x51, 0x88, 0x93, 0x04, 0xed, 0xb7, 0x61, 0x62, + 0x31, 0x8a, 0x9c, 0xfa, 0x0e, 0x69, 0xf0, 0x19, 0x44, 0x2f, 0xc2, 0x80, 0xe7, 0xb4, 0x88, 0x98, + 0xdf, 0x0b, 0x62, 0x60, 0x07, 0xd6, 0x9d, 0x16, 0x39, 0x3c, 0x98, 0x9f, 0xba, 0xed, 0xb9, 0x6f, + 0x75, 0xc4, 0xaa, 0xa0, 0x65, 0x98, 0x61, 0xa3, 0xe7, 0x01, 0x1a, 0x64, 0xcf, 0xad, 0x93, 0xaa, + 0x13, 0xed, 0x88, 0xf9, 0x46, 0xa2, 0x2e, 0x94, 0x15, 0x04, 0x6b, 0x58, 0xf6, 0x7d, 0x28, 0x2d, + 0xee, 0xf9, 0x6e, 0xa3, 0xea, 0x37, 0x42, 0xb4, 0x0b, 0x93, 0xed, 0x80, 0x6c, 0x91, 0x40, 0x15, + 0xcd, 0x5a, 0x17, 0x8a, 0x97, 0x47, 0x9f, 0xbf, 0x9c, 0xf9, 0xb1, 0x26, 0xea, 0x8a, 0x17, 0x05, + 0xfb, 0x4b, 0x8f, 0x89, 0xf6, 0x26, 0x13, 0x50, 0x9c, 0xa4, 0x6c, 0xff, 0x8b, 0x02, 0x9c, 0x5e, + 0x7c, 0xbb, 0x13, 0x90, 0xb2, 0x1b, 0xee, 0x26, 0x57, 0x78, 0xc3, 0x0d, 0x77, 0xd7, 0xe3, 0x11, + 0x50, 0x4b, 0xab, 0x2c, 0xca, 0xb1, 0xc2, 0x40, 0xcf, 0xc1, 0x30, 0xfd, 0x7d, 0x1b, 0x57, 0xc4, + 0x27, 0xcf, 0x08, 0xe4, 0xd1, 0xb2, 0x13, 0x39, 0x65, 0x0e, 0xc2, 0x12, 0x07, 0xad, 0xc1, 0x68, + 0x9d, 0x6d, 0xc8, 0xed, 0x35, 0xbf, 0x41, 0xd8, 0x64, 0x96, 0x96, 0x9e, 0xa1, 0xe8, 0xcb, 0x71, + 0xf1, 0xe1, 0xc1, 0xfc, 0x2c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, 0x7f, + 0x0d, 0x30, 0x4a, 0x90, 0xb1, 0xb7, 0x2e, 0x6b, 0x5b, 0x65, 0x90, 0x6d, 0x95, 0xb1, 0xec, 0x6d, + 0x82, 0xae, 0xc2, 0xc0, 0xae, 0xeb, 0x35, 0x66, 0x87, 0x18, 0xad, 0x73, 0x74, 0xce, 0x6f, 0xb8, + 0x5e, 0xe3, 0xf0, 0x60, 0x7e, 0xda, 0xe8, 0x0e, 0x2d, 0xc4, 0x0c, 0xd5, 0xfe, 0x53, 0x0b, 0xe6, + 0x19, 0x6c, 0xd5, 0x6d, 0x92, 0x2a, 0x09, 0x42, 0x37, 0x8c, 0x88, 0x17, 0x19, 0x03, 0xfa, 0x3c, + 0x40, 0x48, 0xea, 0x01, 0x89, 0xb4, 0x21, 0x55, 0x0b, 0xa3, 0xa6, 0x20, 0x58, 0xc3, 0xa2, 0x07, + 0x42, 0xb8, 0xe3, 0x04, 0x6c, 0x7d, 0x89, 0x81, 0x55, 0x07, 0x42, 0x4d, 0x02, 0x70, 0x8c, 0x63, + 0x1c, 0x08, 0xc5, 0x5e, 0x07, 0x02, 0xfa, 0x18, 0x4c, 0xc6, 0x8d, 0x85, 0x6d, 0xa7, 0x2e, 0x07, + 0x90, 0x6d, 0x99, 0x9a, 0x09, 0xc2, 0x49, 0x5c, 0xfb, 0xef, 0x58, 0x62, 0xf1, 0xd0, 0xaf, 0x7e, + 0x97, 0x7f, 0xab, 0xfd, 0x8b, 0x16, 0x0c, 0x2f, 0xb9, 0x5e, 0xc3, 0xf5, 0xb6, 0xd1, 0x67, 0x61, + 0x84, 0xde, 0x4d, 0x0d, 0x27, 0x72, 0xc4, 0xb9, 0xf7, 0x21, 0x6d, 0x6f, 0xa9, 0xab, 0x62, 0xa1, + 0xbd, 0xbb, 0x4d, 0x0b, 0xc2, 0x05, 0x8a, 0x4d, 0x77, 0xdb, 0xad, 0xcd, 0xcf, 0x91, 0x7a, 0xb4, + 0x46, 0x22, 0x27, 0xfe, 0x9c, 0xb8, 0x0c, 0x2b, 0xaa, 0xe8, 0x06, 0x0c, 0x45, 0x4e, 0xb0, 0x4d, + 0x22, 0x71, 0x00, 0x66, 0x1e, 0x54, 0xbc, 0x26, 0xa6, 0x3b, 0x92, 0x78, 0x75, 0x12, 0x5f, 0x0b, + 0x1b, 0xac, 0x2a, 0x16, 0x24, 0xec, 0x1f, 0x1a, 0x86, 0xb3, 0xcb, 0xb5, 0x4a, 0xce, 0xba, 0xba, + 0x04, 0x43, 0x8d, 0xc0, 0xdd, 0x23, 0x81, 0x18, 0x67, 0x45, 0xa5, 0xcc, 0x4a, 0xb1, 0x80, 0xa2, + 0x97, 0x61, 0x8c, 0x5f, 0x48, 0xd7, 0x1d, 0xaf, 0xd1, 0x94, 0x43, 0x7c, 0x4a, 0x60, 0x8f, 0xdd, + 0xd1, 0x60, 0xd8, 0xc0, 0x3c, 0xe2, 0xa2, 0xba, 0x94, 0xd8, 0x8c, 0x79, 0x97, 0xdd, 0x17, 0x2d, + 0x98, 0xe2, 0xcd, 0x2c, 0x46, 0x51, 0xe0, 0x6e, 0x76, 0x22, 0x12, 0xce, 0x0e, 0xb2, 0x93, 0x6e, + 0x39, 0x6b, 0xb4, 0x72, 0x47, 0x60, 0xe1, 0x4e, 0x82, 0x0a, 0x3f, 0x04, 0x67, 0x45, 0xbb, 0x53, + 0x49, 0x30, 0x4e, 0x35, 0x8b, 0xbe, 0xd3, 0x82, 0xb9, 0xba, 0xef, 0x45, 0x81, 0xdf, 0x6c, 0x92, + 0xa0, 0xda, 0xd9, 0x6c, 0xba, 0xe1, 0x0e, 0x5f, 0xa7, 0x98, 0x6c, 0xb1, 0x93, 0x20, 0x67, 0x0e, + 0x15, 0x92, 0x98, 0xc3, 0xf3, 0x0f, 0x0e, 0xe6, 0xe7, 0x96, 0x73, 0x49, 0xe1, 0x2e, 0xcd, 0xa0, + 0x5d, 0x40, 0xf4, 0x2a, 0xad, 0x45, 0xce, 0x36, 0x89, 0x1b, 0x1f, 0xee, 0xbf, 0xf1, 0x33, 0x0f, + 0x0e, 0xe6, 0xd1, 0x7a, 0x8a, 0x04, 0xce, 0x20, 0x8b, 0xde, 0x82, 0x53, 0xb4, 0x34, 0xf5, 0xad, + 0x23, 0xfd, 0x37, 0x37, 0xfb, 0xe0, 0x60, 0xfe, 0xd4, 0x7a, 0x06, 0x11, 0x9c, 0x49, 0x1a, 0x7d, + 0x87, 0x05, 0x67, 0xe3, 0xcf, 0x5f, 0xb9, 0xdf, 0x76, 0xbc, 0x46, 0xdc, 0x70, 0xa9, 0xff, 0x86, + 0xe9, 0x99, 0x7c, 0x76, 0x39, 0x8f, 0x12, 0xce, 0x6f, 0x64, 0x6e, 0x19, 0x4e, 0x67, 0xae, 0x16, + 0x34, 0x05, 0xc5, 0x5d, 0xc2, 0xb9, 0xa0, 0x12, 0xa6, 0x3f, 0xd1, 0x29, 0x18, 0xdc, 0x73, 0x9a, + 0x1d, 0xb1, 0x51, 0x30, 0xff, 0xf3, 0x4a, 0xe1, 0x65, 0xcb, 0xfe, 0x97, 0x45, 0x98, 0x5c, 0xae, + 0x55, 0x1e, 0x6a, 0x17, 0xea, 0xd7, 0x50, 0xa1, 0xeb, 0x35, 0x14, 0x5f, 0x6a, 0xc5, 0xdc, 0x4b, + 0xed, 0xff, 0xcd, 0xd8, 0x42, 0x03, 0x6c, 0x0b, 0x7d, 0x4b, 0xce, 0x16, 0x3a, 0xe6, 0x8d, 0xb3, + 0x97, 0xb3, 0x8a, 0x06, 0xd9, 0x64, 0x66, 0x72, 0x2c, 0x37, 0xfd, 0xba, 0xd3, 0x4c, 0x1e, 0x7d, + 0x47, 0x5c, 0x4a, 0xc7, 0x33, 0x8f, 0x75, 0x18, 0x5b, 0x76, 0xda, 0xce, 0xa6, 0xdb, 0x74, 0x23, + 0x97, 0x84, 0xe8, 0x29, 0x28, 0x3a, 0x8d, 0x06, 0xe3, 0xb6, 0x4a, 0x4b, 0xa7, 0x1f, 0x1c, 0xcc, + 0x17, 0x17, 0x1b, 0xf4, 0xda, 0x07, 0x85, 0xb5, 0x8f, 0x29, 0x06, 0xfa, 0x20, 0x0c, 0x34, 0x02, + 0xbf, 0x3d, 0x5b, 0x60, 0x98, 0x74, 0xd7, 0x0d, 0x94, 0x03, 0xbf, 0x9d, 0x40, 0x65, 0x38, 0xf6, + 0xaf, 0x16, 0xe0, 0x89, 0x65, 0xd2, 0xde, 0x59, 0xad, 0xe5, 0x9c, 0xdf, 0x97, 0x61, 0xa4, 0xe5, + 0x7b, 0x6e, 0xe4, 0x07, 0xa1, 0x68, 0x9a, 0xad, 0x88, 0x35, 0x51, 0x86, 0x15, 0x14, 0x5d, 0x80, + 0x81, 0x76, 0xcc, 0x54, 0x8e, 0x49, 0x86, 0x94, 0xb1, 0x93, 0x0c, 0x42, 0x31, 0x3a, 0x21, 0x09, + 0xc4, 0x8a, 0x51, 0x18, 0xb7, 0x43, 0x12, 0x60, 0x06, 0x89, 0x6f, 0x66, 0x7a, 0x67, 0x8b, 0x13, + 0x3a, 0x71, 0x33, 0x53, 0x08, 0xd6, 0xb0, 0x50, 0x15, 0x4a, 0x61, 0x62, 0x66, 0xfb, 0xda, 0xa6, + 0xe3, 0xec, 0xea, 0x56, 0x33, 0x19, 0x13, 0x31, 0x6e, 0x94, 0xa1, 0x9e, 0x57, 0xf7, 0x57, 0x0a, + 0x80, 0xf8, 0x10, 0x7e, 0x83, 0x0d, 0xdc, 0xed, 0xf4, 0xc0, 0xf5, 0xbf, 0x25, 0x8e, 0x6b, 0xf4, + 0xfe, 0xcc, 0x82, 0x27, 0x96, 0x5d, 0xaf, 0x41, 0x82, 0x9c, 0x05, 0xf8, 0x68, 0xde, 0xb2, 0x47, + 0x63, 0x1a, 0x8c, 0x25, 0x36, 0x70, 0x0c, 0x4b, 0xcc, 0xfe, 0x63, 0x0b, 0x10, 0xff, 0xec, 0x77, + 0xdd, 0xc7, 0xde, 0x4e, 0x7f, 0xec, 0x31, 0x2c, 0x0b, 0xfb, 0x26, 0x4c, 0x2c, 0x37, 0x5d, 0xe2, + 0x45, 0x95, 0xea, 0xb2, 0xef, 0x6d, 0xb9, 0xdb, 0xe8, 0x15, 0x98, 0x88, 0xdc, 0x16, 0xf1, 0x3b, + 0x51, 0x8d, 0xd4, 0x7d, 0x8f, 0xbd, 0x24, 0xad, 0xcb, 0x83, 0x4b, 0xe8, 0xc1, 0xc1, 0xfc, 0xc4, + 0x86, 0x01, 0xc1, 0x09, 0x4c, 0xfb, 0x77, 0xe9, 0xf8, 0xf9, 0xad, 0xb6, 0xef, 0x11, 0x2f, 0x5a, + 0xf6, 0xbd, 0x06, 0x97, 0x38, 0xbc, 0x02, 0x03, 0x11, 0x1d, 0x0f, 0x3e, 0x76, 0x97, 0xe4, 0x46, + 0xa1, 0xa3, 0x70, 0x78, 0x30, 0x7f, 0x26, 0x5d, 0x83, 0x8d, 0x13, 0xab, 0x83, 0xbe, 0x05, 0x86, + 0xc2, 0xc8, 0x89, 0x3a, 0xa1, 0x18, 0xcd, 0x27, 0xe5, 0x68, 0xd6, 0x58, 0xe9, 0xe1, 0xc1, 0xfc, + 0xa4, 0xaa, 0xc6, 0x8b, 0xb0, 0xa8, 0x80, 0x9e, 0x86, 0xe1, 0x16, 0x09, 0x43, 0x67, 0x5b, 0xde, + 0x86, 0x93, 0xa2, 0xee, 0xf0, 0x1a, 0x2f, 0xc6, 0x12, 0x8e, 0x2e, 0xc2, 0x20, 0x09, 0x02, 0x3f, + 0x10, 0x7b, 0x74, 0x5c, 0x20, 0x0e, 0xae, 0xd0, 0x42, 0xcc, 0x61, 0xf6, 0xbf, 0xb3, 0x60, 0x52, + 0xf5, 0x95, 0xb7, 0x75, 0x02, 0xaf, 0x82, 0x4f, 0x01, 0xd4, 0xe5, 0x07, 0x86, 0xec, 0xf6, 0x18, + 0x7d, 0xfe, 0x52, 0xe6, 0x45, 0x9d, 0x1a, 0xc6, 0x98, 0xb2, 0x2a, 0x0a, 0xb1, 0x46, 0xcd, 0xfe, + 0x27, 0x16, 0xcc, 0x24, 0xbe, 0xe8, 0xa6, 0x1b, 0x46, 0xe8, 0xcd, 0xd4, 0x57, 0x2d, 0xf4, 0xf7, + 0x55, 0xb4, 0x36, 0xfb, 0x26, 0xb5, 0x94, 0x65, 0x89, 0xf6, 0x45, 0xd7, 0x61, 0xd0, 0x8d, 0x48, + 0x4b, 0x7e, 0xcc, 0xc5, 0xae, 0x1f, 0xc3, 0x7b, 0x15, 0xcf, 0x48, 0x85, 0xd6, 0xc4, 0x9c, 0x80, + 0xfd, 0xab, 0x45, 0x28, 0xf1, 0x65, 0xbb, 0xe6, 0xb4, 0x4f, 0x60, 0x2e, 0x9e, 0x81, 0x92, 0xdb, + 0x6a, 0x75, 0x22, 0x67, 0x53, 0x1c, 0xe7, 0x23, 0x7c, 0x6b, 0x55, 0x64, 0x21, 0x8e, 0xe1, 0xa8, + 0x02, 0x03, 0xac, 0x2b, 0xfc, 0x2b, 0x9f, 0xca, 0xfe, 0x4a, 0xd1, 0xf7, 0x85, 0xb2, 0x13, 0x39, + 0x9c, 0x93, 0x52, 0xf7, 0x08, 0x2d, 0xc2, 0x8c, 0x04, 0x72, 0x00, 0x36, 0x5d, 0xcf, 0x09, 0xf6, + 0x69, 0xd9, 0x6c, 0x91, 0x11, 0x7c, 0xae, 0x3b, 0xc1, 0x25, 0x85, 0xcf, 0xc9, 0xaa, 0x0f, 0x8b, + 0x01, 0x58, 0x23, 0x3a, 0xf7, 0x11, 0x28, 0x29, 0xe4, 0xa3, 0x30, 0x44, 0x73, 0x1f, 0x83, 0xc9, + 0x44, 0x5b, 0xbd, 0xaa, 0x8f, 0xe9, 0xfc, 0xd4, 0x2f, 0xb1, 0x23, 0x43, 0xf4, 0x7a, 0xc5, 0xdb, + 0x13, 0x47, 0xee, 0xdb, 0x70, 0xaa, 0x99, 0x71, 0x92, 0x89, 0x79, 0xed, 0xff, 0xe4, 0x7b, 0x42, + 0x7c, 0xf6, 0xa9, 0x2c, 0x28, 0xce, 0x6c, 0x83, 0xf2, 0x08, 0x7e, 0x9b, 0x6e, 0x10, 0xa7, 0xa9, + 0xb3, 0xdb, 0xb7, 0x44, 0x19, 0x56, 0x50, 0x7a, 0xde, 0x9d, 0x52, 0x9d, 0xbf, 0x41, 0xf6, 0x6b, + 0xa4, 0x49, 0xea, 0x91, 0x1f, 0x7c, 0x5d, 0xbb, 0x7f, 0x8e, 0x8f, 0x3e, 0x3f, 0x2e, 0x47, 0x05, + 0x81, 0xe2, 0x0d, 0xb2, 0xcf, 0xa7, 0x42, 0xff, 0xba, 0x62, 0xd7, 0xaf, 0xfb, 0x19, 0x0b, 0xc6, + 0xd5, 0xd7, 0x9d, 0xc0, 0xb9, 0xb0, 0x64, 0x9e, 0x0b, 0xe7, 0xba, 0x2e, 0xf0, 0x9c, 0x13, 0xe1, + 0x2b, 0x05, 0x38, 0xab, 0x70, 0xe8, 0xdb, 0x80, 0xff, 0x11, 0xab, 0xea, 0x0a, 0x94, 0x3c, 0x25, + 0xb5, 0xb2, 0x4c, 0x71, 0x51, 0x2c, 0xb3, 0x8a, 0x71, 0x28, 0x8b, 0xe7, 0xc5, 0xa2, 0xa5, 0x31, + 0x5d, 0x9c, 0x2b, 0x44, 0xb7, 0x4b, 0x50, 0xec, 0xb8, 0x0d, 0x71, 0xc1, 0x7c, 0x48, 0x8e, 0xf6, + 0xed, 0x4a, 0xf9, 0xf0, 0x60, 0xfe, 0xc9, 0x3c, 0x55, 0x02, 0xbd, 0xd9, 0xc2, 0x85, 0xdb, 0x95, + 0x32, 0xa6, 0x95, 0xd1, 0x22, 0x4c, 0x4a, 0x6d, 0xc9, 0x1d, 0xca, 0x6e, 0xf9, 0x9e, 0xb8, 0x87, + 0x94, 0x4c, 0x16, 0x9b, 0x60, 0x9c, 0xc4, 0x47, 0x65, 0x98, 0xda, 0xed, 0x6c, 0x92, 0x26, 0x89, + 0xf8, 0x07, 0xdf, 0x20, 0x5c, 0x62, 0x59, 0x8a, 0x5f, 0x66, 0x37, 0x12, 0x70, 0x9c, 0xaa, 0x61, + 0xff, 0x05, 0xbb, 0x0f, 0xc4, 0xe8, 0x55, 0x03, 0x9f, 0x2e, 0x2c, 0x4a, 0xfd, 0xeb, 0xb9, 0x9c, + 0xfb, 0x59, 0x15, 0x37, 0xc8, 0xfe, 0x86, 0x4f, 0x39, 0xf3, 0xec, 0x55, 0x61, 0xac, 0xf9, 0x81, + 0xae, 0x6b, 0xfe, 0xe7, 0x0a, 0x70, 0x5a, 0x8d, 0x80, 0xc1, 0x04, 0x7e, 0xa3, 0x8f, 0xc1, 0x55, + 0x18, 0x6d, 0x90, 0x2d, 0xa7, 0xd3, 0x8c, 0x94, 0xf8, 0x7c, 0x90, 0xab, 0x50, 0xca, 0x71, 0x31, + 0xd6, 0x71, 0x8e, 0x30, 0x6c, 0xff, 0x73, 0x94, 0x5d, 0xc4, 0x91, 0x43, 0xd7, 0xb8, 0xda, 0x35, + 0x56, 0xee, 0xae, 0xb9, 0x08, 0x83, 0x6e, 0x8b, 0x32, 0x66, 0x05, 0x93, 0xdf, 0xaa, 0xd0, 0x42, + 0xcc, 0x61, 0xe8, 0x03, 0x30, 0x5c, 0xf7, 0x5b, 0x2d, 0xc7, 0x6b, 0xb0, 0x2b, 0xaf, 0xb4, 0x34, + 0x4a, 0x79, 0xb7, 0x65, 0x5e, 0x84, 0x25, 0x0c, 0x3d, 0x01, 0x03, 0x4e, 0xb0, 0xcd, 0x65, 0x18, + 0xa5, 0xa5, 0x11, 0xda, 0xd2, 0x62, 0xb0, 0x1d, 0x62, 0x56, 0x4a, 0x9f, 0x60, 0xf7, 0xfc, 0x60, + 0xd7, 0xf5, 0xb6, 0xcb, 0x6e, 0x20, 0xb6, 0x84, 0xba, 0x0b, 0xef, 0x2a, 0x08, 0xd6, 0xb0, 0xd0, + 0x2a, 0x0c, 0xb6, 0xfd, 0x20, 0x0a, 0x67, 0x87, 0xd8, 0x70, 0x3f, 0x99, 0x73, 0x10, 0xf1, 0xaf, + 0xad, 0xfa, 0x41, 0x14, 0x7f, 0x00, 0xfd, 0x17, 0x62, 0x5e, 0x1d, 0xdd, 0x84, 0x61, 0xe2, 0xed, + 0xad, 0x06, 0x7e, 0x6b, 0x76, 0x26, 0x9f, 0xd2, 0x0a, 0x47, 0xe1, 0xcb, 0x2c, 0xe6, 0x51, 0x45, + 0x31, 0x96, 0x24, 0xd0, 0xb7, 0x40, 0x91, 0x78, 0x7b, 0xb3, 0xc3, 0x8c, 0xd2, 0x5c, 0x0e, 0xa5, + 0x3b, 0x4e, 0x10, 0x9f, 0xf9, 0x2b, 0xde, 0x1e, 0xa6, 0x75, 0xd0, 0x27, 0xa1, 0x24, 0x0f, 0x8c, + 0x50, 0x08, 0xeb, 0x32, 0x17, 0xac, 0x3c, 0x66, 0x30, 0x79, 0xab, 0xe3, 0x06, 0xa4, 0x45, 0xbc, + 0x28, 0x8c, 0x4f, 0x48, 0x09, 0x0d, 0x71, 0x4c, 0x0d, 0x7d, 0x52, 0x4a, 0x88, 0xd7, 0xfc, 0x8e, + 0x17, 0x85, 0xb3, 0x25, 0xd6, 0xbd, 0x4c, 0xdd, 0xdd, 0x9d, 0x18, 0x2f, 0x29, 0x42, 0xe6, 0x95, + 0xb1, 0x41, 0x0a, 0x7d, 0x1a, 0xc6, 0xf9, 0x7f, 0xae, 0x01, 0x0b, 0x67, 0x4f, 0x33, 0xda, 0x17, + 0xf2, 0x69, 0x73, 0xc4, 0xa5, 0xd3, 0x82, 0xf8, 0xb8, 0x5e, 0x1a, 0x62, 0x93, 0x1a, 0xc2, 0x30, + 0xde, 0x74, 0xf7, 0x88, 0x47, 0xc2, 0xb0, 0x1a, 0xf8, 0x9b, 0x64, 0x16, 0xd8, 0xc0, 0x9c, 0xcd, + 0xd6, 0x98, 0xf9, 0x9b, 0x64, 0x69, 0x9a, 0xd2, 0xbc, 0xa9, 0xd7, 0xc1, 0x26, 0x09, 0x74, 0x1b, + 0x26, 0xe8, 0x8b, 0xcd, 0x8d, 0x89, 0x8e, 0xf6, 0x22, 0xca, 0xde, 0x55, 0xd8, 0xa8, 0x84, 0x13, + 0x44, 0xd0, 0x2d, 0x18, 0x0b, 0x23, 0x27, 0x88, 0x3a, 0x6d, 0x4e, 0xf4, 0x4c, 0x2f, 0xa2, 0x4c, + 0xe1, 0x5a, 0xd3, 0xaa, 0x60, 0x83, 0x00, 0x7a, 0x1d, 0x4a, 0x4d, 0x77, 0x8b, 0xd4, 0xf7, 0xeb, + 0x4d, 0x32, 0x3b, 0xc6, 0xa8, 0x65, 0x1e, 0x2a, 0x37, 0x25, 0x12, 0xe7, 0x73, 0xd5, 0x5f, 0x1c, + 0x57, 0x47, 0x77, 0xe0, 0x4c, 0x44, 0x82, 0x96, 0xeb, 0x39, 0xf4, 0x30, 0x10, 0x4f, 0x2b, 0xa6, + 0xc8, 0x1c, 0x67, 0xbb, 0xed, 0xbc, 0x98, 0x8d, 0x33, 0x1b, 0x99, 0x58, 0x38, 0xa7, 0x36, 0xba, + 0x0f, 0xb3, 0x19, 0x10, 0xbf, 0xe9, 0xd6, 0xf7, 0x67, 0x4f, 0x31, 0xca, 0x1f, 0x15, 0x94, 0x67, + 0x37, 0x72, 0xf0, 0x0e, 0xbb, 0xc0, 0x70, 0x2e, 0x75, 0x74, 0x0b, 0x26, 0xd9, 0x09, 0x54, 0xed, + 0x34, 0x9b, 0xa2, 0xc1, 0x09, 0xd6, 0xe0, 0x07, 0xe4, 0x7d, 0x5c, 0x31, 0xc1, 0x87, 0x07, 0xf3, + 0x10, 0xff, 0xc3, 0xc9, 0xda, 0x68, 0x93, 0xe9, 0xcc, 0x3a, 0x81, 0x1b, 0xed, 0xd3, 0x73, 0x83, + 0xdc, 0x8f, 0x66, 0x27, 0xbb, 0xca, 0x2b, 0x74, 0x54, 0xa5, 0x58, 0xd3, 0x0b, 0x71, 0x92, 0x20, + 0x3d, 0x52, 0xc3, 0xa8, 0xe1, 0x7a, 0xb3, 0x53, 0xfc, 0x5d, 0x22, 0x4f, 0xa4, 0x1a, 0x2d, 0xc4, + 0x1c, 0xc6, 0xf4, 0x65, 0xf4, 0xc7, 0x2d, 0x7a, 0x73, 0x4d, 0x33, 0xc4, 0x58, 0x5f, 0x26, 0x01, + 0x38, 0xc6, 0xa1, 0xcc, 0x64, 0x14, 0xed, 0xcf, 0x22, 0x86, 0xaa, 0x0e, 0x96, 0x8d, 0x8d, 0x4f, + 0x62, 0x5a, 0x6e, 0x6f, 0xc2, 0x84, 0x3a, 0x08, 0xd9, 0x98, 0xa0, 0x79, 0x18, 0x64, 0xec, 0x93, + 0x90, 0xae, 0x95, 0x68, 0x17, 0x18, 0x6b, 0x85, 0x79, 0x39, 0xeb, 0x82, 0xfb, 0x36, 0x59, 0xda, + 0x8f, 0x08, 0x7f, 0xd3, 0x17, 0xb5, 0x2e, 0x48, 0x00, 0x8e, 0x71, 0xec, 0xff, 0xc3, 0xd9, 0xd0, + 0xf8, 0xb4, 0xed, 0xe3, 0x7e, 0x79, 0x16, 0x46, 0x76, 0xfc, 0x30, 0xa2, 0xd8, 0xac, 0x8d, 0xc1, + 0x98, 0xf1, 0xbc, 0x2e, 0xca, 0xb1, 0xc2, 0x40, 0xaf, 0xc2, 0x78, 0x5d, 0x6f, 0x40, 0x5c, 0x8e, + 0xea, 0x18, 0x31, 0x5a, 0xc7, 0x26, 0x2e, 0x7a, 0x19, 0x46, 0x98, 0x0d, 0x48, 0xdd, 0x6f, 0x0a, + 0xae, 0x4d, 0xde, 0xf0, 0x23, 0x55, 0x51, 0x7e, 0xa8, 0xfd, 0xc6, 0x0a, 0x1b, 0x5d, 0x82, 0x21, + 0xda, 0x85, 0x4a, 0x55, 0x5c, 0x4b, 0x4a, 0x50, 0x74, 0x9d, 0x95, 0x62, 0x01, 0xb5, 0xff, 0x52, + 0x41, 0x1b, 0x65, 0xfa, 0x1e, 0x26, 0xa8, 0x0a, 0xc3, 0xf7, 0x1c, 0x37, 0x72, 0xbd, 0x6d, 0xc1, + 0x7f, 0x3c, 0xdd, 0xf5, 0x8e, 0x62, 0x95, 0xee, 0xf2, 0x0a, 0xfc, 0x16, 0x15, 0x7f, 0xb0, 0x24, + 0x43, 0x29, 0x06, 0x1d, 0xcf, 0xa3, 0x14, 0x0b, 0xfd, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe, + 0x60, 0x49, 0x06, 0xbd, 0x09, 0x20, 0x77, 0x18, 0x69, 0x08, 0xdb, 0x8b, 0x67, 0x7b, 0x13, 0xdd, + 0x50, 0x75, 0x96, 0x26, 0xe8, 0x1d, 0x1d, 0xff, 0xc7, 0x1a, 0x3d, 0x3b, 0x62, 0x7c, 0x5a, 0xba, + 0x33, 0xe8, 0xdb, 0xe8, 0x12, 0x77, 0x82, 0x88, 0x34, 0x16, 0x23, 0x31, 0x38, 0x1f, 0xec, 0xef, + 0x91, 0xb2, 0xe1, 0xb6, 0x88, 0xbe, 0x1d, 0x04, 0x11, 0x1c, 0xd3, 0xb3, 0x7f, 0xa1, 0x08, 0xb3, + 0x79, 0xdd, 0xa5, 0x8b, 0x8e, 0xdc, 0x77, 0xa3, 0x65, 0xca, 0x5e, 0x59, 0xe6, 0xa2, 0x5b, 0x11, + 0xe5, 0x58, 0x61, 0xd0, 0xd9, 0x0f, 0xdd, 0x6d, 0xf9, 0xc6, 0x1c, 0x8c, 0x67, 0xbf, 0xc6, 0x4a, + 0xb1, 0x80, 0x52, 0xbc, 0x80, 0x38, 0xa1, 0x30, 0xee, 0xd1, 0x56, 0x09, 0x66, 0xa5, 0x58, 0x40, + 0x75, 0x69, 0xd7, 0x40, 0x0f, 0x69, 0x97, 0x31, 0x44, 0x83, 0xc7, 0x3b, 0x44, 0xe8, 0x33, 0x00, + 0x5b, 0xae, 0xe7, 0x86, 0x3b, 0x8c, 0xfa, 0xd0, 0x91, 0xa9, 0x2b, 0xe6, 0x6c, 0x55, 0x51, 0xc1, + 0x1a, 0x45, 0xf4, 0x12, 0x8c, 0xaa, 0x0d, 0x58, 0x29, 0x33, 0x4d, 0xa7, 0x66, 0x39, 0x12, 0x9f, + 0x46, 0x65, 0xac, 0xe3, 0xd9, 0x9f, 0x4b, 0xae, 0x17, 0xb1, 0x03, 0xb4, 0xf1, 0xb5, 0xfa, 0x1d, + 0xdf, 0x42, 0xf7, 0xf1, 0xb5, 0xbf, 0x56, 0x84, 0x49, 0xa3, 0xb1, 0x4e, 0xd8, 0xc7, 0x99, 0x75, + 0x8d, 0x1e, 0xe0, 0x4e, 0x44, 0xc4, 0xfe, 0xb3, 0x7b, 0x6f, 0x15, 0xfd, 0x90, 0xa7, 0x3b, 0x80, + 0xd7, 0x47, 0x9f, 0x81, 0x52, 0xd3, 0x09, 0x99, 0xe4, 0x8c, 0x88, 0x7d, 0xd7, 0x0f, 0xb1, 0xf8, + 0x61, 0xe2, 0x84, 0x91, 0x76, 0x6b, 0x72, 0xda, 0x31, 0x49, 0x7a, 0xd3, 0x50, 0xfe, 0x44, 0x5a, + 0x8f, 0xa9, 0x4e, 0x50, 0x26, 0x66, 0x1f, 0x73, 0x18, 0x7a, 0x19, 0xc6, 0x02, 0xc2, 0x56, 0xc5, + 0x32, 0xe5, 0xe6, 0xd8, 0x32, 0x1b, 0x8c, 0xd9, 0x3e, 0xac, 0xc1, 0xb0, 0x81, 0x19, 0xbf, 0x0d, + 0x86, 0xba, 0xbc, 0x0d, 0x9e, 0x86, 0x61, 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0x15, 0x5e, 0x8c, + 0x25, 0x3c, 0xb9, 0x60, 0x46, 0xfa, 0x5b, 0x30, 0xf4, 0xf5, 0x21, 0x16, 0x35, 0xd3, 0x32, 0x8f, + 0xf0, 0x53, 0x4e, 0x2c, 0x79, 0x2c, 0x61, 0xf6, 0x07, 0x61, 0xa2, 0xec, 0x90, 0x96, 0xef, 0xad, + 0x78, 0x8d, 0xb6, 0xef, 0x7a, 0x11, 0x9a, 0x85, 0x01, 0x76, 0x89, 0xf0, 0x23, 0x60, 0x80, 0x36, + 0x84, 0x59, 0x89, 0xbd, 0x0d, 0xa7, 0xcb, 0xfe, 0x3d, 0xef, 0x9e, 0x13, 0x34, 0x16, 0xab, 0x15, + 0xed, 0x7d, 0xbd, 0x2e, 0xdf, 0x77, 0xdc, 0x68, 0x2b, 0xf3, 0xe8, 0xd5, 0x6a, 0x72, 0xb6, 0x76, + 0xd5, 0x6d, 0x92, 0x1c, 0x29, 0xc8, 0x5f, 0x2d, 0x18, 0x2d, 0xc5, 0xf8, 0x4a, 0xab, 0x65, 0xe5, + 0x6a, 0xb5, 0xde, 0x80, 0x91, 0x2d, 0x97, 0x34, 0x1b, 0x98, 0x6c, 0x89, 0x95, 0xf8, 0x54, 0xbe, + 0x1d, 0xca, 0x2a, 0xc5, 0x94, 0x52, 0x2f, 0xfe, 0x3a, 0x5c, 0x15, 0x95, 0xb1, 0x22, 0x83, 0x76, + 0x61, 0x4a, 0x3e, 0x18, 0x24, 0x54, 0xac, 0xcb, 0xa7, 0xbb, 0xbd, 0x42, 0x4c, 0xe2, 0xa7, 0x1e, + 0x1c, 0xcc, 0x4f, 0xe1, 0x04, 0x19, 0x9c, 0x22, 0x4c, 0x9f, 0x83, 0x2d, 0x7a, 0x02, 0x0f, 0xb0, + 0xe1, 0x67, 0xcf, 0x41, 0xf6, 0xb2, 0x65, 0xa5, 0xf6, 0x8f, 0x59, 0xf0, 0x58, 0x6a, 0x64, 0xc4, + 0x0b, 0xff, 0x98, 0x67, 0x21, 0xf9, 0xe2, 0x2e, 0xf4, 0x7e, 0x71, 0xdb, 0x7f, 0xd7, 0x82, 0x53, + 0x2b, 0xad, 0x76, 0xb4, 0x5f, 0x76, 0x4d, 0x15, 0xd4, 0x47, 0x60, 0xa8, 0x45, 0x1a, 0x6e, 0xa7, + 0x25, 0x66, 0x6e, 0x5e, 0x9e, 0x52, 0x6b, 0xac, 0xf4, 0xf0, 0x60, 0x7e, 0xbc, 0x16, 0xf9, 0x81, + 0xb3, 0x4d, 0x78, 0x01, 0x16, 0xe8, 0xec, 0xac, 0x77, 0xdf, 0x26, 0x37, 0xdd, 0x96, 0x2b, 0xed, + 0x8a, 0xba, 0xca, 0xec, 0x16, 0xe4, 0x80, 0x2e, 0xbc, 0xd1, 0x71, 0xbc, 0xc8, 0x8d, 0xf6, 0x85, + 0xf6, 0x48, 0x12, 0xc1, 0x31, 0x3d, 0xfb, 0xab, 0x16, 0x4c, 0xca, 0x75, 0xbf, 0xd8, 0x68, 0x04, + 0x24, 0x0c, 0xd1, 0x1c, 0x14, 0xdc, 0xb6, 0xe8, 0x25, 0x88, 0x5e, 0x16, 0x2a, 0x55, 0x5c, 0x70, + 0xdb, 0x92, 0x2d, 0x63, 0x07, 0x61, 0xd1, 0x54, 0xa4, 0x5d, 0x17, 0xe5, 0x58, 0x61, 0xa0, 0xcb, + 0x30, 0xe2, 0xf9, 0x0d, 0x6e, 0xdb, 0xc5, 0xaf, 0x34, 0xb6, 0xc0, 0xd6, 0x45, 0x19, 0x56, 0x50, + 0x54, 0x85, 0x12, 0x37, 0x7b, 0x8a, 0x17, 0x6d, 0x5f, 0xc6, 0x53, 0xec, 0xcb, 0x36, 0x64, 0x4d, + 0x1c, 0x13, 0xb1, 0x7f, 0xc5, 0x82, 0x31, 0xf9, 0x65, 0x7d, 0xf2, 0x9c, 0x74, 0x6b, 0xc5, 0xfc, + 0x66, 0xbc, 0xb5, 0x28, 0xcf, 0xc8, 0x20, 0x06, 0xab, 0x58, 0x3c, 0x12, 0xab, 0x78, 0x15, 0x46, + 0x9d, 0x76, 0xbb, 0x6a, 0xf2, 0x99, 0x6c, 0x29, 0x2d, 0xc6, 0xc5, 0x58, 0xc7, 0xb1, 0x7f, 0xb4, + 0x00, 0x13, 0xf2, 0x0b, 0x6a, 0x9d, 0xcd, 0x90, 0x44, 0x68, 0x03, 0x4a, 0x0e, 0x9f, 0x25, 0x22, + 0x17, 0xf9, 0xc5, 0x6c, 0x39, 0x82, 0x31, 0xa5, 0xf1, 0x85, 0xbf, 0x28, 0x6b, 0xe3, 0x98, 0x10, + 0x6a, 0xc2, 0xb4, 0xe7, 0x47, 0xec, 0xf0, 0x57, 0xf0, 0x6e, 0xaa, 0x9d, 0x24, 0xf5, 0xb3, 0x82, + 0xfa, 0xf4, 0x7a, 0x92, 0x0a, 0x4e, 0x13, 0x46, 0x2b, 0x52, 0x36, 0x53, 0xcc, 0x17, 0x06, 0xe8, + 0x13, 0x97, 0x2d, 0x9a, 0xb1, 0x7f, 0xd9, 0x82, 0x92, 0x44, 0x3b, 0x09, 0x2d, 0xde, 0x1a, 0x0c, + 0x87, 0x6c, 0x12, 0xe4, 0xd0, 0xd8, 0xdd, 0x3a, 0xce, 0xe7, 0x2b, 0xbe, 0xd3, 0xf8, 0xff, 0x10, + 0x4b, 0x1a, 0x4c, 0x34, 0xaf, 0xba, 0xff, 0x2e, 0x11, 0xcd, 0xab, 0xfe, 0xe4, 0x5c, 0x4a, 0x7f, + 0xc8, 0xfa, 0xac, 0xc9, 0xba, 0x28, 0xeb, 0xd5, 0x0e, 0xc8, 0x96, 0x7b, 0x3f, 0xc9, 0x7a, 0x55, + 0x59, 0x29, 0x16, 0x50, 0xf4, 0x26, 0x8c, 0xd5, 0xa5, 0x4c, 0x36, 0xde, 0xe1, 0x97, 0xba, 0xea, + 0x07, 0x94, 0x2a, 0x89, 0xcb, 0x42, 0x96, 0xb5, 0xfa, 0xd8, 0xa0, 0x66, 0x9a, 0x11, 0x14, 0x7b, + 0x99, 0x11, 0xc4, 0x74, 0xf3, 0x95, 0xea, 0x3f, 0x6e, 0xc1, 0x10, 0x97, 0xc5, 0xf5, 0x27, 0x0a, + 0xd5, 0x34, 0x6b, 0xf1, 0xd8, 0xdd, 0xa1, 0x85, 0x42, 0x53, 0x86, 0xd6, 0xa0, 0xc4, 0x7e, 0x30, + 0x59, 0x62, 0x31, 0xdf, 0xea, 0x9e, 0xb7, 0xaa, 0x77, 0xf0, 0x8e, 0xac, 0x86, 0x63, 0x0a, 0xf6, + 0x0f, 0x17, 0xe9, 0xe9, 0x16, 0xa3, 0x1a, 0x97, 0xbe, 0xf5, 0xe8, 0x2e, 0xfd, 0xc2, 0xa3, 0xba, + 0xf4, 0xb7, 0x61, 0xb2, 0xae, 0xe9, 0xe1, 0xe2, 0x99, 0xbc, 0xdc, 0x75, 0x91, 0x68, 0x2a, 0x3b, + 0x2e, 0x65, 0x59, 0x36, 0x89, 0xe0, 0x24, 0x55, 0xf4, 0x6d, 0x30, 0xc6, 0xe7, 0x59, 0xb4, 0xc2, + 0x2d, 0x31, 0x3e, 0x90, 0xbf, 0x5e, 0xf4, 0x26, 0xb8, 0x54, 0x4e, 0xab, 0x8e, 0x0d, 0x62, 0xf6, + 0x9f, 0x58, 0x80, 0x56, 0xda, 0x3b, 0xa4, 0x45, 0x02, 0xa7, 0x19, 0x8b, 0xd3, 0xbf, 0xdf, 0x82, + 0x59, 0x92, 0x2a, 0x5e, 0xf6, 0x5b, 0x2d, 0xf1, 0x68, 0xc9, 0x79, 0x57, 0xaf, 0xe4, 0xd4, 0x51, + 0x6e, 0x09, 0xb3, 0x79, 0x18, 0x38, 0xb7, 0x3d, 0xb4, 0x06, 0x33, 0xfc, 0x96, 0x54, 0x00, 0xcd, + 0xf6, 0xfa, 0x71, 0x41, 0x78, 0x66, 0x23, 0x8d, 0x82, 0xb3, 0xea, 0xd9, 0xdf, 0x35, 0x06, 0xb9, + 0xbd, 0x78, 0x4f, 0x8f, 0xf0, 0x9e, 0x1e, 0xe1, 0x3d, 0x3d, 0xc2, 0x7b, 0x7a, 0x84, 0xf7, 0xf4, + 0x08, 0xdf, 0xf4, 0x7a, 0x84, 0x3f, 0xb2, 0x60, 0x26, 0x7d, 0x0d, 0x9c, 0x04, 0x63, 0xde, 0x81, + 0x99, 0xf4, 0x5d, 0xd7, 0xd5, 0xce, 0x2e, 0xdd, 0xcf, 0xf8, 0xde, 0xcb, 0xf8, 0x06, 0x9c, 0x45, + 0xdf, 0xfe, 0xcb, 0x16, 0x9c, 0x56, 0xc8, 0xc6, 0x4b, 0xff, 0xf3, 0x30, 0xc3, 0xcf, 0x97, 0xe5, + 0xa6, 0xe3, 0xb6, 0x36, 0x48, 0xab, 0xdd, 0x74, 0x22, 0x69, 0x66, 0x70, 0x35, 0x73, 0xab, 0x26, + 0x4c, 0x74, 0x8d, 0x8a, 0x4b, 0x8f, 0xd1, 0x7e, 0x65, 0x00, 0x70, 0x56, 0x33, 0xf6, 0x2f, 0x8c, + 0xc0, 0xe0, 0xca, 0x1e, 0xf1, 0xa2, 0x13, 0x18, 0xfa, 0x3a, 0x4c, 0xb8, 0xde, 0x9e, 0xdf, 0xdc, + 0x23, 0x0d, 0x0e, 0x3f, 0xca, 0xd3, 0xfd, 0x8c, 0x20, 0x3d, 0x51, 0x31, 0x48, 0xe0, 0x04, 0xc9, + 0x47, 0x21, 0x3e, 0xbf, 0x06, 0x43, 0xfc, 0xd6, 0x12, 0xb2, 0xf3, 0xcc, 0x4b, 0x8a, 0x0d, 0xa2, + 0xb8, 0x8b, 0x63, 0xd1, 0x3e, 0xbf, 0x15, 0x45, 0x75, 0xf4, 0x39, 0x98, 0xd8, 0x72, 0x83, 0x30, + 0xda, 0x70, 0x5b, 0x24, 0x8c, 0x9c, 0x56, 0xfb, 0x21, 0xc4, 0xe5, 0x6a, 0x1c, 0x56, 0x0d, 0x4a, + 0x38, 0x41, 0x19, 0x6d, 0xc3, 0x78, 0xd3, 0xd1, 0x9b, 0x1a, 0x3e, 0x72, 0x53, 0xea, 0x3a, 0xbc, + 0xa9, 0x13, 0xc2, 0x26, 0x5d, 0x7a, 0x7e, 0xd4, 0x99, 0xc4, 0x77, 0x84, 0xc9, 0x41, 0xd4, 0xf9, + 0xc1, 0x45, 0xbd, 0x1c, 0x46, 0x39, 0x3b, 0x66, 0x11, 0x5c, 0x32, 0x39, 0x3b, 0xcd, 0xee, 0xf7, + 0xb3, 0x50, 0x22, 0x74, 0x08, 0x29, 0x61, 0x71, 0xa3, 0x5e, 0xe9, 0xaf, 0xaf, 0x6b, 0x6e, 0x3d, + 0xf0, 0x4d, 0x45, 0xc5, 0x8a, 0xa4, 0x84, 0x63, 0xa2, 0x68, 0x19, 0x86, 0x42, 0x12, 0xb8, 0x24, + 0x14, 0x77, 0x6b, 0x97, 0x69, 0x64, 0x68, 0xdc, 0x99, 0x86, 0xff, 0xc6, 0xa2, 0x2a, 0x5d, 0x5e, + 0x0e, 0x93, 0xe1, 0xb2, 0xdb, 0x4f, 0x5b, 0x5e, 0x8b, 0xac, 0x14, 0x0b, 0x28, 0x7a, 0x1d, 0x86, + 0x03, 0xd2, 0x64, 0x9a, 0xb0, 0xf1, 0xfe, 0x17, 0x39, 0x57, 0xac, 0xf1, 0x7a, 0x58, 0x12, 0x40, + 0x37, 0x00, 0x05, 0x84, 0x72, 0x86, 0xae, 0xb7, 0xad, 0xec, 0x64, 0xc5, 0xcd, 0xa2, 0x4e, 0x22, + 0x1c, 0x63, 0x48, 0xbf, 0x26, 0x9c, 0x51, 0x0d, 0x5d, 0x83, 0x69, 0x55, 0x5a, 0xf1, 0xc2, 0xc8, + 0xa1, 0x27, 0xfa, 0x24, 0xa3, 0xa5, 0x04, 0x33, 0x38, 0x89, 0x80, 0xd3, 0x75, 0xec, 0x2f, 0x5b, + 0xc0, 0xc7, 0xf9, 0x04, 0xc4, 0x11, 0xaf, 0x99, 0xe2, 0x88, 0xb3, 0xb9, 0x33, 0x97, 0x23, 0x8a, + 0xf8, 0xb2, 0x05, 0xa3, 0xda, 0xcc, 0xc6, 0x6b, 0xd6, 0xea, 0xb2, 0x66, 0x3b, 0x30, 0x45, 0x57, + 0xfa, 0xad, 0xcd, 0x90, 0x04, 0x7b, 0xa4, 0xc1, 0x16, 0x66, 0xe1, 0xe1, 0x16, 0xa6, 0xb2, 0xc9, + 0xbb, 0x99, 0x20, 0x88, 0x53, 0x4d, 0xd8, 0x9f, 0x95, 0x5d, 0x55, 0x26, 0x8c, 0x75, 0x35, 0xe7, + 0x09, 0x13, 0x46, 0x35, 0xab, 0x38, 0xc6, 0xa1, 0x5b, 0x6d, 0xc7, 0x0f, 0xa3, 0xa4, 0x09, 0xe3, + 0x75, 0x3f, 0x8c, 0x30, 0x83, 0xd8, 0x2f, 0x00, 0xac, 0xdc, 0x27, 0x75, 0xbe, 0x62, 0xf5, 0xd7, + 0x92, 0x95, 0xff, 0x5a, 0xb2, 0x7f, 0xcb, 0x82, 0x89, 0xd5, 0x65, 0xe3, 0xe6, 0x5a, 0x00, 0xe0, + 0x4f, 0xbc, 0xbb, 0x77, 0xd7, 0xa5, 0xfe, 0x9f, 0xab, 0x70, 0x55, 0x29, 0xd6, 0x30, 0xd0, 0x59, + 0x28, 0x36, 0x3b, 0x9e, 0x90, 0x97, 0x0e, 0x53, 0x7e, 0xe0, 0x66, 0xc7, 0xc3, 0xb4, 0x4c, 0xf3, + 0xa1, 0x28, 0xf6, 0xed, 0x43, 0xd1, 0x33, 0x96, 0x01, 0x9a, 0x87, 0xc1, 0x7b, 0xf7, 0xdc, 0x06, + 0xf7, 0x18, 0x15, 0xb6, 0x09, 0x77, 0xef, 0x56, 0xca, 0x21, 0xe6, 0xe5, 0xf6, 0x97, 0x8a, 0x30, + 0xb7, 0xda, 0x24, 0xf7, 0xdf, 0xa1, 0xd7, 0x6c, 0xbf, 0x1e, 0x20, 0x47, 0x93, 0x3c, 0x1d, 0xd5, + 0xcb, 0xa7, 0xf7, 0x78, 0x6c, 0xc1, 0x30, 0xb7, 0xe0, 0x93, 0x3e, 0xb4, 0xaf, 0x66, 0xb5, 0x9e, + 0x3f, 0x20, 0x0b, 0xdc, 0x12, 0x50, 0xb8, 0x00, 0xaa, 0x0b, 0x53, 0x94, 0x62, 0x49, 0x7c, 0xee, + 0x15, 0x18, 0xd3, 0x31, 0x8f, 0xe4, 0x6f, 0xf7, 0xff, 0x15, 0x61, 0x8a, 0xf6, 0xe0, 0x91, 0x4e, + 0xc4, 0xed, 0xf4, 0x44, 0x1c, 0xb7, 0xcf, 0x55, 0xef, 0xd9, 0x78, 0x33, 0x39, 0x1b, 0x57, 0xf3, + 0x66, 0xe3, 0xa4, 0xe7, 0xe0, 0x3b, 0x2d, 0x98, 0x59, 0x6d, 0xfa, 0xf5, 0xdd, 0x84, 0x5f, 0xd4, + 0x4b, 0x30, 0x4a, 0x8f, 0xe3, 0xd0, 0x70, 0xd9, 0x37, 0x82, 0x38, 0x08, 0x10, 0xd6, 0xf1, 0xb4, + 0x6a, 0xb7, 0x6f, 0x57, 0xca, 0x59, 0xb1, 0x1f, 0x04, 0x08, 0xeb, 0x78, 0xf6, 0x6f, 0x58, 0x70, + 0xee, 0xda, 0xf2, 0x4a, 0xbc, 0x14, 0x53, 0xe1, 0x27, 0x2e, 0xc1, 0x50, 0xbb, 0xa1, 0x75, 0x25, + 0x96, 0x27, 0x97, 0x59, 0x2f, 0x04, 0xf4, 0xdd, 0x12, 0x5a, 0xe5, 0xa7, 0x2c, 0x98, 0xb9, 0xe6, + 0x46, 0xf4, 0x76, 0x4d, 0x06, 0x42, 0xa0, 0xd7, 0x6b, 0xe8, 0x46, 0x7e, 0xb0, 0x9f, 0x0c, 0x84, + 0x80, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x3d, 0x97, 0xd9, 0x8e, 0x17, 0x4c, 0xcd, 0x1a, 0x16, + 0xe5, 0x58, 0x61, 0xd0, 0x0f, 0x6b, 0xb8, 0x01, 0x13, 0x4a, 0xee, 0x8b, 0x13, 0x56, 0x7d, 0x58, + 0x59, 0x02, 0x70, 0x8c, 0x43, 0xdf, 0x67, 0xf3, 0xd7, 0x9a, 0x9d, 0x30, 0x22, 0xc1, 0x56, 0x98, + 0x73, 0x3a, 0xbe, 0x00, 0x25, 0x22, 0x55, 0x00, 0xa2, 0xd7, 0x8a, 0x63, 0x54, 0xba, 0x01, 0x1e, + 0x8f, 0x41, 0xe1, 0xf5, 0xe1, 0x65, 0x79, 0x34, 0x37, 0xb9, 0x55, 0x40, 0x44, 0x6f, 0x4b, 0x0f, + 0x50, 0xc1, 0x3c, 0xdd, 0x57, 0x52, 0x50, 0x9c, 0x51, 0xc3, 0xfe, 0x31, 0x0b, 0x4e, 0xab, 0x0f, + 0x7e, 0xd7, 0x7d, 0xa6, 0xfd, 0xb3, 0x05, 0x18, 0xbf, 0xbe, 0xb1, 0x51, 0xbd, 0x46, 0x22, 0x71, + 0x6d, 0xf7, 0x56, 0xec, 0x63, 0x4d, 0x3f, 0xd9, 0xed, 0x31, 0xd7, 0x89, 0xdc, 0xe6, 0x02, 0x8f, + 0x73, 0xb4, 0x50, 0xf1, 0xa2, 0x5b, 0x41, 0x2d, 0x0a, 0x5c, 0x6f, 0x3b, 0x53, 0xa3, 0x29, 0x99, + 0x8b, 0x62, 0x1e, 0x73, 0x81, 0x5e, 0x80, 0x21, 0x16, 0x68, 0x49, 0x4e, 0xc2, 0xe3, 0xea, 0x2d, + 0xc4, 0x4a, 0x0f, 0x0f, 0xe6, 0x4b, 0xb7, 0x71, 0x85, 0xff, 0xc1, 0x02, 0x15, 0xdd, 0x86, 0xd1, + 0x9d, 0x28, 0x6a, 0x5f, 0x27, 0x4e, 0x83, 0x3e, 0xc6, 0xf9, 0x71, 0x78, 0x3e, 0xeb, 0x38, 0xa4, + 0x83, 0xc0, 0xd1, 0xe2, 0x13, 0x24, 0x2e, 0x0b, 0xb1, 0x4e, 0xc7, 0xae, 0x01, 0xc4, 0xb0, 0x63, + 0x52, 0xcd, 0xd8, 0x7f, 0x60, 0xc1, 0x30, 0x8f, 0x79, 0x11, 0xa0, 0x8f, 0xc2, 0x00, 0xb9, 0x4f, + 0xea, 0x82, 0xe3, 0xcd, 0xec, 0x70, 0xcc, 0x69, 0x71, 0x11, 0x33, 0xfd, 0x8f, 0x59, 0x2d, 0x74, + 0x1d, 0x86, 0x69, 0x6f, 0xaf, 0xa9, 0x00, 0x20, 0x4f, 0xe6, 0x7d, 0xb1, 0x9a, 0x76, 0xce, 0x9c, + 0x89, 0x22, 0x2c, 0xab, 0x33, 0x7d, 0x78, 0xbd, 0x5d, 0xa3, 0x27, 0x76, 0xd4, 0x8d, 0xb1, 0xd8, + 0x58, 0xae, 0x72, 0x24, 0x41, 0x8d, 0xeb, 0xc3, 0x65, 0x21, 0x8e, 0x89, 0xd8, 0x1b, 0x50, 0xa2, + 0x93, 0xba, 0xd8, 0x74, 0x9d, 0xee, 0x2a, 0xfe, 0x67, 0xa0, 0x24, 0x15, 0xf8, 0xa1, 0xf0, 0x75, + 0x67, 0x54, 0xa5, 0x7e, 0x3f, 0xc4, 0x31, 0xdc, 0xde, 0x82, 0x53, 0xcc, 0x1c, 0xd3, 0x89, 0x76, + 0x8c, 0x3d, 0xd6, 0x7b, 0x31, 0x3f, 0x2b, 0x1e, 0x90, 0x7c, 0x66, 0x66, 0x35, 0x77, 0xd2, 0x31, + 0x49, 0x31, 0x7e, 0x4c, 0xda, 0x5f, 0x1b, 0x80, 0xc7, 0x2b, 0xb5, 0xfc, 0x70, 0x28, 0x2f, 0xc3, + 0x18, 0xe7, 0x4b, 0xe9, 0xd2, 0x76, 0x9a, 0xa2, 0x5d, 0x25, 0x5b, 0xde, 0xd0, 0x60, 0xd8, 0xc0, + 0x44, 0xe7, 0xa0, 0xe8, 0xbe, 0xe5, 0x25, 0x9d, 0xad, 0x2a, 0x6f, 0xac, 0x63, 0x5a, 0x4e, 0xc1, + 0x94, 0xc5, 0xe5, 0x77, 0x87, 0x02, 0x2b, 0x36, 0xf7, 0x35, 0x98, 0x70, 0xc3, 0x7a, 0xe8, 0x56, + 0x3c, 0x7a, 0xce, 0x68, 0x27, 0x95, 0x12, 0x6e, 0xd0, 0x4e, 0x2b, 0x28, 0x4e, 0x60, 0x6b, 0x17, + 0xd9, 0x60, 0xdf, 0x6c, 0x72, 0x4f, 0xe7, 0x6f, 0xfa, 0x02, 0x68, 0xb3, 0xaf, 0x0b, 0x99, 0x92, + 0x40, 0xbc, 0x00, 0xf8, 0x07, 0x87, 0x58, 0xc2, 0xe8, 0xcb, 0xb1, 0xbe, 0xe3, 0xb4, 0x17, 0x3b, + 0xd1, 0x4e, 0xd9, 0x0d, 0xeb, 0xfe, 0x1e, 0x09, 0xf6, 0xd9, 0xa3, 0x7f, 0x24, 0x7e, 0x39, 0x2a, + 0xc0, 0xf2, 0xf5, 0xc5, 0x2a, 0xc5, 0xc4, 0xe9, 0x3a, 0x68, 0x11, 0x26, 0x65, 0x61, 0x8d, 0x84, + 0xec, 0x0a, 0x1b, 0x65, 0x64, 0x94, 0xfb, 0x93, 0x28, 0x56, 0x44, 0x92, 0xf8, 0x26, 0x27, 0x0d, + 0xc7, 0xc1, 0x49, 0x7f, 0x04, 0xc6, 0x5d, 0xcf, 0x8d, 0x5c, 0x27, 0xf2, 0xb9, 0x86, 0x8b, 0xbf, + 0xef, 0x99, 0xe8, 0xbe, 0xa2, 0x03, 0xb0, 0x89, 0x67, 0xff, 0x97, 0x01, 0x98, 0x66, 0xd3, 0xf6, + 0xde, 0x0a, 0xfb, 0x66, 0x5a, 0x61, 0xb7, 0xd3, 0x2b, 0xec, 0x38, 0x9e, 0x08, 0x0f, 0xbd, 0xcc, + 0x3e, 0x07, 0x25, 0xe5, 0xf1, 0x25, 0x5d, 0x3e, 0xad, 0x1c, 0x97, 0xcf, 0xde, 0xdc, 0x87, 0x34, + 0x9a, 0x2b, 0x66, 0x1a, 0xcd, 0xfd, 0x75, 0x0b, 0x62, 0x95, 0x0d, 0xba, 0x0e, 0xa5, 0xb6, 0xcf, + 0x6c, 0x41, 0x03, 0x69, 0x60, 0xfd, 0x78, 0xe6, 0x45, 0xc5, 0x2f, 0x45, 0xfe, 0xf1, 0x55, 0x59, + 0x03, 0xc7, 0x95, 0xd1, 0x12, 0x0c, 0xb7, 0x03, 0x52, 0x8b, 0x58, 0x54, 0x94, 0x9e, 0x74, 0xf8, + 0x1a, 0xe1, 0xf8, 0x58, 0x56, 0xb4, 0x7f, 0xce, 0x02, 0xe0, 0x76, 0x69, 0x8e, 0xb7, 0x4d, 0x4e, + 0x40, 0x6a, 0x5d, 0x86, 0x81, 0xb0, 0x4d, 0xea, 0xdd, 0xac, 0x74, 0xe3, 0xfe, 0xd4, 0xda, 0xa4, + 0x1e, 0x0f, 0x38, 0xfd, 0x87, 0x59, 0x6d, 0xfb, 0xbb, 0x01, 0x26, 0x62, 0xb4, 0x4a, 0x44, 0x5a, + 0xe8, 0x39, 0x23, 0x4a, 0xc2, 0xd9, 0x44, 0x94, 0x84, 0x12, 0xc3, 0xd6, 0x04, 0xa4, 0x9f, 0x83, + 0x62, 0xcb, 0xb9, 0x2f, 0x24, 0x60, 0xcf, 0x74, 0xef, 0x06, 0xa5, 0xbf, 0xb0, 0xe6, 0xdc, 0xe7, + 0x8f, 0xc4, 0x67, 0xe4, 0x02, 0x59, 0x73, 0xee, 0x1f, 0x72, 0x5b, 0x5c, 0x76, 0x48, 0xdd, 0x74, + 0xc3, 0xe8, 0x0b, 0xff, 0x39, 0xfe, 0xcf, 0x96, 0x1d, 0x6d, 0x84, 0xb5, 0xe5, 0x7a, 0xc2, 0xe4, + 0xaa, 0xaf, 0xb6, 0x5c, 0x2f, 0xd9, 0x96, 0xeb, 0xf5, 0xd1, 0x96, 0xeb, 0xa1, 0xb7, 0x61, 0x58, + 0x58, 0x44, 0x8a, 0xa8, 0x44, 0x57, 0xfa, 0x68, 0x4f, 0x18, 0x54, 0xf2, 0x36, 0xaf, 0xc8, 0x47, + 0xb0, 0x28, 0xed, 0xd9, 0xae, 0x6c, 0x10, 0xfd, 0x15, 0x0b, 0x26, 0xc4, 0x6f, 0x4c, 0xde, 0xea, + 0x90, 0x30, 0x12, 0xbc, 0xe7, 0x87, 0xfb, 0xef, 0x83, 0xa8, 0xc8, 0xbb, 0xf2, 0x61, 0x79, 0xcc, + 0x9a, 0xc0, 0x9e, 0x3d, 0x4a, 0xf4, 0x02, 0xfd, 0x7d, 0x0b, 0x4e, 0xb5, 0x9c, 0xfb, 0xbc, 0x45, + 0x5e, 0x86, 0x9d, 0xc8, 0xf5, 0x85, 0x65, 0xc1, 0x47, 0xfb, 0x9b, 0xfe, 0x54, 0x75, 0xde, 0x49, + 0xa9, 0xfe, 0x3c, 0x95, 0x85, 0xd2, 0xb3, 0xab, 0x99, 0xfd, 0x9a, 0xdb, 0x82, 0x11, 0xb9, 0xde, + 0x32, 0x44, 0x0d, 0x65, 0x9d, 0xb1, 0x3e, 0xb2, 0x41, 0xaa, 0x1e, 0x7d, 0x80, 0xb6, 0x23, 0xd6, + 0xda, 0x23, 0x6d, 0xe7, 0x73, 0x30, 0xa6, 0xaf, 0xb1, 0x47, 0xda, 0xd6, 0x5b, 0x30, 0x93, 0xb1, + 0x96, 0x1e, 0x69, 0x93, 0xf7, 0xe0, 0x6c, 0xee, 0xfa, 0x78, 0x94, 0x0d, 0xdb, 0x3f, 0x6b, 0xe9, + 0xe7, 0xe0, 0x09, 0xa8, 0x0e, 0x96, 0x4d, 0xd5, 0xc1, 0xf9, 0xee, 0x3b, 0x27, 0x47, 0x7f, 0xf0, + 0xa6, 0xde, 0x69, 0x7a, 0xaa, 0xa3, 0xd7, 0x61, 0xa8, 0x49, 0x4b, 0xa4, 0x5d, 0xad, 0xdd, 0x7b, + 0x47, 0xc6, 0xbc, 0x14, 0x2b, 0x0f, 0xb1, 0xa0, 0x60, 0xff, 0xa2, 0x05, 0x03, 0x27, 0x30, 0x12, + 0xd8, 0x1c, 0x89, 0xe7, 0x72, 0x49, 0x8b, 0x80, 0xc9, 0x0b, 0xd8, 0xb9, 0xb7, 0x72, 0x3f, 0x22, + 0x5e, 0xc8, 0x9e, 0x8a, 0x99, 0x03, 0xf3, 0x93, 0x16, 0xcc, 0xdc, 0xf4, 0x9d, 0xc6, 0x92, 0xd3, + 0x74, 0xbc, 0x3a, 0x09, 0x2a, 0xde, 0xf6, 0x91, 0x8c, 0xc2, 0x0b, 0x3d, 0x8d, 0xc2, 0x97, 0xa5, + 0x4d, 0xd5, 0x40, 0xfe, 0xfc, 0x51, 0x46, 0x32, 0x19, 0x37, 0xc6, 0xb0, 0xfe, 0xdd, 0x01, 0xa4, + 0xf7, 0x52, 0xb8, 0xe8, 0x60, 0x18, 0x76, 0x79, 0x7f, 0xc5, 0x24, 0x3e, 0x95, 0xcd, 0xe0, 0xa5, + 0x3e, 0x4f, 0x73, 0x3e, 0xe1, 0x05, 0x58, 0x12, 0xb2, 0x5f, 0x86, 0x4c, 0x3f, 0xff, 0xde, 0xc2, + 0x07, 0xfb, 0x93, 0x30, 0xcd, 0x6a, 0x1e, 0xf1, 0x61, 0x6c, 0x27, 0x64, 0x9b, 0x19, 0x11, 0x00, + 0xed, 0x2f, 0x5a, 0x30, 0xb9, 0x9e, 0x08, 0x8c, 0x76, 0x89, 0x69, 0x43, 0x33, 0x44, 0xea, 0x35, + 0x56, 0x8a, 0x05, 0xf4, 0xd8, 0x25, 0x59, 0x7f, 0x61, 0x41, 0x1c, 0x7a, 0xe3, 0x04, 0xd8, 0xb7, + 0x65, 0x83, 0x7d, 0xcb, 0x94, 0xb0, 0xa8, 0xee, 0xe4, 0x71, 0x6f, 0xe8, 0x86, 0x0a, 0x4a, 0xd5, + 0x45, 0xb8, 0x12, 0x93, 0xe1, 0x4b, 0x71, 0xc2, 0x8c, 0x5c, 0x25, 0xc3, 0x54, 0xd9, 0xbf, 0x5d, + 0x00, 0xa4, 0x70, 0xfb, 0x0e, 0x9a, 0x95, 0xae, 0x71, 0x3c, 0x41, 0xb3, 0xf6, 0x00, 0x31, 0x7d, + 0x7e, 0xe0, 0x78, 0x21, 0x27, 0xeb, 0x0a, 0xd9, 0xdd, 0xd1, 0x8c, 0x05, 0xe6, 0x44, 0x93, 0xe8, + 0x66, 0x8a, 0x1a, 0xce, 0x68, 0x41, 0xb3, 0xd3, 0x18, 0xec, 0xd7, 0x4e, 0x63, 0xa8, 0x87, 0x1b, + 0xde, 0xcf, 0x58, 0x30, 0xae, 0x86, 0xe9, 0x5d, 0x62, 0x24, 0xaf, 0xfa, 0x93, 0x73, 0x80, 0x56, + 0xb5, 0x2e, 0xb3, 0x8b, 0xe5, 0x5b, 0x99, 0x3b, 0xa5, 0xd3, 0x74, 0xdf, 0x26, 0x2a, 0x64, 0xe1, + 0xbc, 0x70, 0x8f, 0x14, 0xa5, 0x87, 0x07, 0xf3, 0xe3, 0xea, 0x1f, 0x0f, 0x91, 0x1c, 0x57, 0xa1, + 0x47, 0xf2, 0x64, 0x62, 0x29, 0xa2, 0x97, 0x60, 0xb0, 0xbd, 0xe3, 0x84, 0x24, 0xe1, 0x4c, 0x34, + 0x58, 0xa5, 0x85, 0x87, 0x07, 0xf3, 0x13, 0xaa, 0x02, 0x2b, 0xc1, 0x1c, 0xbb, 0xff, 0x50, 0x64, + 0xe9, 0xc5, 0xd9, 0x33, 0x14, 0xd9, 0x9f, 0x58, 0x30, 0xb0, 0xee, 0x37, 0x4e, 0xe2, 0x08, 0x78, + 0xcd, 0x38, 0x02, 0x9e, 0xc8, 0x8b, 0x5e, 0x9f, 0xbb, 0xfb, 0x57, 0x13, 0xbb, 0xff, 0x7c, 0x2e, + 0x85, 0xee, 0x1b, 0xbf, 0x05, 0xa3, 0x2c, 0x26, 0xbe, 0x70, 0x9c, 0x7a, 0xc1, 0xd8, 0xf0, 0xf3, + 0x89, 0x0d, 0x3f, 0xa9, 0xa1, 0x6a, 0x3b, 0xfd, 0x69, 0x18, 0x16, 0x9e, 0x38, 0x49, 0xaf, 0x54, + 0x81, 0x8b, 0x25, 0xdc, 0xfe, 0xf1, 0x22, 0x18, 0x31, 0xf8, 0xd1, 0x2f, 0x5b, 0xb0, 0x10, 0x70, + 0x0b, 0xdd, 0x46, 0xb9, 0x13, 0xb8, 0xde, 0x76, 0xad, 0xbe, 0x43, 0x1a, 0x9d, 0xa6, 0xeb, 0x6d, + 0x57, 0xb6, 0x3d, 0x5f, 0x15, 0xaf, 0xdc, 0x27, 0xf5, 0x0e, 0x53, 0x82, 0xf5, 0x08, 0xf8, 0xaf, + 0x2c, 0xdd, 0x9f, 0x7f, 0x70, 0x30, 0xbf, 0x80, 0x8f, 0x44, 0x1b, 0x1f, 0xb1, 0x2f, 0xe8, 0x37, + 0x2c, 0xb8, 0xc2, 0x43, 0xd3, 0xf7, 0xdf, 0xff, 0x2e, 0xaf, 0xe5, 0xaa, 0x24, 0x15, 0x13, 0xd9, + 0x20, 0x41, 0x6b, 0xe9, 0x23, 0x62, 0x40, 0xaf, 0x54, 0x8f, 0xd6, 0x16, 0x3e, 0x6a, 0xe7, 0xec, + 0x7f, 0x56, 0x84, 0x71, 0x11, 0xb2, 0x4a, 0xdc, 0x01, 0x2f, 0x19, 0x4b, 0xe2, 0xc9, 0xc4, 0x92, + 0x98, 0x36, 0x90, 0x8f, 0xe7, 0xf8, 0x0f, 0x61, 0x9a, 0x1e, 0xce, 0xd7, 0x89, 0x13, 0x44, 0x9b, + 0xc4, 0xe1, 0xe6, 0x57, 0xc5, 0x23, 0x9f, 0xfe, 0x4a, 0x3c, 0x77, 0x33, 0x49, 0x0c, 0xa7, 0xe9, + 0x7f, 0x33, 0xdd, 0x39, 0x1e, 0x4c, 0xa5, 0xa2, 0x8e, 0x7d, 0x0a, 0x4a, 0xca, 0x8d, 0x44, 0x1c, + 0x3a, 0xdd, 0x83, 0xf7, 0x25, 0x29, 0x70, 0x11, 0x5a, 0xec, 0xc2, 0x14, 0x93, 0xb3, 0xff, 0x41, + 0xc1, 0x68, 0x90, 0x4f, 0xe2, 0x3a, 0x8c, 0x38, 0x61, 0xe8, 0x6e, 0x7b, 0xa4, 0x21, 0x76, 0xec, + 0xfb, 0xf3, 0x76, 0xac, 0xd1, 0x0c, 0x73, 0xe5, 0x59, 0x14, 0x35, 0xb1, 0xa2, 0x81, 0xae, 0x73, + 0x23, 0xb7, 0x3d, 0xf9, 0xde, 0xeb, 0x8f, 0x1a, 0x48, 0x33, 0xb8, 0x3d, 0x82, 0x45, 0x7d, 0xf4, + 0x69, 0x6e, 0x85, 0x78, 0xc3, 0xf3, 0xef, 0x79, 0xd7, 0x7c, 0x5f, 0x86, 0x85, 0xe8, 0x8f, 0xe0, + 0xb4, 0xb4, 0x3d, 0x54, 0xd5, 0xb1, 0x49, 0xad, 0xbf, 0x30, 0x9e, 0x9f, 0x87, 0x19, 0x4a, 0xda, + 0xf4, 0xda, 0x0e, 0x11, 0x81, 0x49, 0x11, 0x0f, 0x4d, 0x96, 0x89, 0xb1, 0xcb, 0x7c, 0xca, 0x99, + 0xb5, 0x63, 0x39, 0xf2, 0x0d, 0x93, 0x04, 0x4e, 0xd2, 0xb4, 0xff, 0xb6, 0x05, 0xcc, 0x83, 0xf5, + 0x04, 0xf8, 0x91, 0x8f, 0x99, 0xfc, 0xc8, 0x6c, 0xde, 0x20, 0xe7, 0xb0, 0x22, 0x2f, 0xf2, 0x95, + 0x55, 0x0d, 0xfc, 0xfb, 0xfb, 0xc2, 0x74, 0xa4, 0xf7, 0xfb, 0xc3, 0xfe, 0xdf, 0x16, 0x3f, 0xc4, + 0x94, 0x93, 0x07, 0xfa, 0x76, 0x18, 0xa9, 0x3b, 0x6d, 0xa7, 0xce, 0x13, 0xc6, 0xe4, 0x4a, 0xf4, + 0x8c, 0x4a, 0x0b, 0xcb, 0xa2, 0x06, 0x97, 0x50, 0xc9, 0xb8, 0x7a, 0x23, 0xb2, 0xb8, 0xa7, 0x54, + 0x4a, 0x35, 0x39, 0xb7, 0x0b, 0xe3, 0x06, 0xb1, 0x47, 0x2a, 0xce, 0xf8, 0x76, 0x7e, 0xc5, 0xaa, + 0x38, 0x90, 0x2d, 0x98, 0xf6, 0xb4, 0xff, 0xf4, 0x42, 0x91, 0x8f, 0xcb, 0xf7, 0xf7, 0xba, 0x44, + 0xd9, 0xed, 0xa3, 0x39, 0xc7, 0x26, 0xc8, 0xe0, 0x34, 0x65, 0xfb, 0x27, 0x2c, 0x78, 0x4c, 0x47, + 0xd4, 0xfc, 0x6f, 0x7a, 0xe9, 0x08, 0xca, 0x30, 0xe2, 0xb7, 0x49, 0xe0, 0x44, 0x7e, 0x20, 0x6e, + 0x8d, 0xcb, 0x72, 0xd0, 0x6f, 0x89, 0xf2, 0x43, 0x11, 0x6e, 0x5d, 0x52, 0x97, 0xe5, 0x58, 0xd5, + 0xa4, 0xaf, 0x4f, 0x36, 0x18, 0xa1, 0xf0, 0xb4, 0x62, 0x67, 0x00, 0x53, 0x97, 0x87, 0x58, 0x40, + 0xec, 0xaf, 0x59, 0x7c, 0x61, 0xe9, 0x5d, 0x47, 0x6f, 0xc1, 0x54, 0xcb, 0x89, 0xea, 0x3b, 0x2b, + 0xf7, 0xdb, 0x01, 0xd7, 0xb8, 0xc8, 0x71, 0x7a, 0xa6, 0xd7, 0x38, 0x69, 0x1f, 0x19, 0x1b, 0x56, + 0xae, 0x25, 0x88, 0xe1, 0x14, 0x79, 0xb4, 0x09, 0xa3, 0xac, 0x8c, 0x39, 0x11, 0x86, 0xdd, 0x58, + 0x83, 0xbc, 0xd6, 0x94, 0xc5, 0xc1, 0x5a, 0x4c, 0x07, 0xeb, 0x44, 0xed, 0x9f, 0x2e, 0xf2, 0xdd, + 0xce, 0x58, 0xf9, 0xa7, 0x61, 0xb8, 0xed, 0x37, 0x96, 0x2b, 0x65, 0x2c, 0x66, 0x41, 0x5d, 0x23, + 0x55, 0x5e, 0x8c, 0x25, 0x1c, 0x5d, 0x86, 0x11, 0xf1, 0x53, 0x6a, 0xc8, 0xd8, 0xd9, 0x2c, 0xf0, + 0x42, 0xac, 0xa0, 0xe8, 0x79, 0x80, 0x76, 0xe0, 0xef, 0xb9, 0x0d, 0x16, 0xdc, 0xa2, 0x68, 0x1a, + 0x0b, 0x55, 0x15, 0x04, 0x6b, 0x58, 0xe8, 0x55, 0x18, 0xef, 0x78, 0x21, 0x67, 0x47, 0xb4, 0x50, + 0xb6, 0xca, 0x8c, 0xe5, 0xb6, 0x0e, 0xc4, 0x26, 0x2e, 0x5a, 0x84, 0xa1, 0xc8, 0x61, 0xc6, 0x2f, + 0x83, 0xf9, 0xc6, 0xb7, 0x1b, 0x14, 0x43, 0xcf, 0x4d, 0x42, 0x2b, 0x60, 0x51, 0x11, 0x7d, 0x4a, + 0xfa, 0xf3, 0xf2, 0x83, 0x5d, 0x58, 0xbd, 0xf7, 0x77, 0x09, 0x68, 0xde, 0xbc, 0xc2, 0x9a, 0xde, + 0xa0, 0x85, 0x5e, 0x01, 0x20, 0xf7, 0x23, 0x12, 0x78, 0x4e, 0x53, 0xd9, 0x96, 0x29, 0xbe, 0xa0, + 0xec, 0xaf, 0xfb, 0xd1, 0xed, 0x90, 0xac, 0x28, 0x0c, 0xac, 0x61, 0xdb, 0xbf, 0x51, 0x02, 0x88, + 0xf9, 0x76, 0xf4, 0x76, 0xea, 0xe0, 0x7a, 0xb6, 0x3b, 0xa7, 0x7f, 0x7c, 0xa7, 0x16, 0xfa, 0x1e, + 0x0b, 0x46, 0x9d, 0x66, 0xd3, 0xaf, 0x3b, 0x3c, 0xd8, 0x70, 0xa1, 0xfb, 0xc1, 0x29, 0xda, 0x5f, + 0x8c, 0x6b, 0xf0, 0x2e, 0xbc, 0x20, 0x57, 0xa8, 0x06, 0xe9, 0xd9, 0x0b, 0xbd, 0x61, 0xf4, 0x21, + 0xf9, 0x54, 0x2c, 0x1a, 0x43, 0xa9, 0x9e, 0x8a, 0x25, 0x76, 0x47, 0xe8, 0xaf, 0xc4, 0xdb, 0xc6, + 0x2b, 0x71, 0x20, 0xdf, 0x61, 0xd1, 0x60, 0x5f, 0x7b, 0x3d, 0x10, 0x51, 0x55, 0x0f, 0x5e, 0x30, + 0x98, 0xef, 0x1d, 0xa8, 0xbd, 0x93, 0x7a, 0x04, 0x2e, 0xf8, 0x1c, 0x4c, 0x36, 0x4c, 0x26, 0x40, + 0xac, 0xc4, 0xa7, 0xf2, 0xe8, 0x26, 0x78, 0x86, 0xf8, 0xda, 0x4f, 0x00, 0x70, 0x92, 0x30, 0xaa, + 0xf2, 0x58, 0x16, 0x15, 0x6f, 0xcb, 0x17, 0x9e, 0x17, 0x76, 0xee, 0x5c, 0xee, 0x87, 0x11, 0x69, + 0x51, 0xcc, 0xf8, 0x76, 0x5f, 0x17, 0x75, 0xb1, 0xa2, 0x82, 0x5e, 0x87, 0x21, 0xe6, 0x1e, 0x16, + 0xce, 0x8e, 0xe4, 0x4b, 0x9c, 0xcd, 0xe0, 0x6c, 0xf1, 0x86, 0x64, 0x7f, 0x43, 0x2c, 0x28, 0xa0, + 0xeb, 0xd2, 0xf9, 0x32, 0xac, 0x78, 0xb7, 0x43, 0xc2, 0x9c, 0x2f, 0x4b, 0x4b, 0xef, 0x8f, 0xfd, + 0x2a, 0x79, 0x79, 0x66, 0x06, 0x33, 0xa3, 0x26, 0xe5, 0xa2, 0xc4, 0x7f, 0x99, 0x18, 0x6d, 0x16, + 0xf2, 0xbb, 0x67, 0x26, 0x4f, 0x8b, 0x87, 0xf3, 0x8e, 0x49, 0x02, 0x27, 0x69, 0x52, 0x8e, 0x94, + 0xef, 0x7a, 0xe1, 0xbb, 0xd1, 0xeb, 0xec, 0xe0, 0x0f, 0x71, 0x76, 0x1b, 0xf1, 0x12, 0x2c, 0xea, + 0x9f, 0x28, 0x7b, 0x30, 0xe7, 0xc1, 0x54, 0x72, 0x8b, 0x3e, 0x52, 0x76, 0xe4, 0x0f, 0x06, 0x60, + 0xc2, 0x5c, 0x52, 0xe8, 0x0a, 0x94, 0x04, 0x11, 0x95, 0xcc, 0x40, 0xed, 0x92, 0x35, 0x09, 0xc0, + 0x31, 0x0e, 0xcb, 0x61, 0xc1, 0xaa, 0x6b, 0xc6, 0xba, 0x71, 0x0e, 0x0b, 0x05, 0xc1, 0x1a, 0x16, + 0x7d, 0x58, 0x6d, 0xfa, 0x7e, 0xa4, 0x2e, 0x24, 0xb5, 0xee, 0x96, 0x58, 0x29, 0x16, 0x50, 0x7a, + 0x11, 0xed, 0x92, 0xc0, 0x23, 0x4d, 0x33, 0xec, 0xb1, 0xba, 0x88, 0x6e, 0xe8, 0x40, 0x6c, 0xe2, + 0xd2, 0xeb, 0xd4, 0x0f, 0xd9, 0x42, 0x16, 0xcf, 0xb7, 0xd8, 0xf8, 0xb9, 0xc6, 0xfd, 0xbf, 0x25, + 0x1c, 0x7d, 0x12, 0x1e, 0x53, 0xa1, 0x9d, 0x30, 0xd7, 0x66, 0xc8, 0x16, 0x87, 0x0c, 0x69, 0xcb, + 0x63, 0xcb, 0xd9, 0x68, 0x38, 0xaf, 0x3e, 0x7a, 0x0d, 0x26, 0x04, 0x8b, 0x2f, 0x29, 0x0e, 0x9b, + 0x06, 0x36, 0x37, 0x0c, 0x28, 0x4e, 0x60, 0xcb, 0xc0, 0xcd, 0x8c, 0xcb, 0x96, 0x14, 0x46, 0xd2, + 0x81, 0x9b, 0x75, 0x38, 0x4e, 0xd5, 0x40, 0x8b, 0x30, 0xc9, 0x79, 0x30, 0xd7, 0xdb, 0xe6, 0x73, + 0x22, 0x5c, 0xab, 0xd4, 0x96, 0xba, 0x65, 0x82, 0x71, 0x12, 0x1f, 0xbd, 0x0c, 0x63, 0x4e, 0x50, + 0xdf, 0x71, 0x23, 0x52, 0x8f, 0x3a, 0x01, 0xf7, 0xb9, 0xd2, 0x2c, 0x94, 0x16, 0x35, 0x18, 0x36, + 0x30, 0xed, 0xb7, 0x61, 0x26, 0x23, 0x30, 0x04, 0x5d, 0x38, 0x4e, 0xdb, 0x95, 0xdf, 0x94, 0x30, + 0x63, 0x5e, 0xac, 0x56, 0xe4, 0xd7, 0x68, 0x58, 0x74, 0x75, 0xb2, 0x00, 0x12, 0x5a, 0x1e, 0x44, + 0xb5, 0x3a, 0x57, 0x25, 0x00, 0xc7, 0x38, 0xf6, 0xff, 0x28, 0xc0, 0x64, 0x86, 0x6e, 0x85, 0xe5, + 0xe2, 0x4b, 0x3c, 0x52, 0xe2, 0xd4, 0x7b, 0x66, 0x1c, 0xf0, 0xc2, 0x11, 0xe2, 0x80, 0x17, 0x7b, + 0xc5, 0x01, 0x1f, 0x78, 0x27, 0x71, 0xc0, 0xcd, 0x11, 0x1b, 0xec, 0x6b, 0xc4, 0x32, 0x62, 0x87, + 0x0f, 0x1d, 0x31, 0x76, 0xb8, 0x31, 0xe8, 0xc3, 0x7d, 0x0c, 0xfa, 0x0f, 0x17, 0x60, 0x2a, 0x69, + 0x49, 0x79, 0x02, 0x72, 0xdb, 0xd7, 0x0d, 0xb9, 0xed, 0xe5, 0x7e, 0x5c, 0x61, 0x73, 0x65, 0xb8, + 0x38, 0x21, 0xc3, 0xfd, 0x60, 0x5f, 0xd4, 0xba, 0xcb, 0x73, 0xff, 0x66, 0x01, 0x4e, 0x67, 0xfa, + 0xe2, 0x9e, 0xc0, 0xd8, 0xdc, 0x32, 0xc6, 0xe6, 0xb9, 0xbe, 0xdd, 0x84, 0x73, 0x07, 0xe8, 0x6e, + 0x62, 0x80, 0xae, 0xf4, 0x4f, 0xb2, 0xfb, 0x28, 0x7d, 0xb5, 0x08, 0xe7, 0x33, 0xeb, 0xc5, 0x62, + 0xcf, 0x55, 0x43, 0xec, 0xf9, 0x7c, 0x42, 0xec, 0x69, 0x77, 0xaf, 0x7d, 0x3c, 0x72, 0x50, 0xe1, + 0x2e, 0xcb, 0xa2, 0x1c, 0x3c, 0xa4, 0x0c, 0xd4, 0x70, 0x97, 0x55, 0x84, 0xb0, 0x49, 0xf7, 0x9b, + 0x49, 0xf6, 0xf9, 0x6f, 0x2c, 0x38, 0x9b, 0x39, 0x37, 0x27, 0x20, 0xeb, 0x5a, 0x37, 0x65, 0x5d, + 0x4f, 0xf7, 0xbd, 0x5a, 0x73, 0x84, 0x5f, 0xbf, 0x36, 0x90, 0xf3, 0x2d, 0xec, 0x25, 0x7f, 0x0b, + 0x46, 0x9d, 0x7a, 0x9d, 0x84, 0xe1, 0x9a, 0xdf, 0x50, 0xa1, 0x8e, 0x9f, 0x63, 0xef, 0xac, 0xb8, + 0xf8, 0xf0, 0x60, 0x7e, 0x2e, 0x49, 0x22, 0x06, 0x63, 0x9d, 0x02, 0xfa, 0x34, 0x8c, 0x84, 0xe2, + 0xde, 0x14, 0x73, 0xff, 0x42, 0x9f, 0x83, 0xe3, 0x6c, 0x92, 0xa6, 0x19, 0x8b, 0x49, 0x49, 0x2a, + 0x14, 0x49, 0x33, 0x6e, 0x4b, 0xe1, 0x58, 0xe3, 0xb6, 0x3c, 0x0f, 0xb0, 0xa7, 0x1e, 0x03, 0x49, + 0xf9, 0x83, 0xf6, 0x4c, 0xd0, 0xb0, 0xd0, 0xc7, 0x61, 0x2a, 0xe4, 0xc1, 0x0a, 0x97, 0x9b, 0x4e, + 0xc8, 0x9c, 0x65, 0xc4, 0x2a, 0x64, 0xf1, 0x9e, 0x6a, 0x09, 0x18, 0x4e, 0x61, 0xa3, 0x55, 0xd9, + 0x2a, 0x8b, 0xac, 0xc8, 0x17, 0xe6, 0xa5, 0xb8, 0x45, 0x91, 0x09, 0xf8, 0x54, 0x72, 0xf8, 0xd9, + 0xc0, 0x6b, 0x35, 0xd1, 0xa7, 0x01, 0xe8, 0xf2, 0x11, 0x72, 0x88, 0xe1, 0xfc, 0xc3, 0x93, 0x9e, + 0x2a, 0x8d, 0x4c, 0xdb, 0x5e, 0xe6, 0xe1, 0x5a, 0x56, 0x44, 0xb0, 0x46, 0xd0, 0xfe, 0xe1, 0x01, + 0x78, 0xbc, 0xcb, 0x19, 0x89, 0x16, 0x4d, 0x3d, 0xec, 0x33, 0xc9, 0xc7, 0xf5, 0x5c, 0x66, 0x65, + 0xe3, 0xb5, 0x9d, 0x58, 0x8a, 0x85, 0x77, 0xbc, 0x14, 0x7f, 0xc0, 0xd2, 0xc4, 0x1e, 0xdc, 0xe2, + 0xf3, 0x63, 0x47, 0x3c, 0xfb, 0x8f, 0x51, 0x0e, 0xb2, 0x95, 0x21, 0x4c, 0x78, 0xbe, 0xef, 0xee, + 0xf4, 0x2d, 0x5d, 0x38, 0x59, 0x29, 0xf1, 0x6f, 0x59, 0x70, 0xae, 0x6b, 0xd0, 0x8e, 0x6f, 0x40, + 0x86, 0xc1, 0xfe, 0x82, 0x05, 0x4f, 0x66, 0xd6, 0x30, 0xcc, 0x8c, 0xae, 0x40, 0xa9, 0x4e, 0x0b, + 0x35, 0x2f, 0xcd, 0xd8, 0x7d, 0x5d, 0x02, 0x70, 0x8c, 0x63, 0x58, 0x13, 0x15, 0x7a, 0x5a, 0x13, + 0xfd, 0x8a, 0x05, 0xa9, 0x4d, 0x7f, 0x02, 0xb7, 0x4f, 0xc5, 0xbc, 0x7d, 0xde, 0xdf, 0xcf, 0x68, + 0xe6, 0x5c, 0x3c, 0x7f, 0x3c, 0x09, 0x67, 0x72, 0xbc, 0x94, 0xf6, 0x60, 0x7a, 0xbb, 0x4e, 0x4c, + 0xff, 0xd7, 0x6e, 0x71, 0x61, 0xba, 0x3a, 0xcb, 0xb2, 0x5c, 0xa5, 0xd3, 0x29, 0x14, 0x9c, 0x6e, + 0x02, 0x7d, 0xc1, 0x82, 0x53, 0xce, 0xbd, 0x70, 0x85, 0x72, 0x11, 0x6e, 0x7d, 0xa9, 0xe9, 0xd7, + 0x77, 0xe9, 0x11, 0x2d, 0x37, 0xc2, 0x8b, 0x99, 0x92, 0x9d, 0xbb, 0xb5, 0x14, 0xbe, 0xd1, 0x3c, + 0x4b, 0xde, 0x9a, 0x85, 0x85, 0x33, 0xdb, 0x42, 0x58, 0x44, 0xf4, 0xa7, 0x6f, 0x94, 0x2e, 0x1e, + 0xda, 0x59, 0xee, 0x64, 0xfc, 0x5a, 0x94, 0x10, 0xac, 0xe8, 0xa0, 0xcf, 0x42, 0x69, 0x5b, 0xfa, + 0x78, 0x66, 0x5c, 0xbb, 0xf1, 0x40, 0x76, 0xf7, 0x7c, 0xe5, 0xea, 0x59, 0x85, 0x84, 0x63, 0xa2, + 0xe8, 0x35, 0x28, 0x7a, 0x5b, 0x61, 0xb7, 0xfc, 0xa7, 0x09, 0x3b, 0x3c, 0x1e, 0x07, 0x61, 0x7d, + 0xb5, 0x86, 0x69, 0x45, 0x74, 0x1d, 0x8a, 0xc1, 0x66, 0x43, 0x88, 0x25, 0x33, 0x37, 0x29, 0x5e, + 0x2a, 0xe7, 0xf4, 0x8a, 0x51, 0xc2, 0x4b, 0x65, 0x4c, 0x49, 0xa0, 0x2a, 0x0c, 0x32, 0xd7, 0x1e, + 0x71, 0xc9, 0x65, 0xb2, 0xf3, 0x5d, 0x5c, 0xe4, 0x78, 0xb0, 0x04, 0x86, 0x80, 0x39, 0x21, 0xb4, + 0x01, 0x43, 0x75, 0x96, 0x2b, 0x53, 0x44, 0x82, 0xfb, 0x50, 0xa6, 0x00, 0xb2, 0x4b, 0x12, 0x51, + 0x21, 0x8f, 0x63, 0x18, 0x58, 0xd0, 0x62, 0x54, 0x49, 0x7b, 0x67, 0x2b, 0x14, 0xb9, 0x9d, 0xb3, + 0xa9, 0x76, 0xc9, 0x8d, 0x2b, 0xa8, 0x32, 0x0c, 0x2c, 0x68, 0xa1, 0x57, 0xa0, 0xb0, 0x55, 0x17, + 0x6e, 0x3b, 0x99, 0x92, 0x48, 0x33, 0x94, 0xc5, 0xd2, 0xd0, 0x83, 0x83, 0xf9, 0xc2, 0xea, 0x32, + 0x2e, 0x6c, 0xd5, 0xd1, 0x3a, 0x0c, 0x6f, 0x71, 0xe7, 0x77, 0x21, 0x6c, 0x7c, 0x2a, 0xdb, 0x2f, + 0x3f, 0xe5, 0x1f, 0xcf, 0x3d, 0x56, 0x04, 0x00, 0x4b, 0x22, 0x2c, 0x40, 0xbe, 0x72, 0xe2, 0x17, + 0x41, 0xd3, 0x16, 0x8e, 0x16, 0x78, 0x81, 0x33, 0x1d, 0x71, 0x28, 0x00, 0xac, 0x51, 0xa4, 0xab, + 0xda, 0x91, 0x09, 0xf6, 0x45, 0xb0, 0x99, 0xcc, 0x55, 0xad, 0xb2, 0xf0, 0x77, 0x5b, 0xd5, 0x0a, + 0x09, 0xc7, 0x44, 0xd1, 0x2e, 0x8c, 0xef, 0x85, 0xed, 0x1d, 0x22, 0xb7, 0x34, 0x8b, 0x3d, 0x93, + 0x73, 0x2f, 0xdf, 0x11, 0x88, 0x6e, 0x10, 0x75, 0x9c, 0x66, 0xea, 0x14, 0x62, 0x3a, 0xfd, 0x3b, + 0x3a, 0x31, 0x6c, 0xd2, 0xa6, 0xc3, 0xff, 0x56, 0xc7, 0xdf, 0xdc, 0x8f, 0x88, 0x88, 0x75, 0x96, + 0x39, 0xfc, 0x6f, 0x70, 0x94, 0xf4, 0xf0, 0x0b, 0x00, 0x96, 0x44, 0xd0, 0x1d, 0x31, 0x3c, 0xec, + 0xf4, 0x9c, 0xca, 0x0f, 0x48, 0xba, 0x28, 0x91, 0x72, 0x06, 0x85, 0x9d, 0x96, 0x31, 0x29, 0x76, + 0x4a, 0xb6, 0x77, 0xfc, 0xc8, 0xf7, 0x12, 0x27, 0xf4, 0x74, 0xfe, 0x29, 0x59, 0xcd, 0xc0, 0x4f, + 0x9f, 0x92, 0x59, 0x58, 0x38, 0xb3, 0x2d, 0xd4, 0x80, 0x89, 0xb6, 0x1f, 0x44, 0xf7, 0xfc, 0x40, + 0xae, 0x2f, 0xd4, 0x45, 0x58, 0x62, 0x60, 0x8a, 0x16, 0x59, 0x18, 0x41, 0x13, 0x82, 0x13, 0x34, + 0xd1, 0x27, 0x60, 0x38, 0xac, 0x3b, 0x4d, 0x52, 0xb9, 0x35, 0x3b, 0x93, 0x7f, 0xfd, 0xd4, 0x38, + 0x4a, 0xce, 0xea, 0xe2, 0xd1, 0xf4, 0x39, 0x0a, 0x96, 0xe4, 0xd0, 0x2a, 0x0c, 0xb2, 0x04, 0x68, + 0x2c, 0x30, 0x5f, 0x4e, 0x5c, 0xd5, 0x94, 0x55, 0x34, 0x3f, 0x9b, 0x58, 0x31, 0xe6, 0xd5, 0xe9, + 0x1e, 0x10, 0x6f, 0x06, 0x3f, 0x9c, 0x3d, 0x9d, 0xbf, 0x07, 0xc4, 0x53, 0xe3, 0x56, 0xad, 0xdb, + 0x1e, 0x50, 0x48, 0x38, 0x26, 0x4a, 0x4f, 0x66, 0x7a, 0x9a, 0x9e, 0xe9, 0x62, 0xce, 0x93, 0x7b, + 0x96, 0xb2, 0x93, 0x99, 0x9e, 0xa4, 0x94, 0x84, 0xfd, 0x7b, 0xc3, 0x69, 0x9e, 0x85, 0xbd, 0x32, + 0xbf, 0xcb, 0x4a, 0x29, 0x20, 0x3f, 0xdc, 0xaf, 0xd0, 0xeb, 0x18, 0x59, 0xf0, 0x2f, 0x58, 0x70, + 0xa6, 0x9d, 0xf9, 0x21, 0x82, 0x01, 0xe8, 0x4f, 0x76, 0xc6, 0x3f, 0x5d, 0x05, 0x71, 0xcc, 0x86, + 0xe3, 0x9c, 0x96, 0x92, 0xcf, 0x9c, 0xe2, 0x3b, 0x7e, 0xe6, 0xac, 0xc1, 0x08, 0x63, 0x32, 0x7b, + 0xe4, 0x8e, 0x4e, 0xbe, 0xf6, 0x18, 0x2b, 0xb1, 0x2c, 0x2a, 0x62, 0x45, 0x02, 0xfd, 0xa0, 0x05, + 0xe7, 0x92, 0x5d, 0xc7, 0x84, 0x81, 0x45, 0xe4, 0x47, 0xfe, 0xc0, 0x5d, 0x15, 0xdf, 0x9f, 0xe2, + 0xff, 0x0d, 0xe4, 0xc3, 0x5e, 0x08, 0xb8, 0x7b, 0x63, 0xa8, 0x9c, 0xf1, 0xc2, 0x1e, 0x32, 0xb5, + 0x0a, 0x7d, 0xbc, 0xb2, 0x5f, 0x84, 0xb1, 0x96, 0xdf, 0xf1, 0x22, 0x61, 0xfd, 0x23, 0x2c, 0x11, + 0x98, 0x06, 0x7e, 0x4d, 0x2b, 0xc7, 0x06, 0x56, 0xe2, 0x6d, 0x3e, 0xf2, 0xd0, 0x6f, 0xf3, 0x37, + 0x61, 0xcc, 0xd3, 0xcc, 0x55, 0x05, 0x3f, 0x70, 0x29, 0x3f, 0x6a, 0xab, 0x6e, 0xdc, 0xca, 0x7b, + 0xa9, 0x97, 0x60, 0x83, 0xda, 0xc9, 0x3e, 0xf8, 0xbe, 0x6c, 0x65, 0x30, 0xf5, 0x5c, 0x04, 0xf0, + 0x51, 0x53, 0x04, 0x70, 0x29, 0x29, 0x02, 0x48, 0x49, 0x94, 0x8d, 0xd7, 0x7f, 0xff, 0x49, 0x69, + 0xfa, 0x0d, 0x84, 0x68, 0x37, 0xe1, 0x42, 0xaf, 0x6b, 0x89, 0x99, 0x81, 0x35, 0x94, 0xfe, 0x30, + 0x36, 0x03, 0x6b, 0x54, 0xca, 0x98, 0x41, 0xfa, 0x0d, 0xb1, 0x63, 0xff, 0x37, 0x0b, 0x8a, 0x55, + 0xbf, 0x71, 0x02, 0x0f, 0xde, 0x8f, 0x19, 0x0f, 0xde, 0xc7, 0xb3, 0x2f, 0xc4, 0x46, 0xae, 0x3c, + 0x7c, 0x25, 0x21, 0x0f, 0x3f, 0x97, 0x47, 0xa0, 0xbb, 0xf4, 0xfb, 0x27, 0x8b, 0x30, 0x5a, 0xf5, + 0x1b, 0xca, 0x06, 0xfb, 0xd7, 0x1e, 0xc6, 0x06, 0x3b, 0x37, 0xb5, 0x82, 0x46, 0x99, 0x59, 0x8f, + 0x49, 0xf7, 0xd3, 0x6f, 0x30, 0x53, 0xec, 0xbb, 0xc4, 0xdd, 0xde, 0x89, 0x48, 0x23, 0xf9, 0x39, + 0x27, 0x67, 0x8a, 0xfd, 0x7b, 0x05, 0x98, 0x4c, 0xb4, 0x8e, 0x9a, 0x30, 0xde, 0xd4, 0xa5, 0xad, + 0x62, 0x9d, 0x3e, 0x94, 0xa0, 0x56, 0x98, 0xb2, 0x6a, 0x45, 0xd8, 0x24, 0x8e, 0x16, 0x00, 0x94, + 0xfa, 0x51, 0x8a, 0xf5, 0x18, 0xd7, 0xaf, 0xf4, 0x93, 0x21, 0xd6, 0x30, 0xd0, 0x4b, 0x30, 0x1a, + 0xf9, 0x6d, 0xbf, 0xe9, 0x6f, 0xef, 0xdf, 0x20, 0x32, 0xa8, 0x93, 0x32, 0x50, 0xdb, 0x88, 0x41, + 0x58, 0xc7, 0x43, 0xf7, 0x61, 0x5a, 0x11, 0xa9, 0x1d, 0x83, 0x04, 0x9a, 0x49, 0x15, 0xd6, 0x93, + 0x14, 0x71, 0xba, 0x11, 0xfb, 0xa7, 0x8a, 0x7c, 0x88, 0xbd, 0xc8, 0x7d, 0x6f, 0x37, 0xbc, 0xbb, + 0x77, 0xc3, 0x57, 0x2d, 0x98, 0xa2, 0xad, 0x33, 0xeb, 0x1b, 0x79, 0xcd, 0xab, 0x38, 0xd1, 0x56, + 0x97, 0x38, 0xd1, 0x97, 0xe8, 0xa9, 0xd9, 0xf0, 0x3b, 0x91, 0x90, 0xdd, 0x69, 0xc7, 0x22, 0x2d, + 0xc5, 0x02, 0x2a, 0xf0, 0x48, 0x10, 0x08, 0x8f, 0x41, 0x1d, 0x8f, 0x04, 0x01, 0x16, 0x50, 0x19, + 0x46, 0x7a, 0x20, 0x3b, 0x8c, 0x34, 0x0f, 0x8e, 0x29, 0xec, 0x34, 0x04, 0xc3, 0xa5, 0x05, 0xc7, + 0x94, 0x06, 0x1c, 0x31, 0x8e, 0xfd, 0xb3, 0x45, 0x18, 0xab, 0xfa, 0x8d, 0x58, 0xf5, 0xf8, 0xa2, + 0xa1, 0x7a, 0xbc, 0x90, 0x50, 0x3d, 0x4e, 0xe9, 0xb8, 0xef, 0x29, 0x1a, 0xbf, 0x5e, 0x8a, 0xc6, + 0x7f, 0x6a, 0xb1, 0x59, 0x2b, 0xaf, 0xd7, 0xb8, 0x31, 0x17, 0xba, 0x0a, 0xa3, 0xec, 0x80, 0x61, + 0x2e, 0xaa, 0x52, 0x1f, 0xc7, 0xd2, 0x23, 0xad, 0xc7, 0xc5, 0x58, 0xc7, 0x41, 0x97, 0x61, 0x24, + 0x24, 0x4e, 0x50, 0xdf, 0x51, 0xa7, 0xab, 0x50, 0x9e, 0xf1, 0x32, 0xac, 0xa0, 0xe8, 0x8d, 0x38, + 0x2e, 0x63, 0x31, 0xdf, 0xe5, 0x4d, 0xef, 0x0f, 0xdf, 0x22, 0xf9, 0xc1, 0x18, 0xed, 0xbb, 0x80, + 0xd2, 0xf8, 0x7d, 0x04, 0x24, 0x9b, 0x37, 0x03, 0x92, 0x95, 0x52, 0xc1, 0xc8, 0xfe, 0xdc, 0x82, + 0x89, 0xaa, 0xdf, 0xa0, 0x5b, 0xf7, 0x9b, 0x69, 0x9f, 0xea, 0x41, 0x69, 0x87, 0xba, 0x04, 0xa5, + 0xbd, 0x08, 0x83, 0x55, 0xbf, 0x51, 0xa9, 0x76, 0xf3, 0x37, 0xb7, 0xff, 0x96, 0x05, 0xc3, 0x55, + 0xbf, 0x71, 0x02, 0x6a, 0x81, 0x8f, 0x9a, 0x6a, 0x81, 0xc7, 0x72, 0xd6, 0x4d, 0x8e, 0x26, 0xe0, + 0x6f, 0x0c, 0xc0, 0x38, 0xed, 0xa7, 0xbf, 0x2d, 0xa7, 0xd2, 0x18, 0x36, 0xab, 0x8f, 0x61, 0xa3, + 0x5c, 0xb8, 0xdf, 0x6c, 0xfa, 0xf7, 0x92, 0xd3, 0xba, 0xca, 0x4a, 0xb1, 0x80, 0xa2, 0x67, 0x61, + 0xa4, 0x1d, 0x90, 0x3d, 0xd7, 0x17, 0xec, 0xad, 0xa6, 0x64, 0xa9, 0x8a, 0x72, 0xac, 0x30, 0xe8, + 0xb3, 0x30, 0x74, 0x3d, 0x7a, 0x95, 0xd7, 0x7d, 0xaf, 0xc1, 0x25, 0xe7, 0x45, 0x91, 0x2a, 0x42, + 0x2b, 0xc7, 0x06, 0x16, 0xba, 0x0b, 0x25, 0xf6, 0x9f, 0x1d, 0x3b, 0x47, 0x4f, 0x3a, 0x2a, 0x92, + 0xd0, 0x09, 0x02, 0x38, 0xa6, 0x85, 0x9e, 0x07, 0x88, 0x64, 0xf4, 0xf1, 0x50, 0x04, 0x9f, 0x52, + 0x4f, 0x01, 0x15, 0x97, 0x3c, 0xc4, 0x1a, 0x16, 0x7a, 0x06, 0x4a, 0x91, 0xe3, 0x36, 0x6f, 0xba, + 0x1e, 0x09, 0x99, 0x44, 0xbc, 0x28, 0x73, 0xc1, 0x89, 0x42, 0x1c, 0xc3, 0x29, 0x2b, 0xc6, 0x22, + 0x33, 0xf0, 0x94, 0xc5, 0x23, 0x0c, 0x9b, 0xb1, 0x62, 0x37, 0x55, 0x29, 0xd6, 0x30, 0xd0, 0x0e, + 0x3c, 0xe1, 0x7a, 0x2c, 0xad, 0x02, 0xa9, 0xed, 0xba, 0xed, 0x8d, 0x9b, 0xb5, 0x3b, 0x24, 0x70, + 0xb7, 0xf6, 0x97, 0x9c, 0xfa, 0x2e, 0xf1, 0x64, 0x3a, 0xc9, 0xf7, 0x8b, 0x2e, 0x3e, 0x51, 0xe9, + 0x82, 0x8b, 0xbb, 0x52, 0xb2, 0x5f, 0x86, 0xd3, 0x55, 0xbf, 0x51, 0xf5, 0x83, 0x68, 0xd5, 0x0f, + 0xee, 0x39, 0x41, 0x43, 0xae, 0x94, 0x79, 0x19, 0x25, 0x81, 0x1e, 0x85, 0x83, 0xfc, 0xa0, 0x30, + 0x22, 0x20, 0xbc, 0xc0, 0x98, 0xaf, 0x23, 0xfa, 0xf6, 0xd4, 0x19, 0x1b, 0xa0, 0x72, 0x8c, 0x5c, + 0x73, 0x22, 0x82, 0x6e, 0xb1, 0xdc, 0xc9, 0xf1, 0x8d, 0x28, 0xaa, 0x3f, 0xad, 0xe5, 0x4e, 0x8e, + 0x81, 0x99, 0x57, 0xa8, 0x59, 0xdf, 0xfe, 0xef, 0x83, 0xec, 0x70, 0x4c, 0xe4, 0xa9, 0x40, 0x9f, + 0x81, 0x89, 0x90, 0xdc, 0x74, 0xbd, 0xce, 0x7d, 0x29, 0x8d, 0xe8, 0xe2, 0x9d, 0x55, 0x5b, 0xd1, + 0x31, 0xb9, 0x4c, 0xd3, 0x2c, 0xc3, 0x09, 0x6a, 0xa8, 0x05, 0x13, 0xf7, 0x5c, 0xaf, 0xe1, 0xdf, + 0x0b, 0x25, 0xfd, 0x91, 0x7c, 0xd1, 0xe6, 0x5d, 0x8e, 0x99, 0xe8, 0xa3, 0xd1, 0xdc, 0x5d, 0x83, + 0x18, 0x4e, 0x10, 0xa7, 0x0b, 0x30, 0xe8, 0x78, 0x8b, 0xe1, 0xed, 0x90, 0x04, 0x22, 0x0b, 0x36, + 0x5b, 0x80, 0x58, 0x16, 0xe2, 0x18, 0x4e, 0x17, 0x20, 0xfb, 0x73, 0x2d, 0xf0, 0x3b, 0x3c, 0x47, + 0x80, 0x58, 0x80, 0x58, 0x95, 0x62, 0x0d, 0x83, 0x6e, 0x50, 0xf6, 0x6f, 0xdd, 0xf7, 0xb0, 0xef, + 0x47, 0x72, 0x4b, 0xb3, 0xbc, 0xab, 0x5a, 0x39, 0x36, 0xb0, 0xd0, 0x2a, 0xa0, 0xb0, 0xd3, 0x6e, + 0x37, 0x99, 0xd9, 0x87, 0xd3, 0x64, 0xa4, 0xb8, 0xca, 0xbd, 0xc8, 0x43, 0xa7, 0xd6, 0x52, 0x50, + 0x9c, 0x51, 0x83, 0x9e, 0xd5, 0x5b, 0xa2, 0xab, 0x83, 0xac, 0xab, 0x5c, 0x0d, 0x52, 0xe3, 0xfd, + 0x94, 0x30, 0xb4, 0x02, 0xc3, 0xe1, 0x7e, 0x58, 0x8f, 0x44, 0x0c, 0xb8, 0x9c, 0x54, 0x44, 0x35, + 0x86, 0xa2, 0x65, 0xc2, 0xe3, 0x55, 0xb0, 0xac, 0x8b, 0xea, 0x30, 0x23, 0x28, 0x2e, 0xef, 0x38, + 0x9e, 0x4a, 0xec, 0xc2, 0xad, 0x5f, 0xaf, 0x3e, 0x38, 0x98, 0x9f, 0x11, 0x2d, 0xeb, 0xe0, 0xc3, + 0x83, 0xf9, 0x33, 0x55, 0xbf, 0x91, 0x01, 0xc1, 0x59, 0xd4, 0xf8, 0xe2, 0xab, 0xd7, 0xfd, 0x56, + 0xbb, 0x1a, 0xf8, 0x5b, 0x6e, 0x93, 0x74, 0x53, 0x25, 0xd5, 0x0c, 0x4c, 0xb1, 0xf8, 0x8c, 0x32, + 0x9c, 0xa0, 0x66, 0x7f, 0x3b, 0xe3, 0x67, 0x58, 0xe2, 0xe7, 0xa8, 0x13, 0x10, 0xd4, 0x82, 0xf1, + 0x36, 0xdb, 0x26, 0x22, 0x72, 0xbf, 0x58, 0xeb, 0x2f, 0xf6, 0x29, 0x12, 0xb9, 0x47, 0xaf, 0x01, + 0x25, 0xb2, 0x64, 0x6f, 0xcd, 0xaa, 0x4e, 0x0e, 0x9b, 0xd4, 0xed, 0x1f, 0x7b, 0x8c, 0xdd, 0x88, + 0x35, 0x2e, 0xe7, 0x18, 0x16, 0xc6, 0xf6, 0xe2, 0x69, 0x35, 0x97, 0x2f, 0x70, 0x8b, 0xa7, 0x45, + 0x18, 0xec, 0x63, 0x59, 0x17, 0x7d, 0x1a, 0x26, 0xe8, 0x4b, 0x45, 0xcb, 0xa8, 0x72, 0x2a, 0x3f, + 0x28, 0x42, 0x9c, 0x48, 0x45, 0xcb, 0xea, 0xa1, 0x57, 0xc6, 0x09, 0x62, 0xe8, 0x0d, 0x66, 0x16, + 0x62, 0x26, 0x6b, 0xe9, 0x41, 0x5a, 0xb7, 0x00, 0x91, 0x64, 0x35, 0x22, 0x79, 0x89, 0x60, 0xec, + 0x47, 0x9b, 0x08, 0x06, 0xdd, 0x84, 0x71, 0x91, 0xfd, 0x58, 0xac, 0xdc, 0xa2, 0x21, 0x07, 0x1c, + 0xc7, 0x3a, 0xf0, 0x30, 0x59, 0x80, 0xcd, 0xca, 0x68, 0x1b, 0xce, 0x69, 0xd9, 0x88, 0xae, 0x05, + 0x0e, 0x53, 0xe6, 0xbb, 0xec, 0x38, 0xd5, 0xee, 0xea, 0x27, 0x1f, 0x1c, 0xcc, 0x9f, 0xdb, 0xe8, + 0x86, 0x88, 0xbb, 0xd3, 0x41, 0xb7, 0xe0, 0x34, 0x77, 0xe9, 0x2d, 0x13, 0xa7, 0xd1, 0x74, 0x3d, + 0xc5, 0x0c, 0xf0, 0x2d, 0x7f, 0xf6, 0xc1, 0xc1, 0xfc, 0xe9, 0xc5, 0x2c, 0x04, 0x9c, 0x5d, 0x0f, + 0x7d, 0x14, 0x4a, 0x0d, 0x2f, 0x14, 0x63, 0x30, 0x64, 0x24, 0x7c, 0x2a, 0x95, 0xd7, 0x6b, 0xea, + 0xfb, 0xe3, 0x3f, 0x38, 0xae, 0x80, 0xb6, 0xb9, 0xac, 0x58, 0x49, 0x30, 0x86, 0x53, 0x21, 0x8d, + 0x92, 0x42, 0x3e, 0xc3, 0xa9, 0x8f, 0x2b, 0x49, 0x94, 0xad, 0xbb, 0xe1, 0xef, 0x67, 0x10, 0x46, + 0xaf, 0x03, 0xa2, 0x2f, 0x08, 0xb7, 0x4e, 0x16, 0xeb, 0x2c, 0x2d, 0x04, 0x13, 0xad, 0x8f, 0x98, + 0x6e, 0x66, 0xb5, 0x14, 0x06, 0xce, 0xa8, 0x85, 0xae, 0xd3, 0x53, 0x45, 0x2f, 0x15, 0xa7, 0x96, + 0x4a, 0xcf, 0x57, 0x26, 0xed, 0x80, 0xd4, 0x9d, 0x88, 0x34, 0x4c, 0x8a, 0x38, 0x51, 0x0f, 0x35, + 0xe0, 0x09, 0xa7, 0x13, 0xf9, 0x4c, 0x0c, 0x6f, 0xa2, 0x6e, 0xf8, 0xbb, 0xc4, 0x63, 0x1a, 0xb0, + 0x91, 0xa5, 0x0b, 0x94, 0xdb, 0x58, 0xec, 0x82, 0x87, 0xbb, 0x52, 0xa1, 0x5c, 0xa2, 0xca, 0xc7, + 0x0b, 0x66, 0xa0, 0xa6, 0x8c, 0x9c, 0xbc, 0x2f, 0xc1, 0xe8, 0x8e, 0x1f, 0x46, 0xeb, 0x24, 0xba, + 0xe7, 0x07, 0xbb, 0x22, 0xde, 0x66, 0x1c, 0xa3, 0x39, 0x06, 0x61, 0x1d, 0x8f, 0x3e, 0x03, 0x99, + 0x7d, 0x46, 0xa5, 0xcc, 0x54, 0xe3, 0x23, 0xf1, 0x19, 0x73, 0x9d, 0x17, 0x63, 0x09, 0x97, 0xa8, + 0x95, 0xea, 0x32, 0x53, 0x73, 0x27, 0x50, 0x2b, 0xd5, 0x65, 0x2c, 0xe1, 0x74, 0xb9, 0x86, 0x3b, + 0x4e, 0x40, 0xaa, 0x81, 0x5f, 0x27, 0xa1, 0x16, 0x19, 0xfc, 0x71, 0x1e, 0x4d, 0x94, 0x2e, 0xd7, + 0x5a, 0x16, 0x02, 0xce, 0xae, 0x87, 0x48, 0x3a, 0x13, 0xd7, 0x44, 0xbe, 0x7e, 0x22, 0xcd, 0xcf, + 0xf4, 0x99, 0x8c, 0xcb, 0x83, 0x29, 0x95, 0x03, 0x8c, 0xc7, 0x0f, 0x0d, 0x67, 0x27, 0xd9, 0xda, + 0xee, 0x3f, 0xf8, 0xa8, 0xd2, 0xf8, 0x54, 0x12, 0x94, 0x70, 0x8a, 0xb6, 0x11, 0x8b, 0x6b, 0xaa, + 0x67, 0x2c, 0xae, 0x2b, 0x50, 0x0a, 0x3b, 0x9b, 0x0d, 0xbf, 0xe5, 0xb8, 0x1e, 0x53, 0x73, 0x6b, + 0xef, 0x91, 0x9a, 0x04, 0xe0, 0x18, 0x07, 0xad, 0xc2, 0x88, 0x23, 0xd5, 0x39, 0x28, 0x3f, 0xfa, + 0x8a, 0x52, 0xe2, 0xf0, 0x80, 0x04, 0x52, 0x81, 0xa3, 0xea, 0xa2, 0x57, 0x61, 0x5c, 0xb8, 0xa4, + 0x8a, 0xf4, 0x93, 0x33, 0xa6, 0xdf, 0x50, 0x4d, 0x07, 0x62, 0x13, 0x17, 0xdd, 0x86, 0xd1, 0xc8, + 0x6f, 0x32, 0xe7, 0x17, 0xca, 0xe6, 0x9d, 0xc9, 0x8f, 0x23, 0xb6, 0xa1, 0xd0, 0x74, 0x49, 0xaa, + 0xaa, 0x8a, 0x75, 0x3a, 0x68, 0x83, 0xaf, 0x77, 0x16, 0x21, 0x9b, 0x84, 0xb3, 0x8f, 0xe5, 0xdf, + 0x49, 0x2a, 0x90, 0xb6, 0xb9, 0x1d, 0x44, 0x4d, 0xac, 0x93, 0x41, 0xd7, 0x60, 0xba, 0x1d, 0xb8, + 0x3e, 0x5b, 0x13, 0x4a, 0x93, 0x37, 0x6b, 0xa6, 0xe7, 0xa9, 0x26, 0x11, 0x70, 0xba, 0x0e, 0xf3, + 0x28, 0x16, 0x85, 0xb3, 0x67, 0x79, 0x86, 0x6a, 0xfe, 0xbc, 0xe3, 0x65, 0x58, 0x41, 0xd1, 0x1a, + 0x3b, 0x89, 0xb9, 0x64, 0x62, 0x76, 0x2e, 0x3f, 0xe0, 0x8b, 0x2e, 0xc1, 0xe0, 0xcc, 0xab, 0xfa, + 0x8b, 0x63, 0x0a, 0xa8, 0xa1, 0xa5, 0x32, 0xa4, 0x2f, 0x86, 0x70, 0xf6, 0x89, 0x2e, 0x46, 0x72, + 0x89, 0xe7, 0x45, 0xcc, 0x10, 0x18, 0xc5, 0x21, 0x4e, 0xd0, 0x44, 0x1f, 0x87, 0x29, 0x11, 0xa6, + 0x2e, 0x1e, 0xa6, 0x73, 0xb1, 0x49, 0x31, 0x4e, 0xc0, 0x70, 0x0a, 0x9b, 0x67, 0x0e, 0x70, 0x36, + 0x9b, 0x44, 0x1c, 0x7d, 0x37, 0x5d, 0x6f, 0x37, 0x9c, 0x3d, 0xcf, 0xce, 0x07, 0x91, 0x39, 0x20, + 0x09, 0xc5, 0x19, 0x35, 0xd0, 0x06, 0x4c, 0xb5, 0x03, 0x42, 0x5a, 0x8c, 0xd1, 0x17, 0xf7, 0xd9, + 0x3c, 0x77, 0xa8, 0xa7, 0x3d, 0xa9, 0x26, 0x60, 0x87, 0x19, 0x65, 0x38, 0x45, 0x01, 0xdd, 0x83, + 0x11, 0x7f, 0x8f, 0x04, 0x3b, 0xc4, 0x69, 0xcc, 0x5e, 0xe8, 0x62, 0xe2, 0x2e, 0x2e, 0xb7, 0x5b, + 0x02, 0x37, 0xa1, 0xfd, 0x97, 0xc5, 0xbd, 0xb5, 0xff, 0xb2, 0x31, 0xf4, 0x43, 0x16, 0x9c, 0x95, + 0x0a, 0x83, 0x5a, 0x9b, 0x8e, 0xfa, 0xb2, 0xef, 0x85, 0x51, 0xc0, 0x5d, 0xc0, 0x9f, 0xcc, 0x77, + 0x8b, 0xde, 0xc8, 0xa9, 0xa4, 0x84, 0xa3, 0x67, 0xf3, 0x30, 0x42, 0x9c, 0xdf, 0x22, 0x5a, 0x86, + 0xe9, 0x90, 0x44, 0xf2, 0x30, 0x5a, 0x0c, 0x57, 0xdf, 0x28, 0xaf, 0xcf, 0x5e, 0xe4, 0xfe, 0xeb, + 0x74, 0x33, 0xd4, 0x92, 0x40, 0x9c, 0xc6, 0x9f, 0xfb, 0x56, 0x98, 0x4e, 0x5d, 0xff, 0x47, 0xc9, + 0x88, 0x32, 0xb7, 0x0b, 0xe3, 0xc6, 0x10, 0x3f, 0x52, 0xed, 0xf1, 0xbf, 0x1a, 0x86, 0x92, 0xd2, + 0x2c, 0xa2, 0x2b, 0xa6, 0xc2, 0xf8, 0x6c, 0x52, 0x61, 0x3c, 0x42, 0xdf, 0xf5, 0xba, 0x8e, 0x78, + 0x23, 0x23, 0x6a, 0x57, 0xde, 0x86, 0xee, 0xdf, 0x1d, 0x5b, 0x13, 0xd7, 0x16, 0xfb, 0xd6, 0x3c, + 0x0f, 0x74, 0x95, 0x00, 0x5f, 0x83, 0x69, 0xcf, 0x67, 0x3c, 0x27, 0x69, 0x48, 0x86, 0x82, 0xf1, + 0x0d, 0x25, 0x3d, 0x0c, 0x46, 0x02, 0x01, 0xa7, 0xeb, 0xd0, 0x06, 0xf9, 0xc5, 0x9f, 0x14, 0x39, + 0x73, 0xbe, 0x00, 0x0b, 0x28, 0xba, 0x08, 0x83, 0x6d, 0xbf, 0x51, 0xa9, 0x0a, 0x7e, 0x53, 0x8b, + 0x15, 0xd9, 0xa8, 0x54, 0x31, 0x87, 0xa1, 0x45, 0x18, 0x62, 0x3f, 0xc2, 0xd9, 0xb1, 0xfc, 0x78, + 0x07, 0xac, 0x86, 0x96, 0x6f, 0x86, 0x55, 0xc0, 0xa2, 0x22, 0x13, 0x7d, 0x51, 0x26, 0x9d, 0x89, + 0xbe, 0x86, 0x1f, 0x52, 0xf4, 0x25, 0x09, 0xe0, 0x98, 0x16, 0xba, 0x0f, 0xa7, 0x8d, 0x87, 0x11, + 0x5f, 0x22, 0x24, 0x14, 0x3e, 0xd7, 0x17, 0xbb, 0xbe, 0x88, 0x84, 0xa6, 0xfa, 0x9c, 0xe8, 0xf4, + 0xe9, 0x4a, 0x16, 0x25, 0x9c, 0xdd, 0x00, 0x6a, 0xc2, 0x74, 0x3d, 0xd5, 0xea, 0x48, 0xff, 0xad, + 0xaa, 0x09, 0x4d, 0xb7, 0x98, 0x26, 0x8c, 0x5e, 0x85, 0x91, 0xb7, 0xfc, 0x90, 0x9d, 0xd5, 0x82, + 0x47, 0x96, 0x0e, 0xbb, 0x23, 0x6f, 0xdc, 0xaa, 0xb1, 0xf2, 0xc3, 0x83, 0xf9, 0xd1, 0xaa, 0xdf, + 0x90, 0x7f, 0xb1, 0xaa, 0x80, 0xbe, 0xd7, 0x82, 0xb9, 0xf4, 0xcb, 0x4b, 0x75, 0x7a, 0xbc, 0xff, + 0x4e, 0xdb, 0xa2, 0xd1, 0xb9, 0x95, 0x5c, 0x72, 0xb8, 0x4b, 0x53, 0xf6, 0x2f, 0x59, 0x4c, 0xea, + 0x26, 0x34, 0x40, 0x24, 0xec, 0x34, 0x4f, 0x22, 0xcd, 0xe6, 0x8a, 0xa1, 0x9c, 0x7a, 0x68, 0xcb, + 0x85, 0x7f, 0x6e, 0x31, 0xcb, 0x85, 0x13, 0x74, 0x51, 0x78, 0x03, 0x46, 0x22, 0x99, 0xfe, 0xb4, + 0x4b, 0x66, 0x50, 0xad, 0x53, 0xcc, 0x7a, 0x43, 0x71, 0xac, 0x2a, 0xd3, 0xa9, 0x22, 0x63, 0xff, + 0x23, 0x3e, 0x03, 0x12, 0x72, 0x02, 0x3a, 0x80, 0xb2, 0xa9, 0x03, 0x98, 0xef, 0xf1, 0x05, 0x39, + 0xba, 0x80, 0x7f, 0x68, 0xf6, 0x9b, 0x49, 0x6a, 0xde, 0xed, 0x26, 0x33, 0xf6, 0x17, 0x2d, 0x80, + 0x38, 0x14, 0x2f, 0x93, 0x2f, 0xfb, 0x81, 0xcc, 0xb1, 0x98, 0x95, 0x4d, 0xe8, 0x65, 0xca, 0xa3, + 0xfa, 0x91, 0x5f, 0xf7, 0x9b, 0x42, 0xc3, 0xf5, 0x44, 0xac, 0x86, 0xe0, 0xe5, 0x87, 0xda, 0x6f, + 0xac, 0xb0, 0xd1, 0xbc, 0x0c, 0xfc, 0x55, 0x8c, 0x15, 0x63, 0x46, 0xd0, 0xaf, 0x1f, 0xb1, 0xe0, + 0x54, 0x96, 0xbd, 0x2b, 0x7d, 0xf1, 0x70, 0x99, 0x95, 0x32, 0x67, 0x52, 0xb3, 0x79, 0x47, 0x94, + 0x63, 0x85, 0xd1, 0x77, 0xe6, 0xb0, 0xa3, 0xc5, 0xc0, 0xbd, 0x05, 0xe3, 0xd5, 0x80, 0x68, 0x97, + 0xeb, 0x6b, 0xdc, 0x99, 0x9c, 0xf7, 0xe7, 0xd9, 0x23, 0x3b, 0x92, 0xdb, 0x3f, 0x5d, 0x80, 0x53, + 0xdc, 0x2a, 0x60, 0x71, 0xcf, 0x77, 0x1b, 0x55, 0xbf, 0x21, 0xb2, 0xbe, 0x7d, 0x0a, 0xc6, 0xda, + 0x9a, 0xa0, 0xb1, 0x5b, 0x3c, 0x47, 0x5d, 0x20, 0x19, 0x8b, 0x46, 0xf4, 0x52, 0x6c, 0xd0, 0x42, + 0x0d, 0x18, 0x23, 0x7b, 0x6e, 0x5d, 0xa9, 0x96, 0x0b, 0x47, 0xbe, 0xe8, 0x54, 0x2b, 0x2b, 0x1a, + 0x1d, 0x6c, 0x50, 0x7d, 0x04, 0xf9, 0x7c, 0xed, 0x1f, 0xb5, 0xe0, 0xb1, 0x9c, 0xe8, 0x8f, 0xb4, + 0xb9, 0x7b, 0xcc, 0xfe, 0x42, 0x2c, 0x5b, 0xd5, 0x1c, 0xb7, 0xca, 0xc0, 0x02, 0x8a, 0x3e, 0x01, + 0xc0, 0xad, 0x2a, 0xe8, 0x93, 0xbb, 0x57, 0x98, 0x3c, 0x23, 0xc2, 0x97, 0x16, 0xac, 0x49, 0xd6, + 0xc7, 0x1a, 0x2d, 0xfb, 0x4b, 0x03, 0x30, 0xc8, 0x93, 0xad, 0xaf, 0xc2, 0xf0, 0x0e, 0xcf, 0x85, + 0xd1, 0x4f, 0xda, 0x8d, 0x58, 0x18, 0xc2, 0x0b, 0xb0, 0xac, 0x8c, 0xd6, 0x60, 0x86, 0xe7, 0x12, + 0x69, 0x96, 0x49, 0xd3, 0xd9, 0x97, 0x92, 0x3b, 0x9e, 0x87, 0x53, 0x49, 0x30, 0x2b, 0x69, 0x14, + 0x9c, 0x55, 0x0f, 0xbd, 0x06, 0x13, 0xf4, 0x25, 0xe5, 0x77, 0x22, 0x49, 0x89, 0x67, 0x11, 0x51, + 0x4f, 0xb7, 0x0d, 0x03, 0x8a, 0x13, 0xd8, 0xf4, 0x31, 0xdf, 0x4e, 0xc9, 0x28, 0x07, 0xe3, 0xc7, + 0xbc, 0x29, 0x97, 0x34, 0x71, 0x99, 0xa1, 0x6b, 0x87, 0x99, 0xf5, 0x6e, 0xec, 0x04, 0x24, 0xdc, + 0xf1, 0x9b, 0x0d, 0xc6, 0xf4, 0x0d, 0x6a, 0x86, 0xae, 0x09, 0x38, 0x4e, 0xd5, 0xa0, 0x54, 0xb6, + 0x1c, 0xb7, 0xd9, 0x09, 0x48, 0x4c, 0x65, 0xc8, 0xa4, 0xb2, 0x9a, 0x80, 0xe3, 0x54, 0x8d, 0xde, + 0xc2, 0xd7, 0xe1, 0xe3, 0x11, 0xbe, 0xd2, 0x05, 0x7b, 0xba, 0x1a, 0xf8, 0xf4, 0xc4, 0x96, 0xb1, + 0x73, 0x94, 0x99, 0xf4, 0xb0, 0x74, 0xf3, 0xed, 0x12, 0x65, 0x4e, 0x18, 0x92, 0x72, 0x0a, 0x86, + 0xa5, 0x42, 0x4d, 0x38, 0xf8, 0x4a, 0x2a, 0xe8, 0x2a, 0x8c, 0x8a, 0x54, 0x14, 0xcc, 0x9a, 0x97, + 0xaf, 0x11, 0x66, 0x59, 0x51, 0x8e, 0x8b, 0xb1, 0x8e, 0x63, 0x7f, 0x5f, 0x01, 0x66, 0x32, 0xdc, + 0x31, 0xf8, 0x99, 0xb8, 0xed, 0x86, 0x91, 0x4a, 0x6a, 0xa8, 0x9d, 0x89, 0xbc, 0x1c, 0x2b, 0x0c, + 0xba, 0xf1, 0xf8, 0xa9, 0x9b, 0x3c, 0x69, 0x85, 0xb9, 0xb3, 0x80, 0x1e, 0x31, 0x3d, 0xe0, 0x05, + 0x18, 0xe8, 0x84, 0x44, 0xc6, 0x87, 0x54, 0x77, 0x10, 0x53, 0xb8, 0x31, 0x08, 0x7d, 0x13, 0x6c, + 0x2b, 0xdd, 0x95, 0xf6, 0x26, 0xe0, 0xda, 0x2b, 0x0e, 0xa3, 0x9d, 0x8b, 0x88, 0xe7, 0x78, 0x91, + 0x78, 0x39, 0xc4, 0x81, 0xce, 0x58, 0x29, 0x16, 0x50, 0xfb, 0x4b, 0x45, 0x38, 0x9b, 0xeb, 0xa0, + 0x45, 0xbb, 0xde, 0xf2, 0x3d, 0x37, 0xf2, 0x95, 0xc9, 0x0a, 0x0f, 0x6e, 0x46, 0xda, 0x3b, 0x6b, + 0xa2, 0x1c, 0x2b, 0x0c, 0x74, 0x09, 0x06, 0x99, 0xb8, 0x2e, 0x95, 0xde, 0x71, 0xa9, 0xcc, 0xa3, + 0xdd, 0x70, 0x70, 0xdf, 0xa9, 0x73, 0x2f, 0xd2, 0xeb, 0xd8, 0x6f, 0x26, 0x4f, 0x47, 0xda, 0x5d, + 0xdf, 0x6f, 0x62, 0x06, 0x44, 0x1f, 0x10, 0xe3, 0x95, 0xb0, 0xd1, 0xc0, 0x4e, 0xc3, 0x0f, 0xb5, + 0x41, 0x7b, 0x1a, 0x86, 0x77, 0xc9, 0x7e, 0xe0, 0x7a, 0xdb, 0x49, 0xdb, 0x9d, 0x1b, 0xbc, 0x18, + 0x4b, 0xb8, 0x99, 0xa9, 0x6b, 0xf8, 0xb8, 0x73, 0xde, 0x8e, 0xf4, 0xbc, 0x6b, 0x7f, 0xa0, 0x08, + 0x93, 0x78, 0xa9, 0xfc, 0xde, 0x44, 0xdc, 0x4e, 0x4f, 0xc4, 0x71, 0xe7, 0xbc, 0xed, 0x3d, 0x1b, + 0x3f, 0x6f, 0xc1, 0x24, 0x4b, 0x88, 0x21, 0xc2, 0x62, 0xb9, 0xbe, 0x77, 0x02, 0x7c, 0xed, 0x45, + 0x18, 0x0c, 0x68, 0xa3, 0xc9, 0xbc, 0x8e, 0xac, 0x27, 0x98, 0xc3, 0xd0, 0x13, 0x30, 0xc0, 0xba, + 0x40, 0x27, 0x6f, 0x8c, 0xa7, 0xc4, 0x2a, 0x3b, 0x91, 0x83, 0x59, 0x29, 0x8b, 0xf5, 0x82, 0x49, + 0xbb, 0xe9, 0xf2, 0x4e, 0xc7, 0xca, 0xd4, 0x77, 0x87, 0xeb, 0x76, 0x66, 0xd7, 0xde, 0x59, 0xac, + 0x97, 0x6c, 0x92, 0xdd, 0xdf, 0x8c, 0x7f, 0x54, 0x80, 0xf3, 0x99, 0xf5, 0xfa, 0x8e, 0xf5, 0xd2, + 0xbd, 0xf6, 0xa3, 0x4c, 0x79, 0x50, 0x3c, 0x41, 0xcb, 0xc8, 0x81, 0x7e, 0x59, 0xd9, 0xc1, 0x3e, + 0x42, 0xb0, 0x64, 0x0e, 0xd9, 0xbb, 0x24, 0x04, 0x4b, 0x66, 0xdf, 0x72, 0xde, 0xbc, 0x7f, 0x51, + 0xc8, 0xf9, 0x16, 0xf6, 0xfa, 0xbd, 0x4c, 0xcf, 0x19, 0x06, 0x0c, 0xe5, 0x8b, 0x92, 0x9f, 0x31, + 0xbc, 0x0c, 0x2b, 0x28, 0x5a, 0x84, 0xc9, 0x96, 0xeb, 0xd1, 0xc3, 0x67, 0xdf, 0xe4, 0x30, 0x55, + 0x84, 0xac, 0x35, 0x13, 0x8c, 0x93, 0xf8, 0xc8, 0xd5, 0xc2, 0xb3, 0x14, 0xf2, 0x33, 0xa5, 0xe7, + 0xf6, 0x76, 0xc1, 0x54, 0x34, 0xab, 0x51, 0xcc, 0x08, 0xd5, 0xb2, 0xa6, 0x09, 0x3d, 0x8a, 0xfd, + 0x0b, 0x3d, 0xc6, 0xb2, 0x05, 0x1e, 0x73, 0xaf, 0xc2, 0xf8, 0x43, 0x4b, 0xb9, 0xed, 0xaf, 0x16, + 0xe1, 0xf1, 0x2e, 0xdb, 0x9e, 0x9f, 0xf5, 0xc6, 0x1c, 0x68, 0x67, 0x7d, 0x6a, 0x1e, 0xaa, 0x70, + 0x6a, 0xab, 0xd3, 0x6c, 0xee, 0x33, 0x87, 0x01, 0xd2, 0x90, 0x18, 0x82, 0xa7, 0x94, 0x2f, 0xfd, + 0x53, 0xab, 0x19, 0x38, 0x38, 0xb3, 0x26, 0x7d, 0x39, 0xd0, 0x9b, 0x64, 0x5f, 0x91, 0x4a, 0xbc, + 0x1c, 0xb0, 0x0e, 0xc4, 0x26, 0x2e, 0xba, 0x06, 0xd3, 0xce, 0x9e, 0xe3, 0xf2, 0x18, 0xb7, 0x92, + 0x00, 0x7f, 0x3a, 0x28, 0xe1, 0xe4, 0x62, 0x12, 0x01, 0xa7, 0xeb, 0xa0, 0xd7, 0x01, 0xf9, 0x9b, + 0xcc, 0xac, 0xb8, 0x71, 0x8d, 0x78, 0x42, 0x1f, 0xc8, 0xe6, 0xae, 0x18, 0x1f, 0x09, 0xb7, 0x52, + 0x18, 0x38, 0xa3, 0x56, 0x22, 0xdc, 0xc9, 0x50, 0x7e, 0xb8, 0x93, 0xee, 0xe7, 0x62, 0xcf, 0x6c, + 0x1b, 0xff, 0xc9, 0xa2, 0xd7, 0x17, 0x67, 0xf2, 0xcd, 0xa8, 0x7d, 0xaf, 0x32, 0x7b, 0x3e, 0x2e, + 0xb8, 0xd4, 0x82, 0x74, 0x9c, 0xd6, 0xec, 0xf9, 0x62, 0x20, 0x36, 0x71, 0xf9, 0x82, 0x08, 0x63, + 0xdf, 0x50, 0x83, 0xc5, 0x17, 0xa1, 0x85, 0x14, 0x06, 0xfa, 0x24, 0x0c, 0x37, 0xdc, 0x3d, 0x37, + 0x14, 0x62, 0x9b, 0x23, 0xeb, 0x48, 0xe2, 0x73, 0xb0, 0xcc, 0xc9, 0x60, 0x49, 0xcf, 0xfe, 0x81, + 0x02, 0x8c, 0xcb, 0x16, 0xdf, 0xe8, 0xf8, 0x91, 0x73, 0x02, 0xd7, 0xf2, 0x35, 0xe3, 0x5a, 0xfe, + 0x40, 0xb7, 0xf8, 0x4a, 0xac, 0x4b, 0xb9, 0xd7, 0xf1, 0xad, 0xc4, 0x75, 0xfc, 0x54, 0x6f, 0x52, + 0xdd, 0xaf, 0xe1, 0x7f, 0x6c, 0xc1, 0xb4, 0x81, 0x7f, 0x02, 0xb7, 0xc1, 0xaa, 0x79, 0x1b, 0x3c, + 0xd9, 0xf3, 0x1b, 0x72, 0x6e, 0x81, 0xef, 0x2e, 0x26, 0xfa, 0xce, 0x4e, 0xff, 0xb7, 0x60, 0x60, + 0xc7, 0x09, 0x1a, 0xdd, 0xe2, 0xc9, 0xa7, 0x2a, 0x2d, 0x5c, 0x77, 0x02, 0xa1, 0x10, 0x7d, 0x56, + 0x25, 0x2a, 0x77, 0x82, 0xde, 0xca, 0x50, 0xd6, 0x14, 0x7a, 0x19, 0x86, 0xc2, 0xba, 0xdf, 0x56, + 0xee, 0x02, 0x17, 0x78, 0x12, 0x73, 0x5a, 0x72, 0x78, 0x30, 0x8f, 0xcc, 0xe6, 0x68, 0x31, 0x16, + 0xf8, 0xe8, 0x53, 0x30, 0xce, 0x7e, 0x29, 0xeb, 0xa4, 0x62, 0x7e, 0xee, 0xa9, 0x9a, 0x8e, 0xc8, + 0x4d, 0xf7, 0x8c, 0x22, 0x6c, 0x92, 0x9a, 0xdb, 0x86, 0x92, 0xfa, 0xac, 0x47, 0xaa, 0x84, 0xfc, + 0xf7, 0x45, 0x98, 0xc9, 0x58, 0x73, 0x28, 0x34, 0x66, 0xe2, 0x6a, 0x9f, 0x4b, 0xf5, 0x1d, 0xce, + 0x45, 0xc8, 0x5e, 0x43, 0x0d, 0xb1, 0xb6, 0xfa, 0x6e, 0xf4, 0x76, 0x48, 0x92, 0x8d, 0xd2, 0xa2, + 0xde, 0x8d, 0xd2, 0xc6, 0x4e, 0x6c, 0xa8, 0x69, 0x43, 0xaa, 0xa7, 0x8f, 0x74, 0x4e, 0xff, 0xb4, + 0x08, 0xa7, 0xb2, 0x42, 0xbe, 0xa1, 0xcf, 0x27, 0xb2, 0x19, 0xbe, 0xd8, 0x6f, 0xb0, 0x38, 0x9e, + 0xe2, 0x90, 0x0b, 0x9b, 0x97, 0x16, 0xcc, 0xfc, 0x86, 0x3d, 0x87, 0x59, 0xb4, 0xc9, 0xe2, 0x1e, + 0x04, 0x3c, 0x0b, 0xa5, 0x3c, 0x3e, 0x3e, 0xdc, 0x77, 0x07, 0x44, 0xfa, 0xca, 0x30, 0x61, 0xf9, + 0x20, 0x8b, 0x7b, 0x5b, 0x3e, 0xc8, 0x96, 0xe7, 0x5c, 0x18, 0xd5, 0xbe, 0xe6, 0x91, 0xce, 0xf8, + 0x2e, 0xbd, 0xad, 0xb4, 0x7e, 0x3f, 0xd2, 0x59, 0xff, 0x51, 0x0b, 0x12, 0xc6, 0xf0, 0x4a, 0x2c, + 0x66, 0xe5, 0x8a, 0xc5, 0x2e, 0xc0, 0x40, 0xe0, 0x37, 0x49, 0x32, 0xed, 0x1f, 0xf6, 0x9b, 0x04, + 0x33, 0x08, 0xc5, 0x88, 0x62, 0x61, 0xc7, 0x98, 0xfe, 0x90, 0x13, 0x4f, 0xb4, 0x8b, 0x30, 0xd8, + 0x24, 0x7b, 0xa4, 0x99, 0xcc, 0xce, 0x72, 0x93, 0x16, 0x62, 0x0e, 0xb3, 0x7f, 0x7e, 0x00, 0xce, + 0x75, 0x8d, 0x1c, 0x42, 0x9f, 0x43, 0xdb, 0x4e, 0x44, 0xee, 0x39, 0xfb, 0xc9, 0x34, 0x0a, 0xd7, + 0x78, 0x31, 0x96, 0x70, 0xe6, 0xae, 0xc4, 0xa3, 0x21, 0x27, 0x84, 0x88, 0x22, 0x08, 0xb2, 0x80, + 0x9a, 0x42, 0xa9, 0xe2, 0x71, 0x08, 0xa5, 0x9e, 0x07, 0x08, 0xc3, 0x26, 0x37, 0x19, 0x6a, 0x08, + 0x3f, 0xa8, 0x38, 0x6a, 0x76, 0xed, 0xa6, 0x80, 0x60, 0x0d, 0x0b, 0x95, 0x61, 0xaa, 0x1d, 0xf8, + 0x11, 0x97, 0xc9, 0x96, 0xb9, 0x55, 0xdd, 0xa0, 0x19, 0xb4, 0xa1, 0x9a, 0x80, 0xe3, 0x54, 0x0d, + 0xf4, 0x12, 0x8c, 0x8a, 0x40, 0x0e, 0x55, 0xdf, 0x6f, 0x0a, 0x31, 0x90, 0x32, 0x34, 0xab, 0xc5, + 0x20, 0xac, 0xe3, 0x69, 0xd5, 0x98, 0xa0, 0x77, 0x38, 0xb3, 0x1a, 0x17, 0xf6, 0x6a, 0x78, 0x89, + 0xf0, 0x8f, 0x23, 0x7d, 0x85, 0x7f, 0x8c, 0x05, 0x63, 0xa5, 0xbe, 0x95, 0x68, 0xd0, 0x53, 0x94, + 0xf4, 0x33, 0x03, 0x30, 0x23, 0x16, 0xce, 0xa3, 0x5e, 0x2e, 0xb7, 0xd3, 0xcb, 0xe5, 0x38, 0x44, + 0x67, 0xef, 0xad, 0x99, 0x93, 0x5e, 0x33, 0x3f, 0x68, 0x81, 0xc9, 0x5e, 0xa1, 0xff, 0x27, 0x37, + 0x0f, 0xcd, 0x4b, 0xb9, 0xec, 0x5a, 0x43, 0x5e, 0x20, 0xef, 0x30, 0x23, 0x8d, 0xfd, 0x1f, 0x2d, + 0x78, 0xb2, 0x27, 0x45, 0xb4, 0x02, 0x25, 0xc6, 0x03, 0x6a, 0xaf, 0xb3, 0xa7, 0x94, 0xd5, 0xad, + 0x04, 0xe4, 0xb0, 0xa4, 0x71, 0x4d, 0xb4, 0x92, 0x4a, 0xf8, 0xf3, 0x74, 0x46, 0xc2, 0x9f, 0xd3, + 0xc6, 0xf0, 0x3c, 0x64, 0xc6, 0x9f, 0xef, 0xa7, 0x37, 0x8e, 0xe1, 0xf1, 0x82, 0x3e, 0x6c, 0x88, + 0xfd, 0xec, 0x84, 0xd8, 0x0f, 0x99, 0xd8, 0xda, 0x1d, 0xf2, 0x71, 0x98, 0x62, 0x11, 0x9e, 0x98, + 0x0d, 0xb8, 0xf0, 0xc5, 0x29, 0xc4, 0x76, 0x9e, 0x37, 0x13, 0x30, 0x9c, 0xc2, 0xb6, 0xff, 0xb0, + 0x08, 0x43, 0x7c, 0xfb, 0x9d, 0xc0, 0x9b, 0xf0, 0x19, 0x28, 0xb9, 0xad, 0x56, 0x87, 0xe7, 0x70, + 0x19, 0xe4, 0x0e, 0xb8, 0x74, 0x9e, 0x2a, 0xb2, 0x10, 0xc7, 0x70, 0xb4, 0x2a, 0x24, 0xce, 0x5d, + 0x82, 0x48, 0xf2, 0x8e, 0x2f, 0x94, 0x9d, 0xc8, 0xe1, 0x0c, 0x8e, 0xba, 0x67, 0x63, 0xd9, 0x34, + 0xfa, 0x0c, 0x40, 0x18, 0x05, 0xae, 0xb7, 0x4d, 0xcb, 0x44, 0xcc, 0xd4, 0x0f, 0x76, 0xa1, 0x56, + 0x53, 0xc8, 0x9c, 0x66, 0x7c, 0xe6, 0x28, 0x00, 0xd6, 0x28, 0xa2, 0x05, 0xe3, 0xa6, 0x9f, 0x4b, + 0xcc, 0x1d, 0x70, 0xaa, 0xf1, 0x9c, 0xcd, 0x7d, 0x04, 0x4a, 0x8a, 0x78, 0x2f, 0xf9, 0xd3, 0x98, + 0xce, 0x16, 0x7d, 0x0c, 0x26, 0x13, 0x7d, 0x3b, 0x92, 0xf8, 0xea, 0x17, 0x2c, 0x98, 0xe4, 0x9d, + 0x59, 0xf1, 0xf6, 0xc4, 0x6d, 0xf0, 0x36, 0x9c, 0x6a, 0x66, 0x9c, 0xca, 0x62, 0xfa, 0xfb, 0x3f, + 0xc5, 0x95, 0xb8, 0x2a, 0x0b, 0x8a, 0x33, 0xdb, 0x40, 0x97, 0xe9, 0x8e, 0xa3, 0xa7, 0xae, 0xd3, + 0x14, 0xfe, 0xb8, 0x63, 0x7c, 0xb7, 0xf1, 0x32, 0xac, 0xa0, 0xf6, 0xef, 0x58, 0x30, 0xcd, 0x7b, + 0x7e, 0x83, 0xec, 0xab, 0xb3, 0xe9, 0xeb, 0xd9, 0x77, 0x91, 0x3d, 0xac, 0x90, 0x93, 0x3d, 0x4c, + 0xff, 0xb4, 0x62, 0xd7, 0x4f, 0xfb, 0x69, 0x0b, 0xc4, 0x0a, 0x39, 0x01, 0x21, 0xc4, 0xb7, 0x9a, + 0x42, 0x88, 0xb9, 0xfc, 0x4d, 0x90, 0x23, 0x7d, 0xf8, 0x73, 0x0b, 0xa6, 0x38, 0x42, 0xac, 0x2d, + 0xff, 0xba, 0xce, 0x43, 0x3f, 0x39, 0x86, 0x6f, 0x90, 0xfd, 0x0d, 0xbf, 0xea, 0x44, 0x3b, 0xd9, + 0x1f, 0x65, 0x4c, 0xd6, 0x40, 0xd7, 0xc9, 0x6a, 0xc8, 0x0d, 0x74, 0x84, 0xc4, 0xe5, 0x47, 0x4e, + 0xae, 0x61, 0x7f, 0xcd, 0x02, 0xc4, 0x9b, 0x31, 0x18, 0x37, 0xca, 0x0e, 0xb1, 0x52, 0xed, 0xa2, + 0x8b, 0x8f, 0x26, 0x05, 0xc1, 0x1a, 0xd6, 0xb1, 0x0c, 0x4f, 0xc2, 0xe4, 0xa1, 0xd8, 0xdb, 0xe4, + 0xe1, 0x08, 0x23, 0xfa, 0xaf, 0x87, 0x20, 0xe9, 0xf5, 0x83, 0xee, 0xc0, 0x58, 0xdd, 0x69, 0x3b, + 0x9b, 0x6e, 0xd3, 0x8d, 0x5c, 0x12, 0x76, 0x33, 0xca, 0x5a, 0xd6, 0xf0, 0x84, 0x92, 0x5a, 0x2b, + 0xc1, 0x06, 0x1d, 0xb4, 0x00, 0xd0, 0x0e, 0xdc, 0x3d, 0xb7, 0x49, 0xb6, 0x99, 0xac, 0x84, 0x45, + 0x00, 0xe0, 0x96, 0x46, 0xb2, 0x14, 0x6b, 0x18, 0x19, 0x2e, 0xd6, 0xc5, 0x47, 0xec, 0x62, 0x0d, + 0x27, 0xe6, 0x62, 0x3d, 0x70, 0x24, 0x17, 0xeb, 0x91, 0x23, 0xbb, 0x58, 0x0f, 0xf6, 0xe5, 0x62, + 0x8d, 0xe1, 0x8c, 0xe4, 0x3d, 0xe9, 0xff, 0x55, 0xb7, 0x49, 0xc4, 0x83, 0x83, 0x87, 0x2d, 0x98, + 0x7b, 0x70, 0x30, 0x7f, 0x06, 0x67, 0x62, 0xe0, 0x9c, 0x9a, 0xe8, 0x13, 0x30, 0xeb, 0x34, 0x9b, + 0xfe, 0x3d, 0x35, 0xa9, 0x2b, 0x61, 0xdd, 0x69, 0x72, 0x25, 0xc4, 0x30, 0xa3, 0xfa, 0xc4, 0x83, + 0x83, 0xf9, 0xd9, 0xc5, 0x1c, 0x1c, 0x9c, 0x5b, 0x1b, 0x7d, 0x14, 0x4a, 0xed, 0xc0, 0xaf, 0xaf, + 0x69, 0xae, 0x89, 0xe7, 0xe9, 0x00, 0x56, 0x65, 0xe1, 0xe1, 0xc1, 0xfc, 0xb8, 0xfa, 0xc3, 0x2e, + 0xfc, 0xb8, 0x42, 0x86, 0xcf, 0xf4, 0xe8, 0xb1, 0xfa, 0x4c, 0xef, 0xc2, 0x4c, 0x8d, 0x04, 0x2e, + 0x4b, 0x73, 0xde, 0x88, 0xcf, 0xa7, 0x0d, 0x28, 0x05, 0x89, 0x13, 0xb9, 0xaf, 0xc0, 0x8e, 0x5a, + 0x96, 0x03, 0x79, 0x02, 0xc7, 0x84, 0xec, 0xff, 0x65, 0xc1, 0xb0, 0xf0, 0xf2, 0x39, 0x01, 0xae, + 0x71, 0xd1, 0xd0, 0x24, 0xcc, 0x67, 0x0f, 0x18, 0xeb, 0x4c, 0xae, 0x0e, 0xa1, 0x92, 0xd0, 0x21, + 0x3c, 0xd9, 0x8d, 0x48, 0x77, 0xed, 0xc1, 0x5f, 0x2b, 0x52, 0xee, 0xdd, 0xf0, 0x37, 0x7d, 0xf4, + 0x43, 0xb0, 0x0e, 0xc3, 0xa1, 0xf0, 0x77, 0x2c, 0xe4, 0x1b, 0xe8, 0x27, 0x27, 0x31, 0xb6, 0x63, + 0x13, 0x1e, 0x8e, 0x92, 0x48, 0xa6, 0x23, 0x65, 0xf1, 0x11, 0x3a, 0x52, 0xf6, 0xf2, 0xc8, 0x1d, + 0x38, 0x0e, 0x8f, 0x5c, 0xfb, 0x2b, 0xec, 0xe6, 0xd4, 0xcb, 0x4f, 0x80, 0xa9, 0xba, 0x66, 0xde, + 0xb1, 0x76, 0x97, 0x95, 0x25, 0x3a, 0x95, 0xc3, 0x5c, 0xfd, 0x9c, 0x05, 0xe7, 0x32, 0xbe, 0x4a, + 0xe3, 0xb4, 0x9e, 0x85, 0x11, 0xa7, 0xd3, 0x70, 0xd5, 0x5e, 0xd6, 0xf4, 0x89, 0x8b, 0xa2, 0x1c, + 0x2b, 0x0c, 0xb4, 0x0c, 0xd3, 0xe4, 0x7e, 0xdb, 0xe5, 0xaa, 0x54, 0xdd, 0xaa, 0xb5, 0xc8, 0x5d, + 0xc3, 0x56, 0x92, 0x40, 0x9c, 0xc6, 0x57, 0x51, 0x50, 0x8a, 0xb9, 0x51, 0x50, 0xfe, 0x9e, 0x05, + 0xa3, 0xca, 0xe3, 0xef, 0x91, 0x8f, 0xf6, 0xc7, 0xcd, 0xd1, 0x7e, 0xbc, 0xcb, 0x68, 0xe7, 0x0c, + 0xf3, 0x6f, 0x15, 0x54, 0x7f, 0xab, 0x7e, 0x10, 0xf5, 0xc1, 0xc1, 0x3d, 0xbc, 0x1d, 0xfe, 0x55, + 0x18, 0x75, 0xda, 0x6d, 0x09, 0x90, 0x36, 0x68, 0x2c, 0x4c, 0x6f, 0x5c, 0x8c, 0x75, 0x1c, 0xe5, + 0x16, 0x50, 0xcc, 0x75, 0x0b, 0x68, 0x00, 0x44, 0x4e, 0xb0, 0x4d, 0x22, 0x5a, 0x26, 0x22, 0x96, + 0xe5, 0x9f, 0x37, 0x9d, 0xc8, 0x6d, 0x2e, 0xb8, 0x5e, 0x14, 0x46, 0xc1, 0x42, 0xc5, 0x8b, 0x6e, + 0x05, 0xfc, 0x09, 0xa9, 0x85, 0x04, 0x52, 0xb4, 0xb0, 0x46, 0x57, 0x7a, 0xb7, 0xb3, 0x36, 0x06, + 0x4d, 0x63, 0x86, 0x75, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0x11, 0x76, 0xfb, 0xb0, 0x31, 0x3d, 0x5a, + 0x0c, 0x9d, 0xff, 0x3a, 0xa6, 0x66, 0x83, 0x69, 0x32, 0xcb, 0x7a, 0xa4, 0x9e, 0xee, 0x87, 0x3d, + 0x6d, 0x58, 0x77, 0x52, 0x8b, 0xc3, 0xf9, 0xa0, 0x6f, 0x4b, 0x19, 0xa8, 0x3c, 0xd7, 0xe3, 0xd6, + 0x38, 0x82, 0x49, 0x0a, 0xcb, 0xd9, 0xc1, 0x32, 0x1a, 0x54, 0xaa, 0x62, 0x5f, 0x68, 0x39, 0x3b, + 0x04, 0x00, 0xc7, 0x38, 0x94, 0x99, 0x52, 0x7f, 0xc2, 0x59, 0x14, 0xc7, 0xae, 0x54, 0xd8, 0x21, + 0xd6, 0x30, 0xd0, 0x15, 0x21, 0x50, 0xe0, 0x7a, 0x81, 0xc7, 0x13, 0x02, 0x05, 0x39, 0x5c, 0x9a, + 0x14, 0xe8, 0x2a, 0x8c, 0xaa, 0xb4, 0xbd, 0x55, 0x9e, 0x0d, 0x56, 0x2c, 0xb3, 0x95, 0xb8, 0x18, + 0xeb, 0x38, 0x68, 0x03, 0x26, 0x43, 0x2e, 0x67, 0x53, 0x01, 0x85, 0xb9, 0xbc, 0xf2, 0x83, 0xd2, + 0x0a, 0xa8, 0x66, 0x82, 0x0f, 0x59, 0x11, 0x3f, 0x9d, 0xa4, 0x07, 0x7a, 0x92, 0x04, 0x7a, 0x0d, + 0x26, 0x9a, 0xbe, 0xd3, 0x58, 0x72, 0x9a, 0x8e, 0x57, 0x67, 0xe3, 0x33, 0x62, 0x66, 0x7f, 0xbc, + 0x69, 0x40, 0x71, 0x02, 0x9b, 0x32, 0x6f, 0x7a, 0x89, 0x08, 0x82, 0xed, 0x78, 0xdb, 0x24, 0x14, + 0x49, 0x58, 0x19, 0xf3, 0x76, 0x33, 0x07, 0x07, 0xe7, 0xd6, 0x46, 0x2f, 0xc3, 0x98, 0xfc, 0x7c, + 0x2d, 0x60, 0x43, 0xec, 0x61, 0xa1, 0xc1, 0xb0, 0x81, 0x89, 0xee, 0xc1, 0x69, 0xf9, 0x7f, 0x23, + 0x70, 0xb6, 0xb6, 0xdc, 0xba, 0xf0, 0x62, 0xe6, 0xae, 0x98, 0x8b, 0xd2, 0x5f, 0x70, 0x25, 0x0b, + 0xe9, 0xf0, 0x60, 0xfe, 0x82, 0x18, 0xb5, 0x4c, 0x38, 0x9b, 0xc4, 0x6c, 0xfa, 0x68, 0x0d, 0x66, + 0x76, 0x88, 0xd3, 0x8c, 0x76, 0x96, 0x77, 0x48, 0x7d, 0x57, 0x6e, 0x3a, 0x16, 0x06, 0x42, 0xf3, + 0x4b, 0xb8, 0x9e, 0x46, 0xc1, 0x59, 0xf5, 0xd0, 0x9b, 0x30, 0xdb, 0xee, 0x6c, 0x36, 0xdd, 0x70, + 0x67, 0xdd, 0x8f, 0x98, 0x29, 0x90, 0xca, 0x02, 0x2c, 0xe2, 0x45, 0xa8, 0x40, 0x1b, 0xd5, 0x1c, + 0x3c, 0x9c, 0x4b, 0x01, 0xbd, 0x0d, 0xa7, 0x13, 0x8b, 0x41, 0x78, 0xcc, 0x4f, 0xe4, 0xa7, 0x14, + 0xa8, 0x65, 0x55, 0x10, 0xc1, 0x27, 0xb2, 0x40, 0x38, 0xbb, 0x09, 0xfa, 0xf8, 0xd0, 0x62, 0xb8, + 0x86, 0xb3, 0x53, 0xb1, 0xcd, 0xb2, 0x16, 0xe8, 0x35, 0xc4, 0x06, 0x16, 0x7a, 0x05, 0xc0, 0x6d, + 0xaf, 0x3a, 0x2d, 0xb7, 0x49, 0x1f, 0x99, 0x33, 0xac, 0x0e, 0x7d, 0x70, 0x40, 0xa5, 0x2a, 0x4b, + 0xe9, 0xa9, 0x2e, 0xfe, 0xed, 0x63, 0x0d, 0x1b, 0x55, 0x61, 0x42, 0xfc, 0xdb, 0x17, 0x8b, 0x61, + 0x5a, 0xb9, 0xb4, 0x4f, 0xc8, 0x1a, 0x6a, 0x05, 0x20, 0xb3, 0x84, 0xcd, 0x79, 0xa2, 0x3e, 0xda, + 0x86, 0x73, 0x22, 0xcd, 0x34, 0xd1, 0x57, 0xb7, 0x9c, 0xbd, 0x90, 0x65, 0x00, 0x18, 0xe1, 0xce, + 0x12, 0x8b, 0xdd, 0x10, 0x71, 0x77, 0x3a, 0x94, 0x2b, 0xd0, 0x37, 0x09, 0x77, 0x22, 0x3d, 0xcd, + 0x8d, 0x9a, 0x28, 0x57, 0x70, 0x33, 0x09, 0xc4, 0x69, 0x7c, 0x14, 0xc2, 0x69, 0xd7, 0xcb, 0xda, + 0x13, 0x67, 0x18, 0xa1, 0x8f, 0x71, 0xff, 0xd9, 0xee, 0xfb, 0x21, 0x13, 0xce, 0xf7, 0x43, 0x26, + 0xed, 0x77, 0x66, 0xbb, 0xf7, 0xdb, 0x16, 0xad, 0xad, 0xf1, 0xf7, 0xe8, 0xb3, 0x30, 0xa6, 0x7f, + 0x98, 0xe0, 0x55, 0x2e, 0x65, 0xb3, 0xbf, 0xda, 0xa9, 0xc2, 0x5f, 0x07, 0xea, 0xe4, 0xd0, 0x61, + 0xd8, 0xa0, 0x88, 0xea, 0x19, 0x9e, 0xe6, 0x57, 0xfa, 0xe3, 0x85, 0xfa, 0x37, 0x5d, 0x23, 0x90, + 0xbd, 0x59, 0xd0, 0x4d, 0x18, 0xa9, 0x37, 0x5d, 0xe2, 0x45, 0x95, 0x6a, 0xb7, 0xd8, 0x70, 0xcb, + 0x02, 0x47, 0xec, 0x3e, 0x11, 0xd0, 0x9f, 0x97, 0x61, 0x45, 0xc1, 0xfe, 0xd5, 0x02, 0xcc, 0xf7, + 0xc8, 0x0e, 0x91, 0x50, 0x64, 0x59, 0x7d, 0x29, 0xb2, 0x16, 0x65, 0x82, 0xec, 0xf5, 0x84, 0x8c, + 0x2c, 0x91, 0xfc, 0x3a, 0x96, 0x94, 0x25, 0xf1, 0xfb, 0x76, 0x2c, 0xd0, 0x75, 0x61, 0x03, 0x3d, + 0x5d, 0x63, 0x0c, 0x1d, 0xf8, 0x60, 0xff, 0x0f, 0xe7, 0x5c, 0x7d, 0xa6, 0xfd, 0x95, 0x02, 0x9c, + 0x56, 0x43, 0xf8, 0xcd, 0x3b, 0x70, 0xb7, 0xd3, 0x03, 0x77, 0x0c, 0xda, 0x60, 0xfb, 0x16, 0x0c, + 0xf1, 0x60, 0x77, 0x7d, 0x30, 0xec, 0x17, 0xcd, 0xb8, 0xb0, 0x8a, 0x47, 0x34, 0x62, 0xc3, 0x7e, + 0xaf, 0x05, 0x93, 0x1b, 0xcb, 0xd5, 0x9a, 0x5f, 0xdf, 0x25, 0xd1, 0x22, 0x7f, 0x60, 0x61, 0xcd, + 0x27, 0xf7, 0x61, 0x98, 0xea, 0x2c, 0x76, 0xfd, 0x02, 0x0c, 0xec, 0xf8, 0x61, 0x94, 0x34, 0x15, + 0xb9, 0xee, 0x87, 0x11, 0x66, 0x10, 0xfb, 0x77, 0x2d, 0x18, 0xdc, 0x70, 0x5c, 0x2f, 0x92, 0x6a, + 0x05, 0x2b, 0x47, 0xad, 0xd0, 0xcf, 0x77, 0xa1, 0x97, 0x60, 0x88, 0x6c, 0x6d, 0x91, 0x7a, 0x24, + 0x66, 0x55, 0x06, 0x34, 0x18, 0x5a, 0x61, 0xa5, 0x94, 0x83, 0x64, 0x8d, 0xf1, 0xbf, 0x58, 0x20, + 0xa3, 0xbb, 0x50, 0x8a, 0xdc, 0x16, 0x59, 0x6c, 0x34, 0x84, 0xb2, 0xfd, 0x21, 0x82, 0x32, 0x6c, + 0x48, 0x02, 0x38, 0xa6, 0x65, 0x7f, 0xa9, 0x00, 0x10, 0x47, 0x09, 0xea, 0xf5, 0x89, 0x4b, 0x29, + 0x35, 0xec, 0xa5, 0x0c, 0x35, 0x2c, 0x8a, 0x09, 0x66, 0xe8, 0x60, 0xd5, 0x30, 0x15, 0xfb, 0x1a, + 0xa6, 0x81, 0xa3, 0x0c, 0xd3, 0x32, 0x4c, 0xc7, 0x51, 0x8e, 0xcc, 0x20, 0x6f, 0xec, 0xfa, 0xdc, + 0x48, 0x02, 0x71, 0x1a, 0xdf, 0x26, 0x70, 0x41, 0x05, 0x7b, 0x11, 0x37, 0x1a, 0xb3, 0xe5, 0xd6, + 0xd5, 0xda, 0x3d, 0xc6, 0x29, 0xd6, 0x33, 0x17, 0x72, 0xf5, 0xcc, 0x3f, 0x61, 0xc1, 0xa9, 0x64, + 0x3b, 0xcc, 0x8b, 0xf7, 0x8b, 0x16, 0x9c, 0x66, 0xda, 0x76, 0xd6, 0x6a, 0x5a, 0xb7, 0xff, 0x62, + 0xd7, 0x00, 0x36, 0x39, 0x3d, 0x8e, 0x23, 0x67, 0xac, 0x65, 0x91, 0xc6, 0xd9, 0x2d, 0xda, 0xff, + 0xa1, 0x00, 0xb3, 0x79, 0x91, 0x6f, 0x98, 0xab, 0x87, 0x73, 0xbf, 0xb6, 0x4b, 0xee, 0x09, 0x83, + 0xfa, 0xd8, 0xd5, 0x83, 0x17, 0x63, 0x09, 0x4f, 0x06, 0xfc, 0x2f, 0xf4, 0x19, 0xf0, 0x7f, 0x07, + 0xa6, 0xef, 0xed, 0x10, 0xef, 0xb6, 0x17, 0x3a, 0x91, 0x1b, 0x6e, 0xb9, 0x4c, 0x33, 0xcd, 0xd7, + 0xcd, 0x2b, 0xd2, 0xec, 0xfd, 0x6e, 0x12, 0xe1, 0xf0, 0x60, 0xfe, 0x9c, 0x51, 0x10, 0x77, 0x99, + 0x1f, 0x24, 0x38, 0x4d, 0x34, 0x9d, 0x2f, 0x61, 0xe0, 0x11, 0xe6, 0x4b, 0xb0, 0xbf, 0x68, 0xc1, + 0xd9, 0xdc, 0x24, 0xad, 0xe8, 0x32, 0x8c, 0x38, 0x6d, 0x97, 0x0b, 0xf7, 0xc5, 0x31, 0xca, 0x84, + 0x48, 0xd5, 0x0a, 0x17, 0xed, 0x2b, 0xa8, 0x4a, 0x1e, 0x5f, 0xc8, 0x4d, 0x1e, 0xdf, 0x33, 0x17, + 0xbc, 0xfd, 0x3d, 0x16, 0x08, 0x37, 0xd5, 0x3e, 0xce, 0xee, 0x4f, 0xc1, 0xd8, 0x5e, 0x3a, 0xa7, + 0xd2, 0x85, 0x7c, 0xbf, 0x5d, 0x91, 0x49, 0x49, 0x31, 0x64, 0x46, 0xfe, 0x24, 0x83, 0x96, 0xdd, + 0x00, 0x01, 0x2d, 0x13, 0x26, 0xba, 0xee, 0xdd, 0x9b, 0xe7, 0x01, 0x1a, 0x0c, 0x57, 0xcb, 0xc0, + 0xaf, 0x6e, 0xe6, 0xb2, 0x82, 0x60, 0x0d, 0xcb, 0xfe, 0xb7, 0x05, 0x18, 0x95, 0x39, 0x7c, 0x3a, + 0x5e, 0x3f, 0x02, 0xa6, 0x23, 0x25, 0xf5, 0x44, 0x57, 0xa0, 0xc4, 0x24, 0xa0, 0xd5, 0x58, 0x2e, + 0xa7, 0xe4, 0x0f, 0x6b, 0x12, 0x80, 0x63, 0x1c, 0xba, 0x8b, 0xc2, 0xce, 0x26, 0x43, 0x4f, 0x38, + 0x55, 0xd6, 0x78, 0x31, 0x96, 0x70, 0xf4, 0x09, 0x98, 0xe2, 0xf5, 0x02, 0xbf, 0xed, 0x6c, 0x73, + 0xad, 0xc9, 0xa0, 0x0a, 0xbb, 0x30, 0xb5, 0x96, 0x80, 0x1d, 0x1e, 0xcc, 0x9f, 0x4a, 0x96, 0x31, + 0x75, 0x60, 0x8a, 0x0a, 0x33, 0x8e, 0xe2, 0x8d, 0xd0, 0xdd, 0x9f, 0xb2, 0xa9, 0x8a, 0x41, 0x58, + 0xc7, 0xb3, 0x3f, 0x0b, 0x28, 0x9d, 0xcd, 0x08, 0xbd, 0xce, 0x2d, 0x62, 0xdd, 0x80, 0x34, 0xba, + 0xa9, 0x07, 0xf5, 0xe0, 0x02, 0xd2, 0x1f, 0x8a, 0xd7, 0xc2, 0xaa, 0xbe, 0xfd, 0xff, 0x17, 0x61, + 0x2a, 0xe9, 0x01, 0x8e, 0xae, 0xc3, 0x10, 0x67, 0x3d, 0x04, 0xf9, 0x2e, 0xd6, 0x27, 0x9a, 0xdf, + 0x38, 0x3b, 0x84, 0x05, 0xf7, 0x22, 0xea, 0xa3, 0x37, 0x61, 0xb4, 0xe1, 0xdf, 0xf3, 0xee, 0x39, + 0x41, 0x63, 0xb1, 0x5a, 0x11, 0xcb, 0x39, 0xf3, 0x39, 0x5c, 0x8e, 0xd1, 0x74, 0x5f, 0x74, 0xa6, + 0x69, 0x8d, 0x41, 0x58, 0x27, 0x87, 0x36, 0x58, 0x08, 0xf4, 0x2d, 0x77, 0x7b, 0xcd, 0x69, 0x77, + 0x73, 0x8f, 0x58, 0x96, 0x48, 0x1a, 0xe5, 0x71, 0x11, 0x27, 0x9d, 0x03, 0x70, 0x4c, 0x08, 0x7d, + 0x1e, 0x66, 0xc2, 0x1c, 0x21, 0x7d, 0x5e, 0x72, 0xbb, 0x6e, 0x72, 0xeb, 0xa5, 0xc7, 0x1e, 0x1c, + 0xcc, 0xcf, 0x64, 0x89, 0xf3, 0xb3, 0x9a, 0xb1, 0x7f, 0xe4, 0x14, 0x18, 0x9b, 0xd8, 0xc8, 0x75, + 0x6a, 0x1d, 0x53, 0xae, 0x53, 0x0c, 0x23, 0xa4, 0xd5, 0x8e, 0xf6, 0xcb, 0x6e, 0xd0, 0x2d, 0x03, + 0xf8, 0x8a, 0xc0, 0x49, 0xd3, 0x94, 0x10, 0xac, 0xe8, 0x64, 0x27, 0xa4, 0x2d, 0x7e, 0x1d, 0x13, + 0xd2, 0x0e, 0x9c, 0x60, 0x42, 0xda, 0x75, 0x18, 0xde, 0x76, 0x23, 0x4c, 0xda, 0xbe, 0x60, 0xfa, + 0x33, 0xd7, 0xe1, 0x35, 0x8e, 0x92, 0x4e, 0x7d, 0x28, 0x00, 0x58, 0x12, 0x41, 0xaf, 0xab, 0x1d, + 0x38, 0x94, 0xff, 0x30, 0x4f, 0x9b, 0x49, 0x64, 0xee, 0x41, 0x91, 0x76, 0x76, 0xf8, 0x61, 0xd3, + 0xce, 0xae, 0xca, 0x64, 0xb1, 0x23, 0xf9, 0xbe, 0x4c, 0x2c, 0x17, 0x6c, 0x8f, 0x14, 0xb1, 0x77, + 0xf4, 0x04, 0xbb, 0xa5, 0xfc, 0x93, 0x40, 0xe5, 0xce, 0xed, 0x33, 0xad, 0xee, 0xf7, 0x58, 0x70, + 0xba, 0x9d, 0x95, 0x6b, 0x5a, 0x58, 0x14, 0xbc, 0xd4, 0x77, 0x3a, 0x6b, 0xa3, 0x41, 0x26, 0x89, + 0xcb, 0x44, 0xc3, 0xd9, 0xcd, 0xd1, 0x81, 0x0e, 0x36, 0x1b, 0x42, 0xb3, 0x7d, 0x31, 0x27, 0x3f, + 0x6f, 0x97, 0xac, 0xbc, 0x1b, 0x19, 0xb9, 0x60, 0xdf, 0x9f, 0x97, 0x0b, 0xb6, 0xef, 0x0c, 0xb0, + 0xaf, 0xab, 0xcc, 0xbc, 0xe3, 0xf9, 0x4b, 0x89, 0xe7, 0xdd, 0xed, 0x99, 0x8f, 0xf7, 0x75, 0x95, + 0x8f, 0xb7, 0x4b, 0x7c, 0x5b, 0x9e, 0x6d, 0xb7, 0x67, 0x16, 0x5e, 0x2d, 0x93, 0xee, 0xe4, 0xf1, + 0x64, 0xd2, 0x35, 0xae, 0x1a, 0x9e, 0xcc, 0xf5, 0x99, 0x1e, 0x57, 0x8d, 0x41, 0xb7, 0xfb, 0x65, + 0xc3, 0xb3, 0x06, 0x4f, 0x3f, 0x54, 0xd6, 0xe0, 0x3b, 0x7a, 0x16, 0x5e, 0xd4, 0x23, 0xcd, 0x2c, + 0x45, 0xea, 0x33, 0xf7, 0xee, 0x1d, 0xfd, 0x02, 0x9c, 0xc9, 0xa7, 0xab, 0xee, 0xb9, 0x34, 0xdd, + 0xcc, 0x2b, 0x30, 0x95, 0xd3, 0xf7, 0xd4, 0xc9, 0xe4, 0xf4, 0x3d, 0x7d, 0xec, 0x39, 0x7d, 0xcf, + 0x9c, 0x40, 0x4e, 0xdf, 0xc7, 0x4e, 0x30, 0xa7, 0xef, 0x1d, 0x66, 0x86, 0xc3, 0x83, 0xfd, 0x88, + 0x78, 0xbc, 0xd9, 0xb1, 0x5f, 0xb3, 0x22, 0x02, 0xf1, 0x8f, 0x53, 0x20, 0x1c, 0x93, 0xca, 0xc8, + 0x15, 0x3c, 0xfb, 0x08, 0x72, 0x05, 0xaf, 0xc7, 0xb9, 0x82, 0xcf, 0xe6, 0x4f, 0x75, 0x86, 0xe3, + 0x46, 0x4e, 0x86, 0xe0, 0x3b, 0x7a, 0x66, 0xdf, 0xc7, 0xbb, 0xe8, 0x5a, 0xb2, 0x04, 0x8f, 0x5d, + 0xf2, 0xf9, 0xbe, 0xc6, 0xf3, 0xf9, 0x3e, 0x91, 0x7f, 0x92, 0x27, 0xaf, 0x3b, 0x23, 0x8b, 0x2f, + 0xed, 0x97, 0x8a, 0xfc, 0xc8, 0x22, 0x0f, 0xe7, 0xf4, 0x4b, 0x85, 0x8e, 0x4c, 0xf7, 0x4b, 0x81, + 0x70, 0x4c, 0xca, 0xfe, 0xbe, 0x02, 0x9c, 0xef, 0xbe, 0xdf, 0x62, 0x69, 0x6a, 0x35, 0x56, 0x3d, + 0x27, 0xa4, 0xa9, 0xfc, 0xcd, 0x16, 0x63, 0xf5, 0x1d, 0xc8, 0xee, 0x1a, 0x4c, 0x2b, 0x8f, 0x8f, + 0xa6, 0x5b, 0xdf, 0x5f, 0x8f, 0x5f, 0xbe, 0xca, 0x4b, 0xbe, 0x96, 0x44, 0xc0, 0xe9, 0x3a, 0x68, + 0x11, 0x26, 0x8d, 0xc2, 0x4a, 0x59, 0xbc, 0xcd, 0x94, 0xf8, 0xb6, 0x66, 0x82, 0x71, 0x12, 0xdf, + 0xfe, 0xb2, 0x05, 0x8f, 0xe5, 0x24, 0xc3, 0xeb, 0x3b, 0x4e, 0xdb, 0x16, 0x4c, 0xb6, 0xcd, 0xaa, + 0x3d, 0x42, 0x4b, 0x1a, 0x29, 0xf7, 0x54, 0x5f, 0x13, 0x00, 0x9c, 0x24, 0x6a, 0xff, 0x99, 0x05, + 0xe7, 0xba, 0x9a, 0x30, 0x22, 0x0c, 0x67, 0xb6, 0x5b, 0xa1, 0xb3, 0x1c, 0x90, 0x06, 0xf1, 0x22, + 0xd7, 0x69, 0xd6, 0xda, 0xa4, 0xae, 0xc9, 0xc3, 0x99, 0x2d, 0xe0, 0xb5, 0xb5, 0xda, 0x62, 0x1a, + 0x03, 0xe7, 0xd4, 0x44, 0xab, 0x80, 0xd2, 0x10, 0x31, 0xc3, 0x2c, 0x86, 0x75, 0x9a, 0x1e, 0xce, + 0xa8, 0x81, 0x3e, 0x02, 0xe3, 0xca, 0x34, 0x52, 0x9b, 0x71, 0x76, 0xb0, 0x63, 0x1d, 0x80, 0x4d, + 0xbc, 0xa5, 0xcb, 0xbf, 0xfe, 0xfb, 0xe7, 0xdf, 0xf7, 0x9b, 0xbf, 0x7f, 0xfe, 0x7d, 0xbf, 0xf3, + 0xfb, 0xe7, 0xdf, 0xf7, 0x1d, 0x0f, 0xce, 0x5b, 0xbf, 0xfe, 0xe0, 0xbc, 0xf5, 0x9b, 0x0f, 0xce, + 0x5b, 0xbf, 0xf3, 0xe0, 0xbc, 0xf5, 0x7b, 0x0f, 0xce, 0x5b, 0x5f, 0xfa, 0x83, 0xf3, 0xef, 0xfb, + 0x54, 0x61, 0xef, 0xea, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x6a, 0x19, 0xeb, 0xbc, 0x04, + 0x01, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -9985,14 +9990,6 @@ func (m *EphemeralVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i-- - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 if m.VolumeClaimTemplate != nil { { size, err := m.VolumeClaimTemplate.MarshalToSizedBuffer(dAtA[:i]) @@ -14121,6 +14118,18 @@ func (m *PodAffinityTerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } i -= len(m.TopologyKey) copy(dAtA[i:], m.TopologyKey) i = encodeVarintGenerated(dAtA, i, uint64(len(m.TopologyKey))) @@ -15828,6 +15837,11 @@ func (m *Probe) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.TerminationGracePeriodSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TerminationGracePeriodSeconds)) + i-- + dAtA[i] = 0x38 + } i = encodeVarintGenerated(dAtA, i, uint64(m.FailureThreshold)) i-- dAtA[i] = 0x30 @@ -18036,6 +18050,24 @@ func (m *ServiceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.InternalTrafficPolicy != nil { + i -= len(*m.InternalTrafficPolicy) + copy(dAtA[i:], *m.InternalTrafficPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.InternalTrafficPolicy))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + if m.LoadBalancerClass != nil { + i -= len(*m.LoadBalancerClass) + copy(dAtA[i:], *m.LoadBalancerClass) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.LoadBalancerClass))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } if m.AllocateLoadBalancerNodePorts != nil { i-- if *m.AllocateLoadBalancerNodePorts { @@ -20603,7 +20635,6 @@ func (m *EphemeralVolumeSource) Size() (n int) { l = m.VolumeClaimTemplate.Size() n += 1 + l + sovGenerated(uint64(l)) } - n += 2 return n } @@ -22111,6 +22142,10 @@ func (m *PodAffinityTerm) Size() (n int) { } l = len(m.TopologyKey) n += 1 + l + sovGenerated(uint64(l)) + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -22727,6 +22762,9 @@ func (m *Probe) Size() (n int) { n += 1 + sovGenerated(uint64(m.PeriodSeconds)) n += 1 + sovGenerated(uint64(m.SuccessThreshold)) n += 1 + sovGenerated(uint64(m.FailureThreshold)) + if m.TerminationGracePeriodSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TerminationGracePeriodSeconds)) + } return n } @@ -23589,6 +23627,14 @@ func (m *ServiceSpec) Size() (n int) { if m.AllocateLoadBalancerNodePorts != nil { n += 3 } + if m.LoadBalancerClass != nil { + l = len(*m.LoadBalancerClass) + n += 2 + l + sovGenerated(uint64(l)) + } + if m.InternalTrafficPolicy != nil { + l = len(*m.InternalTrafficPolicy) + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -24882,7 +24928,6 @@ func (this *EphemeralVolumeSource) String() string { } s := strings.Join([]string{`&EphemeralVolumeSource{`, `VolumeClaimTemplate:` + strings.Replace(this.VolumeClaimTemplate.String(), "PersistentVolumeClaimTemplate", "PersistentVolumeClaimTemplate", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, `}`, }, "") return s @@ -26033,6 +26078,7 @@ func (this *PodAffinityTerm) String() string { `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, `TopologyKey:` + fmt.Sprintf("%v", this.TopologyKey) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `}`, }, "") return s @@ -26512,6 +26558,7 @@ func (this *Probe) String() string { `PeriodSeconds:` + fmt.Sprintf("%v", this.PeriodSeconds) + `,`, `SuccessThreshold:` + fmt.Sprintf("%v", this.SuccessThreshold) + `,`, `FailureThreshold:` + fmt.Sprintf("%v", this.FailureThreshold) + `,`, + `TerminationGracePeriodSeconds:` + valueToStringGenerated(this.TerminationGracePeriodSeconds) + `,`, `}`, }, "") return s @@ -27182,6 +27229,8 @@ func (this *ServiceSpec) String() string { `ClusterIPs:` + fmt.Sprintf("%v", this.ClusterIPs) + `,`, `IPFamilies:` + fmt.Sprintf("%v", this.IPFamilies) + `,`, `AllocateLoadBalancerNodePorts:` + valueToStringGenerated(this.AllocateLoadBalancerNodePorts) + `,`, + `LoadBalancerClass:` + valueToStringGenerated(this.LoadBalancerClass) + `,`, + `InternalTrafficPolicy:` + valueToStringGenerated(this.InternalTrafficPolicy) + `,`, `}`, }, "") return s @@ -27620,10 +27669,7 @@ func (m *AWSElasticBlockStoreVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27781,10 +27827,7 @@ func (m *Affinity) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27898,10 +27941,7 @@ func (m *AttachedVolume) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -27985,10 +28025,7 @@ func (m *AvoidPods) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -28222,10 +28259,7 @@ func (m *AzureDiskVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -28392,10 +28426,7 @@ func (m *AzureFilePersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -28529,10 +28560,7 @@ func (m *AzureFileVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -28648,10 +28676,7 @@ func (m *Binding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -28927,7 +28952,7 @@ func (m *CSIPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -29088,10 +29113,7 @@ func (m *CSIPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -29337,7 +29359,7 @@ func (m *CSIVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -29390,10 +29412,7 @@ func (m *CSIVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -29507,10 +29526,7 @@ func (m *Capabilities) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -29744,10 +29760,7 @@ func (m *CephFSPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -29981,10 +29994,7 @@ func (m *CephFSVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30154,10 +30164,7 @@ func (m *CinderPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30327,10 +30334,7 @@ func (m *CinderVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30400,10 +30404,7 @@ func (m *ClientIPConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30581,10 +30582,7 @@ func (m *ComponentCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30701,10 +30699,7 @@ func (m *ComponentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30821,10 +30816,7 @@ func (m *ComponentStatusList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -31017,7 +31009,7 @@ func (m *ConfigMap) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -31145,7 +31137,7 @@ func (m *ConfigMap) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -31183,10 +31175,7 @@ func (m *ConfigMap) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -31290,10 +31279,7 @@ func (m *ConfigMapEnvSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -31429,10 +31415,7 @@ func (m *ConfigMapKeySelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -31549,10 +31532,7 @@ func (m *ConfigMapList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -31762,10 +31742,7 @@ func (m *ConfigMapNodeConfigSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -31903,10 +31880,7 @@ func (m *ConfigMapProjection) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -32064,10 +32038,7 @@ func (m *ConfigMapVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -32816,10 +32787,7 @@ func (m *Container) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -32920,10 +32888,7 @@ func (m *ContainerImage) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -33107,10 +33072,7 @@ func (m *ContainerPort) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -33268,10 +33230,7 @@ func (m *ContainerState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -33354,10 +33313,7 @@ func (m *ContainerStateRunning) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -33607,10 +33563,7 @@ func (m *ContainerStateTerminated) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -33724,10 +33677,7 @@ func (m *ContainerStateWaiting) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34031,10 +33981,7 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34103,10 +34050,7 @@ func (m *DaemonEndpoint) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34190,10 +34134,7 @@ func (m *DownwardAPIProjection) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34367,10 +34308,7 @@ func (m *DownwardAPIVolumeFile) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34474,10 +34412,7 @@ func (m *DownwardAPIVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34595,10 +34530,7 @@ func (m *EmptyDirVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34781,10 +34713,7 @@ func (m *EndpointAddress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -34950,10 +34879,7 @@ func (m *EndpointPort) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35105,10 +35031,7 @@ func (m *EndpointSubset) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35225,10 +35148,7 @@ func (m *Endpoints) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35345,10 +35265,7 @@ func (m *EndpointsList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35502,10 +35419,7 @@ func (m *EnvFromSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35655,10 +35569,7 @@ func (m *EnvVar) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35852,10 +35763,7 @@ func (m *EnvVarSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -35970,10 +35878,7 @@ func (m *EphemeralContainer) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -36722,10 +36627,7 @@ func (m *EphemeralContainerCommon) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -36842,10 +36744,7 @@ func (m *EphemeralContainers) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -36925,36 +36824,13 @@ func (m *EphemeralVolumeSource) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -37485,10 +37361,7 @@ func (m *Event) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -37605,10 +37478,7 @@ func (m *EventList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -37710,10 +37580,7 @@ func (m *EventSeries) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -37827,10 +37694,7 @@ func (m *EventSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -37912,10 +37776,7 @@ func (m *ExecAction) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -38101,10 +37962,7 @@ func (m *FCVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -38384,7 +38242,7 @@ func (m *FlexPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -38401,10 +38259,7 @@ func (m *FlexPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -38684,7 +38539,7 @@ func (m *FlexVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -38701,10 +38556,7 @@ func (m *FlexVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -38818,10 +38670,7 @@ func (m *FlockerVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -38974,10 +38823,7 @@ func (m *GCEPersistentDiskVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -39123,10 +38969,7 @@ func (m *GitRepoVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -39293,10 +39136,7 @@ func (m *GlusterfsPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -39430,10 +39270,7 @@ func (m *GlusterfsVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -39646,10 +39483,7 @@ func (m *HTTPGetAction) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -39763,10 +39597,7 @@ func (m *HTTPHeader) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -39924,10 +39755,7 @@ func (m *Handler) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -40041,10 +39869,7 @@ func (m *HostAlias) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -40159,10 +39984,7 @@ func (m *HostPathVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -40520,10 +40342,7 @@ func (m *ISCSIPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -40881,10 +40700,7 @@ func (m *ISCSIVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -41018,10 +40834,7 @@ func (m *KeyToPath) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -41143,10 +40956,7 @@ func (m *Lifecycle) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -41262,10 +41072,7 @@ func (m *LimitRange) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -41459,7 +41266,7 @@ func (m *LimitRangeItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -41588,7 +41395,7 @@ func (m *LimitRangeItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -41717,7 +41524,7 @@ func (m *LimitRangeItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -41846,7 +41653,7 @@ func (m *LimitRangeItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -41975,7 +41782,7 @@ func (m *LimitRangeItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -41992,10 +41799,7 @@ func (m *LimitRangeItem) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42112,10 +41916,7 @@ func (m *LimitRangeList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42199,10 +42000,7 @@ func (m *LimitRangeSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42319,10 +42117,7 @@ func (m *List) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42470,10 +42265,7 @@ func (m *LoadBalancerIngress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42557,10 +42349,7 @@ func (m *LoadBalancerStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42642,10 +42431,7 @@ func (m *LocalObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42760,10 +42546,7 @@ func (m *LocalVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -42897,10 +42680,7 @@ func (m *NFSVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43049,10 +42829,7 @@ func (m *Namespace) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43263,10 +43040,7 @@ func (m *NamespaceCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43383,10 +43157,7 @@ func (m *NamespaceList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43468,10 +43239,7 @@ func (m *NamespaceSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43587,10 +43355,7 @@ func (m *NamespaceStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43739,10 +43504,7 @@ func (m *Node) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43856,10 +43618,7 @@ func (m *NodeAddress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -43979,10 +43738,7 @@ func (m *NodeAffinity) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44226,10 +43982,7 @@ func (m *NodeCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44315,10 +44068,7 @@ func (m *NodeConfigSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44508,10 +44258,7 @@ func (m *NodeConfigStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44594,10 +44341,7 @@ func (m *NodeDaemonEndpoints) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44714,10 +44458,7 @@ func (m *NodeList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44799,10 +44540,7 @@ func (m *NodeProxyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -44964,7 +44702,7 @@ func (m *NodeResources) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -44981,10 +44719,7 @@ func (m *NodeResources) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -45068,10 +44803,7 @@ func (m *NodeSelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -45217,10 +44949,7 @@ func (m *NodeSelectorRequirement) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -45338,10 +45067,7 @@ func (m *NodeSelectorTerm) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -45609,10 +45335,7 @@ func (m *NodeSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -45774,7 +45497,7 @@ func (m *NodeStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -45903,7 +45626,7 @@ func (m *NodeStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -46222,10 +45945,7 @@ func (m *NodeStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -46595,10 +46315,7 @@ func (m *NodeSystemInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -46712,10 +46429,7 @@ func (m *ObjectFieldSelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -46989,10 +46703,7 @@ func (m *ObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -47141,10 +46852,7 @@ func (m *PersistentVolume) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -47293,10 +47001,7 @@ func (m *PersistentVolumeClaim) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -47540,10 +47245,7 @@ func (m *PersistentVolumeClaimCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -47660,10 +47362,7 @@ func (m *PersistentVolumeClaimList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -47948,10 +47647,7 @@ func (m *PersistentVolumeClaimSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -48177,7 +47873,7 @@ func (m *PersistentVolumeClaimStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -48228,10 +47924,7 @@ func (m *PersistentVolumeClaimStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -48347,10 +48040,7 @@ func (m *PersistentVolumeClaimTemplate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -48452,10 +48142,7 @@ func (m *PersistentVolumeClaimVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -48572,10 +48259,7 @@ func (m *PersistentVolumeList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -49417,10 +49101,7 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -49582,7 +49263,7 @@ func (m *PersistentVolumeSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -49865,10 +49546,7 @@ func (m *PersistentVolumeSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50014,10 +49692,7 @@ func (m *PersistentVolumeStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50131,10 +49806,7 @@ func (m *PhotonPersistentDiskVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50283,10 +49955,7 @@ func (m *Pod) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50404,10 +50073,7 @@ func (m *PodAffinity) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50551,16 +50217,49 @@ func (m *PodAffinityTerm) Unmarshal(dAtA []byte) error { } m.TopologyKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50678,10 +50377,7 @@ func (m *PodAntiAffinity) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -50843,10 +50539,7 @@ func (m *PodAttachOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -51090,10 +50783,7 @@ func (m *PodCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -51241,10 +50931,7 @@ func (m *PodDNSConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -51359,10 +51046,7 @@ func (m *PodDNSConfigOption) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -51556,10 +51240,7 @@ func (m *PodExecOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -51641,10 +51322,7 @@ func (m *PodIP) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -51761,10 +51439,7 @@ func (m *PodList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -52022,10 +51697,7 @@ func (m *PodLogOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -52151,10 +51823,7 @@ func (m *PodPortForwardOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -52236,10 +51905,7 @@ func (m *PodProxyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -52321,10 +51987,7 @@ func (m *PodReadinessGate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -52706,10 +52369,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -52795,10 +52455,7 @@ func (m *PodSignature) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -53130,7 +52787,7 @@ func (m *PodSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -53970,7 +53627,7 @@ func (m *PodSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -54076,10 +53733,7 @@ func (m *PodSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -54559,10 +54213,7 @@ func (m *PodStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -54678,10 +54329,7 @@ func (m *PodStatusResult) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -54797,10 +54445,7 @@ func (m *PodTemplate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -54917,10 +54562,7 @@ func (m *PodTemplateList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55036,10 +54678,7 @@ func (m *PodTemplateSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55173,10 +54812,7 @@ func (m *PortStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55310,10 +54946,7 @@ func (m *PortworxVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55396,10 +55029,7 @@ func (m *Preconditions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55579,10 +55209,7 @@ func (m *PreferAvoidPodsEntry) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55684,10 +55311,7 @@ func (m *PreferredSchedulingTerm) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55859,16 +55483,33 @@ func (m *Probe) Unmarshal(dAtA []byte) error { break } } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TerminationGracePeriodSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TerminationGracePeriodSeconds = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -55972,10 +55613,7 @@ func (m *ProjectedVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -56205,10 +55843,7 @@ func (m *QuobyteVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -56506,10 +56141,7 @@ func (m *RBDPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -56807,10 +56439,7 @@ func (m *RBDVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -56959,10 +56588,7 @@ func (m *RangeAllocation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -57111,10 +56737,7 @@ func (m *ReplicationController) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -57325,10 +56948,7 @@ func (m *ReplicationControllerCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -57445,10 +57065,7 @@ func (m *ReplicationControllerList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -57628,7 +57245,7 @@ func (m *ReplicationControllerSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -57700,10 +57317,7 @@ func (m *ReplicationControllerSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -57882,10 +57496,7 @@ func (m *ReplicationControllerStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -58032,10 +57643,7 @@ func (m *ResourceFieldSelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -58184,10 +57792,7 @@ func (m *ResourceQuota) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -58304,10 +57909,7 @@ func (m *ResourceQuotaList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -58469,7 +58071,7 @@ func (m *ResourceQuotaSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -58554,10 +58156,7 @@ func (m *ResourceQuotaSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -58719,7 +58318,7 @@ func (m *ResourceQuotaStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -58848,7 +58447,7 @@ func (m *ResourceQuotaStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -58865,10 +58464,7 @@ func (m *ResourceQuotaStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -59030,7 +58626,7 @@ func (m *ResourceRequirements) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -59159,7 +58755,7 @@ func (m *ResourceRequirements) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -59176,10 +58772,7 @@ func (m *ResourceRequirements) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -59357,10 +58950,7 @@ func (m *SELinuxOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -59710,10 +59300,7 @@ func (m *ScaleIOPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -60063,10 +59650,7 @@ func (m *ScaleIOVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -60150,10 +59734,7 @@ func (m *ScopeSelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -60299,10 +59880,7 @@ func (m *ScopedResourceSelectorRequirement) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -60417,10 +59995,7 @@ func (m *SeccompProfile) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -60614,7 +60189,7 @@ func (m *Secret) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -60773,7 +60348,7 @@ func (m *Secret) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -60811,10 +60386,7 @@ func (m *Secret) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -60918,10 +60490,7 @@ func (m *SecretEnvSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -61057,10 +60626,7 @@ func (m *SecretKeySelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -61177,10 +60743,7 @@ func (m *SecretList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -61318,10 +60881,7 @@ func (m *SecretProjection) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -61435,10 +60995,7 @@ func (m *SecretReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -61595,10 +61152,7 @@ func (m *SecretVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -61949,10 +61503,7 @@ func (m *SecurityContext) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62035,10 +61586,7 @@ func (m *SerializedReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62187,10 +61735,7 @@ func (m *Service) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62362,10 +61907,7 @@ func (m *ServiceAccount) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62482,10 +62024,7 @@ func (m *ServiceAccountList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62619,10 +62158,7 @@ func (m *ServiceAccountTokenProjection) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62739,10 +62275,7 @@ func (m *ServiceList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -62960,10 +62493,7 @@ func (m *ServicePort) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -63045,10 +62575,7 @@ func (m *ServiceProxyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -63242,7 +62769,7 @@ func (m *ServiceSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -63734,16 +63261,79 @@ func (m *ServiceSpec) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.AllocateLoadBalancerNodePorts = &b + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancerClass", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.LoadBalancerClass = &s + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalTrafficPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ServiceInternalTrafficPolicyType(dAtA[iNdEx:postIndex]) + m.InternalTrafficPolicy = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -63860,10 +63450,7 @@ func (m *ServiceStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -63949,10 +63536,7 @@ func (m *SessionAffinityConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -64154,10 +63738,7 @@ func (m *StorageOSPersistentVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -64359,10 +63940,7 @@ func (m *StorageOSVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -64476,10 +64054,7 @@ func (m *Sysctl) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -64594,10 +64169,7 @@ func (m *TCPSocketAction) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -64779,10 +64351,7 @@ func (m *Taint) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -64980,10 +64549,7 @@ func (m *Toleration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65097,10 +64663,7 @@ func (m *TopologySelectorLabelRequirement) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65184,10 +64747,7 @@ func (m *TopologySelectorTerm) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65356,10 +64916,7 @@ func (m *TopologySpreadConstraint) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65506,10 +65063,7 @@ func (m *TypedLocalObjectReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65624,10 +65178,7 @@ func (m *Volume) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65741,10 +65292,7 @@ func (m *VolumeDevice) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -65975,10 +65523,7 @@ func (m *VolumeMount) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -66064,10 +65609,7 @@ func (m *VolumeNodeAffinity) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -66261,10 +65803,7 @@ func (m *VolumeProjection) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -67358,10 +66897,7 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -67539,10 +67075,7 @@ func (m *VsphereVirtualDiskVolumeSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -67644,10 +67177,7 @@ func (m *WeightedPodAffinityTerm) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -67796,10 +67326,7 @@ func (m *WindowsSecurityContextOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/core/v1/generated.proto b/constraint/vendor/k8s.io/api/core/v1/generated.proto index 3a13c53fa..152ea29fd 100644 --- a/constraint/vendor/k8s.io/api/core/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/core/v1/generated.proto @@ -461,7 +461,6 @@ message ConfigMap { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional optional bool immutable = 4; @@ -681,7 +680,7 @@ message Container { // Compute Resources required by this container. // Cannot be updated. - // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ // +optional optional ResourceRequirements resources = 8; @@ -1397,11 +1396,6 @@ message EphemeralVolumeSource { // // Required, must not be nil. optional PersistentVolumeClaimTemplate volumeClaimTemplate = 1; - - // Specifies a read-only configuration for the volume. - // Defaults to false (read/write). - // +optional - optional bool readOnly = 2; } // Event is a report of an event somewhere in the cluster. Events @@ -2004,7 +1998,7 @@ message LimitRangeList { optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; // Items is a list of LimitRange objects. - // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ repeated LimitRange items = 2; } @@ -3011,8 +3005,10 @@ message PodAffinityTerm { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 1; - // namespaces specifies which namespaces the labelSelector applies to (matches against); - // null or empty list means "this pod's namespace" + // namespaces specifies a static list of namespace names that the term applies to. + // The term is applied to the union of the namespaces listed in this field + // and the ones selected by namespaceSelector. + // null or empty namespaces list and null namespaceSelector means "this pod's namespace" // +optional repeated string namespaces = 2; @@ -3022,6 +3018,15 @@ message PodAffinityTerm { // selected pods is running. // Empty topologyKey is not allowed. optional string topologyKey = 3; + + // A label query over the set of namespaces that the term applies to. + // The term is applied to the union of the namespaces selected by this field + // and the ones listed in the namespaces field. + // null selector and null or empty namespaces list means "this pod's namespace". + // An empty selector ({}) matches all namespaces. + // This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 4; } // Pod anti affinity is a group of inter pod anti affinity scheduling rules. @@ -3416,7 +3421,8 @@ message PodSpec { optional string restartPolicy = 3; // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. - // Value must be non-negative integer. The value zero indicates delete immediately. + // Value must be non-negative integer. The value zero indicates stop immediately via + // the kill signal (no opportunity to shut down). // If this value is nil, the default grace period will be used instead. // The grace period is the duration in seconds after the processes running in the pod are sent // a termination signal and the time when the processes are forcibly halted with a kill signal. @@ -3878,6 +3884,18 @@ message Probe { // Defaults to 3. Minimum value is 1. // +optional optional int32 failureThreshold = 6; + + // Optional duration in seconds the pod needs to terminate gracefully upon probe failure. + // The grace period is the duration in seconds after the processes running in the pod are sent + // a termination signal and the time when the processes are forcibly halted with a kill signal. + // Set this value longer than the expected cleanup time for your process. + // If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this + // value overrides the value provided by the pod spec. + // Value must be non-negative integer. The value zero indicates stop immediately via + // the kill signal (no opportunity to shut down). + // This is an alpha field and requires enabling ProbeTerminationGracePeriod feature gate. + // +optional + optional int64 terminationGracePeriodSeconds = 7; } // Represents a projected volume source @@ -4237,14 +4255,14 @@ message ResourceQuotaStatus { // ResourceRequirements describes the compute resource requirements. message ResourceRequirements { // Limits describes the maximum amount of compute resources allowed. - // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ // +optional map limits = 1; // 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-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ // +optional map requests = 2; } @@ -4419,7 +4437,6 @@ message Secret { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional optional bool immutable = 5; @@ -4431,9 +4448,9 @@ message Secret { map data = 2; // stringData allows specifying non-binary secret data in string form. - // It is provided as a write-only convenience method. + // It is provided as a write-only input field for convenience. // All keys and values are merged into the data field on write, overwriting any existing values. - // It is never output when reading from the API. + // The stringData field is never output when reading from the API. // +k8s:conversion-gen=false // +optional map stringData = 4; @@ -4753,6 +4770,7 @@ message ServicePort { // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". // Default is TCP. + // +default="TCP" // +optional optional string protocol = 2; @@ -4926,7 +4944,7 @@ message ServiceSpec { // externalName is the external reference that discovery mechanisms will // return as an alias for this service (e.g. a DNS CNAME record). No // proxying will be involved. Must be a lowercase RFC-1123 hostname - // (https://tools.ietf.org/html/rfc1123) and requires Type to be + // (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". // +optional optional string externalName = 10; @@ -4979,6 +4997,7 @@ message ServiceSpec { // value, if used, only makes sense as the last value in the list. // If this is not specified or empty, no topology constraints will be applied. // This field is alpha-level and is only honored by servers that enable the ServiceTopology feature. + // This field is deprecated and will be removed in a future version. // +optional repeated string topologyKeys = 16; @@ -5023,6 +5042,30 @@ message ServiceSpec { // This field is alpha-level and is only honored by servers that enable the ServiceLBNodePortControl feature. // +optional optional bool allocateLoadBalancerNodePorts = 20; + + // loadBalancerClass is the class of the load balancer implementation this Service belongs to. + // If specified, the value of this field must be a label-style identifier, with an optional prefix, + // e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. + // This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load + // balancer implementation is used, today this is typically done through the cloud provider integration, + // but should apply for any default implementation. If set, it is assumed that a load balancer + // implementation is watching for Services with a matching class. Any default load balancer + // implementation (e.g. cloud providers) should ignore Services that set this field. + // This field can only be set when creating or updating a Service to type 'LoadBalancer'. + // Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. + // +featureGate=LoadBalancerClass + // +optional + optional string loadBalancerClass = 21; + + // InternalTrafficPolicy specifies if the cluster internal traffic + // should be routed to all endpoints or node-local endpoints only. + // "Cluster" routes internal traffic to a Service to all endpoints. + // "Local" routes traffic to node-local endpoints only, traffic is + // dropped if no node-local endpoints are ready. + // The default value is "Cluster". + // +featureGate=ServiceInternalTrafficPolicy + // +optional + optional string internalTrafficPolicy = 22; } // ServiceStatus represents the current status of a service. @@ -5502,7 +5545,7 @@ message VolumeSource { // +optional optional CSIVolumeSource csi = 28; - // Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). + // Ephemeral represents a volume that is handled by a cluster storage driver. // The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, // and deleted when the pod is removed. // @@ -5527,6 +5570,9 @@ message VolumeSource { // A pod can use both types of ephemeral volumes and // persistent volumes at the same time. // + // This is a beta feature and only available when the GenericEphemeralVolume + // feature gate is enabled. + // // +optional optional EphemeralVolumeSource ephemeral = 29; } diff --git a/constraint/vendor/k8s.io/api/core/v1/types.go b/constraint/vendor/k8s.io/api/core/v1/types.go index 2bba97251..3eadb4567 100644 --- a/constraint/vendor/k8s.io/api/core/v1/types.go +++ b/constraint/vendor/k8s.io/api/core/v1/types.go @@ -156,7 +156,7 @@ type VolumeSource struct { // CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature). // +optional CSI *CSIVolumeSource `json:"csi,omitempty" protobuf:"bytes,28,opt,name=csi"` - // Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). + // Ephemeral represents a volume that is handled by a cluster storage driver. // The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, // and deleted when the pod is removed. // @@ -181,6 +181,9 @@ type VolumeSource struct { // A pod can use both types of ephemeral volumes and // persistent volumes at the same time. // + // This is a beta feature and only available when the GenericEphemeralVolume + // feature gate is enabled. + // // +optional Ephemeral *EphemeralVolumeSource `json:"ephemeral,omitempty" protobuf:"bytes,29,opt,name=ephemeral"` } @@ -1795,10 +1798,8 @@ type EphemeralVolumeSource struct { // Required, must not be nil. VolumeClaimTemplate *PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty" protobuf:"bytes,1,opt,name=volumeClaimTemplate"` - // Specifies a read-only configuration for the volume. - // Defaults to false (read/write). - // +optional - ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + // ReadOnly is tombstoned to show why 2 is a reserved protobuf tag. + // ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` } // PersistentVolumeClaimTemplate is used to produce @@ -2116,6 +2117,17 @@ type Probe struct { // Defaults to 3. Minimum value is 1. // +optional FailureThreshold int32 `json:"failureThreshold,omitempty" protobuf:"varint,6,opt,name=failureThreshold"` + // Optional duration in seconds the pod needs to terminate gracefully upon probe failure. + // The grace period is the duration in seconds after the processes running in the pod are sent + // a termination signal and the time when the processes are forcibly halted with a kill signal. + // Set this value longer than the expected cleanup time for your process. + // If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this + // value overrides the value provided by the pod spec. + // Value must be non-negative integer. The value zero indicates stop immediately via + // the kill signal (no opportunity to shut down). + // This is an alpha field and requires enabling ProbeTerminationGracePeriod feature gate. + // +optional + TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,7,opt,name=terminationGracePeriodSeconds"` } // PullPolicy describes a policy for if/when to pull a container image @@ -2169,13 +2181,13 @@ type Capabilities struct { // ResourceRequirements describes the compute resource requirements. type ResourceRequirements struct { // Limits describes the maximum amount of compute resources allowed. - // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ // +optional Limits ResourceList `json:"limits,omitempty" protobuf:"bytes,1,rep,name=limits,casttype=ResourceList,castkey=ResourceName"` // 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-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ // +optional Requests ResourceList `json:"requests,omitempty" protobuf:"bytes,2,rep,name=requests,casttype=ResourceList,castkey=ResourceName"` } @@ -2253,7 +2265,7 @@ type Container struct { Env []EnvVar `json:"env,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=env"` // Compute Resources required by this container. // Cannot be updated. - // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ // +optional Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,8,opt,name=resources"` // Pod volumes to mount into the container's filesystem. @@ -2774,8 +2786,10 @@ type PodAffinityTerm struct { // A label query over a set of resources, in this case pods. // +optional LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"` - // namespaces specifies which namespaces the labelSelector applies to (matches against); - // null or empty list means "this pod's namespace" + // namespaces specifies a static list of namespace names that the term applies to. + // The term is applied to the union of the namespaces listed in this field + // and the ones selected by namespaceSelector. + // null or empty namespaces list and null namespaceSelector means "this pod's namespace" // +optional Namespaces []string `json:"namespaces,omitempty" protobuf:"bytes,2,rep,name=namespaces"` // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -2784,6 +2798,14 @@ type PodAffinityTerm struct { // selected pods is running. // Empty topologyKey is not allowed. TopologyKey string `json:"topologyKey" protobuf:"bytes,3,opt,name=topologyKey"` + // A label query over the set of namespaces that the term applies to. + // The term is applied to the union of the namespaces selected by this field + // and the ones listed in the namespaces field. + // null selector and null or empty namespaces list means "this pod's namespace". + // An empty selector ({}) matches all namespaces. + // This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled. + // +optional + NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,4,opt,name=namespaceSelector"` } // Node affinity is a group of node affinity scheduling rules. @@ -2957,7 +2979,8 @@ type PodSpec struct { // +optional RestartPolicy RestartPolicy `json:"restartPolicy,omitempty" protobuf:"bytes,3,opt,name=restartPolicy,casttype=RestartPolicy"` // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. - // Value must be non-negative integer. The value zero indicates delete immediately. + // Value must be non-negative integer. The value zero indicates stop immediately via + // the kill signal (no opportunity to shut down). // If this value is nil, the default grace period will be used instead. // The grace period is the duration in seconds after the processes running in the pod are sent // a termination signal and the time when the processes are forcibly halted with a kill signal. @@ -3930,6 +3953,19 @@ const ( ServiceTypeExternalName ServiceType = "ExternalName" ) +// ServiceInternalTrafficPolicyType describes the type of traffic routing for +// internal traffic +type ServiceInternalTrafficPolicyType string + +const ( + // ServiceInternalTrafficPolicyCluster routes traffic to all endpoints + ServiceInternalTrafficPolicyCluster ServiceInternalTrafficPolicyType = "Cluster" + + // ServiceInternalTrafficPolicyLocal only routes to node-local + // endpoints, otherwise drops the traffic + ServiceInternalTrafficPolicyLocal ServiceInternalTrafficPolicyType = "Local" +) + // Service External Traffic Policy Type string type ServiceExternalTrafficPolicyType string @@ -4150,7 +4186,7 @@ type ServiceSpec struct { // externalName is the external reference that discovery mechanisms will // return as an alias for this service (e.g. a DNS CNAME record). No // proxying will be involved. Must be a lowercase RFC-1123 hostname - // (https://tools.ietf.org/html/rfc1123) and requires Type to be + // (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". // +optional ExternalName string `json:"externalName,omitempty" protobuf:"bytes,10,opt,name=externalName"` @@ -4203,6 +4239,7 @@ type ServiceSpec struct { // value, if used, only makes sense as the last value in the list. // If this is not specified or empty, no topology constraints will be applied. // This field is alpha-level and is only honored by servers that enable the ServiceTopology feature. + // This field is deprecated and will be removed in a future version. // +optional TopologyKeys []string `json:"topologyKeys,omitempty" protobuf:"bytes,16,opt,name=topologyKeys"` @@ -4250,6 +4287,30 @@ type ServiceSpec struct { // This field is alpha-level and is only honored by servers that enable the ServiceLBNodePortControl feature. // +optional AllocateLoadBalancerNodePorts *bool `json:"allocateLoadBalancerNodePorts,omitempty" protobuf:"bytes,20,opt,name=allocateLoadBalancerNodePorts"` + + // loadBalancerClass is the class of the load balancer implementation this Service belongs to. + // If specified, the value of this field must be a label-style identifier, with an optional prefix, + // e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. + // This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load + // balancer implementation is used, today this is typically done through the cloud provider integration, + // but should apply for any default implementation. If set, it is assumed that a load balancer + // implementation is watching for Services with a matching class. Any default load balancer + // implementation (e.g. cloud providers) should ignore Services that set this field. + // This field can only be set when creating or updating a Service to type 'LoadBalancer'. + // Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. + // +featureGate=LoadBalancerClass + // +optional + LoadBalancerClass *string `json:"loadBalancerClass,omitempty" protobuf:"bytes,21,opt,name=loadBalancerClass"` + + // InternalTrafficPolicy specifies if the cluster internal traffic + // should be routed to all endpoints or node-local endpoints only. + // "Cluster" routes internal traffic to a Service to all endpoints. + // "Local" routes traffic to node-local endpoints only, traffic is + // dropped if no node-local endpoints are ready. + // The default value is "Cluster". + // +featureGate=ServiceInternalTrafficPolicy + // +optional + InternalTrafficPolicy *ServiceInternalTrafficPolicyType `json:"internalTrafficPolicy,omitempty" protobuf:"bytes,22,opt,name=internalTrafficPolicy"` } // ServicePort contains information on service's port. @@ -4264,6 +4325,7 @@ type ServicePort struct { // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". // Default is TCP. + // +default="TCP" // +optional Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,2,opt,name=protocol,casttype=Protocol"` @@ -5560,7 +5622,7 @@ type LimitRangeList struct { metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of LimitRange objects. - // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ Items []LimitRange `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -5613,9 +5675,9 @@ const ( type ResourceQuotaScope string const ( - // Match all pod objects where spec.activeDeadlineSeconds + // Match all pod objects where spec.activeDeadlineSeconds >=0 ResourceQuotaScopeTerminating ResourceQuotaScope = "Terminating" - // Match all pod objects where !spec.activeDeadlineSeconds + // Match all pod objects where spec.activeDeadlineSeconds is nil ResourceQuotaScopeNotTerminating ResourceQuotaScope = "NotTerminating" // Match all pod objects that have best effort quality of service ResourceQuotaScopeBestEffort ResourceQuotaScope = "BestEffort" @@ -5623,6 +5685,9 @@ const ( ResourceQuotaScopeNotBestEffort ResourceQuotaScope = "NotBestEffort" // Match all pod objects that have priority class mentioned ResourceQuotaScopePriorityClass ResourceQuotaScope = "PriorityClass" + // Match all pod objects that have cross-namespace pod (anti)affinity mentioned. + // This is an alpha feature enabled by the PodAffinityNamespaceSelector feature flag. + ResourceQuotaScopeCrossNamespacePodAffinity ResourceQuotaScope = "CrossNamespacePodAffinity" ) // ResourceQuotaSpec defines the desired hard limits to enforce for Quota. @@ -5741,7 +5806,6 @@ type Secret struct { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional Immutable *bool `json:"immutable,omitempty" protobuf:"varint,5,opt,name=immutable"` @@ -5753,9 +5817,9 @@ type Secret struct { Data map[string][]byte `json:"data,omitempty" protobuf:"bytes,2,rep,name=data"` // stringData allows specifying non-binary secret data in string form. - // It is provided as a write-only convenience method. + // It is provided as a write-only input field for convenience. // All keys and values are merged into the data field on write, overwriting any existing values. - // It is never output when reading from the API. + // The stringData field is never output when reading from the API. // +k8s:conversion-gen=false // +optional StringData map[string]string `json:"stringData,omitempty" protobuf:"bytes,4,rep,name=stringData"` @@ -5882,7 +5946,6 @@ type ConfigMap struct { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional Immutable *bool `json:"immutable,omitempty" protobuf:"varint,4,opt,name=immutable"` @@ -6168,7 +6231,7 @@ type RangeAllocation struct { } const ( - // "default-scheduler" is the name of default scheduler. + // DefaultSchedulerName defines the name of default scheduler. DefaultSchedulerName = "default-scheduler" // RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule diff --git a/constraint/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go index c58d8ac56..0892b9b5e 100644 --- a/constraint/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -252,7 +252,7 @@ func (ComponentStatusList) SwaggerDoc() map[string]string { var map_ConfigMap = map[string]string{ "": "ConfigMap holds configuration data for pods to consume.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "immutable": "Immutable, if set to true, ensures that data stored in the ConfigMap cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is a beta field enabled by ImmutableEphemeralVolumes feature gate.", + "immutable": "Immutable, if set to true, ensures that data stored in the ConfigMap cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil.", "data": "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.", "binaryData": "BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.", } @@ -334,7 +334,7 @@ var map_Container = map[string]string{ "ports": "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", "envFrom": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", "env": "List of environment variables to set in the container. Cannot be updated.", - "resources": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", + "resources": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", "volumeDevices": "volumeDevices is the list of block devices to be used by the container.", "livenessProbe": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", @@ -629,7 +629,6 @@ func (EphemeralContainers) SwaggerDoc() map[string]string { var map_EphemeralVolumeSource = map[string]string{ "": "Represents an ephemeral volume that is handled by a normal storage driver.", "volumeClaimTemplate": "Will be used to create a stand-alone PVC to provision the volume. The pod in which this EphemeralVolumeSource is embedded will be the owner of the PVC, i.e. the PVC will be deleted together with the pod. The name of the PVC will be `-` where `` is the name from the `PodSpec.Volumes` array entry. Pod validation will reject the pod if the concatenated name is not valid for a PVC (for example, too long).\n\nAn existing PVC with that name that is not owned by the pod will *not* be used for the pod to avoid using an unrelated volume by mistake. Starting the pod is then blocked until the unrelated PVC is removed. If such a pre-created PVC is meant to be used by the pod, the PVC has to updated with an owner reference to the pod once the pod exists. Normally this should not be necessary, but it may be useful when manually reconstructing a broken cluster.\n\nThis field is read-only and no changes will be made by Kubernetes to the PVC after it has been created.\n\nRequired, must not be nil.", - "readOnly": "Specifies a read-only configuration for the volume. Defaults to false (read/write).", } func (EphemeralVolumeSource) SwaggerDoc() map[string]string { @@ -933,7 +932,7 @@ func (LimitRangeItem) SwaggerDoc() map[string]string { var map_LimitRangeList = map[string]string{ "": "LimitRangeList is a list of LimitRange items.", "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - "items": "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", + "items": "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", } func (LimitRangeList) SwaggerDoc() map[string]string { @@ -1449,10 +1448,11 @@ func (PodAffinity) SwaggerDoc() map[string]string { } var map_PodAffinityTerm = map[string]string{ - "": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running", - "labelSelector": "A label query over a set of resources, in this case pods.", - "namespaces": "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", - "topologyKey": "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.", + "": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running", + "labelSelector": "A label query over a set of resources, in this case pods.", + "namespaces": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "topologyKey": "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.", + "namespaceSelector": "A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means \"this pod's namespace\". An empty selector ({}) matches all namespaces. This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled.", } func (PodAffinityTerm) SwaggerDoc() map[string]string { @@ -1627,7 +1627,7 @@ var map_PodSpec = map[string]string{ "containers": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.", "ephemeralContainers": "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing pod to perform user-initiated actions such as debugging. This list cannot be specified when creating a pod, and it cannot be modified by updating the pod spec. In order to add an ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature.", "restartPolicy": "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", - "terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", + "terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", "activeDeadlineSeconds": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", "dnsPolicy": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", "nodeSelector": "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. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", @@ -1777,12 +1777,13 @@ func (PreferredSchedulingTerm) SwaggerDoc() map[string]string { } var map_Probe = map[string]string{ - "": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", - "initialDelaySeconds": "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - "timeoutSeconds": "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", - "periodSeconds": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", - "successThreshold": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.", - "failureThreshold": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", + "initialDelaySeconds": "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "timeoutSeconds": "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", + "periodSeconds": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "successThreshold": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.", + "failureThreshold": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is an alpha field and requires enabling ProbeTerminationGracePeriod feature gate.", } func (Probe) SwaggerDoc() map[string]string { @@ -1971,8 +1972,8 @@ func (ResourceQuotaStatus) SwaggerDoc() map[string]string { var map_ResourceRequirements = map[string]string{ "": "ResourceRequirements describes the compute resource requirements.", - "limits": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "requests": "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-compute-resources-container/", + "limits": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "requests": "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/", } func (ResourceRequirements) SwaggerDoc() map[string]string { @@ -2060,9 +2061,9 @@ func (SeccompProfile) SwaggerDoc() map[string]string { var map_Secret = map[string]string{ "": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "immutable": "Immutable, if set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is a beta field enabled by ImmutableEphemeralVolumes feature gate.", + "immutable": "Immutable, if set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil.", "data": "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", - "stringData": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", + "stringData": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only input field for convenience. All keys and values are merged into the data field on write, overwriting any existing values. The stringData field is never output when reading from the API.", "type": "Used to facilitate programmatic handling of secret data.", } @@ -2247,15 +2248,17 @@ var map_ServiceSpec = map[string]string{ "sessionAffinity": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", "loadBalancerIP": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", "loadBalancerSourceRanges": "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/", - "externalName": "externalName is the external reference that discovery mechanisms will return as an alias for this service (e.g. a DNS CNAME record). No proxying will be involved. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be", + "externalName": "externalName is the external reference that discovery mechanisms will return as an alias for this service (e.g. a DNS CNAME record). No proxying will be involved. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires `type` to be \"ExternalName\".", "externalTrafficPolicy": "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.", "healthCheckNodePort": "healthCheckNodePort specifies the healthcheck nodePort for the service. This only applies when type is set to LoadBalancer and externalTrafficPolicy is set to Local. If a value is specified, is in-range, and is not in use, it will be used. If not specified, a value will be automatically allocated. External systems (e.g. load-balancers) can use this port to determine if a given node holds endpoints for this service or not. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type).", "publishNotReadyAddresses": "publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet's Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered \"ready\" even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.", "sessionAffinityConfig": "sessionAffinityConfig contains the configurations of session affinity.", - "topologyKeys": "topologyKeys is a preference-order list of topology keys which implementations of services should use to preferentially sort endpoints when accessing this Service, it can not be used at the same time as externalTrafficPolicy=Local. Topology keys must be valid label keys and at most 16 keys may be specified. Endpoints are chosen based on the first topology key with available backends. If this field is specified and all entries have no backends that match the topology of the client, the service has no backends for that client and connections should fail. The special value \"*\" may be used to mean \"any topology\". This catch-all value, if used, only makes sense as the last value in the list. If this is not specified or empty, no topology constraints will be applied. This field is alpha-level and is only honored by servers that enable the ServiceTopology feature.", + "topologyKeys": "topologyKeys is a preference-order list of topology keys which implementations of services should use to preferentially sort endpoints when accessing this Service, it can not be used at the same time as externalTrafficPolicy=Local. Topology keys must be valid label keys and at most 16 keys may be specified. Endpoints are chosen based on the first topology key with available backends. If this field is specified and all entries have no backends that match the topology of the client, the service has no backends for that client and connections should fail. The special value \"*\" may be used to mean \"any topology\". This catch-all value, if used, only makes sense as the last value in the list. If this is not specified or empty, no topology constraints will be applied. This field is alpha-level and is only honored by servers that enable the ServiceTopology feature. This field is deprecated and will be removed in a future version.", "ipFamilies": "IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this service, and is gated by the \"IPv6DualStack\" feature gate. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. If this field is specified manually, the requested family is available in the cluster, and ipFamilyPolicy allows it, it will be used; otherwise creation of the service will fail. This field is conditionally mutable: it allows for adding or removing a secondary IP family, but it does not allow changing the primary IP family of the Service. Valid values are \"IPv4\" and \"IPv6\". This field only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and does apply to \"headless\" services. This field will be wiped when updating a Service to type ExternalName.\n\nThis field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.", "ipFamilyPolicy": "IPFamilyPolicy represents the dual-stack-ness requested or required by this Service, and is gated by the \"IPv6DualStack\" feature gate. If there is no value provided, then this field will be set to SingleStack. Services can be \"SingleStack\" (a single IP family), \"PreferDualStack\" (two IP families on dual-stack configured clusters or a single IP family on single-stack clusters), or \"RequireDualStack\" (two IP families on dual-stack configured clusters, otherwise fail). The ipFamilies and clusterIPs fields depend on the value of this field. This field will be wiped when updating a service to type ExternalName.", "allocateLoadBalancerNodePorts": "allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is \"true\". It may be set to \"false\" if the cluster load-balancer does not rely on NodePorts. allocateLoadBalancerNodePorts may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. This field is alpha-level and is only honored by servers that enable the ServiceLBNodePortControl feature.", + "loadBalancerClass": "loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. \"internal-vip\" or \"example.com/internal-vip\". Unprefixed names are reserved for end-users. This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type 'LoadBalancer'. Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type.", + "internalTrafficPolicy": "InternalTrafficPolicy specifies if the cluster internal traffic should be routed to all endpoints or node-local endpoints only. \"Cluster\" routes internal traffic to a Service to all endpoints. \"Local\" routes traffic to node-local endpoints only, traffic is dropped if no node-local endpoints are ready. The default value is \"Cluster\".", } func (ServiceSpec) SwaggerDoc() map[string]string { @@ -2478,7 +2481,7 @@ var map_VolumeSource = map[string]string{ "scaleIO": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", "storageos": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", "csi": "CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).", - "ephemeral": "Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.\n\nUse this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity\n tracking are needed,\nc) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through\n a PersistentVolumeClaim (see EphemeralVolumeSource for more\n information on the connection between this volume type\n and PersistentVolumeClaim).\n\nUse PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod.\n\nUse CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information.\n\nA pod can use both types of ephemeral volumes and persistent volumes at the same time.", + "ephemeral": "Ephemeral represents a volume that is handled by a cluster storage driver. The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.\n\nUse this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity\n tracking are needed,\nc) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through\n a PersistentVolumeClaim (see EphemeralVolumeSource for more\n information on the connection between this volume type\n and PersistentVolumeClaim).\n\nUse PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod.\n\nUse CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information.\n\nA pod can use both types of ephemeral volumes and persistent volumes at the same time.\n\nThis is a beta feature and only available when the GenericEphemeralVolume feature gate is enabled.", } func (VolumeSource) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/core/v1/well_known_labels.go b/constraint/vendor/k8s.io/api/core/v1/well_known_labels.go index a506f17f6..5cf82a981 100644 --- a/constraint/vendor/k8s.io/api/core/v1/well_known_labels.go +++ b/constraint/vendor/k8s.io/api/core/v1/well_known_labels.go @@ -19,16 +19,21 @@ package v1 const ( LabelHostname = "kubernetes.io/hostname" - LabelFailureDomainBetaZone = "failure-domain.beta.kubernetes.io/zone" - LabelFailureDomainBetaRegion = "failure-domain.beta.kubernetes.io/region" - LabelTopologyZone = "topology.kubernetes.io/zone" - LabelTopologyRegion = "topology.kubernetes.io/region" + LabelTopologyZone = "topology.kubernetes.io/zone" + LabelTopologyRegion = "topology.kubernetes.io/region" - // Legacy names for compat. - LabelZoneFailureDomain = LabelFailureDomainBetaZone // deprecated, remove after 1.20 - LabelZoneRegion = LabelFailureDomainBetaRegion // deprecated, remove after 1.20 - LabelZoneFailureDomainStable = LabelTopologyZone - LabelZoneRegionStable = LabelTopologyRegion + // These label have been deprecated since 1.17, but will be supported for + // the foreseeable future, to accommodate things like long-lived PVs that + // use them. New users should prefer the "topology.kubernetes.io/*" + // equivalents. + LabelFailureDomainBetaZone = "failure-domain.beta.kubernetes.io/zone" // deprecated + LabelFailureDomainBetaRegion = "failure-domain.beta.kubernetes.io/region" // deprecated + + // Retained for compat when vendored. Do not use these consts in new code. + LabelZoneFailureDomain = LabelFailureDomainBetaZone // deprecated + LabelZoneRegion = LabelFailureDomainBetaRegion // deprecated + LabelZoneFailureDomainStable = LabelTopologyZone // deprecated + LabelZoneRegionStable = LabelTopologyRegion // deprecated LabelInstanceType = "beta.kubernetes.io/instance-type" LabelInstanceTypeStable = "node.kubernetes.io/instance-type" @@ -53,4 +58,13 @@ const ( // controllers and kube-proxy to check if the Endpoint objects should be replicated when // using Headless Services IsHeadlessService = "service.kubernetes.io/headless" + + // LabelNodeExcludeBalancers specifies that the node should not be considered as a target + // for external load-balancers which use nodes as a second hop (e.g. many cloud LBs which only + // understand nodes). For services that use externalTrafficPolicy=Local, this may mean that + // any backends on excluded nodes are not reachable by those external load-balancers. + // Implementations of this exclusion may vary based on provider. + LabelNodeExcludeBalancers = "node.kubernetes.io/exclude-from-external-load-balancers" + // LabelMetadataName is the label name which, in-tree, is used to automatically label namespaces, so they can be selected easily by tools which require definitive labels + LabelMetadataName = "kubernetes.io/metadata.name" ) diff --git a/constraint/vendor/k8s.io/api/core/v1/well_known_taints.go b/constraint/vendor/k8s.io/api/core/v1/well_known_taints.go index e1a8f6291..84d268197 100644 --- a/constraint/vendor/k8s.io/api/core/v1/well_known_taints.go +++ b/constraint/vendor/k8s.io/api/core/v1/well_known_taints.go @@ -27,7 +27,7 @@ const ( TaintNodeUnreachable = "node.kubernetes.io/unreachable" // TaintNodeUnschedulable will be added when node becomes unschedulable - // and removed when node becomes scheduable. + // and removed when node becomes schedulable. TaintNodeUnschedulable = "node.kubernetes.io/unschedulable" // TaintNodeMemoryPressure will be added when node has memory pressure @@ -43,6 +43,6 @@ const ( TaintNodeNetworkUnavailable = "node.kubernetes.io/network-unavailable" // TaintNodePIDPressure will be added when node has pid pressure - // and removed when node has enough disk. + // and removed when node has enough pid. TaintNodePIDPressure = "node.kubernetes.io/pid-pressure" ) diff --git a/constraint/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go index b868f9ba5..b60baa665 100644 --- a/constraint/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -3360,6 +3360,11 @@ func (in *PodAffinityTerm) DeepCopyInto(out *PodAffinityTerm) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } return } @@ -4185,6 +4190,11 @@ func (in *PreferredSchedulingTerm) DeepCopy() *PreferredSchedulingTerm { func (in *Probe) DeepCopyInto(out *Probe) { *out = *in in.Handler.DeepCopyInto(&out.Handler) + if in.TerminationGracePeriodSeconds != nil { + in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds + *out = new(int64) + **out = **in + } return } @@ -5340,6 +5350,16 @@ func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { *out = new(bool) **out = **in } + if in.LoadBalancerClass != nil { + in, out := &in.LoadBalancerClass, &out.LoadBalancerClass + *out = new(string) + **out = **in + } + if in.InternalTrafficPolicy != nil { + in, out := &in.InternalTrafficPolicy, &out.InternalTrafficPolicy + *out = new(ServiceInternalTrafficPolicyType) + **out = **in + } return } diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/doc.go b/constraint/vendor/k8s.io/api/discovery/v1/doc.go similarity index 92% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/doc.go rename to constraint/vendor/k8s.io/api/discovery/v1/doc.go index ffd6b0b54..96ae531ce 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/doc.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/doc.go @@ -19,4 +19,4 @@ limitations under the License. // +k8s:openapi-gen=true // +groupName=discovery.k8s.io -package v1alpha1 // import "k8s.io/api/discovery/v1alpha1" +package v1 // import "k8s.io/api/discovery/v1" diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/discovery/v1/generated.pb.go similarity index 69% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go rename to constraint/vendor/k8s.io/api/discovery/v1/generated.pb.go index 5cbee6168..38bdb02a5 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/generated.pb.go @@ -15,9 +15,9 @@ limitations under the License. */ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: k8s.io/kubernetes/vendor/k8s.io/api/discovery/v1alpha1/generated.proto +// source: k8s.io/kubernetes/vendor/k8s.io/api/discovery/v1/generated.proto -package v1alpha1 +package v1 import ( fmt "fmt" @@ -49,7 +49,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func (m *Endpoint) Reset() { *m = Endpoint{} } func (*Endpoint) ProtoMessage() {} func (*Endpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_772f83c5b34e07a5, []int{0} + return fileDescriptor_3a5d310fb1396ddf, []int{0} } func (m *Endpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,7 +77,7 @@ var xxx_messageInfo_Endpoint proto.InternalMessageInfo func (m *EndpointConditions) Reset() { *m = EndpointConditions{} } func (*EndpointConditions) ProtoMessage() {} func (*EndpointConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_772f83c5b34e07a5, []int{1} + return fileDescriptor_3a5d310fb1396ddf, []int{1} } func (m *EndpointConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -102,10 +102,38 @@ func (m *EndpointConditions) XXX_DiscardUnknown() { var xxx_messageInfo_EndpointConditions proto.InternalMessageInfo +func (m *EndpointHints) Reset() { *m = EndpointHints{} } +func (*EndpointHints) ProtoMessage() {} +func (*EndpointHints) Descriptor() ([]byte, []int) { + return fileDescriptor_3a5d310fb1396ddf, []int{2} +} +func (m *EndpointHints) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointHints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointHints) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointHints.Merge(m, src) +} +func (m *EndpointHints) XXX_Size() int { + return m.Size() +} +func (m *EndpointHints) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointHints.DiscardUnknown(m) +} + +var xxx_messageInfo_EndpointHints proto.InternalMessageInfo + func (m *EndpointPort) Reset() { *m = EndpointPort{} } func (*EndpointPort) ProtoMessage() {} func (*EndpointPort) Descriptor() ([]byte, []int) { - return fileDescriptor_772f83c5b34e07a5, []int{2} + return fileDescriptor_3a5d310fb1396ddf, []int{3} } func (m *EndpointPort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -133,7 +161,7 @@ var xxx_messageInfo_EndpointPort proto.InternalMessageInfo func (m *EndpointSlice) Reset() { *m = EndpointSlice{} } func (*EndpointSlice) ProtoMessage() {} func (*EndpointSlice) Descriptor() ([]byte, []int) { - return fileDescriptor_772f83c5b34e07a5, []int{3} + return fileDescriptor_3a5d310fb1396ddf, []int{4} } func (m *EndpointSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,7 +189,7 @@ var xxx_messageInfo_EndpointSlice proto.InternalMessageInfo func (m *EndpointSliceList) Reset() { *m = EndpointSliceList{} } func (*EndpointSliceList) ProtoMessage() {} func (*EndpointSliceList) Descriptor() ([]byte, []int) { - return fileDescriptor_772f83c5b34e07a5, []int{4} + return fileDescriptor_3a5d310fb1396ddf, []int{5} } func (m *EndpointSliceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -186,72 +214,107 @@ func (m *EndpointSliceList) XXX_DiscardUnknown() { var xxx_messageInfo_EndpointSliceList proto.InternalMessageInfo +func (m *ForZone) Reset() { *m = ForZone{} } +func (*ForZone) ProtoMessage() {} +func (*ForZone) Descriptor() ([]byte, []int) { + return fileDescriptor_3a5d310fb1396ddf, []int{6} +} +func (m *ForZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ForZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ForZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForZone.Merge(m, src) +} +func (m *ForZone) XXX_Size() int { + return m.Size() +} +func (m *ForZone) XXX_DiscardUnknown() { + xxx_messageInfo_ForZone.DiscardUnknown(m) +} + +var xxx_messageInfo_ForZone proto.InternalMessageInfo + func init() { - proto.RegisterType((*Endpoint)(nil), "k8s.io.api.discovery.v1alpha1.Endpoint") - proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.discovery.v1alpha1.Endpoint.TopologyEntry") - proto.RegisterType((*EndpointConditions)(nil), "k8s.io.api.discovery.v1alpha1.EndpointConditions") - proto.RegisterType((*EndpointPort)(nil), "k8s.io.api.discovery.v1alpha1.EndpointPort") - proto.RegisterType((*EndpointSlice)(nil), "k8s.io.api.discovery.v1alpha1.EndpointSlice") - proto.RegisterType((*EndpointSliceList)(nil), "k8s.io.api.discovery.v1alpha1.EndpointSliceList") + proto.RegisterType((*Endpoint)(nil), "k8s.io.api.discovery.v1.Endpoint") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.discovery.v1.Endpoint.DeprecatedTopologyEntry") + proto.RegisterType((*EndpointConditions)(nil), "k8s.io.api.discovery.v1.EndpointConditions") + proto.RegisterType((*EndpointHints)(nil), "k8s.io.api.discovery.v1.EndpointHints") + proto.RegisterType((*EndpointPort)(nil), "k8s.io.api.discovery.v1.EndpointPort") + proto.RegisterType((*EndpointSlice)(nil), "k8s.io.api.discovery.v1.EndpointSlice") + proto.RegisterType((*EndpointSliceList)(nil), "k8s.io.api.discovery.v1.EndpointSliceList") + proto.RegisterType((*ForZone)(nil), "k8s.io.api.discovery.v1.ForZone") } func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/discovery/v1alpha1/generated.proto", fileDescriptor_772f83c5b34e07a5) -} - -var fileDescriptor_772f83c5b34e07a5 = []byte{ - // 801 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4d, 0x8f, 0xe3, 0x44, - 0x10, 0x8d, 0x27, 0x13, 0xd6, 0xee, 0xec, 0x88, 0xdd, 0x16, 0x87, 0x68, 0x00, 0x7b, 0x14, 0x84, - 0x88, 0x34, 0xd0, 0x26, 0x23, 0x40, 0x2b, 0x38, 0x8d, 0x61, 0xf9, 0x90, 0x60, 0x19, 0x7a, 0xe7, - 0x80, 0x10, 0x07, 0x7a, 0xec, 0x5a, 0xc7, 0x24, 0x76, 0x5b, 0xdd, 0x9d, 0x48, 0xb9, 0xf1, 0x0f, - 0xe0, 0x47, 0x21, 0x34, 0xc7, 0x3d, 0xee, 0xc9, 0x62, 0xbc, 0x12, 0x3f, 0x62, 0x4f, 0xa8, 0xdb, - 0x9f, 0x43, 0x80, 0xcd, 0xcd, 0xfd, 0xaa, 0xde, 0xab, 0x7a, 0xe5, 0x2a, 0xf4, 0xf9, 0xf2, 0x81, - 0x24, 0x09, 0xf7, 0x97, 0xeb, 0x2b, 0x10, 0x19, 0x28, 0x90, 0xfe, 0x06, 0xb2, 0x88, 0x0b, 0xbf, - 0x0e, 0xb0, 0x3c, 0xf1, 0xa3, 0x44, 0x86, 0x7c, 0x03, 0x62, 0xeb, 0x6f, 0xe6, 0x6c, 0x95, 0x2f, - 0xd8, 0xdc, 0x8f, 0x21, 0x03, 0xc1, 0x14, 0x44, 0x24, 0x17, 0x5c, 0x71, 0xfc, 0x66, 0x95, 0x4e, - 0x58, 0x9e, 0x90, 0x36, 0x9d, 0x34, 0xe9, 0xc7, 0xef, 0xc5, 0x89, 0x5a, 0xac, 0xaf, 0x48, 0xc8, - 0x53, 0x3f, 0xe6, 0x31, 0xf7, 0x0d, 0xeb, 0x6a, 0xfd, 0xc4, 0xbc, 0xcc, 0xc3, 0x7c, 0x55, 0x6a, - 0xc7, 0xd3, 0x5e, 0xf1, 0x90, 0x0b, 0xf0, 0x37, 0x3b, 0x15, 0x8f, 0x3f, 0xe8, 0x72, 0x52, 0x16, - 0x2e, 0x92, 0x4c, 0xf7, 0x97, 0x2f, 0x63, 0x0d, 0x48, 0x3f, 0x05, 0xc5, 0xfe, 0x8d, 0xe5, 0xff, - 0x17, 0x4b, 0xac, 0x33, 0x95, 0xa4, 0xb0, 0x43, 0xf8, 0xe8, 0x65, 0x04, 0x19, 0x2e, 0x20, 0x65, - 0xff, 0xe4, 0x4d, 0xff, 0x1a, 0x22, 0xfb, 0x61, 0x16, 0xe5, 0x3c, 0xc9, 0x14, 0x3e, 0x45, 0x0e, - 0x8b, 0x22, 0x01, 0x52, 0x82, 0x9c, 0x58, 0x27, 0xc3, 0x99, 0x13, 0x1c, 0x95, 0x85, 0xe7, 0x9c, - 0x37, 0x20, 0xed, 0xe2, 0x18, 0x10, 0x0a, 0x79, 0x16, 0x25, 0x2a, 0xe1, 0x99, 0x9c, 0x1c, 0x9c, - 0x58, 0xb3, 0xf1, 0xd9, 0x9c, 0xfc, 0xef, 0x7c, 0x49, 0x53, 0xe9, 0xd3, 0x96, 0x18, 0xe0, 0xeb, - 0xc2, 0x1b, 0x94, 0x85, 0x87, 0x3a, 0x8c, 0xf6, 0x84, 0xf1, 0x0c, 0xd9, 0x0b, 0x2e, 0x55, 0xc6, - 0x52, 0x98, 0x0c, 0x4f, 0xac, 0x99, 0x13, 0xdc, 0x2d, 0x0b, 0xcf, 0xfe, 0xb2, 0xc6, 0x68, 0x1b, - 0xc5, 0x17, 0xc8, 0x51, 0x4c, 0xc4, 0xa0, 0x28, 0x3c, 0x99, 0x1c, 0x9a, 0x7e, 0xde, 0xea, 0xf7, - 0xa3, 0xff, 0x10, 0xd9, 0xcc, 0xc9, 0xb7, 0x57, 0x3f, 0x43, 0xa8, 0x93, 0x40, 0x40, 0x16, 0x42, - 0x65, 0xf1, 0xb2, 0x61, 0xd2, 0x4e, 0x04, 0x87, 0xc8, 0x56, 0x3c, 0xe7, 0x2b, 0x1e, 0x6f, 0x27, - 0xa3, 0x93, 0xe1, 0x6c, 0x7c, 0xf6, 0xe1, 0x9e, 0x06, 0xc9, 0x65, 0xcd, 0x7b, 0x98, 0x29, 0xb1, - 0x0d, 0xee, 0xd5, 0x26, 0xed, 0x06, 0xa6, 0xad, 0xb0, 0x36, 0x98, 0xf1, 0x08, 0x1e, 0x69, 0x83, - 0xaf, 0x74, 0x06, 0x1f, 0xd5, 0x18, 0x6d, 0xa3, 0xc7, 0x9f, 0xa0, 0xa3, 0x5b, 0xb2, 0xf8, 0x1e, - 0x1a, 0x2e, 0x61, 0x3b, 0xb1, 0x34, 0x8b, 0xea, 0x4f, 0xfc, 0x1a, 0x1a, 0x6d, 0xd8, 0x6a, 0x0d, - 0xe6, 0x7f, 0x38, 0xb4, 0x7a, 0x7c, 0x7c, 0xf0, 0xc0, 0x9a, 0xfe, 0x6a, 0x21, 0xbc, 0x3b, 0x7e, - 0xec, 0xa1, 0x91, 0x00, 0x16, 0x55, 0x22, 0x76, 0xe0, 0x94, 0x85, 0x37, 0xa2, 0x1a, 0xa0, 0x15, - 0x8e, 0xdf, 0x46, 0x77, 0x24, 0x88, 0x4d, 0x92, 0xc5, 0x46, 0xd3, 0x0e, 0xc6, 0x65, 0xe1, 0xdd, - 0x79, 0x5c, 0x41, 0xb4, 0x89, 0xe1, 0x39, 0x1a, 0x2b, 0x10, 0x69, 0x92, 0x31, 0xa5, 0x53, 0x87, - 0x26, 0xf5, 0xd5, 0xb2, 0xf0, 0xc6, 0x97, 0x1d, 0x4c, 0xfb, 0x39, 0xd3, 0x3f, 0x2c, 0x74, 0xb7, - 0xe9, 0xe8, 0x82, 0x0b, 0x85, 0xdf, 0x40, 0x87, 0xe6, 0x37, 0x1b, 0x3f, 0x81, 0x5d, 0x16, 0xde, - 0xa1, 0x99, 0x80, 0x41, 0xf1, 0x17, 0xc8, 0x36, 0x2b, 0x1b, 0xf2, 0x55, 0xe5, 0x2e, 0x38, 0xd5, - 0x73, 0xba, 0xa8, 0xb1, 0x17, 0x85, 0xf7, 0xfa, 0xee, 0x39, 0x92, 0x26, 0x4c, 0x5b, 0xb2, 0x2e, - 0x93, 0x73, 0xa1, 0x4c, 0x8f, 0xa3, 0xaa, 0x8c, 0x2e, 0x4f, 0x0d, 0xaa, 0x8d, 0xb0, 0x3c, 0x6f, - 0x68, 0x66, 0x8f, 0x9c, 0xca, 0xc8, 0x79, 0x07, 0xd3, 0x7e, 0xce, 0xf4, 0xf9, 0x01, 0x3a, 0x6a, - 0x8c, 0x3c, 0x5e, 0x25, 0x21, 0xe0, 0x9f, 0x90, 0xad, 0x2f, 0x3b, 0x62, 0x8a, 0x19, 0x37, 0xe3, - 0xb3, 0xf7, 0x7b, 0x8b, 0xd3, 0x1e, 0x28, 0xc9, 0x97, 0xb1, 0x06, 0x24, 0xd1, 0xd9, 0xdd, 0x6e, - 0x7e, 0x03, 0x8a, 0x75, 0x87, 0xd1, 0x61, 0xb4, 0x55, 0xc5, 0x9f, 0xa1, 0x71, 0x7d, 0x8a, 0x97, - 0xdb, 0x1c, 0xea, 0x36, 0xa7, 0x35, 0x65, 0x7c, 0xde, 0x85, 0x5e, 0xdc, 0x7e, 0xd2, 0x3e, 0x0d, - 0x7f, 0x8f, 0x1c, 0xa8, 0x1b, 0xd7, 0x27, 0xac, 0x37, 0xfc, 0x9d, 0x3d, 0x37, 0x3c, 0xb8, 0x5f, - 0x17, 0x73, 0x1a, 0x44, 0xd2, 0x4e, 0x0c, 0x5f, 0xa0, 0x91, 0x1e, 0xa7, 0x9c, 0x0c, 0x8d, 0xea, - 0xe9, 0x9e, 0xaa, 0xfa, 0x47, 0x04, 0x47, 0xb5, 0xf2, 0x48, 0xbf, 0x24, 0xad, 0x84, 0xa6, 0xbf, - 0x5b, 0xe8, 0xfe, 0xad, 0x29, 0x7f, 0x9d, 0x48, 0x85, 0x7f, 0xdc, 0x99, 0x34, 0xd9, 0x6f, 0xd2, - 0x9a, 0x6d, 0xe6, 0xdc, 0xde, 0x66, 0x83, 0xf4, 0xa6, 0xfc, 0x1d, 0x1a, 0x25, 0x0a, 0xd2, 0x66, - 0x36, 0xef, 0xee, 0xe9, 0xc2, 0xb4, 0xd7, 0xd9, 0xf8, 0x4a, 0x4b, 0xd0, 0x4a, 0x29, 0x20, 0xd7, - 0x37, 0xee, 0xe0, 0xe9, 0x8d, 0x3b, 0x78, 0x76, 0xe3, 0x0e, 0x7e, 0x29, 0x5d, 0xeb, 0xba, 0x74, - 0xad, 0xa7, 0xa5, 0x6b, 0x3d, 0x2b, 0x5d, 0xeb, 0xcf, 0xd2, 0xb5, 0x7e, 0x7b, 0xee, 0x0e, 0x7e, - 0xb0, 0x1b, 0xcd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x03, 0x95, 0x92, 0xa5, 0xfa, 0x06, 0x00, - 0x00, + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/discovery/v1/generated.proto", fileDescriptor_3a5d310fb1396ddf) +} + +var fileDescriptor_3a5d310fb1396ddf = []byte{ + // 889 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x4d, 0x6f, 0xe3, 0x44, + 0x18, 0x8e, 0x9b, 0x86, 0xda, 0x93, 0x56, 0xec, 0x8e, 0x90, 0x36, 0x0a, 0x28, 0x0e, 0x46, 0x8b, + 0x22, 0x55, 0xd8, 0xb4, 0x42, 0x68, 0xe1, 0x44, 0xcd, 0x96, 0x5d, 0xbe, 0x4a, 0x35, 0xdb, 0xd3, + 0x0a, 0x69, 0x71, 0xed, 0xb7, 0x8e, 0x49, 0x33, 0x63, 0xcd, 0x4c, 0x22, 0x85, 0x13, 0x17, 0xce, + 0xf0, 0x8b, 0x38, 0xa2, 0x1e, 0xf7, 0xc6, 0x9e, 0x2c, 0x6a, 0xfe, 0x02, 0xa7, 0x3d, 0xa1, 0x19, + 0x7f, 0x96, 0xb4, 0x0a, 0xb7, 0x99, 0x67, 0x9e, 0xe7, 0xfd, 0x78, 0x66, 0xe6, 0x45, 0x9f, 0xcd, + 0x1e, 0x09, 0x37, 0x61, 0xde, 0x6c, 0x71, 0x0e, 0x9c, 0x82, 0x04, 0xe1, 0x2d, 0x81, 0x46, 0x8c, + 0x7b, 0xe5, 0x41, 0x90, 0x26, 0x5e, 0x94, 0x88, 0x90, 0x2d, 0x81, 0xaf, 0xbc, 0xe5, 0x81, 0x17, + 0x03, 0x05, 0x1e, 0x48, 0x88, 0xdc, 0x94, 0x33, 0xc9, 0xf0, 0x83, 0x82, 0xe8, 0x06, 0x69, 0xe2, + 0xd6, 0x44, 0x77, 0x79, 0x30, 0xfc, 0x20, 0x4e, 0xe4, 0x74, 0x71, 0xee, 0x86, 0x6c, 0xee, 0xc5, + 0x2c, 0x66, 0x9e, 0xe6, 0x9f, 0x2f, 0x2e, 0xf4, 0x4e, 0x6f, 0xf4, 0xaa, 0x88, 0x33, 0x74, 0x5a, + 0x09, 0x43, 0xc6, 0xe1, 0x96, 0x5c, 0xc3, 0x8f, 0x1a, 0xce, 0x3c, 0x08, 0xa7, 0x09, 0x55, 0x35, + 0xa5, 0xb3, 0x58, 0x01, 0xc2, 0x9b, 0x83, 0x0c, 0x6e, 0x53, 0x79, 0x77, 0xa9, 0xf8, 0x82, 0xca, + 0x64, 0x0e, 0x6b, 0x82, 0x8f, 0x37, 0x09, 0x44, 0x38, 0x85, 0x79, 0xf0, 0x5f, 0x9d, 0xf3, 0xcf, + 0x36, 0x32, 0x8f, 0x69, 0x94, 0xb2, 0x84, 0x4a, 0xbc, 0x8f, 0xac, 0x20, 0x8a, 0x38, 0x08, 0x01, + 0x62, 0x60, 0x8c, 0xbb, 0x13, 0xcb, 0xdf, 0xcb, 0x33, 0xdb, 0x3a, 0xaa, 0x40, 0xd2, 0x9c, 0xe3, + 0x17, 0x08, 0x85, 0x8c, 0x46, 0x89, 0x4c, 0x18, 0x15, 0x83, 0xad, 0xb1, 0x31, 0xe9, 0x1f, 0xee, + 0xbb, 0x77, 0x38, 0xeb, 0x56, 0x39, 0x3e, 0xaf, 0x25, 0x3e, 0xbe, 0xca, 0xec, 0x4e, 0x9e, 0xd9, + 0xa8, 0xc1, 0x48, 0x2b, 0x24, 0x9e, 0x20, 0x73, 0xca, 0x84, 0xa4, 0xc1, 0x1c, 0x06, 0xdd, 0xb1, + 0x31, 0xb1, 0xfc, 0xdd, 0x3c, 0xb3, 0xcd, 0xa7, 0x25, 0x46, 0xea, 0x53, 0x7c, 0x8a, 0x2c, 0x19, + 0xf0, 0x18, 0x24, 0x81, 0x8b, 0xc1, 0xb6, 0xae, 0xe4, 0xbd, 0x76, 0x25, 0xea, 0x6e, 0x54, 0x11, + 0xdf, 0x9d, 0xff, 0x08, 0xa1, 0x22, 0x01, 0x07, 0x1a, 0x42, 0xd1, 0xdc, 0x59, 0xa5, 0x24, 0x4d, + 0x10, 0xfc, 0x8b, 0x81, 0x70, 0x04, 0x29, 0x87, 0x50, 0x79, 0x75, 0xc6, 0x52, 0x76, 0xc9, 0xe2, + 0xd5, 0xa0, 0x37, 0xee, 0x4e, 0xfa, 0x87, 0x9f, 0x6c, 0xec, 0xd2, 0x7d, 0xbc, 0xa6, 0x3d, 0xa6, + 0x92, 0xaf, 0xfc, 0x61, 0xd9, 0x33, 0x5e, 0x27, 0x90, 0x5b, 0x12, 0x2a, 0x0f, 0x28, 0x8b, 0xe0, + 0x44, 0x79, 0xf0, 0x46, 0xe3, 0xc1, 0x49, 0x89, 0x91, 0xfa, 0x14, 0xbf, 0x83, 0xb6, 0x7f, 0x62, + 0x14, 0x06, 0x3b, 0x9a, 0x65, 0xe6, 0x99, 0xbd, 0xfd, 0x9c, 0x51, 0x20, 0x1a, 0xc5, 0x4f, 0x50, + 0x6f, 0x9a, 0x50, 0x29, 0x06, 0xa6, 0x76, 0xe7, 0xfd, 0x8d, 0x1d, 0x3c, 0x55, 0x6c, 0xdf, 0xca, + 0x33, 0xbb, 0xa7, 0x97, 0xa4, 0xd0, 0x0f, 0x8f, 0xd1, 0x83, 0x3b, 0x7a, 0xc3, 0xf7, 0x50, 0x77, + 0x06, 0xab, 0x81, 0xa1, 0x0a, 0x20, 0x6a, 0x89, 0xdf, 0x42, 0xbd, 0x65, 0x70, 0xb9, 0x00, 0xfd, + 0x3a, 0x2c, 0x52, 0x6c, 0x3e, 0xdd, 0x7a, 0x64, 0x38, 0xbf, 0x1a, 0x08, 0xaf, 0x3f, 0x09, 0x6c, + 0xa3, 0x1e, 0x87, 0x20, 0x2a, 0x82, 0x98, 0x45, 0x7a, 0xa2, 0x00, 0x52, 0xe0, 0xf8, 0x21, 0xda, + 0x11, 0xc0, 0x97, 0x09, 0x8d, 0x75, 0x4c, 0xd3, 0xef, 0xe7, 0x99, 0xbd, 0xf3, 0xac, 0x80, 0x48, + 0x75, 0x86, 0x0f, 0x50, 0x5f, 0x02, 0x9f, 0x27, 0x34, 0x90, 0x8a, 0xda, 0xd5, 0xd4, 0x37, 0xf3, + 0xcc, 0xee, 0x9f, 0x35, 0x30, 0x69, 0x73, 0x9c, 0x17, 0x68, 0xef, 0x46, 0xef, 0xf8, 0x04, 0x99, + 0x17, 0x8c, 0x2b, 0x0f, 0x8b, 0xbf, 0xd0, 0x3f, 0x1c, 0xdf, 0xe9, 0xda, 0x17, 0x05, 0xd1, 0xbf, + 0x57, 0x5e, 0xaf, 0x59, 0x02, 0x82, 0xd4, 0x31, 0x9c, 0x3f, 0x0c, 0xb4, 0x5b, 0x65, 0x38, 0x65, + 0x5c, 0xaa, 0x1b, 0xd3, 0x6f, 0xdb, 0x68, 0x6e, 0x4c, 0xdf, 0xa9, 0x46, 0xf1, 0x13, 0x64, 0xea, + 0x1f, 0x1a, 0xb2, 0xcb, 0xc2, 0x3e, 0x7f, 0x5f, 0x05, 0x3e, 0x2d, 0xb1, 0xd7, 0x99, 0xfd, 0xf6, + 0xfa, 0xf4, 0x71, 0xab, 0x63, 0x52, 0x8b, 0x55, 0x9a, 0x94, 0x71, 0xa9, 0x4d, 0xe8, 0x15, 0x69, + 0x54, 0x7a, 0xa2, 0x51, 0xe5, 0x54, 0x90, 0xa6, 0x95, 0x4c, 0x7f, 0x1e, 0xab, 0x70, 0xea, 0xa8, + 0x81, 0x49, 0x9b, 0xe3, 0xfc, 0xb9, 0xd5, 0x58, 0xf5, 0xec, 0x32, 0x09, 0x01, 0xff, 0x80, 0x4c, + 0x35, 0xc8, 0xa2, 0x40, 0x06, 0xba, 0x9b, 0xfe, 0xe1, 0x87, 0x2d, 0xab, 0xea, 0x79, 0xe4, 0xa6, + 0xb3, 0x58, 0x01, 0xc2, 0x55, 0xec, 0xe6, 0x43, 0x7e, 0x0b, 0x32, 0x68, 0xa6, 0x41, 0x83, 0x91, + 0x3a, 0x2a, 0x7e, 0x8c, 0xfa, 0xe5, 0xe4, 0x39, 0x5b, 0xa5, 0x50, 0x96, 0xe9, 0x94, 0x92, 0xfe, + 0x51, 0x73, 0xf4, 0xfa, 0xe6, 0x96, 0xb4, 0x65, 0x98, 0x20, 0x0b, 0xca, 0xc2, 0xd5, 0xc4, 0x52, + 0x77, 0xfa, 0xee, 0xc6, 0x9f, 0xe0, 0xdf, 0x2f, 0xd3, 0x58, 0x15, 0x22, 0x48, 0x13, 0x06, 0x7f, + 0x85, 0x7a, 0xca, 0x48, 0x31, 0xe8, 0xea, 0x78, 0x0f, 0x37, 0xc6, 0x53, 0xe6, 0xfb, 0x7b, 0x65, + 0xcc, 0x9e, 0xda, 0x09, 0x52, 0x84, 0x70, 0x7e, 0x37, 0xd0, 0xfd, 0x1b, 0xce, 0x7e, 0x93, 0x08, + 0x89, 0xbf, 0x5f, 0x73, 0xd7, 0xfd, 0x7f, 0xee, 0x2a, 0xb5, 0xf6, 0xb6, 0x7e, 0x96, 0x15, 0xd2, + 0x72, 0xf6, 0x6b, 0xd4, 0x4b, 0x24, 0xcc, 0x2b, 0x3f, 0x36, 0x4f, 0x06, 0x5d, 0x58, 0xd3, 0xc0, + 0x97, 0x4a, 0x4c, 0x8a, 0x18, 0xce, 0x3e, 0xda, 0x29, 0x5f, 0x3e, 0x1e, 0xdf, 0x78, 0xdd, 0xbb, + 0x25, 0xbd, 0xf5, 0xc2, 0xfd, 0xc9, 0xd5, 0xf5, 0xa8, 0xf3, 0xf2, 0x7a, 0xd4, 0x79, 0x75, 0x3d, + 0xea, 0xfc, 0x9c, 0x8f, 0x8c, 0xab, 0x7c, 0x64, 0xbc, 0xcc, 0x47, 0xc6, 0xab, 0x7c, 0x64, 0xfc, + 0x95, 0x8f, 0x8c, 0xdf, 0xfe, 0x1e, 0x75, 0x9e, 0x6f, 0x2d, 0x0f, 0xfe, 0x0d, 0x00, 0x00, 0xff, + 0xff, 0x66, 0x0f, 0x26, 0x7b, 0xf2, 0x07, 0x00, 0x00, } func (m *Endpoint) Marshal() (dAtA []byte, err error) { @@ -274,6 +337,25 @@ func (m *Endpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Hints != nil { + { + size, err := m.Hints.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.Zone != nil { + i -= len(*m.Zone) + copy(dAtA[i:], *m.Zone) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Zone))) + i-- + dAtA[i] = 0x3a + } if m.NodeName != nil { i -= len(*m.NodeName) copy(dAtA[i:], *m.NodeName) @@ -281,23 +363,23 @@ func (m *Endpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - if len(m.Topology) > 0 { - keysForTopology := make([]string, 0, len(m.Topology)) - for k := range m.Topology { - keysForTopology = append(keysForTopology, string(k)) + if len(m.DeprecatedTopology) > 0 { + keysForDeprecatedTopology := make([]string, 0, len(m.DeprecatedTopology)) + for k := range m.DeprecatedTopology { + keysForDeprecatedTopology = append(keysForDeprecatedTopology, string(k)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForTopology) - for iNdEx := len(keysForTopology) - 1; iNdEx >= 0; iNdEx-- { - v := m.Topology[string(keysForTopology[iNdEx])] + github_com_gogo_protobuf_sortkeys.Strings(keysForDeprecatedTopology) + for iNdEx := len(keysForDeprecatedTopology) - 1; iNdEx >= 0; iNdEx-- { + v := m.DeprecatedTopology[string(keysForDeprecatedTopology[iNdEx])] baseI := i i -= len(v) copy(dAtA[i:], v) i = encodeVarintGenerated(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 - i -= len(keysForTopology[iNdEx]) - copy(dAtA[i:], keysForTopology[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(keysForTopology[iNdEx]))) + i -= len(keysForDeprecatedTopology[iNdEx]) + copy(dAtA[i:], keysForDeprecatedTopology[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForDeprecatedTopology[iNdEx]))) i-- dAtA[i] = 0xa i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) @@ -399,6 +481,43 @@ func (m *EndpointConditions) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *EndpointHints) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EndpointHints) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointHints) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ForZones) > 0 { + for iNdEx := len(m.ForZones) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ForZones[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *EndpointPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -561,6 +680,34 @@ func (m *EndpointSliceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ForZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ForZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ForZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { offset -= sovGenerated(v) base := offset @@ -594,8 +741,8 @@ func (m *Endpoint) Size() (n int) { l = m.TargetRef.Size() n += 1 + l + sovGenerated(uint64(l)) } - if len(m.Topology) > 0 { - for k, v := range m.Topology { + if len(m.DeprecatedTopology) > 0 { + for k, v := range m.DeprecatedTopology { _ = k _ = v mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) @@ -606,6 +753,14 @@ func (m *Endpoint) Size() (n int) { l = len(*m.NodeName) n += 1 + l + sovGenerated(uint64(l)) } + if m.Zone != nil { + l = len(*m.Zone) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Hints != nil { + l = m.Hints.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -627,6 +782,21 @@ func (m *EndpointConditions) Size() (n int) { return n } +func (m *EndpointHints) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ForZones) > 0 { + for _, e := range m.ForZones { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *EndpointPort) Size() (n int) { if m == nil { return 0 @@ -693,6 +863,17 @@ func (m *EndpointSliceList) Size() (n int) { return n } +func (m *ForZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func sovGenerated(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -703,23 +884,25 @@ func (this *Endpoint) String() string { if this == nil { return "nil" } - keysForTopology := make([]string, 0, len(this.Topology)) - for k := range this.Topology { - keysForTopology = append(keysForTopology, k) + keysForDeprecatedTopology := make([]string, 0, len(this.DeprecatedTopology)) + for k := range this.DeprecatedTopology { + keysForDeprecatedTopology = append(keysForDeprecatedTopology, k) } - github_com_gogo_protobuf_sortkeys.Strings(keysForTopology) - mapStringForTopology := "map[string]string{" - for _, k := range keysForTopology { - mapStringForTopology += fmt.Sprintf("%v: %v,", k, this.Topology[k]) + github_com_gogo_protobuf_sortkeys.Strings(keysForDeprecatedTopology) + mapStringForDeprecatedTopology := "map[string]string{" + for _, k := range keysForDeprecatedTopology { + mapStringForDeprecatedTopology += fmt.Sprintf("%v: %v,", k, this.DeprecatedTopology[k]) } - mapStringForTopology += "}" + mapStringForDeprecatedTopology += "}" s := strings.Join([]string{`&Endpoint{`, `Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`, `Conditions:` + strings.Replace(strings.Replace(this.Conditions.String(), "EndpointConditions", "EndpointConditions", 1), `&`, ``, 1) + `,`, `Hostname:` + valueToStringGenerated(this.Hostname) + `,`, `TargetRef:` + strings.Replace(fmt.Sprintf("%v", this.TargetRef), "ObjectReference", "v1.ObjectReference", 1) + `,`, - `Topology:` + mapStringForTopology + `,`, + `DeprecatedTopology:` + mapStringForDeprecatedTopology + `,`, `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `Zone:` + valueToStringGenerated(this.Zone) + `,`, + `Hints:` + strings.Replace(this.Hints.String(), "EndpointHints", "EndpointHints", 1) + `,`, `}`, }, "") return s @@ -736,6 +919,21 @@ func (this *EndpointConditions) String() string { }, "") return s } +func (this *EndpointHints) String() string { + if this == nil { + return "nil" + } + repeatedStringForForZones := "[]ForZone{" + for _, f := range this.ForZones { + repeatedStringForForZones += strings.Replace(strings.Replace(f.String(), "ForZone", "ForZone", 1), `&`, ``, 1) + "," + } + repeatedStringForForZones += "}" + s := strings.Join([]string{`&EndpointHints{`, + `ForZones:` + repeatedStringForForZones + `,`, + `}`, + }, "") + return s +} func (this *EndpointPort) String() string { if this == nil { return "nil" @@ -788,6 +986,16 @@ func (this *EndpointSliceList) String() string { }, "") return s } +func (this *ForZone) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ForZone{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func valueToStringGenerated(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -961,7 +1169,7 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Topology", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedTopology", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -988,8 +1196,8 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Topology == nil { - m.Topology = make(map[string]string) + if m.DeprecatedTopology == nil { + m.DeprecatedTopology = make(map[string]string) } var mapkey string var mapvalue string @@ -1075,7 +1283,7 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1084,7 +1292,7 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.Topology[mapkey] = mapvalue + m.DeprecatedTopology[mapkey] = mapvalue iNdEx = postIndex case 6: if wireType != 2 { @@ -1119,16 +1327,82 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { s := string(dAtA[iNdEx:postIndex]) m.NodeName = &s iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Zone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Zone = &s + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Hints == nil { + m.Hints = &EndpointHints{} + } + if err := m.Hints.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1241,10 +1515,91 @@ func (m *EndpointConditions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointHints) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointHints: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointHints: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForZones", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForZones = append(m.ForZones, ForZone{}) + if err := m.ForZones[len(m.ForZones)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1413,10 +1768,7 @@ func (m *EndpointPort) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1599,10 +1951,7 @@ func (m *EndpointSlice) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1719,10 +2068,89 @@ func (m *EndpointSliceList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ForZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ForZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ForZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/generated.proto b/constraint/vendor/k8s.io/api/discovery/v1/generated.proto similarity index 82% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/generated.proto rename to constraint/vendor/k8s.io/api/discovery/v1/generated.proto index 4b66a6c57..5844965d0 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/generated.proto +++ b/constraint/vendor/k8s.io/api/discovery/v1/generated.proto @@ -19,7 +19,7 @@ limitations under the License. syntax = "proto2"; -package k8s.io.api.discovery.v1alpha1; +package k8s.io.api.discovery.v1; import "k8s.io/api/core/v1/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; @@ -27,7 +27,7 @@ import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". -option go_package = "v1alpha1"; +option go_package = "v1"; // Endpoint represents a single logical "backend" implementing a service. message Endpoint { @@ -45,8 +45,8 @@ message Endpoint { // hostname of this endpoint. This field may be used by consumers of // endpoints to distinguish endpoints from each other (e.g. in DNS names). // Multiple endpoints which use the same hostname should be considered - // fungible (e.g. multiple A values in DNS). Must be lowercase and pass - // DNS label (RFC 1123) validation. + // fungible (e.g. multiple A values in DNS). Must be lowercase and pass DNS + // Label (RFC 1123) validation. // +optional optional string hostname = 3; @@ -55,27 +55,29 @@ message Endpoint { // +optional optional k8s.io.api.core.v1.ObjectReference targetRef = 4; - // topology contains arbitrary topology information associated with the - // endpoint. These key/value pairs must conform with the label format. - // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels - // Topology may include a maximum of 16 key/value pairs. This includes, but - // is not limited to the following well known keys: - // * kubernetes.io/hostname: the value indicates the hostname of the node - // where the endpoint is located. This should match the corresponding - // node label. - // * topology.kubernetes.io/zone: the value indicates the zone where the - // endpoint is located. This should match the corresponding node label. - // * topology.kubernetes.io/region: the value indicates the region where the - // endpoint is located. This should match the corresponding node label. - // This field is deprecated and will be removed in future api versions. + // deprecatedTopology contains topology information part of the v1beta1 + // API. This field is deprecated, and will be removed when the v1beta1 + // API is removed (no sooner than kubernetes v1.24). While this field can + // hold values, it is not writable through the v1 API, and any attempts to + // write to it will be silently ignored. Topology information can be found + // in the zone and nodeName fields instead. // +optional - map topology = 5; + map deprecatedTopology = 5; // nodeName represents the name of the Node hosting this endpoint. This can // be used to determine endpoints local to a Node. This field can be enabled // with the EndpointSliceNodeName feature gate. // +optional optional string nodeName = 6; + + // zone is the name of the Zone this endpoint exists in. + // +optional + optional string zone = 7; + + // hints contains information associated with how an endpoint should be + // consumed. + // +optional + optional EndpointHints hints = 8; } // EndpointConditions represents the current condition of an endpoint. @@ -104,6 +106,14 @@ message EndpointConditions { optional bool terminating = 3; } +// EndpointHints provides hints describing how an endpoint should be consumed. +message EndpointHints { + // forZones indicates the zone(s) this endpoint should be consumed by to + // enable topology aware routing. + // +listType=atomic + repeated ForZone forZones = 1; +} + // EndpointPort represents a Port used by an EndpointSlice message EndpointPort { // The name of this port. All ports in an EndpointSlice must have a unique @@ -130,8 +140,9 @@ message EndpointPort { // This field follows standard Kubernetes label syntax. // Un-prefixed names are reserved for IANA standard service names (as per // RFC-6335 and http://www.iana.org/assignments/service-names). - // Non-standard protocols should use prefixed names. - // Default is empty string. + // Non-standard protocols should use prefixed names such as + // mycompany.com/my-custom-protocol. + // +optional optional string appProtocol = 4; } @@ -177,3 +188,9 @@ message EndpointSliceList { repeated EndpointSlice items = 2; } +// ForZone provides information about which zones should consume this endpoint. +message ForZone { + // name represents the name of the zone. + optional string name = 1; +} + diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/register.go b/constraint/vendor/k8s.io/api/discovery/v1/register.go similarity index 98% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/register.go rename to constraint/vendor/k8s.io/api/discovery/v1/register.go index 55b73f992..3eb8f38a3 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/register.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/register.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -26,7 +26,7 @@ import ( const GroupName = "discovery.k8s.io" // SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} // Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) schema.GroupKind { diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/types.go b/constraint/vendor/k8s.io/api/discovery/v1/types.go similarity index 82% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/types.go rename to constraint/vendor/k8s.io/api/discovery/v1/types.go index 34b706ea8..fa990efdb 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/types.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/types.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1 import ( v1 "k8s.io/api/core/v1" @@ -58,12 +58,6 @@ type EndpointSlice struct { type AddressType string const ( - // AddressTypeIP represents an IP Address. - // This address type has been deprecated and has been replaced by the IPv4 - // and IPv6 adddress types. New resources with this address type will be - // considered invalid. This will be fully removed in 1.18. - // +deprecated - AddressTypeIP = AddressType("IP") // AddressTypeIPv4 represents an IPv4 Address. AddressTypeIPv4 = AddressType(v1.IPv4Protocol) // AddressTypeIPv6 represents an IPv6 Address. @@ -86,34 +80,36 @@ type Endpoint struct { // hostname of this endpoint. This field may be used by consumers of // endpoints to distinguish endpoints from each other (e.g. in DNS names). // Multiple endpoints which use the same hostname should be considered - // fungible (e.g. multiple A values in DNS). Must be lowercase and pass - // DNS label (RFC 1123) validation. + // fungible (e.g. multiple A values in DNS). Must be lowercase and pass DNS + // Label (RFC 1123) validation. // +optional Hostname *string `json:"hostname,omitempty" protobuf:"bytes,3,opt,name=hostname"` // targetRef is a reference to a Kubernetes object that represents this // endpoint. // +optional TargetRef *v1.ObjectReference `json:"targetRef,omitempty" protobuf:"bytes,4,opt,name=targetRef"` - // topology contains arbitrary topology information associated with the - // endpoint. These key/value pairs must conform with the label format. - // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels - // Topology may include a maximum of 16 key/value pairs. This includes, but - // is not limited to the following well known keys: - // * kubernetes.io/hostname: the value indicates the hostname of the node - // where the endpoint is located. This should match the corresponding - // node label. - // * topology.kubernetes.io/zone: the value indicates the zone where the - // endpoint is located. This should match the corresponding node label. - // * topology.kubernetes.io/region: the value indicates the region where the - // endpoint is located. This should match the corresponding node label. - // This field is deprecated and will be removed in future api versions. + + // deprecatedTopology contains topology information part of the v1beta1 + // API. This field is deprecated, and will be removed when the v1beta1 + // API is removed (no sooner than kubernetes v1.24). While this field can + // hold values, it is not writable through the v1 API, and any attempts to + // write to it will be silently ignored. Topology information can be found + // in the zone and nodeName fields instead. // +optional - Topology map[string]string `json:"topology,omitempty" protobuf:"bytes,5,opt,name=topology"` + DeprecatedTopology map[string]string `json:"deprecatedTopology,omitempty" protobuf:"bytes,5,opt,name=deprecatedTopology"` + // nodeName represents the name of the Node hosting this endpoint. This can // be used to determine endpoints local to a Node. This field can be enabled // with the EndpointSliceNodeName feature gate. // +optional NodeName *string `json:"nodeName,omitempty" protobuf:"bytes,6,opt,name=nodeName"` + // zone is the name of the Zone this endpoint exists in. + // +optional + Zone *string `json:"zone,omitempty" protobuf:"bytes,7,opt,name=zone"` + // hints contains information associated with how an endpoint should be + // consumed. + // +optional + Hints *EndpointHints `json:"hints,omitempty" protobuf:"bytes,8,opt,name=hints"` } // EndpointConditions represents the current condition of an endpoint. @@ -142,6 +138,20 @@ type EndpointConditions struct { Terminating *bool `json:"terminating,omitempty" protobuf:"bytes,3,name=terminating"` } +// EndpointHints provides hints describing how an endpoint should be consumed. +type EndpointHints struct { + // forZones indicates the zone(s) this endpoint should be consumed by to + // enable topology aware routing. + // +listType=atomic + ForZones []ForZone `json:"forZones,omitempty" protobuf:"bytes,1,name=forZones"` +} + +// ForZone provides information about which zones should consume this endpoint. +type ForZone struct { + // name represents the name of the zone. + Name string `json:"name" protobuf:"bytes,1,name=name"` +} + // EndpointPort represents a Port used by an EndpointSlice type EndpointPort struct { // The name of this port. All ports in an EndpointSlice must have a unique @@ -165,8 +175,9 @@ type EndpointPort struct { // This field follows standard Kubernetes label syntax. // Un-prefixed names are reserved for IANA standard service names (as per // RFC-6335 and http://www.iana.org/assignments/service-names). - // Non-standard protocols should use prefixed names. - // Default is empty string. + // Non-standard protocols should use prefixed names such as + // mycompany.com/my-custom-protocol. + // +optional AppProtocol *string `json:"appProtocol,omitempty" protobuf:"bytes,4,name=appProtocol"` } diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/discovery/v1/types_swagger_doc_generated.go similarity index 67% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go rename to constraint/vendor/k8s.io/api/discovery/v1/types_swagger_doc_generated.go index f6c983689..b424a1cf0 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/types_swagger_doc_generated.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1 // This file contains a collection of methods that can be used from go-restful to // generate Swagger API documentation for its models. Please read this PR for more @@ -28,13 +28,15 @@ package v1alpha1 // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_Endpoint = map[string]string{ - "": "Endpoint represents a single logical \"backend\" implementing a service.", - "addresses": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.", - "conditions": "conditions contains information about the current status of the endpoint.", - "hostname": "hostname of this endpoint. This field may be used by consumers of endpoints to distinguish endpoints from each other (e.g. in DNS names). Multiple endpoints which use the same hostname should be considered fungible (e.g. multiple A values in DNS). Must be lowercase and pass DNS label (RFC 1123) validation.", - "targetRef": "targetRef is a reference to a Kubernetes object that represents this endpoint.", - "topology": "topology contains arbitrary topology information associated with the endpoint. These key/value pairs must conform with the label format. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels Topology may include a maximum of 16 key/value pairs. This includes, but is not limited to the following well known keys: * kubernetes.io/hostname: the value indicates the hostname of the node\n where the endpoint is located. This should match the corresponding\n node label.\n* topology.kubernetes.io/zone: the value indicates the zone where the\n endpoint is located. This should match the corresponding node label.\n* topology.kubernetes.io/region: the value indicates the region where the\n endpoint is located. This should match the corresponding node label.\nThis field is deprecated and will be removed in future api versions.", - "nodeName": "nodeName represents the name of the Node hosting this endpoint. This can be used to determine endpoints local to a Node. This field can be enabled with the EndpointSliceNodeName feature gate.", + "": "Endpoint represents a single logical \"backend\" implementing a service.", + "addresses": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.", + "conditions": "conditions contains information about the current status of the endpoint.", + "hostname": "hostname of this endpoint. This field may be used by consumers of endpoints to distinguish endpoints from each other (e.g. in DNS names). Multiple endpoints which use the same hostname should be considered fungible (e.g. multiple A values in DNS). Must be lowercase and pass DNS Label (RFC 1123) validation.", + "targetRef": "targetRef is a reference to a Kubernetes object that represents this endpoint.", + "deprecatedTopology": "deprecatedTopology contains topology information part of the v1beta1 API. This field is deprecated, and will be removed when the v1beta1 API is removed (no sooner than kubernetes v1.24). While this field can hold values, it is not writable through the v1 API, and any attempts to write to it will be silently ignored. Topology information can be found in the zone and nodeName fields instead.", + "nodeName": "nodeName represents the name of the Node hosting this endpoint. This can be used to determine endpoints local to a Node. This field can be enabled with the EndpointSliceNodeName feature gate.", + "zone": "zone is the name of the Zone this endpoint exists in.", + "hints": "hints contains information associated with how an endpoint should be consumed.", } func (Endpoint) SwaggerDoc() map[string]string { @@ -52,12 +54,21 @@ func (EndpointConditions) SwaggerDoc() map[string]string { return map_EndpointConditions } +var map_EndpointHints = map[string]string{ + "": "EndpointHints provides hints describing how an endpoint should be consumed.", + "forZones": "forZones indicates the zone(s) this endpoint should be consumed by to enable topology aware routing.", +} + +func (EndpointHints) SwaggerDoc() map[string]string { + return map_EndpointHints +} + var map_EndpointPort = map[string]string{ "": "EndpointPort represents a Port used by an EndpointSlice", "name": "The name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.", "protocol": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", "port": "The port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.", - "appProtocol": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names. Default is empty string.", + "appProtocol": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.", } func (EndpointPort) SwaggerDoc() map[string]string { @@ -86,4 +97,13 @@ func (EndpointSliceList) SwaggerDoc() map[string]string { return map_EndpointSliceList } +var map_ForZone = map[string]string{ + "": "ForZone provides information about which zones should consume this endpoint.", + "name": "name represents the name of the zone.", +} + +func (ForZone) SwaggerDoc() map[string]string { + return map_ForZone +} + // AUTO-GENERATED FUNCTIONS END HERE diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go b/constraint/vendor/k8s.io/api/discovery/v1/well_known_labels.go similarity index 81% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go rename to constraint/vendor/k8s.io/api/discovery/v1/well_known_labels.go index 8f9c72f08..d949b5f1a 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/well_known_labels.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1 const ( // LabelServiceName is used to indicate the name of a Kubernetes service. @@ -25,4 +25,8 @@ const ( // same cluster. It is highly recommended to configure this label for all // EndpointSlices. LabelManagedBy = "endpointslice.kubernetes.io/managed-by" + // LabelSkipMirror can be set to true on an Endpoints resource to indicate + // that the EndpointSliceMirroring controller should not mirror this + // resource with EndpointSlices. + LabelSkipMirror = "endpointslice.kubernetes.io/skip-mirror" ) diff --git a/constraint/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/discovery/v1/zz_generated.deepcopy.go similarity index 79% rename from constraint/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go rename to constraint/vendor/k8s.io/api/discovery/v1/zz_generated.deepcopy.go index 13e54d500..31a912386 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/discovery/v1/zz_generated.deepcopy.go @@ -18,10 +18,10 @@ limitations under the License. // Code generated by deepcopy-gen. DO NOT EDIT. -package v1alpha1 +package v1 import ( - v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -41,11 +41,11 @@ func (in *Endpoint) DeepCopyInto(out *Endpoint) { } if in.TargetRef != nil { in, out := &in.TargetRef, &out.TargetRef - *out = new(v1.ObjectReference) + *out = new(corev1.ObjectReference) **out = **in } - if in.Topology != nil { - in, out := &in.Topology, &out.Topology + if in.DeprecatedTopology != nil { + in, out := &in.DeprecatedTopology, &out.DeprecatedTopology *out = make(map[string]string, len(*in)) for key, val := range *in { (*out)[key] = val @@ -56,6 +56,16 @@ func (in *Endpoint) DeepCopyInto(out *Endpoint) { *out = new(string) **out = **in } + if in.Zone != nil { + in, out := &in.Zone, &out.Zone + *out = new(string) + **out = **in + } + if in.Hints != nil { + in, out := &in.Hints, &out.Hints + *out = new(EndpointHints) + (*in).DeepCopyInto(*out) + } return } @@ -100,6 +110,27 @@ func (in *EndpointConditions) DeepCopy() *EndpointConditions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointHints) DeepCopyInto(out *EndpointHints) { + *out = *in + if in.ForZones != nil { + in, out := &in.ForZones, &out.ForZones + *out = make([]ForZone, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointHints. +func (in *EndpointHints) DeepCopy() *EndpointHints { + if in == nil { + return nil + } + out := new(EndpointHints) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EndpointPort) DeepCopyInto(out *EndpointPort) { *out = *in @@ -110,7 +141,7 @@ func (in *EndpointPort) DeepCopyInto(out *EndpointPort) { } if in.Protocol != nil { in, out := &in.Protocol, &out.Protocol - *out = new(v1.Protocol) + *out = new(corev1.Protocol) **out = **in } if in.Port != nil { @@ -208,3 +239,19 @@ func (in *EndpointSliceList) DeepCopyObject() runtime.Object { } return nil } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ForZone) DeepCopyInto(out *ForZone) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ForZone. +func (in *ForZone) DeepCopy() *ForZone { + if in == nil { + return nil + } + out := new(ForZone) + in.DeepCopyInto(out) + return out +} diff --git a/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.pb.go index 6caab402c..e024cc0a1 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.pb.go @@ -102,10 +102,38 @@ func (m *EndpointConditions) XXX_DiscardUnknown() { var xxx_messageInfo_EndpointConditions proto.InternalMessageInfo +func (m *EndpointHints) Reset() { *m = EndpointHints{} } +func (*EndpointHints) ProtoMessage() {} +func (*EndpointHints) Descriptor() ([]byte, []int) { + return fileDescriptor_ece80bbc872d519b, []int{2} +} +func (m *EndpointHints) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointHints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointHints) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointHints.Merge(m, src) +} +func (m *EndpointHints) XXX_Size() int { + return m.Size() +} +func (m *EndpointHints) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointHints.DiscardUnknown(m) +} + +var xxx_messageInfo_EndpointHints proto.InternalMessageInfo + func (m *EndpointPort) Reset() { *m = EndpointPort{} } func (*EndpointPort) ProtoMessage() {} func (*EndpointPort) Descriptor() ([]byte, []int) { - return fileDescriptor_ece80bbc872d519b, []int{2} + return fileDescriptor_ece80bbc872d519b, []int{3} } func (m *EndpointPort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -133,7 +161,7 @@ var xxx_messageInfo_EndpointPort proto.InternalMessageInfo func (m *EndpointSlice) Reset() { *m = EndpointSlice{} } func (*EndpointSlice) ProtoMessage() {} func (*EndpointSlice) Descriptor() ([]byte, []int) { - return fileDescriptor_ece80bbc872d519b, []int{3} + return fileDescriptor_ece80bbc872d519b, []int{4} } func (m *EndpointSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,7 +189,7 @@ var xxx_messageInfo_EndpointSlice proto.InternalMessageInfo func (m *EndpointSliceList) Reset() { *m = EndpointSliceList{} } func (*EndpointSliceList) ProtoMessage() {} func (*EndpointSliceList) Descriptor() ([]byte, []int) { - return fileDescriptor_ece80bbc872d519b, []int{4} + return fileDescriptor_ece80bbc872d519b, []int{5} } func (m *EndpointSliceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -186,13 +214,43 @@ func (m *EndpointSliceList) XXX_DiscardUnknown() { var xxx_messageInfo_EndpointSliceList proto.InternalMessageInfo +func (m *ForZone) Reset() { *m = ForZone{} } +func (*ForZone) ProtoMessage() {} +func (*ForZone) Descriptor() ([]byte, []int) { + return fileDescriptor_ece80bbc872d519b, []int{6} +} +func (m *ForZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ForZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ForZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForZone.Merge(m, src) +} +func (m *ForZone) XXX_Size() int { + return m.Size() +} +func (m *ForZone) XXX_DiscardUnknown() { + xxx_messageInfo_ForZone.DiscardUnknown(m) +} + +var xxx_messageInfo_ForZone proto.InternalMessageInfo + func init() { proto.RegisterType((*Endpoint)(nil), "k8s.io.api.discovery.v1beta1.Endpoint") proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.discovery.v1beta1.Endpoint.TopologyEntry") proto.RegisterType((*EndpointConditions)(nil), "k8s.io.api.discovery.v1beta1.EndpointConditions") + proto.RegisterType((*EndpointHints)(nil), "k8s.io.api.discovery.v1beta1.EndpointHints") proto.RegisterType((*EndpointPort)(nil), "k8s.io.api.discovery.v1beta1.EndpointPort") proto.RegisterType((*EndpointSlice)(nil), "k8s.io.api.discovery.v1beta1.EndpointSlice") proto.RegisterType((*EndpointSliceList)(nil), "k8s.io.api.discovery.v1beta1.EndpointSliceList") + proto.RegisterType((*ForZone)(nil), "k8s.io.api.discovery.v1beta1.ForZone") } func init() { @@ -200,57 +258,62 @@ func init() { } var fileDescriptor_ece80bbc872d519b = []byte{ - // 798 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4d, 0x8f, 0xe3, 0x44, - 0x10, 0x8d, 0x27, 0x63, 0xc6, 0xee, 0xec, 0x88, 0xdd, 0x16, 0x87, 0x68, 0x58, 0xd9, 0xa3, 0x20, - 0x50, 0xc4, 0x68, 0x6d, 0x66, 0xb5, 0x42, 0x2b, 0x38, 0x8d, 0x61, 0x04, 0x48, 0xb0, 0x1b, 0xf5, - 0x46, 0x42, 0x42, 0x1c, 0xe8, 0xd8, 0xb5, 0x8e, 0x49, 0xec, 0xb6, 0xba, 0x3b, 0x91, 0x72, 0xe3, - 0x1f, 0xc0, 0x7f, 0x42, 0x42, 0x73, 0xdc, 0xe3, 0x9e, 0x2c, 0x62, 0xf8, 0x15, 0x7b, 0x42, 0xdd, - 0xfe, 0x4a, 0x08, 0x1f, 0xb9, 0x75, 0xbf, 0xaa, 0xf7, 0xaa, 0x5e, 0x75, 0x17, 0xba, 0x5d, 0x3c, - 0x15, 0x5e, 0xc2, 0xfc, 0xc5, 0x6a, 0x06, 0x3c, 0x03, 0x09, 0xc2, 0x5f, 0x43, 0x16, 0x31, 0xee, - 0xd7, 0x01, 0x9a, 0x27, 0x7e, 0x94, 0x88, 0x90, 0xad, 0x81, 0x6f, 0xfc, 0xf5, 0xf5, 0x0c, 0x24, - 0xbd, 0xf6, 0x63, 0xc8, 0x80, 0x53, 0x09, 0x91, 0x97, 0x73, 0x26, 0x19, 0x7e, 0x58, 0x65, 0x7b, - 0x34, 0x4f, 0xbc, 0x36, 0xdb, 0xab, 0xb3, 0x2f, 0x1e, 0xc5, 0x89, 0x9c, 0xaf, 0x66, 0x5e, 0xc8, - 0x52, 0x3f, 0x66, 0x31, 0xf3, 0x35, 0x69, 0xb6, 0x7a, 0xa9, 0x6f, 0xfa, 0xa2, 0x4f, 0x95, 0xd8, - 0xc5, 0x68, 0xa7, 0x74, 0xc8, 0x38, 0xf8, 0xeb, 0x83, 0x82, 0x17, 0x4f, 0xba, 0x9c, 0x94, 0x86, - 0xf3, 0x24, 0x53, 0xdd, 0xe5, 0x8b, 0x58, 0x01, 0xc2, 0x4f, 0x41, 0xd2, 0x7f, 0x62, 0xf9, 0xff, - 0xc6, 0xe2, 0xab, 0x4c, 0x26, 0x29, 0x1c, 0x10, 0x3e, 0xfe, 0x3f, 0x82, 0x08, 0xe7, 0x90, 0xd2, - 0xbf, 0xf3, 0x46, 0x7f, 0xf6, 0x91, 0x75, 0x9b, 0x45, 0x39, 0x4b, 0x32, 0x89, 0xaf, 0x90, 0x4d, - 0xa3, 0x88, 0x83, 0x10, 0x20, 0x86, 0xc6, 0x65, 0x7f, 0x6c, 0x07, 0xe7, 0x65, 0xe1, 0xda, 0x37, - 0x0d, 0x48, 0xba, 0x38, 0x8e, 0x10, 0x0a, 0x59, 0x16, 0x25, 0x32, 0x61, 0x99, 0x18, 0x9e, 0x5c, - 0x1a, 0xe3, 0xc1, 0xe3, 0x8f, 0xbc, 0xff, 0x1a, 0xaf, 0xd7, 0x14, 0xfa, 0xac, 0xe5, 0x05, 0xf8, - 0xae, 0x70, 0x7b, 0x65, 0xe1, 0xa2, 0x0e, 0x23, 0x3b, 0xba, 0x78, 0x8c, 0xac, 0x39, 0x13, 0x32, - 0xa3, 0x29, 0x0c, 0xfb, 0x97, 0xc6, 0xd8, 0x0e, 0xee, 0x95, 0x85, 0x6b, 0x7d, 0x59, 0x63, 0xa4, - 0x8d, 0xe2, 0x09, 0xb2, 0x25, 0xe5, 0x31, 0x48, 0x02, 0x2f, 0x87, 0xa7, 0xba, 0x9d, 0xf7, 0x76, - 0xdb, 0x51, 0x0f, 0xe4, 0xad, 0xaf, 0xbd, 0xe7, 0xb3, 0x1f, 0x21, 0x54, 0x49, 0xc0, 0x21, 0x0b, - 0xa1, 0x72, 0x38, 0x6d, 0x98, 0xa4, 0x13, 0xc1, 0x33, 0x64, 0x49, 0x96, 0xb3, 0x25, 0x8b, 0x37, - 0x43, 0xf3, 0xb2, 0x3f, 0x1e, 0x3c, 0x7e, 0x72, 0x9c, 0x3f, 0x6f, 0x5a, 0xd3, 0x6e, 0x33, 0xc9, - 0x37, 0xc1, 0xfd, 0xda, 0xa3, 0xd5, 0xc0, 0xa4, 0xd5, 0x55, 0xfe, 0x32, 0x16, 0xc1, 0x33, 0xe5, - 0xef, 0xad, 0xce, 0xdf, 0xb3, 0x1a, 0x23, 0x6d, 0xf4, 0xe2, 0x53, 0x74, 0xbe, 0x27, 0x8b, 0xef, - 0xa3, 0xfe, 0x02, 0x36, 0x43, 0x43, 0xb1, 0x88, 0x3a, 0xe2, 0x77, 0x90, 0xb9, 0xa6, 0xcb, 0x15, - 0xe8, 0xd7, 0xb0, 0x49, 0x75, 0xf9, 0xe4, 0xe4, 0xa9, 0x31, 0xfa, 0xd9, 0x40, 0xf8, 0x70, 0xfa, - 0xd8, 0x45, 0x26, 0x07, 0x1a, 0x55, 0x22, 0x56, 0x60, 0x97, 0x85, 0x6b, 0x12, 0x05, 0x90, 0x0a, - 0xc7, 0xef, 0xa3, 0x33, 0x01, 0x7c, 0x9d, 0x64, 0xb1, 0xd6, 0xb4, 0x82, 0x41, 0x59, 0xb8, 0x67, - 0x2f, 0x2a, 0x88, 0x34, 0x31, 0x7c, 0x8d, 0x06, 0x12, 0x78, 0x9a, 0x64, 0x54, 0xaa, 0xd4, 0xbe, - 0x4e, 0x7d, 0xbb, 0x2c, 0xdc, 0xc1, 0xb4, 0x83, 0xc9, 0x6e, 0xce, 0xe8, 0x37, 0x03, 0xdd, 0x6b, - 0x3a, 0x9a, 0x30, 0x2e, 0xf1, 0x43, 0x74, 0xaa, 0x5f, 0x59, 0xfb, 0x09, 0xac, 0xb2, 0x70, 0x4f, - 0xf5, 0x04, 0x34, 0x8a, 0xbf, 0x40, 0x96, 0xfe, 0xb0, 0x21, 0x5b, 0x56, 0xee, 0x82, 0x2b, 0x35, - 0xa7, 0x49, 0x8d, 0xbd, 0x29, 0xdc, 0x77, 0x0f, 0x97, 0xd1, 0x6b, 0xc2, 0xa4, 0x25, 0xab, 0x32, - 0x39, 0xe3, 0x52, 0xf7, 0x68, 0x56, 0x65, 0x54, 0x79, 0xa2, 0x51, 0x65, 0x84, 0xe6, 0x79, 0x43, - 0xd3, 0xdf, 0xc8, 0xae, 0x8c, 0xdc, 0x74, 0x30, 0xd9, 0xcd, 0x19, 0x6d, 0x4f, 0xd0, 0x79, 0x63, - 0xe4, 0xc5, 0x32, 0x09, 0x01, 0xff, 0x80, 0x2c, 0xb5, 0xd7, 0x11, 0x95, 0x54, 0xbb, 0xd9, 0xdf, - 0x8b, 0x76, 0x3d, 0xbd, 0x7c, 0x11, 0x2b, 0x40, 0x78, 0x2a, 0xbb, 0xfb, 0x9a, 0xdf, 0x80, 0xa4, - 0xdd, 0x5e, 0x74, 0x18, 0x69, 0x55, 0xf1, 0xe7, 0x68, 0x50, 0x2f, 0xe2, 0x74, 0x93, 0x43, 0xdd, - 0xe6, 0xa8, 0xa6, 0x0c, 0x6e, 0xba, 0xd0, 0x9b, 0xfd, 0x2b, 0xd9, 0xa5, 0xe1, 0x6f, 0x91, 0x0d, - 0x75, 0xe3, 0x6a, 0x81, 0xd5, 0x07, 0xff, 0xe0, 0xb8, 0x0f, 0x1e, 0x3c, 0xa8, 0x6b, 0xd9, 0x0d, - 0x22, 0x48, 0xa7, 0x85, 0x9f, 0x23, 0x53, 0x4d, 0x53, 0x0c, 0xfb, 0x5a, 0xf4, 0xc3, 0xe3, 0x44, - 0xd5, 0x33, 0x04, 0xe7, 0xb5, 0xb0, 0xa9, 0x6e, 0x82, 0x54, 0x3a, 0xa3, 0x5f, 0x0d, 0xf4, 0x60, - 0x6f, 0xc6, 0x5f, 0x27, 0x42, 0xe2, 0xef, 0x0f, 0xe6, 0xec, 0x1d, 0x37, 0x67, 0xc5, 0xd6, 0x53, - 0x6e, 0x37, 0xb3, 0x41, 0x76, 0x66, 0x3c, 0x41, 0x66, 0x22, 0x21, 0x6d, 0x26, 0x73, 0x75, 0x9c, - 0x09, 0xdd, 0x5d, 0xe7, 0xe2, 0x2b, 0xa5, 0x40, 0x2a, 0xa1, 0xe0, 0xd1, 0xdd, 0xd6, 0xe9, 0xbd, - 0xda, 0x3a, 0xbd, 0xd7, 0x5b, 0xa7, 0xf7, 0x53, 0xe9, 0x18, 0x77, 0xa5, 0x63, 0xbc, 0x2a, 0x1d, - 0xe3, 0x75, 0xe9, 0x18, 0xbf, 0x97, 0x8e, 0xf1, 0xcb, 0x1f, 0x4e, 0xef, 0xbb, 0xb3, 0x5a, 0xf2, - 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x35, 0xe6, 0xf5, 0xf2, 0x06, 0x00, 0x00, + // 870 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x41, 0x8f, 0xe3, 0x34, + 0x14, 0x6e, 0xa6, 0x53, 0x9a, 0xb8, 0x33, 0x62, 0xd7, 0xe2, 0x50, 0x0d, 0xab, 0xa4, 0x0a, 0x5a, + 0x54, 0x31, 0xda, 0x84, 0x19, 0xad, 0xd0, 0x0a, 0x4e, 0x13, 0x18, 0x58, 0xa4, 0x65, 0x77, 0xe4, + 0x19, 0x09, 0x69, 0xc5, 0x01, 0x37, 0xf1, 0xa4, 0xa1, 0x53, 0x3b, 0xb2, 0xdd, 0x4a, 0xbd, 0xf1, + 0x0f, 0xe0, 0xb7, 0xf0, 0x17, 0x90, 0xd0, 0x1c, 0xf7, 0xb8, 0xa7, 0x88, 0x09, 0xff, 0x62, 0x4f, + 0xc8, 0x8e, 0x93, 0xb4, 0x14, 0x86, 0xde, 0xec, 0xcf, 0xef, 0xfb, 0xde, 0x7b, 0xdf, 0xb3, 0x0d, + 0xce, 0x67, 0xcf, 0x44, 0x90, 0xb1, 0x70, 0xb6, 0x98, 0x10, 0x4e, 0x89, 0x24, 0x22, 0x5c, 0x12, + 0x9a, 0x30, 0x1e, 0x9a, 0x03, 0x9c, 0x67, 0x61, 0x92, 0x89, 0x98, 0x2d, 0x09, 0x5f, 0x85, 0xcb, + 0x93, 0x09, 0x91, 0xf8, 0x24, 0x4c, 0x09, 0x25, 0x1c, 0x4b, 0x92, 0x04, 0x39, 0x67, 0x92, 0xc1, + 0x47, 0x55, 0x74, 0x80, 0xf3, 0x2c, 0x68, 0xa2, 0x03, 0x13, 0x7d, 0xf4, 0x24, 0xcd, 0xe4, 0x74, + 0x31, 0x09, 0x62, 0x36, 0x0f, 0x53, 0x96, 0xb2, 0x50, 0x93, 0x26, 0x8b, 0x6b, 0xbd, 0xd3, 0x1b, + 0xbd, 0xaa, 0xc4, 0x8e, 0xfc, 0xb5, 0xd4, 0x31, 0xe3, 0x24, 0x5c, 0x6e, 0x25, 0x3c, 0x7a, 0xda, + 0xc6, 0xcc, 0x71, 0x3c, 0xcd, 0xa8, 0xaa, 0x2e, 0x9f, 0xa5, 0x0a, 0x10, 0xe1, 0x9c, 0x48, 0xfc, + 0x6f, 0xac, 0xf0, 0xbf, 0x58, 0x7c, 0x41, 0x65, 0x36, 0x27, 0x5b, 0x84, 0xcf, 0xfe, 0x8f, 0x20, + 0xe2, 0x29, 0x99, 0xe3, 0x7f, 0xf2, 0xfc, 0xdf, 0xf6, 0x81, 0x7d, 0x4e, 0x93, 0x9c, 0x65, 0x54, + 0xc2, 0x63, 0xe0, 0xe0, 0x24, 0xe1, 0x44, 0x08, 0x22, 0x86, 0xd6, 0xa8, 0x3b, 0x76, 0xa2, 0xc3, + 0xb2, 0xf0, 0x9c, 0xb3, 0x1a, 0x44, 0xed, 0x39, 0x4c, 0x00, 0x88, 0x19, 0x4d, 0x32, 0x99, 0x31, + 0x2a, 0x86, 0x7b, 0x23, 0x6b, 0x3c, 0x38, 0xfd, 0x34, 0xb8, 0xcf, 0xde, 0xa0, 0x4e, 0xf4, 0x65, + 0xc3, 0x8b, 0xe0, 0x6d, 0xe1, 0x75, 0xca, 0xc2, 0x03, 0x2d, 0x86, 0xd6, 0x74, 0xe1, 0x18, 0xd8, + 0x53, 0x26, 0x24, 0xc5, 0x73, 0x32, 0xec, 0x8e, 0xac, 0xb1, 0x13, 0x1d, 0x94, 0x85, 0x67, 0x3f, + 0x37, 0x18, 0x6a, 0x4e, 0xe1, 0x05, 0x70, 0x24, 0xe6, 0x29, 0x91, 0x88, 0x5c, 0x0f, 0xf7, 0x75, + 0x39, 0x1f, 0xad, 0x97, 0xa3, 0x06, 0x14, 0x2c, 0x4f, 0x82, 0x57, 0x93, 0x9f, 0x48, 0xac, 0x82, + 0x08, 0x27, 0x34, 0x26, 0x55, 0x87, 0x57, 0x35, 0x13, 0xb5, 0x22, 0x70, 0x02, 0x6c, 0xc9, 0x72, + 0x76, 0xc3, 0xd2, 0xd5, 0xb0, 0x37, 0xea, 0x8e, 0x07, 0xa7, 0x4f, 0x77, 0xeb, 0x2f, 0xb8, 0x32, + 0xb4, 0x73, 0x2a, 0xf9, 0x2a, 0x7a, 0x60, 0x7a, 0xb4, 0x6b, 0x18, 0x35, 0xba, 0xaa, 0x3f, 0xca, + 0x12, 0xf2, 0x52, 0xf5, 0xf7, 0x5e, 0xdb, 0xdf, 0x4b, 0x83, 0xa1, 0xe6, 0x14, 0xbe, 0x00, 0xbd, + 0x69, 0x46, 0xa5, 0x18, 0xf6, 0x75, 0x6f, 0xc7, 0xbb, 0x95, 0xf2, 0x5c, 0x51, 0x22, 0xa7, 0x2c, + 0xbc, 0x9e, 0x5e, 0xa2, 0x4a, 0xe4, 0xe8, 0x0b, 0x70, 0xb8, 0x51, 0x24, 0x7c, 0x00, 0xba, 0x33, + 0xb2, 0x1a, 0x5a, 0xaa, 0x06, 0xa4, 0x96, 0xf0, 0x03, 0xd0, 0x5b, 0xe2, 0x9b, 0x05, 0xd1, 0xb3, + 0x75, 0x50, 0xb5, 0xf9, 0x7c, 0xef, 0x99, 0xe5, 0xff, 0x62, 0x01, 0xb8, 0x3d, 0x4b, 0xe8, 0x81, + 0x1e, 0x27, 0x38, 0xa9, 0x44, 0xec, 0x2a, 0x29, 0x52, 0x00, 0xaa, 0x70, 0xf8, 0x18, 0xf4, 0x05, + 0xe1, 0xcb, 0x8c, 0xa6, 0x5a, 0xd3, 0x8e, 0x06, 0x65, 0xe1, 0xf5, 0x2f, 0x2b, 0x08, 0xd5, 0x67, + 0xf0, 0x04, 0x0c, 0x24, 0xe1, 0xf3, 0x8c, 0x62, 0xa9, 0x42, 0xbb, 0x3a, 0xf4, 0xfd, 0xb2, 0xf0, + 0x06, 0x57, 0x2d, 0x8c, 0xd6, 0x63, 0xfc, 0x04, 0x1c, 0x6e, 0x74, 0x0c, 0x2f, 0x81, 0x7d, 0xcd, + 0xf8, 0x6b, 0x46, 0xcd, 0x4d, 0x1e, 0x9c, 0x3e, 0xbe, 0xdf, 0xb0, 0xaf, 0xab, 0xe8, 0x76, 0x58, + 0x06, 0x10, 0xa8, 0x11, 0xf2, 0xff, 0xb0, 0xc0, 0x41, 0x9d, 0xe6, 0x82, 0x71, 0x09, 0x1f, 0x81, + 0x7d, 0x7d, 0x33, 0xb5, 0x6b, 0x91, 0x5d, 0x16, 0xde, 0xbe, 0x9e, 0x9a, 0x46, 0xe1, 0x37, 0xc0, + 0xd6, 0x8f, 0x2c, 0x66, 0x37, 0x95, 0x87, 0xd1, 0xb1, 0x12, 0xbe, 0x30, 0xd8, 0xbb, 0xc2, 0xfb, + 0x70, 0xfb, 0x03, 0x09, 0xea, 0x63, 0xd4, 0x90, 0x55, 0x9a, 0x9c, 0x71, 0xa9, 0x9d, 0xe8, 0x55, + 0x69, 0x54, 0x7a, 0xa4, 0x51, 0x65, 0x17, 0xce, 0xf3, 0x9a, 0xa6, 0xaf, 0xbe, 0x53, 0xd9, 0x75, + 0xd6, 0xc2, 0x68, 0x3d, 0xc6, 0xbf, 0xdb, 0x6b, 0xfd, 0xba, 0xbc, 0xc9, 0x62, 0x02, 0x7f, 0x04, + 0xb6, 0xfa, 0x8b, 0x12, 0x2c, 0xb1, 0xee, 0x66, 0xf3, 0x2d, 0x37, 0x5f, 0x4a, 0x90, 0xcf, 0x52, + 0x05, 0x88, 0x40, 0x45, 0xb7, 0xcf, 0xe9, 0x3b, 0x22, 0x71, 0xfb, 0x96, 0x5b, 0x0c, 0x35, 0xaa, + 0xf0, 0x2b, 0x30, 0x30, 0x9f, 0xc7, 0xd5, 0x2a, 0x27, 0xa6, 0x4c, 0xdf, 0x50, 0x06, 0x67, 0xed, + 0xd1, 0xbb, 0xcd, 0x2d, 0x5a, 0xa7, 0xc1, 0xef, 0x81, 0x43, 0x4c, 0xe1, 0xea, 0xd3, 0x51, 0x83, + 0xfd, 0x78, 0xb7, 0x97, 0x10, 0x3d, 0x34, 0xb9, 0x9c, 0x1a, 0x11, 0xa8, 0xd5, 0x82, 0xaf, 0x40, + 0x4f, 0xb9, 0x29, 0x86, 0x5d, 0x2d, 0xfa, 0xc9, 0x6e, 0xa2, 0x6a, 0x0c, 0xd1, 0xa1, 0x11, 0xee, + 0xa9, 0x9d, 0x40, 0x95, 0x8e, 0xff, 0xbb, 0x05, 0x1e, 0x6e, 0x78, 0xfc, 0x22, 0x13, 0x12, 0xfe, + 0xb0, 0xe5, 0x73, 0xb0, 0x9b, 0xcf, 0x8a, 0xad, 0x5d, 0x6e, 0x2e, 0x68, 0x8d, 0xac, 0x79, 0x7c, + 0x01, 0x7a, 0x99, 0x24, 0xf3, 0xda, 0x99, 0x1d, 0xff, 0x08, 0x5d, 0x5d, 0xdb, 0xc5, 0xb7, 0x4a, + 0x01, 0x55, 0x42, 0xfe, 0x31, 0xe8, 0x9b, 0x87, 0x00, 0x47, 0x1b, 0x97, 0xfd, 0xc0, 0x84, 0xaf, + 0x5d, 0xf8, 0xe8, 0xc9, 0xed, 0x9d, 0xdb, 0x79, 0x73, 0xe7, 0x76, 0xde, 0xde, 0xb9, 0x9d, 0x9f, + 0x4b, 0xd7, 0xba, 0x2d, 0x5d, 0xeb, 0x4d, 0xe9, 0x5a, 0x6f, 0x4b, 0xd7, 0xfa, 0xb3, 0x74, 0xad, + 0x5f, 0xff, 0x72, 0x3b, 0xaf, 0xfb, 0x26, 0xff, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x0d, + 0x6f, 0x98, 0xd3, 0x07, 0x00, 0x00, } func (m *Endpoint) Marshal() (dAtA []byte, err error) { @@ -273,6 +336,18 @@ func (m *Endpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Hints != nil { + { + size, err := m.Hints.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if m.NodeName != nil { i -= len(*m.NodeName) copy(dAtA[i:], *m.NodeName) @@ -398,6 +473,43 @@ func (m *EndpointConditions) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *EndpointHints) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EndpointHints) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointHints) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ForZones) > 0 { + for iNdEx := len(m.ForZones) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ForZones[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *EndpointPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -560,6 +672,34 @@ func (m *EndpointSliceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ForZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ForZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ForZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { offset -= sovGenerated(v) base := offset @@ -605,6 +745,10 @@ func (m *Endpoint) Size() (n int) { l = len(*m.NodeName) n += 1 + l + sovGenerated(uint64(l)) } + if m.Hints != nil { + l = m.Hints.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -626,6 +770,21 @@ func (m *EndpointConditions) Size() (n int) { return n } +func (m *EndpointHints) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ForZones) > 0 { + for _, e := range m.ForZones { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *EndpointPort) Size() (n int) { if m == nil { return 0 @@ -692,6 +851,17 @@ func (m *EndpointSliceList) Size() (n int) { return n } +func (m *ForZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func sovGenerated(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -719,6 +889,7 @@ func (this *Endpoint) String() string { `TargetRef:` + strings.Replace(fmt.Sprintf("%v", this.TargetRef), "ObjectReference", "v1.ObjectReference", 1) + `,`, `Topology:` + mapStringForTopology + `,`, `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `Hints:` + strings.Replace(this.Hints.String(), "EndpointHints", "EndpointHints", 1) + `,`, `}`, }, "") return s @@ -735,6 +906,21 @@ func (this *EndpointConditions) String() string { }, "") return s } +func (this *EndpointHints) String() string { + if this == nil { + return "nil" + } + repeatedStringForForZones := "[]ForZone{" + for _, f := range this.ForZones { + repeatedStringForForZones += strings.Replace(strings.Replace(f.String(), "ForZone", "ForZone", 1), `&`, ``, 1) + "," + } + repeatedStringForForZones += "}" + s := strings.Join([]string{`&EndpointHints{`, + `ForZones:` + repeatedStringForForZones + `,`, + `}`, + }, "") + return s +} func (this *EndpointPort) String() string { if this == nil { return "nil" @@ -787,6 +973,16 @@ func (this *EndpointSliceList) String() string { }, "") return s } +func (this *ForZone) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ForZone{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func valueToStringGenerated(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -1074,7 +1270,7 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1118,16 +1314,49 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { s := string(dAtA[iNdEx:postIndex]) m.NodeName = &s iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Hints == nil { + m.Hints = &EndpointHints{} + } + if err := m.Hints.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1240,10 +1469,91 @@ func (m *EndpointConditions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointHints) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointHints: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointHints: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForZones", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForZones = append(m.ForZones, ForZone{}) + if err := m.ForZones[len(m.ForZones)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1412,10 +1722,7 @@ func (m *EndpointPort) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1598,10 +1905,7 @@ func (m *EndpointSlice) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1718,10 +2022,89 @@ func (m *EndpointSliceList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ForZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ForZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ForZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.proto index e5d21caad..6925f7ce3 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/discovery/v1beta1/generated.proto @@ -76,6 +76,12 @@ message Endpoint { // with the EndpointSliceNodeName feature gate. // +optional optional string nodeName = 6; + + // hints contains information associated with how an endpoint should be + // consumed. + // +featureGate=TopologyAwareHints + // +optional + optional EndpointHints hints = 7; } // EndpointConditions represents the current condition of an endpoint. @@ -104,6 +110,14 @@ message EndpointConditions { optional bool terminating = 3; } +// EndpointHints provides hints describing how an endpoint should be consumed. +message EndpointHints { + // forZones indicates the zone(s) this endpoint should be consumed by to + // enable topology aware routing. May contain a maximum of 8 entries. + // +listType=atomic + repeated ForZone forZones = 1; +} + // EndpointPort represents a Port used by an EndpointSlice message EndpointPort { // The name of this port. All ports in an EndpointSlice must have a unique @@ -178,3 +192,9 @@ message EndpointSliceList { repeated EndpointSlice items = 2; } +// ForZone provides information about which zones should consume this endpoint. +message ForZone { + // name represents the name of the zone. + optional string name = 1; +} + diff --git a/constraint/vendor/k8s.io/api/discovery/v1beta1/types.go b/constraint/vendor/k8s.io/api/discovery/v1beta1/types.go index e14088e8b..eeb46e175 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/discovery/v1beta1/types.go @@ -24,7 +24,9 @@ import ( // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.16 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 +// +k8s:prerelease-lifecycle-gen:replacement=discovery.k8s.io,v1,EndpointSlice // EndpointSlice represents a subset of the endpoints that implement a service. // For a given service there may be multiple EndpointSlice objects, selected by @@ -110,6 +112,11 @@ type Endpoint struct { // with the EndpointSliceNodeName feature gate. // +optional NodeName *string `json:"nodeName,omitempty" protobuf:"bytes,6,opt,name=nodeName"` + // hints contains information associated with how an endpoint should be + // consumed. + // +featureGate=TopologyAwareHints + // +optional + Hints *EndpointHints `json:"hints,omitempty" protobuf:"bytes,7,opt,name=hints"` } // EndpointConditions represents the current condition of an endpoint. @@ -138,6 +145,20 @@ type EndpointConditions struct { Terminating *bool `json:"terminating,omitempty" protobuf:"bytes,3,name=terminating"` } +// EndpointHints provides hints describing how an endpoint should be consumed. +type EndpointHints struct { + // forZones indicates the zone(s) this endpoint should be consumed by to + // enable topology aware routing. May contain a maximum of 8 entries. + // +listType=atomic + ForZones []ForZone `json:"forZones,omitempty" protobuf:"bytes,1,name=forZones"` +} + +// ForZone provides information about which zones should consume this endpoint. +type ForZone struct { + // name represents the name of the zone. + Name string `json:"name" protobuf:"bytes,1,name=name"` +} + // EndpointPort represents a Port used by an EndpointSlice type EndpointPort struct { // The name of this port. All ports in an EndpointSlice must have a unique @@ -169,7 +190,9 @@ type EndpointPort struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.16 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 +// +k8s:prerelease-lifecycle-gen:replacement=discovery.k8s.io,v1,EndpointSlice // EndpointSliceList represents a list of endpoint slices type EndpointSliceList struct { diff --git a/constraint/vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go index d48b93d8b..b4c221999 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/discovery/v1beta1/types_swagger_doc_generated.go @@ -35,6 +35,7 @@ var map_Endpoint = map[string]string{ "targetRef": "targetRef is a reference to a Kubernetes object that represents this endpoint.", "topology": "topology contains arbitrary topology information associated with the endpoint. These key/value pairs must conform with the label format. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels Topology may include a maximum of 16 key/value pairs. This includes, but is not limited to the following well known keys: * kubernetes.io/hostname: the value indicates the hostname of the node\n where the endpoint is located. This should match the corresponding\n node label.\n* topology.kubernetes.io/zone: the value indicates the zone where the\n endpoint is located. This should match the corresponding node label.\n* topology.kubernetes.io/region: the value indicates the region where the\n endpoint is located. This should match the corresponding node label.\nThis field is deprecated and will be removed in future api versions.", "nodeName": "nodeName represents the name of the Node hosting this endpoint. This can be used to determine endpoints local to a Node. This field can be enabled with the EndpointSliceNodeName feature gate.", + "hints": "hints contains information associated with how an endpoint should be consumed.", } func (Endpoint) SwaggerDoc() map[string]string { @@ -52,6 +53,15 @@ func (EndpointConditions) SwaggerDoc() map[string]string { return map_EndpointConditions } +var map_EndpointHints = map[string]string{ + "": "EndpointHints provides hints describing how an endpoint should be consumed.", + "forZones": "forZones indicates the zone(s) this endpoint should be consumed by to enable topology aware routing. May contain a maximum of 8 entries.", +} + +func (EndpointHints) SwaggerDoc() map[string]string { + return map_EndpointHints +} + var map_EndpointPort = map[string]string{ "": "EndpointPort represents a Port used by an EndpointSlice", "name": "The name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.", @@ -86,4 +96,13 @@ func (EndpointSliceList) SwaggerDoc() map[string]string { return map_EndpointSliceList } +var map_ForZone = map[string]string{ + "": "ForZone provides information about which zones should consume this endpoint.", + "name": "name represents the name of the zone.", +} + +func (ForZone) SwaggerDoc() map[string]string { + return map_ForZone +} + // AUTO-GENERATED FUNCTIONS END HERE diff --git a/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go index 7076553d2..f13536b4b 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.deepcopy.go @@ -56,6 +56,11 @@ func (in *Endpoint) DeepCopyInto(out *Endpoint) { *out = new(string) **out = **in } + if in.Hints != nil { + in, out := &in.Hints, &out.Hints + *out = new(EndpointHints) + (*in).DeepCopyInto(*out) + } return } @@ -100,6 +105,27 @@ func (in *EndpointConditions) DeepCopy() *EndpointConditions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointHints) DeepCopyInto(out *EndpointHints) { + *out = *in + if in.ForZones != nil { + in, out := &in.ForZones, &out.ForZones + *out = make([]ForZone, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointHints. +func (in *EndpointHints) DeepCopy() *EndpointHints { + if in == nil { + return nil + } + out := new(EndpointHints) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *EndpointPort) DeepCopyInto(out *EndpointPort) { *out = *in @@ -208,3 +234,19 @@ func (in *EndpointSliceList) DeepCopyObject() runtime.Object { } return nil } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ForZone) DeepCopyInto(out *ForZone) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ForZone. +func (in *ForZone) DeepCopy() *ForZone { + if in == nil { + return nil + } + out := new(ForZone) + in.DeepCopyInto(out) + return out +} diff --git a/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go b/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go index 09e94d0e8..c0f2c63f0 100644 --- a/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go +++ b/constraint/vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go @@ -20,6 +20,10 @@ limitations under the License. package v1beta1 +import ( + schema "k8s.io/apimachinery/pkg/runtime/schema" +) + // APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. func (in *EndpointSlice) APILifecycleIntroduced() (major, minor int) { @@ -29,7 +33,13 @@ func (in *EndpointSlice) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *EndpointSlice) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *EndpointSlice) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "discovery.k8s.io", Version: "v1", Kind: "EndpointSlice"} } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. @@ -47,7 +57,13 @@ func (in *EndpointSliceList) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *EndpointSliceList) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *EndpointSliceList) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "discovery.k8s.io", Version: "v1", Kind: "EndpointSlice"} } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. diff --git a/constraint/vendor/k8s.io/api/events/v1/generated.pb.go b/constraint/vendor/k8s.io/api/events/v1/generated.pb.go index 717137cff..70ad588a6 100644 --- a/constraint/vendor/k8s.io/api/events/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/events/v1/generated.pb.go @@ -1077,10 +1077,7 @@ func (m *Event) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1197,10 +1194,7 @@ func (m *EventList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1302,10 +1296,7 @@ func (m *EventSeries) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/events/v1/generated.proto b/constraint/vendor/k8s.io/api/events/v1/generated.proto index 690c99e4c..04df31b0c 100644 --- a/constraint/vendor/k8s.io/api/events/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/events/v1/generated.proto @@ -36,6 +36,9 @@ option go_package = "v1"; // continued existence of events with that Reason. Events should be // treated as informative, best-effort, supplemental data. message Event { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // eventTime is the time when this Event was first observed. It is required. diff --git a/constraint/vendor/k8s.io/api/events/v1/types.go b/constraint/vendor/k8s.io/api/events/v1/types.go index 4bf715872..e01a2b21e 100644 --- a/constraint/vendor/k8s.io/api/events/v1/types.go +++ b/constraint/vendor/k8s.io/api/events/v1/types.go @@ -33,6 +33,9 @@ import ( type Event struct { metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional metav1.ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` // eventTime is the time when this Event was first observed. It is required. diff --git a/constraint/vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go index 7255727bb..797da63bb 100644 --- a/constraint/vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go @@ -29,6 +29,7 @@ package v1 // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_Event = map[string]string{ "": "Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system. Events have a limited retention time and triggers and messages may evolve with time. Event consumers should not rely on the timing of an event with a given Reason reflecting a consistent underlying trigger, or the continued existence of events with that Reason. Events should be treated as informative, best-effort, supplemental data.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "eventTime": "eventTime is the time when this Event was first observed. It is required.", "series": "series is data about the Event series this event represents or nil if it's a singleton Event.", "reportingController": "reportingController is the name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. This field cannot be empty for new Events.", diff --git a/constraint/vendor/k8s.io/api/events/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/events/v1beta1/generated.pb.go index 3709ef633..d92411bc8 100644 --- a/constraint/vendor/k8s.io/api/events/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/events/v1beta1/generated.pb.go @@ -1077,10 +1077,7 @@ func (m *Event) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1197,10 +1194,7 @@ func (m *EventList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1302,10 +1296,7 @@ func (m *EventSeries) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/events/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/events/v1beta1/generated.proto index 90b57d8d0..57e95b964 100644 --- a/constraint/vendor/k8s.io/api/events/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/events/v1beta1/generated.proto @@ -36,6 +36,9 @@ option go_package = "v1beta1"; // continued existence of events with that Reason. Events should be // treated as informative, best-effort, supplemental data. message Event { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // eventTime is the time when this Event was first observed. It is required. diff --git a/constraint/vendor/k8s.io/api/events/v1beta1/types.go b/constraint/vendor/k8s.io/api/events/v1beta1/types.go index 796e56ea7..5bb6f92b2 100644 --- a/constraint/vendor/k8s.io/api/events/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/events/v1beta1/types.go @@ -35,6 +35,9 @@ import ( type Event struct { metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional metav1.ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` // eventTime is the time when this Event was first observed. It is required. diff --git a/constraint/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go index 7f8e162cd..0e6bd5a83 100644 --- a/constraint/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go @@ -29,6 +29,7 @@ package v1beta1 // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_Event = map[string]string{ "": "Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system. Events have a limited retention time and triggers and messages may evolve with time. Event consumers should not rely on the timing of an event with a given Reason reflecting a consistent underlying trigger, or the continued existence of events with that Reason. Events should be treated as informative, best-effort, supplemental data.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "eventTime": "eventTime is the time when this Event was first observed. It is required.", "series": "series is data about the Event series this event represents or nil if it's a singleton Event.", "reportingController": "reportingController is the name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. This field cannot be empty for new Events.", diff --git a/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go index bd37f432c..20b3b2a00 100644 --- a/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -1683,241 +1683,243 @@ func init() { } var fileDescriptor_cdc93917efc28165 = []byte{ - // 3743 bytes of a gzipped FileDescriptorProto + // 3761 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x1c, 0xc7, 0x72, 0xd6, 0xec, 0x2e, 0xb9, 0xcb, 0xe2, 0x7f, 0x93, 0x22, 0xf7, 0x49, 0x4f, 0x5c, 0xbd, 0x31, - 0xa0, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x92, 0x9e, 0x22, 0x21, 0xef, 0x99, 0x4b, 0x8a, 0x12, 0x5f, + 0xa2, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x92, 0x9e, 0x22, 0x21, 0xef, 0x99, 0x4b, 0x8a, 0x12, 0x5f, 0xf8, 0xb3, 0xee, 0x25, 0x65, 0xc3, 0x88, 0x1d, 0x0f, 0x77, 0x9b, 0xcb, 0x11, 0x67, 0x67, 0xc6, - 0xd3, 0xb3, 0x34, 0x17, 0xc8, 0x21, 0x87, 0x20, 0x80, 0x81, 0x00, 0xc9, 0xc5, 0x49, 0x8e, 0x31, - 0x02, 0xe4, 0x94, 0x20, 0xc7, 0xe4, 0x60, 0x18, 0x09, 0xe2, 0x00, 0x42, 0xe0, 0x04, 0xbe, 0xc5, - 0x27, 0x22, 0xa6, 0x4f, 0x41, 0x4e, 0xb9, 0x05, 0x3a, 0x05, 0xdd, 0xd3, 0xf3, 0x3f, 0xc3, 0x1d, - 0xd2, 0x12, 0x11, 0x03, 0xef, 0x24, 0x6e, 0x57, 0xd5, 0x57, 0xd5, 0xdd, 0xd5, 0x55, 0xd5, 0x3d, - 0x25, 0x58, 0xd9, 0xbf, 0x4f, 0xab, 0xaa, 0x51, 0xdb, 0xef, 0xed, 0x10, 0x4b, 0x27, 0x36, 0xa1, - 0xb5, 0x03, 0xa2, 0xb7, 0x0d, 0xab, 0x26, 0x08, 0x8a, 0xa9, 0xd6, 0xc8, 0xa1, 0x4d, 0x74, 0xaa, - 0x1a, 0x3a, 0xad, 0x1d, 0xdc, 0xda, 0x21, 0xb6, 0x72, 0xab, 0xd6, 0x21, 0x3a, 0xb1, 0x14, 0x9b, - 0xb4, 0xab, 0xa6, 0x65, 0xd8, 0x06, 0xba, 0xe2, 0xb0, 0x57, 0x15, 0x53, 0xad, 0xfa, 0xec, 0x55, - 0xc1, 0x7e, 0xe9, 0x66, 0x47, 0xb5, 0xf7, 0x7a, 0x3b, 0xd5, 0x96, 0xd1, 0xad, 0x75, 0x8c, 0x8e, - 0x51, 0xe3, 0x52, 0x3b, 0xbd, 0x5d, 0xfe, 0x8b, 0xff, 0xe0, 0x7f, 0x39, 0x68, 0x97, 0xe4, 0x80, - 0xf2, 0x96, 0x61, 0x91, 0xda, 0x41, 0x4c, 0xe3, 0xa5, 0x3b, 0x3e, 0x4f, 0x57, 0x69, 0xed, 0xa9, - 0x3a, 0xb1, 0xfa, 0x35, 0x73, 0xbf, 0xc3, 0x06, 0x68, 0xad, 0x4b, 0x6c, 0x25, 0x49, 0xaa, 0x96, - 0x26, 0x65, 0xf5, 0x74, 0x5b, 0xed, 0x92, 0x98, 0xc0, 0xbd, 0x41, 0x02, 0xb4, 0xb5, 0x47, 0xba, - 0x4a, 0x4c, 0xee, 0xad, 0x34, 0xb9, 0x9e, 0xad, 0x6a, 0x35, 0x55, 0xb7, 0xa9, 0x6d, 0x45, 0x85, - 0xe4, 0x3b, 0x30, 0xb5, 0xa8, 0x69, 0xc6, 0x27, 0xa4, 0xbd, 0xd4, 0x5c, 0x5d, 0xb6, 0xd4, 0x03, - 0x62, 0xa1, 0xab, 0x50, 0xd0, 0x95, 0x2e, 0x29, 0x4b, 0x57, 0xa5, 0xeb, 0x23, 0xf5, 0xb1, 0xe7, - 0x47, 0x95, 0x0b, 0xc7, 0x47, 0x95, 0xc2, 0x86, 0xd2, 0x25, 0x98, 0x53, 0xe4, 0x87, 0x30, 0x2d, - 0xa4, 0x56, 0x34, 0x72, 0xf8, 0xd4, 0xd0, 0x7a, 0x5d, 0x82, 0xae, 0xc1, 0x70, 0x9b, 0x03, 0x08, - 0xc1, 0x09, 0x21, 0x38, 0xec, 0xc0, 0x62, 0x41, 0x95, 0x29, 0x4c, 0x0a, 0xe1, 0x27, 0x06, 0xb5, - 0x1b, 0x8a, 0xbd, 0x87, 0x6e, 0x03, 0x98, 0x8a, 0xbd, 0xd7, 0xb0, 0xc8, 0xae, 0x7a, 0x28, 0xc4, - 0x91, 0x10, 0x87, 0x86, 0x47, 0xc1, 0x01, 0x2e, 0x74, 0x03, 0x4a, 0x16, 0x51, 0xda, 0x9b, 0xba, - 0xd6, 0x2f, 0xe7, 0xae, 0x4a, 0xd7, 0x4b, 0xf5, 0x29, 0x21, 0x51, 0xc2, 0x62, 0x1c, 0x7b, 0x1c, - 0xf2, 0x67, 0x39, 0x18, 0x59, 0x56, 0x48, 0xd7, 0xd0, 0x9b, 0xc4, 0x46, 0x1f, 0x41, 0x89, 0x6d, - 0x57, 0x5b, 0xb1, 0x15, 0xae, 0x6d, 0xf4, 0xf6, 0x9b, 0x55, 0xdf, 0x9d, 0xbc, 0xd5, 0xab, 0x9a, - 0xfb, 0x1d, 0x36, 0x40, 0xab, 0x8c, 0xbb, 0x7a, 0x70, 0xab, 0xba, 0xb9, 0xf3, 0x8c, 0xb4, 0xec, - 0x75, 0x62, 0x2b, 0xbe, 0x7d, 0xfe, 0x18, 0xf6, 0x50, 0xd1, 0x06, 0x14, 0xa8, 0x49, 0x5a, 0xdc, - 0xb2, 0xd1, 0xdb, 0x37, 0xaa, 0x27, 0x3a, 0x6b, 0xd5, 0xb3, 0xac, 0x69, 0x92, 0x96, 0xbf, 0xe2, - 0xec, 0x17, 0xe6, 0x38, 0xe8, 0x29, 0x0c, 0x53, 0x5b, 0xb1, 0x7b, 0xb4, 0x9c, 0xe7, 0x88, 0xd5, - 0xcc, 0x88, 0x5c, 0xca, 0xdf, 0x0c, 0xe7, 0x37, 0x16, 0x68, 0xf2, 0x7f, 0xe5, 0x00, 0x79, 0xbc, - 0x4b, 0x86, 0xde, 0x56, 0x6d, 0xd5, 0xd0, 0xd1, 0x03, 0x28, 0xd8, 0x7d, 0xd3, 0x75, 0x81, 0x6b, - 0xae, 0x41, 0x5b, 0x7d, 0x93, 0xbc, 0x38, 0xaa, 0xcc, 0xc5, 0x25, 0x18, 0x05, 0x73, 0x19, 0xb4, - 0xe6, 0x99, 0x9a, 0xe3, 0xd2, 0x77, 0xc2, 0xaa, 0x5f, 0x1c, 0x55, 0x12, 0x0e, 0x5b, 0xd5, 0x43, - 0x0a, 0x1b, 0x88, 0x0e, 0x00, 0x69, 0x0a, 0xb5, 0xb7, 0x2c, 0x45, 0xa7, 0x8e, 0x26, 0xb5, 0x4b, - 0xc4, 0x22, 0xbc, 0x91, 0x6d, 0xd3, 0x98, 0x44, 0xfd, 0x92, 0xb0, 0x02, 0xad, 0xc5, 0xd0, 0x70, - 0x82, 0x06, 0xe6, 0xcd, 0x16, 0x51, 0xa8, 0xa1, 0x97, 0x0b, 0x61, 0x6f, 0xc6, 0x7c, 0x14, 0x0b, - 0x2a, 0x7a, 0x1d, 0x8a, 0x5d, 0x42, 0xa9, 0xd2, 0x21, 0xe5, 0x21, 0xce, 0x38, 0x29, 0x18, 0x8b, - 0xeb, 0xce, 0x30, 0x76, 0xe9, 0xf2, 0x17, 0x12, 0x8c, 0x7b, 0x2b, 0xb7, 0xa6, 0x52, 0x1b, 0xfd, - 0x6e, 0xcc, 0x0f, 0xab, 0xd9, 0xa6, 0xc4, 0xa4, 0xb9, 0x17, 0x7a, 0x3e, 0xef, 0x8e, 0x04, 0x7c, - 0x70, 0x1d, 0x86, 0x54, 0x9b, 0x74, 0xd9, 0x3e, 0xe4, 0xaf, 0x8f, 0xde, 0xbe, 0x9e, 0xd5, 0x65, - 0xea, 0xe3, 0x02, 0x74, 0x68, 0x95, 0x89, 0x63, 0x07, 0x45, 0xfe, 0xb3, 0x42, 0xc0, 0x7c, 0xe6, - 0x9a, 0xe8, 0x03, 0x28, 0x51, 0xa2, 0x91, 0x96, 0x6d, 0x58, 0xc2, 0xfc, 0xb7, 0x32, 0x9a, 0xaf, - 0xec, 0x10, 0xad, 0x29, 0x44, 0xeb, 0x63, 0xcc, 0x7e, 0xf7, 0x17, 0xf6, 0x20, 0xd1, 0x3b, 0x50, - 0xb2, 0x49, 0xd7, 0xd4, 0x14, 0x9b, 0x88, 0x73, 0xf4, 0x5a, 0x70, 0x0a, 0xcc, 0x73, 0x18, 0x58, - 0xc3, 0x68, 0x6f, 0x09, 0x36, 0x7e, 0x7c, 0xbc, 0x25, 0x71, 0x47, 0xb1, 0x07, 0x83, 0x0e, 0x60, - 0xa2, 0x67, 0xb6, 0x19, 0xa7, 0xcd, 0xa2, 0x60, 0xa7, 0x2f, 0x3c, 0xe9, 0x5e, 0xd6, 0xb5, 0xd9, - 0x0e, 0x49, 0xd7, 0xe7, 0x84, 0xae, 0x89, 0xf0, 0x38, 0x8e, 0x68, 0x41, 0x8b, 0x30, 0xd9, 0x55, - 0x75, 0x16, 0x97, 0xfa, 0x4d, 0xd2, 0x32, 0xf4, 0x36, 0xe5, 0x6e, 0x35, 0x54, 0x9f, 0x17, 0x00, - 0x93, 0xeb, 0x61, 0x32, 0x8e, 0xf2, 0xa3, 0x5f, 0x01, 0x72, 0xa7, 0xf1, 0xd8, 0x09, 0xe2, 0xaa, - 0xa1, 0x73, 0x9f, 0xcb, 0xfb, 0xce, 0xbd, 0x15, 0xe3, 0xc0, 0x09, 0x52, 0x68, 0x0d, 0x66, 0x2d, - 0x72, 0xa0, 0xb2, 0x39, 0x3e, 0x51, 0xa9, 0x6d, 0x58, 0xfd, 0x35, 0xb5, 0xab, 0xda, 0xe5, 0x61, - 0x6e, 0x53, 0xf9, 0xf8, 0xa8, 0x32, 0x8b, 0x13, 0xe8, 0x38, 0x51, 0x4a, 0xfe, 0xf3, 0x61, 0x98, - 0x8c, 0xc4, 0x1b, 0xf4, 0x14, 0xe6, 0x5a, 0x3d, 0xcb, 0x22, 0xba, 0xbd, 0xd1, 0xeb, 0xee, 0x10, - 0xab, 0xd9, 0xda, 0x23, 0xed, 0x9e, 0x46, 0xda, 0xdc, 0x51, 0x86, 0xea, 0x0b, 0xc2, 0xe2, 0xb9, - 0xa5, 0x44, 0x2e, 0x9c, 0x22, 0xcd, 0x56, 0x41, 0xe7, 0x43, 0xeb, 0x2a, 0xa5, 0x1e, 0x66, 0x8e, - 0x63, 0x7a, 0xab, 0xb0, 0x11, 0xe3, 0xc0, 0x09, 0x52, 0xcc, 0xc6, 0x36, 0xa1, 0xaa, 0x45, 0xda, - 0x51, 0x1b, 0xf3, 0x61, 0x1b, 0x97, 0x13, 0xb9, 0x70, 0x8a, 0x34, 0xba, 0x0b, 0xa3, 0x8e, 0x36, - 0xbe, 0x7f, 0x62, 0xa3, 0x67, 0x04, 0xd8, 0xe8, 0x86, 0x4f, 0xc2, 0x41, 0x3e, 0x36, 0x35, 0x63, - 0x87, 0x12, 0xeb, 0x80, 0xb4, 0xd3, 0x37, 0x78, 0x33, 0xc6, 0x81, 0x13, 0xa4, 0xd8, 0xd4, 0x1c, - 0x0f, 0x8c, 0x4d, 0x6d, 0x38, 0x3c, 0xb5, 0xed, 0x44, 0x2e, 0x9c, 0x22, 0xcd, 0xfc, 0xd8, 0x31, - 0x79, 0xf1, 0x40, 0x51, 0x35, 0x65, 0x47, 0x23, 0xe5, 0x62, 0xd8, 0x8f, 0x37, 0xc2, 0x64, 0x1c, - 0xe5, 0x47, 0x8f, 0x61, 0xda, 0x19, 0xda, 0xd6, 0x15, 0x0f, 0xa4, 0xc4, 0x41, 0x7e, 0x22, 0x40, - 0xa6, 0x37, 0xa2, 0x0c, 0x38, 0x2e, 0x83, 0x1e, 0xc0, 0x44, 0xcb, 0xd0, 0x34, 0xee, 0x8f, 0x4b, - 0x46, 0x4f, 0xb7, 0xcb, 0x23, 0x1c, 0x05, 0xb1, 0xf3, 0xb8, 0x14, 0xa2, 0xe0, 0x08, 0x27, 0x22, - 0x00, 0x2d, 0x37, 0xe1, 0xd0, 0x32, 0xf0, 0xf8, 0x78, 0x2b, 0x6b, 0x0c, 0xf0, 0x52, 0x95, 0x5f, - 0x03, 0x78, 0x43, 0x14, 0x07, 0x80, 0xe5, 0x7f, 0x95, 0x60, 0x3e, 0x25, 0x74, 0xa0, 0x5f, 0x86, - 0x52, 0xec, 0x6f, 0x46, 0x52, 0xec, 0xe5, 0x14, 0xb1, 0x40, 0x9e, 0xd5, 0x61, 0xdc, 0x62, 0xb3, - 0xd2, 0x3b, 0x0e, 0x8b, 0x88, 0x91, 0x77, 0x07, 0x4c, 0x03, 0x07, 0x65, 0xfc, 0x98, 0x3f, 0x7d, - 0x7c, 0x54, 0x19, 0x0f, 0xd1, 0x70, 0x18, 0x5e, 0xfe, 0x8b, 0x1c, 0xc0, 0x32, 0x31, 0x35, 0xa3, - 0xdf, 0x25, 0xfa, 0x79, 0xd4, 0x50, 0x9b, 0xa1, 0x1a, 0xea, 0xe6, 0xa0, 0xed, 0xf1, 0x4c, 0x4b, - 0x2d, 0xa2, 0xde, 0x8d, 0x14, 0x51, 0xb5, 0xec, 0x90, 0x27, 0x57, 0x51, 0xff, 0x91, 0x87, 0x19, - 0x9f, 0xd9, 0x2f, 0xa3, 0x1e, 0x86, 0xf6, 0xf8, 0x37, 0x22, 0x7b, 0x3c, 0x9f, 0x20, 0xf2, 0xca, - 0xea, 0xa8, 0x67, 0x30, 0xc1, 0xaa, 0x1c, 0x67, 0x2f, 0x79, 0x0d, 0x35, 0x7c, 0xea, 0x1a, 0xca, - 0xcb, 0x76, 0x6b, 0x21, 0x24, 0x1c, 0x41, 0x4e, 0xa9, 0xd9, 0x8a, 0x3f, 0xc6, 0x9a, 0xed, 0x4b, - 0x09, 0x26, 0xfc, 0x6d, 0x3a, 0x87, 0xa2, 0x6d, 0x23, 0x5c, 0xb4, 0xbd, 0x9e, 0xd9, 0x45, 0x53, - 0xaa, 0xb6, 0xff, 0x65, 0x05, 0xbe, 0xc7, 0xc4, 0x0e, 0xf8, 0x8e, 0xd2, 0xda, 0x1f, 0x7c, 0xc7, - 0x43, 0x9f, 0x49, 0x80, 0x44, 0x16, 0x58, 0xd4, 0x75, 0xc3, 0x56, 0x9c, 0x58, 0xe9, 0x98, 0xb5, - 0x9a, 0xd9, 0x2c, 0x57, 0x63, 0x75, 0x3b, 0x86, 0xf5, 0x48, 0xb7, 0xad, 0xbe, 0xbf, 0xc9, 0x71, - 0x06, 0x9c, 0x60, 0x00, 0x52, 0x00, 0x2c, 0x81, 0xb9, 0x65, 0x88, 0x83, 0x7c, 0x33, 0x43, 0xcc, - 0x63, 0x02, 0x4b, 0x86, 0xbe, 0xab, 0x76, 0xfc, 0xb0, 0x83, 0x3d, 0x20, 0x1c, 0x00, 0xbd, 0xf4, - 0x08, 0xe6, 0x53, 0xac, 0x45, 0x53, 0x90, 0xdf, 0x27, 0x7d, 0x67, 0xd9, 0x30, 0xfb, 0x13, 0xcd, - 0xc2, 0xd0, 0x81, 0xa2, 0xf5, 0x9c, 0xf0, 0x3b, 0x82, 0x9d, 0x1f, 0x0f, 0x72, 0xf7, 0x25, 0xf9, - 0x8b, 0xa1, 0xa0, 0xef, 0xf0, 0x8a, 0xf9, 0x3a, 0xbb, 0xb4, 0x9a, 0x9a, 0xda, 0x52, 0xa8, 0x28, - 0x84, 0xc6, 0x9c, 0x0b, 0xab, 0x33, 0x86, 0x3d, 0x6a, 0xa8, 0xb6, 0xce, 0xbd, 0xda, 0xda, 0x3a, - 0xff, 0x72, 0x6a, 0xeb, 0xdf, 0x83, 0x12, 0x75, 0xab, 0xea, 0x02, 0x87, 0xbc, 0x75, 0x8a, 0xf8, - 0x2a, 0x0a, 0x6a, 0x4f, 0x81, 0x57, 0x4a, 0x7b, 0xa0, 0x49, 0x45, 0xf4, 0xd0, 0x29, 0x8b, 0xe8, - 0x97, 0x5a, 0xf8, 0xb2, 0x78, 0x63, 0x2a, 0x3d, 0x4a, 0xda, 0x3c, 0xb6, 0x95, 0xfc, 0x78, 0xd3, - 0xe0, 0xa3, 0x58, 0x50, 0xd1, 0x07, 0x21, 0x97, 0x2d, 0x9d, 0xc5, 0x65, 0x27, 0xd2, 0xdd, 0x15, - 0x6d, 0xc3, 0xbc, 0x69, 0x19, 0x1d, 0x8b, 0x50, 0xba, 0x4c, 0x94, 0xb6, 0xa6, 0xea, 0xc4, 0x5d, - 0x1f, 0xa7, 0x22, 0xba, 0x7c, 0x7c, 0x54, 0x99, 0x6f, 0x24, 0xb3, 0xe0, 0x34, 0x59, 0xf9, 0x79, - 0x01, 0xa6, 0xa2, 0x19, 0x30, 0xa5, 0x48, 0x95, 0xce, 0x54, 0xa4, 0xde, 0x08, 0x1c, 0x06, 0xa7, - 0x82, 0x0f, 0xbc, 0xe0, 0xc4, 0x0e, 0xc4, 0x22, 0x4c, 0x8a, 0x68, 0xe0, 0x12, 0x45, 0x99, 0xee, - 0xed, 0xfe, 0x76, 0x98, 0x8c, 0xa3, 0xfc, 0xe8, 0x21, 0x8c, 0x5b, 0xbc, 0xee, 0x76, 0x01, 0x9c, - 0xda, 0xf5, 0xa2, 0x00, 0x18, 0xc7, 0x41, 0x22, 0x0e, 0xf3, 0xb2, 0xba, 0xd5, 0x2f, 0x47, 0x5d, - 0x80, 0x42, 0xb8, 0x6e, 0x5d, 0x8c, 0x32, 0xe0, 0xb8, 0x0c, 0x5a, 0x87, 0x99, 0x9e, 0x1e, 0x87, - 0x72, 0x5c, 0xf9, 0xb2, 0x80, 0x9a, 0xd9, 0x8e, 0xb3, 0xe0, 0x24, 0x39, 0xb4, 0x1b, 0x2a, 0x65, - 0x87, 0x79, 0x78, 0xbe, 0x9d, 0xf9, 0xe0, 0x65, 0xae, 0x65, 0x13, 0xca, 0xed, 0x52, 0xd6, 0x72, - 0x5b, 0xfe, 0x27, 0x29, 0x98, 0x84, 0xbc, 0x12, 0x78, 0xd0, 0x2b, 0x53, 0x4c, 0x22, 0x50, 0x1d, - 0x19, 0xc9, 0xd5, 0xef, 0xbd, 0x53, 0x55, 0xbf, 0x7e, 0xf2, 0x1c, 0x5c, 0xfe, 0x7e, 0x2e, 0xc1, - 0xdc, 0x4a, 0xf3, 0xb1, 0x65, 0xf4, 0x4c, 0xd7, 0x9c, 0x4d, 0xd3, 0x59, 0x9a, 0x9f, 0x43, 0xc1, - 0xea, 0x69, 0xee, 0x3c, 0x5e, 0x73, 0xe7, 0x81, 0x7b, 0x1a, 0x9b, 0xc7, 0x4c, 0x44, 0xca, 0x99, - 0x04, 0x13, 0x40, 0x1b, 0x30, 0x6c, 0x29, 0x7a, 0x87, 0xb8, 0x69, 0xf5, 0xda, 0x00, 0xeb, 0x57, - 0x97, 0x31, 0x63, 0x0f, 0x14, 0x36, 0x5c, 0x1a, 0x0b, 0x14, 0xf9, 0x9f, 0x25, 0x98, 0x7c, 0xb2, - 0xb5, 0xd5, 0x58, 0xd5, 0xf9, 0x89, 0xe6, 0x6f, 0xab, 0x57, 0xa1, 0x60, 0x2a, 0xf6, 0x5e, 0x34, - 0xd3, 0x33, 0x1a, 0xe6, 0x14, 0x74, 0x07, 0x4a, 0xec, 0x5f, 0x66, 0x17, 0x3f, 0x52, 0x23, 0x3c, - 0x10, 0x96, 0x1a, 0x62, 0xec, 0x45, 0xe0, 0x6f, 0xec, 0x71, 0xa2, 0xf7, 0xa0, 0xc8, 0xe2, 0x0f, - 0xd1, 0xdb, 0x19, 0x0b, 0x74, 0x61, 0x54, 0xdd, 0x11, 0xf2, 0x6b, 0x2e, 0x31, 0x80, 0x5d, 0x38, - 0x79, 0x1f, 0x66, 0x03, 0x93, 0x60, 0xab, 0xf8, 0x94, 0xe5, 0x54, 0xd4, 0x84, 0x21, 0xa6, 0x9d, - 0x65, 0xce, 0x7c, 0x86, 0x27, 0xd0, 0xc8, 0x42, 0xf8, 0xf5, 0x11, 0xfb, 0x45, 0xb1, 0x83, 0x25, - 0xaf, 0xc3, 0x38, 0x7f, 0x86, 0x36, 0x2c, 0x9b, 0x2f, 0x26, 0xba, 0x02, 0xf9, 0xae, 0xaa, 0x8b, - 0xec, 0x3c, 0x2a, 0x64, 0xf2, 0x2c, 0xb3, 0xb0, 0x71, 0x4e, 0x56, 0x0e, 0x45, 0xbc, 0xf2, 0xc9, - 0xca, 0x21, 0x66, 0xe3, 0xf2, 0x63, 0x28, 0x8a, 0x4d, 0x0a, 0x02, 0xe5, 0x4f, 0x06, 0xca, 0x27, - 0x00, 0x6d, 0x42, 0x71, 0xb5, 0x51, 0xd7, 0x0c, 0xa7, 0x56, 0x6b, 0xa9, 0x6d, 0x2b, 0xba, 0x83, - 0x4b, 0xab, 0xcb, 0x18, 0x73, 0x0a, 0x92, 0x61, 0x98, 0x1c, 0xb6, 0x88, 0x69, 0x73, 0x3f, 0x1a, - 0xa9, 0x03, 0xf3, 0x8d, 0x47, 0x7c, 0x04, 0x0b, 0x8a, 0xfc, 0x27, 0x39, 0x28, 0x8a, 0xe5, 0x38, - 0x87, 0xbb, 0xdb, 0x5a, 0xe8, 0xee, 0xf6, 0x46, 0x36, 0xd7, 0x48, 0xbd, 0xb8, 0x6d, 0x45, 0x2e, - 0x6e, 0x37, 0x32, 0xe2, 0x9d, 0x7c, 0x6b, 0xfb, 0x34, 0x07, 0x13, 0x61, 0xa7, 0x44, 0x77, 0x61, - 0x94, 0xa5, 0x29, 0xb5, 0x45, 0x36, 0xfc, 0xea, 0xd8, 0x7b, 0xba, 0x69, 0xfa, 0x24, 0x1c, 0xe4, - 0x43, 0x1d, 0x4f, 0x8c, 0xf9, 0x91, 0x98, 0x74, 0xfa, 0x92, 0xf6, 0x6c, 0x55, 0xab, 0x3a, 0x1f, - 0x64, 0xaa, 0xab, 0xba, 0xbd, 0x69, 0x35, 0x6d, 0x4b, 0xd5, 0x3b, 0x31, 0x45, 0xdc, 0x29, 0x83, - 0xc8, 0xe8, 0x5d, 0x96, 0x32, 0xa9, 0xd1, 0xb3, 0x5a, 0x24, 0xa9, 0xf4, 0x75, 0xcb, 0x36, 0x76, - 0x40, 0xdb, 0x6b, 0x46, 0x4b, 0xd1, 0x9c, 0xcd, 0xc1, 0x64, 0x97, 0x58, 0x44, 0x6f, 0x11, 0xb7, - 0xdc, 0x74, 0x20, 0xb0, 0x07, 0x26, 0xff, 0x83, 0x04, 0xa3, 0x62, 0x2d, 0xce, 0xe1, 0x92, 0xf3, - 0x3b, 0xe1, 0x4b, 0xce, 0xb5, 0x8c, 0x91, 0x23, 0xf9, 0x86, 0xf3, 0xd7, 0xbe, 0xe9, 0x2c, 0x56, - 0xb0, 0xe3, 0xb2, 0x67, 0x50, 0x3b, 0x7a, 0x5c, 0xd8, 0x29, 0xc7, 0x9c, 0x82, 0x7a, 0x30, 0xa5, - 0x46, 0x82, 0x8b, 0xd8, 0xb3, 0x5a, 0x36, 0x4b, 0x3c, 0xb1, 0x7a, 0x59, 0xc0, 0x4f, 0x45, 0x29, - 0x38, 0xa6, 0x42, 0x26, 0x10, 0xe3, 0x42, 0xef, 0x40, 0x61, 0xcf, 0xb6, 0xcd, 0x84, 0xe7, 0xf3, - 0x01, 0x21, 0xcd, 0x37, 0xa1, 0xc4, 0x67, 0xb7, 0xb5, 0xd5, 0xc0, 0x1c, 0x4a, 0xfe, 0xc7, 0x9c, - 0xb7, 0x1e, 0xfc, 0xce, 0xf1, 0xb6, 0x37, 0xdb, 0x25, 0x4d, 0xa1, 0x94, 0x3b, 0xb6, 0x73, 0x3f, - 0x9e, 0x0d, 0x18, 0xee, 0xd1, 0x70, 0x8c, 0x1b, 0x6d, 0xf9, 0xa1, 0x5e, 0x3a, 0x4b, 0xa8, 0x1f, - 0x4d, 0x0a, 0xf3, 0xe8, 0x09, 0xe4, 0x6d, 0x2d, 0xeb, 0x3d, 0x57, 0x20, 0x6e, 0xad, 0x35, 0xfd, - 0x58, 0xb9, 0xb5, 0xd6, 0xc4, 0x0c, 0x02, 0x6d, 0xc2, 0x10, 0x4b, 0xa7, 0x2c, 0x3a, 0xe4, 0xb3, - 0x47, 0x1b, 0xb6, 0x82, 0xbe, 0x4b, 0xb1, 0x5f, 0x14, 0x3b, 0x38, 0xf2, 0xc7, 0x30, 0x1e, 0x0a, - 0x21, 0xe8, 0x23, 0x18, 0xd3, 0x0c, 0xa5, 0x5d, 0x57, 0x34, 0x45, 0x6f, 0x11, 0xf7, 0x6b, 0xc7, - 0xb5, 0xa4, 0xb3, 0xb7, 0x16, 0xe0, 0x13, 0x01, 0x68, 0x56, 0x28, 0x19, 0x0b, 0xd2, 0x70, 0x08, - 0x51, 0x56, 0x00, 0xfc, 0x39, 0xa2, 0x0a, 0x0c, 0x31, 0x4f, 0x75, 0x52, 0xdd, 0x48, 0x7d, 0x84, - 0x59, 0xc8, 0x1c, 0x98, 0x62, 0x67, 0x1c, 0xdd, 0x06, 0xa0, 0xa4, 0x65, 0x11, 0x9b, 0x6f, 0x67, - 0x2e, 0xfc, 0xc5, 0xb4, 0xe9, 0x51, 0x70, 0x80, 0x4b, 0xfe, 0x17, 0x09, 0xc6, 0x37, 0x88, 0xfd, - 0x89, 0x61, 0xed, 0x37, 0x0c, 0x4d, 0x6d, 0xf5, 0xcf, 0x21, 0x0f, 0xe0, 0x50, 0x1e, 0x78, 0x73, - 0xc0, 0xce, 0x84, 0xac, 0x4b, 0xcb, 0x06, 0xf2, 0x97, 0x12, 0xcc, 0x87, 0x38, 0x1f, 0xf9, 0x87, - 0x7f, 0x1b, 0x86, 0x4c, 0xc3, 0xb2, 0xdd, 0x1a, 0xe1, 0x54, 0x0a, 0x59, 0x84, 0x0d, 0x54, 0x09, - 0x0c, 0x06, 0x3b, 0x68, 0x68, 0x0d, 0x72, 0xb6, 0x21, 0x5c, 0xf5, 0x74, 0x98, 0x84, 0x58, 0x75, - 0x10, 0x98, 0xb9, 0x2d, 0x03, 0xe7, 0x6c, 0x83, 0x6d, 0x44, 0x39, 0xc4, 0x15, 0x0c, 0x5f, 0xaf, - 0x68, 0x06, 0x18, 0x0a, 0xbb, 0x96, 0xd1, 0x3d, 0xf3, 0x1c, 0xbc, 0x8d, 0x58, 0xb1, 0x8c, 0x2e, - 0xe6, 0x58, 0xf2, 0x57, 0x12, 0x4c, 0x87, 0x38, 0xcf, 0x21, 0x75, 0xbc, 0x13, 0x4e, 0x1d, 0x37, - 0x4e, 0x33, 0x91, 0x94, 0x04, 0xf2, 0x55, 0x2e, 0x32, 0x0d, 0x36, 0x61, 0xb4, 0x0b, 0xa3, 0xa6, - 0xd1, 0x6e, 0xbe, 0x84, 0xef, 0x9b, 0x93, 0x2c, 0xa5, 0x37, 0x7c, 0x2c, 0x1c, 0x04, 0x46, 0x87, - 0x30, 0xad, 0x2b, 0x5d, 0x42, 0x4d, 0xa5, 0x45, 0x9a, 0x2f, 0xe1, 0xc5, 0xe7, 0x22, 0xff, 0x80, - 0x12, 0x45, 0xc4, 0x71, 0x25, 0x68, 0x1d, 0x8a, 0xaa, 0xc9, 0x4b, 0x4c, 0x51, 0x4b, 0x0c, 0xcc, - 0xc3, 0x4e, 0x41, 0xea, 0xc4, 0x73, 0xf1, 0x03, 0xbb, 0x18, 0xf2, 0xdf, 0x44, 0xbd, 0x81, 0x57, - 0x2c, 0x8f, 0xa1, 0xc4, 0x3b, 0x4d, 0x5a, 0x86, 0xe6, 0x7e, 0xea, 0xe0, 0x97, 0x0b, 0x31, 0xf6, - 0xe2, 0xa8, 0x72, 0x39, 0xe1, 0x15, 0xdb, 0x25, 0x63, 0x4f, 0x18, 0x6d, 0x40, 0xc1, 0xfc, 0x21, - 0xc5, 0x15, 0x4f, 0x93, 0xbc, 0xa2, 0xe2, 0x38, 0xf2, 0x1f, 0xe6, 0x23, 0xe6, 0xf2, 0x64, 0xf9, - 0xec, 0xa5, 0xed, 0xba, 0x57, 0xcc, 0xa5, 0xee, 0xfc, 0x0e, 0x14, 0x45, 0xaa, 0x15, 0xce, 0xfc, - 0xf3, 0xd3, 0x38, 0x73, 0x30, 0x8b, 0x79, 0x77, 0x29, 0x77, 0xd0, 0x05, 0x46, 0x1f, 0xc2, 0x30, - 0x71, 0x54, 0x38, 0xb9, 0xf1, 0xde, 0x69, 0x54, 0xf8, 0x71, 0xd5, 0xaf, 0xa1, 0xc5, 0x98, 0x40, - 0x45, 0xbf, 0x64, 0xeb, 0xc5, 0x78, 0x59, 0xc9, 0x49, 0xcb, 0x05, 0x9e, 0xae, 0xae, 0x38, 0xd3, - 0xf6, 0x86, 0x5f, 0x1c, 0x55, 0xc0, 0xff, 0x89, 0x83, 0x12, 0xf2, 0xbf, 0x49, 0x30, 0xcd, 0x57, - 0xa8, 0xd5, 0xb3, 0x54, 0xbb, 0x7f, 0x6e, 0x89, 0xe9, 0x69, 0x28, 0x31, 0xdd, 0x19, 0xb0, 0x2c, - 0x31, 0x0b, 0x53, 0x93, 0xd3, 0xd7, 0x12, 0x5c, 0x8c, 0x71, 0x9f, 0x43, 0x5c, 0xdc, 0x0e, 0xc7, - 0xc5, 0x37, 0x4f, 0x3b, 0xa1, 0x94, 0xd8, 0xf8, 0x3f, 0xd3, 0x09, 0xd3, 0xe1, 0x27, 0xe5, 0x36, - 0x80, 0x69, 0xa9, 0x07, 0xaa, 0x46, 0x3a, 0xe2, 0xab, 0x7e, 0x29, 0xd0, 0xb3, 0xe5, 0x51, 0x70, - 0x80, 0x0b, 0x51, 0x98, 0x6b, 0x93, 0x5d, 0xa5, 0xa7, 0xd9, 0x8b, 0xed, 0xf6, 0x92, 0x62, 0x2a, - 0x3b, 0xaa, 0xa6, 0xda, 0xaa, 0x78, 0xff, 0x18, 0xa9, 0x3f, 0x74, 0xbe, 0xb6, 0x27, 0x71, 0xbc, - 0x38, 0xaa, 0x5c, 0x49, 0xfa, 0xdc, 0xe5, 0xb2, 0xf4, 0x71, 0x0a, 0x34, 0xea, 0x43, 0xd9, 0x22, - 0x1f, 0xf7, 0x54, 0x8b, 0xb4, 0x97, 0x2d, 0xc3, 0x0c, 0xa9, 0xcd, 0x73, 0xb5, 0xbf, 0x7d, 0x7c, - 0x54, 0x29, 0xe3, 0x14, 0x9e, 0xc1, 0x8a, 0x53, 0xe1, 0xd1, 0x33, 0x98, 0x51, 0x44, 0x77, 0x5d, - 0x50, 0xab, 0x73, 0x4a, 0xee, 0x1f, 0x1f, 0x55, 0x66, 0x16, 0xe3, 0xe4, 0xc1, 0x0a, 0x93, 0x40, - 0x51, 0x0d, 0x8a, 0x07, 0xbc, 0x11, 0x8f, 0x96, 0x87, 0x38, 0x3e, 0x4b, 0x04, 0x45, 0xa7, 0x37, - 0x8f, 0x61, 0x0e, 0xaf, 0x34, 0xf9, 0xe9, 0x73, 0xb9, 0xd8, 0x5d, 0x97, 0xd5, 0x92, 0xe2, 0xc4, - 0xf3, 0x27, 0xf0, 0x92, 0x1f, 0xb5, 0x9e, 0xf8, 0x24, 0x1c, 0xe4, 0x43, 0x1f, 0xc0, 0xc8, 0x9e, - 0x78, 0x30, 0xa1, 0xe5, 0x62, 0xa6, 0x24, 0x1c, 0x7a, 0x60, 0xa9, 0x4f, 0x0b, 0x15, 0x23, 0xee, - 0x30, 0xc5, 0x3e, 0x22, 0x7a, 0x1d, 0x8a, 0xfc, 0xc7, 0xea, 0x32, 0x7f, 0x5f, 0x2c, 0xf9, 0xb1, - 0xed, 0x89, 0x33, 0x8c, 0x5d, 0xba, 0xcb, 0xba, 0xda, 0x58, 0xe2, 0xef, 0xdc, 0x11, 0xd6, 0xd5, - 0xc6, 0x12, 0x76, 0xe9, 0xe8, 0x23, 0x28, 0x52, 0xb2, 0xa6, 0xea, 0xbd, 0xc3, 0x32, 0x64, 0xfa, - 0x4a, 0xde, 0x7c, 0xc4, 0xb9, 0x23, 0x2f, 0x7d, 0xbe, 0x06, 0x41, 0xc7, 0x2e, 0x2c, 0xda, 0x83, - 0x11, 0xab, 0xa7, 0x2f, 0xd2, 0x6d, 0x4a, 0xac, 0xf2, 0x28, 0xd7, 0x31, 0x28, 0x9c, 0x63, 0x97, - 0x3f, 0xaa, 0xc5, 0x5b, 0x21, 0x8f, 0x03, 0xfb, 0xe0, 0x68, 0x0f, 0x80, 0xff, 0xe0, 0x8f, 0x8a, - 0xe5, 0x39, 0xae, 0xea, 0x7e, 0x16, 0x55, 0x49, 0x6f, 0x97, 0xe2, 0xc3, 0x82, 0x47, 0xc6, 0x01, - 0x6c, 0xf4, 0xc7, 0x12, 0x20, 0xda, 0x33, 0x4d, 0x8d, 0x74, 0x89, 0x6e, 0x2b, 0x1a, 0x1f, 0xa5, - 0xe5, 0x31, 0xae, 0xf2, 0xed, 0x41, 0x2b, 0x18, 0x13, 0x8c, 0xaa, 0xf6, 0xbe, 0x17, 0xc4, 0x59, - 0x71, 0x82, 0x5e, 0xb6, 0x89, 0xbb, 0x62, 0xd6, 0xe3, 0x99, 0x36, 0x31, 0xf9, 0xb9, 0xd6, 0xdf, - 0x44, 0x41, 0xc7, 0x2e, 0x2c, 0x7a, 0x0a, 0x73, 0x6e, 0xc7, 0x28, 0x36, 0x0c, 0x7b, 0x45, 0xd5, - 0x08, 0xed, 0x53, 0x9b, 0x74, 0xcb, 0x13, 0xdc, 0xc1, 0xbc, 0xb6, 0x19, 0x9c, 0xc8, 0x85, 0x53, - 0xa4, 0x51, 0x17, 0x2a, 0x6e, 0x70, 0x62, 0x27, 0xd7, 0x8b, 0x8e, 0x8f, 0x68, 0x4b, 0xd1, 0x9c, - 0x4f, 0x28, 0x93, 0x5c, 0xc1, 0x6b, 0xc7, 0x47, 0x95, 0xca, 0xf2, 0xc9, 0xac, 0x78, 0x10, 0x16, - 0x7a, 0x0f, 0xca, 0x4a, 0x9a, 0x9e, 0x29, 0xae, 0xe7, 0xa7, 0x2c, 0xe2, 0xa5, 0x2a, 0x48, 0x95, - 0x46, 0x36, 0x4c, 0x29, 0xe1, 0xde, 0x5d, 0x5a, 0x9e, 0xce, 0xf4, 0x1a, 0x1b, 0x69, 0xf9, 0xf5, - 0x1f, 0x4e, 0x22, 0x04, 0x8a, 0x63, 0x1a, 0xd0, 0xef, 0x03, 0x52, 0xa2, 0xed, 0xc6, 0xb4, 0x8c, - 0x32, 0x25, 0xba, 0x58, 0x9f, 0xb2, 0xef, 0x76, 0x31, 0x12, 0xc5, 0x09, 0x7a, 0x58, 0x81, 0xae, - 0x44, 0x5a, 0xa4, 0x69, 0x79, 0x9e, 0x2b, 0xaf, 0x65, 0x53, 0xee, 0xc9, 0x05, 0xbe, 0x14, 0x45, - 0x11, 0x71, 0x5c, 0x09, 0x5a, 0x83, 0x59, 0x31, 0xb8, 0xad, 0x53, 0x65, 0x97, 0x34, 0xfb, 0xb4, - 0x65, 0x6b, 0xb4, 0x3c, 0xc3, 0xe3, 0x3b, 0xff, 0x5a, 0xb9, 0x98, 0x40, 0xc7, 0x89, 0x52, 0xe8, - 0x6d, 0x98, 0xda, 0x35, 0xac, 0x1d, 0xb5, 0xdd, 0x26, 0xba, 0x8b, 0x34, 0xcb, 0x91, 0xf8, 0x3b, - 0xd0, 0x4a, 0x84, 0x86, 0x63, 0xdc, 0x88, 0xc2, 0x45, 0x81, 0xdc, 0xb0, 0x8c, 0xd6, 0xba, 0xd1, - 0xd3, 0x6d, 0xa7, 0xec, 0xbb, 0xe8, 0xa5, 0xd1, 0x8b, 0x8b, 0x49, 0x0c, 0x2f, 0x8e, 0x2a, 0x57, - 0x93, 0xab, 0x7c, 0x9f, 0x09, 0x27, 0x63, 0x23, 0x13, 0xc6, 0x44, 0xe3, 0x3b, 0x7f, 0x90, 0x2a, - 0x97, 0xf9, 0xd1, 0x7f, 0x30, 0x38, 0xe0, 0x79, 0x22, 0xd1, 0xf3, 0x3f, 0x75, 0x7c, 0x54, 0x19, - 0x0b, 0x32, 0xe0, 0x90, 0x06, 0xde, 0xe8, 0x24, 0x3e, 0xaf, 0x9d, 0x4f, 0xb3, 0xf8, 0xe9, 0x1a, - 0x9d, 0x7c, 0xd3, 0x5e, 0x5a, 0xa3, 0x53, 0x00, 0xf2, 0xe4, 0x27, 0xf3, 0xff, 0xce, 0xc1, 0x8c, - 0xcf, 0x9c, 0xb9, 0xd1, 0x29, 0x41, 0xe4, 0xd7, 0x0d, 0xe3, 0xd9, 0x9a, 0x8f, 0xfc, 0xa5, 0xfb, - 0xff, 0xd7, 0x7c, 0xe4, 0xdb, 0x96, 0x72, 0x7b, 0xf8, 0xbb, 0x5c, 0x70, 0x02, 0xa7, 0xec, 0x80, - 0x79, 0x09, 0x3d, 0xd3, 0x3f, 0xba, 0x26, 0x1a, 0xf9, 0xeb, 0x3c, 0x4c, 0x45, 0x4f, 0x63, 0xa8, - 0x51, 0x42, 0x1a, 0xd8, 0x28, 0xd1, 0x80, 0xd9, 0xdd, 0x9e, 0xa6, 0xf5, 0xf9, 0x1c, 0x02, 0xdd, - 0x12, 0xce, 0x27, 0xcb, 0x9f, 0x0a, 0xc9, 0xd9, 0x95, 0x04, 0x1e, 0x9c, 0x28, 0x19, 0xef, 0x9b, - 0x28, 0xfc, 0xd0, 0xbe, 0x89, 0xa1, 0x33, 0xf4, 0x4d, 0x24, 0xb7, 0x9e, 0xe4, 0xcf, 0xd4, 0x7a, - 0x72, 0x96, 0xa6, 0x89, 0x84, 0x20, 0x36, 0xb0, 0x01, 0xf8, 0x17, 0x30, 0x11, 0x6e, 0xe4, 0x71, - 0xf6, 0xd2, 0xe9, 0x25, 0x12, 0x9f, 0x86, 0x03, 0x7b, 0xe9, 0x8c, 0x63, 0x8f, 0x43, 0xfe, 0x23, - 0x09, 0xe6, 0x92, 0x1b, 0x76, 0x91, 0x06, 0x13, 0x5d, 0xe5, 0x30, 0xd8, 0x44, 0x2d, 0x9d, 0xf1, - 0x65, 0x8c, 0x77, 0x70, 0xac, 0x87, 0xb0, 0x70, 0x04, 0x5b, 0xfe, 0x5e, 0x82, 0xf9, 0x94, 0xde, - 0x89, 0xf3, 0xb5, 0x04, 0xbd, 0x0f, 0xa5, 0xae, 0x72, 0xd8, 0xec, 0x59, 0x1d, 0x72, 0xe6, 0xb7, - 0x40, 0x7e, 0xa0, 0xd7, 0x05, 0x0a, 0xf6, 0xf0, 0xe4, 0xbf, 0x92, 0xe0, 0x27, 0xa9, 0x57, 0x25, - 0x74, 0x2f, 0xd4, 0xe6, 0x21, 0x47, 0xda, 0x3c, 0x50, 0x5c, 0xf0, 0x15, 0x75, 0x79, 0x7c, 0x2e, - 0x41, 0x39, 0xed, 0xee, 0x88, 0xee, 0x86, 0x8c, 0xfc, 0x59, 0xc4, 0xc8, 0xe9, 0x98, 0xdc, 0x2b, - 0xb2, 0xf1, 0xdf, 0x25, 0xb8, 0x7c, 0x42, 0x0d, 0xe6, 0x5d, 0x51, 0x48, 0x3b, 0xc8, 0xc5, 0x9f, - 0xad, 0xc5, 0x37, 0x2f, 0xff, 0x8a, 0x92, 0xc0, 0x83, 0x53, 0xa5, 0xd1, 0x36, 0xcc, 0x8b, 0xfb, - 0x51, 0x94, 0x26, 0xca, 0x0b, 0xde, 0x0d, 0xb7, 0x9c, 0xcc, 0x82, 0xd3, 0x64, 0xe5, 0xbf, 0x95, - 0x60, 0x2e, 0xf9, 0x51, 0x00, 0xbd, 0x15, 0x5a, 0xf2, 0x4a, 0x64, 0xc9, 0x27, 0x23, 0x52, 0x62, - 0xc1, 0x3f, 0x84, 0x09, 0xf1, 0x74, 0x20, 0x60, 0x84, 0x33, 0xcb, 0x49, 0x19, 0x44, 0x40, 0xb8, - 0x05, 0x2c, 0x3f, 0x26, 0xe1, 0x31, 0x1c, 0x41, 0x93, 0x3f, 0xcd, 0xc1, 0x50, 0xb3, 0xa5, 0x68, - 0xe4, 0x1c, 0xea, 0xd7, 0x5f, 0x85, 0xea, 0xd7, 0x41, 0xff, 0xcf, 0x8c, 0x5b, 0x95, 0x5a, 0xba, - 0xe2, 0x48, 0xe9, 0xfa, 0x46, 0x26, 0xb4, 0x93, 0xab, 0xd6, 0xdf, 0x82, 0x11, 0x4f, 0xe9, 0xe9, - 0x92, 0xa9, 0xfc, 0x97, 0x39, 0x18, 0x0d, 0xa8, 0x38, 0x65, 0x2a, 0xde, 0x0d, 0xd5, 0x1f, 0xf9, - 0x0c, 0x0f, 0x35, 0x01, 0x5d, 0x55, 0xb7, 0xe2, 0x70, 0xfa, 0xa4, 0xfd, 0xce, 0xd8, 0x78, 0x21, - 0xf2, 0x0b, 0x98, 0xb0, 0x15, 0xab, 0x43, 0x6c, 0xef, 0xc3, 0x85, 0xd3, 0xc7, 0xe5, 0x35, 0xec, - 0x6f, 0x85, 0xa8, 0x38, 0xc2, 0x7d, 0xe9, 0x21, 0x8c, 0x87, 0x94, 0x9d, 0xaa, 0xcd, 0xf9, 0xef, - 0x25, 0xf8, 0xd9, 0xc0, 0xc7, 0x1e, 0x54, 0x0f, 0x1d, 0x92, 0x6a, 0xe4, 0x90, 0x2c, 0xa4, 0x03, - 0xbc, 0xba, 0x76, 0xb9, 0xfa, 0xcd, 0xe7, 0xdf, 0x2d, 0x5c, 0xf8, 0xe6, 0xbb, 0x85, 0x0b, 0xdf, - 0x7e, 0xb7, 0x70, 0xe1, 0x0f, 0x8e, 0x17, 0xa4, 0xe7, 0xc7, 0x0b, 0xd2, 0x37, 0xc7, 0x0b, 0xd2, - 0xb7, 0xc7, 0x0b, 0xd2, 0x7f, 0x1e, 0x2f, 0x48, 0x7f, 0xfa, 0xfd, 0xc2, 0x85, 0xf7, 0x8b, 0x02, - 0xee, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x98, 0xf4, 0xad, 0x8a, 0xba, 0x3e, 0x00, 0x00, + 0xd3, 0xb3, 0x34, 0x17, 0xc8, 0x21, 0x87, 0x5c, 0x0c, 0x04, 0x48, 0x2e, 0x4e, 0x72, 0x8c, 0x11, + 0x20, 0xb7, 0x20, 0xc7, 0xe4, 0x60, 0x18, 0x09, 0xe2, 0x00, 0x42, 0xe0, 0x04, 0x06, 0x72, 0x88, + 0x4f, 0x44, 0x4c, 0x9f, 0x82, 0x9c, 0x72, 0x0b, 0x74, 0x0a, 0xba, 0xa7, 0xe7, 0x7f, 0x86, 0x3b, + 0xa4, 0x25, 0x22, 0x0e, 0x72, 0x12, 0xb7, 0xab, 0xea, 0xab, 0xea, 0xee, 0xea, 0xaa, 0xea, 0x9e, + 0x12, 0xac, 0xec, 0xdf, 0xa7, 0x55, 0xd5, 0xa8, 0xed, 0xf7, 0x76, 0x88, 0xa5, 0x13, 0x9b, 0xd0, + 0xda, 0x01, 0xd1, 0xdb, 0x86, 0x55, 0x13, 0x04, 0xc5, 0x54, 0x6b, 0xe4, 0xd0, 0x26, 0x3a, 0x55, + 0x0d, 0x9d, 0xd6, 0x0e, 0x6e, 0xed, 0x10, 0x5b, 0xb9, 0x55, 0xeb, 0x10, 0x9d, 0x58, 0x8a, 0x4d, + 0xda, 0x55, 0xd3, 0x32, 0x6c, 0x03, 0x5d, 0x71, 0xd8, 0xab, 0x8a, 0xa9, 0x56, 0x7d, 0xf6, 0xaa, + 0x60, 0xbf, 0x74, 0xb3, 0xa3, 0xda, 0x7b, 0xbd, 0x9d, 0x6a, 0xcb, 0xe8, 0xd6, 0x3a, 0x46, 0xc7, + 0xa8, 0x71, 0xa9, 0x9d, 0xde, 0x2e, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x1c, 0xb4, 0x4b, 0x72, 0x40, + 0x79, 0xcb, 0xb0, 0x48, 0xed, 0x20, 0xa6, 0xf1, 0xd2, 0x1d, 0x9f, 0xa7, 0xab, 0xb4, 0xf6, 0x54, + 0x9d, 0x58, 0xfd, 0x9a, 0xb9, 0xdf, 0x61, 0x03, 0xb4, 0xd6, 0x25, 0xb6, 0x92, 0x24, 0x55, 0x4b, + 0x93, 0xb2, 0x7a, 0xba, 0xad, 0x76, 0x49, 0x4c, 0xe0, 0xde, 0x20, 0x01, 0xda, 0xda, 0x23, 0x5d, + 0x25, 0x26, 0xf7, 0x56, 0x9a, 0x5c, 0xcf, 0x56, 0xb5, 0x9a, 0xaa, 0xdb, 0xd4, 0xb6, 0xa2, 0x42, + 0xf2, 0x1d, 0x98, 0x5a, 0xd4, 0x34, 0xe3, 0x13, 0xd2, 0x5e, 0x6a, 0xae, 0x2e, 0x5b, 0xea, 0x01, + 0xb1, 0xd0, 0x55, 0x28, 0xe8, 0x4a, 0x97, 0x94, 0xa5, 0xab, 0xd2, 0xf5, 0x91, 0xfa, 0xd8, 0xf3, + 0xa3, 0xca, 0x85, 0xe3, 0xa3, 0x4a, 0x61, 0x43, 0xe9, 0x12, 0xcc, 0x29, 0xf2, 0x43, 0x98, 0x16, + 0x52, 0x2b, 0x1a, 0x39, 0x7c, 0x6a, 0x68, 0xbd, 0x2e, 0x41, 0xd7, 0x60, 0xb8, 0xcd, 0x01, 0x84, + 0xe0, 0x84, 0x10, 0x1c, 0x76, 0x60, 0xb1, 0xa0, 0xca, 0x14, 0x26, 0x85, 0xf0, 0x13, 0x83, 0xda, + 0x0d, 0xc5, 0xde, 0x43, 0xb7, 0x01, 0x4c, 0xc5, 0xde, 0x6b, 0x58, 0x64, 0x57, 0x3d, 0x14, 0xe2, + 0x48, 0x88, 0x43, 0xc3, 0xa3, 0xe0, 0x00, 0x17, 0xba, 0x01, 0x25, 0x8b, 0x28, 0xed, 0x4d, 0x5d, + 0xeb, 0x97, 0x73, 0x57, 0xa5, 0xeb, 0xa5, 0xfa, 0x94, 0x90, 0x28, 0x61, 0x31, 0x8e, 0x3d, 0x0e, + 0xf9, 0xb3, 0x1c, 0x8c, 0x2c, 0x2b, 0xa4, 0x6b, 0xe8, 0x4d, 0x62, 0xa3, 0x8f, 0xa0, 0xc4, 0xb6, + 0xab, 0xad, 0xd8, 0x0a, 0xd7, 0x36, 0x7a, 0xfb, 0xcd, 0xaa, 0xef, 0x4e, 0xde, 0xea, 0x55, 0xcd, + 0xfd, 0x0e, 0x1b, 0xa0, 0x55, 0xc6, 0x5d, 0x3d, 0xb8, 0x55, 0xdd, 0xdc, 0x79, 0x46, 0x5a, 0xf6, + 0x3a, 0xb1, 0x15, 0xdf, 0x3e, 0x7f, 0x0c, 0x7b, 0xa8, 0x68, 0x03, 0x0a, 0xd4, 0x24, 0x2d, 0x6e, + 0xd9, 0xe8, 0xed, 0x1b, 0xd5, 0x13, 0x9d, 0xb5, 0xea, 0x59, 0xd6, 0x34, 0x49, 0xcb, 0x5f, 0x71, + 0xf6, 0x0b, 0x73, 0x1c, 0xf4, 0x14, 0x86, 0xa9, 0xad, 0xd8, 0x3d, 0x5a, 0xce, 0x73, 0xc4, 0x6a, + 0x66, 0x44, 0x2e, 0xe5, 0x6f, 0x86, 0xf3, 0x1b, 0x0b, 0x34, 0xf9, 0x3f, 0x72, 0x80, 0x3c, 0xde, + 0x25, 0x43, 0x6f, 0xab, 0xb6, 0x6a, 0xe8, 0xe8, 0x01, 0x14, 0xec, 0xbe, 0xe9, 0xba, 0xc0, 0x35, + 0xd7, 0xa0, 0xad, 0xbe, 0x49, 0x5e, 0x1c, 0x55, 0xe6, 0xe2, 0x12, 0x8c, 0x82, 0xb9, 0x0c, 0x5a, + 0xf3, 0x4c, 0xcd, 0x71, 0xe9, 0x3b, 0x61, 0xd5, 0x2f, 0x8e, 0x2a, 0x09, 0x87, 0xad, 0xea, 0x21, + 0x85, 0x0d, 0x44, 0x07, 0x80, 0x34, 0x85, 0xda, 0x5b, 0x96, 0xa2, 0x53, 0x47, 0x93, 0xda, 0x25, + 0x62, 0x11, 0xde, 0xc8, 0xb6, 0x69, 0x4c, 0xa2, 0x7e, 0x49, 0x58, 0x81, 0xd6, 0x62, 0x68, 0x38, + 0x41, 0x03, 0xf3, 0x66, 0x8b, 0x28, 0xd4, 0xd0, 0xcb, 0x85, 0xb0, 0x37, 0x63, 0x3e, 0x8a, 0x05, + 0x15, 0xbd, 0x0e, 0xc5, 0x2e, 0xa1, 0x54, 0xe9, 0x90, 0xf2, 0x10, 0x67, 0x9c, 0x14, 0x8c, 0xc5, + 0x75, 0x67, 0x18, 0xbb, 0x74, 0xf9, 0x0b, 0x09, 0xc6, 0xbd, 0x95, 0x5b, 0x53, 0xa9, 0x8d, 0x7e, + 0x27, 0xe6, 0x87, 0xd5, 0x6c, 0x53, 0x62, 0xd2, 0xdc, 0x0b, 0x3d, 0x9f, 0x77, 0x47, 0x02, 0x3e, + 0xb8, 0x0e, 0x43, 0xaa, 0x4d, 0xba, 0x6c, 0x1f, 0xf2, 0xd7, 0x47, 0x6f, 0x5f, 0xcf, 0xea, 0x32, + 0xf5, 0x71, 0x01, 0x3a, 0xb4, 0xca, 0xc4, 0xb1, 0x83, 0x22, 0xff, 0x49, 0x21, 0x60, 0x3e, 0x73, + 0x4d, 0xf4, 0x01, 0x94, 0x28, 0xd1, 0x48, 0xcb, 0x36, 0x2c, 0x61, 0xfe, 0x5b, 0x19, 0xcd, 0x57, + 0x76, 0x88, 0xd6, 0x14, 0xa2, 0xf5, 0x31, 0x66, 0xbf, 0xfb, 0x0b, 0x7b, 0x90, 0xe8, 0x1d, 0x28, + 0xd9, 0xa4, 0x6b, 0x6a, 0x8a, 0x4d, 0xc4, 0x39, 0x7a, 0x2d, 0x38, 0x05, 0xe6, 0x39, 0x0c, 0xac, + 0x61, 0xb4, 0xb7, 0x04, 0x1b, 0x3f, 0x3e, 0xde, 0x92, 0xb8, 0xa3, 0xd8, 0x83, 0x41, 0x07, 0x30, + 0xd1, 0x33, 0xdb, 0x8c, 0xd3, 0x66, 0x51, 0xb0, 0xd3, 0x17, 0x9e, 0x74, 0x2f, 0xeb, 0xda, 0x6c, + 0x87, 0xa4, 0xeb, 0x73, 0x42, 0xd7, 0x44, 0x78, 0x1c, 0x47, 0xb4, 0xa0, 0x45, 0x98, 0xec, 0xaa, + 0x3a, 0x8b, 0x4b, 0xfd, 0x26, 0x69, 0x19, 0x7a, 0x9b, 0x72, 0xb7, 0x1a, 0xaa, 0xcf, 0x0b, 0x80, + 0xc9, 0xf5, 0x30, 0x19, 0x47, 0xf9, 0xd1, 0xaf, 0x00, 0xb9, 0xd3, 0x78, 0xec, 0x04, 0x71, 0xd5, + 0xd0, 0xb9, 0xcf, 0xe5, 0x7d, 0xe7, 0xde, 0x8a, 0x71, 0xe0, 0x04, 0x29, 0xb4, 0x06, 0xb3, 0x16, + 0x39, 0x50, 0xd9, 0x1c, 0x9f, 0xa8, 0xd4, 0x36, 0xac, 0xfe, 0x9a, 0xda, 0x55, 0xed, 0xf2, 0x30, + 0xb7, 0xa9, 0x7c, 0x7c, 0x54, 0x99, 0xc5, 0x09, 0x74, 0x9c, 0x28, 0x25, 0xff, 0xe9, 0x30, 0x4c, + 0x46, 0xe2, 0x0d, 0x7a, 0x0a, 0x73, 0xad, 0x9e, 0x65, 0x11, 0xdd, 0xde, 0xe8, 0x75, 0x77, 0x88, + 0xd5, 0x6c, 0xed, 0x91, 0x76, 0x4f, 0x23, 0x6d, 0xee, 0x28, 0x43, 0xf5, 0x05, 0x61, 0xf1, 0xdc, + 0x52, 0x22, 0x17, 0x4e, 0x91, 0x66, 0xab, 0xa0, 0xf3, 0xa1, 0x75, 0x95, 0x52, 0x0f, 0x33, 0xc7, + 0x31, 0xbd, 0x55, 0xd8, 0x88, 0x71, 0xe0, 0x04, 0x29, 0x66, 0x63, 0x9b, 0x50, 0xd5, 0x22, 0xed, + 0xa8, 0x8d, 0xf9, 0xb0, 0x8d, 0xcb, 0x89, 0x5c, 0x38, 0x45, 0x1a, 0xdd, 0x85, 0x51, 0x47, 0x1b, + 0xdf, 0x3f, 0xb1, 0xd1, 0x33, 0x02, 0x6c, 0x74, 0xc3, 0x27, 0xe1, 0x20, 0x1f, 0x9b, 0x9a, 0xb1, + 0x43, 0x89, 0x75, 0x40, 0xda, 0xe9, 0x1b, 0xbc, 0x19, 0xe3, 0xc0, 0x09, 0x52, 0x6c, 0x6a, 0x8e, + 0x07, 0xc6, 0xa6, 0x36, 0x1c, 0x9e, 0xda, 0x76, 0x22, 0x17, 0x4e, 0x91, 0x66, 0x7e, 0xec, 0x98, + 0xbc, 0x78, 0xa0, 0xa8, 0x9a, 0xb2, 0xa3, 0x91, 0x72, 0x31, 0xec, 0xc7, 0x1b, 0x61, 0x32, 0x8e, + 0xf2, 0xa3, 0xc7, 0x30, 0xed, 0x0c, 0x6d, 0xeb, 0x8a, 0x07, 0x52, 0xe2, 0x20, 0x3f, 0x11, 0x20, + 0xd3, 0x1b, 0x51, 0x06, 0x1c, 0x97, 0x41, 0x0f, 0x60, 0xa2, 0x65, 0x68, 0x1a, 0xf7, 0xc7, 0x25, + 0xa3, 0xa7, 0xdb, 0xe5, 0x11, 0x8e, 0x82, 0xd8, 0x79, 0x5c, 0x0a, 0x51, 0x70, 0x84, 0x13, 0x11, + 0x80, 0x96, 0x9b, 0x70, 0x68, 0x19, 0x78, 0x7c, 0xbc, 0x95, 0x35, 0x06, 0x78, 0xa9, 0xca, 0xaf, + 0x01, 0xbc, 0x21, 0x8a, 0x03, 0xc0, 0xf2, 0x3f, 0x49, 0x30, 0x9f, 0x12, 0x3a, 0xd0, 0x2f, 0x43, + 0x29, 0xf6, 0x37, 0x22, 0x29, 0xf6, 0x72, 0x8a, 0x58, 0x20, 0xcf, 0xea, 0x30, 0x6e, 0xb1, 0x59, + 0xe9, 0x1d, 0x87, 0x45, 0xc4, 0xc8, 0xbb, 0x03, 0xa6, 0x81, 0x83, 0x32, 0x7e, 0xcc, 0x9f, 0x3e, + 0x3e, 0xaa, 0x8c, 0x87, 0x68, 0x38, 0x0c, 0x2f, 0xff, 0x59, 0x0e, 0x60, 0x99, 0x98, 0x9a, 0xd1, + 0xef, 0x12, 0xfd, 0x3c, 0x6a, 0xa8, 0xcd, 0x50, 0x0d, 0x75, 0x73, 0xd0, 0xf6, 0x78, 0xa6, 0xa5, + 0x16, 0x51, 0xef, 0x46, 0x8a, 0xa8, 0x5a, 0x76, 0xc8, 0x93, 0xab, 0xa8, 0x7f, 0xcb, 0xc3, 0x8c, + 0xcf, 0xec, 0x97, 0x51, 0x0f, 0x43, 0x7b, 0xfc, 0xeb, 0x91, 0x3d, 0x9e, 0x4f, 0x10, 0x79, 0x65, + 0x75, 0xd4, 0x33, 0x98, 0x60, 0x55, 0x8e, 0xb3, 0x97, 0xbc, 0x86, 0x1a, 0x3e, 0x75, 0x0d, 0xe5, + 0x65, 0xbb, 0xb5, 0x10, 0x12, 0x8e, 0x20, 0xa7, 0xd4, 0x6c, 0xc5, 0x1f, 0x63, 0xcd, 0xf6, 0xa5, + 0x04, 0x13, 0xfe, 0x36, 0x9d, 0x43, 0xd1, 0xb6, 0x11, 0x2e, 0xda, 0x5e, 0xcf, 0xec, 0xa2, 0x29, + 0x55, 0xdb, 0x7f, 0xb3, 0x02, 0xdf, 0x63, 0x62, 0x07, 0x7c, 0x47, 0x69, 0xed, 0x0f, 0xbe, 0xe3, + 0xa1, 0xcf, 0x24, 0x40, 0x22, 0x0b, 0x2c, 0xea, 0xba, 0x61, 0x2b, 0x4e, 0xac, 0x74, 0xcc, 0x5a, + 0xcd, 0x6c, 0x96, 0xab, 0xb1, 0xba, 0x1d, 0xc3, 0x7a, 0xa4, 0xdb, 0x56, 0xdf, 0xdf, 0xe4, 0x38, + 0x03, 0x4e, 0x30, 0x00, 0x29, 0x00, 0x96, 0xc0, 0xdc, 0x32, 0xc4, 0x41, 0xbe, 0x99, 0x21, 0xe6, + 0x31, 0x81, 0x25, 0x43, 0xdf, 0x55, 0x3b, 0x7e, 0xd8, 0xc1, 0x1e, 0x10, 0x0e, 0x80, 0x5e, 0x7a, + 0x04, 0xf3, 0x29, 0xd6, 0xa2, 0x29, 0xc8, 0xef, 0x93, 0xbe, 0xb3, 0x6c, 0x98, 0xfd, 0x89, 0x66, + 0x61, 0xe8, 0x40, 0xd1, 0x7a, 0x4e, 0xf8, 0x1d, 0xc1, 0xce, 0x8f, 0x07, 0xb9, 0xfb, 0x92, 0xfc, + 0xc5, 0x50, 0xd0, 0x77, 0x78, 0xc5, 0x7c, 0x9d, 0x5d, 0x5a, 0x4d, 0x4d, 0x6d, 0x29, 0x54, 0x14, + 0x42, 0x63, 0xce, 0x85, 0xd5, 0x19, 0xc3, 0x1e, 0x35, 0x54, 0x5b, 0xe7, 0x5e, 0x6d, 0x6d, 0x9d, + 0x7f, 0x39, 0xb5, 0xf5, 0xef, 0x42, 0x89, 0xba, 0x55, 0x75, 0x81, 0x43, 0xde, 0x3a, 0x45, 0x7c, + 0x15, 0x05, 0xb5, 0xa7, 0xc0, 0x2b, 0xa5, 0x3d, 0xd0, 0xa4, 0x22, 0x7a, 0xe8, 0x94, 0x45, 0xf4, + 0x4b, 0x2d, 0x7c, 0x59, 0xbc, 0x31, 0x95, 0x1e, 0x25, 0x6d, 0x1e, 0xdb, 0x4a, 0x7e, 0xbc, 0x69, + 0xf0, 0x51, 0x2c, 0xa8, 0xe8, 0x83, 0x90, 0xcb, 0x96, 0xce, 0xe2, 0xb2, 0x13, 0xe9, 0xee, 0x8a, + 0xb6, 0x61, 0xde, 0xb4, 0x8c, 0x8e, 0x45, 0x28, 0x5d, 0x26, 0x4a, 0x5b, 0x53, 0x75, 0xe2, 0xae, + 0x8f, 0x53, 0x11, 0x5d, 0x3e, 0x3e, 0xaa, 0xcc, 0x37, 0x92, 0x59, 0x70, 0x9a, 0xac, 0xfc, 0xbc, + 0x00, 0x53, 0xd1, 0x0c, 0x98, 0x52, 0xa4, 0x4a, 0x67, 0x2a, 0x52, 0x6f, 0x04, 0x0e, 0x83, 0x53, + 0xc1, 0x07, 0x5e, 0x70, 0x62, 0x07, 0x62, 0x11, 0x26, 0x45, 0x34, 0x70, 0x89, 0xa2, 0x4c, 0xf7, + 0x76, 0x7f, 0x3b, 0x4c, 0xc6, 0x51, 0x7e, 0xf4, 0x10, 0xc6, 0x2d, 0x5e, 0x77, 0xbb, 0x00, 0x4e, + 0xed, 0x7a, 0x51, 0x00, 0x8c, 0xe3, 0x20, 0x11, 0x87, 0x79, 0x59, 0xdd, 0xea, 0x97, 0xa3, 0x2e, + 0x40, 0x21, 0x5c, 0xb7, 0x2e, 0x46, 0x19, 0x70, 0x5c, 0x06, 0xad, 0xc3, 0x4c, 0x4f, 0x8f, 0x43, + 0x39, 0xae, 0x7c, 0x59, 0x40, 0xcd, 0x6c, 0xc7, 0x59, 0x70, 0x92, 0x1c, 0xda, 0x0d, 0x95, 0xb2, + 0xc3, 0x3c, 0x3c, 0xdf, 0xce, 0x7c, 0xf0, 0x32, 0xd7, 0xb2, 0x09, 0xe5, 0x76, 0x29, 0x6b, 0xb9, + 0x2d, 0xff, 0xbd, 0x14, 0x4c, 0x42, 0x5e, 0x09, 0x3c, 0xe8, 0x95, 0x29, 0x26, 0x11, 0xa8, 0x8e, + 0x8c, 0xe4, 0xea, 0xf7, 0xde, 0xa9, 0xaa, 0x5f, 0x3f, 0x79, 0x0e, 0x2e, 0x7f, 0x3f, 0x97, 0x60, + 0x6e, 0xa5, 0xf9, 0xd8, 0x32, 0x7a, 0xa6, 0x6b, 0xce, 0xa6, 0xe9, 0x2c, 0xcd, 0xcf, 0xa1, 0x60, + 0xf5, 0x34, 0x77, 0x1e, 0xaf, 0xb9, 0xf3, 0xc0, 0x3d, 0x8d, 0xcd, 0x63, 0x26, 0x22, 0xe5, 0x4c, + 0x82, 0x09, 0xa0, 0x0d, 0x18, 0xb6, 0x14, 0xbd, 0x43, 0xdc, 0xb4, 0x7a, 0x6d, 0x80, 0xf5, 0xab, + 0xcb, 0x98, 0xb1, 0x07, 0x0a, 0x1b, 0x2e, 0x8d, 0x05, 0x8a, 0xfc, 0x0f, 0x12, 0x4c, 0x3e, 0xd9, + 0xda, 0x6a, 0xac, 0xea, 0xfc, 0x44, 0xf3, 0xb7, 0xd5, 0xab, 0x50, 0x30, 0x15, 0x7b, 0x2f, 0x9a, + 0xe9, 0x19, 0x0d, 0x73, 0x0a, 0xba, 0x03, 0x25, 0xf6, 0x2f, 0xb3, 0x8b, 0x1f, 0xa9, 0x11, 0x1e, + 0x08, 0x4b, 0x0d, 0x31, 0xf6, 0x22, 0xf0, 0x37, 0xf6, 0x38, 0xd1, 0x7b, 0x50, 0x64, 0xf1, 0x87, + 0xe8, 0xed, 0x8c, 0x05, 0xba, 0x30, 0xaa, 0xee, 0x08, 0xf9, 0x35, 0x97, 0x18, 0xc0, 0x2e, 0x9c, + 0xbc, 0x0f, 0xb3, 0x81, 0x49, 0xb0, 0x55, 0x7c, 0xca, 0x72, 0x2a, 0x6a, 0xc2, 0x10, 0xd3, 0xce, + 0x32, 0x67, 0x3e, 0xc3, 0x13, 0x68, 0x64, 0x21, 0xfc, 0xfa, 0x88, 0xfd, 0xa2, 0xd8, 0xc1, 0x92, + 0xd7, 0x61, 0x9c, 0x3f, 0x43, 0x1b, 0x96, 0xcd, 0x17, 0x13, 0x5d, 0x81, 0x7c, 0x57, 0xd5, 0x45, + 0x76, 0x1e, 0x15, 0x32, 0x79, 0x96, 0x59, 0xd8, 0x38, 0x27, 0x2b, 0x87, 0x22, 0x5e, 0xf9, 0x64, + 0xe5, 0x10, 0xb3, 0x71, 0xf9, 0x31, 0x14, 0xc5, 0x26, 0x05, 0x81, 0xf2, 0x27, 0x03, 0xe5, 0x13, + 0x80, 0x36, 0xa1, 0xb8, 0xda, 0xa8, 0x6b, 0x86, 0x53, 0xab, 0xb5, 0xd4, 0xb6, 0x15, 0xdd, 0xc1, + 0xa5, 0xd5, 0x65, 0x8c, 0x39, 0x05, 0xc9, 0x30, 0x4c, 0x0e, 0x5b, 0xc4, 0xb4, 0xb9, 0x1f, 0x8d, + 0xd4, 0x81, 0xf9, 0xc6, 0x23, 0x3e, 0x82, 0x05, 0x45, 0xfe, 0xa3, 0x1c, 0x14, 0xc5, 0x72, 0x9c, + 0xc3, 0xdd, 0x6d, 0x2d, 0x74, 0x77, 0x7b, 0x23, 0x9b, 0x6b, 0xa4, 0x5e, 0xdc, 0xb6, 0x22, 0x17, + 0xb7, 0x1b, 0x19, 0xf1, 0x4e, 0xbe, 0xb5, 0x7d, 0x9a, 0x83, 0x89, 0xb0, 0x53, 0xa2, 0xbb, 0x30, + 0xca, 0xd2, 0x94, 0xda, 0x22, 0x1b, 0x7e, 0x75, 0xec, 0x3d, 0xdd, 0x34, 0x7d, 0x12, 0x0e, 0xf2, + 0xa1, 0x8e, 0x27, 0xc6, 0xfc, 0x48, 0x4c, 0x3a, 0x7d, 0x49, 0x7b, 0xb6, 0xaa, 0x55, 0x9d, 0x0f, + 0x32, 0xd5, 0x55, 0xdd, 0xde, 0xb4, 0x9a, 0xb6, 0xa5, 0xea, 0x9d, 0x98, 0x22, 0xee, 0x94, 0x41, + 0x64, 0xf4, 0x2e, 0x4b, 0x99, 0xd4, 0xe8, 0x59, 0x2d, 0x92, 0x54, 0xfa, 0xba, 0x65, 0x1b, 0x3b, + 0xa0, 0xed, 0x35, 0xa3, 0xa5, 0x68, 0xce, 0xe6, 0x60, 0xb2, 0x4b, 0x2c, 0xa2, 0xb7, 0x88, 0x5b, + 0x6e, 0x3a, 0x10, 0xd8, 0x03, 0x93, 0xff, 0x56, 0x82, 0x51, 0xb1, 0x16, 0xe7, 0x70, 0xc9, 0xf9, + 0xed, 0xf0, 0x25, 0xe7, 0x5a, 0xc6, 0xc8, 0x91, 0x7c, 0xc3, 0xf9, 0x4b, 0xdf, 0x74, 0x16, 0x2b, + 0xd8, 0x71, 0xd9, 0x33, 0xa8, 0x1d, 0x3d, 0x2e, 0xec, 0x94, 0x63, 0x4e, 0x41, 0x3d, 0x98, 0x52, + 0x23, 0xc1, 0x45, 0xec, 0x59, 0x2d, 0x9b, 0x25, 0x9e, 0x58, 0xbd, 0x2c, 0xe0, 0xa7, 0xa2, 0x14, + 0x1c, 0x53, 0x21, 0x13, 0x88, 0x71, 0xa1, 0x77, 0xa0, 0xb0, 0x67, 0xdb, 0x66, 0xc2, 0xf3, 0xf9, + 0x80, 0x90, 0xe6, 0x9b, 0x50, 0xe2, 0xb3, 0xdb, 0xda, 0x6a, 0x60, 0x0e, 0x25, 0xff, 0x5d, 0xce, + 0x5b, 0x0f, 0x7e, 0xe7, 0x78, 0xdb, 0x9b, 0xed, 0x92, 0xa6, 0x50, 0xca, 0x1d, 0xdb, 0xb9, 0x1f, + 0xcf, 0x06, 0x0c, 0xf7, 0x68, 0x38, 0xc6, 0x8d, 0xb6, 0xfc, 0x50, 0x2f, 0x9d, 0x25, 0xd4, 0x8f, + 0x26, 0x85, 0x79, 0xf4, 0x04, 0xf2, 0xb6, 0x96, 0xf5, 0x9e, 0x2b, 0x10, 0xb7, 0xd6, 0x9a, 0x7e, + 0xac, 0xdc, 0x5a, 0x6b, 0x62, 0x06, 0x81, 0x36, 0x61, 0x88, 0xa5, 0x53, 0x16, 0x1d, 0xf2, 0xd9, + 0xa3, 0x0d, 0x5b, 0x41, 0xdf, 0xa5, 0xd8, 0x2f, 0x8a, 0x1d, 0x1c, 0xf9, 0x63, 0x18, 0x0f, 0x85, + 0x10, 0xf4, 0x11, 0x8c, 0x69, 0x86, 0xd2, 0xae, 0x2b, 0x9a, 0xa2, 0xb7, 0x88, 0xfb, 0xb5, 0xe3, + 0x5a, 0xd2, 0xd9, 0x5b, 0x0b, 0xf0, 0x89, 0x00, 0x34, 0x2b, 0x94, 0x8c, 0x05, 0x69, 0x38, 0x84, + 0x28, 0x2b, 0x00, 0xfe, 0x1c, 0x51, 0x05, 0x86, 0x98, 0xa7, 0x3a, 0xa9, 0x6e, 0xa4, 0x3e, 0xc2, + 0x2c, 0x64, 0x0e, 0x4c, 0xb1, 0x33, 0x8e, 0x6e, 0x03, 0x50, 0xd2, 0xb2, 0x88, 0xcd, 0xb7, 0x33, + 0x17, 0xfe, 0x62, 0xda, 0xf4, 0x28, 0x38, 0xc0, 0x25, 0xff, 0xa3, 0x04, 0xe3, 0x1b, 0xc4, 0xfe, + 0xc4, 0xb0, 0xf6, 0x1b, 0x86, 0xa6, 0xb6, 0xfa, 0xe7, 0x90, 0x07, 0x70, 0x28, 0x0f, 0xbc, 0x39, + 0x60, 0x67, 0x42, 0xd6, 0xa5, 0x65, 0x03, 0xf9, 0x4b, 0x09, 0xe6, 0x43, 0x9c, 0x8f, 0xfc, 0xc3, + 0xbf, 0x0d, 0x43, 0xa6, 0x61, 0xd9, 0x6e, 0x8d, 0x70, 0x2a, 0x85, 0x2c, 0xc2, 0x06, 0xaa, 0x04, + 0x06, 0x83, 0x1d, 0x34, 0xb4, 0x06, 0x39, 0xdb, 0x10, 0xae, 0x7a, 0x3a, 0x4c, 0x42, 0xac, 0x3a, + 0x08, 0xcc, 0xdc, 0x96, 0x81, 0x73, 0xb6, 0xc1, 0x36, 0xa2, 0x1c, 0xe2, 0x0a, 0x86, 0xaf, 0x57, + 0x34, 0x03, 0x0c, 0x85, 0x5d, 0xcb, 0xe8, 0x9e, 0x79, 0x0e, 0xde, 0x46, 0xac, 0x58, 0x46, 0x17, + 0x73, 0x2c, 0xf9, 0x2b, 0x09, 0xa6, 0x43, 0x9c, 0xe7, 0x90, 0x3a, 0xde, 0x09, 0xa7, 0x8e, 0x1b, + 0xa7, 0x99, 0x48, 0x4a, 0x02, 0xf9, 0x2a, 0x17, 0x99, 0x06, 0x9b, 0x30, 0xda, 0x85, 0x51, 0xd3, + 0x68, 0x37, 0x5f, 0xc2, 0xf7, 0xcd, 0x49, 0x96, 0xd2, 0x1b, 0x3e, 0x16, 0x0e, 0x02, 0xa3, 0x43, + 0x98, 0xd6, 0x95, 0x2e, 0xa1, 0xa6, 0xd2, 0x22, 0xcd, 0x97, 0xf0, 0xe2, 0x73, 0x91, 0x7f, 0x40, + 0x89, 0x22, 0xe2, 0xb8, 0x12, 0xb4, 0x0e, 0x45, 0xd5, 0xe4, 0x25, 0xa6, 0xa8, 0x25, 0x06, 0xe6, + 0x61, 0xa7, 0x20, 0x75, 0xe2, 0xb9, 0xf8, 0x81, 0x5d, 0x0c, 0xf9, 0x5f, 0xa3, 0xde, 0xc0, 0x2b, + 0x96, 0xc7, 0x50, 0xe2, 0x9d, 0x26, 0x2d, 0x43, 0x73, 0x3f, 0x75, 0xf0, 0xcb, 0x85, 0x18, 0x7b, + 0x71, 0x54, 0xb9, 0x9c, 0xf0, 0x8a, 0xed, 0x92, 0xb1, 0x27, 0x8c, 0x36, 0xa0, 0x60, 0xfe, 0x90, + 0xe2, 0x8a, 0xa7, 0x49, 0x5e, 0x51, 0x71, 0x1c, 0xf4, 0x6b, 0x50, 0x24, 0x7a, 0x9b, 0xd7, 0x6b, + 0xce, 0x3b, 0x02, 0x9f, 0xd5, 0x23, 0x67, 0x08, 0xbb, 0x34, 0xf9, 0x0f, 0xf2, 0x91, 0x59, 0xf1, + 0x9c, 0xfa, 0xec, 0xa5, 0x39, 0x87, 0x57, 0xf3, 0xa5, 0x3a, 0xc8, 0x0e, 0x14, 0x45, 0x46, 0x16, + 0x3e, 0xff, 0xf3, 0xd3, 0xf8, 0x7c, 0x30, 0xd9, 0x79, 0x57, 0x2e, 0x77, 0xd0, 0x05, 0x46, 0x1f, + 0xc2, 0x30, 0x71, 0x54, 0x38, 0x29, 0xf4, 0xde, 0x69, 0x54, 0xf8, 0xe1, 0xd7, 0x2f, 0xb5, 0xc5, + 0x98, 0x40, 0x45, 0xbf, 0x64, 0xeb, 0xc5, 0x78, 0x59, 0x65, 0x4a, 0xcb, 0x05, 0x9e, 0xd5, 0xae, + 0x38, 0xd3, 0xf6, 0x86, 0x5f, 0x1c, 0x55, 0xc0, 0xff, 0x89, 0x83, 0x12, 0xf2, 0x3f, 0x4b, 0x30, + 0xcd, 0x57, 0xa8, 0xd5, 0xb3, 0x54, 0xbb, 0x7f, 0x6e, 0xf9, 0xeb, 0x69, 0x28, 0x7f, 0xdd, 0x19, + 0xb0, 0x2c, 0x31, 0x0b, 0x53, 0x73, 0xd8, 0xd7, 0x12, 0x5c, 0x8c, 0x71, 0x9f, 0x43, 0xf8, 0xdc, + 0x0e, 0x87, 0xcf, 0x37, 0x4f, 0x3b, 0xa1, 0x94, 0x10, 0xfa, 0x5f, 0xd3, 0x09, 0xd3, 0xe1, 0x27, + 0xe5, 0x36, 0x80, 0x69, 0xa9, 0x07, 0xaa, 0x46, 0x3a, 0xe2, 0xe3, 0x7f, 0x29, 0xd0, 0xda, 0xe5, + 0x51, 0x70, 0x80, 0x0b, 0x51, 0x98, 0x6b, 0x93, 0x5d, 0xa5, 0xa7, 0xd9, 0x8b, 0xed, 0xf6, 0x92, + 0x62, 0x2a, 0x3b, 0xaa, 0xa6, 0xda, 0xaa, 0x78, 0x26, 0x19, 0xa9, 0x3f, 0x74, 0x3e, 0xca, 0x27, + 0x71, 0xbc, 0x38, 0xaa, 0x5c, 0x49, 0xfa, 0x2a, 0xe6, 0xb2, 0xf4, 0x71, 0x0a, 0x34, 0xea, 0x43, + 0xd9, 0x22, 0x1f, 0xf7, 0x54, 0x8b, 0xb4, 0x97, 0x2d, 0xc3, 0x0c, 0xa9, 0xcd, 0x73, 0xb5, 0xbf, + 0x75, 0x7c, 0x54, 0x29, 0xe3, 0x14, 0x9e, 0xc1, 0x8a, 0x53, 0xe1, 0xd1, 0x33, 0x98, 0x51, 0x44, + 0x13, 0x5e, 0x50, 0xab, 0x73, 0x4a, 0xee, 0x1f, 0x1f, 0x55, 0x66, 0x16, 0xe3, 0xe4, 0xc1, 0x0a, + 0x93, 0x40, 0x51, 0x0d, 0x8a, 0x07, 0xbc, 0x5f, 0x8f, 0x96, 0x87, 0x38, 0x3e, 0xcb, 0x17, 0x45, + 0xa7, 0x85, 0x8f, 0x61, 0x0e, 0xaf, 0x34, 0xf9, 0xe9, 0x73, 0xb9, 0xd8, 0x95, 0x98, 0x95, 0x9c, + 0xe2, 0xc4, 0xf3, 0x97, 0xf2, 0x92, 0x1f, 0xb5, 0x9e, 0xf8, 0x24, 0x1c, 0xe4, 0x43, 0x1f, 0xc0, + 0xc8, 0x9e, 0x78, 0x57, 0xa1, 0xe5, 0x62, 0xa6, 0x5c, 0x1d, 0x7a, 0x87, 0xa9, 0x4f, 0x0b, 0x15, + 0x23, 0xee, 0x30, 0xc5, 0x3e, 0x22, 0x7a, 0x1d, 0x8a, 0xfc, 0xc7, 0xea, 0x32, 0x7f, 0x86, 0x2c, + 0xf9, 0xb1, 0xed, 0x89, 0x33, 0x8c, 0x5d, 0xba, 0xcb, 0xba, 0xda, 0x58, 0xe2, 0xcf, 0xe1, 0x11, + 0xd6, 0xd5, 0xc6, 0x12, 0x76, 0xe9, 0xe8, 0x23, 0x28, 0x52, 0xb2, 0xa6, 0xea, 0xbd, 0xc3, 0x32, + 0x64, 0xfa, 0x98, 0xde, 0x7c, 0xc4, 0xb9, 0x23, 0x0f, 0x82, 0xbe, 0x06, 0x41, 0xc7, 0x2e, 0x2c, + 0xda, 0x83, 0x11, 0xab, 0xa7, 0x2f, 0xd2, 0x6d, 0x4a, 0xac, 0xf2, 0x28, 0xd7, 0x31, 0x28, 0x9c, + 0x63, 0x97, 0x3f, 0xaa, 0xc5, 0x5b, 0x21, 0x8f, 0x03, 0xfb, 0xe0, 0x68, 0x0f, 0x80, 0xff, 0xe0, + 0x6f, 0x8f, 0xe5, 0x39, 0xae, 0xea, 0x7e, 0x16, 0x55, 0x49, 0x4f, 0x9c, 0xe2, 0xfb, 0x83, 0x47, + 0xc6, 0x01, 0x6c, 0xf4, 0x87, 0x12, 0x20, 0xda, 0x33, 0x4d, 0x8d, 0x74, 0x89, 0x6e, 0x2b, 0x1a, + 0x1f, 0xa5, 0xe5, 0x31, 0xae, 0xf2, 0xed, 0x41, 0x2b, 0x18, 0x13, 0x8c, 0xaa, 0xf6, 0x3e, 0x2b, + 0xc4, 0x59, 0x71, 0x82, 0x5e, 0xb6, 0x89, 0xbb, 0x62, 0xd6, 0xe3, 0x99, 0x36, 0x31, 0xf9, 0x55, + 0xd7, 0xdf, 0x44, 0x41, 0xc7, 0x2e, 0x2c, 0x7a, 0x0a, 0x73, 0x6e, 0x63, 0x29, 0x36, 0x0c, 0x7b, + 0x45, 0xd5, 0x08, 0xed, 0x53, 0x9b, 0x74, 0xcb, 0x13, 0xdc, 0xc1, 0xbc, 0xee, 0x1a, 0x9c, 0xc8, + 0x85, 0x53, 0xa4, 0x51, 0x17, 0x2a, 0x6e, 0x70, 0x62, 0x27, 0xd7, 0x8b, 0x8e, 0x8f, 0x68, 0x4b, + 0xd1, 0x9c, 0x2f, 0x2d, 0x93, 0x5c, 0xc1, 0x6b, 0xc7, 0x47, 0x95, 0xca, 0xf2, 0xc9, 0xac, 0x78, + 0x10, 0x16, 0x7a, 0x0f, 0xca, 0x4a, 0x9a, 0x9e, 0x29, 0xae, 0xe7, 0xa7, 0x2c, 0xe2, 0xa5, 0x2a, + 0x48, 0x95, 0x46, 0x36, 0x4c, 0x29, 0xe1, 0x16, 0x5f, 0x5a, 0x9e, 0xce, 0xf4, 0x68, 0x1b, 0xe9, + 0x0c, 0xf6, 0xdf, 0x57, 0x22, 0x04, 0x8a, 0x63, 0x1a, 0xd0, 0xef, 0x01, 0x52, 0xa2, 0x5d, 0xc9, + 0xb4, 0x8c, 0x32, 0x25, 0xba, 0x58, 0x3b, 0xb3, 0xef, 0x76, 0x31, 0x12, 0xc5, 0x09, 0x7a, 0x58, + 0x1d, 0xaf, 0x44, 0x3a, 0xa9, 0x69, 0x79, 0x9e, 0x2b, 0xaf, 0x65, 0x53, 0xee, 0xc9, 0x05, 0x3e, + 0x28, 0x45, 0x11, 0x71, 0x5c, 0x09, 0x5a, 0x83, 0x59, 0x31, 0xb8, 0xad, 0x53, 0x65, 0x97, 0x34, + 0xfb, 0xb4, 0x65, 0x6b, 0xb4, 0x3c, 0xc3, 0xe3, 0x3b, 0xff, 0xa8, 0xb9, 0x98, 0x40, 0xc7, 0x89, + 0x52, 0xe8, 0x6d, 0x98, 0xda, 0x35, 0xac, 0x1d, 0xb5, 0xdd, 0x26, 0xba, 0x8b, 0x34, 0xcb, 0x91, + 0xf8, 0x73, 0xd1, 0x4a, 0x84, 0x86, 0x63, 0xdc, 0x88, 0xc2, 0x45, 0x81, 0xdc, 0xb0, 0x8c, 0xd6, + 0xba, 0xd1, 0xd3, 0x6d, 0xa7, 0xec, 0xbb, 0xe8, 0xa5, 0xd1, 0x8b, 0x8b, 0x49, 0x0c, 0x2f, 0x8e, + 0x2a, 0x57, 0x93, 0x2f, 0x03, 0x3e, 0x13, 0x4e, 0xc6, 0x46, 0x26, 0x8c, 0x89, 0xfe, 0x78, 0xfe, + 0x6e, 0x55, 0x2e, 0xf3, 0xa3, 0xff, 0x60, 0x70, 0xc0, 0xf3, 0x44, 0xa2, 0xe7, 0x7f, 0xea, 0xf8, + 0xa8, 0x32, 0x16, 0x64, 0xc0, 0x21, 0x0d, 0xbc, 0x1f, 0x4a, 0x7c, 0x85, 0x3b, 0x9f, 0x9e, 0xf2, + 0xd3, 0xf5, 0x43, 0xf9, 0xa6, 0xbd, 0xb4, 0x7e, 0xa8, 0x00, 0xe4, 0xc9, 0x2f, 0xeb, 0xff, 0x99, + 0x83, 0x19, 0x9f, 0x39, 0x73, 0x3f, 0x54, 0x82, 0xc8, 0xff, 0xf7, 0x95, 0x67, 0xeb, 0x51, 0xf2, + 0x97, 0xee, 0x7f, 0x5f, 0x8f, 0x92, 0x6f, 0x5b, 0xca, 0xed, 0xe1, 0xaf, 0x73, 0xc1, 0x09, 0x9c, + 0xb2, 0x51, 0xe6, 0x25, 0xb4, 0x56, 0xff, 0xe8, 0x7a, 0x6d, 0xe4, 0xaf, 0xf3, 0x30, 0x15, 0x3d, + 0x8d, 0xa1, 0x7e, 0x0a, 0x69, 0x60, 0x3f, 0x45, 0x03, 0x66, 0x77, 0x7b, 0x9a, 0xd6, 0xe7, 0x73, + 0x08, 0x34, 0x55, 0x38, 0x5f, 0x36, 0x7f, 0x2a, 0x24, 0x67, 0x57, 0x12, 0x78, 0x70, 0xa2, 0x64, + 0xbc, 0xbd, 0xa2, 0xf0, 0x43, 0xdb, 0x2b, 0x86, 0xce, 0xd0, 0x5e, 0x91, 0xdc, 0xa1, 0x92, 0x3f, + 0x53, 0x87, 0xca, 0x59, 0x7a, 0x2b, 0x12, 0x82, 0xd8, 0xc0, 0x3e, 0xe1, 0x5f, 0xc0, 0x44, 0xb8, + 0xdf, 0xc7, 0xd9, 0x4b, 0xa7, 0xe5, 0x48, 0x7c, 0x41, 0x0e, 0xec, 0xa5, 0x33, 0x8e, 0x3d, 0x0e, + 0xf9, 0x58, 0x82, 0xb9, 0xe4, 0xbe, 0x5e, 0xa4, 0xc1, 0x44, 0x57, 0x39, 0x0c, 0xf6, 0x5a, 0x4b, + 0x67, 0x7c, 0x40, 0xe3, 0x8d, 0x1e, 0xeb, 0x21, 0x2c, 0x1c, 0xc1, 0x46, 0xef, 0x43, 0xa9, 0xab, + 0x1c, 0x36, 0x7b, 0x56, 0x87, 0x9c, 0xf9, 0xa1, 0x8e, 0x1f, 0xa3, 0x75, 0x81, 0x82, 0x3d, 0x3c, + 0xf9, 0x7b, 0x09, 0xe6, 0x53, 0xda, 0x37, 0xfe, 0x0f, 0xcd, 0xf2, 0x2f, 0x24, 0xf8, 0x49, 0xea, + 0x35, 0x0c, 0xdd, 0x0b, 0x75, 0x9a, 0xc8, 0x91, 0x4e, 0x13, 0x14, 0x17, 0x7c, 0x45, 0x8d, 0x26, + 0x9f, 0x4b, 0x50, 0x4e, 0xbb, 0x97, 0xa2, 0xbb, 0x21, 0x23, 0x7f, 0x16, 0x31, 0x72, 0x3a, 0x26, + 0xf7, 0x8a, 0x6c, 0xfc, 0x17, 0x09, 0x2e, 0x9f, 0x50, 0xdf, 0x79, 0xd7, 0x1f, 0xd2, 0x0e, 0x72, + 0xf1, 0x97, 0x73, 0xf1, 0xd9, 0xcd, 0xbf, 0xfe, 0x24, 0xf0, 0xe0, 0x54, 0x69, 0xb4, 0x0d, 0xf3, + 0xe2, 0xee, 0x15, 0xa5, 0x89, 0xd2, 0x85, 0x37, 0xe4, 0x2d, 0x27, 0xb3, 0xe0, 0x34, 0x59, 0xf9, + 0xaf, 0x24, 0x98, 0x4b, 0x7e, 0x70, 0x40, 0x6f, 0x85, 0x96, 0xbc, 0x12, 0x59, 0xf2, 0xc9, 0x88, + 0x94, 0x58, 0xf0, 0x0f, 0x61, 0x42, 0x3c, 0x4b, 0x08, 0x18, 0xe1, 0xcc, 0x72, 0x52, 0x76, 0x12, + 0x10, 0x6e, 0x71, 0xcc, 0x8f, 0x49, 0x78, 0x0c, 0x47, 0xd0, 0xe4, 0x4f, 0x73, 0x30, 0xd4, 0x6c, + 0x29, 0x1a, 0x39, 0x87, 0xda, 0xf8, 0x57, 0xa1, 0xda, 0x78, 0xd0, 0x7f, 0x75, 0xe3, 0x56, 0xa5, + 0x96, 0xc5, 0x38, 0x52, 0x16, 0xbf, 0x91, 0x09, 0xed, 0xe4, 0x8a, 0xf8, 0x37, 0x61, 0xc4, 0x53, + 0x7a, 0xba, 0x44, 0x2d, 0xff, 0x79, 0x0e, 0x46, 0x03, 0x2a, 0x4e, 0x99, 0xe6, 0x77, 0x43, 0xb5, + 0x4d, 0x3e, 0xc3, 0x23, 0x50, 0x40, 0x57, 0xd5, 0xad, 0x66, 0x9c, 0x56, 0x6d, 0xbf, 0x39, 0x37, + 0x5e, 0xe4, 0xfc, 0x02, 0x26, 0x6c, 0xc5, 0xea, 0x10, 0xdb, 0xfb, 0x28, 0xe2, 0xb4, 0x92, 0x79, + 0xff, 0x67, 0x60, 0x2b, 0x44, 0xc5, 0x11, 0xee, 0x4b, 0x0f, 0x61, 0x3c, 0xa4, 0xec, 0x54, 0x9d, + 0xd6, 0x7f, 0x23, 0xc1, 0xcf, 0x06, 0x3e, 0x24, 0xa1, 0x7a, 0xe8, 0x90, 0x54, 0x23, 0x87, 0x64, + 0x21, 0x1d, 0xe0, 0xd5, 0x75, 0xec, 0xd5, 0x6f, 0x3e, 0xff, 0x6e, 0xe1, 0xc2, 0x37, 0xdf, 0x2d, + 0x5c, 0xf8, 0xf6, 0xbb, 0x85, 0x0b, 0xbf, 0x7f, 0xbc, 0x20, 0x3d, 0x3f, 0x5e, 0x90, 0xbe, 0x39, + 0x5e, 0x90, 0xbe, 0x3d, 0x5e, 0x90, 0xfe, 0xfd, 0x78, 0x41, 0xfa, 0xe3, 0xef, 0x17, 0x2e, 0xbc, + 0x5f, 0x14, 0x70, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x9d, 0xa0, 0x1e, 0x3d, 0x3f, 0x00, + 0x00, } func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { @@ -3608,6 +3610,11 @@ func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.EndPort != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.EndPort)) + i-- + dAtA[i] = 0x18 + } if m.Port != nil { { size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) @@ -4378,6 +4385,18 @@ func (m *RollingUpdateDaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.MaxUnavailable != nil { { size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) @@ -5410,6 +5429,9 @@ func (m *NetworkPolicyPort) Size() (n int) { l = m.Port.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.EndPort != nil { + n += 1 + sovGenerated(uint64(*m.EndPort)) + } return n } @@ -5684,6 +5706,10 @@ func (m *RollingUpdateDaemonSet) Size() (n int) { l = m.MaxUnavailable.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.MaxSurge != nil { + l = m.MaxSurge.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -6348,6 +6374,7 @@ func (this *NetworkPolicyPort) String() string { s := strings.Join([]string{`&NetworkPolicyPort{`, `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`, + `EndPort:` + valueToStringGenerated(this.EndPort) + `,`, `}`, }, "") return s @@ -6546,6 +6573,7 @@ func (this *RollingUpdateDaemonSet) String() string { } s := strings.Join([]string{`&RollingUpdateDaemonSet{`, `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -6750,10 +6778,7 @@ func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6835,10 +6860,7 @@ func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6940,10 +6962,7 @@ func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7092,10 +7111,7 @@ func (m *DaemonSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7306,10 +7322,7 @@ func (m *DaemonSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7426,10 +7439,7 @@ func (m *DaemonSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7639,10 +7649,7 @@ func (m *DaemonSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7898,10 +7905,7 @@ func (m *DaemonSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8019,10 +8023,7 @@ func (m *DaemonSetUpdateStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8171,10 +8172,7 @@ func (m *Deployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8418,10 +8416,7 @@ func (m *DeploymentCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8538,10 +8533,7 @@ func (m *DeploymentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8733,7 +8725,7 @@ func (m *DeploymentRollback) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -8783,10 +8775,7 @@ func (m *DeploymentRollback) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9073,10 +9062,7 @@ func (m *DeploymentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9294,10 +9280,7 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9415,10 +9398,7 @@ func (m *DeploymentStrategy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9534,10 +9514,7 @@ func (m *FSGroupStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9685,10 +9662,7 @@ func (m *HTTPIngressPath) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9772,10 +9746,7 @@ func (m *HTTPIngressRuleValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9863,10 +9834,7 @@ func (m *HostPortRange) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9954,10 +9922,7 @@ func (m *IDRange) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10071,10 +10036,7 @@ func (m *IPBlock) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10223,10 +10185,7 @@ func (m *Ingress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10377,10 +10336,7 @@ func (m *IngressBackend) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10497,10 +10453,7 @@ func (m *IngressList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10615,10 +10568,7 @@ func (m *IngressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10704,10 +10654,7 @@ func (m *IngressRuleValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10894,10 +10841,7 @@ func (m *IngressSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10980,10 +10924,7 @@ func (m *IngressStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11097,10 +11038,7 @@ func (m *IngressTLS) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11216,10 +11154,7 @@ func (m *NetworkPolicy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11337,10 +11272,7 @@ func (m *NetworkPolicyEgressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11458,10 +11390,7 @@ func (m *NetworkPolicyIngressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11578,10 +11507,7 @@ func (m *NetworkPolicyList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11739,10 +11665,7 @@ func (m *NetworkPolicyPeer) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11855,16 +11778,33 @@ func (m *NetworkPolicyPort) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EndPort", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EndPort = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12047,10 +11987,7 @@ func (m *NetworkPolicySpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12166,10 +12103,7 @@ func (m *PodSecurityPolicy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -12286,10 +12220,7 @@ func (m *PodSecurityPolicyList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13045,10 +12976,7 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13197,10 +13125,7 @@ func (m *ReplicaSet) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13411,10 +13336,7 @@ func (m *ReplicaSetCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13531,10 +13453,7 @@ func (m *ReplicaSetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13692,10 +13611,7 @@ func (m *ReplicaSetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13874,10 +13790,7 @@ func (m *ReplicaSetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -13946,10 +13859,7 @@ func (m *RollbackConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14029,16 +13939,49 @@ func (m *RollingUpdateDaemonSet) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSurge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxSurge == nil { + m.MaxSurge = &intstr.IntOrString{} + } + if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14160,10 +14103,7 @@ func (m *RollingUpdateDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14279,10 +14219,7 @@ func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14398,10 +14335,7 @@ func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14516,10 +14450,7 @@ func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14637,10 +14568,7 @@ func (m *SELinuxStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14789,10 +14717,7 @@ func (m *Scale) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -14861,10 +14786,7 @@ func (m *ScaleSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15043,7 +14965,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -15092,10 +15014,7 @@ func (m *ScaleStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -15211,10 +15130,7 @@ func (m *SupplementalGroupsStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.proto index a4ca5b563..5e3d165eb 100644 --- a/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/extensions/v1beta1/generated.proto @@ -745,13 +745,21 @@ message NetworkPolicyPort { // +optional optional string protocol = 1; - // If specified, the port on the given protocol. This can - // either be a numerical or named port on a pod. If this field is not provided, - // this matches all port names and numbers. - // If present, only traffic on the specified protocol AND port - // will be matched. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2; + + // If set, indicates that the range of ports from port to endPort, inclusive, + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". + // +optional + optional int32 endPort = 3; } // DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec. @@ -784,7 +792,7 @@ message NetworkPolicySpec { repeated NetworkPolicyEgressRule egress = 3; // List of rule types that the NetworkPolicy relates to. - // Valid options are "Ingress", "Egress", or "Ingress,Egress". + // Valid options are ["Ingress"], ["Egress"], or ["Ingress", "Egress"]. // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -1082,19 +1090,41 @@ message RollingUpdateDaemonSet { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total // number of DaemonSet pods at the start of the update (ex: 10%). Absolute - // number is calculated from percentage by rounding up. - // This cannot be 0. + // number is calculated from percentage by rounding down to a minimum of one. + // This cannot be 0 if MaxSurge is 0 // Default value is 1. // Example: when this is set to 30%, at most 30% of the total number of nodes // that should be running the daemon pod (i.e. status.desiredNumberScheduled) - // can have their pods stopped for an update at any given - // time. The update starts by stopping at most 30% of those DaemonSet pods - // and then brings up new DaemonSet pods in their place. Once the new pods - // are available, it then proceeds onto other DaemonSet pods, thus ensuring - // that at least 70% of original number of DaemonSet pods are available at - // all times during the update. + // can have their pods stopped for an update at any given time. The update + // starts by stopping at most 30% of those DaemonSet pods and then brings + // up new DaemonSet pods in their place. Once the new pods are available, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times during + // the update. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 1; + + // The maximum number of nodes with an existing available DaemonSet pod that + // can have an updated DaemonSet pod during during an update. + // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up to a minimum of 1. + // Default value is 0. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their a new pod created before the old pod is marked as deleted. + // The update starts by launching new pods on 30% of nodes. Once an updated + // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod + // on that node is marked deleted. If the old pod becomes unavailable for any + // reason (Ready transitions to false, is evicted, or is drained) an updated + // pod is immediatedly created on that node without considering surge limits. + // Allowing surge implies the possibility that the resources consumed by the + // daemonset on any given node can double if the readiness check fails, and + // so resource intensive daemonsets should take into account that they may + // cause evictions during disruption. + // This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate. + // +optional + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } // Spec to control the desired behavior of rolling update. diff --git a/constraint/vendor/k8s.io/api/extensions/v1beta1/types.go b/constraint/vendor/k8s.io/api/extensions/v1beta1/types.go index bd75c51bc..f3479713c 100644 --- a/constraint/vendor/k8s.io/api/extensions/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/extensions/v1beta1/types.go @@ -357,19 +357,41 @@ type RollingUpdateDaemonSet struct { // The maximum number of DaemonSet pods that can be unavailable during the // update. Value can be an absolute number (ex: 5) or a percentage of total // number of DaemonSet pods at the start of the update (ex: 10%). Absolute - // number is calculated from percentage by rounding up. - // This cannot be 0. + // number is calculated from percentage by rounding down to a minimum of one. + // This cannot be 0 if MaxSurge is 0 // Default value is 1. // Example: when this is set to 30%, at most 30% of the total number of nodes // that should be running the daemon pod (i.e. status.desiredNumberScheduled) - // can have their pods stopped for an update at any given - // time. The update starts by stopping at most 30% of those DaemonSet pods - // and then brings up new DaemonSet pods in their place. Once the new pods - // are available, it then proceeds onto other DaemonSet pods, thus ensuring - // that at least 70% of original number of DaemonSet pods are available at - // all times during the update. + // can have their pods stopped for an update at any given time. The update + // starts by stopping at most 30% of those DaemonSet pods and then brings + // up new DaemonSet pods in their place. Once the new pods are available, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times during + // the update. // +optional MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"` + + // The maximum number of nodes with an existing available DaemonSet pod that + // can have an updated DaemonSet pod during during an update. + // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + // This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up to a minimum of 1. + // Default value is 0. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their a new pod created before the old pod is marked as deleted. + // The update starts by launching new pods on 30% of nodes. Once an updated + // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod + // on that node is marked deleted. If the old pod becomes unavailable for any + // reason (Ready transitions to false, is evicted, or is drained) an updated + // pod is immediatedly created on that node without considering surge limits. + // Allowing surge implies the possibility that the resources consumed by the + // daemonset on any given node can double if the readiness check fails, and + // so resource intensive daemonsets should take into account that they may + // cause evictions during disruption. + // This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate. + // +optional + MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } // DaemonSetSpec is the specification of a daemon set. @@ -1387,7 +1409,7 @@ type NetworkPolicySpec struct { Egress []NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"` // List of rule types that the NetworkPolicy relates to. - // Valid options are "Ingress", "Egress", or "Ingress,Egress". + // Valid options are ["Ingress"], ["Egress"], or ["Ingress", "Egress"]. // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -1449,13 +1471,21 @@ type NetworkPolicyPort struct { // +optional Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"` - // If specified, the port on the given protocol. This can - // either be a numerical or named port on a pod. If this field is not provided, - // this matches all port names and numbers. - // If present, only traffic on the specified protocol AND port - // will be matched. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` + + // If set, indicates that the range of ports from port to endPort, inclusive, + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". + // +optional + EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } // DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. diff --git a/constraint/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go index 0ef3c0059..870b607a7 100644 --- a/constraint/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go @@ -413,7 +413,8 @@ func (NetworkPolicyPeer) SwaggerDoc() map[string]string { var map_NetworkPolicyPort = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.", "protocol": "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - "port": "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + "endPort": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".", } func (NetworkPolicyPort) SwaggerDoc() map[string]string { @@ -425,7 +426,7 @@ var map_NetworkPolicySpec = map[string]string{ "podSelector": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", "ingress": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).", "egress": "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", + "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are [\"Ingress\"], [\"Egress\"], or [\"Ingress\", \"Egress\"]. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", } func (NetworkPolicySpec) SwaggerDoc() map[string]string { @@ -555,7 +556,8 @@ func (RollbackConfig) SwaggerDoc() map[string]string { var map_RollingUpdateDaemonSet = map[string]string{ "": "Spec to control the desired behavior of daemon set rolling update.", - "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding down to a minimum of one. This cannot be 0 if MaxSurge is 0 Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + "maxSurge": "The maximum number of nodes with an existing available DaemonSet pod that can have an updated DaemonSet pod during during an update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up to a minimum of 1. Default value is 0. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their a new pod created before the old pod is marked as deleted. The update starts by launching new pods on 30% of nodes. Once an updated pod is available (Ready for at least minReadySeconds) the old DaemonSet pod on that node is marked deleted. If the old pod becomes unavailable for any reason (Ready transitions to false, is evicted, or is drained) an updated pod is immediatedly created on that node without considering surge limits. Allowing surge implies the possibility that the resources consumed by the daemonset on any given node can double if the readiness check fails, and so resource intensive daemonsets should take into account that they may cause evictions during disruption. This is an alpha field and requires enabling DaemonSetUpdateSurge feature gate.", } func (RollingUpdateDaemonSet) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go index 913f48514..838315610 100644 --- a/constraint/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go @@ -916,6 +916,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) { *out = new(intstr.IntOrString) **out = **in } + if in.EndPort != nil { + in, out := &in.EndPort, &out.EndPort + *out = new(int32) + **out = **in + } return } @@ -1272,6 +1277,11 @@ func (in *RollingUpdateDaemonSet) DeepCopyInto(out *RollingUpdateDaemonSet) { *out = new(intstr.IntOrString) **out = **in } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } return } diff --git a/constraint/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go index 86c861204..7f0687ac0 100644 --- a/constraint/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go @@ -2513,10 +2513,7 @@ func (m *FlowDistinguisherMethod) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2665,10 +2662,7 @@ func (m *FlowSchema) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2879,10 +2873,7 @@ func (m *FlowSchemaCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2999,10 +2990,7 @@ func (m *FlowSchemaList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3174,10 +3162,7 @@ func (m *FlowSchemaSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3261,10 +3246,7 @@ func (m *FlowSchemaStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3346,10 +3328,7 @@ func (m *GroupSubject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3467,10 +3446,7 @@ func (m *LimitResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3572,10 +3548,7 @@ func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3689,10 +3662,7 @@ func (m *NonResourcePolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3844,10 +3814,7 @@ func (m *PolicyRulesWithSubjects) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3996,10 +3963,7 @@ func (m *PriorityLevelConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4210,10 +4174,7 @@ func (m *PriorityLevelConfigurationCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4330,10 +4291,7 @@ func (m *PriorityLevelConfigurationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4415,10 +4373,7 @@ func (m *PriorityLevelConfigurationReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4536,10 +4491,7 @@ func (m *PriorityLevelConfigurationSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4623,10 +4575,7 @@ func (m *PriorityLevelConfigurationStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4733,10 +4682,7 @@ func (m *QueuingConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4934,10 +4880,7 @@ func (m *ResourcePolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5051,10 +4994,7 @@ func (m *ServiceAccountSubject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5244,10 +5184,7 @@ func (m *Subject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5329,10 +5266,7 @@ func (m *UserSubject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go index 5a0c75560..cb06fe5e7 100644 --- a/constraint/vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go @@ -2513,10 +2513,7 @@ func (m *FlowDistinguisherMethod) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2665,10 +2662,7 @@ func (m *FlowSchema) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2879,10 +2873,7 @@ func (m *FlowSchemaCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2999,10 +2990,7 @@ func (m *FlowSchemaList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3174,10 +3162,7 @@ func (m *FlowSchemaSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3261,10 +3246,7 @@ func (m *FlowSchemaStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3346,10 +3328,7 @@ func (m *GroupSubject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3467,10 +3446,7 @@ func (m *LimitResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3572,10 +3548,7 @@ func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3689,10 +3662,7 @@ func (m *NonResourcePolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3844,10 +3814,7 @@ func (m *PolicyRulesWithSubjects) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3996,10 +3963,7 @@ func (m *PriorityLevelConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4210,10 +4174,7 @@ func (m *PriorityLevelConfigurationCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4330,10 +4291,7 @@ func (m *PriorityLevelConfigurationList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4415,10 +4373,7 @@ func (m *PriorityLevelConfigurationReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4536,10 +4491,7 @@ func (m *PriorityLevelConfigurationSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4623,10 +4575,7 @@ func (m *PriorityLevelConfigurationStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4733,10 +4682,7 @@ func (m *QueuingConfiguration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4934,10 +4880,7 @@ func (m *ResourcePolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5051,10 +4994,7 @@ func (m *ServiceAccountSubject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5244,10 +5184,7 @@ func (m *Subject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5329,10 +5266,7 @@ func (m *UserSubject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/networking/v1/generated.pb.go b/constraint/vendor/k8s.io/api/networking/v1/generated.pb.go index 4e03b5438..719861b96 100644 --- a/constraint/vendor/k8s.io/api/networking/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/networking/v1/generated.pb.go @@ -244,10 +244,38 @@ func (m *IngressClassList) XXX_DiscardUnknown() { var xxx_messageInfo_IngressClassList proto.InternalMessageInfo +func (m *IngressClassParametersReference) Reset() { *m = IngressClassParametersReference{} } +func (*IngressClassParametersReference) ProtoMessage() {} +func (*IngressClassParametersReference) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{7} +} +func (m *IngressClassParametersReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressClassParametersReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressClassParametersReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressClassParametersReference.Merge(m, src) +} +func (m *IngressClassParametersReference) XXX_Size() int { + return m.Size() +} +func (m *IngressClassParametersReference) XXX_DiscardUnknown() { + xxx_messageInfo_IngressClassParametersReference.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressClassParametersReference proto.InternalMessageInfo + func (m *IngressClassSpec) Reset() { *m = IngressClassSpec{} } func (*IngressClassSpec) ProtoMessage() {} func (*IngressClassSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{7} + return fileDescriptor_1c72867a70a7cc90, []int{8} } func (m *IngressClassSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -275,7 +303,7 @@ var xxx_messageInfo_IngressClassSpec proto.InternalMessageInfo func (m *IngressList) Reset() { *m = IngressList{} } func (*IngressList) ProtoMessage() {} func (*IngressList) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{8} + return fileDescriptor_1c72867a70a7cc90, []int{9} } func (m *IngressList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -303,7 +331,7 @@ var xxx_messageInfo_IngressList proto.InternalMessageInfo func (m *IngressRule) Reset() { *m = IngressRule{} } func (*IngressRule) ProtoMessage() {} func (*IngressRule) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{9} + return fileDescriptor_1c72867a70a7cc90, []int{10} } func (m *IngressRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -331,7 +359,7 @@ var xxx_messageInfo_IngressRule proto.InternalMessageInfo func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } func (*IngressRuleValue) ProtoMessage() {} func (*IngressRuleValue) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{10} + return fileDescriptor_1c72867a70a7cc90, []int{11} } func (m *IngressRuleValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -359,7 +387,7 @@ var xxx_messageInfo_IngressRuleValue proto.InternalMessageInfo func (m *IngressServiceBackend) Reset() { *m = IngressServiceBackend{} } func (*IngressServiceBackend) ProtoMessage() {} func (*IngressServiceBackend) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{11} + return fileDescriptor_1c72867a70a7cc90, []int{12} } func (m *IngressServiceBackend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -387,7 +415,7 @@ var xxx_messageInfo_IngressServiceBackend proto.InternalMessageInfo func (m *IngressSpec) Reset() { *m = IngressSpec{} } func (*IngressSpec) ProtoMessage() {} func (*IngressSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{12} + return fileDescriptor_1c72867a70a7cc90, []int{13} } func (m *IngressSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -415,7 +443,7 @@ var xxx_messageInfo_IngressSpec proto.InternalMessageInfo func (m *IngressStatus) Reset() { *m = IngressStatus{} } func (*IngressStatus) ProtoMessage() {} func (*IngressStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{13} + return fileDescriptor_1c72867a70a7cc90, []int{14} } func (m *IngressStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -443,7 +471,7 @@ var xxx_messageInfo_IngressStatus proto.InternalMessageInfo func (m *IngressTLS) Reset() { *m = IngressTLS{} } func (*IngressTLS) ProtoMessage() {} func (*IngressTLS) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{14} + return fileDescriptor_1c72867a70a7cc90, []int{15} } func (m *IngressTLS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -471,7 +499,7 @@ var xxx_messageInfo_IngressTLS proto.InternalMessageInfo func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } func (*NetworkPolicy) ProtoMessage() {} func (*NetworkPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{15} + return fileDescriptor_1c72867a70a7cc90, []int{16} } func (m *NetworkPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -499,7 +527,7 @@ var xxx_messageInfo_NetworkPolicy proto.InternalMessageInfo func (m *NetworkPolicyEgressRule) Reset() { *m = NetworkPolicyEgressRule{} } func (*NetworkPolicyEgressRule) ProtoMessage() {} func (*NetworkPolicyEgressRule) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{16} + return fileDescriptor_1c72867a70a7cc90, []int{17} } func (m *NetworkPolicyEgressRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -527,7 +555,7 @@ var xxx_messageInfo_NetworkPolicyEgressRule proto.InternalMessageInfo func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } func (*NetworkPolicyIngressRule) ProtoMessage() {} func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{17} + return fileDescriptor_1c72867a70a7cc90, []int{18} } func (m *NetworkPolicyIngressRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -555,7 +583,7 @@ var xxx_messageInfo_NetworkPolicyIngressRule proto.InternalMessageInfo func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } func (*NetworkPolicyList) ProtoMessage() {} func (*NetworkPolicyList) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{18} + return fileDescriptor_1c72867a70a7cc90, []int{19} } func (m *NetworkPolicyList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -583,7 +611,7 @@ var xxx_messageInfo_NetworkPolicyList proto.InternalMessageInfo func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } func (*NetworkPolicyPeer) ProtoMessage() {} func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{19} + return fileDescriptor_1c72867a70a7cc90, []int{20} } func (m *NetworkPolicyPeer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -611,7 +639,7 @@ var xxx_messageInfo_NetworkPolicyPeer proto.InternalMessageInfo func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } func (*NetworkPolicyPort) ProtoMessage() {} func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{20} + return fileDescriptor_1c72867a70a7cc90, []int{21} } func (m *NetworkPolicyPort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -639,7 +667,7 @@ var xxx_messageInfo_NetworkPolicyPort proto.InternalMessageInfo func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } func (*NetworkPolicySpec) ProtoMessage() {} func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{21} + return fileDescriptor_1c72867a70a7cc90, []int{22} } func (m *NetworkPolicySpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -667,7 +695,7 @@ var xxx_messageInfo_NetworkPolicySpec proto.InternalMessageInfo func (m *ServiceBackendPort) Reset() { *m = ServiceBackendPort{} } func (*ServiceBackendPort) ProtoMessage() {} func (*ServiceBackendPort) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{22} + return fileDescriptor_1c72867a70a7cc90, []int{23} } func (m *ServiceBackendPort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -700,6 +728,7 @@ func init() { proto.RegisterType((*IngressBackend)(nil), "k8s.io.api.networking.v1.IngressBackend") proto.RegisterType((*IngressClass)(nil), "k8s.io.api.networking.v1.IngressClass") proto.RegisterType((*IngressClassList)(nil), "k8s.io.api.networking.v1.IngressClassList") + proto.RegisterType((*IngressClassParametersReference)(nil), "k8s.io.api.networking.v1.IngressClassParametersReference") proto.RegisterType((*IngressClassSpec)(nil), "k8s.io.api.networking.v1.IngressClassSpec") proto.RegisterType((*IngressList)(nil), "k8s.io.api.networking.v1.IngressList") proto.RegisterType((*IngressRule)(nil), "k8s.io.api.networking.v1.IngressRule") @@ -723,98 +752,104 @@ func init() { } var fileDescriptor_1c72867a70a7cc90 = []byte{ - // 1441 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x6f, 0x1b, 0x45, - 0x1b, 0xcf, 0x3a, 0x71, 0xec, 0x8c, 0xd3, 0x34, 0x9d, 0xb7, 0xd5, 0x6b, 0xf5, 0xd5, 0x6b, 0xe7, - 0x5d, 0xbd, 0xb4, 0x81, 0xd2, 0x35, 0x71, 0x2b, 0xc4, 0x0d, 0xd8, 0xf4, 0x2b, 0xe0, 0x26, 0xd6, - 0xd8, 0x2a, 0x02, 0x51, 0xd4, 0xf1, 0x7a, 0x62, 0x6f, 0xbd, 0xde, 0x59, 0x66, 0xc7, 0xa1, 0xbd, - 0x71, 0xe1, 0xc0, 0x8d, 0x7f, 0x81, 0x03, 0x37, 0x6e, 0x70, 0x43, 0x50, 0xb8, 0xa0, 0x1e, 0x7b, - 0xec, 0xc9, 0xa2, 0xe6, 0xbf, 0xc8, 0x09, 0xcd, 0xec, 0xec, 0xa7, 0x63, 0x6c, 0xaa, 0x2a, 0x27, - 0x7b, 0x9f, 0x8f, 0xdf, 0xf3, 0x39, 0xcf, 0x33, 0x03, 0xde, 0x1f, 0xbc, 0xe3, 0x1b, 0x36, 0xad, - 0x0d, 0x46, 0x1d, 0xc2, 0x5c, 0xc2, 0x89, 0x5f, 0x3b, 0x22, 0x6e, 0x97, 0xb2, 0x9a, 0x62, 0x60, - 0xcf, 0xae, 0xb9, 0x84, 0x7f, 0x41, 0xd9, 0xc0, 0x76, 0x7b, 0xb5, 0xa3, 0x9d, 0x5a, 0x8f, 0xb8, - 0x84, 0x61, 0x4e, 0xba, 0x86, 0xc7, 0x28, 0xa7, 0xb0, 0x1c, 0x48, 0x1a, 0xd8, 0xb3, 0x8d, 0x58, - 0xd2, 0x38, 0xda, 0xb9, 0x78, 0xb5, 0x67, 0xf3, 0xfe, 0xa8, 0x63, 0x58, 0x74, 0x58, 0xeb, 0xd1, - 0x1e, 0xad, 0x49, 0x85, 0xce, 0xe8, 0x50, 0x7e, 0xc9, 0x0f, 0xf9, 0x2f, 0x00, 0xba, 0xa8, 0x27, - 0x4c, 0x5a, 0x94, 0x91, 0x13, 0x8c, 0x5d, 0xbc, 0x1e, 0xcb, 0x0c, 0xb1, 0xd5, 0xb7, 0x5d, 0xc2, - 0x1e, 0xd7, 0xbc, 0x41, 0x4f, 0x10, 0xfc, 0xda, 0x90, 0x70, 0x7c, 0x92, 0x56, 0x6d, 0x96, 0x16, - 0x1b, 0xb9, 0xdc, 0x1e, 0x92, 0x29, 0x85, 0xb7, 0xe7, 0x29, 0xf8, 0x56, 0x9f, 0x0c, 0xf1, 0x94, - 0xde, 0xb5, 0x59, 0x7a, 0x23, 0x6e, 0x3b, 0x35, 0xdb, 0xe5, 0x3e, 0x67, 0x59, 0x25, 0xfd, 0x17, - 0x0d, 0x9c, 0xbd, 0xd3, 0x6e, 0x37, 0xf7, 0xdc, 0x1e, 0x23, 0xbe, 0xdf, 0xc4, 0xbc, 0x0f, 0xb7, - 0xc0, 0x8a, 0x87, 0x79, 0xbf, 0xac, 0x6d, 0x69, 0xdb, 0x6b, 0xe6, 0xfa, 0xd3, 0x71, 0x75, 0x69, - 0x32, 0xae, 0xae, 0x08, 0x1e, 0x92, 0x1c, 0x78, 0x1d, 0x14, 0xc5, 0x6f, 0xfb, 0xb1, 0x47, 0xca, - 0xcb, 0x52, 0xaa, 0x3c, 0x19, 0x57, 0x8b, 0x4d, 0x45, 0x3b, 0x4e, 0xfc, 0x47, 0x91, 0x24, 0x6c, - 0x81, 0x42, 0x07, 0x5b, 0x03, 0xe2, 0x76, 0xcb, 0xb9, 0x2d, 0x6d, 0xbb, 0x54, 0xdf, 0x36, 0x66, - 0x95, 0xcf, 0x50, 0xfe, 0x98, 0x81, 0xbc, 0x79, 0x56, 0x39, 0x51, 0x50, 0x04, 0x14, 0x22, 0xe9, - 0x87, 0xe0, 0x7c, 0xc2, 0x7f, 0x34, 0x72, 0xc8, 0x3d, 0xec, 0x8c, 0x08, 0xdc, 0x07, 0x79, 0x61, - 0xd8, 0x2f, 0x6b, 0x5b, 0xcb, 0xdb, 0xa5, 0xfa, 0xeb, 0xb3, 0x4d, 0x65, 0xc2, 0x37, 0xcf, 0x28, - 0x5b, 0x79, 0xf1, 0xe5, 0xa3, 0x00, 0x46, 0x3f, 0x00, 0x85, 0xbd, 0xa6, 0xe9, 0x50, 0x6b, 0x20, - 0xf2, 0x63, 0xd9, 0x5d, 0x96, 0xcd, 0xcf, 0xee, 0xde, 0x0d, 0x84, 0x24, 0x07, 0xea, 0x60, 0x95, - 0x3c, 0xb2, 0x88, 0xc7, 0xcb, 0xb9, 0xad, 0xe5, 0xed, 0x35, 0x13, 0x4c, 0xc6, 0xd5, 0xd5, 0x9b, - 0x92, 0x82, 0x14, 0x47, 0xff, 0x2a, 0x07, 0x0a, 0xca, 0x2c, 0x7c, 0x00, 0x8a, 0xa2, 0x7d, 0xba, - 0x98, 0x63, 0x89, 0x5a, 0xaa, 0xbf, 0x95, 0xf0, 0x37, 0xaa, 0xa6, 0xe1, 0x0d, 0x7a, 0x82, 0xe0, - 0x1b, 0x42, 0x5a, 0xf8, 0x7e, 0xd0, 0x79, 0x48, 0x2c, 0x7e, 0x97, 0x70, 0x6c, 0x42, 0xe5, 0x07, - 0x88, 0x69, 0x28, 0x42, 0x85, 0xb7, 0xc1, 0x8a, 0xef, 0x11, 0x4b, 0x25, 0xfe, 0xb5, 0xb9, 0x89, - 0x6f, 0x79, 0xc4, 0x8a, 0x43, 0x13, 0x5f, 0x48, 0x02, 0xc0, 0x03, 0xb0, 0xea, 0x73, 0xcc, 0x47, - 0xbe, 0x2c, 0x7c, 0xa9, 0x7e, 0x79, 0x3e, 0x94, 0x14, 0x37, 0x37, 0x14, 0xd8, 0x6a, 0xf0, 0x8d, - 0x14, 0x8c, 0xfe, 0x9b, 0x06, 0x36, 0xd2, 0xd5, 0x86, 0xf7, 0x40, 0xc1, 0x27, 0xec, 0xc8, 0xb6, - 0x48, 0x79, 0x45, 0x1a, 0xa9, 0xcd, 0x37, 0x12, 0xc8, 0x87, 0xfd, 0x52, 0x12, 0xbd, 0xa2, 0x68, - 0x28, 0x04, 0x83, 0x1f, 0x81, 0x22, 0x23, 0x3e, 0x1d, 0x31, 0x8b, 0x28, 0xef, 0xaf, 0x26, 0x81, - 0xc5, 0xb9, 0x17, 0x90, 0xa2, 0x59, 0xbb, 0x0d, 0x6a, 0x61, 0x27, 0x48, 0x25, 0x22, 0x87, 0x84, - 0x11, 0xd7, 0x22, 0xe6, 0xba, 0xe8, 0x72, 0xa4, 0x20, 0x50, 0x04, 0x26, 0x4e, 0xd1, 0xba, 0x72, - 0x64, 0xd7, 0xc1, 0xa7, 0x52, 0xd0, 0x46, 0xaa, 0xa0, 0x6f, 0xcc, 0x4d, 0x90, 0xf4, 0x6b, 0x56, - 0x55, 0xf5, 0x9f, 0x35, 0xb0, 0x99, 0x14, 0x6c, 0xd8, 0x3e, 0x87, 0x9f, 0x4e, 0x05, 0x61, 0x2c, - 0x16, 0x84, 0xd0, 0x96, 0x21, 0x6c, 0x2a, 0x53, 0xc5, 0x90, 0x92, 0x08, 0xe0, 0x43, 0x90, 0xb7, - 0x39, 0x19, 0xfa, 0xf2, 0x88, 0x94, 0xea, 0x97, 0x16, 0x8b, 0x20, 0x3e, 0x9d, 0x7b, 0x42, 0x19, - 0x05, 0x18, 0xfa, 0x77, 0x19, 0xff, 0x45, 0x68, 0xb0, 0x0e, 0x80, 0x45, 0x5d, 0xce, 0xa8, 0xe3, - 0x90, 0xf0, 0xb4, 0x46, 0x49, 0xdd, 0x8d, 0x38, 0x28, 0x21, 0x05, 0xef, 0x03, 0xe0, 0x61, 0x86, - 0x87, 0x84, 0x13, 0xe6, 0xab, 0xe4, 0xfe, 0xc3, 0x26, 0xd9, 0x10, 0xf0, 0xcd, 0x08, 0x04, 0x25, - 0x00, 0xf5, 0x1f, 0x34, 0x50, 0x52, 0x7e, 0x9e, 0x42, 0x8a, 0x6f, 0xa5, 0x53, 0xfc, 0xbf, 0xf9, - 0xe3, 0xf6, 0xe4, 0xec, 0x7e, 0x1b, 0x7b, 0x2d, 0x06, 0xac, 0x18, 0x80, 0x7d, 0xea, 0xf3, 0xec, - 0x00, 0xbc, 0x43, 0x7d, 0x8e, 0x24, 0x07, 0x7a, 0x60, 0xd3, 0xce, 0x4c, 0xe4, 0x85, 0x3b, 0x35, - 0xd2, 0x30, 0xcb, 0x0a, 0x79, 0x33, 0xcb, 0x41, 0x53, 0xe8, 0xfa, 0x03, 0x30, 0x25, 0x25, 0xce, - 0x48, 0x9f, 0x73, 0xef, 0x84, 0xcc, 0xce, 0x5e, 0x01, 0xb1, 0xf5, 0xa2, 0x8c, 0xa9, 0xdd, 0x6e, - 0x22, 0x89, 0xa2, 0x7f, 0xad, 0x81, 0x0b, 0x27, 0x4e, 0x1b, 0x91, 0x0f, 0x17, 0x0f, 0x49, 0x36, - 0x1f, 0xfb, 0x78, 0x48, 0x90, 0xe4, 0xc0, 0x7d, 0xb0, 0xe2, 0x51, 0xc6, 0x55, 0x0e, 0xde, 0x9c, - 0xed, 0x49, 0x1a, 0xb9, 0x49, 0x19, 0x4f, 0x2c, 0x60, 0xca, 0x38, 0x92, 0x38, 0xfa, 0xef, 0xb9, - 0xa8, 0x22, 0xb2, 0xd5, 0xdf, 0x8b, 0xf2, 0x2d, 0xdb, 0x5f, 0x58, 0x96, 0xa3, 0x73, 0xcd, 0x3c, - 0x9f, 0xc8, 0x5f, 0xc4, 0x43, 0x53, 0xd2, 0xb0, 0x0b, 0x36, 0xba, 0xe4, 0x10, 0x8f, 0x1c, 0xae, - 0x6c, 0xab, 0xac, 0x2d, 0xbe, 0xa3, 0xe1, 0x64, 0x5c, 0xdd, 0xb8, 0x91, 0xc2, 0x40, 0x19, 0x4c, - 0xb8, 0x0b, 0x96, 0xb9, 0x13, 0xf6, 0xe3, 0xff, 0xe7, 0x42, 0xb7, 0x1b, 0x2d, 0xb3, 0xa4, 0xc2, - 0x5f, 0x6e, 0x37, 0x5a, 0x48, 0x68, 0xc3, 0x0f, 0x40, 0x9e, 0x8d, 0x1c, 0x22, 0x36, 0xd0, 0xf2, - 0x42, 0xcb, 0x4c, 0xd4, 0x34, 0x6e, 0x6d, 0xf1, 0xe5, 0xa3, 0x00, 0x42, 0xff, 0x1c, 0x9c, 0x49, - 0xad, 0x29, 0xf8, 0x00, 0xac, 0x3b, 0x14, 0x77, 0x4d, 0xec, 0x60, 0xd7, 0x52, 0x63, 0x23, 0x33, - 0x9d, 0xc2, 0x11, 0xd0, 0x48, 0xc8, 0xa9, 0x25, 0x77, 0x5e, 0x19, 0x59, 0x4f, 0xf2, 0x50, 0x0a, - 0x51, 0xc7, 0x00, 0xc4, 0xe1, 0xc1, 0x2a, 0xc8, 0x8b, 0x13, 0x13, 0xdc, 0x53, 0xd6, 0xcc, 0x35, - 0xe1, 0xa1, 0x38, 0x48, 0x3e, 0x0a, 0xe8, 0x62, 0x8a, 0xf9, 0xc4, 0x62, 0x84, 0xcb, 0xa2, 0xe6, - 0xd2, 0x53, 0xac, 0x15, 0x71, 0x50, 0x42, 0x4a, 0xff, 0x55, 0x03, 0x67, 0xf6, 0x83, 0x4c, 0x34, - 0xa9, 0x63, 0x5b, 0x8f, 0x4f, 0x61, 0x21, 0xdd, 0x4d, 0x2d, 0xa4, 0x2b, 0xb3, 0x8b, 0x92, 0x72, - 0x6c, 0xe6, 0x46, 0xfa, 0x51, 0x03, 0xff, 0x4e, 0x49, 0xde, 0x8c, 0xe7, 0x4f, 0x13, 0xe4, 0xc5, - 0x29, 0x08, 0xef, 0x76, 0x8b, 0xda, 0x92, 0xa7, 0x29, 0xbe, 0xdd, 0x09, 0x04, 0x14, 0x00, 0xc1, - 0xdb, 0x20, 0xc7, 0xa9, 0x6a, 0xcb, 0x85, 0xe1, 0x08, 0x61, 0x26, 0x50, 0x70, 0xb9, 0x36, 0x45, - 0x39, 0x4e, 0xf5, 0x9f, 0x34, 0x50, 0x4e, 0x49, 0x25, 0xe7, 0xe6, 0xab, 0xf7, 0xfb, 0x2e, 0x58, - 0x39, 0x64, 0x74, 0xf8, 0x32, 0x9e, 0x47, 0x49, 0xbf, 0xc5, 0xe8, 0x10, 0x49, 0x18, 0xfd, 0x89, - 0x06, 0xce, 0xa5, 0x24, 0x4f, 0x61, 0x49, 0x35, 0xd2, 0x4b, 0xea, 0xf2, 0x82, 0x31, 0xcc, 0x58, - 0x55, 0x4f, 0x72, 0x99, 0x08, 0x44, 0xac, 0xf0, 0x10, 0x94, 0x3c, 0xda, 0x6d, 0x11, 0x87, 0x58, - 0x9c, 0x86, 0x67, 0xfa, 0xda, 0x82, 0x41, 0xe0, 0x0e, 0x71, 0x42, 0x55, 0xf3, 0xec, 0x64, 0x5c, - 0x2d, 0x35, 0x63, 0x2c, 0x94, 0x04, 0x86, 0x8f, 0xc0, 0x39, 0x31, 0xee, 0x7d, 0x0f, 0x5b, 0x24, - 0xb2, 0x96, 0x7b, 0x79, 0x6b, 0x17, 0x26, 0xe3, 0xea, 0xb9, 0xfd, 0x2c, 0x22, 0x9a, 0x36, 0x02, - 0xef, 0x80, 0x82, 0xed, 0xc9, 0xe7, 0x89, 0xba, 0xd9, 0xfe, 0xdd, 0xb2, 0x0f, 0xde, 0x31, 0xc1, - 0x25, 0x59, 0x7d, 0xa0, 0x50, 0x5d, 0xff, 0x3e, 0xdb, 0x03, 0xa2, 0xe1, 0xe0, 0x6d, 0x50, 0x94, - 0x0f, 0x46, 0x8b, 0x3a, 0x6a, 0xcd, 0x5d, 0x91, 0x2f, 0x3e, 0x45, 0x3b, 0x1e, 0x57, 0xff, 0x33, - 0xfd, 0x82, 0x36, 0x42, 0x36, 0x8a, 0x94, 0x33, 0x9b, 0x70, 0xf6, 0x10, 0x12, 0x8f, 0x56, 0x23, - 0x78, 0xb4, 0x1a, 0x7b, 0x2e, 0x3f, 0x60, 0x2d, 0xce, 0x6c, 0xb7, 0x17, 0x6c, 0xe5, 0xc4, 0x26, - 0x3c, 0xce, 0x16, 0x5c, 0xee, 0xc3, 0x87, 0xaf, 0xac, 0xe0, 0xff, 0x52, 0x6d, 0x36, 0xbb, 0xe8, - 0xf7, 0x41, 0x41, 0x6d, 0x53, 0xd5, 0xc2, 0xf5, 0x05, 0x5b, 0x38, 0xb9, 0x9d, 0xa2, 0x07, 0x6e, - 0x48, 0x0c, 0x31, 0xe1, 0xc7, 0x60, 0x95, 0x04, 0xe8, 0xc1, 0xba, 0xdb, 0x59, 0x10, 0x3d, 0x9e, - 0x97, 0xf1, 0xd3, 0x4b, 0xd1, 0x14, 0x20, 0x7c, 0x57, 0x64, 0x49, 0xc8, 0x8a, 0xcb, 0xac, 0x5f, - 0x5e, 0x91, 0x1b, 0xe8, 0xbf, 0x41, 0xb0, 0x11, 0xf9, 0x58, 0xdc, 0x66, 0xa3, 0x4f, 0x94, 0xd4, - 0xd0, 0x3f, 0x03, 0x70, 0xfa, 0xc2, 0xb2, 0xc0, 0x75, 0xe8, 0x12, 0x58, 0x75, 0x47, 0xc3, 0x0e, - 0x09, 0x0e, 0x47, 0x3e, 0x76, 0x70, 0x5f, 0x52, 0x91, 0xe2, 0x9a, 0xdb, 0x4f, 0x5f, 0x54, 0x96, - 0x9e, 0xbd, 0xa8, 0x2c, 0x3d, 0x7f, 0x51, 0x59, 0xfa, 0x72, 0x52, 0xd1, 0x9e, 0x4e, 0x2a, 0xda, - 0xb3, 0x49, 0x45, 0x7b, 0x3e, 0xa9, 0x68, 0x7f, 0x4c, 0x2a, 0xda, 0x37, 0x7f, 0x56, 0x96, 0x3e, - 0xc9, 0x1d, 0xed, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0xc5, 0x87, 0xf6, 0x28, 0x4c, 0x12, 0x00, - 0x00, + // 1545 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0x1b, 0x45, + 0x1b, 0xcf, 0x3a, 0x71, 0xec, 0x3c, 0x4e, 0xd2, 0x74, 0xde, 0x56, 0xaf, 0xd5, 0x57, 0xaf, 0x1d, + 0x56, 0xb4, 0x0d, 0x94, 0xda, 0x24, 0xad, 0x10, 0x9c, 0xa0, 0x9b, 0xb6, 0x69, 0x68, 0x9a, 0x58, + 0x63, 0xab, 0x08, 0x04, 0xa8, 0x93, 0xf5, 0xc4, 0xd9, 0x7a, 0xbd, 0xb3, 0xcc, 0x8e, 0x43, 0x7b, + 0xe3, 0xc2, 0x81, 0x1b, 0xff, 0x02, 0x7f, 0x02, 0x82, 0x1b, 0x82, 0xc2, 0x05, 0xf5, 0x58, 0x89, + 0x4b, 0x2f, 0x58, 0xd4, 0xfc, 0x17, 0x39, 0xa1, 0x99, 0x9d, 0xfd, 0xb0, 0x1d, 0x63, 0xab, 0xaa, + 0x72, 0x8a, 0xf7, 0xf9, 0xf8, 0x3d, 0x1f, 0xf3, 0x7c, 0xcc, 0x04, 0x6e, 0xb4, 0xdf, 0x0d, 0x2a, + 0x0e, 0xab, 0xb6, 0xbb, 0xfb, 0x94, 0x7b, 0x54, 0xd0, 0xa0, 0x7a, 0x44, 0xbd, 0x26, 0xe3, 0x55, + 0xcd, 0x20, 0xbe, 0x53, 0xf5, 0xa8, 0xf8, 0x92, 0xf1, 0xb6, 0xe3, 0xb5, 0xaa, 0x47, 0xeb, 0xd5, + 0x16, 0xf5, 0x28, 0x27, 0x82, 0x36, 0x2b, 0x3e, 0x67, 0x82, 0xa1, 0x62, 0x28, 0x59, 0x21, 0xbe, + 0x53, 0x49, 0x24, 0x2b, 0x47, 0xeb, 0x17, 0xae, 0xb6, 0x1c, 0x71, 0xd8, 0xdd, 0xaf, 0xd8, 0xac, + 0x53, 0x6d, 0xb1, 0x16, 0xab, 0x2a, 0x85, 0xfd, 0xee, 0x81, 0xfa, 0x52, 0x1f, 0xea, 0x57, 0x08, + 0x74, 0xc1, 0x4c, 0x99, 0xb4, 0x19, 0xa7, 0x27, 0x18, 0xbb, 0x70, 0x3d, 0x91, 0xe9, 0x10, 0xfb, + 0xd0, 0xf1, 0x28, 0x7f, 0x5c, 0xf5, 0xdb, 0x2d, 0x49, 0x08, 0xaa, 0x1d, 0x2a, 0xc8, 0x49, 0x5a, + 0xd5, 0x71, 0x5a, 0xbc, 0xeb, 0x09, 0xa7, 0x43, 0x47, 0x14, 0xde, 0x99, 0xa4, 0x10, 0xd8, 0x87, + 0xb4, 0x43, 0x46, 0xf4, 0xae, 0x8d, 0xd3, 0xeb, 0x0a, 0xc7, 0xad, 0x3a, 0x9e, 0x08, 0x04, 0x1f, + 0x56, 0x32, 0x7f, 0x31, 0xe0, 0xcc, 0x9d, 0x46, 0xa3, 0xb6, 0xed, 0xb5, 0x38, 0x0d, 0x82, 0x1a, + 0x11, 0x87, 0x68, 0x15, 0xe6, 0x7c, 0x22, 0x0e, 0x8b, 0xc6, 0xaa, 0xb1, 0xb6, 0x60, 0x2d, 0x3e, + 0xed, 0x95, 0x67, 0xfa, 0xbd, 0xf2, 0x9c, 0xe4, 0x61, 0xc5, 0x41, 0xd7, 0x21, 0x2f, 0xff, 0x36, + 0x1e, 0xfb, 0xb4, 0x38, 0xab, 0xa4, 0x8a, 0xfd, 0x5e, 0x39, 0x5f, 0xd3, 0xb4, 0xe3, 0xd4, 0x6f, + 0x1c, 0x4b, 0xa2, 0x3a, 0xe4, 0xf6, 0x89, 0xdd, 0xa6, 0x5e, 0xb3, 0x98, 0x59, 0x35, 0xd6, 0x0a, + 0x1b, 0x6b, 0x95, 0x71, 0xc7, 0x57, 0xd1, 0xfe, 0x58, 0xa1, 0xbc, 0x75, 0x46, 0x3b, 0x91, 0xd3, + 0x04, 0x1c, 0x21, 0x99, 0x07, 0x70, 0x2e, 0xe5, 0x3f, 0xee, 0xba, 0xf4, 0x3e, 0x71, 0xbb, 0x14, + 0xed, 0x42, 0x56, 0x1a, 0x0e, 0x8a, 0xc6, 0xea, 0xec, 0x5a, 0x61, 0xe3, 0x8d, 0xf1, 0xa6, 0x86, + 0xc2, 0xb7, 0x96, 0xb4, 0xad, 0xac, 0xfc, 0x0a, 0x70, 0x08, 0x63, 0xee, 0x41, 0x6e, 0xbb, 0x66, + 0xb9, 0xcc, 0x6e, 0xcb, 0xfc, 0xd8, 0x4e, 0x93, 0x0f, 0xe7, 0x67, 0x73, 0xfb, 0x26, 0xc6, 0x8a, + 0x83, 0x4c, 0x98, 0xa7, 0x8f, 0x6c, 0xea, 0x8b, 0x62, 0x66, 0x75, 0x76, 0x6d, 0xc1, 0x82, 0x7e, + 0xaf, 0x3c, 0x7f, 0x4b, 0x51, 0xb0, 0xe6, 0x98, 0x5f, 0x67, 0x20, 0xa7, 0xcd, 0xa2, 0x07, 0x90, + 0x97, 0xe5, 0xd3, 0x24, 0x82, 0x28, 0xd4, 0xc2, 0xc6, 0xdb, 0x29, 0x7f, 0xe3, 0xd3, 0xac, 0xf8, + 0xed, 0x96, 0x24, 0x04, 0x15, 0x29, 0x2d, 0x7d, 0xdf, 0xdb, 0x7f, 0x48, 0x6d, 0x71, 0x8f, 0x0a, + 0x62, 0x21, 0xed, 0x07, 0x24, 0x34, 0x1c, 0xa3, 0xa2, 0x2d, 0x98, 0x0b, 0x7c, 0x6a, 0xeb, 0xc4, + 0x5f, 0x9c, 0x98, 0xf8, 0xba, 0x4f, 0xed, 0x24, 0x34, 0xf9, 0x85, 0x15, 0x00, 0xda, 0x83, 0xf9, + 0x40, 0x10, 0xd1, 0x0d, 0xd4, 0xc1, 0x17, 0x36, 0x2e, 0x4f, 0x86, 0x52, 0xe2, 0xd6, 0xb2, 0x06, + 0x9b, 0x0f, 0xbf, 0xb1, 0x86, 0x31, 0x7f, 0x33, 0x60, 0x79, 0xf0, 0xb4, 0xd1, 0x7d, 0xc8, 0x05, + 0x94, 0x1f, 0x39, 0x36, 0x2d, 0xce, 0x29, 0x23, 0xd5, 0xc9, 0x46, 0x42, 0xf9, 0xa8, 0x5e, 0x0a, + 0xb2, 0x56, 0x34, 0x0d, 0x47, 0x60, 0xe8, 0x23, 0xc8, 0x73, 0x1a, 0xb0, 0x2e, 0xb7, 0xa9, 0xf6, + 0xfe, 0x6a, 0x1a, 0x58, 0xf6, 0xbd, 0x84, 0x94, 0xc5, 0xda, 0xdc, 0x61, 0x36, 0x71, 0xc3, 0x54, + 0x62, 0x7a, 0x40, 0x39, 0xf5, 0x6c, 0x6a, 0x2d, 0xca, 0x2a, 0xc7, 0x1a, 0x02, 0xc7, 0x60, 0xb2, + 0x8b, 0x16, 0xb5, 0x23, 0x9b, 0x2e, 0x39, 0x95, 0x03, 0xdd, 0x19, 0x38, 0xd0, 0x37, 0x27, 0x26, + 0x48, 0xf9, 0x35, 0xee, 0x54, 0xcd, 0x9f, 0x0d, 0x58, 0x49, 0x0b, 0xee, 0x38, 0x81, 0x40, 0x9f, + 0x8e, 0x04, 0x51, 0x99, 0x2e, 0x08, 0xa9, 0xad, 0x42, 0x58, 0xd1, 0xa6, 0xf2, 0x11, 0x25, 0x15, + 0xc0, 0x5d, 0xc8, 0x3a, 0x82, 0x76, 0x02, 0xd5, 0x22, 0x85, 0x8d, 0x4b, 0xd3, 0x45, 0x90, 0x74, + 0xe7, 0xb6, 0x54, 0xc6, 0x21, 0x86, 0xf9, 0xa7, 0x01, 0xe5, 0xb4, 0x58, 0x8d, 0x70, 0xd2, 0xa1, + 0x82, 0xf2, 0x20, 0x3e, 0x3c, 0xb4, 0x06, 0x79, 0x52, 0xdb, 0xde, 0xe2, 0xac, 0xeb, 0x47, 0xad, + 0x2b, 0x5d, 0xbb, 0xa1, 0x69, 0x38, 0xe6, 0xca, 0x06, 0x6f, 0x3b, 0x7a, 0x4a, 0xa5, 0x1a, 0xfc, + 0xae, 0xe3, 0x35, 0xb1, 0xe2, 0x48, 0x09, 0x8f, 0x74, 0xa2, 0xe1, 0x17, 0x4b, 0xec, 0x92, 0x0e, + 0xc5, 0x8a, 0x83, 0xca, 0x90, 0x0d, 0x6c, 0xe6, 0x87, 0x15, 0xbc, 0x60, 0x2d, 0x48, 0x97, 0xeb, + 0x92, 0x80, 0x43, 0x3a, 0xba, 0x02, 0x0b, 0x52, 0x30, 0xf0, 0x89, 0x4d, 0x8b, 0x59, 0x25, 0xb4, + 0xd4, 0xef, 0x95, 0x17, 0x76, 0x23, 0x22, 0x4e, 0xf8, 0xe6, 0xf7, 0x43, 0xe7, 0x23, 0x8f, 0x0e, + 0x6d, 0x00, 0xd8, 0xcc, 0x13, 0x9c, 0xb9, 0x2e, 0x8d, 0xa6, 0x51, 0x5c, 0x34, 0x9b, 0x31, 0x07, + 0xa7, 0xa4, 0x90, 0x03, 0xe0, 0xc7, 0xb9, 0xd1, 0xc5, 0xf3, 0xde, 0x74, 0xa9, 0x3f, 0x21, 0xa7, + 0xd6, 0xb2, 0x34, 0x95, 0x62, 0xa4, 0xc0, 0xcd, 0x1f, 0x0c, 0x28, 0x68, 0xfd, 0x53, 0x28, 0xa7, + 0xdb, 0x83, 0xe5, 0xf4, 0xda, 0xe4, 0xd5, 0x72, 0x72, 0x25, 0x7d, 0x97, 0x78, 0x2d, 0x97, 0x89, + 0x3c, 0xe9, 0x43, 0x16, 0x88, 0xe1, 0x61, 0x7f, 0x87, 0x05, 0x02, 0x2b, 0x0e, 0xf2, 0x61, 0xc5, + 0x19, 0xda, 0x3e, 0x53, 0x77, 0x65, 0xac, 0x61, 0x15, 0x35, 0xf2, 0xca, 0x30, 0x07, 0x8f, 0xa0, + 0x9b, 0x0f, 0x60, 0x44, 0x4a, 0xce, 0x83, 0x43, 0x21, 0xfc, 0x13, 0x32, 0x3b, 0x7e, 0xdd, 0x25, + 0xd6, 0xf3, 0x2a, 0xa6, 0x46, 0xa3, 0x86, 0x15, 0x8a, 0xf9, 0x8d, 0x01, 0xe7, 0x4f, 0x9c, 0xac, + 0x71, 0xe5, 0x1b, 0x63, 0x2b, 0x7f, 0x17, 0xe6, 0x7c, 0xc6, 0x85, 0xce, 0xc1, 0x5b, 0xe3, 0x3d, + 0x19, 0x44, 0xae, 0x31, 0x2e, 0x52, 0x97, 0x0d, 0xc6, 0x05, 0x56, 0x38, 0xe6, 0xef, 0x99, 0xf8, + 0x44, 0x54, 0xd9, 0x7f, 0x10, 0xe7, 0x5b, 0x95, 0xa5, 0xb4, 0xac, 0x9b, 0xec, 0x5c, 0x2a, 0x7f, + 0x31, 0x0f, 0x8f, 0x48, 0xa3, 0x26, 0x2c, 0x37, 0xe9, 0x01, 0xe9, 0xba, 0x42, 0xdb, 0xd6, 0x59, + 0x9b, 0xfe, 0x3e, 0x82, 0xfa, 0xbd, 0xf2, 0xf2, 0xcd, 0x01, 0x0c, 0x3c, 0x84, 0x89, 0x36, 0x61, + 0x56, 0xb8, 0x51, 0x3d, 0xbe, 0x3e, 0x11, 0xba, 0xb1, 0x53, 0xb7, 0x0a, 0x3a, 0xfc, 0xd9, 0xc6, + 0x4e, 0x1d, 0x4b, 0x6d, 0xf4, 0x21, 0x64, 0x79, 0xd7, 0xa5, 0x72, 0xdb, 0xce, 0x4e, 0xb5, 0xb8, + 0xe5, 0x99, 0x26, 0xa5, 0x2d, 0xbf, 0x02, 0x1c, 0x42, 0x98, 0x5f, 0xc0, 0xd2, 0xc0, 0x4a, 0x46, + 0x0f, 0x60, 0xd1, 0x65, 0xa4, 0x69, 0x11, 0x97, 0x78, 0xb6, 0x1e, 0x21, 0x43, 0x93, 0x38, 0xda, + 0x89, 0x3b, 0x29, 0x39, 0xbd, 0xd0, 0xcf, 0x69, 0x23, 0x8b, 0x69, 0x1e, 0x1e, 0x40, 0x34, 0x09, + 0x40, 0x12, 0x9e, 0x9c, 0x89, 0xb2, 0x63, 0xc2, 0x3b, 0x99, 0x9e, 0x89, 0xb2, 0x91, 0x02, 0x1c, + 0xd2, 0xe5, 0x44, 0x0b, 0xa8, 0xcd, 0xa9, 0x50, 0x87, 0x9a, 0x19, 0x9c, 0x68, 0xf5, 0x98, 0x83, + 0x53, 0x52, 0xe6, 0xaf, 0x06, 0x2c, 0xed, 0x86, 0x99, 0xa8, 0x31, 0xd7, 0xb1, 0x1f, 0x9f, 0xc2, + 0xf2, 0xbd, 0x37, 0xb0, 0x7c, 0xaf, 0x8c, 0x3f, 0x94, 0x01, 0xc7, 0xc6, 0x6e, 0xdf, 0x1f, 0x0d, + 0xf8, 0xef, 0x80, 0xe4, 0xad, 0x64, 0xfe, 0xd4, 0x20, 0x2b, 0xbb, 0x20, 0xba, 0xc7, 0x4e, 0x6b, + 0x4b, 0x75, 0x53, 0x72, 0x93, 0x95, 0x08, 0x38, 0x04, 0x42, 0x5b, 0x90, 0x11, 0x4c, 0x97, 0xe5, + 0xd4, 0x70, 0x94, 0x72, 0x0b, 0x34, 0x5c, 0xa6, 0xc1, 0x70, 0x46, 0x30, 0xf3, 0x27, 0x03, 0x8a, + 0x03, 0x52, 0xe9, 0xb9, 0xf9, 0xea, 0xfd, 0xbe, 0x07, 0x73, 0x07, 0x9c, 0x75, 0x5e, 0xc6, 0xf3, + 0x38, 0xe9, 0xb7, 0x39, 0xeb, 0x60, 0x05, 0x63, 0x3e, 0x31, 0xe0, 0xec, 0x80, 0xe4, 0x29, 0x2c, + 0xa9, 0x9d, 0xc1, 0x25, 0x75, 0x79, 0xca, 0x18, 0xc6, 0xac, 0xaa, 0x27, 0x99, 0xa1, 0x08, 0x64, + 0xac, 0xe8, 0x00, 0x0a, 0x3e, 0x6b, 0xd6, 0xa9, 0x4b, 0x6d, 0xc1, 0xa2, 0x9e, 0xbe, 0x36, 0x65, + 0x10, 0x64, 0x9f, 0xba, 0x91, 0xaa, 0x75, 0xa6, 0xdf, 0x2b, 0x17, 0x6a, 0x09, 0x16, 0x4e, 0x03, + 0xa3, 0x47, 0x70, 0x36, 0xbe, 0x9f, 0xc4, 0xd6, 0x32, 0x2f, 0x6f, 0xed, 0x7c, 0xbf, 0x57, 0x3e, + 0xbb, 0x3b, 0x8c, 0x88, 0x47, 0x8d, 0xa0, 0x3b, 0x90, 0x73, 0x7c, 0xf5, 0x14, 0xd3, 0xb7, 0xf8, + 0x7f, 0x5b, 0xf6, 0xe1, 0x9b, 0x2d, 0x7c, 0x10, 0xe8, 0x0f, 0x1c, 0xa9, 0x9b, 0x7f, 0x0c, 0xd7, + 0x80, 0x2c, 0x38, 0xb4, 0x05, 0x79, 0xf5, 0x38, 0xb6, 0x99, 0xab, 0xd7, 0xdc, 0x15, 0xf5, 0xba, + 0xd5, 0xb4, 0xe3, 0x5e, 0xf9, 0x7f, 0xa3, 0xff, 0x2d, 0xa8, 0x44, 0x6c, 0x1c, 0x2b, 0x0f, 0x6d, + 0xc2, 0xf1, 0x43, 0x48, 0x3e, 0xd0, 0x2b, 0xe1, 0x03, 0xbd, 0xb2, 0xed, 0x89, 0x3d, 0x5e, 0x17, + 0xdc, 0xf1, 0x5a, 0xe1, 0x56, 0x4e, 0x36, 0x21, 0xba, 0x08, 0x39, 0xbd, 0x28, 0x55, 0xe0, 0xd9, + 0x30, 0xaa, 0x5b, 0x21, 0x09, 0x47, 0x3c, 0xf3, 0x78, 0xb8, 0x2e, 0xd4, 0xda, 0x7c, 0xf8, 0xca, + 0xea, 0xe2, 0x3f, 0xba, 0x1a, 0xc7, 0xd7, 0xc6, 0x67, 0x90, 0xd3, 0x4b, 0x57, 0x57, 0xfa, 0xc6, + 0x94, 0x95, 0x9e, 0x5e, 0x62, 0xf1, 0x9b, 0x3f, 0x22, 0x46, 0x98, 0xe8, 0x63, 0x98, 0xa7, 0x21, + 0x7a, 0xb8, 0x15, 0xd7, 0xa7, 0x44, 0x4f, 0xc6, 0x6a, 0xf2, 0x1a, 0xd5, 0x34, 0x0d, 0x88, 0xde, + 0x97, 0x59, 0x92, 0xb2, 0xf2, 0x11, 0x18, 0x14, 0xe7, 0xd4, 0xa2, 0xfa, 0x7f, 0x18, 0x6c, 0x4c, + 0x3e, 0x96, 0x97, 0xde, 0xf8, 0x13, 0xa7, 0x35, 0xcc, 0xcf, 0x01, 0x8d, 0xde, 0x6b, 0xa6, 0xb8, + 0x35, 0x5d, 0x82, 0x79, 0xaf, 0xdb, 0xd9, 0xa7, 0x61, 0x0f, 0x65, 0x13, 0x07, 0x77, 0x15, 0x15, + 0x6b, 0xae, 0xb5, 0xf6, 0xf4, 0x45, 0x69, 0xe6, 0xd9, 0x8b, 0xd2, 0xcc, 0xf3, 0x17, 0xa5, 0x99, + 0xaf, 0xfa, 0x25, 0xe3, 0x69, 0xbf, 0x64, 0x3c, 0xeb, 0x97, 0x8c, 0xe7, 0xfd, 0x92, 0xf1, 0x57, + 0xbf, 0x64, 0x7c, 0xfb, 0x77, 0x69, 0xe6, 0x93, 0xcc, 0xd1, 0xfa, 0x3f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xe9, 0x15, 0xcc, 0xab, 0x5f, 0x13, 0x00, 0x00, } func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { @@ -1126,6 +1161,60 @@ func (m *IngressClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *IngressClassParametersReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressClassParametersReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressClassParametersReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Namespace != nil { + i -= len(*m.Namespace) + copy(dAtA[i:], *m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Namespace))) + i-- + dAtA[i] = 0x2a + } + if m.Scope != nil { + i -= len(*m.Scope) + copy(dAtA[i:], *m.Scope) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Scope))) + i-- + dAtA[i] = 0x22 + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + if m.APIGroup != nil { + i -= len(*m.APIGroup) + copy(dAtA[i:], *m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.APIGroup))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *IngressClassSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1735,6 +1824,11 @@ func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.EndPort != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.EndPort)) + i-- + dAtA[i] = 0x18 + } if m.Port != nil { { size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) @@ -1980,6 +2074,31 @@ func (m *IngressClassList) Size() (n int) { return n } +func (m *IngressClassParametersReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.APIGroup != nil { + l = len(*m.APIGroup) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Scope != nil { + l = len(*m.Scope) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Namespace != nil { + l = len(*m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *IngressClassSpec) Size() (n int) { if m == nil { return 0 @@ -2215,6 +2334,9 @@ func (m *NetworkPolicyPort) Size() (n int) { l = m.Port.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.EndPort != nil { + n += 1 + sovGenerated(uint64(*m.EndPort)) + } return n } @@ -2353,13 +2475,27 @@ func (this *IngressClassList) String() string { }, "") return s } +func (this *IngressClassParametersReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressClassParametersReference{`, + `APIGroup:` + valueToStringGenerated(this.APIGroup) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Scope:` + valueToStringGenerated(this.Scope) + `,`, + `Namespace:` + valueToStringGenerated(this.Namespace) + `,`, + `}`, + }, "") + return s +} func (this *IngressClassSpec) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&IngressClassSpec{`, `Controller:` + fmt.Sprintf("%v", this.Controller) + `,`, - `Parameters:` + strings.Replace(fmt.Sprintf("%v", this.Parameters), "TypedLocalObjectReference", "v11.TypedLocalObjectReference", 1) + `,`, + `Parameters:` + strings.Replace(this.Parameters.String(), "IngressClassParametersReference", "IngressClassParametersReference", 1) + `,`, `}`, }, "") return s @@ -2544,6 +2680,7 @@ func (this *NetworkPolicyPort) String() string { s := strings.Join([]string{`&NetworkPolicyPort{`, `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`, + `EndPort:` + valueToStringGenerated(this.EndPort) + `,`, `}`, }, "") return s @@ -2723,10 +2860,7 @@ func (m *HTTPIngressPath) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2810,10 +2944,7 @@ func (m *HTTPIngressRuleValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2927,10 +3058,7 @@ func (m *IPBlock) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3079,10 +3207,7 @@ func (m *Ingress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3204,10 +3329,7 @@ func (m *IngressBackend) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3323,10 +3445,7 @@ func (m *IngressClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3443,10 +3562,220 @@ func (m *IngressClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressClassParametersReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressClassParametersReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressClassParametersReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIGroup", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.APIGroup = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Scope = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Namespace = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3552,7 +3881,7 @@ func (m *IngressClassSpec) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Parameters == nil { - m.Parameters = &v11.TypedLocalObjectReference{} + m.Parameters = &IngressClassParametersReference{} } if err := m.Parameters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3564,10 +3893,7 @@ func (m *IngressClassSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3684,10 +4010,7 @@ func (m *IngressList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3802,10 +4125,7 @@ func (m *IngressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3891,10 +4211,7 @@ func (m *IngressRuleValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4009,10 +4326,7 @@ func (m *IngressServiceBackend) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4199,10 +4513,7 @@ func (m *IngressSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4285,10 +4596,7 @@ func (m *IngressStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4402,10 +4710,7 @@ func (m *IngressTLS) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4521,10 +4826,7 @@ func (m *NetworkPolicy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4642,10 +4944,7 @@ func (m *NetworkPolicyEgressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4763,10 +5062,7 @@ func (m *NetworkPolicyIngressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4883,10 +5179,7 @@ func (m *NetworkPolicyList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5044,10 +5337,7 @@ func (m *NetworkPolicyPeer) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5160,16 +5450,33 @@ func (m *NetworkPolicyPort) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EndPort", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EndPort = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5352,10 +5659,7 @@ func (m *NetworkPolicySpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5456,10 +5760,7 @@ func (m *ServiceBackendPort) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/networking/v1/generated.proto b/constraint/vendor/k8s.io/api/networking/v1/generated.proto index 74737098b..8f23477d8 100644 --- a/constraint/vendor/k8s.io/api/networking/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/networking/v1/generated.proto @@ -150,6 +150,36 @@ message IngressClassList { repeated IngressClass items = 2; } +// IngressClassParametersReference identifies an API object. This can be used +// to specify a cluster or namespace-scoped resource. +message IngressClassParametersReference { + // APIGroup is the group for the resource being referenced. If APIGroup is + // not specified, the specified Kind must be in the core API group. For any + // other third-party types, APIGroup is required. + // +optional + optional string aPIGroup = 1; + + // Kind is the type of resource being referenced. + optional string kind = 2; + + // Name is the name of resource being referenced. + optional string name = 3; + + // Scope represents if this refers to a cluster or namespace scoped resource. + // This may be set to "Cluster" (default) or "Namespace". + // Field can be enabled with IngressClassNamespacedParams feature gate. + // +optional + // +featureGate=IngressClassNamespacedParams + optional string scope = 4; + + // Namespace is the namespace of the resource being referenced. This field is + // required when scope is set to "Namespace" and must be unset when scope is set to + // "Cluster". + // +optional + // +featureGate=IngressClassNamespacedParams + optional string namespace = 5; +} + // IngressClassSpec provides information about the class of an Ingress. message IngressClassSpec { // Controller refers to the name of the controller that should handle this @@ -164,7 +194,7 @@ message IngressClassSpec { // configuration for the controller. This is optional if the controller does // not require extra parameters. // +optional - optional k8s.io.api.core.v1.TypedLocalObjectReference parameters = 2; + optional IngressClassParametersReference parameters = 2; } // IngressList is a collection of Ingress. @@ -398,10 +428,21 @@ message NetworkPolicyPort { // +optional optional string protocol = 1; - // The port on the given protocol. This can either be a numerical or named port on - // a pod. If this field is not provided, this matches all port names and numbers. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2; + + // If set, indicates that the range of ports from port to endPort, inclusive, + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". + // +optional + optional int32 endPort = 3; } // NetworkPolicySpec provides the specification of a NetworkPolicy @@ -435,7 +476,7 @@ message NetworkPolicySpec { repeated NetworkPolicyEgressRule egress = 3; // List of rule types that the NetworkPolicy relates to. - // Valid options are "Ingress", "Egress", or "Ingress,Egress". + // Valid options are ["Ingress"], ["Egress"], or ["Ingress", "Egress"]. // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. diff --git a/constraint/vendor/k8s.io/api/networking/v1/types.go b/constraint/vendor/k8s.io/api/networking/v1/types.go index df2569089..6cc210b89 100644 --- a/constraint/vendor/k8s.io/api/networking/v1/types.go +++ b/constraint/vendor/k8s.io/api/networking/v1/types.go @@ -17,7 +17,7 @@ limitations under the License. package v1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -38,7 +38,7 @@ type NetworkPolicy struct { Spec NetworkPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } -// Policy Type string describes the NetworkPolicy type +// PolicyType string describes the NetworkPolicy type // This type is beta-level in 1.8 type PolicyType string @@ -80,7 +80,7 @@ type NetworkPolicySpec struct { Egress []NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"` // List of rule types that the NetworkPolicy relates to. - // Valid options are "Ingress", "Egress", or "Ingress,Egress". + // Valid options are ["Ingress"], ["Egress"], or ["Ingress", "Egress"]. // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -141,10 +141,21 @@ type NetworkPolicyPort struct { // +optional Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"` - // The port on the given protocol. This can either be a numerical or named port on - // a pod. If this field is not provided, this matches all port names and numbers. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` + + // If set, indicates that the range of ports from port to endPort, inclusive, + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". + // +optional + EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } // IPBlock describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is allowed @@ -497,7 +508,42 @@ type IngressClassSpec struct { // configuration for the controller. This is optional if the controller does // not require extra parameters. // +optional - Parameters *v1.TypedLocalObjectReference `json:"parameters,omitempty" protobuf:"bytes,2,opt,name=parameters"` + Parameters *IngressClassParametersReference `json:"parameters,omitempty" protobuf:"bytes,2,opt,name=parameters"` +} + +const ( + // IngressClassParametersReferenceScopeNamespace indicates that the + // referenced Parameters resource is namespace-scoped. + IngressClassParametersReferenceScopeNamespace = "Namespace" + // IngressClassParametersReferenceScopeNamespace indicates that the + // referenced Parameters resource is cluster-scoped. + IngressClassParametersReferenceScopeCluster = "Cluster" +) + +// IngressClassParametersReference identifies an API object. This can be used +// to specify a cluster or namespace-scoped resource. +type IngressClassParametersReference struct { + // APIGroup is the group for the resource being referenced. If APIGroup is + // not specified, the specified Kind must be in the core API group. For any + // other third-party types, APIGroup is required. + // +optional + APIGroup *string `json:"apiGroup,omitempty" protobuf:"bytes,1,opt,name=aPIGroup"` + // Kind is the type of resource being referenced. + Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"` + // Name is the name of resource being referenced. + Name string `json:"name" protobuf:"bytes,3,opt,name=name"` + // Scope represents if this refers to a cluster or namespace scoped resource. + // This may be set to "Cluster" (default) or "Namespace". + // Field can be enabled with IngressClassNamespacedParams feature gate. + // +optional + // +featureGate=IngressClassNamespacedParams + Scope *string `json:"scope" protobuf:"bytes,4,opt,name=scope"` + // Namespace is the namespace of the resource being referenced. This field is + // required when scope is set to "Namespace" and must be unset when scope is set to + // "Cluster". + // +optional + // +featureGate=IngressClassNamespacedParams + Namespace *string `json:"namespace,omitempty" protobuf:"bytes,5,opt,name=namespace"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/constraint/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go index 41b9b3fb6..88f9a8f13 100644 --- a/constraint/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go @@ -98,6 +98,19 @@ func (IngressClassList) SwaggerDoc() map[string]string { return map_IngressClassList } +var map_IngressClassParametersReference = map[string]string{ + "": "IngressClassParametersReference identifies an API object. This can be used to specify a cluster or namespace-scoped resource.", + "apiGroup": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "kind": "Kind is the type of resource being referenced.", + "name": "Name is the name of resource being referenced.", + "scope": "Scope represents if this refers to a cluster or namespace scoped resource. This may be set to \"Cluster\" (default) or \"Namespace\". Field can be enabled with IngressClassNamespacedParams feature gate.", + "namespace": "Namespace is the namespace of the resource being referenced. This field is required when scope is set to \"Namespace\" and must be unset when scope is set to \"Cluster\".", +} + +func (IngressClassParametersReference) SwaggerDoc() map[string]string { + return map_IngressClassParametersReference +} + var map_IngressClassSpec = map[string]string{ "": "IngressClassSpec provides information about the class of an Ingress.", "controller": "Controller refers to the name of the controller that should handle this class. This allows for different \"flavors\" that are controlled by the same controller. For example, you may have different Parameters for the same implementing controller. This should be specified as a domain-prefixed path no more than 250 characters in length, e.g. \"acme.io/ingress-controller\". This field is immutable.", @@ -230,7 +243,8 @@ func (NetworkPolicyPeer) SwaggerDoc() map[string]string { var map_NetworkPolicyPort = map[string]string{ "": "NetworkPolicyPort describes a port to allow traffic on", "protocol": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", + "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + "endPort": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".", } func (NetworkPolicyPort) SwaggerDoc() map[string]string { @@ -242,7 +256,7 @@ var map_NetworkPolicySpec = map[string]string{ "podSelector": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", "ingress": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)", "egress": "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", + "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are [\"Ingress\"], [\"Egress\"], or [\"Ingress\", \"Egress\"]. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", } func (NetworkPolicySpec) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go index b17e78927..76e339aed 100644 --- a/constraint/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go @@ -207,12 +207,43 @@ func (in *IngressClassList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressClassParametersReference) DeepCopyInto(out *IngressClassParametersReference) { + *out = *in + if in.APIGroup != nil { + in, out := &in.APIGroup, &out.APIGroup + *out = new(string) + **out = **in + } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(string) + **out = **in + } + if in.Namespace != nil { + in, out := &in.Namespace, &out.Namespace + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressClassParametersReference. +func (in *IngressClassParametersReference) DeepCopy() *IngressClassParametersReference { + if in == nil { + return nil + } + out := new(IngressClassParametersReference) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IngressClassSpec) DeepCopyInto(out *IngressClassSpec) { *out = *in if in.Parameters != nil { in, out := &in.Parameters, &out.Parameters - *out = new(corev1.TypedLocalObjectReference) + *out = new(IngressClassParametersReference) (*in).DeepCopyInto(*out) } return @@ -558,6 +589,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) { *out = new(intstr.IntOrString) **out = **in } + if in.EndPort != nil { + in, out := &in.EndPort, &out.EndPort + *out = new(int32) + **out = **in + } return } diff --git a/constraint/vendor/k8s.io/api/networking/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/networking/v1beta1/generated.pb.go index 6f51df864..cda115147 100644 --- a/constraint/vendor/k8s.io/api/networking/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/networking/v1beta1/generated.pb.go @@ -212,10 +212,38 @@ func (m *IngressClassList) XXX_DiscardUnknown() { var xxx_messageInfo_IngressClassList proto.InternalMessageInfo +func (m *IngressClassParametersReference) Reset() { *m = IngressClassParametersReference{} } +func (*IngressClassParametersReference) ProtoMessage() {} +func (*IngressClassParametersReference) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{6} +} +func (m *IngressClassParametersReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressClassParametersReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressClassParametersReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressClassParametersReference.Merge(m, src) +} +func (m *IngressClassParametersReference) XXX_Size() int { + return m.Size() +} +func (m *IngressClassParametersReference) XXX_DiscardUnknown() { + xxx_messageInfo_IngressClassParametersReference.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressClassParametersReference proto.InternalMessageInfo + func (m *IngressClassSpec) Reset() { *m = IngressClassSpec{} } func (*IngressClassSpec) ProtoMessage() {} func (*IngressClassSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{6} + return fileDescriptor_5bea11de0ceb8f53, []int{7} } func (m *IngressClassSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -243,7 +271,7 @@ var xxx_messageInfo_IngressClassSpec proto.InternalMessageInfo func (m *IngressList) Reset() { *m = IngressList{} } func (*IngressList) ProtoMessage() {} func (*IngressList) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{7} + return fileDescriptor_5bea11de0ceb8f53, []int{8} } func (m *IngressList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -271,7 +299,7 @@ var xxx_messageInfo_IngressList proto.InternalMessageInfo func (m *IngressRule) Reset() { *m = IngressRule{} } func (*IngressRule) ProtoMessage() {} func (*IngressRule) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{8} + return fileDescriptor_5bea11de0ceb8f53, []int{9} } func (m *IngressRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -299,7 +327,7 @@ var xxx_messageInfo_IngressRule proto.InternalMessageInfo func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } func (*IngressRuleValue) ProtoMessage() {} func (*IngressRuleValue) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{9} + return fileDescriptor_5bea11de0ceb8f53, []int{10} } func (m *IngressRuleValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -327,7 +355,7 @@ var xxx_messageInfo_IngressRuleValue proto.InternalMessageInfo func (m *IngressSpec) Reset() { *m = IngressSpec{} } func (*IngressSpec) ProtoMessage() {} func (*IngressSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{10} + return fileDescriptor_5bea11de0ceb8f53, []int{11} } func (m *IngressSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -355,7 +383,7 @@ var xxx_messageInfo_IngressSpec proto.InternalMessageInfo func (m *IngressStatus) Reset() { *m = IngressStatus{} } func (*IngressStatus) ProtoMessage() {} func (*IngressStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{11} + return fileDescriptor_5bea11de0ceb8f53, []int{12} } func (m *IngressStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -383,7 +411,7 @@ var xxx_messageInfo_IngressStatus proto.InternalMessageInfo func (m *IngressTLS) Reset() { *m = IngressTLS{} } func (*IngressTLS) ProtoMessage() {} func (*IngressTLS) Descriptor() ([]byte, []int) { - return fileDescriptor_5bea11de0ceb8f53, []int{12} + return fileDescriptor_5bea11de0ceb8f53, []int{13} } func (m *IngressTLS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -415,6 +443,7 @@ func init() { proto.RegisterType((*IngressBackend)(nil), "k8s.io.api.networking.v1beta1.IngressBackend") proto.RegisterType((*IngressClass)(nil), "k8s.io.api.networking.v1beta1.IngressClass") proto.RegisterType((*IngressClassList)(nil), "k8s.io.api.networking.v1beta1.IngressClassList") + proto.RegisterType((*IngressClassParametersReference)(nil), "k8s.io.api.networking.v1beta1.IngressClassParametersReference") proto.RegisterType((*IngressClassSpec)(nil), "k8s.io.api.networking.v1beta1.IngressClassSpec") proto.RegisterType((*IngressList)(nil), "k8s.io.api.networking.v1beta1.IngressList") proto.RegisterType((*IngressRule)(nil), "k8s.io.api.networking.v1beta1.IngressRule") @@ -429,69 +458,75 @@ func init() { } var fileDescriptor_5bea11de0ceb8f53 = []byte{ - // 990 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0xaf, 0x93, 0x66, 0x9b, 0x4e, 0xb2, 0xdd, 0x6a, 0xe8, 0x21, 0xaa, 0x84, 0x5b, 0xf9, 0x80, - 0xca, 0x9f, 0xda, 0x34, 0xbb, 0x20, 0x8e, 0xc8, 0x2b, 0xa1, 0x56, 0x04, 0x1a, 0x26, 0x16, 0x20, - 0x04, 0xd2, 0x4e, 0x9c, 0xb7, 0x8e, 0x89, 0x63, 0x9b, 0x99, 0x71, 0xd0, 0xde, 0xb8, 0x72, 0x82, - 0x2f, 0x01, 0x9f, 0x81, 0x23, 0x82, 0x4b, 0x8f, 0x7b, 0xdc, 0x53, 0x45, 0xc3, 0xb7, 0xe0, 0x84, - 0x66, 0x3c, 0xb5, 0x9d, 0xa4, 0xa5, 0x59, 0x0e, 0x7b, 0x8a, 0x67, 0xde, 0x7b, 0xbf, 0x37, 0xef, - 0xf7, 0x7e, 0x33, 0x2f, 0xe8, 0xa3, 0xc9, 0x07, 0xdc, 0x0e, 0x13, 0x67, 0x92, 0x0d, 0x81, 0xc5, - 0x20, 0x80, 0x3b, 0x33, 0x88, 0x47, 0x09, 0x73, 0xb4, 0x81, 0xa6, 0xa1, 0x13, 0x83, 0xf8, 0x3e, - 0x61, 0x93, 0x30, 0x0e, 0x9c, 0xd9, 0xc9, 0x10, 0x04, 0x3d, 0x71, 0x02, 0x88, 0x81, 0x51, 0x01, - 0x23, 0x3b, 0x65, 0x89, 0x48, 0xf0, 0xeb, 0xb9, 0xbb, 0x4d, 0xd3, 0xd0, 0x2e, 0xdd, 0x6d, 0xed, - 0xbe, 0x7f, 0x1c, 0x84, 0x62, 0x9c, 0x0d, 0x6d, 0x3f, 0x99, 0x3a, 0x41, 0x12, 0x24, 0x8e, 0x8a, - 0x1a, 0x66, 0x4f, 0xd5, 0x4a, 0x2d, 0xd4, 0x57, 0x8e, 0xb6, 0x6f, 0x55, 0x92, 0xfb, 0x09, 0x03, - 0x67, 0xb6, 0x92, 0x71, 0xff, 0x51, 0xe9, 0x33, 0xa5, 0xfe, 0x38, 0x8c, 0x81, 0x3d, 0x73, 0xd2, - 0x49, 0x20, 0x37, 0xb8, 0x33, 0x05, 0x41, 0x6f, 0x8a, 0x72, 0x6e, 0x8b, 0x62, 0x59, 0x2c, 0xc2, - 0x29, 0xac, 0x04, 0xbc, 0x7f, 0x57, 0x00, 0xf7, 0xc7, 0x30, 0xa5, 0x2b, 0x71, 0x0f, 0x6f, 0x8b, - 0xcb, 0x44, 0x18, 0x39, 0x61, 0x2c, 0xb8, 0x60, 0xcb, 0x41, 0xd6, 0x9f, 0x06, 0x7a, 0x70, 0xea, - 0x79, 0xfd, 0xb3, 0x38, 0x60, 0xc0, 0x79, 0x9f, 0x8a, 0x31, 0x3e, 0x44, 0x9b, 0x29, 0x15, 0xe3, - 0x8e, 0x71, 0x68, 0x1c, 0x6d, 0xbb, 0xed, 0x8b, 0xcb, 0x83, 0x8d, 0xf9, 0xe5, 0xc1, 0xa6, 0xb4, - 0x11, 0x65, 0xc1, 0x8f, 0x50, 0x53, 0xfe, 0x7a, 0xcf, 0x52, 0xe8, 0xd4, 0x95, 0x57, 0x67, 0x7e, - 0x79, 0xd0, 0xec, 0xeb, 0xbd, 0x7f, 0x2a, 0xdf, 0xa4, 0xf0, 0xc4, 0x5f, 0xa2, 0xad, 0x21, 0xf5, - 0x27, 0x10, 0x8f, 0x3a, 0xb5, 0x43, 0xe3, 0xa8, 0xd5, 0x3d, 0xb6, 0xff, 0xb3, 0x87, 0xb6, 0x3e, - 0x94, 0x9b, 0x07, 0xb9, 0x0f, 0xf4, 0x49, 0xb6, 0xf4, 0x06, 0xb9, 0x86, 0xb3, 0x26, 0x68, 0xaf, - 0x52, 0x04, 0xc9, 0x22, 0xf8, 0x9c, 0x46, 0x19, 0xe0, 0x01, 0x6a, 0xc8, 0xec, 0xbc, 0x63, 0x1c, - 0xd6, 0x8f, 0x5a, 0x5d, 0xfb, 0x8e, 0x7c, 0x4b, 0x44, 0xb8, 0xf7, 0x75, 0xc2, 0x86, 0x5c, 0x71, - 0x92, 0x63, 0x59, 0x3f, 0xd5, 0xd0, 0x96, 0xf6, 0xc2, 0x4f, 0x50, 0x53, 0xf6, 0x7d, 0x44, 0x05, - 0x55, 0x74, 0xb5, 0xba, 0xef, 0x56, 0x72, 0x14, 0x6d, 0xb0, 0xd3, 0x49, 0x20, 0x37, 0xb8, 0x2d, - 0xbd, 0xed, 0xd9, 0x89, 0x7d, 0x3e, 0xfc, 0x16, 0x7c, 0xf1, 0x09, 0x08, 0xea, 0x62, 0x9d, 0x05, - 0x95, 0x7b, 0xa4, 0x40, 0xc5, 0x3d, 0xb4, 0xc9, 0x53, 0xf0, 0x35, 0x63, 0x6f, 0xad, 0xc7, 0xd8, - 0x20, 0x05, 0xbf, 0x6c, 0x9c, 0x5c, 0x11, 0x85, 0x82, 0x3d, 0x74, 0x8f, 0x0b, 0x2a, 0x32, 0xae, - 0xda, 0xd6, 0xea, 0xbe, 0xb3, 0x26, 0x9e, 0x8a, 0x71, 0x77, 0x34, 0xe2, 0xbd, 0x7c, 0x4d, 0x34, - 0x96, 0xf5, 0x63, 0x0d, 0xed, 0x2c, 0xf6, 0x0a, 0xbf, 0x87, 0x5a, 0x1c, 0xd8, 0x2c, 0xf4, 0xe1, - 0x53, 0x3a, 0x05, 0x2d, 0xa5, 0xd7, 0x74, 0x7c, 0x6b, 0x50, 0x9a, 0x48, 0xd5, 0x0f, 0x07, 0x45, - 0x58, 0x3f, 0x61, 0x42, 0x17, 0x7d, 0x3b, 0xa5, 0x52, 0xd9, 0x76, 0xae, 0x6c, 0xfb, 0x2c, 0x16, - 0xe7, 0x6c, 0x20, 0x58, 0x18, 0x07, 0x2b, 0x89, 0x24, 0x18, 0xa9, 0x22, 0xe3, 0x2f, 0x50, 0x93, - 0x01, 0x4f, 0x32, 0xe6, 0x83, 0xa6, 0x62, 0x41, 0x8c, 0xf2, 0x09, 0x90, 0x6d, 0x92, 0xba, 0x1d, - 0xf5, 0x12, 0x9f, 0x46, 0x79, 0x73, 0x08, 0x3c, 0x05, 0x06, 0xb1, 0x0f, 0x6e, 0x5b, 0x0a, 0x9e, - 0x68, 0x08, 0x52, 0x80, 0xc9, 0x0b, 0xd5, 0xd6, 0x5c, 0x3c, 0x8e, 0xe8, 0x2b, 0x91, 0xc8, 0x67, - 0x0b, 0x12, 0x71, 0xd6, 0x6b, 0xa9, 0x3a, 0xdc, 0x6d, 0x3a, 0xb1, 0xfe, 0x30, 0xd0, 0x6e, 0xd5, - 0xb1, 0x17, 0x72, 0x81, 0xbf, 0x5e, 0xa9, 0xc4, 0x5e, 0xaf, 0x12, 0x19, 0xad, 0xea, 0xd8, 0xd5, - 0xa9, 0x9a, 0xd7, 0x3b, 0x95, 0x2a, 0xfa, 0xa8, 0x11, 0x0a, 0x98, 0xf2, 0x4e, 0x4d, 0xdd, 0xd5, - 0xb7, 0x5f, 0xa2, 0x8c, 0xf2, 0xa2, 0x9e, 0x49, 0x04, 0x92, 0x03, 0x59, 0xbf, 0x2c, 0x15, 0x21, - 0xeb, 0xc3, 0x5d, 0x84, 0xfc, 0x24, 0x16, 0x2c, 0x89, 0x22, 0x60, 0x5a, 0x97, 0x05, 0xbd, 0x8f, - 0x0b, 0x0b, 0xa9, 0x78, 0xe1, 0x6f, 0x10, 0x4a, 0x29, 0xa3, 0x53, 0x10, 0xc0, 0xf8, 0x4d, 0x6f, - 0xd7, 0xdd, 0x72, 0xd9, 0x91, 0xf0, 0xfd, 0x02, 0x84, 0x54, 0x00, 0xad, 0xdf, 0x0c, 0xd4, 0xd2, - 0xe7, 0x7c, 0x05, 0x3c, 0x7f, 0xbc, 0xc8, 0xf3, 0x1b, 0x6b, 0xbe, 0xc1, 0x37, 0x53, 0xfc, 0x6b, - 0x79, 0x74, 0xf9, 0xea, 0xca, 0xd1, 0x31, 0x4e, 0xb8, 0x58, 0x1e, 0x1d, 0xa7, 0x09, 0x17, 0x44, - 0x59, 0x70, 0x86, 0x76, 0xc3, 0xa5, 0x67, 0xfa, 0xe5, 0x84, 0x5b, 0x84, 0xb9, 0x1d, 0x0d, 0xbf, - 0xbb, 0x6c, 0x21, 0x2b, 0x29, 0x2c, 0x40, 0x2b, 0x5e, 0xf2, 0xde, 0x8c, 0x85, 0x48, 0x35, 0xc7, - 0x0f, 0xd7, 0x1f, 0x0e, 0xe5, 0x11, 0x9a, 0xaa, 0x3a, 0xcf, 0xeb, 0x13, 0x05, 0x65, 0xfd, 0x5e, - 0x2b, 0xf8, 0x50, 0x6a, 0xfb, 0xb0, 0xa8, 0x56, 0x29, 0x50, 0xbd, 0x85, 0x9b, 0x8a, 0x9b, 0xbd, - 0xca, 0xc1, 0x0b, 0x1b, 0x59, 0xf1, 0xc6, 0x5e, 0x39, 0x34, 0x8d, 0xff, 0x33, 0x34, 0x5b, 0x37, - 0x0d, 0x4c, 0x7c, 0x8a, 0xea, 0x22, 0xba, 0x96, 0xc0, 0x9b, 0xeb, 0x21, 0x7a, 0xbd, 0x81, 0xdb, - 0xd2, 0x94, 0xd7, 0xbd, 0xde, 0x80, 0x48, 0x08, 0x7c, 0x8e, 0x1a, 0x2c, 0x8b, 0x40, 0x0e, 0x94, - 0xfa, 0xfa, 0x03, 0x4a, 0x32, 0x58, 0x4a, 0x4a, 0xae, 0x38, 0xc9, 0x71, 0xac, 0xef, 0xd0, 0xfd, - 0x85, 0xa9, 0x83, 0x9f, 0xa0, 0x76, 0x94, 0xd0, 0x91, 0x4b, 0x23, 0x1a, 0xfb, 0xfa, 0xce, 0x2e, - 0xe9, 0xf6, 0xfa, 0xfe, 0xf5, 0x2a, 0x7e, 0x7a, 0x66, 0xed, 0xe9, 0x24, 0xed, 0xaa, 0x8d, 0x2c, - 0x20, 0x5a, 0x14, 0xa1, 0xb2, 0x46, 0x7c, 0x80, 0x1a, 0x52, 0xa9, 0xf9, 0x9f, 0x86, 0x6d, 0x77, - 0x5b, 0x9e, 0x50, 0x0a, 0x98, 0x93, 0x7c, 0x5f, 0x3e, 0x21, 0x1c, 0x7c, 0x06, 0x42, 0xb5, 0xb3, - 0xb6, 0xf8, 0x84, 0x0c, 0x0a, 0x0b, 0xa9, 0x78, 0xb9, 0xc7, 0x17, 0x57, 0xe6, 0xc6, 0xf3, 0x2b, - 0x73, 0xe3, 0xc5, 0x95, 0xb9, 0xf1, 0xc3, 0xdc, 0x34, 0x2e, 0xe6, 0xa6, 0xf1, 0x7c, 0x6e, 0x1a, - 0x2f, 0xe6, 0xa6, 0xf1, 0xd7, 0xdc, 0x34, 0x7e, 0xfe, 0xdb, 0xdc, 0xf8, 0x6a, 0x4b, 0xd3, 0xf4, - 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x54, 0x4d, 0x9d, 0x25, 0x0b, 0x00, 0x00, + // 1085 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x41, 0x6f, 0xe3, 0x44, + 0x14, 0xae, 0x93, 0x66, 0x9b, 0x4e, 0xd2, 0x6e, 0x35, 0xf4, 0x10, 0x55, 0x22, 0xa9, 0x7c, 0x40, + 0x85, 0xa5, 0x36, 0xcd, 0x2e, 0x88, 0x13, 0x02, 0xaf, 0x04, 0xad, 0x36, 0x6c, 0xc3, 0x24, 0x02, + 0x84, 0x38, 0xec, 0xc4, 0x79, 0xeb, 0x98, 0x38, 0xb6, 0x99, 0x19, 0x07, 0xed, 0x8d, 0x2b, 0x27, + 0xf8, 0x15, 0xfc, 0x04, 0xc4, 0x11, 0xc1, 0xa5, 0xc7, 0x3d, 0xee, 0x85, 0x8a, 0x86, 0x7f, 0xc1, + 0x09, 0xcd, 0x78, 0x62, 0x3b, 0x49, 0xcb, 0xa6, 0x1c, 0xf6, 0x94, 0xcc, 0x7b, 0xdf, 0x7b, 0x6f, + 0xde, 0x7b, 0xdf, 0xbc, 0x67, 0xf4, 0xf1, 0xf8, 0x7d, 0x6e, 0xf9, 0x91, 0x3d, 0x4e, 0x06, 0xc0, + 0x42, 0x10, 0xc0, 0xed, 0x29, 0x84, 0xc3, 0x88, 0xd9, 0x5a, 0x41, 0x63, 0xdf, 0x0e, 0x41, 0x7c, + 0x17, 0xb1, 0xb1, 0x1f, 0x7a, 0xf6, 0xf4, 0x64, 0x00, 0x82, 0x9e, 0xd8, 0x1e, 0x84, 0xc0, 0xa8, + 0x80, 0xa1, 0x15, 0xb3, 0x48, 0x44, 0xf8, 0xf5, 0x14, 0x6e, 0xd1, 0xd8, 0xb7, 0x72, 0xb8, 0xa5, + 0xe1, 0x07, 0xc7, 0x9e, 0x2f, 0x46, 0xc9, 0xc0, 0x72, 0xa3, 0x89, 0xed, 0x45, 0x5e, 0x64, 0x2b, + 0xab, 0x41, 0xf2, 0x54, 0x9d, 0xd4, 0x41, 0xfd, 0x4b, 0xbd, 0x1d, 0x98, 0x85, 0xe0, 0x6e, 0xc4, + 0xc0, 0x9e, 0xae, 0x44, 0x3c, 0x78, 0x90, 0x63, 0x26, 0xd4, 0x1d, 0xf9, 0x21, 0xb0, 0x67, 0x76, + 0x3c, 0xf6, 0xa4, 0x80, 0xdb, 0x13, 0x10, 0xf4, 0x3a, 0x2b, 0xfb, 0x26, 0x2b, 0x96, 0x84, 0xc2, + 0x9f, 0xc0, 0x8a, 0xc1, 0x7b, 0x2f, 0x33, 0xe0, 0xee, 0x08, 0x26, 0x74, 0xc5, 0xee, 0xfe, 0x4d, + 0x76, 0x89, 0xf0, 0x03, 0xdb, 0x0f, 0x05, 0x17, 0x6c, 0xd9, 0xc8, 0xfc, 0xc3, 0x40, 0x77, 0x4f, + 0xfb, 0xfd, 0xee, 0x59, 0xe8, 0x31, 0xe0, 0xbc, 0x4b, 0xc5, 0x08, 0x1f, 0xa2, 0xcd, 0x98, 0x8a, + 0x51, 0xc3, 0x38, 0x34, 0x8e, 0xb6, 0x9d, 0xfa, 0xc5, 0x65, 0x6b, 0x63, 0x76, 0xd9, 0xda, 0x94, + 0x3a, 0xa2, 0x34, 0xf8, 0x01, 0xaa, 0xca, 0xdf, 0xfe, 0xb3, 0x18, 0x1a, 0x65, 0x85, 0x6a, 0xcc, + 0x2e, 0x5b, 0xd5, 0xae, 0x96, 0xfd, 0x53, 0xf8, 0x4f, 0x32, 0x24, 0xfe, 0x12, 0x6d, 0x0d, 0xa8, + 0x3b, 0x86, 0x70, 0xd8, 0x28, 0x1d, 0x1a, 0x47, 0xb5, 0xf6, 0xb1, 0xf5, 0x9f, 0x3d, 0xb4, 0xf4, + 0xa5, 0x9c, 0xd4, 0xc8, 0xb9, 0xab, 0x6f, 0xb2, 0xa5, 0x05, 0x64, 0xee, 0xce, 0x1c, 0xa3, 0xfd, + 0x42, 0x12, 0x24, 0x09, 0xe0, 0x73, 0x1a, 0x24, 0x80, 0x7b, 0xa8, 0x22, 0xa3, 0xf3, 0x86, 0x71, + 0x58, 0x3e, 0xaa, 0xb5, 0xad, 0x97, 0xc4, 0x5b, 0x2a, 0x84, 0xb3, 0xa3, 0x03, 0x56, 0xe4, 0x89, + 0x93, 0xd4, 0x97, 0xf9, 0x63, 0x09, 0x6d, 0x69, 0x14, 0x7e, 0x82, 0xaa, 0xb2, 0xef, 0x43, 0x2a, + 0xa8, 0x2a, 0x57, 0xad, 0xfd, 0x4e, 0x21, 0x46, 0xd6, 0x06, 0x2b, 0x1e, 0x7b, 0x52, 0xc0, 0x2d, + 0x89, 0xb6, 0xa6, 0x27, 0xd6, 0xf9, 0xe0, 0x1b, 0x70, 0xc5, 0xa7, 0x20, 0xa8, 0x83, 0x75, 0x14, + 0x94, 0xcb, 0x48, 0xe6, 0x15, 0x77, 0xd0, 0x26, 0x8f, 0xc1, 0xd5, 0x15, 0x7b, 0x6b, 0xbd, 0x8a, + 0xf5, 0x62, 0x70, 0xf3, 0xc6, 0xc9, 0x13, 0x51, 0x5e, 0x70, 0x1f, 0xdd, 0xe1, 0x82, 0x8a, 0x84, + 0xab, 0xb6, 0xd5, 0xda, 0x6f, 0xaf, 0xe9, 0x4f, 0xd9, 0x38, 0xbb, 0xda, 0xe3, 0x9d, 0xf4, 0x4c, + 0xb4, 0x2f, 0xf3, 0x87, 0x12, 0xda, 0x5d, 0xec, 0x15, 0x7e, 0x17, 0xd5, 0x38, 0xb0, 0xa9, 0xef, + 0xc2, 0x63, 0x3a, 0x01, 0x4d, 0xa5, 0xd7, 0xb4, 0x7d, 0xad, 0x97, 0xab, 0x48, 0x11, 0x87, 0xbd, + 0xcc, 0xac, 0x1b, 0x31, 0xa1, 0x93, 0xbe, 0xb9, 0xa4, 0x92, 0xd9, 0x56, 0xca, 0x6c, 0xeb, 0x2c, + 0x14, 0xe7, 0xac, 0x27, 0x98, 0x1f, 0x7a, 0x2b, 0x81, 0xa4, 0x33, 0x52, 0xf4, 0x8c, 0xbf, 0x40, + 0x55, 0x06, 0x3c, 0x4a, 0x98, 0x0b, 0xba, 0x14, 0x0b, 0x64, 0x94, 0x23, 0x40, 0xb6, 0x49, 0xf2, + 0x76, 0xd8, 0x89, 0x5c, 0x1a, 0xa4, 0xcd, 0x21, 0xf0, 0x14, 0x18, 0x84, 0x2e, 0x38, 0x75, 0x49, + 0x78, 0xa2, 0x5d, 0x90, 0xcc, 0x99, 0x7c, 0x50, 0x75, 0x5d, 0x8b, 0x87, 0x01, 0x7d, 0x25, 0x14, + 0xf9, 0x6c, 0x81, 0x22, 0xf6, 0x7a, 0x2d, 0x55, 0x97, 0xbb, 0x89, 0x27, 0xe6, 0xef, 0x06, 0xda, + 0x2b, 0x02, 0x3b, 0x3e, 0x17, 0xf8, 0xeb, 0x95, 0x4c, 0xac, 0xf5, 0x32, 0x91, 0xd6, 0x2a, 0x8f, + 0x3d, 0x1d, 0xaa, 0x3a, 0x97, 0x14, 0xb2, 0xe8, 0xa2, 0x8a, 0x2f, 0x60, 0xc2, 0x1b, 0x25, 0xf5, + 0x56, 0xef, 0xdd, 0x22, 0x8d, 0xfc, 0xa1, 0x9e, 0x49, 0x0f, 0x24, 0x75, 0x64, 0xfe, 0x69, 0xa0, + 0x56, 0x11, 0xd6, 0xa5, 0x8c, 0x4e, 0x40, 0x00, 0xe3, 0x59, 0x1b, 0xf1, 0x11, 0xaa, 0xd2, 0xee, + 0xd9, 0x27, 0x2c, 0x4a, 0xe2, 0xf9, 0xbc, 0x93, 0xf7, 0xfb, 0x48, 0xcb, 0x48, 0xa6, 0x95, 0x53, + 0x71, 0xec, 0xeb, 0xd1, 0x55, 0x98, 0x8a, 0x8f, 0xfc, 0x70, 0x48, 0x94, 0x46, 0x22, 0x42, 0x49, + 0xf6, 0xf2, 0x22, 0x42, 0xb1, 0x5c, 0x69, 0x70, 0x0b, 0x55, 0xb8, 0x1b, 0xc5, 0xd0, 0xd8, 0x54, + 0x90, 0x6d, 0x79, 0xe5, 0x9e, 0x14, 0x90, 0x54, 0x8e, 0xef, 0xa1, 0x6d, 0x09, 0xe4, 0x31, 0x75, + 0xa1, 0x51, 0x51, 0xa0, 0x9d, 0xd9, 0x65, 0x6b, 0xfb, 0xf1, 0x5c, 0x48, 0x72, 0xbd, 0xf9, 0xcb, + 0x52, 0x93, 0x64, 0xff, 0x70, 0x1b, 0x21, 0x37, 0x0a, 0x05, 0x8b, 0x82, 0x00, 0x98, 0x4e, 0x29, + 0xa3, 0xcf, 0xc3, 0x4c, 0x43, 0x0a, 0x28, 0x1c, 0x22, 0x14, 0x67, 0xb5, 0xd1, 0x34, 0xfa, 0xe0, + 0x16, 0xf5, 0xbf, 0xa6, 0xb0, 0xce, 0xae, 0x8c, 0x57, 0x50, 0x14, 0x22, 0x98, 0xbf, 0x1a, 0xa8, + 0xa6, 0xed, 0x5f, 0x01, 0xb1, 0x1e, 0x2d, 0x12, 0xeb, 0x8d, 0x35, 0x97, 0xce, 0xf5, 0x9c, 0xfa, + 0x39, 0xbf, 0xba, 0x5c, 0x33, 0xb2, 0xe7, 0xa3, 0x88, 0x8b, 0xe5, 0x5d, 0x79, 0x1a, 0x71, 0x41, + 0x94, 0x06, 0x27, 0x68, 0xcf, 0x5f, 0xda, 0x4b, 0xb7, 0x7b, 0xa9, 0x99, 0x99, 0xd3, 0xd0, 0xee, + 0xf7, 0x96, 0x35, 0x64, 0x25, 0x84, 0x09, 0x68, 0x05, 0x25, 0x07, 0xc5, 0x48, 0x88, 0x58, 0xd7, + 0xf8, 0xfe, 0xfa, 0xdb, 0x30, 0xbf, 0x42, 0x55, 0x65, 0xd7, 0xef, 0x77, 0x89, 0x72, 0x65, 0xfe, + 0x56, 0xca, 0xea, 0xa1, 0xe8, 0xf7, 0x61, 0x96, 0xad, 0x62, 0x86, 0x1a, 0xfe, 0x29, 0xd9, 0xf7, + 0x0b, 0x17, 0xcf, 0x74, 0x64, 0x05, 0x8d, 0xfb, 0xf9, 0x57, 0x82, 0xf1, 0x7f, 0xbe, 0x12, 0x6a, + 0xd7, 0x7d, 0x21, 0xe0, 0x53, 0x54, 0x16, 0xc1, 0x9c, 0x02, 0x6f, 0xae, 0xe7, 0xb1, 0xdf, 0xe9, + 0x39, 0x35, 0x5d, 0xf2, 0x72, 0xbf, 0xd3, 0x23, 0xd2, 0x05, 0x3e, 0x47, 0x15, 0x96, 0x04, 0x20, + 0x37, 0x68, 0x79, 0xfd, 0x8d, 0x2c, 0x2b, 0x98, 0x53, 0x4a, 0x9e, 0x38, 0x49, 0xfd, 0x98, 0xdf, + 0xa2, 0x9d, 0x85, 0x35, 0x8b, 0x9f, 0xa0, 0x7a, 0x10, 0xd1, 0xa1, 0x43, 0x03, 0x1a, 0xba, 0xfa, + 0x11, 0x2f, 0xf1, 0x76, 0xbe, 0x9f, 0x3a, 0x05, 0x9c, 0x5e, 0xd2, 0xfb, 0x3a, 0x48, 0xbd, 0xa8, + 0x23, 0x0b, 0x1e, 0x4d, 0x8a, 0x50, 0x9e, 0xa3, 0x9c, 0x4a, 0x92, 0xa9, 0xe9, 0x57, 0x92, 0x9e, + 0x4a, 0x92, 0xc0, 0x9c, 0xa4, 0x72, 0x39, 0x53, 0x38, 0xb8, 0x0c, 0x84, 0x6a, 0x67, 0x69, 0x71, + 0xa6, 0xf4, 0x32, 0x0d, 0x29, 0xa0, 0x9c, 0xe3, 0x8b, 0xab, 0xe6, 0xc6, 0xf3, 0xab, 0xe6, 0xc6, + 0x8b, 0xab, 0xe6, 0xc6, 0xf7, 0xb3, 0xa6, 0x71, 0x31, 0x6b, 0x1a, 0xcf, 0x67, 0x4d, 0xe3, 0xc5, + 0xac, 0x69, 0xfc, 0x35, 0x6b, 0x1a, 0x3f, 0xfd, 0xdd, 0xdc, 0xf8, 0x6a, 0x4b, 0x97, 0xe9, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x8b, 0x3b, 0x2e, 0x16, 0x0c, 0x00, 0x00, } func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { @@ -769,6 +804,60 @@ func (m *IngressClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *IngressClassParametersReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressClassParametersReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressClassParametersReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Namespace != nil { + i -= len(*m.Namespace) + copy(dAtA[i:], *m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Namespace))) + i-- + dAtA[i] = 0x2a + } + if m.Scope != nil { + i -= len(*m.Scope) + copy(dAtA[i:], *m.Scope) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Scope))) + i-- + dAtA[i] = 0x22 + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + if m.APIGroup != nil { + i -= len(*m.APIGroup) + copy(dAtA[i:], *m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.APIGroup))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *IngressClassSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1174,6 +1263,31 @@ func (m *IngressClassList) Size() (n int) { return n } +func (m *IngressClassParametersReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.APIGroup != nil { + l = len(*m.APIGroup) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Scope != nil { + l = len(*m.Scope) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Namespace != nil { + l = len(*m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *IngressClassSpec) Size() (n int) { if m == nil { return 0 @@ -1373,13 +1487,27 @@ func (this *IngressClassList) String() string { }, "") return s } +func (this *IngressClassParametersReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressClassParametersReference{`, + `APIGroup:` + valueToStringGenerated(this.APIGroup) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Scope:` + valueToStringGenerated(this.Scope) + `,`, + `Namespace:` + valueToStringGenerated(this.Namespace) + `,`, + `}`, + }, "") + return s +} func (this *IngressClassSpec) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&IngressClassSpec{`, `Controller:` + fmt.Sprintf("%v", this.Controller) + `,`, - `Parameters:` + strings.Replace(fmt.Sprintf("%v", this.Parameters), "TypedLocalObjectReference", "v11.TypedLocalObjectReference", 1) + `,`, + `Parameters:` + strings.Replace(this.Parameters.String(), "IngressClassParametersReference", "IngressClassParametersReference", 1) + `,`, `}`, }, "") return s @@ -1606,10 +1734,7 @@ func (m *HTTPIngressPath) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1693,10 +1818,7 @@ func (m *HTTPIngressRuleValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1845,10 +1967,7 @@ func (m *Ingress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1999,10 +2118,7 @@ func (m *IngressBackend) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2118,10 +2234,7 @@ func (m *IngressClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2238,10 +2351,220 @@ func (m *IngressClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressClassParametersReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressClassParametersReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressClassParametersReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIGroup", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.APIGroup = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Scope = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Namespace = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2347,7 +2670,7 @@ func (m *IngressClassSpec) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Parameters == nil { - m.Parameters = &v11.TypedLocalObjectReference{} + m.Parameters = &IngressClassParametersReference{} } if err := m.Parameters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2359,10 +2682,7 @@ func (m *IngressClassSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2479,10 +2799,7 @@ func (m *IngressList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2597,10 +2914,7 @@ func (m *IngressRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2686,10 +3000,7 @@ func (m *IngressRuleValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2876,10 +3187,7 @@ func (m *IngressSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2962,10 +3270,7 @@ func (m *IngressStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3079,10 +3384,7 @@ func (m *IngressTLS) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/networking/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/networking/v1beta1/generated.proto index 251bbafec..acb6e859c 100644 --- a/constraint/vendor/k8s.io/api/networking/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/networking/v1beta1/generated.proto @@ -137,6 +137,36 @@ message IngressClassList { repeated IngressClass items = 2; } +// IngressClassParametersReference identifies an API object. This can be used +// to specify a cluster or namespace-scoped resource. +message IngressClassParametersReference { + // APIGroup is the group for the resource being referenced. If APIGroup is + // not specified, the specified Kind must be in the core API group. For any + // other third-party types, APIGroup is required. + // +optional + optional string aPIGroup = 1; + + // Kind is the type of resource being referenced. + optional string kind = 2; + + // Name is the name of resource being referenced. + optional string name = 3; + + // Scope represents if this refers to a cluster or namespace scoped resource. + // This may be set to "Cluster" (default) or "Namespace". + // Field can be enabled with IngressClassNamespacedParams feature gate. + // +optional + // +featureGate=IngressClassNamespacedParams + optional string scope = 4; + + // Namespace is the namespace of the resource being referenced. This field is + // required when scope is set to "Namespace" and must be unset when scope is set to + // "Cluster". + // +optional + // +featureGate=IngressClassNamespacedParams + optional string namespace = 5; +} + // IngressClassSpec provides information about the class of an Ingress. message IngressClassSpec { // Controller refers to the name of the controller that should handle this @@ -151,7 +181,7 @@ message IngressClassSpec { // configuration for the controller. This is optional if the controller does // not require extra parameters. // +optional - optional k8s.io.api.core.v1.TypedLocalObjectReference parameters = 2; + optional IngressClassParametersReference parameters = 2; } // IngressList is a collection of Ingress. diff --git a/constraint/vendor/k8s.io/api/networking/v1beta1/types.go b/constraint/vendor/k8s.io/api/networking/v1beta1/types.go index ef9bd4d67..09279d693 100644 --- a/constraint/vendor/k8s.io/api/networking/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/networking/v1beta1/types.go @@ -311,7 +311,42 @@ type IngressClassSpec struct { // configuration for the controller. This is optional if the controller does // not require extra parameters. // +optional - Parameters *v1.TypedLocalObjectReference `json:"parameters,omitempty" protobuf:"bytes,2,opt,name=parameters"` + Parameters *IngressClassParametersReference `json:"parameters,omitempty" protobuf:"bytes,2,opt,name=parameters"` +} + +const ( + // IngressClassParametersReferenceScopeNamespace indicates that the + // referenced Parameters resource is namespace-scoped. + IngressClassParametersReferenceScopeNamespace = "Namespace" + // IngressClassParametersReferenceScopeNamespace indicates that the + // referenced Parameters resource is cluster-scoped. + IngressClassParametersReferenceScopeCluster = "Cluster" +) + +// IngressClassParametersReference identifies an API object. This can be used +// to specify a cluster or namespace-scoped resource. +type IngressClassParametersReference struct { + // APIGroup is the group for the resource being referenced. If APIGroup is + // not specified, the specified Kind must be in the core API group. For any + // other third-party types, APIGroup is required. + // +optional + APIGroup *string `json:"apiGroup,omitempty" protobuf:"bytes,1,opt,name=aPIGroup"` + // Kind is the type of resource being referenced. + Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"` + // Name is the name of resource being referenced. + Name string `json:"name" protobuf:"bytes,3,opt,name=name"` + // Scope represents if this refers to a cluster or namespace scoped resource. + // This may be set to "Cluster" (default) or "Namespace". + // Field can be enabled with IngressClassNamespacedParams feature gate. + // +optional + // +featureGate=IngressClassNamespacedParams + Scope *string `json:"scope" protobuf:"bytes,4,opt,name=scope"` + // Namespace is the namespace of the resource being referenced. This field is + // required when scope is set to "Namespace" and must be unset when scope is set to + // "Cluster". + // +optional + // +featureGate=IngressClassNamespacedParams + Namespace *string `json:"namespace,omitempty" protobuf:"bytes,5,opt,name=namespace"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/constraint/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go index c774249d8..84337ad3e 100644 --- a/constraint/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go @@ -89,6 +89,19 @@ func (IngressClassList) SwaggerDoc() map[string]string { return map_IngressClassList } +var map_IngressClassParametersReference = map[string]string{ + "": "IngressClassParametersReference identifies an API object. This can be used to specify a cluster or namespace-scoped resource.", + "apiGroup": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "kind": "Kind is the type of resource being referenced.", + "name": "Name is the name of resource being referenced.", + "scope": "Scope represents if this refers to a cluster or namespace scoped resource. This may be set to \"Cluster\" (default) or \"Namespace\". Field can be enabled with IngressClassNamespacedParams feature gate.", + "namespace": "Namespace is the namespace of the resource being referenced. This field is required when scope is set to \"Namespace\" and must be unset when scope is set to \"Cluster\".", +} + +func (IngressClassParametersReference) SwaggerDoc() map[string]string { + return map_IngressClassParametersReference +} + var map_IngressClassSpec = map[string]string{ "": "IngressClassSpec provides information about the class of an Ingress.", "controller": "Controller refers to the name of the controller that should handle this class. This allows for different \"flavors\" that are controlled by the same controller. For example, you may have different Parameters for the same implementing controller. This should be specified as a domain-prefixed path no more than 250 characters in length, e.g. \"acme.io/ingress-controller\". This field is immutable.", diff --git a/constraint/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go index d55ccde68..e1b4543d3 100644 --- a/constraint/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go @@ -180,12 +180,43 @@ func (in *IngressClassList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressClassParametersReference) DeepCopyInto(out *IngressClassParametersReference) { + *out = *in + if in.APIGroup != nil { + in, out := &in.APIGroup, &out.APIGroup + *out = new(string) + **out = **in + } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(string) + **out = **in + } + if in.Namespace != nil { + in, out := &in.Namespace, &out.Namespace + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressClassParametersReference. +func (in *IngressClassParametersReference) DeepCopy() *IngressClassParametersReference { + if in == nil { + return nil + } + out := new(IngressClassParametersReference) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IngressClassSpec) DeepCopyInto(out *IngressClassSpec) { *out = *in if in.Parameters != nil { in, out := &in.Parameters, &out.Parameters - *out = new(v1.TypedLocalObjectReference) + *out = new(IngressClassParametersReference) (*in).DeepCopyInto(*out) } return diff --git a/constraint/vendor/k8s.io/api/node/v1/generated.pb.go b/constraint/vendor/k8s.io/api/node/v1/generated.pb.go index 775ade381..d930f63b2 100644 --- a/constraint/vendor/k8s.io/api/node/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/node/v1/generated.pb.go @@ -766,7 +766,7 @@ func (m *Overhead) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -783,10 +783,7 @@ func (m *Overhead) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -973,10 +970,7 @@ func (m *RuntimeClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1093,10 +1087,7 @@ func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1256,7 +1247,7 @@ func (m *Scheduling) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1307,10 +1298,7 @@ func (m *Scheduling) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/node/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/node/v1alpha1/generated.pb.go index e6658a96f..abd2c09b6 100644 --- a/constraint/vendor/k8s.io/api/node/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/node/v1alpha1/generated.pb.go @@ -852,7 +852,7 @@ func (m *Overhead) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -869,10 +869,7 @@ func (m *Overhead) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -988,10 +985,7 @@ func (m *RuntimeClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1108,10 +1102,7 @@ func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1265,10 +1256,7 @@ func (m *RuntimeClassSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1428,7 +1416,7 @@ func (m *Scheduling) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1479,10 +1467,7 @@ func (m *Scheduling) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/node/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/node/v1beta1/generated.pb.go index b85cbd295..4bfdd5df3 100644 --- a/constraint/vendor/k8s.io/api/node/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/node/v1beta1/generated.pb.go @@ -767,7 +767,7 @@ func (m *Overhead) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -784,10 +784,7 @@ func (m *Overhead) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -974,10 +971,7 @@ func (m *RuntimeClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1094,10 +1088,7 @@ func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1257,7 +1248,7 @@ func (m *Scheduling) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -1308,10 +1299,7 @@ func (m *Scheduling) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/policy/v1/doc.go b/constraint/vendor/k8s.io/api/policy/v1/doc.go new file mode 100644 index 000000000..b46af58e4 --- /dev/null +++ b/constraint/vendor/k8s.io/api/policy/v1/doc.go @@ -0,0 +1,24 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// Package policy is for any kind of policy object. Suitable examples, even if +// they aren't all here, are PodDisruptionBudget, PodSecurityPolicy, +// NetworkPolicy, etc. +package v1 // import "k8s.io/api/policy/v1" diff --git a/constraint/vendor/k8s.io/api/policy/v1/generated.pb.go b/constraint/vendor/k8s.io/api/policy/v1/generated.pb.go new file mode 100644 index 000000000..9a9f73c12 --- /dev/null +++ b/constraint/vendor/k8s.io/api/policy/v1/generated.pb.go @@ -0,0 +1,1459 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/policy/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" + + intstr "k8s.io/apimachinery/pkg/util/intstr" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } +func (*PodDisruptionBudget) ProtoMessage() {} +func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { + return fileDescriptor_2d50488813b2d18e, []int{0} +} +func (m *PodDisruptionBudget) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudget) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudget.Merge(m, src) +} +func (m *PodDisruptionBudget) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudget) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudget.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudget proto.InternalMessageInfo + +func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } +func (*PodDisruptionBudgetList) ProtoMessage() {} +func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { + return fileDescriptor_2d50488813b2d18e, []int{1} +} +func (m *PodDisruptionBudgetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudgetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudgetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudgetList.Merge(m, src) +} +func (m *PodDisruptionBudgetList) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudgetList) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudgetList.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudgetList proto.InternalMessageInfo + +func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } +func (*PodDisruptionBudgetSpec) ProtoMessage() {} +func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2d50488813b2d18e, []int{2} +} +func (m *PodDisruptionBudgetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudgetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudgetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudgetSpec.Merge(m, src) +} +func (m *PodDisruptionBudgetSpec) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudgetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudgetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudgetSpec proto.InternalMessageInfo + +func (m *PodDisruptionBudgetStatus) Reset() { *m = PodDisruptionBudgetStatus{} } +func (*PodDisruptionBudgetStatus) ProtoMessage() {} +func (*PodDisruptionBudgetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2d50488813b2d18e, []int{3} +} +func (m *PodDisruptionBudgetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudgetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudgetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudgetStatus.Merge(m, src) +} +func (m *PodDisruptionBudgetStatus) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudgetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudgetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudgetStatus proto.InternalMessageInfo + +func init() { + proto.RegisterType((*PodDisruptionBudget)(nil), "k8s.io.api.policy.v1.PodDisruptionBudget") + proto.RegisterType((*PodDisruptionBudgetList)(nil), "k8s.io.api.policy.v1.PodDisruptionBudgetList") + proto.RegisterType((*PodDisruptionBudgetSpec)(nil), "k8s.io.api.policy.v1.PodDisruptionBudgetSpec") + proto.RegisterType((*PodDisruptionBudgetStatus)(nil), "k8s.io.api.policy.v1.PodDisruptionBudgetStatus") + proto.RegisterMapType((map[string]v1.Time)(nil), "k8s.io.api.policy.v1.PodDisruptionBudgetStatus.DisruptedPodsEntry") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/policy/v1/generated.proto", fileDescriptor_2d50488813b2d18e) +} + +var fileDescriptor_2d50488813b2d18e = []byte{ + // 766 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xdf, 0x6e, 0xe3, 0x44, + 0x14, 0xc6, 0xe3, 0xa4, 0x29, 0x65, 0x36, 0x8d, 0xaa, 0x61, 0x81, 0x90, 0x0b, 0x77, 0xd5, 0xab, + 0x82, 0xb4, 0x63, 0xba, 0x8b, 0x50, 0x85, 0x04, 0x62, 0xbd, 0x59, 0xc1, 0x22, 0x4a, 0x56, 0x53, + 0x10, 0x12, 0x02, 0x89, 0x89, 0x7d, 0xd6, 0x19, 0x62, 0x7b, 0xac, 0x99, 0xb1, 0xd9, 0x5c, 0xc1, + 0x23, 0xf0, 0x0a, 0x3c, 0x0a, 0x57, 0xf4, 0x0a, 0xed, 0xe5, 0x5e, 0x45, 0xd4, 0xbc, 0x08, 0xf2, + 0xd8, 0xf9, 0xe3, 0x24, 0x55, 0x03, 0x77, 0x99, 0x39, 0xe7, 0xfb, 0x9d, 0x39, 0xdf, 0x39, 0x0e, + 0xfa, 0x78, 0x72, 0xae, 0x08, 0x17, 0xce, 0x24, 0x1d, 0x81, 0x8c, 0x41, 0x83, 0x72, 0x32, 0x88, + 0x7d, 0x21, 0x9d, 0x2a, 0xc0, 0x12, 0xee, 0x24, 0x22, 0xe4, 0xde, 0xd4, 0xc9, 0xce, 0x9c, 0x00, + 0x62, 0x90, 0x4c, 0x83, 0x4f, 0x12, 0x29, 0xb4, 0xc0, 0x77, 0xcb, 0x2c, 0xc2, 0x12, 0x4e, 0xca, + 0x2c, 0x92, 0x9d, 0xf5, 0xef, 0x07, 0x5c, 0x8f, 0xd3, 0x11, 0xf1, 0x44, 0xe4, 0x04, 0x22, 0x10, + 0x8e, 0x49, 0x1e, 0xa5, 0xcf, 0xcd, 0xc9, 0x1c, 0xcc, 0xaf, 0x12, 0xd2, 0xff, 0x60, 0x59, 0x2a, + 0x62, 0xde, 0x98, 0xc7, 0x20, 0xa7, 0x4e, 0x32, 0x09, 0x8a, 0x0b, 0xe5, 0x44, 0xa0, 0xd9, 0x96, + 0xd2, 0x7d, 0xe7, 0x26, 0x95, 0x4c, 0x63, 0xcd, 0x23, 0xd8, 0x10, 0x7c, 0x78, 0x9b, 0x40, 0x79, + 0x63, 0x88, 0xd8, 0x86, 0xee, 0xe1, 0x4d, 0xba, 0x54, 0xf3, 0xd0, 0xe1, 0xb1, 0x56, 0x5a, 0xae, + 0x8b, 0x4e, 0x7e, 0x6f, 0xa2, 0x37, 0x9e, 0x09, 0x7f, 0xc0, 0x95, 0x4c, 0x13, 0xcd, 0x45, 0xec, + 0xa6, 0x7e, 0x00, 0x1a, 0xff, 0x88, 0x0e, 0x8a, 0x86, 0x7c, 0xa6, 0x59, 0xcf, 0xba, 0x67, 0x9d, + 0xde, 0x79, 0xf0, 0x3e, 0x59, 0x7a, 0xb8, 0xe0, 0x93, 0x64, 0x12, 0x14, 0x17, 0x8a, 0x14, 0xd9, + 0x24, 0x3b, 0x23, 0xc3, 0xd1, 0x4f, 0xe0, 0xe9, 0x0b, 0xd0, 0xcc, 0xc5, 0x57, 0xb3, 0xe3, 0x46, + 0x3e, 0x3b, 0x46, 0xcb, 0x3b, 0xba, 0xa0, 0xe2, 0x21, 0xda, 0x53, 0x09, 0x78, 0xbd, 0xa6, 0xa1, + 0xdf, 0x27, 0xdb, 0x26, 0x44, 0xb6, 0x3c, 0xed, 0x32, 0x01, 0xcf, 0xed, 0x54, 0xe8, 0xbd, 0xe2, + 0x44, 0x0d, 0x08, 0x7f, 0x8b, 0xf6, 0x95, 0x66, 0x3a, 0x55, 0xbd, 0x96, 0x41, 0x3a, 0xbb, 0x23, + 0x8d, 0xcc, 0xed, 0x56, 0xd0, 0xfd, 0xf2, 0x4c, 0x2b, 0xdc, 0xc9, 0x9f, 0x16, 0x7a, 0x7b, 0x8b, + 0xea, 0x4b, 0xae, 0x34, 0xfe, 0x7e, 0xc3, 0x27, 0xb2, 0x9b, 0x4f, 0x85, 0xda, 0xb8, 0x74, 0x54, + 0x55, 0x3d, 0x98, 0xdf, 0xac, 0x78, 0xf4, 0x15, 0x6a, 0x73, 0x0d, 0x91, 0xea, 0x35, 0xef, 0xb5, + 0x4e, 0xef, 0x3c, 0x78, 0x77, 0xe7, 0x8e, 0xdc, 0xc3, 0x8a, 0xda, 0x7e, 0x5a, 0xe8, 0x69, 0x89, + 0x39, 0xf9, 0xab, 0xb9, 0xb5, 0x93, 0xc2, 0x44, 0xfc, 0x1c, 0x75, 0x22, 0x1e, 0x3f, 0xca, 0x18, + 0x0f, 0xd9, 0x28, 0x84, 0x5b, 0xa7, 0x5e, 0x6c, 0x15, 0x29, 0xb7, 0x8a, 0x3c, 0x8d, 0xf5, 0x50, + 0x5e, 0x6a, 0xc9, 0xe3, 0xc0, 0x3d, 0xca, 0x67, 0xc7, 0x9d, 0x8b, 0x15, 0x12, 0xad, 0x71, 0xf1, + 0x0f, 0xe8, 0x40, 0x41, 0x08, 0x9e, 0x16, 0xb2, 0x9a, 0xfd, 0xc3, 0x1d, 0x1d, 0x63, 0x23, 0x08, + 0x2f, 0x2b, 0xa9, 0xdb, 0x29, 0x2c, 0x9b, 0x9f, 0xe8, 0x02, 0x89, 0x43, 0xd4, 0x8d, 0xd8, 0x8b, + 0x6f, 0x62, 0xb6, 0x68, 0xa4, 0xf5, 0x3f, 0x1b, 0xc1, 0xf9, 0xec, 0xb8, 0x7b, 0x51, 0x63, 0xd1, + 0x35, 0xf6, 0xc9, 0x1f, 0x6d, 0xf4, 0xce, 0x8d, 0x0b, 0x85, 0xbf, 0x40, 0x58, 0x8c, 0x14, 0xc8, + 0x0c, 0xfc, 0xcf, 0xca, 0xef, 0x8e, 0x8b, 0xd8, 0x18, 0xdb, 0x72, 0xfb, 0xd5, 0x80, 0xf0, 0x70, + 0x23, 0x83, 0x6e, 0x51, 0xe1, 0x5f, 0xd0, 0xa1, 0x5f, 0x56, 0x01, 0xff, 0x99, 0xf0, 0xe7, 0x2b, + 0xe1, 0xfe, 0xc7, 0x25, 0x27, 0x83, 0x55, 0xc8, 0x93, 0x58, 0xcb, 0xa9, 0xfb, 0x66, 0xf5, 0x94, + 0xc3, 0x5a, 0x8c, 0xd6, 0xeb, 0x15, 0xcd, 0xf8, 0x0b, 0xa4, 0x7a, 0x14, 0x86, 0xe2, 0x67, 0xf0, + 0x8d, 0xb9, 0xed, 0x65, 0x33, 0x83, 0x8d, 0x0c, 0xba, 0x45, 0x85, 0x3f, 0x41, 0x5d, 0x2f, 0x95, + 0x12, 0x62, 0xfd, 0x39, 0xb0, 0x50, 0x8f, 0xa7, 0xbd, 0x3d, 0xc3, 0x79, 0xab, 0xe2, 0x74, 0x1f, + 0xd7, 0xa2, 0x74, 0x2d, 0xbb, 0xd0, 0xfb, 0xa0, 0xb8, 0x04, 0x7f, 0xae, 0x6f, 0xd7, 0xf5, 0x83, + 0x5a, 0x94, 0xae, 0x65, 0xe3, 0x73, 0xd4, 0x81, 0x17, 0x09, 0x78, 0x73, 0x2f, 0xf7, 0x8d, 0xfa, + 0x6e, 0xa5, 0xee, 0x3c, 0x59, 0x89, 0xd1, 0x5a, 0x26, 0xf6, 0x10, 0xf2, 0x44, 0xec, 0x73, 0xd3, + 0x4e, 0xef, 0x35, 0x33, 0x03, 0x67, 0xb7, 0xfd, 0x7d, 0x3c, 0xd7, 0x2d, 0xff, 0x18, 0x17, 0x57, + 0x8a, 0xae, 0x60, 0xfb, 0x21, 0xc2, 0x9b, 0x63, 0xc2, 0x47, 0xa8, 0x35, 0x81, 0xa9, 0x59, 0x9f, + 0xd7, 0x69, 0xf1, 0x13, 0x7f, 0x8a, 0xda, 0x19, 0x0b, 0x53, 0xa8, 0xbe, 0xa3, 0xf7, 0x76, 0x7b, + 0xc7, 0xd7, 0x3c, 0x02, 0x5a, 0x0a, 0x3f, 0x6a, 0x9e, 0x5b, 0xee, 0xe9, 0xd5, 0xb5, 0xdd, 0x78, + 0x79, 0x6d, 0x37, 0x5e, 0x5d, 0xdb, 0x8d, 0x5f, 0x73, 0xdb, 0xba, 0xca, 0x6d, 0xeb, 0x65, 0x6e, + 0x5b, 0xaf, 0x72, 0xdb, 0xfa, 0x3b, 0xb7, 0xad, 0xdf, 0xfe, 0xb1, 0x1b, 0xdf, 0x35, 0xb3, 0xb3, + 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xca, 0x04, 0x93, 0xc0, 0x85, 0x07, 0x00, 0x00, +} + +func (m *PodDisruptionBudget) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodDisruptionBudget) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudget) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodDisruptionBudgetList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodDisruptionBudgetList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudgetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodDisruptionBudgetSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodDisruptionBudgetSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudgetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxUnavailable != nil { + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.MinAvailable != nil { + { + size, err := m.MinAvailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PodDisruptionBudgetStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodDisruptionBudgetStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudgetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ExpectedPods)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredHealthy)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentHealthy)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.DisruptionsAllowed)) + i-- + dAtA[i] = 0x18 + if len(m.DisruptedPods) > 0 { + keysForDisruptedPods := make([]string, 0, len(m.DisruptedPods)) + for k := range m.DisruptedPods { + keysForDisruptedPods = append(keysForDisruptedPods, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) + for iNdEx := len(keysForDisruptedPods) - 1; iNdEx >= 0; iNdEx-- { + v := m.DisruptedPods[string(keysForDisruptedPods[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForDisruptedPods[iNdEx]) + copy(dAtA[i:], keysForDisruptedPods[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForDisruptedPods[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *PodDisruptionBudget) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodDisruptionBudgetList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodDisruptionBudgetSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MinAvailable != nil { + l = m.MinAvailable.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MaxUnavailable != nil { + l = m.MaxUnavailable.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PodDisruptionBudgetStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + if len(m.DisruptedPods) > 0 { + for k, v := range m.DisruptedPods { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + n += 1 + sovGenerated(uint64(m.DisruptionsAllowed)) + n += 1 + sovGenerated(uint64(m.CurrentHealthy)) + n += 1 + sovGenerated(uint64(m.DesiredHealthy)) + n += 1 + sovGenerated(uint64(m.ExpectedPods)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *PodDisruptionBudget) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDisruptionBudget{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodDisruptionBudgetSpec", "PodDisruptionBudgetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodDisruptionBudgetStatus", "PodDisruptionBudgetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PodDisruptionBudget{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodDisruptionBudget", "PodDisruptionBudget", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PodDisruptionBudgetList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDisruptionBudgetSpec{`, + `MinAvailable:` + strings.Replace(fmt.Sprintf("%v", this.MinAvailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" + keysForDisruptedPods := make([]string, 0, len(this.DisruptedPods)) + for k := range this.DisruptedPods { + keysForDisruptedPods = append(keysForDisruptedPods, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) + mapStringForDisruptedPods := "map[string]v1.Time{" + for _, k := range keysForDisruptedPods { + mapStringForDisruptedPods += fmt.Sprintf("%v: %v,", k, this.DisruptedPods[k]) + } + mapStringForDisruptedPods += "}" + s := strings.Join([]string{`&PodDisruptionBudgetStatus{`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `DisruptedPods:` + mapStringForDisruptedPods + `,`, + `DisruptionsAllowed:` + fmt.Sprintf("%v", this.DisruptionsAllowed) + `,`, + `CurrentHealthy:` + fmt.Sprintf("%v", this.CurrentHealthy) + `,`, + `DesiredHealthy:` + fmt.Sprintf("%v", this.DesiredHealthy) + `,`, + `ExpectedPods:` + fmt.Sprintf("%v", this.ExpectedPods) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *PodDisruptionBudget) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodDisruptionBudget: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodDisruptionBudget: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodDisruptionBudgetList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodDisruptionBudgetList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodDisruptionBudgetList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, PodDisruptionBudget{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodDisruptionBudgetSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodDisruptionBudgetSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodDisruptionBudgetSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinAvailable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MinAvailable == nil { + m.MinAvailable = &intstr.IntOrString{} + } + if err := m.MinAvailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxUnavailable == nil { + m.MaxUnavailable = &intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodDisruptionBudgetStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodDisruptionBudgetStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + m.ObservedGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservedGeneration |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DisruptedPods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DisruptedPods == nil { + m.DisruptedPods = make(map[string]v1.Time) + } + var mapkey string + mapvalue := &v1.Time{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &v1.Time{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.DisruptedPods[mapkey] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisruptionsAllowed", wireType) + } + m.DisruptionsAllowed = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DisruptionsAllowed |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentHealthy", wireType) + } + m.CurrentHealthy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentHealthy |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredHealthy", wireType) + } + m.DesiredHealthy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DesiredHealthy |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPods", wireType) + } + m.ExpectedPods = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpectedPods |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/constraint/vendor/k8s.io/api/policy/v1/generated.proto b/constraint/vendor/k8s.io/api/policy/v1/generated.proto new file mode 100644 index 000000000..f57514112 --- /dev/null +++ b/constraint/vendor/k8s.io/api/policy/v1/generated.proto @@ -0,0 +1,138 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = "proto2"; + +package k8s.io.api.policy.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods +message PodDisruptionBudget { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the desired behavior of the PodDisruptionBudget. + // +optional + optional PodDisruptionBudgetSpec spec = 2; + + // Most recently observed status of the PodDisruptionBudget. + // +optional + optional PodDisruptionBudgetStatus status = 3; +} + +// PodDisruptionBudgetList is a collection of PodDisruptionBudgets. +message PodDisruptionBudgetList { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of PodDisruptionBudgets + repeated PodDisruptionBudget items = 2; +} + +// PodDisruptionBudgetSpec is a description of a PodDisruptionBudget. +message PodDisruptionBudgetSpec { + // An eviction is allowed if at least "minAvailable" pods selected by + // "selector" will still be available after the eviction, i.e. even in the + // absence of the evicted pod. So for example you can prevent all voluntary + // evictions by specifying "100%". + // +optional + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString minAvailable = 1; + + // Label query over pods whose evictions are managed by the disruption + // budget. + // A null selector will match no pods, while an empty ({}) selector will select + // all pods within the namespace. + // +patchStrategy=replace + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; + + // An eviction is allowed if at most "maxUnavailable" pods selected by + // "selector" are unavailable after the eviction, i.e. even in absence of + // the evicted pod. For example, one can prevent all voluntary evictions + // by specifying 0. This is a mutually exclusive setting with "minAvailable". + // +optional + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 3; +} + +// PodDisruptionBudgetStatus represents information about the status of a +// PodDisruptionBudget. Status may trail the actual state of a system. +message PodDisruptionBudgetStatus { + // Most recent generation observed when updating this PDB status. DisruptionsAllowed and other + // status information is valid only if observedGeneration equals to PDB's object generation. + // +optional + optional int64 observedGeneration = 1; + + // DisruptedPods contains information about pods whose eviction was + // processed by the API server eviction subresource handler but has not + // yet been observed by the PodDisruptionBudget controller. + // A pod will be in this map from the time when the API server processed the + // eviction request to the time when the pod is seen by PDB controller + // as having been marked for deletion (or after a timeout). The key in the map is the name of the pod + // and the value is the time when the API server processed the eviction request. If + // the deletion didn't occur and a pod is still there it will be removed from + // the list automatically by PodDisruptionBudget controller after some time. + // If everything goes smooth this map should be empty for the most of the time. + // Large number of entries in the map may indicate problems with pod deletions. + // +optional + map disruptedPods = 2; + + // Number of pod disruptions that are currently allowed. + optional int32 disruptionsAllowed = 3; + + // current number of healthy pods + optional int32 currentHealthy = 4; + + // minimum desired number of healthy pods + optional int32 desiredHealthy = 5; + + // total number of pods counted by this disruption budget + optional int32 expectedPods = 6; + + // Conditions contain conditions for PDB. The disruption controller sets the + // DisruptionAllowed condition. The following are known values for the reason field + // (additional reasons could be added in the future): + // - SyncFailed: The controller encountered an error and wasn't able to compute + // the number of allowed disruptions. Therefore no disruptions are + // allowed and the status of the condition will be False. + // - InsufficientPods: The number of pods are either at or below the number + // required by the PodDisruptionBudget. No disruptions are + // allowed and the status of the condition will be False. + // - SufficientPods: There are more pods than required by the PodDisruptionBudget. + // The condition will be True, and the number of allowed + // disruptions are provided by the disruptionsAllowed property. + // + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 7; +} + diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/register.go b/constraint/vendor/k8s.io/api/policy/v1/register.go similarity index 82% rename from constraint/vendor/k8s.io/api/batch/v2alpha1/register.go rename to constraint/vendor/k8s.io/api/policy/v1/register.go index ac7fa5087..603c49b9c 100644 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/register.go +++ b/constraint/vendor/k8s.io/api/policy/v1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v2alpha1 +package v1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -23,10 +23,10 @@ import ( ) // GroupName is the group name use in this package -const GroupName = "batch" +const GroupName = "policy" // SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v2alpha1"} +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} // Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) schema.GroupResource { @@ -34,8 +34,6 @@ func Resource(resource string) schema.GroupResource { } var ( - // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. - // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) localSchemeBuilder = &SchemeBuilder AddToScheme = localSchemeBuilder.AddToScheme @@ -44,10 +42,10 @@ var ( // Adds the list of known types to the given scheme. func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, - &JobTemplate{}, - &CronJob{}, - &CronJobList{}, + &PodDisruptionBudget{}, + &PodDisruptionBudgetList{}, ) + // Add the watch version that applies metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil } diff --git a/constraint/vendor/k8s.io/api/policy/v1/types.go b/constraint/vendor/k8s.io/api/policy/v1/types.go new file mode 100644 index 000000000..65bf768d8 --- /dev/null +++ b/constraint/vendor/k8s.io/api/policy/v1/types.go @@ -0,0 +1,150 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// PodDisruptionBudgetSpec is a description of a PodDisruptionBudget. +type PodDisruptionBudgetSpec struct { + // An eviction is allowed if at least "minAvailable" pods selected by + // "selector" will still be available after the eviction, i.e. even in the + // absence of the evicted pod. So for example you can prevent all voluntary + // evictions by specifying "100%". + // +optional + MinAvailable *intstr.IntOrString `json:"minAvailable,omitempty" protobuf:"bytes,1,opt,name=minAvailable"` + + // Label query over pods whose evictions are managed by the disruption + // budget. + // A null selector will match no pods, while an empty ({}) selector will select + // all pods within the namespace. + // +patchStrategy=replace + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" patchStrategy:"replace" protobuf:"bytes,2,opt,name=selector"` + + // An eviction is allowed if at most "maxUnavailable" pods selected by + // "selector" are unavailable after the eviction, i.e. even in absence of + // the evicted pod. For example, one can prevent all voluntary evictions + // by specifying 0. This is a mutually exclusive setting with "minAvailable". + // +optional + MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,3,opt,name=maxUnavailable"` +} + +// PodDisruptionBudgetStatus represents information about the status of a +// PodDisruptionBudget. Status may trail the actual state of a system. +type PodDisruptionBudgetStatus struct { + // Most recent generation observed when updating this PDB status. DisruptionsAllowed and other + // status information is valid only if observedGeneration equals to PDB's object generation. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"` + + // DisruptedPods contains information about pods whose eviction was + // processed by the API server eviction subresource handler but has not + // yet been observed by the PodDisruptionBudget controller. + // A pod will be in this map from the time when the API server processed the + // eviction request to the time when the pod is seen by PDB controller + // as having been marked for deletion (or after a timeout). The key in the map is the name of the pod + // and the value is the time when the API server processed the eviction request. If + // the deletion didn't occur and a pod is still there it will be removed from + // the list automatically by PodDisruptionBudget controller after some time. + // If everything goes smooth this map should be empty for the most of the time. + // Large number of entries in the map may indicate problems with pod deletions. + // +optional + DisruptedPods map[string]metav1.Time `json:"disruptedPods,omitempty" protobuf:"bytes,2,rep,name=disruptedPods"` + + // Number of pod disruptions that are currently allowed. + DisruptionsAllowed int32 `json:"disruptionsAllowed" protobuf:"varint,3,opt,name=disruptionsAllowed"` + + // current number of healthy pods + CurrentHealthy int32 `json:"currentHealthy" protobuf:"varint,4,opt,name=currentHealthy"` + + // minimum desired number of healthy pods + DesiredHealthy int32 `json:"desiredHealthy" protobuf:"varint,5,opt,name=desiredHealthy"` + + // total number of pods counted by this disruption budget + ExpectedPods int32 `json:"expectedPods" protobuf:"varint,6,opt,name=expectedPods"` + + // Conditions contain conditions for PDB. The disruption controller sets the + // DisruptionAllowed condition. The following are known values for the reason field + // (additional reasons could be added in the future): + // - SyncFailed: The controller encountered an error and wasn't able to compute + // the number of allowed disruptions. Therefore no disruptions are + // allowed and the status of the condition will be False. + // - InsufficientPods: The number of pods are either at or below the number + // required by the PodDisruptionBudget. No disruptions are + // allowed and the status of the condition will be False. + // - SufficientPods: There are more pods than required by the PodDisruptionBudget. + // The condition will be True, and the number of allowed + // disruptions are provided by the disruptionsAllowed property. + // + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,7,rep,name=conditions"` +} + +const ( + // DisruptionAllowedCondition is a condition set by the disruption controller + // that signal whether any of the pods covered by the PDB can be disrupted. + DisruptionAllowedCondition = "DisruptionAllowed" + + // SyncFailedReason is set on the DisruptionAllowed condition if reconcile + // of the PDB failed and therefore disruption of pods are not allowed. + SyncFailedReason = "SyncFailed" + // SufficientPodsReason is set on the DisruptionAllowed condition if there are + // more pods covered by the PDB than required and at least one can be disrupted. + SufficientPodsReason = "SufficientPods" + // InsufficientPodsReason is set on the DisruptionAllowed condition if the number + // of pods are equal to or fewer than required by the PDB. + InsufficientPodsReason = "InsufficientPods" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods +type PodDisruptionBudget struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the desired behavior of the PodDisruptionBudget. + // +optional + Spec PodDisruptionBudgetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + // Most recently observed status of the PodDisruptionBudget. + // +optional + Status PodDisruptionBudgetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodDisruptionBudgetList is a collection of PodDisruptionBudgets. +type PodDisruptionBudgetList struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Items is a list of PodDisruptionBudgets + Items []PodDisruptionBudget `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/constraint/vendor/k8s.io/api/policy/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/policy/v1/types_swagger_doc_generated.go new file mode 100644 index 000000000..0b80a1dcc --- /dev/null +++ b/constraint/vendor/k8s.io/api/policy/v1/types_swagger_doc_generated.go @@ -0,0 +1,77 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_PodDisruptionBudget = map[string]string{ + "": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the PodDisruptionBudget.", + "status": "Most recently observed status of the PodDisruptionBudget.", +} + +func (PodDisruptionBudget) SwaggerDoc() map[string]string { + return map_PodDisruptionBudget +} + +var map_PodDisruptionBudgetList = map[string]string{ + "": "PodDisruptionBudgetList is a collection of PodDisruptionBudgets.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is a list of PodDisruptionBudgets", +} + +func (PodDisruptionBudgetList) SwaggerDoc() map[string]string { + return map_PodDisruptionBudgetList +} + +var map_PodDisruptionBudgetSpec = map[string]string{ + "": "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.", + "minAvailable": "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".", + "selector": "Label query over pods whose evictions are managed by the disruption budget. A null selector will match no pods, while an empty ({}) selector will select all pods within the namespace.", + "maxUnavailable": "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".", +} + +func (PodDisruptionBudgetSpec) SwaggerDoc() map[string]string { + return map_PodDisruptionBudgetSpec +} + +var map_PodDisruptionBudgetStatus = map[string]string{ + "": "PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.", + "observedGeneration": "Most recent generation observed when updating this PDB status. DisruptionsAllowed and other status information is valid only if observedGeneration equals to PDB's object generation.", + "disruptedPods": "DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.", + "disruptionsAllowed": "Number of pod disruptions that are currently allowed.", + "currentHealthy": "current number of healthy pods", + "desiredHealthy": "minimum desired number of healthy pods", + "expectedPods": "total number of pods counted by this disruption budget", + "conditions": "Conditions contain conditions for PDB. The disruption controller sets the DisruptionAllowed condition. The following are known values for the reason field (additional reasons could be added in the future): - SyncFailed: The controller encountered an error and wasn't able to compute\n the number of allowed disruptions. Therefore no disruptions are\n allowed and the status of the condition will be False.\n- InsufficientPods: The number of pods are either at or below the number\n required by the PodDisruptionBudget. No disruptions are\n allowed and the status of the condition will be False.\n- SufficientPods: There are more pods than required by the PodDisruptionBudget.\n The condition will be True, and the number of allowed\n disruptions are provided by the disruptionsAllowed property.", +} + +func (PodDisruptionBudgetStatus) SwaggerDoc() map[string]string { + return map_PodDisruptionBudgetStatus +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/constraint/vendor/k8s.io/api/policy/v1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/policy/v1/zz_generated.deepcopy.go new file mode 100644 index 000000000..78c0adbd7 --- /dev/null +++ b/constraint/vendor/k8s.io/api/policy/v1/zz_generated.deepcopy.go @@ -0,0 +1,149 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodDisruptionBudget) DeepCopyInto(out *PodDisruptionBudget) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodDisruptionBudget. +func (in *PodDisruptionBudget) DeepCopy() *PodDisruptionBudget { + if in == nil { + return nil + } + out := new(PodDisruptionBudget) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodDisruptionBudget) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodDisruptionBudgetList) DeepCopyInto(out *PodDisruptionBudgetList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodDisruptionBudget, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodDisruptionBudgetList. +func (in *PodDisruptionBudgetList) DeepCopy() *PodDisruptionBudgetList { + if in == nil { + return nil + } + out := new(PodDisruptionBudgetList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodDisruptionBudgetList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodDisruptionBudgetSpec) DeepCopyInto(out *PodDisruptionBudgetSpec) { + *out = *in + if in.MinAvailable != nil { + in, out := &in.MinAvailable, &out.MinAvailable + *out = new(intstr.IntOrString) + **out = **in + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + *out = new(intstr.IntOrString) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodDisruptionBudgetSpec. +func (in *PodDisruptionBudgetSpec) DeepCopy() *PodDisruptionBudgetSpec { + if in == nil { + return nil + } + out := new(PodDisruptionBudgetSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodDisruptionBudgetStatus) DeepCopyInto(out *PodDisruptionBudgetStatus) { + *out = *in + if in.DisruptedPods != nil { + in, out := &in.DisruptedPods, &out.DisruptedPods + *out = make(map[string]metav1.Time, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodDisruptionBudgetStatus. +func (in *PodDisruptionBudgetStatus) DeepCopy() *PodDisruptionBudgetStatus { + if in == nil { + return nil + } + out := new(PodDisruptionBudgetStatus) + in.DeepCopyInto(out) + return out +} diff --git a/constraint/vendor/k8s.io/api/policy/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/policy/v1beta1/generated.pb.go index 40ec7ef7f..9cce671df 100644 --- a/constraint/vendor/k8s.io/api/policy/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/policy/v1beta1/generated.pb.go @@ -609,125 +609,126 @@ func init() { } var fileDescriptor_014060e454a820dc = []byte{ - // 1878 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x6e, 0x1b, 0xc7, - 0x15, 0xd6, 0x9a, 0xfa, 0xa1, 0x46, 0x3f, 0x16, 0x47, 0x3f, 0x5e, 0x2b, 0x0d, 0xd7, 0xd9, 0x00, - 0x85, 0x9b, 0x26, 0xcb, 0x58, 0x76, 0x5c, 0xa3, 0x69, 0x8b, 0x68, 0x45, 0xc9, 0x56, 0x60, 0x59, - 0xec, 0xd0, 0x0e, 0xda, 0xc2, 0x2d, 0x3a, 0xe4, 0x8e, 0xa8, 0x8d, 0x96, 0xbb, 0xdb, 0x99, 0x59, - 0x46, 0xbc, 0xeb, 0x45, 0x2f, 0x7a, 0xd9, 0x17, 0x08, 0xfa, 0x00, 0x45, 0xaf, 0xfa, 0x12, 0x0e, - 0x50, 0x04, 0xb9, 0x0c, 0x7a, 0x41, 0xd4, 0xec, 0x5b, 0xf8, 0xaa, 0xd8, 0xe1, 0xec, 0x92, 0xfb, - 0x47, 0x5a, 0x01, 0xec, 0x3b, 0xee, 0x9c, 0xef, 0xfb, 0xce, 0xcc, 0x99, 0x33, 0x67, 0x0e, 0x07, - 0x98, 0x17, 0x0f, 0x98, 0x61, 0x7b, 0xb5, 0x8b, 0xa0, 0x45, 0xa8, 0x4b, 0x38, 0x61, 0xb5, 0x1e, - 0x71, 0x2d, 0x8f, 0xd6, 0xa4, 0x01, 0xfb, 0x76, 0xcd, 0xf7, 0x1c, 0xbb, 0xdd, 0xaf, 0xf5, 0xee, - 0xb4, 0x08, 0xc7, 0x77, 0x6a, 0x1d, 0xe2, 0x12, 0x8a, 0x39, 0xb1, 0x0c, 0x9f, 0x7a, 0xdc, 0x83, - 0x37, 0x47, 0x50, 0x03, 0xfb, 0xb6, 0x31, 0x82, 0x1a, 0x12, 0xba, 0xfb, 0x51, 0xc7, 0xe6, 0xe7, - 0x41, 0xcb, 0x68, 0x7b, 0xdd, 0x5a, 0xc7, 0xeb, 0x78, 0x35, 0xc1, 0x68, 0x05, 0x67, 0xe2, 0x4b, - 0x7c, 0x88, 0x5f, 0x23, 0xa5, 0x5d, 0x7d, 0xc2, 0x69, 0xdb, 0xa3, 0xa4, 0xd6, 0xcb, 0x78, 0xdb, - 0xbd, 0x37, 0xc6, 0x74, 0x71, 0xfb, 0xdc, 0x76, 0x09, 0xed, 0xd7, 0xfc, 0x8b, 0x4e, 0x38, 0xc0, - 0x6a, 0x5d, 0xc2, 0x71, 0x1e, 0xab, 0x56, 0xc4, 0xa2, 0x81, 0xcb, 0xed, 0x2e, 0xc9, 0x10, 0xee, - 0xcf, 0x22, 0xb0, 0xf6, 0x39, 0xe9, 0xe2, 0x0c, 0xef, 0x6e, 0x11, 0x2f, 0xe0, 0xb6, 0x53, 0xb3, - 0x5d, 0xce, 0x38, 0x4d, 0x93, 0xf4, 0x7b, 0x60, 0x63, 0xdf, 0x71, 0xbc, 0xaf, 0x88, 0x75, 0xd0, - 0x3c, 0xae, 0x53, 0xbb, 0x47, 0x28, 0xbc, 0x05, 0xe6, 0x5d, 0xdc, 0x25, 0xaa, 0x72, 0x4b, 0xb9, - 0xbd, 0x6c, 0xae, 0xbe, 0x18, 0x68, 0x73, 0xc3, 0x81, 0x36, 0xff, 0x04, 0x77, 0x09, 0x12, 0x16, - 0xfd, 0x53, 0x50, 0x91, 0xac, 0x23, 0x87, 0x5c, 0x7e, 0xe1, 0x39, 0x41, 0x97, 0xc0, 0x1f, 0x83, - 0x45, 0x4b, 0x08, 0x48, 0xe2, 0xba, 0x24, 0x2e, 0x8e, 0x64, 0x91, 0xb4, 0xea, 0x0c, 0x5c, 0x97, - 0xe4, 0x47, 0x1e, 0xe3, 0x0d, 0xcc, 0xcf, 0xe1, 0x1e, 0x00, 0x3e, 0xe6, 0xe7, 0x0d, 0x4a, 0xce, - 0xec, 0x4b, 0x49, 0x87, 0x92, 0x0e, 0x1a, 0xb1, 0x05, 0x4d, 0xa0, 0xe0, 0x87, 0xa0, 0x4c, 0x09, - 0xb6, 0x4e, 0x5d, 0xa7, 0xaf, 0x5e, 0xbb, 0xa5, 0xdc, 0x2e, 0x9b, 0x1b, 0x92, 0x51, 0x46, 0x72, - 0x1c, 0xc5, 0x08, 0xfd, 0x3f, 0x0a, 0x28, 0x1f, 0xf6, 0xec, 0x36, 0xb7, 0x3d, 0x17, 0xfe, 0x11, - 0x94, 0xc3, 0xdd, 0xb2, 0x30, 0xc7, 0xc2, 0xd9, 0xca, 0xde, 0xc7, 0xc6, 0x38, 0x93, 0xe2, 0xe0, - 0x19, 0xfe, 0x45, 0x27, 0x1c, 0x60, 0x46, 0x88, 0x36, 0x7a, 0x77, 0x8c, 0xd3, 0xd6, 0x97, 0xa4, - 0xcd, 0x4f, 0x08, 0xc7, 0xe3, 0xe9, 0x8d, 0xc7, 0x50, 0xac, 0x0a, 0x1d, 0xb0, 0x66, 0x11, 0x87, - 0x70, 0x72, 0xea, 0x87, 0x1e, 0x99, 0x98, 0xe1, 0xca, 0xde, 0xdd, 0xd7, 0x73, 0x53, 0x9f, 0xa4, - 0x9a, 0x95, 0xe1, 0x40, 0x5b, 0x4b, 0x0c, 0xa1, 0xa4, 0xb8, 0xfe, 0xb5, 0x02, 0x76, 0x8e, 0x9a, - 0x0f, 0xa9, 0x17, 0xf8, 0x4d, 0x1e, 0xee, 0x6e, 0xa7, 0x2f, 0x4d, 0xf0, 0x67, 0x60, 0x9e, 0x06, - 0x4e, 0xb4, 0x97, 0xef, 0x47, 0x7b, 0x89, 0x02, 0x87, 0xbc, 0x1a, 0x68, 0x9b, 0x29, 0xd6, 0xd3, - 0xbe, 0x4f, 0x90, 0x20, 0xc0, 0xcf, 0xc1, 0x22, 0xc5, 0x6e, 0x87, 0x84, 0x53, 0x2f, 0xdd, 0x5e, - 0xd9, 0xd3, 0x8d, 0xc2, 0xb3, 0x66, 0x1c, 0xd7, 0x51, 0x08, 0x1d, 0xef, 0xb8, 0xf8, 0x64, 0x48, - 0x2a, 0xe8, 0x27, 0x60, 0x4d, 0x6c, 0xb5, 0x47, 0xb9, 0xb0, 0xc0, 0x77, 0x41, 0xa9, 0x6b, 0xbb, - 0x62, 0x52, 0x0b, 0xe6, 0x8a, 0x64, 0x95, 0x4e, 0x6c, 0x17, 0x85, 0xe3, 0xc2, 0x8c, 0x2f, 0x45, - 0xcc, 0x26, 0xcd, 0xf8, 0x12, 0x85, 0xe3, 0xfa, 0x43, 0xb0, 0x24, 0x3d, 0x4e, 0x0a, 0x95, 0xa6, - 0x0b, 0x95, 0x72, 0x84, 0xfe, 0x71, 0x0d, 0x6c, 0x36, 0x3c, 0xab, 0x6e, 0x33, 0x1a, 0x88, 0x78, - 0x99, 0x81, 0xd5, 0x21, 0xfc, 0x2d, 0xe4, 0xc7, 0x53, 0x30, 0xcf, 0x7c, 0xd2, 0x96, 0x69, 0xb1, - 0x37, 0x25, 0xb6, 0x39, 0xf3, 0x6b, 0xfa, 0xa4, 0x3d, 0x3e, 0x96, 0xe1, 0x17, 0x12, 0x6a, 0xf0, - 0x39, 0x58, 0x64, 0x1c, 0xf3, 0x80, 0xa9, 0x25, 0xa1, 0x7b, 0xef, 0x8a, 0xba, 0x82, 0x3b, 0xde, - 0xc5, 0xd1, 0x37, 0x92, 0x9a, 0xfa, 0xbf, 0x15, 0x70, 0x23, 0x87, 0xf5, 0xd8, 0x66, 0x1c, 0x3e, - 0xcf, 0x44, 0xcc, 0x78, 0xbd, 0x88, 0x85, 0x6c, 0x11, 0xaf, 0xf8, 0xf0, 0x46, 0x23, 0x13, 0xd1, - 0x6a, 0x82, 0x05, 0x9b, 0x93, 0x6e, 0x94, 0x8a, 0xc6, 0xd5, 0x96, 0x65, 0xae, 0x49, 0xe9, 0x85, - 0xe3, 0x50, 0x04, 0x8d, 0xb4, 0xf4, 0x6f, 0xaf, 0xe5, 0x2e, 0x27, 0x0c, 0x27, 0x3c, 0x03, 0xab, - 0x5d, 0xdb, 0xdd, 0xef, 0x61, 0xdb, 0xc1, 0x2d, 0x79, 0x7a, 0xa6, 0x25, 0x41, 0x58, 0x61, 0x8d, - 0x51, 0x85, 0x35, 0x8e, 0x5d, 0x7e, 0x4a, 0x9b, 0x9c, 0xda, 0x6e, 0xc7, 0xdc, 0x18, 0x0e, 0xb4, - 0xd5, 0x93, 0x09, 0x25, 0x94, 0xd0, 0x85, 0xbf, 0x07, 0x65, 0x46, 0x1c, 0xd2, 0xe6, 0x1e, 0xbd, - 0x5a, 0x85, 0x78, 0x8c, 0x5b, 0xc4, 0x69, 0x4a, 0xaa, 0xb9, 0x1a, 0xc6, 0x2d, 0xfa, 0x42, 0xb1, - 0x24, 0x74, 0xc0, 0x7a, 0x17, 0x5f, 0x3e, 0x73, 0x71, 0xbc, 0x90, 0xd2, 0x0f, 0x5c, 0x08, 0x1c, - 0x0e, 0xb4, 0xf5, 0x93, 0x84, 0x16, 0x4a, 0x69, 0xeb, 0xc3, 0x79, 0x70, 0xb3, 0x30, 0xab, 0xe0, - 0xe7, 0x00, 0x7a, 0x2d, 0x46, 0x68, 0x8f, 0x58, 0x0f, 0x47, 0x77, 0x90, 0xed, 0x45, 0x07, 0x77, - 0x57, 0x6e, 0x10, 0x3c, 0xcd, 0x20, 0x50, 0x0e, 0x0b, 0xfe, 0x45, 0x01, 0x6b, 0xd6, 0xc8, 0x0d, - 0xb1, 0x1a, 0x9e, 0x15, 0x25, 0xc6, 0xc3, 0x1f, 0x92, 0xef, 0x46, 0x7d, 0x52, 0xe9, 0xd0, 0xe5, - 0xb4, 0x6f, 0x6e, 0xcb, 0x09, 0xad, 0x25, 0x6c, 0x28, 0xe9, 0x34, 0x5c, 0x92, 0x15, 0x4b, 0x32, - 0x79, 0xa7, 0x89, 0x10, 0x2f, 0x8c, 0x97, 0x54, 0xcf, 0x20, 0x50, 0x0e, 0x0b, 0xfe, 0x0a, 0xac, - 0xb7, 0x03, 0x4a, 0x89, 0xcb, 0x1f, 0x11, 0xec, 0xf0, 0xf3, 0xbe, 0x3a, 0x2f, 0x74, 0x76, 0xa4, - 0xce, 0xfa, 0x41, 0xc2, 0x8a, 0x52, 0xe8, 0x90, 0x6f, 0x11, 0x66, 0x53, 0x62, 0x45, 0xfc, 0x85, - 0x24, 0xbf, 0x9e, 0xb0, 0xa2, 0x14, 0x1a, 0x3e, 0x00, 0xab, 0xe4, 0xd2, 0x27, 0xed, 0x28, 0xa0, - 0x8b, 0x82, 0xbd, 0x25, 0xd9, 0xab, 0x87, 0x13, 0x36, 0x94, 0x40, 0xee, 0x3a, 0x00, 0x66, 0x23, - 0x08, 0x37, 0x40, 0xe9, 0x82, 0xf4, 0x47, 0xd7, 0x0e, 0x0a, 0x7f, 0xc2, 0xcf, 0xc0, 0x42, 0x0f, - 0x3b, 0x01, 0x91, 0x89, 0xfe, 0xc1, 0xeb, 0x25, 0xfa, 0x53, 0xbb, 0x4b, 0xd0, 0x88, 0xf8, 0xf3, - 0x6b, 0x0f, 0x14, 0xfd, 0x1b, 0x05, 0x54, 0x1a, 0x9e, 0xd5, 0x24, 0xed, 0x80, 0xda, 0xbc, 0xdf, - 0x10, 0x9b, 0xfc, 0x16, 0x0a, 0x36, 0x4a, 0x14, 0xec, 0x8f, 0xa7, 0x27, 0x5a, 0x72, 0x76, 0x45, - 0xe5, 0x5a, 0x7f, 0xa1, 0x80, 0xed, 0x0c, 0xfa, 0x2d, 0x94, 0xd3, 0x5f, 0x27, 0xcb, 0xe9, 0x87, - 0x57, 0x59, 0x4c, 0x41, 0x31, 0xfd, 0xa6, 0x92, 0xb3, 0x14, 0x51, 0x4a, 0xc3, 0xd6, 0x8e, 0xda, - 0x3d, 0xdb, 0x21, 0x1d, 0x62, 0x89, 0xc5, 0x94, 0x27, 0x5a, 0xbb, 0xd8, 0x82, 0x26, 0x50, 0x90, - 0x81, 0x1d, 0x8b, 0x9c, 0xe1, 0xc0, 0xe1, 0xfb, 0x96, 0x75, 0x80, 0x7d, 0xdc, 0xb2, 0x1d, 0x9b, - 0xdb, 0xb2, 0x17, 0x59, 0x36, 0x3f, 0x1d, 0x0e, 0xb4, 0x9d, 0x7a, 0x2e, 0xe2, 0xd5, 0x40, 0x7b, - 0x37, 0xdb, 0xca, 0x1b, 0x31, 0xa4, 0x8f, 0x0a, 0xa4, 0x61, 0x1f, 0xa8, 0x94, 0xfc, 0x29, 0x08, - 0x0f, 0x45, 0x9d, 0x7a, 0x7e, 0xc2, 0x6d, 0x49, 0xb8, 0xfd, 0xe5, 0x70, 0xa0, 0xa9, 0xa8, 0x00, - 0x33, 0xdb, 0x71, 0xa1, 0x3c, 0xfc, 0x12, 0x6c, 0x62, 0xd9, 0x84, 0x4f, 0x7a, 0x9d, 0x17, 0x5e, - 0x1f, 0x0c, 0x07, 0xda, 0xe6, 0x7e, 0xd6, 0x3c, 0xdb, 0x61, 0x9e, 0x28, 0xac, 0x81, 0xa5, 0x9e, - 0xe8, 0xd7, 0x99, 0xba, 0x20, 0xf4, 0xb7, 0x87, 0x03, 0x6d, 0x69, 0xd4, 0xc2, 0x87, 0x9a, 0x8b, - 0x47, 0x4d, 0xd1, 0x05, 0x46, 0x28, 0xf8, 0x09, 0x58, 0x39, 0xf7, 0x18, 0x7f, 0x42, 0xf8, 0x57, - 0x1e, 0xbd, 0x10, 0x85, 0xa1, 0x6c, 0x6e, 0xca, 0x1d, 0x5c, 0x79, 0x34, 0x36, 0xa1, 0x49, 0x1c, - 0xfc, 0x2d, 0x58, 0x3e, 0x97, 0x3d, 0x1f, 0x53, 0x97, 0x44, 0xa2, 0xdd, 0x9e, 0x92, 0x68, 0x89, - 0xfe, 0xd0, 0xac, 0x48, 0xf9, 0xe5, 0x68, 0x98, 0xa1, 0xb1, 0x1a, 0xfc, 0x09, 0x58, 0x12, 0x1f, - 0xc7, 0x75, 0xb5, 0x2c, 0x66, 0x73, 0x5d, 0xc2, 0x97, 0x1e, 0x8d, 0x86, 0x51, 0x64, 0x8f, 0xa0, - 0xc7, 0x8d, 0x03, 0x75, 0x39, 0x0b, 0x3d, 0x6e, 0x1c, 0xa0, 0xc8, 0x0e, 0x9f, 0x83, 0x25, 0x46, - 0x1e, 0xdb, 0x6e, 0x70, 0xa9, 0x02, 0x71, 0xe4, 0xee, 0x4c, 0x99, 0x6e, 0xf3, 0x50, 0x20, 0x53, - 0xdd, 0xf6, 0x58, 0x5d, 0xda, 0x51, 0x24, 0x09, 0x2d, 0xb0, 0x4c, 0x03, 0x77, 0x9f, 0x3d, 0x63, - 0x84, 0xaa, 0x2b, 0x99, 0xab, 0x3e, 0xad, 0x8f, 0x22, 0x6c, 0xda, 0x43, 0x1c, 0x99, 0x18, 0x81, - 0xc6, 0xc2, 0xd0, 0x02, 0x40, 0x7c, 0x88, 0xa6, 0x5e, 0xdd, 0x99, 0xd9, 0x04, 0xa2, 0x18, 0x9c, - 0xf6, 0xb3, 0x1e, 0x1e, 0xcf, 0xb1, 0x19, 0x4d, 0xe8, 0xc2, 0xbf, 0x2a, 0x00, 0xb2, 0xc0, 0xf7, - 0x1d, 0xd2, 0x25, 0x2e, 0xc7, 0x8e, 0x18, 0x65, 0xea, 0xaa, 0x70, 0xf7, 0x8b, 0x69, 0x51, 0xcb, - 0x90, 0xd2, 0x6e, 0xe3, 0x6b, 0x33, 0x0b, 0x45, 0x39, 0x3e, 0xc3, 0x4d, 0x3b, 0x93, 0xab, 0x5d, - 0x9b, 0xb9, 0x69, 0xf9, 0x7f, 0x91, 0xc6, 0x9b, 0x26, 0xed, 0x28, 0x92, 0x84, 0x5f, 0x80, 0x9d, - 0xe8, 0x0f, 0x24, 0xf2, 0x3c, 0x7e, 0x64, 0x3b, 0x84, 0xf5, 0x19, 0x27, 0x5d, 0x75, 0x5d, 0x24, - 0x53, 0x55, 0x32, 0x77, 0x50, 0x2e, 0x0a, 0x15, 0xb0, 0x61, 0x17, 0x68, 0x51, 0x11, 0x0a, 0x4f, - 0x68, 0x5c, 0x05, 0x0f, 0x59, 0x1b, 0x3b, 0xa3, 0xc6, 0xe8, 0xba, 0x70, 0xf0, 0xfe, 0x70, 0xa0, - 0x69, 0xf5, 0xe9, 0x50, 0x34, 0x4b, 0x0b, 0xfe, 0x06, 0xa8, 0xb8, 0xc8, 0xcf, 0x86, 0xf0, 0xf3, - 0xa3, 0xb0, 0xb2, 0x15, 0x3a, 0x28, 0x64, 0x43, 0x1f, 0x6c, 0xe0, 0xe4, 0x5f, 0x79, 0xa6, 0x56, - 0xc4, 0x59, 0xff, 0x60, 0xca, 0x3e, 0xa4, 0xfe, 0xfd, 0x9b, 0xaa, 0x0c, 0xe3, 0x46, 0xca, 0xc0, - 0x50, 0x46, 0x1d, 0x5e, 0x02, 0x88, 0xd3, 0x2f, 0x0f, 0x4c, 0x85, 0x33, 0x2f, 0xb2, 0xcc, 0x73, - 0xc5, 0x38, 0xd5, 0x32, 0x26, 0x86, 0x72, 0x7c, 0x40, 0x0e, 0x2a, 0x38, 0xf5, 0x52, 0xc2, 0xd4, - 0x1b, 0xc2, 0xf1, 0x4f, 0x67, 0x3b, 0x8e, 0x39, 0xe6, 0x4d, 0xe9, 0xb7, 0x92, 0xb6, 0x30, 0x94, - 0x75, 0x00, 0x1f, 0x83, 0x2d, 0x39, 0xf8, 0xcc, 0x65, 0xf8, 0x8c, 0x34, 0xfb, 0xac, 0xcd, 0x1d, - 0xa6, 0x6e, 0x8a, 0xda, 0xad, 0x0e, 0x07, 0xda, 0xd6, 0x7e, 0x8e, 0x1d, 0xe5, 0xb2, 0xe0, 0x67, - 0x60, 0xe3, 0xcc, 0xa3, 0x2d, 0xdb, 0xb2, 0x88, 0x1b, 0x29, 0x6d, 0x09, 0xa5, 0xad, 0x30, 0xfe, - 0x47, 0x29, 0x1b, 0xca, 0xa0, 0x21, 0x03, 0xdb, 0x52, 0xb9, 0x41, 0xbd, 0xf6, 0x89, 0x17, 0xb8, - 0x3c, 0xbc, 0x2e, 0x98, 0xba, 0x1d, 0x5f, 0x91, 0xdb, 0xfb, 0x79, 0x80, 0x57, 0x03, 0xed, 0x56, - 0xce, 0x75, 0x95, 0x00, 0xa1, 0x7c, 0x6d, 0xe8, 0x80, 0x55, 0xf9, 0xf6, 0x75, 0xe0, 0x60, 0xc6, - 0x54, 0x55, 0x1c, 0xf5, 0xfb, 0xd3, 0x0b, 0x5b, 0x0c, 0x4f, 0x9f, 0x77, 0xf1, 0xa7, 0x6c, 0x12, - 0x80, 0x12, 0xea, 0xfa, 0xdf, 0x15, 0x70, 0xb3, 0xb0, 0x30, 0xc2, 0xfb, 0x89, 0x07, 0x15, 0x3d, - 0xf5, 0xa0, 0x02, 0xb3, 0xc4, 0x37, 0xf0, 0x9e, 0xf2, 0xb5, 0x02, 0xd4, 0xa2, 0x1b, 0x02, 0x7e, - 0x92, 0x98, 0xe0, 0x7b, 0xa9, 0x09, 0x56, 0x32, 0xbc, 0x37, 0x30, 0xbf, 0x6f, 0x15, 0xf0, 0xce, - 0x94, 0x1d, 0x88, 0x0b, 0x12, 0xb1, 0x26, 0x51, 0x4f, 0x70, 0x78, 0x94, 0x15, 0x91, 0x47, 0xe3, - 0x82, 0x94, 0x83, 0x41, 0x85, 0x6c, 0xf8, 0x0c, 0xdc, 0x90, 0xd5, 0x30, 0x6d, 0x13, 0x9d, 0xfb, - 0xb2, 0xf9, 0xce, 0x70, 0xa0, 0xdd, 0xa8, 0xe7, 0x43, 0x50, 0x11, 0x57, 0xff, 0xa7, 0x02, 0x76, - 0xf2, 0xaf, 0x7c, 0x78, 0x37, 0x11, 0x6e, 0x2d, 0x15, 0xee, 0xeb, 0x29, 0x96, 0x0c, 0xf6, 0x1f, - 0xc0, 0xba, 0x6c, 0x0c, 0x92, 0xef, 0x83, 0x89, 0xa0, 0x87, 0x47, 0x24, 0xec, 0xe9, 0xa5, 0x44, - 0x94, 0xbe, 0xe2, 0xaf, 0x78, 0x72, 0x0c, 0xa5, 0xd4, 0xf4, 0x7f, 0x29, 0xe0, 0xbd, 0x99, 0x97, - 0x2d, 0x34, 0x13, 0x53, 0x37, 0x52, 0x53, 0xaf, 0x16, 0x0b, 0xbc, 0x99, 0x67, 0x42, 0xf3, 0xa3, - 0x17, 0x2f, 0xab, 0x73, 0xdf, 0xbd, 0xac, 0xce, 0x7d, 0xff, 0xb2, 0x3a, 0xf7, 0xe7, 0x61, 0x55, - 0x79, 0x31, 0xac, 0x2a, 0xdf, 0x0d, 0xab, 0xca, 0xf7, 0xc3, 0xaa, 0xf2, 0xdf, 0x61, 0x55, 0xf9, - 0xdb, 0xff, 0xaa, 0x73, 0xbf, 0x5b, 0x92, 0x72, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xe0, - 0x55, 0x1c, 0x41, 0x18, 0x00, 0x00, + // 1904 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5b, 0x6f, 0xdc, 0xc6, + 0x15, 0x16, 0xbd, 0xba, 0xac, 0x46, 0x17, 0x6b, 0x47, 0x17, 0xd3, 0x4a, 0xb3, 0x74, 0x18, 0xa0, + 0x70, 0xd3, 0x84, 0x1b, 0xcb, 0x8e, 0x6b, 0x34, 0x6d, 0x11, 0x51, 0x2b, 0xd9, 0x0a, 0x2c, 0x6b, + 0x3b, 0x6b, 0x07, 0x6d, 0xe1, 0x16, 0x9d, 0x25, 0x47, 0x2b, 0x46, 0x5c, 0x92, 0xe5, 0x0c, 0x37, + 0xda, 0xb7, 0x3e, 0xf4, 0xa1, 0x8f, 0xfd, 0x03, 0x41, 0x7f, 0x40, 0xd1, 0xa7, 0xfe, 0x88, 0x3a, + 0x40, 0x11, 0xe4, 0x31, 0xe8, 0xc3, 0xa2, 0xde, 0xfe, 0x0b, 0x3f, 0x05, 0x9c, 0x1d, 0x72, 0x79, + 0xdd, 0xb5, 0x0d, 0xd8, 0x6f, 0xe4, 0x9c, 0xef, 0xfb, 0xce, 0xcc, 0x99, 0x33, 0x67, 0x2e, 0x40, + 0xbf, 0xb8, 0x47, 0x35, 0xcb, 0x6d, 0x5c, 0x04, 0x1d, 0xe2, 0x3b, 0x84, 0x11, 0xda, 0xe8, 0x13, + 0xc7, 0x74, 0xfd, 0x86, 0x30, 0x60, 0xcf, 0x6a, 0x78, 0xae, 0x6d, 0x19, 0x83, 0x46, 0xff, 0x56, + 0x87, 0x30, 0x7c, 0xab, 0xd1, 0x25, 0x0e, 0xf1, 0x31, 0x23, 0xa6, 0xe6, 0xf9, 0x2e, 0x73, 0xe1, + 0xf5, 0x31, 0x54, 0xc3, 0x9e, 0xa5, 0x8d, 0xa1, 0x9a, 0x80, 0xee, 0x7e, 0xd4, 0xb5, 0xd8, 0x79, + 0xd0, 0xd1, 0x0c, 0xb7, 0xd7, 0xe8, 0xba, 0x5d, 0xb7, 0xc1, 0x19, 0x9d, 0xe0, 0x8c, 0xff, 0xf1, + 0x1f, 0xfe, 0x35, 0x56, 0xda, 0x55, 0x13, 0x4e, 0x0d, 0xd7, 0x27, 0x8d, 0x7e, 0xce, 0xdb, 0xee, + 0x9d, 0x09, 0xa6, 0x87, 0x8d, 0x73, 0xcb, 0x21, 0xfe, 0xa0, 0xe1, 0x5d, 0x74, 0xc3, 0x06, 0xda, + 0xe8, 0x11, 0x86, 0x8b, 0x58, 0x8d, 0x32, 0x96, 0x1f, 0x38, 0xcc, 0xea, 0x91, 0x1c, 0xe1, 0xee, + 0x2c, 0x02, 0x35, 0xce, 0x49, 0x0f, 0xe7, 0x78, 0xb7, 0xcb, 0x78, 0x01, 0xb3, 0xec, 0x86, 0xe5, + 0x30, 0xca, 0xfc, 0x2c, 0x49, 0xbd, 0x03, 0x36, 0xf6, 0x6d, 0xdb, 0xfd, 0x8a, 0x98, 0x07, 0xed, + 0xe3, 0xa6, 0x6f, 0xf5, 0x89, 0x0f, 0x6f, 0x80, 0x79, 0x07, 0xf7, 0x88, 0x2c, 0xdd, 0x90, 0x6e, + 0x2e, 0xeb, 0xab, 0xcf, 0x86, 0xca, 0xdc, 0x68, 0xa8, 0xcc, 0x3f, 0xc2, 0x3d, 0x82, 0xb8, 0x45, + 0xfd, 0x14, 0xd4, 0x04, 0xeb, 0xc8, 0x26, 0x97, 0x5f, 0xb8, 0x76, 0xd0, 0x23, 0xf0, 0xc7, 0x60, + 0xd1, 0xe4, 0x02, 0x82, 0xb8, 0x2e, 0x88, 0x8b, 0x63, 0x59, 0x24, 0xac, 0x2a, 0x05, 0x57, 0x05, + 0xf9, 0x81, 0x4b, 0x59, 0x0b, 0xb3, 0x73, 0xb8, 0x07, 0x80, 0x87, 0xd9, 0x79, 0xcb, 0x27, 0x67, + 0xd6, 0xa5, 0xa0, 0x43, 0x41, 0x07, 0xad, 0xd8, 0x82, 0x12, 0x28, 0xf8, 0x21, 0xa8, 0xfa, 0x04, + 0x9b, 0xa7, 0x8e, 0x3d, 0x90, 0xaf, 0xdc, 0x90, 0x6e, 0x56, 0xf5, 0x0d, 0xc1, 0xa8, 0x22, 0xd1, + 0x8e, 0x62, 0x84, 0xfa, 0x5f, 0x09, 0x54, 0x0f, 0xfb, 0x96, 0xc1, 0x2c, 0xd7, 0x81, 0x7f, 0x04, + 0xd5, 0x70, 0xb6, 0x4c, 0xcc, 0x30, 0x77, 0xb6, 0xb2, 0xf7, 0xb1, 0x36, 0xc9, 0xa4, 0x38, 0x78, + 0x9a, 0x77, 0xd1, 0x0d, 0x1b, 0xa8, 0x16, 0xa2, 0xb5, 0xfe, 0x2d, 0xed, 0xb4, 0xf3, 0x25, 0x31, + 0xd8, 0x09, 0x61, 0x78, 0xd2, 0xbd, 0x49, 0x1b, 0x8a, 0x55, 0xa1, 0x0d, 0xd6, 0x4c, 0x62, 0x13, + 0x46, 0x4e, 0xbd, 0xd0, 0x23, 0xe5, 0x3d, 0x5c, 0xd9, 0xbb, 0xfd, 0x72, 0x6e, 0x9a, 0x49, 0xaa, + 0x5e, 0x1b, 0x0d, 0x95, 0xb5, 0x54, 0x13, 0x4a, 0x8b, 0xab, 0x5f, 0x4b, 0x60, 0xe7, 0xa8, 0x7d, + 0xdf, 0x77, 0x03, 0xaf, 0xcd, 0xc2, 0xd9, 0xed, 0x0e, 0x84, 0x09, 0xfe, 0x0c, 0xcc, 0xfb, 0x81, + 0x1d, 0xcd, 0xe5, 0xfb, 0xd1, 0x5c, 0xa2, 0xc0, 0x26, 0x2f, 0x86, 0xca, 0x66, 0x86, 0xf5, 0x78, + 0xe0, 0x11, 0xc4, 0x09, 0xf0, 0x73, 0xb0, 0xe8, 0x63, 0xa7, 0x4b, 0xc2, 0xae, 0x57, 0x6e, 0xae, + 0xec, 0xa9, 0x5a, 0xe9, 0x5a, 0xd3, 0x8e, 0x9b, 0x28, 0x84, 0x4e, 0x66, 0x9c, 0xff, 0x52, 0x24, + 0x14, 0xd4, 0x13, 0xb0, 0xc6, 0xa7, 0xda, 0xf5, 0x19, 0xb7, 0xc0, 0x77, 0x41, 0xa5, 0x67, 0x39, + 0xbc, 0x53, 0x0b, 0xfa, 0x8a, 0x60, 0x55, 0x4e, 0x2c, 0x07, 0x85, 0xed, 0xdc, 0x8c, 0x2f, 0x79, + 0xcc, 0x92, 0x66, 0x7c, 0x89, 0xc2, 0x76, 0xf5, 0x3e, 0x58, 0x12, 0x1e, 0x93, 0x42, 0x95, 0xe9, + 0x42, 0x95, 0x02, 0xa1, 0x7f, 0x5c, 0x01, 0x9b, 0x2d, 0xd7, 0x6c, 0x5a, 0xd4, 0x0f, 0x78, 0xbc, + 0xf4, 0xc0, 0xec, 0x12, 0xf6, 0x16, 0xf2, 0xe3, 0x31, 0x98, 0xa7, 0x1e, 0x31, 0x44, 0x5a, 0xec, + 0x4d, 0x89, 0x6d, 0x41, 0xff, 0xda, 0x1e, 0x31, 0x26, 0xcb, 0x32, 0xfc, 0x43, 0x5c, 0x0d, 0x3e, + 0x05, 0x8b, 0x94, 0x61, 0x16, 0x50, 0xb9, 0xc2, 0x75, 0xef, 0xbc, 0xa2, 0x2e, 0xe7, 0x4e, 0x66, + 0x71, 0xfc, 0x8f, 0x84, 0xa6, 0xfa, 0x1f, 0x09, 0x5c, 0x2b, 0x60, 0x3d, 0xb4, 0x28, 0x83, 0x4f, + 0x73, 0x11, 0xd3, 0x5e, 0x2e, 0x62, 0x21, 0x9b, 0xc7, 0x2b, 0x5e, 0xbc, 0x51, 0x4b, 0x22, 0x5a, + 0x6d, 0xb0, 0x60, 0x31, 0xd2, 0x8b, 0x52, 0x51, 0x7b, 0xb5, 0x61, 0xe9, 0x6b, 0x42, 0x7a, 0xe1, + 0x38, 0x14, 0x41, 0x63, 0x2d, 0xf5, 0xdb, 0x2b, 0x85, 0xc3, 0x09, 0xc3, 0x09, 0xcf, 0xc0, 0x6a, + 0xcf, 0x72, 0xf6, 0xfb, 0xd8, 0xb2, 0x71, 0x47, 0xac, 0x9e, 0x69, 0x49, 0x10, 0x56, 0x58, 0x6d, + 0x5c, 0x61, 0xb5, 0x63, 0x87, 0x9d, 0xfa, 0x6d, 0xe6, 0x5b, 0x4e, 0x57, 0xdf, 0x18, 0x0d, 0x95, + 0xd5, 0x93, 0x84, 0x12, 0x4a, 0xe9, 0xc2, 0xdf, 0x83, 0x2a, 0x25, 0x36, 0x31, 0x98, 0xeb, 0xbf, + 0x5a, 0x85, 0x78, 0x88, 0x3b, 0xc4, 0x6e, 0x0b, 0xaa, 0xbe, 0x1a, 0xc6, 0x2d, 0xfa, 0x43, 0xb1, + 0x24, 0xb4, 0xc1, 0x7a, 0x0f, 0x5f, 0x3e, 0x71, 0x70, 0x3c, 0x90, 0xca, 0x6b, 0x0e, 0x04, 0x8e, + 0x86, 0xca, 0xfa, 0x49, 0x4a, 0x0b, 0x65, 0xb4, 0xd5, 0x7f, 0x2f, 0x80, 0xeb, 0xa5, 0x59, 0x05, + 0x3f, 0x07, 0xd0, 0xed, 0x50, 0xe2, 0xf7, 0x89, 0x79, 0x7f, 0xbc, 0x07, 0x59, 0x6e, 0xb4, 0x70, + 0x77, 0xc5, 0x04, 0xc1, 0xd3, 0x1c, 0x02, 0x15, 0xb0, 0xe0, 0x5f, 0x24, 0xb0, 0x66, 0x8e, 0xdd, + 0x10, 0xb3, 0xe5, 0x9a, 0x51, 0x62, 0xdc, 0x7f, 0x9d, 0x7c, 0xd7, 0x9a, 0x49, 0xa5, 0x43, 0x87, + 0xf9, 0x03, 0x7d, 0x5b, 0x74, 0x68, 0x2d, 0x65, 0x43, 0x69, 0xa7, 0xe1, 0x90, 0xcc, 0x58, 0x92, + 0x8a, 0x3d, 0x8d, 0x87, 0x78, 0x61, 0x32, 0xa4, 0x66, 0x0e, 0x81, 0x0a, 0x58, 0xf0, 0x57, 0x60, + 0xdd, 0x08, 0x7c, 0x9f, 0x38, 0xec, 0x01, 0xc1, 0x36, 0x3b, 0x1f, 0xc8, 0xf3, 0x5c, 0x67, 0x47, + 0xe8, 0xac, 0x1f, 0xa4, 0xac, 0x28, 0x83, 0x0e, 0xf9, 0x26, 0xa1, 0x96, 0x4f, 0xcc, 0x88, 0xbf, + 0x90, 0xe6, 0x37, 0x53, 0x56, 0x94, 0x41, 0xc3, 0x7b, 0x60, 0x95, 0x5c, 0x7a, 0xc4, 0x88, 0x02, + 0xba, 0xc8, 0xd9, 0x5b, 0x82, 0xbd, 0x7a, 0x98, 0xb0, 0xa1, 0x14, 0x12, 0x1a, 0x00, 0x18, 0xae, + 0x63, 0x5a, 0xe3, 0x7d, 0x6e, 0x89, 0x4f, 0x44, 0xe3, 0xe5, 0xb2, 0xf8, 0x20, 0xe2, 0x4d, 0xaa, + 0x65, 0xdc, 0x44, 0x51, 0x42, 0x76, 0xd7, 0x06, 0x30, 0x3f, 0x4d, 0x70, 0x03, 0x54, 0x2e, 0xc8, + 0x60, 0xbc, 0xb7, 0xa1, 0xf0, 0x13, 0x7e, 0x06, 0x16, 0xfa, 0xd8, 0x0e, 0x88, 0x58, 0x4d, 0x1f, + 0xbc, 0x5c, 0x3f, 0x1e, 0x5b, 0x3d, 0x82, 0xc6, 0xc4, 0x9f, 0x5f, 0xb9, 0x27, 0xa9, 0xdf, 0x48, + 0xa0, 0xd6, 0x72, 0xcd, 0x36, 0x31, 0x02, 0xdf, 0x62, 0x83, 0x16, 0xcf, 0xa4, 0xb7, 0xb0, 0x2b, + 0xa0, 0xd4, 0xae, 0xf0, 0xf1, 0xf4, 0x6c, 0x4e, 0xf7, 0xae, 0x6c, 0x4f, 0x50, 0x9f, 0x49, 0x60, + 0x3b, 0x87, 0x7e, 0x0b, 0x35, 0xfb, 0xd7, 0xe9, 0x9a, 0xfd, 0xe1, 0xab, 0x0c, 0xa6, 0xa4, 0x62, + 0x7f, 0x53, 0x2b, 0x18, 0x0a, 0xaf, 0xd7, 0xe1, 0xf9, 0xd1, 0xb7, 0xfa, 0x96, 0x4d, 0xba, 0xc4, + 0xe4, 0x83, 0xa9, 0x26, 0xce, 0x8f, 0xb1, 0x05, 0x25, 0x50, 0x90, 0x82, 0x1d, 0x93, 0x9c, 0xe1, + 0xc0, 0x66, 0xfb, 0xa6, 0x79, 0x80, 0x3d, 0xdc, 0xb1, 0x6c, 0x8b, 0x59, 0xe2, 0xc0, 0xb3, 0xac, + 0x7f, 0x3a, 0x1a, 0x2a, 0x3b, 0xcd, 0x42, 0xc4, 0x8b, 0xa1, 0xf2, 0x6e, 0xfe, 0xbe, 0xa0, 0xc5, + 0x90, 0x01, 0x2a, 0x91, 0x86, 0x03, 0x20, 0xfb, 0xe4, 0x4f, 0x41, 0xb8, 0xf2, 0x9a, 0xbe, 0xeb, + 0xa5, 0xdc, 0x56, 0xb8, 0xdb, 0x5f, 0x8e, 0x86, 0x8a, 0x8c, 0x4a, 0x30, 0xb3, 0x1d, 0x97, 0xca, + 0xc3, 0x2f, 0xc1, 0x26, 0x16, 0x27, 0xfd, 0xa4, 0xd7, 0x79, 0xee, 0xf5, 0xde, 0x68, 0xa8, 0x6c, + 0xee, 0xe7, 0xcd, 0xb3, 0x1d, 0x16, 0x89, 0xc2, 0x06, 0x58, 0xea, 0xf3, 0x4b, 0x01, 0x95, 0x17, + 0xb8, 0xfe, 0xf6, 0x68, 0xa8, 0x2c, 0x8d, 0xef, 0x09, 0xa1, 0xe6, 0xe2, 0x51, 0x9b, 0x1f, 0x35, + 0x23, 0x14, 0xfc, 0x04, 0xac, 0x9c, 0xbb, 0x94, 0x3d, 0x22, 0xec, 0x2b, 0xd7, 0xbf, 0xe0, 0xd5, + 0xa7, 0xaa, 0x6f, 0x8a, 0x19, 0x5c, 0x79, 0x30, 0x31, 0xa1, 0x24, 0x0e, 0xfe, 0x16, 0x2c, 0x9f, + 0x8b, 0x83, 0x65, 0x54, 0x7a, 0x6e, 0x4e, 0x49, 0xb4, 0xd4, 0x21, 0x54, 0xaf, 0x09, 0xf9, 0xe5, + 0xa8, 0x99, 0xa2, 0x89, 0x1a, 0xfc, 0x09, 0x58, 0xe2, 0x3f, 0xc7, 0x4d, 0xb9, 0xca, 0x7b, 0x73, + 0x55, 0xc0, 0x97, 0x1e, 0x8c, 0x9b, 0x51, 0x64, 0x8f, 0xa0, 0xc7, 0xad, 0x03, 0x79, 0x39, 0x0f, + 0x3d, 0x6e, 0x1d, 0xa0, 0xc8, 0x0e, 0x9f, 0x82, 0x25, 0x4a, 0x1e, 0x5a, 0x4e, 0x70, 0x29, 0x03, + 0xbe, 0xe4, 0x6e, 0x4d, 0xe9, 0x6e, 0xfb, 0x90, 0x23, 0x33, 0x47, 0xfa, 0x89, 0xba, 0xb0, 0xa3, + 0x48, 0x12, 0x9a, 0x60, 0xd9, 0x0f, 0x9c, 0x7d, 0xfa, 0x84, 0x12, 0x5f, 0x5e, 0xc9, 0x9d, 0x27, + 0xb2, 0xfa, 0x28, 0xc2, 0x66, 0x3d, 0xc4, 0x91, 0x89, 0x11, 0x68, 0x22, 0x0c, 0x4d, 0x00, 0xf8, + 0x0f, 0xbf, 0x39, 0xc8, 0x3b, 0x33, 0x4f, 0x9a, 0x28, 0x06, 0x67, 0xfd, 0xac, 0x87, 0xcb, 0x73, + 0x62, 0x46, 0x09, 0x5d, 0xf8, 0x57, 0x09, 0x40, 0x1a, 0x78, 0x9e, 0x4d, 0x7a, 0xc4, 0x61, 0xd8, + 0xe6, 0xad, 0x54, 0x5e, 0xe5, 0xee, 0x7e, 0x31, 0x2d, 0x6a, 0x39, 0x52, 0xd6, 0x6d, 0xbc, 0x37, + 0xe7, 0xa1, 0xa8, 0xc0, 0x67, 0x38, 0x69, 0x67, 0x62, 0xb4, 0x6b, 0x33, 0x27, 0xad, 0xf8, 0x1e, + 0x36, 0x99, 0x34, 0x61, 0x47, 0x91, 0x24, 0xfc, 0x02, 0xec, 0x44, 0xb7, 0x54, 0xe4, 0xba, 0xec, + 0xc8, 0xb2, 0x09, 0x1d, 0x50, 0x46, 0x7a, 0xf2, 0x3a, 0x4f, 0xa6, 0xba, 0x60, 0xee, 0xa0, 0x42, + 0x14, 0x2a, 0x61, 0xc3, 0x1e, 0x50, 0xa2, 0x22, 0x14, 0xae, 0xd0, 0xb8, 0x0a, 0x1e, 0x52, 0x03, + 0xdb, 0xe3, 0xd3, 0xd7, 0x55, 0xee, 0xe0, 0xfd, 0xd1, 0x50, 0x51, 0x9a, 0xd3, 0xa1, 0x68, 0x96, + 0x16, 0xfc, 0x0d, 0x90, 0x71, 0x99, 0x9f, 0x0d, 0xee, 0xe7, 0x47, 0x61, 0x65, 0x2b, 0x75, 0x50, + 0xca, 0x86, 0x1e, 0xd8, 0xc0, 0xe9, 0xf7, 0x02, 0x2a, 0xd7, 0xf8, 0x5a, 0xff, 0x60, 0xca, 0x3c, + 0x64, 0x9e, 0x18, 0x74, 0x59, 0x84, 0x71, 0x23, 0x63, 0xa0, 0x28, 0xa7, 0x0e, 0x2f, 0x01, 0xc4, + 0xd9, 0xe7, 0x0d, 0x2a, 0xc3, 0x99, 0x1b, 0x59, 0xee, 0x4d, 0x64, 0x92, 0x6a, 0x39, 0x13, 0x45, + 0x05, 0x3e, 0x20, 0x03, 0x35, 0x9c, 0x79, 0x8e, 0xa1, 0xf2, 0x35, 0xee, 0xf8, 0xa7, 0xb3, 0x1d, + 0xc7, 0x1c, 0xfd, 0xba, 0xf0, 0x5b, 0xcb, 0x5a, 0x28, 0xca, 0x3b, 0x80, 0x0f, 0xc1, 0x96, 0x68, + 0x7c, 0xe2, 0x50, 0x7c, 0x46, 0xda, 0x03, 0x6a, 0x30, 0x9b, 0xca, 0x9b, 0xbc, 0x76, 0xcb, 0xa3, + 0xa1, 0xb2, 0xb5, 0x5f, 0x60, 0x47, 0x85, 0x2c, 0xf8, 0x19, 0xd8, 0x38, 0x73, 0xfd, 0x8e, 0x65, + 0x9a, 0xc4, 0x89, 0x94, 0xb6, 0xb8, 0xd2, 0x56, 0x18, 0xff, 0xa3, 0x8c, 0x0d, 0xe5, 0xd0, 0x90, + 0x82, 0x6d, 0xa1, 0xdc, 0xf2, 0x5d, 0xe3, 0xc4, 0x0d, 0x1c, 0x16, 0x6e, 0x17, 0x54, 0xde, 0x8e, + 0xb7, 0xc8, 0xed, 0xfd, 0x22, 0xc0, 0x8b, 0xa1, 0x72, 0xa3, 0x60, 0xbb, 0x4a, 0x81, 0x50, 0xb1, + 0x36, 0xb4, 0xc1, 0xaa, 0x78, 0x60, 0x3b, 0xb0, 0x31, 0xa5, 0xb2, 0xcc, 0x97, 0xfa, 0xdd, 0xe9, + 0x85, 0x2d, 0x86, 0x67, 0xd7, 0x3b, 0xbf, 0xf9, 0x25, 0x01, 0x28, 0xa5, 0xae, 0xfe, 0x5d, 0x02, + 0xd7, 0x4b, 0x0b, 0x23, 0xbc, 0x9b, 0x7a, 0xb5, 0x51, 0x33, 0xaf, 0x36, 0x30, 0x4f, 0x7c, 0x03, + 0x8f, 0x36, 0x5f, 0x4b, 0x40, 0x2e, 0xdb, 0x21, 0xe0, 0x27, 0xa9, 0x0e, 0xbe, 0x97, 0xe9, 0x60, + 0x2d, 0xc7, 0x7b, 0x03, 0xfd, 0xfb, 0x56, 0x02, 0xef, 0x4c, 0x99, 0x81, 0xb8, 0x20, 0x11, 0x33, + 0x89, 0x7a, 0x84, 0xc3, 0xa5, 0x2c, 0xf1, 0x3c, 0x9a, 0x14, 0xa4, 0x02, 0x0c, 0x2a, 0x65, 0xc3, + 0x27, 0xe0, 0x9a, 0xa8, 0x86, 0x59, 0x1b, 0x3f, 0xb9, 0x2f, 0xeb, 0xef, 0x8c, 0x86, 0xca, 0xb5, + 0x66, 0x31, 0x04, 0x95, 0x71, 0xd5, 0x7f, 0x4a, 0x60, 0xa7, 0x78, 0xcb, 0x87, 0xb7, 0x53, 0xe1, + 0x56, 0x32, 0xe1, 0xbe, 0x9a, 0x61, 0x89, 0x60, 0xff, 0x01, 0xac, 0x8b, 0x83, 0x41, 0xfa, 0x11, + 0x32, 0x15, 0xf4, 0x70, 0x89, 0x84, 0x67, 0x7a, 0x21, 0x11, 0xa5, 0x2f, 0xbf, 0xef, 0xa7, 0xdb, + 0x50, 0x46, 0x4d, 0xfd, 0x97, 0x04, 0xde, 0x9b, 0xb9, 0xd9, 0x42, 0x3d, 0xd5, 0x75, 0x2d, 0xd3, + 0xf5, 0x7a, 0xb9, 0xc0, 0x9b, 0x79, 0x8b, 0xd4, 0x3f, 0x7a, 0xf6, 0xbc, 0x3e, 0xf7, 0xdd, 0xf3, + 0xfa, 0xdc, 0xf7, 0xcf, 0xeb, 0x73, 0x7f, 0x1e, 0xd5, 0xa5, 0x67, 0xa3, 0xba, 0xf4, 0xdd, 0xa8, + 0x2e, 0x7d, 0x3f, 0xaa, 0x4b, 0xff, 0x1b, 0xd5, 0xa5, 0xbf, 0xfd, 0xbf, 0x3e, 0xf7, 0xbb, 0x25, + 0x21, 0xf7, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x4e, 0x7c, 0x8c, 0xa6, 0x18, 0x00, 0x00, } func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { @@ -1146,6 +1147,20 @@ func (m *PodDisruptionBudgetStatus) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } i = encodeVarintGenerated(dAtA, i, uint64(m.ExpectedPods)) i-- dAtA[i] = 0x30 @@ -1944,6 +1959,12 @@ func (m *PodDisruptionBudgetStatus) Size() (n int) { n += 1 + sovGenerated(uint64(m.CurrentHealthy)) n += 1 + sovGenerated(uint64(m.DesiredHealthy)) n += 1 + sovGenerated(uint64(m.ExpectedPods)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -2294,6 +2315,11 @@ func (this *PodDisruptionBudgetStatus) String() string { if this == nil { return "nil" } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" keysForDisruptedPods := make([]string, 0, len(this.DisruptedPods)) for k := range this.DisruptedPods { keysForDisruptedPods = append(keysForDisruptedPods, k) @@ -2311,6 +2337,7 @@ func (this *PodDisruptionBudgetStatus) String() string { `CurrentHealthy:` + fmt.Sprintf("%v", this.CurrentHealthy) + `,`, `DesiredHealthy:` + fmt.Sprintf("%v", this.DesiredHealthy) + `,`, `ExpectedPods:` + fmt.Sprintf("%v", this.ExpectedPods) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2540,10 +2567,7 @@ func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2625,10 +2649,7 @@ func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2730,10 +2751,7 @@ func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2852,10 +2870,7 @@ func (m *Eviction) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2971,10 +2986,7 @@ func (m *FSGroupStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3062,10 +3074,7 @@ func (m *HostPortRange) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3153,10 +3162,7 @@ func (m *IDRange) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3305,10 +3311,7 @@ func (m *PodDisruptionBudget) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3425,10 +3428,7 @@ func (m *PodDisruptionBudgetList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3586,10 +3586,7 @@ func (m *PodDisruptionBudgetSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3770,7 +3767,7 @@ func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -3857,16 +3854,47 @@ func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { break } } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3982,10 +4010,7 @@ func (m *PodSecurityPolicy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4102,10 +4127,7 @@ func (m *PodSecurityPolicyList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4861,10 +4883,7 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4980,10 +4999,7 @@ func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5099,10 +5115,7 @@ func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5217,10 +5230,7 @@ func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5338,10 +5348,7 @@ func (m *SELinuxStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5457,10 +5464,7 @@ func (m *SupplementalGroupsStrategyOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/policy/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/policy/v1beta1/generated.proto index 18a1c6578..a47212142 100644 --- a/constraint/vendor/k8s.io/api/policy/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/policy/v1beta1/generated.proto @@ -136,6 +136,10 @@ message PodDisruptionBudgetSpec { // Label query over pods whose evictions are managed by the disruption // budget. + // A null selector selects no pods. + // An empty selector ({}) also selects no pods, which differs from standard behavior of selecting all pods. + // In policy/v1, an empty selector will select all pods in the namespace. + // +patchStrategy=replace // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; @@ -180,10 +184,31 @@ message PodDisruptionBudgetStatus { // total number of pods counted by this disruption budget optional int32 expectedPods = 6; + + // Conditions contain conditions for PDB. The disruption controller sets the + // DisruptionAllowed condition. The following are known values for the reason field + // (additional reasons could be added in the future): + // - SyncFailed: The controller encountered an error and wasn't able to compute + // the number of allowed disruptions. Therefore no disruptions are + // allowed and the status of the condition will be False. + // - InsufficientPods: The number of pods are either at or below the number + // required by the PodDisruptionBudget. No disruptions are + // allowed and the status of the condition will be False. + // - SufficientPods: There are more pods than required by the PodDisruptionBudget. + // The condition will be True, and the number of allowed + // disruptions are provided by the disruptionsAllowed property. + // + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 7; } // PodSecurityPolicy governs the ability to make requests that affect the Security Context // that will be applied to a pod and container. +// Deprecated in 1.21. message PodSecurityPolicy { // Standard object's metadata. // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata diff --git a/constraint/vendor/k8s.io/api/policy/v1beta1/types.go b/constraint/vendor/k8s.io/api/policy/v1beta1/types.go index 711afc80c..281104451 100644 --- a/constraint/vendor/k8s.io/api/policy/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/policy/v1beta1/types.go @@ -33,8 +33,12 @@ type PodDisruptionBudgetSpec struct { // Label query over pods whose evictions are managed by the disruption // budget. + // A null selector selects no pods. + // An empty selector ({}) also selects no pods, which differs from standard behavior of selecting all pods. + // In policy/v1, an empty selector will select all pods in the namespace. + // +patchStrategy=replace // +optional - Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` + Selector *metav1.LabelSelector `json:"selector,omitempty" patchStrategy:"replace" protobuf:"bytes,2,opt,name=selector"` // An eviction is allowed if at most "maxUnavailable" pods selected by // "selector" are unavailable after the eviction, i.e. even in absence of @@ -77,12 +81,50 @@ type PodDisruptionBudgetStatus struct { // total number of pods counted by this disruption budget ExpectedPods int32 `json:"expectedPods" protobuf:"varint,6,opt,name=expectedPods"` + + // Conditions contain conditions for PDB. The disruption controller sets the + // DisruptionAllowed condition. The following are known values for the reason field + // (additional reasons could be added in the future): + // - SyncFailed: The controller encountered an error and wasn't able to compute + // the number of allowed disruptions. Therefore no disruptions are + // allowed and the status of the condition will be False. + // - InsufficientPods: The number of pods are either at or below the number + // required by the PodDisruptionBudget. No disruptions are + // allowed and the status of the condition will be False. + // - SufficientPods: There are more pods than required by the PodDisruptionBudget. + // The condition will be True, and the number of allowed + // disruptions are provided by the disruptionsAllowed property. + // + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,7,rep,name=conditions"` } +const ( + // DisruptionAllowedCondition is a condition set by the disruption controller + // that signal whether any of the pods covered by the PDB can be disrupted. + DisruptionAllowedCondition = "DisruptionAllowed" + + // SyncFailedReason is set on the DisruptionAllowed condition if reconcile + // of the PDB failed and therefore disruption of pods are not allowed. + SyncFailedReason = "SyncFailed" + // SufficientPodsReason is set on the DisruptionAllowed condition if there are + // more pods covered by the PDB than required and at least one can be disrupted. + SufficientPodsReason = "SufficientPods" + // InsufficientPodsReason is set on the DisruptionAllowed condition if the number + // of pods are equal to or fewer than required by the PDB. + InsufficientPodsReason = "InsufficientPods" +) + // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.5 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 +// +k8s:prerelease-lifecycle-gen:replacement=policy,v1,PodDisruptionBudget // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods type PodDisruptionBudget struct { @@ -100,7 +142,9 @@ type PodDisruptionBudget struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.5 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 +// +k8s:prerelease-lifecycle-gen:replacement=policy,v1,PodDisruptionBudgetList // PodDisruptionBudgetList is a collection of PodDisruptionBudgets. type PodDisruptionBudgetList struct { @@ -135,10 +179,12 @@ type Eviction struct { // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.10 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 // PodSecurityPolicy governs the ability to make requests that affect the Security Context // that will be applied to a pod and container. +// Deprecated in 1.21. type PodSecurityPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. @@ -485,7 +531,8 @@ const AllowAllRuntimeClassNames = "*" // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.10 -// +k8s:prerelease-lifecycle-gen:deprecated=1.22 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:removed=1.25 // PodSecurityPolicyList is a list of PodSecurityPolicy objects. type PodSecurityPolicyList struct { diff --git a/constraint/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go index 05a503667..0853a5e99 100644 --- a/constraint/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go @@ -116,7 +116,7 @@ func (PodDisruptionBudgetList) SwaggerDoc() map[string]string { var map_PodDisruptionBudgetSpec = map[string]string{ "": "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.", "minAvailable": "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".", - "selector": "Label query over pods whose evictions are managed by the disruption budget.", + "selector": "Label query over pods whose evictions are managed by the disruption budget. A null selector selects no pods. An empty selector ({}) also selects no pods, which differs from standard behavior of selecting all pods. In policy/v1, an empty selector will select all pods in the namespace.", "maxUnavailable": "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".", } @@ -132,6 +132,7 @@ var map_PodDisruptionBudgetStatus = map[string]string{ "currentHealthy": "current number of healthy pods", "desiredHealthy": "minimum desired number of healthy pods", "expectedPods": "total number of pods counted by this disruption budget", + "conditions": "Conditions contain conditions for PDB. The disruption controller sets the DisruptionAllowed condition. The following are known values for the reason field (additional reasons could be added in the future): - SyncFailed: The controller encountered an error and wasn't able to compute\n the number of allowed disruptions. Therefore no disruptions are\n allowed and the status of the condition will be False.\n- InsufficientPods: The number of pods are either at or below the number\n required by the PodDisruptionBudget. No disruptions are\n allowed and the status of the condition will be False.\n- SufficientPods: There are more pods than required by the PodDisruptionBudget.\n The condition will be True, and the number of allowed\n disruptions are provided by the disruptionsAllowed property.", } func (PodDisruptionBudgetStatus) SwaggerDoc() map[string]string { @@ -139,7 +140,7 @@ func (PodDisruptionBudgetStatus) SwaggerDoc() map[string]string { } var map_PodSecurityPolicy = map[string]string{ - "": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", + "": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated in 1.21.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "spec defines the policy enforced.", } diff --git a/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go index 75851e124..02d8a85cf 100644 --- a/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go @@ -261,6 +261,13 @@ func (in *PodDisruptionBudgetStatus) DeepCopyInto(out *PodDisruptionBudgetStatus (*out)[key] = *val.DeepCopy() } } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go b/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go index fca0a2a2f..8bda4b00f 100644 --- a/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go +++ b/constraint/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go @@ -20,6 +20,10 @@ limitations under the License. package v1beta1 +import ( + schema "k8s.io/apimachinery/pkg/runtime/schema" +) + // APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. func (in *Eviction) APILifecycleIntroduced() (major, minor int) { @@ -47,7 +51,13 @@ func (in *PodDisruptionBudget) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *PodDisruptionBudget) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *PodDisruptionBudget) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "policy", Version: "v1", Kind: "PodDisruptionBudget"} } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. @@ -65,7 +75,13 @@ func (in *PodDisruptionBudgetList) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *PodDisruptionBudgetList) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *PodDisruptionBudgetList) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "policy", Version: "v1", Kind: "PodDisruptionBudgetList"} } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. @@ -83,7 +99,7 @@ func (in *PodSecurityPolicy) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *PodSecurityPolicy) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. @@ -101,7 +117,7 @@ func (in *PodSecurityPolicyList) APILifecycleIntroduced() (major, minor int) { // APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. func (in *PodSecurityPolicyList) APILifecycleDeprecated() (major, minor int) { - return 1, 22 + return 1, 21 } // APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. diff --git a/constraint/vendor/k8s.io/api/rbac/v1/generated.pb.go b/constraint/vendor/k8s.io/api/rbac/v1/generated.pb.go index ba6872d62..678c00512 100644 --- a/constraint/vendor/k8s.io/api/rbac/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/rbac/v1/generated.pb.go @@ -1557,10 +1557,7 @@ func (m *AggregationRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1713,10 +1710,7 @@ func (m *ClusterRole) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1866,10 +1860,7 @@ func (m *ClusterRoleBinding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1986,10 +1977,7 @@ func (m *ClusterRoleBindingList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2106,10 +2094,7 @@ func (m *ClusterRoleList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2319,10 +2304,7 @@ func (m *PolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2439,10 +2421,7 @@ func (m *Role) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2592,10 +2571,7 @@ func (m *RoleBinding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2712,10 +2688,7 @@ func (m *RoleBindingList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2832,10 +2805,7 @@ func (m *RoleList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2981,10 +2951,7 @@ func (m *RoleRef) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3162,10 +3129,7 @@ func (m *Subject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go index 3b12526da..94c1bef8b 100644 --- a/constraint/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go @@ -1558,10 +1558,7 @@ func (m *AggregationRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1714,10 +1711,7 @@ func (m *ClusterRole) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1867,10 +1861,7 @@ func (m *ClusterRoleBinding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1987,10 +1978,7 @@ func (m *ClusterRoleBindingList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2107,10 +2095,7 @@ func (m *ClusterRoleList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2320,10 +2305,7 @@ func (m *PolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2440,10 +2422,7 @@ func (m *Role) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2593,10 +2572,7 @@ func (m *RoleBinding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2713,10 +2689,7 @@ func (m *RoleBindingList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2833,10 +2806,7 @@ func (m *RoleList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2982,10 +2952,7 @@ func (m *RoleRef) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3163,10 +3130,7 @@ func (m *Subject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go index 53d36320e..ad5d7cb05 100644 --- a/constraint/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go @@ -1557,10 +1557,7 @@ func (m *AggregationRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1713,10 +1710,7 @@ func (m *ClusterRole) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1866,10 +1860,7 @@ func (m *ClusterRoleBinding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1986,10 +1977,7 @@ func (m *ClusterRoleBindingList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2106,10 +2094,7 @@ func (m *ClusterRoleList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2319,10 +2304,7 @@ func (m *PolicyRule) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2439,10 +2421,7 @@ func (m *Role) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2592,10 +2571,7 @@ func (m *RoleBinding) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2712,10 +2688,7 @@ func (m *RoleBindingList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2832,10 +2805,7 @@ func (m *RoleList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2981,10 +2951,7 @@ func (m *RoleRef) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3162,10 +3129,7 @@ func (m *Subject) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/scheduling/v1/generated.pb.go b/constraint/vendor/k8s.io/api/scheduling/v1/generated.pb.go index efc3102ef..c5ef2f50e 100644 --- a/constraint/vendor/k8s.io/api/scheduling/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/scheduling/v1/generated.pb.go @@ -511,10 +511,7 @@ func (m *PriorityClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -631,10 +628,7 @@ func (m *PriorityClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go index 8a62104db..16f3c7cb4 100644 --- a/constraint/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go @@ -511,10 +511,7 @@ func (m *PriorityClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -631,10 +628,7 @@ func (m *PriorityClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go index b89af56b3..64b1c1505 100644 --- a/constraint/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go @@ -511,10 +511,7 @@ func (m *PriorityClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -631,10 +628,7 @@ func (m *PriorityClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/storage/v1/generated.pb.go b/constraint/vendor/k8s.io/api/storage/v1/generated.pb.go index f6b97e013..34a3c34dc 100644 --- a/constraint/vendor/k8s.io/api/storage/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/storage/v1/generated.pb.go @@ -2237,10 +2237,7 @@ func (m *CSIDriver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2357,10 +2354,7 @@ func (m *CSIDriverList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2593,10 +2587,7 @@ func (m *CSIDriverSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2712,10 +2703,7 @@ func (m *CSINode) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2897,10 +2885,7 @@ func (m *CSINodeDriver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3017,10 +3002,7 @@ func (m *CSINodeList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3104,10 +3086,7 @@ func (m *CSINodeSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3332,7 +3311,7 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -3502,10 +3481,7 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3622,10 +3598,7 @@ func (m *StorageClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3727,10 +3700,7 @@ func (m *TokenRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3879,10 +3849,7 @@ func (m *VolumeAttachment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3999,10 +3966,7 @@ func (m *VolumeAttachmentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4121,10 +4085,7 @@ func (m *VolumeAttachmentSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4271,10 +4232,7 @@ func (m *VolumeAttachmentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4454,7 +4412,7 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -4543,10 +4501,7 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4661,10 +4616,7 @@ func (m *VolumeError) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4734,10 +4686,7 @@ func (m *VolumeNodeResources) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/storage/v1/generated.proto b/constraint/vendor/k8s.io/api/storage/v1/generated.proto index d6b4d9cbd..0e9a2e1da 100644 --- a/constraint/vendor/k8s.io/api/storage/v1/generated.proto +++ b/constraint/vendor/k8s.io/api/storage/v1/generated.proto @@ -72,6 +72,9 @@ message CSIDriverSpec { // If the CSIDriverRegistry feature gate is enabled and the value is // specified to false, the attach operation will be skipped. // Otherwise the attach operation will be called. + // + // This field is immutable. + // // +optional optional bool attachRequired = 1; @@ -90,7 +93,7 @@ message CSIDriverSpec { // "csi.storage.k8s.io/pod.name": pod.Name // "csi.storage.k8s.io/pod.namespace": pod.Namespace // "csi.storage.k8s.io/pod.uid": string(pod.UID) - // "csi.storage.k8s.io/ephemeral": "true" iff the volume is an ephemeral inline volume + // "csi.storage.k8s.io/ephemeral": "true" if the volume is an ephemeral inline volume // defined by a CSIVolumeSource, otherwise "false" // // "csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is only @@ -99,6 +102,9 @@ message CSIDriverSpec { // As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when // deployed on such a cluster and the deployment determines which mode that is, for example // via a command line parameter of the driver. + // + // This field is immutable. + // // +optional optional bool podInfoOnMount = 2; @@ -115,6 +121,9 @@ message CSIDriverSpec { // A driver can support one or more of these modes and // more modes may be added in the future. // This field is beta. + // + // This field is immutable. + // // +optional // +listType=set repeated string volumeLifecycleModes = 3; @@ -133,10 +142,13 @@ message CSIDriverSpec { // unset or false and it can be flipped later when storage // capacity information has been published. // - // This is an alpha field and only available when the CSIStorageCapacity + // This field is immutable. + // + // This is a beta field and only available when the CSIStorageCapacity // feature is enabled. The default is false. // // +optional + // +featureGate=CSIStorageCapacity optional bool storageCapacity = 4; // Defines if the underlying volume supports changing ownership and @@ -144,6 +156,9 @@ message CSIDriverSpec { // Refer to the specific FSGroupPolicy values for additional details. // This field is alpha-level, and is only honored by servers // that enable the CSIVolumeFSGroupPolicy feature gate. + // + // This field is immutable. + // // +optional optional string fsGroupPolicy = 5; @@ -163,7 +178,7 @@ message CSIDriverSpec { // most one token is empty string. To receive a new token after expiry, // RequiresRepublish can be used to trigger NodePublishVolume periodically. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -178,7 +193,7 @@ message CSIDriverSpec { // to NodePublishVolume should only update the contents of the volume. New // mount points will not be seen by a running container. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -376,7 +391,7 @@ message VolumeAttachmentSource { // a persistent volume defined by a pod's inline VolumeSource. This field // is populated only for the CSIMigration feature. It contains // translated fields from a pod's inline VolumeSource to a - // PersistentVolumeSpec. This field is alpha-level and is only + // PersistentVolumeSpec. This field is beta-level and is only // honored by servers that enabled the CSIMigration feature. // +optional optional k8s.io.api.core.v1.PersistentVolumeSpec inlineVolumeSpec = 2; diff --git a/constraint/vendor/k8s.io/api/storage/v1/types.go b/constraint/vendor/k8s.io/api/storage/v1/types.go index 18d0fb877..6a7bf4929 100644 --- a/constraint/vendor/k8s.io/api/storage/v1/types.go +++ b/constraint/vendor/k8s.io/api/storage/v1/types.go @@ -170,7 +170,7 @@ type VolumeAttachmentSource struct { // a persistent volume defined by a pod's inline VolumeSource. This field // is populated only for the CSIMigration feature. It contains // translated fields from a pod's inline VolumeSource to a - // PersistentVolumeSpec. This field is alpha-level and is only + // PersistentVolumeSpec. This field is beta-level and is only // honored by servers that enabled the CSIMigration feature. // +optional InlineVolumeSpec *v1.PersistentVolumeSpec `json:"inlineVolumeSpec,omitempty" protobuf:"bytes,2,opt,name=inlineVolumeSpec"` @@ -270,6 +270,9 @@ type CSIDriverSpec struct { // If the CSIDriverRegistry feature gate is enabled and the value is // specified to false, the attach operation will be skipped. // Otherwise the attach operation will be called. + // + // This field is immutable. + // // +optional AttachRequired *bool `json:"attachRequired,omitempty" protobuf:"varint,1,opt,name=attachRequired"` @@ -288,7 +291,7 @@ type CSIDriverSpec struct { // "csi.storage.k8s.io/pod.name": pod.Name // "csi.storage.k8s.io/pod.namespace": pod.Namespace // "csi.storage.k8s.io/pod.uid": string(pod.UID) - // "csi.storage.k8s.io/ephemeral": "true" iff the volume is an ephemeral inline volume + // "csi.storage.k8s.io/ephemeral": "true" if the volume is an ephemeral inline volume // defined by a CSIVolumeSource, otherwise "false" // // "csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is only @@ -297,6 +300,9 @@ type CSIDriverSpec struct { // As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when // deployed on such a cluster and the deployment determines which mode that is, for example // via a command line parameter of the driver. + // + // This field is immutable. + // // +optional PodInfoOnMount *bool `json:"podInfoOnMount,omitempty" protobuf:"bytes,2,opt,name=podInfoOnMount"` @@ -313,6 +319,9 @@ type CSIDriverSpec struct { // A driver can support one or more of these modes and // more modes may be added in the future. // This field is beta. + // + // This field is immutable. + // // +optional // +listType=set VolumeLifecycleModes []VolumeLifecycleMode `json:"volumeLifecycleModes,omitempty" protobuf:"bytes,3,opt,name=volumeLifecycleModes"` @@ -331,10 +340,13 @@ type CSIDriverSpec struct { // unset or false and it can be flipped later when storage // capacity information has been published. // - // This is an alpha field and only available when the CSIStorageCapacity + // This field is immutable. + // + // This is a beta field and only available when the CSIStorageCapacity // feature is enabled. The default is false. // // +optional + // +featureGate=CSIStorageCapacity StorageCapacity *bool `json:"storageCapacity,omitempty" protobuf:"bytes,4,opt,name=storageCapacity"` // Defines if the underlying volume supports changing ownership and @@ -342,6 +354,9 @@ type CSIDriverSpec struct { // Refer to the specific FSGroupPolicy values for additional details. // This field is alpha-level, and is only honored by servers // that enable the CSIVolumeFSGroupPolicy feature gate. + // + // This field is immutable. + // // +optional FSGroupPolicy *FSGroupPolicy `json:"fsGroupPolicy,omitempty" protobuf:"bytes,5,opt,name=fsGroupPolicy"` @@ -361,7 +376,7 @@ type CSIDriverSpec struct { // most one token is empty string. To receive a new token after expiry, // RequiresRepublish can be used to trigger NodePublishVolume periodically. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -376,7 +391,7 @@ type CSIDriverSpec struct { // to NodePublishVolume should only update the contents of the volume. New // mount points will not be seen by a running container. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional diff --git a/constraint/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go index 0e28b1d2f..a9c7cc9af 100644 --- a/constraint/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go @@ -49,13 +49,13 @@ func (CSIDriverList) SwaggerDoc() map[string]string { var map_CSIDriverSpec = map[string]string{ "": "CSIDriverSpec is the specification of a CSIDriver.", - "attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.", - "podInfoOnMount": "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" iff the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.", - "volumeLifecycleModes": "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future. This field is beta.", - "storageCapacity": "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis is an alpha field and only available when the CSIStorageCapacity feature is enabled. The default is false.", - "fsGroupPolicy": "Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.", - "tokenRequests": "TokenRequests indicates the CSI driver needs pods' service account tokens it is mounting volume for to do necessary authentication. Kubelet will pass the tokens in VolumeContext in the CSI NodePublishVolume calls. The CSI driver should parse and validate the following VolumeContext: \"csi.storage.k8s.io/serviceAccount.tokens\": {\n \"\": {\n \"token\": ,\n \"expirationTimestamp\": ,\n },\n ...\n}\n\nNote: Audience in each TokenRequest should be different and at most one token is empty string. To receive a new token after expiry, RequiresRepublish can be used to trigger NodePublishVolume periodically.\n\nThis is an alpha feature and only available when the CSIServiceAccountToken feature is enabled.", - "requiresRepublish": "RequiresRepublish indicates the CSI driver wants `NodePublishVolume` being periodically called to reflect any possible change in the mounted volume. This field defaults to false.\n\nNote: After a successful initial NodePublishVolume call, subsequent calls to NodePublishVolume should only update the contents of the volume. New mount points will not be seen by a running container.\n\nThis is an alpha feature and only available when the CSIServiceAccountToken feature is enabled.", + "attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.\n\nThis field is immutable.", + "podInfoOnMount": "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" if the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.\n\nThis field is immutable.", + "volumeLifecycleModes": "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future. This field is beta.\n\nThis field is immutable.", + "storageCapacity": "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field is immutable.\n\nThis is a beta field and only available when the CSIStorageCapacity feature is enabled. The default is false.", + "fsGroupPolicy": "Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.\n\nThis field is immutable.", + "tokenRequests": "TokenRequests indicates the CSI driver needs pods' service account tokens it is mounting volume for to do necessary authentication. Kubelet will pass the tokens in VolumeContext in the CSI NodePublishVolume calls. The CSI driver should parse and validate the following VolumeContext: \"csi.storage.k8s.io/serviceAccount.tokens\": {\n \"\": {\n \"token\": ,\n \"expirationTimestamp\": ,\n },\n ...\n}\n\nNote: Audience in each TokenRequest should be different and at most one token is empty string. To receive a new token after expiry, RequiresRepublish can be used to trigger NodePublishVolume periodically.\n\nThis is a beta feature and only available when the CSIServiceAccountToken feature is enabled.", + "requiresRepublish": "RequiresRepublish indicates the CSI driver wants `NodePublishVolume` being periodically called to reflect any possible change in the mounted volume. This field defaults to false.\n\nNote: After a successful initial NodePublishVolume call, subsequent calls to NodePublishVolume should only update the contents of the volume. New mount points will not be seen by a running container.\n\nThis is a beta feature and only available when the CSIServiceAccountToken feature is enabled.", } func (CSIDriverSpec) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/doc.go b/constraint/vendor/k8s.io/api/storage/v1alpha1/doc.go index 6f7ad7e73..87440b47a 100644 --- a/constraint/vendor/k8s.io/api/storage/v1alpha1/doc.go +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/doc.go @@ -18,5 +18,6 @@ limitations under the License. // +k8s:protobuf-gen=package // +groupName=storage.k8s.io // +k8s:openapi-gen=true +// +k8s:prerelease-lifecycle-gen=true package v1alpha1 // import "k8s.io/api/storage/v1alpha1" diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go b/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go index 1b7767fdc..0c82ddad3 100644 --- a/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go @@ -288,63 +288,65 @@ func init() { } var fileDescriptor_10f856db1e670dc4 = []byte{ - // 895 bytes of a gzipped FileDescriptorProto + // 923 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0x8f, 0x9b, 0x74, 0x37, 0x3b, 0x29, 0x10, 0x8d, 0xa2, 0x25, 0x0a, 0x92, 0x53, 0xe5, 0x14, - 0x10, 0x3b, 0xa6, 0x0b, 0x42, 0x2b, 0x6e, 0x75, 0xdb, 0x43, 0x45, 0x5b, 0x60, 0x52, 0x21, 0x04, - 0x1c, 0x98, 0x38, 0x0f, 0xc7, 0x4d, 0xfc, 0x47, 0x33, 0xe3, 0x4a, 0xb9, 0xc1, 0x85, 0x33, 0x37, - 0xbe, 0x01, 0x9f, 0xa5, 0x07, 0x24, 0x56, 0x9c, 0xf6, 0x14, 0x51, 0xf3, 0x2d, 0xb8, 0x80, 0x3c, - 0x9e, 0x38, 0x6e, 0x9c, 0x74, 0xb3, 0x7b, 0xd8, 0x9b, 0xe7, 0xcd, 0x7b, 0xbf, 0xdf, 0xfb, 0xf3, - 0x9b, 0x27, 0xa3, 0xe3, 0xc9, 0x33, 0x41, 0xbc, 0xd0, 0x9a, 0xc4, 0x43, 0xe0, 0x01, 0x48, 0x10, - 0xd6, 0x35, 0x04, 0xa3, 0x90, 0x5b, 0xfa, 0x82, 0x45, 0x9e, 0x25, 0x64, 0xc8, 0x99, 0x0b, 0xd6, - 0xf5, 0x01, 0x9b, 0x46, 0x63, 0x76, 0x60, 0xb9, 0x10, 0x00, 0x67, 0x12, 0x46, 0x24, 0xe2, 0xa1, - 0x0c, 0xf1, 0x7b, 0x99, 0x33, 0x61, 0x91, 0x47, 0xb4, 0x33, 0x59, 0x38, 0x77, 0x9e, 0xb8, 0x9e, - 0x1c, 0xc7, 0x43, 0xe2, 0x84, 0xbe, 0xe5, 0x86, 0x6e, 0x68, 0xa9, 0x98, 0x61, 0xfc, 0xa3, 0x3a, - 0xa9, 0x83, 0xfa, 0xca, 0xb0, 0x3a, 0xbd, 0x02, 0xb1, 0x13, 0xf2, 0x94, 0x75, 0x95, 0xaf, 0xf3, - 0xc9, 0xd2, 0xc7, 0x67, 0xce, 0xd8, 0x0b, 0x80, 0xcf, 0xac, 0x68, 0xe2, 0xaa, 0x20, 0x0e, 0x22, - 0x8c, 0xb9, 0x03, 0xaf, 0x14, 0x25, 0x2c, 0x1f, 0x24, 0x5b, 0xc7, 0x65, 0x6d, 0x8a, 0xe2, 0x71, - 0x20, 0x3d, 0xbf, 0x4c, 0xf3, 0xe9, 0xcb, 0x02, 0x84, 0x33, 0x06, 0x9f, 0xad, 0xc6, 0xf5, 0x7e, - 0xae, 0x22, 0x7c, 0x34, 0x38, 0x1d, 0x64, 0xfd, 0x3b, 0x62, 0x11, 0x73, 0x3c, 0x39, 0xc3, 0x3f, - 0xa0, 0x7a, 0x9a, 0xda, 0x88, 0x49, 0xd6, 0x36, 0xf6, 0x8d, 0x7e, 0xe3, 0xe9, 0x47, 0x64, 0xd9, - 0xee, 0x9c, 0x81, 0x44, 0x13, 0x37, 0x35, 0x08, 0x92, 0x7a, 0x93, 0xeb, 0x03, 0xf2, 0xc5, 0xf0, - 0x0a, 0x1c, 0x79, 0x0e, 0x92, 0xd9, 0xf8, 0x66, 0xde, 0xad, 0x24, 0xf3, 0x2e, 0x5a, 0xda, 0x68, - 0x8e, 0x8a, 0x3d, 0xb4, 0x17, 0x84, 0x23, 0xb8, 0x0c, 0xa3, 0x70, 0x1a, 0xba, 0xb3, 0xf6, 0x8e, - 0x62, 0xf9, 0x78, 0x3b, 0x96, 0x33, 0x36, 0x84, 0xe9, 0x00, 0xa6, 0xe0, 0xc8, 0x90, 0xdb, 0xcd, - 0x64, 0xde, 0xdd, 0xbb, 0x28, 0x80, 0xd1, 0x3b, 0xd0, 0xf8, 0x18, 0x35, 0xb5, 0x3e, 0x8e, 0xa6, - 0x4c, 0x88, 0x0b, 0xe6, 0x43, 0xbb, 0xba, 0x6f, 0xf4, 0x1f, 0xd9, 0x6d, 0x9d, 0x62, 0x73, 0xb0, - 0x72, 0x4f, 0x4b, 0x11, 0xf8, 0x1b, 0x54, 0x77, 0x74, 0x7b, 0xda, 0x35, 0x95, 0x2c, 0xb9, 0x2f, - 0x59, 0xb2, 0x50, 0x04, 0xf9, 0x2a, 0x66, 0x81, 0xf4, 0xe4, 0xcc, 0xde, 0x4b, 0xe6, 0xdd, 0xfa, - 0xa2, 0xc5, 0x34, 0x47, 0xeb, 0xfd, 0x61, 0xa0, 0xc7, 0xe5, 0x19, 0x9c, 0x79, 0x42, 0xe2, 0xef, - 0x4b, 0x73, 0x20, 0x5b, 0x76, 0xc8, 0x13, 0xd9, 0x14, 0x9a, 0xba, 0xc4, 0xfa, 0xc2, 0x52, 0x98, - 0xc1, 0x25, 0xda, 0xf5, 0x24, 0xf8, 0xa2, 0xbd, 0xb3, 0x5f, 0xed, 0x37, 0x9e, 0x5a, 0xe4, 0x9e, - 0x17, 0x45, 0xca, 0x19, 0xda, 0x6f, 0x69, 0xec, 0xdd, 0xd3, 0x14, 0x85, 0x66, 0x60, 0xbd, 0xdf, - 0x77, 0x50, 0xf3, 0xeb, 0x70, 0x1a, 0xfb, 0x70, 0x28, 0x25, 0x73, 0xc6, 0x3e, 0x04, 0xf2, 0x0d, - 0x08, 0x6a, 0x80, 0x6a, 0x22, 0x02, 0x47, 0x0b, 0xe9, 0xe0, 0xde, 0x5a, 0x56, 0xd3, 0x1b, 0x44, - 0xe0, 0xd8, 0x7b, 0x1a, 0xbe, 0x96, 0x9e, 0xa8, 0x02, 0xc3, 0xdf, 0xa1, 0x07, 0x42, 0x32, 0x19, - 0x0b, 0x25, 0x98, 0xbb, 0xfa, 0xdc, 0x02, 0x56, 0x85, 0xda, 0x6f, 0x6b, 0xe0, 0x07, 0xd9, 0x99, - 0x6a, 0xc8, 0xde, 0x8d, 0x81, 0x5a, 0xab, 0x21, 0x6f, 0x60, 0xea, 0xf4, 0xee, 0xd4, 0x9f, 0xbc, - 0x52, 0x49, 0x1b, 0x66, 0xfe, 0x97, 0x81, 0x1e, 0x97, 0xaa, 0x57, 0xf2, 0xc7, 0x67, 0xa8, 0x15, - 0x01, 0x17, 0x9e, 0x90, 0x10, 0xc8, 0xcc, 0x47, 0xbd, 0x40, 0x23, 0x7b, 0x81, 0xc9, 0xbc, 0xdb, - 0xfa, 0x72, 0xcd, 0x3d, 0x5d, 0x1b, 0x85, 0xaf, 0x50, 0xd3, 0x0b, 0xa6, 0x5e, 0x00, 0x99, 0x6d, - 0xb0, 0x9c, 0x78, 0xbf, 0x58, 0x47, 0xba, 0xc3, 0xd3, 0x86, 0xac, 0x22, 0xab, 0x41, 0xb7, 0xd2, - 0x17, 0x7f, 0xba, 0x82, 0x42, 0x4b, 0xb8, 0xbd, 0x3f, 0xd7, 0xcc, 0x27, 0xbd, 0xc0, 0x1f, 0xa2, - 0x3a, 0x53, 0x16, 0xe0, 0xba, 0x8c, 0xbc, 0xdf, 0x87, 0xda, 0x4e, 0x73, 0x0f, 0xa5, 0x21, 0xd5, - 0x8a, 0x35, 0x3b, 0x6e, 0x0b, 0x0d, 0xa9, 0xd0, 0x82, 0x86, 0xd4, 0x99, 0x6a, 0xc8, 0x34, 0x95, - 0x74, 0xd7, 0x15, 0x76, 0x5a, 0x9e, 0xca, 0x85, 0xb6, 0xd3, 0xdc, 0xa3, 0xf7, 0x5f, 0x75, 0xcd, - 0x98, 0x94, 0x18, 0x0b, 0x35, 0x8d, 0x54, 0x4d, 0xf5, 0x52, 0x4d, 0xa3, 0xbc, 0xa6, 0x11, 0xfe, - 0xcd, 0x40, 0x98, 0xe5, 0x10, 0xe7, 0x0b, 0xb1, 0x66, 0x8a, 0xfa, 0xfc, 0x35, 0x1e, 0x09, 0x39, - 0x2c, 0xa1, 0x9d, 0x04, 0x92, 0xcf, 0xec, 0x8e, 0xce, 0x02, 0x97, 0x1d, 0xe8, 0x9a, 0x14, 0xf0, - 0x15, 0x6a, 0x64, 0xd6, 0x13, 0xce, 0x43, 0xae, 0x9f, 0x6d, 0x7f, 0x8b, 0x8c, 0x94, 0xbf, 0x6d, - 0x26, 0xf3, 0x6e, 0xe3, 0x70, 0x09, 0xf0, 0xef, 0xbc, 0xdb, 0x28, 0xdc, 0xd3, 0x22, 0x78, 0xca, - 0x35, 0x82, 0x25, 0x57, 0xed, 0x75, 0xb8, 0x8e, 0x61, 0x33, 0x57, 0x01, 0xbc, 0x73, 0x82, 0xde, - 0xdd, 0xd0, 0x22, 0xdc, 0x44, 0xd5, 0x09, 0xcc, 0x32, 0x25, 0xd2, 0xf4, 0x13, 0xb7, 0xd0, 0xee, - 0x35, 0x9b, 0xc6, 0x99, 0xe2, 0x1e, 0xd1, 0xec, 0xf0, 0xd9, 0xce, 0x33, 0xa3, 0xf7, 0x8b, 0x81, - 0x8a, 0x1c, 0xf8, 0x0c, 0xd5, 0xd2, 0xdf, 0x03, 0xbd, 0x66, 0x3e, 0xd8, 0x6e, 0xcd, 0x5c, 0x7a, - 0x3e, 0x2c, 0xd7, 0x65, 0x7a, 0xa2, 0x0a, 0x05, 0xbf, 0x8f, 0x1e, 0xfa, 0x20, 0x04, 0x73, 0x35, - 0xb3, 0xfd, 0x8e, 0x76, 0x7a, 0x78, 0x9e, 0x99, 0xe9, 0xe2, 0xde, 0x26, 0x37, 0xb7, 0x66, 0xe5, - 0xf9, 0xad, 0x59, 0x79, 0x71, 0x6b, 0x56, 0x7e, 0x4a, 0x4c, 0xe3, 0x26, 0x31, 0x8d, 0xe7, 0x89, - 0x69, 0xbc, 0x48, 0x4c, 0xe3, 0xef, 0xc4, 0x34, 0x7e, 0xfd, 0xc7, 0xac, 0x7c, 0x5b, 0x5f, 0x34, - 0xee, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0xb9, 0x9d, 0xb3, 0x34, 0x0a, 0x00, 0x00, + 0x14, 0x8f, 0x9b, 0x74, 0x37, 0x3b, 0x29, 0x90, 0x1d, 0x85, 0x25, 0x0a, 0x92, 0xb3, 0xca, 0x29, + 0x20, 0x76, 0x4c, 0x17, 0x84, 0x56, 0xdc, 0xea, 0xb6, 0x87, 0x8a, 0xb6, 0xc0, 0xa4, 0x42, 0x08, + 0x38, 0x30, 0x71, 0x1e, 0xce, 0x34, 0xf1, 0x1f, 0x79, 0xc6, 0x15, 0xe1, 0xc4, 0x89, 0x33, 0x37, + 0xbe, 0x01, 0x9f, 0xa5, 0x07, 0x24, 0x56, 0x9c, 0xf6, 0x14, 0x51, 0xf3, 0x1d, 0x38, 0x70, 0x01, + 0x79, 0x3c, 0x71, 0xdc, 0x38, 0x2d, 0xd9, 0x1e, 0xf6, 0xe6, 0xf7, 0xe6, 0xbd, 0xdf, 0xef, 0xfd, + 0x4f, 0xd0, 0xc1, 0xe4, 0x99, 0x20, 0x3c, 0xb0, 0x26, 0xf1, 0x10, 0x22, 0x1f, 0x24, 0x08, 0xeb, + 0x02, 0xfc, 0x51, 0x10, 0x59, 0xfa, 0x81, 0x85, 0xdc, 0x12, 0x32, 0x88, 0x98, 0x0b, 0xd6, 0xc5, + 0x2e, 0x9b, 0x86, 0x63, 0xb6, 0x6b, 0xb9, 0xe0, 0x43, 0xc4, 0x24, 0x8c, 0x48, 0x18, 0x05, 0x32, + 0xc0, 0x6f, 0x67, 0xc6, 0x84, 0x85, 0x9c, 0x68, 0x63, 0xb2, 0x30, 0xee, 0x3c, 0x71, 0xb9, 0x1c, + 0xc7, 0x43, 0xe2, 0x04, 0x9e, 0xe5, 0x06, 0x6e, 0x60, 0x29, 0x9f, 0x61, 0xfc, 0x9d, 0x92, 0x94, + 0xa0, 0xbe, 0x32, 0xac, 0x4e, 0xaf, 0x40, 0xec, 0x04, 0x51, 0xca, 0xba, 0xca, 0xd7, 0xf9, 0x70, + 0x69, 0xe3, 0x31, 0x67, 0xcc, 0x7d, 0x88, 0x66, 0x56, 0x38, 0x71, 0x95, 0x53, 0x04, 0x22, 0x88, + 0x23, 0x07, 0x5e, 0xca, 0x4b, 0x58, 0x1e, 0x48, 0xb6, 0x8e, 0xcb, 0xba, 0xc9, 0x2b, 0x8a, 0x7d, + 0xc9, 0xbd, 0x32, 0xcd, 0x47, 0xff, 0xe7, 0x20, 0x9c, 0x31, 0x78, 0x6c, 0xd5, 0xaf, 0xf7, 0x77, + 0x15, 0xe1, 0xfd, 0xc1, 0xd1, 0x20, 0xab, 0xdf, 0x3e, 0x0b, 0x99, 0xc3, 0xe5, 0x0c, 0x7f, 0x8b, + 0xea, 0x69, 0x68, 0x23, 0x26, 0x59, 0xdb, 0x78, 0x6c, 0xf4, 0x1b, 0x4f, 0xdf, 0x27, 0xcb, 0x72, + 0xe7, 0x0c, 0x24, 0x9c, 0xb8, 0xa9, 0x42, 0x90, 0xd4, 0x9a, 0x5c, 0xec, 0x92, 0x4f, 0x87, 0xe7, + 0xe0, 0xc8, 0x13, 0x90, 0xcc, 0xc6, 0x97, 0xf3, 0x6e, 0x25, 0x99, 0x77, 0xd1, 0x52, 0x47, 0x73, + 0x54, 0xcc, 0xd1, 0x8e, 0x1f, 0x8c, 0xe0, 0x2c, 0x08, 0x83, 0x69, 0xe0, 0xce, 0xda, 0x5b, 0x8a, + 0xe5, 0x83, 0xcd, 0x58, 0x8e, 0xd9, 0x10, 0xa6, 0x03, 0x98, 0x82, 0x23, 0x83, 0xc8, 0x6e, 0x26, + 0xf3, 0xee, 0xce, 0x69, 0x01, 0x8c, 0x5e, 0x83, 0xc6, 0x07, 0xa8, 0xa9, 0xe7, 0x63, 0x7f, 0xca, + 0x84, 0x38, 0x65, 0x1e, 0xb4, 0xab, 0x8f, 0x8d, 0xfe, 0x03, 0xbb, 0xad, 0x43, 0x6c, 0x0e, 0x56, + 0xde, 0x69, 0xc9, 0x03, 0x7f, 0x89, 0xea, 0x8e, 0x2e, 0x4f, 0xbb, 0xa6, 0x82, 0x25, 0xb7, 0x05, + 0x4b, 0x16, 0x13, 0x41, 0x3e, 0x8f, 0x99, 0x2f, 0xb9, 0x9c, 0xd9, 0x3b, 0xc9, 0xbc, 0x5b, 0x5f, + 0x94, 0x98, 0xe6, 0x68, 0x58, 0xa0, 0x87, 0x1e, 0xfb, 0x9e, 0x7b, 0xb1, 0xf7, 0x45, 0x30, 0x8d, + 0x3d, 0x18, 0xf0, 0x1f, 0xa0, 0xbd, 0x7d, 0x27, 0x8a, 0x37, 0x93, 0x79, 0xf7, 0xe1, 0xc9, 0x2a, + 0x18, 0x2d, 0xe3, 0xf7, 0x7e, 0x33, 0xd0, 0xa3, 0x72, 0xe3, 0x8f, 0xb9, 0x90, 0xf8, 0x9b, 0x52, + 0xf3, 0xc9, 0x86, 0x6d, 0xe1, 0x22, 0x6b, 0x7d, 0x53, 0xd7, 0xb5, 0xbe, 0xd0, 0x14, 0x1a, 0x7f, + 0x86, 0xb6, 0xb9, 0x04, 0x4f, 0xb4, 0xb7, 0x1e, 0x57, 0xfb, 0x8d, 0xa7, 0x16, 0xb9, 0x65, 0x8d, + 0x49, 0x39, 0x42, 0xfb, 0x35, 0x8d, 0xbd, 0x7d, 0x94, 0xa2, 0xd0, 0x0c, 0xac, 0xf7, 0xeb, 0x16, + 0x6a, 0x66, 0xd9, 0xed, 0x49, 0xc9, 0x9c, 0xb1, 0x07, 0xbe, 0x7c, 0x05, 0x53, 0x3c, 0x40, 0x35, + 0x11, 0x82, 0xa3, 0xa7, 0x77, 0xf7, 0xd6, 0x5c, 0x56, 0xc3, 0x1b, 0x84, 0xe0, 0xd8, 0x3b, 0x1a, + 0xbe, 0x96, 0x4a, 0x54, 0x81, 0xe1, 0xaf, 0xd1, 0x3d, 0x21, 0x99, 0x8c, 0x85, 0x9a, 0xd2, 0xeb, + 0x4b, 0xb1, 0x01, 0xac, 0x72, 0xb5, 0x5f, 0xd7, 0xc0, 0xf7, 0x32, 0x99, 0x6a, 0xc8, 0xde, 0xa5, + 0x81, 0x5a, 0xab, 0x2e, 0xaf, 0xa0, 0xeb, 0xf4, 0x7a, 0xd7, 0x9f, 0xbc, 0x54, 0x4a, 0x37, 0xf4, + 0xfc, 0x0f, 0x03, 0x3d, 0x2a, 0x65, 0xaf, 0x16, 0x02, 0x1f, 0xa3, 0x56, 0x08, 0x91, 0xe0, 0x42, + 0x82, 0x2f, 0x33, 0x1b, 0xb5, 0xf6, 0x46, 0xb6, 0xf6, 0xc9, 0xbc, 0xdb, 0xfa, 0x6c, 0xcd, 0x3b, + 0x5d, 0xeb, 0x85, 0xcf, 0x51, 0x93, 0xfb, 0x53, 0xee, 0x83, 0xde, 0x9f, 0x65, 0xc7, 0xfb, 0xc5, + 0x3c, 0xd2, 0x1f, 0x8e, 0xb4, 0x20, 0xab, 0xc8, 0xaa, 0xd1, 0xad, 0xf4, 0xcc, 0x1c, 0xad, 0xa0, + 0xd0, 0x12, 0x6e, 0xef, 0xf7, 0x35, 0xfd, 0x49, 0x1f, 0xf0, 0x7b, 0xa8, 0xce, 0x94, 0x06, 0x22, + 0x9d, 0x46, 0x5e, 0xef, 0x3d, 0xad, 0xa7, 0xb9, 0x85, 0x9a, 0x21, 0x55, 0x8a, 0x35, 0x87, 0x75, + 0x83, 0x19, 0x52, 0xae, 0x85, 0x19, 0x52, 0x32, 0xd5, 0x90, 0x69, 0x28, 0xe9, 0x81, 0x2d, 0x1c, + 0xd2, 0x3c, 0x94, 0x53, 0xad, 0xa7, 0xb9, 0x45, 0xef, 0xdf, 0xea, 0x9a, 0x36, 0xa9, 0x61, 0x2c, + 0xe4, 0x34, 0x52, 0x39, 0xd5, 0x4b, 0x39, 0x8d, 0xf2, 0x9c, 0x46, 0xf8, 0x17, 0x03, 0x61, 0x96, + 0x43, 0x9c, 0x2c, 0x86, 0x35, 0x9b, 0xa8, 0x4f, 0xee, 0xb0, 0x24, 0x64, 0xaf, 0x84, 0x76, 0xe8, + 0xcb, 0x68, 0x66, 0x77, 0x74, 0x14, 0xb8, 0x6c, 0x40, 0xd7, 0x84, 0x80, 0xcf, 0x51, 0x23, 0xd3, + 0x1e, 0x46, 0x51, 0x10, 0xe9, 0xb5, 0xed, 0x6f, 0x10, 0x91, 0xb2, 0xb7, 0xcd, 0x64, 0xde, 0x6d, + 0xec, 0x2d, 0x01, 0xfe, 0x99, 0x77, 0x1b, 0x85, 0x77, 0x5a, 0x04, 0x4f, 0xb9, 0x46, 0xb0, 0xe4, + 0xaa, 0xdd, 0x85, 0xeb, 0x00, 0x6e, 0xe6, 0x2a, 0x80, 0x77, 0x0e, 0xd1, 0x5b, 0x37, 0x94, 0x08, + 0x37, 0x51, 0x75, 0x02, 0xb3, 0x6c, 0x12, 0x69, 0xfa, 0x89, 0x5b, 0x68, 0xfb, 0x82, 0x4d, 0xe3, + 0x6c, 0xe2, 0x1e, 0xd0, 0x4c, 0xf8, 0x78, 0xeb, 0x99, 0xd1, 0xfb, 0xc9, 0x40, 0x45, 0x0e, 0x7c, + 0x8c, 0x6a, 0xe9, 0x7f, 0x12, 0x7d, 0x66, 0xde, 0xdd, 0xec, 0xcc, 0x9c, 0x71, 0x0f, 0x96, 0xe7, + 0x32, 0x95, 0xa8, 0x42, 0xc1, 0xef, 0xa0, 0xfb, 0x1e, 0x08, 0xc1, 0x5c, 0xcd, 0x6c, 0xbf, 0xa1, + 0x8d, 0xee, 0x9f, 0x64, 0x6a, 0xba, 0x78, 0xb7, 0xc9, 0xe5, 0x95, 0x59, 0x79, 0x7e, 0x65, 0x56, + 0x5e, 0x5c, 0x99, 0x95, 0x1f, 0x13, 0xd3, 0xb8, 0x4c, 0x4c, 0xe3, 0x79, 0x62, 0x1a, 0x2f, 0x12, + 0xd3, 0xf8, 0x33, 0x31, 0x8d, 0x9f, 0xff, 0x32, 0x2b, 0x5f, 0xd5, 0x17, 0x85, 0xfb, 0x2f, 0x00, + 0x00, 0xff, 0xff, 0x95, 0x04, 0x69, 0x56, 0xa9, 0x0a, 0x00, 0x00, } func (m *CSIStorageCapacity) Marshal() (dAtA []byte, err error) { @@ -367,6 +369,18 @@ func (m *CSIStorageCapacity) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.MaximumVolumeSize != nil { + { + size, err := m.MaximumVolumeSize.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if m.Capacity != nil { { size, err := m.Capacity.MarshalToSizedBuffer(dAtA[:i]) @@ -787,6 +801,10 @@ func (m *CSIStorageCapacity) Size() (n int) { l = m.Capacity.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.MaximumVolumeSize != nil { + l = m.MaximumVolumeSize.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -925,6 +943,7 @@ func (this *CSIStorageCapacity) String() string { `NodeTopology:` + strings.Replace(fmt.Sprintf("%v", this.NodeTopology), "LabelSelector", "v1.LabelSelector", 1) + `,`, `StorageClassName:` + fmt.Sprintf("%v", this.StorageClassName) + `,`, `Capacity:` + strings.Replace(fmt.Sprintf("%v", this.Capacity), "Quantity", "resource.Quantity", 1) + `,`, + `MaximumVolumeSize:` + strings.Replace(fmt.Sprintf("%v", this.MaximumVolumeSize), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1204,16 +1223,49 @@ func (m *CSIStorageCapacity) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaximumVolumeSize", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaximumVolumeSize == nil { + m.MaximumVolumeSize = &resource.Quantity{} + } + if err := m.MaximumVolumeSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1330,10 +1382,7 @@ func (m *CSIStorageCapacityList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1482,10 +1531,7 @@ func (m *VolumeAttachment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1602,10 +1648,7 @@ func (m *VolumeAttachmentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1724,10 +1767,7 @@ func (m *VolumeAttachmentSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -1874,10 +1914,7 @@ func (m *VolumeAttachmentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2057,7 +2094,7 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -2146,10 +2183,7 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2264,10 +2298,7 @@ func (m *VolumeError) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.proto b/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.proto index d64345333..78cd16df2 100644 --- a/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.proto +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/generated.proto @@ -47,7 +47,9 @@ option go_package = "v1alpha1"; // // The producer of these objects can decide which approach is more suitable. // -// This is an alpha feature and only available when the CSIStorageCapacity feature is enabled. +// They are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate +// is enabled there and a CSI driver opts into capacity-aware scheduling with +// CSIDriver.StorageCapacity. message CSIStorageCapacity { // Standard object's metadata. The name has no particular meaning. It must be // be a DNS subdomain (dots allowed, 253 characters). To ensure that @@ -89,6 +91,20 @@ message CSIStorageCapacity { // // +optional optional k8s.io.apimachinery.pkg.api.resource.Quantity capacity = 4; + + // MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse + // for a GetCapacityRequest with topology and parameters that match the + // previous fields. + // + // This is defined since CSI spec 1.4.0 as the largest size + // that may be used in a + // CreateVolumeRequest.capacity_range.required_bytes field to + // create a volume with the same parameters as those in + // GetCapacityRequest. The corresponding value in the Kubernetes + // API is ResourceRequirements.Requests in a volume claim. + // + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity maximumVolumeSize = 5; } // CSIStorageCapacityList is a collection of CSIStorageCapacity objects. diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/types.go b/constraint/vendor/k8s.io/api/storage/v1alpha1/types.go index 5e65bcebc..afb0495db 100644 --- a/constraint/vendor/k8s.io/api/storage/v1alpha1/types.go +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/types.go @@ -25,6 +25,9 @@ import ( // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.9 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:replacement=storage.k8s.io,v1,VolumeAttachment // VolumeAttachment captures the intent to attach or detach the specified volume // to/from the specified node. @@ -50,6 +53,9 @@ type VolumeAttachment struct { } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.9 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:replacement=storage.k8s.io,v1,VolumeAttachmentList // VolumeAttachmentList is a collection of VolumeAttachment objects. type VolumeAttachmentList struct { @@ -138,6 +144,9 @@ type VolumeError struct { // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.19 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:replacement=storage.k8s.io,v1beta1,CSIStorageCapacity // CSIStorageCapacity stores the result of one CSI GetCapacity call. // For a given StorageClass, this describes the available capacity in a @@ -156,7 +165,9 @@ type VolumeError struct { // // The producer of these objects can decide which approach is more suitable. // -// This is an alpha feature and only available when the CSIStorageCapacity feature is enabled. +// They are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate +// is enabled there and a CSI driver opts into capacity-aware scheduling with +// CSIDriver.StorageCapacity. type CSIStorageCapacity struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. The name has no particular meaning. It must be @@ -199,9 +210,26 @@ type CSIStorageCapacity struct { // // +optional Capacity *resource.Quantity `json:"capacity,omitempty" protobuf:"bytes,4,opt,name=capacity"` + + // MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse + // for a GetCapacityRequest with topology and parameters that match the + // previous fields. + // + // This is defined since CSI spec 1.4.0 as the largest size + // that may be used in a + // CreateVolumeRequest.capacity_range.required_bytes field to + // create a volume with the same parameters as those in + // GetCapacityRequest. The corresponding value in the Kubernetes + // API is ResourceRequirements.Requests in a volume claim. + // + // +optional + MaximumVolumeSize *resource.Quantity `json:"maximumVolumeSize,omitempty" protobuf:"bytes,5,opt,name=maximumVolumeSize"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.19 +// +k8s:prerelease-lifecycle-gen:deprecated=1.21 +// +k8s:prerelease-lifecycle-gen:replacement=storage.k8s.io,v1beta1,CSIStorageCapacityList // CSIStorageCapacityList is a collection of CSIStorageCapacity objects. type CSIStorageCapacityList struct { diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go index 51778d183..fa50e0289 100644 --- a/constraint/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go @@ -28,11 +28,12 @@ package v1alpha1 // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_CSIStorageCapacity = map[string]string{ - "": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThis is an alpha feature and only available when the CSIStorageCapacity feature is enabled.", - "metadata": "Standard object's metadata. The name has no particular meaning. It must be be a DNS subdomain (dots allowed, 253 characters). To ensure that there are no conflicts with other CSI drivers on the cluster, the recommendation is to use csisc-, a generated name, or a reverse-domain name which ends with the unique CSI driver name.\n\nObjects are namespaced.\n\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "nodeTopology": "NodeTopology defines which nodes have access to the storage for which capacity was reported. If not set, the storage is not accessible from any node in the cluster. If empty, the storage is accessible from all nodes. This field is immutable.", - "storageClassName": "The name of the StorageClass that the reported capacity applies to. It must meet the same requirements as the name of a StorageClass object (non-empty, DNS subdomain). If that object no longer exists, the CSIStorageCapacity object is obsolete and should be removed by its creator. This field is immutable.", - "capacity": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity.", + "": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThey are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate is enabled there and a CSI driver opts into capacity-aware scheduling with CSIDriver.StorageCapacity.", + "metadata": "Standard object's metadata. The name has no particular meaning. It must be be a DNS subdomain (dots allowed, 253 characters). To ensure that there are no conflicts with other CSI drivers on the cluster, the recommendation is to use csisc-, a generated name, or a reverse-domain name which ends with the unique CSI driver name.\n\nObjects are namespaced.\n\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "nodeTopology": "NodeTopology defines which nodes have access to the storage for which capacity was reported. If not set, the storage is not accessible from any node in the cluster. If empty, the storage is accessible from all nodes. This field is immutable.", + "storageClassName": "The name of the StorageClass that the reported capacity applies to. It must meet the same requirements as the name of a StorageClass object (non-empty, DNS subdomain). If that object no longer exists, the CSIStorageCapacity object is obsolete and should be removed by its creator. This field is immutable.", + "capacity": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity.", + "maximumVolumeSize": "MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThis is defined since CSI spec 1.4.0 as the largest size that may be used in a CreateVolumeRequest.capacity_range.required_bytes field to create a volume with the same parameters as those in GetCapacityRequest. The corresponding value in the Kubernetes API is ResourceRequirements.Requests in a volume claim.", } func (CSIStorageCapacity) SwaggerDoc() map[string]string { diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go index 7f3b357ba..64a34670b 100644 --- a/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go @@ -41,6 +41,11 @@ func (in *CSIStorageCapacity) DeepCopyInto(out *CSIStorageCapacity) { x := (*in).DeepCopy() *out = &x } + if in.MaximumVolumeSize != nil { + in, out := &in.MaximumVolumeSize, &out.MaximumVolumeSize + x := (*in).DeepCopy() + *out = &x + } return } diff --git a/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.prerelease-lifecycle.go b/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.prerelease-lifecycle.go new file mode 100644 index 000000000..44311b4bb --- /dev/null +++ b/constraint/vendor/k8s.io/api/storage/v1alpha1/zz_generated.prerelease-lifecycle.go @@ -0,0 +1,121 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by prerelease-lifecycle-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + schema "k8s.io/apimachinery/pkg/runtime/schema" +) + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *CSIStorageCapacity) APILifecycleIntroduced() (major, minor int) { + return 1, 19 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *CSIStorageCapacity) APILifecycleDeprecated() (major, minor int) { + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *CSIStorageCapacity) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1beta1", Kind: "CSIStorageCapacity"} +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *CSIStorageCapacity) APILifecycleRemoved() (major, minor int) { + return 1, 24 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *CSIStorageCapacityList) APILifecycleIntroduced() (major, minor int) { + return 1, 19 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *CSIStorageCapacityList) APILifecycleDeprecated() (major, minor int) { + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *CSIStorageCapacityList) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1beta1", Kind: "CSIStorageCapacityList"} +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *CSIStorageCapacityList) APILifecycleRemoved() (major, minor int) { + return 1, 24 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *VolumeAttachment) APILifecycleIntroduced() (major, minor int) { + return 1, 9 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *VolumeAttachment) APILifecycleDeprecated() (major, minor int) { + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *VolumeAttachment) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1", Kind: "VolumeAttachment"} +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *VolumeAttachment) APILifecycleRemoved() (major, minor int) { + return 1, 24 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *VolumeAttachmentList) APILifecycleIntroduced() (major, minor int) { + return 1, 9 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *VolumeAttachmentList) APILifecycleDeprecated() (major, minor int) { + return 1, 21 +} + +// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. +// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. +func (in *VolumeAttachmentList) APILifecycleReplacement() schema.GroupVersionKind { + return schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1", Kind: "VolumeAttachmentList"} +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *VolumeAttachmentList) APILifecycleRemoved() (major, minor int) { + return 1, 24 +} diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/api/storage/v1beta1/generated.pb.go index 21f664094..72b04d273 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/generated.pb.go @@ -28,6 +28,8 @@ import ( github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" k8s_io_api_core_v1 "k8s.io/api/core/v1" v11 "k8s.io/api/core/v1" + resource "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" math "math" math_bits "math/bits" @@ -242,10 +244,66 @@ func (m *CSINodeSpec) XXX_DiscardUnknown() { var xxx_messageInfo_CSINodeSpec proto.InternalMessageInfo +func (m *CSIStorageCapacity) Reset() { *m = CSIStorageCapacity{} } +func (*CSIStorageCapacity) ProtoMessage() {} +func (*CSIStorageCapacity) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{7} +} +func (m *CSIStorageCapacity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIStorageCapacity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CSIStorageCapacity) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIStorageCapacity.Merge(m, src) +} +func (m *CSIStorageCapacity) XXX_Size() int { + return m.Size() +} +func (m *CSIStorageCapacity) XXX_DiscardUnknown() { + xxx_messageInfo_CSIStorageCapacity.DiscardUnknown(m) +} + +var xxx_messageInfo_CSIStorageCapacity proto.InternalMessageInfo + +func (m *CSIStorageCapacityList) Reset() { *m = CSIStorageCapacityList{} } +func (*CSIStorageCapacityList) ProtoMessage() {} +func (*CSIStorageCapacityList) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{8} +} +func (m *CSIStorageCapacityList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIStorageCapacityList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CSIStorageCapacityList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIStorageCapacityList.Merge(m, src) +} +func (m *CSIStorageCapacityList) XXX_Size() int { + return m.Size() +} +func (m *CSIStorageCapacityList) XXX_DiscardUnknown() { + xxx_messageInfo_CSIStorageCapacityList.DiscardUnknown(m) +} + +var xxx_messageInfo_CSIStorageCapacityList proto.InternalMessageInfo + func (m *StorageClass) Reset() { *m = StorageClass{} } func (*StorageClass) ProtoMessage() {} func (*StorageClass) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{7} + return fileDescriptor_7d2980599fd0de80, []int{9} } func (m *StorageClass) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -273,7 +331,7 @@ var xxx_messageInfo_StorageClass proto.InternalMessageInfo func (m *StorageClassList) Reset() { *m = StorageClassList{} } func (*StorageClassList) ProtoMessage() {} func (*StorageClassList) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{8} + return fileDescriptor_7d2980599fd0de80, []int{10} } func (m *StorageClassList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -301,7 +359,7 @@ var xxx_messageInfo_StorageClassList proto.InternalMessageInfo func (m *TokenRequest) Reset() { *m = TokenRequest{} } func (*TokenRequest) ProtoMessage() {} func (*TokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{9} + return fileDescriptor_7d2980599fd0de80, []int{11} } func (m *TokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -329,7 +387,7 @@ var xxx_messageInfo_TokenRequest proto.InternalMessageInfo func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } func (*VolumeAttachment) ProtoMessage() {} func (*VolumeAttachment) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{10} + return fileDescriptor_7d2980599fd0de80, []int{12} } func (m *VolumeAttachment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,7 +415,7 @@ var xxx_messageInfo_VolumeAttachment proto.InternalMessageInfo func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } func (*VolumeAttachmentList) ProtoMessage() {} func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{11} + return fileDescriptor_7d2980599fd0de80, []int{13} } func (m *VolumeAttachmentList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -385,7 +443,7 @@ var xxx_messageInfo_VolumeAttachmentList proto.InternalMessageInfo func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } func (*VolumeAttachmentSource) ProtoMessage() {} func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{12} + return fileDescriptor_7d2980599fd0de80, []int{14} } func (m *VolumeAttachmentSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -413,7 +471,7 @@ var xxx_messageInfo_VolumeAttachmentSource proto.InternalMessageInfo func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } func (*VolumeAttachmentSpec) ProtoMessage() {} func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{13} + return fileDescriptor_7d2980599fd0de80, []int{15} } func (m *VolumeAttachmentSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -441,7 +499,7 @@ var xxx_messageInfo_VolumeAttachmentSpec proto.InternalMessageInfo func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } func (*VolumeAttachmentStatus) ProtoMessage() {} func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{14} + return fileDescriptor_7d2980599fd0de80, []int{16} } func (m *VolumeAttachmentStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -469,7 +527,7 @@ var xxx_messageInfo_VolumeAttachmentStatus proto.InternalMessageInfo func (m *VolumeError) Reset() { *m = VolumeError{} } func (*VolumeError) ProtoMessage() {} func (*VolumeError) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{15} + return fileDescriptor_7d2980599fd0de80, []int{17} } func (m *VolumeError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -497,7 +555,7 @@ var xxx_messageInfo_VolumeError proto.InternalMessageInfo func (m *VolumeNodeResources) Reset() { *m = VolumeNodeResources{} } func (*VolumeNodeResources) ProtoMessage() {} func (*VolumeNodeResources) Descriptor() ([]byte, []int) { - return fileDescriptor_7d2980599fd0de80, []int{16} + return fileDescriptor_7d2980599fd0de80, []int{18} } func (m *VolumeNodeResources) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -530,6 +588,8 @@ func init() { proto.RegisterType((*CSINodeDriver)(nil), "k8s.io.api.storage.v1beta1.CSINodeDriver") proto.RegisterType((*CSINodeList)(nil), "k8s.io.api.storage.v1beta1.CSINodeList") proto.RegisterType((*CSINodeSpec)(nil), "k8s.io.api.storage.v1beta1.CSINodeSpec") + proto.RegisterType((*CSIStorageCapacity)(nil), "k8s.io.api.storage.v1beta1.CSIStorageCapacity") + proto.RegisterType((*CSIStorageCapacityList)(nil), "k8s.io.api.storage.v1beta1.CSIStorageCapacityList") proto.RegisterType((*StorageClass)(nil), "k8s.io.api.storage.v1beta1.StorageClass") proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1beta1.StorageClass.ParametersEntry") proto.RegisterType((*StorageClassList)(nil), "k8s.io.api.storage.v1beta1.StorageClassList") @@ -549,102 +609,111 @@ func init() { } var fileDescriptor_7d2980599fd0de80 = []byte{ - // 1508 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xbd, 0x6f, 0x1b, 0x47, - 0x16, 0xd7, 0x8a, 0xd4, 0xd7, 0x50, 0xb2, 0xa4, 0x91, 0x7c, 0xc7, 0x53, 0x41, 0x0a, 0x3c, 0xdc, - 0x59, 0x36, 0xec, 0xa5, 0x2d, 0xf8, 0x0c, 0xc3, 0x80, 0x0b, 0xad, 0xac, 0x3b, 0xcb, 0x96, 0x64, - 0xdd, 0x50, 0x30, 0x0e, 0xc6, 0x15, 0x19, 0xee, 0x3e, 0x51, 0x6b, 0x71, 0x77, 0xd6, 0x3b, 0x43, - 0xc5, 0xec, 0x92, 0x26, 0x75, 0x90, 0x22, 0x7d, 0x80, 0xfc, 0x0b, 0x09, 0x90, 0x34, 0x29, 0xe3, - 0x2a, 0x30, 0x52, 0xb9, 0x22, 0x62, 0xe6, 0x4f, 0x48, 0x27, 0xa4, 0x08, 0x66, 0x76, 0xc8, 0xfd, - 0x20, 0x69, 0x49, 0x29, 0xd4, 0x71, 0xde, 0xc7, 0xef, 0xbd, 0x79, 0xef, 0xcd, 0xef, 0x2d, 0xd1, - 0xe6, 0xf1, 0x7d, 0x6e, 0xba, 0xac, 0x7a, 0xdc, 0xaa, 0x43, 0xe8, 0x83, 0x00, 0x5e, 0x3d, 0x01, - 0xdf, 0x61, 0x61, 0x55, 0x2b, 0x68, 0xe0, 0x56, 0xb9, 0x60, 0x21, 0x6d, 0x40, 0xf5, 0xe4, 0x4e, - 0x1d, 0x04, 0xbd, 0x53, 0x6d, 0x80, 0x0f, 0x21, 0x15, 0xe0, 0x98, 0x41, 0xc8, 0x04, 0xc3, 0x2b, - 0x91, 0xad, 0x49, 0x03, 0xd7, 0xd4, 0xb6, 0xa6, 0xb6, 0x5d, 0xb9, 0xd5, 0x70, 0xc5, 0x51, 0xab, - 0x6e, 0xda, 0xcc, 0xab, 0x36, 0x58, 0x83, 0x55, 0x95, 0x4b, 0xbd, 0x75, 0xa8, 0x4e, 0xea, 0xa0, - 0x7e, 0x45, 0x50, 0x2b, 0x95, 0x44, 0x58, 0x9b, 0x85, 0x32, 0x66, 0x36, 0xdc, 0xca, 0xdd, 0xd8, - 0xc6, 0xa3, 0xf6, 0x91, 0xeb, 0x43, 0xd8, 0xae, 0x06, 0xc7, 0x0d, 0x29, 0xe0, 0x55, 0x0f, 0x04, - 0x1d, 0xe6, 0x55, 0x1d, 0xe5, 0x15, 0xb6, 0x7c, 0xe1, 0x7a, 0x30, 0xe0, 0x70, 0xef, 0x2c, 0x07, - 0x6e, 0x1f, 0x81, 0x47, 0xb3, 0x7e, 0x95, 0xef, 0x0d, 0x34, 0xb3, 0x59, 0xdb, 0x7e, 0x14, 0xba, - 0x27, 0x10, 0xe2, 0x8f, 0xd0, 0xb4, 0xcc, 0xc8, 0xa1, 0x82, 0x16, 0x8d, 0x55, 0x63, 0xad, 0xb0, - 0x7e, 0xdb, 0x8c, 0xcb, 0xd5, 0x07, 0x36, 0x83, 0xe3, 0x86, 0x14, 0x70, 0x53, 0x5a, 0x9b, 0x27, - 0x77, 0xcc, 0x67, 0xf5, 0x97, 0x60, 0x8b, 0x5d, 0x10, 0xd4, 0xc2, 0x6f, 0x3a, 0xe5, 0xb1, 0x6e, - 0xa7, 0x8c, 0x62, 0x19, 0xe9, 0xa3, 0xe2, 0xa7, 0x28, 0xcf, 0x03, 0xb0, 0x8b, 0xe3, 0x0a, 0xfd, - 0xba, 0x39, 0xba, 0x19, 0x66, 0x3f, 0xad, 0x5a, 0x00, 0xb6, 0x35, 0xab, 0x61, 0xf3, 0xf2, 0x44, - 0x14, 0x48, 0xe5, 0x3b, 0x03, 0xcd, 0xf5, 0xad, 0x76, 0x5c, 0x2e, 0xf0, 0xff, 0x07, 0x2e, 0x60, - 0x9e, 0xef, 0x02, 0xd2, 0x5b, 0xa5, 0xbf, 0xa0, 0xe3, 0x4c, 0xf7, 0x24, 0x89, 0xe4, 0x9f, 0xa0, - 0x09, 0x57, 0x80, 0xc7, 0x8b, 0xe3, 0xab, 0xb9, 0xb5, 0xc2, 0xfa, 0x3f, 0xce, 0x95, 0xbd, 0x35, - 0xa7, 0x11, 0x27, 0xb6, 0xa5, 0x2f, 0x89, 0x20, 0x2a, 0x5f, 0xe5, 0x13, 0xb9, 0xcb, 0x3b, 0xe1, - 0x07, 0xe8, 0x0a, 0x15, 0x82, 0xda, 0x47, 0x04, 0x5e, 0xb5, 0xdc, 0x10, 0x1c, 0x75, 0x83, 0x69, - 0x0b, 0x77, 0x3b, 0xe5, 0x2b, 0x1b, 0x29, 0x0d, 0xc9, 0x58, 0x4a, 0xdf, 0x80, 0x39, 0xdb, 0xfe, - 0x21, 0x7b, 0xe6, 0xef, 0xb2, 0x96, 0x2f, 0x54, 0x81, 0xb5, 0xef, 0x7e, 0x4a, 0x43, 0x32, 0x96, - 0xd8, 0x46, 0xcb, 0x27, 0xac, 0xd9, 0xf2, 0x60, 0xc7, 0x3d, 0x04, 0xbb, 0x6d, 0x37, 0x61, 0x97, - 0x39, 0xc0, 0x8b, 0xb9, 0xd5, 0xdc, 0xda, 0x8c, 0x55, 0xed, 0x76, 0xca, 0xcb, 0xcf, 0x87, 0xe8, - 0x4f, 0x3b, 0xe5, 0xa5, 0x21, 0x72, 0x32, 0x14, 0x0c, 0x3f, 0x44, 0xf3, 0xba, 0x42, 0x9b, 0x34, - 0xa0, 0xb6, 0x2b, 0xda, 0xc5, 0xbc, 0xca, 0x70, 0xa9, 0xdb, 0x29, 0xcf, 0xd7, 0xd2, 0x2a, 0x92, - 0xb5, 0xc5, 0x8f, 0xd1, 0xdc, 0x21, 0xff, 0x4f, 0xc8, 0x5a, 0xc1, 0x3e, 0x6b, 0xba, 0x76, 0xbb, - 0x38, 0xb1, 0x6a, 0xac, 0xcd, 0x58, 0x95, 0x6e, 0xa7, 0x3c, 0xf7, 0xef, 0x5a, 0x42, 0x71, 0x9a, - 0x15, 0x90, 0xb4, 0x23, 0x06, 0x34, 0x27, 0xd8, 0x31, 0xf8, 0xb2, 0x74, 0xc0, 0x05, 0x2f, 0x4e, - 0xaa, 0x5e, 0xae, 0x7d, 0xa8, 0x97, 0x07, 0x09, 0x07, 0xeb, 0xaa, 0x6e, 0xe7, 0x5c, 0x52, 0xca, - 0x49, 0x1a, 0x15, 0x6f, 0xa2, 0xc5, 0x30, 0x6a, 0x0e, 0x27, 0x10, 0xb4, 0xea, 0x4d, 0x97, 0x1f, - 0x15, 0xa7, 0xd4, 0x8d, 0xaf, 0x76, 0x3b, 0xe5, 0x45, 0x92, 0x55, 0x92, 0x41, 0xfb, 0xca, 0xb7, - 0x06, 0x9a, 0xda, 0xac, 0x6d, 0xef, 0x31, 0x07, 0x2e, 0xe1, 0x69, 0x6e, 0xa7, 0x9e, 0xe6, 0xb5, - 0x33, 0x86, 0x5b, 0x26, 0x35, 0xf2, 0x61, 0xfe, 0x16, 0x3d, 0x4c, 0x69, 0xa3, 0x99, 0x65, 0x15, - 0xe5, 0x7d, 0xea, 0x81, 0x4a, 0x7d, 0x26, 0xf6, 0xd9, 0xa3, 0x1e, 0x10, 0xa5, 0xc1, 0xff, 0x44, - 0x93, 0x3e, 0x73, 0x60, 0xfb, 0x91, 0x4a, 0x60, 0xc6, 0xba, 0xa2, 0x6d, 0x26, 0xf7, 0x94, 0x94, - 0x68, 0x2d, 0xbe, 0x8b, 0x66, 0x05, 0x0b, 0x58, 0x93, 0x35, 0xda, 0x4f, 0xa1, 0xdd, 0x1b, 0xd3, - 0x85, 0x6e, 0xa7, 0x3c, 0x7b, 0x90, 0x90, 0x93, 0x94, 0x15, 0xae, 0xa3, 0x02, 0x6d, 0x36, 0x99, - 0x4d, 0x05, 0xad, 0x37, 0x41, 0xcd, 0x5e, 0x61, 0xbd, 0xfa, 0xa1, 0x3b, 0x46, 0xb3, 0x2d, 0x83, - 0x13, 0xe0, 0xac, 0x15, 0xda, 0xc0, 0xad, 0xf9, 0x6e, 0xa7, 0x5c, 0xd8, 0x88, 0x71, 0x48, 0x12, - 0xb4, 0xf2, 0x8d, 0x81, 0x0a, 0xfa, 0xd6, 0x97, 0x40, 0x46, 0x8f, 0xd3, 0x64, 0xf4, 0xf7, 0x73, - 0xf4, 0x6b, 0x04, 0x15, 0xd9, 0xfd, 0xb4, 0x15, 0x0f, 0x1d, 0xa0, 0x29, 0x47, 0x35, 0x8d, 0x17, - 0x0d, 0x05, 0x7d, 0xfd, 0x1c, 0xd0, 0x9a, 0xeb, 0xe6, 0x75, 0x80, 0xa9, 0xe8, 0xcc, 0x49, 0x0f, - 0xaa, 0xf2, 0xc5, 0x24, 0x9a, 0xed, 0x3d, 0xf3, 0x26, 0xe5, 0xfc, 0x12, 0x06, 0xfa, 0x5f, 0xa8, - 0x10, 0x84, 0xec, 0xc4, 0xe5, 0x2e, 0xf3, 0x21, 0xd4, 0x63, 0xb5, 0xa4, 0x5d, 0x0a, 0xfb, 0xb1, - 0x8a, 0x24, 0xed, 0x70, 0x13, 0xa1, 0x80, 0x86, 0xd4, 0x03, 0x21, 0x4b, 0x90, 0x53, 0x25, 0xb8, - 0xff, 0xa1, 0x12, 0x24, 0xaf, 0x65, 0xee, 0xf7, 0x5d, 0xb7, 0x7c, 0x11, 0xb6, 0xe3, 0x14, 0x63, - 0x05, 0x49, 0xe0, 0xe3, 0x63, 0x34, 0x17, 0x82, 0xdd, 0xa4, 0xae, 0xa7, 0x99, 0x2d, 0xaf, 0xd2, - 0xdc, 0x92, 0x0c, 0x43, 0x92, 0x8a, 0xd3, 0x4e, 0xf9, 0xf6, 0xe0, 0xf7, 0x86, 0xb9, 0x0f, 0x21, - 0x77, 0xb9, 0x00, 0x5f, 0x44, 0x03, 0x9b, 0xf2, 0x21, 0x69, 0x6c, 0xf9, 0x76, 0x3c, 0xc9, 0xf9, - 0xcf, 0x02, 0xe1, 0x32, 0x9f, 0x17, 0x27, 0xe2, 0xb7, 0xb3, 0x9b, 0x90, 0x93, 0x94, 0x15, 0xde, - 0x41, 0xcb, 0x72, 0xcc, 0x3f, 0x8e, 0x02, 0x6c, 0xbd, 0x0e, 0xa8, 0x2f, 0x4b, 0x55, 0x9c, 0x54, - 0x74, 0x56, 0x94, 0x0b, 0x62, 0x63, 0x88, 0x9e, 0x0c, 0xf5, 0xc2, 0xff, 0x43, 0x8b, 0xd1, 0x86, - 0xb0, 0x5c, 0xdf, 0x71, 0xfd, 0x86, 0xdc, 0x0f, 0x8a, 0x19, 0x67, 0xac, 0x1b, 0x92, 0x19, 0x9f, - 0x67, 0x95, 0xa7, 0xc3, 0x84, 0x64, 0x10, 0x04, 0xbf, 0x42, 0x8b, 0x2a, 0x22, 0x38, 0x9a, 0x08, - 0x5c, 0xe0, 0xc5, 0xe9, 0x41, 0x7a, 0x97, 0xa5, 0x93, 0x83, 0xd4, 0xa3, 0x8b, 0x1a, 0x34, 0xc1, - 0x16, 0x2c, 0x3c, 0x80, 0xd0, 0xb3, 0xfe, 0xa6, 0xfb, 0xb5, 0xb8, 0x91, 0x85, 0x22, 0x83, 0xe8, - 0x2b, 0x0f, 0xd1, 0x7c, 0xa6, 0xe1, 0x78, 0x01, 0xe5, 0x8e, 0xa1, 0x1d, 0x11, 0x1d, 0x91, 0x3f, - 0xf1, 0x32, 0x9a, 0x38, 0xa1, 0xcd, 0x16, 0x44, 0x13, 0x48, 0xa2, 0xc3, 0x83, 0xf1, 0xfb, 0x46, - 0xe5, 0x07, 0x03, 0x2d, 0x24, 0xa7, 0xe7, 0x12, 0x68, 0x63, 0x37, 0x4d, 0x1b, 0x6b, 0xe7, 0x1d, - 0xec, 0x11, 0xdc, 0xf1, 0xa9, 0x81, 0x66, 0x93, 0x8b, 0x10, 0xdf, 0x44, 0xd3, 0xb4, 0xe5, 0xb8, - 0xe0, 0xdb, 0x3d, 0xb2, 0xef, 0x67, 0xb3, 0xa1, 0xe5, 0xa4, 0x6f, 0x21, 0xd7, 0x24, 0xbc, 0x0e, - 0xdc, 0x90, 0xca, 0x49, 0xab, 0x81, 0xcd, 0x7c, 0x87, 0xab, 0x32, 0xe5, 0xa2, 0x35, 0xb9, 0x95, - 0x55, 0x92, 0x41, 0xfb, 0xca, 0xd7, 0xe3, 0x68, 0x21, 0x1a, 0x90, 0xe8, 0x2b, 0xc9, 0x03, 0x5f, - 0x5c, 0x02, 0xbd, 0x90, 0xd4, 0xbe, 0xbc, 0x7d, 0xf6, 0x2e, 0x89, 0xb3, 0x1b, 0xb5, 0x38, 0xf1, - 0x0b, 0x34, 0xc9, 0x05, 0x15, 0x2d, 0xc9, 0x3b, 0x12, 0x75, 0xfd, 0x42, 0xa8, 0xca, 0x33, 0x5e, - 0x9c, 0xd1, 0x99, 0x68, 0xc4, 0xca, 0x8f, 0x06, 0x5a, 0xce, 0xba, 0x5c, 0xc2, 0xc0, 0xfd, 0x37, - 0x3d, 0x70, 0x37, 0x2f, 0x72, 0xa3, 0x11, 0x43, 0xf7, 0xb3, 0x81, 0xfe, 0x32, 0x70, 0x79, 0xb5, - 0xa2, 0x25, 0x57, 0x05, 0x19, 0x46, 0xdc, 0x8b, 0xbf, 0x3b, 0x14, 0x57, 0xed, 0x0f, 0xd1, 0x93, - 0xa1, 0x5e, 0xf8, 0x25, 0x5a, 0x70, 0xfd, 0xa6, 0xeb, 0x43, 0x24, 0xab, 0xc5, 0xed, 0x1e, 0x4a, - 0x28, 0x59, 0x64, 0xd5, 0xe6, 0xe5, 0x6e, 0xa7, 0xbc, 0xb0, 0x9d, 0x41, 0x21, 0x03, 0xb8, 0x95, - 0x9f, 0x86, 0xb4, 0x47, 0xed, 0x63, 0xf9, 0xa2, 0x94, 0x04, 0xc2, 0x81, 0x17, 0xa5, 0xe5, 0xa4, - 0x6f, 0xa1, 0x26, 0x48, 0x95, 0x42, 0x27, 0x7a, 0xb1, 0x09, 0x52, 0x9e, 0x89, 0x09, 0x52, 0x67, - 0xa2, 0x11, 0x65, 0x26, 0xf2, 0x23, 0x4c, 0x15, 0x34, 0x97, 0xce, 0x64, 0x4f, 0xcb, 0x49, 0xdf, - 0xa2, 0xf2, 0x7b, 0x6e, 0x48, 0x97, 0xd4, 0x28, 0x26, 0xae, 0xd4, 0xfb, 0x93, 0x93, 0xbd, 0x92, - 0xd3, 0xbf, 0x92, 0x83, 0xbf, 0x34, 0x10, 0xa6, 0x7d, 0x88, 0xdd, 0xde, 0xa8, 0x46, 0xf3, 0xf4, - 0xe4, 0xe2, 0x2f, 0xc4, 0xdc, 0x18, 0x00, 0x8b, 0x76, 0xf5, 0x8a, 0x4e, 0x02, 0x0f, 0x1a, 0x90, - 0x21, 0x19, 0x60, 0x17, 0x15, 0x22, 0xe9, 0x56, 0x18, 0xb2, 0x50, 0x3f, 0xd9, 0x6b, 0x67, 0x27, - 0xa4, 0xcc, 0xad, 0x92, 0xfa, 0x98, 0x8c, 0xfd, 0x4f, 0x3b, 0xe5, 0x42, 0x42, 0x4f, 0x92, 0xd8, - 0x32, 0x94, 0x03, 0x71, 0xa8, 0xfc, 0x9f, 0x08, 0xf5, 0x08, 0x46, 0x87, 0x4a, 0x60, 0xaf, 0x6c, - 0xa1, 0xbf, 0x8e, 0x28, 0xd0, 0x85, 0x76, 0xdb, 0x67, 0x06, 0x4a, 0xc6, 0xc0, 0x3b, 0x28, 0x2f, - 0x5c, 0xfd, 0x12, 0x0b, 0xeb, 0x37, 0xce, 0xc7, 0x30, 0x07, 0xae, 0x07, 0x31, 0x51, 0xca, 0x13, - 0x51, 0x28, 0xf8, 0x3a, 0x9a, 0xf2, 0x80, 0x73, 0xda, 0xd0, 0x91, 0xe3, 0x2f, 0xcf, 0xdd, 0x48, - 0x4c, 0x7a, 0xfa, 0xca, 0x3d, 0xb4, 0x34, 0xe4, 0x5b, 0x1e, 0x97, 0xd1, 0x84, 0xad, 0xfe, 0x29, - 0xcb, 0x84, 0x26, 0xac, 0x19, 0xc9, 0x32, 0x9b, 0xea, 0x0f, 0x72, 0x24, 0xb7, 0x6e, 0xbd, 0x79, - 0x5f, 0x1a, 0x7b, 0xfb, 0xbe, 0x34, 0xf6, 0xee, 0x7d, 0x69, 0xec, 0x93, 0x6e, 0xc9, 0x78, 0xd3, - 0x2d, 0x19, 0x6f, 0xbb, 0x25, 0xe3, 0x5d, 0xb7, 0x64, 0xfc, 0xd2, 0x2d, 0x19, 0x9f, 0xff, 0x5a, - 0x1a, 0x7b, 0x31, 0xa5, 0xeb, 0xfd, 0x47, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6a, 0xb1, 0x9d, 0x65, - 0x9d, 0x12, 0x00, 0x00, + // 1651 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x3b, 0x6f, 0x1b, 0xc7, + 0x16, 0xd6, 0x8a, 0xd4, 0x6b, 0x28, 0x59, 0xd2, 0x48, 0xf6, 0xe5, 0x55, 0x41, 0x0a, 0xbc, 0xb8, + 0xd7, 0xb2, 0x61, 0x2f, 0x6d, 0x5d, 0xc7, 0x30, 0x0c, 0xb8, 0xd0, 0x4a, 0x4a, 0x4c, 0x5b, 0x94, + 0xe5, 0xa1, 0x60, 0x18, 0x46, 0x8a, 0x0c, 0x77, 0x47, 0xd4, 0x58, 0xdc, 0x87, 0x77, 0x86, 0x8a, + 0x99, 0x2a, 0x69, 0x52, 0x07, 0x29, 0xd2, 0x07, 0xc8, 0x5f, 0x48, 0x80, 0xa4, 0x49, 0x19, 0x03, + 0x01, 0x02, 0x23, 0x95, 0x2b, 0x22, 0x66, 0x7e, 0x42, 0x80, 0x14, 0x42, 0x8a, 0x60, 0x66, 0x87, + 0xdc, 0x17, 0x69, 0x49, 0x29, 0xd8, 0x69, 0xcf, 0xe3, 0x3b, 0x67, 0xe6, 0x7c, 0xe7, 0xcc, 0xa1, + 0xc0, 0xe6, 0xd1, 0x1d, 0xa6, 0x53, 0xb7, 0x7c, 0xd4, 0xaa, 0x13, 0xdf, 0x21, 0x9c, 0xb0, 0xf2, + 0x31, 0x71, 0x2c, 0xd7, 0x2f, 0x2b, 0x05, 0xf6, 0x68, 0x99, 0x71, 0xd7, 0xc7, 0x0d, 0x52, 0x3e, + 0xbe, 0x59, 0x27, 0x1c, 0xdf, 0x2c, 0x37, 0x88, 0x43, 0x7c, 0xcc, 0x89, 0xa5, 0x7b, 0xbe, 0xcb, + 0x5d, 0xb8, 0x12, 0xd8, 0xea, 0xd8, 0xa3, 0xba, 0xb2, 0xd5, 0x95, 0xed, 0xca, 0xf5, 0x06, 0xe5, + 0x87, 0xad, 0xba, 0x6e, 0xba, 0x76, 0xb9, 0xe1, 0x36, 0xdc, 0xb2, 0x74, 0xa9, 0xb7, 0x0e, 0xe4, + 0x97, 0xfc, 0x90, 0x7f, 0x05, 0x50, 0x2b, 0xa5, 0x48, 0x58, 0xd3, 0xf5, 0x45, 0xcc, 0x64, 0xb8, + 0x95, 0x5b, 0xa1, 0x8d, 0x8d, 0xcd, 0x43, 0xea, 0x10, 0xbf, 0x5d, 0xf6, 0x8e, 0x1a, 0xd2, 0xc9, + 0x27, 0xcc, 0x6d, 0xf9, 0x26, 0x39, 0x97, 0x17, 0x2b, 0xdb, 0x84, 0xe3, 0x41, 0xb1, 0xca, 0xc3, + 0xbc, 0xfc, 0x96, 0xc3, 0xa9, 0x9d, 0x0e, 0x73, 0xfb, 0x34, 0x07, 0x66, 0x1e, 0x12, 0x1b, 0x27, + 0xfd, 0x4a, 0x3f, 0x68, 0x60, 0x66, 0xb3, 0x56, 0xd9, 0xf2, 0xe9, 0x31, 0xf1, 0xe1, 0x47, 0x60, + 0x5a, 0x64, 0x64, 0x61, 0x8e, 0xf3, 0xda, 0xaa, 0xb6, 0x96, 0x5b, 0xbf, 0xa1, 0x87, 0x97, 0xdc, + 0x07, 0xd6, 0xbd, 0xa3, 0x86, 0x10, 0x30, 0x5d, 0x58, 0xeb, 0xc7, 0x37, 0xf5, 0x47, 0xf5, 0xe7, + 0xc4, 0xe4, 0x55, 0xc2, 0xb1, 0x01, 0x5f, 0x75, 0x8a, 0x63, 0xdd, 0x4e, 0x11, 0x84, 0x32, 0xd4, + 0x47, 0x85, 0x0f, 0x41, 0x96, 0x79, 0xc4, 0xcc, 0x8f, 0x4b, 0xf4, 0x2b, 0xfa, 0xf0, 0x12, 0xea, + 0xfd, 0xb4, 0x6a, 0x1e, 0x31, 0x8d, 0x59, 0x05, 0x9b, 0x15, 0x5f, 0x48, 0x82, 0x94, 0xbe, 0xd7, + 0xc0, 0x5c, 0xdf, 0x6a, 0x87, 0x32, 0x0e, 0x3f, 0x4c, 0x1d, 0x40, 0x3f, 0xdb, 0x01, 0x84, 0xb7, + 0x4c, 0x7f, 0x41, 0xc5, 0x99, 0xee, 0x49, 0x22, 0xc9, 0x3f, 0x00, 0x13, 0x94, 0x13, 0x9b, 0xe5, + 0xc7, 0x57, 0x33, 0x6b, 0xb9, 0xf5, 0xff, 0x9e, 0x29, 0x7b, 0x63, 0x4e, 0x21, 0x4e, 0x54, 0x84, + 0x2f, 0x0a, 0x20, 0x4a, 0x5f, 0x67, 0x23, 0xb9, 0x8b, 0x33, 0xc1, 0xbb, 0xe0, 0x02, 0xe6, 0x1c, + 0x9b, 0x87, 0x88, 0xbc, 0x68, 0x51, 0x9f, 0x58, 0xf2, 0x04, 0xd3, 0x06, 0xec, 0x76, 0x8a, 0x17, + 0x36, 0x62, 0x1a, 0x94, 0xb0, 0x14, 0xbe, 0x9e, 0x6b, 0x55, 0x9c, 0x03, 0xf7, 0x91, 0x53, 0x75, + 0x5b, 0x0e, 0x97, 0x17, 0xac, 0x7c, 0xf7, 0x62, 0x1a, 0x94, 0xb0, 0x84, 0x26, 0x58, 0x3e, 0x76, + 0x9b, 0x2d, 0x9b, 0xec, 0xd0, 0x03, 0x62, 0xb6, 0xcd, 0x26, 0xa9, 0xba, 0x16, 0x61, 0xf9, 0xcc, + 0x6a, 0x66, 0x6d, 0xc6, 0x28, 0x77, 0x3b, 0xc5, 0xe5, 0x27, 0x03, 0xf4, 0x27, 0x9d, 0xe2, 0xd2, + 0x00, 0x39, 0x1a, 0x08, 0x06, 0xef, 0x81, 0x79, 0x75, 0x43, 0x9b, 0xd8, 0xc3, 0x26, 0xe5, 0xed, + 0x7c, 0x56, 0x66, 0xb8, 0xd4, 0xed, 0x14, 0xe7, 0x6b, 0x71, 0x15, 0x4a, 0xda, 0xc2, 0xfb, 0x60, + 0xee, 0x80, 0x7d, 0xe0, 0xbb, 0x2d, 0x6f, 0xcf, 0x6d, 0x52, 0xb3, 0x9d, 0x9f, 0x58, 0xd5, 0xd6, + 0x66, 0x8c, 0x52, 0xb7, 0x53, 0x9c, 0x7b, 0xbf, 0x16, 0x51, 0x9c, 0x24, 0x05, 0x28, 0xee, 0x08, + 0x09, 0x98, 0xe3, 0xee, 0x11, 0x71, 0xc4, 0xd5, 0x11, 0xc6, 0x59, 0x7e, 0x52, 0xd6, 0x72, 0xed, + 0x5d, 0xb5, 0xdc, 0x8f, 0x38, 0x18, 0x17, 0x55, 0x39, 0xe7, 0xa2, 0x52, 0x86, 0xe2, 0xa8, 0x70, + 0x13, 0x2c, 0xfa, 0x41, 0x71, 0x18, 0x22, 0x5e, 0xab, 0xde, 0xa4, 0xec, 0x30, 0x3f, 0x25, 0x4f, + 0x7c, 0xb1, 0xdb, 0x29, 0x2e, 0xa2, 0xa4, 0x12, 0xa5, 0xed, 0x4b, 0xdf, 0x69, 0x60, 0x6a, 0xb3, + 0x56, 0xd9, 0x75, 0x2d, 0x32, 0x82, 0xd6, 0xac, 0xc4, 0x5a, 0xf3, 0xf2, 0x29, 0xe4, 0x16, 0x49, + 0x0d, 0x6d, 0xcc, 0x3f, 0x82, 0xc6, 0x14, 0x36, 0x6a, 0xb2, 0xac, 0x82, 0xac, 0x83, 0x6d, 0x22, + 0x53, 0x9f, 0x09, 0x7d, 0x76, 0xb1, 0x4d, 0x90, 0xd4, 0xc0, 0xff, 0x81, 0x49, 0xc7, 0xb5, 0x48, + 0x65, 0x4b, 0x26, 0x30, 0x63, 0x5c, 0x50, 0x36, 0x93, 0xbb, 0x52, 0x8a, 0x94, 0x16, 0xde, 0x02, + 0xb3, 0xdc, 0xf5, 0xdc, 0xa6, 0xdb, 0x68, 0x3f, 0x24, 0xed, 0x1e, 0x4d, 0x17, 0xba, 0x9d, 0xe2, + 0xec, 0x7e, 0x44, 0x8e, 0x62, 0x56, 0xb0, 0x0e, 0x72, 0xb8, 0xd9, 0x74, 0x4d, 0xcc, 0x71, 0xbd, + 0x49, 0x24, 0xf7, 0x72, 0xeb, 0xe5, 0x77, 0x9d, 0x31, 0xe0, 0xb6, 0x08, 0x8e, 0xd4, 0x6c, 0x67, + 0xc6, 0x7c, 0xb7, 0x53, 0xcc, 0x6d, 0x84, 0x38, 0x28, 0x0a, 0x5a, 0xfa, 0x56, 0x03, 0x39, 0x75, + 0xea, 0x11, 0x0c, 0xa3, 0xfb, 0xf1, 0x61, 0xf4, 0x9f, 0x33, 0xd4, 0x6b, 0xc8, 0x28, 0x32, 0xfb, + 0x69, 0xcb, 0x39, 0xb4, 0x0f, 0xa6, 0x2c, 0x59, 0x34, 0x96, 0xd7, 0x24, 0xf4, 0x95, 0x33, 0x40, + 0xab, 0x59, 0x37, 0xaf, 0x02, 0x4c, 0x05, 0xdf, 0x0c, 0xf5, 0xa0, 0x4a, 0x7f, 0x66, 0x00, 0xdc, + 0xac, 0x55, 0x12, 0x9d, 0x3e, 0x02, 0x5a, 0x53, 0x30, 0x2b, 0x98, 0xd3, 0xe3, 0x86, 0xa2, 0xf7, + 0xff, 0xcf, 0x58, 0x09, 0x5c, 0x27, 0xcd, 0x1a, 0x69, 0x12, 0x93, 0xbb, 0x7e, 0x40, 0xb2, 0xdd, + 0x08, 0x18, 0x8a, 0x41, 0xc3, 0x2d, 0xb0, 0xd0, 0x1b, 0x5c, 0x4d, 0xcc, 0x98, 0x20, 0x77, 0x3e, + 0x23, 0xc9, 0x9c, 0x57, 0x29, 0x2e, 0xd4, 0x12, 0x7a, 0x94, 0xf2, 0x80, 0x4f, 0xc1, 0xb4, 0x19, + 0x9d, 0x91, 0xa7, 0xd0, 0x46, 0xef, 0xad, 0x1e, 0xfa, 0xe3, 0x16, 0x76, 0x38, 0xe5, 0x6d, 0x63, + 0x56, 0x50, 0xa6, 0x3f, 0x4c, 0xfb, 0x68, 0x90, 0x81, 0x45, 0x1b, 0xbf, 0xa4, 0x76, 0xcb, 0x0e, + 0xc8, 0x5d, 0xa3, 0x9f, 0x10, 0x39, 0x49, 0xcf, 0x1f, 0x42, 0x0e, 0xb1, 0x6a, 0x12, 0x0c, 0xa5, + 0xf1, 0x4b, 0x3f, 0x6b, 0xe0, 0x52, 0xba, 0xf0, 0x23, 0x68, 0x90, 0x5a, 0xbc, 0x41, 0xf4, 0x53, + 0x58, 0x9c, 0x48, 0x70, 0x48, 0xaf, 0x7c, 0x39, 0x09, 0x66, 0xa3, 0x35, 0x1c, 0x01, 0x81, 0xdf, + 0x03, 0x39, 0xcf, 0x77, 0x8f, 0x29, 0xa3, 0xae, 0x43, 0x7c, 0x35, 0x1d, 0x97, 0x94, 0x4b, 0x6e, + 0x2f, 0x54, 0xa1, 0xa8, 0x1d, 0x6c, 0x02, 0xe0, 0x61, 0x1f, 0xdb, 0x84, 0x8b, 0x4e, 0xce, 0xc8, + 0x3b, 0xb8, 0xf3, 0xae, 0x3b, 0x88, 0x1e, 0x4b, 0xdf, 0xeb, 0xbb, 0x6e, 0x3b, 0xdc, 0x6f, 0x87, + 0x29, 0x86, 0x0a, 0x14, 0xc1, 0x87, 0x47, 0x60, 0xce, 0x27, 0x66, 0x13, 0x53, 0x5b, 0x3d, 0xd0, + 0x59, 0x99, 0xe6, 0xb6, 0x78, 0x28, 0x51, 0x54, 0x71, 0xd2, 0x29, 0xde, 0x48, 0x2f, 0xdb, 0xfa, + 0x1e, 0xf1, 0x19, 0x65, 0x9c, 0x38, 0x3c, 0xa0, 0x4e, 0xcc, 0x07, 0xc5, 0xb1, 0xc5, 0x13, 0x60, + 0x8b, 0xd5, 0xe5, 0x91, 0xc7, 0xa9, 0xeb, 0xb0, 0xfc, 0x44, 0xf8, 0x04, 0x54, 0x23, 0x72, 0x14, + 0xb3, 0x82, 0x3b, 0x60, 0x59, 0x4c, 0xeb, 0x8f, 0x83, 0x00, 0xdb, 0x2f, 0x3d, 0xec, 0x88, 0xab, + 0xca, 0x4f, 0xca, 0x57, 0x39, 0x2f, 0xf6, 0x9c, 0x8d, 0x01, 0x7a, 0x34, 0xd0, 0x0b, 0x3e, 0x05, + 0x8b, 0xc1, 0xa2, 0x63, 0x50, 0xc7, 0xa2, 0x4e, 0x43, 0xac, 0x39, 0xf2, 0x81, 0x9f, 0x31, 0xae, + 0x8a, 0xde, 0x78, 0x92, 0x54, 0x9e, 0x0c, 0x12, 0xa2, 0x34, 0x08, 0x7c, 0x01, 0x16, 0x65, 0x44, + 0x62, 0xa9, 0xc1, 0x42, 0x09, 0xcb, 0x4f, 0xa7, 0xb7, 0x14, 0x71, 0x75, 0x82, 0x48, 0xbd, 0xf1, + 0xd3, 0x1b, 0x53, 0xfb, 0xc4, 0xb7, 0x8d, 0x7f, 0xab, 0x7a, 0x2d, 0x6e, 0x24, 0xa1, 0x50, 0x1a, + 0x7d, 0xe5, 0x1e, 0x98, 0x4f, 0x14, 0x1c, 0x2e, 0x80, 0xcc, 0x11, 0x69, 0x07, 0xef, 0x35, 0x12, + 0x7f, 0xc2, 0x65, 0x30, 0x71, 0x8c, 0x9b, 0x2d, 0x12, 0x30, 0x10, 0x05, 0x1f, 0x77, 0xc7, 0xef, + 0x68, 0xa5, 0x1f, 0x35, 0x10, 0x1b, 0x6c, 0x23, 0x68, 0xee, 0x6a, 0xbc, 0xb9, 0xd7, 0xce, 0x4a, + 0xec, 0x21, 0x6d, 0xfd, 0x99, 0x06, 0x66, 0xa3, 0xfb, 0x1c, 0xbc, 0x06, 0xa6, 0x71, 0xcb, 0xa2, + 0xc4, 0x31, 0x7b, 0x3b, 0x4b, 0x3f, 0x9b, 0x0d, 0x25, 0x47, 0x7d, 0x0b, 0xb1, 0xed, 0x91, 0x97, + 0x1e, 0xf5, 0xb1, 0x60, 0x5a, 0x8d, 0x98, 0xae, 0x63, 0x31, 0x79, 0x4d, 0x99, 0x60, 0x50, 0x6e, + 0x27, 0x95, 0x28, 0x6d, 0x5f, 0xfa, 0x66, 0x1c, 0x2c, 0x04, 0x04, 0x09, 0x96, 0x7d, 0x9b, 0x38, + 0x7c, 0x04, 0xe3, 0x05, 0xc5, 0xd6, 0xbe, 0x1b, 0xa7, 0xaf, 0x44, 0x61, 0x76, 0xc3, 0xf6, 0x3f, + 0xf8, 0x0c, 0x4c, 0x32, 0x8e, 0x79, 0x8b, 0xc9, 0xe7, 0x2f, 0xb7, 0xbe, 0x7e, 0x2e, 0x54, 0xe9, + 0x19, 0xee, 0x7f, 0xc1, 0x37, 0x52, 0x88, 0xa5, 0x9f, 0x34, 0xb0, 0x9c, 0x74, 0x19, 0x01, 0xe1, + 0x1e, 0xc7, 0x09, 0x77, 0xed, 0x3c, 0x27, 0x1a, 0x42, 0xba, 0x5f, 0x35, 0x70, 0x29, 0x75, 0x78, + 0xf9, 0xce, 0x8a, 0x59, 0xe5, 0x25, 0x26, 0xe2, 0x6e, 0xb8, 0x3e, 0xcb, 0x59, 0xb5, 0x37, 0x40, + 0x8f, 0x06, 0x7a, 0xc1, 0xe7, 0x60, 0x81, 0x3a, 0x4d, 0xea, 0x10, 0xf5, 0x2c, 0x87, 0xe5, 0x1e, + 0x38, 0x50, 0x92, 0xc8, 0xb2, 0xcc, 0xcb, 0x62, 0x7b, 0xa9, 0x24, 0x50, 0x50, 0x0a, 0xb7, 0xf4, + 0xcb, 0x80, 0xf2, 0xc8, 0xb5, 0x52, 0x74, 0x94, 0x94, 0x10, 0x3f, 0xd5, 0x51, 0x4a, 0x8e, 0xfa, + 0x16, 0x92, 0x41, 0xf2, 0x2a, 0x54, 0xa2, 0xe7, 0x63, 0x90, 0xf4, 0x8c, 0x30, 0x48, 0x7e, 0x23, + 0x85, 0x28, 0x32, 0x11, 0x6b, 0x5b, 0x64, 0x3d, 0xeb, 0x67, 0xb2, 0xab, 0xe4, 0xa8, 0x6f, 0x51, + 0xfa, 0x2b, 0x33, 0xa0, 0x4a, 0x92, 0x8a, 0x91, 0x23, 0xf5, 0x7e, 0xab, 0x27, 0x8f, 0x64, 0xf5, + 0x8f, 0x64, 0xc1, 0xaf, 0x34, 0x00, 0x71, 0x1f, 0xa2, 0xda, 0xa3, 0x6a, 0xc0, 0xa7, 0x07, 0xe7, + 0xef, 0x10, 0x7d, 0x23, 0x05, 0x16, 0xbc, 0xd5, 0x2b, 0x2a, 0x09, 0x98, 0x36, 0x40, 0x03, 0x32, + 0x80, 0x14, 0xe4, 0x02, 0xe9, 0xb6, 0xef, 0xbb, 0xbe, 0x6a, 0xd9, 0xcb, 0xa7, 0x27, 0x24, 0xcd, + 0x8d, 0x82, 0xfc, 0x4d, 0x14, 0xfa, 0x9f, 0x74, 0x8a, 0xb9, 0x88, 0x1e, 0x45, 0xb1, 0x45, 0x28, + 0x8b, 0x84, 0xa1, 0xb2, 0xff, 0x20, 0xd4, 0x16, 0x19, 0x1e, 0x2a, 0x82, 0xbd, 0xb2, 0x0d, 0xfe, + 0x35, 0xe4, 0x82, 0xce, 0xf5, 0xb6, 0x7d, 0xae, 0x81, 0x68, 0x0c, 0xb8, 0x03, 0xb2, 0x9c, 0xaa, + 0x4e, 0xcc, 0xad, 0x5f, 0x3d, 0xdb, 0x84, 0xd9, 0xa7, 0x36, 0x09, 0x07, 0xa5, 0xf8, 0x42, 0x12, + 0x05, 0x5e, 0x01, 0x53, 0x36, 0x61, 0x0c, 0x37, 0x54, 0xe4, 0xf0, 0x07, 0x54, 0x35, 0x10, 0xa3, + 0x9e, 0xbe, 0x74, 0x1b, 0x2c, 0x0d, 0xf8, 0x49, 0x0a, 0x8b, 0x60, 0xc2, 0x94, 0xff, 0xf0, 0x11, + 0x09, 0x4d, 0x18, 0x33, 0x62, 0xca, 0x6c, 0xca, 0xff, 0xf3, 0x04, 0x72, 0xe3, 0xfa, 0xab, 0xb7, + 0x85, 0xb1, 0xd7, 0x6f, 0x0b, 0x63, 0x6f, 0xde, 0x16, 0xc6, 0x3e, 0xed, 0x16, 0xb4, 0x57, 0xdd, + 0x82, 0xf6, 0xba, 0x5b, 0xd0, 0xde, 0x74, 0x0b, 0xda, 0x6f, 0xdd, 0x82, 0xf6, 0xc5, 0xef, 0x85, + 0xb1, 0x67, 0x53, 0xea, 0xbe, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xce, 0xa8, 0xf1, 0x40, 0x9a, + 0x15, 0x00, 0x00, } func (m *CSIDriver) Marshal() (dAtA []byte, err error) { @@ -1011,6 +1080,127 @@ func (m *CSINodeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CSIStorageCapacity) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSIStorageCapacity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CSIStorageCapacity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaximumVolumeSize != nil { + { + size, err := m.MaximumVolumeSize.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Capacity != nil { + { + size, err := m.Capacity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + i -= len(m.StorageClassName) + copy(dAtA[i:], m.StorageClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageClassName))) + i-- + dAtA[i] = 0x1a + if m.NodeTopology != nil { + { + size, err := m.NodeTopology.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CSIStorageCapacityList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CSIStorageCapacityList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CSIStorageCapacityList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *StorageClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1676,6 +1866,48 @@ func (m *CSINodeSpec) Size() (n int) { return n } +func (m *CSIStorageCapacity) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.NodeTopology != nil { + l = m.NodeTopology.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.StorageClassName) + n += 1 + l + sovGenerated(uint64(l)) + if m.Capacity != nil { + l = m.Capacity.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MaximumVolumeSize != nil { + l = m.MaximumVolumeSize.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *CSIStorageCapacityList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *StorageClass) Size() (n int) { if m == nil { return 0 @@ -1975,6 +2207,36 @@ func (this *CSINodeSpec) String() string { }, "") return s } +func (this *CSIStorageCapacity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSIStorageCapacity{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `NodeTopology:` + strings.Replace(fmt.Sprintf("%v", this.NodeTopology), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `StorageClassName:` + fmt.Sprintf("%v", this.StorageClassName) + `,`, + `Capacity:` + strings.Replace(fmt.Sprintf("%v", this.Capacity), "Quantity", "resource.Quantity", 1) + `,`, + `MaximumVolumeSize:` + strings.Replace(fmt.Sprintf("%v", this.MaximumVolumeSize), "Quantity", "resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSIStorageCapacityList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]CSIStorageCapacity{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CSIStorageCapacity", "CSIStorageCapacity", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CSIStorageCapacityList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} func (this *StorageClass) String() string { if this == nil { return "nil" @@ -2238,10 +2500,7 @@ func (m *CSIDriver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2358,10 +2617,7 @@ func (m *CSIDriverList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2594,10 +2850,7 @@ func (m *CSIDriverSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2713,10 +2966,7 @@ func (m *CSINode) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -2898,10 +3148,7 @@ func (m *CSINodeDriver) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3018,10 +3265,7 @@ func (m *CSINodeList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3105,10 +3349,7 @@ func (m *CSINodeSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3123,7 +3364,7 @@ func (m *CSINodeSpec) Unmarshal(dAtA []byte) error { } return nil } -func (m *StorageClass) Unmarshal(dAtA []byte) error { +func (m *CSIStorageCapacity) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3146,10 +3387,10 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + return fmt.Errorf("proto: CSIStorageCapacity: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CSIStorageCapacity: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3187,9 +3428,9 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NodeTopology", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3199,29 +3440,33 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Provisioner = string(dAtA[iNdEx:postIndex]) + if m.NodeTopology == nil { + m.NodeTopology = &v1.LabelSelector{} + } + if err := m.NodeTopology.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StorageClassName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3231,25 +3476,361 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Parameters == nil { - m.Parameters = make(map[string]string) - } - var mapkey string + m.StorageClassName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Capacity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Capacity == nil { + m.Capacity = &resource.Quantity{} + } + if err := m.Capacity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaximumVolumeSize", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaximumVolumeSize == nil { + m.MaximumVolumeSize = &resource.Quantity{} + } + if err := m.MaximumVolumeSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIStorageCapacityList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIStorageCapacityList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIStorageCapacityList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CSIStorageCapacity{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StorageClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Provisioner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Parameters == nil { + m.Parameters = make(map[string]string) + } + var mapkey string var mapvalue string for iNdEx < postIndex { entryPreIndex := iNdEx @@ -3333,7 +3914,7 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -3503,10 +4084,7 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3623,10 +4201,7 @@ func (m *StorageClassList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3728,10 +4303,7 @@ func (m *TokenRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -3880,10 +4452,7 @@ func (m *VolumeAttachment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4000,10 +4569,7 @@ func (m *VolumeAttachmentList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4122,10 +4688,7 @@ func (m *VolumeAttachmentSource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4272,10 +4835,7 @@ func (m *VolumeAttachmentSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4455,7 +5015,7 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -4544,10 +5104,7 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4662,10 +5219,7 @@ func (m *VolumeError) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4735,10 +5289,7 @@ func (m *VolumeNodeResources) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/generated.proto b/constraint/vendor/k8s.io/api/storage/v1beta1/generated.proto index 1eb4e1f88..5ed6413ec 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/generated.proto @@ -22,6 +22,7 @@ syntax = "proto2"; package k8s.io.api.storage.v1beta1; import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -75,6 +76,9 @@ message CSIDriverSpec { // If the CSIDriverRegistry feature gate is enabled and the value is // specified to false, the attach operation will be skipped. // Otherwise the attach operation will be called. + // + // This field is immutable. + // // +optional optional bool attachRequired = 1; @@ -93,7 +97,7 @@ message CSIDriverSpec { // "csi.storage.k8s.io/pod.name": pod.Name // "csi.storage.k8s.io/pod.namespace": pod.Namespace // "csi.storage.k8s.io/pod.uid": string(pod.UID) - // "csi.storage.k8s.io/ephemeral": "true" iff the volume is an ephemeral inline volume + // "csi.storage.k8s.io/ephemeral": "true" if the volume is an ephemeral inline volume // defined by a CSIVolumeSource, otherwise "false" // // "csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is only @@ -102,6 +106,9 @@ message CSIDriverSpec { // As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when // deployed on such a cluster and the deployment determines which mode that is, for example // via a command line parameter of the driver. + // + // This field is immutable. + // // +optional optional bool podInfoOnMount = 2; @@ -117,6 +124,9 @@ message CSIDriverSpec { // https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html // A driver can support one or more of these modes and // more modes may be added in the future. + // + // This field is immutable. + // // +optional repeated string volumeLifecycleModes = 3; @@ -134,10 +144,13 @@ message CSIDriverSpec { // unset or false and it can be flipped later when storage // capacity information has been published. // - // This is an alpha field and only available when the CSIStorageCapacity + // This field is immutable. + // + // This is a beta field and only available when the CSIStorageCapacity // feature is enabled. The default is false. // // +optional + // +featureGate=CSIStorageCapacity optional bool storageCapacity = 4; // Defines if the underlying volume supports changing ownership and @@ -145,6 +158,9 @@ message CSIDriverSpec { // Refer to the specific FSGroupPolicy values for additional details. // This field is alpha-level, and is only honored by servers // that enable the CSIVolumeFSGroupPolicy feature gate. + // + // This field is immutable. + // // +optional optional string fsGroupPolicy = 5; @@ -164,7 +180,7 @@ message CSIDriverSpec { // most one token is empty string. To receive a new token after expiry, // RequiresRepublish can be used to trigger NodePublishVolume periodically. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -179,7 +195,7 @@ message CSIDriverSpec { // to NodePublishVolume should only update the contents of the volume. New // mount points will not be seen by a running container. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -261,6 +277,96 @@ message CSINodeSpec { repeated CSINodeDriver drivers = 1; } +// CSIStorageCapacity stores the result of one CSI GetCapacity call. +// For a given StorageClass, this describes the available capacity in a +// particular topology segment. This can be used when considering where to +// instantiate new PersistentVolumes. +// +// For example this can express things like: +// - StorageClass "standard" has "1234 GiB" available in "topology.kubernetes.io/zone=us-east1" +// - StorageClass "localssd" has "10 GiB" available in "kubernetes.io/hostname=knode-abc123" +// +// The following three cases all imply that no capacity is available for +// a certain combination: +// - no object exists with suitable topology and storage class name +// - such an object exists, but the capacity is unset +// - such an object exists, but the capacity is zero +// +// The producer of these objects can decide which approach is more suitable. +// +// They are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate +// is enabled there and a CSI driver opts into capacity-aware scheduling with +// CSIDriver.StorageCapacity. +message CSIStorageCapacity { + // Standard object's metadata. The name has no particular meaning. It must be + // be a DNS subdomain (dots allowed, 253 characters). To ensure that + // there are no conflicts with other CSI drivers on the cluster, the recommendation + // is to use csisc-, a generated name, or a reverse-domain name which ends + // with the unique CSI driver name. + // + // Objects are namespaced. + // + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // NodeTopology defines which nodes have access to the storage + // for which capacity was reported. If not set, the storage is + // not accessible from any node in the cluster. If empty, the + // storage is accessible from all nodes. This field is + // immutable. + // + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector nodeTopology = 2; + + // The name of the StorageClass that the reported capacity applies to. + // It must meet the same requirements as the name of a StorageClass + // object (non-empty, DNS subdomain). If that object no longer exists, + // the CSIStorageCapacity object is obsolete and should be removed by its + // creator. + // This field is immutable. + optional string storageClassName = 3; + + // Capacity is the value reported by the CSI driver in its GetCapacityResponse + // for a GetCapacityRequest with topology and parameters that match the + // previous fields. + // + // The semantic is currently (CSI spec 1.2) defined as: + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If not set, that information is currently + // unavailable and treated like zero capacity. + // + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity capacity = 4; + + // MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse + // for a GetCapacityRequest with topology and parameters that match the + // previous fields. + // + // This is defined since CSI spec 1.4.0 as the largest size + // that may be used in a + // CreateVolumeRequest.capacity_range.required_bytes field to + // create a volume with the same parameters as those in + // GetCapacityRequest. The corresponding value in the Kubernetes + // API is ResourceRequirements.Requests in a volume claim. + // + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity maximumVolumeSize = 5; +} + +// CSIStorageCapacityList is a collection of CSIStorageCapacity objects. +message CSIStorageCapacityList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of CSIStorageCapacity objects. + // +listType=map + // +listMapKey=name + repeated CSIStorageCapacity items = 2; +} + // StorageClass describes the parameters for a class of storage for // which PersistentVolumes can be dynamically provisioned. // @@ -378,7 +484,7 @@ message VolumeAttachmentSource { // a persistent volume defined by a pod's inline VolumeSource. This field // is populated only for the CSIMigration feature. It contains // translated fields from a pod's inline VolumeSource to a - // PersistentVolumeSpec. This field is alpha-level and is only + // PersistentVolumeSpec. This field is beta-level and is only // honored by servers that enabled the CSIMigration feature. // +optional optional k8s.io.api.core.v1.PersistentVolumeSpec inlineVolumeSpec = 2; diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/register.go b/constraint/vendor/k8s.io/api/storage/v1beta1/register.go index c270ace57..a281d0f26 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/register.go +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/register.go @@ -55,6 +55,9 @@ func addKnownTypes(scheme *runtime.Scheme) error { &CSINode{}, &CSINodeList{}, + + &CSIStorageCapacity{}, + &CSIStorageCapacityList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/types.go b/constraint/vendor/k8s.io/api/storage/v1beta1/types.go index 10df2baa7..d1ffe7a0e 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/types.go +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/types.go @@ -18,6 +18,7 @@ package v1beta1 import ( v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -182,7 +183,7 @@ type VolumeAttachmentSource struct { // a persistent volume defined by a pod's inline VolumeSource. This field // is populated only for the CSIMigration feature. It contains // translated fields from a pod's inline VolumeSource to a - // PersistentVolumeSpec. This field is alpha-level and is only + // PersistentVolumeSpec. This field is beta-level and is only // honored by servers that enabled the CSIMigration feature. // +optional InlineVolumeSpec *v1.PersistentVolumeSpec `json:"inlineVolumeSpec,omitempty" protobuf:"bytes,2,opt,name=inlineVolumeSpec"` @@ -291,6 +292,9 @@ type CSIDriverSpec struct { // If the CSIDriverRegistry feature gate is enabled and the value is // specified to false, the attach operation will be skipped. // Otherwise the attach operation will be called. + // + // This field is immutable. + // // +optional AttachRequired *bool `json:"attachRequired,omitempty" protobuf:"varint,1,opt,name=attachRequired"` @@ -309,7 +313,7 @@ type CSIDriverSpec struct { // "csi.storage.k8s.io/pod.name": pod.Name // "csi.storage.k8s.io/pod.namespace": pod.Namespace // "csi.storage.k8s.io/pod.uid": string(pod.UID) - // "csi.storage.k8s.io/ephemeral": "true" iff the volume is an ephemeral inline volume + // "csi.storage.k8s.io/ephemeral": "true" if the volume is an ephemeral inline volume // defined by a CSIVolumeSource, otherwise "false" // // "csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is only @@ -318,6 +322,9 @@ type CSIDriverSpec struct { // As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when // deployed on such a cluster and the deployment determines which mode that is, for example // via a command line parameter of the driver. + // + // This field is immutable. + // // +optional PodInfoOnMount *bool `json:"podInfoOnMount,omitempty" protobuf:"bytes,2,opt,name=podInfoOnMount"` @@ -333,6 +340,9 @@ type CSIDriverSpec struct { // https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html // A driver can support one or more of these modes and // more modes may be added in the future. + // + // This field is immutable. + // // +optional VolumeLifecycleModes []VolumeLifecycleMode `json:"volumeLifecycleModes,omitempty" protobuf:"bytes,3,opt,name=volumeLifecycleModes"` @@ -351,10 +361,13 @@ type CSIDriverSpec struct { // unset or false and it can be flipped later when storage // capacity information has been published. // - // This is an alpha field and only available when the CSIStorageCapacity + // This field is immutable. + // + // This is a beta field and only available when the CSIStorageCapacity // feature is enabled. The default is false. // // +optional + // +featureGate=CSIStorageCapacity StorageCapacity *bool `json:"storageCapacity,omitempty" protobuf:"bytes,4,opt,name=storageCapacity"` // Defines if the underlying volume supports changing ownership and @@ -362,6 +375,9 @@ type CSIDriverSpec struct { // Refer to the specific FSGroupPolicy values for additional details. // This field is alpha-level, and is only honored by servers // that enable the CSIVolumeFSGroupPolicy feature gate. + // + // This field is immutable. + // // +optional FSGroupPolicy *FSGroupPolicy `json:"fsGroupPolicy,omitempty" protobuf:"bytes,5,opt,name=fsGroupPolicy"` @@ -381,7 +397,7 @@ type CSIDriverSpec struct { // most one token is empty string. To receive a new token after expiry, // RequiresRepublish can be used to trigger NodePublishVolume periodically. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -396,7 +412,7 @@ type CSIDriverSpec struct { // to NodePublishVolume should only update the contents of the volume. New // mount points will not be seen by a running container. // - // This is an alpha feature and only available when the + // This is a beta feature and only available when the // CSIServiceAccountToken feature is enabled. // // +optional @@ -569,3 +585,102 @@ type CSINodeList struct { // items is the list of CSINode Items []CSINode `json:"items" protobuf:"bytes,2,rep,name=items"` } + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.21 + +// CSIStorageCapacity stores the result of one CSI GetCapacity call. +// For a given StorageClass, this describes the available capacity in a +// particular topology segment. This can be used when considering where to +// instantiate new PersistentVolumes. +// +// For example this can express things like: +// - StorageClass "standard" has "1234 GiB" available in "topology.kubernetes.io/zone=us-east1" +// - StorageClass "localssd" has "10 GiB" available in "kubernetes.io/hostname=knode-abc123" +// +// The following three cases all imply that no capacity is available for +// a certain combination: +// - no object exists with suitable topology and storage class name +// - such an object exists, but the capacity is unset +// - such an object exists, but the capacity is zero +// +// The producer of these objects can decide which approach is more suitable. +// +// They are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate +// is enabled there and a CSI driver opts into capacity-aware scheduling with +// CSIDriver.StorageCapacity. +type CSIStorageCapacity struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. The name has no particular meaning. It must be + // be a DNS subdomain (dots allowed, 253 characters). To ensure that + // there are no conflicts with other CSI drivers on the cluster, the recommendation + // is to use csisc-, a generated name, or a reverse-domain name which ends + // with the unique CSI driver name. + // + // Objects are namespaced. + // + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // NodeTopology defines which nodes have access to the storage + // for which capacity was reported. If not set, the storage is + // not accessible from any node in the cluster. If empty, the + // storage is accessible from all nodes. This field is + // immutable. + // + // +optional + NodeTopology *metav1.LabelSelector `json:"nodeTopology,omitempty" protobuf:"bytes,2,opt,name=nodeTopology"` + + // The name of the StorageClass that the reported capacity applies to. + // It must meet the same requirements as the name of a StorageClass + // object (non-empty, DNS subdomain). If that object no longer exists, + // the CSIStorageCapacity object is obsolete and should be removed by its + // creator. + // This field is immutable. + StorageClassName string `json:"storageClassName" protobuf:"bytes,3,name=storageClassName"` + + // Capacity is the value reported by the CSI driver in its GetCapacityResponse + // for a GetCapacityRequest with topology and parameters that match the + // previous fields. + // + // The semantic is currently (CSI spec 1.2) defined as: + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If not set, that information is currently + // unavailable and treated like zero capacity. + // + // +optional + Capacity *resource.Quantity `json:"capacity,omitempty" protobuf:"bytes,4,opt,name=capacity"` + + // MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse + // for a GetCapacityRequest with topology and parameters that match the + // previous fields. + // + // This is defined since CSI spec 1.4.0 as the largest size + // that may be used in a + // CreateVolumeRequest.capacity_range.required_bytes field to + // create a volume with the same parameters as those in + // GetCapacityRequest. The corresponding value in the Kubernetes + // API is ResourceRequirements.Requests in a volume claim. + // + // +optional + MaximumVolumeSize *resource.Quantity `json:"maximumVolumeSize,omitempty" protobuf:"bytes,5,opt,name=maximumVolumeSize"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.21 + +// CSIStorageCapacityList is a collection of CSIStorageCapacity objects. +type CSIStorageCapacityList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of CSIStorageCapacity objects. + // +listType=map + // +listMapKey=name + Items []CSIStorageCapacity `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go index c51950d7c..0d03a30b4 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go @@ -49,13 +49,13 @@ func (CSIDriverList) SwaggerDoc() map[string]string { var map_CSIDriverSpec = map[string]string{ "": "CSIDriverSpec is the specification of a CSIDriver.", - "attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.", - "podInfoOnMount": "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" iff the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.", - "volumeLifecycleModes": "VolumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.", - "storageCapacity": "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis is an alpha field and only available when the CSIStorageCapacity feature is enabled. The default is false.", - "fsGroupPolicy": "Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.", - "tokenRequests": "TokenRequests indicates the CSI driver needs pods' service account tokens it is mounting volume for to do necessary authentication. Kubelet will pass the tokens in VolumeContext in the CSI NodePublishVolume calls. The CSI driver should parse and validate the following VolumeContext: \"csi.storage.k8s.io/serviceAccount.tokens\": {\n \"\": {\n \"token\": ,\n \"expirationTimestamp\": ,\n },\n ...\n}\n\nNote: Audience in each TokenRequest should be different and at most one token is empty string. To receive a new token after expiry, RequiresRepublish can be used to trigger NodePublishVolume periodically.\n\nThis is an alpha feature and only available when the CSIServiceAccountToken feature is enabled.", - "requiresRepublish": "RequiresRepublish indicates the CSI driver wants `NodePublishVolume` being periodically called to reflect any possible change in the mounted volume. This field defaults to false.\n\nNote: After a successful initial NodePublishVolume call, subsequent calls to NodePublishVolume should only update the contents of the volume. New mount points will not be seen by a running container.\n\nThis is an alpha feature and only available when the CSIServiceAccountToken feature is enabled.", + "attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.\n\nThis field is immutable.", + "podInfoOnMount": "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" if the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.\n\nThis field is immutable.", + "volumeLifecycleModes": "VolumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.\n\nThis field is immutable.", + "storageCapacity": "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field is immutable.\n\nThis is a beta field and only available when the CSIStorageCapacity feature is enabled. The default is false.", + "fsGroupPolicy": "Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.\n\nThis field is immutable.", + "tokenRequests": "TokenRequests indicates the CSI driver needs pods' service account tokens it is mounting volume for to do necessary authentication. Kubelet will pass the tokens in VolumeContext in the CSI NodePublishVolume calls. The CSI driver should parse and validate the following VolumeContext: \"csi.storage.k8s.io/serviceAccount.tokens\": {\n \"\": {\n \"token\": ,\n \"expirationTimestamp\": ,\n },\n ...\n}\n\nNote: Audience in each TokenRequest should be different and at most one token is empty string. To receive a new token after expiry, RequiresRepublish can be used to trigger NodePublishVolume periodically.\n\nThis is a beta feature and only available when the CSIServiceAccountToken feature is enabled.", + "requiresRepublish": "RequiresRepublish indicates the CSI driver wants `NodePublishVolume` being periodically called to reflect any possible change in the mounted volume. This field defaults to false.\n\nNote: After a successful initial NodePublishVolume call, subsequent calls to NodePublishVolume should only update the contents of the volume. New mount points will not be seen by a running container.\n\nThis is a beta feature and only available when the CSIServiceAccountToken feature is enabled.", } func (CSIDriverSpec) SwaggerDoc() map[string]string { @@ -103,6 +103,29 @@ func (CSINodeSpec) SwaggerDoc() map[string]string { return map_CSINodeSpec } +var map_CSIStorageCapacity = map[string]string{ + "": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThey are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate is enabled there and a CSI driver opts into capacity-aware scheduling with CSIDriver.StorageCapacity.", + "metadata": "Standard object's metadata. The name has no particular meaning. It must be be a DNS subdomain (dots allowed, 253 characters). To ensure that there are no conflicts with other CSI drivers on the cluster, the recommendation is to use csisc-, a generated name, or a reverse-domain name which ends with the unique CSI driver name.\n\nObjects are namespaced.\n\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "nodeTopology": "NodeTopology defines which nodes have access to the storage for which capacity was reported. If not set, the storage is not accessible from any node in the cluster. If empty, the storage is accessible from all nodes. This field is immutable.", + "storageClassName": "The name of the StorageClass that the reported capacity applies to. It must meet the same requirements as the name of a StorageClass object (non-empty, DNS subdomain). If that object no longer exists, the CSIStorageCapacity object is obsolete and should be removed by its creator. This field is immutable.", + "capacity": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity.", + "maximumVolumeSize": "MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThis is defined since CSI spec 1.4.0 as the largest size that may be used in a CreateVolumeRequest.capacity_range.required_bytes field to create a volume with the same parameters as those in GetCapacityRequest. The corresponding value in the Kubernetes API is ResourceRequirements.Requests in a volume claim.", +} + +func (CSIStorageCapacity) SwaggerDoc() map[string]string { + return map_CSIStorageCapacity +} + +var map_CSIStorageCapacityList = map[string]string{ + "": "CSIStorageCapacityList is a collection of CSIStorageCapacity objects.", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is the list of CSIStorageCapacity objects.", +} + +func (CSIStorageCapacityList) SwaggerDoc() map[string]string { + return map_CSIStorageCapacityList +} + var map_StorageClass = map[string]string{ "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go index 89a102901..9b7e675ee 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go @@ -21,7 +21,8 @@ limitations under the License. package v1beta1 import ( - v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -247,6 +248,80 @@ func (in *CSINodeSpec) DeepCopy() *CSINodeSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIStorageCapacity) DeepCopyInto(out *CSIStorageCapacity) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.NodeTopology != nil { + in, out := &in.NodeTopology, &out.NodeTopology + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + x := (*in).DeepCopy() + *out = &x + } + if in.MaximumVolumeSize != nil { + in, out := &in.MaximumVolumeSize, &out.MaximumVolumeSize + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIStorageCapacity. +func (in *CSIStorageCapacity) DeepCopy() *CSIStorageCapacity { + if in == nil { + return nil + } + out := new(CSIStorageCapacity) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIStorageCapacity) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIStorageCapacityList) DeepCopyInto(out *CSIStorageCapacityList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSIStorageCapacity, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIStorageCapacityList. +func (in *CSIStorageCapacityList) DeepCopy() *CSIStorageCapacityList { + if in == nil { + return nil + } + out := new(CSIStorageCapacityList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIStorageCapacityList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StorageClass) DeepCopyInto(out *StorageClass) { *out = *in @@ -261,7 +336,7 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) { } if in.ReclaimPolicy != nil { in, out := &in.ReclaimPolicy, &out.ReclaimPolicy - *out = new(v1.PersistentVolumeReclaimPolicy) + *out = new(corev1.PersistentVolumeReclaimPolicy) **out = **in } if in.MountOptions != nil { @@ -281,7 +356,7 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) { } if in.AllowedTopologies != nil { in, out := &in.AllowedTopologies, &out.AllowedTopologies - *out = make([]v1.TopologySelectorTerm, len(*in)) + *out = make([]corev1.TopologySelectorTerm, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -432,7 +507,7 @@ func (in *VolumeAttachmentSource) DeepCopyInto(out *VolumeAttachmentSource) { } if in.InlineVolumeSpec != nil { in, out := &in.InlineVolumeSpec, &out.InlineVolumeSpec - *out = new(v1.PersistentVolumeSpec) + *out = new(corev1.PersistentVolumeSpec) (*in).DeepCopyInto(*out) } return diff --git a/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go b/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go index 8bb3de207..275b5d5db 100644 --- a/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go +++ b/constraint/vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go @@ -120,6 +120,42 @@ func (in *CSINodeList) APILifecycleRemoved() (major, minor int) { return 1, 22 } +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *CSIStorageCapacity) APILifecycleIntroduced() (major, minor int) { + return 1, 21 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *CSIStorageCapacity) APILifecycleDeprecated() (major, minor int) { + return 1, 24 +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *CSIStorageCapacity) APILifecycleRemoved() (major, minor int) { + return 1, 27 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *CSIStorageCapacityList) APILifecycleIntroduced() (major, minor int) { + return 1, 21 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *CSIStorageCapacityList) APILifecycleDeprecated() (major, minor int) { + return 1, 24 +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *CSIStorageCapacityList) APILifecycleRemoved() (major, minor int) { + return 1, 27 +} + // APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. func (in *StorageClass) APILifecycleIntroduced() (major, minor int) { diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go index ee77a4229..b1c5f6f4c 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types.go @@ -326,6 +326,8 @@ type CustomResourceDefinitionCondition struct { // CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition type CustomResourceDefinitionStatus struct { // Conditions indicate state for particular aspects of a CustomResourceDefinition + // +listType=map + // +listMapKey=type Conditions []CustomResourceDefinitionCondition // AcceptedNames are the names that are actually being used to serve discovery diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.pb.go b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.pb.go index d6f0c35fe..f3388ffe8 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.pb.go @@ -3863,10 +3863,7 @@ func (m *ConversionRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4015,10 +4012,7 @@ func (m *ConversionResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4140,10 +4134,7 @@ func (m *ConversionReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4372,10 +4363,7 @@ func (m *CustomResourceColumnDefinition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4493,10 +4481,7 @@ func (m *CustomResourceConversion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4645,10 +4630,7 @@ func (m *CustomResourceDefinition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4859,10 +4841,7 @@ func (m *CustomResourceDefinitionCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4979,10 +4958,7 @@ func (m *CustomResourceDefinitionList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5224,10 +5200,7 @@ func (m *CustomResourceDefinitionNames) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5464,10 +5437,7 @@ func (m *CustomResourceDefinitionSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5616,10 +5586,7 @@ func (m *CustomResourceDefinitionStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5900,10 +5867,7 @@ func (m *CustomResourceDefinitionVersion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6050,10 +6014,7 @@ func (m *CustomResourceSubresourceScale) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6103,10 +6064,7 @@ func (m *CustomResourceSubresourceStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6228,10 +6186,7 @@ func (m *CustomResourceSubresources) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6317,10 +6272,7 @@ func (m *CustomResourceValidation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6434,10 +6386,7 @@ func (m *ExternalDocumentation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6521,10 +6470,7 @@ func (m *JSON) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7435,7 +7381,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7600,7 +7546,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7729,7 +7675,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7894,7 +7840,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -8162,10 +8108,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8285,10 +8228,7 @@ func (m *JSONSchemaPropsOrArray) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8394,10 +8334,7 @@ func (m *JSONSchemaPropsOrBool) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8515,10 +8452,7 @@ func (m *JSONSchemaPropsOrStringArray) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8685,10 +8619,7 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8841,10 +8772,7 @@ func (m *WebhookClientConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8962,10 +8890,7 @@ func (m *WebhookConversion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.proto b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.proto index 3494a31ba..a82824ae7 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.proto +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.proto @@ -234,6 +234,8 @@ message CustomResourceDefinitionSpec { message CustomResourceDefinitionStatus { // conditions indicate state for particular aspects of a CustomResourceDefinition // +optional + // +listType=map + // +listMapKey=type repeated CustomResourceDefinitionCondition conditions = 1; // acceptedNames are the names that are actually being used to serve discovery. diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/types.go b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/types.go index 02922c593..a55dd5b1b 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/types.go +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/types.go @@ -329,6 +329,8 @@ type CustomResourceDefinitionCondition struct { type CustomResourceDefinitionStatus struct { // conditions indicate state for particular aspects of a CustomResourceDefinition // +optional + // +listType=map + // +listMapKey=type Conditions []CustomResourceDefinitionCondition `json:"conditions" protobuf:"bytes,1,opt,name=conditions"` // acceptedNames are the names that are actually being used to serve discovery. diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go index 0382b0445..7537be186 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.pb.go @@ -756,196 +756,196 @@ func init() { } var fileDescriptor_98a4cc6918394e53 = []byte{ - // 3024 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0x23, 0x47, - 0xd9, 0xdf, 0x91, 0x2c, 0x5b, 0x6e, 0xdb, 0x6b, 0xbb, 0x77, 0xed, 0xcc, 0x3a, 0x1b, 0xcb, 0xab, - 0xbc, 0xd9, 0xd7, 0x49, 0x76, 0xe5, 0xc4, 0x24, 0x24, 0xa4, 0xa0, 0x28, 0xcb, 0xf6, 0x06, 0x27, - 0xeb, 0x0f, 0x5a, 0xbb, 0x89, 0x21, 0x9f, 0x6d, 0x4d, 0x4b, 0x9e, 0xf5, 0x7c, 0xed, 0xf4, 0x8c, - 0x6c, 0x57, 0x80, 0xe2, 0xa3, 0x52, 0x50, 0x14, 0x10, 0x8a, 0xe4, 0x42, 0x15, 0x1c, 0x02, 0xc5, - 0x85, 0x03, 0x1c, 0xa0, 0xb8, 0xc0, 0x1f, 0x90, 0x63, 0x8a, 0x53, 0x0e, 0x94, 0x60, 0xc5, 0x95, - 0x23, 0x55, 0x54, 0xf9, 0x44, 0xf5, 0xc7, 0xf4, 0x8c, 0x46, 0xd2, 0xae, 0x2b, 0x2b, 0x65, 0xb9, - 0x59, 0xcf, 0xd7, 0xef, 0xe9, 0xa7, 0x9f, 0x7e, 0xfa, 0xe9, 0x67, 0x0c, 0x6a, 0x07, 0xcf, 0xd3, - 0x92, 0xe9, 0x2e, 0x1d, 0x84, 0x7b, 0xc4, 0x77, 0x48, 0x40, 0xe8, 0x52, 0x83, 0x38, 0x86, 0xeb, - 0x2f, 0x49, 0x06, 0xf6, 0x4c, 0x72, 0x14, 0x10, 0x87, 0x9a, 0xae, 0x43, 0xaf, 0x62, 0xcf, 0xa4, - 0xc4, 0x6f, 0x10, 0x7f, 0xc9, 0x3b, 0xa8, 0x33, 0x1e, 0x6d, 0x17, 0x58, 0x6a, 0x3c, 0xbd, 0x47, - 0x02, 0xfc, 0xf4, 0x52, 0x9d, 0x38, 0xc4, 0xc7, 0x01, 0x31, 0x4a, 0x9e, 0xef, 0x06, 0x2e, 0xfc, - 0x92, 0x30, 0x57, 0x6a, 0x93, 0x7e, 0x4b, 0x99, 0x2b, 0x79, 0x07, 0x75, 0xc6, 0xa3, 0xed, 0x02, - 0x25, 0x69, 0x6e, 0xee, 0x6a, 0xdd, 0x0c, 0xf6, 0xc3, 0xbd, 0x52, 0xd5, 0xb5, 0x97, 0xea, 0x6e, - 0xdd, 0x5d, 0xe2, 0x56, 0xf7, 0xc2, 0x1a, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x04, 0xda, 0xdc, 0x33, - 0xb1, 0xf3, 0x36, 0xae, 0xee, 0x9b, 0x0e, 0xf1, 0x8f, 0x63, 0x8f, 0x6d, 0x12, 0xe0, 0xa5, 0x46, - 0x87, 0x8f, 0x73, 0x4b, 0xbd, 0xb4, 0xfc, 0xd0, 0x09, 0x4c, 0x9b, 0x74, 0x28, 0x7c, 0xfe, 0x5e, - 0x0a, 0xb4, 0xba, 0x4f, 0x6c, 0x9c, 0xd6, 0x2b, 0x9e, 0x68, 0x60, 0x7a, 0xd5, 0x75, 0x1a, 0xc4, - 0x67, 0xab, 0x44, 0xe4, 0x76, 0x48, 0x68, 0x00, 0xcb, 0x20, 0x1b, 0x9a, 0x86, 0xae, 0x2d, 0x68, - 0x8b, 0xa3, 0xe5, 0xa7, 0x3e, 0x6a, 0x16, 0xce, 0xb4, 0x9a, 0x85, 0xec, 0xcd, 0x8d, 0xb5, 0x93, - 0x66, 0xe1, 0x52, 0x2f, 0xa4, 0xe0, 0xd8, 0x23, 0xb4, 0x74, 0x73, 0x63, 0x0d, 0x31, 0x65, 0xf8, - 0x22, 0x98, 0x36, 0x08, 0x35, 0x7d, 0x62, 0xac, 0xec, 0x6c, 0xbc, 0x22, 0xec, 0xeb, 0x19, 0x6e, - 0xf1, 0x82, 0xb4, 0x38, 0xbd, 0x96, 0x16, 0x40, 0x9d, 0x3a, 0x70, 0x17, 0x8c, 0xb8, 0x7b, 0xb7, - 0x48, 0x35, 0xa0, 0x7a, 0x76, 0x21, 0xbb, 0x38, 0xb6, 0x7c, 0xb5, 0x14, 0xef, 0xa0, 0x72, 0x81, - 0x6f, 0x9b, 0x5c, 0x6c, 0x09, 0xe1, 0xc3, 0xf5, 0x68, 0xe7, 0xca, 0x93, 0x12, 0x6d, 0x64, 0x5b, - 0x58, 0x41, 0x91, 0xb9, 0xe2, 0xaf, 0x33, 0x00, 0x26, 0x17, 0x4f, 0x3d, 0xd7, 0xa1, 0xa4, 0x2f, - 0xab, 0xa7, 0x60, 0xaa, 0xca, 0x2d, 0x07, 0xc4, 0x90, 0xb8, 0x7a, 0xe6, 0xd3, 0x78, 0xaf, 0x4b, - 0xfc, 0xa9, 0xd5, 0x94, 0x39, 0xd4, 0x01, 0x00, 0x6f, 0x80, 0x61, 0x9f, 0xd0, 0xd0, 0x0a, 0xf4, - 0xec, 0x82, 0xb6, 0x38, 0xb6, 0x7c, 0xa5, 0x27, 0x14, 0xcf, 0x6f, 0x96, 0x7c, 0xa5, 0xc6, 0xd3, - 0xa5, 0x4a, 0x80, 0x83, 0x90, 0x96, 0xcf, 0x4a, 0xa4, 0x61, 0xc4, 0x6d, 0x20, 0x69, 0xab, 0xf8, - 0x83, 0x0c, 0x98, 0x4a, 0x46, 0xa9, 0x61, 0x92, 0x43, 0x78, 0x08, 0x46, 0x7c, 0x91, 0x2c, 0x3c, - 0x4e, 0x63, 0xcb, 0x3b, 0xa5, 0xfb, 0x3a, 0x56, 0xa5, 0x8e, 0x24, 0x2c, 0x8f, 0xb1, 0x3d, 0x93, - 0x3f, 0x50, 0x84, 0x06, 0xdf, 0x01, 0x79, 0x5f, 0x6e, 0x14, 0xcf, 0xa6, 0xb1, 0xe5, 0xaf, 0xf6, - 0x11, 0x59, 0x18, 0x2e, 0x8f, 0xb7, 0x9a, 0x85, 0x7c, 0xf4, 0x0b, 0x29, 0xc0, 0xe2, 0xfb, 0x19, - 0x30, 0xbf, 0x1a, 0xd2, 0xc0, 0xb5, 0x11, 0xa1, 0x6e, 0xe8, 0x57, 0xc9, 0xaa, 0x6b, 0x85, 0xb6, - 0xb3, 0x46, 0x6a, 0xa6, 0x63, 0x06, 0x2c, 0x5b, 0x17, 0xc0, 0x90, 0x83, 0x6d, 0x22, 0xb3, 0x67, - 0x5c, 0xc6, 0x74, 0x68, 0x0b, 0xdb, 0x04, 0x71, 0x0e, 0x93, 0x60, 0xc9, 0x22, 0xcf, 0x82, 0x92, - 0xb8, 0x71, 0xec, 0x11, 0xc4, 0x39, 0xf0, 0x32, 0x18, 0xae, 0xb9, 0xbe, 0x8d, 0xc5, 0x3e, 0x8e, - 0xc6, 0x3b, 0x73, 0x8d, 0x53, 0x91, 0xe4, 0xc2, 0x67, 0xc1, 0x98, 0x41, 0x68, 0xd5, 0x37, 0x3d, - 0x06, 0xad, 0x0f, 0x71, 0xe1, 0x73, 0x52, 0x78, 0x6c, 0x2d, 0x66, 0xa1, 0xa4, 0x1c, 0xbc, 0x02, - 0xf2, 0x9e, 0x6f, 0xba, 0xbe, 0x19, 0x1c, 0xeb, 0xb9, 0x05, 0x6d, 0x31, 0x57, 0x9e, 0x92, 0x3a, - 0xf9, 0x1d, 0x49, 0x47, 0x4a, 0x02, 0x2e, 0x80, 0xfc, 0x4b, 0x95, 0xed, 0xad, 0x1d, 0x1c, 0xec, - 0xeb, 0xc3, 0x1c, 0x61, 0x88, 0x49, 0xa3, 0xfc, 0x2d, 0x49, 0x2d, 0xfe, 0x2d, 0x03, 0xf4, 0x74, - 0x54, 0xa2, 0x90, 0xc2, 0x6b, 0x20, 0x4f, 0x03, 0x56, 0x71, 0xea, 0xc7, 0x32, 0x26, 0x4f, 0x44, - 0x60, 0x15, 0x49, 0x3f, 0x69, 0x16, 0x66, 0x63, 0x8d, 0x88, 0xca, 0xe3, 0xa1, 0x74, 0xe1, 0x2f, - 0x35, 0x70, 0xee, 0x90, 0xec, 0xed, 0xbb, 0xee, 0xc1, 0xaa, 0x65, 0x12, 0x27, 0x58, 0x75, 0x9d, - 0x9a, 0x59, 0x97, 0x39, 0x80, 0xee, 0x33, 0x07, 0x5e, 0xed, 0xb4, 0x5c, 0x7e, 0xa8, 0xd5, 0x2c, - 0x9c, 0xeb, 0xc2, 0x40, 0xdd, 0xfc, 0x80, 0xbb, 0x40, 0xaf, 0xa6, 0x0e, 0x89, 0x2c, 0x60, 0xa2, - 0x6c, 0x8d, 0x96, 0x2f, 0xb6, 0x9a, 0x05, 0x7d, 0xb5, 0x87, 0x0c, 0xea, 0xa9, 0x5d, 0xfc, 0x5e, - 0x36, 0x1d, 0xde, 0x44, 0xba, 0xbd, 0x0d, 0xf2, 0xec, 0x18, 0x1b, 0x38, 0xc0, 0xf2, 0x20, 0x3e, - 0x75, 0xba, 0x43, 0x2f, 0x6a, 0xc6, 0x26, 0x09, 0x70, 0x19, 0xca, 0x0d, 0x01, 0x31, 0x0d, 0x29, - 0xab, 0xf0, 0x9b, 0x60, 0x88, 0x7a, 0xa4, 0x2a, 0x03, 0xfd, 0xda, 0xfd, 0x1e, 0xb6, 0x1e, 0x0b, - 0xa9, 0x78, 0xa4, 0x1a, 0x9f, 0x05, 0xf6, 0x0b, 0x71, 0x58, 0xf8, 0xae, 0x06, 0x86, 0x29, 0x2f, - 0x50, 0xb2, 0xa8, 0xbd, 0x31, 0x28, 0x0f, 0x52, 0x55, 0x50, 0xfc, 0x46, 0x12, 0xbc, 0xf8, 0xef, - 0x0c, 0xb8, 0xd4, 0x4b, 0x75, 0xd5, 0x75, 0x0c, 0xb1, 0x1d, 0x1b, 0xf2, 0x6c, 0x8b, 0x4c, 0x7f, - 0x36, 0x79, 0xb6, 0x4f, 0x9a, 0x85, 0xc7, 0xee, 0x69, 0x20, 0x51, 0x04, 0xbe, 0xa0, 0xd6, 0x2d, - 0x0a, 0xc5, 0xa5, 0x76, 0xc7, 0x4e, 0x9a, 0x85, 0x49, 0xa5, 0xd6, 0xee, 0x2b, 0x6c, 0x00, 0x68, - 0x61, 0x1a, 0xdc, 0xf0, 0xb1, 0x43, 0x85, 0x59, 0xd3, 0x26, 0x32, 0x7c, 0x4f, 0x9c, 0x2e, 0x3d, - 0x98, 0x46, 0x79, 0x4e, 0x42, 0xc2, 0xeb, 0x1d, 0xd6, 0x50, 0x17, 0x04, 0x56, 0xb7, 0x7c, 0x82, - 0xa9, 0x2a, 0x45, 0x89, 0x1b, 0x85, 0x51, 0x91, 0xe4, 0xc2, 0xc7, 0xc1, 0x88, 0x4d, 0x28, 0xc5, - 0x75, 0xc2, 0xeb, 0xcf, 0x68, 0x7c, 0x45, 0x6f, 0x0a, 0x32, 0x8a, 0xf8, 0xac, 0x3f, 0xb9, 0xd8, - 0x2b, 0x6a, 0xd7, 0x4d, 0x1a, 0xc0, 0xd7, 0x3b, 0x0e, 0x40, 0xe9, 0x74, 0x2b, 0x64, 0xda, 0x3c, - 0xfd, 0x55, 0xf1, 0x8b, 0x28, 0x89, 0xe4, 0xff, 0x06, 0xc8, 0x99, 0x01, 0xb1, 0xa3, 0xbb, 0xfb, - 0xd5, 0x01, 0xe5, 0x5e, 0x79, 0x42, 0xfa, 0x90, 0xdb, 0x60, 0x68, 0x48, 0x80, 0x16, 0x7f, 0x93, - 0x01, 0x8f, 0xf4, 0x52, 0x61, 0x17, 0x0a, 0x65, 0x11, 0xf7, 0xac, 0xd0, 0xc7, 0x96, 0xcc, 0x38, - 0x15, 0xf1, 0x1d, 0x4e, 0x45, 0x92, 0xcb, 0x4a, 0x3e, 0x35, 0x9d, 0x7a, 0x68, 0x61, 0x5f, 0xa6, - 0x93, 0x5a, 0x75, 0x45, 0xd2, 0x91, 0x92, 0x80, 0x25, 0x00, 0xe8, 0xbe, 0xeb, 0x07, 0x1c, 0x43, - 0x56, 0xaf, 0xb3, 0xac, 0x40, 0x54, 0x14, 0x15, 0x25, 0x24, 0xd8, 0x8d, 0x76, 0x60, 0x3a, 0x86, - 0xdc, 0x75, 0x75, 0x8a, 0x5f, 0x36, 0x1d, 0x03, 0x71, 0x0e, 0xc3, 0xb7, 0x4c, 0x1a, 0x30, 0x8a, - 0xdc, 0xf2, 0xb6, 0xa8, 0x73, 0x49, 0x25, 0xc1, 0xf0, 0xab, 0xac, 0xea, 0xbb, 0xbe, 0x49, 0xa8, - 0x3e, 0x1c, 0xe3, 0xaf, 0x2a, 0x2a, 0x4a, 0x48, 0x14, 0xff, 0x95, 0xef, 0x9d, 0x24, 0xac, 0x94, - 0xc0, 0x47, 0x41, 0xae, 0xee, 0xbb, 0xa1, 0x27, 0xa3, 0xa4, 0xa2, 0xfd, 0x22, 0x23, 0x22, 0xc1, - 0x63, 0x59, 0xd9, 0x68, 0x6b, 0x53, 0x55, 0x56, 0x46, 0xcd, 0x69, 0xc4, 0x87, 0xdf, 0xd1, 0x40, - 0xce, 0x91, 0xc1, 0x61, 0x29, 0xf7, 0xfa, 0x80, 0xf2, 0x82, 0x87, 0x37, 0x76, 0x57, 0x44, 0x5e, - 0x20, 0xc3, 0x67, 0x40, 0x8e, 0x56, 0x5d, 0x8f, 0xc8, 0xa8, 0xcf, 0x47, 0x42, 0x15, 0x46, 0x3c, - 0x69, 0x16, 0x26, 0x22, 0x73, 0x9c, 0x80, 0x84, 0x30, 0xfc, 0xbe, 0x06, 0x40, 0x03, 0x5b, 0xa6, - 0x81, 0x79, 0xcb, 0x90, 0xe3, 0xee, 0xf7, 0x37, 0xad, 0x5f, 0x51, 0xe6, 0xc5, 0xa6, 0xc5, 0xbf, - 0x51, 0x02, 0x1a, 0xbe, 0xa7, 0x81, 0x71, 0x1a, 0xee, 0xf9, 0x52, 0x8b, 0xf2, 0xe6, 0x62, 0x6c, - 0xf9, 0x6b, 0x7d, 0xf5, 0xa5, 0x92, 0x00, 0x28, 0x4f, 0xb5, 0x9a, 0x85, 0xf1, 0x24, 0x05, 0xb5, - 0x39, 0x00, 0x7f, 0xa4, 0x81, 0x7c, 0x23, 0xba, 0xb3, 0x47, 0xf8, 0x81, 0x7f, 0x73, 0x40, 0x1b, - 0x2b, 0x33, 0x2a, 0x3e, 0x05, 0xaa, 0x0f, 0x50, 0x1e, 0xc0, 0x3f, 0x6b, 0x40, 0xc7, 0x86, 0x28, - 0xf0, 0xd8, 0xda, 0xf1, 0x4d, 0x27, 0x20, 0xbe, 0xe8, 0x37, 0xa9, 0x9e, 0xe7, 0xee, 0xf5, 0xf7, - 0x2e, 0x4c, 0xf7, 0xb2, 0xe5, 0x05, 0xe9, 0x9d, 0xbe, 0xd2, 0xc3, 0x0d, 0xd4, 0xd3, 0x41, 0x9e, - 0x68, 0x71, 0x4b, 0xa3, 0x8f, 0x0e, 0x20, 0xd1, 0xe2, 0x5e, 0x4a, 0x56, 0x87, 0xb8, 0x83, 0x4a, - 0x40, 0xc3, 0x6d, 0x30, 0xe3, 0xf9, 0x84, 0x03, 0xdc, 0x74, 0x0e, 0x1c, 0xf7, 0xd0, 0xb9, 0x66, - 0x12, 0xcb, 0xa0, 0x3a, 0x58, 0xd0, 0x16, 0xf3, 0xe5, 0x0b, 0xad, 0x66, 0x61, 0x66, 0xa7, 0x9b, - 0x00, 0xea, 0xae, 0x57, 0x7c, 0x2f, 0x9b, 0x7e, 0x05, 0xa4, 0xbb, 0x08, 0xf8, 0x81, 0x58, 0xbd, - 0x88, 0x0d, 0xd5, 0x35, 0xbe, 0x5b, 0x6f, 0x0f, 0x28, 0x99, 0x54, 0x1b, 0x10, 0x77, 0x72, 0x8a, - 0x44, 0x51, 0xc2, 0x0f, 0xf8, 0x73, 0x0d, 0x4c, 0xe0, 0x6a, 0x95, 0x78, 0x01, 0x31, 0x44, 0x71, - 0xcf, 0x7c, 0x06, 0xf5, 0x6b, 0x46, 0x7a, 0x35, 0xb1, 0x92, 0x84, 0x46, 0xed, 0x9e, 0xc0, 0x17, - 0xc0, 0x59, 0x1a, 0xb8, 0x3e, 0x31, 0x52, 0x6d, 0x33, 0x6c, 0x35, 0x0b, 0x67, 0x2b, 0x6d, 0x1c, - 0x94, 0x92, 0x2c, 0xfe, 0x3d, 0x07, 0x0a, 0xf7, 0x38, 0x6a, 0xa7, 0x78, 0x98, 0x5d, 0x06, 0xc3, - 0x7c, 0xb9, 0x06, 0x8f, 0x4a, 0x3e, 0xd1, 0x0a, 0x72, 0x2a, 0x92, 0x5c, 0x76, 0x51, 0x30, 0x7c, - 0xd6, 0xbe, 0x64, 0xb9, 0xa0, 0xba, 0x28, 0x2a, 0x82, 0x8c, 0x22, 0x3e, 0x5c, 0x06, 0xc0, 0x20, - 0x9e, 0x4f, 0xd8, 0x65, 0x65, 0xe8, 0x23, 0x5c, 0x5a, 0x6d, 0xd2, 0x9a, 0xe2, 0xa0, 0x84, 0x14, - 0xbc, 0x06, 0x60, 0xf4, 0xcb, 0x74, 0x9d, 0x57, 0xb1, 0xef, 0x98, 0x4e, 0x5d, 0xcf, 0x73, 0xb7, - 0x67, 0x59, 0x37, 0xb6, 0xd6, 0xc1, 0x45, 0x5d, 0x34, 0xe0, 0x3b, 0x60, 0x58, 0x0c, 0x7d, 0xf8, - 0x0d, 0x31, 0xc0, 0x2a, 0x0f, 0x78, 0x8c, 0x38, 0x14, 0x92, 0x90, 0x9d, 0xd5, 0x3d, 0xf7, 0xa0, - 0xab, 0xfb, 0x5d, 0xcb, 0xe9, 0xf0, 0xff, 0x78, 0x39, 0x2d, 0xfe, 0x47, 0x4b, 0xd7, 0x9c, 0xc4, - 0x52, 0x2b, 0x55, 0x6c, 0x11, 0xb8, 0x06, 0xa6, 0xd8, 0x8b, 0x09, 0x11, 0xcf, 0x32, 0xab, 0x98, - 0xf2, 0x07, 0xbb, 0x48, 0x76, 0x35, 0x43, 0xaa, 0xa4, 0xf8, 0xa8, 0x43, 0x03, 0xbe, 0x04, 0xa0, - 0x78, 0x45, 0xb4, 0xd9, 0x11, 0x0d, 0x91, 0x7a, 0x0f, 0x54, 0x3a, 0x24, 0x50, 0x17, 0x2d, 0xb8, - 0x0a, 0xa6, 0x2d, 0xbc, 0x47, 0xac, 0x0a, 0xb1, 0x48, 0x35, 0x70, 0x7d, 0x6e, 0x4a, 0x8c, 0x34, - 0x66, 0x5a, 0xcd, 0xc2, 0xf4, 0xf5, 0x34, 0x13, 0x75, 0xca, 0x17, 0x2f, 0xa5, 0x8f, 0x76, 0x72, - 0xe1, 0xe2, 0x6d, 0xf6, 0x61, 0x06, 0xcc, 0xf5, 0xce, 0x0c, 0xf8, 0xdd, 0xf8, 0x09, 0x29, 0x5e, - 0x08, 0x6f, 0x0e, 0x2a, 0x0b, 0xe5, 0x1b, 0x12, 0x74, 0xbe, 0x1f, 0xe1, 0xb7, 0x58, 0xbb, 0x86, - 0xad, 0x68, 0x68, 0xf5, 0xc6, 0xc0, 0x5c, 0x60, 0x20, 0xe5, 0x51, 0xd1, 0x09, 0x62, 0x8b, 0x37, - 0x7e, 0xd8, 0x22, 0xc5, 0xdf, 0x6a, 0xe9, 0x29, 0x42, 0x7c, 0x82, 0xe1, 0x8f, 0x35, 0x30, 0xe9, - 0x7a, 0xc4, 0x59, 0xd9, 0xd9, 0x78, 0xe5, 0x73, 0xe2, 0x24, 0xcb, 0x50, 0x6d, 0xdd, 0xa7, 0x9f, - 0x2f, 0x55, 0xb6, 0xb7, 0x84, 0xc1, 0x1d, 0xdf, 0xf5, 0x68, 0xf9, 0x5c, 0xab, 0x59, 0x98, 0xdc, - 0x6e, 0x87, 0x42, 0x69, 0xec, 0xa2, 0x0d, 0x66, 0xd6, 0x8f, 0x02, 0xe2, 0x3b, 0xd8, 0x5a, 0x73, - 0xab, 0xa1, 0x4d, 0x9c, 0x40, 0x38, 0x9a, 0x9a, 0x78, 0x69, 0xa7, 0x9c, 0x78, 0x3d, 0x02, 0xb2, - 0xa1, 0x6f, 0xc9, 0x2c, 0x1e, 0x53, 0x13, 0x5d, 0x74, 0x1d, 0x31, 0x7a, 0xf1, 0x12, 0x18, 0x62, - 0x7e, 0xc2, 0x0b, 0x20, 0xeb, 0xe3, 0x43, 0x6e, 0x75, 0xbc, 0x3c, 0xc2, 0x44, 0x10, 0x3e, 0x44, - 0x8c, 0x56, 0xfc, 0xd3, 0x02, 0x98, 0x4c, 0xad, 0x05, 0xce, 0x81, 0x8c, 0x1a, 0x13, 0x03, 0x69, - 0x34, 0xb3, 0xb1, 0x86, 0x32, 0xa6, 0x01, 0x9f, 0x53, 0xc5, 0x57, 0x80, 0x16, 0xd4, 0x5d, 0xc2, - 0xa9, 0xac, 0x3f, 0x8f, 0xcd, 0x31, 0x47, 0xa2, 0xc2, 0xc9, 0x7c, 0x20, 0x35, 0x79, 0x4a, 0x84, - 0x0f, 0xa4, 0x86, 0x18, 0xed, 0xd3, 0x8e, 0xfb, 0xa2, 0x79, 0x63, 0xee, 0x14, 0xf3, 0xc6, 0xe1, - 0xbb, 0xce, 0x1b, 0x1f, 0x05, 0xb9, 0xc0, 0x0c, 0x2c, 0xc2, 0x2f, 0xb2, 0xc4, 0x33, 0xea, 0x06, - 0x23, 0x22, 0xc1, 0x83, 0xb7, 0xc0, 0x88, 0x41, 0x6a, 0x38, 0xb4, 0x02, 0x7e, 0x67, 0x8d, 0x2d, - 0xaf, 0xf6, 0x21, 0x85, 0xc4, 0x30, 0x78, 0x4d, 0xd8, 0x45, 0x11, 0x00, 0x7c, 0x0c, 0x8c, 0xd8, - 0xf8, 0xc8, 0xb4, 0x43, 0x9b, 0x37, 0x98, 0x9a, 0x10, 0xdb, 0x14, 0x24, 0x14, 0xf1, 0x58, 0x65, - 0x24, 0x47, 0x55, 0x2b, 0xa4, 0x66, 0x83, 0x48, 0xa6, 0x6c, 0xfe, 0x54, 0x65, 0x5c, 0x4f, 0xf1, - 0x51, 0x87, 0x06, 0x07, 0x33, 0x1d, 0xae, 0x3c, 0x96, 0x00, 0x13, 0x24, 0x14, 0xf1, 0xda, 0xc1, - 0xa4, 0xfc, 0x78, 0x2f, 0x30, 0xa9, 0xdc, 0xa1, 0x01, 0x9f, 0x04, 0xa3, 0x36, 0x3e, 0xba, 0x4e, - 0x9c, 0x7a, 0xb0, 0xaf, 0x4f, 0x2c, 0x68, 0x8b, 0xd9, 0xf2, 0x44, 0xab, 0x59, 0x18, 0xdd, 0x8c, - 0x88, 0x28, 0xe6, 0x73, 0x61, 0xd3, 0x91, 0xc2, 0x67, 0x13, 0xc2, 0x11, 0x11, 0xc5, 0x7c, 0xd6, - 0xbd, 0x78, 0x38, 0x60, 0x87, 0x4b, 0x9f, 0x6c, 0x7f, 0xe6, 0xee, 0x08, 0x32, 0x8a, 0xf8, 0x70, - 0x11, 0xe4, 0x6d, 0x7c, 0xc4, 0x47, 0x12, 0xfa, 0x14, 0x37, 0xcb, 0x07, 0xe3, 0x9b, 0x92, 0x86, - 0x14, 0x97, 0x4b, 0x9a, 0x8e, 0x90, 0x9c, 0x4e, 0x48, 0x4a, 0x1a, 0x52, 0x5c, 0x96, 0xc4, 0xa1, - 0x63, 0xde, 0x0e, 0x89, 0x10, 0x86, 0x3c, 0x32, 0x2a, 0x89, 0x6f, 0xc6, 0x2c, 0x94, 0x94, 0x83, - 0x25, 0x00, 0xec, 0xd0, 0x0a, 0x4c, 0xcf, 0x22, 0xdb, 0x35, 0xfd, 0x1c, 0x8f, 0x3f, 0x6f, 0xfa, - 0x37, 0x15, 0x15, 0x25, 0x24, 0x20, 0x01, 0x43, 0xc4, 0x09, 0x6d, 0xfd, 0x3c, 0xbf, 0xd8, 0xfb, - 0x92, 0x82, 0xea, 0xe4, 0xac, 0x3b, 0xa1, 0x8d, 0xb8, 0x79, 0xf8, 0x1c, 0x98, 0xb0, 0xf1, 0x11, - 0x2b, 0x07, 0xc4, 0x0f, 0x4c, 0x42, 0xf5, 0x19, 0xbe, 0xf8, 0x69, 0xd6, 0xed, 0x6e, 0x26, 0x19, - 0xa8, 0x5d, 0x8e, 0x2b, 0x9a, 0x4e, 0x42, 0x71, 0x36, 0xa1, 0x98, 0x64, 0xa0, 0x76, 0x39, 0x16, - 0x69, 0x9f, 0xdc, 0x0e, 0x4d, 0x9f, 0x18, 0xfa, 0x43, 0xbc, 0x41, 0x96, 0x1f, 0x2b, 0x04, 0x0d, - 0x29, 0x2e, 0x6c, 0x44, 0xb3, 0x2b, 0x9d, 0x1f, 0xc3, 0x9b, 0xfd, 0xad, 0xe4, 0xdb, 0xfe, 0x8a, - 0xef, 0xe3, 0x63, 0x71, 0xd3, 0x24, 0xa7, 0x56, 0x90, 0x82, 0x1c, 0xb6, 0xac, 0xed, 0x9a, 0x7e, - 0x81, 0xc7, 0xbe, 0xdf, 0x37, 0x88, 0xaa, 0x3a, 0x2b, 0x0c, 0x04, 0x09, 0x2c, 0x06, 0xea, 0x3a, - 0x2c, 0x35, 0xe6, 0x06, 0x0b, 0xba, 0xcd, 0x40, 0x90, 0xc0, 0xe2, 0x2b, 0x75, 0x8e, 0xb7, 0x6b, - 0xfa, 0xc3, 0x03, 0x5e, 0x29, 0x03, 0x41, 0x02, 0x0b, 0x9a, 0x20, 0xeb, 0xb8, 0x81, 0x7e, 0x71, - 0x20, 0xd7, 0x33, 0xbf, 0x70, 0xb6, 0xdc, 0x00, 0x31, 0x0c, 0xf8, 0x33, 0x0d, 0x00, 0x2f, 0x4e, - 0xd1, 0x47, 0xfa, 0x32, 0x12, 0x49, 0x41, 0x96, 0xe2, 0xdc, 0x5e, 0x77, 0x02, 0xff, 0x38, 0x7e, - 0x1e, 0x25, 0xce, 0x40, 0xc2, 0x0b, 0xf8, 0x2b, 0x0d, 0x9c, 0x4f, 0xb6, 0xc9, 0xca, 0xbd, 0x79, - 0x1e, 0x91, 0x1b, 0xfd, 0x4e, 0xf3, 0xb2, 0xeb, 0x5a, 0x65, 0xbd, 0xd5, 0x2c, 0x9c, 0x5f, 0xe9, - 0x82, 0x8a, 0xba, 0xfa, 0x02, 0x7f, 0xa7, 0x81, 0x69, 0x59, 0x45, 0x13, 0x1e, 0x16, 0x78, 0x00, - 0x49, 0xbf, 0x03, 0x98, 0xc6, 0x11, 0x71, 0x54, 0x1f, 0xd9, 0x3b, 0xf8, 0xa8, 0xd3, 0x35, 0xf8, - 0x47, 0x0d, 0x8c, 0x1b, 0xc4, 0x23, 0x8e, 0x41, 0x9c, 0x2a, 0xf3, 0x75, 0xa1, 0x2f, 0x23, 0x8b, - 0xb4, 0xaf, 0x6b, 0x09, 0x08, 0xe1, 0x66, 0x49, 0xba, 0x39, 0x9e, 0x64, 0x9d, 0x34, 0x0b, 0xb3, - 0xb1, 0x6a, 0x92, 0x83, 0xda, 0xbc, 0x84, 0xef, 0x6b, 0x60, 0x32, 0xde, 0x00, 0x71, 0xa5, 0x5c, - 0x1a, 0x60, 0x1e, 0xf0, 0xf6, 0x75, 0xa5, 0x1d, 0x10, 0xa5, 0x3d, 0x80, 0xbf, 0xd7, 0x58, 0xa7, - 0x16, 0xbd, 0xfb, 0xa8, 0x5e, 0xe4, 0xb1, 0x7c, 0xab, 0xef, 0xb1, 0x54, 0x08, 0x22, 0x94, 0x57, - 0xe2, 0x56, 0x50, 0x71, 0x4e, 0x9a, 0x85, 0x99, 0x64, 0x24, 0x15, 0x03, 0x25, 0x3d, 0x84, 0x3f, - 0xd4, 0xc0, 0x38, 0x89, 0x3b, 0x6e, 0xaa, 0x3f, 0xda, 0x97, 0x20, 0x76, 0x6d, 0xe2, 0xc5, 0x4b, - 0x3d, 0xc1, 0xa2, 0xa8, 0x0d, 0x9b, 0x75, 0x90, 0xe4, 0x08, 0xdb, 0x9e, 0x45, 0xf4, 0xff, 0xeb, - 0x73, 0x07, 0xb9, 0x2e, 0xec, 0xa2, 0x08, 0x00, 0x5e, 0x01, 0x79, 0x27, 0xb4, 0x2c, 0xbc, 0x67, - 0x11, 0xfd, 0x31, 0xde, 0x8b, 0xa8, 0x91, 0xec, 0x96, 0xa4, 0x23, 0x25, 0x01, 0x6b, 0x60, 0xe1, - 0xe8, 0x65, 0xf5, 0xef, 0x49, 0x5d, 0x87, 0x86, 0xfa, 0x65, 0x6e, 0x65, 0xae, 0xd5, 0x2c, 0xcc, - 0xee, 0x76, 0x1f, 0x2b, 0xde, 0xd3, 0x06, 0x7c, 0x0d, 0x3c, 0x9c, 0x90, 0x59, 0xb7, 0xf7, 0x88, - 0x61, 0x10, 0x23, 0x7a, 0xb8, 0xe9, 0xff, 0x2f, 0x06, 0x97, 0xd1, 0x01, 0xdf, 0x4d, 0x0b, 0xa0, - 0xbb, 0x69, 0xc3, 0xeb, 0x60, 0x36, 0xc1, 0xde, 0x70, 0x82, 0x6d, 0xbf, 0x12, 0xf8, 0xa6, 0x53, - 0xd7, 0x17, 0xb9, 0xdd, 0xf3, 0xd1, 0x89, 0xdc, 0x4d, 0xf0, 0x50, 0x0f, 0x1d, 0xf8, 0x95, 0x36, - 0x6b, 0xfc, 0x13, 0x1a, 0xf6, 0x5e, 0x26, 0xc7, 0x54, 0x7f, 0x9c, 0x77, 0x27, 0x7c, 0xb3, 0x77, - 0x13, 0x74, 0xd4, 0x43, 0x1e, 0x7e, 0x19, 0x9c, 0x4b, 0x71, 0xd8, 0x13, 0x45, 0x7f, 0x42, 0xbc, - 0x35, 0x58, 0x3f, 0xbb, 0x1b, 0x11, 0x51, 0x37, 0x49, 0xf8, 0x45, 0x00, 0x13, 0xe4, 0x4d, 0xec, - 0x71, 0xfd, 0x27, 0xc5, 0xb3, 0x87, 0xed, 0xe8, 0xae, 0xa4, 0xa1, 0x2e, 0x72, 0x73, 0xec, 0x0d, - 0x9c, 0xaa, 0xa1, 0x70, 0x0a, 0x64, 0x0f, 0x88, 0xfc, 0xbf, 0x05, 0xc4, 0xfe, 0x84, 0x06, 0xc8, - 0x35, 0xb0, 0x15, 0x46, 0xcf, 0xf8, 0x3e, 0xdf, 0xbf, 0x48, 0x18, 0x7f, 0x21, 0xf3, 0xbc, 0x36, - 0xf7, 0x81, 0x06, 0x66, 0xbb, 0x97, 0xf6, 0x07, 0xea, 0xd6, 0x2f, 0x34, 0x30, 0xdd, 0x51, 0xc5, - 0xbb, 0x78, 0x74, 0xbb, 0xdd, 0xa3, 0xd7, 0xfa, 0x5d, 0x8e, 0x45, 0xfa, 0xf1, 0x1e, 0x34, 0xe9, - 0xde, 0x4f, 0x34, 0x30, 0x95, 0x2e, 0x8c, 0x0f, 0x32, 0x5e, 0xc5, 0x0f, 0x32, 0x60, 0xb6, 0x7b, - 0xeb, 0x0c, 0x7d, 0x35, 0x23, 0x18, 0xcc, 0xac, 0xa5, 0xdb, 0x5c, 0xf6, 0x5d, 0x0d, 0x8c, 0xdd, - 0x52, 0x72, 0xd1, 0x77, 0xed, 0xbe, 0x4f, 0x79, 0xa2, 0x9b, 0x28, 0x66, 0x50, 0x94, 0xc4, 0x2d, - 0xfe, 0x41, 0x03, 0x33, 0x5d, 0xaf, 0x58, 0x78, 0x19, 0x0c, 0x63, 0xcb, 0x72, 0x0f, 0xc5, 0xb0, - 0x2e, 0x31, 0x85, 0x5f, 0xe1, 0x54, 0x24, 0xb9, 0x89, 0xe8, 0x65, 0x3e, 0xab, 0xe8, 0x15, 0xff, - 0xa2, 0x81, 0x8b, 0x77, 0xcb, 0xc4, 0x07, 0xb2, 0xa5, 0x8b, 0x20, 0x2f, 0xdb, 0xe3, 0x63, 0xbe, - 0x9d, 0xb2, 0xd8, 0xc9, 0xa2, 0xc1, 0xff, 0x95, 0x4b, 0xfc, 0x55, 0xfc, 0x50, 0x03, 0x53, 0x15, - 0xe2, 0x37, 0xcc, 0x2a, 0x41, 0xa4, 0x46, 0x7c, 0xe2, 0x54, 0x09, 0x5c, 0x02, 0xa3, 0xfc, 0x83, - 0xb2, 0x87, 0xab, 0xd1, 0xc7, 0x91, 0x69, 0x19, 0xf2, 0xd1, 0xad, 0x88, 0x81, 0x62, 0x19, 0xf5, - 0x21, 0x25, 0xd3, 0xf3, 0x43, 0xca, 0x45, 0x30, 0xe4, 0xc5, 0xa3, 0xde, 0x3c, 0xe3, 0xf2, 0xe9, - 0x2e, 0xa7, 0x72, 0xae, 0xeb, 0x07, 0x7c, 0x7e, 0x95, 0x93, 0x5c, 0xd7, 0x0f, 0x10, 0xa7, 0x16, - 0xff, 0xaa, 0x81, 0x6e, 0xff, 0x74, 0x05, 0x2f, 0x88, 0x11, 0x5e, 0x62, 0x2e, 0x16, 0x8d, 0xef, - 0x60, 0x03, 0x8c, 0x50, 0xb1, 0x2a, 0x19, 0xf5, 0xed, 0xfb, 0x8c, 0x7a, 0x3a, 0x46, 0xa2, 0x77, - 0x88, 0xa8, 0x11, 0x18, 0x0b, 0x7c, 0x15, 0x97, 0x43, 0xc7, 0x90, 0x53, 0xdd, 0x71, 0x11, 0xf8, - 0xd5, 0x15, 0x41, 0x43, 0x8a, 0x5b, 0xbe, 0xfa, 0xd1, 0x9d, 0xf9, 0x33, 0x1f, 0xdf, 0x99, 0x3f, - 0xf3, 0xc9, 0x9d, 0xf9, 0x33, 0xdf, 0x6e, 0xcd, 0x6b, 0x1f, 0xb5, 0xe6, 0xb5, 0x8f, 0x5b, 0xf3, - 0xda, 0x27, 0xad, 0x79, 0xed, 0x1f, 0xad, 0x79, 0xed, 0xa7, 0xff, 0x9c, 0x3f, 0xf3, 0xf5, 0x11, - 0x89, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xe5, 0x77, 0xcb, 0x0a, 0x2d, 0x00, 0x00, + // 3022 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcb, 0x73, 0x23, 0x57, + 0xd5, 0x9f, 0x96, 0x2d, 0x5b, 0x3e, 0xb6, 0xc7, 0xf6, 0x9d, 0xb1, 0xd3, 0xe3, 0x4c, 0x2c, 0x8f, + 0xf2, 0x65, 0x3e, 0x27, 0x99, 0x91, 0x13, 0x93, 0x90, 0x90, 0x82, 0xa2, 0x2c, 0xdb, 0x13, 0x9c, + 0x8c, 0x1f, 0x5c, 0xcd, 0x24, 0x86, 0x3c, 0xdb, 0xea, 0x2b, 0xb9, 0xe3, 0x56, 0x77, 0x4f, 0xdf, + 0x6e, 0xd9, 0xae, 0x00, 0xc5, 0xa3, 0x52, 0x50, 0x14, 0x10, 0x8a, 0x64, 0x43, 0x15, 0x2c, 0x02, + 0xc5, 0x86, 0x05, 0x2c, 0xa0, 0xd8, 0xc0, 0x1f, 0x90, 0x65, 0x8a, 0x55, 0x16, 0x94, 0x20, 0x62, + 0xcb, 0x92, 0x2a, 0xaa, 0xbc, 0xa2, 0xee, 0xa3, 0x6f, 0xb7, 0x5a, 0xd2, 0xcc, 0x54, 0x46, 0xca, + 0xb0, 0xb3, 0xce, 0xeb, 0x77, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0x69, 0x43, 0xf5, 0xf0, 0x59, + 0x5a, 0xb4, 0xdc, 0xe5, 0xc3, 0x70, 0x9f, 0xf8, 0x0e, 0x09, 0x08, 0x5d, 0x6e, 0x10, 0xc7, 0x74, + 0xfd, 0x65, 0xc9, 0x30, 0x3c, 0x8b, 0x1c, 0x07, 0xc4, 0xa1, 0x96, 0xeb, 0xd0, 0xab, 0x86, 0x67, + 0x51, 0xe2, 0x37, 0x88, 0xbf, 0xec, 0x1d, 0xd6, 0x18, 0x8f, 0xb6, 0x0b, 0x2c, 0x37, 0x9e, 0xdc, + 0x27, 0x81, 0xf1, 0xe4, 0x72, 0x8d, 0x38, 0xc4, 0x37, 0x02, 0x62, 0x16, 0x3d, 0xdf, 0x0d, 0x5c, + 0xf4, 0x25, 0x61, 0xae, 0xd8, 0x26, 0xfd, 0x86, 0x32, 0x57, 0xf4, 0x0e, 0x6b, 0x8c, 0x47, 0xdb, + 0x05, 0x8a, 0xd2, 0xdc, 0xfc, 0xd5, 0x9a, 0x15, 0x1c, 0x84, 0xfb, 0xc5, 0x8a, 0x5b, 0x5f, 0xae, + 0xb9, 0x35, 0x77, 0x99, 0x5b, 0xdd, 0x0f, 0xab, 0xfc, 0x17, 0xff, 0xc1, 0xff, 0x12, 0x68, 0xf3, + 0x4f, 0xc5, 0xce, 0xd7, 0x8d, 0xca, 0x81, 0xe5, 0x10, 0xff, 0x24, 0xf6, 0xb8, 0x4e, 0x02, 0x63, + 0xb9, 0xd1, 0xe1, 0xe3, 0xfc, 0x72, 0x2f, 0x2d, 0x3f, 0x74, 0x02, 0xab, 0x4e, 0x3a, 0x14, 0x3e, + 0x7f, 0x27, 0x05, 0x5a, 0x39, 0x20, 0x75, 0x23, 0xad, 0x57, 0x38, 0xd5, 0x60, 0x66, 0xcd, 0x75, + 0x1a, 0xc4, 0x67, 0xab, 0xc4, 0xe4, 0x56, 0x48, 0x68, 0x80, 0x4a, 0x30, 0x14, 0x5a, 0xa6, 0xae, + 0x2d, 0x6a, 0x4b, 0x63, 0xa5, 0x27, 0x3e, 0x6c, 0xe6, 0xcf, 0xb4, 0x9a, 0xf9, 0xa1, 0x9b, 0x9b, + 0xeb, 0xa7, 0xcd, 0xfc, 0xa5, 0x5e, 0x48, 0xc1, 0x89, 0x47, 0x68, 0xf1, 0xe6, 0xe6, 0x3a, 0x66, + 0xca, 0xe8, 0x79, 0x98, 0x31, 0x09, 0xb5, 0x7c, 0x62, 0xae, 0xee, 0x6e, 0xbe, 0x24, 0xec, 0xeb, + 0x19, 0x6e, 0xf1, 0x82, 0xb4, 0x38, 0xb3, 0x9e, 0x16, 0xc0, 0x9d, 0x3a, 0x68, 0x0f, 0x46, 0xdd, + 0xfd, 0xb7, 0x48, 0x25, 0xa0, 0xfa, 0xd0, 0xe2, 0xd0, 0xd2, 0xf8, 0xca, 0xd5, 0x62, 0xbc, 0x83, + 0xca, 0x05, 0xbe, 0x6d, 0x72, 0xb1, 0x45, 0x6c, 0x1c, 0x6d, 0x44, 0x3b, 0x57, 0x9a, 0x92, 0x68, + 0xa3, 0x3b, 0xc2, 0x0a, 0x8e, 0xcc, 0x15, 0x7e, 0x9d, 0x01, 0x94, 0x5c, 0x3c, 0xf5, 0x5c, 0x87, + 0x92, 0xbe, 0xac, 0x9e, 0xc2, 0x74, 0x85, 0x5b, 0x0e, 0x88, 0x29, 0x71, 0xf5, 0xcc, 0xa7, 0xf1, + 0x5e, 0x97, 0xf8, 0xd3, 0x6b, 0x29, 0x73, 0xb8, 0x03, 0x00, 0xdd, 0x80, 0x11, 0x9f, 0xd0, 0xd0, + 0x0e, 0xf4, 0xa1, 0x45, 0x6d, 0x69, 0x7c, 0xe5, 0x4a, 0x4f, 0x28, 0x9e, 0xdf, 0x2c, 0xf9, 0x8a, + 0x8d, 0x27, 0x8b, 0xe5, 0xc0, 0x08, 0x42, 0x5a, 0x3a, 0x2b, 0x91, 0x46, 0x30, 0xb7, 0x81, 0xa5, + 0xad, 0xc2, 0x0f, 0x32, 0x30, 0x9d, 0x8c, 0x52, 0xc3, 0x22, 0x47, 0xe8, 0x08, 0x46, 0x7d, 0x91, + 0x2c, 0x3c, 0x4e, 0xe3, 0x2b, 0xbb, 0xc5, 0x7b, 0x3a, 0x56, 0xc5, 0x8e, 0x24, 0x2c, 0x8d, 0xb3, + 0x3d, 0x93, 0x3f, 0x70, 0x84, 0x86, 0xde, 0x86, 0x9c, 0x2f, 0x37, 0x8a, 0x67, 0xd3, 0xf8, 0xca, + 0x57, 0xfb, 0x88, 0x2c, 0x0c, 0x97, 0x26, 0x5a, 0xcd, 0x7c, 0x2e, 0xfa, 0x85, 0x15, 0x60, 0xe1, + 0xbd, 0x0c, 0x2c, 0xac, 0x85, 0x34, 0x70, 0xeb, 0x98, 0x50, 0x37, 0xf4, 0x2b, 0x64, 0xcd, 0xb5, + 0xc3, 0xba, 0xb3, 0x4e, 0xaa, 0x96, 0x63, 0x05, 0x2c, 0x5b, 0x17, 0x61, 0xd8, 0x31, 0xea, 0x44, + 0x66, 0xcf, 0x84, 0x8c, 0xe9, 0xf0, 0xb6, 0x51, 0x27, 0x98, 0x73, 0x98, 0x04, 0x4b, 0x16, 0x79, + 0x16, 0x94, 0xc4, 0x8d, 0x13, 0x8f, 0x60, 0xce, 0x41, 0x97, 0x61, 0xa4, 0xea, 0xfa, 0x75, 0x43, + 0xec, 0xe3, 0x58, 0xbc, 0x33, 0xd7, 0x38, 0x15, 0x4b, 0x2e, 0x7a, 0x1a, 0xc6, 0x4d, 0x42, 0x2b, + 0xbe, 0xe5, 0x31, 0x68, 0x7d, 0x98, 0x0b, 0x9f, 0x93, 0xc2, 0xe3, 0xeb, 0x31, 0x0b, 0x27, 0xe5, + 0xd0, 0x15, 0xc8, 0x79, 0xbe, 0xe5, 0xfa, 0x56, 0x70, 0xa2, 0x67, 0x17, 0xb5, 0xa5, 0x6c, 0x69, + 0x5a, 0xea, 0xe4, 0x76, 0x25, 0x1d, 0x2b, 0x09, 0xb4, 0x08, 0xb9, 0x17, 0xca, 0x3b, 0xdb, 0xbb, + 0x46, 0x70, 0xa0, 0x8f, 0x70, 0x84, 0x61, 0x26, 0x8d, 0x15, 0xb5, 0xf0, 0xb7, 0x0c, 0xe8, 0xe9, + 0xa8, 0x44, 0x21, 0x45, 0xd7, 0x20, 0x47, 0x03, 0x56, 0x71, 0x6a, 0x27, 0x32, 0x26, 0x8f, 0x45, + 0x60, 0x65, 0x49, 0x3f, 0x6d, 0xe6, 0xe7, 0x62, 0x8d, 0x88, 0xca, 0xe3, 0xa1, 0x74, 0xd1, 0x2f, + 0x35, 0x38, 0x77, 0x44, 0xf6, 0x0f, 0x5c, 0xf7, 0x70, 0xcd, 0xb6, 0x88, 0x13, 0xac, 0xb9, 0x4e, + 0xd5, 0xaa, 0xc9, 0x1c, 0xc0, 0xf7, 0x98, 0x03, 0x2f, 0x77, 0x5a, 0x2e, 0x3d, 0xd0, 0x6a, 0xe6, + 0xcf, 0x75, 0x61, 0xe0, 0x6e, 0x7e, 0xa0, 0x3d, 0xd0, 0x2b, 0xa9, 0x43, 0x22, 0x0b, 0x98, 0x28, + 0x5b, 0x63, 0xa5, 0x8b, 0xad, 0x66, 0x5e, 0x5f, 0xeb, 0x21, 0x83, 0x7b, 0x6a, 0x17, 0xbe, 0x37, + 0x94, 0x0e, 0x6f, 0x22, 0xdd, 0xde, 0x84, 0x1c, 0x3b, 0xc6, 0xa6, 0x11, 0x18, 0xf2, 0x20, 0x3e, + 0x71, 0x77, 0x87, 0x5e, 0xd4, 0x8c, 0x2d, 0x12, 0x18, 0x25, 0x24, 0x37, 0x04, 0x62, 0x1a, 0x56, + 0x56, 0xd1, 0x37, 0x61, 0x98, 0x7a, 0xa4, 0x22, 0x03, 0xfd, 0xca, 0xbd, 0x1e, 0xb6, 0x1e, 0x0b, + 0x29, 0x7b, 0xa4, 0x12, 0x9f, 0x05, 0xf6, 0x0b, 0x73, 0x58, 0xf4, 0x8e, 0x06, 0x23, 0x94, 0x17, + 0x28, 0x59, 0xd4, 0x5e, 0x1b, 0x94, 0x07, 0xa9, 0x2a, 0x28, 0x7e, 0x63, 0x09, 0x5e, 0xf8, 0x77, + 0x06, 0x2e, 0xf5, 0x52, 0x5d, 0x73, 0x1d, 0x53, 0x6c, 0xc7, 0xa6, 0x3c, 0xdb, 0x22, 0xd3, 0x9f, + 0x4e, 0x9e, 0xed, 0xd3, 0x66, 0xfe, 0x91, 0x3b, 0x1a, 0x48, 0x14, 0x81, 0x2f, 0xa8, 0x75, 0x8b, + 0x42, 0x71, 0xa9, 0xdd, 0xb1, 0xd3, 0x66, 0x7e, 0x4a, 0xa9, 0xb5, 0xfb, 0x8a, 0x1a, 0x80, 0x6c, + 0x83, 0x06, 0x37, 0x7c, 0xc3, 0xa1, 0xc2, 0xac, 0x55, 0x27, 0x32, 0x7c, 0x8f, 0xdd, 0x5d, 0x7a, + 0x30, 0x8d, 0xd2, 0xbc, 0x84, 0x44, 0xd7, 0x3b, 0xac, 0xe1, 0x2e, 0x08, 0xac, 0x6e, 0xf9, 0xc4, + 0xa0, 0xaa, 0x14, 0x25, 0x6e, 0x14, 0x46, 0xc5, 0x92, 0x8b, 0x1e, 0x85, 0xd1, 0x3a, 0xa1, 0xd4, + 0xa8, 0x11, 0x5e, 0x7f, 0xc6, 0xe2, 0x2b, 0x7a, 0x4b, 0x90, 0x71, 0xc4, 0x67, 0xfd, 0xc9, 0xc5, + 0x5e, 0x51, 0xbb, 0x6e, 0xd1, 0x00, 0xbd, 0xda, 0x71, 0x00, 0x8a, 0x77, 0xb7, 0x42, 0xa6, 0xcd, + 0xd3, 0x5f, 0x15, 0xbf, 0x88, 0x92, 0x48, 0xfe, 0x6f, 0x40, 0xd6, 0x0a, 0x48, 0x3d, 0xba, 0xbb, + 0x5f, 0x1e, 0x50, 0xee, 0x95, 0x26, 0xa5, 0x0f, 0xd9, 0x4d, 0x86, 0x86, 0x05, 0x68, 0xe1, 0x37, + 0x19, 0x78, 0xa8, 0x97, 0x0a, 0xbb, 0x50, 0x28, 0x8b, 0xb8, 0x67, 0x87, 0xbe, 0x61, 0xcb, 0x8c, + 0x53, 0x11, 0xdf, 0xe5, 0x54, 0x2c, 0xb9, 0xac, 0xe4, 0x53, 0xcb, 0xa9, 0x85, 0xb6, 0xe1, 0xcb, + 0x74, 0x52, 0xab, 0x2e, 0x4b, 0x3a, 0x56, 0x12, 0xa8, 0x08, 0x40, 0x0f, 0x5c, 0x3f, 0xe0, 0x18, + 0xb2, 0x7a, 0x9d, 0x65, 0x05, 0xa2, 0xac, 0xa8, 0x38, 0x21, 0xc1, 0x6e, 0xb4, 0x43, 0xcb, 0x31, + 0xe5, 0xae, 0xab, 0x53, 0xfc, 0xa2, 0xe5, 0x98, 0x98, 0x73, 0x18, 0xbe, 0x6d, 0xd1, 0x80, 0x51, + 0xe4, 0x96, 0xb7, 0x45, 0x9d, 0x4b, 0x2a, 0x09, 0x86, 0x5f, 0x61, 0x55, 0xdf, 0xf5, 0x2d, 0x42, + 0xf5, 0x91, 0x18, 0x7f, 0x4d, 0x51, 0x71, 0x42, 0xa2, 0xf0, 0xaf, 0x5c, 0xef, 0x24, 0x61, 0xa5, + 0x04, 0x3d, 0x0c, 0xd9, 0x9a, 0xef, 0x86, 0x9e, 0x8c, 0x92, 0x8a, 0xf6, 0xf3, 0x8c, 0x88, 0x05, + 0x8f, 0x65, 0x65, 0xa3, 0xad, 0x4d, 0x55, 0x59, 0x19, 0x35, 0xa7, 0x11, 0x1f, 0x7d, 0x47, 0x83, + 0xac, 0x23, 0x83, 0xc3, 0x52, 0xee, 0xd5, 0x01, 0xe5, 0x05, 0x0f, 0x6f, 0xec, 0xae, 0x88, 0xbc, + 0x40, 0x46, 0x4f, 0x41, 0x96, 0x56, 0x5c, 0x8f, 0xc8, 0xa8, 0x2f, 0x44, 0x42, 0x65, 0x46, 0x3c, + 0x6d, 0xe6, 0x27, 0x23, 0x73, 0x9c, 0x80, 0x85, 0x30, 0xfa, 0xbe, 0x06, 0xd0, 0x30, 0x6c, 0xcb, + 0x34, 0x78, 0xcb, 0x90, 0xe5, 0xee, 0xf7, 0x37, 0xad, 0x5f, 0x52, 0xe6, 0xc5, 0xa6, 0xc5, 0xbf, + 0x71, 0x02, 0x1a, 0xbd, 0xab, 0xc1, 0x04, 0x0d, 0xf7, 0x7d, 0xa9, 0x45, 0x79, 0x73, 0x31, 0xbe, + 0xf2, 0xb5, 0xbe, 0xfa, 0x52, 0x4e, 0x00, 0x94, 0xa6, 0x5b, 0xcd, 0xfc, 0x44, 0x92, 0x82, 0xdb, + 0x1c, 0x40, 0x3f, 0xd2, 0x20, 0xd7, 0x88, 0xee, 0xec, 0x51, 0x7e, 0xe0, 0x5f, 0x1f, 0xd0, 0xc6, + 0xca, 0x8c, 0x8a, 0x4f, 0x81, 0xea, 0x03, 0x94, 0x07, 0xe8, 0xcf, 0x1a, 0xe8, 0x86, 0x29, 0x0a, + 0xbc, 0x61, 0xef, 0xfa, 0x96, 0x13, 0x10, 0x5f, 0xf4, 0x9b, 0x54, 0xcf, 0x71, 0xf7, 0xfa, 0x7b, + 0x17, 0xa6, 0x7b, 0xd9, 0xd2, 0xa2, 0xf4, 0x4e, 0x5f, 0xed, 0xe1, 0x06, 0xee, 0xe9, 0x20, 0x4f, + 0xb4, 0xb8, 0xa5, 0xd1, 0xc7, 0x06, 0x90, 0x68, 0x71, 0x2f, 0x25, 0xab, 0x43, 0xdc, 0x41, 0x25, + 0xa0, 0xd1, 0x0e, 0xcc, 0x7a, 0x3e, 0xe1, 0x00, 0x37, 0x9d, 0x43, 0xc7, 0x3d, 0x72, 0xae, 0x59, + 0xc4, 0x36, 0xa9, 0x0e, 0x8b, 0xda, 0x52, 0xae, 0x74, 0xa1, 0xd5, 0xcc, 0xcf, 0xee, 0x76, 0x13, + 0xc0, 0xdd, 0xf5, 0x0a, 0xef, 0x0e, 0xa5, 0x5f, 0x01, 0xe9, 0x2e, 0x02, 0xbd, 0x2f, 0x56, 0x2f, + 0x62, 0x43, 0x75, 0x8d, 0xef, 0xd6, 0x9b, 0x03, 0x4a, 0x26, 0xd5, 0x06, 0xc4, 0x9d, 0x9c, 0x22, + 0x51, 0x9c, 0xf0, 0x03, 0xfd, 0x5c, 0x83, 0x49, 0xa3, 0x52, 0x21, 0x5e, 0x40, 0x4c, 0x51, 0xdc, + 0x33, 0x9f, 0x41, 0xfd, 0x9a, 0x95, 0x5e, 0x4d, 0xae, 0x26, 0xa1, 0x71, 0xbb, 0x27, 0xe8, 0x39, + 0x38, 0x4b, 0x03, 0xd7, 0x27, 0x66, 0xaa, 0x6d, 0x46, 0xad, 0x66, 0xfe, 0x6c, 0xb9, 0x8d, 0x83, + 0x53, 0x92, 0x85, 0xbf, 0x67, 0x21, 0x7f, 0x87, 0xa3, 0x76, 0x17, 0x0f, 0xb3, 0xcb, 0x30, 0xc2, + 0x97, 0x6b, 0xf2, 0xa8, 0xe4, 0x12, 0xad, 0x20, 0xa7, 0x62, 0xc9, 0x65, 0x17, 0x05, 0xc3, 0x67, + 0xed, 0xcb, 0x10, 0x17, 0x54, 0x17, 0x45, 0x59, 0x90, 0x71, 0xc4, 0x47, 0x2b, 0x00, 0x26, 0xf1, + 0x7c, 0xc2, 0x2e, 0x2b, 0x53, 0x1f, 0xe5, 0xd2, 0x6a, 0x93, 0xd6, 0x15, 0x07, 0x27, 0xa4, 0xd0, + 0x35, 0x40, 0xd1, 0x2f, 0xcb, 0x75, 0x5e, 0x36, 0x7c, 0xc7, 0x72, 0x6a, 0x7a, 0x8e, 0xbb, 0x3d, + 0xc7, 0xba, 0xb1, 0xf5, 0x0e, 0x2e, 0xee, 0xa2, 0x81, 0xde, 0x86, 0x11, 0x31, 0xf4, 0xe1, 0x37, + 0xc4, 0x00, 0xab, 0x3c, 0xf0, 0x18, 0x71, 0x28, 0x2c, 0x21, 0x3b, 0xab, 0x7b, 0xf6, 0x7e, 0x57, + 0xf7, 0xdb, 0x96, 0xd3, 0x91, 0xff, 0xf1, 0x72, 0x5a, 0xf8, 0x8f, 0x96, 0xae, 0x39, 0x89, 0xa5, + 0x96, 0x2b, 0x86, 0x4d, 0xd0, 0x3a, 0x4c, 0xb3, 0x17, 0x13, 0x26, 0x9e, 0x6d, 0x55, 0x0c, 0xca, + 0x1f, 0xec, 0x22, 0xd9, 0xd5, 0x0c, 0xa9, 0x9c, 0xe2, 0xe3, 0x0e, 0x0d, 0xf4, 0x02, 0x20, 0xf1, + 0x8a, 0x68, 0xb3, 0x23, 0x1a, 0x22, 0xf5, 0x1e, 0x28, 0x77, 0x48, 0xe0, 0x2e, 0x5a, 0x68, 0x0d, + 0x66, 0x6c, 0x63, 0x9f, 0xd8, 0x65, 0x62, 0x93, 0x4a, 0xe0, 0xfa, 0xdc, 0x94, 0x18, 0x69, 0xcc, + 0xb6, 0x9a, 0xf9, 0x99, 0xeb, 0x69, 0x26, 0xee, 0x94, 0x2f, 0x5c, 0x4a, 0x1f, 0xed, 0xe4, 0xc2, + 0xc5, 0xdb, 0xec, 0x83, 0x0c, 0xcc, 0xf7, 0xce, 0x0c, 0xf4, 0xdd, 0xf8, 0x09, 0x29, 0x5e, 0x08, + 0xaf, 0x0f, 0x2a, 0x0b, 0xe5, 0x1b, 0x12, 0x3a, 0xdf, 0x8f, 0xe8, 0x5b, 0xac, 0x5d, 0x33, 0xec, + 0x68, 0x68, 0xf5, 0xda, 0xc0, 0x5c, 0x60, 0x20, 0xa5, 0x31, 0xd1, 0x09, 0x1a, 0x36, 0x6f, 0xfc, + 0x0c, 0x9b, 0x14, 0x7e, 0xab, 0xa5, 0xa7, 0x08, 0xf1, 0x09, 0x46, 0x3f, 0xd6, 0x60, 0xca, 0xf5, + 0x88, 0xb3, 0xba, 0xbb, 0xf9, 0xd2, 0xe7, 0xc4, 0x49, 0x96, 0xa1, 0xda, 0xbe, 0x47, 0x3f, 0x5f, + 0x28, 0xef, 0x6c, 0x0b, 0x83, 0xbb, 0xbe, 0xeb, 0xd1, 0xd2, 0xb9, 0x56, 0x33, 0x3f, 0xb5, 0xd3, + 0x0e, 0x85, 0xd3, 0xd8, 0x85, 0x3a, 0xcc, 0x6e, 0x1c, 0x07, 0xc4, 0x77, 0x0c, 0x7b, 0xdd, 0xad, + 0x84, 0x75, 0xe2, 0x04, 0xc2, 0xd1, 0xd4, 0xc4, 0x4b, 0xbb, 0xcb, 0x89, 0xd7, 0x43, 0x30, 0x14, + 0xfa, 0xb6, 0xcc, 0xe2, 0x71, 0x35, 0xd1, 0xc5, 0xd7, 0x31, 0xa3, 0x17, 0x2e, 0xc1, 0x30, 0xf3, + 0x13, 0x5d, 0x80, 0x21, 0xdf, 0x38, 0xe2, 0x56, 0x27, 0x4a, 0xa3, 0x4c, 0x04, 0x1b, 0x47, 0x98, + 0xd1, 0x0a, 0x7f, 0x5a, 0x84, 0xa9, 0xd4, 0x5a, 0xd0, 0x3c, 0x64, 0xd4, 0x98, 0x18, 0xa4, 0xd1, + 0xcc, 0xe6, 0x3a, 0xce, 0x58, 0x26, 0x7a, 0x46, 0x15, 0x5f, 0x01, 0x9a, 0x57, 0x77, 0x09, 0xa7, + 0xb2, 0xfe, 0x3c, 0x36, 0xc7, 0x1c, 0x89, 0x0a, 0x27, 0xf3, 0x81, 0x54, 0xe5, 0x29, 0x11, 0x3e, + 0x90, 0x2a, 0x66, 0xb4, 0x4f, 0x3b, 0xee, 0x8b, 0xe6, 0x8d, 0xd9, 0xbb, 0x98, 0x37, 0x8e, 0xdc, + 0x76, 0xde, 0xf8, 0x30, 0x64, 0x03, 0x2b, 0xb0, 0x09, 0xbf, 0xc8, 0x12, 0xcf, 0xa8, 0x1b, 0x8c, + 0x88, 0x05, 0x0f, 0xbd, 0x05, 0xa3, 0x26, 0xa9, 0x1a, 0xa1, 0x1d, 0xf0, 0x3b, 0x6b, 0x7c, 0x65, + 0xad, 0x0f, 0x29, 0x24, 0x86, 0xc1, 0xeb, 0xc2, 0x2e, 0x8e, 0x00, 0xd0, 0x23, 0x30, 0x5a, 0x37, + 0x8e, 0xad, 0x7a, 0x58, 0xe7, 0x0d, 0xa6, 0x26, 0xc4, 0xb6, 0x04, 0x09, 0x47, 0x3c, 0x56, 0x19, + 0xc9, 0x71, 0xc5, 0x0e, 0xa9, 0xd5, 0x20, 0x92, 0x29, 0x9b, 0x3f, 0x55, 0x19, 0x37, 0x52, 0x7c, + 0xdc, 0xa1, 0xc1, 0xc1, 0x2c, 0x87, 0x2b, 0x8f, 0x27, 0xc0, 0x04, 0x09, 0x47, 0xbc, 0x76, 0x30, + 0x29, 0x3f, 0xd1, 0x0b, 0x4c, 0x2a, 0x77, 0x68, 0xa0, 0xc7, 0x61, 0xac, 0x6e, 0x1c, 0x5f, 0x27, + 0x4e, 0x2d, 0x38, 0xd0, 0x27, 0x17, 0xb5, 0xa5, 0xa1, 0xd2, 0x64, 0xab, 0x99, 0x1f, 0xdb, 0x8a, + 0x88, 0x38, 0xe6, 0x73, 0x61, 0xcb, 0x91, 0xc2, 0x67, 0x13, 0xc2, 0x11, 0x11, 0xc7, 0x7c, 0xd6, + 0xbd, 0x78, 0x46, 0xc0, 0x0e, 0x97, 0x3e, 0xd5, 0xfe, 0xcc, 0xdd, 0x15, 0x64, 0x1c, 0xf1, 0xd1, + 0x12, 0xe4, 0xea, 0xc6, 0x31, 0x1f, 0x49, 0xe8, 0xd3, 0xdc, 0x2c, 0x1f, 0x8c, 0x6f, 0x49, 0x1a, + 0x56, 0x5c, 0x2e, 0x69, 0x39, 0x42, 0x72, 0x26, 0x21, 0x29, 0x69, 0x58, 0x71, 0x59, 0x12, 0x87, + 0x8e, 0x75, 0x2b, 0x24, 0x42, 0x18, 0xf1, 0xc8, 0xa8, 0x24, 0xbe, 0x19, 0xb3, 0x70, 0x52, 0x0e, + 0x15, 0x01, 0xea, 0xa1, 0x1d, 0x58, 0x9e, 0x4d, 0x76, 0xaa, 0xfa, 0x39, 0x1e, 0x7f, 0xde, 0xf4, + 0x6f, 0x29, 0x2a, 0x4e, 0x48, 0x20, 0x02, 0xc3, 0xc4, 0x09, 0xeb, 0xfa, 0x79, 0x7e, 0xb1, 0xf7, + 0x25, 0x05, 0xd5, 0xc9, 0xd9, 0x70, 0xc2, 0x3a, 0xe6, 0xe6, 0xd1, 0x33, 0x30, 0x59, 0x37, 0x8e, + 0x59, 0x39, 0x20, 0x7e, 0x60, 0x11, 0xaa, 0xcf, 0xf2, 0xc5, 0xcf, 0xb0, 0x6e, 0x77, 0x2b, 0xc9, + 0xc0, 0xed, 0x72, 0x5c, 0xd1, 0x72, 0x12, 0x8a, 0x73, 0x09, 0xc5, 0x24, 0x03, 0xb7, 0xcb, 0xb1, + 0x48, 0xfb, 0xe4, 0x56, 0x68, 0xf9, 0xc4, 0xd4, 0x1f, 0xe0, 0x0d, 0xb2, 0xfc, 0x58, 0x21, 0x68, + 0x58, 0x71, 0x51, 0x23, 0x9a, 0x5d, 0xe9, 0xfc, 0x18, 0xde, 0xec, 0x6f, 0x25, 0xdf, 0xf1, 0x57, + 0x7d, 0xdf, 0x38, 0x11, 0x37, 0x4d, 0x72, 0x6a, 0x85, 0x28, 0x64, 0x0d, 0xdb, 0xde, 0xa9, 0xea, + 0x17, 0x78, 0xec, 0xfb, 0x7d, 0x83, 0xa8, 0xaa, 0xb3, 0xca, 0x40, 0xb0, 0xc0, 0x62, 0xa0, 0xae, + 0xc3, 0x52, 0x63, 0x7e, 0xb0, 0xa0, 0x3b, 0x0c, 0x04, 0x0b, 0x2c, 0xbe, 0x52, 0xe7, 0x64, 0xa7, + 0xaa, 0x3f, 0x38, 0xe0, 0x95, 0x32, 0x10, 0x2c, 0xb0, 0x90, 0x05, 0x43, 0x8e, 0x1b, 0xe8, 0x17, + 0x07, 0x72, 0x3d, 0xf3, 0x0b, 0x67, 0xdb, 0x0d, 0x30, 0xc3, 0x40, 0x3f, 0xd3, 0x00, 0xbc, 0x38, + 0x45, 0x1f, 0xea, 0xcb, 0x48, 0x24, 0x05, 0x59, 0x8c, 0x73, 0x7b, 0xc3, 0x09, 0xfc, 0x93, 0xf8, + 0x79, 0x94, 0x38, 0x03, 0x09, 0x2f, 0xd0, 0xaf, 0x34, 0x38, 0x9f, 0x6c, 0x93, 0x95, 0x7b, 0x0b, + 0x3c, 0x22, 0x37, 0xfa, 0x9d, 0xe6, 0x25, 0xd7, 0xb5, 0x4b, 0x7a, 0xab, 0x99, 0x3f, 0xbf, 0xda, + 0x05, 0x15, 0x77, 0xf5, 0x05, 0xfd, 0x4e, 0x83, 0x19, 0x59, 0x45, 0x13, 0x1e, 0xe6, 0x79, 0x00, + 0x49, 0xbf, 0x03, 0x98, 0xc6, 0x11, 0x71, 0x54, 0x1f, 0xd9, 0x3b, 0xf8, 0xb8, 0xd3, 0x35, 0xf4, + 0x47, 0x0d, 0x26, 0x4c, 0xe2, 0x11, 0xc7, 0x24, 0x4e, 0x85, 0xf9, 0xba, 0xd8, 0x97, 0x91, 0x45, + 0xda, 0xd7, 0xf5, 0x04, 0x84, 0x70, 0xb3, 0x28, 0xdd, 0x9c, 0x48, 0xb2, 0x4e, 0x9b, 0xf9, 0xb9, + 0x58, 0x35, 0xc9, 0xc1, 0x6d, 0x5e, 0xa2, 0xf7, 0x34, 0x98, 0x8a, 0x37, 0x40, 0x5c, 0x29, 0x97, + 0x06, 0x98, 0x07, 0xbc, 0x7d, 0x5d, 0x6d, 0x07, 0xc4, 0x69, 0x0f, 0xd0, 0xef, 0x35, 0xd6, 0xa9, + 0x45, 0xef, 0x3e, 0xaa, 0x17, 0x78, 0x2c, 0xdf, 0xe8, 0x7b, 0x2c, 0x15, 0x82, 0x08, 0xe5, 0x95, + 0xb8, 0x15, 0x54, 0x9c, 0xd3, 0x66, 0x7e, 0x36, 0x19, 0x49, 0xc5, 0xc0, 0x49, 0x0f, 0xd1, 0x0f, + 0x35, 0x98, 0x20, 0x71, 0xc7, 0x4d, 0xf5, 0x87, 0xfb, 0x12, 0xc4, 0xae, 0x4d, 0xbc, 0x78, 0xa9, + 0x27, 0x58, 0x14, 0xb7, 0x61, 0xb3, 0x0e, 0x92, 0x1c, 0x1b, 0x75, 0xcf, 0x26, 0xfa, 0xff, 0xf5, + 0xb9, 0x83, 0xdc, 0x10, 0x76, 0x71, 0x04, 0x80, 0xae, 0x40, 0xce, 0x09, 0x6d, 0xdb, 0xd8, 0xb7, + 0x89, 0xfe, 0x08, 0xef, 0x45, 0xd4, 0x48, 0x76, 0x5b, 0xd2, 0xb1, 0x92, 0x40, 0x55, 0x58, 0x3c, + 0x7e, 0x51, 0xfd, 0x7b, 0x52, 0xd7, 0xa1, 0xa1, 0x7e, 0x99, 0x5b, 0x99, 0x6f, 0x35, 0xf3, 0x73, + 0x7b, 0xdd, 0xc7, 0x8a, 0x77, 0xb4, 0x81, 0x5e, 0x81, 0x07, 0x13, 0x32, 0x1b, 0xf5, 0x7d, 0x62, + 0x9a, 0xc4, 0x8c, 0x1e, 0x6e, 0xfa, 0xff, 0x8b, 0xc1, 0x65, 0x74, 0xc0, 0xf7, 0xd2, 0x02, 0xf8, + 0x76, 0xda, 0xe8, 0x3a, 0xcc, 0x25, 0xd8, 0x9b, 0x4e, 0xb0, 0xe3, 0x97, 0x03, 0xdf, 0x72, 0x6a, + 0xfa, 0x12, 0xb7, 0x7b, 0x3e, 0x3a, 0x91, 0x7b, 0x09, 0x1e, 0xee, 0xa1, 0x83, 0xbe, 0xd2, 0x66, + 0x8d, 0x7f, 0x42, 0x33, 0xbc, 0x17, 0xc9, 0x09, 0xd5, 0x1f, 0xe5, 0xdd, 0x09, 0xdf, 0xec, 0xbd, + 0x04, 0x1d, 0xf7, 0x90, 0x47, 0x5f, 0x86, 0x73, 0x29, 0x0e, 0x7b, 0xa2, 0xe8, 0x8f, 0x89, 0xb7, + 0x06, 0xeb, 0x67, 0xf7, 0x22, 0x22, 0xee, 0x26, 0x89, 0xbe, 0x08, 0x28, 0x41, 0xde, 0x32, 0x3c, + 0xae, 0xff, 0xb8, 0x78, 0xf6, 0xb0, 0x1d, 0xdd, 0x93, 0x34, 0xdc, 0x45, 0x6e, 0x9e, 0xbd, 0x81, + 0x53, 0x35, 0x14, 0x4d, 0xc3, 0xd0, 0x21, 0x91, 0xff, 0xb7, 0x80, 0xd9, 0x9f, 0xc8, 0x84, 0x6c, + 0xc3, 0xb0, 0xc3, 0xe8, 0x19, 0xdf, 0xe7, 0xfb, 0x17, 0x0b, 0xe3, 0xcf, 0x65, 0x9e, 0xd5, 0xe6, + 0xdf, 0xd7, 0x60, 0xae, 0x7b, 0x69, 0xbf, 0xaf, 0x6e, 0xfd, 0x42, 0x83, 0x99, 0x8e, 0x2a, 0xde, + 0xc5, 0xa3, 0x5b, 0xed, 0x1e, 0xbd, 0xd2, 0xef, 0x72, 0x2c, 0xd2, 0x8f, 0xf7, 0xa0, 0x49, 0xf7, + 0x7e, 0xa2, 0xc1, 0x74, 0xba, 0x30, 0xde, 0xcf, 0x78, 0x15, 0xde, 0xcf, 0xc0, 0x5c, 0xf7, 0xd6, + 0x19, 0xf9, 0x6a, 0x46, 0x30, 0x98, 0x59, 0x4b, 0xb7, 0xb9, 0xec, 0x3b, 0x1a, 0x8c, 0xbf, 0xa5, + 0xe4, 0xa2, 0xef, 0xda, 0x7d, 0x9f, 0xf2, 0x44, 0x37, 0x51, 0xcc, 0xa0, 0x38, 0x89, 0x5b, 0xf8, + 0x83, 0x06, 0xb3, 0x5d, 0xaf, 0x58, 0x74, 0x19, 0x46, 0x0c, 0xdb, 0x76, 0x8f, 0xc4, 0xb0, 0x2e, + 0x31, 0x85, 0x5f, 0xe5, 0x54, 0x2c, 0xb9, 0x89, 0xe8, 0x65, 0x3e, 0xab, 0xe8, 0x15, 0xfe, 0xa2, + 0xc1, 0xc5, 0xdb, 0x65, 0xe2, 0x7d, 0xd9, 0xd2, 0x25, 0xc8, 0xc9, 0xf6, 0xf8, 0x84, 0x6f, 0xa7, + 0x2c, 0x76, 0xb2, 0x68, 0xf0, 0x7f, 0xe5, 0x12, 0x7f, 0x15, 0x3e, 0xd0, 0x60, 0xba, 0x4c, 0xfc, + 0x86, 0x55, 0x21, 0x98, 0x54, 0x89, 0x4f, 0x9c, 0x0a, 0x41, 0xcb, 0x30, 0xc6, 0x3f, 0x28, 0x7b, + 0x46, 0x25, 0xfa, 0x38, 0x32, 0x23, 0x43, 0x3e, 0xb6, 0x1d, 0x31, 0x70, 0x2c, 0xa3, 0x3e, 0xa4, + 0x64, 0x7a, 0x7e, 0x48, 0xb9, 0x08, 0xc3, 0x5e, 0x3c, 0xea, 0xcd, 0x31, 0x2e, 0x9f, 0xee, 0x72, + 0x2a, 0xe7, 0xba, 0x7e, 0xc0, 0xe7, 0x57, 0x59, 0xc9, 0x75, 0xfd, 0x00, 0x73, 0x6a, 0xe1, 0xaf, + 0x1a, 0x74, 0xfb, 0xa7, 0x2b, 0x74, 0x41, 0x8c, 0xf0, 0x12, 0x73, 0xb1, 0x68, 0x7c, 0x87, 0x1a, + 0x30, 0x4a, 0xc5, 0xaa, 0x64, 0xd4, 0x77, 0xee, 0x31, 0xea, 0xe9, 0x18, 0x89, 0xde, 0x21, 0xa2, + 0x46, 0x60, 0x2c, 0xf0, 0x15, 0xa3, 0x14, 0x3a, 0xa6, 0x9c, 0xea, 0x4e, 0x88, 0xc0, 0xaf, 0xad, + 0x0a, 0x1a, 0x56, 0xdc, 0xd2, 0xd5, 0x0f, 0x3f, 0x59, 0x38, 0xf3, 0xd1, 0x27, 0x0b, 0x67, 0x3e, + 0xfe, 0x64, 0xe1, 0xcc, 0xb7, 0x5b, 0x0b, 0xda, 0x87, 0xad, 0x05, 0xed, 0xa3, 0xd6, 0x82, 0xf6, + 0x71, 0x6b, 0x41, 0xfb, 0x47, 0x6b, 0x41, 0xfb, 0xe9, 0x3f, 0x17, 0xce, 0x7c, 0x7d, 0x54, 0xe2, + 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x26, 0x4f, 0x67, 0x24, 0x0a, 0x2d, 0x00, 0x00, } func (m *ConversionRequest) Marshal() (dAtA []byte, err error) { @@ -3850,10 +3850,7 @@ func (m *ConversionRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4002,10 +3999,7 @@ func (m *ConversionResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4127,10 +4121,7 @@ func (m *ConversionReview) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4359,10 +4350,7 @@ func (m *CustomResourceColumnDefinition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4512,10 +4500,7 @@ func (m *CustomResourceConversion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4664,10 +4649,7 @@ func (m *CustomResourceDefinition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4878,10 +4860,7 @@ func (m *CustomResourceDefinitionCondition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4998,10 +4977,7 @@ func (m *CustomResourceDefinitionList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5243,10 +5219,7 @@ func (m *CustomResourceDefinitionNames) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5622,10 +5595,7 @@ func (m *CustomResourceDefinitionSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5774,10 +5744,7 @@ func (m *CustomResourceDefinitionStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6058,10 +6025,7 @@ func (m *CustomResourceDefinitionVersion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6208,10 +6172,7 @@ func (m *CustomResourceSubresourceScale) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6261,10 +6222,7 @@ func (m *CustomResourceSubresourceStatus) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6386,10 +6344,7 @@ func (m *CustomResourceSubresources) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6475,10 +6430,7 @@ func (m *CustomResourceValidation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6592,10 +6544,7 @@ func (m *ExternalDocumentation) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6679,10 +6628,7 @@ func (m *JSON) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7593,7 +7539,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7758,7 +7704,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7887,7 +7833,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -8052,7 +7998,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -8320,10 +8266,7 @@ func (m *JSONSchemaProps) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8443,10 +8386,7 @@ func (m *JSONSchemaPropsOrArray) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8552,10 +8492,7 @@ func (m *JSONSchemaPropsOrBool) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8673,10 +8610,7 @@ func (m *JSONSchemaPropsOrStringArray) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8843,10 +8777,7 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8999,10 +8930,7 @@ func (m *WebhookClientConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto index 40635aff3..e738f423c 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto @@ -280,6 +280,8 @@ message CustomResourceDefinitionSpec { message CustomResourceDefinitionStatus { // conditions indicate state for particular aspects of a CustomResourceDefinition // +optional + // +listType=map + // +listMapKey=type repeated CustomResourceDefinitionCondition conditions = 1; // acceptedNames are the names that are actually being used to serve discovery. diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go index 806c68aa6..671869b9f 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types.go @@ -361,6 +361,8 @@ type CustomResourceDefinitionCondition struct { type CustomResourceDefinitionStatus struct { // conditions indicate state for particular aspects of a CustomResourceDefinition // +optional + // +listType=map + // +listMapKey=type Conditions []CustomResourceDefinitionCondition `json:"conditions" protobuf:"bytes,1,opt,name=conditions"` // acceptedNames are the names that are actually being used to serve discovery. diff --git a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go index e25dd1e7a..32ae5e994 100644 --- a/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go +++ b/constraint/vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go @@ -1409,7 +1409,7 @@ func validateAPIApproval(newCRD, oldCRD *apiextensions.CustomResourceDefinition, var oldApprovalState *apihelpers.APIApprovalState if oldCRD != nil { t, _ := apihelpers.GetAPIApprovalState(oldCRD.Annotations) - oldApprovalState = &t + oldApprovalState = &t // +k8s:verify-mutation:reason=clone } newApprovalState, reason := apihelpers.GetAPIApprovalState(newCRD.Annotations) diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS b/constraint/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS index d18a17885..4ba4022b6 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS +++ b/constraint/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS @@ -11,8 +11,6 @@ reviewers: - caesarxuchao - mikedanese - liggitt -- nikhiljindal -- gmarek - erictune - saad-ali - janetkuo diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS b/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS index 68b8d353c..f929e061d 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS +++ b/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS @@ -10,12 +10,9 @@ reviewers: - caesarxuchao - mikedanese - liggitt -- nikhiljindal -- gmarek - janetkuo - ncdc - dims - krousey - resouer - mfojtik -- jianhuiz diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go b/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go index 343a6f550..00874f89c 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go @@ -57,7 +57,7 @@ func SetStatusCondition(conditions *[]metav1.Condition, newCondition metav1.Cond // RemoveStatusCondition removes the corresponding conditionType from conditions. // conditions must be non-nil. func RemoveStatusCondition(conditions *[]metav1.Condition, conditionType string) { - if conditions == nil { + if conditions == nil || len(*conditions) == 0 { return } newConditions := make([]metav1.Condition, 0, len(*conditions)-1) diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS b/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS index 7ac0fe11a..15bded17a 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS +++ b/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS @@ -10,4 +10,3 @@ reviewers: - saad-ali - janetkuo - xiang90 -- mbohlool diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go b/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go index f89ca163c..3e0cdb10d 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go @@ -166,7 +166,7 @@ func (m *Quantity) Unmarshal(data []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go b/constraint/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go index 889ec69aa..3e234eb11 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/api/validation/objectmeta.go @@ -180,9 +180,7 @@ func ValidateObjectMetaAccessor(meta metav1.Object, requiresNamespace bool, name allErrs = append(allErrs, field.Invalid(fldPath.Child("clusterName"), meta.GetClusterName(), msg)) } } - for _, entry := range meta.GetManagedFields() { - allErrs = append(allErrs, v1validation.ValidateFieldManager(entry.Manager, fldPath.Child("fieldManager"))...) - } + allErrs = append(allErrs, ValidateNonnegativeField(meta.GetGeneration(), fldPath.Child("generation"))...) allErrs = append(allErrs, v1validation.ValidateLabels(meta.GetLabels(), fldPath.Child("labels"))...) allErrs = append(allErrs, ValidateAnnotations(meta.GetAnnotations(), fldPath.Child("annotations"))...) @@ -248,9 +246,6 @@ func ValidateObjectMetaAccessorUpdate(newMeta, oldMeta metav1.Object, fldPath *f allErrs = append(allErrs, field.Invalid(fldPath.Child("generation"), newMeta.GetGeneration(), "must not be decremented")) } - for _, entry := range newMeta.GetManagedFields() { - allErrs = append(allErrs, v1validation.ValidateFieldManager(entry.Manager, fldPath.Child("fieldManager"))...) - } allErrs = append(allErrs, ValidateImmutableField(newMeta.GetName(), oldMeta.GetName(), fldPath.Child("name"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.GetNamespace(), oldMeta.GetNamespace(), fldPath.Child("namespace"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.GetUID(), oldMeta.GetUID(), fldPath.Child("uid"))...) diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go index ae39b74eb..a59ac7126 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go @@ -52,7 +52,6 @@ func addToGroupVersion(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &ListOptions{}, &metav1.GetOptions{}, - &metav1.ExportOptions{}, &metav1.DeleteOptions{}, &metav1.CreateOptions{}, &metav1.UpdateOptions{}, diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS index 40018601c..579af62ba 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS @@ -8,8 +8,6 @@ reviewers: - brendandburns - caesarxuchao - liggitt -- nikhiljindal -- gmarek - erictune - davidopp - sttts @@ -20,11 +18,8 @@ reviewers: - ncdc - soltysh - dims -- madhusudancs - hongchaodeng - krousey - mml -- mbohlool - therc - kevin-wangzefeng -- jianhuiz diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go index e74a51099..55945bada 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go @@ -189,10 +189,38 @@ func (m *APIVersions) XXX_DiscardUnknown() { var xxx_messageInfo_APIVersions proto.InternalMessageInfo +func (m *ApplyOptions) Reset() { *m = ApplyOptions{} } +func (*ApplyOptions) ProtoMessage() {} +func (*ApplyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{5} +} +func (m *ApplyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplyOptions.Merge(m, src) +} +func (m *ApplyOptions) XXX_Size() int { + return m.Size() +} +func (m *ApplyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ApplyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplyOptions proto.InternalMessageInfo + func (m *Condition) Reset() { *m = Condition{} } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{5} + return fileDescriptor_cf52fa777ced5367, []int{6} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -220,7 +248,7 @@ var xxx_messageInfo_Condition proto.InternalMessageInfo func (m *CreateOptions) Reset() { *m = CreateOptions{} } func (*CreateOptions) ProtoMessage() {} func (*CreateOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{6} + return fileDescriptor_cf52fa777ced5367, []int{7} } func (m *CreateOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -248,7 +276,7 @@ var xxx_messageInfo_CreateOptions proto.InternalMessageInfo func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } func (*DeleteOptions) ProtoMessage() {} func (*DeleteOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{7} + return fileDescriptor_cf52fa777ced5367, []int{8} } func (m *DeleteOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +304,7 @@ var xxx_messageInfo_DeleteOptions proto.InternalMessageInfo func (m *Duration) Reset() { *m = Duration{} } func (*Duration) ProtoMessage() {} func (*Duration) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{8} + return fileDescriptor_cf52fa777ced5367, []int{9} } func (m *Duration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -301,34 +329,6 @@ func (m *Duration) XXX_DiscardUnknown() { var xxx_messageInfo_Duration proto.InternalMessageInfo -func (m *ExportOptions) Reset() { *m = ExportOptions{} } -func (*ExportOptions) ProtoMessage() {} -func (*ExportOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{9} -} -func (m *ExportOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ExportOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ExportOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExportOptions.Merge(m, src) -} -func (m *ExportOptions) XXX_Size() int { - return m.Size() -} -func (m *ExportOptions) XXX_DiscardUnknown() { - xxx_messageInfo_ExportOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_ExportOptions proto.InternalMessageInfo - func (m *FieldsV1) Reset() { *m = FieldsV1{} } func (*FieldsV1) ProtoMessage() {} func (*FieldsV1) Descriptor() ([]byte, []int) { @@ -1277,11 +1277,11 @@ func init() { proto.RegisterType((*APIResource)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIResource") proto.RegisterType((*APIResourceList)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIResourceList") proto.RegisterType((*APIVersions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIVersions") + proto.RegisterType((*ApplyOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ApplyOptions") proto.RegisterType((*Condition)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Condition") proto.RegisterType((*CreateOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.CreateOptions") proto.RegisterType((*DeleteOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions") proto.RegisterType((*Duration)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Duration") - proto.RegisterType((*ExportOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ExportOptions") proto.RegisterType((*FieldsV1)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.FieldsV1") proto.RegisterType((*GetOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GetOptions") proto.RegisterType((*GroupKind)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupKind") @@ -1326,184 +1326,183 @@ func init() { } var fileDescriptor_cf52fa777ced5367 = []byte{ - // 2832 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0xcd, 0x6f, 0x23, 0x57, - 0x3d, 0x63, 0xc7, 0x89, 0xfd, 0x73, 0x9c, 0x8f, 0xb7, 0x59, 0xf0, 0x06, 0x11, 0xa7, 0x53, 0xb4, - 0xda, 0x42, 0xeb, 0x34, 0x4b, 0xa9, 0xb6, 0x5b, 0x5a, 0x88, 0xe3, 0x64, 0x1b, 0x9a, 0x34, 0xd1, - 0xcb, 0xee, 0x02, 0xa5, 0x42, 0x9d, 0x78, 0x5e, 0x9c, 0x21, 0xe3, 0x19, 0xf7, 0xbd, 0x71, 0xb2, - 0x86, 0x03, 0x3d, 0x80, 0x00, 0x09, 0xaa, 0x1e, 0x11, 0x07, 0xd4, 0x0a, 0xfe, 0x02, 0x2e, 0xf0, - 0x07, 0x20, 0xd1, 0x63, 0x25, 0x2e, 0x95, 0x40, 0x56, 0x37, 0x1c, 0x38, 0x22, 0xae, 0xb9, 0x80, - 0xde, 0xc7, 0xcc, 0xbc, 0xf1, 0xc7, 0x66, 0xdc, 0x2d, 0x15, 0x37, 0xcf, 0xef, 0xfb, 0xbd, 0xf7, - 0x7b, 0xbf, 0xaf, 0x67, 0xd8, 0x3d, 0xb9, 0xc5, 0xaa, 0x8e, 0xbf, 0x7a, 0xd2, 0x39, 0x24, 0xd4, - 0x23, 0x01, 0x61, 0xab, 0xa7, 0xc4, 0xb3, 0x7d, 0xba, 0xaa, 0x10, 0x56, 0xdb, 0x69, 0x59, 0x8d, - 0x63, 0xc7, 0x23, 0xb4, 0xbb, 0xda, 0x3e, 0x69, 0x72, 0x00, 0x5b, 0x6d, 0x91, 0xc0, 0x5a, 0x3d, - 0x5d, 0x5b, 0x6d, 0x12, 0x8f, 0x50, 0x2b, 0x20, 0x76, 0xb5, 0x4d, 0xfd, 0xc0, 0x47, 0x5f, 0x92, - 0x5c, 0x55, 0x9d, 0xab, 0xda, 0x3e, 0x69, 0x72, 0x00, 0xab, 0x72, 0xae, 0xea, 0xe9, 0xda, 0xd2, - 0x33, 0x4d, 0x27, 0x38, 0xee, 0x1c, 0x56, 0x1b, 0x7e, 0x6b, 0xb5, 0xe9, 0x37, 0xfd, 0x55, 0xc1, - 0x7c, 0xd8, 0x39, 0x12, 0x5f, 0xe2, 0x43, 0xfc, 0x92, 0x42, 0x97, 0x46, 0x9a, 0x42, 0x3b, 0x5e, - 0xe0, 0xb4, 0x48, 0xbf, 0x15, 0x4b, 0xcf, 0x5f, 0xc6, 0xc0, 0x1a, 0xc7, 0xa4, 0x65, 0xf5, 0xf3, - 0x99, 0x7f, 0xc9, 0x42, 0x7e, 0x7d, 0x7f, 0xfb, 0x0e, 0xf5, 0x3b, 0x6d, 0xb4, 0x02, 0x93, 0x9e, - 0xd5, 0x22, 0x65, 0x63, 0xc5, 0xb8, 0x51, 0xa8, 0xcd, 0x7c, 0xd0, 0xab, 0x4c, 0x9c, 0xf7, 0x2a, - 0x93, 0xaf, 0x59, 0x2d, 0x82, 0x05, 0x06, 0xb9, 0x90, 0x3f, 0x25, 0x94, 0x39, 0xbe, 0xc7, 0xca, - 0x99, 0x95, 0xec, 0x8d, 0xe2, 0xcd, 0x97, 0xab, 0x69, 0xd6, 0x5f, 0x15, 0x0a, 0xee, 0x4b, 0xd6, - 0x2d, 0x9f, 0xd6, 0x1d, 0xd6, 0xf0, 0x4f, 0x09, 0xed, 0xd6, 0xe6, 0x95, 0x96, 0xbc, 0x42, 0x32, - 0x1c, 0x69, 0x40, 0x3f, 0x31, 0x60, 0xbe, 0x4d, 0xc9, 0x11, 0xa1, 0x94, 0xd8, 0x0a, 0x5f, 0xce, - 0xae, 0x18, 0x9f, 0x82, 0xda, 0xb2, 0x52, 0x3b, 0xbf, 0xdf, 0x27, 0x1f, 0x0f, 0x68, 0x44, 0xbf, - 0x33, 0x60, 0x89, 0x11, 0x7a, 0x4a, 0xe8, 0xba, 0x6d, 0x53, 0xc2, 0x58, 0xad, 0xbb, 0xe1, 0x3a, - 0xc4, 0x0b, 0x36, 0xb6, 0xeb, 0x98, 0x95, 0x27, 0xc5, 0x3e, 0x7c, 0x23, 0x9d, 0x41, 0x07, 0xa3, - 0xe4, 0xd4, 0x4c, 0x65, 0xd1, 0xd2, 0x48, 0x12, 0x86, 0x1f, 0x61, 0x86, 0x79, 0x04, 0x33, 0xe1, - 0x41, 0xee, 0x38, 0x2c, 0x40, 0xf7, 0x61, 0xaa, 0xc9, 0x3f, 0x58, 0xd9, 0x10, 0x06, 0x56, 0xd3, - 0x19, 0x18, 0xca, 0xa8, 0xcd, 0x2a, 0x7b, 0xa6, 0xc4, 0x27, 0xc3, 0x4a, 0x9a, 0xf9, 0x8b, 0x49, - 0x28, 0xae, 0xef, 0x6f, 0x63, 0xc2, 0xfc, 0x0e, 0x6d, 0x90, 0x14, 0x4e, 0x73, 0x0b, 0x66, 0x98, - 0xe3, 0x35, 0x3b, 0xae, 0x45, 0x39, 0xb4, 0x3c, 0x25, 0x28, 0x17, 0x15, 0xe5, 0xcc, 0x81, 0x86, - 0xc3, 0x09, 0x4a, 0x74, 0x13, 0x80, 0x4b, 0x60, 0x6d, 0xab, 0x41, 0xec, 0x72, 0x66, 0xc5, 0xb8, - 0x91, 0xaf, 0x21, 0xc5, 0x07, 0xaf, 0x45, 0x18, 0xac, 0x51, 0xa1, 0x27, 0x21, 0x27, 0x2c, 0x2d, - 0xe7, 0x85, 0x9a, 0x92, 0x22, 0xcf, 0x89, 0x65, 0x60, 0x89, 0x43, 0x4f, 0xc1, 0xb4, 0xf2, 0xb2, - 0x72, 0x41, 0x90, 0xcd, 0x29, 0xb2, 0xe9, 0xd0, 0x0d, 0x42, 0x3c, 0x5f, 0xdf, 0x89, 0xe3, 0xd9, - 0xc2, 0xef, 0xb4, 0xf5, 0xbd, 0xea, 0x78, 0x36, 0x16, 0x18, 0xb4, 0x03, 0xb9, 0x53, 0x42, 0x0f, - 0xb9, 0x27, 0x70, 0xd7, 0xfc, 0x4a, 0xba, 0x8d, 0xbe, 0xcf, 0x59, 0x6a, 0x05, 0x6e, 0x9a, 0xf8, - 0x89, 0xa5, 0x10, 0x54, 0x05, 0x60, 0xc7, 0x3e, 0x0d, 0xc4, 0xf2, 0xca, 0xb9, 0x95, 0xec, 0x8d, - 0x42, 0x6d, 0x96, 0xaf, 0xf7, 0x20, 0x82, 0x62, 0x8d, 0x82, 0xd3, 0x37, 0xac, 0x80, 0x34, 0x7d, - 0xea, 0x10, 0x56, 0x9e, 0x8e, 0xe9, 0x37, 0x22, 0x28, 0xd6, 0x28, 0xd0, 0xb7, 0x00, 0xb1, 0xc0, - 0xa7, 0x56, 0x93, 0xa8, 0xa5, 0xbe, 0x62, 0xb1, 0xe3, 0x32, 0x88, 0xd5, 0x2d, 0xa9, 0xd5, 0xa1, - 0x83, 0x01, 0x0a, 0x3c, 0x84, 0xcb, 0xfc, 0x83, 0x01, 0x73, 0x9a, 0x2f, 0x08, 0xbf, 0xbb, 0x05, - 0x33, 0x4d, 0xed, 0xd6, 0x29, 0xbf, 0x88, 0x4e, 0x5b, 0xbf, 0x91, 0x38, 0x41, 0x89, 0x08, 0x14, - 0xa8, 0x92, 0x14, 0x46, 0x97, 0xb5, 0xd4, 0x4e, 0x1b, 0xda, 0x10, 0x6b, 0xd2, 0x80, 0x0c, 0xc7, - 0x92, 0xcd, 0x7f, 0x1a, 0xc2, 0x81, 0xc3, 0x78, 0x83, 0x6e, 0x68, 0x31, 0xcd, 0x10, 0xdb, 0x37, - 0x33, 0x22, 0x1e, 0x5d, 0x12, 0x08, 0x32, 0xff, 0x17, 0x81, 0xe0, 0x76, 0xfe, 0xd7, 0xef, 0x55, - 0x26, 0xde, 0xfe, 0xfb, 0xca, 0x84, 0xf9, 0x9f, 0x0c, 0x14, 0x36, 0x7c, 0xcf, 0x76, 0x02, 0xe5, - 0xc8, 0x41, 0xb7, 0x3d, 0x70, 0x51, 0xef, 0x76, 0xdb, 0x04, 0x0b, 0x0c, 0x7a, 0x01, 0xa6, 0x58, - 0x60, 0x05, 0x1d, 0x26, 0xae, 0x5a, 0xa1, 0xf6, 0x44, 0x18, 0x02, 0x0e, 0x04, 0xf4, 0xa2, 0x57, - 0x99, 0x8b, 0xc4, 0x49, 0x10, 0x56, 0x0c, 0xdc, 0xab, 0xfc, 0x43, 0x61, 0x94, 0x7d, 0x47, 0xa6, - 0x98, 0x30, 0x56, 0x67, 0x63, 0xaf, 0xda, 0x1b, 0xa0, 0xc0, 0x43, 0xb8, 0xd0, 0x29, 0x20, 0xd7, - 0x62, 0xc1, 0x5d, 0x6a, 0x79, 0x4c, 0xe8, 0xba, 0xeb, 0xb4, 0x88, 0xba, 0x5c, 0x5f, 0x4e, 0xb7, - 0xbb, 0x9c, 0x23, 0xd6, 0xbb, 0x33, 0x20, 0x0d, 0x0f, 0xd1, 0x80, 0xae, 0xc3, 0x14, 0x25, 0x16, - 0xf3, 0xbd, 0x72, 0x4e, 0x2c, 0x3f, 0x8a, 0x80, 0x58, 0x40, 0xb1, 0xc2, 0xf2, 0xe0, 0xd1, 0x22, - 0x8c, 0x59, 0xcd, 0x30, 0x94, 0x45, 0xc1, 0x63, 0x57, 0x82, 0x71, 0x88, 0x37, 0x5b, 0x50, 0xda, - 0xa0, 0xc4, 0x0a, 0xc8, 0x5e, 0x3b, 0x10, 0x2e, 0x64, 0xc2, 0x94, 0x4d, 0xbb, 0xb8, 0xe3, 0x29, - 0x57, 0x03, 0x2e, 0xbf, 0x2e, 0x20, 0x58, 0x61, 0xf8, 0x0d, 0x3a, 0x72, 0x88, 0x6b, 0xef, 0x5a, - 0x9e, 0xd5, 0x24, 0x54, 0x45, 0x9e, 0xc8, 0xaf, 0xb7, 0x34, 0x1c, 0x4e, 0x50, 0x9a, 0x3f, 0xcb, - 0x42, 0xa9, 0x4e, 0x5c, 0x12, 0xeb, 0xdb, 0x02, 0xd4, 0xa4, 0x56, 0x83, 0xec, 0x13, 0xea, 0xf8, - 0xf6, 0x01, 0x69, 0xf8, 0x9e, 0xcd, 0x84, 0x0b, 0x64, 0x6b, 0x9f, 0xe3, 0x7b, 0x73, 0x67, 0x00, - 0x8b, 0x87, 0x70, 0x20, 0x17, 0x4a, 0x6d, 0x2a, 0x7e, 0x8b, 0xfd, 0x92, 0x1e, 0x52, 0xbc, 0xf9, - 0xd5, 0x74, 0xc7, 0xb1, 0xaf, 0xb3, 0xd6, 0x16, 0xce, 0x7b, 0x95, 0x52, 0x02, 0x84, 0x93, 0xc2, - 0xd1, 0x37, 0x61, 0xde, 0xa7, 0xed, 0x63, 0xcb, 0xab, 0x93, 0x36, 0xf1, 0x6c, 0xe2, 0x05, 0x4c, - 0xec, 0x42, 0xbe, 0xb6, 0xc8, 0x73, 0xf6, 0x5e, 0x1f, 0x0e, 0x0f, 0x50, 0xa3, 0xd7, 0x61, 0xa1, - 0x4d, 0xfd, 0xb6, 0xd5, 0x14, 0x2e, 0xb5, 0xef, 0xbb, 0x4e, 0xa3, 0x2b, 0x5c, 0xa8, 0x50, 0x7b, - 0xfa, 0xbc, 0x57, 0x59, 0xd8, 0xef, 0x47, 0x5e, 0xf4, 0x2a, 0x57, 0xc4, 0xd6, 0x71, 0x48, 0x8c, - 0xc4, 0x83, 0x62, 0xb4, 0x33, 0xcc, 0x8d, 0x3a, 0x43, 0x73, 0x1b, 0xf2, 0xf5, 0x8e, 0xf2, 0xe7, - 0x97, 0x20, 0x6f, 0xab, 0xdf, 0x6a, 0xe7, 0xc3, 0x8b, 0x15, 0xd1, 0x5c, 0xf4, 0x2a, 0x25, 0x5e, - 0xa6, 0x55, 0x43, 0x00, 0x8e, 0x58, 0xcc, 0x37, 0xa0, 0xb4, 0xf9, 0xa0, 0xed, 0xd3, 0x20, 0x3c, - 0xd3, 0xeb, 0x30, 0x45, 0x04, 0x40, 0x48, 0xcb, 0xc7, 0x7e, 0x2a, 0xc9, 0xb0, 0xc2, 0xf2, 0x4c, - 0x48, 0x1e, 0x58, 0x8d, 0x40, 0x25, 0xce, 0x28, 0x13, 0x6e, 0x72, 0x20, 0x96, 0x38, 0xf3, 0x3a, - 0xe4, 0x85, 0x43, 0xb1, 0xfb, 0x6b, 0x68, 0x1e, 0xb2, 0xd8, 0x3a, 0x13, 0x52, 0x67, 0x70, 0x96, - 0x5a, 0x67, 0x5a, 0x2c, 0xd9, 0x03, 0xb8, 0x43, 0x22, 0x13, 0xd6, 0x61, 0x2e, 0x0c, 0xa8, 0xc9, - 0x38, 0xff, 0x79, 0xa5, 0x64, 0x0e, 0x27, 0xd1, 0xb8, 0x9f, 0xde, 0x7c, 0x03, 0x0a, 0x22, 0x17, - 0xf0, 0x44, 0x1a, 0x27, 0x6d, 0xe3, 0x11, 0x49, 0x3b, 0xcc, 0xc4, 0x99, 0x51, 0x99, 0x58, 0x33, - 0xd7, 0x85, 0x92, 0xe4, 0x0d, 0xcb, 0x94, 0x54, 0x1a, 0x9e, 0x86, 0x7c, 0x68, 0xa6, 0xd2, 0x12, - 0x95, 0xa7, 0xa1, 0x20, 0x1c, 0x51, 0x68, 0xda, 0x8e, 0x21, 0x91, 0xd7, 0xd2, 0x29, 0xd3, 0x6a, - 0x90, 0xcc, 0xa3, 0x6b, 0x10, 0x4d, 0xd3, 0x8f, 0xa1, 0x3c, 0xaa, 0xa6, 0x7d, 0x8c, 0xcc, 0x9b, - 0xde, 0x14, 0xf3, 0x1d, 0x03, 0xe6, 0x75, 0x49, 0xe9, 0x8f, 0x2f, 0xbd, 0x92, 0xcb, 0x6b, 0x2e, - 0x6d, 0x47, 0x7e, 0x6b, 0xc0, 0x62, 0x62, 0x69, 0x63, 0x9d, 0xf8, 0x18, 0x46, 0xe9, 0xce, 0x91, - 0x1d, 0xc3, 0x39, 0xfe, 0x9a, 0x81, 0xd2, 0x8e, 0x75, 0x48, 0xdc, 0x03, 0xe2, 0x92, 0x46, 0xe0, - 0x53, 0xf4, 0x23, 0x28, 0xb6, 0xac, 0xa0, 0x71, 0x2c, 0xa0, 0x61, 0x7d, 0x5e, 0x4f, 0x17, 0x4a, - 0x13, 0x92, 0xaa, 0xbb, 0xb1, 0x98, 0x4d, 0x2f, 0xa0, 0xdd, 0xda, 0x15, 0x65, 0x52, 0x51, 0xc3, - 0x60, 0x5d, 0x9b, 0x68, 0xaa, 0xc4, 0xf7, 0xe6, 0x83, 0x36, 0x2f, 0x1e, 0xc6, 0xef, 0xe5, 0x12, - 0x26, 0x60, 0xf2, 0x56, 0xc7, 0xa1, 0xa4, 0x45, 0xbc, 0x20, 0x6e, 0xaa, 0x76, 0xfb, 0xe4, 0xe3, - 0x01, 0x8d, 0x4b, 0x2f, 0xc3, 0x7c, 0xbf, 0xf1, 0x3c, 0xfe, 0x9c, 0x90, 0xae, 0x3c, 0x2f, 0xcc, - 0x7f, 0xa2, 0x45, 0xc8, 0x9d, 0x5a, 0x6e, 0x47, 0xdd, 0x46, 0x2c, 0x3f, 0x6e, 0x67, 0x6e, 0x19, - 0xe6, 0xef, 0x0d, 0x28, 0x8f, 0x32, 0x04, 0x7d, 0x51, 0x13, 0x54, 0x2b, 0x2a, 0xab, 0xb2, 0xaf, - 0x92, 0xae, 0x94, 0xba, 0x09, 0x79, 0xbf, 0xcd, 0xab, 0x0d, 0x9f, 0xaa, 0x53, 0x7f, 0x2a, 0x3c, - 0xc9, 0x3d, 0x05, 0xbf, 0xe8, 0x55, 0xae, 0x26, 0xc4, 0x87, 0x08, 0x1c, 0xb1, 0xf2, 0x3c, 0x20, - 0xec, 0xe1, 0xb9, 0x29, 0xca, 0x03, 0xf7, 0x05, 0x04, 0x2b, 0x8c, 0xf9, 0x27, 0x03, 0x26, 0x45, - 0x59, 0xfc, 0x06, 0xe4, 0xf9, 0xfe, 0xd9, 0x56, 0x60, 0x09, 0xbb, 0x52, 0x37, 0x64, 0x9c, 0x7b, - 0x97, 0x04, 0x56, 0xec, 0x6d, 0x21, 0x04, 0x47, 0x12, 0x11, 0x86, 0x9c, 0x13, 0x90, 0x56, 0x78, - 0x90, 0xcf, 0x8c, 0x14, 0xad, 0xc6, 0x01, 0x55, 0x6c, 0x9d, 0x6d, 0x3e, 0x08, 0x88, 0xc7, 0x0f, - 0x23, 0xbe, 0x1a, 0xdb, 0x5c, 0x06, 0x96, 0xa2, 0xcc, 0x7f, 0x1b, 0x10, 0xa9, 0xe2, 0xce, 0xcf, - 0x88, 0x7b, 0xb4, 0xe3, 0x78, 0x27, 0x6a, 0x5b, 0x23, 0x73, 0x0e, 0x14, 0x1c, 0x47, 0x14, 0xc3, - 0xd2, 0x43, 0x66, 0xbc, 0xf4, 0xc0, 0x15, 0x36, 0x7c, 0x2f, 0x70, 0xbc, 0xce, 0xc0, 0x6d, 0xdb, - 0x50, 0x70, 0x1c, 0x51, 0xf0, 0x32, 0x87, 0x92, 0x96, 0xe5, 0x78, 0x8e, 0xd7, 0xe4, 0x8b, 0xd8, - 0xf0, 0x3b, 0x5e, 0x20, 0xf2, 0xbd, 0x2a, 0x73, 0xf0, 0x00, 0x16, 0x0f, 0xe1, 0x30, 0xff, 0x38, - 0x09, 0x45, 0xbe, 0xe6, 0x30, 0xcf, 0xbd, 0x08, 0x25, 0x57, 0xf7, 0x02, 0xb5, 0xf6, 0xab, 0xca, - 0x94, 0xe4, 0xbd, 0xc6, 0x49, 0x5a, 0xce, 0x2c, 0xaa, 0xb3, 0x88, 0x39, 0x93, 0x64, 0xde, 0xd2, - 0x91, 0x38, 0x49, 0xcb, 0xa3, 0xd7, 0x19, 0xbf, 0x1f, 0xaa, 0xee, 0x89, 0x8e, 0xe8, 0xdb, 0x1c, - 0x88, 0x25, 0x0e, 0xed, 0xc2, 0x15, 0xcb, 0x75, 0xfd, 0x33, 0x01, 0xac, 0xf9, 0xfe, 0x49, 0xcb, - 0xa2, 0x27, 0x4c, 0xb4, 0xb4, 0xf9, 0xda, 0x17, 0x14, 0xcb, 0x95, 0xf5, 0x41, 0x12, 0x3c, 0x8c, - 0x6f, 0xd8, 0xb1, 0x4d, 0x8e, 0x79, 0x6c, 0xc7, 0xb0, 0xd8, 0x07, 0x12, 0xb7, 0x5c, 0xf5, 0x97, - 0xcf, 0x29, 0x39, 0x8b, 0x78, 0x08, 0xcd, 0xc5, 0x08, 0x38, 0x1e, 0x2a, 0x11, 0xdd, 0x86, 0x59, - 0xee, 0xc9, 0x7e, 0x27, 0x08, 0xab, 0xda, 0x9c, 0x38, 0x6e, 0x74, 0xde, 0xab, 0xcc, 0xde, 0x4d, - 0x60, 0x70, 0x1f, 0x25, 0xdf, 0x5c, 0xd7, 0x69, 0x39, 0x41, 0x79, 0x5a, 0xb0, 0x44, 0x9b, 0xbb, - 0xc3, 0x81, 0x58, 0xe2, 0x12, 0x1e, 0x98, 0xbf, 0xcc, 0x03, 0xcd, 0xdf, 0x64, 0x01, 0xc9, 0x32, - 0xdc, 0x96, 0xf5, 0x94, 0x0c, 0x69, 0xbc, 0x57, 0x50, 0x65, 0xbc, 0xd1, 0xd7, 0x2b, 0xa8, 0x0a, - 0x3e, 0xc4, 0xa3, 0x5d, 0x28, 0xc8, 0xd0, 0x12, 0x5f, 0x97, 0x55, 0x45, 0x5c, 0xd8, 0x0b, 0x11, - 0x17, 0xbd, 0xca, 0x52, 0x42, 0x4d, 0x84, 0x11, 0x7d, 0x5c, 0x2c, 0x01, 0xdd, 0x04, 0xb0, 0xda, - 0x8e, 0x3e, 0x35, 0x2b, 0xc4, 0xb3, 0x93, 0xb8, 0xff, 0xc5, 0x1a, 0x15, 0x7a, 0x05, 0x26, 0x83, - 0x4f, 0xd6, 0x6b, 0xe5, 0x45, 0x2b, 0xc9, 0x3b, 0x2b, 0x21, 0x81, 0x6b, 0x17, 0xfe, 0xcc, 0xb8, - 0x59, 0xaa, 0x4d, 0x8a, 0xb4, 0x6f, 0x45, 0x18, 0xac, 0x51, 0xa1, 0xef, 0x40, 0xfe, 0x48, 0x95, - 0xa2, 0xe2, 0x60, 0x52, 0x87, 0xc8, 0xb0, 0x80, 0x95, 0x8d, 0x7b, 0xf8, 0x85, 0x23, 0x69, 0xe6, - 0x5b, 0x50, 0xd8, 0x75, 0x1a, 0xd4, 0x17, 0x6d, 0xde, 0x53, 0x30, 0xcd, 0x12, 0x7d, 0x50, 0x74, - 0x24, 0xa1, 0xbb, 0x84, 0x78, 0xee, 0x27, 0x9e, 0xe5, 0xf9, 0xb2, 0xdb, 0xc9, 0xc5, 0x7e, 0xf2, - 0x1a, 0x07, 0x62, 0x89, 0xbb, 0xbd, 0xc8, 0x33, 0xfd, 0xcf, 0xdf, 0xaf, 0x4c, 0xbc, 0xfb, 0x7e, - 0x65, 0xe2, 0xbd, 0xf7, 0x55, 0xd6, 0xbf, 0x00, 0x80, 0xbd, 0xc3, 0x1f, 0x90, 0x86, 0x8c, 0x9f, - 0xa9, 0xa6, 0x64, 0xe1, 0x70, 0x56, 0x4c, 0xc9, 0x32, 0x7d, 0xd5, 0x9b, 0x86, 0xc3, 0x09, 0x4a, - 0xb4, 0x0a, 0x85, 0x68, 0xfe, 0xa5, 0x0e, 0x7a, 0x21, 0x74, 0x9c, 0x68, 0x48, 0x86, 0x63, 0x9a, - 0x44, 0x30, 0x9f, 0xbc, 0x34, 0x98, 0xd7, 0x20, 0xdb, 0x71, 0x6c, 0xd5, 0x13, 0x3f, 0x1b, 0x26, - 0xd3, 0x7b, 0xdb, 0xf5, 0x8b, 0x5e, 0xe5, 0x89, 0x51, 0x63, 0xe7, 0xa0, 0xdb, 0x26, 0xac, 0x7a, - 0x6f, 0xbb, 0x8e, 0x39, 0xf3, 0xb0, 0xc8, 0x32, 0x35, 0x66, 0x64, 0xb9, 0x09, 0xd0, 0x8c, 0x27, - 0x0b, 0xf2, 0xe2, 0x46, 0x1e, 0xa5, 0x4d, 0x14, 0x34, 0x2a, 0xc4, 0x60, 0xa1, 0xc1, 0xdb, 0x6f, - 0xd5, 0xe1, 0xb3, 0xc0, 0x6a, 0xc9, 0xb9, 0xe0, 0x78, 0xce, 0x7d, 0x4d, 0xa9, 0x59, 0xd8, 0xe8, - 0x17, 0x86, 0x07, 0xe5, 0x23, 0x1f, 0x16, 0x6c, 0xd5, 0x48, 0xc6, 0x4a, 0x0b, 0x63, 0x2b, 0xbd, - 0xca, 0x15, 0xd6, 0xfb, 0x05, 0xe1, 0x41, 0xd9, 0xe8, 0xfb, 0xb0, 0x14, 0x02, 0x07, 0xbb, 0x79, - 0x11, 0x79, 0xb3, 0xb5, 0xe5, 0xf3, 0x5e, 0x65, 0xa9, 0x3e, 0x92, 0x0a, 0x3f, 0x42, 0x02, 0xb2, - 0x61, 0xca, 0x95, 0x95, 0x6a, 0x51, 0x54, 0x17, 0x5f, 0x4f, 0xb7, 0x8a, 0xd8, 0xfb, 0xab, 0x7a, - 0x85, 0x1a, 0x75, 0xab, 0xaa, 0x38, 0x55, 0xb2, 0xd1, 0x03, 0x28, 0x5a, 0x9e, 0xe7, 0x07, 0x96, - 0x9c, 0x2f, 0xcc, 0x08, 0x55, 0xeb, 0x63, 0xab, 0x5a, 0x8f, 0x65, 0xf4, 0x55, 0xc4, 0x1a, 0x06, - 0xeb, 0xaa, 0xd0, 0x19, 0xcc, 0xf9, 0x67, 0x1e, 0xa1, 0x98, 0x1c, 0x11, 0x4a, 0xbc, 0x06, 0x61, - 0xe5, 0x92, 0xd0, 0xfe, 0x5c, 0x4a, 0xed, 0x09, 0xe6, 0xd8, 0xa5, 0x93, 0x70, 0x86, 0xfb, 0xb5, - 0xa0, 0x2a, 0x0f, 0x92, 0x9e, 0xe5, 0x3a, 0x3f, 0x24, 0x94, 0x95, 0x67, 0xe3, 0xd1, 0xed, 0x56, - 0x04, 0xc5, 0x1a, 0x05, 0xfa, 0x1a, 0x14, 0x1b, 0x6e, 0x87, 0x05, 0x44, 0xce, 0xd1, 0xe7, 0xc4, - 0x0d, 0x8a, 0xd6, 0xb7, 0x11, 0xa3, 0xb0, 0x4e, 0x87, 0x3a, 0x50, 0x6a, 0xe9, 0x29, 0xa3, 0xbc, - 0x20, 0x56, 0x77, 0x2b, 0xdd, 0xea, 0x06, 0x93, 0x5a, 0x5c, 0xc1, 0x24, 0x70, 0x38, 0xa9, 0x65, - 0xe9, 0x05, 0x28, 0x7e, 0xc2, 0xe2, 0x9e, 0x37, 0x07, 0xfd, 0xe7, 0x38, 0x56, 0x73, 0xf0, 0xe7, - 0x0c, 0xcc, 0x26, 0x77, 0xbf, 0x2f, 0x1d, 0xe6, 0x52, 0xa5, 0xc3, 0xb0, 0x0d, 0x35, 0x46, 0x8e, - 0xfe, 0xc3, 0xb0, 0x9e, 0x1d, 0x19, 0xd6, 0x55, 0xf4, 0x9c, 0x7c, 0x9c, 0xe8, 0x59, 0x05, 0xe0, - 0x75, 0x06, 0xf5, 0x5d, 0x97, 0x50, 0x11, 0x38, 0xf3, 0x6a, 0xc4, 0x1f, 0x41, 0xb1, 0x46, 0xc1, - 0xab, 0xe1, 0x43, 0xd7, 0x6f, 0x9c, 0x88, 0x2d, 0x08, 0x2f, 0xbd, 0x08, 0x99, 0x79, 0x59, 0x0d, - 0xd7, 0x06, 0xb0, 0x78, 0x08, 0x87, 0xd9, 0x85, 0xab, 0xfb, 0x16, 0x0d, 0x1c, 0xcb, 0x8d, 0x2f, - 0x98, 0x68, 0x37, 0xde, 0x1c, 0x68, 0x66, 0x9e, 0x1d, 0xf7, 0xa2, 0xc6, 0x9b, 0x1f, 0xc3, 0xe2, - 0x86, 0xc6, 0xfc, 0x9b, 0x01, 0xd7, 0x86, 0xea, 0xfe, 0x0c, 0x9a, 0xa9, 0x37, 0x93, 0xcd, 0xd4, - 0x8b, 0x29, 0x67, 0x9c, 0xc3, 0xac, 0x1d, 0xd1, 0x5a, 0x4d, 0x43, 0x6e, 0x9f, 0x17, 0xb1, 0xe6, - 0xaf, 0x0c, 0x98, 0x11, 0xbf, 0xc6, 0x99, 0x0f, 0x57, 0x20, 0x77, 0xe4, 0x87, 0x23, 0xaa, 0xbc, - 0x7c, 0x42, 0xda, 0xe2, 0x00, 0x2c, 0xe1, 0x8f, 0x31, 0x40, 0x7e, 0xc7, 0x80, 0xe4, 0x64, 0x16, - 0xbd, 0x2c, 0xfd, 0xd7, 0x88, 0x46, 0xa7, 0x63, 0xfa, 0xee, 0x4b, 0xa3, 0x5a, 0xc1, 0x2b, 0xa9, - 0xa6, 0x84, 0x4f, 0x43, 0x01, 0xfb, 0x7e, 0xb0, 0x6f, 0x05, 0xc7, 0x8c, 0x2f, 0xbc, 0xcd, 0x7f, - 0xa8, 0xbd, 0x11, 0x0b, 0x17, 0x18, 0x2c, 0xe1, 0xe6, 0x2f, 0x0d, 0xb8, 0x36, 0xf2, 0xd5, 0x84, - 0x87, 0x80, 0x46, 0xf4, 0xa5, 0x56, 0x14, 0x79, 0x61, 0x4c, 0x87, 0x35, 0x2a, 0xde, 0xc3, 0x25, - 0x9e, 0x5a, 0xfa, 0x7b, 0xb8, 0x84, 0x36, 0x9c, 0xa4, 0x35, 0xff, 0x95, 0x01, 0xf5, 0x74, 0xf2, - 0x3f, 0xf6, 0xd8, 0xeb, 0x7d, 0x0f, 0x37, 0xb3, 0xc9, 0x87, 0x9b, 0xe8, 0x95, 0x46, 0x7b, 0xb9, - 0xc8, 0x3e, 0xfa, 0xe5, 0x02, 0x3d, 0x1f, 0x3d, 0x86, 0xc8, 0xd0, 0xb5, 0x9c, 0x7c, 0x0c, 0xb9, - 0xe8, 0x55, 0x66, 0x94, 0xf0, 0xe4, 0xe3, 0xc8, 0xeb, 0x30, 0x6d, 0x93, 0xc0, 0x72, 0x5c, 0xd9, - 0x8f, 0xa5, 0x7e, 0x22, 0x90, 0xc2, 0xea, 0x92, 0xb5, 0x56, 0xe4, 0x36, 0xa9, 0x0f, 0x1c, 0x0a, - 0xe4, 0xd1, 0xb6, 0xe1, 0xdb, 0xb2, 0x9d, 0xc8, 0xc5, 0xd1, 0x76, 0xc3, 0xb7, 0x09, 0x16, 0x18, - 0xf3, 0x5d, 0x03, 0x8a, 0x52, 0xd2, 0x86, 0xd5, 0x61, 0x04, 0xad, 0x45, 0xab, 0x90, 0xc7, 0x7d, - 0x4d, 0x7f, 0xf5, 0xba, 0xe8, 0x55, 0x0a, 0x82, 0x4c, 0x74, 0x22, 0x43, 0x5e, 0x77, 0x32, 0x97, - 0xec, 0xd1, 0x93, 0x90, 0x13, 0xb7, 0x47, 0x6d, 0x66, 0x74, 0xd7, 0xc5, 0x05, 0xc3, 0x12, 0x67, - 0x7e, 0x9c, 0x81, 0x52, 0x62, 0x71, 0x29, 0x7a, 0x81, 0x68, 0x74, 0x99, 0x49, 0x31, 0x0e, 0x1f, - 0xfd, 0x30, 0xad, 0x72, 0xcf, 0xd4, 0xe3, 0xe4, 0x9e, 0xef, 0xc2, 0x54, 0x83, 0xef, 0x51, 0xf8, - 0x3f, 0x87, 0xb5, 0x71, 0x8e, 0x53, 0xec, 0x6e, 0xec, 0x8d, 0xe2, 0x93, 0x61, 0x25, 0x10, 0xdd, - 0x81, 0x05, 0x4a, 0x02, 0xda, 0x5d, 0x3f, 0x0a, 0x08, 0xd5, 0x9b, 0xf8, 0x5c, 0x5c, 0x71, 0xe3, - 0x7e, 0x02, 0x3c, 0xc8, 0x63, 0x1e, 0xc2, 0xcc, 0x5d, 0xeb, 0xd0, 0x8d, 0x1e, 0xbd, 0x30, 0x94, - 0x1c, 0xaf, 0xe1, 0x76, 0x6c, 0x22, 0xa3, 0x71, 0x18, 0xbd, 0xc2, 0x4b, 0xbb, 0xad, 0x23, 0x2f, - 0x7a, 0x95, 0x2b, 0x09, 0x80, 0x7c, 0xe5, 0xc1, 0x49, 0x11, 0xa6, 0x0b, 0x93, 0x9f, 0x61, 0xf7, - 0xf8, 0x3d, 0x28, 0xc4, 0xf5, 0xfd, 0xa7, 0xac, 0xd2, 0x7c, 0x13, 0xf2, 0xdc, 0xe3, 0xc3, 0xbe, - 0xf4, 0x92, 0x12, 0x27, 0x59, 0x38, 0x65, 0xd2, 0x14, 0x4e, 0x66, 0x0b, 0x4a, 0xf7, 0xda, 0xf6, - 0x63, 0x3e, 0x7b, 0x66, 0x52, 0x67, 0xad, 0x9b, 0x20, 0xff, 0x42, 0xc1, 0x13, 0x84, 0xcc, 0xdc, - 0x5a, 0x82, 0xd0, 0x13, 0xaf, 0x36, 0x95, 0xff, 0xa9, 0x01, 0x20, 0xc6, 0x5f, 0x9b, 0xa7, 0xc4, - 0x0b, 0x52, 0x3c, 0x8e, 0xdf, 0x83, 0x29, 0x5f, 0x7a, 0x93, 0x7c, 0xfa, 0x1c, 0x73, 0xc6, 0x1a, - 0x5d, 0x02, 0xe9, 0x4f, 0x58, 0x09, 0xab, 0xdd, 0xf8, 0xe0, 0xe1, 0xf2, 0xc4, 0x87, 0x0f, 0x97, - 0x27, 0x3e, 0x7a, 0xb8, 0x3c, 0xf1, 0xf6, 0xf9, 0xb2, 0xf1, 0xc1, 0xf9, 0xb2, 0xf1, 0xe1, 0xf9, - 0xb2, 0xf1, 0xd1, 0xf9, 0xb2, 0xf1, 0xf1, 0xf9, 0xb2, 0xf1, 0xee, 0x3f, 0x96, 0x27, 0x5e, 0xcf, - 0x9c, 0xae, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x82, 0x62, 0x88, 0xff, 0xb8, 0x26, 0x00, 0x00, + // 2813 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3a, 0xcb, 0x6f, 0x24, 0x47, + 0xf9, 0xee, 0x19, 0x8f, 0x3d, 0xf3, 0x8d, 0xc7, 0x8f, 0x5a, 0xef, 0xef, 0x37, 0x6b, 0x84, 0xc7, + 0xe9, 0xa0, 0x68, 0x03, 0xc9, 0x38, 0x5e, 0x42, 0xb4, 0xd9, 0x90, 0x80, 0xc7, 0xb3, 0xde, 0x98, + 0xac, 0x63, 0xab, 0xbc, 0xbb, 0x40, 0x88, 0x50, 0xda, 0xdd, 0xe5, 0x71, 0xe3, 0x9e, 0xee, 0x49, + 0x55, 0x8f, 0x37, 0x03, 0x07, 0x72, 0x00, 0x01, 0x12, 0x44, 0xe1, 0x86, 0x38, 0xa0, 0x44, 0xf0, + 0x17, 0x70, 0x81, 0x3f, 0x00, 0x89, 0x1c, 0x23, 0x71, 0x89, 0x04, 0x1a, 0x25, 0xe6, 0xc0, 0x11, + 0x71, 0xf5, 0x05, 0x54, 0x8f, 0xee, 0xae, 0x9e, 0xc7, 0xba, 0x27, 0xbb, 0x44, 0xdc, 0xa6, 0xbf, + 0x77, 0x55, 0x7d, 0xf5, 0xbd, 0x6a, 0x60, 0xf7, 0xe4, 0x3a, 0xab, 0xbb, 0xc1, 0xfa, 0x49, 0xf7, + 0x90, 0x50, 0x9f, 0x84, 0x84, 0xad, 0x9f, 0x12, 0xdf, 0x09, 0xe8, 0xba, 0x42, 0x58, 0x1d, 0xb7, + 0x6d, 0xd9, 0xc7, 0xae, 0x4f, 0x68, 0x6f, 0xbd, 0x73, 0xd2, 0xe2, 0x00, 0xb6, 0xde, 0x26, 0xa1, + 0xb5, 0x7e, 0xba, 0xb1, 0xde, 0x22, 0x3e, 0xa1, 0x56, 0x48, 0x9c, 0x7a, 0x87, 0x06, 0x61, 0x80, + 0xbe, 0x20, 0xb9, 0xea, 0x3a, 0x57, 0xbd, 0x73, 0xd2, 0xe2, 0x00, 0x56, 0xe7, 0x5c, 0xf5, 0xd3, + 0x8d, 0x95, 0xa7, 0x5b, 0x6e, 0x78, 0xdc, 0x3d, 0xac, 0xdb, 0x41, 0x7b, 0xbd, 0x15, 0xb4, 0x82, + 0x75, 0xc1, 0x7c, 0xd8, 0x3d, 0x12, 0x5f, 0xe2, 0x43, 0xfc, 0x92, 0x42, 0x57, 0xc6, 0x9a, 0x42, + 0xbb, 0x7e, 0xe8, 0xb6, 0xc9, 0xa0, 0x15, 0x2b, 0xcf, 0x5d, 0xc4, 0xc0, 0xec, 0x63, 0xd2, 0xb6, + 0x06, 0xf9, 0xcc, 0x3f, 0xe7, 0xa1, 0xb8, 0xb9, 0xbf, 0x73, 0x8b, 0x06, 0xdd, 0x0e, 0x5a, 0x83, + 0x69, 0xdf, 0x6a, 0x93, 0xaa, 0xb1, 0x66, 0x5c, 0x2d, 0x35, 0xe6, 0x3e, 0xe8, 0xd7, 0xa6, 0xce, + 0xfa, 0xb5, 0xe9, 0x57, 0xad, 0x36, 0xc1, 0x02, 0x83, 0x3c, 0x28, 0x9e, 0x12, 0xca, 0xdc, 0xc0, + 0x67, 0xd5, 0xdc, 0x5a, 0xfe, 0x6a, 0xf9, 0xda, 0x4b, 0xf5, 0x2c, 0xeb, 0xaf, 0x0b, 0x05, 0xf7, + 0x24, 0xeb, 0x76, 0x40, 0x9b, 0x2e, 0xb3, 0x83, 0x53, 0x42, 0x7b, 0x8d, 0x45, 0xa5, 0xa5, 0xa8, + 0x90, 0x0c, 0xc7, 0x1a, 0xd0, 0x8f, 0x0c, 0x58, 0xec, 0x50, 0x72, 0x44, 0x28, 0x25, 0x8e, 0xc2, + 0x57, 0xf3, 0x6b, 0xc6, 0x23, 0x50, 0x5b, 0x55, 0x6a, 0x17, 0xf7, 0x07, 0xe4, 0xe3, 0x21, 0x8d, + 0xe8, 0xb7, 0x06, 0xac, 0x30, 0x42, 0x4f, 0x09, 0xdd, 0x74, 0x1c, 0x4a, 0x18, 0x6b, 0xf4, 0xb6, + 0x3c, 0x97, 0xf8, 0xe1, 0xd6, 0x4e, 0x13, 0xb3, 0xea, 0xb4, 0xd8, 0x87, 0xaf, 0x65, 0x33, 0xe8, + 0x60, 0x9c, 0x9c, 0x86, 0xa9, 0x2c, 0x5a, 0x19, 0x4b, 0xc2, 0xf0, 0x03, 0xcc, 0x30, 0x8f, 0x60, + 0x2e, 0x3a, 0xc8, 0xdb, 0x2e, 0x0b, 0xd1, 0x3d, 0x98, 0x69, 0xf1, 0x0f, 0x56, 0x35, 0x84, 0x81, + 0xf5, 0x6c, 0x06, 0x46, 0x32, 0x1a, 0xf3, 0xca, 0x9e, 0x19, 0xf1, 0xc9, 0xb0, 0x92, 0x66, 0xfe, + 0x6c, 0x1a, 0xca, 0x9b, 0xfb, 0x3b, 0x98, 0xb0, 0xa0, 0x4b, 0x6d, 0x92, 0xc1, 0x69, 0xae, 0xc3, + 0x1c, 0x73, 0xfd, 0x56, 0xd7, 0xb3, 0x28, 0x87, 0x56, 0x67, 0x04, 0xe5, 0xb2, 0xa2, 0x9c, 0x3b, + 0xd0, 0x70, 0x38, 0x45, 0x89, 0xae, 0x01, 0x70, 0x09, 0xac, 0x63, 0xd9, 0xc4, 0xa9, 0xe6, 0xd6, + 0x8c, 0xab, 0xc5, 0x06, 0x52, 0x7c, 0xf0, 0x6a, 0x8c, 0xc1, 0x1a, 0x15, 0x7a, 0x1c, 0x0a, 0xc2, + 0xd2, 0x6a, 0x51, 0xa8, 0xa9, 0x28, 0xf2, 0x82, 0x58, 0x06, 0x96, 0x38, 0xf4, 0x24, 0xcc, 0x2a, + 0x2f, 0xab, 0x96, 0x04, 0xd9, 0x82, 0x22, 0x9b, 0x8d, 0xdc, 0x20, 0xc2, 0xf3, 0xf5, 0x9d, 0xb8, + 0xbe, 0x23, 0xfc, 0x4e, 0x5b, 0xdf, 0x2b, 0xae, 0xef, 0x60, 0x81, 0x41, 0xb7, 0xa1, 0x70, 0x4a, + 0xe8, 0x21, 0xf7, 0x04, 0xee, 0x9a, 0x5f, 0xca, 0xb6, 0xd1, 0xf7, 0x38, 0x4b, 0xa3, 0xc4, 0x4d, + 0x13, 0x3f, 0xb1, 0x14, 0x82, 0xea, 0x00, 0xec, 0x38, 0xa0, 0xa1, 0x58, 0x5e, 0xb5, 0xb0, 0x96, + 0xbf, 0x5a, 0x6a, 0xcc, 0xf3, 0xf5, 0x1e, 0xc4, 0x50, 0xac, 0x51, 0x70, 0x7a, 0xdb, 0x0a, 0x49, + 0x2b, 0xa0, 0x2e, 0x61, 0xd5, 0xd9, 0x84, 0x7e, 0x2b, 0x86, 0x62, 0x8d, 0x02, 0x7d, 0x03, 0x10, + 0x0b, 0x03, 0x6a, 0xb5, 0x88, 0x5a, 0xea, 0xcb, 0x16, 0x3b, 0xae, 0x82, 0x58, 0xdd, 0x8a, 0x5a, + 0x1d, 0x3a, 0x18, 0xa2, 0xc0, 0x23, 0xb8, 0xcc, 0xdf, 0x1b, 0xb0, 0xa0, 0xf9, 0x82, 0xf0, 0xbb, + 0xeb, 0x30, 0xd7, 0xd2, 0x6e, 0x9d, 0xf2, 0x8b, 0xf8, 0xb4, 0xf5, 0x1b, 0x89, 0x53, 0x94, 0x88, + 0x40, 0x89, 0x2a, 0x49, 0x51, 0x74, 0xd9, 0xc8, 0xec, 0xb4, 0x91, 0x0d, 0x89, 0x26, 0x0d, 0xc8, + 0x70, 0x22, 0xd9, 0xfc, 0x87, 0x21, 0x1c, 0x38, 0x8a, 0x37, 0xe8, 0xaa, 0x16, 0xd3, 0x0c, 0xb1, + 0x7d, 0x73, 0x63, 0xe2, 0xd1, 0x05, 0x81, 0x20, 0xf7, 0x3f, 0x11, 0x08, 0x6e, 0x14, 0x7f, 0xf5, + 0x5e, 0x6d, 0xea, 0xed, 0xbf, 0xad, 0x4d, 0x99, 0xbf, 0x34, 0x60, 0x6e, 0xb3, 0xd3, 0xf1, 0x7a, + 0x7b, 0x9d, 0x50, 0x2c, 0xc0, 0x84, 0x19, 0x87, 0xf6, 0x70, 0xd7, 0x57, 0x0b, 0x05, 0x7e, 0xbf, + 0x9b, 0x02, 0x82, 0x15, 0x86, 0xdf, 0x9f, 0xa3, 0x80, 0xda, 0x44, 0x5d, 0xb7, 0xf8, 0xfe, 0x6c, + 0x73, 0x20, 0x96, 0x38, 0x7e, 0xc8, 0x47, 0x2e, 0xf1, 0x9c, 0x5d, 0xcb, 0xb7, 0x5a, 0x84, 0xaa, + 0xcb, 0x11, 0x6f, 0xfd, 0xb6, 0x86, 0xc3, 0x29, 0x4a, 0xf3, 0xdf, 0x39, 0x28, 0x6d, 0x05, 0xbe, + 0xe3, 0x86, 0xea, 0x72, 0x85, 0xbd, 0xce, 0x50, 0xf0, 0xb8, 0xd3, 0xeb, 0x10, 0x2c, 0x30, 0xe8, + 0x79, 0x98, 0x61, 0xa1, 0x15, 0x76, 0x99, 0xb0, 0xa7, 0xd4, 0x78, 0x2c, 0x0a, 0x4b, 0x07, 0x02, + 0x7a, 0xde, 0xaf, 0x2d, 0xc4, 0xe2, 0x24, 0x08, 0x2b, 0x06, 0xee, 0xe9, 0xc1, 0xa1, 0xd8, 0x28, + 0xe7, 0x96, 0x4c, 0x7b, 0x51, 0xfe, 0xc8, 0x27, 0x9e, 0xbe, 0x37, 0x44, 0x81, 0x47, 0x70, 0xa1, + 0x53, 0x40, 0x9e, 0xc5, 0xc2, 0x3b, 0xd4, 0xf2, 0x99, 0xd0, 0x75, 0xc7, 0x6d, 0x13, 0x75, 0xe1, + 0xbf, 0x98, 0xed, 0xc4, 0x39, 0x47, 0xa2, 0xf7, 0xf6, 0x90, 0x34, 0x3c, 0x42, 0x03, 0x7a, 0x02, + 0x66, 0x28, 0xb1, 0x58, 0xe0, 0x57, 0x0b, 0x62, 0xf9, 0x71, 0x54, 0xc6, 0x02, 0x8a, 0x15, 0x96, + 0x07, 0xb4, 0x36, 0x61, 0xcc, 0x6a, 0x45, 0xe1, 0x35, 0x0e, 0x68, 0xbb, 0x12, 0x8c, 0x23, 0xbc, + 0xd9, 0x86, 0xca, 0x16, 0x25, 0x56, 0x48, 0x26, 0xf1, 0x8a, 0x4f, 0x7f, 0xe0, 0x3f, 0xc9, 0x43, + 0xa5, 0x49, 0x3c, 0x92, 0xe8, 0xdb, 0x06, 0xd4, 0xa2, 0x96, 0x4d, 0xf6, 0x09, 0x75, 0x03, 0xe7, + 0x80, 0xd8, 0x81, 0xef, 0x30, 0xe1, 0x02, 0xf9, 0xc6, 0xff, 0xf1, 0xbd, 0xb9, 0x35, 0x84, 0xc5, + 0x23, 0x38, 0x90, 0x07, 0x95, 0x0e, 0x15, 0xbf, 0xc5, 0x7e, 0x49, 0x0f, 0x29, 0x5f, 0xfb, 0x72, + 0xb6, 0xe3, 0xd8, 0xd7, 0x59, 0x1b, 0x4b, 0x67, 0xfd, 0x5a, 0x25, 0x05, 0xc2, 0x69, 0xe1, 0xe8, + 0xeb, 0xb0, 0x18, 0xd0, 0xce, 0xb1, 0xe5, 0x37, 0x49, 0x87, 0xf8, 0x0e, 0xf1, 0x43, 0x26, 0x76, + 0xa1, 0xd8, 0x58, 0xe6, 0x75, 0xc4, 0xde, 0x00, 0x0e, 0x0f, 0x51, 0xa3, 0xd7, 0x60, 0xa9, 0x43, + 0x83, 0x8e, 0xd5, 0x12, 0x2e, 0xb5, 0x1f, 0x78, 0xae, 0xdd, 0x13, 0x2e, 0x54, 0x6a, 0x3c, 0x75, + 0xd6, 0xaf, 0x2d, 0xed, 0x0f, 0x22, 0xcf, 0xfb, 0xb5, 0x4b, 0x62, 0xeb, 0x38, 0x24, 0x41, 0xe2, + 0x61, 0x31, 0xda, 0x19, 0x16, 0xc6, 0x9d, 0xa1, 0xb9, 0x03, 0xc5, 0x66, 0x57, 0xf9, 0xf3, 0x8b, + 0x50, 0x74, 0xd4, 0x6f, 0xb5, 0xf3, 0xd1, 0xc5, 0x8a, 0x69, 0xce, 0xfb, 0xb5, 0x0a, 0x2f, 0x1d, + 0xeb, 0x11, 0x00, 0xc7, 0x2c, 0xe6, 0x13, 0x50, 0x14, 0x47, 0xce, 0xee, 0x6d, 0xa0, 0x45, 0xc8, + 0x63, 0xeb, 0xbe, 0x90, 0x32, 0x87, 0xf9, 0x4f, 0x2d, 0x02, 0xed, 0x01, 0xdc, 0x22, 0x61, 0x74, + 0xf0, 0x9b, 0xb0, 0x10, 0x85, 0xe1, 0x74, 0x76, 0xf8, 0x7f, 0xa5, 0x7b, 0x01, 0xa7, 0xd1, 0x78, + 0x90, 0xde, 0x7c, 0x1d, 0x4a, 0x22, 0x83, 0xf0, 0xf4, 0x9b, 0xa4, 0x7a, 0xe3, 0x01, 0xa9, 0x3e, + 0xca, 0xdf, 0xb9, 0x71, 0xf9, 0x5b, 0x33, 0xd7, 0x83, 0x8a, 0xe4, 0x8d, 0x8a, 0x9b, 0x4c, 0x1a, + 0x9e, 0x82, 0x62, 0x64, 0xa6, 0xd2, 0x12, 0x17, 0xb5, 0x91, 0x20, 0x1c, 0x53, 0x68, 0xda, 0x8e, + 0x21, 0x95, 0x0d, 0xb3, 0x29, 0xd3, 0x2a, 0x97, 0xdc, 0x83, 0x2b, 0x17, 0x4d, 0xd3, 0x0f, 0xa1, + 0x3a, 0xae, 0x12, 0x7e, 0x88, 0x7c, 0x9d, 0xdd, 0x14, 0xf3, 0x1d, 0x03, 0x16, 0x75, 0x49, 0xd9, + 0x8f, 0x2f, 0xbb, 0x92, 0x8b, 0x2b, 0x35, 0x6d, 0x47, 0x7e, 0x63, 0xc0, 0x72, 0x6a, 0x69, 0x13, + 0x9d, 0xf8, 0x04, 0x46, 0xe9, 0xce, 0x91, 0x9f, 0xc0, 0x39, 0xfe, 0x92, 0x83, 0xca, 0x6d, 0xeb, + 0x90, 0x78, 0x07, 0xc4, 0x23, 0x76, 0x18, 0x50, 0xf4, 0x03, 0x28, 0xb7, 0xad, 0xd0, 0x3e, 0x16, + 0xd0, 0xa8, 0xaa, 0x6f, 0x66, 0x0b, 0x76, 0x29, 0x49, 0xf5, 0xdd, 0x44, 0xcc, 0x4d, 0x3f, 0xa4, + 0xbd, 0xc6, 0x25, 0x65, 0x52, 0x59, 0xc3, 0x60, 0x5d, 0x9b, 0x68, 0xc5, 0xc4, 0xf7, 0xcd, 0xb7, + 0x3a, 0xbc, 0xe4, 0x98, 0xbc, 0x03, 0x4c, 0x99, 0x80, 0xc9, 0x9b, 0x5d, 0x97, 0x92, 0x36, 0xf1, + 0xc3, 0xa4, 0x15, 0xdb, 0x1d, 0x90, 0x8f, 0x87, 0x34, 0xae, 0xbc, 0x04, 0x8b, 0x83, 0xc6, 0xf3, + 0xf8, 0x73, 0x42, 0x7a, 0xf2, 0xbc, 0x30, 0xff, 0x89, 0x96, 0xa1, 0x70, 0x6a, 0x79, 0x5d, 0x75, + 0x1b, 0xb1, 0xfc, 0xb8, 0x91, 0xbb, 0x6e, 0x98, 0xbf, 0x33, 0xa0, 0x3a, 0xce, 0x10, 0xf4, 0x79, + 0x4d, 0x50, 0xa3, 0xac, 0xac, 0xca, 0xbf, 0x42, 0x7a, 0x52, 0xea, 0x4d, 0x28, 0x06, 0x1d, 0x5e, + 0x0f, 0x04, 0x54, 0x9d, 0xfa, 0x93, 0xd1, 0x49, 0xee, 0x29, 0xf8, 0x79, 0xbf, 0x76, 0x39, 0x25, + 0x3e, 0x42, 0xe0, 0x98, 0x95, 0x47, 0x6a, 0x61, 0x0f, 0xcf, 0x1e, 0x71, 0xa4, 0xbe, 0x27, 0x20, + 0x58, 0x61, 0xcc, 0x3f, 0x1a, 0x30, 0x2d, 0x8a, 0xe9, 0xd7, 0xa1, 0xc8, 0xf7, 0xcf, 0xb1, 0x42, + 0x4b, 0xd8, 0x95, 0xb9, 0x8d, 0xe3, 0xdc, 0xbb, 0x24, 0xb4, 0x12, 0x6f, 0x8b, 0x20, 0x38, 0x96, + 0x88, 0x30, 0x14, 0xdc, 0x90, 0xb4, 0xa3, 0x83, 0x7c, 0x7a, 0xac, 0x68, 0x35, 0x44, 0xa8, 0x63, + 0xeb, 0xfe, 0xcd, 0xb7, 0x42, 0xe2, 0xf3, 0xc3, 0x48, 0xae, 0xc6, 0x0e, 0x97, 0x81, 0xa5, 0x28, + 0xf3, 0x5f, 0x06, 0xc4, 0xaa, 0xb8, 0xf3, 0x33, 0xe2, 0x1d, 0xdd, 0x76, 0xfd, 0x13, 0xb5, 0xad, + 0xb1, 0x39, 0x07, 0x0a, 0x8e, 0x63, 0x8a, 0x51, 0xe9, 0x21, 0x37, 0x59, 0x7a, 0xe0, 0x0a, 0xed, + 0xc0, 0x0f, 0x5d, 0xbf, 0x3b, 0x74, 0xdb, 0xb6, 0x14, 0x1c, 0xc7, 0x14, 0xbc, 0x10, 0xa1, 0xa4, + 0x6d, 0xb9, 0xbe, 0xeb, 0xb7, 0xf8, 0x22, 0xb6, 0x82, 0xae, 0x1f, 0x8a, 0x8c, 0xac, 0x0a, 0x11, + 0x3c, 0x84, 0xc5, 0x23, 0x38, 0xcc, 0x3f, 0x4c, 0x43, 0x99, 0xaf, 0x39, 0xca, 0x73, 0x2f, 0x40, + 0xc5, 0xd3, 0xbd, 0x40, 0xad, 0xfd, 0xb2, 0x32, 0x25, 0x7d, 0xaf, 0x71, 0x9a, 0x96, 0x33, 0x8b, + 0xfa, 0x29, 0x66, 0xce, 0xa5, 0x99, 0xb7, 0x75, 0x24, 0x4e, 0xd3, 0xf2, 0xe8, 0x75, 0x9f, 0xdf, + 0x0f, 0x55, 0x99, 0xc4, 0x47, 0xf4, 0x4d, 0x0e, 0xc4, 0x12, 0x87, 0x76, 0xe1, 0x92, 0xe5, 0x79, + 0xc1, 0x7d, 0x01, 0x6c, 0x04, 0xc1, 0x49, 0xdb, 0xa2, 0x27, 0x4c, 0x34, 0xc2, 0xc5, 0xc6, 0xe7, + 0x14, 0xcb, 0xa5, 0xcd, 0x61, 0x12, 0x3c, 0x8a, 0x6f, 0xd4, 0xb1, 0x4d, 0x4f, 0x78, 0x6c, 0xc7, + 0xb0, 0x3c, 0x00, 0x12, 0xb7, 0x5c, 0x75, 0xa5, 0xcf, 0x2a, 0x39, 0xcb, 0x78, 0x04, 0xcd, 0xf9, + 0x18, 0x38, 0x1e, 0x29, 0x11, 0xdd, 0x80, 0x79, 0xee, 0xc9, 0x41, 0x37, 0x8c, 0xea, 0xce, 0x82, + 0x38, 0x6e, 0x74, 0xd6, 0xaf, 0xcd, 0xdf, 0x49, 0x61, 0xf0, 0x00, 0x25, 0xdf, 0x5c, 0xcf, 0x6d, + 0xbb, 0x61, 0x75, 0x56, 0xb0, 0xc4, 0x9b, 0x7b, 0x9b, 0x03, 0xb1, 0xc4, 0xa5, 0x3c, 0xb0, 0x78, + 0x91, 0x07, 0x9a, 0xbf, 0xce, 0x03, 0x92, 0x85, 0xb2, 0x23, 0xeb, 0x29, 0x19, 0xd2, 0x78, 0x35, + 0xaf, 0x0a, 0x6d, 0x63, 0xa0, 0x9a, 0x57, 0x35, 0x76, 0x84, 0x47, 0xbb, 0x50, 0x92, 0xa1, 0x25, + 0xb9, 0x2e, 0xeb, 0x8a, 0xb8, 0xb4, 0x17, 0x21, 0xce, 0xfb, 0xb5, 0x95, 0x94, 0x9a, 0x18, 0x23, + 0x3a, 0xad, 0x44, 0x02, 0xba, 0x06, 0x60, 0x75, 0x5c, 0x7d, 0xd6, 0x56, 0x4a, 0x26, 0x2e, 0x49, + 0xd7, 0x8c, 0x35, 0x2a, 0xf4, 0x32, 0x4c, 0x87, 0x9f, 0xae, 0x1b, 0x2a, 0x8a, 0x66, 0x8f, 0xf7, + 0x3e, 0x42, 0x02, 0xd7, 0x2e, 0xfc, 0x99, 0x71, 0xb3, 0x54, 0x23, 0x13, 0x6b, 0xdf, 0x8e, 0x31, + 0x58, 0xa3, 0x42, 0xdf, 0x82, 0xe2, 0x91, 0x2a, 0x45, 0xc5, 0xc1, 0x64, 0x0e, 0x91, 0x51, 0x01, + 0x2b, 0xdb, 0xfd, 0xe8, 0x0b, 0xc7, 0xd2, 0xcc, 0x37, 0xa1, 0xb4, 0xeb, 0xda, 0x34, 0x10, 0x8d, + 0xd8, 0x93, 0x30, 0xcb, 0x52, 0x9d, 0x4a, 0x7c, 0x24, 0x91, 0xbb, 0x44, 0x78, 0xee, 0x27, 0xbe, + 0xe5, 0x07, 0xb2, 0x1f, 0x29, 0x24, 0x7e, 0xf2, 0x2a, 0x07, 0x62, 0x89, 0xbb, 0xb1, 0xcc, 0x33, + 0xfd, 0x4f, 0xdf, 0xaf, 0x4d, 0xbd, 0xfb, 0x7e, 0x6d, 0xea, 0xbd, 0xf7, 0x55, 0xd6, 0x3f, 0x07, + 0x80, 0xbd, 0xc3, 0xef, 0x11, 0x5b, 0xc6, 0xcf, 0x4c, 0xb3, 0xb5, 0x68, 0xa4, 0x2b, 0x66, 0x6b, + 0xb9, 0x81, 0xea, 0x4d, 0xc3, 0xe1, 0x14, 0x25, 0x5a, 0x87, 0x52, 0x3c, 0x35, 0x53, 0x07, 0xbd, + 0x14, 0x39, 0x4e, 0x3c, 0x5a, 0xc3, 0x09, 0x4d, 0x2a, 0x98, 0x4f, 0x5f, 0x18, 0xcc, 0x1b, 0x90, + 0xef, 0xba, 0x8e, 0xea, 0x5a, 0x9f, 0x89, 0x92, 0xe9, 0xdd, 0x9d, 0xe6, 0x79, 0xbf, 0xf6, 0xd8, + 0xb8, 0x61, 0x35, 0xef, 0xf8, 0x59, 0xfd, 0xee, 0x4e, 0x13, 0x73, 0xe6, 0x51, 0x91, 0x65, 0x66, + 0xc2, 0xc8, 0x72, 0x0d, 0xa0, 0x95, 0xf4, 0xfe, 0xf2, 0xe2, 0xc6, 0x1e, 0xa5, 0xf5, 0xfc, 0x1a, + 0x15, 0x62, 0xb0, 0x64, 0xf3, 0x06, 0x59, 0xf5, 0xe0, 0x2c, 0xb4, 0xda, 0x72, 0x9a, 0x38, 0x99, + 0x73, 0x5f, 0x51, 0x6a, 0x96, 0xb6, 0x06, 0x85, 0xe1, 0x61, 0xf9, 0x28, 0x80, 0x25, 0x47, 0xb5, + 0x7a, 0x89, 0xd2, 0xd2, 0xc4, 0x4a, 0x2f, 0x73, 0x85, 0xcd, 0x41, 0x41, 0x78, 0x58, 0x36, 0xfa, + 0x2e, 0xac, 0x44, 0xc0, 0xe1, 0x7e, 0x5b, 0x44, 0xde, 0x7c, 0x63, 0xf5, 0xac, 0x5f, 0x5b, 0x69, + 0x8e, 0xa5, 0xc2, 0x0f, 0x90, 0x80, 0x1c, 0x98, 0xf1, 0x64, 0xa5, 0x5a, 0x16, 0xd5, 0xc5, 0x57, + 0xb3, 0xad, 0x22, 0xf1, 0xfe, 0xba, 0x5e, 0xa1, 0xc6, 0x73, 0x0f, 0x55, 0x9c, 0x2a, 0xd9, 0xe8, + 0x2d, 0x28, 0x5b, 0xbe, 0x1f, 0x84, 0x96, 0x9c, 0x00, 0xcc, 0x09, 0x55, 0x9b, 0x13, 0xab, 0xda, + 0x4c, 0x64, 0x0c, 0x54, 0xc4, 0x1a, 0x06, 0xeb, 0xaa, 0xd0, 0x7d, 0x58, 0x08, 0xee, 0xfb, 0x84, + 0x62, 0x72, 0x44, 0x28, 0xf1, 0x6d, 0xc2, 0xaa, 0x15, 0xa1, 0xfd, 0xd9, 0x8c, 0xda, 0x53, 0xcc, + 0x89, 0x4b, 0xa7, 0xe1, 0x0c, 0x0f, 0x6a, 0x41, 0x75, 0x1e, 0x24, 0x7d, 0xcb, 0x73, 0xbf, 0x4f, + 0x28, 0xab, 0xce, 0x27, 0x03, 0xdf, 0xed, 0x18, 0x8a, 0x35, 0x0a, 0xf4, 0x15, 0x28, 0xdb, 0x5e, + 0x97, 0x85, 0x44, 0x4e, 0xdf, 0x17, 0xc4, 0x0d, 0x8a, 0xd7, 0xb7, 0x95, 0xa0, 0xb0, 0x4e, 0x87, + 0xba, 0x50, 0x69, 0xeb, 0x29, 0xa3, 0xba, 0x24, 0x56, 0x77, 0x3d, 0xdb, 0xea, 0x86, 0x93, 0x5a, + 0x52, 0xc1, 0xa4, 0x70, 0x38, 0xad, 0x65, 0xe5, 0x79, 0x28, 0x7f, 0xca, 0xe2, 0x9e, 0x37, 0x07, + 0x83, 0xe7, 0x38, 0x51, 0x73, 0xf0, 0xa7, 0x1c, 0xcc, 0xa7, 0x77, 0x7f, 0x20, 0x1d, 0x16, 0x32, + 0xa5, 0xc3, 0xa8, 0x0d, 0x35, 0xc6, 0x3e, 0x18, 0x44, 0x61, 0x3d, 0x3f, 0x36, 0xac, 0xab, 0xe8, + 0x39, 0xfd, 0x30, 0xd1, 0xb3, 0x0e, 0xc0, 0xeb, 0x0c, 0x1a, 0x78, 0x1e, 0xa1, 0x22, 0x70, 0x16, + 0xd5, 0xc3, 0x40, 0x0c, 0xc5, 0x1a, 0x05, 0xaf, 0x86, 0x0f, 0xbd, 0xc0, 0x3e, 0x11, 0x5b, 0x10, + 0x5d, 0x7a, 0x11, 0x32, 0x8b, 0xb2, 0x1a, 0x6e, 0x0c, 0x61, 0xf1, 0x08, 0x0e, 0xb3, 0x07, 0x97, + 0xf7, 0x2d, 0x1a, 0xba, 0x96, 0x97, 0x5c, 0x30, 0xd1, 0x6e, 0xbc, 0x31, 0xd4, 0xcc, 0x3c, 0x33, + 0xe9, 0x45, 0x4d, 0x36, 0x3f, 0x81, 0x25, 0x0d, 0x8d, 0xf9, 0x57, 0x03, 0xae, 0x8c, 0xd4, 0xfd, + 0x19, 0x34, 0x53, 0x6f, 0xa4, 0x9b, 0xa9, 0x17, 0x32, 0x4e, 0x21, 0x47, 0x59, 0x3b, 0xa6, 0xb5, + 0x9a, 0x85, 0xc2, 0x3e, 0x2f, 0x62, 0xcd, 0x5f, 0x18, 0x30, 0x27, 0x7e, 0x4d, 0x32, 0xc1, 0xad, + 0xa5, 0xe7, 0xfa, 0xa5, 0x47, 0x38, 0xd3, 0x7f, 0xc7, 0x80, 0xf4, 0xec, 0x14, 0xbd, 0x24, 0xfd, + 0xd7, 0x88, 0x87, 0x9b, 0x13, 0xfa, 0xee, 0x8b, 0xe3, 0x5a, 0xc1, 0x4b, 0x99, 0xa6, 0x84, 0x4f, + 0x41, 0x09, 0x07, 0x41, 0xb8, 0x6f, 0x85, 0xc7, 0x8c, 0x2f, 0xbc, 0xc3, 0x7f, 0xa8, 0xbd, 0x11, + 0x0b, 0x17, 0x18, 0x2c, 0xe1, 0xe6, 0xcf, 0x0d, 0xb8, 0x32, 0xf6, 0xad, 0x85, 0x87, 0x00, 0x3b, + 0xfe, 0x52, 0x2b, 0x8a, 0xbd, 0x30, 0xa1, 0xc3, 0x1a, 0x15, 0xef, 0xe1, 0x52, 0x0f, 0x34, 0x83, + 0x3d, 0x5c, 0x4a, 0x1b, 0x4e, 0xd3, 0x9a, 0xff, 0xcc, 0x81, 0x7a, 0xdc, 0xf8, 0x2f, 0x7b, 0xec, + 0x13, 0x03, 0x4f, 0x2b, 0xf3, 0xe9, 0xa7, 0x95, 0xf8, 0x1d, 0x45, 0x7b, 0x5b, 0xc8, 0x3f, 0xf8, + 0x6d, 0x01, 0x3d, 0x17, 0x3f, 0x57, 0xc8, 0xd0, 0xb5, 0x9a, 0x7e, 0xae, 0x38, 0xef, 0xd7, 0xe6, + 0x94, 0xf0, 0xf4, 0xf3, 0xc5, 0x6b, 0x30, 0xeb, 0x90, 0xd0, 0x72, 0x3d, 0xd9, 0x8f, 0x65, 0x1e, + 0xe2, 0x4b, 0x61, 0x4d, 0xc9, 0xda, 0x28, 0x73, 0x9b, 0xd4, 0x07, 0x8e, 0x04, 0xf2, 0x68, 0x6b, + 0x07, 0x8e, 0x6c, 0x27, 0x0a, 0x49, 0xb4, 0xdd, 0x0a, 0x1c, 0x82, 0x05, 0xc6, 0x7c, 0xd7, 0x80, + 0xb2, 0x94, 0xb4, 0x65, 0x75, 0x19, 0x41, 0x1b, 0xf1, 0x2a, 0xe4, 0x71, 0x5f, 0xd1, 0xdf, 0xa5, + 0xce, 0xfb, 0xb5, 0x92, 0x20, 0x13, 0x9d, 0xc8, 0x88, 0xf7, 0x97, 0xdc, 0x05, 0x7b, 0xf4, 0x38, + 0x14, 0xc4, 0xed, 0x51, 0x9b, 0x99, 0x3c, 0xb0, 0x71, 0x20, 0x96, 0x38, 0xf3, 0xe3, 0x1c, 0x54, + 0x52, 0x8b, 0xcb, 0xd0, 0x0b, 0xc4, 0xa3, 0xcb, 0x5c, 0x86, 0x71, 0xf8, 0xf8, 0xe7, 0x6c, 0x95, + 0x7b, 0x66, 0x1e, 0x26, 0xf7, 0x7c, 0x1b, 0x66, 0x6c, 0xbe, 0x47, 0xd1, 0xbf, 0x23, 0x36, 0x26, + 0x39, 0x4e, 0xb1, 0xbb, 0x89, 0x37, 0x8a, 0x4f, 0x86, 0x95, 0x40, 0x74, 0x0b, 0x96, 0x28, 0x09, + 0x69, 0x6f, 0xf3, 0x28, 0x24, 0x54, 0x6f, 0xe2, 0x0b, 0x49, 0xc5, 0x8d, 0x07, 0x09, 0xf0, 0x30, + 0x8f, 0x79, 0x08, 0x73, 0x77, 0xac, 0x43, 0x2f, 0x7e, 0x96, 0xc2, 0x50, 0x71, 0x7d, 0xdb, 0xeb, + 0x3a, 0x44, 0x46, 0xe3, 0x28, 0x7a, 0x45, 0x97, 0x76, 0x47, 0x47, 0x9e, 0xf7, 0x6b, 0x97, 0x52, + 0x00, 0xf9, 0x0e, 0x83, 0xd3, 0x22, 0x4c, 0x0f, 0xa6, 0x3f, 0xc3, 0xee, 0xf1, 0x3b, 0x50, 0x4a, + 0xea, 0xfb, 0x47, 0xac, 0xd2, 0x7c, 0x03, 0x8a, 0xdc, 0xe3, 0xa3, 0xbe, 0xf4, 0x82, 0x12, 0x27, + 0x5d, 0x38, 0xe5, 0xb2, 0x14, 0x4e, 0x66, 0x1b, 0x2a, 0x77, 0x3b, 0xce, 0x43, 0x3e, 0x4c, 0xe6, + 0x32, 0x67, 0xad, 0x6b, 0x20, 0xff, 0x78, 0xc1, 0x13, 0x84, 0xcc, 0xdc, 0x5a, 0x82, 0xd0, 0x13, + 0xaf, 0x36, 0x95, 0xff, 0xb1, 0x01, 0x20, 0xc6, 0x5f, 0x37, 0x4f, 0x89, 0x1f, 0x66, 0x78, 0xbe, + 0xbe, 0x0b, 0x33, 0x81, 0xf4, 0x26, 0xf9, 0x38, 0x39, 0xe1, 0x8c, 0x35, 0xbe, 0x04, 0xd2, 0x9f, + 0xb0, 0x12, 0xd6, 0xb8, 0xfa, 0xc1, 0x27, 0xab, 0x53, 0x1f, 0x7e, 0xb2, 0x3a, 0xf5, 0xd1, 0x27, + 0xab, 0x53, 0x6f, 0x9f, 0xad, 0x1a, 0x1f, 0x9c, 0xad, 0x1a, 0x1f, 0x9e, 0xad, 0x1a, 0x1f, 0x9d, + 0xad, 0x1a, 0x1f, 0x9f, 0xad, 0x1a, 0xef, 0xfe, 0x7d, 0x75, 0xea, 0xb5, 0xdc, 0xe9, 0xc6, 0x7f, + 0x02, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xee, 0x35, 0x7b, 0xee, 0x26, 0x00, 0x00, } func (m *APIGroup) Marshal() (dAtA []byte, err error) { @@ -1788,6 +1787,51 @@ func (m *APIVersions) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ApplyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.FieldManager) + copy(dAtA[i:], m.FieldManager) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i-- + dAtA[i] = 0x1a + i-- + if m.Force { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + if len(m.DryRun) > 0 { + for iNdEx := len(m.DryRun) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DryRun[iNdEx]) + copy(dAtA[i:], m.DryRun[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DryRun[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *Condition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1973,45 +2017,6 @@ func (m *Duration) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ExportOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ExportOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ExportOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i-- - if m.Exact { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - i-- - if m.Export { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - func (m *FieldsV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3585,6 +3590,24 @@ func (m *APIVersions) Size() (n int) { return n } +func (m *ApplyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *Condition) Size() (n int) { if m == nil { return 0 @@ -3661,17 +3684,6 @@ func (m *Duration) Size() (n int) { return n } -func (m *ExportOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - n += 2 - return n -} - func (m *FieldsV1) Size() (n int) { if m == nil { return 0 @@ -4317,6 +4329,18 @@ func (this *APIResourceList) String() string { }, "") return s } +func (this *ApplyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ApplyOptions{`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `Force:` + fmt.Sprintf("%v", this.Force) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, + `}`, + }, "") + return s +} func (this *Condition) String() string { if this == nil { return "nil" @@ -4367,17 +4391,6 @@ func (this *Duration) String() string { }, "") return s } -func (this *ExportOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ExportOptions{`, - `Export:` + fmt.Sprintf("%v", this.Export) + `,`, - `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, - `}`, - }, "") - return s -} func (this *GetOptions) String() string { if this == nil { return "nil" @@ -4925,10 +4938,7 @@ func (m *APIGroup) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5012,10 +5022,7 @@ func (m *APIGroupList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5377,10 +5384,7 @@ func (m *APIResource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5496,10 +5500,7 @@ func (m *APIResourceList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5615,10 +5616,141 @@ func (m *APIVersions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) < 0 { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Force = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5848,10 +5980,7 @@ func (m *Condition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5965,10 +6094,7 @@ func (m *CreateOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6160,10 +6286,7 @@ func (m *DeleteOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6232,103 +6355,7 @@ func (m *Duration) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ExportOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ExportOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ExportOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Export", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Export = bool(v != 0) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Exact", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Exact = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6412,10 +6439,7 @@ func (m *FieldsV1) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6497,10 +6521,7 @@ func (m *GetOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6614,10 +6635,7 @@ func (m *GroupKind) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6731,10 +6749,7 @@ func (m *GroupResource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6848,10 +6863,7 @@ func (m *GroupVersion) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -6965,10 +6977,7 @@ func (m *GroupVersionForDiscovery) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7114,10 +7123,7 @@ func (m *GroupVersionKind) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7263,10 +7269,7 @@ func (m *GroupVersionResource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7426,7 +7429,7 @@ func (m *LabelSelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -7477,10 +7480,7 @@ func (m *LabelSelector) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7626,10 +7626,7 @@ func (m *LabelSelectorRequirement) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7746,10 +7743,7 @@ func (m *List) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -7915,10 +7909,7 @@ func (m *ListMeta) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8207,10 +8198,7 @@ func (m *ListOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8460,10 +8448,7 @@ func (m *ManagedFieldsEntry) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -8923,7 +8908,7 @@ func (m *ObjectMeta) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -9050,7 +9035,7 @@ func (m *ObjectMeta) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > postIndex { @@ -9199,10 +9184,7 @@ func (m *ObjectMeta) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9422,10 +9404,7 @@ func (m *OwnerReference) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9508,10 +9487,7 @@ func (m *PartialObjectMetadata) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9628,10 +9604,7 @@ func (m *PartialObjectMetadataList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9681,10 +9654,7 @@ func (m *Patch) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9819,10 +9789,7 @@ func (m *PatchOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -9938,10 +9905,7 @@ func (m *Preconditions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10023,10 +9987,7 @@ func (m *RootPaths) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10140,10 +10101,7 @@ func (m *ServerAddressByClientCIDR) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10377,10 +10335,7 @@ func (m *Status) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10526,10 +10481,7 @@ func (m *StatusCause) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10760,10 +10712,7 @@ func (m *StatusDetails) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10845,10 +10794,7 @@ func (m *TableOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -10936,10 +10882,7 @@ func (m *Timestamp) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11053,10 +10996,7 @@ func (m *TypeMeta) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11170,10 +11110,7 @@ func (m *UpdateOptions) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11255,10 +11192,7 @@ func (m *Verbs) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -11373,10 +11307,7 @@ func (m *WatchEvent) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto index fd24483c0..4f41504f3 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto @@ -134,6 +134,31 @@ message APIVersions { repeated ServerAddressByClientCIDR serverAddressByClientCIDRs = 2; } +// ApplyOptions may be provided when applying an API object. +// FieldManager is required for apply requests. +// ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation +// that speaks specifically to how the options fields relate to apply. +message ApplyOptions { + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 1; + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. + optional bool force = 2; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required. + optional string fieldManager = 3; +} + // Condition contains details for one aspect of the current state of this API Resource. // --- // This struct is intended for direct use as an array at the field path .status.conditions. For example, @@ -268,18 +293,6 @@ message Duration { optional int64 duration = 1; } -// ExportOptions is the query options to the standard REST get call. -// Deprecated. Planned for removal in 1.18. -message ExportOptions { - // Should this value be exported. Export strips fields that a user can not specify. - // Deprecated. Planned for removal in 1.18. - optional bool export = 1; - - // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. - // Deprecated. Planned for removal in 1.18. - optional bool exact = 2; -} - // FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format. // // Each key is either a '.' representing the field itself, and will always map to an empty set, diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go index c1a077178..1abdd626d 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go @@ -55,7 +55,6 @@ var ParameterCodec = runtime.NewParameterCodec(scheme) var optionsTypes = []runtime.Object{ &ListOptions{}, - &ExportOptions{}, &GetOptions{}, &DeleteOptions{}, &CreateOptions{}, diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go index d84878d7c..79e2ad48a 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go @@ -99,10 +99,16 @@ type ListMeta struct { RemainingItemCount *int64 `json:"remainingItemCount,omitempty" protobuf:"bytes,4,opt,name=remainingItemCount"` } +// Field path constants that are specific to the internal API +// representation. +const ( + ObjectNameField = "metadata.name" +) + // These are internal finalizer values for Kubernetes-like APIs, must be qualified name unless defined here const ( - FinalizerOrphanDependents string = "orphan" - FinalizerDeleteDependents string = "foregroundDeletion" + FinalizerOrphanDependents = "orphan" + FinalizerDeleteDependents = "foregroundDeletion" ) // ObjectMeta is metadata that all persisted resources must have, which includes all objects @@ -283,15 +289,15 @@ type ObjectMeta struct { const ( // NamespaceDefault means the object is in the default namespace which is applied when not specified by clients - NamespaceDefault string = "default" + NamespaceDefault = "default" // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces - NamespaceAll string = "" + NamespaceAll = "" // NamespaceNone is the argument for a context when there is no namespace. - NamespaceNone string = "" + NamespaceNone = "" // NamespaceSystem is the system namespace where we place system components. - NamespaceSystem string = "kube-system" + NamespaceSystem = "kube-system" // NamespacePublic is the namespace where we place public info (ConfigMaps) - NamespacePublic string = "kube-public" + NamespacePublic = "kube-public" ) // OwnerReference contains enough information to let you identify an owning @@ -433,21 +439,6 @@ const ( // +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// ExportOptions is the query options to the standard REST get call. -// Deprecated. Planned for removal in 1.18. -type ExportOptions struct { - TypeMeta `json:",inline"` - // Should this value be exported. Export strips fields that a user can not specify. - // Deprecated. Planned for removal in 1.18. - Export bool `json:"export" protobuf:"varint,1,opt,name=export"` - // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. - // Deprecated. Planned for removal in 1.18. - Exact bool `json:"exact" protobuf:"varint,2,opt,name=exact"` -} - -// +k8s:conversion-gen:explicit-from=net/url.Values -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - // GetOptions is the standard query options to the standard REST get call. type GetOptions struct { TypeMeta `json:",inline"` @@ -589,6 +580,37 @@ type PatchOptions struct { FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,3,name=fieldManager"` } +// ApplyOptions may be provided when applying an API object. +// FieldManager is required for apply requests. +// ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation +// that speaks specifically to how the options fields relate to apply. +type ApplyOptions struct { + TypeMeta `json:",inline"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. + Force bool `json:"force" protobuf:"varint,2,opt,name=force"` + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required. + FieldManager string `json:"fieldManager" protobuf:"bytes,3,name=fieldManager"` +} + +func (o ApplyOptions) ToPatchOptions() PatchOptions { + return PatchOptions{DryRun: o.DryRun, Force: &o.Force, FieldManager: o.FieldManager} +} + // +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go index ace0abfb9..c33d8ffa7 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go @@ -86,6 +86,17 @@ func (APIVersions) SwaggerDoc() map[string]string { return map_APIVersions } +var map_ApplyOptions = map[string]string{ + "": "ApplyOptions may be provided when applying an API object. FieldManager is required for apply requests. ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation that speaks specifically to how the options fields relate to apply.", + "dryRun": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "force": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people.", + "fieldManager": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required.", +} + +func (ApplyOptions) SwaggerDoc() map[string]string { + return map_ApplyOptions +} + var map_Condition = map[string]string{ "": "Condition contains details for one aspect of the current state of this API Resource.", "type": "type of condition in CamelCase or in foo.example.com/CamelCase.", @@ -123,16 +134,6 @@ func (DeleteOptions) SwaggerDoc() map[string]string { return map_DeleteOptions } -var map_ExportOptions = map[string]string{ - "": "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - "export": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", -} - -func (ExportOptions) SwaggerDoc() map[string]string { - return map_ExportOptions -} - var map_FieldsV1 = map[string]string{ "": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:', where is the name of a field in a struct, or key in a map 'v:', where is the exact json formatted value of a list item 'i:', where is position of a item in a list 'k:', where is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", } diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go index 715adf2f9..a5a7f144a 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go @@ -173,7 +173,8 @@ func ValidateTableOptions(opts *metav1.TableOptions) field.ErrorList { func ValidateManagedFields(fieldsList []metav1.ManagedFieldsEntry, fldPath *field.Path) field.ErrorList { var allErrs field.ErrorList - for _, fields := range fieldsList { + for i, fields := range fieldsList { + fldPath := fldPath.Index(i) switch fields.Operation { case metav1.ManagedFieldsOperationApply, metav1.ManagedFieldsOperationUpdate: default: @@ -182,6 +183,7 @@ func ValidateManagedFields(fieldsList []metav1.ManagedFieldsEntry, fldPath *fiel if len(fields.FieldsType) > 0 && fields.FieldsType != "FieldsV1" { allErrs = append(allErrs, field.Invalid(fldPath.Child("fieldsType"), fields.FieldsType, "must be `FieldsV1`")) } + allErrs = append(allErrs, ValidateFieldManager(fields.Manager, fldPath.Child("manager"))...) } return allErrs } diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go index 06afd9b5b..3ecb67c82 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go @@ -50,11 +50,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*ExportOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_url_Values_To_v1_ExportOptions(a.(*url.Values), b.(*ExportOptions), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*GetOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_url_Values_To_v1_GetOptions(a.(*url.Values), b.(*GetOptions), scope) }); err != nil { @@ -339,31 +334,6 @@ func autoConvert_url_Values_To_v1_DeleteOptions(in *url.Values, out *DeleteOptio return nil } -func autoConvert_url_Values_To_v1_ExportOptions(in *url.Values, out *ExportOptions, s conversion.Scope) error { - // WARNING: Field TypeMeta does not have json tag, skipping. - - if values, ok := map[string][]string(*in)["export"]; ok && len(values) > 0 { - if err := runtime.Convert_Slice_string_To_bool(&values, &out.Export, s); err != nil { - return err - } - } else { - out.Export = false - } - if values, ok := map[string][]string(*in)["exact"]; ok && len(values) > 0 { - if err := runtime.Convert_Slice_string_To_bool(&values, &out.Exact, s); err != nil { - return err - } - } else { - out.Exact = false - } - return nil -} - -// Convert_url_Values_To_v1_ExportOptions is an autogenerated conversion function. -func Convert_url_Values_To_v1_ExportOptions(in *url.Values, out *ExportOptions, s conversion.Scope) error { - return autoConvert_url_Values_To_v1_ExportOptions(in, out, s) -} - func autoConvert_url_Values_To_v1_GetOptions(in *url.Values, out *GetOptions, s conversion.Scope) error { // WARNING: Field TypeMeta does not have json tag, skipping. diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go index 1aa73bd24..d43020da5 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go @@ -191,6 +191,28 @@ func (in *APIVersions) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplyOptions) DeepCopyInto(out *ApplyOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplyOptions. +func (in *ApplyOptions) DeepCopy() *ApplyOptions { + if in == nil { + return nil + } + out := new(ApplyOptions) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Condition) DeepCopyInto(out *Condition) { *out = *in @@ -304,31 +326,6 @@ func (in *Duration) DeepCopy() *Duration { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExportOptions) DeepCopyInto(out *ExportOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExportOptions. -func (in *ExportOptions) DeepCopy() *ExportOptions { - if in == nil { - return nil - } - out := new(ExportOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ExportOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FieldsV1) DeepCopyInto(out *FieldsV1) { *out = *in diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go index cd5fc9026..a5a949679 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go @@ -311,10 +311,7 @@ func (m *PartialObjectMetadataList) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/labels/labels.go b/constraint/vendor/k8s.io/apimachinery/pkg/labels/labels.go index d6bbeeaca..8360d842b 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/labels/labels.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/labels/labels.go @@ -20,6 +20,8 @@ import ( "fmt" "sort" "strings" + + "k8s.io/apimachinery/pkg/util/validation/field" ) // Labels allows you to present labels independently from their storage. @@ -79,7 +81,7 @@ func (ls Set) AsSelectorPreValidated() Selector { return SelectorFromValidatedSet(ls) } -// FormatLabels convert label map into plain string +// FormatLabels converts label map into plain string func FormatLabels(labelMap map[string]string) string { l := Set(labelMap).String() if l == "" { @@ -143,7 +145,7 @@ func Equals(labels1, labels2 Set) bool { // ConvertSelectorToLabelsMap converts selector string to labels map // and validates keys and values -func ConvertSelectorToLabelsMap(selector string) (Set, error) { +func ConvertSelectorToLabelsMap(selector string, opts ...field.PathOption) (Set, error) { labelsMap := Set{} if len(selector) == 0 { @@ -157,11 +159,11 @@ func ConvertSelectorToLabelsMap(selector string) (Set, error) { return labelsMap, fmt.Errorf("invalid selector: %s", l) } key := strings.TrimSpace(l[0]) - if err := validateLabelKey(key); err != nil { + if err := validateLabelKey(key, field.ToPath(opts...)); err != nil { return labelsMap, err } value := strings.TrimSpace(l[1]) - if err := validateLabelValue(key, value); err != nil { + if err := validateLabelValue(key, value, field.ToPath(opts...)); err != nil { return labelsMap, err } labelsMap[key] = value diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/labels/selector.go b/constraint/vendor/k8s.io/apimachinery/pkg/labels/selector.go index 50ae4f7ce..b0865777a 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/labels/selector.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/labels/selector.go @@ -17,18 +17,28 @@ limitations under the License. package labels import ( - "bytes" "fmt" "sort" "strconv" "strings" + "github.com/google/go-cmp/cmp" "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" + "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/klog/v2" ) +var ( + validRequirementOperators = []string{ + string(selection.In), string(selection.NotIn), + string(selection.Equals), string(selection.DoubleEquals), string(selection.NotEquals), + string(selection.Exists), string(selection.DoesNotExist), + string(selection.GreaterThan), string(selection.LessThan), + } +) + // Requirements is AND of all requirements. type Requirements []Requirement @@ -139,42 +149,47 @@ type Requirement struct { // of characters. See validateLabelKey for more details. // // The empty string is a valid value in the input values set. -func NewRequirement(key string, op selection.Operator, vals []string) (*Requirement, error) { - if err := validateLabelKey(key); err != nil { - return nil, err +// Returned error, if not nil, is guaranteed to be an aggregated field.ErrorList +func NewRequirement(key string, op selection.Operator, vals []string, opts ...field.PathOption) (*Requirement, error) { + var allErrs field.ErrorList + path := field.ToPath(opts...) + if err := validateLabelKey(key, path.Child("key")); err != nil { + allErrs = append(allErrs, err) } + + valuePath := path.Child("values") switch op { case selection.In, selection.NotIn: if len(vals) == 0 { - return nil, fmt.Errorf("for 'in', 'notin' operators, values set can't be empty") + allErrs = append(allErrs, field.Invalid(valuePath, vals, "for 'in', 'notin' operators, values set can't be empty")) } case selection.Equals, selection.DoubleEquals, selection.NotEquals: if len(vals) != 1 { - return nil, fmt.Errorf("exact-match compatibility requires one single value") + allErrs = append(allErrs, field.Invalid(valuePath, vals, "exact-match compatibility requires one single value")) } case selection.Exists, selection.DoesNotExist: if len(vals) != 0 { - return nil, fmt.Errorf("values set must be empty for exists and does not exist") + allErrs = append(allErrs, field.Invalid(valuePath, vals, "values set must be empty for exists and does not exist")) } case selection.GreaterThan, selection.LessThan: if len(vals) != 1 { - return nil, fmt.Errorf("for 'Gt', 'Lt' operators, exactly one value is required") + allErrs = append(allErrs, field.Invalid(valuePath, vals, "for 'Gt', 'Lt' operators, exactly one value is required")) } for i := range vals { if _, err := strconv.ParseInt(vals[i], 10, 64); err != nil { - return nil, fmt.Errorf("for 'Gt', 'Lt' operators, the value must be an integer") + allErrs = append(allErrs, field.Invalid(valuePath.Index(i), vals[i], "for 'Gt', 'Lt' operators, the value must be an integer")) } } default: - return nil, fmt.Errorf("operator '%v' is not recognized", op) + allErrs = append(allErrs, field.NotSupported(path.Child("operator"), op, validRequirementOperators)) } for i := range vals { - if err := validateLabelValue(key, vals[i]); err != nil { - return nil, err + if err := validateLabelValue(key, vals[i], valuePath.Index(i)); err != nil { + allErrs = append(allErrs, err) } } - return &Requirement{key: key, operator: op, strValues: vals}, nil + return &Requirement{key: key, operator: op, strValues: vals}, allErrs.ToAggregate() } func (r *Requirement) hasValue(value string) bool { @@ -262,6 +277,17 @@ func (r *Requirement) Values() sets.String { return ret } +// Equal checks the equality of requirement. +func (r Requirement) Equal(x Requirement) bool { + if r.key != x.key { + return false + } + if r.operator != x.operator { + return false + } + return cmp.Equal(r.strValues, x.strValues) +} + // Empty returns true if the internalSelector doesn't restrict selection space func (s internalSelector) Empty() bool { if s == nil { @@ -274,51 +300,58 @@ func (s internalSelector) Empty() bool { // Requirement. If called on an invalid Requirement, an error is // returned. See NewRequirement for creating a valid Requirement. func (r *Requirement) String() string { - var buffer bytes.Buffer + var sb strings.Builder + sb.Grow( + // length of r.key + len(r.key) + + // length of 'r.operator' + 2 spaces for the worst case ('in' and 'notin') + len(r.operator) + 2 + + // length of 'r.strValues' slice times. Heuristically 5 chars per word + +5*len(r.strValues)) if r.operator == selection.DoesNotExist { - buffer.WriteString("!") + sb.WriteString("!") } - buffer.WriteString(r.key) + sb.WriteString(r.key) switch r.operator { case selection.Equals: - buffer.WriteString("=") + sb.WriteString("=") case selection.DoubleEquals: - buffer.WriteString("==") + sb.WriteString("==") case selection.NotEquals: - buffer.WriteString("!=") + sb.WriteString("!=") case selection.In: - buffer.WriteString(" in ") + sb.WriteString(" in ") case selection.NotIn: - buffer.WriteString(" notin ") + sb.WriteString(" notin ") case selection.GreaterThan: - buffer.WriteString(">") + sb.WriteString(">") case selection.LessThan: - buffer.WriteString("<") + sb.WriteString("<") case selection.Exists, selection.DoesNotExist: - return buffer.String() + return sb.String() } switch r.operator { case selection.In, selection.NotIn: - buffer.WriteString("(") + sb.WriteString("(") } if len(r.strValues) == 1 { - buffer.WriteString(r.strValues[0]) + sb.WriteString(r.strValues[0]) } else { // only > 1 since == 0 prohibited by NewRequirement // normalizes value order on output, without mutating the in-memory selector representation // also avoids normalization when it is not required, and ensures we do not mutate shared data - buffer.WriteString(strings.Join(safeSort(r.strValues), ",")) + sb.WriteString(strings.Join(safeSort(r.strValues), ",")) } switch r.operator { case selection.In, selection.NotIn: - buffer.WriteString(")") + sb.WriteString(")") } - return buffer.String() + return sb.String() } -// safeSort sort input strings without modification +// safeSort sorts input strings without modification func safeSort(in []string) []string { if sort.StringsAreSorted(in) { return in @@ -366,7 +399,7 @@ func (s internalSelector) String() string { return strings.Join(reqs, ",") } -// RequiresExactMatch introspect whether a given selector requires a single specific field +// RequiresExactMatch introspects whether a given selector requires a single specific field // to be set, and if so returns the value it requires. func (s internalSelector) RequiresExactMatch(label string) (value string, found bool) { for ix := range s { @@ -444,7 +477,7 @@ func isWhitespace(ch byte) bool { return ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' } -// isSpecialSymbol detect if the character ch can be an operator +// isSpecialSymbol detects if the character ch can be an operator func isSpecialSymbol(ch byte) bool { switch ch { case '=', '!', '(', ')', ',', '>', '<': @@ -462,7 +495,7 @@ type Lexer struct { pos int } -// read return the character currently lexed +// read returns the character currently lexed // increment the position and check the buffer overflow func (l *Lexer) read() (b byte) { b = 0 @@ -560,6 +593,7 @@ type Parser struct { l *Lexer scannedItems []ScannedItem position int + path *field.Path } // ParserContext represents context during parsing: @@ -653,7 +687,7 @@ func (p *Parser) parseRequirement() (*Requirement, error) { return nil, err } if operator == selection.Exists || operator == selection.DoesNotExist { // operator found lookahead set checked - return NewRequirement(key, operator, []string{}) + return NewRequirement(key, operator, []string{}, field.WithPath(p.path)) } operator, err = p.parseOperator() if err != nil { @@ -669,11 +703,11 @@ func (p *Parser) parseRequirement() (*Requirement, error) { if err != nil { return nil, err } - return NewRequirement(key, operator, values.List()) + return NewRequirement(key, operator, values.List(), field.WithPath(p.path)) } -// parseKeyAndInferOperator parse literals. +// parseKeyAndInferOperator parses literals. // in case of no operator '!, in, notin, ==, =, !=' are found // the 'exists' operator is inferred func (p *Parser) parseKeyAndInferOperator() (string, selection.Operator, error) { @@ -687,7 +721,7 @@ func (p *Parser) parseKeyAndInferOperator() (string, selection.Operator, error) err := fmt.Errorf("found '%s', expected: identifier", literal) return "", "", err } - if err := validateLabelKey(literal); err != nil { + if err := validateLabelKey(literal, p.path); err != nil { return "", "", err } if t, _ := p.lookahead(Values); t == EndOfStringToken || t == CommaToken { @@ -698,7 +732,7 @@ func (p *Parser) parseKeyAndInferOperator() (string, selection.Operator, error) return literal, operator, nil } -// parseOperator return operator and eventually matchType +// parseOperator returns operator and eventually matchType // matchType can be exact func (p *Parser) parseOperator() (op selection.Operator, err error) { tok, lit := p.consume(KeyAndOperator) @@ -833,8 +867,8 @@ func (p *Parser) parseExactValue() (sets.String, error) { // the KEY exists and can be any VALUE. // (5) A requirement with just !KEY requires that the KEY not exist. // -func Parse(selector string) (Selector, error) { - parsedSelector, err := parse(selector) +func Parse(selector string, opts ...field.PathOption) (Selector, error) { + parsedSelector, err := parse(selector, field.ToPath(opts...)) if err == nil { return parsedSelector, nil } @@ -845,8 +879,8 @@ func Parse(selector string) (Selector, error) { // The callers of this method can then decide how to return the internalSelector struct to their // callers. This function has two callers now, one returns a Selector interface and the other // returns a list of requirements. -func parse(selector string) (internalSelector, error) { - p := &Parser{l: &Lexer{s: selector, pos: 0}} +func parse(selector string, path *field.Path) (internalSelector, error) { + p := &Parser{l: &Lexer{s: selector, pos: 0}, path: path} items, err := p.parse() if err != nil { return nil, err @@ -855,16 +889,16 @@ func parse(selector string) (internalSelector, error) { return internalSelector(items), err } -func validateLabelKey(k string) error { +func validateLabelKey(k string, path *field.Path) *field.Error { if errs := validation.IsQualifiedName(k); len(errs) != 0 { - return fmt.Errorf("invalid label key %q: %s", k, strings.Join(errs, "; ")) + return field.Invalid(path, k, strings.Join(errs, "; ")) } return nil } -func validateLabelValue(k, v string) error { +func validateLabelValue(k, v string, path *field.Path) *field.Error { if errs := validation.IsValidLabelValue(v); len(errs) != 0 { - return fmt.Errorf("invalid label value: %q: at key: %q: %s", v, k, strings.Join(errs, "; ")) + return field.Invalid(path.Key(k), v, strings.Join(errs, "; ")) } return nil } @@ -918,6 +952,6 @@ func SelectorFromValidatedSet(ls Set) Selector { // processing on selector requirements. // See the documentation for Parse() function for more details. // TODO: Consider exporting the internalSelector type instead. -func ParseToRequirements(selector string) ([]Requirement, error) { - return parse(selector) +func ParseToRequirements(selector string, opts ...field.PathOption) ([]Requirement, error) { + return parse(selector, field.ToPath(opts...)) } diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go index 071971817..ac428d610 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go @@ -450,10 +450,7 @@ func (m *RawExtension) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -567,10 +564,7 @@ func (m *TypeMeta) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -751,10 +745,7 @@ func (m *Unknown) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go index 697dd4ed7..ae47ab3ab 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go @@ -129,12 +129,6 @@ func (s *Scheme) nameFunc(t reflect.Type) string { return gvks[0].Kind } -// fromScope gets the input version, desired output version, and desired Scheme -// from a conversion.Scope. -func (s *Scheme) fromScope(scope conversion.Scope) *Scheme { - return s -} - // Converter allows access to the converter for the scheme func (s *Scheme) Converter() *conversion.Converter { return s.converter @@ -235,6 +229,32 @@ func (s *Scheme) KnownTypes(gv schema.GroupVersion) map[string]reflect.Type { return types } +// VersionsForGroupKind returns the versions that a particular GroupKind can be converted to within the given group. +// A GroupKind might be converted to a different group. That information is available in EquivalentResourceMapper. +func (s *Scheme) VersionsForGroupKind(gk schema.GroupKind) []schema.GroupVersion { + availableVersions := []schema.GroupVersion{} + for gvk := range s.gvkToType { + if gk != gvk.GroupKind() { + continue + } + + availableVersions = append(availableVersions, gvk.GroupVersion()) + } + + // order the return for stability + ret := []schema.GroupVersion{} + for _, version := range s.PrioritizedVersionsForGroup(gk.Group) { + for _, availableVersion := range availableVersions { + if version != availableVersion { + continue + } + ret = append(ret, availableVersion) + } + } + + return ret +} + // AllKnownTypes returns the all known types. func (s *Scheme) AllKnownTypes() map[schema.GroupVersionKind]reflect.Type { return s.gvkToType diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go index 83b2e1393..48f0777b2 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go @@ -333,13 +333,12 @@ func (s *Serializer) Identifier() runtime.Identifier { } // RecognizesData implements the RecognizingDecoder interface. -func (s *Serializer) RecognizesData(peek io.Reader) (ok, unknown bool, err error) { +func (s *Serializer) RecognizesData(data []byte) (ok, unknown bool, err error) { if s.options.Yaml { // we could potentially look for '---' return false, true, nil } - _, _, ok = utilyaml.GuessJSONStream(peek, 2048) - return ok, false, nil + return utilyaml.IsJSONBuffer(data), false, nil } // Framer is the default JSON framing behavior, with newlines delimiting individual objects. diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go index 404fb1b7e..8358d77c3 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go @@ -120,7 +120,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *schema.GroupVersionKind, i if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { *intoUnknown = unk - if ok, _, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok { + if ok, _, _ := s.RecognizesData(unk.Raw); ok { intoUnknown.ContentType = runtime.ContentTypeProtobuf } return intoUnknown, &actual, nil @@ -245,19 +245,8 @@ func (s *Serializer) Identifier() runtime.Identifier { } // RecognizesData implements the RecognizingDecoder interface. -func (s *Serializer) RecognizesData(peek io.Reader) (bool, bool, error) { - prefix := make([]byte, 4) - n, err := peek.Read(prefix) - if err != nil { - if err == io.EOF { - return false, false, nil - } - return false, false, err - } - if n != 4 { - return false, false, nil - } - return bytes.Equal(s.prefix, prefix), false, nil +func (s *Serializer) RecognizesData(data []byte) (bool, bool, error) { + return bytes.HasPrefix(data, s.prefix), false, nil } // copyKindDefaults defaults dst to the value in src if dst does not have a value set. diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go index 38497ab53..709f85291 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/runtime/serializer/recognizer/recognizer.go @@ -17,10 +17,7 @@ limitations under the License. package recognizer import ( - "bufio" - "bytes" "fmt" - "io" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -35,7 +32,7 @@ type RecognizingDecoder interface { // provides) and may return unknown if the data provided is not sufficient to make a // a determination. When peek returns EOF that may mean the end of the input or the // end of buffered input - recognizers should return the best guess at that time. - RecognizesData(peek io.Reader) (ok, unknown bool, err error) + RecognizesData(peek []byte) (ok, unknown bool, err error) } // NewDecoder creates a decoder that will attempt multiple decoders in an order defined @@ -57,16 +54,15 @@ type decoder struct { var _ RecognizingDecoder = &decoder{} -func (d *decoder) RecognizesData(peek io.Reader) (bool, bool, error) { +func (d *decoder) RecognizesData(data []byte) (bool, bool, error) { var ( lastErr error anyUnknown bool ) - data, _ := bufio.NewReaderSize(peek, 1024).Peek(1024) for _, r := range d.decoders { switch t := r.(type) { case RecognizingDecoder: - ok, unknown, err := t.RecognizesData(bytes.NewBuffer(data)) + ok, unknown, err := t.RecognizesData(data) if err != nil { lastErr = err continue @@ -91,8 +87,7 @@ func (d *decoder) Decode(data []byte, gvk *schema.GroupVersionKind, into runtime for _, r := range d.decoders { switch t := r.(type) { case RecognizingDecoder: - buf := bytes.NewBuffer(data) - ok, unknown, err := t.RecognizesData(buf) + ok, unknown, err := t.RecognizesData(data) if err != nil { lastErr = err continue diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go b/constraint/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go index 3e1e2517b..1a544d3b2 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go @@ -34,6 +34,7 @@ type PassiveClock interface { type Clock interface { PassiveClock After(time.Duration) <-chan time.Time + AfterFunc(time.Duration, func()) Timer NewTimer(time.Duration) Timer Sleep(time.Duration) NewTicker(time.Duration) Ticker @@ -57,6 +58,13 @@ func (RealClock) After(d time.Duration) <-chan time.Time { return time.After(d) } +// AfterFunc is the same as time.AfterFunc(d, f). +func (RealClock) AfterFunc(d time.Duration, f func()) Timer { + return &realTimer{ + timer: time.AfterFunc(d, f), + } +} + // NewTimer returns a new Timer. func (RealClock) NewTimer(d time.Duration) Timer { return &realTimer{ @@ -95,6 +103,7 @@ type fakeClockWaiter struct { stepInterval time.Duration skipIfBlocked bool destChan chan time.Time + afterFunc func() } // NewFakePassiveClock returns a new FakePassiveClock. @@ -145,6 +154,25 @@ func (f *FakeClock) After(d time.Duration) <-chan time.Time { return ch } +// AfterFunc is the Fake version of time.AfterFunc(d, callback). +func (f *FakeClock) AfterFunc(d time.Duration, cb func()) Timer { + f.lock.Lock() + defer f.lock.Unlock() + stopTime := f.time.Add(d) + ch := make(chan time.Time, 1) // Don't block! + + timer := &fakeTimer{ + fakeClock: f, + waiter: fakeClockWaiter{ + targetTime: stopTime, + destChan: ch, + afterFunc: cb, + }, + } + f.waiters = append(f.waiters, timer.waiter) + return timer +} + // NewTimer is the Fake version of time.NewTimer(d). func (f *FakeClock) NewTimer(d time.Duration) Timer { f.lock.Lock() @@ -211,6 +239,10 @@ func (f *FakeClock) setTimeLocked(t time.Time) { w.destChan <- t } + if w.afterFunc != nil { + w.afterFunc() + } + if w.stepInterval > 0 { for !w.targetTime.After(t) { w.targetTime = w.targetTime.Add(w.stepInterval) @@ -225,8 +257,8 @@ func (f *FakeClock) setTimeLocked(t time.Time) { f.waiters = newWaiters } -// HasWaiters returns true if After has been called on f but not yet satisfied (so you can -// write race-free tests). +// HasWaiters returns true if After or AfterFunc has been called on f but not yet satisfied +// (so you can write race-free tests). func (f *FakeClock) HasWaiters() bool { f.lock.RLock() defer f.lock.RUnlock() @@ -261,6 +293,12 @@ func (*IntervalClock) After(d time.Duration) <-chan time.Time { panic("IntervalClock doesn't implement After") } +// AfterFunc is currently unimplemented, will panic. +// TODO: make interval clock use FakeClock so this can be implemented. +func (*IntervalClock) AfterFunc(d time.Duration, cb func()) Timer { + panic("IntervalClock doesn't implement AfterFunc") +} + // NewTimer is currently unimplemented, will panic. // TODO: make interval clock use FakeClock so this can be implemented. func (*IntervalClock) NewTimer(d time.Duration) Timer { diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go b/constraint/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go index ec1cb70f2..a4792034a 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go @@ -268,10 +268,7 @@ func (m *IntOrString) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/constraint/vendor/k8s.io/apimachinery/pkg/util/net/http.go index ba63d02df..ce69b8054 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/util/net/http.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/util/net/http.go @@ -131,7 +131,7 @@ func SetTransportDefaults(t *http.Transport) *http.Transport { t = SetOldTransportDefaults(t) // Allow clients to disable http2 if needed. if s := os.Getenv("DISABLE_HTTP2"); len(s) > 0 { - klog.Infof("HTTP2 has been explicitly disabled") + klog.Info("HTTP2 has been explicitly disabled") } else if allowsHTTP2(t) { if err := configureHTTP2Transport(t); err != nil { klog.Warningf("Transport failed http2 configuration: %v", err) @@ -693,7 +693,7 @@ func parseQuotedString(quotedString string) (string, string, error) { var remainder string escaping := false closedQuote := false - result := &bytes.Buffer{} + result := &strings.Builder{} loop: for i := 0; i < len(quotedString); i++ { b := quotedString[i] diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/util/net/interface.go b/constraint/vendor/k8s.io/apimachinery/pkg/util/net/interface.go index 204e223ca..9adf4cfe4 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/util/net/interface.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/util/net/interface.go @@ -266,6 +266,36 @@ func getIPFromInterface(intfName string, forFamily AddressFamily, nw networkInte return nil, nil } +// getIPFromLoopbackInterface gets the IPs on a loopback interface and returns a global unicast address, if any. +// The loopback interface must be up, the IP must in the family requested, and the IP must be a global unicast address. +func getIPFromLoopbackInterface(forFamily AddressFamily, nw networkInterfacer) (net.IP, error) { + intfs, err := nw.Interfaces() + if err != nil { + return nil, err + } + for _, intf := range intfs { + if !isInterfaceUp(&intf) { + continue + } + if intf.Flags&(net.FlagLoopback) != 0 { + addrs, err := nw.Addrs(&intf) + if err != nil { + return nil, err + } + klog.V(4).Infof("Interface %q has %d addresses :%v.", intf.Name, len(addrs), addrs) + matchingIP, err := getMatchingGlobalIP(addrs, forFamily) + if err != nil { + return nil, err + } + if matchingIP != nil { + klog.V(4).Infof("Found valid IPv%d address %v for interface %q.", int(forFamily), matchingIP, intf.Name) + return matchingIP, nil + } + } + } + return nil, nil +} + // memberOf tells if the IP is of the desired family. Used for checking interface addresses. func memberOf(ip net.IP, family AddressFamily) bool { if ip.To4() != nil { @@ -393,8 +423,9 @@ func getAllDefaultRoutes() ([]Route, error) { } // chooseHostInterfaceFromRoute cycles through each default route provided, looking for a -// global IP address from the interface for the route. addressFamilies determines whether it -// prefers IPv4 or IPv6 +// global IP address from the interface for the route. If there are routes but no global +// address is obtained from the interfaces, it checks if the loopback interface has a global address. +// addressFamilies determines whether it prefers IPv4 or IPv6 func chooseHostInterfaceFromRoute(routes []Route, nw networkInterfacer, addressFamilies AddressFamilyPreference) (net.IP, error) { for _, family := range addressFamilies { klog.V(4).Infof("Looking for default routes with IPv%d addresses", uint(family)) @@ -411,6 +442,17 @@ func chooseHostInterfaceFromRoute(routes []Route, nw networkInterfacer, addressF klog.V(4).Infof("Found active IP %v ", finalIP) return finalIP, nil } + // In case of network setups where default routes are present, but network + // interfaces use only link-local addresses (e.g. as described in RFC5549). + // the global IP is assigned to the loopback interface, and we should use it + loopbackIP, err := getIPFromLoopbackInterface(family, nw) + if err != nil { + return nil, err + } + if loopbackIP != nil { + klog.V(4).Infof("Found active IP %v on Loopback interface", loopbackIP) + return loopbackIP, nil + } } } klog.V(4).Infof("No active IP found by looking at default routes") diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go b/constraint/vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go index f9be7ac33..daccb0589 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/util/validation/field/path.go @@ -22,6 +22,29 @@ import ( "strconv" ) +type pathOptions struct { + path *Path +} + +// PathOption modifies a pathOptions +type PathOption func(o *pathOptions) + +// WithPath generates a PathOption +func WithPath(p *Path) PathOption { + return func(o *pathOptions) { + o.path = p + } +} + +// ToPath produces *Path from a set of PathOption +func ToPath(opts ...PathOption) *Path { + c := &pathOptions{} + for _, opt := range opts { + opt(c) + } + return c.path +} + // Path represents the path from some root to a particular field. type Path struct { name string // the name of this field or "" if this is an index diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go b/constraint/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go index 7fe706467..612d63a69 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go @@ -22,13 +22,11 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "strings" "unicode" jsonutil "k8s.io/apimachinery/pkg/util/json" - "k8s.io/klog/v2" "sigs.k8s.io/yaml" ) @@ -215,16 +213,15 @@ type YAMLOrJSONDecoder struct { bufferSize int decoder decoder - rawData []byte } type JSONSyntaxError struct { - Line int - Err error + Offset int64 + Err error } func (e JSONSyntaxError) Error() string { - return fmt.Sprintf("json: line %d: %s", e.Line, e.Err.Error()) + return fmt.Sprintf("json: offset %d: %s", e.Offset, e.Err.Error()) } type YAMLSyntaxError struct { @@ -250,35 +247,18 @@ func NewYAMLOrJSONDecoder(r io.Reader, bufferSize int) *YAMLOrJSONDecoder { // provide object, or returns an error. func (d *YAMLOrJSONDecoder) Decode(into interface{}) error { if d.decoder == nil { - buffer, origData, isJSON := GuessJSONStream(d.r, d.bufferSize) + buffer, _, isJSON := GuessJSONStream(d.r, d.bufferSize) if isJSON { d.decoder = json.NewDecoder(buffer) - d.rawData = origData } else { d.decoder = NewYAMLToJSONDecoder(buffer) } } err := d.decoder.Decode(into) - if jsonDecoder, ok := d.decoder.(*json.Decoder); ok { - if syntax, ok := err.(*json.SyntaxError); ok { - data, readErr := ioutil.ReadAll(jsonDecoder.Buffered()) - if readErr != nil { - klog.V(4).Infof("reading stream failed: %v", readErr) - } - js := string(data) - - // if contents from io.Reader are not complete, - // use the original raw data to prevent panic - if int64(len(js)) <= syntax.Offset { - js = string(d.rawData) - } - - start := strings.LastIndex(js[:syntax.Offset], "\n") + 1 - line := strings.Count(js[:start], "\n") - return JSONSyntaxError{ - Line: line, - Err: fmt.Errorf(syntax.Error()), - } + if syntax, ok := err.(*json.SyntaxError); ok { + return JSONSyntaxError{ + Offset: syntax.Offset, + Err: syntax, } } return err @@ -363,6 +343,12 @@ func GuessJSONStream(r io.Reader, size int) (io.Reader, []byte, bool) { return buffer, b, hasJSONPrefix(b) } +// IsJSONBuffer scans the provided buffer, looking +// for an open brace indicating this is JSON. +func IsJSONBuffer(buf []byte) bool { + return hasJSONPrefix(buf) +} + var jsonPrefix = []byte("{") // hasJSONPrefix returns true if the provided buffer appears to start with diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/watch/mux.go b/constraint/vendor/k8s.io/apimachinery/pkg/watch/mux.go index 0aaf01adc..e01d51906 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/watch/mux.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/watch/mux.go @@ -74,6 +74,22 @@ func NewBroadcaster(queueLength int, fullChannelBehavior FullChannelBehavior) *B return m } +// NewLongQueueBroadcaster functions nearly identically to NewBroadcaster, +// except that the incoming queue is the same size as the outgoing queues +// (specified by queueLength). +func NewLongQueueBroadcaster(queueLength int, fullChannelBehavior FullChannelBehavior) *Broadcaster { + m := &Broadcaster{ + watchers: map[int64]*broadcasterWatcher{}, + incoming: make(chan Event, queueLength), + stopped: make(chan struct{}), + watchQueueLength: queueLength, + fullChannelBehavior: fullChannelBehavior, + } + m.distributing.Add(1) + go m.loop() + return m +} + const internalRunFunctionMarker = "internal-do-function" // a function type we can shoehorn into the queue. @@ -198,6 +214,18 @@ func (m *Broadcaster) Action(action EventType, obj runtime.Object) { m.incoming <- Event{action, obj} } +// Action distributes the given event among all watchers, or drops it on the floor +// if too many incoming actions are queued up. Returns true if the action was sent, +// false if dropped. +func (m *Broadcaster) ActionOrDrop(action EventType, obj runtime.Object) bool { + select { + case m.incoming <- Event{action, obj}: + return true + default: + return false + } +} + // Shutdown disconnects all watchers (but any queued events will still be distributed). // You must not call Action or Watch* after calling Shutdown. This call blocks // until all events have been distributed through the outbound channels. Note diff --git a/constraint/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go b/constraint/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go index 99f6770b9..42dcac2b9 100644 --- a/constraint/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go +++ b/constraint/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go @@ -55,7 +55,7 @@ type StreamWatcher struct { source Decoder reporter Reporter result chan Event - stopped bool + done chan struct{} } // NewStreamWatcher creates a StreamWatcher from the given decoder. @@ -67,6 +67,11 @@ func NewStreamWatcher(d Decoder, r Reporter) *StreamWatcher { // goroutine/channel, but impossible for them to remove it, // so nonbuffered is better. result: make(chan Event), + // If the watcher is externally stopped there is no receiver anymore + // and the send operations on the result channel, especially the + // error reporting might block forever. + // Therefore a dedicated stop channel is used to resolve this blocking. + done: make(chan struct{}), } go sw.receive() return sw @@ -82,19 +87,15 @@ func (sw *StreamWatcher) Stop() { // Call Close() exactly once by locking and setting a flag. sw.Lock() defer sw.Unlock() - if !sw.stopped { - sw.stopped = true + // closing a closed channel always panics, therefore check before closing + select { + case <-sw.done: + default: + close(sw.done) sw.source.Close() } } -// stopping returns true if Stop() was called previously. -func (sw *StreamWatcher) stopping() bool { - sw.Lock() - defer sw.Unlock() - return sw.stopped -} - // receive reads result from the decoder in a loop and sends down the result channel. func (sw *StreamWatcher) receive() { defer utilruntime.HandleCrash() @@ -103,10 +104,6 @@ func (sw *StreamWatcher) receive() { for { action, obj, err := sw.source.Decode() if err != nil { - // Ignore expected error. - if sw.stopping() { - return - } switch err { case io.EOF: // watch closed normally @@ -116,17 +113,24 @@ func (sw *StreamWatcher) receive() { if net.IsProbableEOF(err) || net.IsTimeout(err) { klog.V(5).Infof("Unable to decode an event from the watch stream: %v", err) } else { - sw.result <- Event{ + select { + case <-sw.done: + case sw.result <- Event{ Type: Error, Object: sw.reporter.AsObject(fmt.Errorf("unable to decode an event from the watch stream: %v", err)), + }: } } } return } - sw.result <- Event{ + select { + case <-sw.done: + return + case sw.result <- Event{ Type: action, Object: obj, + }: } } } diff --git a/constraint/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go b/constraint/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go index a849575b8..701540d64 100644 --- a/constraint/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go +++ b/constraint/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go @@ -47,7 +47,7 @@ type EgressSelector struct { } // EgressType is an indicator of which egress selection should be used for sending traffic. -// See https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190226-network-proxy.md#network-context +// See https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/1281-network-proxy/README.md#network-context type EgressType int const ( @@ -226,7 +226,7 @@ func (d *dialerCreator) createDialer() utilnet.DialFunc { return directDialer } return func(ctx context.Context, network, addr string) (net.Conn, error) { - trace := utiltrace.New(fmt.Sprintf("Proxy via HTTP Connect over %s", d.options.transport), utiltrace.Field{Key: "address", Value: addr}) + trace := utiltrace.New(fmt.Sprintf("Proxy via %s protocol over %s", d.options.protocol, d.options.transport), utiltrace.Field{Key: "address", Value: addr}) defer trace.LogIfLong(500 * time.Millisecond) start := egressmetrics.Metrics.Clock().Now() proxier, err := d.connector.connect() diff --git a/constraint/vendor/k8s.io/client-go/dynamic/interface.go b/constraint/vendor/k8s.io/client-go/dynamic/interface.go new file mode 100644 index 000000000..b08067c34 --- /dev/null +++ b/constraint/vendor/k8s.io/client-go/dynamic/interface.go @@ -0,0 +1,61 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dynamic + +import ( + "context" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/watch" +) + +type Interface interface { + Resource(resource schema.GroupVersionResource) NamespaceableResourceInterface +} + +type ResourceInterface interface { + Create(ctx context.Context, obj *unstructured.Unstructured, options metav1.CreateOptions, subresources ...string) (*unstructured.Unstructured, error) + Update(ctx context.Context, obj *unstructured.Unstructured, options metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) + UpdateStatus(ctx context.Context, obj *unstructured.Unstructured, options metav1.UpdateOptions) (*unstructured.Unstructured, error) + Delete(ctx context.Context, name string, options metav1.DeleteOptions, subresources ...string) error + DeleteCollection(ctx context.Context, options metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(ctx context.Context, name string, options metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) + List(ctx context.Context, opts metav1.ListOptions) (*unstructured.UnstructuredList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, options metav1.PatchOptions, subresources ...string) (*unstructured.Unstructured, error) +} + +type NamespaceableResourceInterface interface { + Namespace(string) ResourceInterface + ResourceInterface +} + +// APIPathResolverFunc knows how to convert a groupVersion to its API path. The Kind field is optional. +// TODO find a better place to move this for existing callers +type APIPathResolverFunc func(kind schema.GroupVersionKind) string + +// LegacyAPIPathResolverFunc can resolve paths properly with the legacy API. +// TODO find a better place to move this for existing callers +func LegacyAPIPathResolverFunc(kind schema.GroupVersionKind) string { + if len(kind.Group) == 0 { + return "/api" + } + return "/apis" +} diff --git a/constraint/vendor/k8s.io/client-go/dynamic/scheme.go b/constraint/vendor/k8s.io/client-go/dynamic/scheme.go new file mode 100644 index 000000000..3168c872c --- /dev/null +++ b/constraint/vendor/k8s.io/client-go/dynamic/scheme.go @@ -0,0 +1,108 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dynamic + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/runtime/serializer/json" +) + +var watchScheme = runtime.NewScheme() +var basicScheme = runtime.NewScheme() +var deleteScheme = runtime.NewScheme() +var parameterScheme = runtime.NewScheme() +var deleteOptionsCodec = serializer.NewCodecFactory(deleteScheme) +var dynamicParameterCodec = runtime.NewParameterCodec(parameterScheme) + +var versionV1 = schema.GroupVersion{Version: "v1"} + +func init() { + metav1.AddToGroupVersion(watchScheme, versionV1) + metav1.AddToGroupVersion(basicScheme, versionV1) + metav1.AddToGroupVersion(parameterScheme, versionV1) + metav1.AddToGroupVersion(deleteScheme, versionV1) +} + +// basicNegotiatedSerializer is used to handle discovery and error handling serialization +type basicNegotiatedSerializer struct{} + +func (s basicNegotiatedSerializer) SupportedMediaTypes() []runtime.SerializerInfo { + return []runtime.SerializerInfo{ + { + MediaType: "application/json", + MediaTypeType: "application", + MediaTypeSubType: "json", + EncodesAsText: true, + Serializer: json.NewSerializer(json.DefaultMetaFactory, unstructuredCreater{basicScheme}, unstructuredTyper{basicScheme}, false), + PrettySerializer: json.NewSerializer(json.DefaultMetaFactory, unstructuredCreater{basicScheme}, unstructuredTyper{basicScheme}, true), + StreamSerializer: &runtime.StreamSerializerInfo{ + EncodesAsText: true, + Serializer: json.NewSerializer(json.DefaultMetaFactory, basicScheme, basicScheme, false), + Framer: json.Framer, + }, + }, + } +} + +func (s basicNegotiatedSerializer) EncoderForVersion(encoder runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder { + return runtime.WithVersionEncoder{ + Version: gv, + Encoder: encoder, + ObjectTyper: unstructuredTyper{basicScheme}, + } +} + +func (s basicNegotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder { + return decoder +} + +type unstructuredCreater struct { + nested runtime.ObjectCreater +} + +func (c unstructuredCreater) New(kind schema.GroupVersionKind) (runtime.Object, error) { + out, err := c.nested.New(kind) + if err == nil { + return out, nil + } + out = &unstructured.Unstructured{} + out.GetObjectKind().SetGroupVersionKind(kind) + return out, nil +} + +type unstructuredTyper struct { + nested runtime.ObjectTyper +} + +func (t unstructuredTyper) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) { + kinds, unversioned, err := t.nested.ObjectKinds(obj) + if err == nil { + return kinds, unversioned, nil + } + if _, ok := obj.(runtime.Unstructured); ok && !obj.GetObjectKind().GroupVersionKind().Empty() { + return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil + } + return nil, false, err +} + +func (t unstructuredTyper) Recognizes(gvk schema.GroupVersionKind) bool { + return true +} diff --git a/constraint/vendor/k8s.io/client-go/dynamic/simple.go b/constraint/vendor/k8s.io/client-go/dynamic/simple.go new file mode 100644 index 000000000..9ae320d30 --- /dev/null +++ b/constraint/vendor/k8s.io/client-go/dynamic/simple.go @@ -0,0 +1,327 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dynamic + +import ( + "context" + "fmt" + + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/rest" +) + +type dynamicClient struct { + client *rest.RESTClient +} + +var _ Interface = &dynamicClient{} + +// ConfigFor returns a copy of the provided config with the +// appropriate dynamic client defaults set. +func ConfigFor(inConfig *rest.Config) *rest.Config { + config := rest.CopyConfig(inConfig) + config.AcceptContentTypes = "application/json" + config.ContentType = "application/json" + config.NegotiatedSerializer = basicNegotiatedSerializer{} // this gets used for discovery and error handling types + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + return config +} + +// NewForConfigOrDie creates a new Interface for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) Interface { + ret, err := NewForConfig(c) + if err != nil { + panic(err) + } + return ret +} + +// NewForConfig creates a new dynamic client or returns an error. +func NewForConfig(inConfig *rest.Config) (Interface, error) { + config := ConfigFor(inConfig) + // for serializing the options + config.GroupVersion = &schema.GroupVersion{} + config.APIPath = "/if-you-see-this-search-for-the-break" + + restClient, err := rest.RESTClientFor(config) + if err != nil { + return nil, err + } + + return &dynamicClient{client: restClient}, nil +} + +type dynamicResourceClient struct { + client *dynamicClient + namespace string + resource schema.GroupVersionResource +} + +func (c *dynamicClient) Resource(resource schema.GroupVersionResource) NamespaceableResourceInterface { + return &dynamicResourceClient{client: c, resource: resource} +} + +func (c *dynamicResourceClient) Namespace(ns string) ResourceInterface { + ret := *c + ret.namespace = ns + return &ret +} + +func (c *dynamicResourceClient) Create(ctx context.Context, obj *unstructured.Unstructured, opts metav1.CreateOptions, subresources ...string) (*unstructured.Unstructured, error) { + outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj) + if err != nil { + return nil, err + } + name := "" + if len(subresources) > 0 { + accessor, err := meta.Accessor(obj) + if err != nil { + return nil, err + } + name = accessor.GetName() + if len(name) == 0 { + return nil, fmt.Errorf("name is required") + } + } + + result := c.client.client. + Post(). + AbsPath(append(c.makeURLSegments(name), subresources...)...). + Body(outBytes). + SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1). + Do(ctx) + if err := result.Error(); err != nil { + return nil, err + } + + retBytes, err := result.Raw() + if err != nil { + return nil, err + } + uncastObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, retBytes) + if err != nil { + return nil, err + } + return uncastObj.(*unstructured.Unstructured), nil +} + +func (c *dynamicResourceClient) Update(ctx context.Context, obj *unstructured.Unstructured, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) { + accessor, err := meta.Accessor(obj) + if err != nil { + return nil, err + } + name := accessor.GetName() + if len(name) == 0 { + return nil, fmt.Errorf("name is required") + } + outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj) + if err != nil { + return nil, err + } + + result := c.client.client. + Put(). + AbsPath(append(c.makeURLSegments(name), subresources...)...). + Body(outBytes). + SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1). + Do(ctx) + if err := result.Error(); err != nil { + return nil, err + } + + retBytes, err := result.Raw() + if err != nil { + return nil, err + } + uncastObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, retBytes) + if err != nil { + return nil, err + } + return uncastObj.(*unstructured.Unstructured), nil +} + +func (c *dynamicResourceClient) UpdateStatus(ctx context.Context, obj *unstructured.Unstructured, opts metav1.UpdateOptions) (*unstructured.Unstructured, error) { + accessor, err := meta.Accessor(obj) + if err != nil { + return nil, err + } + name := accessor.GetName() + if len(name) == 0 { + return nil, fmt.Errorf("name is required") + } + + outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj) + if err != nil { + return nil, err + } + + result := c.client.client. + Put(). + AbsPath(append(c.makeURLSegments(name), "status")...). + Body(outBytes). + SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1). + Do(ctx) + if err := result.Error(); err != nil { + return nil, err + } + + retBytes, err := result.Raw() + if err != nil { + return nil, err + } + uncastObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, retBytes) + if err != nil { + return nil, err + } + return uncastObj.(*unstructured.Unstructured), nil +} + +func (c *dynamicResourceClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions, subresources ...string) error { + if len(name) == 0 { + return fmt.Errorf("name is required") + } + deleteOptionsByte, err := runtime.Encode(deleteOptionsCodec.LegacyCodec(schema.GroupVersion{Version: "v1"}), &opts) + if err != nil { + return err + } + + result := c.client.client. + Delete(). + AbsPath(append(c.makeURLSegments(name), subresources...)...). + Body(deleteOptionsByte). + Do(ctx) + return result.Error() +} + +func (c *dynamicResourceClient) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOptions metav1.ListOptions) error { + deleteOptionsByte, err := runtime.Encode(deleteOptionsCodec.LegacyCodec(schema.GroupVersion{Version: "v1"}), &opts) + if err != nil { + return err + } + + result := c.client.client. + Delete(). + AbsPath(c.makeURLSegments("")...). + Body(deleteOptionsByte). + SpecificallyVersionedParams(&listOptions, dynamicParameterCodec, versionV1). + Do(ctx) + return result.Error() +} + +func (c *dynamicResourceClient) Get(ctx context.Context, name string, opts metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) { + if len(name) == 0 { + return nil, fmt.Errorf("name is required") + } + result := c.client.client.Get().AbsPath(append(c.makeURLSegments(name), subresources...)...).SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).Do(ctx) + if err := result.Error(); err != nil { + return nil, err + } + retBytes, err := result.Raw() + if err != nil { + return nil, err + } + uncastObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, retBytes) + if err != nil { + return nil, err + } + return uncastObj.(*unstructured.Unstructured), nil +} + +func (c *dynamicResourceClient) List(ctx context.Context, opts metav1.ListOptions) (*unstructured.UnstructuredList, error) { + result := c.client.client.Get().AbsPath(c.makeURLSegments("")...).SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).Do(ctx) + if err := result.Error(); err != nil { + return nil, err + } + retBytes, err := result.Raw() + if err != nil { + return nil, err + } + uncastObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, retBytes) + if err != nil { + return nil, err + } + if list, ok := uncastObj.(*unstructured.UnstructuredList); ok { + return list, nil + } + + list, err := uncastObj.(*unstructured.Unstructured).ToList() + if err != nil { + return nil, err + } + return list, nil +} + +func (c *dynamicResourceClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.client.client.Get().AbsPath(c.makeURLSegments("")...). + SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1). + Watch(ctx) +} + +func (c *dynamicResourceClient) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (*unstructured.Unstructured, error) { + if len(name) == 0 { + return nil, fmt.Errorf("name is required") + } + result := c.client.client. + Patch(pt). + AbsPath(append(c.makeURLSegments(name), subresources...)...). + Body(data). + SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1). + Do(ctx) + if err := result.Error(); err != nil { + return nil, err + } + retBytes, err := result.Raw() + if err != nil { + return nil, err + } + uncastObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, retBytes) + if err != nil { + return nil, err + } + return uncastObj.(*unstructured.Unstructured), nil +} + +func (c *dynamicResourceClient) makeURLSegments(name string) []string { + url := []string{} + if len(c.resource.Group) == 0 { + url = append(url, "api") + } else { + url = append(url, "apis", c.resource.Group) + } + url = append(url, c.resource.Version) + + if len(c.namespace) > 0 { + url = append(url, "namespaces", c.namespace) + } + url = append(url, c.resource.Resource) + + if len(name) > 0 { + url = append(url, name) + } + + return url +} diff --git a/constraint/vendor/k8s.io/client-go/kubernetes/scheme/register.go b/constraint/vendor/k8s.io/client-go/kubernetes/scheme/register.go index 5601e20dd..a46fb2962 100644 --- a/constraint/vendor/k8s.io/client-go/kubernetes/scheme/register.go +++ b/constraint/vendor/k8s.io/client-go/kubernetes/scheme/register.go @@ -34,13 +34,12 @@ import ( autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" batchv1 "k8s.io/api/batch/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" - batchv2alpha1 "k8s.io/api/batch/v2alpha1" certificatesv1 "k8s.io/api/certificates/v1" certificatesv1beta1 "k8s.io/api/certificates/v1beta1" coordinationv1 "k8s.io/api/coordination/v1" coordinationv1beta1 "k8s.io/api/coordination/v1beta1" corev1 "k8s.io/api/core/v1" - discoveryv1alpha1 "k8s.io/api/discovery/v1alpha1" + discoveryv1 "k8s.io/api/discovery/v1" discoveryv1beta1 "k8s.io/api/discovery/v1beta1" eventsv1 "k8s.io/api/events/v1" eventsv1beta1 "k8s.io/api/events/v1beta1" @@ -52,6 +51,7 @@ import ( nodev1 "k8s.io/api/node/v1" nodev1alpha1 "k8s.io/api/node/v1alpha1" nodev1beta1 "k8s.io/api/node/v1beta1" + policyv1 "k8s.io/api/policy/v1" policyv1beta1 "k8s.io/api/policy/v1beta1" rbacv1 "k8s.io/api/rbac/v1" rbacv1alpha1 "k8s.io/api/rbac/v1alpha1" @@ -88,13 +88,12 @@ var localSchemeBuilder = runtime.SchemeBuilder{ autoscalingv2beta2.AddToScheme, batchv1.AddToScheme, batchv1beta1.AddToScheme, - batchv2alpha1.AddToScheme, certificatesv1.AddToScheme, certificatesv1beta1.AddToScheme, coordinationv1beta1.AddToScheme, coordinationv1.AddToScheme, corev1.AddToScheme, - discoveryv1alpha1.AddToScheme, + discoveryv1.AddToScheme, discoveryv1beta1.AddToScheme, eventsv1.AddToScheme, eventsv1beta1.AddToScheme, @@ -106,6 +105,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{ nodev1.AddToScheme, nodev1alpha1.AddToScheme, nodev1beta1.AddToScheme, + policyv1.AddToScheme, policyv1beta1.AddToScheme, rbacv1.AddToScheme, rbacv1beta1.AddToScheme, diff --git a/constraint/vendor/k8s.io/client-go/pkg/version/base.go b/constraint/vendor/k8s.io/client-go/pkg/version/base.go index 9b4c79f89..51e34dda3 100644 --- a/constraint/vendor/k8s.io/client-go/pkg/version/base.go +++ b/constraint/vendor/k8s.io/client-go/pkg/version/base.go @@ -55,7 +55,7 @@ var ( // NOTE: The $Format strings are replaced during 'git archive' thanks to the // companion .gitattributes file containing 'export-subst' in this same // directory. See also https://git-scm.com/docs/gitattributes - gitVersion string = "v0.0.0-master+$Format:%h$" + gitVersion string = "v0.0.0-master+$Format:%H$" gitCommit string = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) gitTreeState string = "" // state of git tree, either "clean" or "dirty" diff --git a/constraint/vendor/k8s.io/client-go/pkg/version/def.bzl b/constraint/vendor/k8s.io/client-go/pkg/version/def.bzl deleted file mode 100644 index ecc9cd3bb..000000000 --- a/constraint/vendor/k8s.io/client-go/pkg/version/def.bzl +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2017 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Implements hack/lib/version.sh's kube::version::ldflags() for Bazel. -def version_x_defs(): - # This should match the list of packages in kube::version::ldflag - stamp_pkgs = [ - "k8s.io/component-base/version", - # In hack/lib/version.sh, this has a vendor/ prefix. That isn't needed here? - "k8s.io/client-go/pkg/version", - ] - # This should match the list of vars in kube::version::ldflags - # It should also match the list of vars set in hack/print-workspace-status.sh. - stamp_vars = [ - "buildDate", - "gitCommit", - "gitMajor", - "gitMinor", - "gitTreeState", - "gitVersion", - ] - # Generate the cross-product. - x_defs = {} - for pkg in stamp_pkgs: - for var in stamp_vars: - x_defs["%s.%s" % (pkg, var)] = "{%s}" % var - return x_defs diff --git a/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go b/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go index af21c4995..b23e57dde 100644 --- a/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go +++ b/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go @@ -18,7 +18,6 @@ package exec import ( "bytes" - "context" "crypto/tls" "crypto/x509" "errors" @@ -34,7 +33,8 @@ import ( "time" "github.com/davecgh/go-spew/spew" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -52,7 +52,6 @@ import ( ) const execInfoEnv = "KUBERNETES_EXEC_INFO" -const onRotateListWarningLength = 1000 const installHintVerboseHelp = ` It looks like you are trying to use a client-go credential plugin that is not installed. @@ -177,6 +176,12 @@ func newAuthenticator(c *cache, config *api.ExecConfig, cluster *clientauthentic return nil, fmt.Errorf("exec plugin: invalid apiVersion %q", config.APIVersion) } + connTracker := connrotation.NewConnectionTracker() + defaultDialer := connrotation.NewDialerWithTracker( + (&net.Dialer{Timeout: 30 * time.Second, KeepAlive: 30 * time.Second}).DialContext, + connTracker, + ) + a := &Authenticator{ cmd: config.Command, args: config.Args, @@ -193,9 +198,12 @@ func newAuthenticator(c *cache, config *api.ExecConfig, cluster *clientauthentic stdin: os.Stdin, stderr: os.Stderr, - interactive: terminal.IsTerminal(int(os.Stdout.Fd())), + interactive: term.IsTerminal(int(os.Stdin.Fd())), now: time.Now, environ: os.Environ, + + defaultDialer: defaultDialer, + connTracker: connTracker, } for _, env := range config.Env { @@ -229,6 +237,11 @@ type Authenticator struct { now func() time.Time environ func() []string + // defaultDialer is used for clients which don't specify a custom dialer + defaultDialer *connrotation.Dialer + // connTracker tracks all connections opened that we need to close when rotating a client certificate + connTracker *connrotation.ConnectionTracker + // Cached results. // // The mutex also guards calling the plugin. Since the plugin could be @@ -236,8 +249,6 @@ type Authenticator struct { mu sync.Mutex cachedCreds *credentials exp time.Time - - onRotateList []func() } type credentials struct { @@ -266,20 +277,12 @@ func (a *Authenticator) UpdateTransportConfig(c *transport.Config) error { } c.TLS.GetCert = a.cert - var dial func(ctx context.Context, network, addr string) (net.Conn, error) + var d *connrotation.Dialer if c.Dial != nil { - dial = c.Dial + // if c has a custom dialer, we have to wrap it + d = connrotation.NewDialerWithTracker(c.Dial, a.connTracker) } else { - dial = (&net.Dialer{Timeout: 30 * time.Second, KeepAlive: 30 * time.Second}).DialContext - } - d := connrotation.NewDialer(dial) - - a.mu.Lock() - defer a.mu.Unlock() - a.onRotateList = append(a.onRotateList, d.CloseAll) - onRotateListLength := len(a.onRotateList) - if onRotateListLength > onRotateListWarningLength { - klog.Warningf("constructing many client instances from the same exec auth config can cause performance problems during cert rotation and can exhaust available network connections; %d clients constructed calling %q", onRotateListLength, a.cmd) + d = a.defaultDialer } c.Dial = d.DialContext @@ -398,7 +401,9 @@ func (a *Authenticator) refreshCredsLocked(r *clientauthentication.Response) err cmd.Stdin = a.stdin } - if err := cmd.Run(); err != nil { + err = cmd.Run() + incrementCallsMetric(err) + if err != nil { return a.wrapCmdRunErrorLocked(err) } @@ -458,9 +463,7 @@ func (a *Authenticator) refreshCredsLocked(r *clientauthentication.Response) err if oldCreds.cert != nil && oldCreds.cert.Leaf != nil { metrics.ClientCertRotationAge.Observe(time.Now().Sub(oldCreds.cert.Leaf.NotBefore)) } - for _, onRotate := range a.onRotateList { - onRotate() - } + a.connTracker.CloseAll() } expiry := time.Time{} diff --git a/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go b/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go index caf0cca3e..3a2cc251a 100644 --- a/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go +++ b/constraint/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go @@ -17,12 +17,39 @@ limitations under the License. package exec import ( + "errors" + "os/exec" + "reflect" "sync" "time" + "k8s.io/klog/v2" + "k8s.io/client-go/tools/metrics" ) +// The following constants shadow the special values used in the prometheus metrics implementation. +const ( + // noError indicates that the plugin process was successfully started and exited with an exit + // code of 0. + noError = "no_error" + // pluginExecutionError indicates that the plugin process was successfully started and then + // it returned a non-zero exit code. + pluginExecutionError = "plugin_execution_error" + // pluginNotFoundError indicates that we could not find the exec plugin. + pluginNotFoundError = "plugin_not_found_error" + // clientInternalError indicates that we attempted to start the plugin process, but failed + // for some reason. + clientInternalError = "client_internal_error" + + // successExitCode represents an exec plugin invocation that was successful. + successExitCode = 0 + // failureExitCode represents an exec plugin invocation that was not successful. This code is + // used in some failure modes (e.g., plugin not found, client internal error) so that someone + // can more easily monitor all unsuccessful invocations. + failureExitCode = 1 +) + type certificateExpirationTracker struct { mu sync.RWMutex m map[*Authenticator]time.Time @@ -58,3 +85,25 @@ func (c *certificateExpirationTracker) set(a *Authenticator, t time.Time) { c.metricSet(&earliest) } } + +// incrementCallsMetric increments a global metrics counter for the number of calls to an exec +// plugin, partitioned by exit code. The provided err should be the return value from +// exec.Cmd.Run(). +func incrementCallsMetric(err error) { + execExitError := &exec.ExitError{} + execError := &exec.Error{} + switch { + case err == nil: // Binary execution succeeded. + metrics.ExecPluginCalls.Increment(successExitCode, noError) + + case errors.As(err, &execExitError): // Binary execution failed (see "os/exec".Cmd.Run()). + metrics.ExecPluginCalls.Increment(execExitError.ExitCode(), pluginExecutionError) + + case errors.As(err, &execError): // Binary does not exist (see exec.Error). + metrics.ExecPluginCalls.Increment(failureExitCode, pluginNotFoundError) + + default: // We don't know about this error type. + klog.V(2).InfoS("unexpected exec plugin return error type", "type", reflect.TypeOf(err).String(), "err", err) + metrics.ExecPluginCalls.Increment(failureExitCode, clientInternalError) + } +} diff --git a/constraint/vendor/k8s.io/client-go/rest/OWNERS b/constraint/vendor/k8s.io/client-go/rest/OWNERS index c02ec6a25..0d574e056 100644 --- a/constraint/vendor/k8s.io/client-go/rest/OWNERS +++ b/constraint/vendor/k8s.io/client-go/rest/OWNERS @@ -8,8 +8,6 @@ reviewers: - deads2k - brendandburns - liggitt -- nikhiljindal -- gmarek - erictune - sttts - luxas diff --git a/constraint/vendor/k8s.io/client-go/rest/client.go b/constraint/vendor/k8s.io/client-go/rest/client.go index f35955d45..c96930049 100644 --- a/constraint/vendor/k8s.io/client-go/rest/client.go +++ b/constraint/vendor/k8s.io/client-go/rest/client.go @@ -127,7 +127,7 @@ func NewRESTClient(baseURL *url.URL, versionedAPIPath string, config ClientConte }, nil } -// GetRateLimiter returns rate limier for a given client, or nil if it's called on a nil client +// GetRateLimiter returns rate limiter for a given client, or nil if it's called on a nil client func (c *RESTClient) GetRateLimiter() flowcontrol.RateLimiter { if c == nil { return nil diff --git a/constraint/vendor/k8s.io/client-go/rest/plugin.go b/constraint/vendor/k8s.io/client-go/rest/plugin.go index 33d146cd9..c2b3dfc0f 100644 --- a/constraint/vendor/k8s.io/client-go/rest/plugin.go +++ b/constraint/vendor/k8s.io/client-go/rest/plugin.go @@ -47,6 +47,13 @@ type AuthProviderConfigPersister interface { Persist(map[string]string) error } +type noopPersister struct{} + +func (n *noopPersister) Persist(_ map[string]string) error { + // no operation persister + return nil +} + // All registered auth provider plugins. var pluginsLock sync.Mutex var plugins = make(map[string]Factory) @@ -69,5 +76,8 @@ func GetAuthProvider(clusterAddress string, apc *clientcmdapi.AuthProviderConfig if !ok { return nil, fmt.Errorf("no Auth Provider found for name %q", apc.Name) } + if persister == nil { + persister = &noopPersister{} + } return p(clusterAddress, apc.Config, persister) } diff --git a/constraint/vendor/k8s.io/client-go/rest/request.go b/constraint/vendor/k8s.io/client-go/rest/request.go index 1ccc0dafe..0ac0e8eab 100644 --- a/constraint/vendor/k8s.io/client-go/rest/request.go +++ b/constraint/vendor/k8s.io/client-go/rest/request.go @@ -242,7 +242,7 @@ func (r *Request) SubResource(subresources ...string) *Request { } subresource := path.Join(subresources...) if len(r.subresource) != 0 { - r.err = fmt.Errorf("subresource already set to %q, cannot change to %q", r.resource, subresource) + r.err = fmt.Errorf("subresource already set to %q, cannot change to %q", r.subresource, subresource) return r } for _, s := range subresources { @@ -577,7 +577,7 @@ func (r Request) finalURLTemplate() url.URL { return *url } -func (r *Request) tryThrottle(ctx context.Context) error { +func (r *Request) tryThrottleWithInfo(ctx context.Context, retryInfo string) error { if r.rateLimiter == nil { return nil } @@ -587,19 +587,32 @@ func (r *Request) tryThrottle(ctx context.Context) error { err := r.rateLimiter.Wait(ctx) latency := time.Since(now) + + var message string + switch { + case len(retryInfo) > 0: + message = fmt.Sprintf("Waited for %v, %s - request: %s:%s", latency, retryInfo, r.verb, r.URL().String()) + default: + message = fmt.Sprintf("Waited for %v due to client-side throttling, not priority and fairness, request: %s:%s", latency, r.verb, r.URL().String()) + } + if latency > longThrottleLatency { - klog.V(3).Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) + klog.V(3).Info(message) } if latency > extraLongThrottleLatency { // If the rate limiter latency is very high, the log message should be printed at a higher log level, // but we use a throttled logger to prevent spamming. - globalThrottledLogger.Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) + globalThrottledLogger.Infof(message) } - metrics.RateLimiterLatency.Observe(r.verb, r.finalURLTemplate(), latency) + metrics.RateLimiterLatency.Observe(ctx, r.verb, r.finalURLTemplate(), latency) return err } +func (r *Request) tryThrottle(ctx context.Context) error { + return r.tryThrottleWithInfo(ctx, "") +} + type throttleSettings struct { logLevel klog.Level minLogInterval time.Duration @@ -678,7 +691,7 @@ func (r *Request) Watch(ctx context.Context) (watch.Interface, error) { } r.backoff.Sleep(r.backoff.CalculateBackoff(r.URL())) resp, err := client.Do(req) - updateURLMetrics(r, resp, err) + updateURLMetrics(ctx, r, resp, err) if r.c.base != nil { if err != nil { r.backoff.UpdateBackoff(r.c.base, err, 0) @@ -727,7 +740,7 @@ func (r *Request) Watch(ctx context.Context) (watch.Interface, error) { // updateURLMetrics is a convenience function for pushing metrics. // It also handles corner cases for incomplete/invalid request data. -func updateURLMetrics(req *Request, resp *http.Response, err error) { +func updateURLMetrics(ctx context.Context, req *Request, resp *http.Response, err error) { url := "none" if req.c.base != nil { url = req.c.base.Host @@ -736,10 +749,10 @@ func updateURLMetrics(req *Request, resp *http.Response, err error) { // Errors can be arbitrary strings. Unbound label cardinality is not suitable for a metric // system so we just report them as ``. if err != nil { - metrics.RequestResult.Increment("", req.verb, url) + metrics.RequestResult.Increment(ctx, "", req.verb, url) } else { //Metrics for failure codes - metrics.RequestResult.Increment(strconv.Itoa(resp.StatusCode), req.verb, url) + metrics.RequestResult.Increment(ctx, strconv.Itoa(resp.StatusCode), req.verb, url) } } @@ -772,7 +785,7 @@ func (r *Request) Stream(ctx context.Context) (io.ReadCloser, error) { } r.backoff.Sleep(r.backoff.CalculateBackoff(r.URL())) resp, err := client.Do(req) - updateURLMetrics(r, resp, err) + updateURLMetrics(ctx, r, resp, err) if r.c.base != nil { if err != nil { r.backoff.UpdateBackoff(r.URL(), err, 0) @@ -837,7 +850,7 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp //Metrics for total request latency start := time.Now() defer func() { - metrics.RequestLatency.Observe(r.verb, r.finalURLTemplate(), time.Since(start)) + metrics.RequestLatency.Observe(ctx, r.verb, r.finalURLTemplate(), time.Since(start)) }() if r.err != nil { @@ -869,6 +882,7 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp // Right now we make about ten retry attempts if we get a Retry-After response. retries := 0 + var retryInfo string for { url := r.URL().String() @@ -884,12 +898,13 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp // We are retrying the request that we already send to apiserver // at least once before. // This request should also be throttled with the client-internal rate limiter. - if err := r.tryThrottle(ctx); err != nil { + if err := r.tryThrottleWithInfo(ctx, retryInfo); err != nil { return err } + retryInfo = "" } resp, err := client.Do(req) - updateURLMetrics(r, resp, err) + updateURLMetrics(ctx, r, resp, err) if err != nil { r.backoff.UpdateBackoff(r.URL(), err, 0) } else { @@ -931,6 +946,7 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp retries++ if seconds, wait := checkWait(resp); wait && retries <= r.maxRetries { + retryInfo = getRetryReason(retries, seconds, resp, err) if seeker, ok := r.body.(io.Seeker); ok && r.body != nil { _, err := seeker.Seek(0, 0) if err != nil { @@ -1204,6 +1220,26 @@ func retryAfterSeconds(resp *http.Response) (int, bool) { return 0, false } +func getRetryReason(retries, seconds int, resp *http.Response, err error) string { + // priority and fairness sets the UID of the FlowSchema associated with a request + // in the following response Header. + const responseHeaderMatchedFlowSchemaUID = "X-Kubernetes-PF-FlowSchema-UID" + + message := fmt.Sprintf("retries: %d, retry-after: %ds", retries, seconds) + + switch { + case resp.StatusCode == http.StatusTooManyRequests: + // it is server-side throttling from priority and fairness + flowSchemaUID := resp.Header.Get(responseHeaderMatchedFlowSchemaUID) + return fmt.Sprintf("%s - retry-reason: due to server-side throttling, FlowSchema UID: %q", message, flowSchemaUID) + case err != nil: + // it's a retriable error + return fmt.Sprintf("%s - retry-reason: due to retriable error, error: %v", message, err) + default: + return fmt.Sprintf("%s - retry-reason: %d", message, resp.StatusCode) + } +} + // Result contains the result of calling Request.Do(). type Result struct { body []byte diff --git a/constraint/vendor/k8s.io/client-go/tools/clientcmd/auth_loaders.go b/constraint/vendor/k8s.io/client-go/tools/clientcmd/auth_loaders.go index 1d3c11d8f..0e4127762 100644 --- a/constraint/vendor/k8s.io/client-go/tools/clientcmd/auth_loaders.go +++ b/constraint/vendor/k8s.io/client-go/tools/clientcmd/auth_loaders.go @@ -23,7 +23,7 @@ import ( "io/ioutil" "os" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" clientauth "k8s.io/client-go/tools/auth" ) @@ -90,8 +90,8 @@ func promptForString(field string, r io.Reader, show bool) (result string, err e _, err = fmt.Fscan(r, &result) } else { var data []byte - if terminal.IsTerminal(int(os.Stdin.Fd())) { - data, err = terminal.ReadPassword(int(os.Stdin.Fd())) + if term.IsTerminal(int(os.Stdin.Fd())) { + data, err = term.ReadPassword(int(os.Stdin.Fd())) result = string(data) } else { return "", fmt.Errorf("error reading input for %s", field) diff --git a/constraint/vendor/k8s.io/client-go/tools/clientcmd/client_config.go b/constraint/vendor/k8s.io/client-go/tools/clientcmd/client_config.go index 9e1cd64a0..0a905490c 100644 --- a/constraint/vendor/k8s.io/client-go/tools/clientcmd/client_config.go +++ b/constraint/vendor/k8s.io/client-go/tools/clientcmd/client_config.go @@ -198,13 +198,13 @@ func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { if err != nil { return nil, err } - mergo.MergeWithOverwrite(clientConfig, userAuthPartialConfig) + mergo.Merge(clientConfig, userAuthPartialConfig, mergo.WithOverride) serverAuthPartialConfig, err := getServerIdentificationPartialConfig(configAuthInfo, configClusterInfo) if err != nil { return nil, err } - mergo.MergeWithOverwrite(clientConfig, serverAuthPartialConfig) + mergo.Merge(clientConfig, serverAuthPartialConfig, mergo.WithOverride) } return clientConfig, nil @@ -225,7 +225,7 @@ func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClientConfig.CAData = configClusterInfo.CertificateAuthorityData configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify configClientConfig.ServerName = configClusterInfo.TLSServerName - mergo.MergeWithOverwrite(mergedConfig, configClientConfig) + mergo.Merge(mergedConfig, configClientConfig, mergo.WithOverride) return mergedConfig, nil } @@ -294,8 +294,8 @@ func (config *DirectClientConfig) getUserIdentificationPartialConfig(configAuthI promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo) previouslyMergedConfig := mergedConfig mergedConfig = &restclient.Config{} - mergo.MergeWithOverwrite(mergedConfig, promptedConfig) - mergo.MergeWithOverwrite(mergedConfig, previouslyMergedConfig) + mergo.Merge(mergedConfig, promptedConfig, mergo.WithOverride) + mergo.Merge(mergedConfig, previouslyMergedConfig, mergo.WithOverride) config.promptedCredentials.username = mergedConfig.Username config.promptedCredentials.password = mergedConfig.Password } @@ -463,12 +463,12 @@ func (config *DirectClientConfig) getContext() (clientcmdapi.Context, error) { mergedContext := clientcmdapi.NewContext() if configContext, exists := contexts[contextName]; exists { - mergo.MergeWithOverwrite(mergedContext, configContext) + mergo.Merge(mergedContext, configContext, mergo.WithOverride) } else if required { return clientcmdapi.Context{}, fmt.Errorf("context %q does not exist", contextName) } if config.overrides != nil { - mergo.MergeWithOverwrite(mergedContext, config.overrides.Context) + mergo.Merge(mergedContext, config.overrides.Context, mergo.WithOverride) } return *mergedContext, nil @@ -481,12 +481,12 @@ func (config *DirectClientConfig) getAuthInfo() (clientcmdapi.AuthInfo, error) { mergedAuthInfo := clientcmdapi.NewAuthInfo() if configAuthInfo, exists := authInfos[authInfoName]; exists { - mergo.MergeWithOverwrite(mergedAuthInfo, configAuthInfo) + mergo.Merge(mergedAuthInfo, configAuthInfo, mergo.WithOverride) } else if required { return clientcmdapi.AuthInfo{}, fmt.Errorf("auth info %q does not exist", authInfoName) } if config.overrides != nil { - mergo.MergeWithOverwrite(mergedAuthInfo, config.overrides.AuthInfo) + mergo.Merge(mergedAuthInfo, config.overrides.AuthInfo, mergo.WithOverride) } return *mergedAuthInfo, nil @@ -499,15 +499,15 @@ func (config *DirectClientConfig) getCluster() (clientcmdapi.Cluster, error) { mergedClusterInfo := clientcmdapi.NewCluster() if config.overrides != nil { - mergo.MergeWithOverwrite(mergedClusterInfo, config.overrides.ClusterDefaults) + mergo.Merge(mergedClusterInfo, config.overrides.ClusterDefaults, mergo.WithOverride) } if configClusterInfo, exists := clusterInfos[clusterInfoName]; exists { - mergo.MergeWithOverwrite(mergedClusterInfo, configClusterInfo) + mergo.Merge(mergedClusterInfo, configClusterInfo, mergo.WithOverride) } else if required { return clientcmdapi.Cluster{}, fmt.Errorf("cluster %q does not exist", clusterInfoName) } if config.overrides != nil { - mergo.MergeWithOverwrite(mergedClusterInfo, config.overrides.ClusterInfo) + mergo.Merge(mergedClusterInfo, config.overrides.ClusterInfo, mergo.WithOverride) } // * An override of --insecure-skip-tls-verify=true and no accompanying CA/CA data should clear already-set CA/CA data @@ -548,11 +548,12 @@ func (config *inClusterClientConfig) RawConfig() (clientcmdapi.Config, error) { } func (config *inClusterClientConfig) ClientConfig() (*restclient.Config, error) { - if config.inClusterConfigProvider == nil { - config.inClusterConfigProvider = restclient.InClusterConfig + inClusterConfigProvider := config.inClusterConfigProvider + if inClusterConfigProvider == nil { + inClusterConfigProvider = restclient.InClusterConfig } - icc, err := config.inClusterConfigProvider() + icc, err := inClusterConfigProvider() if err != nil { return nil, err } @@ -572,7 +573,7 @@ func (config *inClusterClientConfig) ClientConfig() (*restclient.Config, error) } } - return icc, err + return icc, nil } func (config *inClusterClientConfig) Namespace() (string, bool, error) { @@ -611,7 +612,7 @@ func (config *inClusterClientConfig) Possible() bool { // to the default config. func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*restclient.Config, error) { if kubeconfigPath == "" && masterUrl == "" { - klog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.") + klog.Warning("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.") kubeconfig, err := restclient.InClusterConfig() if err == nil { return kubeconfig, nil diff --git a/constraint/vendor/k8s.io/client-go/tools/clientcmd/config.go b/constraint/vendor/k8s.io/client-go/tools/clientcmd/config.go index a7eae66bf..12c8b84f3 100644 --- a/constraint/vendor/k8s.io/client-go/tools/clientcmd/config.go +++ b/constraint/vendor/k8s.io/client-go/tools/clientcmd/config.go @@ -374,7 +374,7 @@ func (p *persister) Persist(config map[string]string) error { authInfo, ok := newConfig.AuthInfos[p.user] if ok && authInfo.AuthProvider != nil { authInfo.AuthProvider.Config = config - ModifyConfig(p.configAccess, *newConfig, false) + return ModifyConfig(p.configAccess, *newConfig, false) } return nil } diff --git a/constraint/vendor/k8s.io/client-go/tools/clientcmd/loader.go b/constraint/vendor/k8s.io/client-go/tools/clientcmd/loader.go index 901ed50c4..78bd9ed8d 100644 --- a/constraint/vendor/k8s.io/client-go/tools/clientcmd/loader.go +++ b/constraint/vendor/k8s.io/client-go/tools/clientcmd/loader.go @@ -18,10 +18,8 @@ package clientcmd import ( "fmt" - "io" "io/ioutil" "os" - "path" "path/filepath" "reflect" goruntime "runtime" @@ -48,24 +46,24 @@ const ( ) var ( - RecommendedConfigDir = path.Join(homedir.HomeDir(), RecommendedHomeDir) - RecommendedHomeFile = path.Join(RecommendedConfigDir, RecommendedFileName) - RecommendedSchemaFile = path.Join(RecommendedConfigDir, RecommendedSchemaName) + RecommendedConfigDir = filepath.Join(homedir.HomeDir(), RecommendedHomeDir) + RecommendedHomeFile = filepath.Join(RecommendedConfigDir, RecommendedFileName) + RecommendedSchemaFile = filepath.Join(RecommendedConfigDir, RecommendedSchemaName) ) // currentMigrationRules returns a map that holds the history of recommended home directories used in previous versions. // Any future changes to RecommendedHomeFile and related are expected to add a migration rule here, in order to make // sure existing config files are migrated to their new locations properly. func currentMigrationRules() map[string]string { - oldRecommendedHomeFile := path.Join(os.Getenv("HOME"), "/.kube/.kubeconfig") - oldRecommendedWindowsHomeFile := path.Join(os.Getenv("HOME"), RecommendedHomeDir, RecommendedFileName) - - migrationRules := map[string]string{} - migrationRules[RecommendedHomeFile] = oldRecommendedHomeFile + var oldRecommendedHomeFileName string if goruntime.GOOS == "windows" { - migrationRules[RecommendedHomeFile] = oldRecommendedWindowsHomeFile + oldRecommendedHomeFileName = RecommendedFileName + } else { + oldRecommendedHomeFileName = ".kubeconfig" + } + return map[string]string{ + RecommendedHomeFile: filepath.Join(os.Getenv("HOME"), RecommendedHomeDir, oldRecommendedHomeFileName), } - return migrationRules } type ClientConfigLoader interface { @@ -227,7 +225,7 @@ func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) { mapConfig := clientcmdapi.NewConfig() for _, kubeconfig := range kubeconfigs { - mergo.MergeWithOverwrite(mapConfig, kubeconfig) + mergo.Merge(mapConfig, kubeconfig, mergo.WithOverride) } // merge all of the struct values in the reverse order so that priority is given correctly @@ -235,14 +233,14 @@ func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) { nonMapConfig := clientcmdapi.NewConfig() for i := len(kubeconfigs) - 1; i >= 0; i-- { kubeconfig := kubeconfigs[i] - mergo.MergeWithOverwrite(nonMapConfig, kubeconfig) + mergo.Merge(nonMapConfig, kubeconfig, mergo.WithOverride) } // since values are overwritten, but maps values are not, we can merge the non-map config on top of the map config and // get the values we expect. config := clientcmdapi.NewConfig() - mergo.MergeWithOverwrite(config, mapConfig) - mergo.MergeWithOverwrite(config, nonMapConfig) + mergo.Merge(config, mapConfig, mergo.WithOverride) + mergo.Merge(config, nonMapConfig, mergo.WithOverride) if rules.ResolvePaths() { if err := ResolveLocalPaths(config); err != nil { @@ -283,20 +281,15 @@ func (rules *ClientConfigLoadingRules) Migrate() error { return fmt.Errorf("cannot migrate %v to %v because it is a directory", source, destination) } - in, err := os.Open(source) + data, err := ioutil.ReadFile(source) if err != nil { return err } - defer in.Close() - out, err := os.Create(destination) + // destination is created with mode 0666 before umask + err = ioutil.WriteFile(destination, data, 0666) if err != nil { return err } - defer out.Close() - - if _, err = io.Copy(out, in); err != nil { - return err - } } return nil diff --git a/constraint/vendor/k8s.io/client-go/tools/metrics/metrics.go b/constraint/vendor/k8s.io/client-go/tools/metrics/metrics.go index 5194026bd..597dc8e53 100644 --- a/constraint/vendor/k8s.io/client-go/tools/metrics/metrics.go +++ b/constraint/vendor/k8s.io/client-go/tools/metrics/metrics.go @@ -19,6 +19,7 @@ limitations under the License. package metrics import ( + "context" "net/url" "sync" "time" @@ -38,12 +39,18 @@ type ExpiryMetric interface { // LatencyMetric observes client latency partitioned by verb and url. type LatencyMetric interface { - Observe(verb string, u url.URL, latency time.Duration) + Observe(ctx context.Context, verb string, u url.URL, latency time.Duration) } // ResultMetric counts response codes partitioned by method and host. type ResultMetric interface { - Increment(code string, method string, host string) + Increment(ctx context.Context, code string, method string, host string) +} + +// CallsMetric counts calls that take place for a specific exec plugin. +type CallsMetric interface { + // Increment increments a counter per exitCode and callStatus. + Increment(exitCode int, callStatus string) } var ( @@ -57,6 +64,9 @@ var ( RateLimiterLatency LatencyMetric = noopLatency{} // RequestResult is the result metric that rest clients will update. RequestResult ResultMetric = noopResult{} + // ExecPluginCalls is the number of calls made to an exec plugin, partitioned by + // exit code and call status. + ExecPluginCalls CallsMetric = noopCalls{} ) // RegisterOpts contains all the metrics to register. Metrics may be nil. @@ -66,6 +76,7 @@ type RegisterOpts struct { RequestLatency LatencyMetric RateLimiterLatency LatencyMetric RequestResult ResultMetric + ExecPluginCalls CallsMetric } // Register registers metrics for the rest client to use. This can @@ -87,6 +98,9 @@ func Register(opts RegisterOpts) { if opts.RequestResult != nil { RequestResult = opts.RequestResult } + if opts.ExecPluginCalls != nil { + ExecPluginCalls = opts.ExecPluginCalls + } }) } @@ -100,8 +114,12 @@ func (noopExpiry) Set(*time.Time) {} type noopLatency struct{} -func (noopLatency) Observe(string, url.URL, time.Duration) {} +func (noopLatency) Observe(context.Context, string, url.URL, time.Duration) {} type noopResult struct{} -func (noopResult) Increment(string, string, string) {} +func (noopResult) Increment(context.Context, string, string, string) {} + +type noopCalls struct{} + +func (noopCalls) Increment(int, string) {} diff --git a/constraint/vendor/k8s.io/client-go/transport/round_trippers.go b/constraint/vendor/k8s.io/client-go/transport/round_trippers.go index 056bc023c..cd0a4455f 100644 --- a/constraint/vendor/k8s.io/client-go/transport/round_trippers.go +++ b/constraint/vendor/k8s.io/client-go/transport/round_trippers.go @@ -23,9 +23,9 @@ import ( "time" "golang.org/x/oauth2" - "k8s.io/klog/v2" utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/klog/v2" ) // HTTPWrappersForConfig wraps a round tripper with any relevant layered @@ -68,13 +68,13 @@ func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTrip func DebugWrappers(rt http.RoundTripper) http.RoundTripper { switch { case bool(klog.V(9).Enabled()): - rt = newDebuggingRoundTripper(rt, debugCurlCommand, debugURLTiming, debugResponseHeaders) + rt = NewDebuggingRoundTripper(rt, DebugCurlCommand, DebugURLTiming, DebugResponseHeaders) case bool(klog.V(8).Enabled()): - rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus, debugResponseHeaders) + rt = NewDebuggingRoundTripper(rt, DebugJustURL, DebugRequestHeaders, DebugResponseStatus, DebugResponseHeaders) case bool(klog.V(7).Enabled()): - rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus) + rt = NewDebuggingRoundTripper(rt, DebugJustURL, DebugRequestHeaders, DebugResponseStatus) case bool(klog.V(6).Enabled()): - rt = newDebuggingRoundTripper(rt, debugURLTiming) + rt = NewDebuggingRoundTripper(rt, DebugURLTiming) } return rt @@ -353,25 +353,35 @@ func (r *requestInfo) toCurl() string { // through it based on what is configured type debuggingRoundTripper struct { delegatedRoundTripper http.RoundTripper - - levels map[debugLevel]bool + levels map[DebugLevel]bool } -type debugLevel int +// DebugLevel is used to enable debugging of certain +// HTTP requests and responses fields via the debuggingRoundTripper. +type DebugLevel int const ( - debugJustURL debugLevel = iota - debugURLTiming - debugCurlCommand - debugRequestHeaders - debugResponseStatus - debugResponseHeaders + // DebugJustURL will add to the debug output HTTP requests method and url. + DebugJustURL DebugLevel = iota + // DebugURLTiming will add to the debug output the duration of HTTP requests. + DebugURLTiming + // DebugCurlCommand will add to the debug output the curl command equivalent to the + // HTTP request. + DebugCurlCommand + // DebugRequestHeaders will add to the debug output the HTTP requests headers. + DebugRequestHeaders + // DebugResponseStatus will add to the debug output the HTTP response status. + DebugResponseStatus + // DebugResponseHeaders will add to the debug output the HTTP response headers. + DebugResponseHeaders ) -func newDebuggingRoundTripper(rt http.RoundTripper, levels ...debugLevel) *debuggingRoundTripper { +// NewDebuggingRoundTripper allows to display in the logs output debug information +// on the API requests performed by the client. +func NewDebuggingRoundTripper(rt http.RoundTripper, levels ...DebugLevel) http.RoundTripper { drt := &debuggingRoundTripper{ delegatedRoundTripper: rt, - levels: make(map[debugLevel]bool, len(levels)), + levels: make(map[DebugLevel]bool, len(levels)), } for _, v := range levels { drt.levels[v] = true @@ -418,15 +428,14 @@ func maskValue(key string, value string) string { func (rt *debuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { reqInfo := newRequestInfo(req) - if rt.levels[debugJustURL] { + if rt.levels[DebugJustURL] { klog.Infof("%s %s", reqInfo.RequestVerb, reqInfo.RequestURL) } - if rt.levels[debugCurlCommand] { + if rt.levels[DebugCurlCommand] { klog.Infof("%s", reqInfo.toCurl()) - } - if rt.levels[debugRequestHeaders] { - klog.Infof("Request Headers:") + if rt.levels[DebugRequestHeaders] { + klog.Info("Request Headers:") for key, values := range reqInfo.RequestHeaders { for _, value := range values { value = maskValue(key, value) @@ -441,14 +450,14 @@ func (rt *debuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, e reqInfo.complete(response, err) - if rt.levels[debugURLTiming] { + if rt.levels[DebugURLTiming] { klog.Infof("%s %s %s in %d milliseconds", reqInfo.RequestVerb, reqInfo.RequestURL, reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) } - if rt.levels[debugResponseStatus] { + if rt.levels[DebugResponseStatus] { klog.Infof("Response Status: %s in %d milliseconds", reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) } - if rt.levels[debugResponseHeaders] { - klog.Infof("Response Headers:") + if rt.levels[DebugResponseHeaders] { + klog.Info("Response Headers:") for key, values := range reqInfo.ResponseHeaders { for _, value := range values { klog.Infof(" %s: %s", key, value) diff --git a/constraint/vendor/k8s.io/client-go/transport/token_source.go b/constraint/vendor/k8s.io/client-go/transport/token_source.go index f730c3975..fea02e611 100644 --- a/constraint/vendor/k8s.io/client-go/transport/token_source.go +++ b/constraint/vendor/k8s.io/client-go/transport/token_source.go @@ -43,9 +43,29 @@ func TokenSourceWrapTransport(ts oauth2.TokenSource) func(http.RoundTripper) htt } } -// NewCachedFileTokenSource returns a oauth2.TokenSource reads a token from a -// file at a specified path and periodically reloads it. -func NewCachedFileTokenSource(path string) oauth2.TokenSource { +type ResettableTokenSource interface { + oauth2.TokenSource + ResetTokenOlderThan(time.Time) +} + +// ResettableTokenSourceWrapTransport returns a WrapTransport that injects bearer tokens +// authentication from an ResettableTokenSource. +func ResettableTokenSourceWrapTransport(ts ResettableTokenSource) func(http.RoundTripper) http.RoundTripper { + return func(rt http.RoundTripper) http.RoundTripper { + return &tokenSourceTransport{ + base: rt, + ort: &oauth2.Transport{ + Source: ts, + Base: rt, + }, + src: ts, + } + } +} + +// NewCachedFileTokenSource returns a resettable token source which reads a +// token from a file at a specified path and periodically reloads it. +func NewCachedFileTokenSource(path string) *cachingTokenSource { return &cachingTokenSource{ now: time.Now, leeway: 10 * time.Second, @@ -60,9 +80,9 @@ func NewCachedFileTokenSource(path string) oauth2.TokenSource { } } -// NewCachedTokenSource returns a oauth2.TokenSource reads a token from a -// designed TokenSource. The ts would provide the source of token. -func NewCachedTokenSource(ts oauth2.TokenSource) oauth2.TokenSource { +// NewCachedTokenSource returns resettable token source with caching. It reads +// a token from a designed TokenSource if not in cache or expired. +func NewCachedTokenSource(ts oauth2.TokenSource) *cachingTokenSource { return &cachingTokenSource{ now: time.Now, base: ts, @@ -72,6 +92,7 @@ func NewCachedTokenSource(ts oauth2.TokenSource) oauth2.TokenSource { type tokenSourceTransport struct { base http.RoundTripper ort http.RoundTripper + src ResettableTokenSource } func (tst *tokenSourceTransport) RoundTrip(req *http.Request) (*http.Response, error) { @@ -79,7 +100,15 @@ func (tst *tokenSourceTransport) RoundTrip(req *http.Request) (*http.Response, e if req.Header.Get("Authorization") != "" { return tst.base.RoundTrip(req) } - return tst.ort.RoundTrip(req) + // record time before RoundTrip to make sure newly acquired Unauthorized + // token would not be reset. Another request from user is required to reset + // and proceed. + start := time.Now() + resp, err := tst.ort.RoundTrip(req) + if err == nil && resp != nil && resp.StatusCode == 401 && tst.src != nil { + tst.src.ResetTokenOlderThan(start) + } + return resp, err } func (tst *tokenSourceTransport) CancelRequest(req *http.Request) { @@ -119,13 +148,12 @@ type cachingTokenSource struct { sync.RWMutex tok *oauth2.Token + t time.Time // for testing now func() time.Time } -var _ = oauth2.TokenSource(&cachingTokenSource{}) - func (ts *cachingTokenSource) Token() (*oauth2.Token, error) { now := ts.now() // fast path @@ -153,6 +181,16 @@ func (ts *cachingTokenSource) Token() (*oauth2.Token, error) { return ts.tok, nil } + ts.t = ts.now() ts.tok = tok return tok, nil } + +func (ts *cachingTokenSource) ResetTokenOlderThan(t time.Time) { + ts.Lock() + defer ts.Unlock() + if ts.t.Before(t) { + ts.tok = nil + ts.t = time.Time{} + } +} diff --git a/constraint/vendor/k8s.io/client-go/util/connrotation/connrotation.go b/constraint/vendor/k8s.io/client-go/util/connrotation/connrotation.go index f98faee47..2b9bf72bd 100644 --- a/constraint/vendor/k8s.io/client-go/util/connrotation/connrotation.go +++ b/constraint/vendor/k8s.io/client-go/util/connrotation/connrotation.go @@ -33,18 +33,40 @@ type DialFunc func(ctx context.Context, network, address string) (net.Conn, erro // Dialer opens connections through Dial and tracks them. type Dialer struct { dial DialFunc - - mu sync.Mutex - conns map[*closableConn]struct{} + *ConnectionTracker } // NewDialer creates a new Dialer instance. +// Equivalent to NewDialerWithTracker(dial, nil). +func NewDialer(dial DialFunc) *Dialer { + return NewDialerWithTracker(dial, nil) +} + +// NewDialerWithTracker creates a new Dialer instance. // // If dial is not nil, it will be used to create new underlying connections. // Otherwise net.DialContext is used. -func NewDialer(dial DialFunc) *Dialer { +// If tracker is not nil, it will be used to track new underlying connections. +// Otherwise NewConnectionTracker() is used. +func NewDialerWithTracker(dial DialFunc, tracker *ConnectionTracker) *Dialer { + if tracker == nil { + tracker = NewConnectionTracker() + } return &Dialer{ - dial: dial, + dial: dial, + ConnectionTracker: tracker, + } +} + +// ConnectionTracker keeps track of opened connections +type ConnectionTracker struct { + mu sync.Mutex + conns map[*closableConn]struct{} +} + +// NewConnectionTracker returns a connection tracker for use with NewDialerWithTracker +func NewConnectionTracker() *ConnectionTracker { + return &ConnectionTracker{ conns: make(map[*closableConn]struct{}), } } @@ -52,17 +74,40 @@ func NewDialer(dial DialFunc) *Dialer { // CloseAll forcibly closes all tracked connections. // // Note: new connections may get created before CloseAll returns. -func (d *Dialer) CloseAll() { - d.mu.Lock() - conns := d.conns - d.conns = make(map[*closableConn]struct{}) - d.mu.Unlock() +func (c *ConnectionTracker) CloseAll() { + c.mu.Lock() + conns := c.conns + c.conns = make(map[*closableConn]struct{}) + c.mu.Unlock() for conn := range conns { conn.Close() } } +// Track adds the connection to the list of tracked connections, +// and returns a wrapped copy of the connection that stops tracking the connection +// when it is closed. +func (c *ConnectionTracker) Track(conn net.Conn) net.Conn { + closable := &closableConn{Conn: conn} + + // When the connection is closed, remove it from the map. This will + // be no-op if the connection isn't in the map, e.g. if CloseAll() + // is called. + closable.onClose = func() { + c.mu.Lock() + delete(c.conns, closable) + c.mu.Unlock() + } + + // Start tracking the connection + c.mu.Lock() + c.conns[closable] = struct{}{} + c.mu.Unlock() + + return closable +} + // Dial creates a new tracked connection. func (d *Dialer) Dial(network, address string) (net.Conn, error) { return d.DialContext(context.Background(), network, address) @@ -74,24 +119,7 @@ func (d *Dialer) DialContext(ctx context.Context, network, address string) (net. if err != nil { return nil, err } - - closable := &closableConn{Conn: conn} - - // When the connection is closed, remove it from the map. This will - // be no-op if the connection isn't in the map, e.g. if CloseAll() - // is called. - closable.onClose = func() { - d.mu.Lock() - delete(d.conns, closable) - d.mu.Unlock() - } - - // Start tracking the connection - d.mu.Lock() - d.conns[closable] = struct{}{} - d.mu.Unlock() - - return closable, nil + return d.ConnectionTracker.Track(conn), nil } type closableConn struct { diff --git a/constraint/vendor/k8s.io/client-go/util/retry/OWNERS b/constraint/vendor/k8s.io/client-go/util/retry/OWNERS new file mode 100644 index 000000000..dec3e88d6 --- /dev/null +++ b/constraint/vendor/k8s.io/client-go/util/retry/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: +- caesarxuchao diff --git a/constraint/vendor/k8s.io/client-go/util/retry/util.go b/constraint/vendor/k8s.io/client-go/util/retry/util.go new file mode 100644 index 000000000..15e2722f3 --- /dev/null +++ b/constraint/vendor/k8s.io/client-go/util/retry/util.go @@ -0,0 +1,105 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package retry + +import ( + "time" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/util/wait" +) + +// DefaultRetry is the recommended retry for a conflict where multiple clients +// are making changes to the same resource. +var DefaultRetry = wait.Backoff{ + Steps: 5, + Duration: 10 * time.Millisecond, + Factor: 1.0, + Jitter: 0.1, +} + +// DefaultBackoff is the recommended backoff for a conflict where a client +// may be attempting to make an unrelated modification to a resource under +// active management by one or more controllers. +var DefaultBackoff = wait.Backoff{ + Steps: 4, + Duration: 10 * time.Millisecond, + Factor: 5.0, + Jitter: 0.1, +} + +// OnError allows the caller to retry fn in case the error returned by fn is retriable +// according to the provided function. backoff defines the maximum retries and the wait +// interval between two retries. +func OnError(backoff wait.Backoff, retriable func(error) bool, fn func() error) error { + var lastErr error + err := wait.ExponentialBackoff(backoff, func() (bool, error) { + err := fn() + switch { + case err == nil: + return true, nil + case retriable(err): + lastErr = err + return false, nil + default: + return false, err + } + }) + if err == wait.ErrWaitTimeout { + err = lastErr + } + return err +} + +// RetryOnConflict is used to make an update to a resource when you have to worry about +// conflicts caused by other code making unrelated updates to the resource at the same +// time. fn should fetch the resource to be modified, make appropriate changes to it, try +// to update it, and return (unmodified) the error from the update function. On a +// successful update, RetryOnConflict will return nil. If the update function returns a +// "Conflict" error, RetryOnConflict will wait some amount of time as described by +// backoff, and then try again. On a non-"Conflict" error, or if it retries too many times +// and gives up, RetryOnConflict will return an error to the caller. +// +// err := retry.RetryOnConflict(retry.DefaultRetry, func() error { +// // Fetch the resource here; you need to refetch it on every try, since +// // if you got a conflict on the last update attempt then you need to get +// // the current version before making your own changes. +// pod, err := c.Pods("mynamespace").Get(name, metav1.GetOptions{}) +// if err ! nil { +// return err +// } +// +// // Make whatever updates to the resource are needed +// pod.Status.Phase = v1.PodFailed +// +// // Try to update +// _, err = c.Pods("mynamespace").UpdateStatus(pod) +// // You have to return err itself here (not wrapped inside another error) +// // so that RetryOnConflict can identify it correctly. +// return err +// }) +// if err != nil { +// // May be conflict if max retries were hit, or may be something unrelated +// // like permissions or a network error +// return err +// } +// ... +// +// TODO: Make Backoff an interface? +func RetryOnConflict(backoff wait.Backoff, fn func() error) error { + return OnError(backoff, errors.IsConflict, fn) +} diff --git a/constraint/vendor/k8s.io/client-go/util/workqueue/queue.go b/constraint/vendor/k8s.io/client-go/util/workqueue/queue.go index 39009b8e7..f7c14ddcd 100644 --- a/constraint/vendor/k8s.io/client-go/util/workqueue/queue.go +++ b/constraint/vendor/k8s.io/client-go/util/workqueue/queue.go @@ -55,7 +55,13 @@ func newQueue(c clock.Clock, metrics queueMetrics, updatePeriod time.Duration) * metrics: metrics, unfinishedWorkUpdatePeriod: updatePeriod, } - go t.updateUnfinishedWorkLoop() + + // Don't start the goroutine for a type of noMetrics so we don't consume + // resources unnecessarily + if _, ok := metrics.(noMetrics); !ok { + go t.updateUnfinishedWorkLoop() + } + return t } diff --git a/constraint/vendor/k8s.io/component-base/metrics/OWNERS b/constraint/vendor/k8s.io/component-base/metrics/OWNERS index a9c3172f3..6010d505f 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/OWNERS +++ b/constraint/vendor/k8s.io/component-base/metrics/OWNERS @@ -6,5 +6,6 @@ approvers: - RainbowMango reviewers: - sig-instrumentation-reviewers +- YoyinZyc labels: - sig/instrumentation diff --git a/constraint/vendor/k8s.io/component-base/metrics/collector.go b/constraint/vendor/k8s.io/component-base/metrics/collector.go index 090342e16..61ad951e5 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/collector.go +++ b/constraint/vendor/k8s.io/component-base/metrics/collector.go @@ -49,10 +49,10 @@ type StableCollector interface { // is a convenient assistant for custom collectors. // It is recommend that inherit BaseStableCollector when implementing custom collectors. type BaseStableCollector struct { - descriptors map[string]*Desc // stores all descriptors by pair, these are collected from DescribeWithStability(). - registrable map[string]*Desc // stores registrable descriptors by pair, is a subset of descriptors. - hidden map[string]*Desc // stores hidden descriptors by pair, is a subset of descriptors. - self StableCollector + descriptors map[string]*Desc // stores all descriptors by pair, these are collected from DescribeWithStability(). + registerable map[string]*Desc // stores registerable descriptors by pair, is a subset of descriptors. + hidden map[string]*Desc // stores hidden descriptors by pair, is a subset of descriptors. + self StableCollector } // DescribeWithStability sends all descriptors to the provided channel. @@ -64,7 +64,7 @@ func (bsc *BaseStableCollector) DescribeWithStability(ch chan<- *Desc) { // Describe sends all descriptors to the provided channel. // It intend to be called by prometheus registry. func (bsc *BaseStableCollector) Describe(ch chan<- *prometheus.Desc) { - for _, d := range bsc.registrable { + for _, d := range bsc.registerable { ch <- d.toPrometheusDesc() } } @@ -128,11 +128,11 @@ func (bsc *BaseStableCollector) init(self StableCollector) { } func (bsc *BaseStableCollector) trackRegistrableDescriptor(d *Desc) { - if bsc.registrable == nil { - bsc.registrable = make(map[string]*Desc) + if bsc.registerable == nil { + bsc.registerable = make(map[string]*Desc) } - bsc.registrable[d.fqName] = d + bsc.registerable[d.fqName] = d } func (bsc *BaseStableCollector) trackHiddenDescriptor(d *Desc) { @@ -158,7 +158,7 @@ func (bsc *BaseStableCollector) Create(version *semver.Version, self StableColle } } - if len(bsc.registrable) > 0 { + if len(bsc.registerable) > 0 { return true } @@ -173,7 +173,7 @@ func (bsc *BaseStableCollector) ClearState() { } bsc.descriptors = nil - bsc.registrable = nil + bsc.registerable = nil bsc.hidden = nil bsc.self = nil } diff --git a/constraint/vendor/k8s.io/component-base/metrics/counter.go b/constraint/vendor/k8s.io/component-base/metrics/counter.go index de6943109..addf680c8 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/counter.go +++ b/constraint/vendor/k8s.io/component-base/metrics/counter.go @@ -17,8 +17,10 @@ limitations under the License. package metrics import ( + "context" "github.com/blang/semver" "github.com/prometheus/client_golang/prometheus" + dto "github.com/prometheus/client_model/go" ) // Counter is our internal representation for our wrapping struct around prometheus @@ -30,6 +32,9 @@ type Counter struct { selfCollector } +// The implementation of the Metric interface is expected by testutil.GetCounterMetricValue. +var _ Metric = &Counter{} + // NewCounter returns an object which satisfies the kubeCollector and CounterMetric interfaces. // However, the object returned will not measure anything unless the collector is first // registered, since the metric is lazily instantiated. @@ -45,6 +50,14 @@ func NewCounter(opts *CounterOpts) *Counter { return kc } +func (c *Counter) Desc() *prometheus.Desc { + return c.metric.Desc() +} + +func (c *Counter) Write(to *dto.Metric) error { + return c.metric.Write(to) +} + // Reset resets the underlying prometheus Counter to start counting from 0 again func (c *Counter) Reset() { if !c.IsCreated() { @@ -79,6 +92,11 @@ func (c *Counter) initializeDeprecatedMetric() { c.initializeMetric() } +// WithContext allows the normal Counter metric to pass in context. The context is no-op now. +func (c *Counter) WithContext(ctx context.Context) CounterMetric { + return c.CounterMetric +} + // CounterVec is the internal representation of our wrapping struct around prometheus // counterVecs. CounterVec implements both kubeCollector and CounterVecMetric. type CounterVec struct { @@ -94,13 +112,20 @@ type CounterVec struct { func NewCounterVec(opts *CounterOpts, labels []string) *CounterVec { opts.StabilityLevel.setDefaults() + fqName := BuildFQName(opts.Namespace, opts.Subsystem, opts.Name) + allowListLock.RLock() + if allowList, ok := labelValueAllowLists[fqName]; ok { + opts.LabelValueAllowLists = allowList + } + allowListLock.RUnlock() + cv := &CounterVec{ CounterVec: noopCounterVec, CounterOpts: opts, originalLabels: labels, lazyMetric: lazyMetric{}, } - cv.lazyInit(cv, BuildFQName(opts.Namespace, opts.Subsystem, opts.Name)) + cv.lazyInit(cv, fqName) return cv } @@ -140,6 +165,9 @@ func (v *CounterVec) WithLabelValues(lvs ...string) CounterMetric { if !v.IsCreated() { return noop // return no-op counter } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainToAllowedList(v.originalLabels, lvs) + } return v.CounterVec.WithLabelValues(lvs...) } @@ -151,6 +179,9 @@ func (v *CounterVec) With(labels map[string]string) CounterMetric { if !v.IsCreated() { return noop // return no-op counter } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainLabelMap(labels) + } return v.CounterVec.With(labels) } @@ -176,3 +207,27 @@ func (v *CounterVec) Reset() { v.CounterVec.Reset() } + +// WithContext returns wrapped CounterVec with context +func (v *CounterVec) WithContext(ctx context.Context) *CounterVecWithContext { + return &CounterVecWithContext{ + ctx: ctx, + CounterVec: *v, + } +} + +// CounterVecWithContext is the wrapper of CounterVec with context. +type CounterVecWithContext struct { + CounterVec + ctx context.Context +} + +// WithLabelValues is the wrapper of CounterVec.WithLabelValues. +func (vc *CounterVecWithContext) WithLabelValues(lvs ...string) CounterMetric { + return vc.CounterVec.WithLabelValues(lvs...) +} + +// With is the wrapper of CounterVec.With. +func (vc *CounterVecWithContext) With(labels map[string]string) CounterMetric { + return vc.CounterVec.With(labels) +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/gauge.go b/constraint/vendor/k8s.io/component-base/metrics/gauge.go index 7b4469fcb..a8d9c2010 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/gauge.go +++ b/constraint/vendor/k8s.io/component-base/metrics/gauge.go @@ -17,6 +17,7 @@ limitations under the License. package metrics import ( + "context" "github.com/blang/semver" "github.com/prometheus/client_golang/prometheus" @@ -73,6 +74,11 @@ func (g *Gauge) initializeDeprecatedMetric() { g.initializeMetric() } +// WithContext allows the normal Gauge metric to pass in context. The context is no-op now. +func (g *Gauge) WithContext(ctx context.Context) GaugeMetric { + return g.GaugeMetric +} + // GaugeVec is the internal representation of our wrapping struct around prometheus // gaugeVecs. kubeGaugeVec implements both kubeCollector and KubeGaugeVec. type GaugeVec struct { @@ -88,13 +94,20 @@ type GaugeVec struct { func NewGaugeVec(opts *GaugeOpts, labels []string) *GaugeVec { opts.StabilityLevel.setDefaults() + fqName := BuildFQName(opts.Namespace, opts.Subsystem, opts.Name) + allowListLock.RLock() + if allowList, ok := labelValueAllowLists[fqName]; ok { + opts.LabelValueAllowLists = allowList + } + allowListLock.RUnlock() + cv := &GaugeVec{ GaugeVec: noopGaugeVec, GaugeOpts: opts, originalLabels: labels, lazyMetric: lazyMetric{}, } - cv.lazyInit(cv, BuildFQName(opts.Namespace, opts.Subsystem, opts.Name)) + cv.lazyInit(cv, fqName) return cv } @@ -133,6 +146,9 @@ func (v *GaugeVec) WithLabelValues(lvs ...string) GaugeMetric { if !v.IsCreated() { return noop // return no-op gauge } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainToAllowedList(v.originalLabels, lvs) + } return v.GaugeVec.WithLabelValues(lvs...) } @@ -144,6 +160,9 @@ func (v *GaugeVec) With(labels map[string]string) GaugeMetric { if !v.IsCreated() { return noop // return no-op gauge } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainLabelMap(labels) + } return v.GaugeVec.With(labels) } @@ -191,3 +210,27 @@ func NewGaugeFunc(opts GaugeOpts, function func() float64) GaugeFunc { return newGaugeFunc(opts, function, v) } + +// WithContext returns wrapped GaugeVec with context +func (v *GaugeVec) WithContext(ctx context.Context) *GaugeVecWithContext { + return &GaugeVecWithContext{ + ctx: ctx, + GaugeVec: *v, + } +} + +// GaugeVecWithContext is the wrapper of GaugeVec with context. +type GaugeVecWithContext struct { + GaugeVec + ctx context.Context +} + +// WithLabelValues is the wrapper of GaugeVec.WithLabelValues. +func (vc *GaugeVecWithContext) WithLabelValues(lvs ...string) GaugeMetric { + return vc.GaugeVec.WithLabelValues(lvs...) +} + +// With is the wrapper of GaugeVec.With. +func (vc *GaugeVecWithContext) With(labels map[string]string) GaugeMetric { + return vc.GaugeVec.With(labels) +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/histogram.go b/constraint/vendor/k8s.io/component-base/metrics/histogram.go index d233e12b9..9dd75388b 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/histogram.go +++ b/constraint/vendor/k8s.io/component-base/metrics/histogram.go @@ -17,6 +17,7 @@ limitations under the License. package metrics import ( + "context" "github.com/blang/semver" "github.com/prometheus/client_golang/prometheus" ) @@ -83,6 +84,11 @@ func (h *Histogram) initializeDeprecatedMetric() { h.initializeMetric() } +// WithContext allows the normal Histogram metric to pass in context. The context is no-op now. +func (h *Histogram) WithContext(ctx context.Context) ObserverMetric { + return h.ObserverMetric +} + // HistogramVec is the internal representation of our wrapping struct around prometheus // histogramVecs. type HistogramVec struct { @@ -98,13 +104,20 @@ type HistogramVec struct { func NewHistogramVec(opts *HistogramOpts, labels []string) *HistogramVec { opts.StabilityLevel.setDefaults() + fqName := BuildFQName(opts.Namespace, opts.Subsystem, opts.Name) + allowListLock.RLock() + if allowList, ok := labelValueAllowLists[fqName]; ok { + opts.LabelValueAllowLists = allowList + } + allowListLock.RUnlock() + v := &HistogramVec{ HistogramVec: noopHistogramVec, HistogramOpts: opts, originalLabels: labels, lazyMetric: lazyMetric{}, } - v.lazyInit(v, BuildFQName(opts.Namespace, opts.Subsystem, opts.Name)) + v.lazyInit(v, fqName) return v } @@ -139,6 +152,9 @@ func (v *HistogramVec) WithLabelValues(lvs ...string) ObserverMetric { if !v.IsCreated() { return noop } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainToAllowedList(v.originalLabels, lvs) + } return v.HistogramVec.WithLabelValues(lvs...) } @@ -150,6 +166,9 @@ func (v *HistogramVec) With(labels map[string]string) ObserverMetric { if !v.IsCreated() { return noop } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainLabelMap(labels) + } return v.HistogramVec.With(labels) } @@ -175,3 +194,27 @@ func (v *HistogramVec) Reset() { v.HistogramVec.Reset() } + +// WithContext returns wrapped HistogramVec with context +func (v *HistogramVec) WithContext(ctx context.Context) *HistogramVecWithContext { + return &HistogramVecWithContext{ + ctx: ctx, + HistogramVec: *v, + } +} + +// HistogramVecWithContext is the wrapper of HistogramVec with context. +type HistogramVecWithContext struct { + HistogramVec + ctx context.Context +} + +// WithLabelValues is the wrapper of HistogramVec.WithLabelValues. +func (vc *HistogramVecWithContext) WithLabelValues(lvs ...string) ObserverMetric { + return vc.HistogramVec.WithLabelValues(lvs...) +} + +// With is the wrapper of HistogramVec.With. +func (vc *HistogramVecWithContext) With(labels map[string]string) ObserverMetric { + return vc.HistogramVec.With(labels) +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/metric.go b/constraint/vendor/k8s.io/component-base/metrics/metric.go index bb1f69627..2f7b880d8 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/metric.go +++ b/constraint/vendor/k8s.io/component-base/metrics/metric.go @@ -87,10 +87,24 @@ func (r *lazyMetric) lazyInit(self kubeCollector, fqName string) { r.self = self } -// determineDeprecationStatus figures out whether the lazy metric should be deprecated or not. +// preprocessMetric figures out whether the lazy metric should be hidden or not. // This method takes a Version argument which should be the version of the binary in which -// this code is currently being executed. -func (r *lazyMetric) determineDeprecationStatus(version semver.Version) { +// this code is currently being executed. A metric can be hidden under two conditions: +// 1. if the metric is deprecated and is outside the grace period (i.e. has been +// deprecated for more than one release +// 2. if the metric is manually disabled via a CLI flag. +// +// Disclaimer: disabling a metric via a CLI flag has higher precedence than +// deprecation and will override show-hidden-metrics for the explicitly +// disabled metric. +func (r *lazyMetric) preprocessMetric(version semver.Version) { + disabledMetricsLock.RLock() + defer disabledMetricsLock.RUnlock() + // disabling metrics is higher in precedence than showing hidden metrics + if _, ok := disabledMetrics[r.fqName]; ok { + r.isHidden = true + return + } selfVersion := r.self.DeprecatedVersion() if selfVersion == nil { return @@ -99,6 +113,7 @@ func (r *lazyMetric) determineDeprecationStatus(version semver.Version) { if selfVersion.LTE(version) { r.isDeprecated = true } + if ShouldShowHidden() { klog.Warningf("Hidden metrics (%s) have been manually overridden, showing this very deprecated metric.", r.fqName) return @@ -126,7 +141,7 @@ func (r *lazyMetric) IsDeprecated() bool { // created. func (r *lazyMetric) Create(version *semver.Version) bool { if version != nil { - r.determineDeprecationStatus(*version) + r.preprocessMetric(*version) } // let's not create if this metric is slated to be hidden if r.IsHidden() { diff --git a/constraint/vendor/k8s.io/component-base/metrics/options.go b/constraint/vendor/k8s.io/component-base/metrics/options.go index c15dd9b4d..91a76ba7e 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/options.go +++ b/constraint/vendor/k8s.io/component-base/metrics/options.go @@ -18,6 +18,7 @@ package metrics import ( "fmt" + "regexp" "github.com/blang/semver" "github.com/spf13/pflag" @@ -28,6 +29,8 @@ import ( // Options has all parameters needed for exposing metrics from components type Options struct { ShowHiddenMetricsForVersion string + DisabledMetrics []string + AllowListMapping map[string]string } // NewOptions returns default metrics options @@ -37,12 +40,20 @@ func NewOptions() *Options { // Validate validates metrics flags options. func (o *Options) Validate() []error { + var errs []error err := validateShowHiddenMetricsVersion(parseVersion(version.Get()), o.ShowHiddenMetricsForVersion) if err != nil { - return []error{err} + errs = append(errs, err) } - return nil + if err := validateAllowMetricLabel(o.AllowListMapping); err != nil { + errs = append(errs, err) + } + + if len(errs) == 0 { + return nil + } + return errs } // AddFlags adds flags for exposing component metrics. @@ -56,13 +67,33 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) { "The format is ., e.g.: '1.16'. "+ "The purpose of this format is make sure you have the opportunity to notice if the next release hides additional metrics, "+ "rather than being surprised when they are permanently removed in the release after that.") + fs.StringSliceVar(&o.DisabledMetrics, + "disabled-metrics", + o.DisabledMetrics, + "This flag provides an escape hatch for misbehaving metrics. "+ + "You must provide the fully qualified metric name in order to disable it. "+ + "Disclaimer: disabling metrics is higher in precedence than showing hidden metrics.") + fs.StringToStringVar(&o.AllowListMapping, "allow-metric-labels", o.AllowListMapping, + "The map from metric-label to value allow-list of this label. The key's format is ,. "+ + "The value's format is ,..."+ + "e.g. metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'.") } // Apply applies parameters into global configuration of metrics. func (o *Options) Apply() { - if o != nil && len(o.ShowHiddenMetricsForVersion) > 0 { + if o == nil { + return + } + if len(o.ShowHiddenMetricsForVersion) > 0 { SetShowHidden() } + // set disabled metrics + for _, metricName := range o.DisabledMetrics { + SetDisabledMetric(metricName) + } + if o.AllowListMapping != nil { + SetLabelAllowListFromCLI(o.AllowListMapping) + } } func validateShowHiddenMetricsVersion(currentVersion semver.Version, targetVersionStr string) error { @@ -77,3 +108,18 @@ func validateShowHiddenMetricsVersion(currentVersion semver.Version, targetVersi return nil } + +func validateAllowMetricLabel(allowListMapping map[string]string) error { + if allowListMapping == nil { + return nil + } + metricNameRegex := `[a-zA-Z_:][a-zA-Z0-9_:]*` + labelRegex := `[a-zA-Z_][a-zA-Z0-9_]*` + for k := range allowListMapping { + reg := regexp.MustCompile(metricNameRegex + `,` + labelRegex) + if reg.FindString(k) != k { + return fmt.Errorf("--allow-metric-labels must has a list of kv pair with format `metricName:labelName=labelValue, labelValue,...`") + } + } + return nil +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/opts.go b/constraint/vendor/k8s.io/component-base/metrics/opts.go index 906050c7f..04203b74e 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/opts.go +++ b/constraint/vendor/k8s.io/component-base/metrics/opts.go @@ -18,10 +18,17 @@ package metrics import ( "fmt" + "strings" "sync" "time" "github.com/prometheus/client_golang/prometheus" + "k8s.io/apimachinery/pkg/util/sets" +) + +var ( + labelValueAllowLists = map[string]*MetricLabelAllowList{} + allowListLock sync.RWMutex ) // KubeOpts is superset struct for prometheus.Opts. The prometheus Opts structure @@ -31,15 +38,16 @@ import ( // Name must be set to a non-empty string. DeprecatedVersion is defined only // if the metric for which this options applies is, in fact, deprecated. type KubeOpts struct { - Namespace string - Subsystem string - Name string - Help string - ConstLabels map[string]string - DeprecatedVersion string - deprecateOnce sync.Once - annotateOnce sync.Once - StabilityLevel StabilityLevel + Namespace string + Subsystem string + Name string + Help string + ConstLabels map[string]string + DeprecatedVersion string + deprecateOnce sync.Once + annotateOnce sync.Once + StabilityLevel StabilityLevel + LabelValueAllowLists *MetricLabelAllowList } // BuildFQName joins the given three name components by "_". Empty name @@ -140,16 +148,17 @@ func (o *GaugeOpts) toPromGaugeOpts() prometheus.GaugeOpts { // and can safely be left at their zero value, although it is strongly // encouraged to set a Help string. type HistogramOpts struct { - Namespace string - Subsystem string - Name string - Help string - ConstLabels map[string]string - Buckets []float64 - DeprecatedVersion string - deprecateOnce sync.Once - annotateOnce sync.Once - StabilityLevel StabilityLevel + Namespace string + Subsystem string + Name string + Help string + ConstLabels map[string]string + Buckets []float64 + DeprecatedVersion string + deprecateOnce sync.Once + annotateOnce sync.Once + StabilityLevel StabilityLevel + LabelValueAllowLists *MetricLabelAllowList } // Modify help description on the metric description. @@ -186,19 +195,20 @@ func (o *HistogramOpts) toPromHistogramOpts() prometheus.HistogramOpts { // a help string and to explicitly set the Objectives field to the desired value // as the default value will change in the upcoming v0.10 of the library. type SummaryOpts struct { - Namespace string - Subsystem string - Name string - Help string - ConstLabels map[string]string - Objectives map[float64]float64 - MaxAge time.Duration - AgeBuckets uint32 - BufCap uint32 - DeprecatedVersion string - deprecateOnce sync.Once - annotateOnce sync.Once - StabilityLevel StabilityLevel + Namespace string + Subsystem string + Name string + Help string + ConstLabels map[string]string + Objectives map[float64]float64 + MaxAge time.Duration + AgeBuckets uint32 + BufCap uint32 + DeprecatedVersion string + deprecateOnce sync.Once + annotateOnce sync.Once + StabilityLevel StabilityLevel + LabelValueAllowLists *MetricLabelAllowList } // Modify help description on the metric description. @@ -243,3 +253,49 @@ func (o *SummaryOpts) toPromSummaryOpts() prometheus.SummaryOpts { BufCap: o.BufCap, } } + +type MetricLabelAllowList struct { + labelToAllowList map[string]sets.String +} + +func (allowList *MetricLabelAllowList) ConstrainToAllowedList(labelNameList, labelValueList []string) { + for index, value := range labelValueList { + name := labelNameList[index] + if allowValues, ok := allowList.labelToAllowList[name]; ok { + if !allowValues.Has(value) { + labelValueList[index] = "unexpected" + } + } + } +} + +func (allowList *MetricLabelAllowList) ConstrainLabelMap(labels map[string]string) { + for name, value := range labels { + if allowValues, ok := allowList.labelToAllowList[name]; ok { + if !allowValues.Has(value) { + labels[name] = "unexpected" + } + } + } +} + +func SetLabelAllowListFromCLI(allowListMapping map[string]string) { + allowListLock.Lock() + defer allowListLock.Unlock() + for metricLabelName, labelValues := range allowListMapping { + metricName := strings.Split(metricLabelName, ",")[0] + labelName := strings.Split(metricLabelName, ",")[1] + valueSet := sets.NewString(strings.Split(labelValues, ",")...) + + allowList, ok := labelValueAllowLists[metricName] + if ok { + allowList.labelToAllowList[labelName] = valueSet + } else { + labelToAllowList := make(map[string]sets.String) + labelToAllowList[labelName] = valueSet + labelValueAllowLists[metricName] = &MetricLabelAllowList{ + labelToAllowList, + } + } + } +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/processstarttime.go b/constraint/vendor/k8s.io/component-base/metrics/processstarttime.go index 8dde45881..4b5e76935 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/processstarttime.go +++ b/constraint/vendor/k8s.io/component-base/metrics/processstarttime.go @@ -17,11 +17,8 @@ limitations under the License. package metrics import ( - "os" "time" - "github.com/prometheus/procfs" - "k8s.io/klog/v2" ) @@ -44,24 +41,11 @@ func RegisterProcessStartTime(registrationFunc func(Registerable) error) error { start = float64(time.Now().Unix()) } // processStartTime is a lazy metric which only get initialized after registered. - // so we have to explicitly create it before setting the label value. Otherwise - // it is a noop. - if !processStartTime.IsCreated() { - processStartTime.initializeMetric() - } - processStartTime.WithLabelValues().Set(start) - return registrationFunc(processStartTime) -} - -func getProcessStart() (float64, error) { - pid := os.Getpid() - p, err := procfs.NewProc(pid) - if err != nil { - return 0, err + // so we need to register the metric first and then set the value for it + if err = registrationFunc(processStartTime); err != nil { + return err } - if stat, err := p.Stat(); err == nil { - return stat.StartTime() - } - return 0, err + processStartTime.WithLabelValues().Set(start) + return nil } diff --git a/constraint/vendor/k8s.io/component-base/metrics/processstarttime_others.go b/constraint/vendor/k8s.io/component-base/metrics/processstarttime_others.go new file mode 100644 index 000000000..89ea8a68e --- /dev/null +++ b/constraint/vendor/k8s.io/component-base/metrics/processstarttime_others.go @@ -0,0 +1,38 @@ +// +build !windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import ( + "os" + + "github.com/prometheus/procfs" +) + +func getProcessStart() (float64, error) { + pid := os.Getpid() + p, err := procfs.NewProc(pid) + if err != nil { + return 0, err + } + + if stat, err := p.Stat(); err == nil { + return stat.StartTime() + } + return 0, err +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/processstarttime_windows.go b/constraint/vendor/k8s.io/component-base/metrics/processstarttime_windows.go new file mode 100644 index 000000000..8fcdf273a --- /dev/null +++ b/constraint/vendor/k8s.io/component-base/metrics/processstarttime_windows.go @@ -0,0 +1,33 @@ +// +build windows + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import ( + "golang.org/x/sys/windows" +) + +func getProcessStart() (float64, error) { + processHandle := windows.CurrentProcess() + + var creationTime, exitTime, kernelTime, userTime windows.Filetime + if err := windows.GetProcessTimes(processHandle, &creationTime, &exitTime, &kernelTime, &userTime); err != nil { + return 0, err + } + return float64(creationTime.Nanoseconds() / 1e9), nil +} diff --git a/constraint/vendor/k8s.io/component-base/metrics/registry.go b/constraint/vendor/k8s.io/component-base/metrics/registry.go index 06a5c6503..b608fb568 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/registry.go +++ b/constraint/vendor/k8s.io/component-base/metrics/registry.go @@ -30,10 +30,12 @@ import ( ) var ( - showHiddenOnce sync.Once - showHidden atomic.Value - registries []*kubeRegistry // stores all registries created by NewKubeRegistry() - registriesLock sync.RWMutex + showHiddenOnce sync.Once + disabledMetricsLock sync.RWMutex + showHidden atomic.Value + registries []*kubeRegistry // stores all registries created by NewKubeRegistry() + registriesLock sync.RWMutex + disabledMetrics = map[string]struct{}{} ) // shouldHide be used to check if a specific metric with deprecated version should be hidden @@ -61,6 +63,12 @@ func ValidateShowHiddenMetricsVersion(v string) []error { return nil } +func SetDisabledMetric(name string) { + disabledMetricsLock.Lock() + defer disabledMetricsLock.Unlock() + disabledMetrics[name] = struct{}{} +} + // SetShowHidden will enable showing hidden metrics. This will no-opt // after the initial call func SetShowHidden() { diff --git a/constraint/vendor/k8s.io/component-base/metrics/summary.go b/constraint/vendor/k8s.io/component-base/metrics/summary.go index 726bcc489..4732b02e3 100644 --- a/constraint/vendor/k8s.io/component-base/metrics/summary.go +++ b/constraint/vendor/k8s.io/component-base/metrics/summary.go @@ -17,6 +17,7 @@ limitations under the License. package metrics import ( + "context" "github.com/blang/semver" "github.com/prometheus/client_golang/prometheus" ) @@ -74,6 +75,11 @@ func (s *Summary) initializeDeprecatedMetric() { s.initializeMetric() } +// WithContext allows the normal Summary metric to pass in context. The context is no-op now. +func (s *Summary) WithContext(ctx context.Context) ObserverMetric { + return s.ObserverMetric +} + // SummaryVec is the internal representation of our wrapping struct around prometheus // summaryVecs. // @@ -93,12 +99,19 @@ type SummaryVec struct { func NewSummaryVec(opts *SummaryOpts, labels []string) *SummaryVec { opts.StabilityLevel.setDefaults() + fqName := BuildFQName(opts.Namespace, opts.Subsystem, opts.Name) + allowListLock.RLock() + if allowList, ok := labelValueAllowLists[fqName]; ok { + opts.LabelValueAllowLists = allowList + } + allowListLock.RUnlock() + v := &SummaryVec{ SummaryOpts: opts, originalLabels: labels, lazyMetric: lazyMetric{}, } - v.lazyInit(v, BuildFQName(opts.Namespace, opts.Subsystem, opts.Name)) + v.lazyInit(v, fqName) return v } @@ -133,6 +146,9 @@ func (v *SummaryVec) WithLabelValues(lvs ...string) ObserverMetric { if !v.IsCreated() { return noop } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainToAllowedList(v.originalLabels, lvs) + } return v.SummaryVec.WithLabelValues(lvs...) } @@ -144,6 +160,9 @@ func (v *SummaryVec) With(labels map[string]string) ObserverMetric { if !v.IsCreated() { return noop } + if v.LabelValueAllowLists != nil { + v.LabelValueAllowLists.ConstrainLabelMap(labels) + } return v.SummaryVec.With(labels) } @@ -169,3 +188,27 @@ func (v *SummaryVec) Reset() { v.SummaryVec.Reset() } + +// WithContext returns wrapped SummaryVec with context +func (v *SummaryVec) WithContext(ctx context.Context) *SummaryVecWithContext { + return &SummaryVecWithContext{ + ctx: ctx, + SummaryVec: *v, + } +} + +// SummaryVecWithContext is the wrapper of SummaryVec with context. +type SummaryVecWithContext struct { + SummaryVec + ctx context.Context +} + +// WithLabelValues is the wrapper of SummaryVec.WithLabelValues. +func (vc *SummaryVecWithContext) WithLabelValues(lvs ...string) ObserverMetric { + return vc.SummaryVec.WithLabelValues(lvs...) +} + +// With is the wrapper of SummaryVec.With. +func (vc *SummaryVecWithContext) With(labels map[string]string) ObserverMetric { + return vc.SummaryVec.With(labels) +} diff --git a/constraint/vendor/k8s.io/component-base/version/base.go b/constraint/vendor/k8s.io/component-base/version/base.go index e13678c30..b753b7d19 100644 --- a/constraint/vendor/k8s.io/component-base/version/base.go +++ b/constraint/vendor/k8s.io/component-base/version/base.go @@ -55,7 +55,7 @@ var ( // NOTE: The $Format strings are replaced during 'git archive' thanks to the // companion .gitattributes file containing 'export-subst' in this same // directory. See also https://git-scm.com/docs/gitattributes - gitVersion = "v0.0.0-master+$Format:%h$" + gitVersion = "v0.0.0-master+$Format:%H$" gitCommit = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) gitTreeState = "" // state of git tree, either "clean" or "dirty" diff --git a/constraint/vendor/k8s.io/component-base/version/def.bzl b/constraint/vendor/k8s.io/component-base/version/def.bzl deleted file mode 100644 index 77edcbc89..000000000 --- a/constraint/vendor/k8s.io/component-base/version/def.bzl +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2017 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Implements hack/lib/version.sh's kube::version::ldflags() for Bazel. -def version_x_defs(): - # This should match the list of packages in kube::version::ldflag - stamp_pkgs = [ - "k8s.io/kubernetes/vendor/k8s.io/component-base/version", - "k8s.io/kubernetes/vendor/k8s.io/client-go/pkg/version", - ] - - # This should match the list of vars in kube::version::ldflags - # It should also match the list of vars set in hack/print-workspace-status.sh. - stamp_vars = [ - "buildDate", - "gitCommit", - "gitMajor", - "gitMinor", - "gitTreeState", - "gitVersion", - ] - - # Generate the cross-product. - x_defs = {} - for pkg in stamp_pkgs: - for var in stamp_vars: - x_defs["%s.%s" % (pkg, var)] = "{%s}" % var - return x_defs diff --git a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go index 504a3972a..51a2f5781 100644 --- a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go +++ b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go @@ -68,6 +68,25 @@ func (e Extensions) GetStringSlice(key string) ([]string, bool) { return nil, false } +// GetObject gets the object value from the extensions. +// out must be a json serializable type; the json go struct +// tags of out are used to populate it. +func (e Extensions) GetObject(key string, out interface{}) error { + // This json serialization/deserialization could be replaced with + // an approach using reflection if the optimization becomes justified. + if v, ok := e[strings.ToLower(key)]; ok { + b, err := json.Marshal(v) + if err != nil { + return err + } + err = json.Unmarshal(b, out) + if err != nil { + return err + } + } + return nil +} + // VendorExtensible composition block. type VendorExtensible struct { Extensions Extensions diff --git a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/strfmt/default.go b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/strfmt/default.go index d9b898bcb..e85b0f1b4 100644 --- a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/strfmt/default.go +++ b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/strfmt/default.go @@ -23,6 +23,8 @@ import ( "strings" "github.com/asaskevich/govalidator" + + netutils "k8s.io/utils/net" ) const ( @@ -154,13 +156,13 @@ func init() { Default.Add("hostname", &hn, IsHostname) ip4 := IPv4("") - Default.Add("ipv4", &ip4, govalidator.IsIPv4) + Default.Add("ipv4", &ip4, isIPv4) ip6 := IPv6("") Default.Add("ipv6", &ip6, govalidator.IsIPv6) cidr := CIDR("") - Default.Add("cidr", &cidr, govalidator.IsCIDR) + Default.Add("cidr", &cidr, isCIDR) mac := MAC("") Default.Add("mac", &mac, govalidator.IsMAC) @@ -205,6 +207,18 @@ func init() { Default.Add("password", &pw, func(_ string) bool { return true }) } +// isIPv4 checks if the string is an IPv4 address, tolerating leading 0's for compatibility with go < 1.17. +func isIPv4(s string) bool { + ip := netutils.ParseIPSloppy(s) + return ip != nil && strings.Contains(s, ".") +} + +// isCIDR checks if the string is valid CIDR notation, tolerating leading 0's for compatibility with go < 1.17. +func isCIDR(s string) bool { + _, _, err := netutils.ParseCIDRSloppy(s) + return err == nil +} + // Base64 represents a base64 encoded string, using URLEncoding alphabet // // swagger:strfmt byte diff --git a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema.go b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema.go index b275112e4..8cd1c54b8 100644 --- a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema.go +++ b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema.go @@ -91,7 +91,7 @@ func NewSchemaValidator(schema *spec.Schema, rootSchema interface{}, root string return &s } -// SetPath sets the path for this schema valdiator +// SetPath sets the path for this schema validator func (s *SchemaValidator) SetPath(path string) { s.Path = path } diff --git a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema_option.go b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema_option.go index 133152ee2..34991102b 100644 --- a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema_option.go +++ b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/schema_option.go @@ -16,6 +16,7 @@ package validate // SchemaValidatorOptions defines optional rules for schema validation type SchemaValidatorOptions struct { + validationRulesEnabled bool } // Option sets optional rules for schema validation diff --git a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/validator.go b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/validator.go index ef0aadce0..38a6b31c3 100644 --- a/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/validator.go +++ b/constraint/vendor/k8s.io/kube-openapi/pkg/validation/validate/validator.go @@ -21,15 +21,17 @@ import ( "k8s.io/kube-openapi/pkg/validation/spec" ) -// An EntityValidator is an interface for things that can validate entities -type EntityValidator interface { - Validate(interface{}) *Result -} - +// valueValidator validates the values it applies to. type valueValidator interface { + // SetPath sets the exact path of the validator prior to calling Validate. + // The exact path contains the map keys and array indices to locate the + // value to be validated from the root data element. SetPath(path string) - Applies(interface{}, reflect.Kind) bool - Validate(interface{}) *Result + // Applies returns true if the validator applies to the valueKind + // from source. Validate will be called if and only if Applies returns true. + Applies(source interface{}, valueKind reflect.Kind) bool + // Validate validates the value. + Validate(value interface{}) *Result } type basicCommonValidator struct { diff --git a/constraint/vendor/golang.org/x/crypto/LICENSE b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/LICENSE similarity index 96% rename from constraint/vendor/golang.org/x/crypto/LICENSE rename to constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/LICENSE index 6a66aea5e..744875676 100644 --- a/constraint/vendor/golang.org/x/crypto/LICENSE +++ b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/constraint/vendor/golang.org/x/crypto/PATENTS b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/PATENTS similarity index 100% rename from constraint/vendor/golang.org/x/crypto/PATENTS rename to constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/PATENTS diff --git a/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/net/ip.go b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/net/ip.go new file mode 100644 index 000000000..4340b6e74 --- /dev/null +++ b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/net/ip.go @@ -0,0 +1,236 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IP address manipulations +// +// IPv4 addresses are 4 bytes; IPv6 addresses are 16 bytes. +// An IPv4 address can be converted to an IPv6 address by +// adding a canonical prefix (10 zeros, 2 0xFFs). +// This library accepts either size of byte slice but always +// returns 16-byte addresses. + +package net + +/////////////////////////////////////////////////////////////////////////////// +// NOTE: This file was forked because we need to maintain backwards-compatible +// IP parsing logic, which was changed in a correct but incompatible way in +// go-1.17. +// +// See https://issue.k8s.io/100895 +/////////////////////////////////////////////////////////////////////////////// + +import ( + stdnet "net" +) + +// +// Lean on the standard net lib as much as possible. +// + +type IP = stdnet.IP +type IPNet = stdnet.IPNet +type ParseError = stdnet.ParseError + +const IPv4len = stdnet.IPv4len +const IPv6len = stdnet.IPv6len + +var CIDRMask = stdnet.CIDRMask +var IPv4 = stdnet.IPv4 + +// Parse IPv4 address (d.d.d.d). +func parseIPv4(s string) IP { + var p [IPv4len]byte + for i := 0; i < IPv4len; i++ { + if len(s) == 0 { + // Missing octets. + return nil + } + if i > 0 { + if s[0] != '.' { + return nil + } + s = s[1:] + } + n, c, ok := dtoi(s) + if !ok || n > 0xFF { + return nil + } + // + // NOTE: This correct check was added for go-1.17, but is a + // backwards-incompatible change for kubernetes users, who might have + // stored data which uses these leading zeroes already. + // + // See https://issue.k8s.io/100895 + // + //if c > 1 && s[0] == '0' { + // // Reject non-zero components with leading zeroes. + // return nil + //} + s = s[c:] + p[i] = byte(n) + } + if len(s) != 0 { + return nil + } + return IPv4(p[0], p[1], p[2], p[3]) +} + +// parseIPv6 parses s as a literal IPv6 address described in RFC 4291 +// and RFC 5952. +func parseIPv6(s string) (ip IP) { + ip = make(IP, IPv6len) + ellipsis := -1 // position of ellipsis in ip + + // Might have leading ellipsis + if len(s) >= 2 && s[0] == ':' && s[1] == ':' { + ellipsis = 0 + s = s[2:] + // Might be only ellipsis + if len(s) == 0 { + return ip + } + } + + // Loop, parsing hex numbers followed by colon. + i := 0 + for i < IPv6len { + // Hex number. + n, c, ok := xtoi(s) + if !ok || n > 0xFFFF { + return nil + } + + // If followed by dot, might be in trailing IPv4. + if c < len(s) && s[c] == '.' { + if ellipsis < 0 && i != IPv6len-IPv4len { + // Not the right place. + return nil + } + if i+IPv4len > IPv6len { + // Not enough room. + return nil + } + ip4 := parseIPv4(s) + if ip4 == nil { + return nil + } + ip[i] = ip4[12] + ip[i+1] = ip4[13] + ip[i+2] = ip4[14] + ip[i+3] = ip4[15] + s = "" + i += IPv4len + break + } + + // Save this 16-bit chunk. + ip[i] = byte(n >> 8) + ip[i+1] = byte(n) + i += 2 + + // Stop at end of string. + s = s[c:] + if len(s) == 0 { + break + } + + // Otherwise must be followed by colon and more. + if s[0] != ':' || len(s) == 1 { + return nil + } + s = s[1:] + + // Look for ellipsis. + if s[0] == ':' { + if ellipsis >= 0 { // already have one + return nil + } + ellipsis = i + s = s[1:] + if len(s) == 0 { // can be at end + break + } + } + } + + // Must have used entire string. + if len(s) != 0 { + return nil + } + + // If didn't parse enough, expand ellipsis. + if i < IPv6len { + if ellipsis < 0 { + return nil + } + n := IPv6len - i + for j := i - 1; j >= ellipsis; j-- { + ip[j+n] = ip[j] + } + for j := ellipsis + n - 1; j >= ellipsis; j-- { + ip[j] = 0 + } + } else if ellipsis >= 0 { + // Ellipsis must represent at least one 0 group. + return nil + } + return ip +} + +// ParseIP parses s as an IP address, returning the result. +// The string s can be in IPv4 dotted decimal ("192.0.2.1"), IPv6 +// ("2001:db8::68"), or IPv4-mapped IPv6 ("::ffff:192.0.2.1") form. +// If s is not a valid textual representation of an IP address, +// ParseIP returns nil. +func ParseIP(s string) IP { + for i := 0; i < len(s); i++ { + switch s[i] { + case '.': + return parseIPv4(s) + case ':': + return parseIPv6(s) + } + } + return nil +} + +// ParseCIDR parses s as a CIDR notation IP address and prefix length, +// like "192.0.2.0/24" or "2001:db8::/32", as defined in +// RFC 4632 and RFC 4291. +// +// It returns the IP address and the network implied by the IP and +// prefix length. +// For example, ParseCIDR("192.0.2.1/24") returns the IP address +// 192.0.2.1 and the network 192.0.2.0/24. +func ParseCIDR(s string) (IP, *IPNet, error) { + i := indexByteString(s, '/') + if i < 0 { + return nil, nil, &ParseError{Type: "CIDR address", Text: s} + } + addr, mask := s[:i], s[i+1:] + iplen := IPv4len + ip := parseIPv4(addr) + if ip == nil { + iplen = IPv6len + ip = parseIPv6(addr) + } + n, i, ok := dtoi(mask) + if ip == nil || !ok || i != len(mask) || n < 0 || n > 8*iplen { + return nil, nil, &ParseError{Type: "CIDR address", Text: s} + } + m := CIDRMask(n, 8*iplen) + return ip, &IPNet{IP: ip.Mask(m), Mask: m}, nil +} + +// This is copied from go/src/internal/bytealg, which includes versions +// optimized for various platforms. Those optimizations are elided here so we +// don't have to maintain them. +func indexByteString(s string, c byte) int { + for i := 0; i < len(s); i++ { + if s[i] == c { + return i + } + } + return -1 +} diff --git a/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/net/parse.go b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/net/parse.go new file mode 100644 index 000000000..cc2fdcb95 --- /dev/null +++ b/constraint/vendor/k8s.io/utils/internal/third_party/forked/golang/net/parse.go @@ -0,0 +1,59 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Simple file i/o and string manipulation, to avoid +// depending on strconv and bufio and strings. + +package net + +/////////////////////////////////////////////////////////////////////////////// +// NOTE: This file was forked because it is used by other code that needed to +// be forked, not because it is used on its own. +/////////////////////////////////////////////////////////////////////////////// + +// Bigger than we need, not too big to worry about overflow +const big = 0xFFFFFF + +// Decimal to integer. +// Returns number, characters consumed, success. +func dtoi(s string) (n int, i int, ok bool) { + n = 0 + for i = 0; i < len(s) && '0' <= s[i] && s[i] <= '9'; i++ { + n = n*10 + int(s[i]-'0') + if n >= big { + return big, i, false + } + } + if i == 0 { + return 0, 0, false + } + return n, i, true +} + +// Hexadecimal to integer. +// Returns number, characters consumed, success. +func xtoi(s string) (n int, i int, ok bool) { + n = 0 + for i = 0; i < len(s); i++ { + if '0' <= s[i] && s[i] <= '9' { + n *= 16 + n += int(s[i] - '0') + } else if 'a' <= s[i] && s[i] <= 'f' { + n *= 16 + n += int(s[i]-'a') + 10 + } else if 'A' <= s[i] && s[i] <= 'F' { + n *= 16 + n += int(s[i]-'A') + 10 + } else { + break + } + if n >= big { + return 0, i, false + } + } + if i == 0 { + return 0, i, false + } + return n, i, true +} diff --git a/constraint/vendor/k8s.io/utils/net/ipnet.go b/constraint/vendor/k8s.io/utils/net/ipnet.go new file mode 100644 index 000000000..2f3ee37f0 --- /dev/null +++ b/constraint/vendor/k8s.io/utils/net/ipnet.go @@ -0,0 +1,221 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "fmt" + "net" + "strings" +) + +// IPNetSet maps string to net.IPNet. +type IPNetSet map[string]*net.IPNet + +// ParseIPNets parses string slice to IPNetSet. +func ParseIPNets(specs ...string) (IPNetSet, error) { + ipnetset := make(IPNetSet) + for _, spec := range specs { + spec = strings.TrimSpace(spec) + _, ipnet, err := ParseCIDRSloppy(spec) + if err != nil { + return nil, err + } + k := ipnet.String() // In case of normalization + ipnetset[k] = ipnet + } + return ipnetset, nil +} + +// Insert adds items to the set. +func (s IPNetSet) Insert(items ...*net.IPNet) { + for _, item := range items { + s[item.String()] = item + } +} + +// Delete removes all items from the set. +func (s IPNetSet) Delete(items ...*net.IPNet) { + for _, item := range items { + delete(s, item.String()) + } +} + +// Has returns true if and only if item is contained in the set. +func (s IPNetSet) Has(item *net.IPNet) bool { + _, contained := s[item.String()] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s IPNetSet) HasAll(items ...*net.IPNet) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s IPNetSet) Difference(s2 IPNetSet) IPNetSet { + result := make(IPNetSet) + for k, i := range s { + _, found := s2[k] + if found { + continue + } + result[k] = i + } + return result +} + +// StringSlice returns a []string with the String representation of each element in the set. +// Order is undefined. +func (s IPNetSet) StringSlice() []string { + a := make([]string, 0, len(s)) + for k := range s { + a = append(a, k) + } + return a +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s IPNetSet) IsSuperset(s2 IPNetSet) bool { + for k := range s2 { + _, found := s[k] + if !found { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s IPNetSet) Equal(s2 IPNetSet) bool { + return len(s) == len(s2) && s.IsSuperset(s2) +} + +// Len returns the size of the set. +func (s IPNetSet) Len() int { + return len(s) +} + +// IPSet maps string to net.IP +type IPSet map[string]net.IP + +// ParseIPSet parses string slice to IPSet +func ParseIPSet(items ...string) (IPSet, error) { + ipset := make(IPSet) + for _, item := range items { + ip := ParseIPSloppy(strings.TrimSpace(item)) + if ip == nil { + return nil, fmt.Errorf("error parsing IP %q", item) + } + + ipset[ip.String()] = ip + } + + return ipset, nil +} + +// Insert adds items to the set. +func (s IPSet) Insert(items ...net.IP) { + for _, item := range items { + s[item.String()] = item + } +} + +// Delete removes all items from the set. +func (s IPSet) Delete(items ...net.IP) { + for _, item := range items { + delete(s, item.String()) + } +} + +// Has returns true if and only if item is contained in the set. +func (s IPSet) Has(item net.IP) bool { + _, contained := s[item.String()] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s IPSet) HasAll(items ...net.IP) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s IPSet) Difference(s2 IPSet) IPSet { + result := make(IPSet) + for k, i := range s { + _, found := s2[k] + if found { + continue + } + result[k] = i + } + return result +} + +// StringSlice returns a []string with the String representation of each element in the set. +// Order is undefined. +func (s IPSet) StringSlice() []string { + a := make([]string, 0, len(s)) + for k := range s { + a = append(a, k) + } + return a +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s IPSet) IsSuperset(s2 IPSet) bool { + for k := range s2 { + _, found := s[k] + if !found { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s IPSet) Equal(s2 IPSet) bool { + return len(s) == len(s2) && s.IsSuperset(s2) +} + +// Len returns the size of the set. +func (s IPSet) Len() int { + return len(s) +} diff --git a/constraint/vendor/k8s.io/utils/net/net.go b/constraint/vendor/k8s.io/utils/net/net.go new file mode 100644 index 000000000..b7c08e2e0 --- /dev/null +++ b/constraint/vendor/k8s.io/utils/net/net.go @@ -0,0 +1,213 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "errors" + "fmt" + "math" + "math/big" + "net" + "strconv" +) + +// ParseCIDRs parses a list of cidrs and return error if any is invalid. +// order is maintained +func ParseCIDRs(cidrsString []string) ([]*net.IPNet, error) { + cidrs := make([]*net.IPNet, 0, len(cidrsString)) + for _, cidrString := range cidrsString { + _, cidr, err := ParseCIDRSloppy(cidrString) + if err != nil { + return nil, fmt.Errorf("failed to parse cidr value:%q with error:%v", cidrString, err) + } + cidrs = append(cidrs, cidr) + } + return cidrs, nil +} + +// IsDualStackIPs returns if a slice of ips is: +// - all are valid ips +// - at least one ip from each family (v4 or v6) +func IsDualStackIPs(ips []net.IP) (bool, error) { + v4Found := false + v6Found := false + for _, ip := range ips { + if ip == nil { + return false, fmt.Errorf("ip %v is invalid", ip) + } + + if v4Found && v6Found { + continue + } + + if IsIPv6(ip) { + v6Found = true + continue + } + + v4Found = true + } + + return (v4Found && v6Found), nil +} + +// IsDualStackIPStrings returns if +// - all are valid ips +// - at least one ip from each family (v4 or v6) +func IsDualStackIPStrings(ips []string) (bool, error) { + parsedIPs := make([]net.IP, 0, len(ips)) + for _, ip := range ips { + parsedIP := ParseIPSloppy(ip) + parsedIPs = append(parsedIPs, parsedIP) + } + return IsDualStackIPs(parsedIPs) +} + +// IsDualStackCIDRs returns if +// - all are valid cidrs +// - at least one cidr from each family (v4 or v6) +func IsDualStackCIDRs(cidrs []*net.IPNet) (bool, error) { + v4Found := false + v6Found := false + for _, cidr := range cidrs { + if cidr == nil { + return false, fmt.Errorf("cidr %v is invalid", cidr) + } + + if v4Found && v6Found { + continue + } + + if IsIPv6(cidr.IP) { + v6Found = true + continue + } + v4Found = true + } + + return v4Found && v6Found, nil +} + +// IsDualStackCIDRStrings returns if +// - all are valid cidrs +// - at least one cidr from each family (v4 or v6) +func IsDualStackCIDRStrings(cidrs []string) (bool, error) { + parsedCIDRs, err := ParseCIDRs(cidrs) + if err != nil { + return false, err + } + return IsDualStackCIDRs(parsedCIDRs) +} + +// IsIPv6 returns if netIP is IPv6. +func IsIPv6(netIP net.IP) bool { + return netIP != nil && netIP.To4() == nil +} + +// IsIPv6String returns if ip is IPv6. +func IsIPv6String(ip string) bool { + netIP := ParseIPSloppy(ip) + return IsIPv6(netIP) +} + +// IsIPv6CIDRString returns if cidr is IPv6. +// This assumes cidr is a valid CIDR. +func IsIPv6CIDRString(cidr string) bool { + ip, _, _ := ParseCIDRSloppy(cidr) + return IsIPv6(ip) +} + +// IsIPv6CIDR returns if a cidr is ipv6 +func IsIPv6CIDR(cidr *net.IPNet) bool { + ip := cidr.IP + return IsIPv6(ip) +} + +// IsIPv4 returns if netIP is IPv4. +func IsIPv4(netIP net.IP) bool { + return netIP != nil && netIP.To4() != nil +} + +// IsIPv4String returns if ip is IPv4. +func IsIPv4String(ip string) bool { + netIP := ParseIPSloppy(ip) + return IsIPv4(netIP) +} + +// IsIPv4CIDR returns if a cidr is ipv4 +func IsIPv4CIDR(cidr *net.IPNet) bool { + ip := cidr.IP + return IsIPv4(ip) +} + +// IsIPv4CIDRString returns if cidr is IPv4. +// This assumes cidr is a valid CIDR. +func IsIPv4CIDRString(cidr string) bool { + ip, _, _ := ParseCIDRSloppy(cidr) + return IsIPv4(ip) +} + +// ParsePort parses a string representing an IP port. If the string is not a +// valid port number, this returns an error. +func ParsePort(port string, allowZero bool) (int, error) { + portInt, err := strconv.ParseUint(port, 10, 16) + if err != nil { + return 0, err + } + if portInt == 0 && !allowZero { + return 0, errors.New("0 is not a valid port number") + } + return int(portInt), nil +} + +// BigForIP creates a big.Int based on the provided net.IP +func BigForIP(ip net.IP) *big.Int { + // NOTE: Convert to 16-byte representation so we can + // handle v4 and v6 values the same way. + return big.NewInt(0).SetBytes(ip.To16()) +} + +// AddIPOffset adds the provided integer offset to a base big.Int representing a net.IP +// NOTE: If you started with a v4 address and overflow it, you get a v6 result. +func AddIPOffset(base *big.Int, offset int) net.IP { + r := big.NewInt(0).Add(base, big.NewInt(int64(offset))).Bytes() + r = append(make([]byte, 16), r...) + return net.IP(r[len(r)-16:]) +} + +// RangeSize returns the size of a range in valid addresses. +// returns the size of the subnet (or math.MaxInt64 if the range size would overflow int64) +func RangeSize(subnet *net.IPNet) int64 { + ones, bits := subnet.Mask.Size() + if bits == 32 && (bits-ones) >= 31 || bits == 128 && (bits-ones) >= 127 { + return 0 + } + // this checks that we are not overflowing an int64 + if bits-ones >= 63 { + return math.MaxInt64 + } + return int64(1) << uint(bits-ones) +} + +// GetIndexedIP returns a net.IP that is subnet.IP + index in the contiguous IP space. +func GetIndexedIP(subnet *net.IPNet, index int) (net.IP, error) { + ip := AddIPOffset(BigForIP(subnet.IP), index) + if !subnet.Contains(ip) { + return nil, fmt.Errorf("can't generate IP with index %d from subnet. subnet too small. subnet: %q", index, subnet) + } + return ip, nil +} diff --git a/constraint/vendor/k8s.io/utils/net/parse.go b/constraint/vendor/k8s.io/utils/net/parse.go new file mode 100644 index 000000000..400d364d8 --- /dev/null +++ b/constraint/vendor/k8s.io/utils/net/parse.go @@ -0,0 +1,33 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + forkednet "k8s.io/utils/internal/third_party/forked/golang/net" +) + +// ParseIPSloppy is identical to Go's standard net.ParseIP, except that it allows +// leading '0' characters on numbers. Go used to allow this and then changed +// the behavior in 1.17. We're choosing to keep it for compat with potential +// stored values. +var ParseIPSloppy = forkednet.ParseIP + +// ParseCIDRSloppy is identical to Go's standard net.ParseCIDR, except that it allows +// leading '0' characters on numbers. Go used to allow this and then changed +// the behavior in 1.17. We're choosing to keep it for compat with potential +// stored values. +var ParseCIDRSloppy = forkednet.ParseCIDR diff --git a/constraint/vendor/k8s.io/utils/net/port.go b/constraint/vendor/k8s.io/utils/net/port.go new file mode 100644 index 000000000..7ac04f0dc --- /dev/null +++ b/constraint/vendor/k8s.io/utils/net/port.go @@ -0,0 +1,137 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "fmt" + "net" + "strconv" + "strings" +) + +// IPFamily refers to a specific family if not empty, i.e. "4" or "6". +type IPFamily string + +// Constants for valid IPFamilys: +const ( + IPv4 IPFamily = "4" + IPv6 = "6" +) + +// Protocol is a network protocol support by LocalPort. +type Protocol string + +// Constants for valid protocols: +const ( + TCP Protocol = "TCP" + UDP Protocol = "UDP" +) + +// LocalPort represents an IP address and port pair along with a protocol +// and potentially a specific IP family. +// A LocalPort can be opened and subsequently closed. +type LocalPort struct { + // Description is an arbitrary string. + Description string + // IP is the IP address part of a given local port. + // If this string is empty, the port binds to all local IP addresses. + IP string + // If IPFamily is not empty, the port binds only to addresses of this + // family. + // IF empty along with IP, bind to local addresses of any family. + IPFamily IPFamily + // Port is the port number. + // A value of 0 causes a port to be automatically chosen. + Port int + // Protocol is the protocol, e.g. TCP + Protocol Protocol +} + +// NewLocalPort returns a LocalPort instance and ensures IPFamily and IP are +// consistent and that the given protocol is valid. +func NewLocalPort(desc, ip string, ipFamily IPFamily, port int, protocol Protocol) (*LocalPort, error) { + if protocol != TCP && protocol != UDP { + return nil, fmt.Errorf("Unsupported protocol %s", protocol) + } + if ipFamily != "" && ipFamily != "4" && ipFamily != "6" { + return nil, fmt.Errorf("Invalid IP family %s", ipFamily) + } + if ip != "" { + parsedIP := ParseIPSloppy(ip) + if parsedIP == nil { + return nil, fmt.Errorf("invalid ip address %s", ip) + } + asIPv4 := parsedIP.To4() + if asIPv4 == nil && ipFamily == IPv4 || asIPv4 != nil && ipFamily == IPv6 { + return nil, fmt.Errorf("ip address and family mismatch %s, %s", ip, ipFamily) + } + } + return &LocalPort{Description: desc, IP: ip, IPFamily: ipFamily, Port: port, Protocol: protocol}, nil +} + +func (lp *LocalPort) String() string { + ipPort := net.JoinHostPort(lp.IP, strconv.Itoa(lp.Port)) + return fmt.Sprintf("%q (%s/%s%s)", lp.Description, ipPort, strings.ToLower(string(lp.Protocol)), lp.IPFamily) +} + +// Closeable closes an opened LocalPort. +type Closeable interface { + Close() error +} + +// PortOpener can open a LocalPort and allows later closing it. +type PortOpener interface { + OpenLocalPort(lp *LocalPort) (Closeable, error) +} + +type listenPortOpener struct{} + +// ListenPortOpener opens ports by calling bind() and listen(). +var ListenPortOpener listenPortOpener + +// OpenLocalPort holds the given local port open. +func (l *listenPortOpener) OpenLocalPort(lp *LocalPort) (Closeable, error) { + return openLocalPort(lp) +} + +func openLocalPort(lp *LocalPort) (Closeable, error) { + var socket Closeable + hostPort := net.JoinHostPort(lp.IP, strconv.Itoa(lp.Port)) + switch lp.Protocol { + case TCP: + network := "tcp" + string(lp.IPFamily) + listener, err := net.Listen(network, hostPort) + if err != nil { + return nil, err + } + socket = listener + case UDP: + network := "udp" + string(lp.IPFamily) + addr, err := net.ResolveUDPAddr(network, hostPort) + if err != nil { + return nil, err + } + conn, err := net.ListenUDP(network, addr) + if err != nil { + return nil, err + } + socket = conn + default: + return nil, fmt.Errorf("unknown protocol %q", lp.Protocol) + } + return socket, nil +} diff --git a/constraint/vendor/k8s.io/utils/pointer/pointer.go b/constraint/vendor/k8s.io/utils/pointer/pointer.go index 1da6f6664..2cab2c580 100644 --- a/constraint/vendor/k8s.io/utils/pointer/pointer.go +++ b/constraint/vendor/k8s.io/utils/pointer/pointer.go @@ -46,6 +46,24 @@ func AllPtrFieldsNil(obj interface{}) bool { return true } +// Int returns a pointer to an int +func Int(i int) *int { + return &i +} + +var IntPtr = Int // for back-compat + +// IntDeref dereferences the int ptr and returns it if not nil, or else +// returns def. +func IntDeref(ptr *int, def int) int { + if ptr != nil { + return *ptr + } + return def +} + +var IntPtrDerefOr = IntDeref // for back-compat + // Int32 returns a pointer to an int32. func Int32(i int32) *int32 { return &i diff --git a/constraint/vendor/modules.txt b/constraint/vendor/modules.txt index 736736923..0153eca22 100644 --- a/constraint/vendor/modules.txt +++ b/constraint/vendor/modules.txt @@ -11,18 +11,12 @@ github.com/asaskevich/govalidator github.com/beorn7/perks/quantile # github.com/blang/semver v3.5.1+incompatible github.com/blang/semver -# github.com/bytecodealliance/wasmtime-go v0.27.0 -github.com/bytecodealliance/wasmtime-go -github.com/bytecodealliance/wasmtime-go/build/include -github.com/bytecodealliance/wasmtime-go/build/linux-x86_64 -github.com/bytecodealliance/wasmtime-go/build/macos-x86_64 -github.com/bytecodealliance/wasmtime-go/build/windows-x86_64 -# github.com/cespare/xxhash/v2 v2.1.1 +# github.com/cespare/xxhash/v2 v2.1.2 github.com/cespare/xxhash/v2 # github.com/davecgh/go-spew v1.1.1 ## explicit github.com/davecgh/go-spew/spew -# github.com/evanphx/json-patch v4.9.0+incompatible +# github.com/evanphx/json-patch v4.11.0+incompatible github.com/evanphx/json-patch # github.com/ghodss/yaml v1.0.0 github.com/ghodss/yaml @@ -30,13 +24,12 @@ github.com/ghodss/yaml github.com/go-logr/logr # github.com/go-openapi/jsonpointer v0.19.5 github.com/go-openapi/jsonpointer -# github.com/go-openapi/jsonreference v0.19.5 +# github.com/go-openapi/jsonreference v0.19.6 github.com/go-openapi/jsonreference -# github.com/go-openapi/spec v0.20.3 +# github.com/go-openapi/spec v0.20.4 ## explicit github.com/go-openapi/spec # github.com/go-openapi/swag v0.19.15 -## explicit github.com/go-openapi/swag # github.com/gobwas/glob v0.2.3 github.com/gobwas/glob @@ -47,10 +40,10 @@ github.com/gobwas/glob/syntax/ast github.com/gobwas/glob/syntax/lexer github.com/gobwas/glob/util/runes github.com/gobwas/glob/util/strings -# github.com/gogo/protobuf v1.3.1 +# github.com/gogo/protobuf v1.3.2 github.com/gogo/protobuf/proto github.com/gogo/protobuf/sortkeys -# github.com/golang/glog v0.0.0-20210429001901-424d2337a529 +# github.com/golang/glog v1.0.0 ## explicit github.com/golang/glog # github.com/golang/protobuf v1.5.2 @@ -71,7 +64,7 @@ github.com/google/go-cmp/cmp/internal/value ## explicit github.com/google/gofuzz github.com/google/gofuzz/bytesource -# github.com/googleapis/gnostic v0.5.1 +# github.com/googleapis/gnostic v0.5.5 github.com/googleapis/gnostic/compiler github.com/googleapis/gnostic/extensions github.com/googleapis/gnostic/jsonschema @@ -80,14 +73,12 @@ github.com/googleapis/gnostic/openapiv2 github.com/hashicorp/golang-lru github.com/hashicorp/golang-lru/simplelru # github.com/imdario/mergo v0.3.12 -## explicit github.com/imdario/mergo # github.com/inconshreveable/mousetrap v1.0.0 github.com/inconshreveable/mousetrap # github.com/josharian/intern v1.0.0 github.com/josharian/intern # github.com/json-iterator/go v1.1.11 -## explicit github.com/json-iterator/go # github.com/mailru/easyjson v0.7.7 ## explicit @@ -97,20 +88,18 @@ github.com/mailru/easyjson/jwriter # github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 github.com/matttproud/golang_protobuf_extensions/pbutil # github.com/mitchellh/mapstructure v1.4.1 -## explicit github.com/mitchellh/mapstructure # github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd github.com/modern-go/concurrent # github.com/modern-go/reflect2 v1.0.1 github.com/modern-go/reflect2 -# github.com/onsi/gomega v1.10.5 +# github.com/onsi/gomega v1.13.0 ## explicit github.com/onsi/gomega github.com/onsi/gomega/format -github.com/onsi/gomega/gbytes -github.com/onsi/gomega/gexec github.com/onsi/gomega/internal/assertion github.com/onsi/gomega/internal/asyncassertion +github.com/onsi/gomega/internal/defaults github.com/onsi/gomega/internal/oraclematcher github.com/onsi/gomega/internal/testingtsupport github.com/onsi/gomega/matchers @@ -119,7 +108,7 @@ github.com/onsi/gomega/matchers/support/goraph/edge github.com/onsi/gomega/matchers/support/goraph/node github.com/onsi/gomega/matchers/support/goraph/util github.com/onsi/gomega/types -# github.com/open-policy-agent/opa v0.29.4 +# github.com/open-policy-agent/opa v0.35.0 ## explicit github.com/open-policy-agent/opa/ast github.com/open-policy-agent/opa/ast/internal/scanner @@ -135,6 +124,7 @@ github.com/open-policy-agent/opa/internal/debug github.com/open-policy-agent/opa/internal/deepcopy github.com/open-policy-agent/opa/internal/file/archive github.com/open-policy-agent/opa/internal/file/url +github.com/open-policy-agent/opa/internal/future github.com/open-policy-agent/opa/internal/gojsonschema github.com/open-policy-agent/opa/internal/ir github.com/open-policy-agent/opa/internal/jwx/buffer @@ -149,6 +139,7 @@ github.com/open-policy-agent/opa/internal/merge github.com/open-policy-agent/opa/internal/planner github.com/open-policy-agent/opa/internal/rego/opa github.com/open-policy-agent/opa/internal/semver +github.com/open-policy-agent/opa/internal/strings github.com/open-policy-agent/opa/internal/uuid github.com/open-policy-agent/opa/internal/version github.com/open-policy-agent/opa/internal/wasm/constant @@ -156,11 +147,9 @@ github.com/open-policy-agent/opa/internal/wasm/encoding github.com/open-policy-agent/opa/internal/wasm/instruction github.com/open-policy-agent/opa/internal/wasm/module github.com/open-policy-agent/opa/internal/wasm/opcode -github.com/open-policy-agent/opa/internal/wasm/sdk/internal/wasm -github.com/open-policy-agent/opa/internal/wasm/sdk/opa github.com/open-policy-agent/opa/internal/wasm/sdk/opa/capabilities -github.com/open-policy-agent/opa/internal/wasm/sdk/opa/errors github.com/open-policy-agent/opa/internal/wasm/types +github.com/open-policy-agent/opa/internal/wasm/util github.com/open-policy-agent/opa/keys github.com/open-policy-agent/opa/loader github.com/open-policy-agent/opa/metrics @@ -169,36 +158,38 @@ github.com/open-policy-agent/opa/resolver github.com/open-policy-agent/opa/resolver/wasm github.com/open-policy-agent/opa/storage github.com/open-policy-agent/opa/storage/inmem +github.com/open-policy-agent/opa/storage/internal/errors +github.com/open-policy-agent/opa/storage/internal/ptr github.com/open-policy-agent/opa/topdown github.com/open-policy-agent/opa/topdown/builtins github.com/open-policy-agent/opa/topdown/cache github.com/open-policy-agent/opa/topdown/copypropagation +github.com/open-policy-agent/opa/topdown/print github.com/open-policy-agent/opa/types github.com/open-policy-agent/opa/util github.com/open-policy-agent/opa/version # github.com/pkg/errors v0.9.1 -## explicit github.com/pkg/errors -# github.com/prometheus/client_golang v1.10.0 -## explicit +# github.com/prometheus/client_golang v1.11.0 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/internal github.com/prometheus/client_golang/prometheus/promhttp # github.com/prometheus/client_model v0.2.0 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.25.0 +# github.com/prometheus/common v0.32.1 ## explicit github.com/prometheus/common/expfmt github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg github.com/prometheus/common/model -# github.com/prometheus/procfs v0.6.0 +# github.com/prometheus/procfs v0.7.3 +## explicit github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util # github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 ## explicit github.com/rcrowley/go-metrics -# github.com/spf13/cobra v1.1.3 +# github.com/spf13/cobra v1.2.1 ## explicit github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 @@ -210,9 +201,7 @@ github.com/xeipuuv/gojsonpointer github.com/xeipuuv/gojsonreference # github.com/yashtewari/glob-intersection v0.0.0-20180916065949-5c77d914dd0b github.com/yashtewari/glob-intersection -# golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 -golang.org/x/crypto/ssh/terminal -# golang.org/x/net v0.0.0-20210525063256-abc453219eb5 +# golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c ## explicit golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -226,10 +215,9 @@ golang.org/x/net/idna golang.org/x/net/internal/timeseries golang.org/x/net/trace # golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c -## explicit golang.org/x/oauth2 golang.org/x/oauth2/internal -# golang.org/x/sys v0.0.0-20210601080250-7ecdf8ef093b +# golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 ## explicit golang.org/x/sys/internal/unsafeheader golang.org/x/sys/plan9 @@ -238,7 +226,7 @@ golang.org/x/sys/windows # golang.org/x/term v0.0.0-20210503060354-a79de5458b56 ## explicit golang.org/x/term -# golang.org/x/text v0.3.6 +# golang.org/x/text v0.3.7 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/htmlindex @@ -260,13 +248,13 @@ golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm golang.org/x/text/width -# golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba +# golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 +## explicit golang.org/x/time/rate # golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 golang.org/x/xerrors golang.org/x/xerrors/internal # google.golang.org/appengine v1.6.7 -## explicit google.golang.org/appengine/internal google.golang.org/appengine/internal/base google.golang.org/appengine/internal/datastore @@ -275,7 +263,6 @@ google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch # google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c -## explicit google.golang.org/genproto/googleapis/rpc/status # google.golang.org/grpc v1.38.0 google.golang.org/grpc @@ -322,7 +309,7 @@ google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap -# google.golang.org/protobuf v1.26.0 +# google.golang.org/protobuf v1.27.1 google.golang.org/protobuf/encoding/prototext google.golang.org/protobuf/encoding/protowire google.golang.org/protobuf/internal/descfmt @@ -357,9 +344,9 @@ google.golang.org/protobuf/types/known/timestamppb gopkg.in/inf.v0 # gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v2 -# gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 +# gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gopkg.in/yaml.v3 -# k8s.io/api v0.20.2 +# k8s.io/api v0.21.2 k8s.io/api/admissionregistration/v1 k8s.io/api/admissionregistration/v1beta1 k8s.io/api/apiserverinternal/v1alpha1 @@ -375,13 +362,12 @@ k8s.io/api/autoscaling/v2beta1 k8s.io/api/autoscaling/v2beta2 k8s.io/api/batch/v1 k8s.io/api/batch/v1beta1 -k8s.io/api/batch/v2alpha1 k8s.io/api/certificates/v1 k8s.io/api/certificates/v1beta1 k8s.io/api/coordination/v1 k8s.io/api/coordination/v1beta1 k8s.io/api/core/v1 -k8s.io/api/discovery/v1alpha1 +k8s.io/api/discovery/v1 k8s.io/api/discovery/v1beta1 k8s.io/api/events/v1 k8s.io/api/events/v1beta1 @@ -393,6 +379,7 @@ k8s.io/api/networking/v1beta1 k8s.io/api/node/v1 k8s.io/api/node/v1alpha1 k8s.io/api/node/v1beta1 +k8s.io/api/policy/v1 k8s.io/api/policy/v1beta1 k8s.io/api/rbac/v1 k8s.io/api/rbac/v1alpha1 @@ -403,7 +390,7 @@ k8s.io/api/scheduling/v1beta1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.20.2 +# k8s.io/apiextensions-apiserver v0.21.2 ## explicit k8s.io/apiextensions-apiserver/pkg/apihelpers k8s.io/apiextensions-apiserver/pkg/apis/apiextensions @@ -419,7 +406,7 @@ k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1 -# k8s.io/apimachinery v0.20.2 +# k8s.io/apimachinery v0.21.2 ## explicit k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -466,7 +453,7 @@ k8s.io/apimachinery/pkg/version k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.20.2 +# k8s.io/apiserver v0.21.2 k8s.io/apiserver/pkg/apis/apiserver k8s.io/apiserver/pkg/apis/apiserver/install k8s.io/apiserver/pkg/apis/apiserver/v1 @@ -475,9 +462,10 @@ k8s.io/apiserver/pkg/apis/apiserver/v1beta1 k8s.io/apiserver/pkg/server/egressselector k8s.io/apiserver/pkg/server/egressselector/metrics k8s.io/apiserver/pkg/util/webhook -# k8s.io/client-go v0.20.2 +# k8s.io/client-go v0.21.2 ## explicit k8s.io/client-go/discovery +k8s.io/client-go/dynamic k8s.io/client-go/kubernetes/scheme k8s.io/client-go/metadata k8s.io/client-go/pkg/apis/clientauthentication @@ -500,15 +488,16 @@ k8s.io/client-go/util/connrotation k8s.io/client-go/util/flowcontrol k8s.io/client-go/util/homedir k8s.io/client-go/util/keyutil +k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue -# k8s.io/component-base v0.20.2 +# k8s.io/component-base v0.21.2 k8s.io/component-base/metrics k8s.io/component-base/metrics/legacyregistry k8s.io/component-base/version # k8s.io/klog/v2 v2.9.0 ## explicit k8s.io/klog/v2 -# k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d +# k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 ## explicit k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/validation/errors @@ -516,31 +505,36 @@ k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt k8s.io/kube-openapi/pkg/validation/strfmt/bson k8s.io/kube-openapi/pkg/validation/validate -# k8s.io/utils v0.0.0-20210527160623-6fdb442a123b +# k8s.io/utils v0.0.0-20210802155522-efc7438f0176 ## explicit k8s.io/utils/integer +k8s.io/utils/internal/third_party/forked/golang/net +k8s.io/utils/net k8s.io/utils/path k8s.io/utils/pointer k8s.io/utils/trace # sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19 -## explicit sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client -# sigs.k8s.io/controller-runtime v0.8.3 +# sigs.k8s.io/controller-runtime v0.9.2 ## explicit sigs.k8s.io/controller-runtime/pkg/client sigs.k8s.io/controller-runtime/pkg/client/apiutil sigs.k8s.io/controller-runtime/pkg/client/config +sigs.k8s.io/controller-runtime/pkg/conversion sigs.k8s.io/controller-runtime/pkg/envtest +sigs.k8s.io/controller-runtime/pkg/internal/flock sigs.k8s.io/controller-runtime/pkg/internal/log -sigs.k8s.io/controller-runtime/pkg/internal/testing/integration -sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr -sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal +sigs.k8s.io/controller-runtime/pkg/internal/testing/addr +sigs.k8s.io/controller-runtime/pkg/internal/testing/certs +sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane +sigs.k8s.io/controller-runtime/pkg/internal/testing/process sigs.k8s.io/controller-runtime/pkg/log sigs.k8s.io/controller-runtime/pkg/scheme -# sigs.k8s.io/structured-merge-diff/v4 v4.1.1 +sigs.k8s.io/controller-runtime/pkg/webhook/conversion +# sigs.k8s.io/structured-merge-diff/v4 v4.2.0 ## explicit sigs.k8s.io/structured-merge-diff/v4/value -# sigs.k8s.io/yaml v1.2.0 +# sigs.k8s.io/yaml v1.3.0 ## explicit sigs.k8s.io/yaml diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/apimachinery.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/apimachinery.go index b3464c655..2611a20c6 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/apimachinery.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/apimachinery.go @@ -80,7 +80,7 @@ func GVKForObject(obj runtime.Object, scheme *runtime.Scheme) (schema.GroupVersi // (unstructured, partial, etc) // check for PartialObjectMetadata, which is analogous to unstructured, but isn't handled by ObjectKinds - _, isPartial := obj.(*metav1.PartialObjectMetadata) + _, isPartial := obj.(*metav1.PartialObjectMetadata) //nolint:ifshort _, isPartialList := obj.(*metav1.PartialObjectMetadataList) if isPartial || isPartialList { // we require that the GVK be populated in order to recognize the object @@ -118,15 +118,24 @@ func GVKForObject(obj runtime.Object, scheme *runtime.Scheme) (schema.GroupVersi // with the given GroupVersionKind. The REST client will be configured to use the negotiated serializer from // baseConfig, if set, otherwise a default serializer will be set. func RESTClientForGVK(gvk schema.GroupVersionKind, isUnstructured bool, baseConfig *rest.Config, codecs serializer.CodecFactory) (rest.Interface, error) { - cfg := createRestConfig(gvk, isUnstructured, baseConfig) - if cfg.NegotiatedSerializer == nil { - cfg.NegotiatedSerializer = serializer.WithoutConversionCodecFactory{CodecFactory: codecs} - } - return rest.RESTClientFor(cfg) + return rest.RESTClientFor(createRestConfig(gvk, isUnstructured, baseConfig, codecs)) +} + +// serializerWithDecodedGVK is a CodecFactory that overrides the DecoderToVersion of a WithoutConversionCodecFactory +// in order to avoid clearing the GVK from the decoded object. +// +// See https://github.com/kubernetes/kubernetes/issues/80609. +type serializerWithDecodedGVK struct { + serializer.WithoutConversionCodecFactory +} + +// DecoderToVersion returns an decoder that does not do conversion. +func (f serializerWithDecodedGVK) DecoderToVersion(serializer runtime.Decoder, _ runtime.GroupVersioner) runtime.Decoder { + return serializer } -//createRestConfig copies the base config and updates needed fields for a new rest config -func createRestConfig(gvk schema.GroupVersionKind, isUnstructured bool, baseConfig *rest.Config) *rest.Config { +// createRestConfig copies the base config and updates needed fields for a new rest config. +func createRestConfig(gvk schema.GroupVersionKind, isUnstructured bool, baseConfig *rest.Config, codecs serializer.CodecFactory) *rest.Config { gv := gvk.GroupVersion() cfg := rest.CopyConfig(baseConfig) @@ -147,5 +156,16 @@ func createRestConfig(gvk schema.GroupVersionKind, isUnstructured bool, baseConf } protobufSchemeLock.RUnlock() } + + if cfg.NegotiatedSerializer == nil { + if isUnstructured { + // If the object is unstructured, we need to preserve the GVK information. + // Use our own custom serializer. + cfg.NegotiatedSerializer = serializerWithDecodedGVK{serializer.WithoutConversionCodecFactory{CodecFactory: codecs}} + } else { + cfg.NegotiatedSerializer = serializer.WithoutConversionCodecFactory{CodecFactory: codecs} + } + } + return cfg } diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/dynamicrestmapper.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/dynamicrestmapper.go index 5e9a7b5f5..56a00371f 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/dynamicrestmapper.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil/dynamicrestmapper.go @@ -41,7 +41,7 @@ type dynamicRESTMapper struct { initOnce sync.Once } -// DynamicRESTMapperOption is a functional option on the dynamicRESTMapper +// DynamicRESTMapperOption is a functional option on the dynamicRESTMapper. type DynamicRESTMapperOption func(*dynamicRESTMapper) error // WithLimiter sets the RESTMapper's underlying limiter to lim. diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go index 0af814fdf..bbe36c467 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go @@ -19,6 +19,7 @@ package client import ( "context" "fmt" + "strings" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -31,15 +32,34 @@ import ( "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client/apiutil" + "sigs.k8s.io/controller-runtime/pkg/log" ) -// Options are creation options for a Client +// WarningHandlerOptions are options for configuring a +// warning handler for the client which is responsible +// for surfacing API Server warnings. +type WarningHandlerOptions struct { + // SuppressWarnings decides if the warnings from the + // API server are suppressed or surfaced in the client. + SuppressWarnings bool + // AllowDuplicateLogs does not deduplicate the to-be + // logged surfaced warnings messages. See + // log.WarningHandlerOptions for considerations + // regarding deuplication + AllowDuplicateLogs bool +} + +// Options are creation options for a Client. type Options struct { // Scheme, if provided, will be used to map go structs to GroupVersionKinds Scheme *runtime.Scheme // Mapper, if provided, will be used to map GroupVersionKinds to Resources Mapper meta.RESTMapper + + // Opts is used to configure the warning handler responsible for + // surfacing and handling warnings messages sent by the API server. + Opts WarningHandlerOptions } // New returns a new Client using the provided config and Options. @@ -53,10 +73,31 @@ type Options struct { // case of unstructured types, the group, version, and kind will be extracted // from the corresponding fields on the object. func New(config *rest.Config, options Options) (Client, error) { + return newClient(config, options) +} + +func newClient(config *rest.Config, options Options) (*client, error) { if config == nil { return nil, fmt.Errorf("must provide non-nil rest.Config to client.New") } + if !options.Opts.SuppressWarnings { + // surface warnings + logger := log.Log.WithName("KubeAPIWarningLogger") + // Set a WarningHandler, the default WarningHandler + // is log.KubeAPIWarningLogger with deduplication enabled. + // See log.KubeAPIWarningLoggerOptions for considerations + // regarding deduplication. + rest.SetDefaultWarningHandler( + log.NewKubeAPIWarningLogger( + logger, + log.KubeAPIWarningLoggerOptions{ + Deduplicate: !options.Opts.AllowDuplicateLogs, + }, + ), + ) + } + // Init a scheme if none provided if options.Scheme == nil { options.Scheme = scheme.Scheme @@ -119,7 +160,6 @@ type client struct { } // resetGroupVersionKind is a helper function to restore and preserve GroupVersionKind on an object. -// TODO(vincepri): Remove this function and its calls once controller-runtime dependencies are upgraded to 1.16? func (c *client) resetGroupVersionKind(obj runtime.Object, gvk schema.GroupVersionKind) { if gvk != schema.EmptyObjectKind.GroupVersionKind() { if v, ok := obj.(schema.ObjectKind); ok { @@ -138,7 +178,7 @@ func (c *client) RESTMapper() meta.RESTMapper { return c.mapper } -// Create implements client.Client +// Create implements client.Client. func (c *client) Create(ctx context.Context, obj Object, opts ...CreateOption) error { switch obj.(type) { case *unstructured.Unstructured: @@ -150,7 +190,7 @@ func (c *client) Create(ctx context.Context, obj Object, opts ...CreateOption) e } } -// Update implements client.Client +// Update implements client.Client. func (c *client) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { defer c.resetGroupVersionKind(obj, obj.GetObjectKind().GroupVersionKind()) switch obj.(type) { @@ -163,7 +203,7 @@ func (c *client) Update(ctx context.Context, obj Object, opts ...UpdateOption) e } } -// Delete implements client.Client +// Delete implements client.Client. func (c *client) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { switch obj.(type) { case *unstructured.Unstructured: @@ -175,7 +215,7 @@ func (c *client) Delete(ctx context.Context, obj Object, opts ...DeleteOption) e } } -// DeleteAllOf implements client.Client +// DeleteAllOf implements client.Client. func (c *client) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error { switch obj.(type) { case *unstructured.Unstructured: @@ -187,7 +227,7 @@ func (c *client) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllO } } -// Patch implements client.Client +// Patch implements client.Client. func (c *client) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { defer c.resetGroupVersionKind(obj, obj.GetObjectKind().GroupVersionKind()) switch obj.(type) { @@ -200,44 +240,68 @@ func (c *client) Patch(ctx context.Context, obj Object, patch Patch, opts ...Pat } } -// Get implements client.Client +// Get implements client.Client. func (c *client) Get(ctx context.Context, key ObjectKey, obj Object) error { switch obj.(type) { case *unstructured.Unstructured: return c.unstructuredClient.Get(ctx, key, obj) case *metav1.PartialObjectMetadata: + // Metadata only object should always preserve the GVK coming in from the caller. + defer c.resetGroupVersionKind(obj, obj.GetObjectKind().GroupVersionKind()) return c.metadataClient.Get(ctx, key, obj) default: return c.typedClient.Get(ctx, key, obj) } } -// List implements client.Client +// List implements client.Client. func (c *client) List(ctx context.Context, obj ObjectList, opts ...ListOption) error { - switch obj.(type) { + switch x := obj.(type) { case *unstructured.UnstructuredList: return c.unstructuredClient.List(ctx, obj, opts...) case *metav1.PartialObjectMetadataList: - return c.metadataClient.List(ctx, obj, opts...) + // Metadata only object should always preserve the GVK. + gvk := obj.GetObjectKind().GroupVersionKind() + defer c.resetGroupVersionKind(obj, gvk) + + // Call the list client. + if err := c.metadataClient.List(ctx, obj, opts...); err != nil { + return err + } + + // Restore the GVK for each item in the list. + itemGVK := schema.GroupVersionKind{ + Group: gvk.Group, + Version: gvk.Version, + // TODO: this is producing unsafe guesses that don't actually work, + // but it matches ~99% of the cases out there. + Kind: strings.TrimSuffix(gvk.Kind, "List"), + } + for i := range x.Items { + item := &x.Items[i] + item.SetGroupVersionKind(itemGVK) + } + + return nil default: return c.typedClient.List(ctx, obj, opts...) } } -// Status implements client.StatusClient +// Status implements client.StatusClient. func (c *client) Status() StatusWriter { return &statusWriter{client: c} } -// statusWriter is client.StatusWriter that writes status subresource +// statusWriter is client.StatusWriter that writes status subresource. type statusWriter struct { client *client } -// ensure statusWriter implements client.StatusWriter +// ensure statusWriter implements client.StatusWriter. var _ StatusWriter = &statusWriter{} -// Update implements client.StatusWriter +// Update implements client.StatusWriter. func (sw *statusWriter) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { defer sw.client.resetGroupVersionKind(obj, obj.GetObjectKind().GroupVersionKind()) switch obj.(type) { @@ -250,7 +314,7 @@ func (sw *statusWriter) Update(ctx context.Context, obj Object, opts ...UpdateOp } } -// Patch implements client.Client +// Patch implements client.Client. func (sw *statusWriter) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { defer sw.client.resetGroupVersionKind(obj, obj.GetObjectKind().GroupVersionKind()) switch obj.(type) { diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client_cache.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client_cache.go index bf6ee882b..857a0b38a 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client_cache.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/client_cache.go @@ -30,7 +30,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/apiutil" ) -// clientCache creates and caches rest clients and metadata for Kubernetes types +// clientCache creates and caches rest clients and metadata for Kubernetes types. type clientCache struct { // config is the rest.Config to talk to an apiserver config *rest.Config @@ -107,7 +107,7 @@ func (c *clientCache) getResource(obj runtime.Object) (*resourceMeta, error) { return r, err } -// getObjMeta returns objMeta containing both type and object metadata and state +// getObjMeta returns objMeta containing both type and object metadata and state. func (c *clientCache) getObjMeta(obj runtime.Object) (*objMeta, error) { r, err := c.getResource(obj) if err != nil { @@ -130,18 +130,17 @@ type resourceMeta struct { mapping *meta.RESTMapping } -// isNamespaced returns true if the type is namespaced +// isNamespaced returns true if the type is namespaced. func (r *resourceMeta) isNamespaced() bool { return r.mapping.Scope.Name() != meta.RESTScopeNameRoot - } -// resource returns the resource name of the type +// resource returns the resource name of the type. func (r *resourceMeta) resource() string { return r.mapping.Resource.Resource } -// objMeta stores type and object information about a Kubernetes type +// objMeta stores type and object information about a Kubernetes type. type objMeta struct { // resourceMeta contains type information for the object *resourceMeta diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/codec.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/codec.go index 5789de204..9c2923106 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/codec.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/codec.go @@ -1,3 +1,19 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package client import ( diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go index 69f7dc6e4..235a7e450 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go @@ -55,7 +55,7 @@ func init() { // // * In-cluster config if running in cluster // -// * $HOME/.kube/config if exists +// * $HOME/.kube/config if exists. func GetConfig() (*rest.Config, error) { return GetConfigWithContext("") } @@ -75,7 +75,7 @@ func GetConfig() (*rest.Config, error) { // // * In-cluster config if running in cluster // -// * $HOME/.kube/config if exists +// * $HOME/.kube/config if exists. func GetConfigWithContext(context string) (*rest.Config, error) { cfg, err := loadConfig(context) if err != nil { @@ -95,9 +95,8 @@ func GetConfigWithContext(context string) (*rest.Config, error) { // test the precedence of loading the config. var loadInClusterConfig = rest.InClusterConfig -// loadConfig loads a REST Config as per the rules specified in GetConfig +// loadConfig loads a REST Config as per the rules specified in GetConfig. func loadConfig(context string) (*rest.Config, error) { - // If a flag is specified with the config location, use that if len(kubeconfig) > 0 { return loadConfigWithContext("", &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig}, context) diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/dryrun.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/dryrun.go index 67e80e055..ea25ea253 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/dryrun.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/dryrun.go @@ -46,47 +46,47 @@ func (c *dryRunClient) RESTMapper() meta.RESTMapper { return c.client.RESTMapper() } -// Create implements client.Client +// Create implements client.Client. func (c *dryRunClient) Create(ctx context.Context, obj Object, opts ...CreateOption) error { return c.client.Create(ctx, obj, append(opts, DryRunAll)...) } -// Update implements client.Client +// Update implements client.Client. func (c *dryRunClient) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { return c.client.Update(ctx, obj, append(opts, DryRunAll)...) } -// Delete implements client.Client +// Delete implements client.Client. func (c *dryRunClient) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { return c.client.Delete(ctx, obj, append(opts, DryRunAll)...) } -// DeleteAllOf implements client.Client +// DeleteAllOf implements client.Client. func (c *dryRunClient) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error { return c.client.DeleteAllOf(ctx, obj, append(opts, DryRunAll)...) } -// Patch implements client.Client +// Patch implements client.Client. func (c *dryRunClient) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { return c.client.Patch(ctx, obj, patch, append(opts, DryRunAll)...) } -// Get implements client.Client +// Get implements client.Client. func (c *dryRunClient) Get(ctx context.Context, key ObjectKey, obj Object) error { return c.client.Get(ctx, key, obj) } -// List implements client.Client +// List implements client.Client. func (c *dryRunClient) List(ctx context.Context, obj ObjectList, opts ...ListOption) error { return c.client.List(ctx, obj, opts...) } -// Status implements client.StatusClient +// Status implements client.StatusClient. func (c *dryRunClient) Status() StatusWriter { return &dryRunStatusWriter{client: c.client.Status()} } -// ensure dryRunStatusWriter implements client.StatusWriter +// ensure dryRunStatusWriter implements client.StatusWriter. var _ StatusWriter = &dryRunStatusWriter{} // dryRunStatusWriter is client.StatusWriter that writes status subresource with dryRun mode @@ -95,12 +95,12 @@ type dryRunStatusWriter struct { client StatusWriter } -// Update implements client.StatusWriter +// Update implements client.StatusWriter. func (sw *dryRunStatusWriter) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { return sw.client.Update(ctx, obj, append(opts, DryRunAll)...) } -// Patch implements client.StatusWriter +// Patch implements client.StatusWriter. func (sw *dryRunStatusWriter) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { return sw.client.Patch(ctx, obj, patch, append(opts, DryRunAll)...) } diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/interfaces.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/interfaces.go index 09636968f..58c2ece15 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/interfaces.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/interfaces.go @@ -24,12 +24,13 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/watch" ) // ObjectKey identifies a Kubernetes Object. type ObjectKey = types.NamespacedName -// ObjectKeyFromObject returns the ObjectKey given a runtime.Object +// ObjectKeyFromObject returns the ObjectKey given a runtime.Object. func ObjectKeyFromObject(obj Object) ObjectKey { return ObjectKey{Namespace: obj.GetNamespace(), Name: obj.GetName()} } @@ -39,7 +40,7 @@ type Patch interface { // Type is the PatchType of the patch. Type() types.PatchType // Data is the raw data representing the patch. - Data(obj runtime.Object) ([]byte, error) + Data(obj Object) ([]byte, error) } // TODO(directxman12): is there a sane way to deal with get/delete options? @@ -108,6 +109,14 @@ type Client interface { RESTMapper() meta.RESTMapper } +// WithWatch supports Watch on top of the CRUD operations supported by +// the normal Client. Its intended use-case are CLI apps that need to wait for +// events. +type WithWatch interface { + Client + Watch(ctx context.Context, obj ObjectList, opts ...ListOption) (watch.Interface, error) +} + // IndexerFunc knows how to take an object and turn it into a series // of non-namespaced keys. Namespaced objects are automatically given // namespaced and non-spaced variants, so keys do not need to include namespace. diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/metadata_client.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/metadata_client.go index 6587a1940..59747463a 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/metadata_client.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/metadata_client.go @@ -49,7 +49,7 @@ func (mc *metadataClient) getResourceInterface(gvk schema.GroupVersionKind, ns s return mc.client.Resource(mapping.Resource).Namespace(ns), nil } -// Delete implements client.Client +// Delete implements client.Client. func (mc *metadataClient) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { metadata, ok := obj.(*metav1.PartialObjectMetadata) if !ok { @@ -67,7 +67,7 @@ func (mc *metadataClient) Delete(ctx context.Context, obj Object, opts ...Delete return resInt.Delete(ctx, metadata.Name, *deleteOpts.AsDeleteOptions()) } -// DeleteAllOf implements client.Client +// DeleteAllOf implements client.Client. func (mc *metadataClient) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error { metadata, ok := obj.(*metav1.PartialObjectMetadata) if !ok { @@ -85,7 +85,7 @@ func (mc *metadataClient) DeleteAllOf(ctx context.Context, obj Object, opts ...D return resInt.DeleteCollection(ctx, *deleteAllOfOpts.AsDeleteOptions(), *deleteAllOfOpts.AsListOptions()) } -// Patch implements client.Client +// Patch implements client.Client. func (mc *metadataClient) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { metadata, ok := obj.(*metav1.PartialObjectMetadata) if !ok { @@ -104,6 +104,8 @@ func (mc *metadataClient) Patch(ctx context.Context, obj Object, patch Patch, op } patchOpts := &PatchOptions{} + patchOpts.ApplyOptions(opts) + res, err := resInt.Patch(ctx, metadata.Name, patch.Type(), data, *patchOpts.AsPatchOptions()) if err != nil { return err @@ -113,7 +115,7 @@ func (mc *metadataClient) Patch(ctx context.Context, obj Object, patch Patch, op return nil } -// Get implements client.Client +// Get implements client.Client. func (mc *metadataClient) Get(ctx context.Context, key ObjectKey, obj Object) error { metadata, ok := obj.(*metav1.PartialObjectMetadata) if !ok { @@ -136,7 +138,7 @@ func (mc *metadataClient) Get(ctx context.Context, key ObjectKey, obj Object) er return nil } -// List implements client.Client +// List implements client.Client. func (mc *metadataClient) List(ctx context.Context, obj ObjectList, opts ...ListOption) error { metadata, ok := obj.(*metav1.PartialObjectMetadataList) if !ok { diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/namespaced_client.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/namespaced_client.go index 5ed8baca9..d73cc5135 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/namespaced_client.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/namespaced_client.go @@ -57,6 +57,7 @@ func (n *namespacedClient) RESTMapper() meta.RESTMapper { // isNamespaced returns true if the object is namespace scoped. // For unstructured objects the gvk is found from the object itself. +// TODO: this is repetitive code. Remove this and use ojectutil.IsNamespaced. func isNamespaced(c Client, obj runtime.Object) (bool, error) { var gvk schema.GroupVersionKind var err error @@ -85,7 +86,7 @@ func isNamespaced(c Client, obj runtime.Object) (bool, error) { scope := restmapping.Scope.Name() if scope == "" { - return false, errors.New("Scope cannot be identified. Empty scope returned") + return false, errors.New("scope cannot be identified, empty scope returned") } if scope != meta.RESTScopeNameRoot { @@ -94,7 +95,7 @@ func isNamespaced(c Client, obj runtime.Object) (bool, error) { return false, nil } -// Create implements clinet.Client +// Create implements clinet.Client. func (n *namespacedClient) Create(ctx context.Context, obj Object, opts ...CreateOption) error { isNamespaceScoped, err := isNamespaced(n.client, obj) if err != nil { @@ -103,7 +104,7 @@ func (n *namespacedClient) Create(ctx context.Context, obj Object, opts ...Creat objectNamespace := obj.GetNamespace() if objectNamespace != n.namespace && objectNamespace != "" { - return fmt.Errorf("Namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) + return fmt.Errorf("namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) } if isNamespaceScoped && objectNamespace == "" { @@ -112,7 +113,7 @@ func (n *namespacedClient) Create(ctx context.Context, obj Object, opts ...Creat return n.client.Create(ctx, obj, opts...) } -// Update implements client.Client +// Update implements client.Client. func (n *namespacedClient) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { isNamespaceScoped, err := isNamespaced(n.client, obj) if err != nil { @@ -121,7 +122,7 @@ func (n *namespacedClient) Update(ctx context.Context, obj Object, opts ...Updat objectNamespace := obj.GetNamespace() if objectNamespace != n.namespace && objectNamespace != "" { - return fmt.Errorf("Namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) + return fmt.Errorf("namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) } if isNamespaceScoped && objectNamespace == "" { @@ -130,7 +131,7 @@ func (n *namespacedClient) Update(ctx context.Context, obj Object, opts ...Updat return n.client.Update(ctx, obj, opts...) } -// Delete implements client.Client +// Delete implements client.Client. func (n *namespacedClient) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { isNamespaceScoped, err := isNamespaced(n.client, obj) if err != nil { @@ -139,7 +140,7 @@ func (n *namespacedClient) Delete(ctx context.Context, obj Object, opts ...Delet objectNamespace := obj.GetNamespace() if objectNamespace != n.namespace && objectNamespace != "" { - return fmt.Errorf("Namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) + return fmt.Errorf("namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) } if isNamespaceScoped && objectNamespace == "" { @@ -148,7 +149,7 @@ func (n *namespacedClient) Delete(ctx context.Context, obj Object, opts ...Delet return n.client.Delete(ctx, obj, opts...) } -// DeleteAllOf implements client.Client +// DeleteAllOf implements client.Client. func (n *namespacedClient) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error { isNamespaceScoped, err := isNamespaced(n.client, obj) if err != nil { @@ -161,7 +162,7 @@ func (n *namespacedClient) DeleteAllOf(ctx context.Context, obj Object, opts ... return n.client.DeleteAllOf(ctx, obj, opts...) } -// Patch implements client.Client +// Patch implements client.Client. func (n *namespacedClient) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { isNamespaceScoped, err := isNamespaced(n.client, obj) if err != nil { @@ -170,7 +171,7 @@ func (n *namespacedClient) Patch(ctx context.Context, obj Object, patch Patch, o objectNamespace := obj.GetNamespace() if objectNamespace != n.namespace && objectNamespace != "" { - return fmt.Errorf("Namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) + return fmt.Errorf("namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), n.namespace) } if isNamespaceScoped && objectNamespace == "" { @@ -179,7 +180,7 @@ func (n *namespacedClient) Patch(ctx context.Context, obj Object, patch Patch, o return n.client.Patch(ctx, obj, patch, opts...) } -// Get implements client.Client +// Get implements client.Client. func (n *namespacedClient) Get(ctx context.Context, key ObjectKey, obj Object) error { isNamespaceScoped, err := isNamespaced(n.client, obj) if err != nil { @@ -187,14 +188,14 @@ func (n *namespacedClient) Get(ctx context.Context, key ObjectKey, obj Object) e } if isNamespaceScoped { if key.Namespace != "" && key.Namespace != n.namespace { - return fmt.Errorf("Namespace %s provided for the object %s does not match the namesapce %s on the client", key.Namespace, obj.GetName(), n.namespace) + return fmt.Errorf("namespace %s provided for the object %s does not match the namesapce %s on the client", key.Namespace, obj.GetName(), n.namespace) } key.Namespace = n.namespace } return n.client.Get(ctx, key, obj) } -// List implements client.Client +// List implements client.Client. func (n *namespacedClient) List(ctx context.Context, obj ObjectList, opts ...ListOption) error { if n.namespace != "" { opts = append(opts, InNamespace(n.namespace)) @@ -202,12 +203,12 @@ func (n *namespacedClient) List(ctx context.Context, obj ObjectList, opts ...Lis return n.client.List(ctx, obj, opts...) } -// Status implements client.StatusClient +// Status implements client.StatusClient. func (n *namespacedClient) Status() StatusWriter { return &namespacedClientStatusWriter{StatusClient: n.client.Status(), namespace: n.namespace, namespacedclient: n} } -// ensure namespacedClientStatusWriter implements client.StatusWriter +// ensure namespacedClientStatusWriter implements client.StatusWriter. var _ StatusWriter = &namespacedClientStatusWriter{} type namespacedClientStatusWriter struct { @@ -216,7 +217,7 @@ type namespacedClientStatusWriter struct { namespacedclient Client } -// Update implements client.StatusWriter +// Update implements client.StatusWriter. func (nsw *namespacedClientStatusWriter) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { isNamespaceScoped, err := isNamespaced(nsw.namespacedclient, obj) if err != nil { @@ -225,7 +226,7 @@ func (nsw *namespacedClientStatusWriter) Update(ctx context.Context, obj Object, objectNamespace := obj.GetNamespace() if objectNamespace != nsw.namespace && objectNamespace != "" { - return fmt.Errorf("Namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), nsw.namespace) + return fmt.Errorf("namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), nsw.namespace) } if isNamespaceScoped && objectNamespace == "" { @@ -234,7 +235,7 @@ func (nsw *namespacedClientStatusWriter) Update(ctx context.Context, obj Object, return nsw.StatusClient.Update(ctx, obj, opts...) } -// Patch implements client.StatusWriter +// Patch implements client.StatusWriter. func (nsw *namespacedClientStatusWriter) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { isNamespaceScoped, err := isNamespaced(nsw.namespacedclient, obj) if err != nil { @@ -243,7 +244,7 @@ func (nsw *namespacedClientStatusWriter) Patch(ctx context.Context, obj Object, objectNamespace := obj.GetNamespace() if objectNamespace != nsw.namespace && objectNamespace != "" { - return fmt.Errorf("Namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), nsw.namespace) + return fmt.Errorf("namespace %s of the object %s does not match the namespace %s on the client", objectNamespace, obj.GetName(), nsw.namespace) } if isNamespaceScoped && objectNamespace == "" { diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/options.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/options.go index f25327646..aa2299eac 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/options.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/options.go @@ -158,7 +158,7 @@ func (o *CreateOptions) ApplyOptions(opts []CreateOption) *CreateOptions { return o } -// ApplyToCreate implements CreateOption +// ApplyToCreate implements CreateOption. func (o *CreateOptions) ApplyToCreate(co *CreateOptions) { if o.DryRun != nil { co.DryRun = o.DryRun @@ -239,7 +239,7 @@ func (o *DeleteOptions) ApplyOptions(opts []DeleteOption) *DeleteOptions { var _ DeleteOption = &DeleteOptions{} -// ApplyToDelete implements DeleteOption +// ApplyToDelete implements DeleteOption. func (o *DeleteOptions) ApplyToDelete(do *DeleteOptions) { if o.GracePeriodSeconds != nil { do.GracePeriodSeconds = o.GracePeriodSeconds @@ -349,7 +349,7 @@ type ListOptions struct { var _ ListOption = &ListOptions{} -// ApplyToList implements ListOption for ListOptions +// ApplyToList implements ListOption for ListOptions. func (o *ListOptions) ApplyToList(lo *ListOptions) { if o.LabelSelector != nil { lo.LabelSelector = o.LabelSelector @@ -569,7 +569,7 @@ func (o *UpdateOptions) ApplyOptions(opts []UpdateOption) *UpdateOptions { var _ UpdateOption = &UpdateOptions{} -// ApplyToUpdate implements UpdateOption +// ApplyToUpdate implements UpdateOption. func (o *UpdateOptions) ApplyToUpdate(uo *UpdateOptions) { if o.DryRun != nil { uo.DryRun = o.DryRun @@ -636,7 +636,7 @@ func (o *PatchOptions) AsPatchOptions() *metav1.PatchOptions { var _ PatchOption = &PatchOptions{} -// ApplyToPatch implements PatchOptions +// ApplyToPatch implements PatchOptions. func (o *PatchOptions) ApplyToPatch(po *PatchOptions) { if o.DryRun != nil { po.DryRun = o.DryRun @@ -688,7 +688,7 @@ func (o *DeleteAllOfOptions) ApplyOptions(opts []DeleteAllOfOption) *DeleteAllOf var _ DeleteAllOfOption = &DeleteAllOfOptions{} -// ApplyToDeleteAllOf implements DeleteAllOfOption +// ApplyToDeleteAllOf implements DeleteAllOfOption. func (o *DeleteAllOfOptions) ApplyToDeleteAllOf(do *DeleteAllOfOptions) { o.ApplyToList(&do.ListOptions) o.ApplyToDelete(&do.DeleteOptions) diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/patch.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/patch.go index 3dd4568a4..10984c534 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/patch.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/patch.go @@ -20,9 +20,6 @@ import ( "fmt" jsonpatch "github.com/evanphx/json-patch" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/strategicpatch" @@ -30,11 +27,11 @@ import ( var ( // Apply uses server-side apply to patch the given object. - Apply = applyPatch{} + Apply Patch = applyPatch{} // Merge uses the raw object as a merge patch, without modifications. // Use MergeFrom if you wish to compute a diff instead. - Merge = mergePatch{} + Merge Patch = mergePatch{} ) type patch struct { @@ -48,7 +45,7 @@ func (s *patch) Type() types.PatchType { } // Data implements Patch. -func (s *patch) Data(obj runtime.Object) ([]byte, error) { +func (s *patch) Data(obj Object) ([]byte, error) { return s.data, nil } @@ -90,23 +87,39 @@ type MergeFromOptions struct { type mergeFromPatch struct { patchType types.PatchType createPatch func(originalJSON, modifiedJSON []byte, dataStruct interface{}) ([]byte, error) - from runtime.Object + from Object opts MergeFromOptions } -// Type implements patch. +// Type implements Patch. func (s *mergeFromPatch) Type() types.PatchType { return s.patchType } // Data implements Patch. -func (s *mergeFromPatch) Data(obj runtime.Object) ([]byte, error) { - originalJSON, err := json.Marshal(s.from) +func (s *mergeFromPatch) Data(obj Object) ([]byte, error) { + original := s.from + modified := obj + + if s.opts.OptimisticLock { + version := original.GetResourceVersion() + if len(version) == 0 { + return nil, fmt.Errorf("cannot use OptimisticLock, object %q does not have any resource version we can use", original) + } + + original = original.DeepCopyObject().(Object) + original.SetResourceVersion("") + + modified = modified.DeepCopyObject().(Object) + modified.SetResourceVersion(version) + } + + originalJSON, err := json.Marshal(original) if err != nil { return nil, err } - modifiedJSON, err := json.Marshal(obj) + modifiedJSON, err := json.Marshal(modified) if err != nil { return nil, err } @@ -116,27 +129,6 @@ func (s *mergeFromPatch) Data(obj runtime.Object) ([]byte, error) { return nil, err } - if s.opts.OptimisticLock { - dataMap := map[string]interface{}{} - if err := json.Unmarshal(data, &dataMap); err != nil { - return nil, err - } - fromMeta, ok := s.from.(metav1.Object) - if !ok { - return nil, fmt.Errorf("cannot use OptimisticLock, from object %q is not a valid metav1.Object", s.from) - } - resourceVersion := fromMeta.GetResourceVersion() - if len(resourceVersion) == 0 { - return nil, fmt.Errorf("cannot use OptimisticLock, from object %q does not have any resource version we can use", s.from) - } - u := &unstructured.Unstructured{Object: dataMap} - u.SetResourceVersion(resourceVersion) - data, err = json.Marshal(u) - if err != nil { - return nil, err - } - } - return data, nil } @@ -155,13 +147,13 @@ func createStrategicMergePatch(originalJSON, modifiedJSON []byte, dataStruct int // e.g. the existing list is not replaced completely but rather merged with the new one using the list's `patchMergeKey`. // See https://kubernetes.io/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/ for more details on // the difference between merge-patch and strategic-merge-patch. -func MergeFrom(obj runtime.Object) Patch { +func MergeFrom(obj Object) Patch { return &mergeFromPatch{patchType: types.MergePatchType, createPatch: createMergePatch, from: obj} } // MergeFromWithOptions creates a Patch that patches using the merge-patch strategy with the given object as base. // See MergeFrom for more details. -func MergeFromWithOptions(obj runtime.Object, opts ...MergeFromOption) Patch { +func MergeFromWithOptions(obj Object, opts ...MergeFromOption) Patch { options := &MergeFromOptions{} for _, opt := range opts { opt.ApplyToMergeFrom(options) @@ -195,7 +187,7 @@ func (p mergePatch) Type() types.PatchType { } // Data implements Patch. -func (p mergePatch) Data(obj runtime.Object) ([]byte, error) { +func (p mergePatch) Data(obj Object) ([]byte, error) { // NB(directxman12): we might technically want to be using an actual encoder // here (in case some more performant encoder is introduced) but this is // correct and sufficient for our uses (it's what the JSON serializer in @@ -212,7 +204,7 @@ func (p applyPatch) Type() types.PatchType { } // Data implements Patch. -func (p applyPatch) Data(obj runtime.Object) ([]byte, error) { +func (p applyPatch) Data(obj Object) ([]byte, error) { // NB(directxman12): we might technically want to be using an actual encoder // here (in case some more performant encoder is introduced) but this is // correct and sufficient for our uses (it's what the JSON serializer in diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/typed_client.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/typed_client.go index a1b32653c..dde7b21f2 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/typed_client.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/typed_client.go @@ -33,7 +33,7 @@ type typedClient struct { paramCodec runtime.ParameterCodec } -// Create implements client.Client +// Create implements client.Client. func (c *typedClient) Create(ctx context.Context, obj Object, opts ...CreateOption) error { o, err := c.cache.getObjMeta(obj) if err != nil { @@ -51,7 +51,7 @@ func (c *typedClient) Create(ctx context.Context, obj Object, opts ...CreateOpti Into(obj) } -// Update implements client.Client +// Update implements client.Client. func (c *typedClient) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { o, err := c.cache.getObjMeta(obj) if err != nil { @@ -70,7 +70,7 @@ func (c *typedClient) Update(ctx context.Context, obj Object, opts ...UpdateOpti Into(obj) } -// Delete implements client.Client +// Delete implements client.Client. func (c *typedClient) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { o, err := c.cache.getObjMeta(obj) if err != nil { @@ -89,7 +89,7 @@ func (c *typedClient) Delete(ctx context.Context, obj Object, opts ...DeleteOpti Error() } -// DeleteAllOf implements client.Client +// DeleteAllOf implements client.Client. func (c *typedClient) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error { o, err := c.cache.getObjMeta(obj) if err != nil { @@ -108,7 +108,7 @@ func (c *typedClient) DeleteAllOf(ctx context.Context, obj Object, opts ...Delet Error() } -// Patch implements client.Client +// Patch implements client.Client. func (c *typedClient) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { o, err := c.cache.getObjMeta(obj) if err != nil { @@ -131,7 +131,7 @@ func (c *typedClient) Patch(ctx context.Context, obj Object, patch Patch, opts . Into(obj) } -// Get implements client.Client +// Get implements client.Client. func (c *typedClient) Get(ctx context.Context, key ObjectKey, obj Object) error { r, err := c.cache.getResource(obj) if err != nil { @@ -143,7 +143,7 @@ func (c *typedClient) Get(ctx context.Context, key ObjectKey, obj Object) error Name(key.Name).Do(ctx).Into(obj) } -// List implements client.Client +// List implements client.Client. func (c *typedClient) List(ctx context.Context, obj ObjectList, opts ...ListOption) error { r, err := c.cache.getResource(obj) if err != nil { diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/unstructured_client.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/unstructured_client.go index f8fb3ccec..dcf15be27 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/unstructured_client.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/unstructured_client.go @@ -36,7 +36,7 @@ type unstructuredClient struct { paramCodec runtime.ParameterCodec } -// Create implements client.Client +// Create implements client.Client. func (uc *unstructuredClient) Create(ctx context.Context, obj Object, opts ...CreateOption) error { u, ok := obj.(*unstructured.Unstructured) if !ok { @@ -64,7 +64,7 @@ func (uc *unstructuredClient) Create(ctx context.Context, obj Object, opts ...Cr return result } -// Update implements client.Client +// Update implements client.Client. func (uc *unstructuredClient) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { u, ok := obj.(*unstructured.Unstructured) if !ok { @@ -93,7 +93,7 @@ func (uc *unstructuredClient) Update(ctx context.Context, obj Object, opts ...Up return result } -// Delete implements client.Client +// Delete implements client.Client. func (uc *unstructuredClient) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { _, ok := obj.(*unstructured.Unstructured) if !ok { @@ -116,7 +116,7 @@ func (uc *unstructuredClient) Delete(ctx context.Context, obj Object, opts ...De Error() } -// DeleteAllOf implements client.Client +// DeleteAllOf implements client.Client. func (uc *unstructuredClient) DeleteAllOf(ctx context.Context, obj Object, opts ...DeleteAllOfOption) error { _, ok := obj.(*unstructured.Unstructured) if !ok { @@ -139,7 +139,7 @@ func (uc *unstructuredClient) DeleteAllOf(ctx context.Context, obj Object, opts Error() } -// Patch implements client.Client +// Patch implements client.Client. func (uc *unstructuredClient) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { _, ok := obj.(*unstructured.Unstructured) if !ok { @@ -167,7 +167,7 @@ func (uc *unstructuredClient) Patch(ctx context.Context, obj Object, patch Patch Into(obj) } -// Get implements client.Client +// Get implements client.Client. func (uc *unstructuredClient) Get(ctx context.Context, key ObjectKey, obj Object) error { u, ok := obj.(*unstructured.Unstructured) if !ok { @@ -193,7 +193,7 @@ func (uc *unstructuredClient) Get(ctx context.Context, key ObjectKey, obj Object return result } -// List implements client.Client +// List implements client.Client. func (uc *unstructuredClient) List(ctx context.Context, obj ObjectList, opts ...ListOption) error { u, ok := obj.(*unstructured.UnstructuredList) if !ok { diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/watch.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/watch.go new file mode 100644 index 000000000..765ca5daa --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/client/watch.go @@ -0,0 +1,118 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package client + +import ( + "context" + "strings" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +// NewWithWatch returns a new WithWatch. +func NewWithWatch(config *rest.Config, options Options) (WithWatch, error) { + client, err := newClient(config, options) + if err != nil { + return nil, err + } + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + return nil, err + } + return &watchingClient{client: client, dynamic: dynamicClient}, nil +} + +type watchingClient struct { + *client + dynamic dynamic.Interface +} + +func (w *watchingClient) Watch(ctx context.Context, list ObjectList, opts ...ListOption) (watch.Interface, error) { + switch l := list.(type) { + case *unstructured.UnstructuredList: + return w.unstructuredWatch(ctx, l, opts...) + case *metav1.PartialObjectMetadataList: + return w.metadataWatch(ctx, l, opts...) + default: + return w.typedWatch(ctx, l, opts...) + } +} + +func (w *watchingClient) listOpts(opts ...ListOption) ListOptions { + listOpts := ListOptions{} + listOpts.ApplyOptions(opts) + if listOpts.Raw == nil { + listOpts.Raw = &metav1.ListOptions{} + } + listOpts.Raw.Watch = true + + return listOpts +} + +func (w *watchingClient) metadataWatch(ctx context.Context, obj *metav1.PartialObjectMetadataList, opts ...ListOption) (watch.Interface, error) { + gvk := obj.GroupVersionKind() + if strings.HasSuffix(gvk.Kind, "List") { + gvk.Kind = gvk.Kind[:len(gvk.Kind)-4] + } + + listOpts := w.listOpts(opts...) + + resInt, err := w.client.metadataClient.getResourceInterface(gvk, listOpts.Namespace) + if err != nil { + return nil, err + } + + return resInt.Watch(ctx, *listOpts.AsListOptions()) +} + +func (w *watchingClient) unstructuredWatch(ctx context.Context, obj *unstructured.UnstructuredList, opts ...ListOption) (watch.Interface, error) { + gvk := obj.GroupVersionKind() + if strings.HasSuffix(gvk.Kind, "List") { + gvk.Kind = gvk.Kind[:len(gvk.Kind)-4] + } + + r, err := w.client.unstructuredClient.cache.getResource(obj) + if err != nil { + return nil, err + } + + listOpts := w.listOpts(opts...) + + if listOpts.Namespace != "" && r.isNamespaced() { + return w.dynamic.Resource(r.mapping.Resource).Namespace(listOpts.Namespace).Watch(ctx, *listOpts.AsListOptions()) + } + return w.dynamic.Resource(r.mapping.Resource).Watch(ctx, *listOpts.AsListOptions()) +} + +func (w *watchingClient) typedWatch(ctx context.Context, obj ObjectList, opts ...ListOption) (watch.Interface, error) { + r, err := w.client.typedClient.cache.getResource(obj) + if err != nil { + return nil, err + } + + listOpts := w.listOpts(opts...) + + return r.Get(). + NamespaceIfScoped(listOpts.Namespace, r.isNamespaced()). + Resource(r.resource()). + VersionedParams(listOpts.AsListOptions(), w.client.typedClient.paramCodec). + Watch(ctx) +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go new file mode 100644 index 000000000..da32ab48e --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go @@ -0,0 +1,40 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Package conversion provides interface definitions that an API Type needs to +implement for it to be supported by the generic conversion webhook handler +defined under pkg/webhook/conversion. +*/ +package conversion + +import "k8s.io/apimachinery/pkg/runtime" + +// Convertible defines capability of a type to convertible i.e. it can be converted to/from a hub type. +type Convertible interface { + runtime.Object + ConvertTo(dst Hub) error + ConvertFrom(src Hub) error +} + +// Hub marks that a given type is the hub type for conversion. This means that +// all conversions will first convert to the hub type, then convert from the hub +// type to the destination type. All types besides the hub type should implement +// Convertible. +type Hub interface { + runtime.Object + Hub() +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/crd.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/crd.go index 0b002115a..2f2160d68 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/crd.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/crd.go @@ -20,26 +20,44 @@ import ( "bufio" "bytes" "context" + "encoding/base64" + "fmt" "io" "io/ioutil" "os" "path/filepath" "time" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" k8syaml "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" + "k8s.io/client-go/util/retry" + "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/webhook/conversion" "sigs.k8s.io/yaml" ) -// CRDInstallOptions are the options for installing CRDs +// CRDInstallOptions are the options for installing CRDs. type CRDInstallOptions struct { + // Scheme is used to determine if conversion webhooks should be enabled + // for a particular CRD / object. + // + // Conversion webhooks are going to be enabled if an object in the scheme + // implements Hub and Spoke conversions. + // + // If nil, scheme.Scheme is used. + Scheme *runtime.Scheme + // Paths is a list of paths to the directories or files containing CRDs Paths []string @@ -59,34 +77,45 @@ type CRDInstallOptions struct { // uninstalled when terminating the test environment. // Defaults to false. CleanUpAfterUse bool + + // WebhookOptions contains the conversion webhook information to install + // on the CRDs. This field is usually inherited by the EnvTest options. + // + // If you're passing this field manually, you need to make sure that + // the CA information and host port is filled in properly. + WebhookOptions WebhookInstallOptions } const defaultPollInterval = 100 * time.Millisecond const defaultMaxWait = 10 * time.Second -// InstallCRDs installs a collection of CRDs into a cluster by reading the crd yaml files from a directory +// InstallCRDs installs a collection of CRDs into a cluster by reading the crd yaml files from a directory. func InstallCRDs(config *rest.Config, options CRDInstallOptions) ([]client.Object, error) { defaultCRDOptions(&options) // Read the CRD yamls into options.CRDs if err := readCRDFiles(&options); err != nil { + return nil, fmt.Errorf("unable to read CRD files: %w", err) + } + + if err := modifyConversionWebhooks(options.CRDs, options.Scheme, options.WebhookOptions); err != nil { return nil, err } // Create the CRDs in the apiserver if err := CreateCRDs(config, options.CRDs); err != nil { - return options.CRDs, err + return options.CRDs, fmt.Errorf("unable to create CRD instances: %w", err) } // Wait for the CRDs to appear as Resources in the apiserver if err := WaitForCRDs(config, options.CRDs, options); err != nil { - return options.CRDs, err + return options.CRDs, fmt.Errorf("something went wrong waiting for CRDs to appear as API resources: %w", err) } return options.CRDs, nil } -// readCRDFiles reads the directories of CRDs in options.Paths and adds the CRD structs to options.CRDs +// readCRDFiles reads the directories of CRDs in options.Paths and adds the CRD structs to options.CRDs. func readCRDFiles(options *CRDInstallOptions) error { if len(options.Paths) > 0 { crdList, err := renderCRDs(options) @@ -99,8 +128,11 @@ func readCRDFiles(options *CRDInstallOptions) error { return nil } -// defaultCRDOptions sets the default values for CRDs +// defaultCRDOptions sets the default values for CRDs. func defaultCRDOptions(o *CRDInstallOptions) { + if o.Scheme == nil { + o.Scheme = scheme.Scheme + } if o.MaxTime == 0 { o.MaxTime = defaultMaxWait } @@ -109,7 +141,7 @@ func defaultCRDOptions(o *CRDInstallOptions) { } } -// WaitForCRDs waits for the CRDs to appear in discovery +// WaitForCRDs waits for the CRDs to appear in discovery. func WaitForCRDs(config *rest.Config, crds []client.Object, options CRDInstallOptions) error { // Add each CRD to a map of GroupVersion to Resource waitingFor := map[schema.GroupVersion]*sets.String{} @@ -172,7 +204,7 @@ func WaitForCRDs(config *rest.Config, crds []client.Object, options CRDInstallOp return wait.PollImmediate(options.PollInterval, options.MaxTime, p.poll) } -// poller checks if all the resources have been found in discovery, and returns false if not +// poller checks if all the resources have been found in discovery, and returns false if not. type poller struct { // config is used to get discovery config *rest.Config @@ -181,7 +213,7 @@ type poller struct { waitingFor map[schema.GroupVersion]*sets.String } -// poll checks if all the resources have been found in discovery, and returns false if not +// poll checks if all the resources have been found in discovery, and returns false if not. func (p *poller) poll() (done bool, err error) { // Create a new clientset to avoid any client caching of discovery cs, err := clientset.NewForConfig(p.config) @@ -201,7 +233,7 @@ func (p *poller) poll() (done bool, err error) { // TODO: Maybe the controller-runtime client should be able to do this... resourceList, err := cs.Discovery().ServerResourcesForGroupVersion(gv.Group + "/" + gv.Version) if err != nil { - return false, nil + return false, nil //nolint:nilerr } // Remove each found resource from the resources set that we are waiting for @@ -217,9 +249,8 @@ func (p *poller) poll() (done bool, err error) { return allFound, nil } -// UninstallCRDs uninstalls a collection of CRDs by reading the crd yaml files from a directory +// UninstallCRDs uninstalls a collection of CRDs by reading the crd yaml files from a directory. func UninstallCRDs(config *rest.Config, options CRDInstallOptions) error { - // Read the CRD yamls into options.CRDs if err := readCRDFiles(&options); err != nil { return err @@ -245,11 +276,11 @@ func UninstallCRDs(config *rest.Config, options CRDInstallOptions) error { return nil } -// CreateCRDs creates the CRDs +// CreateCRDs creates the CRDs. func CreateCRDs(config *rest.Config, crds []client.Object) error { cs, err := client.New(config, client.Options{}) if err != nil { - return err + return fmt.Errorf("unable to create client: %w", err) } // Create each CRD @@ -260,14 +291,19 @@ func CreateCRDs(config *rest.Config, crds []client.Object) error { switch { case apierrors.IsNotFound(err): if err := cs.Create(context.TODO(), crd); err != nil { - return err + return fmt.Errorf("unable to create CRD %q: %w", crd.GetName(), err) } case err != nil: - return err + return fmt.Errorf("unable to get CRD %q to check if it exists: %w", crd.GetName(), err) default: log.V(1).Info("CRD already exists, updating", "crd", crd.GetName()) - crd.SetResourceVersion(existingCrd.GetResourceVersion()) - if err := cs.Update(context.TODO(), crd); err != nil { + if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error { + if err := cs.Get(context.TODO(), client.ObjectKey{Name: crd.GetName()}, existingCrd); err != nil { + return err + } + crd.SetResourceVersion(existingCrd.GetResourceVersion()) + return cs.Update(context.TODO(), crd) + }); err != nil { return err } } @@ -303,10 +339,8 @@ func renderCRDs(options *CRDInstallOptions) ([]client.Object, error) { if !info.IsDir() { filePath, files = filepath.Dir(path), []os.FileInfo{info} - } else { - if files, err = ioutil.ReadDir(path); err != nil { - return nil, err - } + } else if files, err = ioutil.ReadDir(path); err != nil { + return nil, err } log.V(1).Info("reading CRDs from path", "path", path) @@ -327,14 +361,200 @@ func renderCRDs(options *CRDInstallOptions) ([]client.Object, error) { } // Converting map to a list to return - var res []client.Object + res := []client.Object{} for _, obj := range crds { res = append(res, obj) } return res, nil } -// readCRDs reads the CRDs from files and Unmarshals them into structs +// modifyConversionWebhooks takes all the registered CustomResourceDefinitions and applies modifications +// to conditionally enable webhooks if the type is registered within the scheme. +// +// The complexity of this function is high mostly due to all the edge cases that we need to handle: +// CRDv1beta1, CRDv1, and their unstructured counterpart. +// +// We should be able to simplify this code once we drop support for v1beta1 and standardize around the typed CRDv1 object. +func modifyConversionWebhooks(crds []client.Object, scheme *runtime.Scheme, webhookOptions WebhookInstallOptions) error { //nolint:gocyclo + if len(webhookOptions.LocalServingCAData) == 0 { + return nil + } + + // Determine all registered convertible types. + convertibles := map[schema.GroupKind]struct{}{} + for gvk := range scheme.AllKnownTypes() { + obj, err := scheme.New(gvk) + if err != nil { + return err + } + if ok, err := conversion.IsConvertible(scheme, obj); ok && err == nil { + convertibles[gvk.GroupKind()] = struct{}{} + } + } + + // generate host port. + hostPort, err := webhookOptions.generateHostPort() + if err != nil { + return err + } + url := pointer.StringPtr(fmt.Sprintf("https://%s/convert", hostPort)) + + for _, crd := range crds { + switch c := crd.(type) { + case *apiextensionsv1beta1.CustomResourceDefinition: + // Continue if we're preserving unknown fields. + // + // preserveUnknownFields defaults to true if `nil` in v1beta1. + if c.Spec.PreserveUnknownFields == nil || *c.Spec.PreserveUnknownFields { + continue + } + // Continue if the GroupKind isn't registered as being convertible. + if _, ok := convertibles[schema.GroupKind{ + Group: c.Spec.Group, + Kind: c.Spec.Names.Kind, + }]; !ok { + continue + } + c.Spec.Conversion.Strategy = apiextensionsv1beta1.WebhookConverter + c.Spec.Conversion.WebhookClientConfig.Service = nil + c.Spec.Conversion.WebhookClientConfig = &apiextensionsv1beta1.WebhookClientConfig{ + Service: nil, + URL: url, + CABundle: webhookOptions.LocalServingCAData, + } + case *apiextensionsv1.CustomResourceDefinition: + // Continue if we're preserving unknown fields. + if c.Spec.PreserveUnknownFields { + continue + } + // Continue if the GroupKind isn't registered as being convertible. + if _, ok := convertibles[schema.GroupKind{ + Group: c.Spec.Group, + Kind: c.Spec.Names.Kind, + }]; !ok { + continue + } + c.Spec.Conversion.Strategy = apiextensionsv1.WebhookConverter + c.Spec.Conversion.Webhook.ClientConfig.Service = nil + c.Spec.Conversion.Webhook.ClientConfig = &apiextensionsv1.WebhookClientConfig{ + Service: nil, + URL: url, + CABundle: webhookOptions.LocalServingCAData, + } + case *unstructured.Unstructured: + webhookClientConfig := map[string]interface{}{ + "url": *url, + "caBundle": base64.StdEncoding.EncodeToString(webhookOptions.LocalServingCAData), + } + + switch c.GroupVersionKind().Version { + case "v1beta1": + // Continue if we're preserving unknown fields. + // + // preserveUnknownFields defaults to true if `nil` in v1beta1. + if preserve, found, err := unstructured.NestedBool(c.Object, "spec", "preserveUnknownFields"); preserve || !found { + continue + } else if err != nil { + return err + } + + // Continue if the GroupKind isn't registered as being convertible. + group, found, err := unstructured.NestedString(c.Object, "spec", "group") + if !found { + continue + } else if err != nil { + return err + } + kind, found, err := unstructured.NestedString(c.Object, "spec", "names", "kind") + if !found { + continue + } else if err != nil { + return err + } + if _, ok := convertibles[schema.GroupKind{ + Group: group, + Kind: kind, + }]; !ok { + continue + } + + // Set the strategy. + if err := unstructured.SetNestedField( + c.Object, + string(apiextensionsv1beta1.WebhookConverter), + "spec", "conversion", "strategy"); err != nil { + return err + } + // Set the conversion review versions. + if err := unstructured.SetNestedStringSlice( + c.Object, + []string{"v1beta1"}, + "spec", "conversion", "webhook", "clientConfig"); err != nil { + return err + } + // Set the client configuration. + if err := unstructured.SetNestedMap( + c.Object, + webhookClientConfig, + "spec", "conversion", "webhookClientConfig"); err != nil { + return err + } + case "v1": + if preserve, _, err := unstructured.NestedBool(c.Object, "spec", "preserveUnknownFields"); preserve { + continue + } else if err != nil { + return err + } + + // Continue if the GroupKind isn't registered as being convertible. + group, found, err := unstructured.NestedString(c.Object, "spec", "group") + if !found { + continue + } else if err != nil { + return err + } + kind, found, err := unstructured.NestedString(c.Object, "spec", "names", "kind") + if !found { + continue + } else if err != nil { + return err + } + if _, ok := convertibles[schema.GroupKind{ + Group: group, + Kind: kind, + }]; !ok { + continue + } + + // Set the strategy. + if err := unstructured.SetNestedField( + c.Object, + string(apiextensionsv1.WebhookConverter), + "spec", "conversion", "strategy"); err != nil { + return err + } + // Set the conversion review versions. + if err := unstructured.SetNestedStringSlice( + c.Object, + []string{"v1", "v1beta1"}, + "spec", "conversion", "webhook", "conversionReviewVersions"); err != nil { + return err + } + // Set the client configuration. + if err := unstructured.SetNestedMap( + c.Object, + webhookClientConfig, + "spec", "conversion", "webhook", "clientConfig"); err != nil { + return err + } + } + } + } + + return nil +} + +// readCRDs reads the CRDs from files and Unmarshals them into structs. func readCRDs(basePath string, files []os.FileInfo) ([]*unstructured.Unstructured, error) { var crds []*unstructured.Unstructured @@ -380,9 +600,9 @@ func readCRDs(basePath string, files []os.FileInfo) ([]*unstructured.Unstructure return crds, nil } -// readDocuments reads documents from file +// readDocuments reads documents from file. func readDocuments(fp string) ([][]byte, error) { - b, err := ioutil.ReadFile(fp) + b, err := ioutil.ReadFile(fp) //nolint:gosec if err != nil { return nil, err } diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/helper.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/helper.go index ba222998c..79373dd40 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/helper.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/helper.go @@ -1,3 +1,19 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package envtest import ( diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/server.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/server.go index 0bbf789a9..967e3060e 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/server.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/server.go @@ -19,14 +19,16 @@ package envtest import ( "fmt" "os" - "path/filepath" "strings" "time" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/config" - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/process" logf "sigs.k8s.io/controller-runtime/pkg/internal/log" ) @@ -46,54 +48,74 @@ It's possible to override some defaults, by setting the following environment va */ const ( - envUseExistingCluster = "USE_EXISTING_CLUSTER" - envKubeAPIServerBin = "TEST_ASSET_KUBE_APISERVER" - envEtcdBin = "TEST_ASSET_ETCD" - envKubectlBin = "TEST_ASSET_KUBECTL" - envKubebuilderPath = "KUBEBUILDER_ASSETS" - envStartTimeout = "KUBEBUILDER_CONTROLPLANE_START_TIMEOUT" - envStopTimeout = "KUBEBUILDER_CONTROLPLANE_STOP_TIMEOUT" - envAttachOutput = "KUBEBUILDER_ATTACH_CONTROL_PLANE_OUTPUT" - defaultKubebuilderPath = "/usr/local/kubebuilder/bin" - StartTimeout = 60 - StopTimeout = 60 + envUseExistingCluster = "USE_EXISTING_CLUSTER" + envStartTimeout = "KUBEBUILDER_CONTROLPLANE_START_TIMEOUT" + envStopTimeout = "KUBEBUILDER_CONTROLPLANE_STOP_TIMEOUT" + envAttachOutput = "KUBEBUILDER_ATTACH_CONTROL_PLANE_OUTPUT" + StartTimeout = 60 + StopTimeout = 60 defaultKubebuilderControlPlaneStartTimeout = 20 * time.Second defaultKubebuilderControlPlaneStopTimeout = 20 * time.Second ) -// getBinAssetPath returns a path for binary from the following list of locations, -// ordered by precedence: -// 0. KUBEBUILDER_ASSETS -// 1. Environment.BinaryAssetsDirectory -// 2. The default path, "/usr/local/kubebuilder/bin" -func (te *Environment) getBinAssetPath(binary string) string { - valueFromEnvVar := os.Getenv(envKubebuilderPath) - if valueFromEnvVar != "" { - return filepath.Join(valueFromEnvVar, binary) - } +// internal types we expose as part of our public API. +type ( + // ControlPlane is the re-exported ControlPlane type from the internal testing package. + ControlPlane = controlplane.ControlPlane - if te.BinaryAssetsDirectory != "" { - return filepath.Join(te.BinaryAssetsDirectory, binary) - } + // APIServer is the re-exported APIServer from the internal testing package. + APIServer = controlplane.APIServer - return filepath.Join(defaultKubebuilderPath, binary) -} + // Etcd is the re-exported Etcd from the internal testing package. + Etcd = controlplane.Etcd + + // User represents a Kubernetes user to provision for auth purposes. + User = controlplane.User + + // AuthenticatedUser represets a Kubernetes user that's been provisioned. + AuthenticatedUser = controlplane.AuthenticatedUser -// ControlPlane is the re-exported ControlPlane type from the internal integration package -type ControlPlane = integration.ControlPlane + // ListenAddr indicates the address and port that the API server should listen on. + ListenAddr = process.ListenAddr -// APIServer is the re-exported APIServer type from the internal integration package -type APIServer = integration.APIServer + // SecureServing contains details describing how the API server should serve + // its secure endpoint. + SecureServing = controlplane.SecureServing -// Etcd is the re-exported Etcd type from the internal integration package -type Etcd = integration.Etcd + // Authn is an authentication method that can be used with the control plane to + // provision users. + Authn = controlplane.Authn + + // Arguments allows configuring a process's flags. + Arguments = process.Arguments + + // Arg is a single flag with one or more values. + Arg = process.Arg +) + +var ( + // EmptyArguments constructs a new set of flags with nothing set. + // + // This is mostly useful for testing helper methods -- you'll want to call + // Configure on the APIServer (or etcd) to configure their arguments. + EmptyArguments = process.EmptyArguments +) // Environment creates a Kubernetes test environment that will start / stop the Kubernetes control plane and -// install extension APIs +// install extension APIs. type Environment struct { // ControlPlane is the ControlPlane including the apiserver and etcd - ControlPlane integration.ControlPlane + ControlPlane controlplane.ControlPlane + + // Scheme is used to determine if conversion webhooks should be enabled + // for a particular CRD / object. + // + // Conversion webhooks are going to be enabled if an object in the scheme + // implements Hub and Spoke conversions. + // + // If nil, scheme.Scheme is used. + Scheme *runtime.Scheme // Config can be used to talk to the apiserver. It's automatically // populated if not set using the standard controller-runtime config @@ -125,7 +147,7 @@ type Environment struct { // located in the local environment. This field can be overridden by setting KUBEBUILDER_ASSETS. BinaryAssetsDirectory string - // UseExisting indicates that this environments should use an + // UseExistingCluster indicates that this environments should use an // existing kubeconfig, instead of trying to stand up a new control plane. // This is useful in cases that need aggregated API servers and the like. UseExistingCluster *bool @@ -141,6 +163,8 @@ type Environment struct { ControlPlaneStopTimeout time.Duration // KubeAPIServerFlags is the set of flags passed while starting the api server. + // + // Deprecated: use ControlPlane.GetAPIServer().Configure() instead. KubeAPIServerFlags []string // AttachControlPlaneOutput indicates if control plane output will be attached to os.Stdout and os.Stderr. @@ -158,38 +182,19 @@ func (te *Environment) Stop() error { return err } } - if te.useExistingCluster() { - return nil - } - err := te.WebhookInstallOptions.Cleanup() - if err != nil { + + if err := te.WebhookInstallOptions.Cleanup(); err != nil { return err } - return te.ControlPlane.Stop() -} -// getAPIServerFlags returns flags to be used with the Kubernetes API server. -// it returns empty slice for api server defined defaults to be applied if no args specified -func (te Environment) getAPIServerFlags() []string { - // Set default API server flags if not set. - if len(te.KubeAPIServerFlags) == 0 { - return []string{} - } - // Check KubeAPIServerFlags contains service-cluster-ip-range, if not, set default value to service-cluster-ip-range - containServiceClusterIPRange := false - for _, flag := range te.KubeAPIServerFlags { - if strings.Contains(flag, "service-cluster-ip-range") { - containServiceClusterIPRange = true - break - } - } - if !containServiceClusterIPRange { - te.KubeAPIServerFlags = append(te.KubeAPIServerFlags, "--service-cluster-ip-range=10.0.0.0/24") + if te.useExistingCluster() { + return nil } - return te.KubeAPIServerFlags + + return te.ControlPlane.Stop() } -// Start starts a local Kubernetes server and updates te.ApiserverPort with the port it is listening on +// Start starts a local Kubernetes server and updates te.ApiserverPort with the port it is listening on. func (te *Environment) Start() (*rest.Config, error) { if te.useExistingCluster() { log.V(1).Info("using existing cluster") @@ -201,25 +206,36 @@ func (te *Environment) Start() (*rest.Config, error) { var err error te.Config, err = config.GetConfig() if err != nil { - return nil, err + return nil, fmt.Errorf("unable to get configuration for existing cluster: %w", err) } } } else { - if te.ControlPlane.APIServer == nil { - te.ControlPlane.APIServer = &integration.APIServer{Args: te.getAPIServerFlags()} + apiServer := te.ControlPlane.GetAPIServer() + if len(apiServer.Args) == 0 { //nolint:staticcheck + // pass these through separately from above in case something like + // AddUser defaults APIServer. + // + // TODO(directxman12): if/when we feel like making a bigger + // breaking change here, just make APIServer and Etcd non-pointers + // in ControlPlane. + + // NB(directxman12): we still pass these in so that things work if the + // user manually specifies them, but in most cases we expect them to + // be nil so that we use the new .Configure() logic. + apiServer.Args = te.KubeAPIServerFlags //nolint:staticcheck } if te.ControlPlane.Etcd == nil { - te.ControlPlane.Etcd = &integration.Etcd{} + te.ControlPlane.Etcd = &controlplane.Etcd{} } if os.Getenv(envAttachOutput) == "true" { te.AttachControlPlaneOutput = true } - if te.ControlPlane.APIServer.Out == nil && te.AttachControlPlaneOutput { - te.ControlPlane.APIServer.Out = os.Stdout + if apiServer.Out == nil && te.AttachControlPlaneOutput { + apiServer.Out = os.Stdout } - if te.ControlPlane.APIServer.Err == nil && te.AttachControlPlaneOutput { - te.ControlPlane.APIServer.Err = os.Stderr + if apiServer.Err == nil && te.AttachControlPlaneOutput { + apiServer.Err = os.Stderr } if te.ControlPlane.Etcd.Out == nil && te.AttachControlPlaneOutput { te.ControlPlane.Etcd.Out = os.Stdout @@ -228,55 +244,78 @@ func (te *Environment) Start() (*rest.Config, error) { te.ControlPlane.Etcd.Err = os.Stderr } - if os.Getenv(envKubeAPIServerBin) == "" { - te.ControlPlane.APIServer.Path = te.getBinAssetPath("kube-apiserver") - } - if os.Getenv(envEtcdBin) == "" { - te.ControlPlane.Etcd.Path = te.getBinAssetPath("etcd") - } - if os.Getenv(envKubectlBin) == "" { - // we can't just set the path manually (it's behind a function), so set the environment variable instead - if err := os.Setenv(envKubectlBin, te.getBinAssetPath("kubectl")); err != nil { - return nil, err - } - } + apiServer.Path = process.BinPathFinder("kube-apiserver", te.BinaryAssetsDirectory) + te.ControlPlane.Etcd.Path = process.BinPathFinder("etcd", te.BinaryAssetsDirectory) + te.ControlPlane.KubectlPath = process.BinPathFinder("kubectl", te.BinaryAssetsDirectory) if err := te.defaultTimeouts(); err != nil { return nil, fmt.Errorf("failed to default controlplane timeouts: %w", err) } te.ControlPlane.Etcd.StartTimeout = te.ControlPlaneStartTimeout te.ControlPlane.Etcd.StopTimeout = te.ControlPlaneStopTimeout - te.ControlPlane.APIServer.StartTimeout = te.ControlPlaneStartTimeout - te.ControlPlane.APIServer.StopTimeout = te.ControlPlaneStopTimeout + apiServer.StartTimeout = te.ControlPlaneStartTimeout + apiServer.StopTimeout = te.ControlPlaneStopTimeout - log.V(1).Info("starting control plane", "api server flags", te.ControlPlane.APIServer.Args) + log.V(1).Info("starting control plane") if err := te.startControlPlane(); err != nil { - return nil, err + return nil, fmt.Errorf("unable to start control plane itself: %w", err) } // Create the *rest.Config for creating new clients - te.Config = &rest.Config{ - Host: te.ControlPlane.APIURL().Host, + baseConfig := &rest.Config{ // gotta go fast during tests -- we don't really care about overwhelming our test API server QPS: 1000.0, Burst: 2000.0, } + + adminInfo := User{Name: "admin", Groups: []string{"system:masters"}} + adminUser, err := te.ControlPlane.AddUser(adminInfo, baseConfig) + if err != nil { + return te.Config, fmt.Errorf("unable to provision admin user: %w", err) + } + te.Config = adminUser.Config() + } + + // Set the default scheme if nil. + if te.Scheme == nil { + te.Scheme = scheme.Scheme + } + + // Call PrepWithoutInstalling to setup certificates first + // and have them available to patch CRD conversion webhook as well. + if err := te.WebhookInstallOptions.PrepWithoutInstalling(); err != nil { + return nil, err } log.V(1).Info("installing CRDs") te.CRDInstallOptions.CRDs = mergeCRDs(te.CRDInstallOptions.CRDs, te.CRDs) te.CRDInstallOptions.Paths = mergePaths(te.CRDInstallOptions.Paths, te.CRDDirectoryPaths) te.CRDInstallOptions.ErrorIfPathMissing = te.ErrorIfCRDPathMissing + te.CRDInstallOptions.WebhookOptions = te.WebhookInstallOptions crds, err := InstallCRDs(te.Config, te.CRDInstallOptions) if err != nil { - return te.Config, err + return te.Config, fmt.Errorf("unable to install CRDs onto control plane: %w", err) } te.CRDs = crds log.V(1).Info("installing webhooks") - err = te.WebhookInstallOptions.Install(te.Config) + if err := te.WebhookInstallOptions.Install(te.Config); err != nil { + return nil, fmt.Errorf("unable to install webhooks onto control plane: %w", err) + } + return te.Config, nil +} - return te.Config, err +// AddUser provisions a new user for connecting to this Environment. The user will +// have the specified name & belong to the specified groups. +// +// If you specify a "base" config, the returned REST Config will contain those +// settings as well as any required by the authentication method. You can use +// this to easily specify options like QPS. +// +// This is effectively a convinience alias for ControlPlane.AddUser -- see that +// for more low-level details. +func (te *Environment) AddUser(user User, baseConfig *rest.Config) (*AuthenticatedUser, error) { + return te.ControlPlane.AddUser(user, baseConfig) } func (te *Environment) startControlPlane() error { @@ -331,4 +370,6 @@ func (te *Environment) useExistingCluster() bool { // DefaultKubeAPIServerFlags exposes the default args for the APIServer so that // you can use those to append your own additional arguments. -var DefaultKubeAPIServerFlags = integration.APIServerDefaultArgs +// +// Deprecated: use APIServer.Configure() instead. +var DefaultKubeAPIServerFlags = controlplane.APIServerDefaultArgs //nolint:staticcheck diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/webhook.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/webhook.go index 9f96e8793..567f732e4 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/webhook.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/envtest/webhook.go @@ -23,7 +23,6 @@ import ( "path/filepath" "time" - "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -33,12 +32,12 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration" - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/addr" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/certs" "sigs.k8s.io/yaml" ) -// WebhookInstallOptions are the options for installing mutating or validating webhooks +// WebhookInstallOptions are the options for installing mutating or validating webhooks. type WebhookInstallOptions struct { // Paths is a list of paths to the directories or files containing the mutating or validating webhooks yaml or json configs. Paths []string @@ -79,8 +78,11 @@ type WebhookInstallOptions struct { // ModifyWebhookDefinitions modifies webhook definitions by: // - applying CABundle based on the provided tinyca -// - if webhook client config uses service spec, it's removed and replaced with direct url -func (o *WebhookInstallOptions) ModifyWebhookDefinitions(caData []byte) error { +// - if webhook client config uses service spec, it's removed and replaced with direct url. +func (o *WebhookInstallOptions) ModifyWebhookDefinitions() error { + caData := o.LocalServingCAData + + // generate host port. hostPort, err := o.generateHostPort() if err != nil { return err @@ -161,40 +163,33 @@ func (o *WebhookInstallOptions) generateHostPort() (string, error) { // controller-runtime, where we need a random host-port & caData for webhook // tests, but may be useful in similar scenarios. func (o *WebhookInstallOptions) PrepWithoutInstalling() error { - hookCA, err := o.setupCA() - if err != nil { - return err - } - if err := parseWebhook(o); err != nil { + if err := o.setupCA(); err != nil { return err } - err = o.ModifyWebhookDefinitions(hookCA) - if err != nil { + if err := parseWebhook(o); err != nil { return err } - return nil + return o.ModifyWebhookDefinitions() } -// Install installs specified webhooks to the API server +// Install installs specified webhooks to the API server. func (o *WebhookInstallOptions) Install(config *rest.Config) error { - if err := o.PrepWithoutInstalling(); err != nil { - return err + if len(o.LocalServingCAData) == 0 { + if err := o.PrepWithoutInstalling(); err != nil { + return err + } } if err := createWebhooks(config, o.MutatingWebhooks, o.ValidatingWebhooks); err != nil { return err } - if err := WaitForWebhooks(config, o.MutatingWebhooks, o.ValidatingWebhooks, *o); err != nil { - return err - } - - return nil + return WaitForWebhooks(config, o.MutatingWebhooks, o.ValidatingWebhooks, *o) } -// Cleanup cleans up cert directories +// Cleanup cleans up cert directories. func (o *WebhookInstallOptions) Cleanup() error { if o.LocalServingCertDir != "" { return os.RemoveAll(o.LocalServingCertDir) @@ -202,12 +197,11 @@ func (o *WebhookInstallOptions) Cleanup() error { return nil } -// WaitForWebhooks waits for the Webhooks to be available through API server +// WaitForWebhooks waits for the Webhooks to be available through API server. func WaitForWebhooks(config *rest.Config, mutatingWebhooks []client.Object, validatingWebhooks []client.Object, options WebhookInstallOptions) error { - waitingFor := map[schema.GroupVersionKind]*sets.String{} for _, hook := range runtimeListToUnstructured(append(validatingWebhooks, mutatingWebhooks...)) { @@ -222,7 +216,7 @@ func WaitForWebhooks(config *rest.Config, return wait.PollImmediate(options.PollInterval, options.MaxTime, p.poll) } -// poller checks if all the resources have been found in discovery, and returns false if not +// poller checks if all the resources have been found in discovery, and returns false if not. type webhookPoller struct { // config is used to get discovery config *rest.Config @@ -231,7 +225,7 @@ type webhookPoller struct { waitingFor map[schema.GroupVersionKind]*sets.String } -// poll checks if all the resources have been found in discovery, and returns false if not +// poll checks if all the resources have been found in discovery, and returns false if not. func (p *webhookPoller) poll() (done bool, err error) { // Create a new clientset to avoid any client caching of discovery c, err := client.New(p.config, client.Options{}) @@ -257,7 +251,7 @@ func (p *webhookPoller) poll() (done bool, err error) { names.Delete(name) } - if errors.IsNotFound(err) { + if apierrors.IsNotFound(err) { allFound = false } if err != nil { @@ -268,39 +262,39 @@ func (p *webhookPoller) poll() (done bool, err error) { return allFound, nil } -// setupCA creates CA for testing and writes them to disk -func (o *WebhookInstallOptions) setupCA() ([]byte, error) { - hookCA, err := integration.NewTinyCA() +// setupCA creates CA for testing and writes them to disk. +func (o *WebhookInstallOptions) setupCA() error { + hookCA, err := certs.NewTinyCA() if err != nil { - return nil, fmt.Errorf("unable to set up webhook CA: %v", err) + return fmt.Errorf("unable to set up webhook CA: %v", err) } names := []string{"localhost", o.LocalServingHost, o.LocalServingHostExternalName} hookCert, err := hookCA.NewServingCert(names...) if err != nil { - return nil, fmt.Errorf("unable to set up webhook serving certs: %v", err) + return fmt.Errorf("unable to set up webhook serving certs: %v", err) } localServingCertsDir, err := ioutil.TempDir("", "envtest-serving-certs-") o.LocalServingCertDir = localServingCertsDir if err != nil { - return nil, fmt.Errorf("unable to create directory for webhook serving certs: %v", err) + return fmt.Errorf("unable to create directory for webhook serving certs: %v", err) } certData, keyData, err := hookCert.AsBytes() if err != nil { - return nil, fmt.Errorf("unable to marshal webhook serving certs: %v", err) + return fmt.Errorf("unable to marshal webhook serving certs: %v", err) } - if err := ioutil.WriteFile(filepath.Join(localServingCertsDir, "tls.crt"), certData, 0640); err != nil { - return nil, fmt.Errorf("unable to write webhook serving cert to disk: %v", err) + if err := ioutil.WriteFile(filepath.Join(localServingCertsDir, "tls.crt"), certData, 0640); err != nil { //nolint:gosec + return fmt.Errorf("unable to write webhook serving cert to disk: %v", err) } - if err := ioutil.WriteFile(filepath.Join(localServingCertsDir, "tls.key"), keyData, 0640); err != nil { - return nil, fmt.Errorf("unable to write webhook serving key to disk: %v", err) + if err := ioutil.WriteFile(filepath.Join(localServingCertsDir, "tls.key"), keyData, 0640); err != nil { //nolint:gosec + return fmt.Errorf("unable to write webhook serving key to disk: %v", err) } o.LocalServingCAData = certData - return certData, nil + return err } func createWebhooks(config *rest.Config, mutHooks []client.Object, valHooks []client.Object) error { @@ -325,7 +319,7 @@ func createWebhooks(config *rest.Config, mutHooks []client.Object, valHooks []cl return nil } -// ensureCreated creates or update object if already exists in the cluster +// ensureCreated creates or update object if already exists in the cluster. func ensureCreated(cs client.Client, obj *unstructured.Unstructured) error { existing := obj.DeepCopy() err := cs.Get(context.Background(), client.ObjectKey{Name: obj.GetName()}, existing) @@ -346,7 +340,7 @@ func ensureCreated(cs client.Client, obj *unstructured.Unstructured) error { return nil } -// parseWebhook reads the directories or files of Webhooks in options.Paths and adds the Webhook structs to options +// parseWebhook reads the directories or files of Webhooks in options.Paths and adds the Webhook structs to options. func parseWebhook(options *WebhookInstallOptions) error { if len(options.Paths) > 0 { for _, path := range options.Paths { @@ -369,7 +363,7 @@ func parseWebhook(options *WebhookInstallOptions) error { } // readWebhooks reads the Webhooks from files and Unmarshals them into structs -// returns slice of mutating and validating webhook configurations +// returns slice of mutating and validating webhook configurations. func readWebhooks(path string) ([]client.Object, []client.Object, error) { // Get the webhook files var files []os.FileInfo @@ -381,10 +375,8 @@ func readWebhooks(path string) ([]client.Object, []client.Object, error) { } if !info.IsDir() { path, files = filepath.Dir(path), []os.FileInfo{info} - } else { - if files, err = ioutil.ReadDir(path); err != nil { - return nil, nil, err - } + } else if files, err = ioutil.ReadDir(path); err != nil { + return nil, nil, err } // file extensions that may contain Webhooks diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/doc.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/doc.go new file mode 100644 index 000000000..11e39823e --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package flock is copied from k8s.io/kubernetes/pkg/util/flock to avoid +// importing k8s.io/kubernetes as a dependency. +// +// Provides file locking functionalities on unix systems. +package flock diff --git a/constraint/vendor/k8s.io/api/batch/v2alpha1/doc.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/flock_other.go similarity index 76% rename from constraint/vendor/k8s.io/api/batch/v2alpha1/doc.go rename to constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/flock_other.go index 3044b0c62..069a5b3a2 100644 --- a/constraint/vendor/k8s.io/api/batch/v2alpha1/doc.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/flock_other.go @@ -1,3 +1,5 @@ +// +build !linux,!darwin,!freebsd,!openbsd,!netbsd,!dragonfly + /* Copyright 2016 The Kubernetes Authors. @@ -14,8 +16,9 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +k8s:deepcopy-gen=package -// +k8s:protobuf-gen=package -// +k8s:openapi-gen=true +package flock -package v2alpha1 // import "k8s.io/api/batch/v2alpha1" +// Acquire is not implemented on non-unix systems. +func Acquire(path string) error { + return nil +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/flock_unix.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/flock_unix.go new file mode 100644 index 000000000..3dae621b7 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/flock/flock_unix.go @@ -0,0 +1,35 @@ +// +build linux darwin freebsd openbsd netbsd dragonfly + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flock + +import "golang.org/x/sys/unix" + +// Acquire acquires a lock on a file for the duration of the process. This method +// is reentrant. +func Acquire(path string) error { + fd, err := unix.Open(path, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0600) + if err != nil { + return err + } + + // We don't need to close the fd since we should hold + // it until the process exits. + + return unix.Flock(fd, unix.LOCK_EX) +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/addr/manager.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/addr/manager.go new file mode 100644 index 000000000..2326af156 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/addr/manager.go @@ -0,0 +1,126 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package addr + +import ( + "fmt" + "io/fs" + "net" + "os" + "path/filepath" + "strings" + "time" + + "sigs.k8s.io/controller-runtime/pkg/internal/flock" +) + +// TODO(directxman12): interface / release functionality for external port managers + +const ( + portReserveTime = 10 * time.Minute + portConflictRetry = 100 + portFilePrefix = "port-" +) + +var ( + cacheDir string +) + +func init() { + baseDir, err := os.UserCacheDir() + if err != nil { + baseDir = os.TempDir() + } + cacheDir = filepath.Join(baseDir, "kubebuilder-envtest") + if err := os.MkdirAll(cacheDir, 0750); err != nil { + panic(err) + } +} + +type portCache struct{} + +func (c *portCache) add(port int) (bool, error) { + // Remove outdated ports. + if err := fs.WalkDir(os.DirFS(cacheDir), ".", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() || !d.Type().IsRegular() || !strings.HasPrefix(path, portFilePrefix) { + return nil + } + info, err := d.Info() + if err != nil { + return err + } + if time.Since(info.ModTime()) > portReserveTime { + if err := os.Remove(filepath.Join(cacheDir, path)); err != nil { + return err + } + } + return nil + }); err != nil { + return false, err + } + // Try allocating new port, by acquiring a file. + if err := flock.Acquire(fmt.Sprintf("%s/%s%d", cacheDir, portFilePrefix, port)); os.IsExist(err) { + return false, nil + } else if err != nil { + return false, err + } + return true, nil +} + +var cache = &portCache{} + +func suggest(listenHost string) (int, string, error) { + if listenHost == "" { + listenHost = "localhost" + } + addr, err := net.ResolveTCPAddr("tcp", net.JoinHostPort(listenHost, "0")) + if err != nil { + return -1, "", err + } + l, err := net.ListenTCP("tcp", addr) + if err != nil { + return -1, "", err + } + if err := l.Close(); err != nil { + return -1, "", err + } + return l.Addr().(*net.TCPAddr).Port, + addr.IP.String(), + nil +} + +// Suggest suggests an address a process can listen on. It returns +// a tuple consisting of a free port and the hostname resolved to its IP. +// It makes sure that new port allocated does not conflict with old ports +// allocated within 1 minute. +func Suggest(listenHost string) (int, string, error) { + for i := 0; i < portConflictRetry; i++ { + port, resolvedHost, err := suggest(listenHost) + if err != nil { + return -1, "", err + } + if ok, err := cache.add(port); ok { + return port, resolvedHost, nil + } else if err != nil { + return -1, "", err + } + } + return -1, "", fmt.Errorf("no free ports found after %d retries", portConflictRetry) +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/tinyca.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/certs/tinyca.go similarity index 79% rename from constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/tinyca.go rename to constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/certs/tinyca.go index 42991887f..ed3c2da65 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/tinyca.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/certs/tinyca.go @@ -1,4 +1,20 @@ -package internal +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package certs // NB(directxman12): nothing has verified that this has good settings. In fact, // the setting generated here are probably terrible, but they're fine for integration @@ -158,6 +174,26 @@ func (c *TinyCA) NewServingCert(names ...string) (CertPair, error) { }) } +// ClientInfo describes some Kubernetes user for the purposes of creating +// client certificates. +type ClientInfo struct { + // Name is the user name (embedded as the cert's CommonName) + Name string + // Groups are the groups to which this user belongs (embedded as the cert's + // Organization) + Groups []string +} + +// NewClientCert produces a new CertPair suitable for use with Kubernetes +// client cert auth with an API server validating based on this CA. +func (c *TinyCA) NewClientCert(user ClientInfo) (CertPair, error) { + return c.makeCert(certutil.Config{ + CommonName: user.Name, + Organization: user.Groups, + Usages: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, + }) +} + func resolveNames(names []string) ([]string, []net.IP, error) { dnsNames := []string{} ips := []net.IP{} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/apiserver.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/apiserver.go new file mode 100644 index 000000000..ece5efd65 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/apiserver.go @@ -0,0 +1,469 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package controlplane + +import ( + "fmt" + "io" + "io/ioutil" + "net/url" + "os" + "path/filepath" + "strconv" + "time" + + "sigs.k8s.io/controller-runtime/pkg/internal/testing/addr" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/certs" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/process" +) + +const ( + // saKeyFile is the name of the service account signing private key file. + saKeyFile = "sa-signer.key" + // saKeyFile is the name of the service account signing public key (cert) file. + saCertFile = "sa-signer.crt" +) + +// SecureServing provides/configures how the API server serves on the secure port. +type SecureServing struct { + // ListenAddr contains the host & port to serve on. + // + // Configurable. If unset, it will be defaulted. + process.ListenAddr + // CA contains the CA that signed the API server's serving certificates. + // + // Read-only. + CA []byte + // Authn can be used to provision users, and override what type of + // authentication is used to provision users. + // + // Configurable. If unset, it will be defaulted. + Authn +} + +// APIServer knows how to run a kubernetes apiserver. +type APIServer struct { + // URL is the address the ApiServer should listen on for client + // connections. + // + // If set, this will configure the *insecure* serving details. + // If unset, it will contain the insecure port if insecure serving is enabled, + // and otherwise will contain the secure port. + // + // If this is not specified, we default to a random free port on localhost. + // + // Deprecated: use InsecureServing (for the insecure URL) or SecureServing, ideally. + URL *url.URL + + // SecurePort is the additional secure port that the APIServer should listen on. + // + // If set, this will override SecureServing.Port. + // + // Deprecated: use SecureServing. + SecurePort int + + // SecureServing indicates how the API server will serve on the secure port. + // + // Some parts are configurable. Will be defaulted if unset. + SecureServing + + // InsecureServing indicates how the API server will serve on the insecure port. + // + // If unset, the insecure port will be disabled. Set to an empty struct to get + // default values. + // + // Deprecated: does not work with Kubernetes versions 1.20 and above. Use secure + // serving instead. + InsecureServing *process.ListenAddr + + // Path is the path to the apiserver binary. + // + // If this is left as the empty string, we will attempt to locate a binary, + // by checking for the TEST_ASSET_KUBE_APISERVER environment variable, and + // the default test assets directory. See the "Binaries" section above (in + // doc.go) for details. + Path string + + // Args is a list of arguments which will passed to the APIServer binary. + // Before they are passed on, they will be evaluated as go-template strings. + // This means you can use fields which are defined and exported on this + // APIServer struct (e.g. "--cert-dir={{ .Dir }}"). + // Those templates will be evaluated after the defaulting of the APIServer's + // fields has already happened and just before the binary actually gets + // started. Thus you have access to calculated fields like `URL` and others. + // + // If not specified, the minimal set of arguments to run the APIServer will + // be used. + // + // They will be loaded into the same argument set as Configure. Each flag + // will be Append-ed to the configured arguments just before launch. + // + // Deprecated: use Configure instead. + Args []string + + // CertDir is a path to a directory containing whatever certificates the + // APIServer will need. + // + // If left unspecified, then the Start() method will create a fresh temporary + // directory, and the Stop() method will clean it up. + CertDir string + + // EtcdURL is the URL of the Etcd the APIServer should use. + // + // If this is not specified, the Start() method will return an error. + EtcdURL *url.URL + + // StartTimeout, StopTimeout specify the time the APIServer is allowed to + // take when starting and stoppping before an error is emitted. + // + // If not specified, these default to 20 seconds. + StartTimeout time.Duration + StopTimeout time.Duration + + // Out, Err specify where APIServer should write its StdOut, StdErr to. + // + // If not specified, the output will be discarded. + Out io.Writer + Err io.Writer + + processState *process.State + + // args contains the structured arguments to use for running the API server + // Lazily initialized by .Configure(), Defaulted eventually with .defaultArgs() + args *process.Arguments +} + +// Configure returns Arguments that may be used to customize the +// flags used to launch the API server. A set of defaults will +// be applied underneath. +func (s *APIServer) Configure() *process.Arguments { + if s.args == nil { + s.args = process.EmptyArguments() + } + return s.args +} + +// Start starts the apiserver, waits for it to come up, and returns an error, +// if occurred. +func (s *APIServer) Start() error { + if err := s.prepare(); err != nil { + return err + } + return s.processState.Start(s.Out, s.Err) +} + +func (s *APIServer) prepare() error { + if err := s.setProcessState(); err != nil { + return err + } + return s.Authn.Start() +} + +// configurePorts configures the serving ports for this API server. +// +// Most of this method currently deals with making the deprecated fields +// take precedence over the new fields. +func (s *APIServer) configurePorts() error { + // prefer the old fields to the new fields if a user set one, + // otherwise, default the new fields and populate the old ones. + + // Insecure: URL, InsecureServing + if s.URL != nil { + s.InsecureServing = &process.ListenAddr{ + Address: s.URL.Hostname(), + Port: s.URL.Port(), + } + } else if insec := s.InsecureServing; insec != nil { + if insec.Port == "" || insec.Address == "" { + port, host, err := addr.Suggest("") + if err != nil { + return fmt.Errorf("unable to provision unused insecure port: %w", err) + } + s.InsecureServing.Port = strconv.Itoa(port) + s.InsecureServing.Address = host + } + s.URL = s.InsecureServing.URL("http", "") + } + + // Secure: SecurePort, SecureServing + if s.SecurePort != 0 { + s.SecureServing.Port = strconv.Itoa(s.SecurePort) + // if we don't have an address, try the insecure address, and otherwise + // default to loopback. + if s.SecureServing.Address == "" { + if s.InsecureServing != nil { + s.SecureServing.Address = s.InsecureServing.Address + } else { + s.SecureServing.Address = "127.0.0.1" + } + } + } else if s.SecureServing.Port == "" || s.SecureServing.Address == "" { + port, host, err := addr.Suggest("") + if err != nil { + return fmt.Errorf("unable to provision unused secure port: %w", err) + } + s.SecureServing.Port = strconv.Itoa(port) + s.SecureServing.Address = host + s.SecurePort = port + } + + return nil +} + +func (s *APIServer) setProcessState() error { + if s.EtcdURL == nil { + return fmt.Errorf("expected EtcdURL to be configured") + } + + var err error + + // unconditionally re-set this so we can successfully restart + // TODO(directxman12): we supported this in the past, but do we actually + // want to support re-using an API server object to restart? The loss + // of provisioned users is surprising to say the least. + s.processState = &process.State{ + Dir: s.CertDir, + Path: s.Path, + StartTimeout: s.StartTimeout, + StopTimeout: s.StopTimeout, + } + if err := s.processState.Init("kube-apiserver"); err != nil { + return err + } + + if err := s.configurePorts(); err != nil { + return err + } + + // the secure port will always be on, so use that + s.processState.HealthCheck.URL = *s.SecureServing.URL("https", "/healthz") + + s.CertDir = s.processState.Dir + s.Path = s.processState.Path + s.StartTimeout = s.processState.StartTimeout + s.StopTimeout = s.processState.StopTimeout + + if err := s.populateAPIServerCerts(); err != nil { + return err + } + + if s.SecureServing.Authn == nil { + authn, err := NewCertAuthn() + if err != nil { + return err + } + s.SecureServing.Authn = authn + } + + if err := s.Authn.Configure(s.CertDir, s.Configure()); err != nil { + return err + } + + // NB(directxman12): insecure port is a mess: + // - 1.19 and below have the `--insecure-port` flag, and require it to be set to zero to + // disable it, otherwise the default will be used and we'll conflict. + // - 1.20 requires the flag to be unset or set to zero, and yells at you if you configure it + // - 1.24 won't have the flag at all... + // + // In an effort to automatically do the right thing during this mess, we do feature discovery + // on the flags, and hope that we've "parsed" them properly. + // + // TODO(directxman12): once we support 1.20 as the min version (might be when 1.24 comes out, + // might be around 1.25 or 1.26), remove this logic and the corresponding line in API server's + // default args. + if err := s.discoverFlags(); err != nil { + return err + } + + s.processState.Args, s.Args, err = process.TemplateAndArguments(s.Args, s.Configure(), process.TemplateDefaults{ //nolint:staticcheck + Data: s, + Defaults: s.defaultArgs(), + MinimalDefaults: map[string][]string{ + // as per kubernetes-sigs/controller-runtime#641, we need this (we + // probably need other stuff too, but this is the only thing that was + // previously considered a "minimal default") + "service-cluster-ip-range": {"10.0.0.0/24"}, + + // we need *some* authorization mode for health checks on the secure port, + // so default to RBAC unless the user set something else (in which case + // this'll be ignored due to SliceToArguments using AppendNoDefaults). + "authorization-mode": {"RBAC"}, + }, + }) + if err != nil { + return err + } + + return nil +} + +// discoverFlags checks for certain flags that *must* be set in certain +// versions, and *must not* be set in others. +func (s *APIServer) discoverFlags() error { + // Present: <1.24, Absent: >= 1.24 + present, err := s.processState.CheckFlag("insecure-port") + if err != nil { + return err + } + + if !present { + s.Configure().Disable("insecure-port") + } + + return nil +} + +func (s *APIServer) defaultArgs() map[string][]string { + args := map[string][]string{ + "service-cluster-ip-range": {"10.0.0.0/24"}, + "allow-privileged": {"true"}, + // we're keeping this disabled because if enabled, default SA is + // missing which would force all tests to create one in normal + // apiserver operation this SA is created by controller, but that is + // not run in integration environment + "disable-admission-plugins": {"ServiceAccount"}, + "cert-dir": {s.CertDir}, + "authorization-mode": {"RBAC"}, + "secure-port": {s.SecureServing.Port}, + // NB(directxman12): previously we didn't set the bind address for the secure + // port. It *shouldn't* make a difference unless people are doing something really + // funky, but if you start to get bug reports look here ;-) + "bind-address": {s.SecureServing.Address}, + + // required on 1.20+, fine to leave on for <1.20 + "service-account-issuer": {s.SecureServing.URL("https", "/").String()}, + "service-account-key-file": {filepath.Join(s.CertDir, saCertFile)}, + "service-account-signing-key-file": {filepath.Join(s.CertDir, saKeyFile)}, + } + if s.EtcdURL != nil { + args["etcd-servers"] = []string{s.EtcdURL.String()} + } + if s.URL != nil { + args["insecure-port"] = []string{s.URL.Port()} + args["insecure-bind-address"] = []string{s.URL.Hostname()} + } else { + // TODO(directxman12): remove this once 1.21 is the lowest version we support + // (this might be a while, but this line'll break as of 1.24, so see the comment + // in Start + args["insecure-port"] = []string{"0"} + } + return args +} + +func (s *APIServer) populateAPIServerCerts() error { + _, statErr := os.Stat(filepath.Join(s.CertDir, "apiserver.crt")) + if !os.IsNotExist(statErr) { + return statErr + } + + ca, err := certs.NewTinyCA() + if err != nil { + return err + } + + servingCerts, err := ca.NewServingCert() + if err != nil { + return err + } + + certData, keyData, err := servingCerts.AsBytes() + if err != nil { + return err + } + + if err := ioutil.WriteFile(filepath.Join(s.CertDir, "apiserver.crt"), certData, 0640); err != nil { //nolint:gosec + return err + } + if err := ioutil.WriteFile(filepath.Join(s.CertDir, "apiserver.key"), keyData, 0640); err != nil { //nolint:gosec + return err + } + + s.SecureServing.CA = ca.CA.CertBytes() + + // service account signing files too + saCA, err := certs.NewTinyCA() + if err != nil { + return err + } + + saCert, saKey, err := saCA.CA.AsBytes() + if err != nil { + return err + } + + if err := ioutil.WriteFile(filepath.Join(s.CertDir, saCertFile), saCert, 0640); err != nil { //nolint:gosec + return err + } + return ioutil.WriteFile(filepath.Join(s.CertDir, saKeyFile), saKey, 0640) //nolint:gosec +} + +// Stop stops this process gracefully, waits for its termination, and cleans up +// the CertDir if necessary. +func (s *APIServer) Stop() error { + if s.processState.DirNeedsCleaning { + s.CertDir = "" // reset the directory if it was randomly allocated, so that we can safely restart + } + if s.processState != nil { + if err := s.processState.Stop(); err != nil { + return err + } + } + return s.Authn.Stop() +} + +// APIServerDefaultArgs exposes the default args for the APIServer so that you +// can use those to append your own additional arguments. +// +// Note that these arguments don't handle newer API servers well to due the more +// complex feature detection neeeded. It's recommended that you switch to .Configure +// as you upgrade API server versions. +// +// Deprecated: use APIServer.Configure(). +var APIServerDefaultArgs = []string{ + "--advertise-address=127.0.0.1", + "--etcd-servers={{ if .EtcdURL }}{{ .EtcdURL.String }}{{ end }}", + "--cert-dir={{ .CertDir }}", + "--insecure-port={{ if .URL }}{{ .URL.Port }}{{else}}0{{ end }}", + "{{ if .URL }}--insecure-bind-address={{ .URL.Hostname }}{{ end }}", + "--secure-port={{ if .SecurePort }}{{ .SecurePort }}{{ end }}", + // we're keeping this disabled because if enabled, default SA is missing which would force all tests to create one + // in normal apiserver operation this SA is created by controller, but that is not run in integration environment + "--disable-admission-plugins=ServiceAccount", + "--service-cluster-ip-range=10.0.0.0/24", + "--allow-privileged=true", + // NB(directxman12): we also enable RBAC if nothing else was enabled +} + +// PrepareAPIServer is an internal-only (NEVER SHOULD BE EXPOSED) +// function that sets up the API server just before starting it, +// without actually starting it. This saves time on tests. +// +// NB(directxman12): do not expose this outside of internal -- it's unsafe to +// use, because things like port allocation could race even more than they +// currently do if you later call start! +func PrepareAPIServer(s *APIServer) error { + return s.prepare() +} + +// APIServerArguments is an internal-only (NEVER SHOULD BE EXPOSED) +// function that sets up the API server just before starting it, +// without actually starting it. It's public to make testing easier. +// +// NB(directxman12): do not expose this outside of internal. +func APIServerArguments(s *APIServer) []string { + return s.processState.Args +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/auth.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/auth.go new file mode 100644 index 000000000..b2cd4e5e0 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/auth.go @@ -0,0 +1,142 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package controlplane + +import ( + "fmt" + "io/ioutil" + "path/filepath" + + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/certs" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/process" +) + +// User represents a Kubernetes user. +type User struct { + // Name is the user's Name. + Name string + // Groups are the groups to which the user belongs. + Groups []string +} + +// Authn knows how to configure an API server for a particular type of authentication, +// and provision users under that authentication scheme. +// +// The methods must be called in the following order (as presented below in the interface +// for a mnemonic): +// +// 1. Configure +// 2. Start +// 3. AddUsers (0+ calls) +// 4. Stop. +type Authn interface { + // Configure provides the working directory to this authenticator, + // and configures the given API server arguments to make use of this authenticator. + // + // Should be called first. + Configure(workDir string, args *process.Arguments) error + // Start runs this authenticator. Will be called just before API server start. + // + // Must be called after Configure. + Start() error + // AddUser provisions a user, returning a copy of the given base rest.Config + // configured to authenticate as that users. + // + // May only be called while the authenticator is "running". + AddUser(user User, baseCfg *rest.Config) (*rest.Config, error) + // Stop shuts down this authenticator. + Stop() error +} + +// CertAuthn is an authenticator (Authn) that makes use of client certificate authn. +type CertAuthn struct { + // ca is the CA used to sign the client certs + ca *certs.TinyCA + // certDir is the directory used to write the CA crt file + // so that the API server can read it. + certDir string +} + +// NewCertAuthn creates a new client-cert-based Authn with a new CA. +func NewCertAuthn() (*CertAuthn, error) { + ca, err := certs.NewTinyCA() + if err != nil { + return nil, fmt.Errorf("unable to provision client certificate auth CA: %w", err) + } + return &CertAuthn{ + ca: ca, + }, nil +} + +// AddUser provisions a new user that's authenticated via certificates, with +// the given uesrname and groups embedded in the certificate as expected by the +// API server. +func (c *CertAuthn) AddUser(user User, baseCfg *rest.Config) (*rest.Config, error) { + certs, err := c.ca.NewClientCert(certs.ClientInfo{ + Name: user.Name, + Groups: user.Groups, + }) + if err != nil { + return nil, fmt.Errorf("unable to create client certificates for %s: %w", user.Name, err) + } + + crt, key, err := certs.AsBytes() + if err != nil { + return nil, fmt.Errorf("unable to serialize client certificates for %s: %w", user.Name, err) + } + + cfg := rest.CopyConfig(baseCfg) + cfg.CertData = crt + cfg.KeyData = key + + return cfg, nil +} + +// caCrtPath returns the path to the on-disk client-cert CA crt file. +func (c *CertAuthn) caCrtPath() string { + return filepath.Join(c.certDir, "client-cert-auth-ca.crt") +} + +// Configure provides the working directory to this authenticator, +// and configures the given API server arguments to make use of this authenticator. +func (c *CertAuthn) Configure(workDir string, args *process.Arguments) error { + c.certDir = workDir + args.Set("client-ca-file", c.caCrtPath()) + return nil +} + +// Start runs this authenticator. Will be called just before API server start. +// +// Must be called after Configure. +func (c *CertAuthn) Start() error { + if len(c.certDir) == 0 { + return fmt.Errorf("start called before configure") + } + caCrt := c.ca.CA.CertBytes() + if err := ioutil.WriteFile(c.caCrtPath(), caCrt, 0640); err != nil { //nolint:gosec + return fmt.Errorf("unable to save the client certificate CA to %s: %w", c.caCrtPath(), err) + } + + return nil +} + +// Stop shuts down this authenticator. +func (c *CertAuthn) Stop() error { + // no-op -- our workdir is cleaned up for us automatically + return nil +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/etcd.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/etcd.go new file mode 100644 index 000000000..00d825477 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/etcd.go @@ -0,0 +1,180 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package controlplane + +import ( + "io" + "net" + "net/url" + "strconv" + "time" + + "sigs.k8s.io/controller-runtime/pkg/internal/testing/addr" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/process" +) + +// Etcd knows how to run an etcd server. +type Etcd struct { + // URL is the address the Etcd should listen on for client connections. + // + // If this is not specified, we default to a random free port on localhost. + URL *url.URL + + // Path is the path to the etcd binary. + // + // If this is left as the empty string, we will attempt to locate a binary, + // by checking for the TEST_ASSET_ETCD environment variable, and the default + // test assets directory. See the "Binaries" section above (in doc.go) for + // details. + Path string + + // Args is a list of arguments which will passed to the Etcd binary. Before + // they are passed on, the`y will be evaluated as go-template strings. This + // means you can use fields which are defined and exported on this Etcd + // struct (e.g. "--data-dir={{ .Dir }}"). + // Those templates will be evaluated after the defaulting of the Etcd's + // fields has already happened and just before the binary actually gets + // started. Thus you have access to calculated fields like `URL` and others. + // + // If not specified, the minimal set of arguments to run the Etcd will be + // used. + // + // They will be loaded into the same argument set as Configure. Each flag + // will be Append-ed to the configured arguments just before launch. + // + // Deprecated: use Configure instead. + Args []string + + // DataDir is a path to a directory in which etcd can store its state. + // + // If left unspecified, then the Start() method will create a fresh temporary + // directory, and the Stop() method will clean it up. + DataDir string + + // StartTimeout, StopTimeout specify the time the Etcd is allowed to + // take when starting and stopping before an error is emitted. + // + // If not specified, these default to 20 seconds. + StartTimeout time.Duration + StopTimeout time.Duration + + // Out, Err specify where Etcd should write its StdOut, StdErr to. + // + // If not specified, the output will be discarded. + Out io.Writer + Err io.Writer + + // processState contains the actual details about this running process + processState *process.State + + // args contains the structured arguments to use for running etcd. + // Lazily initialized by .Configure(), Defaulted eventually with .defaultArgs() + args *process.Arguments +} + +// Start starts the etcd, waits for it to come up, and returns an error, if one +// occoured. +func (e *Etcd) Start() error { + if err := e.setProcessState(); err != nil { + return err + } + return e.processState.Start(e.Out, e.Err) +} + +func (e *Etcd) setProcessState() error { + e.processState = &process.State{ + Dir: e.DataDir, + Path: e.Path, + StartTimeout: e.StartTimeout, + StopTimeout: e.StopTimeout, + } + + // unconditionally re-set this so we can successfully restart + // TODO(directxman12): we supported this in the past, but do we actually + // want to support re-using an API server object to restart? The loss + // of provisioned users is surprising to say the least. + if err := e.processState.Init("etcd"); err != nil { + return err + } + + if e.URL == nil { + port, host, err := addr.Suggest("") + if err != nil { + return err + } + e.URL = &url.URL{ + Scheme: "http", + Host: net.JoinHostPort(host, strconv.Itoa(port)), + } + } + + // can use /health as of etcd 3.3.0 + e.processState.HealthCheck.URL = *e.URL + e.processState.HealthCheck.Path = "/health" + + e.DataDir = e.processState.Dir + e.Path = e.processState.Path + e.StartTimeout = e.processState.StartTimeout + e.StopTimeout = e.processState.StopTimeout + + var err error + e.processState.Args, e.Args, err = process.TemplateAndArguments(e.Args, e.Configure(), process.TemplateDefaults{ //nolint:staticcheck + Data: e, + Defaults: e.defaultArgs(), + }) + return err +} + +// Stop stops this process gracefully, waits for its termination, and cleans up +// the DataDir if necessary. +func (e *Etcd) Stop() error { + if e.processState.DirNeedsCleaning { + e.DataDir = "" // reset the directory if it was randomly allocated, so that we can safely restart + } + return e.processState.Stop() +} + +func (e *Etcd) defaultArgs() map[string][]string { + args := map[string][]string{ + "listen-peer-urls": {"http://localhost:0"}, + "data-dir": {e.DataDir}, + } + if e.URL != nil { + args["advertise-client-urls"] = []string{e.URL.String()} + args["listen-client-urls"] = []string{e.URL.String()} + } + return args +} + +// Configure returns Arguments that may be used to customize the +// flags used to launch etcd. A set of defaults will +// be applied underneath. +func (e *Etcd) Configure() *process.Arguments { + if e.args == nil { + e.args = process.EmptyArguments() + } + return e.args +} + +// EtcdDefaultArgs exposes the default args for Etcd so that you +// can use those to append your own additional arguments. +var EtcdDefaultArgs = []string{ + "--listen-peer-urls=http://localhost:0", + "--advertise-client-urls={{ if .URL }}{{ .URL.String }}{{ end }}", + "--listen-client-urls={{ if .URL }}{{ .URL.String }}{{ end }}", + "--data-dir={{ .DataDir }}", +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/kubectl.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/kubectl.go new file mode 100644 index 000000000..a27b7a0ff --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/kubectl.go @@ -0,0 +1,119 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package controlplane + +import ( + "bytes" + "fmt" + "io" + "net/url" + "os/exec" + + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + kcapi "k8s.io/client-go/tools/clientcmd/api" + + "sigs.k8s.io/controller-runtime/pkg/internal/testing/process" +) + +const ( + envtestName = "envtest" +) + +// KubeConfigFromREST reverse-engineers a kubeconfig file from a rest.Config. +// The options are tailored towards the rest.Configs we generate, so they're +// not broadly applicable. +// +// This is not intended to be exposed beyond internal for the above reasons. +func KubeConfigFromREST(cfg *rest.Config) ([]byte, error) { + kubeConfig := kcapi.NewConfig() + protocol := "https" + if !rest.IsConfigTransportTLS(*cfg) { + protocol = "http" + } + + // cfg.Host is a URL, so we need to parse it so we can properly append the API path + baseURL, err := url.Parse(cfg.Host) + if err != nil { + return nil, fmt.Errorf("unable to interpret config's host value as a URL: %w", err) + } + + kubeConfig.Clusters[envtestName] = &kcapi.Cluster{ + // TODO(directxman12): if client-go ever decides to expose defaultServerUrlFor(config), + // we can just use that. Note that this is not the same as the public DefaultServerURL, + // which requires us to pass a bunch of stuff in manually. + Server: (&url.URL{Scheme: protocol, Host: baseURL.Host, Path: cfg.APIPath}).String(), + CertificateAuthorityData: cfg.CAData, + } + kubeConfig.AuthInfos[envtestName] = &kcapi.AuthInfo{ + // try to cover all auth strategies that aren't plugins + ClientCertificateData: cfg.CertData, + ClientKeyData: cfg.KeyData, + Token: cfg.BearerToken, + Username: cfg.Username, + Password: cfg.Password, + } + kcCtx := kcapi.NewContext() + kcCtx.Cluster = envtestName + kcCtx.AuthInfo = envtestName + kubeConfig.Contexts[envtestName] = kcCtx + kubeConfig.CurrentContext = envtestName + + contents, err := clientcmd.Write(*kubeConfig) + if err != nil { + return nil, fmt.Errorf("unable to serialize kubeconfig file: %w", err) + } + return contents, nil +} + +// KubeCtl is a wrapper around the kubectl binary. +type KubeCtl struct { + // Path where the kubectl binary can be found. + // + // If this is left empty, we will attempt to locate a binary, by checking for + // the TEST_ASSET_KUBECTL environment variable, and the default test assets + // directory. See the "Binaries" section above (in doc.go) for details. + Path string + + // Opts can be used to configure additional flags which will be used each + // time the wrapped binary is called. + // + // For example, you might want to use this to set the URL of the APIServer to + // connect to. + Opts []string +} + +// Run executes the wrapped binary with some preconfigured options and the +// arguments given to this method. It returns Readers for the stdout and +// stderr. +func (k *KubeCtl) Run(args ...string) (stdout, stderr io.Reader, err error) { + if k.Path == "" { + k.Path = process.BinPathFinder("kubectl", "") + } + + stdoutBuffer := &bytes.Buffer{} + stderrBuffer := &bytes.Buffer{} + allArgs := append(k.Opts, args...) + + cmd := exec.Command(k.Path, allArgs...) + cmd.Stdout = stdoutBuffer + cmd.Stderr = stderrBuffer + + err = cmd.Run() + + return stdoutBuffer, stderrBuffer, err +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/plane.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/plane.go new file mode 100644 index 000000000..36fd3c630 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/controlplane/plane.go @@ -0,0 +1,248 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package controlplane + +import ( + "fmt" + "net/url" + "os" + + kerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/internal/testing/certs" +) + +// NewTinyCA creates a new a tiny CA utility for provisioning serving certs and client certs FOR TESTING ONLY. +// Don't use this for anything else! +var NewTinyCA = certs.NewTinyCA + +// ControlPlane is a struct that knows how to start your test control plane. +// +// Right now, that means Etcd and your APIServer. This is likely to increase in +// future. +type ControlPlane struct { + APIServer *APIServer + Etcd *Etcd + + // Kubectl will override the default asset search path for kubectl + KubectlPath string + + // for the deprecated methods (Kubectl, etc) + defaultUserCfg *rest.Config + defaultUserKubectl *KubeCtl +} + +// Start will start your control plane processes. To stop them, call Stop(). +func (f *ControlPlane) Start() error { + if f.Etcd == nil { + f.Etcd = &Etcd{} + } + if err := f.Etcd.Start(); err != nil { + return err + } + + if f.APIServer == nil { + f.APIServer = &APIServer{} + } + f.APIServer.EtcdURL = f.Etcd.URL + if err := f.APIServer.Start(); err != nil { + return err + } + + // provision the default user -- can be removed when the related + // methods are removed. The default user has admin permissions to + // mimic legacy no-authz setups. + user, err := f.AddUser(User{Name: "default", Groups: []string{"system:masters"}}, &rest.Config{}) + if err != nil { + return fmt.Errorf("unable to provision the default (legacy) user: %w", err) + } + kubectl, err := user.Kubectl() + if err != nil { + return fmt.Errorf("unable to provision the default (legacy) kubeconfig: %w", err) + } + f.defaultUserCfg = user.Config() + f.defaultUserKubectl = kubectl + return nil +} + +// Stop will stop your control plane processes, and clean up their data. +func (f *ControlPlane) Stop() error { + var errList []error + + if f.APIServer != nil { + if err := f.APIServer.Stop(); err != nil { + errList = append(errList, err) + } + } + if f.Etcd != nil { + if err := f.Etcd.Stop(); err != nil { + errList = append(errList, err) + } + } + + return kerrors.NewAggregate(errList) +} + +// APIURL returns the URL you should connect to to talk to your API server. +// +// If insecure serving is configured, this will contain the insecure port. +// Otherwise, it will contain the secure port. +// +// Deprecated: use AddUser instead, or APIServer.{Ins|S}ecureServing.URL if +// you really want just the URL. +func (f *ControlPlane) APIURL() *url.URL { + return f.APIServer.URL +} + +// KubeCtl returns a pre-configured KubeCtl, ready to connect to this +// ControlPlane. +// +// Deprecated: use AddUser & AuthenticatedUser.Kubectl instead. +func (f *ControlPlane) KubeCtl() *KubeCtl { + return f.defaultUserKubectl +} + +// RESTClientConfig returns a pre-configured restconfig, ready to connect to +// this ControlPlane. +// +// Deprecated: use AddUser & AuthenticatedUser.Config instead. +func (f *ControlPlane) RESTClientConfig() (*rest.Config, error) { + return f.defaultUserCfg, nil +} + +// AuthenticatedUser contains access information for an provisioned user, +// including REST config, kubeconfig contents, and access to a KubeCtl instance. +// +// It's not "safe" to use the methods on this till after the API server has been +// started (due to certificate initialization and such). The various methods will +// panic if this is done. +type AuthenticatedUser struct { + // cfg is the rest.Config for connecting to the API server. It's lazily initialized. + cfg *rest.Config + // cfgIsComplete indicates the cfg has had late-initialized fields (e.g. + // API server CA data) initialized. + cfgIsComplete bool + + // apiServer is a handle to the APIServer that's used when finalizing cfg + // and producing the kubectl instance. + plane *ControlPlane + + // kubectl is our existing, provisioned kubectl. We don't provision one + // till someone actually asks for it. + kubectl *KubeCtl +} + +// Config returns the REST config that can be used to connect to the API server +// as this user. +// +// Will panic if used before the API server is started. +func (u *AuthenticatedUser) Config() *rest.Config { + // NB(directxman12): we choose to panic here for ergonomics sake, and because there's + // not really much you can do to "handle" this error. This machinery is intended to be + // used in tests anyway, so panicing is not a particularly big deal. + if u.cfgIsComplete { + return u.cfg + } + if len(u.plane.APIServer.SecureServing.CA) == 0 { + panic("the API server has not yet been started, please do that before accessing connection details") + } + + u.cfg.CAData = u.plane.APIServer.SecureServing.CA + u.cfg.Host = u.plane.APIServer.SecureServing.URL("https", "/").String() + u.cfgIsComplete = true + return u.cfg +} + +// KubeConfig returns a KubeConfig that's roughly equivalent to this user's REST config. +// +// Will panic if used before the API server is started. +func (u AuthenticatedUser) KubeConfig() ([]byte, error) { + // NB(directxman12): we don't return the actual API object to avoid yet another + // piece of kubernetes API in our public API, and also because generally the thing + // you want to do with this is just write it out to a file for external debugging + // purposes, etc. + return KubeConfigFromREST(u.Config()) +} + +// Kubectl returns a KubeCtl instance for talking to the API server as this user. It uses +// a kubeconfig equivalent to that returned by .KubeConfig. +// +// Will panic if used before the API server is started. +func (u *AuthenticatedUser) Kubectl() (*KubeCtl, error) { + if u.kubectl != nil { + return u.kubectl, nil + } + if len(u.plane.APIServer.CertDir) == 0 { + panic("the API server has not yet been started, please do that before accessing connection details") + } + + // cleaning this up is handled when our tmpDir is deleted + out, err := os.CreateTemp(u.plane.APIServer.CertDir, "*.kubecfg") + if err != nil { + return nil, fmt.Errorf("unable to create file for kubeconfig: %w", err) + } + defer out.Close() + contents, err := KubeConfigFromREST(u.Config()) + if err != nil { + return nil, err + } + if _, err := out.Write(contents); err != nil { + return nil, fmt.Errorf("unable to write kubeconfig to disk at %s: %w", out.Name(), err) + } + k := &KubeCtl{ + Path: u.plane.KubectlPath, + } + k.Opts = append(k.Opts, fmt.Sprintf("--kubeconfig=%s", out.Name())) + u.kubectl = k + return k, nil +} + +// AddUser provisions a new user in the cluster. It uses the APIServer's authentication +// strategy -- see APIServer.SecureServing.Authn. +// +// Unlike AddUser, it's safe to pass a nil rest.Config here if you have no +// particular opinions about the config. +// +// The default authentication strategy is not guaranteed to any specific strategy, but it is +// guaranteed to be callable both before and after Start has been called (but, as noted in the +// AuthenticatedUser docs, the given user objects are only valid after Start has been called). +func (f *ControlPlane) AddUser(user User, baseConfig *rest.Config) (*AuthenticatedUser, error) { + if f.GetAPIServer().SecureServing.Authn == nil { + return nil, fmt.Errorf("no API server authentication is configured yet. The API server defaults one when Start is called, did you mean to use that?") + } + + if baseConfig == nil { + baseConfig = &rest.Config{} + } + cfg, err := f.GetAPIServer().SecureServing.AddUser(user, baseConfig) + if err != nil { + return nil, err + } + + return &AuthenticatedUser{ + cfg: cfg, + plane: f, + }, nil +} + +// GetAPIServer returns this ControlPlane's APIServer, initializing it if necessary. +func (f *ControlPlane) GetAPIServer() *APIServer { + if f.APIServer == nil { + f.APIServer = &APIServer{} + } + return f.APIServer +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/.gitignore b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/.gitignore deleted file mode 100644 index 16308b38c..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/.gitignore +++ /dev/null @@ -1 +0,0 @@ -assets/bin diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/README.md b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/README.md deleted file mode 100644 index abf9316d4..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Integration Testing Framework - -This package has been moved from [https://github.com/kubernetes-sigs/testing_frameworks/tree/master/integration](https://github.com/kubernetes-sigs/testing_frameworks/tree/master/integration). - -A framework for integration testing components of kubernetes. This framework is -intended to work properly both in CI, and on a local dev machine. It therefore -explicitly supports both Linux and Darwin. - -For detailed documentation see the -[![GoDoc](https://godoc.org/github.com/kubernetes-sigs/controller-runtime/pkg/internal/testing/integration?status.svg)](https://godoc.org/github.com/kubernetes-sigs/controller-runtime/pkg/internal/testing/integration). diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr/manager.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr/manager.go deleted file mode 100644 index be82613a2..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr/manager.go +++ /dev/null @@ -1,77 +0,0 @@ -package addr - -import ( - "fmt" - "net" - "sync" - "time" -) - -const ( - portReserveTime = 1 * time.Minute - portConflictRetry = 100 -) - -type portCache struct { - lock sync.Mutex - ports map[int]time.Time -} - -func (c *portCache) add(port int) bool { - c.lock.Lock() - defer c.lock.Unlock() - // remove outdated port - for p, t := range c.ports { - if time.Since(t) > portReserveTime { - delete(c.ports, p) - } - } - // try allocating new port - if _, ok := c.ports[port]; ok { - return false - } - c.ports[port] = time.Now() - return true -} - -var cache = &portCache{ - ports: make(map[int]time.Time), -} - -func suggest(listenHost string) (port int, resolvedHost string, err error) { - if listenHost == "" { - listenHost = "localhost" - } - addr, err := net.ResolveTCPAddr("tcp", net.JoinHostPort(listenHost, "0")) - if err != nil { - return - } - l, err := net.ListenTCP("tcp", addr) - if err != nil { - return - } - port = l.Addr().(*net.TCPAddr).Port - defer func() { - err = l.Close() - }() - resolvedHost = addr.IP.String() - return -} - -// Suggest suggests an address a process can listen on. It returns -// a tuple consisting of a free port and the hostname resolved to its IP. -// It makes sure that new port allocated does not conflict with old ports -// allocated within 1 minute. -func Suggest(listenHost string) (port int, resolvedHost string, err error) { - for i := 0; i < portConflictRetry; i++ { - port, resolvedHost, err = suggest(listenHost) - if err != nil { - return - } - if cache.add(port) { - return - } - } - err = fmt.Errorf("no free ports found after %d retries", portConflictRetry) - return -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/apiserver.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/apiserver.go deleted file mode 100644 index 119657875..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/apiserver.go +++ /dev/null @@ -1,177 +0,0 @@ -package integration - -import ( - "fmt" - "io" - "io/ioutil" - "net/url" - "os" - "path/filepath" - "time" - - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr" - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal" -) - -// APIServer knows how to run a kubernetes apiserver. -type APIServer struct { - // URL is the address the ApiServer should listen on for client connections. - // - // If this is not specified, we default to a random free port on localhost. - URL *url.URL - - // SecurePort is the additional secure port that the APIServer should listen on. - SecurePort int - - // Path is the path to the apiserver binary. - // - // If this is left as the empty string, we will attempt to locate a binary, - // by checking for the TEST_ASSET_KUBE_APISERVER environment variable, and - // the default test assets directory. See the "Binaries" section above (in - // doc.go) for details. - Path string - - // Args is a list of arguments which will passed to the APIServer binary. - // Before they are passed on, they will be evaluated as go-template strings. - // This means you can use fields which are defined and exported on this - // APIServer struct (e.g. "--cert-dir={{ .Dir }}"). - // Those templates will be evaluated after the defaulting of the APIServer's - // fields has already happened and just before the binary actually gets - // started. Thus you have access to calculated fields like `URL` and others. - // - // If not specified, the minimal set of arguments to run the APIServer will - // be used. - Args []string - - // CertDir is a path to a directory containing whatever certificates the - // APIServer will need. - // - // If left unspecified, then the Start() method will create a fresh temporary - // directory, and the Stop() method will clean it up. - CertDir string - - // EtcdURL is the URL of the Etcd the APIServer should use. - // - // If this is not specified, the Start() method will return an error. - EtcdURL *url.URL - - // StartTimeout, StopTimeout specify the time the APIServer is allowed to - // take when starting and stoppping before an error is emitted. - // - // If not specified, these default to 20 seconds. - StartTimeout time.Duration - StopTimeout time.Duration - - // Out, Err specify where APIServer should write its StdOut, StdErr to. - // - // If not specified, the output will be discarded. - Out io.Writer - Err io.Writer - - processState *internal.ProcessState -} - -// Start starts the apiserver, waits for it to come up, and returns an error, -// if occurred. -func (s *APIServer) Start() error { - if s.processState == nil { - if err := s.setProcessState(); err != nil { - return err - } - } - return s.processState.Start(s.Out, s.Err) -} - -func (s *APIServer) setProcessState() error { - if s.EtcdURL == nil { - return fmt.Errorf("expected EtcdURL to be configured") - } - - var err error - - s.processState = &internal.ProcessState{} - - s.processState.DefaultedProcessInput, err = internal.DoDefaulting( - "kube-apiserver", - s.URL, - s.CertDir, - s.Path, - s.StartTimeout, - s.StopTimeout, - ) - if err != nil { - return err - } - - // Defaulting the secure port - if s.SecurePort == 0 { - s.SecurePort, _, err = addr.Suggest("") - if err != nil { - return err - } - } - - s.processState.HealthCheckEndpoint = "/healthz" - - s.URL = &s.processState.URL - s.CertDir = s.processState.Dir - s.Path = s.processState.Path - s.StartTimeout = s.processState.StartTimeout - s.StopTimeout = s.processState.StopTimeout - - if err := s.populateAPIServerCerts(); err != nil { - return err - } - - s.processState.Args, err = internal.RenderTemplates( - internal.DoAPIServerArgDefaulting(s.Args), s, - ) - return err -} - -func (s *APIServer) populateAPIServerCerts() error { - _, statErr := os.Stat(filepath.Join(s.CertDir, "apiserver.crt")) - if !os.IsNotExist(statErr) { - return statErr - } - - ca, err := internal.NewTinyCA() - if err != nil { - return err - } - - certs, err := ca.NewServingCert() - if err != nil { - return err - } - - certData, keyData, err := certs.AsBytes() - if err != nil { - return err - } - - if err := ioutil.WriteFile(filepath.Join(s.CertDir, "apiserver.crt"), certData, 0640); err != nil { - return err - } - if err := ioutil.WriteFile(filepath.Join(s.CertDir, "apiserver.key"), keyData, 0640); err != nil { - return err - } - - return nil -} - -// Stop stops this process gracefully, waits for its termination, and cleans up -// the CertDir if necessary. -func (s *APIServer) Stop() error { - if s.processState != nil { - return s.processState.Stop() - } - return nil -} - -// APIServerDefaultArgs exposes the default args for the APIServer so that you -// can use those to append your own additional arguments. -// -// The internal default arguments are explicitly copied here, we don't want to -// allow users to change the internal ones. -var APIServerDefaultArgs = append([]string{}, internal.APIServerDefaultArgs...) diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/control_plane.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/control_plane.go deleted file mode 100644 index bab0fb20e..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/control_plane.go +++ /dev/null @@ -1,86 +0,0 @@ -package integration - -import ( - "fmt" - "net/url" - - "k8s.io/apimachinery/pkg/runtime/serializer" - utilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal" -) - -// NewTinyCA creates a new a tiny CA utility for provisioning serving certs and client certs FOR TESTING ONLY. -// Don't use this for anything else! -var NewTinyCA = internal.NewTinyCA - -// ControlPlane is a struct that knows how to start your test control plane. -// -// Right now, that means Etcd and your APIServer. This is likely to increase in -// future. -type ControlPlane struct { - APIServer *APIServer - Etcd *Etcd -} - -// Start will start your control plane processes. To stop them, call Stop(). -func (f *ControlPlane) Start() error { - if f.Etcd == nil { - f.Etcd = &Etcd{} - } - if err := f.Etcd.Start(); err != nil { - return err - } - - if f.APIServer == nil { - f.APIServer = &APIServer{} - } - f.APIServer.EtcdURL = f.Etcd.URL - return f.APIServer.Start() -} - -// Stop will stop your control plane processes, and clean up their data. -func (f *ControlPlane) Stop() error { - var errList []error - - if f.APIServer != nil { - if err := f.APIServer.Stop(); err != nil { - errList = append(errList, err) - } - } - if f.Etcd != nil { - if err := f.Etcd.Stop(); err != nil { - errList = append(errList, err) - } - } - - return utilerrors.NewAggregate(errList) -} - -// APIURL returns the URL you should connect to to talk to your API. -func (f *ControlPlane) APIURL() *url.URL { - return f.APIServer.URL -} - -// KubeCtl returns a pre-configured KubeCtl, ready to connect to this -// ControlPlane. -func (f *ControlPlane) KubeCtl() *KubeCtl { - k := &KubeCtl{} - k.Opts = append(k.Opts, fmt.Sprintf("--server=%s", f.APIURL())) - return k -} - -// RESTClientConfig returns a pre-configured restconfig, ready to connect to -// this ControlPlane. -func (f *ControlPlane) RESTClientConfig() (*rest.Config, error) { - c := &rest.Config{ - Host: f.APIURL().String(), - ContentConfig: rest.ContentConfig{ - NegotiatedSerializer: serializer.WithoutConversionCodecFactory{CodecFactory: scheme.Codecs}, - }, - } - err := rest.SetKubernetesDefaults(c) - return c, err -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/doc.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/doc.go deleted file mode 100644 index 62a036731..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/doc.go +++ /dev/null @@ -1,112 +0,0 @@ -/* - -Package integration implements an integration testing framework for kubernetes. - -It provides components for standing up a kubernetes API, against which you can test a -kubernetes client, or other kubernetes components. The lifecycle of the components -needed to provide this API is managed by this framework. - -Quickstart - -Add something like the following to -your tests: - - cp := &integration.ControlPlane{} - cp.Start() - kubeCtl := cp.KubeCtl() - stdout, stderr, err := kubeCtl.Run("get", "pods") - // You can check on err, stdout & stderr and build up - // your tests - cp.Stop() - -Components - -Currently the framework provides the following components: - -ControlPlane: The ControlPlane wraps Etcd & APIServer (see below) and wires -them together correctly. A ControlPlane can be stopped & started and can -provide the URL to connect to the API. The ControlPlane can also be asked for a -KubeCtl which is already correctly configured for this ControlPlane. The -ControlPlane is a good entry point for default setups. - -Etcd: Manages an Etcd binary, which can be started, stopped and connected to. -By default Etcd will listen on a random port for http connections and will -create a temporary directory for its data. To configure it differently, see the -Etcd type documentation below. - -APIServer: Manages an Kube-APIServer binary, which can be started, stopped and -connected to. By default APIServer will listen on a random port for http -connections and will create a temporary directory to store the (auto-generated) -certificates. To configure it differently, see the APIServer type -documentation below. - -KubeCtl: Wraps around a `kubectl` binary and can `Run(...)` arbitrary commands -against a kubernetes control plane. - -Binaries - -Etcd, APIServer & KubeCtl use the same mechanism to determine which binaries to -use when they get started. - -1. If the component is configured with a `Path` the framework tries to run that -binary. -For example: - - myEtcd := &Etcd{ - Path: "/some/other/etcd", - } - cp := &integration.ControlPlane{ - Etcd: myEtcd, - } - cp.Start() - -2. If the Path field on APIServer, Etcd or KubeCtl is left unset and an -environment variable named `TEST_ASSET_KUBE_APISERVER`, `TEST_ASSET_ETCD` or -`TEST_ASSET_KUBECTL` is set, its value is used as a path to the binary for the -APIServer, Etcd or KubeCtl. - -3. If neither the `Path` field, nor the environment variable is set, the -framework tries to use the binaries `kube-apiserver`, `etcd` or `kubectl` in -the directory `${FRAMEWORK_DIR}/assets/bin/`. - -Arguments for Etcd and APIServer - -Those components will start without any configuration. However, if you want or -need to, you can override certain configuration -- one of which are the -arguments used when calling the binary. - -When you choose to specify your own set of arguments, those won't be appended -to the default set of arguments, it is your responsibility to provide all the -arguments needed for the binary to start successfully. - -However, the default arguments for APIServer and Etcd are exported as -`APIServerDefaultArgs` and `EtcdDefaultArgs` from this package. Treat those -variables as read-only constants. Internally we have a set of default -arguments for defaulting, the `APIServerDefaultArgs` and `EtcdDefaultArgs` are -just copies of those. So when you override them you loose access to the actual -internal default arguments, but your override won't affect the defaulting. - -All arguments are interpreted as go templates. Those templates have access to -all exported fields of the `APIServer`/`Etcd` struct. It does not matter if -those fields where explicitly set up or if they were defaulted by calling the -`Start()` method, the template evaluation runs just before the binary is -executed and right after the defaulting of all the struct's fields has -happened. - - // When you want to append additional arguments ... - etcd := &Etcd{ - // Additional custom arguments will appended to the set of default - // arguments - Args: append(EtcdDefaultArgs, "--additional=arg"), - DataDir: "/my/special/data/dir", - } - - // When you want to use a custom set of arguments ... - etcd := &Etcd{ - // Only custom arguments will be passed to the binary - Args: []string{"--one=1", "--two=2", "--three=3"}, - DataDir: "/my/special/data/dir", - } - -*/ -package integration diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/etcd.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/etcd.go deleted file mode 100644 index f7f4e192f..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/etcd.go +++ /dev/null @@ -1,114 +0,0 @@ -package integration - -import ( - "io" - "time" - - "net/url" - - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal" -) - -// Etcd knows how to run an etcd server. -type Etcd struct { - // URL is the address the Etcd should listen on for client connections. - // - // If this is not specified, we default to a random free port on localhost. - URL *url.URL - - // Path is the path to the etcd binary. - // - // If this is left as the empty string, we will attempt to locate a binary, - // by checking for the TEST_ASSET_ETCD environment variable, and the default - // test assets directory. See the "Binaries" section above (in doc.go) for - // details. - Path string - - // Args is a list of arguments which will passed to the Etcd binary. Before - // they are passed on, the`y will be evaluated as go-template strings. This - // means you can use fields which are defined and exported on this Etcd - // struct (e.g. "--data-dir={{ .Dir }}"). - // Those templates will be evaluated after the defaulting of the Etcd's - // fields has already happened and just before the binary actually gets - // started. Thus you have access to calculated fields like `URL` and others. - // - // If not specified, the minimal set of arguments to run the Etcd will be - // used. - Args []string - - // DataDir is a path to a directory in which etcd can store its state. - // - // If left unspecified, then the Start() method will create a fresh temporary - // directory, and the Stop() method will clean it up. - DataDir string - - // StartTimeout, StopTimeout specify the time the Etcd is allowed to - // take when starting and stopping before an error is emitted. - // - // If not specified, these default to 20 seconds. - StartTimeout time.Duration - StopTimeout time.Duration - - // Out, Err specify where Etcd should write its StdOut, StdErr to. - // - // If not specified, the output will be discarded. - Out io.Writer - Err io.Writer - - processState *internal.ProcessState -} - -// Start starts the etcd, waits for it to come up, and returns an error, if one -// occoured. -func (e *Etcd) Start() error { - if e.processState == nil { - if err := e.setProcessState(); err != nil { - return err - } - } - return e.processState.Start(e.Out, e.Err) -} - -func (e *Etcd) setProcessState() error { - var err error - - e.processState = &internal.ProcessState{} - - e.processState.DefaultedProcessInput, err = internal.DoDefaulting( - "etcd", - e.URL, - e.DataDir, - e.Path, - e.StartTimeout, - e.StopTimeout, - ) - if err != nil { - return err - } - - e.processState.StartMessage = internal.GetEtcdStartMessage(e.processState.URL) - - e.URL = &e.processState.URL - e.DataDir = e.processState.Dir - e.Path = e.processState.Path - e.StartTimeout = e.processState.StartTimeout - e.StopTimeout = e.processState.StopTimeout - - e.processState.Args, err = internal.RenderTemplates( - internal.DoEtcdArgDefaulting(e.Args), e, - ) - return err -} - -// Stop stops this process gracefully, waits for its termination, and cleans up -// the DataDir if necessary. -func (e *Etcd) Stop() error { - return e.processState.Stop() -} - -// EtcdDefaultArgs exposes the default args for Etcd so that you -// can use those to append your own additional arguments. -// -// The internal default arguments are explicitly copied here, we don't want to -// allow users to change the internal ones. -var EtcdDefaultArgs = append([]string{}, internal.EtcdDefaultArgs...) diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/apiserver.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/apiserver.go deleted file mode 100644 index 5c0435fa1..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/apiserver.go +++ /dev/null @@ -1,27 +0,0 @@ -package internal - -// APIServerDefaultArgs allow tests to run offline, by preventing API server from attempting to -// use default route to determine its --advertise-address. -var APIServerDefaultArgs = []string{ - "--advertise-address=127.0.0.1", - "--etcd-servers={{ if .EtcdURL }}{{ .EtcdURL.String }}{{ end }}", - "--cert-dir={{ .CertDir }}", - "--insecure-port={{ if .URL }}{{ .URL.Port }}{{ end }}", - "--insecure-bind-address={{ if .URL }}{{ .URL.Hostname }}{{ end }}", - "--secure-port={{ if .SecurePort }}{{ .SecurePort }}{{ end }}", - // we're keeping this disabled because if enabled, default SA is missing which would force all tests to create one - // in normal apiserver operation this SA is created by controller, but that is not run in integration environment - "--disable-admission-plugins=ServiceAccount", - "--service-cluster-ip-range=10.0.0.0/24", - "--allow-privileged=true", -} - -// DoAPIServerArgDefaulting will set default values to allow tests to run offline when the args are not informed. Otherwise, -// it will return the same []string arg passed as param. -func DoAPIServerArgDefaulting(args []string) []string { - if len(args) != 0 { - return args - } - - return APIServerDefaultArgs -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/arguments.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/arguments.go deleted file mode 100644 index 573295d90..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/arguments.go +++ /dev/null @@ -1,29 +0,0 @@ -package internal - -import ( - "bytes" - "html/template" -) - -// RenderTemplates returns an []string to render the templates -func RenderTemplates(argTemplates []string, data interface{}) (args []string, err error) { - var t *template.Template - - for _, arg := range argTemplates { - t, err = template.New(arg).Parse(arg) - if err != nil { - args = nil - return - } - - buf := &bytes.Buffer{} - err = t.Execute(buf, data) - if err != nil { - args = nil - return - } - args = append(args, buf.String()) - } - - return -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/bin_path_finder.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/bin_path_finder.go deleted file mode 100644 index 5597e4ba0..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/bin_path_finder.go +++ /dev/null @@ -1,35 +0,0 @@ -package internal - -import ( - "os" - "path/filepath" - "regexp" - "runtime" - "strings" -) - -var assetsPath string - -func init() { - _, thisFile, _, ok := runtime.Caller(0) - if !ok { - panic("Could not determine the path of the BinPathFinder") - } - assetsPath = filepath.Join(filepath.Dir(thisFile), "..", "assets", "bin") -} - -// BinPathFinder checks the an environment variable, derived from the symbolic name, -// and falls back to a default assets location when this variable is not set -func BinPathFinder(symbolicName string) (binPath string) { - punctuationPattern := regexp.MustCompile("[^A-Z0-9]+") - sanitizedName := punctuationPattern.ReplaceAllString(strings.ToUpper(symbolicName), "_") - leadingNumberPattern := regexp.MustCompile("^[0-9]+") - sanitizedName = leadingNumberPattern.ReplaceAllString(sanitizedName, "") - envVar := "TEST_ASSET_" + sanitizedName - - if val, ok := os.LookupEnv(envVar); ok { - return val - } - - return filepath.Join(assetsPath, symbolicName) -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/etcd.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/etcd.go deleted file mode 100644 index 2d108a3e8..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/etcd.go +++ /dev/null @@ -1,45 +0,0 @@ -package internal - -import ( - "net/url" -) - -// EtcdDefaultArgs allow tests to run offline, by preventing API server from attempting to -// use default route to determine its urls. -var EtcdDefaultArgs = []string{ - "--listen-peer-urls=http://localhost:0", - "--advertise-client-urls={{ if .URL }}{{ .URL.String }}{{ end }}", - "--listen-client-urls={{ if .URL }}{{ .URL.String }}{{ end }}", - "--data-dir={{ .DataDir }}", -} - -// DoEtcdArgDefaulting will set default values to allow tests to run offline when the args are not informed. Otherwise, -// it will return the same []string arg passed as param. -func DoEtcdArgDefaulting(args []string) []string { - if len(args) != 0 { - return args - } - - return EtcdDefaultArgs -} - -// isSecureScheme returns false when the schema is insecure. -func isSecureScheme(scheme string) bool { - // https://github.com/coreos/etcd/blob/d9deeff49a080a88c982d328ad9d33f26d1ad7b6/pkg/transport/listener.go#L53 - if scheme == "https" || scheme == "unixs" { - return true - } - return false -} - -// GetEtcdStartMessage returns an start message to inform if the client is or not insecure. -// It will return true when the URL informed has the scheme == "https" || scheme == "unixs" -func GetEtcdStartMessage(listenURL url.URL) string { - if isSecureScheme(listenURL.Scheme) { - // https://github.com/coreos/etcd/blob/a7f1fbe00ec216fcb3a1919397a103b41dca8413/embed/serve.go#L167 - return "serving client requests on " - } - - // https://github.com/coreos/etcd/blob/a7f1fbe00ec216fcb3a1919397a103b41dca8413/embed/serve.go#L124 - return "serving insecure client requests on " -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/process.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/process.go deleted file mode 100644 index 99e2fdea3..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal/process.go +++ /dev/null @@ -1,225 +0,0 @@ -package internal - -import ( - "fmt" - "io" - "io/ioutil" - "net" - "net/http" - "net/url" - "os" - "os/exec" - "path" - "strconv" - "time" - - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/gexec" - - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/addr" -) - -// ProcessState define the state of the process. -type ProcessState struct { - DefaultedProcessInput - Session *gexec.Session - // Healthcheck Endpoint. If we get http.StatusOK from this endpoint, we - // assume the process is ready to operate. E.g. "/healthz". If this is set, - // we ignore StartMessage. - HealthCheckEndpoint string - // HealthCheckPollInterval is the interval which will be used for polling the - // HealthCheckEndpoint. - // If left empty it will default to 100 Milliseconds. - HealthCheckPollInterval time.Duration - // StartMessage is the message to wait for on stderr. If we receive this - // message, we assume the process is ready to operate. Ignored if - // HealthCheckEndpoint is specified. - // - // The usage of StartMessage is discouraged, favour HealthCheckEndpoint - // instead! - // - // Deprecated: Use HealthCheckEndpoint in favour of StartMessage - StartMessage string - Args []string - - // ready holds wether the process is currently in ready state (hit the ready condition) or not. - // It will be set to true on a successful `Start()` and set to false on a successful `Stop()` - ready bool -} - -// DefaultedProcessInput defines the default process input required to perform the test. -type DefaultedProcessInput struct { - URL url.URL - Dir string - DirNeedsCleaning bool - Path string - StopTimeout time.Duration - StartTimeout time.Duration -} - -// DoDefaulting sets the default configuration according to the data informed and return an DefaultedProcessInput -// and an error if some requirement was not informed. -func DoDefaulting( - name string, - listenURL *url.URL, - dir string, - path string, - startTimeout time.Duration, - stopTimeout time.Duration, -) (DefaultedProcessInput, error) { - defaults := DefaultedProcessInput{ - Dir: dir, - Path: path, - StartTimeout: startTimeout, - StopTimeout: stopTimeout, - } - - if listenURL == nil { - port, host, err := addr.Suggest("") - if err != nil { - return DefaultedProcessInput{}, err - } - defaults.URL = url.URL{ - Scheme: "http", - Host: net.JoinHostPort(host, strconv.Itoa(port)), - } - } else { - defaults.URL = *listenURL - } - - if dir == "" { - newDir, err := ioutil.TempDir("", "k8s_test_framework_") - if err != nil { - return DefaultedProcessInput{}, err - } - defaults.Dir = newDir - defaults.DirNeedsCleaning = true - } - - if path == "" { - if name == "" { - return DefaultedProcessInput{}, fmt.Errorf("must have at least one of name or path") - } - defaults.Path = BinPathFinder(name) - } - - if startTimeout == 0 { - defaults.StartTimeout = 20 * time.Second - } - - if stopTimeout == 0 { - defaults.StopTimeout = 20 * time.Second - } - - return defaults, nil -} - -type stopChannel chan struct{} - -// Start starts the apiserver, waits for it to come up, and returns an error, -// if occurred. -func (ps *ProcessState) Start(stdout, stderr io.Writer) (err error) { - if ps.ready { - return nil - } - - command := exec.Command(ps.Path, ps.Args...) - - ready := make(chan bool) - timedOut := time.After(ps.StartTimeout) - var pollerStopCh stopChannel - - if ps.HealthCheckEndpoint != "" { - healthCheckURL := ps.URL - healthCheckURL.Path = ps.HealthCheckEndpoint - pollerStopCh = make(stopChannel) - go pollURLUntilOK(healthCheckURL, ps.HealthCheckPollInterval, ready, pollerStopCh) - } else { - startDetectStream := gbytes.NewBuffer() - ready = startDetectStream.Detect(ps.StartMessage) - stderr = safeMultiWriter(stderr, startDetectStream) - } - - ps.Session, err = gexec.Start(command, stdout, stderr) - if err != nil { - return err - } - - select { - case <-ready: - ps.ready = true - return nil - case <-timedOut: - if pollerStopCh != nil { - close(pollerStopCh) - } - if ps.Session != nil { - ps.Session.Terminate() - } - return fmt.Errorf("timeout waiting for process %s to start", path.Base(ps.Path)) - } -} - -func safeMultiWriter(writers ...io.Writer) io.Writer { - safeWriters := []io.Writer{} - for _, w := range writers { - if w != nil { - safeWriters = append(safeWriters, w) - } - } - return io.MultiWriter(safeWriters...) -} - -func pollURLUntilOK(url url.URL, interval time.Duration, ready chan bool, stopCh stopChannel) { - if interval <= 0 { - interval = 100 * time.Millisecond - } - for { - res, err := http.Get(url.String()) - if err == nil { - res.Body.Close() - if res.StatusCode == http.StatusOK { - ready <- true - return - } - } - - select { - case <-stopCh: - return - default: - time.Sleep(interval) - } - } -} - -// Stop stops this process gracefully, waits for its termination, and cleans up -// the CertDir if necessary. -func (ps *ProcessState) Stop() error { - if ps.Session == nil { - return nil - } - - // gexec's Session methods (Signal, Kill, ...) do not check if the Process is - // nil, so we are doing this here for now. - // This should probably be fixed in gexec. - if ps.Session.Command.Process == nil { - return nil - } - - detectedStop := ps.Session.Terminate().Exited - timedOut := time.After(ps.StopTimeout) - - select { - case <-detectedStop: - break - case <-timedOut: - return fmt.Errorf("timeout waiting for process %s to stop", path.Base(ps.Path)) - } - ps.ready = false - if ps.DirNeedsCleaning { - return os.RemoveAll(ps.Dir) - } - - return nil -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/kubectl.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/kubectl.go deleted file mode 100644 index 8c29736b9..000000000 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/kubectl.go +++ /dev/null @@ -1,47 +0,0 @@ -package integration - -import ( - "bytes" - "io" - "os/exec" - - "sigs.k8s.io/controller-runtime/pkg/internal/testing/integration/internal" -) - -// KubeCtl is a wrapper around the kubectl binary. -type KubeCtl struct { - // Path where the kubectl binary can be found. - // - // If this is left empty, we will attempt to locate a binary, by checking for - // the TEST_ASSET_KUBECTL environment variable, and the default test assets - // directory. See the "Binaries" section above (in doc.go) for details. - Path string - - // Opts can be used to configure additional flags which will be used each - // time the wrapped binary is called. - // - // For example, you might want to use this to set the URL of the APIServer to - // connect to. - Opts []string -} - -// Run executes the wrapped binary with some preconfigured options and the -// arguments given to this method. It returns Readers for the stdout and -// stderr. -func (k *KubeCtl) Run(args ...string) (stdout, stderr io.Reader, err error) { - if k.Path == "" { - k.Path = internal.BinPathFinder("kubectl") - } - - stdoutBuffer := &bytes.Buffer{} - stderrBuffer := &bytes.Buffer{} - allArgs := append(k.Opts, args...) - - cmd := exec.Command(k.Path, allArgs...) - cmd.Stdout = stdoutBuffer - cmd.Stderr = stderrBuffer - - err = cmd.Run() - - return stdoutBuffer, stderrBuffer, err -} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/arguments.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/arguments.go new file mode 100644 index 000000000..6c2c91e14 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/arguments.go @@ -0,0 +1,340 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package process + +import ( + "bytes" + "html/template" + "sort" + "strings" +) + +// RenderTemplates returns an []string to render the templates +// +// Deprecated: will be removed in favor of Arguments. +func RenderTemplates(argTemplates []string, data interface{}) (args []string, err error) { + var t *template.Template + + for _, arg := range argTemplates { + t, err = template.New(arg).Parse(arg) + if err != nil { + args = nil + return + } + + buf := &bytes.Buffer{} + err = t.Execute(buf, data) + if err != nil { + args = nil + return + } + args = append(args, buf.String()) + } + + return +} + +// SliceToArguments converts a slice of arguments to structured arguments, +// appending each argument that starts with `--` and contains an `=` to the +// argument set (ignoring defaults), returning the rest. +// +// Deprecated: will be removed when RenderTemplates is removed. +func SliceToArguments(sliceArgs []string, args *Arguments) []string { + var rest []string + for i, arg := range sliceArgs { + if arg == "--" { + rest = append(rest, sliceArgs[i:]...) + return rest + } + // skip non-flag arguments, skip arguments w/o equals because we + // can't tell if the next argument should take a value + if !strings.HasPrefix(arg, "--") || !strings.Contains(arg, "=") { + rest = append(rest, arg) + continue + } + + parts := strings.SplitN(arg[2:], "=", 2) + name := parts[0] + val := parts[1] + + args.AppendNoDefaults(name, val) + } + + return rest +} + +// TemplateDefaults specifies defaults to be used for joining structured arguments with templates. +// +// Deprecated: will be removed when RenderTemplates is removed. +type TemplateDefaults struct { + // Data will be used to render the template. + Data interface{} + // Defaults will be used to default structured arguments if no template is passed. + Defaults map[string][]string + // MinimalDefaults will be used to default structured arguments if a template is passed. + // Use this for flags which *must* be present. + MinimalDefaults map[string][]string // for api server service-cluster-ip-range +} + +// TemplateAndArguments joins structured arguments and non-structured arguments, preserving existing +// behavior. Namely: +// +// 1. if templ has len > 0, it will be rendered against data +// 2. the rendered template values that look like `--foo=bar` will be split +// and appended to args, the rest will be kept around +// 3. the given args will be rendered as string form. If a template is given, +// no defaults will be used, otherwise defaults will be used +// 4. a result of [args..., rest...] will be returned +// +// It returns the resulting rendered arguments, plus the arguments that were +// not transferred to `args` during rendering. +// +// Deprecated: will be removed when RenderTemplates is removed. +func TemplateAndArguments(templ []string, args *Arguments, data TemplateDefaults) (allArgs []string, nonFlagishArgs []string, err error) { + if len(templ) == 0 { // 3 & 4 (no template case) + return args.AsStrings(data.Defaults), nil, nil + } + + // 1: render the template + rendered, err := RenderTemplates(templ, data.Data) + if err != nil { + return nil, nil, err + } + + // 2: filter out structured args and add them to args + rest := SliceToArguments(rendered, args) + + // 3 (template case): render structured args, no defaults (matching the + // legacy case where if Args was specified, no defaults were used) + res := args.AsStrings(data.MinimalDefaults) + + // 4: return the rendered structured args + all non-structured args + return append(res, rest...), rest, nil +} + +// EmptyArguments constructs an empty set of flags with no defaults. +func EmptyArguments() *Arguments { + return &Arguments{ + values: make(map[string]Arg), + } +} + +// Arguments are structured, overridable arguments. +// Each Arguments object contains some set of default arguments, which may +// be appended to, or overridden. +// +// When ready, you can serialize them to pass to exec.Command and friends using +// AsStrings. +// +// All flag-setting methods return the *same* instance of Arguments so that you +// can chain calls. +type Arguments struct { + // values contains the user-set values for the arguments. + // `values[key] = dontPass` means "don't pass this flag" + // `values[key] = passAsName` means "pass this flag without args like --key` + // `values[key] = []string{a, b, c}` means "--key=a --key=b --key=c` + // any values not explicitly set here will be copied from defaults on final rendering. + values map[string]Arg +} + +// Arg is an argument that has one or more values, +// and optionally falls back to default values. +type Arg interface { + // Append adds new values to this argument, returning + // a new instance contain the new value. The intermediate + // argument should generally be assumed to be consumed. + Append(vals ...string) Arg + // Get returns the full set of values, optionally including + // the passed in defaults. If it returns nil, this will be + // skipped. If it returns a non-nil empty slice, it'll be + // assumed that the argument should be passed as name-only. + Get(defaults []string) []string +} + +type userArg []string + +func (a userArg) Append(vals ...string) Arg { + return userArg(append(a, vals...)) //nolint:unconvert +} +func (a userArg) Get(_ []string) []string { + return []string(a) +} + +type defaultedArg []string + +func (a defaultedArg) Append(vals ...string) Arg { + return defaultedArg(append(a, vals...)) //nolint:unconvert +} +func (a defaultedArg) Get(defaults []string) []string { + res := append([]string(nil), defaults...) + return append(res, a...) +} + +type dontPassArg struct{} + +func (a dontPassArg) Append(vals ...string) Arg { + return userArg(vals) +} +func (dontPassArg) Get(_ []string) []string { + return nil +} + +type passAsNameArg struct{} + +func (a passAsNameArg) Append(_ ...string) Arg { + return passAsNameArg{} +} +func (passAsNameArg) Get(_ []string) []string { + return []string{} +} + +var ( + // DontPass indicates that the given argument will not actually be + // rendered. + DontPass Arg = dontPassArg{} + // PassAsName indicates that the given flag will be passed as `--key` + // without any value. + PassAsName Arg = passAsNameArg{} +) + +// AsStrings serializes this set of arguments to a slice of strings appropriate +// for passing to exec.Command and friends, making use of the given defaults +// as indicated for each particular argument. +// +// - Any flag in defaults that's not in Arguments will be present in the output +// - Any flag that's present in Arguments will be passed the corresponding +// defaults to do with as it will (ignore, append-to, suppress, etc). +func (a *Arguments) AsStrings(defaults map[string][]string) []string { + // sort for deterministic ordering + keysInOrder := make([]string, 0, len(defaults)+len(a.values)) + for key := range defaults { + if _, userSet := a.values[key]; userSet { + continue + } + keysInOrder = append(keysInOrder, key) + } + for key := range a.values { + keysInOrder = append(keysInOrder, key) + } + sort.Strings(keysInOrder) + + var res []string + for _, key := range keysInOrder { + vals := a.Get(key).Get(defaults[key]) + switch { + case vals == nil: // don't pass + continue + case len(vals) == 0: // pass as name + res = append(res, "--"+key) + default: + for _, val := range vals { + res = append(res, "--"+key+"="+val) + } + } + } + + return res +} + +// Get returns the value of the given flag. If nil, +// it will not be passed in AsString, otherwise: +// +// len == 0 --> `--key`, len > 0 --> `--key=val1 --key=val2 ...`. +func (a *Arguments) Get(key string) Arg { + if vals, ok := a.values[key]; ok { + return vals + } + return defaultedArg(nil) +} + +// Enable configures the given key to be passed as a "name-only" flag, +// like, `--key`. +func (a *Arguments) Enable(key string) *Arguments { + a.values[key] = PassAsName + return a +} + +// Disable prevents this flag from be passed. +func (a *Arguments) Disable(key string) *Arguments { + a.values[key] = DontPass + return a +} + +// Append adds additional values to this flag. If this flag has +// yet to be set, initial values will include defaults. If you want +// to intentionally ignore defaults/start from scratch, call AppendNoDefaults. +// +// Multiple values will look like `--key=value1 --key=value2 ...`. +func (a *Arguments) Append(key string, values ...string) *Arguments { + vals, present := a.values[key] + if !present { + vals = defaultedArg{} + } + a.values[key] = vals.Append(values...) + return a +} + +// AppendNoDefaults adds additional values to this flag. However, +// unlike Append, it will *not* copy values from defaults. +func (a *Arguments) AppendNoDefaults(key string, values ...string) *Arguments { + vals, present := a.values[key] + if !present { + vals = userArg{} + } + a.values[key] = vals.Append(values...) + return a +} + +// Set resets the given flag to the specified values, ignoring any existing +// values or defaults. +func (a *Arguments) Set(key string, values ...string) *Arguments { + a.values[key] = userArg(values) + return a +} + +// SetRaw sets the given flag to the given Arg value directly. Use this if +// you need to do some complicated deferred logic or something. +// +// Otherwise behaves like Set. +func (a *Arguments) SetRaw(key string, val Arg) *Arguments { + a.values[key] = val + return a +} + +// FuncArg is a basic implementation of Arg that can be used for custom argument logic, +// like pulling values out of APIServer, or dynamically calculating values just before +// launch. +// +// The given function will be mapped directly to Arg#Get, and will generally be +// used in conjunction with SetRaw. For example, to set `--some-flag` to the +// API server's CertDir, you could do: +// +// server.Configure().SetRaw("--some-flag", FuncArg(func(defaults []string) []string { +// return []string{server.CertDir} +// })) +// +// FuncArg ignores Appends; if you need to support appending values too, consider implementing +// Arg directly. +type FuncArg func([]string) []string + +// Append is a no-op for FuncArg, and just returns itself. +func (a FuncArg) Append(vals ...string) Arg { return a } + +// Get delegates functionality to the FuncArg function itself. +func (a FuncArg) Get(defaults []string) []string { + return a(defaults) +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/bin_path_finder.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/bin_path_finder.go new file mode 100644 index 000000000..e1428aa6e --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/bin_path_finder.go @@ -0,0 +1,70 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package process + +import ( + "os" + "path/filepath" + "regexp" + "strings" +) + +const ( + // EnvAssetsPath is the environment variable that stores the global test + // binary location override. + EnvAssetsPath = "KUBEBUILDER_ASSETS" + // EnvAssetOverridePrefix is the environment variable prefix for per-binary + // location overrides. + EnvAssetOverridePrefix = "TEST_ASSET_" + // AssetsDefaultPath is the default location to look for test binaries in, + // if no override was provided. + AssetsDefaultPath = "/usr/local/kubebuilder/bin" +) + +// BinPathFinder finds the path to the given named binary, using the following locations +// in order of precedence (highest first). Notice that the various env vars only need +// to be set -- the asset is not checked for existence on the filesystem. +// +// 1. TEST_ASSET_{tr/a-z-/A-Z_/} (if set; asset overrides -- EnvAssetOverridePrefix) +// 1. KUBEBUILDER_ASSETS (if set; global asset path -- EnvAssetsPath) +// 3. assetDirectory (if set; per-config asset directory) +// 4. /usr/local/kubebuilder/bin (AssetsDefaultPath). +func BinPathFinder(symbolicName, assetDirectory string) (binPath string) { + punctuationPattern := regexp.MustCompile("[^A-Z0-9]+") + sanitizedName := punctuationPattern.ReplaceAllString(strings.ToUpper(symbolicName), "_") + leadingNumberPattern := regexp.MustCompile("^[0-9]+") + sanitizedName = leadingNumberPattern.ReplaceAllString(sanitizedName, "") + envVar := EnvAssetOverridePrefix + sanitizedName + + // TEST_ASSET_XYZ + if val, ok := os.LookupEnv(envVar); ok { + return val + } + + // KUBEBUILDER_ASSETS + if val, ok := os.LookupEnv(EnvAssetsPath); ok { + return filepath.Join(val, symbolicName) + } + + // assetDirectory + if assetDirectory != "" { + return filepath.Join(assetDirectory, symbolicName) + } + + // default path + return filepath.Join(AssetsDefaultPath, symbolicName) +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/process.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/process.go new file mode 100644 index 000000000..4675f9b94 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/internal/testing/process/process.go @@ -0,0 +1,277 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package process + +import ( + "crypto/tls" + "fmt" + "io" + "io/ioutil" + "net" + "net/http" + "net/url" + "os" + "os/exec" + "path" + "regexp" + "sync" + "syscall" + "time" +) + +// ListenAddr represents some listening address and port. +type ListenAddr struct { + Address string + Port string +} + +// URL returns a URL for this address with the given scheme and subpath. +func (l *ListenAddr) URL(scheme string, path string) *url.URL { + return &url.URL{ + Scheme: scheme, + Host: l.HostPort(), + Path: path, + } +} + +// HostPort returns the joined host-port pair for this address. +func (l *ListenAddr) HostPort() string { + return net.JoinHostPort(l.Address, l.Port) +} + +// HealthCheck describes the information needed to health-check a process via +// some health-check URL. +type HealthCheck struct { + url.URL + + // HealthCheckPollInterval is the interval which will be used for polling the + // endpoint described by Host, Port, and Path. + // + // If left empty it will default to 100 Milliseconds. + PollInterval time.Duration +} + +// State define the state of the process. +type State struct { + Cmd *exec.Cmd + + // HealthCheck describes how to check if this process is up. If we get an http.StatusOK, + // we assume the process is ready to operate. + // + // For example, the /healthz endpoint of the k8s API server, or the /health endpoint of etcd. + HealthCheck HealthCheck + + Args []string + + StopTimeout time.Duration + StartTimeout time.Duration + + Dir string + DirNeedsCleaning bool + Path string + + // ready holds wether the process is currently in ready state (hit the ready condition) or not. + // It will be set to true on a successful `Start()` and set to false on a successful `Stop()` + ready bool + + // waitDone is closed when our call to wait finishes up, and indicates that + // our process has terminated. + waitDone chan struct{} + errMu sync.Mutex + exitErr error + exited bool +} + +// Init sets up this process, configuring binary paths if missing, initializing +// temporary directories, etc. +// +// This defaults all defaultable fields. +func (ps *State) Init(name string) error { + if ps.Path == "" { + if name == "" { + return fmt.Errorf("must have at least one of name or path") + } + ps.Path = BinPathFinder(name, "") + } + + if ps.Dir == "" { + newDir, err := ioutil.TempDir("", "k8s_test_framework_") + if err != nil { + return err + } + ps.Dir = newDir + ps.DirNeedsCleaning = true + } + + if ps.StartTimeout == 0 { + ps.StartTimeout = 20 * time.Second + } + + if ps.StopTimeout == 0 { + ps.StopTimeout = 20 * time.Second + } + return nil +} + +type stopChannel chan struct{} + +// CheckFlag checks the help output of this command for the presence of the given flag, specified +// without the leading `--` (e.g. `CheckFlag("insecure-port")` checks for `--insecure-port`), +// returning true if the flag is present. +func (ps *State) CheckFlag(flag string) (bool, error) { + cmd := exec.Command(ps.Path, "--help") + outContents, err := cmd.CombinedOutput() + if err != nil { + return false, fmt.Errorf("unable to run command %q to check for flag %q: %w", ps.Path, flag, err) + } + pat := `(?m)^\s*--` + flag + `\b` // (m --> multi-line --> ^ matches start of line) + matched, err := regexp.Match(pat, outContents) + if err != nil { + return false, fmt.Errorf("unable to check command %q for flag %q in help output: %w", ps.Path, flag, err) + } + return matched, nil +} + +// Start starts the apiserver, waits for it to come up, and returns an error, +// if occurred. +func (ps *State) Start(stdout, stderr io.Writer) (err error) { + if ps.ready { + return nil + } + + ps.Cmd = exec.Command(ps.Path, ps.Args...) + ps.Cmd.Stdout = stdout + ps.Cmd.Stderr = stderr + + ready := make(chan bool) + timedOut := time.After(ps.StartTimeout) + pollerStopCh := make(stopChannel) + go pollURLUntilOK(ps.HealthCheck.URL, ps.HealthCheck.PollInterval, ready, pollerStopCh) + + ps.waitDone = make(chan struct{}) + + if err := ps.Cmd.Start(); err != nil { + ps.errMu.Lock() + defer ps.errMu.Unlock() + ps.exited = true + return err + } + go func() { + defer close(ps.waitDone) + err := ps.Cmd.Wait() + + ps.errMu.Lock() + defer ps.errMu.Unlock() + ps.exitErr = err + ps.exited = true + }() + + select { + case <-ready: + ps.ready = true + return nil + case <-ps.waitDone: + if pollerStopCh != nil { + close(pollerStopCh) + } + return fmt.Errorf("timeout waiting for process %s to start successfully "+ + "(it may have failed to start, or stopped unexpectedly before becoming ready)", + path.Base(ps.Path)) + case <-timedOut: + if pollerStopCh != nil { + close(pollerStopCh) + } + if ps.Cmd != nil { + // intentionally ignore this -- we might've crashed, failed to start, etc + ps.Cmd.Process.Signal(syscall.SIGTERM) //nolint:errcheck + } + return fmt.Errorf("timeout waiting for process %s to start", path.Base(ps.Path)) + } +} + +// Exited returns true if the process exited, and may also +// return an error (as per Cmd.Wait) if the process did not +// exit with error code 0. +func (ps *State) Exited() (bool, error) { + ps.errMu.Lock() + defer ps.errMu.Unlock() + return ps.exited, ps.exitErr +} + +func pollURLUntilOK(url url.URL, interval time.Duration, ready chan bool, stopCh stopChannel) { + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + // there's probably certs *somewhere*, + // but it's fine to just skip validating + // them for health checks during testing + InsecureSkipVerify: true, //nolint:gosec + }, + }, + } + if interval <= 0 { + interval = 100 * time.Millisecond + } + for { + res, err := client.Get(url.String()) + if err == nil { + res.Body.Close() + if res.StatusCode == http.StatusOK { + ready <- true + return + } + } + + select { + case <-stopCh: + return + default: + time.Sleep(interval) + } + } +} + +// Stop stops this process gracefully, waits for its termination, and cleans up +// the CertDir if necessary. +func (ps *State) Stop() error { + // Always clear the directory if we need to. + defer func() { + if ps.DirNeedsCleaning { + _ = os.RemoveAll(ps.Dir) + } + }() + if ps.Cmd == nil { + return nil + } + if done, _ := ps.Exited(); done { + return nil + } + if err := ps.Cmd.Process.Signal(syscall.SIGTERM); err != nil { + return fmt.Errorf("unable to signal for process %s to stop: %w", ps.Path, err) + } + + timedOut := time.After(ps.StopTimeout) + + select { + case <-ps.waitDone: + break + case <-timedOut: + return fmt.Errorf("timeout waiting for process %s to stop", path.Base(ps.Path)) + } + ps.ready = false + return nil +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/deleg.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/deleg.go index ed18ae6d1..bbd9c9c75 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/deleg.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/deleg.go @@ -47,7 +47,7 @@ func (p *loggerPromise) WithName(l *DelegatingLogger, name string) *loggerPromis return res } -// WithValues provides a new Logger with the tags appended +// WithValues provides a new Logger with the tags appended. func (p *loggerPromise) WithValues(l *DelegatingLogger, tags ...interface{}) *loggerPromise { res := &loggerPromise{ logger: l, @@ -74,7 +74,7 @@ func (p *loggerPromise) V(l *DelegatingLogger, level int) *loggerPromise { return res } -// Fulfill instantiates the Logger with the provided logger +// Fulfill instantiates the Logger with the provided logger. func (p *loggerPromise) Fulfill(parentLogger logr.Logger) { var logger = parentLogger if p.name != nil { @@ -163,7 +163,7 @@ func (l *DelegatingLogger) V(level int) logr.Logger { return res } -// WithName provides a new Logger with the name appended +// WithName provides a new Logger with the name appended. func (l *DelegatingLogger) WithName(name string) logr.Logger { l.lock.RLock() defer l.lock.RUnlock() @@ -179,7 +179,7 @@ func (l *DelegatingLogger) WithName(name string) logr.Logger { return res } -// WithValues provides a new Logger with the tags appended +// WithValues provides a new Logger with the tags appended. func (l *DelegatingLogger) WithValues(tags ...interface{}) logr.Logger { l.lock.RLock() defer l.lock.RUnlock() diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/null.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/null.go index 4c56f3427..09a5a02eb 100644 --- a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/null.go +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/null.go @@ -29,32 +29,32 @@ type NullLogger struct{} var _ logr.Logger = NullLogger{} -// Info implements logr.InfoLogger +// Info implements logr.InfoLogger. func (NullLogger) Info(_ string, _ ...interface{}) { // Do nothing. } -// Enabled implements logr.InfoLogger +// Enabled implements logr.InfoLogger. func (NullLogger) Enabled() bool { return false } -// Error implements logr.Logger +// Error implements logr.Logger. func (NullLogger) Error(_ error, _ string, _ ...interface{}) { // Do nothing. } -// V implements logr.Logger -func (log NullLogger) V(_ int) logr.InfoLogger { +// V implements logr.Logger. +func (log NullLogger) V(_ int) logr.Logger { return log } -// WithName implements logr.Logger +// WithName implements logr.Logger. func (log NullLogger) WithName(_ string) logr.Logger { return log } -// WithValues implements logr.Logger +// WithValues implements logr.Logger. func (log NullLogger) WithValues(_ ...interface{}) logr.Logger { return log } diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/warning_handler.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/warning_handler.go new file mode 100644 index 000000000..3012fdd41 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/log/warning_handler.go @@ -0,0 +1,76 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package log + +import ( + "sync" + + "github.com/go-logr/logr" +) + +// KubeAPIWarningLoggerOptions controls the behavior +// of a rest.WarningHandler constructed using NewKubeAPIWarningLogger(). +type KubeAPIWarningLoggerOptions struct { + // Deduplicate indicates a given warning message should only be written once. + // Setting this to true in a long-running process handling many warnings can + // result in increased memory use. + Deduplicate bool +} + +// KubeAPIWarningLogger is a wrapper around +// a provided logr.Logger that implements the +// rest.WarningHandler interface. +type KubeAPIWarningLogger struct { + // logger is used to log responses with the warning header + logger logr.Logger + // opts contain options controlling warning output + opts KubeAPIWarningLoggerOptions + // writtenLock gurads written + writtenLock sync.Mutex + // used to keep track of already logged messages + // and help in de-duplication. + written map[string]struct{} +} + +// HandleWarningHeader handles logging for responses from API server that are +// warnings with code being 299 and uses a logr.Logger for it's logging purposes. +func (l *KubeAPIWarningLogger) HandleWarningHeader(code int, agent string, message string) { + if code != 299 || len(message) == 0 { + return + } + + if l.opts.Deduplicate { + l.writtenLock.Lock() + defer l.writtenLock.Unlock() + + if _, alreadyLogged := l.written[message]; alreadyLogged { + return + } + l.written[message] = struct{}{} + } + l.logger.Info(message) +} + +// NewKubeAPIWarningLogger returns an implementation of rest.WarningHandler that logs warnings +// with code = 299 to the provided logr.Logger. +func NewKubeAPIWarningLogger(l logr.Logger, opts KubeAPIWarningLoggerOptions) *KubeAPIWarningLogger { + h := &KubeAPIWarningLogger{logger: l, opts: opts} + if opts.Deduplicate { + h.written = map[string]struct{}{} + } + return h +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go new file mode 100644 index 000000000..af9e673cc --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go @@ -0,0 +1,345 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Package conversion provides implementation for CRD conversion webhook that implements handler for version conversion requests for types that are convertible. + +See pkg/conversion for interface definitions required to ensure an API Type is convertible. +*/ +package conversion + +import ( + "encoding/json" + "fmt" + "net/http" + + apix "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/conversion" + logf "sigs.k8s.io/controller-runtime/pkg/log" +) + +var ( + log = logf.Log.WithName("conversion-webhook") +) + +// Webhook implements a CRD conversion webhook HTTP handler. +type Webhook struct { + scheme *runtime.Scheme + decoder *Decoder +} + +// InjectScheme injects a scheme into the webhook, in order to construct a Decoder. +func (wh *Webhook) InjectScheme(s *runtime.Scheme) error { + var err error + wh.scheme = s + wh.decoder, err = NewDecoder(s) + if err != nil { + return err + } + + return nil +} + +// ensure Webhook implements http.Handler +var _ http.Handler = &Webhook{} + +func (wh *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) { + convertReview := &apix.ConversionReview{} + err := json.NewDecoder(r.Body).Decode(convertReview) + if err != nil { + log.Error(err, "failed to read conversion request") + w.WriteHeader(http.StatusBadRequest) + return + } + + // TODO(droot): may be move the conversion logic to a separate module to + // decouple it from the http layer ? + resp, err := wh.handleConvertRequest(convertReview.Request) + if err != nil { + log.Error(err, "failed to convert", "request", convertReview.Request.UID) + convertReview.Response = errored(err) + } else { + convertReview.Response = resp + } + convertReview.Response.UID = convertReview.Request.UID + convertReview.Request = nil + + err = json.NewEncoder(w).Encode(convertReview) + if err != nil { + log.Error(err, "failed to write response") + return + } +} + +// handles a version conversion request. +func (wh *Webhook) handleConvertRequest(req *apix.ConversionRequest) (*apix.ConversionResponse, error) { + if req == nil { + return nil, fmt.Errorf("conversion request is nil") + } + var objects []runtime.RawExtension + + for _, obj := range req.Objects { + src, gvk, err := wh.decoder.Decode(obj.Raw) + if err != nil { + return nil, err + } + dst, err := wh.allocateDstObject(req.DesiredAPIVersion, gvk.Kind) + if err != nil { + return nil, err + } + err = wh.convertObject(src, dst) + if err != nil { + return nil, err + } + objects = append(objects, runtime.RawExtension{Object: dst}) + } + return &apix.ConversionResponse{ + UID: req.UID, + ConvertedObjects: objects, + Result: metav1.Status{ + Status: metav1.StatusSuccess, + }, + }, nil +} + +// convertObject will convert given a src object to dst object. +// Note(droot): couldn't find a way to reduce the cyclomatic complexity under 10 +// without compromising readability, so disabling gocyclo linter +func (wh *Webhook) convertObject(src, dst runtime.Object) error { + srcGVK := src.GetObjectKind().GroupVersionKind() + dstGVK := dst.GetObjectKind().GroupVersionKind() + + if srcGVK.GroupKind() != dstGVK.GroupKind() { + return fmt.Errorf("src %T and dst %T does not belong to same API Group", src, dst) + } + + if srcGVK == dstGVK { + return fmt.Errorf("conversion is not allowed between same type %T", src) + } + + srcIsHub, dstIsHub := isHub(src), isHub(dst) + srcIsConvertible, dstIsConvertible := isConvertible(src), isConvertible(dst) + + switch { + case srcIsHub && dstIsConvertible: + return dst.(conversion.Convertible).ConvertFrom(src.(conversion.Hub)) + case dstIsHub && srcIsConvertible: + return src.(conversion.Convertible).ConvertTo(dst.(conversion.Hub)) + case srcIsConvertible && dstIsConvertible: + return wh.convertViaHub(src.(conversion.Convertible), dst.(conversion.Convertible)) + default: + return fmt.Errorf("%T is not convertible to %T", src, dst) + } +} + +func (wh *Webhook) convertViaHub(src, dst conversion.Convertible) error { + hub, err := wh.getHub(src) + if err != nil { + return err + } + + if hub == nil { + return fmt.Errorf("%s does not have any Hub defined", src) + } + + err = src.ConvertTo(hub) + if err != nil { + return fmt.Errorf("%T failed to convert to hub version %T : %w", src, hub, err) + } + + err = dst.ConvertFrom(hub) + if err != nil { + return fmt.Errorf("%T failed to convert from hub version %T : %w", dst, hub, err) + } + + return nil +} + +// getHub returns an instance of the Hub for passed-in object's group/kind. +func (wh *Webhook) getHub(obj runtime.Object) (conversion.Hub, error) { + gvks, err := objectGVKs(wh.scheme, obj) + if err != nil { + return nil, err + } + if len(gvks) == 0 { + return nil, fmt.Errorf("error retrieving gvks for object : %v", obj) + } + + var hub conversion.Hub + var hubFoundAlready bool + for _, gvk := range gvks { + instance, err := wh.scheme.New(gvk) + if err != nil { + return nil, fmt.Errorf("failed to allocate an instance for gvk %v: %w", gvk, err) + } + if val, isHub := instance.(conversion.Hub); isHub { + if hubFoundAlready { + return nil, fmt.Errorf("multiple hub version defined for %T", obj) + } + hubFoundAlready = true + hub = val + } + } + return hub, nil +} + +// allocateDstObject returns an instance for a given GVK. +func (wh *Webhook) allocateDstObject(apiVersion, kind string) (runtime.Object, error) { + gvk := schema.FromAPIVersionAndKind(apiVersion, kind) + + obj, err := wh.scheme.New(gvk) + if err != nil { + return obj, err + } + + t, err := meta.TypeAccessor(obj) + if err != nil { + return obj, err + } + + t.SetAPIVersion(apiVersion) + t.SetKind(kind) + + return obj, nil +} + +// IsConvertible determines if given type is convertible or not. For a type +// to be convertible, the group-kind needs to have a Hub type defined and all +// non-hub types must be able to convert to/from Hub. +func IsConvertible(scheme *runtime.Scheme, obj runtime.Object) (bool, error) { + var hubs, spokes, nonSpokes []runtime.Object + + gvks, err := objectGVKs(scheme, obj) + if err != nil { + return false, err + } + if len(gvks) == 0 { + return false, fmt.Errorf("error retrieving gvks for object : %v", obj) + } + + for _, gvk := range gvks { + instance, err := scheme.New(gvk) + if err != nil { + return false, fmt.Errorf("failed to allocate an instance for gvk %v: %w", gvk, err) + } + + if isHub(instance) { + hubs = append(hubs, instance) + continue + } + + if !isConvertible(instance) { + nonSpokes = append(nonSpokes, instance) + continue + } + + spokes = append(spokes, instance) + } + + if len(gvks) == 1 { + return false, nil // single version + } + + if len(hubs) == 0 && len(spokes) == 0 { + // multiple version detected with no conversion implementation. This is + // true for multi-version built-in types. + return false, nil + } + + if len(hubs) == 1 && len(nonSpokes) == 0 { // convertible + return true, nil + } + + return false, PartialImplementationError{ + hubs: hubs, + nonSpokes: nonSpokes, + spokes: spokes, + } +} + +// objectGVKs returns all (Group,Version,Kind) for the Group/Kind of given object. +func objectGVKs(scheme *runtime.Scheme, obj runtime.Object) ([]schema.GroupVersionKind, error) { + // NB: we should not use `obj.GetObjectKind().GroupVersionKind()` to get the + // GVK here, since it is parsed from apiVersion and kind fields and it may + // return empty GVK if obj is an uninitialized object. + objGVKs, _, err := scheme.ObjectKinds(obj) + if err != nil { + return nil, err + } + if len(objGVKs) != 1 { + return nil, fmt.Errorf("expect to get only one GVK for %v", obj) + } + objGVK := objGVKs[0] + knownTypes := scheme.AllKnownTypes() + + var gvks []schema.GroupVersionKind + for gvk := range knownTypes { + if objGVK.GroupKind() == gvk.GroupKind() { + gvks = append(gvks, gvk) + } + } + return gvks, nil +} + +// PartialImplementationError represents an error due to partial conversion +// implementation such as hub without spokes, multiple hubs or spokes without hub. +type PartialImplementationError struct { + gvk schema.GroupVersionKind + hubs []runtime.Object + nonSpokes []runtime.Object + spokes []runtime.Object +} + +func (e PartialImplementationError) Error() string { + if len(e.hubs) == 0 { + return fmt.Sprintf("no hub defined for gvk %s", e.gvk) + } + if len(e.hubs) > 1 { + return fmt.Sprintf("multiple(%d) hubs defined for group-kind '%s' ", + len(e.hubs), e.gvk.GroupKind()) + } + if len(e.nonSpokes) > 0 { + return fmt.Sprintf("%d inconvertible types detected for group-kind '%s'", + len(e.nonSpokes), e.gvk.GroupKind()) + } + return "" +} + +// isHub determines if passed-in object is a Hub or not. +func isHub(obj runtime.Object) bool { + _, yes := obj.(conversion.Hub) + return yes +} + +// isConvertible determines if passed-in object is a convertible. +func isConvertible(obj runtime.Object) bool { + _, yes := obj.(conversion.Convertible) + return yes +} + +// helper to construct error response. +func errored(err error) *apix.ConversionResponse { + return &apix.ConversionResponse{ + Result: metav1.Status{ + Status: metav1.StatusFailure, + Message: err.Error(), + }, + } +} diff --git a/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go new file mode 100644 index 000000000..6a9e9c236 --- /dev/null +++ b/constraint/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go @@ -0,0 +1,47 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package conversion + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +// Decoder knows how to decode the contents of a CRD version conversion +// request into a concrete object. +// TODO(droot): consider reusing decoder from admission pkg for this. +type Decoder struct { + codecs serializer.CodecFactory +} + +// NewDecoder creates a Decoder given the runtime.Scheme +func NewDecoder(scheme *runtime.Scheme) (*Decoder, error) { + return &Decoder{codecs: serializer.NewCodecFactory(scheme)}, nil +} + +// Decode decodes the inlined object. +func (d *Decoder) Decode(content []byte) (runtime.Object, *schema.GroupVersionKind, error) { + deserializer := d.codecs.UniversalDeserializer() + return deserializer.Decode(content, nil, nil) +} + +// DecodeInto decodes the inlined object in the into the passed-in runtime.Object. +func (d *Decoder) DecodeInto(content []byte, into runtime.Object) error { + deserializer := d.codecs.UniversalDeserializer() + return runtime.DecodeInto(deserializer, content, into) +} diff --git a/constraint/vendor/sigs.k8s.io/yaml/.gitignore b/constraint/vendor/sigs.k8s.io/yaml/.gitignore index e256a31e0..2dc92904e 100644 --- a/constraint/vendor/sigs.k8s.io/yaml/.gitignore +++ b/constraint/vendor/sigs.k8s.io/yaml/.gitignore @@ -6,6 +6,10 @@ .project .settings/** +# Idea files +.idea/** +.idea/ + # Emacs save files *~ diff --git a/constraint/vendor/sigs.k8s.io/yaml/.travis.yml b/constraint/vendor/sigs.k8s.io/yaml/.travis.yml index d20e23eff..54ed8f9cb 100644 --- a/constraint/vendor/sigs.k8s.io/yaml/.travis.yml +++ b/constraint/vendor/sigs.k8s.io/yaml/.travis.yml @@ -1,8 +1,7 @@ language: go -dist: xenial -go: - - 1.12.x - - 1.13.x +arch: arm64 +dist: focal +go: 1.15.x script: - diff -u <(echo -n) <(gofmt -d *.go) - diff -u <(echo -n) <(golint $(go list -e ./...) | grep -v YAMLToJSON) diff --git a/constraint/vendor/sigs.k8s.io/yaml/README.md b/constraint/vendor/sigs.k8s.io/yaml/README.md index 5a651d916..e81cc426b 100644 --- a/constraint/vendor/sigs.k8s.io/yaml/README.md +++ b/constraint/vendor/sigs.k8s.io/yaml/README.md @@ -107,8 +107,8 @@ func main() { } fmt.Println(string(y)) /* Output: - name: John age: 30 + name: John */ j2, err := yaml.YAMLToJSON(y) if err != nil { diff --git a/constraint/vendor/sigs.k8s.io/yaml/go.mod b/constraint/vendor/sigs.k8s.io/yaml/go.mod index 7224f3497..818bbb519 100644 --- a/constraint/vendor/sigs.k8s.io/yaml/go.mod +++ b/constraint/vendor/sigs.k8s.io/yaml/go.mod @@ -4,5 +4,5 @@ go 1.12 require ( github.com/davecgh/go-spew v1.1.1 - gopkg.in/yaml.v2 v2.2.8 + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/constraint/vendor/sigs.k8s.io/yaml/go.sum b/constraint/vendor/sigs.k8s.io/yaml/go.sum index 76e49483a..b7b8cbb10 100644 --- a/constraint/vendor/sigs.k8s.io/yaml/go.sum +++ b/constraint/vendor/sigs.k8s.io/yaml/go.sum @@ -1,9 +1,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=