From 683212a961906d910a540831c0d6c041c9930326 Mon Sep 17 00:00:00 2001 From: Cosmin Damian <17934949+cdamian@users.noreply.github.com> Date: Mon, 12 Jun 2023 17:01:49 +0200 Subject: [PATCH] Add endpoint for investor access (#1597) * api: Add investor API endpoint * test: Add more testing funcs * auth: Add more tests * test: Add more unit and integration tests, fix failing tests * permissions: Change constants to camel-case * docs: Update swagger docs * test: Fix http handler test * test: Fix tests that create pools in the bootstrap * deps: Update gsrpc to fa070294f3fb * http: Use the new subkey SS58Encode * loan: Update LoanInfo * deps: Update gsrpc to 9417989 * deps: Update gsrpc to fd861c0 * tests: Fix test and var names * deps: Update chain-custom-types to 81196b7a88cd * test-client: Only log error when context expires * test: Increase testworld timeout, enable parallel test for investor * deps: Update gsrpc to v4.0.13 and chain-custom-types to v1.0.3 * deps: Update chain-custom-types v1.0.4 * loan: Update loan types, update tests * http: Rename validation wrapper to service --- Makefile | 2 +- centchain/api.go | 2 + centchain/test_client.go | 8 +- config/configstore/repository_mock.go | 6 +- documents/client_mock.go | 10 +- documents/document_mock.go | 8 +- go.mod | 21 +- go.sum | 37 +- http/auth.go | 64 +- http/auth/access/admin.go | 48 ++ http/auth/access/admin_test.go | 118 +++ http/auth/access/errors.go | 21 + http/auth/access/factory_mock.go | 48 ++ http/auth/access/investor.go | 150 ++++ http/auth/access/investor_test.go | 542 +++++++++++++ http/auth/access/proxy.go | 80 ++ http/auth/access/proxy_test.go | 221 ++++++ http/auth/access/service.go | 345 +++++++++ http/auth/access/service_mock.go | 57 ++ http/auth/access/service_test.go | 733 ++++++++++++++++++ http/auth/access/validator.go | 14 + http/auth/access/validator_mock.go | 55 ++ http/auth/service.go | 337 -------- http/auth/service_integration_test.go | 222 ------ http/auth/service_mock.go | 52 -- http/auth/service_test.go | 811 -------------------- http/auth/token/decode.go | 72 ++ http/auth/token/decode_test.go | 138 ++++ http/auth/{ => token}/errors.go | 10 +- http/auth/token/sr25519.go | 162 ++++ http/auth/token/sr25519_test.go | 311 ++++++++ http/auth/{ => token}/test_utils.go | 6 +- http/auth/token/token.go | 28 + http/auth/token/validator.go | 54 ++ http/auth/token/validator_mock.go | 39 + http/auth/token/validator_test.go | 57 ++ http/auth/validation.go | 70 -- http/bootstrapper.go | 35 +- http/coreapi/coreapi.go | 17 +- http/router.go | 16 +- http/router_test.go | 184 ++--- http/server_test.go | 56 +- http/swagger.json | 82 +- http/v3/bootstrapper.go | 8 + http/v3/handler.go | 1 + http/v3/handler_test.go | 2 +- http/v3/investor_api.go | 68 ++ http/v3/nft_api.go | 14 +- http/v3/nft_api_test.go | 80 +- http/v3/service.go | 7 + identity/v2/service.go | 4 +- identity/v2/test_bootstrapper.go | 115 +++ nft/v3/service_mock.go | 10 +- pallets/bootstrapper.go | 22 +- pallets/keystore/api.go | 4 +- pallets/loans/api.go | 114 +++ pallets/loans/api_integration_test.go | 218 ++++++ pallets/loans/api_mock.go | 51 ++ pallets/loans/api_test.go | 195 +++++ pallets/permissions/api.go | 115 +++ pallets/permissions/api_integration_test.go | 147 ++++ pallets/permissions/api_mock.go | 51 ++ pallets/permissions/api_test.go | 239 ++++++ pallets/permissions/types.go | 98 +++ pallets/proxy/api.go | 41 +- pallets/proxy/api_integration_test.go | 4 +- {identity/v2 => pallets}/test_utils.go | 510 +++++++++--- pallets/uniques/api.go | 2 +- pallets/utility/api_integration_test.go | 2 +- pending/service_mock.go | 30 +- testingutils/metadata.go | 2 +- testworld/accounts_api_test.go | 10 +- testworld/investor_test.go | 277 +++++++ testworld/park/behavior/client/accounts.go | 10 +- testworld/park/behavior/client/client.go | 14 +- testworld/park/behavior/client/documents.go | 34 +- testworld/park/behavior/client/investor.go | 26 + testworld/park/behavior/client/jobs.go | 2 +- testworld/park/behavior/client/nfts.go | 12 +- testworld/park/behavior/client/roles.go | 12 +- testworld/park/behavior/controller.go | 8 +- testworld/park/bootstrap/bootstrap.go | 19 +- testworld/park/factory/host_account.go | 8 +- testworld/park/host/host_account.go | 15 +- testworld/park/host/signer_account.go | 5 +- validation/errors.go | 1 + validation/validation.go | 10 +- 87 files changed, 5953 insertions(+), 2013 deletions(-) create mode 100644 http/auth/access/admin.go create mode 100644 http/auth/access/admin_test.go create mode 100644 http/auth/access/errors.go create mode 100644 http/auth/access/factory_mock.go create mode 100644 http/auth/access/investor.go create mode 100644 http/auth/access/investor_test.go create mode 100644 http/auth/access/proxy.go create mode 100644 http/auth/access/proxy_test.go create mode 100644 http/auth/access/service.go create mode 100644 http/auth/access/service_mock.go create mode 100644 http/auth/access/service_test.go create mode 100644 http/auth/access/validator.go create mode 100644 http/auth/access/validator_mock.go delete mode 100644 http/auth/service.go delete mode 100644 http/auth/service_integration_test.go delete mode 100644 http/auth/service_mock.go delete mode 100644 http/auth/service_test.go create mode 100644 http/auth/token/decode.go create mode 100644 http/auth/token/decode_test.go rename http/auth/{ => token}/errors.go (76%) create mode 100644 http/auth/token/sr25519.go create mode 100644 http/auth/token/sr25519_test.go rename http/auth/{ => token}/test_utils.go (94%) create mode 100644 http/auth/token/token.go create mode 100644 http/auth/token/validator.go create mode 100644 http/auth/token/validator_mock.go create mode 100644 http/auth/token/validator_test.go delete mode 100644 http/auth/validation.go create mode 100644 http/v3/investor_api.go create mode 100644 pallets/loans/api.go create mode 100644 pallets/loans/api_integration_test.go create mode 100644 pallets/loans/api_mock.go create mode 100644 pallets/loans/api_test.go create mode 100644 pallets/permissions/api.go create mode 100644 pallets/permissions/api_integration_test.go create mode 100644 pallets/permissions/api_mock.go create mode 100644 pallets/permissions/api_test.go create mode 100644 pallets/permissions/types.go rename {identity/v2 => pallets}/test_utils.go (52%) create mode 100644 testworld/investor_test.go create mode 100644 testworld/park/behavior/client/investor.go diff --git a/Makefile b/Makefile index 2f1271dca..072f64936 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ run-integration-tests: run-testworld-tests: @rm -rf profile.out - go test ./... -v -race -coverprofile=profile.out -covermode=atomic -tags=testworld -timeout 70m + go test ./... -v -race -coverprofile=profile.out -covermode=atomic -tags=testworld -timeout 80m install: ## Builds and Install binary @go install -ldflags "-X github.com/centrifuge/pod/version.gitCommit=`git rev-parse HEAD`" ./cmd/centrifuge/... diff --git a/centchain/api.go b/centchain/api.go index 44eb7ab34..bc3b8cb95 100644 --- a/centchain/api.go +++ b/centchain/api.go @@ -386,6 +386,8 @@ func (a *api) getDispatcherRunnerFunc( eventsRaw, err := a.checkExtrinsicEventSuccess(meta, bh, extIdx) if err != nil { + log.Errorf("Couldn't check extrinsic event success in block %d", *blockNumber) + return nil, err } diff --git a/centchain/test_client.go b/centchain/test_client.go index 558923287..d312db4ff 100644 --- a/centchain/test_client.go +++ b/centchain/test_client.go @@ -87,9 +87,15 @@ func (f *TestClient) SubmitAndWait(ctx context.Context, senderKrp signature.Keyr ticker := time.NewTicker(submitTransferInterval) defer ticker.Stop() + var lastErr error + for { select { case <-ctx.Done(): + if lastErr != nil { + log.Errorf("Couldn't submit extrinsic: %s", lastErr) + } + return nil, fmt.Errorf("context done while submitting transfer: %w", ctx.Err()) case <-ticker.C: blockHash, err := f.submitExtrinsic(ctx, senderKrp, fn) @@ -98,7 +104,7 @@ func (f *TestClient) SubmitAndWait(ctx context.Context, senderKrp signature.Keyr return blockHash, nil } - log.Errorf("Couldn't submit extrinsic: %s", err) + lastErr = err } } } diff --git a/config/configstore/repository_mock.go b/config/configstore/repository_mock.go index e2e7db9dc..66fe36c50 100644 --- a/config/configstore/repository_mock.go +++ b/config/configstore/repository_mock.go @@ -40,7 +40,7 @@ func (_m *RepositoryMock) CreateConfig(cfg config.Configuration) error { return r0 } -// CreateNodeAdmin provides a mock function with given fields: nodeAdmin +// CreatePodAdmin provides a mock function with given fields: nodeAdmin func (_m *RepositoryMock) CreatePodAdmin(nodeAdmin config.PodAdmin) error { ret := _m.Called(nodeAdmin) @@ -165,7 +165,7 @@ func (_m *RepositoryMock) GetConfig() (config.Configuration, error) { return r0, r1 } -// GetNodeAdmin provides a mock function with given fields: +// GetPodAdmin provides a mock function with given fields: func (_m *RepositoryMock) GetPodAdmin() (config.PodAdmin, error) { ret := _m.Called() @@ -259,7 +259,7 @@ func (_m *RepositoryMock) UpdateConfig(cfg config.Configuration) error { return r0 } -// UpdateNodeAdmin provides a mock function with given fields: nodeAdmin +// UpdatePodAdmin provides a mock function with given fields: nodeAdmin func (_m *RepositoryMock) UpdatePodAdmin(nodeAdmin config.PodAdmin) error { ret := _m.Called(nodeAdmin) diff --git a/documents/client_mock.go b/documents/client_mock.go index 6727ca33f..da49d62fd 100644 --- a/documents/client_mock.go +++ b/documents/client_mock.go @@ -18,13 +18,13 @@ type ClientMock struct { mock.Mock } -// GetDocumentRequest provides a mock function with given fields: ctx, requesterID, in -func (_m *ClientMock) GetDocumentRequest(ctx context.Context, requesterID *types.AccountID, in *p2ppb.GetDocumentRequest) (*p2ppb.GetDocumentResponse, error) { - ret := _m.Called(ctx, requesterID, in) +// GetDocumentRequest provides a mock function with given fields: ctx, documentOwner, in +func (_m *ClientMock) GetDocumentRequest(ctx context.Context, documentOwner *types.AccountID, in *p2ppb.GetDocumentRequest) (*p2ppb.GetDocumentResponse, error) { + ret := _m.Called(ctx, documentOwner, in) var r0 *p2ppb.GetDocumentResponse if rf, ok := ret.Get(0).(func(context.Context, *types.AccountID, *p2ppb.GetDocumentRequest) *p2ppb.GetDocumentResponse); ok { - r0 = rf(ctx, requesterID, in) + r0 = rf(ctx, documentOwner, in) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*p2ppb.GetDocumentResponse) @@ -33,7 +33,7 @@ func (_m *ClientMock) GetDocumentRequest(ctx context.Context, requesterID *types var r1 error if rf, ok := ret.Get(1).(func(context.Context, *types.AccountID, *p2ppb.GetDocumentRequest) error); ok { - r1 = rf(ctx, requesterID, in) + r1 = rf(ctx, documentOwner, in) } else { r1 = ret.Error(1) } diff --git a/documents/document_mock.go b/documents/document_mock.go index c15e819ea..53428a023 100644 --- a/documents/document_mock.go +++ b/documents/document_mock.go @@ -750,13 +750,13 @@ func (_m *DocumentMock) JSON() ([]byte, error) { return r0, r1 } -// NFTCanRead provides a mock function with given fields: registryID, tokenID -func (_m *DocumentMock) NFTCanRead(registryID []byte, tokenID []byte) bool { - ret := _m.Called(registryID, tokenID) +// NFTCanRead provides a mock function with given fields: encodedCollectionID, encodedItemID +func (_m *DocumentMock) NFTCanRead(encodedCollectionID []byte, encodedItemID []byte) bool { + ret := _m.Called(encodedCollectionID, encodedItemID) var r0 bool if rf, ok := ret.Get(0).(func([]byte, []byte) bool); ok { - r0 = rf(registryID, tokenID) + r0 = rf(encodedCollectionID, encodedItemID) } else { r0 = ret.Get(0).(bool) } diff --git a/go.mod b/go.mod index 4f4c8a25b..ff81a7ae6 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/Masterminds/semver v1.5.0 github.com/centrifuge/centrifuge-protobufs v1.0.0 - github.com/centrifuge/chain-custom-types v1.0.2 - github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 + github.com/centrifuge/chain-custom-types v1.0.4 + github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.13 github.com/centrifuge/gocelery/v2 v2.0.0-20221101190423-3b07af1b49a6 github.com/centrifuge/precise-proofs v1.0.0 github.com/common-nighthawk/go-figure v0.0.0-20200609044655-c4b36f998cf2 @@ -39,11 +39,11 @@ require ( github.com/stretchr/testify v1.7.2 github.com/swaggo/swag v1.7.0 github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a - github.com/vedhavyas/go-subkey v1.0.3 + github.com/vedhavyas/go-subkey v1.0.4 github.com/vedhavyas/go-subkey/v2 v2.0.0 github.com/whyrusleeping/go-logging v0.0.1 - golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d - golang.org/x/net v0.0.0-20220607020251-c690dde0001d + golang.org/x/crypto v0.7.0 + golang.org/x/net v0.8.0 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.28.0 ) @@ -214,12 +214,11 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect - golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/tools v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183 // indirect gopkg.in/ini.v1 v1.62.0 // indirect diff --git a/go.sum b/go.sum index 483bd3fda..bee62a886 100644 --- a/go.sum +++ b/go.sum @@ -126,12 +126,12 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/centrifuge/centrifuge-protobufs v1.0.0 h1:ZPg0XpkTrGrjQu8scXjMGs7jjqsWPiXmOXdV/bz30ng= github.com/centrifuge/centrifuge-protobufs v1.0.0/go.mod h1:VL6mcnK6vTRiFljHP39J0WBI3Uu5BHQjhdFkCxY9/9I= -github.com/centrifuge/chain-custom-types v1.0.2 h1:wlHjlK4phXEMVHXQX8JeUuHhINa25RFUg5FFLs1r5JQ= -github.com/centrifuge/chain-custom-types v1.0.2/go.mod h1:hrD9djuAUOJXxV6iYv0Nexw69V/ywk38pTT4waJaakw= +github.com/centrifuge/chain-custom-types v1.0.4 h1:B/7Ehgbu+FA2KdvmAGYiHmBwNOOcuc/oH8TYj0qc8ZY= +github.com/centrifuge/chain-custom-types v1.0.4/go.mod h1:kSUJ3O83vaLutJIiaEfqwn3lfTaisn/G/baS8WrycTg= github.com/centrifuge/go-merkle v0.0.0-20190727075423-0ac78bbbc01b h1:TPvvMcGAc3TVBVgQ4XYYEWTXxYls8YuylZ8JzrVxPzc= github.com/centrifuge/go-merkle v0.0.0-20190727075423-0ac78bbbc01b/go.mod h1:0voJY6Qzxvr2S0LeDSFQiCnJzGq5gORg2SwCmn8602I= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.13 h1:U4DvCQdYgTXSRtSbW/cPxKr45KiRqq3xWoImd8n/wj8= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.13/go.mod h1:szA5wf9suAIcNg/1S3rGeFITHqrnqH5TC6b+O0SEQ94= github.com/centrifuge/gocelery/v2 v2.0.0-20221101190423-3b07af1b49a6 h1:0/y+LOu+sAnIlXNsvCYmxUY9n6OiCyhT/37KoYKEFSk= github.com/centrifuge/gocelery/v2 v2.0.0-20221101190423-3b07af1b49a6/go.mod h1:q6PvyLLCu1IQcE2dFv8advWprzY5b5GtZYRU/bH9nWE= github.com/centrifuge/precise-proofs v1.0.0 h1:hcXSK2d5aPEZUa09p+aoyw9ofKI6Twip+UMIx+sJKYc= @@ -1314,8 +1314,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.14.0 h1:67bfuW9azCMwW/Jlq/C+VeihNpAuJMWkYPBig1gdi3A= github.com/valyala/fasthttp v1.14.0/go.mod h1:ol1PCaL0dX20wC0htZ7sYCsvCYmrouYra0zHzaclZhE= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/vedhavyas/go-subkey v1.0.3 h1:iKR33BB/akKmcR2PMlXPBeeODjWLM90EL98OrOGs8CA= -github.com/vedhavyas/go-subkey v1.0.3/go.mod h1:CloUaFQSSTdWnINfBRFjVMkWXZANW+nd8+TI5jYcl6Y= +github.com/vedhavyas/go-subkey v1.0.4 h1:QwjBZx4w7qXC2lmqol2jJfhaNXPI9BsgLZiMiCwqGDU= +github.com/vedhavyas/go-subkey v1.0.4/go.mod h1:aOIil/KS9hJlnr9ZSQKSoXdu/MbnkCxG4x9IOlLsMtI= github.com/vedhavyas/go-subkey/v2 v2.0.0 h1:LemDIsrVtRSOkp0FA8HxP6ynfKjeOj3BY2U9UNfeDMA= github.com/vedhavyas/go-subkey/v2 v2.0.0/go.mod h1:95aZ+XDCWAUUynjlmi7BtPExjXgXxByE0WfBwbmIRH4= github.com/vedhavyas/life v0.0.0-20200804102658-e96a0a4f69e3 h1:g0cLRcjmmyzge/oZaOoZYa45j3Num2OzsNU7mrPDi20= @@ -1445,8 +1445,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= 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= @@ -1479,8 +1479,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB 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.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4= -golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1542,8 +1542,9 @@ golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220517181318-183a9ca12b87/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d h1:4SFsTMi4UahlKoloni7L4eYzhFRifURQLw+yv0QDCx8= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1563,8 +1564,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ 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 h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -1652,8 +1654,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e h1:CsOuNlbOuf0mzxJIefr6Q4uAUetRUwZE4qt7VfzP+xo= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1665,8 +1667,9 @@ 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/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/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 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= @@ -1729,8 +1732,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI= -golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 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= diff --git a/http/auth.go b/http/auth.go index 6e80155af..867207b91 100644 --- a/http/auth.go +++ b/http/auth.go @@ -2,78 +2,22 @@ package http import ( "net/http" - "regexp" - "strings" - "github.com/centrifuge/pod/config" - "github.com/centrifuge/pod/contextutil" - httpAuth "github.com/centrifuge/pod/http/auth" + "github.com/centrifuge/pod/http/auth/access" "github.com/centrifuge/pod/utils/httputils" "github.com/go-chi/render" ) -var ( - adminPathRegex = regexp.MustCompile(`^/v2/accounts(|/generate|/0x[a-fA-F0-9]+)$`) -) - -func isAdminPath(path string) bool { - return adminPathRegex.MatchString(path) -} - -func auth(authService httpAuth.Service, cfgService config.Service) func(handler http.Handler) http.Handler { - skippedURLs := map[string]struct{}{ - "/ping": {}, - } - +func auth(validationServices access.ValidationServices) func(handler http.Handler) http.Handler { return func(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - path := r.URL.Path - - if _, ok := skippedURLs[path]; ok { - handler.ServeHTTP(w, r) - return - } - - // Header format -> "Authorization": "Bearer $jw3t" - authHeader := r.Header.Get("Authorization") - bearer := strings.Split(authHeader, " ") - if len(bearer) != 2 { - log.Error("Invalid auth header") - render.Status(r, http.StatusForbidden) - render.JSON(w, r, httputils.HTTPError{Message: "Authentication failed"}) - return - } - accHeader, err := authService.Validate(r.Context(), bearer[1]) - if err != nil { - log.Errorf("Couldn't validate token: %s", err) - render.Status(r, http.StatusForbidden) - render.JSON(w, r, httputils.HTTPError{Message: "Authentication failed"}) - return - } - - if isAdminPath(path) { - if !accHeader.IsAdmin { - log.Error("Account not an admin") - render.Status(r, http.StatusForbidden) - render.JSON(w, r, httputils.HTTPError{Message: "Authentication failed"}) - return - } - - handler.ServeHTTP(w, r) - return - } - - acc, err := cfgService.GetAccount(accHeader.Identity.ToBytes()) - if err != nil { - log.Errorf("Couldn't retrieve account from storage: %s", err) + if err := validationServices.Validate(r); err != nil { + log.Errorf("Couldn't validate access for request: %s", err) render.Status(r, http.StatusForbidden) render.JSON(w, r, httputils.HTTPError{Message: "Authentication failed"}) return } - ctx := contextutil.WithAccount(r.Context(), acc) - - r = r.WithContext(ctx) handler.ServeHTTP(w, r) }) } diff --git a/http/auth/access/admin.go b/http/auth/access/admin.go new file mode 100644 index 000000000..a8202f3ed --- /dev/null +++ b/http/auth/access/admin.go @@ -0,0 +1,48 @@ +package access + +import ( + "net/http" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/config" + authToken "github.com/centrifuge/pod/http/auth/token" + logging "github.com/ipfs/go-log" +) + +type adminAccessValidator struct { + log *logging.ZapEventLogger + configSrv config.Service +} + +func NewAdminAccessValidator(configSrv config.Service) Validator { + log := logging.Logger("http-admin-access-validator") + + return &adminAccessValidator{ + log: log, + configSrv: configSrv, + } +} + +func (a *adminAccessValidator) Validate(_ *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + delegateAccountID, err := authToken.DecodeSS58Address(token.Payload.Address) + + if err != nil { + a.log.Errorf("Couldn't decode admin account ID: %s", err) + + return nil, ErrSS58AddressDecode + } + + podAdmin, err := a.configSrv.GetPodAdmin() + + if err != nil { + a.log.Errorf("Couldn't retrieve POD admin: %s", err) + + return nil, ErrPodAdminRetrieval + } + + if !podAdmin.GetAccountID().Equal(delegateAccountID) { + return nil, ErrNotAdminAccount + } + + return delegateAccountID, nil +} diff --git a/http/auth/access/admin_test.go b/http/auth/access/admin_test.go new file mode 100644 index 000000000..f137acc8b --- /dev/null +++ b/http/auth/access/admin_test.go @@ -0,0 +1,118 @@ +//go:build unit + +package access + +import ( + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + configMocks "github.com/centrifuge/pod/config" + "github.com/centrifuge/pod/errors" + authToken "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/pod/utils" + "github.com/stretchr/testify/assert" + "github.com/vedhavyas/go-subkey/v2" + + "testing" +) + +func TestAdminAccessValidator_Validate(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + adminAccessValidator := NewAdminAccessValidator(configSrvMock) + + adminAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + adminSS58Address := subkey.SS58Encode(adminAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: adminSS58Address, + }, + } + + podAdmin := configMocks.NewPodAdminMock(t) + podAdmin.On("GetAccountID"). + Return(adminAccountID). + Once() + + configSrvMock.On("GetPodAdmin"). + Return(podAdmin, nil). + Once() + + res, err := adminAccessValidator.Validate(nil, token) + assert.NoError(t, err) + assert.True(t, adminAccountID.Equal(res)) +} + +func TestAdminAccessValidator_Validate_DelegateDecodeError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + adminAccessValidator := NewAdminAccessValidator(configSrvMock) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: "", + }, + } + + res, err := adminAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrSS58AddressDecode) +} + +func TestAdminAccessValidator_Validate_PodAdminRetrievalError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + adminAccessValidator := NewAdminAccessValidator(configSrvMock) + + adminAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + adminSS58Address := subkey.SS58Encode(adminAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: adminSS58Address, + }, + } + + configSrvMock.On("GetPodAdmin"). + Return(nil, errors.New("error")). + Once() + + res, err := adminAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrPodAdminRetrieval) +} + +func TestAdminAccessValidator_Validate_ValidationError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + adminAccessValidator := NewAdminAccessValidator(configSrvMock) + + randomAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + + adminAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + randomAccountSS58Address := subkey.SS58Encode(randomAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: randomAccountSS58Address, + }, + } + + podAdmin := configMocks.NewPodAdminMock(t) + podAdmin.On("GetAccountID"). + Return(adminAccountID). + Once() + + configSrvMock.On("GetPodAdmin"). + Return(podAdmin, nil). + Once() + + res, err := adminAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrNotAdminAccount) +} diff --git a/http/auth/access/errors.go b/http/auth/access/errors.go new file mode 100644 index 000000000..f7a639887 --- /dev/null +++ b/http/auth/access/errors.go @@ -0,0 +1,21 @@ +package access + +import "github.com/centrifuge/pod/errors" + +const ( + ErrSS58AddressDecode = errors.Error("SS58 address decoding") + ErrAccountProxiesRetrieval = errors.Error("account proxies retrieval") + ErrInvalidDelegate = errors.Error("invalid delegate") + ErrPodAdminRetrieval = errors.Error("pod admin retrieval") + ErrNotAdminAccount = errors.Error("provided account is not an admin") + ErrPermissionRolesRetrievalError = errors.Error("permission roles retrieval") + ErrInvalidPoolPermissions = errors.Error("invalid pool permissions") + ErrInvestorAccessParamsRetrieval = errors.Error("investor access params retrieval") + ErrDocumentIDRetrieval = errors.Error("document ID retrieval") + ErrDocumentIDMismatch = errors.Error("document IDs do not match") + ErrCreatedLoanRetrieval = errors.Error("created loan retrieval") + ErrNoValidationServiceForPath = errors.Error("no validator service for request path") + ErrIdentityNotFound = errors.Error("identity not found") + ErrInvalidProxyType = errors.Error("invalid proxy type") + ErrInvalidAuthorizationHeader = errors.Error("invalid authorization header") +) diff --git a/http/auth/access/factory_mock.go b/http/auth/access/factory_mock.go new file mode 100644 index 000000000..fdb2d77da --- /dev/null +++ b/http/auth/access/factory_mock.go @@ -0,0 +1,48 @@ +// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. + +package access + +import mock "github.com/stretchr/testify/mock" + +// ValidationServiceFactoryMock is an autogenerated mock type for the ValidationServiceFactory type +type ValidationServiceFactoryMock struct { + mock.Mock +} + +// GetValidationServices provides a mock function with given fields: +func (_m *ValidationServiceFactoryMock) GetValidationServices() (ValidationServices, error) { + ret := _m.Called() + + var r0 ValidationServices + if rf, ok := ret.Get(0).(func() ValidationServices); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(ValidationServices) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type NewValidationServiceFactoryMockT interface { + mock.TestingT + Cleanup(func()) +} + +// NewValidationServiceFactoryMock creates a new instance of ValidationServiceFactoryMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewValidationServiceFactoryMock(t NewValidationServiceFactoryMockT) *ValidationServiceFactoryMock { + mock := &ValidationServiceFactoryMock{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/http/auth/access/investor.go b/http/auth/access/investor.go new file mode 100644 index 000000000..82f96c986 --- /dev/null +++ b/http/auth/access/investor.go @@ -0,0 +1,150 @@ +package access + +import ( + "bytes" + "fmt" + "net/http" + "strconv" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + authToken "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/pod/http/coreapi" + nftv3 "github.com/centrifuge/pod/nft/v3" + "github.com/centrifuge/pod/pallets/loans" + "github.com/centrifuge/pod/pallets/permissions" + "github.com/centrifuge/pod/pallets/uniques" + "github.com/ethereum/go-ethereum/common/hexutil" + logging "github.com/ipfs/go-log" +) + +type investorAccessValidator struct { + log *logging.ZapEventLogger + loansAPI loans.API + permissionsAPI permissions.API + uniquesAPI uniques.API +} + +func NewInvestorAccessValidator( + loansAPI loans.API, + permissionsAPI permissions.API, + uniquesAPI uniques.API, +) Validator { + log := logging.Logger("http-investor-access-validator") + + return &investorAccessValidator{ + log: log, + loansAPI: loansAPI, + permissionsAPI: permissionsAPI, + uniquesAPI: uniquesAPI, + } +} + +func (i *investorAccessValidator) Validate(req *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + params, err := getInvestorAccessParams(req) + + if err != nil { + i.log.Errorf("Couldn't get investor access params: %s", err) + + return nil, ErrInvestorAccessParamsRetrieval + } + + investorID, err := authToken.DecodeSS58Address(token.Payload.Address) + + if err != nil { + i.log.Errorf("Couldn't decode investor account ID: %s", err) + + return nil, ErrSS58AddressDecode + } + + if err := i.validatePoolPermissions(investorID, params.PoolID, permissions.PodReadAccess); err != nil { + i.log.Errorf("Couldn't validate investor pool permissions: %s", err) + + return nil, err + } + + return i.validateDocument(params) +} + +type InvestorAccessParams struct { + AssetID []byte + PoolID types.U64 + LoanID types.U64 +} + +func getInvestorAccessParams(req *http.Request) (*InvestorAccessParams, error) { + poolID, err := strconv.Atoi(req.URL.Query().Get(coreapi.PoolIDQueryParam)) + + if err != nil { + return nil, fmt.Errorf("pool ID parsing: %w", err) + } + + loanID, err := strconv.Atoi(req.URL.Query().Get(coreapi.LoanIDQueryParam)) + + if err != nil { + return nil, fmt.Errorf("loan ID parsing: %w", err) + } + + assetID, err := hexutil.Decode(req.URL.Query().Get(coreapi.AssetIDQueryParam)) + + if err != nil { + return nil, fmt.Errorf("asset ID parsing: %w", err) + } + + return &InvestorAccessParams{ + AssetID: assetID, + PoolID: types.U64(poolID), + LoanID: types.U64(loanID), + }, nil +} + +func (i *investorAccessValidator) validatePoolPermissions( + accountID *types.AccountID, + poolID types.U64, + expectedPermissions permissions.PoolAdminRole, +) error { + permissionRoles, err := i.permissionsAPI.GetPermissionRoles(accountID, poolID) + + if err != nil { + i.log.Errorf("Couldn't get permission roles: %s", err) + + return ErrPermissionRolesRetrievalError + } + + if permissionRoles.PoolAdmin&expectedPermissions != expectedPermissions { + i.log.Errorf("Invalid pool permissions: %d", permissionRoles.PoolAdmin) + + return ErrInvalidPoolPermissions + } + + return nil +} + +func (i *investorAccessValidator) validateDocument(params *InvestorAccessParams) (*types.AccountID, error) { + loan, err := i.loansAPI.GetCreatedLoan(params.PoolID, params.LoanID) + + if err != nil { + i.log.Errorf("Couldn't get loan: %s", err) + + return nil, ErrCreatedLoanRetrieval + } + + documentID, err := i.uniquesAPI.GetItemAttribute( + loan.Info.Collateral.CollectionID, + loan.Info.Collateral.ItemID, + []byte(nftv3.DocumentIDAttributeKey), + ) + + if err != nil { + i.log.Errorf("Couldn't get document ID from NFT attribute: %s", err) + + return nil, ErrDocumentIDRetrieval + } + + if !bytes.Equal(params.AssetID, documentID) { + i.log.Error("Document IDs do not match") + + return nil, ErrDocumentIDMismatch + } + + return &loan.Borrower, nil +} diff --git a/http/auth/access/investor_test.go b/http/auth/access/investor_test.go new file mode 100644 index 000000000..bad12b932 --- /dev/null +++ b/http/auth/access/investor_test.go @@ -0,0 +1,542 @@ +//go:build unit + +package access + +import ( + "fmt" + "math/big" + "math/rand" + "net/http" + "net/url" + "testing" + + "github.com/centrifuge/pod/errors" + + "github.com/ethereum/go-ethereum/common/hexutil" + + loanTypes "github.com/centrifuge/chain-custom-types/pkg/loans" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + authToken "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/pod/http/coreapi" + nftv3 "github.com/centrifuge/pod/nft/v3" + "github.com/centrifuge/pod/pallets/loans" + "github.com/centrifuge/pod/pallets/permissions" + "github.com/centrifuge/pod/pallets/uniques" + "github.com/centrifuge/pod/utils" + "github.com/stretchr/testify/assert" + "github.com/vedhavyas/go-subkey" +) + +func TestInvestorAccessValidator_Validate(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investSSS58Address, + }, + } + + permissionRoles := &permissions.PermissionRoles{PoolAdmin: permissions.PodReadAccess} + + permissionsAPIMock.On("GetPermissionRoles", investorAccountID, poolID). + Return(permissionRoles, nil). + Once() + + borrowerAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + collectionID := types.U64(rand.Uint32()) + itemID := types.NewU128(*big.NewInt(rand.Int63())) + + loan := &loans.CreatedLoanStorageEntry{ + Info: loanTypes.LoanInfo{ + Collateral: loanTypes.Asset{ + CollectionID: collectionID, + ItemID: itemID, + }, + }, + Borrower: *borrowerAccountID, + } + + loansAPIMock.On("GetCreatedLoan", poolID, loanID). + Return(loan, nil). + Once() + + uniquesAPIMock.On( + "GetItemAttribute", + collectionID, + itemID, + []byte(nftv3.DocumentIDAttributeKey), + ). + Return([]byte(documentID), nil). + Once() + + res, err := investorAccessValidator.Validate(req, token) + assert.NoError(t, err) + assert.Equal(t, borrowerAccountID, res) +} + +func TestInvestorAccessValidator_Validate_InvalidPoolID(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%s", + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrInvestorAccessParamsRetrieval) +} + +func TestInvestorAccessValidator_Validate_InvalidLoanID(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrInvestorAccessParamsRetrieval) +} + +func TestInvestorAccessValidator_Validate_InvalidAssetID(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrInvestorAccessParamsRetrieval) +} + +func TestInvestorAccessValidator_Validate_InvalidInvestorAccountID(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: "", + }, + } + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrSS58AddressDecode) +} + +func TestInvestorAccessValidator_Validate_PermissionRolesRetrievalError(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + permissionsAPIMock.On("GetPermissionRoles", investorAccountID, poolID). + Return(nil, errors.New("error")). + Once() + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrPermissionRolesRetrievalError) +} + +func TestInvestorAccessValidator_Validate_InvalidPoolPermissions(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + permissionRoles := &permissions.PermissionRoles{PoolAdmin: permissions.Borrower} + + permissionsAPIMock.On("GetPermissionRoles", investorAccountID, poolID). + Return(permissionRoles, nil). + Once() + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrInvalidPoolPermissions) +} + +func TestInvestorAccessValidator_Validate_CreatedLoanRetrievalError(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + permissionRoles := &permissions.PermissionRoles{PoolAdmin: permissions.PodReadAccess} + + permissionsAPIMock.On("GetPermissionRoles", investorAccountID, poolID). + Return(permissionRoles, nil). + Once() + + loansAPIMock.On("GetCreatedLoan", poolID, loanID). + Return(nil, errors.New("error")). + Once() + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrCreatedLoanRetrieval) +} + +func TestInvestorAccessValidator_Validate_DocumentIDRetrievalError(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + permissionRoles := &permissions.PermissionRoles{PoolAdmin: permissions.PodReadAccess} + + permissionsAPIMock.On("GetPermissionRoles", investorAccountID, poolID). + Return(permissionRoles, nil). + Once() + + borrowerAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + collectionID := types.U64(rand.Uint32()) + itemID := types.NewU128(*big.NewInt(rand.Int63())) + + loan := &loans.CreatedLoanStorageEntry{ + Info: loanTypes.LoanInfo{ + Collateral: loanTypes.Asset{ + CollectionID: collectionID, + ItemID: itemID, + }, + }, + Borrower: *borrowerAccountID, + } + + loansAPIMock.On("GetCreatedLoan", poolID, loanID). + Return(loan, nil). + Once() + + uniquesAPIMock.On( + "GetItemAttribute", + collectionID, + itemID, + []byte(nftv3.DocumentIDAttributeKey), + ). + Return(nil, errors.New("error")). + Once() + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrDocumentIDRetrieval) +} + +func TestInvestorAccessValidator_Validate_DocumentIDMismatch(t *testing.T) { + loansAPIMock := loans.NewAPIMock(t) + permissionsAPIMock := permissions.NewAPIMock(t) + uniquesAPIMock := uniques.NewAPIMock(t) + + investorAccessValidator := NewInvestorAccessValidator(loansAPIMock, permissionsAPIMock, uniquesAPIMock) + + poolID := types.U64(rand.Uint32()) + loanID := types.U64(rand.Uint32()) + documentID := "document_id" + + reqURL, err := url.Parse("http://localhost/v3/investors") + assert.NoError(t, err) + + reqURL.RawQuery = fmt.Sprintf( + "%s=%d&%s=%d&%s=%s", + coreapi.PoolIDQueryParam, poolID, + coreapi.LoanIDQueryParam, loanID, + coreapi.AssetIDQueryParam, hexutil.Encode([]byte(documentID)), + ) + + req, err := http.NewRequest(http.MethodGet, reqURL.String(), nil) + assert.NoError(t, err) + + investorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + investorSSS58Address := subkey.SS58Encode(investorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: investorSSS58Address, + }, + } + + permissionRoles := &permissions.PermissionRoles{PoolAdmin: permissions.PodReadAccess} + + permissionsAPIMock.On("GetPermissionRoles", investorAccountID, poolID). + Return(permissionRoles, nil). + Once() + + borrowerAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + collectionID := types.U64(rand.Uint32()) + itemID := types.NewU128(*big.NewInt(rand.Int63())) + + loan := &loans.CreatedLoanStorageEntry{ + Info: loanTypes.LoanInfo{ + Collateral: loanTypes.Asset{ + CollectionID: collectionID, + ItemID: itemID, + }, + }, + Borrower: *borrowerAccountID, + } + + loansAPIMock.On("GetCreatedLoan", poolID, loanID). + Return(loan, nil). + Once() + + uniquesAPIMock.On( + "GetItemAttribute", + collectionID, + itemID, + []byte(nftv3.DocumentIDAttributeKey), + ). + Return([]byte("some_other_document_id"), nil). + Once() + + res, err := investorAccessValidator.Validate(req, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrDocumentIDMismatch) +} diff --git a/http/auth/access/proxy.go b/http/auth/access/proxy.go new file mode 100644 index 000000000..e76de8a45 --- /dev/null +++ b/http/auth/access/proxy.go @@ -0,0 +1,80 @@ +package access + +import ( + "net/http" + + proxyTypes "github.com/centrifuge/chain-custom-types/pkg/proxy" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + authToken "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/pod/pallets/proxy" + logging "github.com/ipfs/go-log" +) + +type proxyAccessValidator struct { + log *logging.ZapEventLogger + proxyAPI proxy.API +} + +func NewProxyAccessValidator( + proxyAPI proxy.API, +) Validator { + log := logging.Logger("http-proxy-access-validator") + + return &proxyAccessValidator{ + log: log, + proxyAPI: proxyAPI, + } +} + +func (p *proxyAccessValidator) Validate(_ *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + delegateAccountID, err := authToken.DecodeSS58Address(token.Payload.Address) + + if err != nil { + p.log.Error("Couldn't decode delegate account ID: %s", err) + + return nil, ErrSS58AddressDecode + } + + delegatorAccountID, err := authToken.DecodeSS58Address(token.Payload.OnBehalfOf) + + if err != nil { + p.log.Error("Couldn't decode delegator account ID: %s", err) + + return nil, ErrSS58AddressDecode + } + + if delegateAccountID.Equal(delegatorAccountID) { + // Skip proxies check if the delegate and the delegator are the same. + return delegateAccountID, nil + } + + // Verify that the delegate is a valid proxy of the delegator. + proxyStorageEntry, err := p.proxyAPI.GetProxies(delegatorAccountID) + + if err != nil { + p.log.Errorf("Couldn't retrieve account proxies: %s", err) + + return nil, ErrAccountProxiesRetrieval + } + + pt := proxyTypes.ProxyTypeValue[token.Payload.ProxyType] + + valid := false + for _, proxyDefinition := range proxyStorageEntry.ProxyDefinitions { + if proxyDefinition.Delegate.Equal(delegateAccountID) { + if uint8(proxyDefinition.ProxyType) == uint8(pt) { + valid = true + break + } + } + } + + if !valid { + p.log.Errorf("Invalid delegate") + + return nil, ErrInvalidDelegate + } + + return delegatorAccountID, nil +} diff --git a/http/auth/access/proxy_test.go b/http/auth/access/proxy_test.go new file mode 100644 index 000000000..9f5346588 --- /dev/null +++ b/http/auth/access/proxy_test.go @@ -0,0 +1,221 @@ +//go:build unit + +package access + +import ( + "testing" + + "github.com/centrifuge/pod/errors" + + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + authToken "github.com/centrifuge/pod/http/auth/token" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/pallets/proxy" + "github.com/centrifuge/pod/utils" + "github.com/stretchr/testify/assert" + "github.com/vedhavyas/go-subkey" +) + +func TestProxyAccessValidator_Validate(t *testing.T) { + proxyAPIMock := proxy.NewAPIMock(t) + + proxyAccessValidator := NewProxyAccessValidator(proxyAPIMock) + + pt := proxyType.Any + + delegateAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: delegateAddress, + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[pt], + }, + } + + proxies := &types.ProxyStorageEntry{ + ProxyDefinitions: []types.ProxyDefinition{ + { + Delegate: *delegateAccountID, + ProxyType: types.U8(pt), + }, + }, + } + + proxyAPIMock.On("GetProxies", delegatorAccountID). + Return(proxies, nil). + Once() + + res, err := proxyAccessValidator.Validate(nil, token) + assert.NoError(t, err) + assert.True(t, res.Equal(delegatorAccountID)) +} + +func TestProxyAccessValidator_Validate_DelegateDecodeError(t *testing.T) { + proxyAPIMock := proxy.NewAPIMock(t) + + proxyAccessValidator := NewProxyAccessValidator(proxyAPIMock) + + pt := proxyType.Any + + delegatorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: "", + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[pt], + }, + } + + res, err := proxyAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrSS58AddressDecode) +} + +func TestProxyAccessValidator_Validate_DelegatorDecodeError(t *testing.T) { + proxyAPIMock := proxy.NewAPIMock(t) + + proxyAccessValidator := NewProxyAccessValidator(proxyAPIMock) + + pt := proxyType.Any + + delegateAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: delegateAddress, + OnBehalfOf: "", + ProxyType: proxyType.ProxyTypeName[pt], + }, + } + + res, err := proxyAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrSS58AddressDecode) +} + +func TestProxyAccessValidator_Validate_SkipProxyCheck(t *testing.T) { + proxyAPIMock := proxy.NewAPIMock(t) + + proxyAccessValidator := NewProxyAccessValidator(proxyAPIMock) + + pt := proxyType.Any + + delegateAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: delegateAddress, + OnBehalfOf: delegateAddress, + ProxyType: proxyType.ProxyTypeName[pt], + }, + } + + res, err := proxyAccessValidator.Validate(nil, token) + assert.NoError(t, err) + assert.True(t, res.Equal(delegateAccountID)) +} + +func TestProxyAccessValidator_Validate_ProxyRetrievalError(t *testing.T) { + proxyAPIMock := proxy.NewAPIMock(t) + + proxyAccessValidator := NewProxyAccessValidator(proxyAPIMock) + + pt := proxyType.Any + + delegateAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: delegateAddress, + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[pt], + }, + } + + proxyAPIMock.On("GetProxies", delegatorAccountID). + Return(nil, errors.New("error")). + Once() + + res, err := proxyAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrAccountProxiesRetrieval) +} + +func TestProxyAccessValidator_Validate_InvalidDelegate(t *testing.T) { + proxyAPIMock := proxy.NewAPIMock(t) + + proxyAccessValidator := NewProxyAccessValidator(proxyAPIMock) + + pt := proxyType.Any + + delegateAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), authToken.CentrifugeNetworkID) + assert.NoError(t, err) + + token := &authToken.JW3Token{ + Payload: &authToken.JW3TPayload{ + Address: delegateAddress, + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[pt], + }, + } + + proxies := &types.ProxyStorageEntry{ + ProxyDefinitions: []types.ProxyDefinition{ + { + Delegate: *delegateAccountID, + // Different from the proxy in the token. + ProxyType: types.U8(proxyType.PodOperation), + }, + }, + } + + proxyAPIMock.On("GetProxies", delegatorAccountID). + Return(proxies, nil). + Once() + + res, err := proxyAccessValidator.Validate(nil, token) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrInvalidDelegate) +} diff --git a/http/auth/access/service.go b/http/auth/access/service.go new file mode 100644 index 000000000..6b653846f --- /dev/null +++ b/http/auth/access/service.go @@ -0,0 +1,345 @@ +package access + +import ( + "net/http" + "regexp" + "strings" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/config" + "github.com/centrifuge/pod/contextutil" + authToken "github.com/centrifuge/pod/http/auth/token" +) + +//go:generate mockery --name ValidationServiceFactory --structname ValidationServiceFactoryMock --filename factory_mock.go --inpackage + +type ValidationServiceFactory interface { + GetValidationServices() (ValidationServices, error) +} + +type validationServiceFactory struct { + configSrv config.Service + proxyAccessValidator Validator + adminAccessValidator Validator + investorAccessValidator Validator +} + +func NewValidationServiceFactory( + configSrv config.Service, + proxyAccessValidator Validator, + adminAccessValidator Validator, + investorAccessValidator Validator, +) ValidationServiceFactory { + return &validationServiceFactory{ + configSrv, + proxyAccessValidator, + adminAccessValidator, + investorAccessValidator, + } +} + +func (v *validationServiceFactory) GetValidationServices() (ValidationServices, error) { + cfg, err := v.configSrv.GetConfig() + + if err != nil { + return nil, err + } + + if !cfg.IsAuthenticationEnabled() { + return ValidationServices{ + getPartialValidationService(v.configSrv), + }, nil + } + + return []ValidationService{ + getAdminValidationService(v.adminAccessValidator), + getInvestorValidationService(v.configSrv, v.investorAccessValidator), + getNoopValidationService(), + getProxyValidationService(v.configSrv, v.proxyAccessValidator), + }, nil +} + +type pathMatcherFn func(path string) bool +type tokenValidationFn func(r *http.Request) (*authToken.JW3Token, error) +type accessValidationFn func(r *http.Request, token *authToken.JW3Token) (*types.AccountID, error) +type postAccessValidationFn func(r *http.Request, accountID *types.AccountID) error + +//go:generate mockery --name ValidationService --structname ValidationServiceMock --filename service_mock.go --inpackage + +type ValidationService interface { + Validate(r *http.Request) error + Matches(path string) bool +} + +type ValidationServices []ValidationService + +func (a ValidationServices) Validate(r *http.Request) error { + path := r.URL.Path + + for _, service := range a { + if !service.Matches(path) { + continue + } + + return service.Validate(r) + } + + return ErrNoValidationServiceForPath +} + +type validationService struct { + pathMatchingFn pathMatcherFn + tokenValidationFn tokenValidationFn + accessValidationFn accessValidationFn + postValidationFn postAccessValidationFn +} + +func NewValidationService( + pathMatchingFn pathMatcherFn, + tokenValidationFn tokenValidationFn, + accessValidationFn accessValidationFn, + postValidationFn postAccessValidationFn, +) ValidationService { + return &validationService{ + pathMatchingFn, + tokenValidationFn, + accessValidationFn, + postValidationFn, + } +} + +func (a *validationService) Validate(r *http.Request) error { + token, err := a.tokenValidationFn(r) + + if err != nil { + return err + } + + identity, err := a.accessValidationFn(r, token) + + if err != nil { + return err + } + + if err := a.postValidationFn(r, identity); err != nil { + return err + } + + return nil +} + +func (a *validationService) Matches(path string) bool { + return a.pathMatchingFn(path) +} + +type adminValidationService struct { + ValidationService +} + +var ( + adminPathRegex = regexp.MustCompile(`^/v2/accounts(|/generate|/0x[a-fA-F0-9]+)$`) +) + +func getAdminValidationService( + adminAccessValidator Validator, +) ValidationService { + service := NewValidationService( + func(path string) bool { + return adminPathRegex.MatchString(path) + }, + + func(r *http.Request) (*authToken.JW3Token, error) { + token, err := getDefaultTokenValidationFn()(r) + + if err != nil { + return nil, err + } + + if token.Payload.ProxyType != authToken.PodAdminProxyType { + return nil, ErrInvalidProxyType + } + + return token, nil + }, + adminAccessValidator.Validate, + func(_ *http.Request, _ *types.AccountID) error { + return nil + }, + ) + + return &adminValidationService{service} +} + +type noopValidationService struct { + ValidationService +} + +var ( + noopAccessValidationPaths = map[string]struct{}{ + "/ping": {}, + } +) + +func getNoopValidationService() ValidationService { + service := NewValidationService( + func(path string) bool { + _, ok := noopAccessValidationPaths[path] + + return ok + }, + func(_ *http.Request) (*authToken.JW3Token, error) { + return nil, nil + }, + func(_ *http.Request, _ *authToken.JW3Token) (*types.AccountID, error) { + return nil, nil + }, + func(r *http.Request, _ *types.AccountID) error { + return nil + }, + ) + + return &noopValidationService{service} +} + +type investValidationService struct { + ValidationService +} + +var ( + investorPathRegex = regexp.MustCompile(`^/v3/investor.*$`) +) + +func getInvestorValidationService( + configSrv config.Service, + investorAccessValidator Validator, +) ValidationService { + service := NewValidationService( + func(path string) bool { + return investorPathRegex.MatchString(path) + }, + getTokenValidationFn(authToken.NewSR25519TokenValidator( + []func(header *authToken.JW3THeader) error{ + authToken.BasicHeaderValidationFn, + authToken.SR25519HeaderValidationFn, + }, + []func(payload *authToken.JW3TPayload) error{ + authToken.BasicPayloadValidationFn, + }, + )), + investorAccessValidator.Validate, + getDefaultPostValidationFn(configSrv), + ) + + return &investValidationService{service} +} + +type proxyValidationService struct { + ValidationService +} + +func getProxyValidationService( + configSrv config.Service, + proxyAccessValidator Validator, +) ValidationService { + service := NewValidationService( + func(_ string) bool { + return true + }, + getDefaultTokenValidationFn(), + proxyAccessValidator.Validate, + getDefaultPostValidationFn(configSrv), + ) + + return &proxyValidationService{service} +} + +type partialValidationService struct { + ValidationService +} + +func getPartialValidationService( + configSrv config.Service, +) ValidationService { + service := NewValidationService( + func(path string) bool { + return true + }, + func(r *http.Request) (*authToken.JW3Token, error) { + token, err := parseToken(r) + + if err != nil { + return nil, nil + } + + return token, nil + }, + func(_ *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + if token == nil { + return nil, nil + } + + return authToken.DecodeSS58Address(token.Payload.Address) + }, + func(r *http.Request, accountID *types.AccountID) error { + if accountID == nil { + return nil + } + + return getDefaultPostValidationFn(configSrv)(r, accountID) + }, + ) + + return &partialValidationService{service} +} + +const ( + authorizationHeaderName = "Authorization" + authorizationHeaderSeparator = " " +) + +func parseToken(r *http.Request) (*authToken.JW3Token, error) { + authHeader := r.Header.Get(authorizationHeaderName) + bearer := strings.Split(authHeader, authorizationHeaderSeparator) + + if len(bearer) != 2 { + return nil, ErrInvalidAuthorizationHeader + } + + return authToken.DecodeJW3Token(bearer[1]) +} + +func getTokenValidationFn(tokenValidator authToken.Validator) tokenValidationFn { + return func(r *http.Request) (*authToken.JW3Token, error) { + token, err := parseToken(r) + + if err != nil { + return nil, err + } + + if err := tokenValidator.Validate(token); err != nil { + return nil, err + } + + return token, nil + } +} + +func getDefaultTokenValidationFn() tokenValidationFn { + return getTokenValidationFn(authToken.DefaultSR25519TokenValidator()) +} + +func getDefaultPostValidationFn(configSrv config.Service) postAccessValidationFn { + return func(r *http.Request, accountID *types.AccountID) error { + acc, err := configSrv.GetAccount(accountID.ToBytes()) + + if err != nil { + return ErrIdentityNotFound + } + + ctx := contextutil.WithAccount(r.Context(), acc) + + *r = *r.WithContext(ctx) + + return nil + } +} diff --git a/http/auth/access/service_mock.go b/http/auth/access/service_mock.go new file mode 100644 index 000000000..6409d5d24 --- /dev/null +++ b/http/auth/access/service_mock.go @@ -0,0 +1,57 @@ +// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. + +package access + +import ( + http "net/http" + + mock "github.com/stretchr/testify/mock" +) + +// ValidationServiceMock is an autogenerated mock type for the ValidationService type +type ValidationServiceMock struct { + mock.Mock +} + +// Matches provides a mock function with given fields: path +func (_m *ValidationServiceMock) Matches(path string) bool { + ret := _m.Called(path) + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(path) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// Validate provides a mock function with given fields: r +func (_m *ValidationServiceMock) Validate(r *http.Request) error { + ret := _m.Called(r) + + var r0 error + if rf, ok := ret.Get(0).(func(*http.Request) error); ok { + r0 = rf(r) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +type NewValidationServiceMockT interface { + mock.TestingT + Cleanup(func()) +} + +// NewValidationServiceMock creates a new instance of ValidationServiceMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewValidationServiceMock(t NewValidationServiceMockT) *ValidationServiceMock { + mock := &ValidationServiceMock{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/http/auth/access/service_test.go b/http/auth/access/service_test.go new file mode 100644 index 000000000..7a06f146f --- /dev/null +++ b/http/auth/access/service_test.go @@ -0,0 +1,733 @@ +//go:build unit + +package access + +import ( + "fmt" + "net/http" + "net/url" + "testing" + + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + configMocks "github.com/centrifuge/pod/config" + "github.com/centrifuge/pod/contextutil" + "github.com/centrifuge/pod/errors" + authToken "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/pod/testingutils/keyrings" + "github.com/centrifuge/pod/utils" + "github.com/stretchr/testify/assert" +) + +func TestValidationServiceFactory(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + proxyAccessValidatorMock := NewValidatorMock(t) + adminAccessValidatorMock := NewValidatorMock(t) + investorAccessValidatorMock := NewValidatorMock(t) + + factory := NewValidationServiceFactory( + configSrvMock, + proxyAccessValidatorMock, + adminAccessValidatorMock, + investorAccessValidatorMock, + ) + + configMock := configMocks.NewConfigurationMock(t) + configMock.On("IsAuthenticationEnabled"). + Return(false). + Once() + + configSrvMock.On("GetConfig"). + Return(configMock, nil) + + res, err := factory.GetValidationServices() + assert.NoError(t, err) + assert.Len(t, res, 1) + assert.IsType(t, &partialValidationService{}, res[0]) + + configMock.On("IsAuthenticationEnabled"). + Return(true). + Once() + + res, err = factory.GetValidationServices() + assert.NoError(t, err) + assert.Len(t, res, 4) + assert.IsType(t, &adminValidationService{}, res[0]) + assert.IsType(t, &investValidationService{}, res[1]) + assert.IsType(t, &noopValidationService{}, res[2]) + assert.IsType(t, &proxyValidationService{}, res[3]) +} + +func TestValidationServices_Validate(t *testing.T) { + validationServiceMock1 := NewValidationServiceMock(t) + validationServiceMock2 := NewValidationServiceMock(t) + + validationServices := ValidationServices{ + validationServiceMock1, + validationServiceMock2, + } + + testPath := "path" + req := &http.Request{URL: &url.URL{Path: testPath}} + + validationServiceMock1.On("Matches", testPath). + Return(true). + Once() + + validationServiceMock1.On("Validate", req). + Return(nil). + Once() + + err := validationServices.Validate(req) + assert.NoError(t, err) + + validationServiceMock1.On("Matches", testPath). + Return(true). + Once() + + validationServiceErr := errors.New("error") + + validationServiceMock1.On("Validate", req). + Return(validationServiceErr). + Once() + + err = validationServices.Validate(req) + assert.ErrorIs(t, err, validationServiceErr) + + validationServiceMock1.On("Matches", testPath). + Return(false). + Once() + + validationServiceMock2.On("Matches", testPath). + Return(true). + Once() + + validationServiceMock2.On("Validate", req). + Return(validationServiceErr). + Once() + + err = validationServices.Validate(req) + assert.ErrorIs(t, err, validationServiceErr) + + validationServiceMock1.On("Matches", testPath). + Return(false). + Once() + + validationServiceMock2.On("Matches", testPath). + Return(false). + Once() + + err = validationServices.Validate(req) + assert.ErrorIs(t, err, ErrNoValidationServiceForPath) +} + +func TestValidationService_Validate(t *testing.T) { + testReq := &http.Request{} + testToken := &authToken.JW3Token{} + testAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + testValidationService := &validationService{ + pathMatchingFn: func(path string) bool { + assert.Equal(t, path, testReq.URL.Path) + return true + }, + tokenValidationFn: func(r *http.Request) (*authToken.JW3Token, error) { + assert.Equal(t, testReq, r) + + return testToken, nil + }, + accessValidationFn: func(r *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + assert.Equal(t, testReq, r) + assert.Equal(t, testToken, token) + + return testAccountID, nil + }, + postValidationFn: func(r *http.Request, accountID *types.AccountID) error { + assert.Equal(t, testReq, r) + assert.True(t, testAccountID.Equal(accountID)) + return nil + }, + } + + err = testValidationService.Validate(testReq) + assert.NoError(t, err) +} + +func TestValidationService_Validate_TokenValidationFnError(t *testing.T) { + testReq := &http.Request{} + testAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + tokenValidationErr := errors.New("error") + + testValidationService := &validationService{ + pathMatchingFn: func(path string) bool { + assert.Equal(t, path, testReq.URL.Path) + return true + }, + tokenValidationFn: func(r *http.Request) (*authToken.JW3Token, error) { + assert.Equal(t, testReq, r) + + return nil, tokenValidationErr + }, + accessValidationFn: func(r *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + t.Fatal("should not reach the access validation function") + return testAccountID, nil + }, + postValidationFn: func(r *http.Request, accountID *types.AccountID) error { + t.Fatal("should not reach the post validation function") + return nil + }, + } + + err = testValidationService.Validate(testReq) + assert.ErrorIs(t, err, tokenValidationErr) +} + +func TestValidationService_Validate_AccessValidationError(t *testing.T) { + testReq := &http.Request{} + testToken := &authToken.JW3Token{} + + accessValidationErr := errors.New("error") + + testValidationService := &validationService{ + pathMatchingFn: func(path string) bool { + assert.Equal(t, path, testReq.URL.Path) + return true + }, + tokenValidationFn: func(r *http.Request) (*authToken.JW3Token, error) { + assert.Equal(t, testReq, r) + + return testToken, nil + }, + accessValidationFn: func(r *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + assert.Equal(t, testReq, r) + assert.Equal(t, testToken, token) + + return nil, accessValidationErr + }, + postValidationFn: func(r *http.Request, accountID *types.AccountID) error { + t.Fatal("should not reach the post validation function") + return nil + }, + } + + err := testValidationService.Validate(testReq) + assert.ErrorIs(t, err, accessValidationErr) +} + +func TestValidationService_Validate_PostValidationError(t *testing.T) { + testReq := &http.Request{} + testToken := &authToken.JW3Token{} + testAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + postValidationErr := errors.New("error") + + testValidationService := &validationService{ + pathMatchingFn: func(path string) bool { + assert.Equal(t, path, testReq.URL.Path) + return true + }, + tokenValidationFn: func(r *http.Request) (*authToken.JW3Token, error) { + assert.Equal(t, testReq, r) + + return testToken, nil + }, + accessValidationFn: func(r *http.Request, token *authToken.JW3Token) (*types.AccountID, error) { + assert.Equal(t, testReq, r) + assert.Equal(t, testToken, token) + + return testAccountID, nil + }, + postValidationFn: func(r *http.Request, accountID *types.AccountID) error { + assert.Equal(t, testReq, r) + assert.True(t, testAccountID.Equal(accountID)) + return postValidationErr + }, + } + + err = testValidationService.Validate(testReq) + assert.ErrorIs(t, err, postValidationErr) +} + +func Test_adminValidationService_Matches(t *testing.T) { + validatorMock := NewValidatorMock(t) + + adminValidationService := getAdminValidationService(validatorMock) + + tests := []struct { + Path string + MatchExpected bool + }{ + { + Path: "/v2/accounts", + MatchExpected: true, + }, + { + Path: "/v2/accounts/generate", + MatchExpected: true, + }, + { + Path: "/v2/accounts/0xabc0123", + MatchExpected: true, + }, + { + Path: "/v2/accounts/0xabc0123/sign", + MatchExpected: false, + }, + } + + for _, test := range tests { + t.Run(test.Path, func(t *testing.T) { + assert.Equal(t, test.MatchExpected, adminValidationService.Matches(test.Path)) + }) + } +} + +func Test_adminValidationService_Validate(t *testing.T) { + validatorMock := NewValidatorMock(t) + + adminValidationService := getAdminValidationService(validatorMock) + + token, tokenStr := getValidTestToken(t, authToken.PodAdminProxyType) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + validatorMock.On("Validate", req, token). + Return(accountID, nil). + Once() + + err = adminValidationService.Validate(req) + assert.NoError(t, err) + + // Validation error + + validationErr := errors.New("error") + + validatorMock.On("Validate", req, token). + Return(nil, validationErr). + Once() + + err = adminValidationService.Validate(req) + assert.ErrorIs(t, err, validationErr) + + // Invalid proxy type + + _, tokenStr = getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + req.Header.Set("Authorization", "Bearer "+tokenStr) + + err = adminValidationService.Validate(req) + assert.ErrorIs(t, err, ErrInvalidProxyType) +} + +func Test_noopValidationService_Validate(t *testing.T) { + noopValidationService := getNoopValidationService() + + req := &http.Request{} + + err := noopValidationService.Validate(req) + assert.NoError(t, err) +} + +func Test_investorValidationService_Matches(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + investorValidationService := getInvestorValidationService(configSrvMock, validatorMock) + + tests := []struct { + Path string + MatchExpected bool + }{ + { + Path: "/v3/investor", + MatchExpected: true, + }, + { + Path: "/v3/investor/asset", + MatchExpected: true, + }, + { + Path: "/v3/investor/test", + MatchExpected: true, + }, + { + Path: "/v2/investor", + MatchExpected: false, + }, + } + + for _, test := range tests { + t.Run(test.Path, func(t *testing.T) { + assert.Equal(t, test.MatchExpected, investorValidationService.Matches(test.Path)) + }) + } +} + +func Test_investorValidationService_Validate(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + investorValidationService := getInvestorValidationService(configSrvMock, validatorMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + validatorMock.On("Validate", req, token). + Return(accountID, nil). + Once() + + accountMock := configMocks.NewAccountMock(t) + + configSrvMock.On("GetAccount", accountID.ToBytes()). + Return(accountMock, nil). + Once() + + err = investorValidationService.Validate(req) + assert.NoError(t, err) + + reqContextAccount, err := contextutil.Account(req.Context()) + assert.NoError(t, err) + + assert.Equal(t, accountMock, reqContextAccount) +} + +func Test_investorValidationService_Validate_ValidationError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + investorValidationService := getInvestorValidationService(configSrvMock, validatorMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + validationErr := errors.New("error") + + validatorMock.On("Validate", req, token). + Return(nil, validationErr). + Once() + + err := investorValidationService.Validate(req) + assert.ErrorIs(t, err, validationErr) +} + +func Test_investorValidationService_Validate_PostValidationError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + investorValidationService := getInvestorValidationService(configSrvMock, validatorMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + validatorMock.On("Validate", req, token). + Return(accountID, nil). + Once() + + configSrvMock.On("GetAccount", accountID.ToBytes()). + Return(nil, errors.New("error")). + Once() + + err = investorValidationService.Validate(req) + assert.ErrorIs(t, err, ErrIdentityNotFound) +} + +func Test_proxyValidationService_Validate(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + proxyValidationService := getProxyValidationService(configSrvMock, validatorMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + validatorMock.On("Validate", req, token). + Return(accountID, nil). + Once() + + accountMock := configMocks.NewAccountMock(t) + + configSrvMock.On("GetAccount", accountID.ToBytes()). + Return(accountMock, nil). + Once() + + err = proxyValidationService.Validate(req) + assert.NoError(t, err) + + reqContextAccount, err := contextutil.Account(req.Context()) + assert.NoError(t, err) + + assert.Equal(t, accountMock, reqContextAccount) +} + +func Test_proxyValidationService_Validate_InvalidProxyType(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + proxyValidationService := getProxyValidationService(configSrvMock, validatorMock) + + _, tokenStr := getValidTestToken(t, "invalid_proxy_type") + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + err := proxyValidationService.Validate(req) + assert.Error(t, err) +} + +func Test_proxyValidationService_Validate_ValidationError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + proxyValidationService := getProxyValidationService(configSrvMock, validatorMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + validationError := errors.New("error") + + validatorMock.On("Validate", req, token). + Return(nil, validationError). + Once() + + err := proxyValidationService.Validate(req) + assert.ErrorIs(t, err, validationError) +} + +func Test_proxyValidationService_Validate_PostValidationError(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + validatorMock := NewValidatorMock(t) + + proxyValidationService := getProxyValidationService(configSrvMock, validatorMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{ + Header: make(map[string][]string), + } + req.Header.Add("Authorization", "Bearer "+tokenStr) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + validatorMock.On("Validate", req, token). + Return(accountID, nil). + Once() + + configSrvMock.On("GetAccount", accountID.ToBytes()). + Return(nil, errors.New("error")). + Once() + + err = proxyValidationService.Validate(req) + assert.ErrorIs(t, err, ErrIdentityNotFound) +} + +func Test_partialValidationService_Validate_NoToken(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + partialValidationService := getPartialValidationService(configSrvMock) + + req := &http.Request{Header: make(map[string][]string)} + + err := partialValidationService.Validate(req) + assert.NoError(t, err) +} + +func Test_partialValidationService_Validate_WithToken(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + partialValidationService := getPartialValidationService(configSrvMock) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{Header: make(map[string][]string)} + req.Header.Add("Authorization", "Bearer "+tokenStr) + + accountID, err := authToken.DecodeSS58Address(token.Payload.Address) + assert.NoError(t, err) + + accountMock := configMocks.NewAccountMock(t) + + configSrvMock.On("GetAccount", accountID.ToBytes()). + Return(accountMock, nil). + Once() + + err = partialValidationService.Validate(req) + assert.NoError(t, err) + + reqContextAccount, err := contextutil.Account(req.Context()) + assert.NoError(t, err) + + assert.Equal(t, accountMock, reqContextAccount) +} + +func Test_partialValidationService_Validate_WithInvalidToken(t *testing.T) { + configSrvMock := configMocks.NewServiceMock(t) + + partialValidationService := getPartialValidationService(configSrvMock) + + req := &http.Request{Header: make(map[string][]string)} + req.Header.Add("Authorization", "Bearer "+"invalid_token") + + err := partialValidationService.Validate(req) + assert.NoError(t, err) + + reqContextAccount, err := contextutil.Account(req.Context()) + assert.Error(t, err) + assert.Nil(t, reqContextAccount) +} + +func Test_parseToken(t *testing.T) { + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{Header: make(map[string][]string)} + req.Header.Add("Authorization", fmt.Sprintf("Bearer%s%s", authorizationHeaderSeparator, tokenStr)) + + res, err := parseToken(req) + assert.NoError(t, err) + assert.Equal(t, token, res) +} + +func Test_parseToken_InvalidAuthHeaders(t *testing.T) { + tests := []struct { + AuthHeader string + ExpectedError error + }{ + { + AuthHeader: "", + ExpectedError: ErrInvalidAuthorizationHeader, + }, + { + AuthHeader: "Bearer", + ExpectedError: ErrInvalidAuthorizationHeader, + }, + { + AuthHeader: "Bearer ", + ExpectedError: authToken.ErrInvalidJW3Token, + }, + { + AuthHeader: "Bearer test", + ExpectedError: authToken.ErrInvalidJW3Token, + }, + } + + for _, test := range tests { + t.Run(test.AuthHeader, func(t *testing.T) { + req := &http.Request{Header: make(map[string][]string)} + req.Header.Add("Authorization", test.AuthHeader) + + res, err := parseToken(req) + assert.ErrorIs(t, err, test.ExpectedError) + assert.Nil(t, res) + }) + } +} + +func Test_getTokenValidationFn(t *testing.T) { + tokenValidatorMock := authToken.NewValidatorMock(t) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{Header: make(map[string][]string)} + req.Header.Add("Authorization", fmt.Sprintf("Bearer%s%s", authorizationHeaderSeparator, tokenStr)) + + tokenValidationFn := getTokenValidationFn(tokenValidatorMock) + + tokenValidatorMock.On("Validate", token). + Return(nil). + Once() + + res, err := tokenValidationFn(req) + assert.NoError(t, err) + assert.Equal(t, token, res) +} + +func Test_getTokenValidationFn_ParseTokenError(t *testing.T) { + tokenValidatorMock := authToken.NewValidatorMock(t) + + req := &http.Request{Header: make(map[string][]string)} + + tokenValidationFn := getTokenValidationFn(tokenValidatorMock) + + res, err := tokenValidationFn(req) + assert.Error(t, err) + assert.Nil(t, res) +} + +func Test_getTokenValidationFn_TokenValidatorError(t *testing.T) { + tokenValidatorMock := authToken.NewValidatorMock(t) + + token, tokenStr := getValidTestToken(t, proxyType.ProxyTypeName[proxyType.Any]) + + req := &http.Request{Header: make(map[string][]string)} + req.Header.Add("Authorization", fmt.Sprintf("Bearer%s%s", authorizationHeaderSeparator, tokenStr)) + + tokenValidationFn := getTokenValidationFn(tokenValidatorMock) + + tokenValidatorError := errors.New("error") + + tokenValidatorMock.On("Validate", token). + Return(tokenValidatorError). + Once() + + res, err := tokenValidationFn(req) + assert.ErrorIs(t, err, tokenValidatorError) + assert.Nil(t, res) +} + +func getValidTestToken(t *testing.T, proxyType string) (*authToken.JW3Token, string) { + accountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) + assert.NoError(t, err) + + tokenStr, err := authToken.CreateJW3Token( + accountID, + accountID, + keyrings.AliceKeyRingPair.URI, + proxyType, + ) + assert.NoError(t, err) + + token, err := authToken.DecodeJW3Token(tokenStr) + assert.NoError(t, err) + + return token, tokenStr +} diff --git a/http/auth/access/validator.go b/http/auth/access/validator.go new file mode 100644 index 000000000..e9a272960 --- /dev/null +++ b/http/auth/access/validator.go @@ -0,0 +1,14 @@ +package access + +import ( + "net/http" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + authToken "github.com/centrifuge/pod/http/auth/token" +) + +//go:generate mockery --name Validator --structname ValidatorMock --filename validator_mock.go --inpackage + +type Validator interface { + Validate(req *http.Request, token *authToken.JW3Token) (*types.AccountID, error) +} diff --git a/http/auth/access/validator_mock.go b/http/auth/access/validator_mock.go new file mode 100644 index 000000000..8b917889e --- /dev/null +++ b/http/auth/access/validator_mock.go @@ -0,0 +1,55 @@ +// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. + +package access + +import ( + http "net/http" + + token "github.com/centrifuge/pod/http/auth/token" + mock "github.com/stretchr/testify/mock" + + types "github.com/centrifuge/go-substrate-rpc-client/v4/types" +) + +// ValidatorMock is an autogenerated mock type for the Validator type +type ValidatorMock struct { + mock.Mock +} + +// Validate provides a mock function with given fields: req, _a1 +func (_m *ValidatorMock) Validate(req *http.Request, _a1 *token.JW3Token) (*types.AccountID, error) { + ret := _m.Called(req, _a1) + + var r0 *types.AccountID + if rf, ok := ret.Get(0).(func(*http.Request, *token.JW3Token) *types.AccountID); ok { + r0 = rf(req, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.AccountID) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(*http.Request, *token.JW3Token) error); ok { + r1 = rf(req, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type NewValidatorMockT interface { + mock.TestingT + Cleanup(func()) +} + +// NewValidatorMock creates a new instance of ValidatorMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewValidatorMock(t NewValidatorMockT) *ValidatorMock { + mock := &ValidatorMock{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/http/auth/service.go b/http/auth/service.go deleted file mode 100644 index e9d036400..000000000 --- a/http/auth/service.go +++ /dev/null @@ -1,337 +0,0 @@ -package auth - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "strings" - - proxyTypes "github.com/centrifuge/chain-custom-types/pkg/proxy" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/pod/config" - "github.com/centrifuge/pod/crypto" - "github.com/centrifuge/pod/errors" - "github.com/centrifuge/pod/pallets/proxy" - "github.com/centrifuge/pod/validation" - logging "github.com/ipfs/go-log" - "github.com/vedhavyas/go-subkey/v2" -) - -//go:generate mockery --name Service --structname ServiceMock --filename service_mock.go --inpackage - -type Service interface { - Validate(ctx context.Context, token string) (*AccountHeader, error) -} - -type JW3THeader struct { - Algorithm string `json:"algorithm"` - AddressType string `json:"address_type"` - TokenType string `json:"token_type"` -} - -type JW3TPayload struct { - IssuedAt string `json:"issued_at"` - NotBefore string `json:"not_before"` - ExpiresAt string `json:"expires_at"` - Address string `json:"address"` - OnBehalfOf string `json:"on_behalf_of"` - ProxyType string `json:"proxy_type"` -} - -type AccountHeader struct { - Identity *types.AccountID - IsAdmin bool -} - -func NewAccountHeader(payload *JW3TPayload) (*AccountHeader, error) { - delegatorAccountID, err := decodeSS58Address(payload.OnBehalfOf) - - if err != nil { - return nil, fmt.Errorf("couldn't decode delegator address: %w", err) - } - - accountHeader := &AccountHeader{ - Identity: delegatorAccountID, - } - - switch payload.ProxyType { - case PodAdminProxyType: - accountHeader.IsAdmin = true - default: - if _, ok := proxyTypes.ProxyTypeValue[payload.ProxyType]; !ok { - return nil, fmt.Errorf("invalid proxy type - %s", payload.ProxyType) - } - } - - return accountHeader, nil -} - -type service struct { - authenticationEnabled bool - log *logging.ZapEventLogger - proxyAPI proxy.API - configSrv config.Service -} - -func NewService( - authenticationEnabled bool, - proxyAPI proxy.API, - configSrv config.Service, -) Service { - log := logging.Logger("http-auth") - - return &service{ - authenticationEnabled: authenticationEnabled, - log: log, - proxyAPI: proxyAPI, - configSrv: configSrv, - } -} - -const ( - // PodAdminProxyType is a special type only used in the pod. - PodAdminProxyType = "PodAdmin" - - tokenSeparator = "." -) - -var ( - allowedProxyTypes = map[string]struct{}{ - PodAdminProxyType: {}, - proxyTypes.ProxyTypeName[proxyTypes.Any]: {}, - proxyTypes.ProxyTypeName[proxyTypes.PodOperation]: {}, - proxyTypes.ProxyTypeName[proxyTypes.PodAuth]: {}, - } -) - -func (s *service) Validate(_ context.Context, token string) (*AccountHeader, error) { - header, payload, signature, err := decodeJW3Token(token) - - if err != nil { - s.log.Errorf("Couldn't decode token: %s", err) - - return nil, err - } - - jw3tHeader, jw3tPayload, err := parseHeaderAndPayload(header, payload) - - if err != nil { - s.log.Errorf("Couldn't parse header and payload: %s", err) - - return nil, err - } - - if !s.authenticationEnabled { - return NewAccountHeader(jw3tPayload) - } - - err = validation.Validate( - validation.NewValidator(jw3tHeader, headerValidationFn), - validation.NewValidator(jw3tPayload, payloadValidationFn), - ) - - if err != nil { - s.log.Errorf("Invalid token: %s", err) - - return nil, err - } - - // Validate Signature - delegateAccountID, err := decodeSS58Address(jw3tPayload.Address) - - if err != nil { - s.log.Errorf("Couldn't decode delegate address: %s", err) - - return nil, ErrSS58AddressDecode - } - - if err := s.validateSignature(header, payload, delegateAccountID.ToBytes(), signature); err != nil { - s.log.Errorf("Invalid signature: %s", err) - - return nil, ErrInvalidSignature - - } - - if jw3tPayload.ProxyType == PodAdminProxyType { - if err := s.validateAdminAccount(delegateAccountID); err != nil { - s.log.Errorf("Invalid admin account: %s", err) - - return nil, err - } - - return NewAccountHeader(jw3tPayload) - } - - delegatorAccountID, err := decodeSS58Address(jw3tPayload.OnBehalfOf) - - if err != nil { - s.log.Errorf("Couldn't decode delegator address: %s", err) - - return nil, ErrSS58AddressDecode - } - - // Verify OnBehalfOf is a valid Identity on the pod - _, err = s.configSrv.GetAccount(delegatorAccountID.ToBytes()) - if err != nil { - s.log.Errorf("Invalid identity: %s", err) - - return nil, ErrInvalidIdentity - } - - // Verify that Address is a valid proxy of OnBehalfOf against the Proxy Pallet with the desired level ProxyType - proxyStorageEntry, err := s.proxyAPI.GetProxies(delegatorAccountID) - - if err != nil { - s.log.Errorf("Couldn't retrieve account proxies: %s", err) - - return nil, ErrAccountProxiesRetrieval - } - - pt := proxyTypes.ProxyTypeValue[jw3tPayload.ProxyType] - - valid := false - for _, proxyDefinition := range proxyStorageEntry.ProxyDefinitions { - if proxyDefinition.Delegate.Equal(delegateAccountID) { - if uint8(proxyDefinition.ProxyType) == uint8(pt) { - valid = true - break - } - } - } - - if !valid { - s.log.Errorf("Invalid delegate") - - return nil, ErrInvalidDelegate - } - - return NewAccountHeader(jw3tPayload) -} - -func decodeSS58Address(address string) (*types.AccountID, error) { - _, publicKey, err := subkey.SS58Decode(address) - if err != nil { - return nil, err - } - - return types.NewAccountID(publicKey) -} - -func (s *service) validateSignature( - header []byte, - payload []byte, - delegatePublicKey []byte, - signature []byte, -) error { - // A normal signed message would be in the form: - // - // json_header.json_payload - signedMessage := strings.Join( - []string{ - string(header), - string(payload), - }, - tokenSeparator, - ) - - // The message that is signed by polkadot JS is in the form: - // - // json_header.json_payload - // - // Example: - // - // { - // "algorithm": "sr25519", - // "token_type": "JW3T", - // "address_type": "ss58" - // }.{ - // "address": "delegate_address", - // "on_behalf_of": "delegator_address", - // "proxy_type": "proxy_type", - // "expires_at": "1663070957", - // "issued_at": "1662984557", - // "not_before": "1662984557" - // } - - // To avoid unnecessary client logic, check both possible variants. - signedMessages := [][]byte{[]byte(signedMessage), wrapSignedMessage(signedMessage)} - - for _, signedMessage := range signedMessages { - if crypto.VerifyMessage(delegatePublicKey, signedMessage, signature, crypto.CurveSr25519) { - return nil - } - } - - return errors.New("invalid signature") -} - -const ( - BytesPrefix = "" - BytesSuffix = "" -) - -// The polkadot JS extension that is signing the token header and payload -// is wrapping the initial message with BytesPrefix and BytesSuffix. -// -// As per: -// https://github.com/polkadot-js/extension/blob/607f4b3e3b045020659587771fd3eba7b3214862/packages/extension-base/src/background/RequestBytesSign.ts#L20 -// https://github.com/polkadot-js/common/blob/11ab3a4f6ba652e8fcfe54b2a6b74e91bd30c693/packages/util/src/u8a/wrap.ts#L13-L14 -func wrapSignedMessage(msg string) []byte { - return []byte(BytesPrefix + msg + BytesSuffix) -} - -func (s *service) validateAdminAccount(accountID *types.AccountID) error { - podAdmin, err := s.configSrv.GetPodAdmin() - - if err != nil { - return ErrPodAdminRetrieval - } - - if !podAdmin.GetAccountID().Equal(accountID) { - return ErrNotAdminAccount - } - - return nil -} - -func decodeJW3Token(token string) ([]byte, []byte, []byte, error) { - fragments := strings.Split(token, tokenSeparator) - if len(fragments) != 3 { - return nil, nil, nil, ErrInvalidJW3Token - } - - headerBytes, err := base64.RawURLEncoding.DecodeString(fragments[0]) - if err != nil { - return nil, nil, nil, ErrBase64HeaderDecoding - } - - payloadBytes, err := base64.RawURLEncoding.DecodeString(fragments[1]) - if err != nil { - return nil, nil, nil, ErrBase64PayloadDecoding - } - - signature, err := base64.RawURLEncoding.DecodeString(fragments[2]) - - if err != nil { - return nil, nil, nil, ErrBase64SignatureDecoding - } - - return headerBytes, payloadBytes, signature, nil -} - -func parseHeaderAndPayload(header, payload []byte) (*JW3THeader, *JW3TPayload, error) { - var jw3tHeader JW3THeader - - if err := json.Unmarshal(header, &jw3tHeader); err != nil { - return nil, nil, ErrJSONHeaderDecoding - } - - var jw3tPayload JW3TPayload - - if err := json.Unmarshal(payload, &jw3tPayload); err != nil { - return nil, nil, ErrJSONPayloadDecoding - } - - return &jw3tHeader, &jw3tPayload, nil -} diff --git a/http/auth/service_integration_test.go b/http/auth/service_integration_test.go deleted file mode 100644 index d1682318a..000000000 --- a/http/auth/service_integration_test.go +++ /dev/null @@ -1,222 +0,0 @@ -//go:build integration - -package auth - -import ( - "context" - "fmt" - "os" - "testing" - - proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" - "github.com/centrifuge/go-substrate-rpc-client/v4/signature" - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - "github.com/centrifuge/pod/bootstrap" - "github.com/centrifuge/pod/bootstrap/bootstrappers/integration_test" - "github.com/centrifuge/pod/bootstrap/bootstrappers/testlogging" - "github.com/centrifuge/pod/centchain" - "github.com/centrifuge/pod/config" - "github.com/centrifuge/pod/config/configstore" - protocolIDDispatcher "github.com/centrifuge/pod/dispatcher" - identityV2 "github.com/centrifuge/pod/identity/v2" - "github.com/centrifuge/pod/jobs" - "github.com/centrifuge/pod/pallets" - "github.com/centrifuge/pod/pallets/proxy" - "github.com/centrifuge/pod/storage/leveldb" - genericUtils "github.com/centrifuge/pod/testingutils/generic" - "github.com/centrifuge/pod/testingutils/keyrings" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/stretchr/testify/assert" - "github.com/vedhavyas/go-subkey/v2" - "github.com/vedhavyas/go-subkey/v2/sr25519" -) - -var integrationTestBootstrappers = []bootstrap.TestBootstrapper{ - &integration_test.Bootstrapper{}, - &testlogging.TestLoggingBootstrapper{}, - &config.Bootstrapper{}, - &leveldb.Bootstrapper{}, - &configstore.Bootstrapper{}, - &jobs.Bootstrapper{}, - centchain.Bootstrapper{}, - &pallets.Bootstrapper{}, - &protocolIDDispatcher.Bootstrapper{}, - &identityV2.AccountTestBootstrapper{}, -} - -var ( - proxyAPI proxy.API - configSrv config.Service -) - -func TestMain(m *testing.M) { - ctx := bootstrap.RunTestBootstrappers(integrationTestBootstrappers, nil) - proxyAPI = genericUtils.GetService[proxy.API](ctx) - configSrv = genericUtils.GetService[config.Service](ctx) - - // Add Bob as PodAuth proxy to Alice. - if err := setupPodAuthProxy(keyrings.AliceKeyRingPair, keyrings.BobKeyRingPair.PublicKey); err != nil { - panic(err) - } - - result := m.Run() - - bootstrap.RunTestTeardown(integrationTestBootstrappers) - - os.Exit(result) -} - -func setupPodAuthProxy(delegatorKeyringPair signature.KeyringPair, delegatePublicKey []byte) error { - delegateAccountID, err := types.NewAccountID(delegatePublicKey) - if err != nil { - return fmt.Errorf("couldn't create delegate account ID: %w", err) - } - - err = proxyAPI.AddProxy(context.Background(), delegateAccountID, proxyType.PodAuth, 0, delegatorKeyringPair) - - if err != nil { - return fmt.Errorf("couldn't add pod auth proxy: %w", err) - } - - return nil -} - -func TestIntegration_Service_Validate(t *testing.T) { - srv := NewService(true, proxyAPI, configSrv) - - accs, err := configSrv.GetAccounts() - assert.NoError(t, err) - assert.NotEmpty(t, accs) - - acc := accs[0] - - podOperator, err := configSrv.GetPodOperator() - assert.NoError(t, err) - - delegatorAccountID := acc.GetIdentity() - - token, err := CreateJW3Token( - podOperator.GetAccountID(), - delegatorAccountID, - podOperator.GetURI(), - proxyType.ProxyTypeName[proxyType.PodOperation], - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.NoError(t, err) - assert.NotNil(t, res) - assert.False(t, res.IsAdmin) -} - -func TestIntegration_Service_Validate_ProxyTypeMismatch(t *testing.T) { - srv := NewService(true, proxyAPI, configSrv) - - accs, err := configSrv.GetAccounts() - assert.NoError(t, err) - assert.NotEmpty(t, accs) - - acc := accs[0] - - podOperator, err := configSrv.GetPodOperator() - assert.NoError(t, err) - - delegatorAccountID := acc.GetIdentity() - - token, err := CreateJW3Token( - podOperator.GetAccountID(), - delegatorAccountID, - podOperator.GetURI(), - // The pod operator is not added as proxy type Any to Alice. - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidDelegate) - assert.Nil(t, res) -} - -func TestIntegration_Service_Validate_InvalidIdentity(t *testing.T) { - srv := NewService(true, proxyAPI, configSrv) - - podOperator, err := configSrv.GetPodOperator() - assert.NoError(t, err) - - // There is no identity created for Charlie. - delegatorAccountID, err := types.NewAccountID(keyrings.CharlieKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - podOperator.GetAccountID(), - delegatorAccountID, - podOperator.GetURI(), - proxyType.ProxyTypeName[proxyType.PodOperation], - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidIdentity) - assert.Nil(t, res) -} - -func TestIntegration_Service_Validate_PodAdmin(t *testing.T) { - srv := NewService(true, proxyAPI, configSrv) - - cfg, err := configSrv.GetConfig() - assert.NoError(t, err) - - podAdminKeyPair, err := subkey.DeriveKeyPair(sr25519.Scheme{}, cfg.GetPodAdminSecretSeed()) - assert.NoError(t, err) - - podAdminAccountID, err := types.NewAccountID(podAdminKeyPair.AccountID()) - assert.NoError(t, err) - - token, err := CreateJW3Token( - podAdminAccountID, - podAdminAccountID, - hexutil.Encode(podAdminKeyPair.Seed()), - PodAdminProxyType, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.NoError(t, err) - assert.NotNil(t, res) - assert.True(t, res.IsAdmin) -} - -func TestIntegration_Service_Validate_PodAdmin_Error(t *testing.T) { - srv := NewService(true, proxyAPI, configSrv) - - podAdmin, err := configSrv.GetPodAdmin() - assert.NoError(t, err) - - randomKeyPair, err := sr25519.Scheme{}.Generate() - assert.NoError(t, err) - - randomAccountID, err := types.NewAccountID(randomKeyPair.AccountID()) - assert.NoError(t, err) - - token, err := CreateJW3Token( - randomAccountID, - podAdmin.GetAccountID(), - hexutil.Encode(randomKeyPair.Seed()), - PodAdminProxyType, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrNotAdminAccount) - assert.Nil(t, res) -} diff --git a/http/auth/service_mock.go b/http/auth/service_mock.go deleted file mode 100644 index f65709461..000000000 --- a/http/auth/service_mock.go +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. - -package auth - -import ( - context "context" - - mock "github.com/stretchr/testify/mock" -) - -// ServiceMock is an autogenerated mock type for the Service type -type ServiceMock struct { - mock.Mock -} - -// Validate provides a mock function with given fields: ctx, token -func (_m *ServiceMock) Validate(ctx context.Context, token string) (*AccountHeader, error) { - ret := _m.Called(ctx, token) - - var r0 *AccountHeader - if rf, ok := ret.Get(0).(func(context.Context, string) *AccountHeader); ok { - r0 = rf(ctx, token) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*AccountHeader) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { - r1 = rf(ctx, token) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type NewServiceMockT interface { - mock.TestingT - Cleanup(func()) -} - -// NewServiceMock creates a new instance of ServiceMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewServiceMock(t NewServiceMockT) *ServiceMock { - mock := &ServiceMock{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/http/auth/service_test.go b/http/auth/service_test.go deleted file mode 100644 index f93dfa112..000000000 --- a/http/auth/service_test.go +++ /dev/null @@ -1,811 +0,0 @@ -//go:build unit - -package auth - -import ( - "context" - "encoding/json" - "fmt" - "testing" - "time" - - proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" - - "github.com/centrifuge/go-substrate-rpc-client/v4/types" - configMocks "github.com/centrifuge/pod/config" - "github.com/centrifuge/pod/config/configstore" - "github.com/centrifuge/pod/errors" - "github.com/centrifuge/pod/pallets/proxy" - testingcommons "github.com/centrifuge/pod/testingutils/common" - "github.com/centrifuge/pod/testingutils/keyrings" - "github.com/centrifuge/pod/utils" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/stretchr/testify/assert" - "github.com/vedhavyas/go-subkey/v2" - "github.com/vedhavyas/go-subkey/v2/sr25519" -) - -func TestService_Validate(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - ctx := context.Background() - - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(nil, nil). - Once() - - proxyRes := &types.ProxyStorageEntry{ - ProxyDefinitions: []types.ProxyDefinition{ - { - Delegate: *delegateAccountID, - ProxyType: 0, - }, - }, - } - - proxyAPIMock.On("GetProxies", delegatorAccountID). - Return(proxyRes, nil). - Once() - - res, err := srv.Validate(ctx, token) - assert.NoError(t, err) - assert.Equal(t, delegatorAccountID, res.Identity) - assert.False(t, res.IsAdmin) -} - -func TestService_Validate_DecodeError(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - ctx := context.Background() - - res, err := srv.Validate(ctx, "invalid_token") - assert.ErrorIs(t, err, ErrInvalidJW3Token) - assert.Nil(t, res) -} - -func TestService_ParseError(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - ctx := context.Background() - - // Token that can be parsed and base64 decoded, however, with invalid data. - token := "aaa.bbb.ccc" - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrJSONHeaderDecoding) - assert.Nil(t, res) -} - -func TestService_Validate_InvalidHeader(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - func(header *JW3THeader, payload *JW3TPayload) { - header.Algorithm = "invalid-algorithm" - }, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidJW3TAlgorithm) - assert.Nil(t, res) -} - -func TestService_Validate_InvalidPayload(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - func(header *JW3THeader, payload *JW3TPayload) { - payload.ProxyType = "invalid-proxy" - }, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidProxyType) - assert.Nil(t, res) -} - -func TestService_Validate_InvalidDelegateAddress(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - func(header *JW3THeader, payload *JW3TPayload) { - payload.Address = "invalid_address" - }, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrSS58AddressDecode) - assert.Nil(t, res) -} - -func TestService_Validate_InvalidSignature(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - func(header *JW3THeader, payload *JW3TPayload) { - // Replace the delegate address with the delegator address so that signature validation fails. - payload.Address = subkey.SS58Encode(delegatorAccountID.ToBytes(), CentrifugeNetworkID) - }, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidSignature) - assert.Nil(t, res) -} - -func TestService_Validate_InvalidDelegatorAddress(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - func(header *JW3THeader, payload *JW3TPayload) { - payload.OnBehalfOf = "invalid-address" - }, - ) - assert.NoError(t, err) - - ctx := context.Background() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrSS58AddressDecode) - assert.Nil(t, res) -} - -func TestService_Validate_ConfigServiceError(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - ctx := context.Background() - - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(nil, errors.New("error")). - Once() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidIdentity) - assert.Nil(t, res) -} - -func TestService_Validate_ProxyServiceError(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - ctx := context.Background() - - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(nil, nil). - Once() - - proxyAPIMock.On("GetProxies", delegatorAccountID). - Return(nil, errors.New("error")). - Once() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrAccountProxiesRetrieval) - assert.Nil(t, res) -} - -func TestService_Validate_NotAProxy(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - ctx := context.Background() - - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(nil, nil). - Once() - - // The delegate is not part of the proxy response. - proxyRes := &types.ProxyStorageEntry{ - ProxyDefinitions: []types.ProxyDefinition{ - { - Delegate: *delegatorAccountID, - ProxyType: 0, - }, - }, - } - - proxyAPIMock.On("GetProxies", delegatorAccountID). - Return(proxyRes, nil). - Once() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidDelegate) - assert.Nil(t, res) -} - -func TestService_Validate_ProxyTypeMismatch(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - // Bob is a proxy of Alice. - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - ctx := context.Background() - - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(nil, nil). - Once() - - proxyRes := &types.ProxyStorageEntry{ - ProxyDefinitions: []types.ProxyDefinition{ - { - Delegate: *delegateAccountID, - // Proxy type any is 0. - ProxyType: 11, - }, - }, - } - - proxyAPIMock.On("GetProxies", delegatorAccountID). - Return(proxyRes, nil). - Once() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrInvalidDelegate) - assert.Nil(t, res) -} - -func TestService_Validate_PodAdmin(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - podAdminKeyPair, err := sr25519.Scheme{}.Generate() - assert.NoError(t, err) - - podAdminAccountID, err := types.NewAccountID(podAdminKeyPair.AccountID()) - assert.NoError(t, err) - - token, err := CreateJW3Token( - podAdminAccountID, - podAdminAccountID, - hexutil.Encode(podAdminKeyPair.Seed()), - PodAdminProxyType, - ) - assert.NoError(t, err) - - ctx := context.Background() - - podAdmin := configstore.NewPodAdmin(podAdminAccountID) - - configServiceMock.On("GetPodAdmin"). - Return(podAdmin, nil). - Once() - - res, err := srv.Validate(ctx, token) - assert.NoError(t, err) - assert.Equal(t, podAdmin.GetAccountID(), res.Identity) - assert.True(t, res.IsAdmin) -} - -func TestService_Validate_PodAdmin_ConfigServiceError(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - podAdminKeyPair, err := sr25519.Scheme{}.Generate() - assert.NoError(t, err) - - podAdminAccountID, err := types.NewAccountID(podAdminKeyPair.AccountID()) - assert.NoError(t, err) - - token, err := CreateJW3Token( - podAdminAccountID, - podAdminAccountID, - hexutil.Encode(podAdminKeyPair.Seed()), - PodAdminProxyType, - ) - assert.NoError(t, err) - - ctx := context.Background() - - configServiceMock.On("GetPodAdmin"). - Return(nil, errors.New("error")). - Once() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrPodAdminRetrieval) - assert.Nil(t, res) -} - -func TestService_Validate_PodAdmin_AdminAccountMismatch(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - podAdminKeyPair, err := sr25519.Scheme{}.Generate() - assert.NoError(t, err) - - podAdminAccountID, err := types.NewAccountID(podAdminKeyPair.AccountID()) - assert.NoError(t, err) - - token, err := CreateJW3Token( - podAdminAccountID, - podAdminAccountID, - hexutil.Encode(podAdminKeyPair.Seed()), - PodAdminProxyType, - ) - assert.NoError(t, err) - - ctx := context.Background() - - randomAccountID, err := testingcommons.GetRandomAccountID() - assert.NoError(t, err) - - podAdmin := configstore.NewPodAdmin(randomAccountID) - - configServiceMock.On("GetPodAdmin"). - Return(podAdmin, nil). - Once() - - res, err := srv.Validate(ctx, token) - assert.ErrorIs(t, err, ErrNotAdminAccount) - assert.Nil(t, res) -} - -func TestService_validateSignature(t *testing.T) { - proxyAPIMock := proxy.NewAPIMock(t) - configServiceMock := configMocks.NewServiceMock(t) - - srv := NewService(true, proxyAPIMock, configServiceMock) - - service := srv.(*service) - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - header, payload, signature, err := decodeJW3Token(token) - assert.NoError(t, err) - - tests := []struct { - Name string - Header []byte - Payload []byte - DelegateAccountID []byte - Signature []byte - ExpectedError bool - }{ - { - Name: "valid signature", - Header: header, - Payload: payload, - DelegateAccountID: delegateAccountID.ToBytes(), - Signature: signature, - ExpectedError: false, - }, - { - Name: "invalid header", - Header: utils.RandomSlice(32), - Payload: payload, - DelegateAccountID: delegateAccountID.ToBytes(), - Signature: signature, - ExpectedError: true, - }, - { - Name: "invalid payload", - Header: header, - Payload: utils.RandomSlice(32), - DelegateAccountID: delegateAccountID.ToBytes(), - Signature: signature, - ExpectedError: true, - }, - { - Name: "invalid delegate", - Header: header, - Payload: payload, - DelegateAccountID: delegatorAccountID.ToBytes(), - Signature: signature, - ExpectedError: true, - }, - { - Name: "invalid signature", - Header: header, - Payload: payload, - DelegateAccountID: delegateAccountID.ToBytes(), - Signature: utils.RandomSlice(32), - ExpectedError: true, - }, - } - - for _, test := range tests { - t.Run(test.Name, func(t *testing.T) { - err := service.validateSignature(test.Header, test.Payload, test.DelegateAccountID, test.Signature) - - if test.ExpectedError { - assert.NotNil(t, err) - return - } - - assert.Nil(t, err) - }) - } -} - -func Test_NewAccountHeader(t *testing.T) { - randomAccountID, err := testingcommons.GetRandomAccountID() - assert.NoError(t, err) - - randomAccountAddress := subkey.SS58Encode(randomAccountID.ToBytes(), CentrifugeNetworkID) - - tests := []struct { - Name string - Payload *JW3TPayload - ExpectedError bool - ExpectedAdmin bool - }{ - { - Name: "valid payload", - Payload: &JW3TPayload{ - OnBehalfOf: randomAccountAddress, - ProxyType: proxyType.ProxyTypeName[proxyType.Any], - }, - ExpectedError: false, - ExpectedAdmin: false, - }, - { - Name: "valid admin payload", - Payload: &JW3TPayload{ - OnBehalfOf: randomAccountAddress, - ProxyType: PodAdminProxyType, - }, - ExpectedError: false, - ExpectedAdmin: true, - }, - { - Name: "invalid delegator address", - Payload: &JW3TPayload{ - OnBehalfOf: "invalid-address", - ProxyType: proxyType.ProxyTypeName[proxyType.Any], - }, - ExpectedError: true, - ExpectedAdmin: false, - }, - { - Name: "invalid proxy type", - Payload: &JW3TPayload{ - OnBehalfOf: randomAccountAddress, - ProxyType: "invalid-proxy", - }, - ExpectedError: true, - ExpectedAdmin: false, - }, - } - - for _, test := range tests { - t.Run(test.Name, func(t *testing.T) { - res, err := NewAccountHeader(test.Payload) - - if test.ExpectedError { - assert.NotNil(t, err) - assert.Nil(t, res) - return - } - - assert.Nil(t, err) - assert.Equal(t, test.ExpectedAdmin, res.IsAdmin) - }) - } -} - -func Test_decodeSS58Address(t *testing.T) { - randomAccountID, err := testingcommons.GetRandomAccountID() - assert.NoError(t, err) - - randomAccountAddress := subkey.SS58Encode(randomAccountID.ToBytes(), CentrifugeNetworkID) - - res, err := decodeSS58Address(randomAccountAddress) - assert.NoError(t, err) - assert.Equal(t, randomAccountID, res) - - res, err = decodeSS58Address("invalid-address") - assert.NotNil(t, err) - assert.Nil(t, res) -} - -func Test_decodeJW3Token(t *testing.T) { - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.Any], - ) - assert.NoError(t, err) - - tests := []struct { - Name string - Token string - ExpectedError error - }{ - { - Name: "valid token", - Token: token, - ExpectedError: nil, - }, - { - Name: "invalid token", - Token: "aaa", - ExpectedError: ErrInvalidJW3Token, - }, - { - Name: "invalid token parts", - Token: "aaa.bbb", - ExpectedError: ErrInvalidJW3Token, - }, - // Use + as invalid base64 since we are using raw url encoding. - { - Name: "invalid header part", - Token: "+++.bbb.ccc", - ExpectedError: ErrBase64HeaderDecoding, - }, - { - Name: "invalid payload part", - Token: "aaa.+++.ccc", - ExpectedError: ErrBase64PayloadDecoding, - }, - { - Name: "invalid signature part", - Token: "aaa.bbb.+++", - ExpectedError: ErrBase64SignatureDecoding, - }, - } - - for _, test := range tests { - t.Run(test.Name, func(t *testing.T) { - header, payload, signature, err := decodeJW3Token(test.Token) - - if test.ExpectedError != nil { - assert.ErrorIs(t, err, test.ExpectedError) - assert.Nil(t, header) - assert.Nil(t, payload) - assert.Nil(t, signature) - return - } - - assert.NoError(t, err) - assert.NotNil(t, header) - assert.NotNil(t, payload) - assert.NotNil(t, signature) - }) - } -} - -func Test_parseHeaderAndPayload(t *testing.T) { - jw3tHeader := JW3THeader{ - Algorithm: "sr25519", - AddressType: "ss58", - TokenType: "jw3t", - } - - headerBytes, err := json.Marshal(jw3tHeader) - assert.NoError(t, err) - - now := time.Now() - - jw3tPayload := JW3TPayload{ - IssuedAt: fmt.Sprintf("%d", now.Unix()), - NotBefore: fmt.Sprintf("%d", now.Unix()), - ExpiresAt: fmt.Sprintf("%d", now.Unix()), - Address: "address", - OnBehalfOf: "on-behalf-of", - ProxyType: "proxy-type", - } - - payloadBytes, err := json.Marshal(jw3tPayload) - assert.NoError(t, err) - - header, payload, err := parseHeaderAndPayload(headerBytes, payloadBytes) - assert.NoError(t, err) - assert.NotNil(t, header) - assert.NotNil(t, payload) - - header, payload, err = parseHeaderAndPayload(utils.RandomSlice(32), payloadBytes) - assert.ErrorIs(t, err, ErrJSONHeaderDecoding) - assert.Nil(t, header) - assert.Nil(t, payload) - - header, payload, err = parseHeaderAndPayload(headerBytes, utils.RandomSlice(32)) - assert.ErrorIs(t, err, ErrJSONPayloadDecoding) - assert.Nil(t, header) - assert.Nil(t, payload) -} diff --git a/http/auth/token/decode.go b/http/auth/token/decode.go new file mode 100644 index 000000000..62b21a71d --- /dev/null +++ b/http/auth/token/decode.go @@ -0,0 +1,72 @@ +package token + +import ( + "encoding/base64" + "encoding/json" + "strings" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/vedhavyas/go-subkey/v2" +) + +const ( + tokenSeparator = "." +) + +func DecodeJW3Token(token string) (*JW3Token, error) { + fragments := strings.Split(token, tokenSeparator) + if len(fragments) != 3 { + return nil, ErrInvalidJW3Token + } + + base64Header := fragments[0] + + jsonHeader, err := base64.RawURLEncoding.DecodeString(base64Header) + if err != nil { + return nil, ErrBase64HeaderDecoding + } + + var jw3tHeader JW3THeader + + if err := json.Unmarshal(jsonHeader, &jw3tHeader); err != nil { + return nil, ErrJSONHeaderDecoding + } + + base64Payload := fragments[1] + + jsonPayload, err := base64.RawURLEncoding.DecodeString(base64Payload) + if err != nil { + return nil, ErrBase64PayloadDecoding + } + + var jw3tPayload JW3TPayload + + if err := json.Unmarshal(jsonPayload, &jw3tPayload); err != nil { + return nil, ErrJSONPayloadDecoding + } + + signature, err := base64.RawURLEncoding.DecodeString(fragments[2]) + + if err != nil { + return nil, ErrBase64SignatureDecoding + } + + return &JW3Token{ + Header: &jw3tHeader, + Base64Header: base64Header, + JSONHeader: jsonHeader, + Payload: &jw3tPayload, + Base64Payload: base64Payload, + JSONPayload: jsonPayload, + Signature: signature, + }, nil +} + +func DecodeSS58Address(address string) (*types.AccountID, error) { + _, publicKey, err := subkey.SS58Decode(address) + if err != nil { + return nil, err + } + + return types.NewAccountID(publicKey) +} diff --git a/http/auth/token/decode_test.go b/http/auth/token/decode_test.go new file mode 100644 index 000000000..bb7f48f71 --- /dev/null +++ b/http/auth/token/decode_test.go @@ -0,0 +1,138 @@ +//go:build unit + +package token + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "strings" + "testing" + "time" + + "github.com/vedhavyas/go-subkey" + + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/testingutils/keyrings" + "github.com/stretchr/testify/assert" +) + +func TestDecodeJW3Token(t *testing.T) { + delegate, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) + assert.NoError(t, err) + + delegator, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) + assert.NoError(t, err) + + token, err := CreateJW3Token( + delegate, + delegator, + keyrings.AliceKeyRingPair.URI, + proxyType.ProxyTypeName[proxyType.Any], + ) + assert.NoError(t, err) + + res, err := DecodeJW3Token(token) + assert.NoError(t, err) + assert.IsType(t, &JW3Token{}, res) +} + +func TestDecodeJW3Token_InvalidToken(t *testing.T) { + tokenHeader := JW3THeader{ + Algorithm: "sr25519", + AddressType: "ss58", + TokenType: "jw3t", + } + + tokenHeaderJson, err := json.Marshal(tokenHeader) + assert.NoError(t, err) + + tokenHeaderBase64 := base64.RawURLEncoding.EncodeToString(tokenHeaderJson) + + now := time.Now() + expireTime := now.Add(1 * time.Hour) + + tokenPayload := &JW3TPayload{ + IssuedAt: fmt.Sprintf("%d", now.Unix()), + NotBefore: fmt.Sprintf("%d", now.Unix()), + ExpiresAt: fmt.Sprintf("%d", expireTime.Unix()), + Address: "delegateAddress", + OnBehalfOf: "delegatorAddress", + ProxyType: "proxyType", + } + + tokenPayloadJson, err := json.Marshal(tokenPayload) + assert.NoError(t, err) + + tokenPayloadBase64 := base64.RawURLEncoding.EncodeToString(tokenPayloadJson) + + tests := []struct { + Name string + TokenHeader string + TokenPayload string + TokenSignature string + ExpectedError error + }{ + { + Name: "Invalid base64 header", + TokenHeader: "!!", + TokenPayload: "", + TokenSignature: "", + ExpectedError: ErrBase64HeaderDecoding, + }, + { + Name: "Invalid json header", + TokenHeader: base64.RawURLEncoding.EncodeToString([]byte("invalid_json")), + TokenPayload: "", + TokenSignature: "", + ExpectedError: ErrJSONHeaderDecoding, + }, + { + Name: "Invalid base64 payload", + TokenHeader: tokenHeaderBase64, + TokenPayload: "!!", + TokenSignature: "", + ExpectedError: ErrBase64PayloadDecoding, + }, + { + Name: "Invalid json payload", + TokenHeader: tokenHeaderBase64, + TokenPayload: base64.RawURLEncoding.EncodeToString([]byte("invalid_json")), + TokenSignature: "", + ExpectedError: ErrJSONPayloadDecoding, + }, + { + Name: "Invalid base64 signature", + TokenHeader: tokenHeaderBase64, + TokenPayload: tokenPayloadBase64, + TokenSignature: "!!", + ExpectedError: ErrBase64SignatureDecoding, + }, + } + + for _, test := range tests { + t.Run(test.Name, func(t *testing.T) { + tokenStr := strings.Join([]string{test.TokenHeader, test.TokenPayload, test.TokenSignature}, tokenSeparator) + + res, err := DecodeJW3Token(tokenStr) + assert.ErrorIs(t, err, test.ExpectedError) + assert.Nil(t, res) + }) + } +} + +func TestDecodeSS58Address(t *testing.T) { + accountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) + assert.NoError(t, err) + + ss58Address := subkey.SS58Encode(accountID.ToBytes(), CentrifugeNetworkID) + + res, err := DecodeSS58Address(ss58Address) + assert.NoError(t, err) + assert.True(t, accountID.Equal(res)) + + res, err = DecodeSS58Address(ss58Address[:len(ss58Address)-2]) + assert.Error(t, err) + assert.Nil(t, res) +} diff --git a/http/auth/errors.go b/http/auth/token/errors.go similarity index 76% rename from http/auth/errors.go rename to http/auth/token/errors.go index 2abed0d45..33297f2f1 100644 --- a/http/auth/errors.go +++ b/http/auth/token/errors.go @@ -1,4 +1,4 @@ -package auth +package token import "github.com/centrifuge/pod/errors" @@ -16,12 +16,8 @@ const ( ErrInactiveToken = errors.Error("token is not active yet") ErrInvalidExpiresAtTimestamp = errors.Error("invalid ExpiresAt timestamp") ErrExpiredToken = errors.Error("token expired") + ErrInvalidProxyType = errors.Error("invalid proxy type") ErrSS58AddressDecode = errors.Error("couldn't decode SS58 address") ErrInvalidSignature = errors.Error("invalid signature") - ErrInvalidIdentity = errors.Error("invalid identity") - ErrAccountProxiesRetrieval = errors.Error("couldn't retrieve account proxies") - ErrInvalidProxyType = errors.Error("invalid proxy type") - ErrInvalidDelegate = errors.Error("invalid delegate") - ErrPodAdminRetrieval = errors.Error("couldn't retrieve pod admin") - ErrNotAdminAccount = errors.Error("provided account is not an admin") + ErrAdminAddressesMismatch = errors.Error("admin addresses don't match") ) diff --git a/http/auth/token/sr25519.go b/http/auth/token/sr25519.go new file mode 100644 index 000000000..32b9809f8 --- /dev/null +++ b/http/auth/token/sr25519.go @@ -0,0 +1,162 @@ +package token + +import ( + "strings" + + proxyTypes "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/pod/crypto" + "github.com/centrifuge/pod/validation" +) + +type sr25519TokenValidatorFn func(token *JW3Token) error + +func (v sr25519TokenValidatorFn) Validate(token *JW3Token) error { + return v(token) +} + +func NewSR25519TokenValidator( + headerValidationFns []func(header *JW3THeader) error, + payloadValidationFn []func(payload *JW3TPayload) error, +) Validator { + return sr25519TokenValidatorFn(func(token *JW3Token) error { + return validation.Validate( + validation.NewValidator(token.Header, headerValidationFns...), + validation.NewValidator(token.Payload, payloadValidationFn...), + validation.NewValidator(token, sr25519SignatureValidationFn), + ) + }) +} + +func DefaultSR25519TokenValidator() Validator { + return NewSR25519TokenValidator( + []func(header *JW3THeader) error{ + BasicHeaderValidationFn, + SR25519HeaderValidationFn, + }, + []func(payload *JW3TPayload) error{ + BasicPayloadValidationFn, + SR25519ProxyTypeValidationFn, + }, + ) +} + +const ( + sr25519Algorithm = "sr25519" + ss58AddressType = "ss58" +) + +var ( + SR25519HeaderValidationFn = func(header *JW3THeader) error { + if strings.ToLower(header.Algorithm) != sr25519Algorithm { + return ErrInvalidJW3TAlgorithm + } + + if strings.ToLower(header.AddressType) != ss58AddressType { + return ErrInvalidJW3TAddressType + } + + return nil + } +) + +const ( + // PodAdminProxyType is a special type only used in the POD. + PodAdminProxyType = "PodAdmin" +) + +var ( + allowedProxyTypes = map[string]struct{}{ + PodAdminProxyType: {}, + proxyTypes.ProxyTypeName[proxyTypes.Any]: {}, + proxyTypes.ProxyTypeName[proxyTypes.PodOperation]: {}, + proxyTypes.ProxyTypeName[proxyTypes.PodAuth]: {}, + } +) + +var ( + SR25519ProxyTypeValidationFn = func(payload *JW3TPayload) error { + if _, ok := allowedProxyTypes[payload.ProxyType]; !ok { + return ErrInvalidProxyType + } + + if payload.ProxyType == PodAdminProxyType { + return sr25519AdminPayloadValidation(payload) + } + + return nil + } + + sr25519AdminPayloadValidation = func(payload *JW3TPayload) error { + if payload.Address != payload.OnBehalfOf { + return ErrAdminAddressesMismatch + } + + return nil + } +) + +const ( + BytesPrefix = "" + BytesSuffix = "" +) + +// The polkadot JS extension that is signing the token header and payload +// is wrapping the initial message with BytesPrefix and BytesSuffix. +// +// As per: +// https://github.com/polkadot-js/extension/blob/607f4b3e3b045020659587771fd3eba7b3214862/packages/extension-base/src/background/RequestBytesSign.ts#L20 +// https://github.com/polkadot-js/common/blob/11ab3a4f6ba652e8fcfe54b2a6b74e91bd30c693/packages/util/src/u8a/wrap.ts#L13-L14 +func wrapSignedMessage(msg string) []byte { + return []byte(BytesPrefix + msg + BytesSuffix) +} + +var ( + sr25519SignatureValidationFn = func(token *JW3Token) error { + delegateAccountID, err := DecodeSS58Address(token.Payload.Address) + + if err != nil { + return ErrSS58AddressDecode + } + + // A normal signed message would be in the form: + // + // json_header.json_payload + signedMessage := strings.Join( + []string{ + string(token.JSONHeader), + string(token.JSONPayload), + }, + tokenSeparator, + ) + + // The message that is signed by polkadot JS is in the form: + // + // json_header.json_payload + // + // Example: + // + // { + // "algorithm": "sr25519", + // "token_type": "JW3T", + // "address_type": "ss58" + // }.{ + // "address": "delegate_address", + // "on_behalf_of": "delegator_address", + // "proxy_type": "proxy_type", + // "expires_at": "1663070957", + // "issued_at": "1662984557", + // "not_before": "1662984557" + // } + + // To avoid unnecessary client logic, check both possible variants. + signedMessages := [][]byte{[]byte(signedMessage), wrapSignedMessage(signedMessage)} + + for _, signedMessage := range signedMessages { + if crypto.VerifyMessage(delegateAccountID.ToBytes(), signedMessage, token.Signature, crypto.CurveSr25519) { + return nil + } + } + + return ErrInvalidSignature + } +) diff --git a/http/auth/token/sr25519_test.go b/http/auth/token/sr25519_test.go new file mode 100644 index 000000000..a5219ebd3 --- /dev/null +++ b/http/auth/token/sr25519_test.go @@ -0,0 +1,311 @@ +//go:build unit + +package token + +import ( + "encoding/json" + "fmt" + "strings" + "testing" + "time" + + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/testingutils/keyrings" + "github.com/centrifuge/pod/utils" + "github.com/stretchr/testify/assert" + "github.com/vedhavyas/go-subkey/v2" + "github.com/vedhavyas/go-subkey/v2/sr25519" +) + +func Test_SR25519HeaderValidationFn(t *testing.T) { + header := &JW3THeader{ + Algorithm: sr25519Algorithm, + AddressType: ss58AddressType, + } + + err := SR25519HeaderValidationFn(header) + assert.NoError(t, err) + + header = &JW3THeader{ + Algorithm: "ed25519", + AddressType: ss58AddressType, + } + + err = SR25519HeaderValidationFn(header) + assert.ErrorIs(t, err, ErrInvalidJW3TAlgorithm) + + header = &JW3THeader{ + Algorithm: sr25519Algorithm, + AddressType: "ss59", + } + + err = SR25519HeaderValidationFn(header) + assert.ErrorIs(t, err, ErrInvalidJW3TAddressType) +} + +func Test_SR25519ProxyTypeValidationFn(t *testing.T) { + delegateAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), CentrifugeNetworkID) + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), CentrifugeNetworkID) + + tests := []struct { + Name string + ProxyType string + DelegateAddress string + DelegatorAddress string + ExpectedError error + }{ + { + Name: "Valid proxy type 1", + ProxyType: proxyType.ProxyTypeName[proxyType.Any], + DelegateAddress: "", + DelegatorAddress: "", + ExpectedError: nil, + }, + { + Name: "Valid proxy type 2", + ProxyType: proxyType.ProxyTypeName[proxyType.PodOperation], + DelegateAddress: "", + DelegatorAddress: "", + ExpectedError: nil, + }, + { + Name: "Valid proxy type 3", + ProxyType: proxyType.ProxyTypeName[proxyType.PodAuth], + DelegateAddress: "", + DelegatorAddress: "", + ExpectedError: nil, + }, + { + Name: "Valid proxy type 4", + ProxyType: PodAdminProxyType, + DelegateAddress: delegateAddress, + DelegatorAddress: delegateAddress, + ExpectedError: nil, + }, + { + Name: "Invalid admin proxy type", + ProxyType: PodAdminProxyType, + DelegateAddress: delegateAddress, + DelegatorAddress: delegatorAddress, + ExpectedError: ErrAdminAddressesMismatch, + }, + { + Name: "Invalid proxy type 1", + ProxyType: "invalid_proxy_type", + DelegateAddress: "", + DelegatorAddress: "", + ExpectedError: ErrInvalidProxyType, + }, + { + Name: "Invalid proxy type 2", + ProxyType: proxyType.ProxyTypeName[proxyType.Borrow], + DelegateAddress: "", + DelegatorAddress: "", + ExpectedError: ErrInvalidProxyType, + }, + } + + for _, test := range tests { + t.Run(test.Name, func(t *testing.T) { + payload := &JW3TPayload{ + Address: test.DelegateAddress, + OnBehalfOf: test.DelegatorAddress, + ProxyType: test.ProxyType, + } + + err := SR25519ProxyTypeValidationFn(payload) + + if test.ExpectedError == nil { + assert.NoError(t, err) + return + } + + assert.ErrorIs(t, err, test.ExpectedError) + }) + } +} + +func Test_SR25519SignatureValidationFn(t *testing.T) { + tokenHeader := &JW3THeader{ + Algorithm: sr25519Algorithm, + AddressType: ss58AddressType, + TokenType: jw3TokenType, + } + + jsonHeader, err := json.Marshal(tokenHeader) + assert.NoError(t, err) + + delegateAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) + assert.NoError(t, err) + + now := time.Now() + expireTime := now.Add(24 * time.Hour) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), CentrifugeNetworkID) + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), CentrifugeNetworkID) + + tokenPayload := &JW3TPayload{ + IssuedAt: fmt.Sprintf("%d", now.Unix()), + NotBefore: fmt.Sprintf("%d", now.Unix()), + ExpiresAt: fmt.Sprintf("%d", expireTime.Unix()), + Address: delegateAddress, + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[proxyType.Any], + } + + jsonPayload, err := json.Marshal(tokenPayload) + assert.NoError(t, err) + + message := strings.Join([]string{ + string(jsonHeader), + string(jsonPayload), + }, + tokenSeparator, + ) + + kp, err := subkey.DeriveKeyPair(sr25519.Scheme{}, keyrings.AliceKeyRingPair.URI) + assert.NoError(t, err) + + sig, err := kp.Sign([]byte(message)) + assert.NoError(t, err) + + token := &JW3Token{ + Payload: &JW3TPayload{ + Address: delegateAddress, + }, + JSONHeader: jsonHeader, + JSONPayload: jsonPayload, + Signature: sig, + } + + err = sr25519SignatureValidationFn(token) + assert.NoError(t, err) +} + +func Test_SR25519SignatureValidationFn_WithWrappedSignedMessage(t *testing.T) { + tokenHeader := &JW3THeader{ + Algorithm: sr25519Algorithm, + AddressType: ss58AddressType, + TokenType: jw3TokenType, + } + + jsonHeader, err := json.Marshal(tokenHeader) + assert.NoError(t, err) + + delegateAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) + assert.NoError(t, err) + + now := time.Now() + expireTime := now.Add(24 * time.Hour) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), CentrifugeNetworkID) + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), CentrifugeNetworkID) + + tokenPayload := &JW3TPayload{ + IssuedAt: fmt.Sprintf("%d", now.Unix()), + NotBefore: fmt.Sprintf("%d", now.Unix()), + ExpiresAt: fmt.Sprintf("%d", expireTime.Unix()), + Address: delegateAddress, + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[proxyType.Any], + } + + jsonPayload, err := json.Marshal(tokenPayload) + assert.NoError(t, err) + + message := strings.Join([]string{ + string(jsonHeader), + string(jsonPayload), + }, + tokenSeparator, + ) + + kp, err := subkey.DeriveKeyPair(sr25519.Scheme{}, keyrings.AliceKeyRingPair.URI) + assert.NoError(t, err) + + sig, err := kp.Sign(wrapSignedMessage(message)) + assert.NoError(t, err) + + token := &JW3Token{ + Payload: &JW3TPayload{ + Address: delegateAddress, + }, + JSONHeader: jsonHeader, + JSONPayload: jsonPayload, + Signature: sig, + } + + err = sr25519SignatureValidationFn(token) + assert.NoError(t, err) +} + +func Test_SR25519SignatureValidationFn_InvalidDelegateAddress(t *testing.T) { + token := &JW3Token{ + Payload: &JW3TPayload{ + Address: "invalid_address", + }, + } + + err := sr25519SignatureValidationFn(token) + assert.ErrorIs(t, err, ErrSS58AddressDecode) +} + +func Test_SR25519SignatureValidationFn_InvalidSignature(t *testing.T) { + tokenHeader := &JW3THeader{ + Algorithm: sr25519Algorithm, + AddressType: ss58AddressType, + TokenType: jw3TokenType, + } + + jsonHeader, err := json.Marshal(tokenHeader) + assert.NoError(t, err) + + delegateAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) + assert.NoError(t, err) + + delegatorAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) + assert.NoError(t, err) + + now := time.Now() + expireTime := now.Add(24 * time.Hour) + + delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), CentrifugeNetworkID) + delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), CentrifugeNetworkID) + + tokenPayload := &JW3TPayload{ + IssuedAt: fmt.Sprintf("%d", now.Unix()), + NotBefore: fmt.Sprintf("%d", now.Unix()), + ExpiresAt: fmt.Sprintf("%d", expireTime.Unix()), + Address: delegateAddress, + OnBehalfOf: delegatorAddress, + ProxyType: proxyType.ProxyTypeName[proxyType.Any], + } + + jsonPayload, err := json.Marshal(tokenPayload) + assert.NoError(t, err) + + token := &JW3Token{ + Payload: &JW3TPayload{ + Address: delegateAddress, + }, + JSONHeader: jsonHeader, + JSONPayload: jsonPayload, + Signature: []byte("invalid_signature"), + } + + err = sr25519SignatureValidationFn(token) + assert.ErrorIs(t, err, ErrInvalidSignature) +} diff --git a/http/auth/test_utils.go b/http/auth/token/test_utils.go similarity index 94% rename from http/auth/test_utils.go rename to http/auth/token/test_utils.go index b8a0fcebe..789809863 100644 --- a/http/auth/test_utils.go +++ b/http/auth/token/test_utils.go @@ -1,6 +1,6 @@ //go:build unit || integration || testworld -package auth +package token import ( "encoding/base64" @@ -34,7 +34,7 @@ func CreateJW3Token( } now := time.Now() - exipreTime := now.Add(24 * time.Hour) + expireTime := now.Add(24 * time.Hour) delegateAddress := subkey.SS58Encode(delegateAccountID.ToBytes(), CentrifugeNetworkID) delegatorAddress := subkey.SS58Encode(delegatorAccountID.ToBytes(), CentrifugeNetworkID) @@ -42,7 +42,7 @@ func CreateJW3Token( payload := &JW3TPayload{ IssuedAt: fmt.Sprintf("%d", now.Unix()), NotBefore: fmt.Sprintf("%d", now.Unix()), - ExpiresAt: fmt.Sprintf("%d", exipreTime.Unix()), + ExpiresAt: fmt.Sprintf("%d", expireTime.Unix()), Address: delegateAddress, OnBehalfOf: delegatorAddress, ProxyType: proxyType, diff --git a/http/auth/token/token.go b/http/auth/token/token.go new file mode 100644 index 000000000..b980fa1d0 --- /dev/null +++ b/http/auth/token/token.go @@ -0,0 +1,28 @@ +package token + +type JW3THeader struct { + Algorithm string `json:"algorithm"` + AddressType string `json:"address_type"` + TokenType string `json:"token_type"` +} + +type JW3TPayload struct { + IssuedAt string `json:"issued_at"` + NotBefore string `json:"not_before"` + ExpiresAt string `json:"expires_at"` + Address string `json:"address"` + OnBehalfOf string `json:"on_behalf_of"` + ProxyType string `json:"proxy_type"` +} + +type JW3Token struct { + Header *JW3THeader + Base64Header string + JSONHeader []byte + + Payload *JW3TPayload + Base64Payload string + JSONPayload []byte + + Signature []byte +} diff --git a/http/auth/token/validator.go b/http/auth/token/validator.go new file mode 100644 index 000000000..ccd7bbb16 --- /dev/null +++ b/http/auth/token/validator.go @@ -0,0 +1,54 @@ +package token + +import ( + "strconv" + "strings" + "time" +) + +//go:generate mockery --name Validator --structname ValidatorMock --filename validator_mock.go --inpackage + +type Validator interface { + Validate(token *JW3Token) error +} + +const ( + jw3TokenType = "jw3t" +) + +var ( + BasicHeaderValidationFn = func(header *JW3THeader) error { + if strings.ToLower(header.TokenType) != jw3TokenType { + return ErrInvalidJW3TTokenType + } + + return nil + } + + BasicPayloadValidationFn = func(payload *JW3TPayload) error { + i, err := strconv.ParseInt(payload.NotBefore, 10, 64) + if err != nil { + return ErrInvalidNotBeforeTimestamp + } + + tm := time.Unix(i, 0).UTC() + + if tm.After(time.Now().UTC()) { + return ErrInactiveToken + } + + i, err = strconv.ParseInt(payload.ExpiresAt, 10, 64) + + if err != nil { + return ErrInvalidExpiresAtTimestamp + } + + tm = time.Unix(i, 0).UTC() + + if tm.Before(time.Now().UTC()) { + return ErrExpiredToken + } + + return nil + } +) diff --git a/http/auth/token/validator_mock.go b/http/auth/token/validator_mock.go new file mode 100644 index 000000000..689bef6d5 --- /dev/null +++ b/http/auth/token/validator_mock.go @@ -0,0 +1,39 @@ +// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. + +package token + +import mock "github.com/stretchr/testify/mock" + +// ValidatorMock is an autogenerated mock type for the Validator type +type ValidatorMock struct { + mock.Mock +} + +// Validate provides a mock function with given fields: token +func (_m *ValidatorMock) Validate(token *JW3Token) error { + ret := _m.Called(token) + + var r0 error + if rf, ok := ret.Get(0).(func(*JW3Token) error); ok { + r0 = rf(token) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +type NewValidatorMockT interface { + mock.TestingT + Cleanup(func()) +} + +// NewValidatorMock creates a new instance of ValidatorMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewValidatorMock(t NewValidatorMockT) *ValidatorMock { + mock := &ValidatorMock{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/http/auth/token/validator_test.go b/http/auth/token/validator_test.go new file mode 100644 index 000000000..a60cc405f --- /dev/null +++ b/http/auth/token/validator_test.go @@ -0,0 +1,57 @@ +//go:build unit + +package token + +import ( + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func Test_BasicHeaderValidationFn(t *testing.T) { + header := &JW3THeader{TokenType: jw3TokenType} + + err := BasicHeaderValidationFn(header) + assert.NoError(t, err) + + header = &JW3THeader{TokenType: "test"} + + err = BasicHeaderValidationFn(header) + assert.ErrorIs(t, err, ErrInvalidJW3TTokenType) +} + +func Test_BasicPayloadValidationFn(t *testing.T) { + now := time.Now() + expireTime := now.Add(24 * time.Hour) + + payload := &JW3TPayload{ + NotBefore: fmt.Sprintf("%d", now.Unix()), + ExpiresAt: fmt.Sprintf("%d", expireTime.Unix()), + } + + err := BasicPayloadValidationFn(payload) + assert.NoError(t, err) + + payload.NotBefore = "invalid_not_before" + + err = BasicPayloadValidationFn(payload) + assert.ErrorIs(t, err, ErrInvalidNotBeforeTimestamp) + + payload.NotBefore = fmt.Sprintf("%d", now.Add(1*time.Hour).Unix()) + + err = BasicPayloadValidationFn(payload) + assert.ErrorIs(t, err, ErrInactiveToken) + + payload.NotBefore = fmt.Sprintf("%d", now.Unix()) + payload.ExpiresAt = "invalid_expires_at" + + err = BasicPayloadValidationFn(payload) + assert.ErrorIs(t, err, ErrInvalidExpiresAtTimestamp) + + payload.ExpiresAt = fmt.Sprintf("%d", now.Add(-1*time.Hour).Unix()) + + err = BasicPayloadValidationFn(payload) + assert.ErrorIs(t, err, ErrExpiredToken) +} diff --git a/http/auth/validation.go b/http/auth/validation.go deleted file mode 100644 index b76b80194..000000000 --- a/http/auth/validation.go +++ /dev/null @@ -1,70 +0,0 @@ -package auth - -import ( - "strconv" - "strings" - "time" - - proxyTypes "github.com/centrifuge/chain-custom-types/pkg/proxy" -) - -const ( - expectedAlgorithm = "sr25519" - expectedAddressType = "ss58" - expectedTokenType = "jw3t" -) - -var ( - headerValidationFn = func(header *JW3THeader) error { - if strings.ToLower(header.Algorithm) != expectedAlgorithm { - return ErrInvalidJW3TAlgorithm - } - - if strings.ToLower(header.AddressType) != expectedAddressType { - return ErrInvalidJW3TAddressType - } - - if strings.ToLower(header.TokenType) != expectedTokenType { - return ErrInvalidJW3TTokenType - } - - return nil - } - - payloadValidationFn = func(payload *JW3TPayload) error { - i, err := strconv.ParseInt(payload.NotBefore, 10, 64) - if err != nil { - return ErrInvalidNotBeforeTimestamp - } - - tm := time.Unix(i, 0).UTC() - - if tm.After(time.Now().UTC()) { - return ErrInactiveToken - } - - i, err = strconv.ParseInt(payload.ExpiresAt, 10, 64) - if err != nil { - return ErrInvalidExpiresAtTimestamp - } - - tm = time.Unix(i, 0).UTC() - if tm.Before(time.Now().UTC()) { - return ErrExpiredToken - } - - if _, ok := allowedProxyTypes[payload.ProxyType]; !ok { - return ErrInvalidProxyType - } - - if payload.ProxyType == PodAdminProxyType { - return nil - } - - if _, ok := proxyTypes.ProxyTypeValue[payload.ProxyType]; !ok { - return ErrInvalidProxyType - } - - return nil - } -) diff --git a/http/bootstrapper.go b/http/bootstrapper.go index 1f68fb973..17a700c89 100644 --- a/http/bootstrapper.go +++ b/http/bootstrapper.go @@ -5,16 +5,22 @@ import ( "fmt" "sync" + "github.com/centrifuge/pod/pallets/permissions" + "github.com/centrifuge/pod/pallets/uniques" + + "github.com/centrifuge/pod/pallets/loans" + + "github.com/centrifuge/pod/http/auth/access" + "github.com/centrifuge/pod/bootstrap" "github.com/centrifuge/pod/config" "github.com/centrifuge/pod/errors" - auth2 "github.com/centrifuge/pod/http/auth" "github.com/centrifuge/pod/pallets" "github.com/centrifuge/pod/pallets/proxy" ) const ( - BootstrappedAuthService = "BootstrappedAuthService" + BootstrappedValidationServiceFactory = "BootstrappedValidationServiceFactory" ) // Bootstrapper implements bootstrapper.Bootstrapper @@ -36,15 +42,34 @@ func (b *Bootstrapper) Bootstrap(ctx map[string]interface{}) error { return errors.New("proxy API not initialised") } + loansAPI, ok := ctx[pallets.BootstrappedLoansAPI].(loans.API) + if !ok { + return errors.New("loans API not initialised") + } + + permissionsAPI, ok := ctx[pallets.BootstrappedPermissionsAPI].(permissions.API) + if !ok { + return errors.New("permissions API not initialised") + } + + uniquesAPI, ok := ctx[pallets.BootstrappedUniquesAPI].(uniques.API) + if !ok { + return errors.New("uniques API not initialised") + } + cfg, err := cfgService.GetConfig() if err != nil { - return fmt.Errorf("couldn't retrieve config: %s", err) + return fmt.Errorf("couldn't retrieve config: %w", err) } - authService := auth2.NewService(cfg.IsAuthenticationEnabled(), proxyAPI, cfgService) + proxyAccessValidator := access.NewProxyAccessValidator(proxyAPI) + adminAccessValidator := access.NewAdminAccessValidator(cfgService) + investorAccessValidator := access.NewInvestorAccessValidator(loansAPI, permissionsAPI, uniquesAPI) + + validationServiceFactory := access.NewValidationServiceFactory(cfgService, proxyAccessValidator, adminAccessValidator, investorAccessValidator) - ctx[BootstrappedAuthService] = authService + ctx[BootstrappedValidationServiceFactory] = validationServiceFactory srv := apiServer{config: cfg} ctx[bootstrap.BootstrappedAPIServer] = srv diff --git a/http/coreapi/coreapi.go b/http/coreapi/coreapi.go index 1d77ff704..cff54db81 100644 --- a/http/coreapi/coreapi.go +++ b/http/coreapi/coreapi.go @@ -11,17 +11,26 @@ const ( // VersionIDParam for version_id in api path. VersionIDParam = "version_id" - // AccountIDParam for accounts api + // AccountIDParam for accounts api. AccountIDParam = "account_id" - // CollectionIDParam for NFT V3 api + // CollectionIDParam for NFT V3 api. CollectionIDParam = "collection_id" - // ItemIDParam for NFT V3 api + // ItemIDParam for NFT V3 api. ItemIDParam = "item_id" - // AttributeNameParam for NFT V3 api + // AttributeNameParam for NFT V3 api. AttributeNameParam = "attribute_name" + + // AssetIDQueryParam for Investor api. + AssetIDQueryParam = "asset_id" + + // LoanIDQueryParam for Investor api. + LoanIDQueryParam = "loan_id" + + // PoolIDQueryParam for Investor api. + PoolIDQueryParam = "pool_id" ) var log = logging.Logger("core_api") diff --git a/http/router.go b/http/router.go index 67039088c..fb06c73d3 100644 --- a/http/router.go +++ b/http/router.go @@ -2,11 +2,12 @@ package http import ( "context" + "fmt" "github.com/centrifuge/pod/bootstrap" "github.com/centrifuge/pod/config" "github.com/centrifuge/pod/errors" - httpAuth "github.com/centrifuge/pod/http/auth" + "github.com/centrifuge/pod/http/auth/access" "github.com/centrifuge/pod/http/health" v2 "github.com/centrifuge/pod/http/v2" v3 "github.com/centrifuge/pod/http/v3" @@ -37,20 +38,21 @@ func Router(ctx context.Context) (*chi.Mux, error) { return nil, errors.New("failed to get %s", bootstrap.BootstrappedConfig) } - cfgService, ok := cctx[config.BootstrappedConfigStorage].(config.Service) + validationWrapperFactory, ok := cctx[BootstrappedValidationServiceFactory].(access.ValidationServiceFactory) if !ok { - return nil, errors.New("failed to get %s", config.BootstrappedConfigStorage) + return nil, errors.New("failed to get %s", BootstrappedValidationServiceFactory) } - authService, ok := cctx[BootstrappedAuthService].(httpAuth.Service) - if !ok { - return nil, errors.New("failed to get %s", BootstrappedAuthService) + wrappers, err := validationWrapperFactory.GetValidationServices() + + if err != nil { + return nil, fmt.Errorf("couldn't get default validation wrappers") } // add middlewares. do not change the order. Add any new middlewares to the bottom r.Use(middleware.Recoverer) r.Use(middleware.DefaultLogger) - r.Use(auth(authService, cfgService)) + r.Use(auth(wrappers)) // health check health.Register(r, cfg) diff --git a/http/router_test.go b/http/router_test.go index 7295e0063..73b16d5e7 100644 --- a/http/router_test.go +++ b/http/router_test.go @@ -14,16 +14,19 @@ import ( "github.com/centrifuge/pod/config" "github.com/centrifuge/pod/contextutil" "github.com/centrifuge/pod/errors" - httpAuth "github.com/centrifuge/pod/http/auth" + "github.com/centrifuge/pod/http/auth/access" + authToken "github.com/centrifuge/pod/http/auth/token" httpV2 "github.com/centrifuge/pod/http/v2" httpV3 "github.com/centrifuge/pod/http/v3" "github.com/centrifuge/pod/testingutils/keyrings" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" ) func TestRouter_auth(t *testing.T) { - authServiceMock := httpAuth.NewServiceMock(t) - configServiceMock := config.NewServiceMock(t) + validationServiceMock := access.NewValidationServiceMock(t) + + validationServices := access.ValidationServices{validationServiceMock} delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) assert.NoError(t, err) @@ -31,7 +34,7 @@ func TestRouter_auth(t *testing.T) { delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) assert.NoError(t, err) - token, err := httpAuth.CreateJW3Token( + token, err := authToken.CreateJW3Token( delegateAccountID, delegatorAccountID, keyrings.BobKeyRingPair.URI, @@ -40,16 +43,33 @@ func TestRouter_auth(t *testing.T) { assert.NoError(t, err) // missing auth - r := httptest.NewRequest("POST", "/documents", nil) + path := "/documents" + + r := httptest.NewRequest("POST", path, nil) w := httptest.NewRecorder() - auth(authServiceMock, configServiceMock)(nil).ServeHTTP(w, r) + validationServiceMock.On("Matches", path). + Return(false). + Once() + + auth(validationServices)(nil).ServeHTTP(w, r) assert.Equal(t, w.Code, http.StatusForbidden) assert.Contains(t, w.Body.String(), "Authentication failed") // ping - r = httptest.NewRequest("POST", "/ping", nil) + path = "/ping" + + r = httptest.NewRequest("POST", path, nil) w = httptest.NewRecorder() + + validationServiceMock.On("Matches", path). + Return(true). + Once() + + validationServiceMock.On("Validate", r). + Return(nil). + Once() + next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { acc, err := contextutil.Account(r.Context()) assert.ErrorIs(t, err, contextutil.ErrSelfNotFound) @@ -57,28 +77,33 @@ func TestRouter_auth(t *testing.T) { w.WriteHeader(http.StatusOK) }) - auth(authServiceMock, configServiceMock)(next).ServeHTTP(w, r) + auth(validationServices)(next).ServeHTTP(w, r) assert.Equal(t, w.Code, http.StatusOK) // accounts - r = httptest.NewRequest("GET", "/accounts/self", nil) + path = "/accounts/self" + + r = httptest.NewRequest("GET", path, nil) r.Header.Set("Authorization", "Bearer "+token) w = httptest.NewRecorder() - accHeader := &httpAuth.AccountHeader{ - Identity: delegatorAccountID, - IsAdmin: false, - } - - authServiceMock.On("Validate", r.Context(), token). - Return(accHeader, nil). + validationServiceMock.On("Matches", path). + Return(true). Once() accountMock := config.NewAccountMock(t) - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(accountMock, nil). + validationServiceMock.On("Validate", r). + Run(func(args mock.Arguments) { + req, ok := args.Get(0).(*http.Request) + assert.True(t, ok) + + ctx := contextutil.WithAccount(req.Context(), accountMock) + + *req = *req.WithContext(ctx) + }). + Return(nil). Once() next = func(w http.ResponseWriter, r *http.Request) { @@ -88,128 +113,43 @@ func TestRouter_auth(t *testing.T) { w.WriteHeader(http.StatusOK) } - auth(authServiceMock, configServiceMock)(next).ServeHTTP(w, r) + auth(validationServices)(next).ServeHTTP(w, r) assert.Equal(t, w.Code, http.StatusOK) // Auth service failure - r = httptest.NewRequest("GET", "/accounts/self", nil) - r.Header.Set("Authorization", "Bearer "+token) - - w = httptest.NewRecorder() - - authServiceMock.On("Validate", r.Context(), token). - Return(nil, errors.New("error")). - Once() + path = "/v3/investors" - auth(authServiceMock, configServiceMock)(nil).ServeHTTP(w, r) - assert.Equal(t, w.Code, http.StatusForbidden) - - // Config service failure - r = httptest.NewRequest("GET", "/accounts/self", nil) + r = httptest.NewRequest("GET", path, nil) r.Header.Set("Authorization", "Bearer "+token) w = httptest.NewRecorder() - authServiceMock.On("Validate", r.Context(), token). - Return(accHeader, nil). + validationServiceMock.On("Matches", path). + Return(true). Once() - configServiceMock.On("GetAccount", delegatorAccountID.ToBytes()). - Return(nil, errors.New("error")). + validationServiceMock.On("Validate", r). + Return(errors.New("error")). Once() - auth(authServiceMock, configServiceMock)(nil).ServeHTTP(w, r) + auth(validationServices)(nil).ServeHTTP(w, r) assert.Equal(t, w.Code, http.StatusForbidden) } -func TestRouter_auth_AdminPath(t *testing.T) { - authServiceMock := httpAuth.NewServiceMock(t) - configServiceMock := config.NewServiceMock(t) - - delegateAccountID, err := types.NewAccountID(keyrings.BobKeyRingPair.PublicKey) - assert.NoError(t, err) - - delegatorAccountID, err := types.NewAccountID(keyrings.AliceKeyRingPair.PublicKey) - assert.NoError(t, err) - - token, err := httpAuth.CreateJW3Token( - delegateAccountID, - delegatorAccountID, - keyrings.BobKeyRingPair.URI, - proxyType.ProxyTypeName[proxyType.PodAuth], - ) - assert.NoError(t, err) - - // Not an admin - r := httptest.NewRequest("POST", "/v2/accounts/generate", nil) - r.Header.Set("Authorization", "Bearer "+token) - - w := httptest.NewRecorder() - next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - acc, err := contextutil.Account(r.Context()) - assert.ErrorIs(t, err, contextutil.ErrSelfNotFound) - assert.Nil(t, acc) - w.WriteHeader(http.StatusOK) - }) - - accHeader := &httpAuth.AccountHeader{ - Identity: delegatorAccountID, - IsAdmin: false, - } - - authServiceMock.On("Validate", r.Context(), token). - Return(accHeader, nil). - Once() - - auth(authServiceMock, configServiceMock)(next).ServeHTTP(w, r) - assert.Equal(t, w.Code, http.StatusForbidden) - - // Admin - r = httptest.NewRequest("POST", "/v2/accounts/generate", nil) - r.Header.Set("Authorization", "Bearer "+token) - - w = httptest.NewRecorder() - - accHeader = &httpAuth.AccountHeader{ - Identity: delegatorAccountID, - IsAdmin: true, - } - - authServiceMock.On("Validate", r.Context(), token). - Return(accHeader, nil). - Once() - - next = func(w http.ResponseWriter, r *http.Request) { - acc, err := contextutil.Account(r.Context()) - assert.ErrorIs(t, err, contextutil.ErrSelfNotFound) - assert.Nil(t, acc) - w.WriteHeader(http.StatusOK) - } - - auth(authServiceMock, configServiceMock)(next).ServeHTTP(w, r) - assert.Equal(t, w.Code, http.StatusOK) - - // Validation error - r = httptest.NewRequest("POST", "/v2/accounts/generate", nil) - r.Header.Set("Authorization", "Bearer "+token) - - w = httptest.NewRecorder() +func TestRouter(t *testing.T) { + validationServiceMock := access.NewValidationServiceMock(t) + validationServiceFactoryMock := access.NewValidationServiceFactoryMock(t) - authServiceMock.On("Validate", r.Context(), token). - Return(nil, errors.New("error")). + validationServiceFactoryMock.On("GetValidationServices"). + Return(access.ValidationServices{validationServiceMock}, nil). Once() - auth(authServiceMock, configServiceMock)(nil).ServeHTTP(w, r) - assert.Equal(t, w.Code, http.StatusForbidden) -} - -func TestRouter(t *testing.T) { cctx := map[string]interface{}{ - bootstrap.BootstrappedConfig: config.NewConfigurationMock(t), - config.BootstrappedConfigStorage: config.NewServiceMock(t), - BootstrappedAuthService: httpAuth.NewServiceMock(t), - httpV2.BootstrappedService: &httpV2.Service{}, - httpV3.BootstrappedService: &httpV3.Service{}, + bootstrap.BootstrappedConfig: config.NewConfigurationMock(t), + config.BootstrappedConfigStorage: config.NewServiceMock(t), + httpV2.BootstrappedService: &httpV2.Service{}, + httpV3.BootstrappedService: &httpV3.Service{}, + BootstrappedValidationServiceFactory: validationServiceFactoryMock, } ctx := context.WithValue(context.Background(), bootstrap.NodeObjRegistry, cctx) @@ -223,5 +163,5 @@ func TestRouter(t *testing.T) { // v2 routes assert.Len(t, r.Routes()[1].SubRoutes.Routes(), 25) // v3 routes - assert.Len(t, r.Routes()[2].SubRoutes.Routes(), 6) + assert.Len(t, r.Routes()[2].SubRoutes.Routes(), 7) } diff --git a/http/server_test.go b/http/server_test.go index f7ce16363..c354c9aac 100644 --- a/http/server_test.go +++ b/http/server_test.go @@ -11,23 +11,29 @@ import ( "github.com/centrifuge/pod/bootstrap" "github.com/centrifuge/pod/config" "github.com/centrifuge/pod/errors" - httpAuth "github.com/centrifuge/pod/http/auth" + "github.com/centrifuge/pod/http/auth/access" httpV2 "github.com/centrifuge/pod/http/v2" httpV3 "github.com/centrifuge/pod/http/v3" "github.com/stretchr/testify/assert" ) func TestServer_Start(t *testing.T) { + validationServiceMock := access.NewValidationServiceMock(t) + validationServiceFactoryMock := access.NewValidationServiceFactoryMock(t) + + validationServiceFactoryMock.On("GetValidationServices"). + Return(access.ValidationServices{validationServiceMock}, nil). + Once() + configMock := config.NewConfigurationMock(t) configServiceMock := config.NewServiceMock(t) - authServiceMock := httpAuth.NewServiceMock(t) cctx := map[string]interface{}{ - bootstrap.BootstrappedConfig: configMock, - config.BootstrappedConfigStorage: configServiceMock, - BootstrappedAuthService: authServiceMock, - httpV2.BootstrappedService: &httpV2.Service{}, - httpV3.BootstrappedService: &httpV3.Service{}, + bootstrap.BootstrappedConfig: configMock, + config.BootstrappedConfigStorage: configServiceMock, + httpV2.BootstrappedService: &httpV2.Service{}, + httpV3.BootstrappedService: &httpV3.Service{}, + BootstrappedValidationServiceFactory: validationServiceFactoryMock, } ctx := context.WithValue(context.Background(), bootstrap.NodeObjRegistry, cctx) @@ -95,16 +101,22 @@ func TestServer_Start_RouterError(t *testing.T) { } func TestServer_Start_HTTPServerError(t *testing.T) { + validationServiceMock := access.NewValidationServiceMock(t) + validationServiceFactoryMock := access.NewValidationServiceFactoryMock(t) + + validationServiceFactoryMock.On("GetValidationServices"). + Return(access.ValidationServices{validationServiceMock}, nil). + Once() + configMock := config.NewConfigurationMock(t) configServiceMock := config.NewServiceMock(t) - authServiceMock := httpAuth.NewServiceMock(t) cctx := map[string]interface{}{ - bootstrap.BootstrappedConfig: configMock, - config.BootstrappedConfigStorage: configServiceMock, - BootstrappedAuthService: authServiceMock, - httpV2.BootstrappedService: &httpV2.Service{}, - httpV3.BootstrappedService: &httpV3.Service{}, + bootstrap.BootstrappedConfig: configMock, + config.BootstrappedConfigStorage: configServiceMock, + httpV2.BootstrappedService: &httpV2.Service{}, + httpV3.BootstrappedService: &httpV3.Service{}, + BootstrappedValidationServiceFactory: validationServiceFactoryMock, } ctx := context.WithValue(context.Background(), bootstrap.NodeObjRegistry, cctx) @@ -144,16 +156,22 @@ func TestServer_Start_HTTPServerError(t *testing.T) { } func TestServer_Start_CanceledContext(t *testing.T) { + validationServiceMock := access.NewValidationServiceMock(t) + validationServiceFactoryMock := access.NewValidationServiceFactoryMock(t) + + validationServiceFactoryMock.On("GetValidationServices"). + Return(access.ValidationServices{validationServiceMock}, nil). + Once() + configMock := config.NewConfigurationMock(t) configServiceMock := config.NewServiceMock(t) - authServiceMock := httpAuth.NewServiceMock(t) cctx := map[string]interface{}{ - bootstrap.BootstrappedConfig: configMock, - config.BootstrappedConfigStorage: configServiceMock, - BootstrappedAuthService: authServiceMock, - httpV2.BootstrappedService: &httpV2.Service{}, - httpV3.BootstrappedService: &httpV3.Service{}, + bootstrap.BootstrappedConfig: configMock, + config.BootstrappedConfigStorage: configServiceMock, + httpV2.BootstrappedService: &httpV2.Service{}, + httpV3.BootstrappedService: &httpV3.Service{}, + BootstrappedValidationServiceFactory: validationServiceFactoryMock, } ctx := context.WithValue(context.Background(), bootstrap.NodeObjRegistry, cctx) diff --git a/http/swagger.json b/http/swagger.json index 0242d7263..6d39401ee 100644 --- a/http/swagger.json +++ b/http/swagger.json @@ -1632,6 +1632,78 @@ } } }, + "/v3/investor/assets": { + "get": { + "description": "retrieves an asset (document) that belongs to an issuer.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Investor" + ], + "summary": "retrieves an asset (document) that belongs to an issuer.", + "operationId": "get_asset", + "parameters": [ + { + "type": "string", + "description": "Bearer \u003cJW3T token\u003e", + "name": "authorization", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Hex encoded asset (document) identifier", + "name": "asset_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Loan ID", + "name": "loan_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Pool ID", + "name": "pool_id", + "in": "path", + "required": true + } + ], + "responses": { + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/coreapi.DocumentResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/httputils.HTTPError" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/httputils.HTTPError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/httputils.HTTPError" + } + } + } + } + }, "/v3/nfts/collections": { "post": { "description": "Creates a specific NFT collection", @@ -1649,7 +1721,7 @@ "parameters": [ { "type": "string", - "description": "Hex encoded centrifuge ID of the account for the intended API action", + "description": "Bearer \u003cJW3T token\u003e", "name": "authorization", "in": "header", "required": true @@ -1709,7 +1781,7 @@ "parameters": [ { "type": "string", - "description": "Hex encoded centrifuge ID of the account for the intended API action", + "description": "Bearer \u003cJW3T token\u003e", "name": "authorization", "in": "header", "required": true @@ -1848,7 +1920,7 @@ "parameters": [ { "type": "string", - "description": "Hex encoded centrifuge ID of the account for the intended API action", + "description": "Bearer \u003cJW3T token\u003e", "name": "authorization", "in": "header", "required": true @@ -1916,7 +1988,7 @@ "parameters": [ { "type": "string", - "description": "Hex encoded centrifuge ID of the account for the intended API action", + "description": "Bearer \u003cJW3T token\u003e", "name": "authorization", "in": "header", "required": true @@ -1987,7 +2059,7 @@ "parameters": [ { "type": "string", - "description": "Hex encoded centrifuge ID of the account for the intended API action", + "description": "Bearer \u003cJW3T token\u003e", "name": "authorization", "in": "header", "required": true diff --git a/http/v3/bootstrapper.go b/http/v3/bootstrapper.go index c206a3424..ed165dd14 100644 --- a/http/v3/bootstrapper.go +++ b/http/v3/bootstrapper.go @@ -1,6 +1,7 @@ package v3 import ( + "github.com/centrifuge/pod/documents" "github.com/centrifuge/pod/errors" nftv3 "github.com/centrifuge/pod/nft/v3" ) @@ -18,7 +19,14 @@ func (b *Bootstrapper) Bootstrap(ctx map[string]interface{}) error { return errors.New("nft V3 service not initialised") } + docSrv, ok := ctx[documents.BootstrappedDocumentService].(documents.Service) + + if !ok { + return errors.New("document service not initialised") + } + ctx[BootstrappedService] = &Service{ + docSrv: docSrv, nftSrvV3: nftSrvV3, } diff --git a/http/v3/handler.go b/http/v3/handler.go index 94080f96e..90d0725ed 100644 --- a/http/v3/handler.go +++ b/http/v3/handler.go @@ -26,4 +26,5 @@ func Register(ctx map[string]interface{}, r chi.Router) { r.Get("/nfts/collections/{"+coreapi.CollectionIDParam+"}/items/{"+coreapi.ItemIDParam+"}/owner", h.GetNFTOwner) r.Get("/nfts/collections/{"+coreapi.CollectionIDParam+"}/items/{"+coreapi.ItemIDParam+"}/metadata", h.MetadataOfNFT) r.Get("/nfts/collections/{"+coreapi.CollectionIDParam+"}/items/{"+coreapi.ItemIDParam+"}/attribute/{"+coreapi.AttributeNameParam+"}", h.AttributeOfNFT) + r.Get("/investor/assets", h.GetAsset) } diff --git a/http/v3/handler_test.go b/http/v3/handler_test.go index f54039036..4ca4e38cf 100644 --- a/http/v3/handler_test.go +++ b/http/v3/handler_test.go @@ -13,5 +13,5 @@ func TestRegister(t *testing.T) { r := chi.NewRouter() ctx := map[string]interface{}{BootstrappedService: &Service{}} Register(ctx, r) - assert.Len(t, r.Routes(), 6) + assert.Len(t, r.Routes(), 7) } diff --git a/http/v3/investor_api.go b/http/v3/investor_api.go new file mode 100644 index 000000000..0c7f413b5 --- /dev/null +++ b/http/v3/investor_api.go @@ -0,0 +1,68 @@ +package v3 + +import ( + "net/http" + + "github.com/centrifuge/pod/errors" + "github.com/centrifuge/pod/http/coreapi" + "github.com/centrifuge/pod/utils/httputils" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/go-chi/render" +) + +const ( + ErrInvalidAssetID = errors.Error("invalid asset ID") +) + +// GetAsset retrieves an asset (document) that belongs to an issuer. +// @summary retrieves an asset (document) that belongs to an issuer. +// @description retrieves an asset (document) that belongs to an issuer. +// @id get_asset +// @tags Investor +// @accept json +// @param authorization header string true "Bearer " +// @param asset_id path string true "Hex encoded asset (document) identifier" +// @param loan_id path string true "Loan ID" +// @param pool_id path string true "Pool ID" +// @produce json +// @Failure 403 {object} httputils.HTTPError +// @Failure 500 {object} httputils.HTTPError +// @Failure 400 {object} httputils.HTTPError +// @success 202 {object} coreapi.DocumentResponse +// @router /v3/investor/assets [get] +func (h *handler) GetAsset(w http.ResponseWriter, r *http.Request) { + var err error + var code int + defer httputils.RespondIfError(&code, &err, w, r) + + assetID, err := hexutil.Decode(r.URL.Query().Get(coreapi.AssetIDQueryParam)) + + if err != nil { + code = http.StatusBadRequest + err = ErrInvalidAssetID + h.log.Error(err) + return + } + + doc, err := h.srv.GetDocument(r.Context(), assetID) + + if err != nil { + code = http.StatusNotFound + h.log.Error(err) + err = coreapi.ErrDocumentNotFound + return + } + + res, err := coreapi.GetDocumentResponse(doc, "") + + if err != nil { + code = http.StatusInternalServerError + h.log.Error(err) + return + } + + res.Header.Status = string(doc.GetStatus()) + + render.Status(r, http.StatusOK) + render.JSON(w, r, res) +} diff --git a/http/v3/nft_api.go b/http/v3/nft_api.go index d498b13fa..eb39b5533 100644 --- a/http/v3/nft_api.go +++ b/http/v3/nft_api.go @@ -20,10 +20,10 @@ import ( const ( // ErrInvalidCollectionID is a sentinel error when the collection ID is invalid. - ErrInvalidCollectionID = errors.Error("Invalid collection ID") + ErrInvalidCollectionID = errors.Error("invalid collection ID") // ErrInvalidItemID is a sentinel error when the item ID is invalid. - ErrInvalidItemID = errors.Error("Invalid item ID") + ErrInvalidItemID = errors.Error("invalid item ID") ) // CommitAndMintNFT commits a pending document and mints an NFT on the Centrifuge chain. @@ -32,7 +32,7 @@ const ( // @id commit_and_mint_nft // @tags NFTs // @accept json -// @param authorization header string true "Hex encoded centrifuge ID of the account for the intended API action" +// @param authorization header string true "Bearer " // @param collection_id path string true "NFT collection ID" // @param body body coreapi.MintNFTV3Request true "Mint NFT request V3" // @produce json @@ -51,7 +51,7 @@ func (h *handler) CommitAndMintNFT(w http.ResponseWriter, r *http.Request) { // @id mint_nft // @tags NFTs // @accept json -// @param authorization header string true "Hex encoded centrifuge ID of the account for the intended API action" +// @param authorization header string true "Bearer " // @param collection_id path string true "NFT collection ID" // @param body body coreapi.MintNFTV3Request true "Mint NFT request V3" // @produce json @@ -132,7 +132,7 @@ func (h *handler) mintNFT(w http.ResponseWriter, r *http.Request, documentPendin // @description Returns the owner of an NFT. // @id owner_of_nft // @tags NFTs -// @param authorization header string true "Hex encoded centrifuge ID of the account for the intended API action" +// @param authorization header string true "Bearer " // @param collection_id path string true "NFT collection ID" // @param item_id path string true "NFT item ID" // @produce json @@ -201,7 +201,7 @@ func (h *handler) GetNFTOwner(w http.ResponseWriter, r *http.Request) { // @id create_nft_collection // @tags NFTs // @accept json -// @param authorization header string true "Hex encoded centrifuge ID of the account for the intended API action" +// @param authorization header string true "Bearer " // @param body body coreapi.CreateNFTCollectionV3Request true "Create NFT collection request V3" // @produce json // @Failure 403 {object} httputils.HTTPError @@ -256,7 +256,7 @@ func (h *handler) CreateNFTCollection(w http.ResponseWriter, r *http.Request) { // @description Returns the metadata of an NFT item. // @id metadata_of_nft // @tags NFTs -// @param authorization header string true "Hex encoded centrifuge ID of the account for the intended API action" +// @param authorization header string true "Bearer " // @param collection_id path string true "NFT collection ID" // @param item_id path string true "NFT item ID" // @produce json diff --git a/http/v3/nft_api_test.go b/http/v3/nft_api_test.go index 5600cbf35..6b4cd6b14 100644 --- a/http/v3/nft_api_test.go +++ b/http/v3/nft_api_test.go @@ -13,6 +13,8 @@ import ( "net/http/httptest" "testing" + "github.com/centrifuge/pod/documents" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/centrifuge/pod/errors" "github.com/centrifuge/pod/http/coreapi" @@ -26,9 +28,10 @@ import ( ) func TestHandler_CommitAndMintNFT(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -109,9 +112,10 @@ func TestHandler_CommitAndMintNFT(t *testing.T) { } func TestHandler_CommitAndMintNFT_InvalidCollectionIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -141,9 +145,10 @@ func TestHandler_CommitAndMintNFT_InvalidCollectionIDParam(t *testing.T) { } func TestHandler_CommitAndMintNFT_InvalidPayload(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -171,9 +176,10 @@ func TestHandler_CommitAndMintNFT_InvalidPayload(t *testing.T) { } func TestHandler_CommitAndMintNFT_NFTServiceError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -230,9 +236,10 @@ func TestHandler_CommitAndMintNFT_NFTServiceError(t *testing.T) { } func TestHandler_MintNFT(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -313,9 +320,10 @@ func TestHandler_MintNFT(t *testing.T) { } func TestHandler_MintNFT_InvalidCollectionIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -345,9 +353,10 @@ func TestHandler_MintNFT_InvalidCollectionIDParam(t *testing.T) { } func TestHandler_MintNFT_InvalidPayload(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -375,9 +384,10 @@ func TestHandler_MintNFT_InvalidPayload(t *testing.T) { } func TestHandler_MintNFT_NFTServiceError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -434,9 +444,10 @@ func TestHandler_MintNFT_NFTServiceError(t *testing.T) { } func TestHandler_GetNFTOwner(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -484,9 +495,10 @@ func TestHandler_GetNFTOwner(t *testing.T) { } func TestHandler_GetNFTOwner_InvalidCollectionIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -515,9 +527,10 @@ func TestHandler_GetNFTOwner_InvalidCollectionIDParam(t *testing.T) { } func TestHandler_GetNFTOwner_InvalidItemIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -546,9 +559,10 @@ func TestHandler_GetNFTOwner_InvalidItemIDParam(t *testing.T) { } func TestHandler_GetNFTOwner_NFTService_GenericError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -581,9 +595,10 @@ func TestHandler_GetNFTOwner_NFTService_GenericError(t *testing.T) { } func TestHandler_GetNFTOwner_NFTService_NotFoundError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -616,9 +631,10 @@ func TestHandler_GetNFTOwner_NFTService_NotFoundError(t *testing.T) { } func TestHandler_CreateNFTCollection(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -675,9 +691,10 @@ func TestHandler_CreateNFTCollection(t *testing.T) { } func TestHandler_CreateNFTCollection_InvalidPayload(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -703,9 +720,10 @@ func TestHandler_CreateNFTCollection_InvalidPayload(t *testing.T) { } func TestHandler_CreateNFTCollection_NFTServiceError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -744,9 +762,10 @@ func TestHandler_CreateNFTCollection_NFTServiceError(t *testing.T) { } func TestHandler_MetadataOfNFT(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -800,9 +819,10 @@ func TestHandler_MetadataOfNFT(t *testing.T) { } func TestHandler_MetadataOfNFT_InvalidCollectionIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -831,9 +851,10 @@ func TestHandler_MetadataOfNFT_InvalidCollectionIDParam(t *testing.T) { } func TestHandler_MetadataOfNFT_InvalidItemIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -862,9 +883,10 @@ func TestHandler_MetadataOfNFT_InvalidItemIDParam(t *testing.T) { } func TestHandler_MetadataOfNFT_NFTService_GenericError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -897,9 +919,10 @@ func TestHandler_MetadataOfNFT_NFTService_GenericError(t *testing.T) { } func TestHandler_MetadataOfNFT_NFTService_NotFoundError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -932,9 +955,10 @@ func TestHandler_MetadataOfNFT_NFTService_NotFoundError(t *testing.T) { } func TestHandler_AttributeOfNFT(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -986,9 +1010,10 @@ func TestHandler_AttributeOfNFT(t *testing.T) { } func TestHandler_AttributeOfNFT_InvalidCollectionIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -1024,9 +1049,10 @@ func TestHandler_AttributeOfNFT_InvalidCollectionIDParam(t *testing.T) { } func TestHandler_AttributeOfNFT_InvalidItemIDParam(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -1062,9 +1088,10 @@ func TestHandler_AttributeOfNFT_InvalidItemIDParam(t *testing.T) { } func TestHandler_AttributeOfNFT_NFTService_GenericError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() @@ -1104,9 +1131,10 @@ func TestHandler_AttributeOfNFT_NFTService_GenericError(t *testing.T) { } func TestHandler_AttributeOfNFT_NFTService_NotFoundError(t *testing.T) { + docServiceMock := documents.NewServiceMock(t) nftServiceMock := nftv3.NewServiceMock(t) - service := &Service{nftServiceMock} + service := &Service{docServiceMock, nftServiceMock} ctx := context.Background() diff --git a/http/v3/service.go b/http/v3/service.go index b816f6ac7..ae0999c93 100644 --- a/http/v3/service.go +++ b/http/v3/service.go @@ -3,12 +3,15 @@ package v3 import ( "context" + "github.com/centrifuge/pod/documents" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" nftv3 "github.com/centrifuge/pod/nft/v3" ) // Service is the entry point for all the V3 APIs. type Service struct { + docSrv documents.Service nftSrvV3 nftv3.Service } @@ -36,3 +39,7 @@ func (s *Service) GetItemMetadata(collectionID types.U64, itemID types.U128) (*t func (s *Service) GetItemAttribute(collectionID types.U64, itemID types.U128, key string) ([]byte, error) { return s.nftSrvV3.GetItemAttribute(collectionID, itemID, key) } + +func (s *Service) GetDocument(ctx context.Context, documentID []byte) (documents.Document, error) { + return s.docSrv.GetCurrentVersion(ctx, documentID) +} diff --git a/identity/v2/service.go b/identity/v2/service.go index 129c448ea..979e375e1 100644 --- a/identity/v2/service.go +++ b/identity/v2/service.go @@ -130,7 +130,7 @@ func (s *service) ValidateKey( validationTime time.Time, ) error { err := validation.Validate( - validation.NewValidator(accountID, validation.AccountIDValidatorFn), + validation.NewValidator(accountID, validation.AccountIDValidationFn), validation.NewValidator(pubKey, publicKeyValidatorFn), ) @@ -228,7 +228,7 @@ func (s *service) ValidateDocumentSignature( func (s *service) ValidateAccount(accountID *types.AccountID) error { err := validation.Validate( - validation.NewValidator(accountID, validation.AccountIDValidatorFn), + validation.NewValidator(accountID, validation.AccountIDValidationFn), ) if err != nil { diff --git a/identity/v2/test_bootstrapper.go b/identity/v2/test_bootstrapper.go index bdfe003c0..4fce008b0 100644 --- a/identity/v2/test_bootstrapper.go +++ b/identity/v2/test_bootstrapper.go @@ -8,7 +8,17 @@ import ( "math/rand" "time" + "github.com/centrifuge/pod/pallets/utility" + + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/centchain" + genericUtils "github.com/centrifuge/pod/testingutils/generic" + + "github.com/centrifuge/pod/config" + "github.com/centrifuge/go-substrate-rpc-client/v4/signature" + "github.com/centrifuge/pod/pallets" "github.com/centrifuge/pod/testingutils/keyrings" ) @@ -65,3 +75,108 @@ func getRandomTestKeyring() signature.KeyringPair { return testKeyrings[rand.Intn(len(testKeyrings))] } + +func BootstrapTestAccount( + ctx context.Context, + serviceCtx map[string]any, + originKrp signature.KeyringPair, +) (config.Account, error) { + anonymousProxyAccountID, err := pallets.CreateAnonymousProxy(serviceCtx, originKrp) + + if err != nil { + return nil, fmt.Errorf("couldn't get create anonymous proxy: %w", err) + } + + log.Info("Creating identity") + + acc, err := CreateTestIdentity(serviceCtx, anonymousProxyAccountID, "") + + if err != nil { + return nil, fmt.Errorf("couldn't create test account: %w", err) + } + + calls, err := getPostAccountBootstrapCalls(serviceCtx, acc) + + if err != nil { + return nil, fmt.Errorf("couldn't get post account bootstrap calls: %w", err) + } + + if err = pallets.ExecuteWithTestClient(ctx, serviceCtx, originKrp, utility.BatchCalls(calls...)); err != nil { + return nil, fmt.Errorf("couldn't execute post account bootstrap: %w", err) + } + + return acc, nil +} + +func CreateTestIdentity( + serviceCtx map[string]any, + accountID *types.AccountID, + webhookURL string, +) (config.Account, error) { + cfgService := genericUtils.GetService[config.Service](serviceCtx) + identityService := genericUtils.GetService[Service](serviceCtx) + + if acc, err := cfgService.GetAccount(accountID.ToBytes()); err == nil { + log.Info("Account already created for - ", accountID.ToHexString()) + + return acc, nil + } + + acc, err := identityService.CreateIdentity(context.Background(), &CreateIdentityRequest{ + Identity: accountID, + WebhookURL: webhookURL, + PrecommitEnabled: true, + }) + + if err != nil { + return nil, fmt.Errorf("couldn't create identity: %w", err) + } + + return acc, nil +} + +const ( + defaultBalance = "10000000000000000000000" +) + +func getPostAccountBootstrapCalls(serviceCtx map[string]any, acc config.Account) ([]centchain.CallProviderFn, error) { + cfgService := genericUtils.GetService[config.Service](serviceCtx) + + podOperator, err := cfgService.GetPodOperator() + + if err != nil { + return nil, fmt.Errorf("couldn't get pod operator: %w", err) + } + + postBootstrapFns := []centchain.CallProviderFn{ + pallets.GetBalanceTransferCallCreationFn(defaultBalance, acc.GetIdentity().ToBytes()), + pallets.GetBalanceTransferCallCreationFn(defaultBalance, podOperator.GetAccountID().ToBytes()), + } + + postBootstrapFns = append( + postBootstrapFns, + pallets.GetAddProxyCallCreationFns( + acc.GetIdentity(), + pallets.ProxyPairs{ + { + Delegate: podOperator.GetAccountID(), + ProxyType: proxyType.PodOperation, + }, + { + Delegate: podOperator.GetAccountID(), + ProxyType: proxyType.KeystoreManagement, + }, + }, + )..., + ) + + addKeysCall, err := pallets.GetAddKeysCall(serviceCtx, acc) + + if err != nil { + return nil, fmt.Errorf("couldn't get AddKeys call: %w", err) + } + + postBootstrapFns = append(postBootstrapFns, addKeysCall) + + return postBootstrapFns, nil +} diff --git a/nft/v3/service_mock.go b/nft/v3/service_mock.go index 4fbbacce7..b4947a652 100644 --- a/nft/v3/service_mock.go +++ b/nft/v3/service_mock.go @@ -106,13 +106,13 @@ func (_m *ServiceMock) GetNFTOwner(collectionID types.U64, itemID types.U128) (* return r0, r1 } -// MintNFT provides a mock function with given fields: ctx, req, documentPending -func (_m *ServiceMock) MintNFT(ctx context.Context, req *MintNFTRequest, documentPending bool) (*MintNFTResponse, error) { - ret := _m.Called(ctx, req, documentPending) +// MintNFT provides a mock function with given fields: ctx, req, pendingDocument +func (_m *ServiceMock) MintNFT(ctx context.Context, req *MintNFTRequest, pendingDocument bool) (*MintNFTResponse, error) { + ret := _m.Called(ctx, req, pendingDocument) var r0 *MintNFTResponse if rf, ok := ret.Get(0).(func(context.Context, *MintNFTRequest, bool) *MintNFTResponse); ok { - r0 = rf(ctx, req, documentPending) + r0 = rf(ctx, req, pendingDocument) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*MintNFTResponse) @@ -121,7 +121,7 @@ func (_m *ServiceMock) MintNFT(ctx context.Context, req *MintNFTRequest, documen var r1 error if rf, ok := ret.Get(1).(func(context.Context, *MintNFTRequest, bool) error); ok { - r1 = rf(ctx, req, documentPending) + r1 = rf(ctx, req, pendingDocument) } else { r1 = ret.Error(1) } diff --git a/pallets/bootstrapper.go b/pallets/bootstrapper.go index bc093dd72..60271c9a6 100644 --- a/pallets/bootstrapper.go +++ b/pallets/bootstrapper.go @@ -6,17 +6,21 @@ import ( "github.com/centrifuge/pod/errors" "github.com/centrifuge/pod/pallets/anchors" "github.com/centrifuge/pod/pallets/keystore" + "github.com/centrifuge/pod/pallets/loans" + "github.com/centrifuge/pod/pallets/permissions" "github.com/centrifuge/pod/pallets/proxy" "github.com/centrifuge/pod/pallets/uniques" "github.com/centrifuge/pod/pallets/utility" ) const ( - BootstrappedAnchorService = "BootstrappedAnchorService" - BootstrappedKeystoreAPI = "BootstrappedKeystoreAPI" - BootstrappedProxyAPI = "BootstrappedProxyAPI" - BootstrappedUniquesAPI = "BootstrappedUniquesAPI" - BootstrappedUtilityAPI = "BootstrappedUtilityAPI" + BootstrappedAnchorService = "BootstrappedAnchorService" + BootstrappedKeystoreAPI = "BootstrappedKeystoreAPI" + BootstrappedProxyAPI = "BootstrappedProxyAPI" + BootstrappedUniquesAPI = "BootstrappedUniquesAPI" + BootstrappedUtilityAPI = "BootstrappedUtilityAPI" + BootstrappedPermissionsAPI = "BootstrappedPermissionsAPI" + BootstrappedLoansAPI = "BootstrappedLoansAPI" ) type Bootstrapper struct{} @@ -65,5 +69,13 @@ func (b *Bootstrapper) Bootstrap(context map[string]interface{}) error { context[BootstrappedUtilityAPI] = utilityAPI + permissionsAPI := permissions.NewAPI(centAPI) + + context[BootstrappedPermissionsAPI] = permissionsAPI + + loansAPI := loans.NewAPI(centAPI) + + context[BootstrappedLoansAPI] = loansAPI + return nil } diff --git a/pallets/keystore/api.go b/pallets/keystore/api.go index 83cfcffd4..9112e0f1d 100644 --- a/pallets/keystore/api.go +++ b/pallets/keystore/api.go @@ -165,7 +165,7 @@ func (a *api) RevokeKeys( func (a *api) GetKey(accountID *types.AccountID, keyID *keystore.KeyID) (*keystore.Key, error) { err := validation.Validate( - validation.NewValidator(accountID, validation.AccountIDValidatorFn), + validation.NewValidator(accountID, validation.AccountIDValidationFn), validation.NewValidator(keyID, keyIDValidationFn), ) @@ -228,7 +228,7 @@ func (a *api) GetKey(accountID *types.AccountID, keyID *keystore.KeyID) (*keysto func (a *api) GetLastKeyByPurpose(accountID *types.AccountID, keyPurpose keystore.KeyPurpose) (*types.Hash, error) { err := validation.Validate( - validation.NewValidator(accountID, validation.AccountIDValidatorFn), + validation.NewValidator(accountID, validation.AccountIDValidationFn), ) if err != nil { diff --git a/pallets/loans/api.go b/pallets/loans/api.go new file mode 100644 index 000000000..a7a1e9dcb --- /dev/null +++ b/pallets/loans/api.go @@ -0,0 +1,114 @@ +package loans + +import ( + "github.com/centrifuge/chain-custom-types/pkg/loans" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" + "github.com/centrifuge/pod/centchain" + "github.com/centrifuge/pod/errors" + "github.com/centrifuge/pod/validation" + logging "github.com/ipfs/go-log" +) + +var ( + log = logging.Logger("loans_api") +) + +const ( + ErrPoolIDEncoding = errors.Error("pool ID encoding") + ErrLoanIDEncoding = errors.Error("loan ID encoding") + ErrCreatedLoanRetrieval = errors.Error("created loan retrieval") + ErrCreatedLoanNotFound = errors.Error("created loan not found") +) + +const ( + PalletName = "Loans" + CreatedLoanStorageName = "CreatedLoan" +) + +type CreatedLoanStorageEntry struct { + Info loans.LoanInfo + Borrower types.AccountID +} + +//go:generate mockery --name API --structname APIMock --filename api_mock.go --inpackage + +type API interface { + GetCreatedLoan(poolID types.U64, loanID types.U64) (*CreatedLoanStorageEntry, error) +} + +type api struct { + centAPI centchain.API +} + +func NewAPI(centAPI centchain.API) API { + return &api{centAPI: centAPI} +} + +func (a *api) GetCreatedLoan(poolID types.U64, loanID types.U64) (*CreatedLoanStorageEntry, error) { + err := validation.Validate( + validation.NewValidator(poolID, validation.U64ValidationFn), + ) + + if err != nil { + log.Errorf("Validation error: %s", err) + + return nil, err + } + + meta, err := a.centAPI.GetMetadataLatest() + + if err != nil { + log.Errorf("Couldn't retrieve latest metadata: %s", err) + + return nil, errors.ErrMetadataRetrieval + } + + encodedPoolID, err := codec.Encode(poolID) + + if err != nil { + log.Errorf("Couldn't encode pool ID: %s", err) + + return nil, ErrPoolIDEncoding + } + + encodedLoanID, err := codec.Encode(loanID) + + if err != nil { + log.Errorf("Couldn't encode loan ID: %s", err) + + return nil, ErrLoanIDEncoding + } + + storageKey, err := types.CreateStorageKey( + meta, + PalletName, + CreatedLoanStorageName, + encodedPoolID, + encodedLoanID, + ) + + if err != nil { + log.Errorf("Couldn't create storage key: %s", err) + + return nil, errors.ErrStorageKeyCreation + } + + var createdLoan CreatedLoanStorageEntry + + ok, err := a.centAPI.GetStorageLatest(storageKey, &createdLoan) + + if err != nil { + log.Errorf("Couldn't retrieve created loan from storage: %s", err) + + return nil, ErrCreatedLoanRetrieval + } + + if !ok { + log.Errorf("Created loan not found for pool ID %d and loan ID %d", poolID, loanID) + + return nil, ErrCreatedLoanNotFound + } + + return &createdLoan, nil +} diff --git a/pallets/loans/api_integration_test.go b/pallets/loans/api_integration_test.go new file mode 100644 index 000000000..b16a4fe7c --- /dev/null +++ b/pallets/loans/api_integration_test.go @@ -0,0 +1,218 @@ +//go:build integration + +package loans_test + +import ( + "context" + "math/big" + "math/rand" + "os" + "testing" + "time" + + loansTypes "github.com/centrifuge/chain-custom-types/pkg/loans" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/bootstrap" + "github.com/centrifuge/pod/bootstrap/bootstrappers/integration_test" + "github.com/centrifuge/pod/bootstrap/bootstrappers/testlogging" + "github.com/centrifuge/pod/centchain" + "github.com/centrifuge/pod/config" + "github.com/centrifuge/pod/config/configstore" + "github.com/centrifuge/pod/dispatcher" + v2 "github.com/centrifuge/pod/identity/v2" + "github.com/centrifuge/pod/jobs" + "github.com/centrifuge/pod/pallets" + "github.com/centrifuge/pod/pallets/loans" + "github.com/centrifuge/pod/pallets/utility" + "github.com/centrifuge/pod/storage/leveldb" + genericUtils "github.com/centrifuge/pod/testingutils/generic" + "github.com/centrifuge/pod/testingutils/keyrings" + "github.com/stretchr/testify/assert" +) + +var integrationTestBootstrappers = []bootstrap.TestBootstrapper{ + &integration_test.Bootstrapper{}, + &testlogging.TestLoggingBootstrapper{}, + &config.Bootstrapper{}, + &leveldb.Bootstrapper{}, + &configstore.Bootstrapper{}, + &jobs.Bootstrapper{}, + centchain.Bootstrapper{}, + &pallets.Bootstrapper{}, + &dispatcher.Bootstrapper{}, + &v2.Bootstrapper{}, +} + +var ( + serviceCtx map[string]any + cfgService config.Service + loansAPI loans.API +) + +func TestMain(m *testing.M) { + serviceCtx = bootstrap.RunTestBootstrappers(integrationTestBootstrappers, nil) + cfgService = genericUtils.GetService[config.Service](serviceCtx) + loansAPI = genericUtils.GetService[loans.API](serviceCtx) + + result := m.Run() + + bootstrap.RunTestTeardown(integrationTestBootstrappers) + + os.Exit(result) +} + +func TestIntegration_CreatedLoanRetrieval(t *testing.T) { + testKeyring := keyrings.AliceKeyRingPair + + testAccountID, err := types.NewAccountID(testKeyring.PublicKey) + assert.NoError(t, err) + + nftCollectionID := types.U64(rand.Uint32()) + nftItemID := types.NewU128(*big.NewInt(rand.Int63())) + + poolID := types.U64(rand.Int63()) + + // Create NFT. + + nftCollectionCall := pallets.GetCreateNFTCollectionCallCreationFn(nftCollectionID, testAccountID) + nftMintCall := pallets.GetNFTMintCallCreationFn(nftCollectionID, nftItemID, testAccountID) + + // Create a pool using Alice's account as the owner. + + registerPoolCall := pallets.GetRegisterPoolCallCreationFn( + testAccountID, + poolID, + []pallets.TrancheInput{ + { + TrancheType: pallets.TrancheType{ + IsResidual: true, + }, + Seniority: types.NewOption[types.U32](0), + TrancheMetadata: pallets.TrancheMetadata{ + TokenName: []byte("CFG-TEST-1"), + TokenSymbol: []byte("CFGT1"), + }, + }, + { + TrancheType: pallets.TrancheType{ + IsNonResidual: true, + AsNonResidual: pallets.NonResidual{ + InterestRatePerSec: types.NewU128(*big.NewInt(1)), + MinRiskBuffer: 5, + }, + }, + Seniority: types.NewOption[types.U32](1), + TrancheMetadata: pallets.TrancheMetadata{ + TokenName: []byte("CFG-TEST-2"), + TokenSymbol: []byte("CFGT2"), + }, + }, + }, + pallets.CurrencyID{ + IsForeignAsset: true, + AsForeignAsset: types.U32(1), + }, + types.NewU128(*big.NewInt(rand.Int63())), + []byte("test"), + ) + + // Assign the Borrower permission to Alice's account. + + addBorrowerPermissionsCall := pallets.GetPermissionsCallCreationFn( + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsPoolAdmin: true}, + }, + testAccountID, + pallets.PermissionScope{ + IsPool: true, + AsPool: poolID, + }, + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsBorrower: true}, + }, + ) + + // Create a test loan using some random info. + + loanInfo := loansTypes.LoanInfo{ + Schedule: loansTypes.RepaymentSchedule{ + Maturity: loansTypes.Maturity{ + IsFixed: true, + // 1 Year maturity date. + AsFixed: types.U64(time.Now().Add(356 * 24 * time.Hour).Unix()), + }, + InterestPayments: loansTypes.InterestPayments{ + IsNone: true, + }, + PayDownSchedule: loansTypes.PayDownSchedule{ + IsNone: true, + }, + }, + Collateral: loansTypes.Asset{ + CollectionID: nftCollectionID, + ItemID: nftItemID, + }, + Pricing: loansTypes.Pricing{ + IsInternal: true, + AsInternal: loansTypes.InternalPricing{ + CollateralValue: types.NewU128(*big.NewInt(rand.Int63())), + ValuationMethod: loansTypes.ValuationMethod{ + IsOutstandingDebt: true, + }, + InterestRate: types.NewU128(*big.NewInt(0)), + MaxBorrowAmount: loansTypes.MaxBorrowAmount{ + IsUpToTotalBorrowed: true, + AsUpToTotalBorrowed: loansTypes.AdvanceRate{ + AdvanceRate: types.NewU128(*big.NewInt(11)), + }, + }, + }, + }, + Restrictions: loansTypes.LoanRestrictions{ + Borrows: loansTypes.BorrowRestrictions{ + IsNotWrittenOff: true, + }, + Repayments: loansTypes.RepayRestrictions{ + IsNone: true, + }, + }, + } + + loanCreateCall := pallets.GetCreateLoanCallCreationFn(poolID, loanInfo) + + // Execute the batch call using the test keyring. + + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute) + defer cancel() + + _ = nftCollectionCall + _ = nftMintCall + _ = registerPoolCall + _ = addBorrowerPermissionsCall + _ = loanCreateCall + + err = pallets.ExecuteWithTestClient( + ctx, + serviceCtx, + testKeyring, + utility.BatchCalls( + nftCollectionCall, + nftMintCall, + registerPoolCall, + addBorrowerPermissionsCall, + loanCreateCall, + ), + ) + assert.NoError(t, err) + + // The first loan created for a pool will have index/ID 0. + + loanID := types.U64(1) + + res, err := loansAPI.GetCreatedLoan(poolID, loanID) + assert.NoError(t, err) + assert.Equal(t, loanInfo.Collateral.CollectionID, res.Info.Collateral.CollectionID) + assert.Equal(t, loanInfo.Collateral.ItemID, res.Info.Collateral.ItemID) +} diff --git a/pallets/loans/api_mock.go b/pallets/loans/api_mock.go new file mode 100644 index 000000000..0f06fa174 --- /dev/null +++ b/pallets/loans/api_mock.go @@ -0,0 +1,51 @@ +// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. + +package loans + +import ( + types "github.com/centrifuge/go-substrate-rpc-client/v4/types" + mock "github.com/stretchr/testify/mock" +) + +// APIMock is an autogenerated mock type for the API type +type APIMock struct { + mock.Mock +} + +// GetCreatedLoan provides a mock function with given fields: poolID, loanID +func (_m *APIMock) GetCreatedLoan(poolID types.U64, loanID types.U64) (*CreatedLoanStorageEntry, error) { + ret := _m.Called(poolID, loanID) + + var r0 *CreatedLoanStorageEntry + if rf, ok := ret.Get(0).(func(types.U64, types.U64) *CreatedLoanStorageEntry); ok { + r0 = rf(poolID, loanID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*CreatedLoanStorageEntry) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(types.U64, types.U64) error); ok { + r1 = rf(poolID, loanID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type NewAPIMockT interface { + mock.TestingT + Cleanup(func()) +} + +// NewAPIMock creates a new instance of APIMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewAPIMock(t NewAPIMockT) *APIMock { + mock := &APIMock{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pallets/loans/api_test.go b/pallets/loans/api_test.go new file mode 100644 index 000000000..fb4461dc6 --- /dev/null +++ b/pallets/loans/api_test.go @@ -0,0 +1,195 @@ +//go:build unit + +package loans + +import ( + "testing" + + "github.com/centrifuge/pod/errors" + + "github.com/centrifuge/pod/validation" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" + "github.com/centrifuge/pod/centchain" + "github.com/centrifuge/pod/testingutils" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" +) + +func TestApi_GetCreatedLoan(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + poolID := types.U64(123) + loanID := types.U64(0) + + meta, err := testingutils.GetTestMetadata() + assert.NoError(t, err) + + centAPIMock. + On("GetMetadataLatest"). + Return(meta, nil). + Once() + + encodedPoolID, err := codec.Encode(poolID) + assert.NoError(t, err) + + encodedLoanID, err := codec.Encode(loanID) + assert.NoError(t, err) + + storageKey, err := types.CreateStorageKey(meta, PalletName, CreatedLoanStorageName, encodedPoolID, encodedLoanID) + assert.NoError(t, err) + + testStorageEntry := CreatedLoanStorageEntry{} + + centAPIMock. + On("GetStorageLatest", storageKey, mock.Anything). + Run(func(args mock.Arguments) { + storageEntry, ok := args.Get(1).(*CreatedLoanStorageEntry) + assert.True(t, ok) + + *storageEntry = testStorageEntry + }). + Return(true, nil). + Once() + + res, err := api.GetCreatedLoan(poolID, loanID) + assert.NoError(t, err) + assert.Equal(t, &testStorageEntry, res) +} + +func TestApi_GetCreatedLoan_InvalidPoolID(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + poolID := types.U64(0) + loanID := types.U64(0) + + res, err := api.GetCreatedLoan(poolID, loanID) + assert.ErrorIs(t, err, validation.ErrInvalidU64) + assert.Nil(t, res) +} + +func TestApi_GetCreatedLoan_MetadataRetrievalError(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + poolID := types.U64(123) + loanID := types.U64(0) + + centAPIMock. + On("GetMetadataLatest"). + Return(nil, errors.New("error")). + Once() + + res, err := api.GetCreatedLoan(poolID, loanID) + assert.ErrorIs(t, err, errors.ErrMetadataRetrieval) + assert.Nil(t, res) +} + +func TestApi_GetCreatedLoan_StorageKeyCreationError(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + poolID := types.U64(123) + loanID := types.U64(0) + + var meta types.Metadata + + // NOTE - types.MetadataV14Data does not have info on the Loans pallet, + // causing types.CreateStorageKey to fail. + err := codec.DecodeFromHex(types.MetadataV14Data, &meta) + assert.NoError(t, err) + + centAPIMock. + On("GetMetadataLatest"). + Return(&meta, nil). + Once() + + res, err := api.GetCreatedLoan(poolID, loanID) + assert.ErrorIs(t, err, errors.ErrStorageKeyCreation) + assert.Nil(t, res) +} + +func TestApi_GetCreatedLoan_StorageRetrievalError(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + poolID := types.U64(123) + loanID := types.U64(0) + + meta, err := testingutils.GetTestMetadata() + assert.NoError(t, err) + + centAPIMock. + On("GetMetadataLatest"). + Return(meta, nil). + Once() + + encodedPoolID, err := codec.Encode(poolID) + assert.NoError(t, err) + + encodedLoanID, err := codec.Encode(loanID) + assert.NoError(t, err) + + storageKey, err := types.CreateStorageKey(meta, PalletName, CreatedLoanStorageName, encodedPoolID, encodedLoanID) + assert.NoError(t, err) + + centAPIMock. + On("GetStorageLatest", storageKey, mock.Anything). + Run(func(args mock.Arguments) { + _, ok := args.Get(1).(*CreatedLoanStorageEntry) + assert.True(t, ok) + }). + Return(false, errors.New("error")). + Once() + + res, err := api.GetCreatedLoan(poolID, loanID) + assert.ErrorIs(t, err, ErrCreatedLoanRetrieval) + assert.Nil(t, res) +} + +func TestApi_GetCreatedLoan_StorageEntryNotFound(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + poolID := types.U64(123) + loanID := types.U64(0) + + meta, err := testingutils.GetTestMetadata() + assert.NoError(t, err) + + centAPIMock. + On("GetMetadataLatest"). + Return(meta, nil). + Once() + + encodedPoolID, err := codec.Encode(poolID) + assert.NoError(t, err) + + encodedLoanID, err := codec.Encode(loanID) + assert.NoError(t, err) + + storageKey, err := types.CreateStorageKey(meta, PalletName, CreatedLoanStorageName, encodedPoolID, encodedLoanID) + assert.NoError(t, err) + + centAPIMock. + On("GetStorageLatest", storageKey, mock.Anything). + Run(func(args mock.Arguments) { + _, ok := args.Get(1).(*CreatedLoanStorageEntry) + assert.True(t, ok) + }). + Return(false, nil). + Once() + + res, err := api.GetCreatedLoan(poolID, loanID) + assert.ErrorIs(t, err, ErrCreatedLoanNotFound) + assert.Nil(t, res) +} diff --git a/pallets/permissions/api.go b/pallets/permissions/api.go new file mode 100644 index 000000000..bc4c06b31 --- /dev/null +++ b/pallets/permissions/api.go @@ -0,0 +1,115 @@ +package permissions + +import ( + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" + "github.com/centrifuge/pod/centchain" + "github.com/centrifuge/pod/errors" + "github.com/centrifuge/pod/validation" + logging "github.com/ipfs/go-log" +) + +var ( + log = logging.Logger("permissions_api") +) + +const ( + ErrPermissionRolesNotFound = errors.Error("permission roles not found") + ErrPermissionRolesRetrieval = errors.Error("permission roles retrieval") + ErrAccountIDEncoding = errors.Error("account ID encoding") + ErrPermissionScopeEncoding = errors.Error("permission scope encoding") +) + +const ( + PalletName = "Permissions" + PermissionStorageName = "Permission" +) + +//go:generate mockery --name API --structname APIMock --filename api_mock.go --inpackage + +type API interface { + GetPermissionRoles(accountID *types.AccountID, poolID types.U64) (*PermissionRoles, error) +} + +type api struct { + centAPI centchain.API +} + +func NewAPI(centAPI centchain.API) API { + return &api{centAPI: centAPI} +} + +func (a *api) GetPermissionRoles(accountID *types.AccountID, poolID types.U64) (*PermissionRoles, error) { + err := validation.Validate( + validation.NewValidator(accountID, validation.AccountIDValidationFn), + validation.NewValidator(poolID, validation.U64ValidationFn), + ) + + if err != nil { + log.Errorf("Validation error: %s", err) + + return nil, err + } + + meta, err := a.centAPI.GetMetadataLatest() + + if err != nil { + log.Errorf("Couldn't retrieve latest metadata: %s", err) + + return nil, errors.ErrMetadataRetrieval + } + + encodedAccountID, err := codec.Encode(accountID) + + if err != nil { + log.Errorf("Couldn't encode account ID: %s", err) + + return nil, ErrAccountIDEncoding + } + + scope := PermissionScope{ + IsPool: true, + AsPool: poolID, + } + + encodedScope, err := codec.Encode(scope) + + if err != nil { + log.Errorf("Couldn't encode permission scope: %s", err) + + return nil, ErrPermissionScopeEncoding + } + + storageKey, err := types.CreateStorageKey( + meta, + PalletName, + PermissionStorageName, + encodedAccountID, + encodedScope, + ) + + if err != nil { + log.Errorf("Couldn't create storage key: %s", err) + + return nil, errors.ErrStorageKeyCreation + } + + var permissionRoles PermissionRoles + + ok, err := a.centAPI.GetStorageLatest(storageKey, &permissionRoles) + + if err != nil { + log.Errorf("Couldn't retrieve permission roles from storage: %s", err) + + return nil, ErrPermissionRolesRetrieval + } + + if !ok { + log.Errorf("Permission roles not found for account ID %s and pool ID %d", accountID.ToHexString(), poolID) + + return nil, ErrPermissionRolesNotFound + } + + return &permissionRoles, nil + +} diff --git a/pallets/permissions/api_integration_test.go b/pallets/permissions/api_integration_test.go new file mode 100644 index 000000000..838744980 --- /dev/null +++ b/pallets/permissions/api_integration_test.go @@ -0,0 +1,147 @@ +//go:build integration + +package permissions_test + +import ( + "context" + "math/big" + "math/rand" + "os" + "testing" + "time" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/bootstrap" + "github.com/centrifuge/pod/bootstrap/bootstrappers/integration_test" + "github.com/centrifuge/pod/bootstrap/bootstrappers/testlogging" + "github.com/centrifuge/pod/centchain" + "github.com/centrifuge/pod/config" + "github.com/centrifuge/pod/config/configstore" + "github.com/centrifuge/pod/dispatcher" + v2 "github.com/centrifuge/pod/identity/v2" + "github.com/centrifuge/pod/jobs" + "github.com/centrifuge/pod/pallets" + "github.com/centrifuge/pod/pallets/permissions" + "github.com/centrifuge/pod/pallets/utility" + "github.com/centrifuge/pod/storage/leveldb" + genericUtils "github.com/centrifuge/pod/testingutils/generic" + "github.com/centrifuge/pod/testingutils/keyrings" + "github.com/stretchr/testify/assert" +) + +var integrationTestBootstrappers = []bootstrap.TestBootstrapper{ + &integration_test.Bootstrapper{}, + &testlogging.TestLoggingBootstrapper{}, + &config.Bootstrapper{}, + &leveldb.Bootstrapper{}, + &configstore.Bootstrapper{}, + &jobs.Bootstrapper{}, + centchain.Bootstrapper{}, + &pallets.Bootstrapper{}, + &dispatcher.Bootstrapper{}, + &v2.Bootstrapper{}, +} + +var ( + serviceCtx map[string]any + cfgService config.Service + permissionsAPI permissions.API +) + +func TestMain(m *testing.M) { + serviceCtx = bootstrap.RunTestBootstrappers(integrationTestBootstrappers, nil) + cfgService = genericUtils.GetService[config.Service](serviceCtx) + permissionsAPI = genericUtils.GetService[permissions.API](serviceCtx) + + result := m.Run() + + bootstrap.RunTestTeardown(integrationTestBootstrappers) + + os.Exit(result) +} + +func TestIntegration_PermissionRolesRetrieval(t *testing.T) { + testKeyring := keyrings.AliceKeyRingPair + + testAccountID, err := types.NewAccountID(testKeyring.PublicKey) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + // Create a pool using Alice's account as the owner. + + registerPoolCall := pallets.GetRegisterPoolCallCreationFn( + testAccountID, + poolID, + []pallets.TrancheInput{ + { + TrancheType: pallets.TrancheType{ + IsResidual: true, + }, + Seniority: types.NewOption[types.U32](0), + TrancheMetadata: pallets.TrancheMetadata{ + TokenName: []byte("CFG-TEST-1"), + TokenSymbol: []byte("CFGT1"), + }, + }, + { + TrancheType: pallets.TrancheType{ + IsNonResidual: true, + AsNonResidual: pallets.NonResidual{ + InterestRatePerSec: types.NewU128(*big.NewInt(1)), + MinRiskBuffer: 5, + }, + }, + Seniority: types.NewOption[types.U32](1), + TrancheMetadata: pallets.TrancheMetadata{ + TokenName: []byte("CFG-TEST-2"), + TokenSymbol: []byte("CFGT2"), + }, + }, + }, + pallets.CurrencyID{ + IsForeignAsset: true, + AsForeignAsset: types.U32(1), + }, + types.NewU128(*big.NewInt(rand.Int63())), + []byte("test"), + ) + + // Assign the Borrower permission to Alice's account. + + addBorrowerPermissionsCall := pallets.GetPermissionsCallCreationFn( + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsPoolAdmin: true}, + }, + testAccountID, + pallets.PermissionScope{ + IsPool: true, + AsPool: poolID, + }, + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsBorrower: true}, + }, + ) + + // Execute the batch call using the test keyring. + + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute) + defer cancel() + + err = pallets.ExecuteWithTestClient( + ctx, + serviceCtx, + testKeyring, + utility.BatchCalls( + registerPoolCall, + addBorrowerPermissionsCall, + ), + ) + assert.NoError(t, err) + + res, err := permissionsAPI.GetPermissionRoles(testAccountID, poolID) + assert.NoError(t, err) + assert.True(t, res.PoolAdmin&permissions.Borrower == permissions.Borrower) +} diff --git a/pallets/permissions/api_mock.go b/pallets/permissions/api_mock.go new file mode 100644 index 000000000..651849e07 --- /dev/null +++ b/pallets/permissions/api_mock.go @@ -0,0 +1,51 @@ +// Code generated by mockery v2.13.0-beta.1. DO NOT EDIT. + +package permissions + +import ( + types "github.com/centrifuge/go-substrate-rpc-client/v4/types" + mock "github.com/stretchr/testify/mock" +) + +// APIMock is an autogenerated mock type for the API type +type APIMock struct { + mock.Mock +} + +// GetPermissionRoles provides a mock function with given fields: accountID, poolID +func (_m *APIMock) GetPermissionRoles(accountID *types.AccountID, poolID types.U64) (*PermissionRoles, error) { + ret := _m.Called(accountID, poolID) + + var r0 *PermissionRoles + if rf, ok := ret.Get(0).(func(*types.AccountID, types.U64) *PermissionRoles); ok { + r0 = rf(accountID, poolID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*PermissionRoles) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(*types.AccountID, types.U64) error); ok { + r1 = rf(accountID, poolID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type NewAPIMockT interface { + mock.TestingT + Cleanup(func()) +} + +// NewAPIMock creates a new instance of APIMock. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewAPIMock(t NewAPIMockT) *APIMock { + mock := &APIMock{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pallets/permissions/api_test.go b/pallets/permissions/api_test.go new file mode 100644 index 000000000..af1cd6043 --- /dev/null +++ b/pallets/permissions/api_test.go @@ -0,0 +1,239 @@ +//go:build unit + +package permissions + +import ( + "math/rand" + "testing" + + "github.com/centrifuge/pod/errors" + + "github.com/centrifuge/pod/validation" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types/codec" + "github.com/centrifuge/pod/testingutils" + "github.com/stretchr/testify/mock" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/centchain" + "github.com/centrifuge/pod/utils" + "github.com/stretchr/testify/assert" +) + +func TestApi_GetPermissionRoles(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + meta, err := testingutils.GetTestMetadata() + + centAPIMock.On("GetMetadataLatest"). + Return(meta, nil). + Once() + + encodedAccountID, err := codec.Encode(accountID) + assert.NoError(t, err) + + scope := PermissionScope{ + IsPool: true, + AsPool: poolID, + } + + encodedScope, err := codec.Encode(scope) + assert.NoError(t, err) + + storageKey, err := types.CreateStorageKey( + meta, + PalletName, + PermissionStorageName, + encodedAccountID, + encodedScope, + ) + assert.NoError(t, err) + + permissionRoles := PermissionRoles{ + PoolAdmin: PoolAdmin, + CurrencyAdmin: PermissionedAssetIssuer, + } + + centAPIMock.On("GetStorageLatest", storageKey, mock.Anything). + Run(func(args mock.Arguments) { + storageEntry, ok := args.Get(1).(*PermissionRoles) + assert.True(t, ok) + + *storageEntry = permissionRoles + }). + Return(true, nil). + Once() + + res, err := api.GetPermissionRoles(accountID, poolID) + assert.NoError(t, err) + assert.Equal(t, &permissionRoles, res) +} + +func TestApi_GetPermissionRoles_ValidationErrors(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + res, err := api.GetPermissionRoles(nil, poolID) + assert.Nil(t, res) + assert.ErrorIs(t, err, validation.ErrInvalidAccountID) + + res, err = api.GetPermissionRoles(accountID, 0) + assert.Nil(t, res) + assert.ErrorIs(t, err, validation.ErrInvalidU64) +} + +func TestApi_GetPermissionRoles_MetadataRetrievalError(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + centAPIMock.On("GetMetadataLatest"). + Return(nil, errors.New("error")). + Once() + + res, err := api.GetPermissionRoles(accountID, poolID) + assert.Nil(t, res) + assert.ErrorIs(t, err, errors.ErrMetadataRetrieval) +} + +func TestApi_GetPermissionRoles_StorageKeyCreationError(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + var meta types.Metadata + + // NOTE - types.MetadataV14Data does not have info on the Permissions pallet, + // causing types.CreateStorageKey to fail. + err = codec.DecodeFromHex(types.MetadataV14Data, &meta) + assert.NoError(t, err) + + centAPIMock.On("GetMetadataLatest"). + Return(&meta, nil). + Once() + + res, err := api.GetPermissionRoles(accountID, poolID) + assert.Nil(t, res) + assert.ErrorIs(t, err, errors.ErrStorageKeyCreation) +} + +func TestApi_GetPermissionRoles_StorageRetrievalError(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + meta, err := testingutils.GetTestMetadata() + + centAPIMock.On("GetMetadataLatest"). + Return(meta, nil). + Once() + + encodedAccountID, err := codec.Encode(accountID) + assert.NoError(t, err) + + scope := PermissionScope{ + IsPool: true, + AsPool: poolID, + } + + encodedScope, err := codec.Encode(scope) + assert.NoError(t, err) + + storageKey, err := types.CreateStorageKey( + meta, + PalletName, + PermissionStorageName, + encodedAccountID, + encodedScope, + ) + assert.NoError(t, err) + + centAPIMock.On("GetStorageLatest", storageKey, mock.Anything). + Run(func(args mock.Arguments) { + _, ok := args.Get(1).(*PermissionRoles) + assert.True(t, ok) + }). + Return(false, errors.New("error")). + Once() + + res, err := api.GetPermissionRoles(accountID, poolID) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrPermissionRolesRetrieval) +} + +func TestApi_GetPermissionRoles_StorageEntryNotFound(t *testing.T) { + centAPIMock := centchain.NewAPIMock(t) + + api := NewAPI(centAPIMock) + + accountID, err := types.NewAccountID(utils.RandomSlice(32)) + assert.NoError(t, err) + + poolID := types.U64(rand.Uint32()) + + meta, err := testingutils.GetTestMetadata() + + centAPIMock.On("GetMetadataLatest"). + Return(meta, nil). + Once() + + encodedAccountID, err := codec.Encode(accountID) + assert.NoError(t, err) + + scope := PermissionScope{ + IsPool: true, + AsPool: poolID, + } + + encodedScope, err := codec.Encode(scope) + assert.NoError(t, err) + + storageKey, err := types.CreateStorageKey( + meta, + PalletName, + PermissionStorageName, + encodedAccountID, + encodedScope, + ) + assert.NoError(t, err) + + centAPIMock.On("GetStorageLatest", storageKey, mock.Anything). + Run(func(args mock.Arguments) { + _, ok := args.Get(1).(*PermissionRoles) + assert.True(t, ok) + }). + Return(false, nil). + Once() + + res, err := api.GetPermissionRoles(accountID, poolID) + assert.Nil(t, res) + assert.ErrorIs(t, err, ErrPermissionRolesNotFound) +} diff --git a/pallets/permissions/types.go b/pallets/permissions/types.go new file mode 100644 index 000000000..6c79c13d9 --- /dev/null +++ b/pallets/permissions/types.go @@ -0,0 +1,98 @@ +package permissions + +import ( + "errors" + + "github.com/centrifuge/go-substrate-rpc-client/v4/scale" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" +) + +type PermissionScope struct { + IsPool bool + AsPool types.U64 + + IsCurrency bool + AsCurrency types.CurrencyID +} + +func (p *PermissionScope) Decode(decoder scale.Decoder) error { + b, err := decoder.ReadOneByte() + if err != nil { + return err + } + + switch b { + case 0: + p.IsPool = true + + return decoder.Decode(p.AsPool) + case 1: + p.IsCurrency = true + + return decoder.Decode(p.AsCurrency) + default: + return errors.New("unsupported permission scope") + } +} + +func (p PermissionScope) Encode(encoder scale.Encoder) error { + switch { + case p.IsPool: + if err := encoder.PushByte(0); err != nil { + return err + } + + return encoder.Encode(p.AsPool) + case p.IsCurrency: + if err := encoder.PushByte(1); err != nil { + return err + } + + return encoder.Encode(p.AsCurrency) + default: + return errors.New("unsupported permission scope") + } +} + +type PermissionRoles struct { + PoolAdmin PoolAdminRole + CurrencyAdmin CurrencyAdminRole + PermissionedAssetHolder PermissionedCurrencyHolders + TranceInvestor TrancheInvestors +} + +type TrancheInvestors struct { + Info []TrancheInvestorInfo +} + +type TrancheInvestorInfo struct { + TrancheID [16]types.U8 + PermissionedTill types.U64 +} + +type PermissionedCurrencyHolders struct { + Info types.Option[PermissionedCurrencyHolderInfo] +} + +type PermissionedCurrencyHolderInfo struct { + PermissionedTill types.U64 +} + +type PoolAdminRole uint32 + +const ( + PoolAdmin PoolAdminRole = 0b00000001 + Borrower PoolAdminRole = 0b00000010 + PricingAdmin PoolAdminRole = 0b00000100 + LiquidityAdmin PoolAdminRole = 0b00001000 + MemberListAdmin PoolAdminRole = 0b00010000 + RiskAdmin PoolAdminRole = 0b00100000 + PodReadAccess PoolAdminRole = 0b01000000 +) + +type CurrencyAdminRole uint32 + +const ( + PermissionedAssetManager CurrencyAdminRole = 0b00000001 + PermissionedAssetIssuer CurrencyAdminRole = 0b00000010 +) diff --git a/pallets/proxy/api.go b/pallets/proxy/api.go index 48f6dad67..1875f6367 100644 --- a/pallets/proxy/api.go +++ b/pallets/proxy/api.go @@ -22,6 +22,7 @@ const ( ErrProxyStorageEntryRetrieval = errors.Error("couldn't retrieve proxy storage entry") ErrProxiesNotFound = errors.Error("account proxies not found") ErrMultiAddressCreation = errors.Error("couldn't create multi address") + ErrProxiedCallCreation = errors.Error("couldn't create proxied call") ) const ( @@ -74,7 +75,7 @@ func (a *api) AddProxy( krp signature.KeyringPair, ) error { err := validation.Validate( - validation.NewValidator(delegate, validation.AccountIDValidatorFn), + validation.NewValidator(delegate, validation.AccountIDValidationFn), ) if err != nil { @@ -132,7 +133,7 @@ func (a *api) ProxyCall( proxiedCall types.Call, ) (*centchain.ExtrinsicInfo, error) { err := validation.Validate( - validation.NewValidator(delegator, validation.AccountIDValidatorFn), + validation.NewValidator(delegator, validation.AccountIDValidationFn), ) if err != nil { @@ -184,7 +185,7 @@ func (a *api) ProxyCall( func (a *api) GetProxies(accountID *types.AccountID) (*types.ProxyStorageEntry, error) { err := validation.Validate( - validation.NewValidator(accountID, validation.AccountIDValidatorFn), + validation.NewValidator(accountID, validation.AccountIDValidationFn), ) if err != nil { @@ -235,3 +236,37 @@ func (a *api) GetProxies(accountID *types.AccountID) (*types.ProxyStorageEntry, return &proxyStorageEntry, nil } + +func WrapWithProxyCall( + delegator *types.AccountID, + forcedProxyType types.Option[proxy.CentrifugeProxyType], + proxiedCallCreationFn centchain.CallProviderFn, +) centchain.CallProviderFn { + return func(meta *types.Metadata) (*types.Call, error) { + delegatorMultiAddress, err := types.NewMultiAddressFromAccountID(delegator.ToBytes()) + + if err != nil { + return nil, ErrMultiAddressCreation + } + + proxiedCall, err := proxiedCallCreationFn(meta) + + if err != nil { + return nil, ErrProxiedCallCreation + } + + call, err := types.NewCall( + meta, + ProxyCall, + delegatorMultiAddress, + forcedProxyType, + proxiedCall, + ) + + if err != nil { + return nil, errors.ErrCallCreation + } + + return &call, nil + } +} diff --git a/pallets/proxy/api_integration_test.go b/pallets/proxy/api_integration_test.go index d0d9a1867..822a705f1 100644 --- a/pallets/proxy/api_integration_test.go +++ b/pallets/proxy/api_integration_test.go @@ -136,9 +136,9 @@ func TestIntegration_API_AddAndRetrieveProxies(t *testing.T) { err = proxyAPI.AddProxy(ctx, delegate2, delegate2ProxyType, 0, keyrings.DaveKeyRingPair) assert.NoError(t, err) - accountIDAlice, err := types.NewAccountID(keyrings.DaveKeyRingPair.PublicKey) + accountID, err := types.NewAccountID(keyrings.DaveKeyRingPair.PublicKey) assert.NoError(t, err) - err = proxyUtils.WaitForProxiesToBeAdded(ctx, serviceCtx, accountIDAlice, delegate1, delegate2) + err = proxyUtils.WaitForProxiesToBeAdded(ctx, serviceCtx, accountID, delegate1, delegate2) assert.NoError(t, err) } diff --git a/identity/v2/test_utils.go b/pallets/test_utils.go similarity index 52% rename from identity/v2/test_utils.go rename to pallets/test_utils.go index 222dcd5ae..cb802d848 100644 --- a/identity/v2/test_utils.go +++ b/pallets/test_utils.go @@ -1,6 +1,6 @@ //go:build integration || testworld -package v2 +package pallets import ( "bytes" @@ -10,10 +10,10 @@ import ( "math/big" "time" - "github.com/centrifuge/pod/pallets/utility" - keystoreTypes "github.com/centrifuge/chain-custom-types/pkg/keystore" + loansTypes "github.com/centrifuge/chain-custom-types/pkg/loans" proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/go-substrate-rpc-client/v4/scale" "github.com/centrifuge/go-substrate-rpc-client/v4/signature" "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/centrifuge/pod/centchain" @@ -21,40 +21,14 @@ import ( "github.com/centrifuge/pod/crypto" "github.com/centrifuge/pod/pallets/keystore" "github.com/centrifuge/pod/pallets/proxy" + "github.com/centrifuge/pod/pallets/uniques" genericUtils "github.com/centrifuge/pod/testingutils/generic" + logging "github.com/ipfs/go-log" ) -func BootstrapTestAccount( - ctx context.Context, - serviceCtx map[string]any, - originKrp signature.KeyringPair, -) (config.Account, error) { - anonymousProxyAccountID, err := CreateAnonymousProxy(serviceCtx, originKrp) - - if err != nil { - return nil, fmt.Errorf("couldn't get create anonymous proxy: %w", err) - } - - log.Info("Creating identity") - - acc, err := CreateTestIdentity(serviceCtx, anonymousProxyAccountID, "") - - if err != nil { - return nil, fmt.Errorf("couldn't create test account: %w", err) - } - - calls, err := getPostAccountBootstrapCalls(serviceCtx, acc) - - if err != nil { - return nil, fmt.Errorf("couldn't get post account bootstrap calls: %w", err) - } - - if err = ExecutePostAccountBootstrap(ctx, serviceCtx, originKrp, calls...); err != nil { - return nil, fmt.Errorf("couldn't execute post account bootstrap: %w", err) - } - - return acc, nil -} +var ( + log = logging.Logger("pallet-test-utils") +) const ( createAnonymousProxyTimeout = 10 * time.Minute @@ -72,6 +46,8 @@ func CreateAnonymousProxy( return nil, fmt.Errorf("couldn't create funds client: %w", err) } + defer testClient.Close() + ctx, cancel := context.WithTimeout(context.Background(), createAnonymousProxyTimeout) defer cancel() @@ -128,97 +104,24 @@ func getAnonymousProxyCreatedByAccount( return nil, errors.New("anonymous proxy not found") } -func CreateTestIdentity( - serviceCtx map[string]any, - accountID *types.AccountID, - webhookURL string, -) (config.Account, error) { - cfgService := genericUtils.GetService[config.Service](serviceCtx) - identityService := genericUtils.GetService[Service](serviceCtx) - - if acc, err := cfgService.GetAccount(accountID.ToBytes()); err == nil { - log.Info("Account already created for - ", accountID.ToHexString()) - - return acc, nil - } - - acc, err := identityService.CreateIdentity(context.Background(), &CreateIdentityRequest{ - Identity: accountID, - WebhookURL: webhookURL, - PrecommitEnabled: true, - }) - - if err != nil { - return nil, fmt.Errorf("couldn't create identity: %w", err) - } - - return acc, nil -} - -const ( - defaultBalance = "10000000000000000000000" -) - -func getPostAccountBootstrapCalls(serviceCtx map[string]any, acc config.Account) ([]centchain.CallProviderFn, error) { - cfgService := genericUtils.GetService[config.Service](serviceCtx) - - podOperator, err := cfgService.GetPodOperator() - - if err != nil { - return nil, fmt.Errorf("couldn't get pod operator: %w", err) - } - - postBootstrapFns := []centchain.CallProviderFn{ - GetBalanceTransferCallCreationFn(defaultBalance, acc.GetIdentity().ToBytes()), - GetBalanceTransferCallCreationFn(defaultBalance, podOperator.GetAccountID().ToBytes()), - } - - postBootstrapFns = append( - postBootstrapFns, - GetAddProxyCallCreationFns( - acc.GetIdentity(), - ProxyPairs{ - { - Delegate: podOperator.GetAccountID(), - ProxyType: proxyType.PodOperation, - }, - { - Delegate: podOperator.GetAccountID(), - ProxyType: proxyType.KeystoreManagement, - }, - }, - )..., - ) - - addKeysCall, err := GetAddKeysCall(serviceCtx, acc) - - if err != nil { - return nil, fmt.Errorf("couldn't get AddKeys call: %w", err) - } - - postBootstrapFns = append(postBootstrapFns, addKeysCall) - - return postBootstrapFns, nil -} - -func ExecutePostAccountBootstrap( +func ExecuteWithTestClient( ctx context.Context, serviceCtx map[string]any, originKrp signature.KeyringPair, - callCreationFns ...centchain.CallProviderFn, + callProviderFn centchain.CallProviderFn, ) error { cfg := genericUtils.GetService[config.Configuration](serviceCtx) testClient, err := centchain.NewTestClient(cfg.GetCentChainNodeURL()) if err != nil { - return fmt.Errorf("couldn't create funds client: %w", err) + return fmt.Errorf("couldn't create test client: %w", err) } defer testClient.Close() - if _, err = testClient.SubmitAndWait(ctx, originKrp, utility.BatchCalls(callCreationFns...)); err != nil { - return fmt.Errorf("couldn't submit post account bootstrap batch call: %w", err) + if _, err = testClient.SubmitAndWait(ctx, originKrp, callProviderFn); err != nil { + return fmt.Errorf("couldn't submit batch call: %w", err) } return nil @@ -468,3 +371,386 @@ func GetAddKeysCall( return &proxyCall, nil }, nil } + +// Pools + +type TrancheInput struct { + TrancheType TrancheType + Seniority types.Option[types.U32] + TrancheMetadata TrancheMetadata +} + +func (t TrancheInput) Encode(encoder scale.Encoder) error { + if err := encoder.Encode(t.TrancheType); err != nil { + return err + } + + if err := encoder.Encode(t.Seniority); err != nil { + return err + } + + return encoder.Encode(t.TrancheMetadata) +} + +type TrancheType struct { + IsResidual bool + + IsNonResidual bool + AsNonResidual NonResidual +} + +func (t TrancheType) Encode(encoder scale.Encoder) error { + switch { + case t.IsResidual: + return encoder.PushByte(0) + case t.IsNonResidual: + if err := encoder.PushByte(1); err != nil { + return err + } + + return encoder.Encode(t.AsNonResidual) + default: + return fmt.Errorf("unsupported tranche type") + } +} + +type NonResidual struct { + InterestRatePerSec types.U128 + MinRiskBuffer types.U64 +} + +func (n NonResidual) Encode(encoder scale.Encoder) error { + if err := encoder.Encode(n.InterestRatePerSec); err != nil { + return err + } + + return encoder.Encode(n.MinRiskBuffer) +} + +type TrancheMetadata struct { + TokenName []byte + TokenSymbol []byte +} + +func (t TrancheMetadata) Encode(encoder scale.Encoder) error { + if err := encoder.Encode(t.TokenName); err != nil { + return err + } + + return encoder.Encode(t.TokenSymbol) +} + +type CurrencyID struct { + IsNative bool + + IsTranche bool + AsTranche Tranche + + IsKSM bool + + IsAUSD bool + + IsForeignAsset bool + AsForeignAsset types.U32 + + IsStaking bool + AsStaking StakingCurrency +} + +func (c CurrencyID) Encode(encoder scale.Encoder) error { + switch { + case c.IsNative: + return encoder.PushByte(0) + case c.IsTranche: + if err := encoder.PushByte(1); err != nil { + return err + } + + return encoder.Encode(c.AsTranche) + case c.IsKSM: + return encoder.PushByte(2) + case c.IsAUSD: + return encoder.PushByte(3) + case c.IsForeignAsset: + if err := encoder.PushByte(4); err != nil { + return err + } + + return encoder.Encode(c.AsForeignAsset) + case c.IsStaking: + if err := encoder.PushByte(5); err != nil { + return err + } + + return encoder.Encode(c.AsStaking) + default: + return errors.New("unsupported currency ID") + } +} + +type Tranche struct { + PoolID types.U64 + TrancheID [16]byte +} + +type StakingCurrency struct { + IsBlockRewards bool +} + +const ( + registerPoolCall = "PoolRegistry.register" +) + +func GetRegisterPoolCallCreationFn( + poolAdmin *types.AccountID, + poolID types.U64, + trancheInputs []TrancheInput, + currency CurrencyID, + maxReserve types.U128, + metadata []byte, +) centchain.CallProviderFn { + return func(meta *types.Metadata) (*types.Call, error) { + call, err := types.NewCall( + meta, + registerPoolCall, + poolAdmin, + poolID, + trancheInputs, + currency, + maxReserve, + types.NewOption(metadata), + ) + + if err != nil { + return nil, err + } + + return &call, nil + } +} + +// Permissions + +type Role struct { + IsPoolRole bool + AsPoolRole PoolRole + + IsPermissionedCurrencyRole bool + PermissionedCurrencyRole PermissionedCurrencyRole +} + +func (r Role) Encode(encoder scale.Encoder) error { + switch { + case r.IsPoolRole: + if err := encoder.PushByte(0); err != nil { + return err + } + + return encoder.Encode(r.AsPoolRole) + case r.IsPermissionedCurrencyRole: + if err := encoder.PushByte(1); err != nil { + return err + } + + return encoder.Encode(r.AsPoolRole) + default: + return errors.New("unsupported role") + } +} + +type PoolRole struct { + IsPoolAdmin bool + + IsBorrower bool + + IsPricingAdmin bool + + IsLiquidityAdmin bool + + IsMemberListAdmin bool + + IsLoanAdmin bool + + IsTrancheInvestor bool + AsTrancheInvestor TrancheInvestor + + IsPODReadAccess bool +} + +func (p PoolRole) Encode(encoder scale.Encoder) error { + switch { + case p.IsPoolAdmin: + return encoder.PushByte(0) + case p.IsBorrower: + return encoder.PushByte(1) + case p.IsPricingAdmin: + return encoder.PushByte(2) + case p.IsLiquidityAdmin: + return encoder.PushByte(3) + case p.IsMemberListAdmin: + return encoder.PushByte(4) + case p.IsLoanAdmin: + return encoder.PushByte(5) + case p.IsTrancheInvestor: + if err := encoder.PushByte(6); err != nil { + return err + } + + return encoder.Encode(p.AsTrancheInvestor) + case p.IsPODReadAccess: + return encoder.PushByte(7) + default: + return errors.New("unsupported pool role") + } +} + +type PermissionedCurrencyRole struct { + IsHolder bool + AsHolder types.U64 + + IsManager bool + + IsIssuer bool +} + +func (p PermissionedCurrencyRole) Encode(encoder scale.Encoder) error { + switch { + case p.IsHolder: + if err := encoder.PushByte(0); err != nil { + return err + } + + return encoder.Encode(p.AsHolder) + case p.IsManager: + return encoder.PushByte(1) + case p.IsIssuer: + return encoder.PushByte(2) + default: + return errors.New("unsupported permissioned currency role") + } +} + +type TrancheInvestor struct { + TrancheID [16]byte + Moment types.U64 +} + +func (t TrancheInvestor) Encode(encoder scale.Encoder) error { + if err := encoder.Encode(t.TrancheID); err != nil { + return err + } + + return encoder.Encode(t.Moment) +} + +type PermissionScope struct { + IsPool bool + AsPool types.U64 + + IsCurrency bool + AsCurrency CurrencyID +} + +func (p PermissionScope) Encode(encoder scale.Encoder) error { + switch { + case p.IsPool: + if err := encoder.PushByte(0); err != nil { + return err + } + + return encoder.Encode(p.AsPool) + case p.IsCurrency: + if err := encoder.PushByte(1); err != nil { + return err + } + + return encoder.Encode(p.AsCurrency) + default: + return errors.New("unsupported permission scope") + } +} + +const ( + addPermissionsCall = "Permissions.add" +) + +func GetPermissionsCallCreationFn( + withRole Role, + to *types.AccountID, + scope PermissionScope, + role Role, +) centchain.CallProviderFn { + return func(meta *types.Metadata) (*types.Call, error) { + call, err := types.NewCall(meta, addPermissionsCall, withRole, to, scope, role) + + if err != nil { + return nil, err + } + + return &call, nil + } +} + +// Loans + +const ( + createLoanCall = "Loans.create" +) + +func GetCreateLoanCallCreationFn( + poolID types.U64, + loanInfo loansTypes.LoanInfo, +) centchain.CallProviderFn { + return func(meta *types.Metadata) (*types.Call, error) { + call, err := types.NewCall(meta, createLoanCall, poolID, loanInfo) + + if err != nil { + return nil, err + } + + return &call, nil + } +} + +func GetCreateNFTCollectionCallCreationFn( + collectionID types.U64, + owner *types.AccountID, +) centchain.CallProviderFn { + return func(meta *types.Metadata) (*types.Call, error) { + ownerMultiAddress, err := types.NewMultiAddressFromAccountID(owner.ToBytes()) + + if err != nil { + return nil, err + } + + call, err := types.NewCall(meta, uniques.CreateCollectionCall, collectionID, ownerMultiAddress) + + if err != nil { + return nil, err + } + + return &call, nil + } +} + +func GetNFTMintCallCreationFn( + collectionID types.U64, + itemID types.U128, + owner *types.AccountID, +) centchain.CallProviderFn { + return func(meta *types.Metadata) (*types.Call, error) { + ownerMultiAddress, err := types.NewMultiAddressFromAccountID(owner.ToBytes()) + + if err != nil { + return nil, err + } + + call, err := types.NewCall(meta, uniques.MintCall, collectionID, itemID, ownerMultiAddress) + + if err != nil { + return nil, err + } + + return &call, nil + } +} diff --git a/pallets/uniques/api.go b/pallets/uniques/api.go index d3b906a0c..de658cecc 100644 --- a/pallets/uniques/api.go +++ b/pallets/uniques/api.go @@ -140,7 +140,7 @@ func (a *api) Mint(ctx context.Context, collectionID types.U64, itemID types.U12 err := validation.Validate( validation.NewValidator(collectionID, CollectionIDValidatorFn), validation.NewValidator(itemID, ItemIDValidatorFn), - validation.NewValidator(owner, validation.AccountIDValidatorFn), + validation.NewValidator(owner, validation.AccountIDValidationFn), ) if err != nil { diff --git a/pallets/utility/api_integration_test.go b/pallets/utility/api_integration_test.go index 3564cabc1..1d2ffe7d3 100644 --- a/pallets/utility/api_integration_test.go +++ b/pallets/utility/api_integration_test.go @@ -62,7 +62,7 @@ func TestMain(m *testing.M) { os.Exit(result) } -func TestIntegration_API_BatchALl(t *testing.T) { +func TestIntegration_API_BatchAll(t *testing.T) { accs, err := cfgService.GetAccounts() assert.NoError(t, err) assert.NotEmpty(t, accs) diff --git a/pending/service_mock.go b/pending/service_mock.go index 407d230db..0405b70a5 100644 --- a/pending/service_mock.go +++ b/pending/service_mock.go @@ -43,13 +43,13 @@ func (_m *ServiceMock) AddAttributes(ctx context.Context, docID []byte, attrs [] return r0, r1 } -// AddRole provides a mock function with given fields: ctx, docID, roleKey, collabs -func (_m *ServiceMock) AddRole(ctx context.Context, docID []byte, roleKey string, collabs []*types.AccountID) (*coredocumentpb.Role, error) { - ret := _m.Called(ctx, docID, roleKey, collabs) +// AddRole provides a mock function with given fields: ctx, docID, roleKey, collaborators +func (_m *ServiceMock) AddRole(ctx context.Context, docID []byte, roleKey string, collaborators []*types.AccountID) (*coredocumentpb.Role, error) { + ret := _m.Called(ctx, docID, roleKey, collaborators) var r0 *coredocumentpb.Role if rf, ok := ret.Get(0).(func(context.Context, []byte, string, []*types.AccountID) *coredocumentpb.Role); ok { - r0 = rf(ctx, docID, roleKey, collabs) + r0 = rf(ctx, docID, roleKey, collaborators) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*coredocumentpb.Role) @@ -58,7 +58,7 @@ func (_m *ServiceMock) AddRole(ctx context.Context, docID []byte, roleKey string var r1 error if rf, ok := ret.Get(1).(func(context.Context, []byte, string, []*types.AccountID) error); ok { - r1 = rf(ctx, docID, roleKey, collabs) + r1 = rf(ctx, docID, roleKey, collaborators) } else { r1 = ret.Error(1) } @@ -319,13 +319,13 @@ func (_m *ServiceMock) GetVersion(ctx context.Context, docID []byte, versionID [ return r0, r1 } -// RemoveCollaborators provides a mock function with given fields: ctx, docID, dids -func (_m *ServiceMock) RemoveCollaborators(ctx context.Context, docID []byte, dids []*types.AccountID) (documents.Document, error) { - ret := _m.Called(ctx, docID, dids) +// RemoveCollaborators provides a mock function with given fields: ctx, docID, collaborators +func (_m *ServiceMock) RemoveCollaborators(ctx context.Context, docID []byte, collaborators []*types.AccountID) (documents.Document, error) { + ret := _m.Called(ctx, docID, collaborators) var r0 documents.Document if rf, ok := ret.Get(0).(func(context.Context, []byte, []*types.AccountID) documents.Document); ok { - r0 = rf(ctx, docID, dids) + r0 = rf(ctx, docID, collaborators) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(documents.Document) @@ -334,7 +334,7 @@ func (_m *ServiceMock) RemoveCollaborators(ctx context.Context, docID []byte, di var r1 error if rf, ok := ret.Get(1).(func(context.Context, []byte, []*types.AccountID) error); ok { - r1 = rf(ctx, docID, dids) + r1 = rf(ctx, docID, collaborators) } else { r1 = ret.Error(1) } @@ -365,13 +365,13 @@ func (_m *ServiceMock) Update(ctx context.Context, payload documents.UpdatePaylo return r0, r1 } -// UpdateRole provides a mock function with given fields: ctx, docID, roleID, collabs -func (_m *ServiceMock) UpdateRole(ctx context.Context, docID []byte, roleID []byte, collabs []*types.AccountID) (*coredocumentpb.Role, error) { - ret := _m.Called(ctx, docID, roleID, collabs) +// UpdateRole provides a mock function with given fields: ctx, docID, roleID, collaborators +func (_m *ServiceMock) UpdateRole(ctx context.Context, docID []byte, roleID []byte, collaborators []*types.AccountID) (*coredocumentpb.Role, error) { + ret := _m.Called(ctx, docID, roleID, collaborators) var r0 *coredocumentpb.Role if rf, ok := ret.Get(0).(func(context.Context, []byte, []byte, []*types.AccountID) *coredocumentpb.Role); ok { - r0 = rf(ctx, docID, roleID, collabs) + r0 = rf(ctx, docID, roleID, collaborators) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*coredocumentpb.Role) @@ -380,7 +380,7 @@ func (_m *ServiceMock) UpdateRole(ctx context.Context, docID []byte, roleID []by var r1 error if rf, ok := ret.Get(1).(func(context.Context, []byte, []byte, []*types.AccountID) error); ok { - r1 = rf(ctx, docID, roleID, collabs) + r1 = rf(ctx, docID, roleID, collaborators) } else { r1 = ret.Error(1) } diff --git a/testingutils/metadata.go b/testingutils/metadata.go index 18257fdfd..11033450c 100644 --- a/testingutils/metadata.go +++ b/testingutils/metadata.go @@ -17,4 +17,4 @@ func GetTestMetadata() (*types.Metadata, error) { return &meta, nil } -var MetadataHex = "0x6d6574610e4109000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f727920010454000020000005060024083c7072696d69746976655f74797065731048323536000004000401585b75383b202f2ac2ab2a2f203332202f2ac2bb2a2f5d00002800000208002c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677330013c5665633c4469676573744974656d3e000030000002340034102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e00060024436f6e73656e7375730800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000400105365616c0800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000500144f74686572040028011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000380000030400000008003c00000240004008306672616d655f73797374656d2c4576656e745265636f7264080445014404540124000c011470686173659902011450686173650001146576656e7444010445000118746f706963739d0201185665633c543e000044084c646576656c6f706d656e745f72756e74696d65144576656e740001a41853797374656d04004801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000003c50617261636861696e53797374656d04006c01bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e636573040070017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e00140044436f6c6c61746f7253656c656374696f6e04007801a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0047001c53657373696f6e040080015470616c6c65745f73657373696f6e3a3a4576656e74001f00204d756c7469736967040084017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e003c001450726f7879040094017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e003d001c5574696c6974790400a0015470616c6c65745f7574696c6974793a3a4576656e74003e00245363686564756c65720400a4018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e003f001c436f756e63696c0400b401fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00400024456c656374696f6e730400bc01a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e0041002444656d6f63726163790400c8018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e004200204964656e746974790400d8017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0043001c56657374696e670400dc017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e0044002054726561737572790400e0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0045001c556e69717565730400e4017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e00460020507265696d6167650400fc017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e004800104665657304000101016c70616c6c65745f666565733a3a4576656e743c52756e74696d653e005a0018436c61696d7304000501017470616c6c65745f636c61696d733a3a4576656e743c52756e74696d653e005c003843726f77646c6f616e436c61696d04000901019870616c6c65745f63726f77646c6f616e5f636c61696d3a3a4576656e743c52756e74696d653e005d003c43726f77646c6f616e52657761726404000d01019c70616c6c65745f63726f77646c6f616e5f7265776172643a3a4576656e743c52756e74696d653e005e0014506f6f6c7304001501017070616c6c65745f706f6f6c733a3a4576656e743c52756e74696d653e005f00144c6f616e7304004d01017070616c6c65745f6c6f616e733a3a4576656e743c52756e74696d653e0060002c5065726d697373696f6e7304007101018870616c6c65745f7065726d697373696f6e733a3a4576656e743c52756e74696d653e00610044436f6c6c61746f72416c6c6f776c6973740400890101a470616c6c65745f636f6c6c61746f725f616c6c6f776c6973743a3a4576656e743c52756e74696d653e00620018546f6b656e7304008d0101a070616c6c65745f726573747269637465645f746f6b656e733a3a4576656e743c52756e74696d653e006300204e667453616c657304009101018070616c6c65745f6e66745f73616c65733a3a4576656e743c52756e74696d653e006400104e66747304009d01016870616c6c65745f6e66743a3a4576656e743c52756e74696d653e006700184272696467650400a101017470616c6c65745f6272696467653a3a4576656e743c52756e74696d653e0065003c496e7465726573744163637275616c0400a501019c70616c6c65745f696e7465726573745f6163637275616c3a3a4576656e743c52756e74696d653e006600204b657973746f72650400a901017c70616c6c65745f6b657973746f72653a3a4576656e743c52756e74696d653e0068002458636d7051756575650400b50101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0078002c506f6c6b61646f7458636d0400c501016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0079002843756d756c757358636d04005d02018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e007a0020446d7051756575650400610201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e007b001c58546f6b656e730400650201706f726d6c5f78746f6b656e733a3a4576656e743c52756e74696d653e007c00284f726d6c546f6b656e7304006902016c6f726d6c5f746f6b656e733a3a4576656e743c52756e74696d653e0096002c436861696e42726964676504006d02016c636861696e6272696467653a3a4576656e743c52756e74696d653e009700444f726d6c4173736574526567697374727904007902018c6f726d6c5f61737365745f72656769737472793a3a4576656e743c52756e74696d653e009800244d6967726174696f6e04008d0201a070616c6c65745f6d6967726174696f6e5f6d616e616765723a3a4576656e743c52756e74696d653e00c700105375646f04009102016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e00c80000480c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f4c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7258013444697370617463684572726f7200013464697370617463685f696e666f4c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736824011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e4c0c346672616d655f737570706f72741c77656967687473304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735001344469737061746368436c617373000120706179735f666565540110506179730000500c346672616d655f737570706f72741c77656967687473344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000540c346672616d655f737570706f72741c7765696768747310506179730001080c596573000000084e6f0001000058082873705f72756e74696d653444697370617463684572726f72000128144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504005c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400600128546f6b656e4572726f720007002841726974686d65746963040064013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04006801485472616e73616374696f6e616c4572726f72000900005c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7238018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000060082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006000064082873705f72756e74696d653c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000068082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100006c0c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736824011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564200118576569676874000120646d715f6865616424014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909700c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000780c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000114404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c65737c01445665633c543a3a4163636f756e7449643e000000504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000100404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0002003843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0003004043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e7449640004000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097c0000020000800c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909840c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7488016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7488016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c748c01384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e7488016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090988083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c75333200008c0418526573756c740804540190044501580108084f6b040090000000000c4572720400580000010000900000040000940c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c748c01384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e40416e6f6e796d6f757343726561746564100124616e6f6e796d6f7573000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c753136000108e8416e6f6e796d6f7573206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736824013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090998084c646576656c6f706d656e745f72756e74696d652450726f7879547970650001340c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e6365000200205f5374616b696e67000300204e6f6e50726f787900040018426f72726f7700050014507269636500060018496e766573740007003c50726f78794d616e6167656d656e74000800484b657973746f72654d616e6167656d656e740009001c4e46544d696e74000a002c4e46545472616e73666572000b00344e46544d616e6167656d656e74000c00009c0000050400a00c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7258013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7258013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c748c01384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a40c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000110245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736ba8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964ac013c4f7074696f6e3c5665633c75383e3e000118726573756c748c01384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e4043616c6c4c6f6f6b75704661696c65640c01107461736ba8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964ac013c4f7074696f6e3c5665633c75383e3e0001146572726f72b0012c4c6f6f6b75704572726f7200030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e04304576656e747320747970652ea800000408101000ac04184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000b010346672616d655f737570706f727418747261697473207363686564756c652c4c6f6f6b75704572726f720001081c556e6b6e6f776e00000024426164466f726d617400010000b40c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f6861736824011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736824011c543a3a48617368000114766f746564b80110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736824011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736824011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736824011c543a3a48617368000118726573756c748c01384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736824011c543a3a48617368000118726573756c748c01384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736824011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909b80000050000bc0c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273c001ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909c0000002c400c400000408001800c80c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e7404045400014c2050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c65640c013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e0001286465706f7369746f72737c01445665633c543a3a4163636f756e7449643e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64cc0134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2045786563757465640801247265665f696e64657810013c5265666572656e64756d496e646578000118726573756c748c01384469737061746368526573756c7400070470412070726f706f73616c20686173206265656e20656e61637465642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000804dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000904e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736824011c543a3a48617368000114756e74696c100138543a3a426c6f636b4e756d626572000a0494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e34507265696d6167654e6f7465640c013470726f706f73616c5f6861736824011c543a3a4861736800010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000b04dc412070726f706f73616c277320707265696d61676520776173206e6f7465642c20616e6420746865206465706f7369742074616b656e2e30507265696d616765557365640c013470726f706f73616c5f6861736824011c543a3a4861736800012070726f7669646572000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000c041101412070726f706f73616c20707265696d616765207761732072656d6f76656420616e6420757365642028746865206465706f736974207761732072657475726e6564292e3c507265696d616765496e76616c696408013470726f706f73616c5f6861736824011c543a3a486173680001247265665f696e64657810013c5265666572656e64756d496e646578000d040901412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d6167652077617320696e76616c69642e3c507265696d6167654d697373696e6708013470726f706f73616c5f6861736824011c543a3a486173680001247265665f696e64657810013c5265666572656e64756d496e646578000e040901412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d61676520776173206d697373696e672e38507265696d61676552656170656410013470726f706f73616c5f6861736824011c543a3a4861736800012070726f7669646572000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000118726561706572000130543a3a4163636f756e744964000f04290141207265676973746572656420707265696d616765207761732072656d6f76656420616e6420746865206465706f73697420636f6c6c656374656420627920746865207265617065722e2c426c61636b6c697374656404013470726f706f73616c5f6861736824011c543a3a48617368001004c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465d001644163636f756e74566f74653c42616c616e63654f663c543e3e00110490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e6465780012048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909cc0c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000d00c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465d40110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000d40c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000d80c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001282c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909dc0c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909e00c3c70616c6c65745f74726561737572791870616c6c6574144576656e7408045400044900011c2050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c3870616c6c65745f756e69717565731870616c6c6574144576656e740804540004490001601c437265617465640c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eb80110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eb80110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73f001385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579ec016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565ec0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579ec016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6ef8015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c3872756e74696d655f636f6d6d6f6e147479706573184974656d496400000400180110753132380000ec10346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000f0000002e800f404184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e80000010000f804184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000fc0c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736824011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736824011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736824011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090901010c2c70616c6c65745f666565731870616c6c6574144576656e74040454000104284665654368616e676564080024011c543a3a48617368000018013042616c616e63654f663c543e0000000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c3470616c6c65745f636c61696d731870616c6c6574144576656e740404540001081c436c61696d65640801286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418019c3c542061732070616c6c65745f62616c616e6365733a3a436f6e6669673e3a3a42616c616e6365000004f84576656e742074726967676572656420616674657220612072657761726420636c61696d206973207375636365737366756c6c792070726f63657373656438526f6f744861736853746f726564040124726f6f745f686173682401843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000104b04576656e7420747269676765726564207768656e2074686520726f6f7420686173682069732073746f7265640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c5870616c6c65745f63726f77646c6f616e5f636c61696d1870616c6c6574144576656e7404045400011c58436c61696d50616c6c6574496e697469616c697a656400000415014576656e7420656d6974746564207768656e207468652063726f77646c6f616e20636c61696d2070616c6c65742069732070726f7065726c7920636f6e666967757265642e34526577617264436c61696d65640c00000158543a3a52656c6179436861696e4163636f756e744964000000015c50617261636861696e4163636f756e7449644f663c543e0000180128543a3a42616c616e6365000104e84576656e7420656d6974746564207768656e20612072657761726420686173206265656e20636c61696d6564207375636365737366756c6c792e3c4c6f636b65644174557064617465640400100138543a3a426c6f636b4e756d626572000204090154686520626c6f636b206e756d6265722c207768657265207765206c6f636b2074686520636f6e747269627574696f6e7320686173206265656e207570646174656460436f6e747269627574696f6e73526f6f74557064617465640400240134526f6f74486173684f663c543e000304e852656c61792d636861696e20526f6f74206861736820776869636820616c6c6f777320746f2076657269667920636f6e747269627574696f6e736443726f77646c6f616e54726965496e64657855706461746564040010012454726965496e6465780004042d015472696520696e646578206f66207468652063726f77646c6f616e20696e73696465207468652072656c61792d636861696e732063726f77646c6f616e206368696c642073746f72616765444c656173655374617274557064617465640400100138543a3a426c6f636b4e756d6265720005084101546865206c65617365207374617274206f66207468652070617261636861696e20736c6f742e205573656420746f20646566696e65207768656e2077652063616e20696e697469616c697a6520746865246e6578742074696d65484c65617365506572696f64557064617465640400100138543a3a426c6f636b4e756d6265720006084501546865206c6561736520706572696f64206f66207468652070617261636861696e20736c6f742e205573656420746f20646566696e65207768656e2077652063616e20696e697469616c697a6520746865246e6578742074696d650499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909090d010c5c70616c6c65745f63726f77646c6f616e5f7265776172641870616c6c6574144576656e7404045400011434526577617264436c61696d65640c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000008f44576656e7420656d6974746564207768656e20612072657761726420636c61696d207761732070726f636573736564207375636365737366756c6c792e945c5b77686f2c206469726563745f7265776172642c207665737465645f7265776172645c5d5c52657761726450616c6c6574496e697469616c697a65640c00100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200001101011c50657262696c6c00010819014576656e7420747269676765726564207768656e2074686520726577617264206d6f64756c6520697320726561647920746f2072657761726420636f6e7472696275746f7273d85c5b76657374696e675f73746172742c2076657374696e675f706572696f642c206469726563745f7061796f75745f726174696f5c5d604469726563745061796f7574526174696f5570646174656404001101011c50657262696c6c000208d4446972656374207061796f757420726174696f20666f7220636f6e7472696275746f727320686173206265656e2075706461746564405c5b7061796f75745f726174696f5c5d5056657374696e67506572696f64557064617465640400100138543a3a426c6f636b4e756d6265720003047c56657374696e6720706572696f6420686173206265656e20757064617465644c56657374696e675374617274557064617465640400100138543a3a426c6f636b4e756d626572000404845374617274206f662076657374696e6720686173206265656e20757064617465640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090911010c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000015010c3070616c6c65745f706f6f6c731870616c6c6574144576656e7404045400012c1c4372656174656408011c706f6f6c5f6964200124543a3a506f6f6c496400011461646d696e000130543a3a4163636f756e7449640000044c4120706f6f6c2077617320637265617465642e1c5570646174656404011c706f6f6c5f6964200124543a3a506f6f6c49640001044c4120706f6f6c2077617320757064617465642e28526562616c616e63656404011c706f6f6c5f6964200124543a3a506f6f6c496400020474546865207472616e63686573207765726520726562616c616e6365642e344d61785265736572766553657404011c706f6f6c5f6964200124543a3a506f6f6c496400030470546865206d617820726573657276652077617320757064617465642e2c4d6574616461746153657408011c706f6f6c5f6964200124543a3a506f6f6c49640001206d6574616461746128011c5665633c75383e00040458506f6f6c206d6574616461746120776173207365742e2c45706f6368436c6f73656408011c706f6f6c5f6964200124543a3a506f6f6c496400012065706f63685f6964100128543a3a45706f6368496400050450416e2065706f63682077617320636c6f7365642e44536f6c7574696f6e5375626d69747465640c011c706f6f6c5f6964200124543a3a506f6f6c496400012065706f63685f6964100128543a3a45706f63684964000120736f6c7574696f6e1901016445706f6368536f6c7574696f6e3c543a3a42616c616e63653e00060458416e2065706f6368207761732065786563757465642e3445706f6368457865637574656408011c706f6f6c5f6964200124543a3a506f6f6c496400012065706f63685f6964100128543a3a45706f6368496400070458416e2065706f6368207761732065786563757465642e3c4f7264657273436f6c6c656374656414011c706f6f6c5f6964200124543a3a506f6f6c49640001287472616e6368655f696445010130543a3a5472616e6368654964000130656e645f65706f63685f6964100128543a3a45706f6368496400011c6163636f756e74000130543a3a4163636f756e74496400015c6f75747374616e64696e675f636f6c6c656374696f6e73490101884f75747374616e64696e67436f6c6c656374696f6e733c543a3a42616c616e63653e0008048046756c66696c6c6564206f7264657273207765726520636f6c6c65637465642e48496e766573744f726465725570646174656414011c706f6f6c5f6964200124543a3a506f6f6c49640001287472616e6368655f696445010130543a3a5472616e636865496400011c6163636f756e74000130543a3a4163636f756e7449640001246f6c645f6f72646572180128543a3a42616c616e63650001246e65775f6f72646572180128543a3a42616c616e636500090470416e20696e76657374206f726465722077617320757064617465642e4852656465656d4f726465725570646174656414011c706f6f6c5f6964200124543a3a506f6f6c49640001287472616e6368655f696445010130543a3a5472616e636865496400011c6163636f756e74000130543a3a4163636f756e7449640001246f6c645f6f72646572180128543a3a42616c616e63650001246e65775f6f72646572180128543a3a42616c616e6365000a046c412072656465656d206f726465722077617320757064617465642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c3070616c6c65745f706f6f6c7320736f6c7574696f6e3445706f6368536f6c7574696f6e041c42616c616e6365011801081c4865616c74687904001d0101604865616c746879536f6c7574696f6e3c42616c616e63653e00000024556e6865616c74687904002d010168556e6865616c746879536f6c7574696f6e3c42616c616e63653e000100001d010c3070616c6c65745f706f6f6c7320736f6c7574696f6e3c4865616c746879536f6c7574696f6e041c42616c616e6365011800080120736f6c7574696f6e210101505665633c5472616e636865536f6c7574696f6e3e00011473636f726518011c42616c616e63650000210100000225010025010c3070616c6c65745f706f6f6c7320736f6c7574696f6e3c5472616e636865536f6c7574696f6e0000080148696e766573745f66756c66696c6c6d656e742901012c5065727175696e74696c6c00014872656465656d5f66756c66696c6c6d656e742901012c5065727175696e74696c6c000029010c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040020010c75363400002d010c3070616c6c65745f706f6f6c7320736f6c7574696f6e44556e6865616c746879536f6c7574696f6e041c42616c616e636501180010011473746174653101014c5665633c556e6865616c74687953746174653e000120736f6c7574696f6e210101505665633c5472616e636865536f6c7574696f6e3e0001787269736b5f6275666665725f696d70726f76656d656e745f73636f726573390101504f7074696f6e3c5665633c42616c616e63653e3e000164726573657276655f696d70726f76656d656e745f73636f72654101013c4f7074696f6e3c42616c616e63653e0000310100000235010035010c3070616c6c65745f706f6f6c7320736f6c7574696f6e38556e6865616c7468795374617465000108484d61785265736572766556696f6c61746564000000544d696e5269736b42756666657256696f6c6174656400010000390104184f7074696f6e040454013d010108104e6f6e6500000010536f6d6504003d0100000100003d010000021800410104184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000045010000031000000008004901083070616c6c65745f706f6f6c73584f75747374616e64696e67436f6c6c656374696f6e73041c42616c616e63650118001001587061796f75745f63757272656e63795f616d6f756e7418011c42616c616e636500014c7061796f75745f746f6b656e5f616d6f756e7418011c42616c616e636500016472656d61696e696e675f696e766573745f63757272656e637918011c42616c616e636500015872656d61696e696e675f72656465656d5f746f6b656e18011c42616c616e636500004d010c3070616c6c65745f6c6f616e731870616c6c6574144576656e740404540001243c506f6f6c496e697469616c6973656404011c706f6f6c5f696420012c506f6f6c49644f663c543e0000045c4120706f6f6c2077617320696e697469616c697365642e1c437265617465640c011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000128636f6c6c61746572616c5101012841737365744f663c543e0001044c41206c6f616e2077617320637265617465642e18436c6f7365640c011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000128636f6c6c61746572616c5101012841737365744f663c543e0002044841206c6f616e2077617320636c6f7365642e1850726963656410011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000154696e7465726573745f726174655f7065725f7365635501011c543a3a526174650001246c6f616e5f74797065590101744c6f616e547970653c543a3a526174652c20543a3a42616c616e63653e0003044841206c6f616e20776173207072696365642e20426f72726f7765640c011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e636500040488416e20616d6f756e742077617320626f72726f77656420666f722061206c6f616e2e185265706169640c011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e636500050480416e20616d6f756e74207761732072657061696420666f722061206c6f616e2e284e4156557064617465640c011c706f6f6c5f696420012c506f6f6c49644f663c543e00010c6e6176180128543a3a42616c616e636500012c7570646174655f74797065690101344e4156557064617465547970650006047c546865204e415620666f72206120706f6f6c2077617320757064617465642e4857726974654f666647726f7570416464656408011c706f6f6c5f696420012c506f6f6c49644f663c543e00015477726974655f6f66665f67726f75705f696e64657810010c75333200070498412077726974652d6f66662067726f75702077617320616464656420746f206120706f6f6c2e285772697474656e4f666614011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e496400012870657263656e746167655501011c543a3a5261746500017470656e616c74795f696e7465726573745f726174655f7065725f7365635501011c543a3a5261746500015477726974655f6f66665f67726f75705f696e6465786d01012c4f7074696f6e3c7533323e000804990141206c6f616e20776173207772697474656e206f66662e205b706f6f6c2c206c6f616e2c2070657263656e746167652c2070656e616c74795f696e7465726573745f726174655f7065725f7365632c2077726974655f6f66665f67726f75705f696e6465785d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090951010c3070616c6c65745f6c6f616e73147479706573144173736574081c436c6173734964012028496e7374616e6365496401e800080020011c436c61737349640000e80128496e7374616e63654964000055010c3872756e74696d655f636f6d6d6f6e2c66697865645f706f696e7410526174650000040018011075313238000059010c3070616c6c65745f6c6f616e73246c6f616e5f74797065204c6f616e547970650810526174650155011c42616c616e63650118010c2842756c6c65744c6f616e04005d01016442756c6c65744c6f616e3c526174652c2042616c616e63653e000000284372656469744c696e650400610101644372656469744c696e653c526174652c2042616c616e63653e000100584372656469744c696e65576974684d617475726974790400650101944372656469744c696e65576974684d617475726974793c526174652c2042616c616e63653e000200005d010c3070616c6c65745f6c6f616e73246c6f616e5f747970652842756c6c65744c6f616e0810526174650155011c42616c616e6365011800180130616476616e63655f72617465550101105261746500015870726f626162696c6974795f6f665f64656661756c7455010110526174650001486c6f73735f676976656e5f64656661756c74550101105261746500011476616c756518011c42616c616e6365000134646973636f756e745f7261746555010110526174650001346d617475726974795f646174652001184d6f6d656e74000061010c3070616c6c65745f6c6f616e73246c6f616e5f74797065284372656469744c696e650810526174650155011c42616c616e6365011800080130616476616e63655f72617465550101105261746500011476616c756518011c42616c616e6365000065010c3070616c6c65745f6c6f616e73246c6f616e5f74797065584372656469744c696e65576974684d617475726974790810526174650155011c42616c616e6365011800180130616476616e63655f72617465550101105261746500015870726f626162696c6974795f6f665f64656661756c7455010110526174650001486c6f73735f676976656e5f64656661756c74550101105261746500011476616c756518011c42616c616e6365000134646973636f756e745f7261746555010110526174650001346d617475726974795f646174652001184d6f6d656e74000069010c3070616c6c65745f6c6f616e73147479706573344e4156557064617465547970650001081445786163740000001c496e6578616374000100006d0104184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000071010c4870616c6c65745f7065726d697373696f6e731870616c6c6574144576656e7404045400010c1441646465640c0108746f000130543a3a4163636f756e74496400011473636f706575010120543a3a53636f7065000110726f6c657d01011c543a3a526f6c650000001c52656d6f7665640c011066726f6d000130543a3a4163636f756e74496400011473636f706575010120543a3a53636f7065000110726f6c657d01011c543a3a526f6c650001001850757267656408011066726f6d000130543a3a4163636f756e74496400011473636f706575010120543a3a53636f70650002000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090975010830636f6d6d6f6e5f74797065733c5065726d697373696f6e53636f70650818506f6f6c496401202843757272656e63794964017901010810506f6f6c0400200118506f6f6c49640000002043757272656e637904007901012843757272656e637949640001000079010c30636f6d6d6f6e5f747970657318746f6b656e732843757272656e63794964000114184e61746976650000001c5472616e6368650800200118506f6f6c49640000450101245472616e63686549640001000c4b534d000200104155534400030030466f726569676e41737365740400100138466f726569676e41737365744964000400007d010830636f6d6d6f6e5f747970657310526f6c6508245472616e6368654964014501184d6f6d656e740120010820506f6f6c526f6c6504008101016c506f6f6c526f6c653c5472616e63686549642c204d6f6d656e743e000000605065726d697373696f6e656443757272656e6379526f6c650400850101805065726d697373696f6e656443757272656e6379526f6c653c4d6f6d656e743e0001000081010830636f6d6d6f6e5f747970657320506f6f6c526f6c6508245472616e6368654964014501184d6f6d656e740120011c24506f6f6c41646d696e00000020426f72726f7765720001003050726963696e6741646d696e000200384c697175696469747941646d696e0003003c4d656d6265724c69737441646d696e000400244c6f616e41646d696e0005003c5472616e636865496e766573746f720800450101245472616e636865496400002001184d6f6d656e740006000085010830636f6d6d6f6e5f7479706573605065726d697373696f6e656443757272656e6379526f6c6504184d6f6d656e740120010c18486f6c64657204002001184d6f6d656e740000001c4d616e61676572000100184973737565720002000089010c6470616c6c65745f636f6c6c61746f725f616c6c6f776c6973741870616c6c6574144576656e7404045400010834436f6c6c61746f72416464656404012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000004a84120636f6c6c61746f7220686173206265656e20616464656420746f2074686520616c6c6f776c6973743c436f6c6c61746f7252656d6f76656404012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000104b84120636f6c6c61746f7220686173206265656e2072656d6f7665642066726f6d2074686520616c6c6f776c6973740499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909098d010c6070616c6c65745f726573747269637465645f746f6b656e731870616c6c6574144576656e74040454000108205472616e7366657210012c63757272656e63795f696479010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650000044c5472616e73666572207375636365656465642e2842616c616e636553657410012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500010468412062616c616e6365207761732073657420627920726f6f742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090991010c4070616c6c65745f6e66745f73616c65731870616c6c6574144576656e7404045400010c1c466f7253616c650c0120636c6173735f696420013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964e80124543a3a4974656d496400011073616c659501012453616c654f663c543e00000458416e204e4654206973206e6f7720666f722073616c651c52656d6f766564080120636c6173735f696420013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964e80124543a3a4974656d496400010448416e204e4654207761732072656d6f76656410536f6c64100120636c6173735f696420013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964e80124543a3a4974656d496400011073616c659501012453616c654f663c543e0001146275796572000130543a3a4163636f756e74496400020450416e204e465420686173206265656e20736f6c640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909099501084070616c6c65745f6e66745f73616c65731053616c650c244163636f756e74496401002843757272656e637949640179011c42616c616e636501180008011873656c6c65720001244163636f756e74496400011470726963659901016850726963653c43757272656e637949642c2042616c616e63653e00009901084070616c6c65745f6e66745f73616c6573145072696365082843757272656e637949640179011c42616c616e636501180008012063757272656e63797901012843757272656e63794964000118616d6f756e7418011c42616c616e636500009d010c2870616c6c65745f6e66741870616c6c6574144576656e74040454000104304465706f7369744173736574040024011c543a3a486173680000000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a1010c3470616c6c65745f6272696467651870616c6c6574144576656e740404540001041852656d61726b080024011c543a3a486173680000040134543a3a5265736f7572636549640000000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a5010c5c70616c6c65745f696e7465726573745f6163637275616c1870616c6c6574144576656e740404540001000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a9010c3c70616c6c65745f6b657973746f72651870616c6c6574144576656e7404045400010c204b657941646465641001146f776e6572000130543a3a4163636f756e74496400010c6b657924011c543a3a4861736800011c707572706f7365ad0101284b6579507572706f73650001206b65795f74797065b101011c4b6579547970650000044041206b6579207761732061646465642e284b65795265766f6b65640c01146f776e6572000130543a3a4163636f756e74496400010c6b657924011c543a3a48617368000130626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720001044841206b657920776173207265766f6b65642e284465706f73697453657404012c6e65775f6465706f736974180128543a3a42616c616e63650002044841206465706f73697420776173207365742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909ad01083c70616c6c65745f6b657973746f7265284b6579507572706f736500010830503250446973636f7665727900000048503250446f63756d656e745369676e696e6700010000b101083c70616c6c65745f6b657973746f72651c4b65795479706500010814454344534100000014454444534100010000b5010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001201c537563636573730400b901013c4f7074696f6e3c543a3a486173683e00000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0800b901013c4f7074696f6e3c543a3a486173683e0000bd01012058636d4572726f7200010440536f6d652058434d206661696c65642e2842616456657273696f6e0400b901013c4f7074696f6e3c543a3a486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740400b901013c4f7074696f6e3c543a3a486173683e000304504261642058434d20666f726d617420757365642e445570776172644d65737361676553656e740400b901013c4f7074696f6e3c543a3a486173683e000404b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e3c58636d704d65737361676553656e740400b901013c4f7074696f6e3c543a3a486173683e000504c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e7175657565641000c1010118506172614964000010014052656c6179426c6f636b4e756d626572000020013c4f766572776569676874496e6465780000200118576569676874000604d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080020013c4f766572776569676874496e64657800002001185765696768740007044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909b90104184f7074696f6e04045401240108104e6f6e6500000010536f6d650400240000010000bd01100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040020010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404002001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000c1010c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040010010c7533320000c5010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400014024417474656d707465640400c901015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00cd0101344d756c74694c6f636174696f6e0000cd0101344d756c74694c6f636174696f6e0000f501011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800cd0101344d756c74694c6f636174696f6e000020011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080020011c5175657279496400001d020120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0020011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140020011c517565727949640000080108753800000801087538000020011857656967687400002001185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0020011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0020011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00cd0101344d756c74694c6f636174696f6e000020011c517565727949640000410201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800cd0101344d756c74694c6f636174696f6e000020011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040020011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c00240110483235360000cd0101344d756c74694c6f636174696f6e00004502015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640800cd0101344d756c74694c6f636174696f6e000010012858636d56657273696f6e000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00645c5b2064657374696e6174696f6e2c20726573756c74205c5d5c537570706f7274656456657273696f6e4368616e6765640800cd0101344d756c74694c6f636174696f6e000010012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00cd0101344d756c74694c6f636174696f6e000020011c517565727949640000bd01012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08005902015856657273696f6e65644d756c74694c6f636174696f6e000020011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909c901100c78636d087632187472616974731c4f7574636f6d6500010c20436f6d706c657465040020011857656967687400000028496e636f6d706c65746508002001185765696768740000bd0101144572726f72000100144572726f720400bd0101144572726f7200020000cd01100c78636d087631346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72d10101244a756e6374696f6e730000d101100c78636d087631346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400d50101204a756e6374696f6e0001000858320800d50101204a756e6374696f6e0000d50101204a756e6374696f6e0002000858330c00d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0003000858341000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0004000858351400d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0005000858361800d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0006000858371c00d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0007000858382000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e0000d50101204a756e6374696f6e00080000d501100c78636d087631206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400d901010c7533320000002c4163636f756e744964333208011c6e6574776f726bdd0101244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bdd0101244e6574776f726b4964000114696e646578e101010c753634000200304163636f756e744b6579323008011c6e6574776f726bdd0101244e6574776f726b496400010c6b6579e50101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400e9010110753132380005002847656e6572616c4b6579040028011c5665633c75383e000600244f6e6c794368696c6400070024506c7572616c6974790801086964ed010118426f6479496400011070617274f1010120426f64795061727400080000d9010000061000dd01100c78636d087630206a756e6374696f6e244e6574776f726b49640001100c416e79000000144e616d6564040028011c5665633c75383e00010020506f6c6b61646f74000200184b7573616d6100030000e1010000062000e501000003140000000800e9010000061800ed01100c78636d087630206a756e6374696f6e18426f6479496400011c10556e6974000000144e616d6564040028011c5665633c75383e00010014496e6465780400d901010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c00060000f101100c78636d087630206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74d901010c753332000100204672616374696f6e08010c6e6f6dd901010c75333200011464656e6f6dd901010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dd901010c75333200011464656e6f6dd901010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dd901010c75333200011464656e6f6dd901010c75333200040000f5010c0c78636d0876320c58636d041043616c6c00000400f90101585665633c496e737472756374696f6e3c43616c6c3e3e0000f901000002fd0100fd010c0c78636d0876322c496e737472756374696f6e041043616c6c000170345769746864726177417373657404000102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404000102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404000102012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f6964e101011c51756572794964000120726573706f6e73651d020120526573706f6e73650001286d61785f776569676874e101010c753634000300345472616e7366657241737365740801186173736574730102012c4d756c746941737365747300012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574730102012c4d756c746941737365747300011064657374cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f7374e101010c75363400011063616c6c2d02014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572d901010c7533320001406d61785f6d6573736167655f73697a65d901010c7533320001306d61785f6361706163697479d901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74d901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72d901010c75333200011873656e646572d901010c753332000124726563697069656e74d901010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400d1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f6964e101011c5175657279496400011064657374cd0101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f776569676874e101010c753634000c00304465706f73697441737365740c0118617373657473310201404d756c7469417373657446696c7465720001286d61785f617373657473d901010c75333200012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473310201404d756c7469417373657446696c7465720001286d61785f617373657473d901010c75333200011064657374cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e000e003445786368616e6765417373657408011067697665310201404d756c7469417373657446696c74657200011c726563656976650102012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473310201404d756c7469417373657446696c74657200011c72657365727665cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473310201404d756c7469417373657446696c74657200011064657374cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f6964e101011c5175657279496400011064657374cd0101344d756c74694c6f636174696f6e000118617373657473310201404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f776569676874e101010c75363400120030427579457865637574696f6e08011066656573090201284d756c746941737365740001307765696768745f6c696d69743d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400f501012458636d3c43616c6c3e0015002c536574417070656e6469780400f501012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574730102012c4d756c74694173736574730001187469636b6574cd0101344d756c74694c6f636174696f6e00180010547261700400e101010c7536340019004053756273637269626556657273696f6e08012071756572795f6964e101011c5175657279496400014c6d61785f726573706f6e73655f776569676874e101010c753634001a0048556e73756273637269626556657273696f6e001b00000102100c78636d087631286d756c746961737365742c4d756c7469417373657473000004000502013c5665633c4d756c746941737365743e000005020000020902000902100c78636d087631286d756c74696173736574284d756c74694173736574000008010869640d02011c4173736574496400010c66756e1102012c46756e676962696c69747900000d02100c78636d087631286d756c746961737365741c4173736574496400010820436f6e63726574650400cd0101344d756c74694c6f636174696f6e000000204162737472616374040028011c5665633c75383e000100001102100c78636d087631286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400e9010110753132380000002c4e6f6e46756e6769626c650400150201344173736574496e7374616e6365000100001502100c78636d087631286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400e90101107531323800010018417272617934040038011c5b75383b20345d0002001841727261793804001902011c5b75383b20385d0003001c417272617931360400450101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040028011c5665633c75383e0006000019020000030800000008001d020c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304000102012c4d756c74694173736574730001003c457865637574696f6e526573756c740400210201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e00030000210204184f7074696f6e0404540125020108104e6f6e6500000010536f6d6504002502000001000025020000040810bd010029020c0c78636d087630284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d000300002d020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656428011c5665633c75383e00003102100c78636d087631286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504000102012c4d756c74694173736574730000001057696c6404003502013857696c644d756c74694173736574000100003502100c78636d087631286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869640d02011c4173736574496400010c66756e3902013c57696c6446756e676962696c697479000100003902100c78636d087631286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100003d020c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400e101010c75363400010000410204184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd0100000100004502080c78636d5056657273696f6e65644d756c746941737365747300010808563004004902014c5665633c76303a3a4d756c746941737365743e00000008563104000102013c76313a3a4d756c74694173736574730001000049020000024d02004d02100c78636d0876302c6d756c74695f6173736574284d756c74694173736574000130104e6f6e650000000c416c6c0001002c416c6c46756e6769626c6500020038416c6c4e6f6e46756e6769626c650003004c416c6c416273747261637446756e6769626c65040108696428011c5665633c75383e00040058416c6c41627374726163744e6f6e46756e6769626c65040114636c61737328011c5665633c75383e0005004c416c6c436f6e637265746546756e6769626c650401086964510201344d756c74694c6f636174696f6e00060058416c6c436f6e63726574654e6f6e46756e6769626c65040114636c617373510201344d756c74694c6f636174696f6e00070040416273747261637446756e6769626c65080108696428011c5665633c75383e000118616d6f756e74e9010110753132380008004c41627374726163744e6f6e46756e6769626c65080114636c61737328011c5665633c75383e000120696e7374616e6365150201344173736574496e7374616e636500090040436f6e637265746546756e6769626c650801086964510201344d756c74694c6f636174696f6e000118616d6f756e74e901011075313238000a004c436f6e63726574654e6f6e46756e6769626c65080114636c617373510201344d756c74694c6f636174696f6e000120696e7374616e6365150201344173736574496e7374616e6365000b00005102100c78636d087630386d756c74695f6c6f636174696f6e344d756c74694c6f636174696f6e000124104e756c6c0000000858310400550201204a756e6374696f6e0001000858320800550201204a756e6374696f6e0000550201204a756e6374696f6e0002000858330c00550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0003000858341000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0004000858351400550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0005000858361800550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0006000858371c00550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0007000858382000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e0000550201204a756e6374696f6e000800005502100c78636d087630206a756e6374696f6e204a756e6374696f6e00012818506172656e740000002450617261636861696e0400d901010c7533320001002c4163636f756e744964333208011c6e6574776f726bdd0101244e6574776f726b496400010869640401205b75383b2033325d000200384163636f756e74496e646578363408011c6e6574776f726bdd0101244e6574776f726b4964000114696e646578e101010c753634000300304163636f756e744b6579323008011c6e6574776f726bdd0101244e6574776f726b496400010c6b6579e50101205b75383b2032305d0004003850616c6c6574496e7374616e6365040008010875380005003047656e6572616c496e6465780400e9010110753132380006002847656e6572616c4b6579040028011c5665633c75383e000700244f6e6c794368696c6400080024506c7572616c6974790801086964ed010118426f6479496400011070617274f1010120426f647950617274000900005902080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563004005102014476303a3a4d756c74694c6f636174696f6e0000000856310400cd01014476313a3a4d756c74694c6f636174696f6e000100005d020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404001902011c5b75383b20385d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04001902011c5b75383b20385d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408001902011c5b75383b20385d0000c901011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090961020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011834496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65c901011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687420011857656967687400013c72657175697265645f776569676874200118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657820013c4f766572776569676874496e64657800013c72657175697265645f7765696768742001185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657820013c4f766572776569676874496e64657800012c7765696768745f75736564200118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090965020c306f726d6c5f78746f6b656e73186d6f64756c65144576656e74040454000104585472616e736665727265644d756c746941737365747310011873656e646572000130543a3a4163636f756e7449640001186173736574730102012c4d756c746941737365747300010c666565090201284d756c7469417373657400011064657374cd0101344d756c74694c6f636174696f6e000004885472616e7366657272656420604d756c74694173736574602077697468206665652e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090969020c2c6f726d6c5f746f6b656e73186d6f64756c65144576656e740404540001341c456e646f7765640c012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f73740c012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000108ec416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77c84578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e7366657210012c63757272656e63795f696479010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2052657365727665640c012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000304e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e72657365727665640c012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656414012c63757272656e63795f696479010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500011873746174757374013442616c616e6365537461747573000508f4536f6d652072657365727665642062616c616e63652077617320726570617472696174656420286d6f7665642066726f6d20726573657276656420746f44616e6f74686572206163636f756e74292e2842616c616e636553657410012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500060468412062616c616e6365207761732073657420627920726f6f742e40546f74616c49737375616e636553657408012c63757272656e63795f696479010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000704b854686520746f74616c2069737375616e6365206f6620616e2063757272656e637920686173206265656e207365742457697468647261776e0c012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000804ec536f6d652062616c616e63657320776572652077697468647261776e2028652e672e2070617920666f72207472616e73616374696f6e20666565291c536c617368656410012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400012c667265655f616d6f756e74180128543a3a42616c616e636500013c72657365727665645f616d6f756e74180128543a3a42616c616e6365000904d4536f6d652062616c616e636573207765726520736c61736865642028652e672e2064756520746f206d69732d6265686176696f7229244465706f73697465640c012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a04984465706f736974656420736f6d652062616c616e636520696e746f20616e206163636f756e741c4c6f636b53657410011c6c6f636b5f6964190201384c6f636b4964656e74696669657200012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b0454536f6d652066756e647320617265206c6f636b65642c4c6f636b52656d6f7665640c011c6c6f636b5f6964190201384c6f636b4964656e74696669657200012c63757272656e63795f696479010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000c047c536f6d65206c6f636b65642066756e6473207765726520756e6c6f636b65640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909096d020c2c636861696e6272696467651870616c6c6574144576656e740404540001345c52656c617965725468726573686f6c644368616e676564040010010c753332000004a8566f7465207468726573686f6c6420686173206368616e67656420286e65775f7468726573686f6c642940436861696e57686974656c6973746564040008011c436861696e4964000104b0436861696e206e6f7720617661696c61626c6520666f72207472616e73666572732028636861696e5f6964293052656c6179657241646465640400000130543a3a4163636f756e7449640002045052656c6179657220616464656420746f207365743852656c6179657252656d6f7665640400000130543a3a4163636f756e7449640003046052656c617965722072656d6f7665642066726f6d207365744046756e6769626c655472616e73666572140008011c436861696e496400002001304465706f7369744e6f6e636500000401285265736f75726365496400007102011055323536000028011c5665633c75383e000404990146756e676c69626c655472616e7366657220697320666f722072656c6179696e672066756e6769626c65732028646573745f69642c206e6f6e63652c207265736f757263655f69642c20616d6f756e742c20726563697069656e742c206d65746164617461294c4e6f6e46756e6769626c655472616e73666572180008011c436861696e496400002001304465706f7369744e6f6e636500000401285265736f757263654964000028011c5665633c75383e000028011c5665633c75383e000028011c5665633c75383e00050495014e6f6e46756e6769626c655472616e7366657220697320666f722072656c6179696e67204e4654532028646573745f69642c206e6f6e63652c207265736f757263655f69642c20746f6b656e5f69642c20726563697069656e742c206d65746164617461293c47656e657269635472616e73666572100008011c436861696e496400002001304465706f7369744e6f6e636500000401285265736f757263654964000028011c5665633c75383e000604550147656e657269635472616e7366657220697320666f7220612067656e657269632064617461207061796c6f61642028646573745f69642c206e6f6e63652c207265736f757263655f69642c206d65746164617461291c566f7465466f720c0008011c436861696e496400002001304465706f7369744e6f6e63650000000130543a3a4163636f756e74496400070490566f7465207375626d697474656420696e206661766f7572206f662070726f706f73616c2c566f7465416761696e73740c0008011c436861696e496400002001304465706f7369744e6f6e63650000000130543a3a4163636f756e74496400080478566f74207375626d697474656420616761696e73742070726f706f73616c4050726f706f73616c417070726f766564080008011c436861696e496400002001304465706f7369744e6f6e636500090480566f74696e67207375636365737366756c20666f7220612070726f706f73616c4050726f706f73616c52656a6563746564080008011c436861696e496400002001304465706f7369744e6f6e6365000a0468566f74696e672072656a656374656420612070726f706f73616c4450726f706f73616c537563636565646564080008011c436861696e496400002001304465706f7369744e6f6e6365000b046c457865637574696f6e206f662063616c6c207375636365656465643850726f706f73616c4661696c6564080008011c436861696e496400002001304465706f7369744e6f6e6365000c0460457865637574696f6e206f662063616c6c206661696c65640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097102083c7072696d69746976655f7479706573105532353600000400750201205b7536343b20345d0000750200000304000000200079020c4c6f726d6c5f61737365745f7265676973747279186d6f64756c65144576656e740404540001083c52656769737465726564417373657408012061737365745f696479010128543a3a417373657449640001206d657461646174617d0201b041737365744d657461646174613c543a3a42616c616e63652c20543a3a437573746f6d4d657461646174613e0000003055706461746564417373657408012061737365745f696479010128543a3a417373657449640001206d657461646174617d0201b041737365744d657461646174613c543a3a42616c616e63652c20543a3a437573746f6d4d657461646174613e0001000499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097d020c2c6f726d6c5f7472616974733861737365745f72656769737472793441737365744d65746164617461081c42616c616e6365011838437573746f6d4d6574616461746101810200180120646563696d616c7310010c7533320001106e616d6528011c5665633c75383e00011873796d626f6c28011c5665633c75383e00014c6578697374656e7469616c5f6465706f73697418011c42616c616e63650001206c6f636174696f6e890201784f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e0001286164646974696f6e616c81020138437573746f6d4d65746164617461000081020c3872756e74696d655f636f6d6d6f6e14747970657338437573746f6d4d65746164617461000010010c78636d8502012c58636d4d657461646174610001206d696e7461626c65b80110626f6f6c0001307065726d697373696f6e6564b80110626f6f6c000134706f6f6c5f63757272656e6379b80110626f6f6c000085020c3872756e74696d655f636f6d6d6f6e1474797065732c58636d4d6574616461746100000401386665655f7065725f7365636f6e644101013c4f7074696f6e3c42616c616e63653e0000890204184f7074696f6e0404540159020108104e6f6e6500000010536f6d650400590200000100008d020c6070616c6c65745f6d6967726174696f6e5f6d616e616765721870616c6c6574144576656e74040454000124584d6967726174656453797374656d4163636f756e7473040010010c753332000004a84e756d626572206f66206163636f756e747320746861742068617665206265656e206d696772617465645c4d6967726174656456657374696e674163636f756e7473040010010c753332000104a44e756d626572206f662076657374696e6720746861742068617665206265656e206d69677261746564504d6967726174656450726f787950726f78696573040010010c753332000204a44e756d626572206f662070726f7869657320746861742068617665206265656e206d69677261746564544d69677261746564546f74616c49737375616e63650800180128543a3a42616c616e63650000180128543a3a42616c616e6365000308f4546865206e657720616e6420746865206f6c642069737375616e636520616674657220746865206d6967726174696f6e206f662069737375616e63652e785b604f6c6449737375616e6365602c20604e657749737375616e6365605d644661696c6564546f4d69677261746556657374696e67466f720400000130543a3a4163636f756e7449640004087d015468697320697320616e206572726f722074686174206d757374206265206469737061746368656420617320616e204576656e742c20617320776520646f206e6f742077616e7420746f206661696c207468652077686f6c6520626174636851017768656e206f6e65206163636f756e74206661696c732e2053686f756c6420616c736f206e6f742068617070656e2c2061732077652074616b65207468656d2066726f6d206d61696e6e65742e204275742e2e2e484d6967726174656456657374696e67466f721000000130543a3a4163636f756e74496400001801fd013c3c542061732070616c6c65745f76657374696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a0a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e636500001801fd013c3c542061732070616c6c65745f76657374696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a0a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e63650000100138543a3a426c6f636b4e756d6265720005047c446566696e6573207468652076657374696e67207765206d696772617465646c4661696c6564546f4d69677261746550726f787944617461466f720400000130543a3a4163636f756e7449640006085501496e646963617465732069662061206d6967726174696f6e206f662070726f78792064617461206661696c65642c20746869732073686f756c64204e455645522068617070656e2c20616e642063616e206f6e6c79c868617070656e2064756520746f20696e73756666696369656e742062616c616e63657320647572696e672072657365727665504d6967726174656450726f787944617461466f720c00000130543a3a4163636f756e74496400001801f5013c3c542061732070616c6c65745f70726f78793a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a0a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e6365000020010c753634000708ec496e6469636174657320746861742070726f7879206461746120686173206265656e206d696772617465642073756363657366756c6c7920666f7201015b6050726f786965644163636f756e74602c20604465706f7369744f6e50726f786965734163636f756e74602c20604e756d6265724f6650726f78696573605d444d6967726174696f6e46696e6973686564000804a0496e64696361746573207468617420746865206d6967726174696f6e2069732066696e69736865640499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090991020c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c748c01384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572950201504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c748c01384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909950204184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000990208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200009d020000022400a102000002a800a50208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ed901014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65a902016473705f72756e74696d653a3a52756e74696d65537472696e670000a9020000050200ad020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001242866696c6c5f626c6f636b040114726174696f1101011c50657262696c6c00000405014120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e1872656d61726b04011872656d61726b28011c5665633c75383e000114684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657320010c753634000204f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646528011c5665633c75383e0003306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646528011c5665633c75383e000424190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d73b10201345665633c4b657956616c75653e0005046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973b90201205665633c4b65793e000604744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697828010c4b657900011c7375626b65797310010c75333200071011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b28011c5665633c75383e000804a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb102000002b50200b50200000408282800b9020000022800bd020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373c10201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000c1020c346672616d655f737570706f72741c77656967687473405065724469737061746368436c61737304045401c502000c01186e6f726d616cc50201045400012c6f7065726174696f6e616cc5020104540001246d616e6461746f7279c5020104540000c5020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963f801384f7074696f6e3c5765696768743e0001246d61785f746f74616cf801384f7074696f6e3c5765696768743e0001207265736572766564f801384f7074696f6e3c5765696768743e0000c9020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178cd0201545065724469737061746368436c6173733c7533323e0000cd020c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000d1020c346672616d655f737570706f72741c776569676874733c52756e74696d65446257656967687400000801107265616420011857656967687400011477726974652001185765696768740000d502082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65a902013452756e74696d65537472696e67000124696d706c5f6e616d65a902013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973d902011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000d902040c436f7704045401dd02000400dd02000000dd02000002e10200e1020000040819021000e5020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574e9020c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e446174610804480124044e01100010012c706172656e745f68656164ed020120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f74240104480001306d61785f706f765f73697a6510010c7533320000ed020c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040028011c5665633c75383e0000f10204184f7074696f6e04045401f5020108104e6f6e6500000010536f6d650400f5020000010000f5020c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e7400000000f9020c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f646573fd02014442547265655365743c5665633c75383e3e0000fd02042042547265655365740404540128000400b90200000001030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616424014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65a80128287533322c2075333229000140696e67726573735f6368616e6e656c73050301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73050301885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00000503000002090300090300000408c1010d03000d030c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164b90101304f7074696f6e3c486173683e000011030c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d62657200001503089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040024012452656c61794861736800001903042042547265654d617008044b01c10104560115030004001d030000001d03000002210300210300000408c101150300250300000229030029030860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401c10100080124726563697069656e74c101010849640001106461746128015073705f7374643a3a7665633a3a5665633c75383e00002d030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174613103015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167652801345570776172644d65737361676500010044617574686f72697a655f75706772616465040124636f64655f6861736824011c543a3a4861736800020060656e6163745f617574686f72697a65645f75706772616465040110636f646528011c5665633c75383e000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3103089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461e902015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465f902015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765733503016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d657373616765733d0301a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000350300000239030039030860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736728013c446f776e776172644d65737361676500003d03042042547265654d617008044b01c10104560141030004004903000000410300000245030045030860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746128015073705f7374643a3a7665633a3a5665633c75383e000049030000024d03004d0300000408c10141030051030c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041501417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e675050726f686962697465644279506f6c6b61646f740001044901506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733877696c6c696e6720746f2072756e6856616c69646174696f6e446174614e6f74417661696c61626c65000304190154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404250154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909550310346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401240453000004009d0201185665633c543e000059030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77e1010124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d0310346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454016103045300000400690301185665633c543e00006103083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964190201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e736503011c526561736f6e7300006503083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000069030000026103006d0310346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e646564566563080454017103045300000400750301185665633c543e00007103083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720119021c42616c616e6365011800080108696419020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000075030000027103007903083c70616c6c65745f62616c616e6365732052656c65617365730001081856315f305f300000001856325f305f30000100007d030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e73666572080110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565e9010128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686f8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001206e65775f66726565e9010128543a3a42616c616e63650001306e65775f7265736572766564e9010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f757263658103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565e9010128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c697665080110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565e9010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c080110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001286b6565705f616c697665b80110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686f8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e81030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780190011408496404000001244163636f756e74496400000014496e6465780400850301304163636f756e74496e6465780001000c526177040028011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400e50101205b75383b2032305d000400008503000006900089030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047442616c616e636520746f6f206c6f7720746f2073656e642076616c7565484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909098d030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800009103086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000950300000299030099030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e636500009d030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000114447365745f696e76756c6e657261626c657304010c6e65777c01445665633c543a3a4163636f756e7449643e000004bc53657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200010c11015365742074686520696465616c206e756d626572206f6620636f6c6c61746f727320286e6f7420696e636c7564696e672074686520696e76756c6e657261626c6573292e7d014966206c6f776572696e672074686973206e756d6265722c207468656e20746865206e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e9d0141736964652066726f6d2074686174206564676520636173652c2074686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f726520636f6c6c61746f7273207468616e207468652064657369726564206e756d6265722e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00020478536574207468652063616e64696461637920626f6e6420616d6f756e742e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041855014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e005d01546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f7720604d696e43616e64696461746573602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea1030c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400012444546f6f4d616e7943616e646964617465730000044c546f6f206d616e792063616e6469646174657340546f6f46657743616e6469646174657300010448546f6f206665772063616e646964617465731c556e6b6e6f776e00020434556e6b6e6f776e206572726f72285065726d697373696f6e000304405065726d697373696f6e20697373756540416c726561647943616e6469646174650004046c5573657220697320616c726561647920612063616e646964617465304e6f7443616e6469646174650005045c55736572206973206e6f7420612063616e6469646174654c416c7265616479496e76756c6e657261626c650006047c5573657220697320616c726561647920616e20496e76756c6e657261626c655c4e6f4173736f63696174656456616c696461746f724964000704984163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049445856616c696461746f724e6f74526567697374657265640008048856616c696461746f72204944206973206e6f7420796574207265676973746572656404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909a503000002a90300a903084470616c6c65745f617574686f727368697038556e636c65456e7472794974656d0c2c426c6f636b4e756d62657201101048617368012418417574686f72010001083c496e636c7573696f6e486569676874040010012c426c6f636b4e756d62657200000014556e636c650800240110486173680000950201384f7074696f6e3c417574686f723e00010000ad030c4470616c6c65745f617574686f72736869701870616c6c65741043616c6c040454000104287365745f756e636c65730401286e65775f756e636c6573b10301385665633c543a3a4865616465723e0000046050726f76696465206120736574206f6620756e636c65732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb103000002b50300b503102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d6265720110104861736801b9030014012c706172656e745f68617368240130486173683a3a4f75747075740001186e756d626572d90101184e756d62657200012873746174655f726f6f74240130486173683a3a4f757470757400013c65787472696e736963735f726f6f74240130486173683a3a4f75747075740001186469676573742c01184469676573740000b9030c2873705f72756e74696d65187472616974732c426c616b6554776f32353600000000bd030c4470616c6c65745f617574686f72736869701870616c6c6574144572726f7204045400011c48496e76616c6964556e636c65506172656e740000048854686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e40556e636c6573416c726561647953657400010480556e636c657320616c72656164792073657420696e2074686520626c6f636b2e34546f6f4d616e79556e636c657300020440546f6f206d616e7920756e636c65732e3047656e65736973556e636c650003045454686520756e636c652069732067656e657369732e30546f6f48696768556e636c650004047c54686520756e636c6520697320746f6f206869676820696e20636861696e2e50556e636c65416c7265616479496e636c756465640005047854686520756e636c6520697320616c726561647920696e636c756465642e204f6c64556e636c65000604b454686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909c103000002c50300c5030000040800c90300c903084c646576656c6f706d656e745f72756e74696d652c53657373696f6e4b657973000004011061757261cd0301fc3c2f2ac2ab2a2f2041757261202f2ac2bb2a2f206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000cd03104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c696300000400d103013c737232353531393a3a5075626c69630000d1030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000d5030000021000d90300000408dd032800dd030c1c73705f636f72651863727970746f244b65795479706549640000040038011c5b75383b20345d0000e1030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973c903011c543a3a4b65797300011470726f6f6628011c5665633c75383e000038e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002823203c7765696768743e11012d20436f6d706c65786974793a20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360a02d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360802d204462526561647320706572206b65792069643a20604b65794f776e657260842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e2870757267655f6b657973000140c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e002823203c7765696768743e61012d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468a420206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460a02d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ee90310346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401cd03045300000400ed0301185665633c543e0000ed03000002cd0300f103084873705f636f6e73656e7375735f736c6f747310536c6f740000040020010c7536340000f50300000408000400f903083c70616c6c65745f6d756c7469736967204d756c74697369670c2c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100001001107768656e88015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c737c01385665633c4163636f756e7449643e0000fd030000040c0104001800010410346672616d655f737570706f727418747261697473106d69736344577261707065724b6565704f7061717565040454010504000800d901000000050401045400000504084c646576656c6f706d656e745f72756e74696d651043616c6c0001a41853797374656d0400ad0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000003c50617261636861696e53797374656d04002d0301d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0001002454696d657374616d700400590301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003002042616c616e63657304007d0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00140044436f6c6c61746f7253656c656374696f6e04009d0301d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e00470028417574686f72736869700400ad0301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417574686f72736869702c2052756e74696d653e001e001c53657373696f6e0400e10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e001f00204d756c74697369670400090401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e003c001450726f78790400110401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e003d001c5574696c6974790400190401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e003e00245363686564756c65720400390401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e003f001c436f756e63696c0400450401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e00400024456c656374696f6e730400490401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e0041002444656d6f63726163790400510401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e004200204964656e746974790400590401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0043001c56657374696e670400f90401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e0044002054726561737572790400010501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0045001c556e69717565730400050501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e00460020507265696d6167650400110501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e00480010466565730400150501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466565732c2052756e74696d653e005a0018416e63686f720400190501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c416e63686f722c2052756e74696d653e005b0018436c61696d7304001d0501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e005c003843726f77646c6f616e436c61696d0400210501cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f77646c6f616e436c61696d2c2052756e74696d653e005d003c43726f77646c6f616e5265776172640400410501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f77646c6f616e5265776172642c2052756e74696d653e005e0014506f6f6c730400450501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6f6c732c2052756e74696d653e005f00144c6f616e730400650501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c6f616e732c2052756e74696d653e0060002c5065726d697373696f6e7304006d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5065726d697373696f6e732c2052756e74696d653e00610044436f6c6c61746f72416c6c6f776c6973740400710501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f72416c6c6f776c6973742c2052756e74696d653e00620018546f6b656e730400750501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e732c2052756e74696d653e006300204e667453616c65730400790501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e667453616c65732c2052756e74696d653e006400104e66747304007d0501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6674732c2052756e74696d653e006700184272696467650400890501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4272696467652c2052756e74696d653e006500204b657973746f726504008d0501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4b657973746f72652c2052756e74696d653e0068002458636d7051756575650400990501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0078002c506f6c6b61646f7458636d04009d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00790020446d7051756575650400010601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e007b001c58546f6b656e730400050601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58546f6b656e732c2052756e74696d653e007c002c436861696e4272696467650400150601c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436861696e4272696467652c2052756e74696d653e009700444f726d6c417373657452656769737472790400190601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f726d6c417373657452656769737472792c2052756e74696d653e009800244d6967726174696f6e0400290601b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d6967726174696f6e2c2052756e74696d653e00c700105375646f04004d0601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e00c8000009040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f726965737c01445665633c543a3a4163636f756e7449643e00011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e0000405101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e002823203c7765696768743e19014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d442d204442205765696768743a204e6f6e65482d20506c75732043616c6c205765696768742c23203c2f7765696768743e2061735f6d756c74691801247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965737c01445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e740d0401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6c010401344f706171756543616c6c3c543e00012873746f72655f63616c6cb80110626f6f6c0001286d61785f7765696768742001185765696768740001b45501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e002823203c7765696768743e502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743a2101202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c60292501202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c6029482d20506c75732043616c6c205765696768742c23203c2f7765696768743e40617070726f76655f61735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965737c01445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e740d0401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687420011857656967687400028c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e002823203c7765696768743e242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e882d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743ab8202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745dbc202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c23203c2f7765696768743e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965737c01445665633c543a3a4163636f756e7449643e00012474696d65706f696e7488016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000368550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e002823203c7765696768743e242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e882d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743a1501202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c731901202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d0404184f7074696f6e04045401880108104e6f6e6500000010536f6d65040088000001000011040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c000130543a3a4163636f756e744964000140666f7263655f70726f78795f74797065150401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e00003c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e002823203c7765696768743efc57656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e2c23203c2f7765696768743e246164645f70726f78790c012064656c6567617465000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001344501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e002823203c7765696768743efc57656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e2c23203c2f7765696768743e3072656d6f76655f70726f78790c012064656c6567617465000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200022ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e002823203c7765696768743efc57656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e2c23203c2f7765696768743e3872656d6f76655f70726f78696573000328b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e747320637265617465642062792060616e6f6e796d6f7573602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a002823203c7765696768743efc57656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e2c23203c2f7765696768743e24616e6f6e796d6f75730c012870726f78795f74797065980130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e6465789c010c75313600045c3901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e002823203c7765696768743efc57656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e2c23203c2f7765696768743e8c544f444f3a204d69676874206265206f76657220636f756e74696e6720312072656164386b696c6c5f616e6f6e796d6f757314011c737061776e6572000130543a3a4163636f756e74496400012870726f78795f74797065980130543a3a50726f787954797065000114696e6465789c010c753136000118686569676874d9010138543a3a426c6f636b4e756d6265720001246578745f696e646578d901010c753332000550b452656d6f76657320612070726576696f75736c7920737061776e656420616e6f6e796d6f75732070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746fa860616e6f6e796d6f757360207769746820636f72726573706f6e64696e6720706172616d65746572732e004d012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060616e6f6e796d6f75736020746f206372656174652074686973206163636f756e742e4d012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e2050726f6261626c79206030602e01012d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e3d012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e49012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e0049014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c79206372656174656420616e6f6e796d6f7573f06163636f756e742077686f73652060616e6f6e796d6f7573602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e002823203c7765696768743efc57656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e2c23203c2f7765696768743e20616e6e6f756e63650801107265616c000130543a3a4163636f756e74496400012463616c6c5f6861736824013443616c6c486173684f663c543e00065405015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e002823203c7765696768743e6057656967687420697320612066756e6374696f6e206f663a982d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652ea02d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e2c23203c2f7765696768743e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c000130543a3a4163636f756e74496400012463616c6c5f6861736824013443616c6c486173684f663c543e0007407052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e002823203c7765696768743e6057656967687420697320612066756e6374696f6e206f663a982d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652ea02d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e2c23203c2f7765696768743e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465000130543a3a4163636f756e74496400012463616c6c5f6861736824013443616c6c486173684f663c543e000840b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e002823203c7765696768743e6057656967687420697320612066756e6374696f6e206f663a982d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652ea02d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e2c23203c2f7765696768743e3c70726f78795f616e6e6f756e63656410012064656c6567617465000130543a3a4163636f756e7449640001107265616c000130543a3a4163636f756e744964000140666f7263655f70726f78795f74797065150401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e0009444d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e002823203c7765696768743e6057656967687420697320612066756e6374696f6e206f663a982d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652ea02d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e150404184f7074696f6e04045401980108104e6f6e6500000010536f6d65040098000001000019040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011414626174636804011463616c6c731d0401605665633c3c5420617320436f6e6669673e3a3a43616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465789c010c75313600011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c731d0401605665633c3c5420617320436f6e6669673e3a3a43616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696e21040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c731d0401605665633c3c5420617320436f6e6669673e3a3a43616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d040000020504002104084c646576656c6f706d656e745f72756e74696d65304f726967696e43616c6c65720001141873797374656d0400250401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400290401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e0040002c506f6c6b61646f7458636d04002d04014870616c6c65745f78636d3a3a4f726967696e0079002843756d756c757358636d04003104016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e007a0010566f69640400350401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640004000025040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200002904084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200002d040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400cd0101344d756c74694c6f636174696f6e00000020526573706f6e73650400cd0101344d756c74694c6f636174696f6e0001000031040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400c1010118506172614964000100003504081c73705f636f726510566f69640001000039040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c41040150426f783c43616c6c4f72486173684f663c543e3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d6564140108696428011c5665633c75383e0001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c41040150426f783c43616c6c4f72486173684f663c543e3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d6564040108696428011c5665633c75383e0003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c41040150426f783c43616c6c4f72486173684f663c543e3e000414a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e002823203c7765696768743e5453616d65206173205b607363686564756c65605d2e2c23203c2f7765696768743e507363686564756c655f6e616d65645f6166746572140108696428011c5665633c75383e0001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c41040150426f783c43616c6c4f72486173684f663c543e3e000514905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e002823203c7765696768743ec453616d65206173205b607363686564756c655f6e616d6564605d2853656c663a3a7363686564756c655f6e616d6564292e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d0404184f7074696f6e04045401a80108104e6f6e6500000010536f6d650400a80000010000410410346672616d655f737570706f727418747261697473207363686564756c652c4d617962654861736865640804540105041048617368012401081456616c75650400050401045400000010486173680400240110486173680001000045040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d626572737c01445665633c543a3a4163636f756e7449643e0001147072696d65950201504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616c0504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64d901010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64d901012c4d656d626572436f756e7400012070726f706f73616c0504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64d901010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c24011c543a3a48617368000114696e646578d901013450726f706f73616c496e64657800011c617070726f7665b80110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f6861736824011c543a3a48617368000114696e646578d901013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64e10101185765696768740001306c656e6774685f626f756e64d901010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736824011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e49040c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f7465737c01445665633c543a3a4163636f756e7449643e00011476616c7565e901013042616c616e63654f663c543e00005c5901566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e20546869732063616e2062652063616c6c656420746fe07365742074686520696e697469616c20766f7465732c206f722075706461746520616c7265616479206578697374696e6720766f7465732e005d0155706f6e20696e697469616c20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e642061206465706f73697420616d6f756e742069734d0172657365727665642e20546865206465706f736974206973206261736564206f6e20746865206e756d626572206f6620766f74657320616e642063616e2062652075706461746564206f7665722074696d652e004c5468652060766f746573602073686f756c643a4420202d206e6f7420626520656d7074792e550120202d206265206c657373207468616e20746865206e756d626572206f6620706f737369626c652063616e646964617465732e204e6f7465207468617420616c6c2063757272656e74206d656d6265727320616e6411012020202072756e6e6572732d75702061726520616c736f206175746f6d61746963616c6c792063616e6469646174657320666f7220746865206e65787420726f756e642e0049014966206076616c756560206973206d6f7265207468616e206077686f60277320667265652062616c616e63652c207468656e20746865206d6178696d756d206f66207468652074776f20697320757365642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e6700550149742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f202a2a4e4f542a2a20706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865a86c6f636b20616e64206b65657020736f6d6520666f722066757274686572206f7065726174696f6e732e002823203c7765696768743e5101576520617373756d6520746865206d6178696d756d2077656967687420616d6f6e6720616c6c20332063617365733a20766f74655f657175616c2c20766f74655f6d6f726520616e6420766f74655f6c6573732e2c23203c2f7765696768743e3072656d6f76655f766f7465720001146c52656d6f766520606f726967696e60206173206120766f7465722e00b8546869732072656d6f76657320746865206c6f636b20616e642072657475726e7320746865206465706f7369742e00fc546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e656420616e64206265206120766f7465722e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e74d901010c75333200023c11015375626d6974206f6e6573656c6620666f722063616e6469646163792e204120666978656420616d6f756e74206f66206465706f736974206973207265636f726465642e005d01416c6c2063616e64696461746573206172652077697065642061742074686520656e64206f6620746865207465726d2e205468657920656974686572206265636f6d652061206d656d6265722f72756e6e65722d75702ccc6f72206c65617665207468652073797374656d207768696c65207468656972206465706f73697420697320736c61736865642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e67005d014576656e20696620612063616e64696461746520656e6473207570206265696e672061206d656d6265722c2074686579206d7573742063616c6c205b6043616c6c3a3a72656e6f756e63655f63616e646964616379605d5901746f20676574207468656972206465706f736974206261636b2e204c6f73696e67207468652073706f7420696e20616e20656c656374696f6e2077696c6c20616c77617973206c65616420746f206120736c6173682e002823203c7765696768743e0901546865206e756d626572206f662063757272656e742063616e64696461746573206d7573742062652070726f7669646564206173207769746e65737320646174612e2c23203c2f7765696768743e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e674d04012852656e6f756e63696e670003484d0152656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c3c6f7574636f6d65732065786973743a0049012d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c20746865206465706f736974206973f02020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e61012d20606f726967696e6020697320612063757272656e742072756e6e65722d75702e20496e207468697320636173652c20746865206465706f73697420697320756e72657365727665642c2072657475726e656420616e648c20206f726967696e2069732072656d6f76656420617320612072756e6e65722d75702e55012d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c20746865206465706f73697420697320756e726573657276656420616e64206f726967696e2069735501202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e6101202053696d696c617220746f205b6072656d6f76655f6d656d626572605d2853656c663a3a72656d6f76655f6d656d626572292c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865795901202061726520696d6d6564696174656c7920757365642e20496620746865207072696d652069732072656e6f756e63696e672c207468656e206e6f207072696d652077696c6c20657869737420756e74696c207468653420206e65787420726f756e642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642c20616e642068617665206f6e65206f66207468652061626f766520726f6c65732e002823203c7765696768743ee05468652074797065206f662072656e6f756e63696e67206d7573742062652070726f7669646564206173207769746e65737320646174612e2c23203c2f7765696768743e3472656d6f76655f6d656d62657208010c77686f8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500013c6861735f7265706c6163656d656e74b80110626f6f6c000438590152656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f667c746865206f7574676f696e67206d656d62657220697320736c61736865642e005501496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865fc6f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20656c656374696f6e20697320737461727465642e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e0041014e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e002823203c7765696768743e5101496620776520686176652061207265706c6163656d656e742c20776520757365206120736d616c6c207765696768742e20456c73652c2073696e63652074686973206973206120726f6f742063616c6c20616e64d077696c6c20676f20696e746f2070687261676d656e2c20776520617373756d652066756c6c20626c6f636b20666f72206e6f772e2c23203c2f7765696768743e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c7533320005284501436c65616e20616c6c20766f746572732077686f2061726520646566756e63742028692e652e207468657920646f206e6f7420736572766520616e7920707572706f736520617420616c6c292e20546865ac6465706f736974206f66207468652072656d6f76656420766f74657273206172652072657475726e65642e0001015468697320697320616e20726f6f742066756e6374696f6e20746f2062652075736564206f6e6c7920666f7220636c65616e696e67207468652073746174652e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e002823203c7765696768743e5d0154686520746f74616c206e756d626572206f6620766f7465727320616e642074686f736520746861742061726520646566756e6374206d7573742062652070726f7669646564206173207769746e65737320646174612e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e4d04086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e6469646174650400d901010c7533320002000051040c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c0404540001641c70726f706f736508013470726f706f73616c5f6861736824011c543a3a4861736800011476616c7565e901013042616c616e63654f663c543e00002c9c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e00385765696768743a20604f28702960187365636f6e6408012070726f706f73616cd901012450726f70496e64657800014c7365636f6e64735f75707065725f626f756e64d901010c753332000128b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e41012d20607365636f6e64735f75707065725f626f756e64603a20616e20757070657220626f756e64206f6e207468652063757272656e74206e756d626572206f66207365636f6e6473206f6e20746869732501202070726f706f73616c2e2045787472696e736963206973207765696768746564206163636f7264696e6720746f20746869732076616c75652077697468206e6f20726566756e642e001d015765696768743a20604f28532960207768657265205320697320746865206e756d626572206f66207365636f6e647320612070726f706f73616c20616c7265616479206861732e10766f74650801247265665f696e646578d901013c5265666572656e64756d496e646578000110766f7465d001644163636f756e74566f74653c42616c616e63654f663c543e3e0002243101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e002d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722068617320766f746564206f6e2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504013470726f706f73616c5f6861736824011c543a3a486173680004242d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e0015015765696768743a20604f2856296020776974682056206e756d626572206f66207665746f65727320696e2074686520626c61636b6c697374206f662070726f706f73616c2eb820204465636f64696e6720766563206f66206c656e67746820562e2043686172676564206173206d6178696d756d6465787465726e616c5f70726f706f73655f6d616a6f7269747904013470726f706f73616c5f6861736824011c543a3a4861736800052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404013470726f706f73616c5f6861736824011c543a3a4861736800062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f6861736824011c543a3a48617368000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d62657200073c4d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f9420206046617374547261636b566f74696e67506572696f646020696620746f6f206c6f772e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f6861736824011c543a3a48617368000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578d901013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e3463616e63656c5f717565756564040114776869636810013c5265666572656e64756d496e646578000a1c9c43616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00c42d20607768696368603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e0049015765696768743a20604f284429602077686572652060446020697320746865206974656d7320696e207468652064697370617463682071756575652e205765696768746564206173206044203d203130602e2064656c65676174650c0108746f000130543a3a4163636f756e744964000128636f6e76696374696f6e55040128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000b50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000c30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000d1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e346e6f74655f707265696d616765040140656e636f6465645f70726f706f73616c28011c5665633c75383e000e285d0152656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e205468697320646f65736e27742072657175697265207468652070726f706f73616c20746f2062652101696e207468652064697370617463682071756575652062757420646f657320726571756972652061206465706f7369742c2072657475726e6564206f6e636520656e61637465642e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00c42d2060656e636f6465645f70726f706f73616c603a2054686520707265696d616765206f6620612070726f706f73616c2e0058456d6974732060507265696d6167654e6f746564602e004d015765696768743a20604f28452960207769746820452073697a65206f662060656e636f6465645f70726f706f73616c60202870726f7465637465642062792061207265717569726564206465706f736974292e646e6f74655f707265696d6167655f6f7065726174696f6e616c040140656e636f6465645f70726f706f73616c28011c5665633c75383e000f04090153616d6520617320606e6f74655f707265696d6167656020627574206f726967696e20697320604f7065726174696f6e616c507265696d6167654f726967696e602e586e6f74655f696d6d696e656e745f707265696d616765040140656e636f6465645f70726f706f73616c28011c5665633c75383e001030410152656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e2054686973207265717569726573207468652070726f706f73616c20746f2062653d01696e207468652064697370617463682071756575652e204e6f206465706f736974206973206e65656465642e205768656e20746869732063616c6c206973207375636365737366756c2c20692e652e350174686520707265696d61676520686173206e6f74206265656e2075706c6f61646564206265666f726520616e64206d61746368657320736f6d6520696d6d696e656e742070726f706f73616c2c3c6e6f2066656520697320706169642e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00c42d2060656e636f6465645f70726f706f73616c603a2054686520707265696d616765206f6620612070726f706f73616c2e0058456d6974732060507265696d6167654e6f746564602e004d015765696768743a20604f28452960207769746820452073697a65206f662060656e636f6465645f70726f706f73616c60202870726f7465637465642062792061207265717569726564206465706f736974292e886e6f74655f696d6d696e656e745f707265696d6167655f6f7065726174696f6e616c040140656e636f6465645f70726f706f73616c28011c5665633c75383e0011042d0153616d6520617320606e6f74655f696d6d696e656e745f707265696d6167656020627574206f726967696e20697320604f7065726174696f6e616c507265696d6167654f726967696e602e34726561705f707265696d61676508013470726f706f73616c5f6861736824011c543a3a4861736800016070726f706f73616c5f6c656e5f75707065725f626f756e64d901010c75333200123cf052656d6f766520616e20657870697265642070726f706f73616c20707265696d61676520616e6420636f6c6c65637420746865206465706f7369742e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f6620612070726f706f73616c2e5d012d206070726f706f73616c5f6c656e6774685f75707065725f626f756e64603a20616e20757070657220626f756e64206f6e206c656e677468206f66207468652070726f706f73616c2e2045787472696e736963206973c820207765696768746564206163636f7264696e6720746f20746869732076616c75652077697468206e6f20726566756e642e004d01546869732077696c6c206f6e6c7920776f726b2061667465722060566f74696e67506572696f646020626c6f636b732066726f6d207468652074696d6520746861742074686520707265696d6167652077617359016e6f7465642c2069662069742773207468652073616d65206163636f756e7420646f696e672069742e2049662069742773206120646966666572656e74206163636f756e742c207468656e206974276c6c206f6e6c79ac776f726b20616e206164646974696f6e616c2060456e6163746d656e74506572696f6460206c617465722e005c456d6974732060507265696d616765526561706564602e00b45765696768743a20604f284429602077686572652044206973206c656e677468206f662070726f706f73616c2e18756e6c6f636b040118746172676574000130543a3a4163636f756e74496400131ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e64657800146c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574000130543a3a4163636f756e744964000114696e64657810013c5265666572656e64756d496e64657800153c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e38656e6163745f70726f706f73616c08013470726f706f73616c5f6861736824011c543a3a48617368000114696e64657810013c5265666572656e64756d496e6465780016044d01456e61637420612070726f706f73616c2066726f6d2061207265666572656e64756d2e20466f72206e6f77207765206a757374206d616b65207468652077656967687420626520746865206d6178696d756d2e24626c61636b6c69737408013470726f706f73616c5f6861736824011c543a3a4861736800013c6d617962655f7265665f696e6465786d01015c4f7074696f6e3c5265666572656e64756d496e6465783e00173c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578d901012450726f70496e64657800181c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55040c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b656436780006000059040c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c04045400013c346164645f72656769737472617204011c6163636f756e74000130543a3a4163636f756e7449640000347841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e002823203c7765696768743e25012d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e302d204f6e65206576656e742e2c23203c2f7765696768743e307365745f6964656e74697479040110696e666f5d0401a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e00014c290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e002823203c7765696768743e442d20604f2858202b205827202b205229601d0120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e64656429e020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429802d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e21012d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e302d204f6e65206576656e742e2c23203c2f7765696768743e207365745f7375627304011073756273e50401645665633c28543a3a4163636f756e7449642c2044617461293e0002548c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e002823203c7765696768743e302d20604f2850202b20532960e420202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e842d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e732e142d2044423adc20202d206050202b2053602073746f72616765206d75746174696f6e732028636f64656320636f6d706c657869747920604f2831296029bc20202d204f6e652073746f7261676520726561642028636f64656320636f6d706c657869747920604f28502960292ec020202d204f6e652073746f726167652077726974652028636f64656320636f6d706c657869747920604f28532960292ed020202d204f6e652073746f726167652d6578697374732028604964656e746974794f663a3a636f6e7461696e735f6b657960292e2c23203c2f7765696768743e38636c6561725f6964656e746974790003483901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e002823203c7765696768743e402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e882d204f6e652062616c616e63652d756e72657365727665206f7065726174696f6e2ec82d206032602073746f7261676520726561647320616e64206053202b2032602073746f726167652064656c6574696f6e732e302d204f6e65206576656e742e2c23203c2f7765696768743e44726571756573745f6a756467656d656e740801247265675f696e646578d9010138526567697374726172496e64657800011c6d61785f666565e901013042616c616e63654f663c543e00045c94526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e002823203c7765696768743e342d20604f2852202b205829602e802d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2eb82d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e302d204f6e65206576656e742e2c23203c2f7765696768743e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005446843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e002823203c7765696768743e342d20604f2852202b205829602e802d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e882d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e2c2d204f6e65206576656e742c23203c2f7765696768743e1c7365745f666565080114696e646578d9010138526567697374726172496e64657800010c666565e901013042616c616e63654f663c543e0006341901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e002823203c7765696768743e242d20604f285229602e782d204f6e652073746f72616765206d75746174696f6e20604f285229602ee42d2042656e63686d61726b3a20372e333135202b2052202a20302e33323920c2b57320286d696e207371756172657320616e616c79736973292c23203c2f7765696768743e387365745f6163636f756e745f6964080114696e646578d9010138526567697374726172496e64657800010c6e6577000130543a3a4163636f756e744964000734bc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e002823203c7765696768743e242d20604f285229602e782d204f6e652073746f72616765206d75746174696f6e20604f285229602ee02d2042656e63686d61726b3a20382e383233202b2052202a20302e333220c2b57320286d696e207371756172657320616e616c79736973292c23203c2f7765696768743e287365745f6669656c6473080114696e646578d9010138526567697374726172496e6465780001186669656c6473ed0401384964656e746974794669656c6473000834a853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e002823203c7765696768743e242d20604f285229602e782d204f6e652073746f72616765206d75746174696f6e20604f285229602ee42d2042656e63686d61726b3a20372e343634202b2052202a20302e33323520c2b57320286d696e207371756172657320616e616c79736973292c23203c2f7765696768743e4470726f766964655f6a756467656d656e740c01247265675f696e646578d9010138526567697374726172496e6465780001187461726765748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001246a756467656d656e74f504015c4a756467656d656e743c42616c616e63654f663c543e3e00094cb850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e002823203c7765696768743e342d20604f2852202b205829602e842d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e942d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2eb82d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e302d204f6e65206576656e742e2c23203c2f7765696768743e346b696c6c5f6964656e746974790401187461726765748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000a4c410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e002823203c7765696768743e442d20604f2852202b2053202b205829602e802d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e702d206053202b2032602073746f72616765206d75746174696f6e732e302d204f6e65206576656e742e2c23203c2f7765696768743e1c6164645f73756208010c7375628103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646174616904011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c7375628103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646174616904011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c7375628103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e04704964656e746974792070616c6c6574206465636c61726174696f6e2e5d040c3c70616c6c65745f6964656e74697479147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c61040190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617969040110446174610001146c6567616c690401104461746100010c776562690401104461746100011072696f746904011044617461000114656d61696c690401104461746100013c7067705f66696e6765727072696e74e10401404f7074696f6e3c5b75383b2032305d3e000114696d616765690401104461746100011c7477697474657269040110446174610000610410346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e646564566563080454016504045300000400dd0401185665633c543e0000650400000408690469040069040c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e65000000105261773004006d0400000100105261773104007104000002001052617732040075040000030010526177330400790400000400105261773404003800000500105261773504007d040000060010526177360400810400000700105261773704008504000008001052617738040019020000090010526177390400890400000a0014526177313004008d0400000b001452617731310400910400000c001452617731320400950400000d001452617731330400990400000e0014526177313404009d0400000f001452617731350400a1040000100014526177313604004501000011001452617731370400a504000012001452617731380400a904000013001452617731390400ad04000014001452617732300400e501000015001452617732310400b104000016001452617732320400b504000017001452617732330400b904000018001452617732340400bd04000019001452617732350400c10400001a001452617732360400c50400001b001452617732370400c90400001c001452617732380400cd0400001d001452617732390400d10400001e001452617733300400d50400001f001452617733310400d90400002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c536861546872656532353604000400002500006d040000030000000008007104000003010000000800750400000302000000080079040000030300000008007d040000030500000008008104000003060000000800850400000307000000080089040000030900000008008d040000030a000000080091040000030b000000080095040000030c000000080099040000030d00000008009d040000030e0000000800a1040000030f0000000800a504000003110000000800a904000003120000000800ad04000003130000000800b104000003150000000800b504000003160000000800b904000003170000000800bd04000003180000000800c104000003190000000800c5040000031a0000000800c9040000031b0000000800cd040000031c0000000800d1040000031d0000000800d5040000031e0000000800d9040000031f0000000800dd04000002650400e10404184f7074696f6e04045401e5010108104e6f6e6500000010536f6d650400e5010000010000e504000002e90400e9040000040800690400ed040c3c70616c6c65745f6964656e7469747914747970657320426974466c61677304045401f1040004002001344964656e746974794669656c640000f1040c3c70616c6c65745f6964656e74697479147479706573344964656e746974794669656c640001201c446973706c6179000100144c6567616c0002000c5765620004001052696f7400080014456d61696c0010003850677046696e6765727072696e7400200014496d6167650040001c5477697474657200800000f5040c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000f9040c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000034b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20322052656164732c203220577269746573f8202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745dfc202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d2c23203c2f7765696768743e28766573745f6f746865720401187461726765748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500013cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c203320577269746573f0202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74f4202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c23203c2f7765696768743e3c7665737465645f7472616e736665720801187461726765748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001207363686564756c65fd0401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00024464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c2033205772697465733901202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d3d01202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d2c23203c2f7765696768743e54666f7263655f7665737465645f7472616e736665720c0118736f757263658103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001187461726765748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001207363686564756c65fd0401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00034860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20342052656164732c2034205772697465733101202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e743501202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e742c23203c2f7765696768743e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000001050c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001103470726f706f73655f7370656e6408011476616c7565e901013c42616c616e63654f663c542c20493e00012c62656e65666963696172798103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000024290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e002823203c7765696768743e482d20436f6d706c65786974793a204f283129b02d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460e82d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e74602c23203c2f7765696768743e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964d901013450726f706f73616c496e646578000124f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e002823203c7765696768743e482d20436f6d706c65786974793a204f283129cc2d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460d02d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e74602c23203c2f7765696768743e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964d901013450726f706f73616c496e6465780002285901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e002823203c7765696768743e4c2d20436f6d706c65786974793a204f2831292e8c2d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360582d20446257726974653a2060417070726f76616c73602c23203c2f7765696768743e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964d901013450726f706f73616c496e64657800033c2d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c002823203c7765696768743edc2d20436f6d706c65786974793a204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73882d20446220726561647320616e64207772697465733a2060417070726f76616c73602c23203c2f7765696768743e001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05050c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016018637265617465080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400011461646d696e8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001146f776e65728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000130667265655f686f6c64696e67b80110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400011c7769746e6573730905013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640001146f776e65728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d496400012c636865636b5f6f776e65720d0501ac4f7074696f6e3c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e0004345844657374726f7920612073696e676c65206974656d2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d4964000110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500053cc04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001146974656d73f001385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001146f776e65728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001186973737565728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011461646d696e8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011c667265657a65728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d496400012064656c65676174658103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000d2c1501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640001506d617962655f636865636b5f64656c65676174650d0501ac4f7074696f6e3c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001146f776e65728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001186973737565728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011461646d696e8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011c667265657a65728103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000130667265655f686f6c64696e67b80110626f6f6c00012469735f66726f7a656eb80110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579ec016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565ec0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656df401444f7074696f6e3c543a3a4974656d49643e00010c6b6579ec016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eb80110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001106974656de80124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400011064617461ec0178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656eb80110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6ef8015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e20013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e09050c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d73d901010c7533320001386974656d5f6d6574616461746173d901010c75333200012861747472696275746573d901010c75333200000d0504184f7074696f6e0404540181030108104e6f6e6500000010536f6d6504008103000001000011050c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657328011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736824011c543a3a48617368000104dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e40726571756573745f707265696d6167650401106861736824011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736824011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15050c2c70616c6c65745f666565731870616c6c65741043616c6c0404540001041c7365745f66656508010c6b657924011c543a3a486173680001246e65775f707269636518013042616c616e63654f663c543e000004745365742074686520676976656e2066656520666f7220746865206b6579042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19050c3870616c6c65745f616e63686f72731870616c6c65741043616c6c040454000110287072655f636f6d6d6974080124616e63686f725f696424011c543a3a486173680001307369676e696e675f726f6f7424011c543a3a486173680000303d014f627461696e7320616e206578636c7573697665206c6f636b20746f206d616b6520746865206e6578742075706461746520746f2061206365727461696e20646f63756d656e742076657273696f6e41016964656e7469666965642062792060616e63686f725f696460206f6e2043656e7472696675676520703270206e6574776f726b20666f722061206e756d626572206f6620626c6f636b7320676976656e5901627920607072655f636f6d6d69745f65787069726174696f6e5f6475726174696f6e5f626c6f636b73602066756e6374696f6e2e20607369676e696e675f726f6f74602069732061206368696c64206e6f6465206f664501746865206f66662d636861696e206d65726b6c652074726565206f66207468617420646f63756d656e742e20496e2043656e747269667567652070726f746f636f6c2c204120646f63756d656e742069735501636f6d6d6974746564206f6e6c79206166746572207265616368696e6720636f6e73656e737573207769746820746865206f7468657220636f6c6c61626f7261746f7273206f6e2074686520646f63756d656e742e3d01436f6e73656e73757320697320726561636865642062792067657474696e6720612063727970746f67726170686963207369676e61747572652066726f6d206f746865722070617274696573206279610173656e64696e67207468656d2074686520607369676e696e675f726f6f74602e20546f2064656e792074686520636f756e7465722d7061727479207468652066726565206f7074696f6e206f66207075626c697368696e674d01697473206f776e20737461746520636f6d6d69746d656e742075706f6e20726563656976696e672061207265717565737420666f72207369676e61747572652c20746865206e6f64652063616e2066697273743d017075626c6973682061207072652d636f6d6d69742e204f6e6c7920746865207072652d636f6d6d6974746572206163636f756e7420696e207468652043656e7472696675676520636861696e2069733501616c6c6f77656420746f2060636f6d6d697460206120636f72726573706f6e64696e6720616e63686f72206265666f726520746865207072652d636f6d6d69742068617320657870697265642ed0466f722061206d6f72652064657461696c6564206578706c616e6174696f6e2072656665722073656374696f6e20332e34206f6689015b43656e747269667567652050726f746f636f6c2050617065725d2868747470733a2f2f737461746963772e63656e747269667567652e696f2f6173736574732f63656e747269667567655f6f735f70726f746f636f6c5f70617065722e7064662918636f6d6d6974100148616e63686f725f69645f707265696d61676524011c543a3a48617368000120646f635f726f6f7424011c543a3a4861736800011470726f6f6624011c543a3a4861736800014473746f7265645f756e74696c5f64617465200124543a3a4d6f6d656e740001206101436f6d6d69747320612060646f63756d656e745f726f6f7460206f662061206d65726b6c697a6564206f666620636861696e20646f63756d656e7420696e2043656e7472696675676520703270206e6574776f726b2061734501746865206c61746573742076657273696f6e2069642860616e63686f725f69646029206f627461696e65642062792068617368696e672060616e63686f725f69645f707265696d616765602e204966206115017072652d636f6d6d69742065786973747320666f7220746865206f627461696e65642060616e63686f725f6964602c2068617368206f66207072652d636f6d6d69747465645901607369676e696e675f726f6f74202b2070726f6f6660206d757374206d617463682074686520676976656e2060646f635f726f6f74602e20546f2061766f696420737461746520626c6f6174206f6e20636861696e2c590174686520636f6d6d697474656420616e63686f7220776f756c6420626520657669637465642061667465722074686520676976656e206073746f7265645f756e74696c5f64617465602e205468652063616c6c696e67f06163636f756e7420776f756c642062652063686172676564206163636f7264696e676c7920666f72207468652073746f7261676520706572696f642ed0466f722061206d6f72652064657461696c6564206578706c616e6174696f6e2072656665722073656374696f6e20332e34206f6689015b43656e747269667567652050726f746f636f6c2050617065725d2868747470733a2f2f737461746963772e63656e747269667567652e696f2f6173736574732f63656e747269667567655f6f735f70726f746f636f6c5f70617065722e706466294465766963745f7072655f636f6d6d69747304013065766963745f6275636b6574100138543a3a426c6f636b4e756d6265720002105901496e69746961746573206576696374696f6e206f66207072652d636f6d6d697473207468617420686173206578706972656420676976656e2074686174207468652063757272656e7420626c6f636b206e756d6265725d016861732070726f6772657373656420706173742074686520626c6f636b206e756d6265722070726f766964656420696e206065766963745f6275636b6574602e206065766963745f6275636b65746020697320616c736f290174686520696e64657820746f2066696e6420746865207072652d636f6d6d6974732073746f72656420696e2073746f7261676520746f2062652065766963746564207768656e20746865b06065766963745f6275636b657460206e756d626572206f6620626c6f636b732068617320657870697265642e3465766963745f616e63686f72730003106901496e69746961746573206576696374696f6e206f66206578706972656420616e63686f72732e2053696e636520616e63686f7273206172652073746f726564206f6e2061206368696c64207472696520696e646578656420627955017468656972206576696374696f6e20646174652c207768617420746869732066756e6374696f6e20646f657320697320746f2072656d6f76652074686f7365206368696c64207472696573207768696368206861735901646174655f726570726573656e7465645f62795f726f6f74203c2063757272656e745f646174652e204164646974696f6e616c6c79206974206e6565647320746f2074616b652063617265206f6620696e646578657305016372656174656420666f7220616363657373696e6720616e63686f72732c2065673a20746f2066696e6420616e20616e63686f7220676976656e20616e2069642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d050c3470616c6c65745f636c61696d731870616c6c65741043616c6c04045400010c14636c61696d0c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000134736f727465645f6861736865739d0201305665633c543a3a486173683e000014c8436c61696d7320746f6b656e732061776172646564207468726f7567682054696e6c616b6520696e766573746d656e74732e002823203c7765696768743e602d204261736564206f6e20686173686573206c656e6774682c23203c2f7765696768743e487365745f75706c6f61645f6163636f756e740401286163636f756e745f6964000130543a3a4163636f756e744964000118190141646d696e2066756e6374696f6e207468617420736574732074686520616c6c6f7765642075706c6f6164206163636f756e7420746f2061646420726f6f74206861736865738c436f6e74726f6c6c656420627920637573746f6d206f726967696e206f7220726f6f74002823203c7765696768743e902d204261736564206f6e206f726967696e20636865636b20616e64207772697465206f702c23203c2f7765696768743e3c73746f72655f726f6f745f68617368040124726f6f745f6861736824011c543a3a48617368000214e053746f72657320726f6f74206861736820666f7220636f72726573706f6e64656e7420636c61696d204d65726b6c6520747265652072756e002823203c7765696768743e902d204261736564206f6e206f726967696e20636865636b20616e64207772697465206f702c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e21050c5870616c6c65745f63726f77646c6f616e5f636c61696d1870616c6c65741043616c6c04045400011c30636c61696d5f72657761726414015472656c6179636861696e5f6163636f756e745f6964000158543a3a52656c6179436861696e4163636f756e74496400015070617261636861696e5f6163636f756e745f696400015c50617261636861696e4163636f756e7449644f663c543e0001386964656e746974795f70726f6f66250501384d756c74695369676e6174757265000148636f6e747269627574696f6e5f70726f6f663d05013850726f6f663c543a3a486173683e000130636f6e747269627574696f6e180128543a3a42616c616e636500000864436c61696d20666f72206120726577617264207061796f75740028696e697469616c697a65140134636f6e747269627574696f6e73240134526f6f74486173684f663c543e0001246c6f636b65645f6174100138543a3a426c6f636b4e756d626572000114696e64657810012454726965496e64657800012c6c656173655f7374617274100138543a3a426c6f636b4e756d6265720001306c656173655f706572696f64100138543a3a426c6f636b4e756d62657200012c6c496e697469616c697a652074686520636c61696d2070616c6c6574002501546869732061646d696e6973747261746976652066756e6374696f6e206973207573656420746f207472616e7366657220746865206c697374206f6620636f6e7472696275746f72731d01616e64207468656972207265737065637469766520636f6e747269627574696f6e732c2073746f7265642061732061206368696c64207472696520726f6f74206861736820696ed9017468652072656c617920636861696e2773205b6063726f77646c6f616e605d2868747470733a2f2f6769746875622e636f6d2f706172697479746563682f706f6c6b61646f742f626c6f622f726f636f636f2d76312f72756e74696d652f636f6d6d6f6e2f7372632f63726f77646c6f616e2e727329a870616c6c65742c20746f205b60436f6e747269627574696f6e73605d2073746f72616765206974656d2ef854686973207472616e73616374696f6e2063616e206f6e6c792062652063616c6c6564207669612061207369676e6564207472616e73616374696f6e732e4501546865205b60636f6e747269627574696f6e73605d20706172616d6574657220636f6e7461696e73207468652068617368206f66207468652063726f77646c6f616e2070616c6c65742773206368696c6449017472696520726f6f742e204974206973206c61746572207573656420666f722070726f76696e672074686174206120636f6e7472696275746f72206566666563746976656c7920636f6e74726962757465644101746f207468652063726f77646c6f616e2063616d706169676e2c20616e6420746861742074686520616d6f756e74206f662074686520636f6e747269627574696f6e20697320636f72726563742061731477656c6c2e3c7365745f6c656173655f73746172740401147374617274100138543a3a426c6f636b4e756d6265720002048853657420746865207374617274206f6620746865206c6561736520706572696f642e407365745f6c656173655f706572696f64040118706572696f64100138543a3a426c6f636b4e756d6265720003045453657420746865206c6561736520706572696f642e587365745f636f6e747269627574696f6e735f726f6f74040110726f6f74240134526f6f74486173684f663c543e00041045015365742074686520726f6f742d68617368206f66207468652072656c61792d636861696e2c207765206c6f636b6564207468652072656c61792d636861696e20636f6e747269627574696f6e732061742e0011015468697320726f6f742d68617368204d5553542062652074686520726f6f742d68617368206f66207468652072656c61792d636861696e2061742074686520626c6f636b2d017765206c6f636b65642061742e205468697320726f6f742d686173682077696c6c206265207573656420746f207665726966792070726f6f6673206f6620636f6e747269627574696f6e2e347365745f6c6f636b65645f61740401246c6f636b65645f6174100138543a3a426c6f636b4e756d626572000518f85365742074686520626c6f636b206f66207468652072656c6179206174207768696368207765206c6f636b2074686520636f6e747269627574696f6e732e00190154686973206d65616e732c207468617420616c6c2067656e6572617465642070726f6f6673204d5553542067656e6572617465207468652070726f6f66206f662074686569721101636f6e747269627574696f6e206174207468697320626c6f636b2c206173206f74686572776973652074686520726f6f742d686173682077652073746f726520686572651d0177696c6c206e6f7420626520666f756e6420696e207468652067656e6572617465642070726f6f66206f662074686520636f6e7472696275746f722c2077686963682077696c6c846c65616420746f20612072656a656374696f6e206f66207468652070726f6f662e607365745f63726f77646c6f616e5f747269655f696e646578040128747269655f696e64657810012454726965496e6465780006147c5365742074686520696e646578206f66207468652063726f77646c6f616e2e0055015468697320696e64657820636f6d65732066726f6d207468652072656c61792d636861696e2063726f77646c6f616e2070616c6c65742e204d6f7265207370656369666963616c6c792c207468697320696e6465783d016973207573656420746f206465726976652074686520696e7465726e616c207061747269636961206b657920696e7369646520746865206368696c6420747269652e2054686520696e646578206973f473746f72656420696e20746865206046756e64496e666f60206f66207468652072656c617920636861696e2063726f77646c6f616e2070616c6c65742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2505082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040029050148656432353531393a3a5369676e61747572650000001c53723235353139040031050148737232353531393a3a5369676e617475726500010014456364736104003505014065636473613a3a5369676e61747572650002000029050c1c73705f636f72651c65643235353139245369676e6174757265000004002d0501205b75383b2036345d00002d0500000340000000080031050c1c73705f636f72651c73723235353139245369676e6174757265000004002d0501205b75383b2036345d000035050c1c73705f636f7265146563647361245369676e617475726500000400390501205b75383b2036355d000039050000034100000008003d05081870726f6f66731450726f6f660410486173680124000801246c6561665f6861736824011048617368000134736f727465645f6861736865739d0201245665633c486173683e000041050c5c70616c6c65745f63726f77646c6f616e5f7265776172641870616c6c65741043616c6c04045400011028696e697469616c697a650c014c6469726563745f7061796f75745f726174696f1101011c50657262696c6c00013876657374696e675f706572696f64100138543a3a426c6f636b4e756d62657200013476657374696e675f7374617274100138543a3a426c6f636b4e756d626572000004f041206f6e2063616c6c20696e69742e204261736963616c6c79206120636f6d706f736974696f6e206f662074686520736574746572732062656c6f77447365745f76657374696e675f73746172740401147374617274100138543a3a426c6f636b4e756d6265720001049053657420746865207374617274206f66207468652076657374696e6720706572696f642e487365745f76657374696e675f706572696f64040118706572696f64100138543a3a426c6f636b4e756d6265720002204c5365742076657374696e6720706572696f642e000d01546869732061646d696e697374726174697665207472616e73616374696f6e20616c6c6f777320746f206d6f64696679207468652076657374696e6720706572696f640901616674657220612070726576696f7573205b60696e697469616c697a65605d207472616e73616374696f6e207761732074726967676572656420696e206f72646572a0746f20706572666f726d2073656d696e616c2070616c6c657420636f6e66696775726174696f6e2e0020232320456d6974734c55706461746556657374696e67506572696f645c7365745f6469726563745f7061796f75745f726174696f040114726174696f1101011c50657262696c6c000314e44d6f646966792074686520726174696f206265747765656e2076657374656420616e6420646972656374207061796f757420616d6f756e742e00dc546869732061646d696e6973747261746976652066756e6374696f6e20616c6c6f777320746f206d6f646966792074686520726174696fe06265747765656e2076657374656420616e6420646972656374207061796f757420616d6f756e74206166746572207468652070616c6c6574f477617320696e697469616c697a65642076696120612063616c6c20746f20746865205b60696e697469616c697a65605d207472616e73616374696f6e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e45050c3070616c6c65745f706f6f6c731870616c6c65741043616c6c0404540001301863726561746514011461646d696e000130543a3a4163636f756e74496400011c706f6f6c5f6964200124543a3a506f6f6c49640001207472616e63686573490501885665633c5472616e636865496e7075743c543a3a496e746572657374526174653e3e00012063757272656e637979010134543a3a43757272656e6379496400012c6d61785f72657365727665180128543a3a42616c616e6365000040444372656174652061206e657720706f6f6c00cc496e697469616c6973652061206e657720706f6f6c20776974682074686520676976656e20494420616e64207472616e636865e0636f6e66696775726174696f6e2e205472616e63686520302069732074686520657175697479207472616e6368652c20616e64206d757374a868617665207a65726f20696e74657265737420616e642061207a65726f207269736b206275666665722e00d4546865206d696e696d756d2065706f6368206c656e6774682c20616e64206d6178696d756d204e4156206167652077696c6c206265bc73657420746f20636861696e2d776964652064656661756c74732e20546865792063616e2062652075706461746564607769746820612063616c6c20746f2060757064617465602e00c45468652063616c6c65722077696c6c20626520676976656e207468652060506f6f6c41646d696e6020726f6c6520666f72c8746865206372656174656420706f6f6c2e204164646974696f6e616c2061646d696e6973747261746f72732063616e206265886164646564207769746820746865205065726d697373696f6e732070616c6c65742e00dc52657475726e7320616e206572726f72206966207468652072657175657374656420706f6f6c20494420697320616c726561647920696ed07573652c206f7220696620746865207472616e63686520636f6e66696775726174696f6e2063616e6e6f7420626520757365642e1875706461746508011c706f6f6c5f6964200124543a3a506f6f6c496400011c6368616e67657355050170506f6f6c4368616e6765733c543a3a496e746572657374526174653e0001309c557064617465207065722d706f6f6c20636f6e66696775726174696f6e2073657474696e67732e009854686973207570646174657320746865207472616e63686573206f662074686520706f6f6c2ccc7365747320746865206d696e696d756d2065706f6368206c656e6774682c20616e64206d6178696d756d204e4156206167652e00cc4966206e6f2064656c617920697320726571756972656420666f72207570646174657320616e6420726564656d7074696f6e73c4646f6e2774206861766520746f2062652066756c66696c6c65642c207468656e2074686973206973206578656375746564bc696d6d6564696174656c792e204f74686572776973652c2074686520757064617465206973207363686564756c656454746f206265206578656375746564206c617465722e00d45468652063616c6c6572206d7573742068617665207468652060506f6f6c41646d696e6020726f6c6520696e206f7264657220746f58696e766f6b6520746869732065787472696e7369632e60657865637574655f7363686564756c65645f75706461746504011c706f6f6c5f6964200124543a3a506f6f6c4964000218a045786563757465642061207363686564756c65642075706461746520746f2074686520706f6f6c2e00c05468697320636865636b7320696620746865207363686564756c65642074696d6520697320696e207468652070617374b4616e642c2069662072657175697265642c20696620746865726520617265206e6f206f75747374616e64696e67c072656465656d206f72646572732e20496620626f7468206170706c792c207468656e20746865207363686564756c6564506368616e67657320617265206170706c6965642e307365745f6d6574616461746108011c706f6f6c5f6964200124543a3a506f6f6c49640001206d6574616461746128011c5665633c75383e000310d453657473207468652049504653206861736820666f722074686520706f6f6c206d6574616461746120696e666f726d6174696f6e2e00d45468652063616c6c6572206d7573742068617665207468652060506f6f6c41646d696e6020726f6c6520696e206f7264657220746f58696e766f6b6520746869732065787472696e7369632e3c7365745f6d61785f7265736572766508011c706f6f6c5f6964200124543a3a506f6f6c496400012c6d61785f72657365727665180128543a3a42616c616e636500041c8c5365747320746865206d6178696d756d207265736572766520666f72206120706f6f6c00c45468652063616c6c6572206d75737420686176652074686520604c697175696469747941646d696e6020726f6c6520696ec06f7264657220746f20696e766f6b6520746869732065787472696e7369632e205468697320726f6c65206973206e6f74c4676976656e20746f2074686520706f6f6c2063726561746f722062792064656661756c742c20616e64206d757374206265b46164646564207769746820746865205065726d697373696f6e732070616c6c6574206265666f726520746869736065787472696e7369632063616e2062652063616c6c65642e4c7570646174655f696e766573745f6f726465720c011c706f6f6c5f6964200124543a3a506f6f6c496400012c7472616e6368655f6c6f63610501605472616e6368654c6f633c543a3a5472616e63686549643e0001246e65775f6f72646572180128543a3a42616c616e636500053cd055706461746520616e206f7264657220746f20696e7665737420746f6b656e7320696e206120676976656e207472616e6368652e00d85468652063616c6c6572206d757374206861766520746865205472616e636865496e766573746f7220726f6c6520666f722074686973b47472616e6368652c20616e64207468617420726f6c65206d757374206e6f74206861766520657870697265642e00b44966207468652063616c6c65722068617320616e20696e766573746d656e74206f7264657220666f7220746865d0737065636966696564207472616e63686520696e2061207072696f722065706f63682c206974206d75737420666972737420626528636f6c6c65637465642e00cc4966207468652072657175657374656420616d6f756e742069732067726561746572207468616e207468652063757272656e74d8696e766573746d656e74206f726465722c207468652062616c616e63652077696c6c206265207472616e736665727265642066726f6dc47468652063616c6c696e67206163636f756e7420746f2074686520706f6f6c2e2049662074686520726571756573746564c8616d6f756e74206973206c657373207468616e207468652063757272656e74206f726465722c207468652062616c616e6365bc77696c6c6265207472616e736665727265642066726f6d2074686520706f6f6c20746f207468652063616c6c696e67206163636f756e742e4c7570646174655f72656465656d5f6f726465720c011c706f6f6c5f6964200124543a3a506f6f6c496400012c7472616e6368655f6c6f63610501605472616e6368654c6f633c543a3a5472616e63686549643e0001246e65775f6f72646572180128543a3a42616c616e636500063cd055706461746520616e206f7264657220746f2072656465656d20746f6b656e7320696e206120676976656e207472616e6368652e00d85468652063616c6c6572206d757374206861766520746865205472616e636865496e766573746f7220726f6c6520666f722074686973b47472616e6368652c20616e64207468617420726f6c65206d757374206e6f74206861766520657870697265642e00b04966207468652063616c6c657220686173206120726564656d7074696f6e206f7264657220666f7220746865c4737065636966696564207472616e63686520696e2061207072696f722065706f63682c206974206d75737420666972737434626520636f6c6c65637465642e00cc4966207468652072657175657374656420616d6f756e742069732067726561746572207468616e207468652063757272656e74d8696e766573746d656e74206f726465722c207468652062616c616e63652077696c6c206265207472616e736665727265642066726f6dc47468652063616c6c696e67206163636f756e7420746f2074686520706f6f6c2e2049662074686520726571756573746564c8616d6f756e74206973206c657373207468616e207468652063757272656e74206f726465722c207468652062616c616e6365bc77696c6c6265207472616e736665727265642066726f6d2074686520706f6f6c20746f207468652063616c6c696e67206163636f756e742e1c636f6c6c6563740c011c706f6f6c5f6964200124543a3a506f6f6c496400012c7472616e6368655f6c6f63610501605472616e6368654c6f633c543a3a5472616e63686549643e000140636f6c6c6563745f6e5f65706f636873100128543a3a45706f63684964000718e8436f6c6c6563742074686520726573756c7473206f6620616e20657865637574656420696e76657374206f722072656465656d206f726465722e00d44974657261746573207468726f75676820757020746f2060636f6c6c6563745f6e5f65706f636873602065706f6368732066726f6dd07768656e207468652063616c6c65722773206f726465722077617320696e697469617465642c20616e64207472616e7366657273bc74686520746f74616c20726573756c7473206f6620746865206f7264657220657865637574696f6e20746f207468654463616c6c65722773206163636f756e742e2c636f6c6c6563745f666f7210010c77686f000130543a3a4163636f756e74496400011c706f6f6c5f6964200124543a3a506f6f6c496400012c7472616e6368655f6c6f63610501605472616e6368654c6f633c543a3a5472616e63686549643e000140636f6c6c6563745f6e5f65706f636873100128543a3a45706f6368496400081cb0436f6c6c6563742074686520726573756c7473206f6620616e20657865637574656420696e76657374206f728472656465656d206f7264657220666f7220616e6f74686572206163636f756e742e00d44974657261746573207468726f75676820757020746f2060636f6c6c6563745f6e5f65706f636873602065706f6368732066726f6dd07768656e207468652063616c6c65722773206f726465722077617320696e697469617465642c20616e64207472616e7366657273bc74686520746f74616c20726573756c7473206f6620746865206f7264657220657865637574696f6e20746f207468654463616c6c65722773206163636f756e742e2c636c6f73655f65706f636804011c706f6f6c5f6964200124543a3a506f6f6c49640009485c436c6f7365207468652063757272656e742065706f636800bc436c6f73696e6720616e2065706f6368206c6f636b7320696e20616c6c20696e7665737420616e642072656465656db86f726465727320706c6163656420647572696e67207468652065706f63682c20616e642063617573657320616c6cc86675727468657220696e7665737420616e642072656465656d206f726465727320746f2062652073657420666f72207468652c6e6578742065706f63682e00cc496620616c6c206f72646572732063616e20626520657865637574656420776974686f75742076696f6c6174696e6720616e79d0706f6f6c20636f6e73747261696e7473202d20776869636820696e636c756465206d6178696d756d207265736572766520616e64d4746865207472616e636865207269736b2062756666657273202d2074686520657865637574696f6e2077696c6c20616c736f206265b8646f6e652e205365652060657865637574655f65706f63686020666f722064657461696c73206f6e2065706f636828657865637574696f6e2e00d8496620706f6f6c20636f6e73747261696e747320776f756c642062652076696f6c6174656420627920657865637574696e6720616c6cd46f72646572732c2074686520706f6f6c20656e746572732061207375626d697373696f6e20706572696f642e20447572696e672061d87375626d697373696f6e20706572696f642c207061727469616c20657865637574696f6e732063616e206265207375626d6974746564c0746f2062652073636f7265642c20616e642074686520626573742d73636f72696e6720736f6c7574696f6e2077696c6cb86576656e7475616c6c792062652065786563757465642e2053656520607375626d69745f736f6c7574696f6e602e3c7375626d69745f736f6c7574696f6e08011c706f6f6c5f6964200124543a3a506f6f6c4964000120736f6c7574696f6e210101505665633c5472616e636865536f6c7574696f6e3e000a28d85375626d69742061207061727469616c20657865637574696f6e20736f6c7574696f6e20666f72206120636c6f7365642065706f636800b8496620746865207375626d697474656420736f6c7574696f6e206973202262657474657222207468616e20746865d470726576696f7573206265737420736f6c7574696f6e2c2069742077696c6c207265706c6163652069742e20536f6c7574696f6e73d0617265206f7264657265642073756368207468617420736f6c7574696f6e7320776869636820646f206e6f742076696f6c617465a8636f6e73747261696e74732061726520626574746572207468616e2074686f7365207468617420646f2e00b44f6e636520612076616c696420736f6c7574696f6e20686173206265656e207375626d69747465642c20746865d06368616c6c656e67652074696d6520626567696e732e2054686520706f6f6c2063616e206265206578656375746564206f6e63657c746865206368616c6c656e67652074696d652068617320657870697265642e34657865637574655f65706f636804011c706f6f6c5f6964200124543a3a506f6f6c4964000b20d04578656375746520616e2065706f636820666f7220776869636820612076616c696420736f6c7574696f6e20686173206265656e287375626d69747465642e00d02a204d696e7473206f72206275726e73207472616e63686520746f6b656e73206261736564206f6e20696e766573746d656e7473442020616e6420726564656d7074696f6e73d42a20557064617465732074686520706f7274696f6e206f6620746865207265736572766520616e64206c6f616e2062616c616e6365d0202061737369676e656420746f2065616368207472616e6368652c206261736564206f6e2074686520696e766573746d656e7473902020616e6420726564656d7074696f6e7320746f2074686f7365207472616e636865732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e49050000024d05004d050000040851056d010051050c3070616c6c65745f706f6f6c731c7472616e6368652c5472616e63686554797065041052617465015501010820526573696475616c0000002c4e6f6e526573696475616c080154696e7465726573745f726174655f7065725f736563550101105261746500013c6d696e5f7269736b5f6275666665722901012c5065727175696e74696c6c000100005505083070616c6c65745f706f6f6c732c506f6f6c4368616e676573041052617465015501000c01207472616e636865735905017c4368616e67653c5665633c5472616e636865496e7075743c526174653e3e3e0001386d696e5f65706f63685f74696d655d0501384368616e67653c4d6f6d656e743e00012c6d61785f6e61765f6167655d0501384368616e67653c4d6f6d656e743e00005905082c6f726d6c5f747261697473184368616e6765041456616c75650149050108204e6f4368616e6765000000204e657756616c756504004905011456616c7565000100005d05082c6f726d6c5f747261697473184368616e6765041456616c756501200108204e6f4368616e6765000000204e657756616c7565040020011456616c75650001000061050c3070616c6c65745f706f6f6c731c7472616e636865285472616e6368654c6f6304245472616e6368654964014501010814496e64657804002001305472616e636865496e6465780000000849640400450101245472616e63686549640001000065050c3070616c6c65745f6c6f616e731870616c6c65741043616c6c0404540001283c696e697469616c6973655f706f6f6c08011c706f6f6c5f696420012c506f6f6c49644f663c543e0001446c6f616e5f6e66745f636c6173735f6964200128543a3a436c617373496400001858496e697469616c697365732061206e657720706f6f6c00710160696e697469616c6973655f706f6f6c6020636865636b7320696620706f6f6c206973206e6f7420696e697469616c697365642079657420616e64207468656e206164647320746865206c6f616e206e667420636c6173732069642ed101416c6c20746865204c6f616e204e4654732077696c6c206265206372656174656420696e746f207468697320436c6173732e20536f206c6f616e206163636f756e74202a73686f756c642a2062652061626c6520746f206d696e74206e6577204e46547320696e746f2074686520636c6173732e3501416464696e67204c6f616e4163636f756e742061732061646d696e20746f20746865204e465420636c6173732077696c6c20626520656e6f75676820746f206d696e74206e6577204e4654732e88546865206f726967696e206d75737420626520616e2041646d696e206f726967696e1863726561746508011c706f6f6c5f696420012c506f6f6c49644f663c543e000128636f6c6c61746572616c5101012841737365744f663c543e00011cc44372656174652061206e6577206c6f616e20616761696e73742074686520636f6c6c61746572616c2070726f766964656400a101606372656174655f6c6f616e60207472616e73666572732074686520636f6c6c61746572616c206e66742066726f6d20746865206f776e657220746f2073656c6620616e64206973737565732061206e6577206c6f616e206e667420746f20746865206f776e6572b463616c6c6572202a6d7573742a20626520746865206f776e6572206f662074686520636f6c6c61746572616c2e69014c6f616e5374617475732069732073657420746f206372656174656420616e64206e6565647320746f2062652070726963656420627920616e2061646d696e206f726967696e20746f20737461727420626f72726f77696e672ef44c6f616e2063616e6e6f7420626520636c6f73656420756e74696c207468652073746174757320686173206368616e67656420746f205072696365642e7901436f6c6c61746572616c204e465420636c6173732063616e6e6f7420626520616e6f74686572204c6f616e204e465420636c6173732e204d65616e732c20796f752063616e6e6f7420636f6c6c61746572616c6973652061204c6f616e2e14636c6f736508011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e49640002204c436c6f736573206120676976656e206c6f616e008c4c6f616e2063616e20626520636c6f736564206f6e2074776f207363656e6172696f73a4312e205768656e20746865206f75747374616e64696e672069732066756c6c792070616964206f666680322e205768656e206c6f616e206973207772697474656e206f66662031303025784c6f616e20737461747573206973206d6f76656420746f20436c6f736564d4436f6c6c61746572616c204e4654206973207472616e73666572726564206261636b20746f20746865206c6f616e206f776e65722eb04c6f616e204e4654206973207472616e73666572726564206261636b20746f204c6f616e4163636f756e742e18626f72726f770c011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e6365000328a85472616e736665727320626f72726f7720616d6f756e7420746f20746865206c6f616e206f776e65722e00684c6f616e537461747573206d757374206265206163746976652e0d01426f72726f7720616d6f756e742073686f756c64206e6f7420657863656564206d61785f626f72726f775f616d6f756e742073657420666f7220746865206c6f616e2ea1014c6f616e2073686f756c64207374696c6c206265206865616c7468792e204966206c6f616e207479706520737570706f727473206d617475726974792c207468656e206d6174757269747920646174652073686f756c64206e6f742068617665207061737365642e7c4c6f616e2073686f756c64206e6f74206265207772697474656e206f66662ecc5261746520616363756d756c6174696f6e2077696c6c2073746172742061667465722074686520666972737420626f72726f77984c6f616e2069732061636372756564207570746f207468652063757272656e742074696d652ef4506f6f6c204e4156206973207570646174656420746f207265666c656374206e65772070726573656e742076616c7565206f6620746865206c6f616e2e4501416d6f756e74206f6620746f6b656e73206f6620616e2041737365742077696c6c206265207472616e736665727265642066726f6d20706f6f6c207265736572766520746f206c6f616e206f776e65722e1472657061790c011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e6365000418b85472616e736665727320616d6f756e7420626f72726f77656420746f2074686520706f6f6c20726573657276652e00684c6f616e537461747573206d757374206265204163746976652ee84c6f616e2069732061636372756564206265666f7265207472616e7366657272696e672074686520616d6f756e7420746f20726573657276652e4d01496620746865207265706179696e6720616d6f756e74206973206d6f7265207468616e2063757272656e7420646562742c206f6e6c792063757272656e742064656274206973207472616e736665727265642efc416d6f756e74206f6620746f6b656e2077696c6c206265207472616e736665727265642066726f6d206f776e657220746f20506f6f6c20726573657276652e14707269636510011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e4964000154696e7465726573745f726174655f7065725f7365635501011c543a3a526174650001246c6f616e5f74797065590101744c6f616e547970653c543a3a526174652c20543a3a42616c616e63653e00051021015365742070726963696e6720666f7220746865206c6f616e2077697468206c6f616e2073706563696669632064657461696c73206c696b6520526174652c204c6f616e207479706500904c6f616e537461747573206d75737420626520696e20437265617465642073746174652e55014f6e6365206163746976617465642c206c6f616e206f776e65722063616e207374617274206c6f616e2072656c617465642066756e6374696f6e73206c696b6520426f72726f772c2052657061792c20436c6f7365287570646174655f6e617604011c706f6f6c5f696420012c506f6f6c49644f663c543e000624805570646174657320746865204e415620666f72206120676976656e20706f6f6c00390149746572617465207468726f7567682065616368206c6f616e20616e642063616c63756c617465207468652070726573656e742076616c7565206f66206561636820616374697665206c6f616e2e80546865206c6f616e206973206163637275656420616e6420757064617465642e00510157656967687420666f722074686520757064617465206e6176206973206e6f74207374726169676874666f72776172642073696e636520746865726520636f756c64206e206c6f616e7320696e206120706f6f6c9901536f20696e73746561642c2077652063616c63756c6174652077656967687420666f72206f6e65206c6f616e2e20576520617373756d652061206d6178696d756d206f6620323030206c6f616e7320616e64206465706f736974207468617420776569676874b9014f6e636520746865204e41562063616c63756c6174696f6e20697320646f6e652c20776520636865636b20686f77206d616e79206c6f616e732077652068617665207570646174656420616e642072657475726e207468652061637475616c2077656967687420736f2074686174ac7472616e73616374696f6e207061796d656e742063616e2072657475726e20746865206465706f7369742e4c6164645f77726974655f6f66665f67726f757008011c706f6f6c5f696420012c506f6f6c49644f663c543e00011467726f75706905015857726974654f666647726f75703c543a3a526174653e000714a4417070656e64732061206e6577207772697465206f66662067726f757020746f2074686520506f6f6c00d453696e6365207772697474656e206f6666206c6f616e73206b656570207772697474656e206f66662067726f757020696e6465782ca87765206f6e6c7920616c6c6f7720616464696e67206e6577207772697465206f66662067726f7570732ed04f766572647565206461797320646f65736e2774206e65656420746f20626520696e2074686520736f72746564206f726465722e2477726974655f6f666608011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e49640008286c5772697465206f666620616e20756e6865616c746879206c6f616e009d016077726974655f6f66665f6c6f616e602077696c6c2066696e64207468652062657374207772697465206f66662067726f757020617661696c61626c65206261736564206f6e20746865206f76657264756520646179732073696e6365206d617475726974792e69014c6f616e20697320616363727565642c204e415620697320757064617465206163636f7264696e676c792c20616e64207570646174657320746865204c6f616e2077697468206e6577207772697465206f666620696e6465782ecc43616e6e6f74207570646174652061206c6f616e207468617420776173207772697474656e206f66662062792061646d696e2e310143616e6e6f74207772697465206f66662061206865616c746879206c6f616e206f72206c6f616e2074797065207468617420646f206e6f742068617665206d6174757269747920646174652e000089015765696768742069732063616c63756c6174656420666f72206f6e652067726f75702e2053696e6365207468657265206973206e6f2065787472612072656164206f722077726974657320666f722067726f757073206d6f7265207468616e20312c01025765206e65656420746f20656e7375726520776520617265206368617267696e672074686520726561647320616e64207772697465206f6e6c79206f6e636520627574207468652061637475616c20636f6d7075746520746f20626520657175616c20746f206e756d626572206f662067726f7570732070726f6365737365643c61646d696e5f77726974655f6f666610011c706f6f6c5f696420012c506f6f6c49644f663c543e00011c6c6f616e5f6964e80124543a3a4c6f616e496400012870657263656e746167655501011c543a3a5261746500017470656e616c74795f696e7465726573745f726174655f7065725f7365635501011c543a3a5261746500091c8c5772697465206f666620616e206c6f616e2066726f6d2061646d696e206f726967696e007d016061646d696e5f77726974655f6f66665f6c6f616e602077696c6c207772697465206f66662061206c6f616e2077697468207772697465206f66662067726f7570206173736f636961746564207769746820696e646578207061737365642e69014c6f616e20697320616363727565642c204e415620697320757064617465206163636f7264696e676c792c20616e64207570646174657320746865204c6f616e2077697468206e6577207772697465206f666620696e6465782ec441646d696e4f726967696e2063616e207772697465206f66662061206865616c746879206c6f616e2061732077656c6c2e55014f6e63652061646d696e20777269746573206f66662061206c6f616e2c207065726d697373696f6e206c657373206077726974655f6f66665f6c6f616e6020776f6e7420626520616c6c6f7765642061667465722e3d0141646d696e2063616e207772697465206f6666206c6f616e207769746820616e7920696e64657820706f74656e7469616c6c7920676f696e672075702074686520696e646578206f7220646f776e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e69050c3070616c6c65745f6c6f616e731474797065733457726974654f666647726f7570041052617465015501000c012870657263656e7461676555010110526174650001306f7665726475655f6461797320010c75363400017470656e616c74795f696e7465726573745f726174655f7065725f736563550101105261746500006d050c4870616c6c65745f7065726d697373696f6e731870616c6c65741043616c6c0404540001100c616464100124776974685f726f6c657d01011c543a3a526f6c65000108746f000130543a3a4163636f756e74496400011473636f706575010120543a3a53636f7065000110726f6c657d01011c543a3a526f6c650000001872656d6f7665100124776974685f726f6c657d01011c543a3a526f6c6500011066726f6d000130543a3a4163636f756e74496400011473636f706575010120543a3a53636f7065000110726f6c657d01011c543a3a526f6c6500010014707572676504011473636f706575010120543a3a53636f70650002002c61646d696e5f707572676508011066726f6d000130543a3a4163636f756e74496400011473636f706575010120543a3a53636f7065000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e71050c6470616c6c65745f636f6c6c61746f725f616c6c6f776c6973741870616c6c65741043616c6c0404540001080c61646404012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000014b44164642074686520676976656e2060636f6c6c61746f725f69646020746f2074686520616c6c6f776c6973742e204661696c73206966a820202d20606f726967696e60206661696c73207468652060656e737572655f726f6f746020636865636b150120202d2060636f6c6c61746f725f69646020646964206e6f7420796574206c6f6164207468656972206b65797320696e746f207468652073657373696f6e2070616c6c6574c820202d2060636f6c6c61746f725f69646020697320616c72656164792070617274206f662074686520616c6c6f776c6973741872656d6f766504012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000110a852656d6f766520612060636f6c6c61746f725f6964602066726f6d2074686520616c6c6f776c6973742e204661696c73206966a820202d20606f726967696e60206661696c73207468652060656e737572655f726f6f746020636865636bb820202d2060636f6c6c61746f725f696460206973206e6f742070617274206f662074686520616c6c6f776c697374042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e75050c6070616c6c65745f726573747269637465645f746f6b656e731870616c6c65741043616c6c040454000114207472616e736665720c0110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696479010134543a3a43757272656e63794964000118616d6f756e74e9010128543a3a42616c616e63650000004c7472616e736665725f6b6565705f616c6976650c0110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696479010134543a3a43757272656e63794964000118616d6f756e74e9010128543a3a42616c616e6365000100307472616e736665725f616c6c0c0110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696479010134543a3a43757272656e637949640001286b6565705f616c697665b80110626f6f6c00020038666f7263655f7472616e73666572100118736f757263658103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646573748103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696479010134543a3a43757272656e63794964000118616d6f756e74e9010128543a3a42616c616e63650003002c7365745f62616c616e636510010c77686f8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696479010134543a3a43757272656e637949640001206e65775f66726565e9010128543a3a42616c616e63650001306e65775f7265736572766564e9010128543a3a42616c616e6365000400042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e79050c4070616c6c65745f6e66745f73616c65731870616c6c65741043616c6c04045400010c0c6164640c0120636c6173735f696420013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964e80124543a3a4974656d496400011470726963659901018850726963653c43757272656e63794f663c543e2c2042616c616e63654f663c543e3e00001c2841646420616e204e465400204661696c73206966b420202d20746865204e4654206973206e6f7420666f756e6420696e205b543a3a4e6f6e46756e6769626c65735da020202d20606f726967696e60206973206e6f7420746865206f776e6572206f6620746865206e66747c20202d20746865206e667420697320616c726561647920666f722073616c65110120202d207472616e7366657272696e67206f776e657273686970206f6620746865204e465420746f20746869732070616c6c65742773206163636f756e74206661696c731872656d6f7665080120636c6173735f696420013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964e80124543a3a4974656d49640001243452656d6f766520616e204e46540021015468652073656c6c6572206f6620616e204e4654207468617420697320666f722073616c652063616e2063616c6c20746869732065787472696e73696320746f207265636c61696dc46f776e657273686970206f766572207468656972204e465420616e642072656d6f76652069742066726f6d2073616c652e00204661696c732069666c20202d20746865206e6674206973206e6f7420666f722073616c65a420202d20606f726967696e60206973206e6f74207468652073656c6c6572206f6620746865204e4654090120202d207472616e7366657272696e6720746865206f776e657273686970206f6620746865204e4654206261636b20746f207468652073656c6c6572206661696c730c6275790c0120636c6173735f696420013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964e80124543a3a4974656d49640001246d61785f6f666665729901018850726963653c43757272656e63794f663c543e2c2042616c616e63654f663c543e3e000238444275792074686520676976656e206e6674005901427579657273206d7573742070726f706f7365206120606d61785f6f666665726020746f2073617665207468656d2066726f6d2061207363656e6172696f207768657265207468657920636f756c6420656e642075705901706179696e67206d6f7265207468616e2074686579206465736972656420666f7220616e204e46542e2054686174207363656e6172696f20636f756c642074616b6520706c616365206966207468652073656c6c65725101696e63726561736564207468652061736b696e67207072696365207269676874206265666f726520746865206275796572207375626d69747320746869732063616c6c20746f206275792073616964204e46542e00610142757965727320616c776179732070617920746865206c61746573742061736b696e67207072696365206173206c6f6e6720617320697420646f6573206e6f7420657863656564207468656972206d6178206f666665722e00204661696c732069666c20202d20746865204e4654206973206e6f7420666f722073616c659420202d20606f726967696e60206973207468652073656c6c6572206f6620746865204e4654490120202d20606f726967696e6020646f6573206e6f74206861766520656e6f7567682062616c616e6365206f66207468652063757272656e637920746865206e6674206973206265696e6720736f6c6420696e110120202d207472616e7366657272696e67207468652061736b696e672070726963652066726f6d2074686520627579657220746f207468652073656c6c6572206661696c73ac20202d207472616e7366657272696e6720746865206e667420746f20746865206275796572206661696c73042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d050c2870616c6c65745f6e66741870616c6c65741043616c6c0404540001043476616c69646174655f6d696e74140124616e63686f725f696424013c53797374656d486173684f663c543e00013c6465706f7369745f61646472657373e50101384465706f7369744164647265737300011870726f6f6673810501985665633c50726f6f663c486173686572486173684f663c42756e646c654861736865723e3e3e0001347374617469635f70726f6f6673850501a4466978656441727261793c486173686572486173684f663c42756e646c654861736865723e2c20333e00011c646573745f69640801583c5420617320436f6e6669673e3a3a436861696e4964000020590156616c696461746573207468652070726f6f66732070726f766964656420616761696e73742074686520646f63756d656e7420726f6f74206173736f63696174656420776974682074686520616e63686f725f69642e69014f6e6365207468652070726f6f6673206172652076657269666965642c2077652063726561746520612062756e646c6564206861736820286465706f7369745f61646472657373202b205b70726f6f665b695d2e686173685d29250142756e646c65642048617368206973206465706f736974656420746f20616e204465706f7369744173736574206576656e7420666f72206272696467696e6720707572706f7365732e000d0141646473206164646974696f6e616c2066656520746f20636f6d70656e73617465207468652063757272656e7420636f7374206f662074617267657420636861696e732823203c7765696768743e682d20646570656e6473206f6e2074686520617267756d656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e81050000023d0500850500000303000000240089050c3470616c6c65745f6272696467651870616c6c65741043616c6c0404540001143c7472616e736665725f6e61746976650c0118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e7428011c5665633c75383e00011c646573745f696408011c436861696e496400000485015472616e736665727320736f6d6520616d6f756e74206f6620746865206e617469766520746f6b656e20746f20736f6d6520726563697069656e74206f6e2061202877686974656c6973746564292064657374696e6174696f6e20636861696e2e207472616e736665720c0108746f000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000110725f6964040134543a3a5265736f7572636549640001043d01457865637574657320612073696d706c652063757272656e6379207472616e73666572207573696e672074686520636861696e627269646765206163636f756e742061732074686520736f757263651872656d61726b0801106861736824011c543a3a48617368000110725f6964040134543a3a5265736f7572636549640002045d01546869732063616e2062652063616c6c65642062792074686520636861696e62726964676520746f2064656d6f6e73747261746520616e206172626974726172792063616c6c2066726f6d20612070726f706f73616c2e747365745f6e61746976655f746f6b656e5f7472616e736665725f66656504011c6e65775f66656518013042616c616e63654f663c543e000304984d6f64696679206e617469766520746f6b656e207472616e73666572206665652076616c7565687365745f6e66745f746f6b656e5f7472616e736665725f66656504011c6e65775f66656518013042616c616e63654f663c543e0004048c4d6f64696679204e465420746f6b656e207472616e73666572206665652076616c7565042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d050c3c70616c6c65745f6b657973746f72651870616c6c65741043616c6c04045400010c206164645f6b6579730401106b657973910501505665633c4164644b65793c543a3a486173683e3e00000464416464206b65797320746f207468652073746f72616765732e2c7265766f6b655f6b6579730801106b6579739d0201305665633c543a3a486173683e00012c6b65795f707572706f7365ad0101284b6579507572706f73650001048c5265766f6b65206b65797320776974682073706563696669656420707572706f73652e2c7365745f6465706f73697404012c6e65775f6465706f736974180128543a3a42616c616e6365000204585365742061206e6577206b6579206465706f7369742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e91050000029505009505083c70616c6c65745f6b657973746f7265184164644b65790410486173680124000c010c6b65792401104861736800011c707572706f7365ad0101284b6579507572706f73650001206b65795f74797065b101011c4b657954797065000099050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657820013c4f766572776569676874496e6465780001307765696768745f6c696d697420011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657720011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657720011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657720011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9d050c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e64080110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d657373616765a1050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172795902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172795902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765cd0501a4426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a43616c6c3e3e0001286d61785f77656967687420011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ecd010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e6d0101484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e5902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e5902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172795902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69743d02012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172795902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69743d02012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea105080c78636d3056657273696f6e656458636d041043616c6c00010c0856300400a505013476303a3a58636d3c43616c6c3e0000000856310400b905013476313a3a58636d3c43616c6c3e0001000856320400f501013476323a3a58636d3c43616c6c3e00020000a5050c0c78636d0876300c58636d041043616c6c00012c34576974686472617741737365740801186173736574734902013c5665633c4d756c746941737365743e00011c65666665637473a90501405665633c4f726465723c43616c6c3e3e0000004c5265736572766541737365744465706f7369740801186173736574734902013c5665633c4d756c746941737365743e00011c65666665637473a90501405665633c4f726465723c43616c6c3e3e0001003454656c65706f727441737365740801186173736574734902013c5665633c4d756c746941737365743e00011c65666665637473a90501405665633c4f726465723c43616c6c3e3e000200345175657279526573706f6e736508012071756572795f6964e101010c753634000120726573706f6e7365b5050120526573706f6e7365000300345472616e7366657241737365740801186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737420010c75363400011063616c6c2d02014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572d901010c7533320001406d61785f6d6573736167655f73697a65d901010c7533320001306d61785f6361706163697479d901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74d901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72d901010c75333200011873656e646572d901010c753332000124726563697069656e74d901010c7533320009002c52656c6179656446726f6d08010c77686f510201344d756c74694c6f636174696f6e00011c6d657373616765a5050170616c6c6f633a3a626f7865643a3a426f783c58636d3c43616c6c3e3e000a0000a905000002ad0500ad05100c78636d087630146f72646572144f72646572041043616c6c000120104e756c6c000000304465706f73697441737365740801186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365740c01186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976654902013c5665633c4d756c746941737365743e00011c726563656976654902013c5665633c4d756c746941737365743e0003005c496e6974696174655265736572766557697468647261770c01186173736574734902013c5665633c4d756c746941737365743e00011c72657365727665510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f6964e101010c75363400011064657374510201344d756c74694c6f636174696f6e0001186173736574734902013c5665633c4d756c746941737365743e00060030427579457865637574696f6e140110666565734d0201284d756c7469417373657400011877656967687420010c7536340001106465627420010c75363400013468616c745f6f6e5f6572726f72b80110626f6f6c00010c78636db10501385665633c58636d3c43616c6c3e3e00070000b105000002a50500b5050c0c78636d08763020526573706f6e73650001041841737365747304004902013c5665633c4d756c746941737365743e00000000b9050c0c78636d0876310c58636d041043616c6c00013434576974686472617741737365740801186173736574730102012c4d756c746941737365747300011c65666665637473bd0501405665633c4f726465723c43616c6c3e3e000000545265736572766541737365744465706f73697465640801186173736574730102012c4d756c746941737365747300011c65666665637473bd0501405665633c4f726465723c43616c6c3e3e000100585265636569766554656c65706f7274656441737365740801186173736574730102012c4d756c746941737365747300011c65666665637473bd0501405665633c4f726465723c43616c6c3e3e000200345175657279526573706f6e736508012071756572795f6964e101010c753634000120726573706f6e7365c9050120526573706f6e7365000300345472616e7366657241737365740801186173736574730102012c4d756c746941737365747300012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574730102012c4d756c746941737365747300011064657374cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737420010c75363400011063616c6c2d02014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572d901010c7533320001406d61785f6d6573736167655f73697a65d901010c7533320001306d61785f6361706163697479d901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74d901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72d901010c75333200011873656e646572d901010c753332000124726563697069656e74d901010c7533320009002c52656c6179656446726f6d08010c77686fd1010154496e746572696f724d756c74694c6f636174696f6e00011c6d657373616765b9050170616c6c6f633a3a626f7865643a3a426f783c58636d3c43616c6c3e3e000a004053756273637269626556657273696f6e08012071756572795f6964e101010c75363400014c6d61785f726573706f6e73655f776569676874e101010c753634000b0048556e73756273637269626556657273696f6e000c0000bd05000002c10500c105100c78636d087631146f72646572144f72646572041043616c6c000120104e6f6f70000000304465706f73697441737365740c0118617373657473310201404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e0001004c4465706f736974526573657276654173736574100118617373657473310201404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200011064657374cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e0002003445786368616e6765417373657408011067697665310201404d756c7469417373657446696c74657200011c726563656976650102012c4d756c74694173736574730003005c496e6974696174655265736572766557697468647261770c0118617373657473310201404d756c7469417373657446696c74657200011c72657365727665cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c0118617373657473310201404d756c7469417373657446696c74657200011064657374cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f6964e101010c75363400011064657374cd0101344d756c74694c6f636174696f6e000118617373657473310201404d756c7469417373657446696c74657200060030427579457865637574696f6e14011066656573090201284d756c7469417373657400011877656967687420010c7536340001106465627420010c75363400013468616c745f6f6e5f6572726f72b80110626f6f6c000130696e737472756374696f6e73c50501385665633c58636d3c43616c6c3e3e00070000c505000002b90500c9050c0c78636d08763120526573706f6e73650001081841737365747304000102012c4d756c74694173736574730000001c56657273696f6e040010013873757065723a3a56657273696f6e00010000cd05080c78636d3056657273696f6e656458636d041043616c6c00010c0856300400d105013476303a3a58636d3c43616c6c3e0000000856310400e505013476313a3a58636d3c43616c6c3e0001000856320400f505013476323a3a58636d3c43616c6c3e00020000d1050c0c78636d0876300c58636d041043616c6c00012c34576974686472617741737365740801186173736574734902013c5665633c4d756c746941737365743e00011c65666665637473d50501405665633c4f726465723c43616c6c3e3e0000004c5265736572766541737365744465706f7369740801186173736574734902013c5665633c4d756c746941737365743e00011c65666665637473d50501405665633c4f726465723c43616c6c3e3e0001003454656c65706f727441737365740801186173736574734902013c5665633c4d756c746941737365743e00011c65666665637473d50501405665633c4f726465723c43616c6c3e3e000200345175657279526573706f6e736508012071756572795f6964e101010c753634000120726573706f6e7365b5050120526573706f6e7365000300345472616e7366657241737365740801186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737420010c75363400011063616c6ce105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572d901010c7533320001406d61785f6d6573736167655f73697a65d901010c7533320001306d61785f6361706163697479d901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74d901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72d901010c75333200011873656e646572d901010c753332000124726563697069656e74d901010c7533320009002c52656c6179656446726f6d08010c77686f510201344d756c74694c6f636174696f6e00011c6d657373616765d1050170616c6c6f633a3a626f7865643a3a426f783c58636d3c43616c6c3e3e000a0000d505000002d90500d905100c78636d087630146f72646572144f72646572041043616c6c000120104e756c6c000000304465706f73697441737365740801186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365740c01186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976654902013c5665633c4d756c746941737365743e00011c726563656976654902013c5665633c4d756c746941737365743e0003005c496e6974696174655265736572766557697468647261770c01186173736574734902013c5665633c4d756c746941737365743e00011c72657365727665510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574734902013c5665633c4d756c746941737365743e00011064657374510201344d756c74694c6f636174696f6e00011c65666665637473a90501385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f6964e101010c75363400011064657374510201344d756c74694c6f636174696f6e0001186173736574734902013c5665633c4d756c746941737365743e00060030427579457865637574696f6e140110666565734d0201284d756c7469417373657400011877656967687420010c7536340001106465627420010c75363400013468616c745f6f6e5f6572726f72b80110626f6f6c00010c78636ddd0501385665633c58636d3c43616c6c3e3e00070000dd05000002d10500e1050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656428011c5665633c75383e0000e5050c0c78636d0876310c58636d041043616c6c00013434576974686472617741737365740801186173736574730102012c4d756c746941737365747300011c65666665637473e90501405665633c4f726465723c43616c6c3e3e000000545265736572766541737365744465706f73697465640801186173736574730102012c4d756c746941737365747300011c65666665637473e90501405665633c4f726465723c43616c6c3e3e000100585265636569766554656c65706f7274656441737365740801186173736574730102012c4d756c746941737365747300011c65666665637473e90501405665633c4f726465723c43616c6c3e3e000200345175657279526573706f6e736508012071756572795f6964e101010c753634000120726573706f6e7365c9050120526573706f6e7365000300345472616e7366657241737365740801186173736574730102012c4d756c746941737365747300012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574730102012c4d756c746941737365747300011064657374cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737420010c75363400011063616c6ce105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572d901010c7533320001406d61785f6d6573736167655f73697a65d901010c7533320001306d61785f6361706163697479d901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74d901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72d901010c75333200011873656e646572d901010c753332000124726563697069656e74d901010c7533320009002c52656c6179656446726f6d08010c77686fd1010154496e746572696f724d756c74694c6f636174696f6e00011c6d657373616765e5050170616c6c6f633a3a626f7865643a3a426f783c58636d3c43616c6c3e3e000a004053756273637269626556657273696f6e08012071756572795f6964e101010c75363400014c6d61785f726573706f6e73655f776569676874e101010c753634000b0048556e73756273637269626556657273696f6e000c0000e905000002ed0500ed05100c78636d087631146f72646572144f72646572041043616c6c000120104e6f6f70000000304465706f73697441737365740c0118617373657473310201404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e0001004c4465706f736974526573657276654173736574100118617373657473310201404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200011064657374cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e0002003445786368616e6765417373657408011067697665310201404d756c7469417373657446696c74657200011c726563656976650102012c4d756c74694173736574730003005c496e6974696174655265736572766557697468647261770c0118617373657473310201404d756c7469417373657446696c74657200011c72657365727665cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c0118617373657473310201404d756c7469417373657446696c74657200011064657374cd0101344d756c74694c6f636174696f6e00011c65666665637473bd0501385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f6964e101010c75363400011064657374cd0101344d756c74694c6f636174696f6e000118617373657473310201404d756c7469417373657446696c74657200060030427579457865637574696f6e14011066656573090201284d756c7469417373657400011877656967687420010c7536340001106465627420010c75363400013468616c745f6f6e5f6572726f72b80110626f6f6c000130696e737472756374696f6e73f10501385665633c58636d3c43616c6c3e3e00070000f105000002e50500f5050c0c78636d0876320c58636d041043616c6c00000400f90501585665633c496e737472756374696f6e3c43616c6c3e3e0000f905000002fd0500fd050c0c78636d0876322c496e737472756374696f6e041043616c6c000170345769746864726177417373657404000102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404000102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404000102012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f6964e101011c51756572794964000120726573706f6e73651d020120526573706f6e73650001286d61785f776569676874e101010c753634000300345472616e7366657241737365740801186173736574730102012c4d756c746941737365747300012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574730102012c4d756c746941737365747300011064657374cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f7374e101010c75363400011063616c6ce105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572d901010c7533320001406d61785f6d6573736167655f73697a65d901010c7533320001306d61785f6361706163697479d901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74d901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72d901010c75333200011873656e646572d901010c753332000124726563697069656e74d901010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400d1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f6964e101011c5175657279496400011064657374cd0101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f776569676874e101010c753634000c00304465706f73697441737365740c0118617373657473310201404d756c7469417373657446696c7465720001286d61785f617373657473d901010c75333200012c62656e6566696369617279cd0101344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473310201404d756c7469417373657446696c7465720001286d61785f617373657473d901010c75333200011064657374cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e000e003445786368616e6765417373657408011067697665310201404d756c7469417373657446696c74657200011c726563656976650102012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473310201404d756c7469417373657446696c74657200011c72657365727665cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473310201404d756c7469417373657446696c74657200011064657374cd0101344d756c74694c6f636174696f6e00010c78636df501011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f6964e101011c5175657279496400011064657374cd0101344d756c74694c6f636174696f6e000118617373657473310201404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f776569676874e101010c75363400120030427579457865637574696f6e08011066656573090201284d756c746941737365740001307765696768745f6c696d69743d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400f505012458636d3c43616c6c3e0015002c536574417070656e6469780400f505012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574730102012c4d756c74694173736574730001187469636b6574cd0101344d756c74694c6f636174696f6e00180010547261700400e101010c7536340019004053756273637269626556657273696f6e08012071756572795f6964e101011c5175657279496400014c6d61785f726573706f6e73655f776569676874e101010c753634001a0048556e73756273637269626556657273696f6e001b000001060c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657820013c4f766572776569676874496e6465780001307765696768745f6c696d6974200118576569676874000030905365727669636520612073696e676c65206f766572776569676874206d6573736167652e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ee82d2060696e646578603a2054686520696e646578206f6620746865206f766572776569676874206d65737361676520746f20736572766963652e1d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f66207765696768742074686174206d65737361676520657865637574696f6e206d61792074616b652e001c4572726f72733aac2d2060556e6b6e6f776e603a204d657373616765206f662060696e6465786020697320756e6b6e6f776e2e15012d20604f7665724c696d6974603a204d65737361676520657865637574696f6e206d6179207573652067726561746572207468616e20607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05060c306f726d6c5f78746f6b656e73186d6f64756c651043616c6c040454000118207472616e7366657210012c63757272656e63795f696479010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c646573745f7765696768742001185765696768740000306c5472616e73666572206e61746976652063757272656e636965732e00110160646573745f77656967687460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e20746865206465737420636861696e2c20616e64f4697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e204966207365742062656c6f77ec726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e4c7472616e736665725f6d756c746961737365740c0114617373657409060160426f783c56657273696f6e65644d756c746941737365743e000110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c646573745f776569676874200118576569676874000130585472616e7366657220604d756c74694173736574602e00110160646573745f77656967687460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e20746865206465737420636861696e2c20616e64f4697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e204966207365742062656c6f77ec726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e447472616e736665725f776974685f66656514012c63757272656e63795f696479010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500010c666565180128543a3a42616c616e6365000110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c646573745f776569676874200118576569676874000254ec5472616e73666572206e61746976652063757272656e636965732073706563696679696e67207468652066656520616e6420616d6f756e742061732473657061726174652e00110160646573745f77656967687460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e20746865206465737420636861696e2c20616e64f4697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e204966207365742062656c6f77ec726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e000d0160666565602069732074686520616d6f756e7420746f206265207370656e7420746f2070617920666f7220657865637574696f6e20696e2064657374696e6174696f6ef8636861696e2e20426f74682066656520616e6420616d6f756e742077696c6c206265207375627472616374656420666f726d207468652063616c6c6572732062616c616e63652e000d014966206066656560206973206e6f74206869676820656e6f75676820746f20636f76657220666f722074686520657865637574696f6e20636f73747320696e20746865e464657374696e6174696f6e20636861696e2c207468656e20746865206173736574732077696c6c206265207472617070656420696e207468654464657374696e6174696f6e20636861696e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e707472616e736665725f6d756c746961737365745f776974685f666565100114617373657409060160426f783c56657273696f6e65644d756c746941737365743e00010c66656509060160426f783c56657273696f6e65644d756c746941737365743e000110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c646573745f77656967687420011857656967687400035401015472616e7366657220604d756c74694173736574602073706563696679696e67207468652066656520616e6420616d6f756e742061732073657061726174652e00110160646573745f77656967687460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e20746865206465737420636861696e2c20616e64f4697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e204966207365742062656c6f77ec726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e00ec606665656020697320746865206d756c7469617373657420746f206265207370656e7420746f2070617920666f7220657865637574696f6e20696e090164657374696e6174696f6e20636861696e2e20426f74682066656520616e6420616d6f756e742077696c6c206265207375627472616374656420666f726d20746865110163616c6c6572732062616c616e636520466f72206e6f77207765206f6e6c79206163636570742066656520616e6420617373657420686176696e67207468652073616d654c604d756c74694c6f636174696f6e602069642e000d014966206066656560206973206e6f74206869676820656e6f75676820746f20636f76657220666f722074686520657865637574696f6e20636f73747320696e20746865e464657374696e6174696f6e20636861696e2c207468656e20746865206173736574732077696c6c206265207472617070656420696e207468654464657374696e6174696f6e20636861696e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e607472616e736665725f6d756c746963757272656e6369657310012863757272656e636965730d0601805665633c28543a3a43757272656e637949642c20543a3a42616c616e6365293e0001206665655f6974656d10010c753332000110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c646573745f77656967687420011857656967687400043c05015472616e73666572207365766572616c2063757272656e636965732073706563696679696e6720746865206974656d20746f20626520757365642061732066656500110160646573745f77656967687460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e20746865206465737420636861696e2c20616e64f4697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e204966207365742062656c6f77ec726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e000d01606665655f6974656d6020697320696e646578206f66207468652063757272656e63696573207475706c6520746861742077652077616e7420746f2075736520666f721c7061796d656e74001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e507472616e736665725f6d756c746961737365747310011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001206665655f6974656d10010c753332000110646573745902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c646573745f77656967687420011857656967687400053c0d015472616e73666572207365766572616c20604d756c74694173736574602073706563696679696e6720746865206974656d20746f20626520757365642061732066656500110160646573745f77656967687460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e20746865206465737420636861696e2c20616e64f4697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e204966207365742062656c6f77ec726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e00f8606665655f6974656d6020697320696e646578206f6620746865204d756c746941737365747320746861742077652077616e7420746f2075736520666f721c7061796d656e74001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0906080c78636d4c56657273696f6e65644d756c7469417373657400010808563004004d02013876303a3a4d756c7469417373657400000008563104000902013876313a3a4d756c74694173736574000100000d060000021106001106000004087901180015060c2c636861696e6272696467651870616c6c65741043616c6c040454000124347365745f7468726573686f6c640401247468726573686f6c6410010c75333200002098536574732074686520766f7465207468726573686f6c6420666f722070726f706f73616c732e00fc54686973207468726573686f6c64206973207573656420746f2064657465726d696e6520686f77206d616e7920766f74657320617265207265717569726564786265666f726520612070726f706f73616c2069732065786563757465642e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e307365745f7265736f7572636508010869640401285265736f7572636549640001186d6574686f6428011c5665633c75383e000114f853746f7265732061206d6574686f64206e616d65206f6e20636861696e20756e64657220616e206173736f636961746564207265736f757263652049442e002823203c7765696768743e302d204f2831292077726974652c23203c2f7765696768743e3c72656d6f76655f7265736f7572636504010869640401285265736f757263654964000220c052656d6f7665732061207265736f757263652049442066726f6d20746865207265736f75726365206d617070696e672e001901416674657220746869732063616c6c2c20627269646765207472616e7366657273207769746820746865206173736f636961746564207265736f757263652049442077696c6c3062652072656a65637465642e002823203c7765696768743e382d204f2831292072656d6f76616c2c23203c2f7765696768743e3c77686974656c6973745f636861696e040108696408011c436861696e49640003141101456e61626c6573206120636861696e204944206173206120736f75726365206f722064657374696e6174696f6e20666f72206120627269646765207472616e736665722e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e2c6164645f72656c6179657204010476000130543a3a4163636f756e74496400041498416464732061206e65772072656c6179657220746f207468652072656c61796572207365742e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e3872656d6f76655f72656c617965720401286163636f756e745f6964000130543a3a4163636f756e744964000514a452656d6f76657320616e206578697374696e672072656c617965722066726f6d20746865207365742e002823203c7765696768743e642d204f283129206c6f6f6b757020616e642072656d6f76616c2c23203c2f7765696768743e5061636b6e6f776c656467655f70726f706f73616c1001146e6f6e63652001304465706f7369744e6f6e63650001187372635f696408011c436861696e4964000110725f69640401285265736f75726365496400011063616c6c05040170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e000620c8436f6d6d697473206120766f746520696e206661766f7572206f66207468652070726f76696465642070726f706f73616c2e005901496620612070726f706f73616c20776974682074686520676976656e206e6f6e636520616e6420736f7572636520636861696e20494420646f6573206e6f7420616c72656164792065786973742c2069742077696c6ce862652063726561746564207769746820616e20696e697469616c20766f746520696e206661766f75722066726f6d207468652063616c6c65722e002823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e3c72656a6563745f70726f706f73616c1001146e6f6e63652001304465706f7369744e6f6e63650001187372635f696408011c436861696e4964000110725f69640401285265736f75726365496400011063616c6c05040170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e000714ac436f6d6d697473206120766f746520616761696e737420612070726f76696465642070726f706f73616c2e002823203c7765696768743eec2d2046697865642c2073696e636520657865637574696f6e206f662070726f706f73616c2073686f756c64206e6f7420626520696e636c756465642c23203c2f7765696768743e3c6576616c5f766f74655f73746174650c01146e6f6e63652001304465706f7369744e6f6e63650001187372635f696408011c436861696e496400012070726f706f73616c05040170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e00082009014576616c7561746520746865207374617465206f6620612070726f706f73616c20676976656e207468652063757272656e7420766f7465207468726573686f6c642e004501412070726f706f73616c207769746820656e6f75676820766f7465732077696c6c20626520656974686572206578656375746564206f722063616e63656c6c65642c20616e6420746865207374617475737077696c6c2062652075706461746564206163636f7264696e676c792e002823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19060c4c6f726d6c5f61737365745f7265676973747279186d6f64756c651043616c6c0404540001083872656769737465725f61737365740801206d657461646174617d0201b041737365744d657461646174613c543a3a42616c616e63652c20543a3a437573746f6d4d657461646174613e00012061737365745f69641d0601484f7074696f6e3c543a3a417373657449643e000000307570646174655f61737365741c012061737365745f696479010128543a3a41737365744964000120646563696d616c736d01012c4f7074696f6e3c7533323e0001106e616d65ac013c4f7074696f6e3c5665633c75383e3e00011873796d626f6cac013c4f7074696f6e3c5665633c75383e3e00014c6578697374656e7469616c5f6465706f736974410101484f7074696f6e3c543a3a42616c616e63653e0001206c6f636174696f6e210601984f7074696f6e3c4f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e3e0001286164646974696f6e616c250601644f7074696f6e3c543a3a437573746f6d4d657461646174613e000100042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d0604184f7074696f6e0404540179010108104e6f6e6500000010536f6d65040079010000010000210604184f7074696f6e0404540189020108104e6f6e6500000010536f6d65040089020000010000250604184f7074696f6e0404540181020108104e6f6e6500000010536f6d6504008102000001000029060c6070616c6c65745f6d6967726174696f6e5f6d616e616765721870616c6c65741043616c6c040454000114586d6967726174655f73797374656d5f6163636f756e740401206163636f756e7473b102015c5665633c285665633c75383e2c205665633c75383e293e00001cd44d6967726174696e6720746865204163636f756e7420696e666f726d6174696f6e732066726f6d206672616d655f73797374656d2e00bd01546869732063616c6c2074616b65732074686520726177207363616c6520656e636f646564206b657920283d2070617472696369612d6b657920666f722065616368206163636f756e7420696e2074686520604163636f756e74602073746f7261676520616e6420696e736572747329017468652070726f7669646564207363616c6520656e636f6465642076616c756520283d20604163636f756e74496e666f602920696e746f2074686520756e6465726c79696e672044422e00d1014e6f74653a2041732077652061726520636f6e76657274696e672066726f6d207375627374726174652d763220746f207375627374726174652d7633207765206d75737420646f20747970652d636f6e76657273696f6e732e2054686f736520636f6e76657273696f6e732061726520646f6e65286f66662d636861696e2e646d6967726174655f62616c616e6365735f69737375616e636504014c6164646974696f6e616c5f69737375616e6365180128543a3a42616c616e63650001147c4d696772617465732061207468652060546f74616c49737375616e6365602e0059015468652070726f766964652062616c616e636520686572652c2077696c6c20626520414444454420746f20746865206578697374696e672060546f74616c49737375616e636560206f66207468652073797374656d2e7d0143616c6c65792062657474657220626520737572652c20746861742074686520746f74616c2069737375616e6365206d617463686573207468652061637475616c20746f74616c2069737375616e636520696e207468652073797374656d2c45017768696368206d65616e732c20746861742074686520604163636f756e74496e666f602066726f6d20746865206672616d655f73797374656d206973206d6967726174656420616674657277617264732e5c6d6967726174655f76657374696e675f76657374696e6704012076657374696e67732d0601f85665633c28543a3a4163636f756e7449642c2056657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e293e000210b04d696772617465732076657374696e6720696e666f726d6174696f6e20746f20746869732073797374656d2e007501546865206056657374696e67496e666f602069732061646170746564206f66662d636861696e2c20736f207468617420697420726570726573656e74732074686520636f72726563742076657374696e6720696e666f726d6174696f6e386f6e207468697320636861696e2e546d6967726174655f70726f78795f70726f7869657304011c70726f786965733506011d065665633c0a28543a3a4163636f756e7449642c3c3c542061732070616c6c65745f70726f78793a3a436f6e6669673e3a3a43757272656e63792061730a6672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a0a4163636f756e7449642c3e3e3a3a42616c616e63652c0a28426f756e6465645665633c50726f7879446566696e6974696f6e3c543a3a4163636f756e7449642c20543a3a50726f7879547970652c20543a3a0a426c6f636b4e756d6265723e2c3c542061732070616c6c65745f70726f78793a3a436f6e6669673e3a3a4d617850726f786965732c3e2c3c3c542061730a70616c6c65745f70726f78793a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c0a3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e63652c292c293e000314c44d6967726174657320746f206050726f78696573602073746f726167652066726f6d20616e6f7468657220636861696e2e009d01417320746865206050726f78696573602073746f72616765206368616e676564206265747765656e20763220616e642076332c2061207472616e73666f726d6174696f6e20666f7220746865207632206461746120697320646f6e65206f66662d636861696e2ea10154686520696e70757420646566696e657320616e206172726179206f66206f66207475706c65732c2077686572652065616368207475706c6520646566696e65732c207468652070726f78696564206163636f756e742c2074686520726573657276652074686174f86d75737420626520646f6e65206f6e2074686973206163636f756e7420616e64207468652070726f7869657320666f722074686973206163636f756e742e2066696e616c697a65000404a455706461746520746865206d6967726174696f6e2073746174757320746f2060436f6d706c65746560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2d0600000231060031060000040800fd0400350600000239060039060000040c00183d06003d060000040841061800410610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e646564566563080454014506045300000400490601185665633c543e00004506083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501982c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f7479706598012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000049060000024506004d060c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000028350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e547375646f5f756e636865636b65645f77656967687408011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000118776569676874200118576569676874000128350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292ecc2d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e2c23203c2f7765696768743e1c7365745f6b657904010c6e65778103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650002285d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e402d204f6e65204442206368616e67652e2c23203c2f7765696768743e1c7375646f5f617308010c77686f8103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011063616c6c05040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e00032c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e51060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090955060000040859061800590610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e646564566563080454015d06045300000400610601185665633c543e00005d06083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801242c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682401104861736800011868656967687410012c426c6f636b4e756d626572000061060000025d060065060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090969060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909096d06000002710600710604184f7074696f6e0404540175060108104e6f6e6500000010536f6d650400750600000100007506084070616c6c65745f7363686564756c65722c5363686564756c65645633101043616c6c0141042c426c6f636b4e756d62657201103450616c6c6574734f726967696e012104244163636f756e7449640100001401206d617962655f6964ac013c4f7074696f6e3c5665633c75383e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c4104011043616c6c0001386d617962655f706572696f6469633d0401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e2104013450616c6c6574734f726967696e000079060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000110404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909097d0610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401240453000004009d0201185665633c543e00008106084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e74000110617965737c01385665633c4163636f756e7449643e0001106e6179737c01385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000085060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090989060000028d06008d06086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e636500009106086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f7465737c01385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e6365000095060c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e285265706f727453656c660007044c43616e6e6f74207265706f72742073656c662e4c4475706c69636174656443616e646964617465000804804475706c6963617465642063616e646964617465207375626d697373696f6e2e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090999060000029d06009d060000040c10240000a106000004087c1800a506084070616c6c65745f64656d6f637261637938507265696d6167655374617475730c244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011001081c4d697373696e67040010012c426c6f636b4e756d62657200000024417661696c61626c651401106461746128011c5665633c75383e00012070726f76696465720001244163636f756e74496400011c6465706f73697418011c42616c616e636500011473696e636510012c426c6f636b4e756d6265720001186578706972796d01014c4f7074696f6e3c426c6f636b4e756d6265723e00010000a9060c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d6265720110104861736801241c42616c616e6365011801081c4f6e676f696e670400ad0601b05265666572656e64756d5374617475733c426c6f636b4e756d6265722c20486173682c2042616c616e63653e0000002046696e6973686564080120617070726f766564b80110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000ad060c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d6265720110104861736801241c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200013470726f706f73616c5f68617368240110486173680001247468726573686f6c64cc0134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79b106013854616c6c793c42616c616e63653e0000b1060c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000b5060c4070616c6c65745f64656d6f637261637910766f746518566f74696e670c1c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d62657201100108184469726563740c0114766f746573b90601b05665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e293e00012c64656c65676174696f6e73c106015044656c65676174696f6e733c42616c616e63653e0001147072696f72c506017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e55040128436f6e76696374696f6e00012c64656c65676174696f6e73c106015044656c65676174696f6e733c42616c616e63653e0001147072696f72c506017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e00010000b906000002bd0600bd060000040810d000c1060c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000c5060c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000c9060000040824cc00cd0600000408107c00d106084070616c6c65745f64656d6f63726163792052656c656173657300010408563100000000d5060c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001702056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365444475706c6963617465507265696d61676500090458507265696d61676520616c7265616479206e6f7465642c4e6f74496d6d696e656e74000a04304e6f7420696d6d696e656e7420546f6f4561726c79000b0424546f6f206561726c7920496d6d696e656e74000c0420496d6d696e656e743c507265696d6167654d697373696e67000d0448507265696d616765206e6f7420666f756e64445265666572656e64756d496e76616c6964000e0484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d3c507265696d616765496e76616c6964000f0440496e76616c696420707265696d6167652c4e6f6e6557616974696e67001004504e6f2070726f706f73616c732077616974696e67204e6f74566f746572001104c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e001204c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e6700130488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473001404fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67001504a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740016085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001704d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650018049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400190450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001a04804d6178696d756d206e756d626572206f6620766f74657320726561636865642e40546f6f4d616e7950726f706f73616c73001b04904d6178696d756d206e756d626572206f662070726f706f73616c7320726561636865642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909d9060c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e7473004c4d61784164646974696f6e616c4669656c647300000c01286a756467656d656e7473dd0601fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f5d0401844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e0000dd0610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401e106045300000400e50601185665633c543e0000e1060000040810f50400e506000002e10600e9060000040818ed0600ed0610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401000453000004007c01185665633c543e0000f10610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401f506045300000400fd0601185665633c543e0000f50604184f7074696f6e04045401f9060108104e6f6e6500000010536f6d650400f9060000010000f9060c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f081c42616c616e63650118244163636f756e7449640100000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c6473ed0401384964656e746974794669656c64730000fd06000002f5060001070c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400014048546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e34546f6f4d616e794669656c6473000b046c546f6f206d616e79206164646974696f6e616c206669656c64732e44546f6f4d616e7952656769737472617273000c04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000d04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000e047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000f04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909050710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401fd04045300000400090701185665633c543e00000907000002fd04000d07083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000011070c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e1507083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e63650000190710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e6465645665630804540110045300000400d50301185665633c543e00001d070c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000210708346672616d655f737570706f72742050616c6c65744964000004001902011c5b75383b20385d000025070c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011070496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e4c50726f706f73616c4e6f74417070726f7665640003047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e29070c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67b80110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656eb80110626f6f6c00002d070000040c0020e80031070000040800200035070000040820e80039070c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f766564950201444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656eb80110626f6f6c00011c6465706f7369741801384465706f73697442616c616e636500003d070c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461ec016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656eb80110626f6f6c000041070c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461ec016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656eb80110626f6f6c000045070000040c20f4ec00490700000408ec18004d070c3870616c6c65745f756e69717565731870616c6c6574144572726f7208045400044900013c304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909095107083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e7265717565737465640400550701704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e00000024526571756573746564040010010c75333200010000550704184f7074696f6e04045401c40108104e6f6e6500000010536f6d650400c40000010000590710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e00005d070c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011820546f6f4c61726765000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909096107082c70616c6c65745f666565730c46656508104861736801241c42616c616e636501180008010c6b657924011048617368000114707269636518011c42616c616e6365000065070c2c70616c6c65745f666565731870616c6c6574144572726f72040454000108444665654e6f74466f756e64466f724b657900000494466565206173736f63696174656420746f20676976656e206b6579206e6f7420666f756e6434496e76616c6964417574686f7200010484496e76616c696420617574686f72206f6620626c6f636b6564206665746368656404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909096907083870616c6c65745f616e63686f727334507265436f6d6d6974446174610c10486173680124244163636f756e74496401002c426c6f636b4e756d6265720110000c01307369676e696e675f726f6f74240110486173680001206964656e746974790001244163636f756e74496400014065787069726174696f6e5f626c6f636b10012c426c6f636b4e756d62657200006d070000040810200071070c3870616c6c65745f616e63686f72731870616c6c6574144572726f7204045400012c4c416e63686f72416c726561647945786973747300000490416e63686f72207769746820616e63686f725f696420616c72656164792065786973747354416e63686f7253746f726544617465496e50617374000104a8416e63686f722073746f72652064617465206d75737420626520696e206e6f77206f722066757475726570416e63686f7253746f72654461746541626f76654d61784c696d6974000204d8416e63686f722073746f72652064617465206d757374206e6f74206265206d6f7265207468616e206d61782073746f72652064617465244665654e6f74536574000304a053746174652072656e7420666565206e6f742073657420696e20746865204665652050616c6c657458507265436f6d6d6974416c7265616479457869737473000404645072652d636f6d6d697420616c7265616479206578697374734c4e6f744f776e65724f66507265436f6d6d69740005049453656e646572206973206e6f7420746865206f776e6572206f662070726520636f6d6d697454496e76616c6964507265436f6d6d697450726f6f6600060460496e76616c69642070726520636f6d6d69742070726f6f6664507265436f6d6d697445787069726174696f6e546f6f4269670007048c50726520436f6d6d69742065787069726174696f6e20626c6f636b20746f6f20626967484576696374696f6e44617465546f6f426967000804904576696374696f6e206461746520746f6f2062696720666f7220636f6e76657273696f6e684661696c6564546f436f6e7665727445706f6368546f44617973000904944661696c656420746f20636f6e766572742065706f636820696e204d5320746f20646179734c4576696374696f6e4e6f74506f737369626c65000a04704275636b6574206576696374696f6e206e6f7420706f737369626c6504ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090975070c3470616c6c65745f636c61696d731870616c6c6574144572726f720404540001104c496e73756666696369656e7442616c616e63650000043501416d6f756e74206265696e6720636c61696d6564206973206c657373207468616e2074686520617661696c61626c6520616d6f756e7420696e205b60436c61696d6564416d6f756e7473605d2e34496e76616c696450726f6f6673000104410154686520636f6d62696e6174696f6e206f66206163636f756e742069642c20616d6f756e742c20616e642070726f6f667320766563746f7220696e206120636c61696d2077617320696e76616c69642e2c4d757374426541646d696e000204bc50726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792061646d696e38556e6465724d696e5061796f75740003049d01546865207061796f757420616d6f756e7420617474656d7074696e6720746f20626520636c61696d6564206973206c657373207468616e20746865206d696e696d756d20616c6c6f776564206279205b604d696e696d616c5061796f7574416d6f756e74605d2e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909097907000004080010007d070c5870616c6c65745f63726f77646c6f616e5f636c61696d1870616c6c6574144572726f720404540001286050616c6c6574416c7265616479496e697469616c697a65640000047c43616e6e6f742072652d696e697469616c697a65207468652070616c6c65745050616c6c65744e6f74496e697469616c697a6564000104bc43616e6e6f742063616c6c20726577617264206265666f72652070616c6c657420697320696e697469616c697a656454436c61696d416c726561647950726f636573736564000204e8436c61696d2068617320616c7265616479206265656e2070726f63657373656420287265706c61792061747461636b2c2070726f6261626c792968496e76616c696450726f6f664f66436f6e747269627574696f6e000304985468652070726f6f66206f66206120636f6e747269627574696f6e20697320696e76616c696478436c61696d6564416d6f756e7449734f75744f66426f756e646172696573000404e4436c61696d656420616d6f756e74206973206f7574206f6620626f756e6461726965732028746f6f206c6f77206f7220746f6f2068696768294c4d757374426541646d696e6973747261746f72000504910153656e736974697665207472616e73616374696f6e732063616e206f6e6c7920626520706572666f726d65642062792061646d696e6973747261746f7220656e746974792028652e672e205375646f206f722044656d6f63726163792070616c6c65742948496e76616c6964436c61696d416d6f756e7400060451015468652072657761726420616d6f756e74207468617420697320636c61696d656420646f6573206e6f7420636f72726573706f6e6420746f20746865206f6e65206f662074686520636f6e747269627574696f6e6c496e76616c6964436f6e7472696275746f725369676e61747572650007102101546865207369676e61747572652070726f76696465642062792074686520636f6e7472696275746f72207768656e207265676973746572696e67206973206e6f742076616c69642e001d0154686520636f6e73657175656e63652069732074686174207468652072656c6179636861696e20616e642070617261636861696e206163636f756e7473206265696e67206e6f7405016173736f6369617465642c2074686520636f6e7472696275746f72206973206e6f7420656c6c696769626c6520666f72206120726577617264207061796f75742e304f6e676f696e674c65617365000804190141206c65617365206973206f6e676f67696e6720616e64207468652070616c6c65742063616e2068656e636564206e6f7420626520696e697469616c697a656420616761696e404f75744f664c65617365506572696f64000904c0436c61696d696e672072657761726473206973206f6e6c7920706f737369626c6520647572696e672061206c6561736504ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090981070c5c70616c6c65745f63726f77646c6f616e5f7265776172641870616c6c6574144572726f7204045400010c4c4d757374426541646d696e6973747261746f72000004b0496e76616c69642063616c6c20746f20616e2061646d696e6973747261746976652065787472696e7369637348526577617264496e73756666696369656e74000104ac546865207265776172642069732062656c6f7720746865206578697374656e7469616c206465706f7369745050616c6c65744e6f74496e697469616c697a65640002048050616c6c6574206d75737420626520696e697469616c697a656420666972737404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909098507083070616c6c65745f706f6f6c732c506f6f6c44657461696c73202843757272656e637949640179011c45706f6368496401101c42616c616e636501181052617465015501204d65746153697a6501890718576569676874018d07245472616e636865496401450118506f6f6c49640120001c012063757272656e63797901012843757272656e637949640001207472616e63686573910701f85472616e636865733c42616c616e63652c20526174652c205765696768742c2043757272656e637949642c205472616e63686549642c20506f6f6c49643e000128706172616d6574657273a5070138506f6f6c506172616d65746572730001206d65746164617461a90701804f7074696f6e3c426f756e6465645665633c75382c204d65746153697a653e3e000118737461747573b1070128506f6f6c53746174757300011465706f6368b507014c45706f636853746174653c45706f636849643e00011c72657365727665b907015c5265736572766544657461696c733c42616c616e63653e00008907084c646576656c6f706d656e745f72756e74696d653c4d617853697a654d65746164617461000000008d070c3872756e74696d655f636f6d6d6f6e147479706573345472616e6368655765696768740000040018011075313238000091070c3070616c6c65745f706f6f6c731c7472616e636865205472616e63686573181c42616c616e63650118105261746501550118576569676874018d072043757272656e6379017901245472616e636865496401450118506f6f6c49640120000c01207472616e63686573950701b45665633c5472616e6368653c42616c616e63652c20526174652c205765696768742c2043757272656e63793e3e00010c6964739d0701385665633c5472616e63686549643e00011073616c74a107014c5472616e63686553616c743c506f6f6c49643e0000950700000299070099070c3070616c6c65745f706f6f6c731c7472616e6368651c5472616e636865101c42616c616e63650118105261746501550118576569676874018d072043757272656e6379017901002801307472616e6368655f74797065510501445472616e636865547970653c526174653e00012473656e696f7269747910012453656e696f7269747900012063757272656e63797901012043757272656e63790001646f75747374616e64696e675f696e766573745f6f726465727318011c42616c616e63650001646f75747374616e64696e675f72656465656d5f6f726465727318011c42616c616e63650001106465627418011c42616c616e636500011c7265736572766518011c42616c616e63650001106c6f737318011c42616c616e6365000114726174696f2901012c5065727175696e74696c6c0001546c6173745f757064617465645f696e7465726573742001184d6f6d656e7400009d07000002450100a10700000408202000a507083070616c6c65745f706f6f6c7338506f6f6c506172616d657465727300000801386d696e5f65706f63685f74696d652001184d6f6d656e7400012c6d61785f6e61765f6167652001184d6f6d656e740000a90704184f7074696f6e04045401ad070108104e6f6e6500000010536f6d650400ad070000010000ad0710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e0000b107083070616c6c65745f706f6f6c7328506f6f6c537461747573000104104f70656e00000000b507083070616c6c65745f706f6f6c732845706f63685374617465041c45706f636849640110000c011c63757272656e7410011c45706f6368496400012c6c6173745f636c6f7365642001184d6f6d656e740001346c6173745f657865637574656410011c45706f636849640000b907083070616c6c65745f706f6f6c73385265736572766544657461696c73041c42616c616e63650118000c010c6d617818011c42616c616e6365000114746f74616c18011c42616c616e6365000124617661696c61626c6518011c42616c616e63650000bd07083070616c6c65745f706f6f6c73585363686564756c656455706461746544657461696c730410526174650155010008011c6368616e67657355050144506f6f6c4368616e6765733c526174653e0001387363686564756c65645f74696d652001184d6f6d656e740000c1070000040845010000c507083070616c6c65745f706f6f6c7324557365724f72646572081c42616c616e636501181c45706f636849640110000c0118696e7665737418011c42616c616e636500011872656465656d18011c42616c616e636500011465706f636810011c45706f636849640000c9070000040845011000cd07083070616c6c65745f706f6f6c733045706f636844657461696c73043042616c616e6365526174696f015501000c0148696e766573745f66756c66696c6c6d656e742901012c5065727175696e74696c6c00014872656465656d5f66756c66696c6c6d656e742901012c5065727175696e74696c6c00012c746f6b656e5f70726963655501013042616c616e6365526174696f0000d107083070616c6c65745f706f6f6c734845706f6368457865637574696f6e496e666f141c42616c616e636501183042616c616e6365526174696f0155011c45706f63684964011018576569676874018d072c426c6f636b4e756d6265720110001c011465706f636810011c45706f6368496400010c6e617618011c42616c616e636500011c7265736572766518011c42616c616e636500012c6d61785f7265736572766518011c42616c616e63650001207472616e63686573d50701d445706f6368457865637574696f6e5472616e636865733c42616c616e63652c2042616c616e6365526174696f2c205765696768743e00013c626573745f7375626d697373696f6ee10701784f7074696f6e3c45706f6368536f6c7574696f6e3c42616c616e63653e3e0001506368616c6c656e67655f706572696f645f656e646d01014c4f7074696f6e3c426c6f636b4e756d6265723e0000d5070c3070616c6c65745f706f6f6c731c7472616e6368655845706f6368457865637574696f6e5472616e636865730c1c42616c616e636501183042616c616e6365526174696f01550118576569676874018d07000401207472616e63686573d90701e45665633c45706f6368457865637574696f6e5472616e6368653c42616c616e63652c2042616c616e6365526174696f2c205765696768743e3e0000d907000002dd0700dd070c3070616c6c65745f706f6f6c731c7472616e6368655445706f6368457865637574696f6e5472616e6368650c1c42616c616e636501183042616c616e6365526174696f01550118576569676874018d0700180118737570706c7918011c42616c616e636500011470726963655501013042616c616e6365526174696f000118696e7665737418011c42616c616e636500011872656465656d18011c42616c616e636500013c6d696e5f7269736b5f6275666665722901012c5065727175696e74696c6c00012473656e696f7269747910012453656e696f726974790000e10704184f7074696f6e0404540119010108104e6f6e6500000010536f6d65040019010000010000e507083070616c6c65745f706f6f6c733c506f6f6c4465706f736974496e666f08244163636f756e74496401001c42616c616e63650118000801246465706f7369746f720001244163636f756e74496400011c6465706f73697418011c42616c616e63650000e9070c3070616c6c65745f706f6f6c731870616c6c6574144572726f7204045400018024506f6f6c496e557365000004944120706f6f6c2077697468207468697320494420697320616c726561647920696e2075736550496e76616c69644a756e696f725472616e636865000104cc417474656d7074656420746f20637265617465206120706f6f6c20776974686f75742061206a756e696f72207472616e6368655c496e76616c69645472616e636865537472756374757265000208b4417474656d7074656420746f206372656174652061207472616e63686520737472756374757265207768657265a82a206e6f6e2d64656372656173696e6720696e746572657374207261746520706572207472616e636865284e6f53756368506f6f6c000304d4417474656d7074656420616e206f7065726174696f6e206f6e206120706f6f6c20776869636820646f6573206e6f74206578697374604d696e45706f636854696d654861734e6f7450617373656400040494417474656d7074656420746f20636c6f736520616e2065706f636820746f6f206561726c79644368616c6c656e676554696d654861734e6f745061737365640005049c417474656d7074656420746f206578656375746520616e2065706f636820746f6f206561726c7948496e5375626d697373696f6e506572696f64000604e443616e6e6f742062652063616c6c6564207768696c652074686520706f6f6c20697320696e2061207375626d697373696f6e20706572696f64244e4156546f6f4f6c64000704cc417474656d7074656420746f20636c6f736520616e2065706f6368207769746820616e206f7574206f662064617465204e4156245472616e6368654964000804b841205472616e6368652049442063616e6e6f7420626520636f6e76657274656420746f20616e20616464726573732057697065644f7574000904dc436c6f73696e67207468652065706f6368206e6f7720776f756c642077697065206f757420746865206a756e696f72207472616e6368653c496e76616c6964536f6c7574696f6e000a04a05468652070726f766964656420736f6c7574696f6e206973206e6f7420612076616c6964206f6e65544e6f74496e5375626d697373696f6e506572696f64000b04f4417474656d7074656420746f20736f6c7665206120706f6f6c207768696368206973206e6f7420696e2061207375626d697373696f6e20706572696f6450496e73756666696369656e7443757272656e6379000c04d4496e73756666696369656e742063757272656e637920617661696c61626c6520666f722064657369726564206f7065726174696f6e485269736b42756666657256696f6c61746564000d04745269736b204275666665722076616c69646174696f6e206661696c6564144e6f4e4156000e0464546865204e415620776173206e6f7420617661696c61626c654c45706f63684e6f744578656375746564596574000f04c445706f6368206e6565647320746f206265206578656375746564206265666f726520796f752063616e20636f6c6c656374484e6f4f75747374616e64696e674f72646572001004d054686572652773206e6f206f75747374616e64696e67206f72646572207468617420636f756c6420626520636f6c6c65637465643c436f6c6c6563745265717569726564001104e455736572206e6565647320746f20636f6c6c656374206265666f72652061206e6577206f726465722063616e206265207375626d69747465646443616e6e6f744164644f7252656d6f76655472616e63686573001204ac416464696e6720262072656d6f76696e67207472616e63686573206973206e6f7420737570706f7274656440436f6c6c656374734e6f45706f6368730013040101496e6469636174696e672074686174206120636f6c6c65637420776974682060636f6c6c6563745f6e5f657063687360203d3d2030207761732063616c6c65645c496e76616c69645472616e63686553656e696f7269747900140c7c496e76616c6964207472616e6368652073656e696f726974792076616c7565b82a2073656e696f72697479204d55535420626520736d616c6c6572206e756d626572206f66207472616e63686573802a204d55535420626520696e6372656173696e6720706572207472616e6368652c4261644d657461646174610015045c496e76616c6964206d657461646174612070617373656440496e76616c69645472616e6368654964001604e8496e76616c6964205472616e6368654964207061737365642e20496e206d6f7374206361736573206f75742d6f662d626f756e6420696e646578284e6f4e65774f72646572001704e0496e64696361746573207468617420746865206e657720706173736564206f7264657220657175616c7320746865206f6c642d6f726465723c546f6f4d616e795472616e63686573001804e454686520726571756573746564207472616e63686520636f6e66696775726174696f6e2068617320746f6f206d616e79207472616e63686573504e6f744e6577426573745375626d697373696f6e001904a05375626d697474656420736f6c7574696f6e206973206e6f7420616e20696d70726f76656d656e744c4e6f536f6c7574696f6e417661696c61626c65001a04bc4e6f20736f6c7574696f6e2068617320796574206265656e2070726f766964656420666f72207468652065706f636868506f6f6c506172616d65746572426f756e6456696f6c61746564001b04ec4f6e65206f66207468652072756e74696d652d6c6576656c20706f6f6c20706172616d6574657220626f756e6473207761732076696f6c61746564444e6f5363686564756c6564557064617465001c048c4e6f2075706461746520666f722074686520706f6f6c206973207363686564756c6564645363686564756c656454696d654861734e6f74506173736564001d04bc5363686564756c65642074696d6520666f7220746869732075706461746520697320696e20746865206675747572657c557064617465507265726571756573697465734e6f7446756c66696c6c6564001e04785570646174652063616e6e6f742062652066756c66696c6c6564207965743c496e76616c696443757272656e6379001f04e84120757365722068617320747269656420746f20637265617465206120706f6f6c207769746820616e20696e76616c69642063757272656e637904ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909ed070c3070616c6c65745f6c6f616e731474797065732c4c6f616e44657461696c73081441737365740151012c426c6f636b4e756d626572011000080128636f6c6c61746572616c510101144173736574000118737461747573f107015c4c6f616e5374617475733c426c6f636b4e756d6265723e0000f1070c3070616c6c65745f6c6f616e73147479706573284c6f616e537461747573042c426c6f636b4e756d6265720110010c1c437265617465640000001841637469766500010018436c6f736564040124636c6f7365645f617410012c426c6f636b4e756d62657200020000f50710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401f907045300000400010801185665633c543e0000f9070c3070616c6c65745f6c6f616e73147479706573445072696365644c6f616e44657461696c7310184c6f616e496401e810526174650155011c42616c616e63650118384e6f726d616c697a65644465627401180024011c6c6f616e5f6964e801184c6f616e49640001246c6f616e5f747970655901015c4c6f616e547970653c526174652c2042616c616e63653e000154696e7465726573745f726174655f7065725f73656355010110526174650001406f726967696e6174696f6e5f64617465f801384f7074696f6e3c4d6f6d656e743e00013c6e6f726d616c697a65645f646562741801384e6f726d616c697a656444656274000138746f74616c5f626f72726f77656418011c42616c616e6365000130746f74616c5f72657061696418011c42616c616e636500014077726974655f6f66665f737461747573fd07015057726974654f66665374617475733c526174653e0001306c6173745f757064617465642001184d6f6d656e740000fd070c3070616c6c65745f6c6f616e731474797065733857726974654f6666537461747573041052617465015501010c104e6f6e65000000285772697474656e4f666604013c77726974655f6f66665f696e64657810010c753332000100445772697474656e4f6666427941646d696e08012870657263656e74616765550101105261746500017470656e616c74795f696e7465726573745f726174655f7065725f7365635501011052617465000200000108000002f9070005080c3070616c6c65745f6c6f616e73147479706573284e415644657461696c73041c42616c616e63650118000801186c617465737418011c42616c616e63650001306c6173745f757064617465642001184d6f6d656e74000009080000026905000d080c3070616c6c65745f6c6f616e731870616c6c6574144572726f7204045400016c2c506f6f6c4d697373696e6700000474456d697473207768656e20706f6f6c20646f65736e277420657869737448506f6f6c4e6f74496e697469616c6973656400010488456d697473207768656e20706f6f6c206973206e6f7420696e697469616c6973656458506f6f6c416c7265616479496e697469616c6973656400020498456d697473207768656e20706f6f6c20697320616c726561647920696e697469616c697365642c4d697373696e674c6f616e00030478456d697473207768656e206c6f616e20646f65736e27742065786973742e5c4d6178426f72726f77416d6f756e744578636565646564000404f4456d697473207768656e2074686520626f72726f77656420616d6f756e74206973206d6f7265207468616e206d61785f626f72726f775f616d6f756e743456616c75654f766572666c6f77000504cc456d697473207768656e20616e206f7065726174696f6e206c65616420746f20746865206e756d626572206f766572666c6f77584e6f726d616c697a6564446562744f766572666c6f77000604f0456d697473207768656e207072696e636970616c20646562742063616c63756c6174696f6e206661696c65642064756520746f206f766572666c6f77304c6f616e4973416374697665000704a4456d697473207768656e20747269657320746f2075706461746520616e20616374697665206c6f616e3c4c6f616e54797065496e76616c69640008049c456d697473207768656e206c6f616e207479706520676976656e206973206e6f742076616c6964344c6f616e4e6f74416374697665000904c0456d697473207768656e206f7065726174696f6e20697320646f6e65206f6e20616e20696e616374697665206c6f616e345265706179546f6f4561726c79000a00404e46544f776e65724e6f74466f756e64000b0494456d697473207768656e20746865204e4654206f776e6572206973206e6f7420666f756e64344e6f7441737365744f776e6572000c04d4456d697473207768656e206e6674206f776e657220646f65736e2774206d6174636820746865206578706563746564206f776e6572384e6f744156616c69644173736574000d04b4456d697473207768656e20746865206e6674206973206e6f7420616e2061636365707461626c652061737365745c4e6674546f6b656e4e6f6e63654f766572666c6f776564000e04b0456d697473207768656e20746865206e667420746f6b656e206e6f6e6365206973206f766572666c6f776564344c6f616e4e6f74526570616964000f04e8456d697473207768656e206c6f616e20616d6f756e74206e6f74207265706169642062757420747279696e6720746f20636c6f7365206c6f616e584c6f616e4d61747572697479446174655061737365640010040101456d697473207768656e206d61747572697479206861732070617373656420616e6420626f72726f77657220747269656420746f20626f72726f77206d6f7265404c6f616e56616c7565496e76616c69640011049c456d697473207768656e2061206c6f616e20646174612076616c756520697320696e76616c6964404c6f616e4163637275654661696c6564001204a4456d697473207768656e206c6f616e206163637275652063616c63756c6174696f6e206661696c6564584c6f616e50726573656e7456616c75654661696c6564001304c0456d697473207768656e206c6f616e2070726573656e742076616c75652063616c63756c6174696f6e206661696c65642c4c6f616e4865616c746879001404c0456d697473207768656e20747279696e6720746f207772697465206f6666206f662061206865616c746879206c6f616e445772697474656e4f6666427941646d696e0015042501456d697473207768656e20747279696e6720746f207772697465206f6666206c6f616e207468617420776173207772697474656e206f66662062792061646d696e20616c7265616479504e6f56616c696457726974654f666647726f75700016042501456d697473207768656e207468657265206973206e6f2076616c6964207772697465206f66662067726f757020617661696c61626c6520666f7220756e6865616c746879206c6f616e64496e76616c696457726974654f666647726f7570496e6465780017042501456d697473207768656e207468657265206973206e6f2076616c6964207772697465206f66662067726f757073206173736f636961746564207769746820676976656e20696e64657850496e76616c696457726974654f666647726f7570001804a4456d697473207768656e206e6577207772697465206f66662067726f757020697320696e76616c696454546f6f4d616e7957726974654f666647726f757073001904e4456d697473207768656e20746865206d6178206e756d626572206f66207772697465206f66662067726f75707320776173207265616368656448546f6f4d616e794163746976654c6f616e73001a04d4456d697473207768656e20746865206d6178206e756d626572206f6620616374697665206c6f616e7320776173207265616368656404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909091108000004080075010015080830636f6d6d6f6e5f74797065733c5065726d697373696f6e526f6c6573100c4e6f770190204d696e44656c6179011908245472616e6368654964014501184d6f6d656e74012000100128706f6f6c5f61646d696e1d080138506f6f6c41646d696e526f6c657300013863757272656e63795f61646d696e2108014843757272656e637941646d696e526f6c65730001647065726d697373696f6e65645f61737365745f686f6c646572250801c85065726d697373696f6e656443757272656e6379486f6c646572733c4e6f772c204d696e44656c61792c204d6f6d656e743e0001407472616e6368655f696e766573746f72310801c85472616e636865496e766573746f72733c4e6f772c204d696e44656c61792c205472616e63686549642c204d6f6d656e743e00001908084c646576656c6f706d656e745f72756e74696d65204d696e44656c6179000000001d080830636f6d6d6f6e5f747970657338506f6f6c41646d696e526f6c657300000401106269747310010c753332000021080830636f6d6d6f6e5f74797065734843757272656e637941646d696e526f6c657300000401106269747310010c753332000025080830636f6d6d6f6e5f74797065736c5065726d697373696f6e656443757272656e6379486f6c646572730c0c4e6f770190204d696e44656c6179011908184d6f6d656e74012000040110696e666f290801b84f7074696f6e3c5065726d697373696f6e656443757272656e6379486f6c646572496e666f3c4d6f6d656e743e3e0000290804184f7074696f6e040454012d080108104e6f6e6500000010536f6d6504002d0800000100002d080830636f6d6d6f6e5f7479706573785065726d697373696f6e656443757272656e6379486f6c646572496e666f04184d6f6d656e740120000401447065726d697373696f6e65645f74696c6c2001184d6f6d656e74000031080830636f6d6d6f6e5f7479706573405472616e636865496e766573746f7273100c4e6f770190204d696e44656c6179011908245472616e6368654964014501184d6f6d656e74012000040110696e666f350801ac5665633c5472616e636865496e766573746f72496e666f3c5472616e63686549642c204d6f6d656e743e3e0000350800000239080039080830636f6d6d6f6e5f74797065734c5472616e636865496e766573746f72496e666f08245472616e6368654964014501184d6f6d656e740120000801287472616e6368655f6964450101245472616e63686549640001447065726d697373696f6e65645f74696c6c2001184d6f6d656e7400003d080c4870616c6c65745f7065726d697373696f6e731870616c6c6574144572726f7204045400011840526f6c65416c7265616479476976656e00000030526f6c654e6f74476976656e0001001c4e6f526f6c6573000200204e6f456469746f720003003c57726f6e67506172616d657465727300040030546f6f4d616e79526f6c657300050004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090941080c6470616c6c65745f636f6c6c61746f725f616c6c6f776c6973741870616c6c6574144572726f7204045400010c58436f6c6c61746f72416c7265616479416c6c6f776564000004d454686520636f6c6c61746f722068617320616c7265616479206265656e20616464656420746f2074686520616c6c6f776c6973742e40436f6c6c61746f724e6f745265616479000104510154686520636f6c6c61746f72206973206e6f742072656164792079657420666f6c6c6f77696e6720746f2074686520756e6465726c79696e672060543a3a56616c696461746f72526567697374726174696f6e6048436f6c6c61746f724e6f7450726573656e74000204cc5468652070726f766964656420636f6c6c61746f7220776173206e6f7420666f756e6420696e207468652073746f726167652e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090945080c6070616c6c65745f726573747269637465645f746f6b656e731870616c6c6574144572726f720404540001044c507265436f6e646974696f6e734e6f744d657400000004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090949080c4070616c6c65745f6e66745f73616c65731870616c6c6574144572726f72040454000114204e6f74466f756e64000004150141207573657220747269656420746f2061646420616e204e4654207468617420636f756c64206e6f7420626520666f756e6420696e20543a3a4e6f6e46756e6769626c6573204e6f744f776e657200010494546865206f726967696e206973206e6f7420746865206f776e6572206f6620616e204e465438416c7265616479466f7253616c65000204f4412073656c6c65722068617320617474656d7074656420746f2061646420616e204e4654207468617420697320616c726561647920666f722073616c65284e6f74466f7253616c65000304e8416e206f7065726174696f6e20657870656374656420616e204e465420746f20626520666f722073616c65207768656e206974206973206e6f7430496e76616c69644f666665720004081d01412062757965722773206d6178206f6666657220697320696e76616c69642c20692e652e2c20656974686572207468652063757272656e6379206f7220616d6f756e7420646964dc6e6f74206d6174636820746865206c61746573742061736b696e6720707269636520666f7220746865207461726765746564204e46542e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909094d080c2870616c6c65745f6e66741870616c6c6574144572726f7204045400010834496e76616c696450726f6f66730000041501556e61626c6520746f2072656372656174652074686520616e63686f7220686173682066726f6d207468652070726f6f667320616e6420646174612070726f76696465642e4c446f63756d656e744e6f74416e63686f72656400010449014120676976656e20646f63756d656e7420696420646f6573206e6f74206d61746368206120636f72726573706f6e64696e6720646f63756d656e7420696e2074686520616e63686f722073746f726167652e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090951080c3470616c6c65745f6272696467651870616c6c6574144572726f7204045400010c3c496e76616c69645472616e7366657200000440496e76616c6964207472616e736665724c496e73756666696369656e7442616c616e6365000104a84e6f7420656e6f756768206d65616e7320666f7220706572666f726d696e672061207472616e736665724c546f74616c416d6f756e744f766572666c6f77000204e8546f74616c20616d6f756e7420746f206265207472616e73666572726564206f766572666c6f77732062616c616e636520747970652073697a6504ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909095508085c70616c6c65745f696e7465726573745f6163637275616c2c5261746544657461696c730830496e74657265737452617465015501184d6f6d656e74012000080140616363756d756c617465645f7261746555010130496e746572657374526174650001306c6173745f757064617465642001184d6f6d656e74000059080c5c70616c6c65745f696e7465726573745f6163637275616c1870616c6c6574144572726f7204045400010c544465627443616c63756c6174696f6e4661696c656400000498456d697473207768656e2074686520646562742063616c63756c6174696f6e206661696c6564504465627441646a7573746d656e744661696c656400010494456d697473207768656e2074686520646562742061646a7573746d656e74206661696c6564284e6f5375636852617465000204a4456d697473207768656e2074686520696e746572657374207261746520776173206e6f74207573656404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909095d08000004080061080061080000040824ad01006508083c70616c6c65745f6b657973746f72650c4b6579082c426c6f636b4e756d62657201101c42616c616e636501180010011c707572706f7365ad0101284b6579507572706f73650001206b65795f74797065b101011c4b6579547970650001287265766f6b65645f61746d01014c4f7074696f6e3c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e6365000069080000040800ad01006d080c3c70616c6c65745f6b657973746f72651870616c6c6574144572726f72040454000114184e6f4b657973000004584e6f206b65797320776572652070726f76696465642e2c546f6f4d616e794b657973000104a04d6f7265207468616e20543a3a4d61784b657973206b65797320776572652070726f76696465642e404b6579416c72656164794578697374730002045c546865206b657920616c7265616479206578697374732e2c4b65794e6f74466f756e6400030484546865206b657920776173206e6f7420666f756e6420696e2073746f726167652e444b6579416c72656164795265766f6b656400040470546865206b65792077617320616c7265616479207265766f6b65642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090971080000027508007508086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572c1010118506172614964000114737461746579080130496e626f756e6453746174650001406d6573736167655f6d657461646174617d0801a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00007908086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e646564000100007d080000028108008108000004081085080085080c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000890800000408c10110008d080000029108009108086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74c10101185061726149640001147374617465950801344f7574626f756e6453746174650001347369676e616c735f6578697374b80110626f6f6c00012c66697273745f696e6465789c010c7531360001286c6173745f696e6465789c010c75313600009508086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000990800000408c1019c009d08086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c7533320001407468726573686f6c645f7765696768742001185765696768740001547765696768745f72657374726963745f646563617920011857656967687400016878636d705f6d61785f696e646976696475616c5f7765696768742001185765696768740000a1080000040cc101102800a5080c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909a9080c2870616c6c65745f78636d1870616c6c6574144572726f720404540001342c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909ad080c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909b108086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c2001185765696768740000b508086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656410012c50616765436f756e746572000120656e645f7573656410012c50616765436f756e7465720001406f7665727765696768745f636f756e7420013c4f766572776569676874496e6465780000b908000002bd0800bd0800000408102800c1080c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909c5080c306f726d6c5f78746f6b656e73186d6f64756c65144572726f7204045400014c4441737365744861734e6f5265736572766500000478417373657420686173206e6f2072657365727665206c6f636174696f6e2e544e6f7443726f7373436861696e5472616e73666572000104644e6f742063726f73732d636861696e207472616e736665722e2c496e76616c69644465737400020474496e76616c6964207472616e736665722064657374696e6174696f6e2e844e6f7443726f7373436861696e5472616e7366657261626c6543757272656e6379000304a443757272656e6379206973206e6f742063726f73732d636861696e207472616e7366657261626c652e48556e776569676861626c654d657373616765000404b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e4858636d457865637574696f6e4661696c65640005045458434d20657865637574696f6e206661696c65642e3843616e6e6f745265616e63686f72000608e8436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468654864657374696e6174696f6e20636861696e2e3c496e76616c6964416e636573747279000704c4436f756c64206e6f742067657420616e636573747279206f662061737365742072657365727665206c6f636174696f6e2e30496e76616c6964417373657400080468546865204d756c7469417373657420697320696e76616c69642e6044657374696e6174696f6e4e6f74496e7665727469626c65000904f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e2842616456657273696f6e000a08ec5468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626530696e7465727072657465642e7444697374696e637452657365727665466f724173736574416e64466565000b08fc57652074726965642073656e64696e672064697374696e637420617373657420616e6420666565206275742074686579206861766520646966666572656e743c7265736572766520636861696e732e1c5a65726f466565000c044054686520666565206973207a65726f2e285a65726f416d6f756e74000d0494546865207472616e73666572696e6720617373657420616d6f756e74206973207a65726f2e58546f6f4d616e794173736574734265696e6753656e74000e04d0546865206e756d626572206f662061737365747320746f2062652073656e74206973206f76657220746865206d6178696d756d2e544173736574496e6465784e6f6e4578697374656e74000f04ec5468652073706563696669656420696e64657820646f6573206e6f7420657869737420696e2061204d756c7469417373657473207374727563742e304665654e6f74456e6f75676800100448466565206973206e6f7420656e6f7567682e644e6f74537570706f727465644d756c74694c6f636174696f6e0011046c4e6f7420737570706f72746564204d756c74694c6f636174696f6e4c4d696e58636d4665654e6f74446566696e6564001204d44d696e58636d466565206e6f74207265676973746572656420666f72206365727461696e2072657365727665206c6f636174696f6e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909c9080000040800790100cd0810346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401d108045300000400d50801185665633c543e0000d108082c6f726d6c5f746f6b656e732c42616c616e63654c6f636b041c42616c616e63650118000801086964190201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e63650000d508000002d10800d908082c6f726d6c5f746f6b656e732c4163636f756e7444617461041c42616c616e63650118000c01106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e63650000dd0810346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401e108045300000400e50801185665633c543e0000e108082c6f726d6c5f746f6b656e732c52657365727665446174610844526573657276654964656e7469666965720119021c42616c616e6365011800080108696419020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000e508000002e10800e9080c2c6f726d6c5f746f6b656e73186d6f64756c65144572726f720404540001203442616c616e6365546f6f4c6f77000004585468652062616c616e636520697320746f6f206c6f775c416d6f756e74496e746f42616c616e63654661696c65640001049c43616e6e6f7420636f6e7665727420416d6f756e7420696e746f2042616c616e63652074797065544c69717569646974795265737472696374696f6e73000204d04661696c65642062656361757365206c6971756964697479207265737472696374696f6e732064756520746f206c6f636b696e67404d61784c6f636b734578636565646564000304b44661696c6564206265636175736520746865206d6178696d756d206c6f636b7320776173206578636565646564244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e74484578697374656e7469616c4465706f736974000504e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e79526573657276657300070004ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909ed080000040808f10800f1080000040820050400f5080c2c636861696e6272696467651474797065733450726f706f73616c566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000100124766f7465735f666f727c01385665633c4163636f756e7449643e000134766f7465735f616761696e73747c01385665633c4163636f756e7449643e000118737461747573f908013850726f706f73616c53746174757300011865787069727910012c426c6f636b4e756d6265720000f9080c2c636861696e6272696467651474797065733850726f706f73616c53746174757300010c24496e6974696174656400000020417070726f7665640001002052656a656374656400020000fd080c2c636861696e6272696467651870616c6c6574144572726f7204045400013c3c5468726573686f6c644e6f745365740000046452656c61796572207468726573686f6c64206e6f742073657438496e76616c6964436861696e49640001047850726f766964656420636861696e204964206973206e6f742076616c696440496e76616c69645468726573686f6c640002047452656c61796572207468726573686f6c642063616e6e6f7420626520304c436861696e4e6f7457686974656c6973746564000304b4496e746572616374696f6e732077697468207468697320636861696e206973206e6f74207065726d69747465645c436861696e416c726561647957686974656c697374656400040478436861696e2068617320616c7265616479206265656e20656e61626c6564505265736f75726365446f65734e6f744578697374000504b45265736f757263652049442070726f76696465642069736e2774206d617070656420746f20616e797468696e675052656c61796572416c72656164794578697374730006045852656c6179657220616c726561647920696e207365743852656c61796572496e76616c69640007048c50726f7669646564206163636f756e744964206973206e6f7420612072656c61796572344d757374426552656c61796572000804c450726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792072656c617965724c52656c61796572416c7265616479566f746564000904e452656c617965722068617320616c7265616479207375626d697474656420736f6d6520766f746520666f7220746869732070726f706f73616c5450726f706f73616c416c7265616479457869737473000a04ec412070726f706f73616c207769746820746865736520706172616d65746572732068617320616c7265616479206265656e207375626d69747465645050726f706f73616c446f65734e6f744578697374000b04844e6f2070726f706f73616c2077697468207468652049442077617320666f756e644c50726f706f73616c4e6f74436f6d706c657465000c04a843616e6e6f7420636f6d706c6574652070726f706f73616c2c206e65656473206d6f726520766f7465735c50726f706f73616c416c7265616479436f6d706c657465000d049c50726f706f73616c2068617320656974686572206661696c6564206f72207375636365656465643c50726f706f73616c45787069726564000e04984c69666574696d65206f662070726f706f73616c20686173206265656e20657863656564656404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a09090901090c4c6f726d6c5f61737365745f7265676973747279186d6f64756c65144572726f720404540001143441737365744e6f74466f756e6400000450417373657420776173206e6f7420666f756e642e2842616456657273696f6e00010809015468652076657273696f6e206f6620746865206056657273696f6e65644d756c74694c6f636174696f6e602076616c75652075736564206973206e6f742061626c6548746f20626520696e7465727072657465642e38496e76616c6964417373657449640002046054686520617373657420696420697320696e76616c69642e4c436f6e666c696374696e674c6f636174696f6e000304d8416e6f746865722061737365742077617320616c726561647920726567697374657220776974682074686973206c6f636174696f6e2e48436f6e666c696374696e6741737365744964000404d8416e6f746865722061737365742077617320616c7265616479207265676973746572207769746820746869732061737365742069642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909090509086070616c6c65745f6d6967726174696f6e5f6d616e616765723c4d6967726174696f6e53746174757300010c20496e6163746976650000001c4f6e676f696e6700010020436f6d706c6574650002000009090c6070616c6c65745f6d6967726174696f6e5f6d616e616765721870616c6c6574144572726f720404540001143c546f6f4d616e794163636f756e74730000042501546f6f206d616e79206163636f756e747320696e2074686520766563746f7220666f72207468652063616c6c206f6620606d6967726174655f73797374656d5f6163636f756e74602e3c546f6f4d616e7956657374696e67730001043501546f6f206d616e792076657374696e67496e666f7320696e2074686520766563746f7220666f72207468652063616c6c206f6620606d6967726174655f766574696e675f76657374696e67602e38546f6f4d616e7950726f786965730002041d01546f6f206d616e792070726f7869657320696e2074686520766563746f7220666f72207468652063616c6c206f6620606d6967726174655f70726f78795f70726f78696573602e644d6967726174696f6e416c7265616479436f6d706c657465640003044901496e6469636174657320746861742061206d6967726174696f6e2063616c6c2068617070656e65642c20616c74686f75676820746865206d6967726174696f6e20697320616c726561647920636c6f7365644c4f6e6c7946696e616c697a654f6e676f696e670004084d01496e64696361746573207468617420612066696e616c697a652063616c6c2068617070656e65642c20616c74686f75676820746865206d6967726174696f6e2070616c6c6574206973206e6f7420696e20616e446f6e676f696e67206d6967726174696f6e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909090d090c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c65741109102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730181031043616c6c010504245369676e61747572650125051445787472610115090004002800000015090000042019091d0921092509290931093509390900190910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e646572040454000000001d0910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000210910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000250910306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000290910306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004002d09010c45726100002d09102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000310910306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400d9010120543a3a496e6465780000350910306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000003909086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400e901013042616c616e63654f663c543e00003d09084c646576656c6f706d656e745f72756e74696d651c52756e74696d6500000000c41853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c600000000000000000000000000000000000000000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510248000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510280400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401002c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301003c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040224a1020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000a50204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100b80400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100b80400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500009902040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01ad0201481830426c6f636b57656967687473bd028501e0687c3e010000000088526a74000000b8201d050000000001480b8378510000000100e6bd4f57000000010000000000000000b8201d05000000000148ad17936e000000010088526a740000000100a2941a1d000000b8201d050000000000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468c9023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874d1024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ed50211034063656e747269667567652d646576656c4063656e747269667567652d646576656c01000000eb0300000100000030df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000bc9d89904f5b923f0100000037c8bb1350a9a2a801000000ea93e3f16f3d696202000000c937d79c92c4e872010000009ce8a204acbb12350100000001000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669789c08880014a8205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01e502003c50617261636861696e53797374656d013c50617261636861696e53797374656d505450656e64696e6756616c69646174696f6e436f64650100280400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000280400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000e90204000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100b8040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f60557067726164655265737472696374696f6e5369676e616c0100f10204001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000f902040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000010304001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000011030400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100150380000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301001903040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100250304000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100b90204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100b902040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000200400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000200400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a656455706772616465000024040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100002804000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e012d03016c00015103016052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100550304000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000022454696d657374616d70012454696d657374616d70080c4e6f7701002020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100b8040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0159030004344d696e696d756d506572696f6420207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00033450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100c10110640000000000000000042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402005d03040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402006d03040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e3853746f7261676556657273696f6e0100790304000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e00a020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e017d0301700c484578697374656e7469616c4465706f73697418400010a5d4e8000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01890314485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201008d0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01009103040000000004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e001544436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c657301007c0400048c2054686520696e76756c6e657261626c652c20666978656420636f6c6c61746f72732e2843616e6469646174657301009503040004bc205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e019d0301780001a1034728417574686f72736869700128417574686f72736869700c18556e636c65730100a5030400041c20556e636c657318417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e30446964536574556e636c65730100b8040004bc205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e01ad03000440556e636c6547656e65726174696f6e731010050000000ccc20546865206e756d626572206f6620626c6f636b73206261636b2077652073686f756c642061636365707420756e636c65732ee42054686973206d65616e7320746861742077652077696c6c206465616c207769746820756e636c652d706172656e7473207468617420617265942060556e636c6547656e65726174696f6e73202b203160206265666f726520606e6f77602e01bd031e1c53657373696f6e011c53657373696f6e1c2856616c696461746f727301007c0400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100b8040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100c1030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100d5030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500c9030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405d90300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01e10301800001e5031f1041757261011041757261082c417574686f7269746965730100e9030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100f1032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000201c41757261457874011c41757261457874042c417574686f7269746965730100ed03040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e0000000021204d756c746973696701204d756c746973696708244d756c7469736967730001080502f503f903040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e1443616c6c730001040604fd0304000001090401840c2c4465706f73697442617365184000009e1869d02904000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f7218400000c52ebca2b10000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f726965739c08640004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e0151063c1450726f7879011450726f7879081c50726f7869657301010405003d064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500550644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e0111040194184050726f78794465706f73697442617365184000009e1869d02904000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f7218400000c52ebca2b100000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f73697442617365184000007f80a935be08000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000008cde04bff436000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0165063d1c5574696c6974790001190401a0044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e0169063e245363686564756c657201245363686564756c657208184167656e646101010405106d060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040528a80400040101204c6f6f6b75702066726f6d206964656e7469747920746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e01390401a408344d6178696d756d576569676874202000a0db215d00000008450120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c6573206f66206c657373a4207072696f72697479207468616e20607363686564756c653a3a484152445f444541444c494e45602e504d61785363686564756c6564506572426c6f636b101032000000081d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e0179063f1c436f756e63696c011c436f756e63696c182450726f706f73616c7301007d06040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406240504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406248106040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d6265727301007c0400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01450401b4000185064024456c656374696f6e730124456c656374696f6e73141c4d656d626572730100890604000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100890604001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e646964617465730100c00400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e6701010405009106840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01490401bc1c2050616c6c65744964190220706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e6418400000a0dec5adc935360000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e644261736518400000b2d3595bf006000000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f7218400000b2d3595bf00600000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d626572731010070000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e65727355701010030000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e1010e0c400000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e019506412444656d6f6372616379012444656d6f6372616379343c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301009906040004210120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c277320686173682e244465706f7369744f660001040510a10604000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e24507265696d616765730001040624a5060400086101204d6170206f662068617368657320746f207468652070726f706f73616c20707265696d6167652c20616c6f6e6720776974682077686f207265676973746572656420697420616e64207468656972206465706f7369742ee42054686520626c6f636b206e756d6265722069732074686520626c6f636b20617420776869636820697420776173206465706f73697465642e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040510a90604000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500b506d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100b80400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000c906040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040624cd0604000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040624b80400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e3853746f7261676556657273696f6e0000d10604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e0098204e6577206e6574776f726b732073746172742077697468206c6173742076657273696f6e2e01510401c82c3c456e6163746d656e74506572696f64101000e1000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641010e0c4000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641010e0c4000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f64101000e10000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400000e8890423c78a000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564b804000c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f6410108403000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641010e0c4000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e4c507265696d616765427974654465706f73697418400000869eae29d50000000000000000000429012054686520616d6f756e74206f662062616c616e63652074686174206d757374206265206465706f7369746564207065722062797465206f6620707265696d6167652073746f7265642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e01d50642204964656e7469747901204964656e7469747910284964656e746974794f660001040500d90604000c210120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200e9040400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500e90644000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e28526567697374726172730100f1060400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e01590401d8183042617369634465706f7369741840000010632d5ec76b050000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f73697418400000c4588bd7f15a0100000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000d01309468e1501000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e4c4d61784164646974696f6e616c4669656c6473101064000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4fe020726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e010107431c56657374696e67011c56657374696e67081c56657374696e6700010402000507040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e01000d0704000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01f90401dc08444d696e5665737465645472616e7366657218400000e8890423c78a000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001110744205472656173757279012054726561737572790c3450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051015070400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e24417070726f76616c7301001907040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01010501e01c3050726f706f73616c426f6e641d071050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000010632d5ec76b0500000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d41014401000050efe2d6e41a1b00000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641010c04b0300048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e1d0710102700000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c6574496421072070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e012507451c556e6971756573011c556e69717565732414436c61737300010402202907040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402002004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202022d0790040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e74000108020231079004000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e144173736574000108020235073907040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f6600010402203d0704000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f6600010802023507410704000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c02020245074907040004702041747472696275746573206f66206120636f6c6c656374696f6e2e4c436f6c6c656374696f6e4d6178537570706c79000104022010040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e01050501e42044436f6c6c656374696f6e4465706f7369741840000064a7b3b6e00d00000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000008a5d78456301000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184000008a5d784563010000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000008a5d7845630100000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400000c16ff2862300000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410100001000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410100001000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e014d074620507265696d6167650120507265696d6167650824537461747573466f72000104062451070400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406245907040004942054686520707265696d616765732073746f72656420627920746869732070616c6c65742e01110501fc00015d0748104665657301104665657304104665657300010401246107040004c82053746f726573207468652046656573206173736f636961746564207769746820612048617368206964656e746966696572011505010101000165075a18416e63686f720118416e63686f722428507265436f6d6d69747300010401246907040004bd0120507265436f6d6d6974732073746f726520746865206d6170206f6620616e63686f7220496420746f20746865207072652d636f6d6d69742c2077686963682069732061206c6f636b206f6e20616e20616e63686f7220696420746f20626520636f6d6d6974746564206c6174657260507265436f6d6d69744576696374696f6e4275636b657473000104016d07240400043501205072652d636f6d6d6974206576696374696f6e206275636b657473206d61707320626c6f636b206e756d62657220616e64206275636b6574494420746f20507265436f6d6d6974204861736870507265436f6d6d69744576696374696f6e4275636b6574496e646578000104011020040004f8205072652d636f6d6d6974206576696374696f6e206275636b657420696e646578206d61707320626c6f636b206e756d62657220746f206275636b65742e40416e63686f7245766963744461746573000104012410040004c4204d617020746f2066696e6420746865206576696374696f6e206461746520676976656e20616e20616e63686f7220696434416e63686f72496e646578657300010401202404000478204d617020746f2066696e6420616e63686f72494420627920696e646578444c6174657374416e63686f72496e646578000020040004b4204c617465737420616e63686f72656420696e64657820746861742077617320726563656e746c792075736564604c617465737445766963746564416e63686f72496e64657800002004000c6501204c6174657374206576696374656420616e63686f7220696e6465782e205468697320776f756c64206b65657020747261636b206f6620746865206c6174657374206576696374656420616e63686f7220696e64657820736f5d0120746861742077652063616e207374617274207468652072656d6f76616c206f6620416e63686f724576696374446174657320696e6465782066726f6d207468617420696e646578206f6e77617264732e20476f696e679c2066726f6d20416e63686f72496e6465786573203d3e20416e63686f7245766963744461746573444c617465737445766963746564446174650000100400085d01205468697320697320746f206b65657020747261636b206f66207468652064617465207768656e2061206368696c642074726965206f6620616e63686f7273207761732065766963746564206c6173742e204974206973590120746f20657669637420686973746f72696320616e63686f722064617461206368696c64207472696573206966207468657920776572656e2774206576696374656420696e20612074696d656c79206d616e6e65722e4845766963746564416e63686f72526f6f74730001040110280400105d012053746f7261676520666f72206576696374656420616e63686f72206368696c64207472696520726f6f74732e20416e63686f72732077697468206120676976656e206578706972792f6576696374696f6e20646174656101206172652073746f726564206f6e2d636861696e20696e20612073696e676c65206368696c6420747269652e2054686973206368696c6420747269652069732072656d6f7665642061667465722074686520657870697279510120646174652068617320706173736564207768696c652069747320726f6f742069732073746f726564207065726d616e656e746c7920666f722070726f76696e6720616e206578697374656e6365206f6620616e40206576696374656420616e63686f722e01190500000171075b18436c61696d730118436c61696d730c38436c61696d6564416d6f756e7473010104020018400000000000000000000000000000000004a020546f74616c20636c61696d656420616d6f756e747320666f7220616c6c206163636f756e74732e20526f6f7448617368000024040004210120526f6f742068617368207468617420636f72726573706f6e6420746f206c69737473206f662072657761726420636c61696d20616d6f756e747320706572206163636f756e742e3455706c6f61644163636f756e74000000040004cc204163636f756e74207468617420697320616c6c6f77656420746f2075706c6f6164206e657720726f6f74206861736865732e011d05010501084c4d696e696d616c5061796f7574416d6f756e7418400000f44482916345000000000000000010e0204d696e696d616c20616d6f756e7420746861742063616e20626520636c61696d656420666f72206120726577617264207061796f75742e00e501205468697320636f6e7374616e742069732073657420766961205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f74797065732988206d6163726f207768656e20636f6e6669677572696e6720612072756e74696d652e2050616c6c65744964210720702f636c61696d7310410120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f726520746865206d6f64756c65206964656e74696669657220666f72207468652070616c6c65742e00390120546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d2060606050616c6c65744964282a622272642f636c61696d222960606020616e6420736574a901207573696e6720746865205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f7479706573290175075c3843726f77646c6f616e436c61696d013843726f77646c6f616e436c61696d2034436f6e747269627574696f6e73000024040004fc20526f6f74206f662068617368206f66207468652072656c617920636861696e206174207468652074696d65206f6620696e697469616c697a6174696f6e2e204c6f636b656441740000100400004843726f77646c6f616e54726965496e64657800001004000c35012054726965496e646578206f66207468652063726f77646c6f616e2063616d706169676e20696e73696465207468652072656c61792d636861696e2063726f77646c6f616e2070616c6c65742e000d012054686973206973206e656564656420696e206f7264657220746f206275696c642074686520636f7272656374206b65797320666f722070726f6f6620636865636b2e3c50726f636573736564436c61696d73000104027907b80400045d012041206d617020636f6e7461696e696e6720746865206c697374206f6620636c61696d7320666f7220726577617264207061796f75747320746861742077657265207375636365737366756c792070726f6365737365642443757272496e6465780100101000000000002450726576496e646578010010100000000000284c6561736553746172740100101000000000002c4c65617365506572696f64010010100000000000012105010901042050616c6c6574496421072063632f636c61696d0c410120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f7265207468652070616c6c6574206964656e74696669657220666f72207468652070616c6c65742e001d01205468652070616c6c6574206964656e746966696572206d6179206265206f662074686520666f726d2060606050616c6c65744964282a622263632f636c61696d22296060602e017d075d3c43726f77646c6f616e526577617264013c43726f77646c6f616e5265776172640c444469726563745061796f7574526174696f010011011000c2eb0b047d0120576869636820726174696f206f6620746865207265776172647320617265207061796564206469726563746c792e205468652072657374206973207472616e736665727265642076696120612076657374696e67207363686564756c652e3456657374696e67506572696f64000010040004c0204f76657220776869636820706572696f64206172652074686520636f6e747269627574696f6e73207665737465642e3056657374696e675374617274000010040004b820417420776869636820626c6f636b206e756d62657220646f6573207468652076657374696e672073746172742e014105010d01042050616c6c6574496421072063632f726577726454410120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f726520746865206d6f64756c65206964656e74696669657220666f72207468652070616c6c65742e002d0120546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d2060606050616c6c65744964282a622263632f7277726422296060602e2054686973050120636f6e7374616e7420697320736574207768656e206275696c64696e67207468697320636f6e66696720747261697420666f72207468652072756e74696d652e00282023204578616d706c653c20606060727573742c69676e6f726500d8202f2f20506172616d65746572697a652063726f77646c6f616e207265776172642070616c6c657420636f6e66696775726174696f6e4c20706172616d657465725f747970657321207b1d0120202070756220636f6e73742043726f77646c6f616e52657761726450616c6c657449643a2050616c6c65744964203d2050616c6c65744964282a622263632f7277726422293b08207d002d01202f2f20496d706c656d656e742063726f77646c6f616e207265776172642070616c6c6574277320636f6e66696775726174696f6e20747261697420666f72207468652072756e74696d65d020696d706c2070616c6c65745f63726f77646c6f61726e5f7265776172643a3a436f6e66696720666f722052756e74696d65207b5820202074797065204576656e74203d204576656e743b602020207479706520576569676874496e666f203d2028293bac202020747970652050616c6c65744964203d2043726f77646c6f616e52657761726450616c6c657449643b08207d0010206060600181075e14506f6f6c730114506f6f6c731c10506f6f6c000104022085070400003c5363686564756c65645570646174650001040220bd07040000144f726465720001080202c107c5070400001445706f63680001080202c907cd070400003845706f6368457865637574696f6e0001040220d107040000384163636f756e744465706f7369740101040200184000000000000000000000000000000000002c506f6f6c4465706f7369740001040220e5070400000145050115012c2050616c6c65744964210720726f632f706f6f6c00344368616c6c656e676554696d6510100a000000043c204368616c6c656e67652074696d654c44656661756c744d696e45706f636854696d6520202c01000000000000046020506f6f6c20706172616d657465722064656661756c74734044656661756c744d61784e415641676520203c0000000000000000584d696e45706f636854696d654c6f776572426f756e6420200100000000000000045820506f6f6c20706172616d6574657220626f756e6473584d696e45706f636854696d655570706572426f756e642020008d270000000000004c4d61784e41564167655570706572426f756e642020100e00000000000000384d696e55706461746544656c617920200000000000000000045420506f6f6c207570646174652073657474696e67733c4d617853697a654d6574616461746110102e0000000454204d61782073697a65206f66204d657461646174612c4d61785472616e63686573101005000000045c204d6178206e756d626572206f66205472616e636865732c506f6f6c4465706f7369741840000010632d5ec76b050000000000000004c82054686520616d6f756e742074686174206d75737420626520726573657276656420746f20637265617465206120706f6f6c01e9075f144c6f616e7301144c6f616e732048506f6f6c546f4c6f616e4e6674436c617373000104022020040004c82053746f72657320746865206c6f616e206e667420636c61737320494420616761696e7374206120676976656e20706f6f6c484c6f616e4e6674436c617373546f506f6f6c000104022020040008ac2053746f7265732074686520706f6f6c494420616761696e737420436c61737349642061732061206b65794101207468697320697320612072657665727365206c6f6f6b7570207573656420746f20656e737572652074686520636f6c6c61746572616c20697473656c66206973206e6f742061204c6f616e204e6674284e6578744c6f616e4964010104022018400100000000000000000000000000000004ac2053746f72657320746865206e657874206c6f616e20746f6b656e494420746f2062652063726561746564104c6f616e00010802023507ed07040004c02053746f72657320746865206c6f616e20696e666f20666f7220676976656e20706f6f6c20616e64206c6f616e2069642c4163746976654c6f616e730101040220f5070400002c436c6f7365644c6f616e7300010802023507f9070400001c506f6f6c4e4156000104022005080400048c2053746f7265732074686520706f6f6c206e617620616761696e737420706f6f6c496448506f6f6c57726974654f666647726f75707301010402200908040004e42053746f7265732074686520706f6f6c206173736f63696174656420776974682074686520697473207772697465206f66662067726f757073016505014d010c344c6f616e7350616c6c65744964210720726f632f6c6f616e04742050616c6c65744944206f662074686973206c6f616e206d6f64756c65544d61784163746976654c6f616e73506572506f6f6c1010320000000494204d6178206e756d626572206f6620616374697665206c6f616e732070657220706f6f6c2e444d617857726974654f666647726f75707310100a00000004a4204d6178206e756d626572206f662077726974652d6f66662067726f7570732070657220706f6f6c2e010d08602c5065726d697373696f6e73012c5065726d697373696f6e7308285065726d697373696f6e0001080202110815080400003c5065726d697373696f6e436f756e7400010402750110040000016d0501710104404d6178526f6c657350657253636f70651010e803000000013d086144436f6c6c61746f72416c6c6f776c6973740144436f6c6c61746f72416c6c6f776c6973740424416c6c6f776c697374000104010090040008682054686520636f6c6c61746f72277320616c6c6f776c6973742e1d01204e6f74653a20576520696d706c656d656e74206974206173206120636c6f73652d656e6f75676820486173685365743a204d61703c56616c696461746f7249642c2028293e2e017105018901000141086218546f6b656e7300017505018d010001450863204e667453616c657301204e667453616c6573081453616c65730001080202350795010400084820546865206163746976652073616c65732e010120412073616c6520697320616e20656e747279206964656e74696669656420627920616e204e465420636f6c6c656374696f6e20616e64206974656d2069642e304e667473427953656c6c657201010c0202022d0790001058204e6674206c6f6f6b75702062792073656c6c65722e0009012057652075736520746869732073746f7261676520746f20656666696369656e746c79206c6f6f6b20757020746865204e465473206265696e6720736f6c642062795420616e206163636f756e74202873656c6c6572292e017905019101042050616c6c6574496421072070616c2f6e667473045820546865204964206f6620746869732070616c6c657401490864104e66747300017d05019d01081848617368496404800000000000000000000000000000000cb3858f3e48815bfd35c5347aa3b34c011048205265736f7572636520686173682069642e002501205468697320747970652077617320696e697469616c6c79206465636c6172656420696e20746865206272696467652070616c6c65742062757420776173206d6f76656420686572658020746f2061766f69642063697263756c617220646570656e64656e636965732e544e667450726f6f6656616c69646174696f6e46656518400000e8890423c78a0000000000000000041901204164646974696f6e616c20666565206368617267656420666f722076616c69646174696e67204e46542070726f6f6620287768656e206d696e74696e672061204e4654292e014d086718427269646765011842726964676508584e6174697665546f6b656e5472616e7366657246656501001840000040bd8b5b936b6c00000000000000004c4e6674546f6b656e5472616e73666572466565010018400000d01309468e1501000000000000000001890501a101103842726964676550616c6c65744964210720632f627269646765144c2050616c6c6574206964656e7469666965722e00950120546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d2060606050616c6c65744964282a6222632f627269646765222960606020286120737472696e67206f66206569676874206368617261637465727329c90120616e6420736574207573696e6720746865205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f747970657329cc206d6163726f20696e206f6e65206f66207468652072756e74696d657320287365652072756e74696d6520666f6c646572292e344e6174697665546f6b656e4964048000000000000000000000000000000009e974040e705c10fb4de576d6cc26190100584e6174697665546f6b656e5472616e736665724665651840000040bd8b5b936b6c00000000000000048901205479706520666f722073657474696e67206665652074686174206172652063686172676564207768656e207472616e7366657272696e67206e617469766520746f6b656e7320746f2074617267657420636861696e732028696e2043464773292e4c4e6674546f6b656e5472616e7366657246656518400000d01309468e150100000000000000047d01205479706520666f722073657474696e67206665652074686174206172652063686172676564207768656e207472616e7366657272696e67204e465420746f6b656e7320746f2074617267657420636861696e732028696e2043464773292e015108653c496e7465726573744163637275616c013c496e7465726573744163637275616c04105261746500010402550155080400000001a5010001590866204b657973746f726501204b657973746f72650c104b65797300010802025d08650804000480204b6579732074686174206172652063757272656e746c792073746f7265642e404c6173744b65794279507572706f73650001080202690824040004c42053746f72616765207573656420666f722072657472696576696e67206c617374206b657920627920707572706f73652e284b65794465706f73697401001840000010632d5ec76b05000000000000000405012053746f726573207468652063757272656e74206465706f73697420746861742077696c6c2062652074616b656e207768656e20736176696e672061206b65792e018d0501a901041c4d61784b65797310100a00000004d0204d6178696d756d206e756d626572206f66206b65797320746861742063616e20626520616464656420617420612074696d652e016d08682458636d705175657565012458636d7051756575652444496e626f756e6458636d70537461747573010071080400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205890828040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d7053746174757301008d080400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205990828040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402c10128040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e66696701009d0890020000000500000001000000a086010000000000020000000000000000c817a8040000000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f7665727765696768740001040520a108040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e3c4f766572776569676874436f756e7401002020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100b804000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01990501b5010001a508782c506f6c6b61646f7458636d00019d0501c5010001a908792843756d756c757358636d0000015d020001ad087a20446d7051756575650120446d7051756575651034436f6e66696775726174696f6e0100b1082000e40b5402000000044c2054686520636f6e66696775726174696f6e2e2450616765496e6465780100b5084000000000000000000000000000000000044020546865207061676520696e6465782e1450616765730101040210b90804000444205468652071756575652070616765732e284f7665727765696768740001040220bd080400046420546865206f766572776569676874206d657373616765732e0101060161020001c1087b1c58546f6b656e73011c58546f6b656e7300010506016502083053656c664c6f636174696f6ecd0114010100411f04542053656c6620636861696e206c6f636174696f6e2e344261736558636d576569676874202000e1f50500000000104420426173652058434d207765696768742e00f8205468652061637475616c6c792077656967687420666f7220616e2058434d206d6573736167652069732060543a3a4261736558636d576569676874202b6c20543a3a576569676865723a3a77656967687428266d736729602e01c5087c284f726d6c546f6b656e7301284f726d6c546f6b656e731034546f74616c49737375616e636501010405790118400000000000000000000000000000000004902054686520746f74616c2069737375616e6365206f66206120746f6b656e20747970652e144c6f636b730101080205c908cd08040008d820416e79206c6971756964697479206c6f636b73206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e204163636f756e74730101080205c908d908c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b8205468652062616c616e6365206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e00fc204e4f54453a2049662074686520746f74616c2069732065766572207a65726f2c206465637265617365206163636f756e7420726566206163636f756e742e001901204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f7265282062616c616e6365732e2052657365727665730101080205c908dd08040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e0001690208204d61784c6f636b73101032000000002c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01e908962c436861696e427269646765012c436861696e427269646765182c436861696e4e6f6e636573000104010820040004fc20416c6c2077686974656c697374656420636861696e7320616e642074686569722072657370656374697665207472616e73616374696f6e20636f756e74735052656c61796572566f74655468726573686f6c64010010100100000004cc204e756d626572206f6620766f74657320726571756972656420666f7220612070726f706f73616c20746f20657865637574652052656c61796572730101040100b80400046c20547261636b732063757272656e742072656c61796572207365743052656c61796572436f756e7401001010000000000468204e756d626572206f662072656c617965727320696e2073657414566f7465730001080101ed08f5080400085420416c6c206b6e6f776e2070726f706f73616c732e2d0120546865206b6579206973207468652068617368206f66207468652063616c6c20616e6420746865206465706f7369742049442c20746f20656e73757265206974277320756e697175652e245265736f75726365730001040104280400041901205574696c697a6564206279207468652062726964676520736f66747761726520746f206d6170207265736f757263652049447320746f2061637475616c206d6574686f6473011506016d02101c436861696e4964080401087c20546865206964656e74696669657220666f72207468697320636861696e2e6d012054686973206d75737420626520756e6971756520616e64206d757374206e6f7420636f6c6c6964652077697468206578697374696e67204944732077697468696e206120736574206f66206272696467656420636861696e732e2050616c6c6574496421072063686e627264676510410120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f726520746865206d6f64756c65206964656e74696669657220666f72207468652070616c6c65742e00390120546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d2060606050616c6c65744964282a622263686e6272646765222960606020616e6420736574a901207573696e6720746865205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f7479706573294050726f706f73616c4c69666574696d651010f4010000005052656c61796572566f74655468726573686f6c64101001000000040502205479706520666f722073657474696e6720696e697469616c206e756d626572206f6620766f74657320726571756972656420666f7220612070726f706f73616c20746f2062652065786563757465642028736565205b52656c61796572566f74655468726573686f6c645d20696e2073746f726167652073656374696f6e292e01fd0897444f726d6c4173736574526567697374727901444f726d6c417373657452656769737472790c204d657461646174610001040579017d02040004bc20546865206d65746164617461206f6620616e2061737365742c20696e64657865642062792061737365742069642e444c6f636174696f6e546f4173736574496400010405cd0179010400080501204d6170732061206d756c74696c6f636174696f6e20746f20616e206173736574206964202d2075736566756c207768656e2070726f63657373696e672078636d28206d657373616765732e2c4c61737441737365744964010079010400040d0120546865206c6173742070726f636573736564206173736574206964202d2075736564207768656e2061737369676e696e6720612073657175656e7469616c2069642e0119060179020001010998244d6967726174696f6e01244d6967726174696f6e041853746174757301000509040000012906018d020c504d6967726174696f6e4d61784163636f756e747310106400000004e0204d6178696d756d206e756d626572206f66206163636f756e747320746861742063616e206265206d69677261746564206174206f6e6365504d6967726174696f6e4d617856657374696e677310100a00000004e0204d6178696d756d206e756d626572206f662076657374696e677320746861742063616e206265206d69677261746564206174206f6e63654c4d6967726174696f6e4d617850726f7869657310100a00000004e0204d6178696d756d206e756d626572206f662076657374696e677320746861742063616e206265206d69677261746564206174206f6e6365010909c7105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e014d0601910200010d09c81109042048436865636b4e6f6e5a65726f53656e64657219099040436865636b5370656356657273696f6e1d091038436865636b547856657273696f6e21091030436865636b47656e6573697325092438436865636b4d6f7274616c69747929092428436865636b4e6f6e63653109902c436865636b576569676874350990604368617267655472616e73616374696f6e5061796d656e743909903d09" +var MetadataHex = "0x6d6574610e110c000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365f503011450686173650001146576656e744c010445000118746f70696373c50301185665633c543e00004c084c646576656c6f706d656e745f72756e74696d653052756e74696d654576656e740001d81853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000003c50617261636861696e53797374656d04007401bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0001002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e001400485472616e73616374696f6e5061796d656e7404008001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e00150044436f6c6c61746f7253656c656374696f6e04008401a470616c6c65745f636f6c6c61746f725f73656c656374696f6e3a3a4576656e743c52756e74696d653e0047001c53657373696f6e04008c015470616c6c65745f73657373696f6e3a3a4576656e74001f00204d756c7469736967040090017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e003c001450726f78790400a0017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e003d001c5574696c6974790400ac015470616c6c65745f7574696c6974793a3a4576656e74003e00245363686564756c65720400b0018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e003f001c436f756e63696c0400bc01fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00400024456c656374696f6e730400c401a470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4576656e743c52756e74696d653e0041002444656d6f63726163790400d0018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e004200204964656e746974790400e0017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0043001c56657374696e670400e4017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e0044002054726561737572790400e8017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0045001c556e69717565730400ec017870616c6c65745f756e69717565733a3a4576656e743c52756e74696d653e00460020507265696d61676504000901017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e004800104665657304000d01016c70616c6c65745f666565733a3a4576656e743c52756e74696d653e005a0018436c61696d7304001501017470616c6c65745f636c61696d733a3a4576656e743c52756e74696d653e005c003843726f77646c6f616e436c61696d04001901019870616c6c65745f63726f77646c6f616e5f636c61696d3a3a4576656e743c52756e74696d653e005d003c43726f77646c6f616e52657761726404001d01019c70616c6c65745f63726f77646c6f616e5f7265776172643a3a4576656e743c52756e74696d653e005e0028506f6f6c53797374656d04002501018870616c6c65745f706f6f6c5f73797374656d3a3a4576656e743c52756e74696d653e005f00144c6f616e7304009d01018070616c6c65745f6c6f616e735f7265663a3a4576656e743c52756e74696d653e0060002c5065726d697373696f6e730400f901018870616c6c65745f7065726d697373696f6e733a3a4576656e743c52756e74696d653e00610044436f6c6c61746f72416c6c6f776c69737404000d0201a470616c6c65745f636f6c6c61746f725f616c6c6f776c6973743a3a4576656e743c52756e74696d653e00620018546f6b656e730400110201a070616c6c65745f726573747269637465645f746f6b656e733a3a4576656e743c52756e74696d653e006300204e667453616c657304001502018070616c6c65745f6e66745f73616c65733a3a4576656e743c52756e74696d653e0064001842726964676504002102017470616c6c65745f6272696467653a3a4576656e743c52756e74696d653e0065003c496e7465726573744163637275616c04002502019c70616c6c65745f696e7465726573745f6163637275616c3a3a4576656e743c52756e74696d653e006600104e66747304002902016870616c6c65745f6e66743a3a4576656e743c52756e74696d653e006700204b657973746f726504002d02017c70616c6c65745f6b657973746f72653a3a4576656e743c52756e74696d653e0068002c496e766573746d656e747304003902018870616c6c65745f696e766573746d656e74733a3a4576656e743c52756e74696d653e0069001c526577617264730400550201e470616c6c65745f726577617264733a3a4576656e743c52756e74696d652c2070616c6c65745f726577617264733a3a496e7374616e6365313e006a00404c6971756964697479526577617264730400610201a070616c6c65745f6c69717569646974795f726577617264733a3a4576656e743c52756e74696d653e006b0028436f6e6e6563746f727304008902018470616c6c65745f636f6e6e6563746f72733a3a4576656e743c52756e74696d653e006c0030506f6f6c52656769737472790400dd02019070616c6c65745f706f6f6c5f72656769737472793a3a4576656e743c52756e74696d653e006d0040426c6f636b52657761726473426173650400e50201e470616c6c65745f726577617264733a3a4576656e743c52756e74696d652c2070616c6c65745f726577617264733a3a496e7374616e6365323e006e0030426c6f636b526577617264730400e902019070616c6c65745f626c6f636b5f726577617264733a3a4576656e743c52756e74696d653e006f002458636d7051756575650400f90201a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0078002c506f6c6b61646f7458636d04000903016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0079002843756d756c757358636d04006d03018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e007a0020446d7051756575650400710301a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e007b001c58546f6b656e730400750301706f726d6c5f78746f6b656e733a3a4576656e743c52756e74696d653e007c003458636d5472616e736163746f7204007903019470616c6c65745f78636d5f7472616e736163746f723a3a4576656e743c52756e74696d653e007d00284f726d6c546f6b656e7304008d03016c6f726d6c5f746f6b656e733a3a4576656e743c52756e74696d653e0096002c436861696e42726964676504009103016c636861696e6272696467653a3a4576656e743c52756e74696d653e009700444f726d6c4173736574526567697374727904009d03018c6f726d6c5f61737365745f72656769737472793a3a4576656e743c52756e74696d653e0098001c4f726d6c58636d0400b10301606f726d6c5f78636d3a3a4576656e743c52756e74696d653e009900244d6967726174696f6e0400b50301a070616c6c65745f6d6967726174696f6e5f6d616e616765723a3a4576656e743c52756e74696d653e00c700105375646f0400b903016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e00c8000c45564d0400bd03016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e00a0001c426173654665650400c903015870616c6c65745f626173655f6665653a3a4576656e7400a20020457468657265756d0400d103015870616c6c65745f657468657265756d3a3a4576656e7400a30000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d10015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f686173682c011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7410010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564200118576569676874000120646d715f686561642c014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909840c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144576656e74040454000114404e6577496e76756c6e657261626c6573040134696e76756c6e657261626c65738801445665633c543a3a4163636f756e7449643e000000504e65774465736972656443616e64696461746573040148646573697265645f63616e6469646174657310010c753332000100404e657743616e646964616379426f6e6404012c626f6e645f616d6f756e7418013042616c616e63654f663c543e0002003843616e64696461746541646465640801286163636f756e745f6964000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e0003004043616e64696461746552656d6f7665640401286163636f756e745f6964000130543a3a4163636f756e74496400040004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098800000200008c0c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909900c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7494016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e7494016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c749801384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e7494016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090994083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000980418526573756c74080454019c044501600108084f6b04009c000000000c45727204006000000100009c0000040000a00c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c749801384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065a40130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578a8010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065a40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065a40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a4084c646576656c6f706d656e745f72756e74696d652450726f7879547970650001300c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e6365000200205f5374616b696e67000300204e6f6e50726f787900040018426f72726f7700050018496e766573740006003c50726f78794d616e6167656d656e74000700484b657973746f72654d616e6167656d656e7400080030506f644f7065726174696f6e0009001c506f6441757468000a00505065726d697373696f6e4d616e6167656d656e74000b0000a80000050400ac0c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c749801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b00c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bb4016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964b801404f7074696f6e3c5461736b4e616d653e000118726573756c749801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bb4016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964b801404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bb4016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964b801404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bb4016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964b801404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652eb400000408101000b804184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000bc0c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c6410012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564c00110626f6f6c00010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c749801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c749801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c79657310012c4d656d626572436f756e740001086e6f10012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00000050000c40c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144576656e7404045400011c1c4e65775465726d04012c6e65775f6d656d62657273c801ec5665633c283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c2042616c616e63654f663c543e293e000014450141206e6577207465726d2077697468206e65775f6d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e550174686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e65644501666f72207468697320707572706f73652e204120604e65775465726d285c5b5c5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e645501736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f2c626567696e20776974682e24456d7074795465726d00010831014e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6dc8604e65775465726d285c5b5c5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e34456c656374696f6e4572726f72000204e4496e7465726e616c206572726f722068617070656e6564207768696c6520747279696e6720746f20706572666f726d20656c656374696f6e2e304d656d6265724b69636b65640401186d656d6265720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000308410141206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f723060456d7074795465726d602e2452656e6f756e63656404012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400040498536f6d656f6e65206861732072656e6f756e6365642074686569722063616e6469646163792e4043616e646964617465536c617368656408012463616e6469646174650001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0005103901412063616e6469646174652077617320736c617368656420627920616d6f756e742064756520746f206661696c696e6720746f206f627461696e20612073656174206173206d656d626572206f722872756e6e65722d75702e00e44e6f74652074686174206f6c64206d656d6265727320616e642072756e6e6572732d75702061726520616c736f2063616e646964617465732e4453656174486f6c646572536c617368656408012c736561745f686f6c6465720001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000604350141207365617420686f6c6465722077617320736c617368656420627920616d6f756e74206279206265696e6720666f72636566756c6c792072656d6f7665642066726f6d20746865207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c8000002cc00cc00000408001800d00c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001382050726f706f73656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657810012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657810013c5265666572656e64756d496e6465780001247468726573686f6c64d40134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657810013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657810013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657810013c5265666572656e64756d496e646578000110766f7465d801644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657810012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657810012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d40c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000d80c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465dc0110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000dc0c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000e00c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001282c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657810013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657810013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c3870616c6c65745f756e69717565731870616c6c6574144576656e7408045400044900016c1c437265617465640c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e1846726f7a656e080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640006045c536f6d6520606974656d60207761732066726f7a656e2e18546861776564080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640007045c536f6d6520606974656d6020776173207468617765642e40436f6c6c656374696f6e46726f7a656e040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400080474536f6d652060636f6c6c656374696f6e60207761732066726f7a656e2e40436f6c6c656374696f6e546861776564040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173207468617765642e304f776e65724368616e676564080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e4964000118697373756572000130543a3a4163636f756e74496400011461646d696e000130543a3a4163636f756e74496400011c667265657a6572000130543a3a4163636f756e744964000b0470546865206d616e6167656d656e74207465616d206368616e6765642e40417070726f7665645472616e73666572100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e444974656d5374617475734368616e676564040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e4964000e041101412060636f6c6c656374696f6e602068617320686164206974732061747472696275746573206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d657461646174615365740c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400011064617461f40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656ec00110626f6f6c000f04b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e4964001004b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e2c4d65746164617461536574100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400011064617461f40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656ec00110626f6f6c001104984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e3c4d65746164617461436c6561726564080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d4964001204984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73f801385665633c543a3a4974656d49643e001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e30417474726962757465536574100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656dfc01444f7074696f6e3c543a3a4974656d49643e00010c6b6579f4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565f40174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e00140405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c65617265640c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656dfc01444f7074696f6e3c543a3a4974656d49643e00010c6b6579f4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0015040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6e0101015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001604c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001704a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e304974656d5072696365536574100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572050101504f7074696f6e3c543a3a4163636f756e7449643e0018048c546865207072696365207761732073657420666f722074686520696e7374616e63652e404974656d507269636552656d6f766564080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640019049c54686520707269636520666f722074686520696e7374616e6365207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001a044c416e206974656d2077617320626f756768742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f00c386366675f7072696d697469766573147479706573184974656d496400000400180110753132380000f4101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000f8000002f000fc04184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f00000010000010104184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000050104184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000009010c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d010c2c70616c6c65745f666565731870616c6c6574144576656e74040454000110284665654368616e67656408010c6b657911010124543a3a4665654b657900010c66656518013042616c616e63654f663c543e0000002c466565546f417574686f7208011066726f6d000130543a3a4163636f756e74496400011c62616c616e636518013042616c616e63654f663c543e00010024466565546f4275726e08011066726f6d000130543a3a4163636f756e74496400011c62616c616e636518013042616c616e63654f663c543e00020034466565546f547265617375727908011066726f6d000130543a3a4163636f756e74496400011c62616c616e636518013042616c616e63654f663c543e00030004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090911010c246366675f7479706573206665655f6b657973184665654b657900011434416e63686f7273436f6d6d697400000040416e63686f7273507265436f6d6d6974000100504272696467654e61746976655472616e73666572000200484e667450726f6f6656616c69646174696f6e00030044416c6c6f77616e63654372656174696f6e0004000015010c3470616c6c65745f636c61696d731870616c6c6574144576656e740404540001081c436c61696d65640801286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418019c3c542061732070616c6c65745f62616c616e6365733a3a436f6e6669673e3a3a42616c616e6365000004f84576656e742074726967676572656420616674657220612072657761726420636c61696d206973207375636365737366756c6c792070726f63657373656438526f6f744861736853746f726564040124726f6f745f686173682c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000104b04576656e7420747269676765726564207768656e2074686520726f6f7420686173682069732073746f72656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c5870616c6c65745f63726f77646c6f616e5f636c61696d1870616c6c6574144576656e7404045400011c58436c61696d50616c6c6574496e697469616c697a6564000008e44576656e7420656d6974746564207768656e207468652063726f77646c6f616e20636c61696d2070616c6c65742069732070726f7065726c792c636f6e666967757265642e34526577617264436c61696d65640c00000158543a3a52656c6179436861696e4163636f756e744964000000015c50617261636861696e4163636f756e7449644f663c543e0000180128543a3a42616c616e6365000104e84576656e7420656d6974746564207768656e20612072657761726420686173206265656e20636c61696d6564207375636365737366756c6c792e3c4c6f636b65644174557064617465640400100138543a3a426c6f636b4e756d626572000204090154686520626c6f636b206e756d6265722c207768657265207765206c6f636b2074686520636f6e747269627574696f6e7320686173206265656e207570646174656460436f6e747269627574696f6e73526f6f745570646174656404002c0134526f6f74486173684f663c543e000304e852656c61792d636861696e20526f6f74206861736820776869636820616c6c6f777320746f2076657269667920636f6e747269627574696f6e736443726f77646c6f616e54726965496e64657855706461746564040010012454726965496e6465780004080d015472696520696e646578206f66207468652063726f77646c6f616e20696e73696465207468652072656c61792d636861696e732063726f77646c6f616e206368696c641c73746f72616765444c656173655374617274557064617465640400100138543a3a426c6f636b4e756d6265720005080501546865206c65617365207374617274206f66207468652070617261636861696e20736c6f742e205573656420746f20646566696e65207768656e2077652063616e60696e697469616c697a6520746865206e6578742074696d65484c65617365506572696f64557064617465640400100138543a3a426c6f636b4e756d6265720006080901546865206c6561736520706572696f64206f66207468652070617261636861696e20736c6f742e205573656420746f20646566696e65207768656e2077652063616e60696e697469616c697a6520746865206e6578742074696d6504a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909091d010c5c70616c6c65745f63726f77646c6f616e5f7265776172641870616c6c6574144576656e7404045400011434526577617264436c61696d65640c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000008f44576656e7420656d6974746564207768656e20612072657761726420636c61696d207761732070726f636573736564207375636365737366756c6c792e945c5b77686f2c206469726563745f7265776172642c207665737465645f7265776172645c5d5c52657761726450616c6c6574496e697469616c697a65640c00100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200002101011c50657262696c6c000108e44576656e7420747269676765726564207768656e2074686520726577617264206d6f64756c6520697320726561647920746f207265776172640d01636f6e7472696275746f7273205c5b76657374696e675f73746172742c2076657374696e675f706572696f642c206469726563745f7061796f75745f726174696f5c5d604469726563745061796f7574526174696f5570646174656404002101011c50657262696c6c000208d4446972656374207061796f757420726174696f20666f7220636f6e7472696275746f727320686173206265656e2075706461746564405c5b7061796f75745f726174696f5c5d5056657374696e67506572696f64557064617465640400100138543a3a426c6f636b4e756d6265720003047c56657374696e6720706572696f6420686173206265656e20757064617465644c56657374696e675374617274557064617465640400100138543a3a426c6f636b4e756d626572000404845374617274206f662076657374696e6720686173206265656e207570646174656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090921010c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000025010c4870616c6c65745f706f6f6c5f73797374656d1870616c6c6574144576656e7404045400011c28526562616c616e63656404011c706f6f6c5f6964280124543a3a506f6f6c496400000474546865207472616e63686573207765726520726562616c616e6365642e344d61785265736572766553657404011c706f6f6c5f6964280124543a3a506f6f6c496400010470546865206d617820726573657276652077617320757064617465642e2c45706f6368436c6f73656408011c706f6f6c5f6964280124543a3a506f6f6c496400012065706f63685f6964100128543a3a45706f6368496400020450416e2065706f63682077617320636c6f7365642e44536f6c7574696f6e5375626d69747465640c011c706f6f6c5f6964280124543a3a506f6f6c496400012065706f63685f6964100128543a3a45706f63684964000120736f6c7574696f6e290101a445706f6368536f6c7574696f6e3c543a3a42616c616e63652c20543a3a4d61785472616e636865733e00030458416e2065706f6368207761732065786563757465642e3445706f6368457865637574656408011c706f6f6c5f6964280124543a3a506f6f6c496400012065706f63685f6964100128543a3a45706f6368496400040458416e2065706f6368207761732065786563757465642e1c4372656174656410011461646d696e000130543a3a4163636f756e7449640001246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964280124543a3a506f6f6c496400011c657373656e636565010140506f6f6c457373656e63654f663c543e0005044c4120706f6f6c2077617320637265617465642e1c557064617465640c01086964280124543a3a506f6f6c496400010c6f6c6465010140506f6f6c457373656e63654f663c543e00010c6e657765010140506f6f6c457373656e63654f663c543e0006044c4120706f6f6c2077617320757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090929010c4870616c6c65745f706f6f6c5f73797374656d20736f6c7574696f6e3445706f6368536f6c7574696f6e081c42616c616e636501182c4d61785472616e63686573012d0101081c4865616c7468790400310101944865616c746879536f6c7574696f6e3c42616c616e63652c204d61785472616e636865733e00000024556e6865616c74687904004501019c556e6865616c746879536f6c7574696f6e3c42616c616e63652c204d61785472616e636865733e000100002d01084c646576656c6f706d656e745f72756e74696d652c4d61785472616e636865730000000031010c4870616c6c65745f706f6f6c5f73797374656d20736f6c7574696f6e3c4865616c746879536f6c7574696f6e081c42616c616e636501182c4d61785472616e63686573012d0100080120736f6c7574696f6e350101a0426f756e6465645665633c5472616e636865536f6c7574696f6e2c204d61785472616e636865733e00011473636f726518011c42616c616e636500003501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454013901045300000400410101185665633c543e000039010c4870616c6c65745f706f6f6c5f73797374656d207472616e636865733c5472616e636865536f6c7574696f6e0000080148696e766573745f66756c66696c6c6d656e743d01012c5065727175696e74696c6c00014872656465656d5f66756c66696c6c6d656e743d01012c5065727175696e74696c6c00003d010c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040028010c7536340000410100000239010045010c4870616c6c65745f706f6f6c5f73797374656d20736f6c7574696f6e44556e6865616c746879536f6c7574696f6e081c42616c616e636501182c4d61785472616e63686573012d010010011473746174654901019c426f756e6465645665633c556e6865616c74687953746174652c204d61785472616e636865733e000120736f6c7574696f6e350101a0426f756e6465645665633c5472616e636865536f6c7574696f6e2c204d61785472616e636865733e0001787269736b5f6275666665725f696d70726f76656d656e745f73636f726573550101a04f7074696f6e3c426f756e6465645665633c42616c616e63652c204d61785472616e636865733e3e000164726573657276655f696d70726f76656d656e745f73636f72656101013c4f7074696f6e3c42616c616e63653e00004901101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454014d01045300000400510101185665633c543e00004d010c4870616c6c65745f706f6f6c5f73797374656d20736f6c7574696f6e38556e6865616c7468795374617465000108484d61785265736572766556696f6c61746564000000544d696e5269736b42756666657256696f6c617465640001000051010000024d0100550104184f7074696f6e0404540159010108104e6f6e6500000010536f6d650400590100000100005901101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401180453000004005d0101185665633c543e00005d010000021800610104184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000065010c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f74797065732c506f6f6c457373656e6365182843757272656e637949640169011c42616c616e636501183c5472616e63686543757272656e63790175011052617465017901484d6178546f6b656e4e616d654c656e677468017d01504d6178546f6b656e53796d626f6c4c656e6774680181010014012063757272656e63796901012843757272656e6379496400012c6d61785f7265736572766518011c42616c616e636500012c6d61785f6e61765f6167652801184d6f6d656e740001386d696e5f65706f63685f74696d652801184d6f6d656e740001207472616e6368657385010151015665633c5472616e636865457373656e63653c5472616e63686543757272656e63792c20526174652c204d6178546f6b656e4e616d654c656e6774682c0a4d6178546f6b656e53796d626f6c4c656e6774683e3e000069010c246366675f747970657318746f6b656e732843757272656e63794964000118184e61746976650000001c5472616e6368650800280118506f6f6c496400006d0101245472616e63686549640001000c4b534d000200104155534400030030466f726569676e41737365740400100138466f726569676e417373657449640004001c5374616b696e6704007101013c5374616b696e6743757272656e6379000500006d0100000310000000080071010c246366675f747970657318746f6b656e733c5374616b696e6743757272656e637900010430426c6f636b526577617264730000000075010c246366675f747970657318746f6b656e733c5472616e63686543757272656e6379000008011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000079010c246366675f74797065732c66697865645f706f696e741052617465000004001801107531323800007d0110246366675f747970657318636f6e73747314706f6f6c73644d61785472616e6368654e616d654c656e677468427974657300000000810110246366675f747970657318636f6e73747314706f6f6c736c4d61785472616e63686553796d626f6c4c656e677468427974657300000000850100000289010089010c4870616c6c65745f706f6f6c5f73797374656d207472616e63686573385472616e636865457373656e6365103c5472616e63686543757272656e63790175011052617465017901484d6178546f6b656e4e616d654c656e677468017d01504d6178546f6b656e53796d626f6c4c656e677468018101000c012063757272656e63797501013c5472616e63686543757272656e637900010874798d0101445472616e636865547970653c526174653e0001206d65746164617461910101e45472616e6368654d657461646174613c4d6178546f6b656e4e616d654c656e6774682c204d6178546f6b656e53796d626f6c4c656e6774683e00008d010c4870616c6c65745f706f6f6c5f73797374656d207472616e636865732c5472616e63686554797065041052617465017901010820526573696475616c0000002c4e6f6e526573696475616c080154696e7465726573745f726174655f7065725f736563790101105261746500013c6d696e5f7269736b5f6275666665723d01012c5065727175696e74696c6c0001000091010c4870616c6c65745f706f6f6c5f73797374656d207472616e636865733c5472616e6368654d6574616461746108484d6178546f6b656e4e616d654c656e677468017d01504d6178546f6b656e53796d626f6c4c656e67746801810100080128746f6b656e5f6e616d6595010188426f756e6465645665633c75382c204d6178546f6b656e4e616d654c656e6774683e000130746f6b656e5f73796d626f6c99010190426f756e6465645665633c75382c204d6178546f6b656e53796d626f6c4c656e6774683e00009501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00009901101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00009d010c4070616c6c65745f6c6f616e735f7265661870616c6c6574144576656e7404045400011c1c437265617465640c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e49640001246c6f616e5f696e666fa10101344c6f616e496e666f4f663c543e0000044841206c6f616e20776173206372656174656420426f72726f7765640c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e636500010484416e20616d6f756e742077617320626f72726f77656420666f722061206c6f616e185265706169640c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e63650002047c416e20616d6f756e74207761732072657061696420666f722061206c6f616e285772697474656e4f66660c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e4964000118737461747573d101015c57726974654f66665374617475733c543a3a526174653e0003045841206c6f616e20776173207772697474656e206f666618436c6f7365640c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e4964000128636f6c6c61746572616ca501012841737365744f663c543e0004044441206c6f616e2077617320636c6f73656464506f7274666f6c696f56616c756174696f6e557064617465640c011c706f6f6c5f696428012c506f6f6c49644f663c543e00012476616c756174696f6e180128543a3a42616c616e636500012c7570646174655f74797065d5010170506f7274666f6c696f56616c756174696f6e55706461746554797065000504bc54686520506f7274666f6c696f2056616c756174696f6e20666f72206120706f6f6c2077617320757064617465642e5457726974654f6666506f6c6963795570646174656408011c706f6f6c5f696428012c506f6f6c49644f663c543e000118706f6c696379d90101ec426f756e6465645665633c57726974654f666652756c653c543a3a526174653e2c20543a3a4d617857726974654f6666506f6c69637953697a653e00060004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a1010c4070616c6c65745f6c6f616e735f726566147479706573204c6f616e496e666f0c14417373657401a5011c42616c616e636501181052617465017901001801207363686564756c65a901014452657061796d656e745363686564756c65000128636f6c6c61746572616ca50101144173736574000140636f6c6c61746572616c5f76616c756518011c42616c616e636500014076616c756174696f6e5f6d6574686f64b901015456616c756174696f6e4d6574686f643c526174653e0001307265737472696374696f6e73c10101584c6f616e5265737472696374696f6e733c526174653e000134696e7465726573745f7261746579010110526174650000a5010000040828f000a9010c4070616c6c65745f6c6f616e735f7265661474797065734452657061796d656e745363686564756c6500000c01206d61747572697479ad0101204d61747572697479000144696e7465726573745f7061796d656e7473b1010140496e7465726573745061796d656e74730001447061795f646f776e5f7363686564756c65b501013c506179446f776e5363686564756c650000ad010c4070616c6c65745f6c6f616e735f726566147479706573204d6174757269747900010414466978656404002801184d6f6d656e7400000000b1010c4070616c6c65745f6c6f616e735f72656614747970657340496e7465726573745061796d656e7473000104104e6f6e6500000000b5010c4070616c6c65745f6c6f616e735f7265661474797065733c506179446f776e5363686564756c65000104104e6f6e6500000000b9010c4070616c6c65745f6c6f616e735f7265662476616c756174696f6e3c56616c756174696f6e4d6574686f64041052617465017901010848446973636f756e74656443617368466c6f770400bd010160446973636f756e74656443617368466c6f773c526174653e0000003c4f75747374616e64696e674465627400010000bd010c4070616c6c65745f6c6f616e735f7265662476616c756174696f6e48446973636f756e74656443617368466c6f77041052617465017901000c015870726f626162696c6974795f6f665f64656661756c7479010110526174650001486c6f73735f676976656e5f64656661756c747901011052617465000134646973636f756e745f7261746579010110526174650000c1010c4070616c6c65745f6c6f616e735f726566147479706573404c6f616e5265737472696374696f6e73041052617465017901000c01446d61785f626f72726f775f616d6f756e74c50101544d6178426f72726f77416d6f756e743c526174653e00011c626f72726f7773c9010148426f72726f775265737472696374696f6e7300012872657061796d656e7473cd01014452657061795265737472696374696f6e730000c5010c4070616c6c65745f6c6f616e735f7265661474797065733c4d6178426f72726f77416d6f756e740410526174650179010108445570546f546f74616c426f72726f776564040130616476616e63655f7261746579010110526174650000004c5570546f4f75747374616e64696e6744656274040130616476616e63655f72617465790101105261746500010000c9010c4070616c6c65745f6c6f616e735f72656614747970657348426f72726f775265737472696374696f6e73000104285772697474656e4f666600000000cd010c4070616c6c65745f6c6f616e735f7265661474797065734452657061795265737472696374696f6e73000104104e6f6e6500000000d1010c4070616c6c65745f6c6f616e735f7265662477726974655f6f66663857726974654f66665374617475730410526174650179010008012870657263656e74616765790101105261746500011c70656e616c747979010110526174650000d5010c4070616c6c65745f6c6f616e735f72656614747970657370506f7274666f6c696f56616c756174696f6e557064617465547970650001081445786163740000001c496e657861637400010000d901101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401dd01045300000400f50101185665633c543e0000dd010c4070616c6c65745f6c6f616e735f7265662477726974655f6f66663057726974654f666652756c65041052617465017901000801207472696767657273e10101cc426f756e64656442547265655365743c556e6971756557726974654f6666547269676765722c205472696767657253697a653e000118737461747573d101015057726974654f66665374617475733c526174653e0000e101101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401e501045300000400ed01012c42547265655365743c543e0000e5010c4070616c6c65745f6c6f616e735f7265662477726974655f6f666654556e6971756557726974654f66665472696767657200000400e901013c57726974654f6666547269676765720000e9010c4070616c6c65745f6c6f616e735f7265662477726974655f6f66663c57726974654f666654726967676572000108505072696e636970616c4f76657264756544617973040010010c7533320000005c4f7261636c6556616c756174696f6e4f7574646174656404002801184d6f6d656e7400010000ed010420425472656553657404045401e501000400f101000000f101000002e50100f501000002dd0100f9010c4870616c6c65745f7065726d697373696f6e731870616c6c6574144576656e7404045400010c1441646465640c0108746f000130543a3a4163636f756e74496400011473636f7065fd010120543a3a53636f7065000110726f6c650102011c543a3a526f6c650000001c52656d6f7665640c011066726f6d000130543a3a4163636f756e74496400011473636f7065fd010120543a3a53636f7065000110726f6c650102011c543a3a526f6c650001001850757267656408011066726f6d000130543a3a4163636f756e74496400011473636f7065fd010120543a3a53636f706500020004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fd010c246366675f74797065732c7065726d697373696f6e733c5065726d697373696f6e53636f70650818506f6f6c496401282843757272656e63794964016901010810506f6f6c0400280118506f6f6c49640000002043757272656e637904006901012843757272656e637949640001000001020c246366675f74797065732c7065726d697373696f6e7310526f6c6508245472616e6368654964016d01184d6f6d656e740128010820506f6f6c526f6c6504000502016c506f6f6c526f6c653c5472616e63686549642c204d6f6d656e743e000000605065726d697373696f6e656443757272656e6379526f6c650400090201805065726d697373696f6e656443757272656e6379526f6c653c4d6f6d656e743e0001000005020c246366675f74797065732c7065726d697373696f6e7320506f6f6c526f6c6508245472616e6368654964016d01184d6f6d656e740128012024506f6f6c41646d696e00000020426f72726f7765720001003050726963696e6741646d696e000200384c697175696469747941646d696e0003003c4d656d6265724c69737441646d696e000400244c6f616e41646d696e0005003c5472616e636865496e766573746f7208006d0101245472616e636865496400002801184d6f6d656e7400060034504f44526561644163636573730007000009020c246366675f74797065732c7065726d697373696f6e73605065726d697373696f6e656443757272656e6379526f6c6504184d6f6d656e740128010c18486f6c64657204002801184d6f6d656e740000001c4d616e6167657200010018497373756572000200000d020c6470616c6c65745f636f6c6c61746f725f616c6c6f776c6973741870616c6c6574144576656e7404045400010834436f6c6c61746f72416464656404012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000004a84120636f6c6c61746f7220686173206265656e20616464656420746f2074686520616c6c6f776c6973743c436f6c6c61746f7252656d6f76656404012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000104b84120636f6c6c61746f7220686173206265656e2072656d6f7665642066726f6d2074686520616c6c6f776c69737404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090911020c6070616c6c65745f726573747269637465645f746f6b656e731870616c6c6574144576656e74040454000108205472616e7366657210012c63757272656e63795f696469010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650000044c5472616e73666572207375636365656465642e2842616c616e636553657410012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500010468412062616c616e6365207761732073657420627920726f6f742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090915020c4070616c6c65745f6e66745f73616c65731870616c6c6574144576656e7404045400010c1c466f7253616c650c0120636c6173735f696428013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964f00124543a3a4974656d496400011073616c651902012453616c654f663c543e00000458416e204e4654206973206e6f7720666f722073616c651c52656d6f766564080120636c6173735f696428013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964f00124543a3a4974656d496400010448416e204e4654207761732072656d6f76656410536f6c64100120636c6173735f696428013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964f00124543a3a4974656d496400011073616c651902012453616c654f663c543e0001146275796572000130543a3a4163636f756e74496400020450416e204e465420686173206265656e20736f6c6404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909091902084070616c6c65745f6e66745f73616c65731053616c650c244163636f756e74496401002843757272656e637949640169011c42616c616e636501180008011873656c6c65720001244163636f756e74496400011470726963651d02016850726963653c43757272656e637949642c2042616c616e63653e00001d02084070616c6c65745f6e66745f73616c6573145072696365082843757272656e637949640169011c42616c616e636501180008012063757272656e63796901012843757272656e63794964000118616d6f756e7418011c42616c616e6365000021020c3470616c6c65745f6272696467651870616c6c6574144576656e740404540001041852656d61726b08002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4861736800000401285265736f75726365496400000004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090925020c5c70616c6c65745f696e7465726573745f6163637275616c1870616c6c6574144576656e7404045400010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090929020c2870616c6c65745f6e66741870616c6c6574144576656e74040454000104304465706f736974417373657404002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4861736800000004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909092d020c3c70616c6c65745f6b657973746f72651870616c6c6574144576656e7404045400010c204b657941646465641001146f776e6572000130543a3a4163636f756e74496400010c6b65792c011c543a3a4861736800011c707572706f7365310201284b6579507572706f73650001206b65795f747970653502011c4b6579547970650000044041206b6579207761732061646465642e284b65795265766f6b65640c01146f776e6572000130543a3a4163636f756e74496400010c6b65792c011c543a3a48617368000130626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720001044841206b657920776173207265766f6b65642e284465706f73697453657404012c6e65775f6465706f736974180128543a3a42616c616e63650002044841206465706f73697420776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909093102083c70616c6c65745f6b657973746f7265284b6579507572706f736500010830503250446973636f7665727900000048503250446f63756d656e745369676e696e67000100003502083c70616c6c65745f6b657973746f72651c4b6579547970650001081445434453410000001445444453410001000039020c4870616c6c65745f696e766573746d656e74731870616c6c6574144576656e7404045400013054496e766573744f7264657273436f6c6c6563746564140134696e766573746d656e745f69647501013c543a3a496e766573746d656e74496400010c77686f000130543a3a4163636f756e74496400014070726f6365737365645f6f72646572733d0201305665633c4f7264657249643e000128636f6c6c656374696f6e4102016c496e76657374436f6c6c656374696f6e3c543a3a416d6f756e743e00011c6f7574636f6d6545020138436f6c6c6563744f7574636f6d650000088046756c66696c6c6564206f7264657273207765726520636f6c6c65637465642e09015b696e766573746d656e745f69642c2077686f2c20636f6c6c65637465645f6f72646572732c20436f6c6c656374696f6e2c20436f6c6c6563744f7574636f6d655d5452656465656d4f7264657273436f6c6c6563746564140134696e766573746d656e745f69647501013c543a3a496e766573746d656e74496400010c77686f000130543a3a4163636f756e74496400014070726f6365737365645f6f72646572733d0201305665633c4f7264657249643e000128636f6c6c656374696f6e4902016c52656465656d436f6c6c656374696f6e3c543a3a416d6f756e743e00011c6f7574636f6d6545020138436f6c6c6563744f7574636f6d650001088046756c66696c6c6564206f7264657273207765726520636f6c6c65637465642e09015b696e766573746d656e745f69642c2077686f2c20636f6c6c65637465645f6f72646572732c20436f6c6c656374696f6e2c20436f6c6c6563744f7574636f6d655d48496e766573744f7264657255706461746564100134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640001307375626d69747465645f617428011c4f72646572496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180124543a3a416d6f756e740002040d01416e20696e76657374206f726465722077617320757064617465642e205b696e766573746d656e745f69642c206f726465725f69642c2077686f2c20616d6f756e745d4852656465656d4f7264657255706461746564100134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640001307375626d69747465645f617428011c4f72646572496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180124543a3a416d6f756e740003040d01416e20696e76657374206f726465722077617320757064617465642e205b696e766573746d656e745f69642c206f726465725f69642c2077686f2c20616d6f756e745d4c496e766573744f7264657273436c65617265640c0134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640001206f726465725f696428011c4f72646572496400012c66756c66696c6c6d656e744d02019446756c66696c6c6d656e745769746850726963653c543a3a42616c616e6365526174696f3e0004080d01546f74616c4f7264657273206f6620696e766573746d656e747320776572652066756c66696c6c6564205b696e766573746d656e745f69642c206f726465725f69642c5446756c66696c6c6d656e745769746850726963655d4c52656465656d4f7264657273436c65617265640c0134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640001206f726465725f696428011c4f72646572496400012c66756c66696c6c6d656e744d02019446756c66696c6c6d656e745769746850726963653c543a3a42616c616e6365526174696f3e0005080d01546f74616c4f7264657273206f6620726564656d7074696f6e7320776572652066756c66696c6c6564205b696e766573746d656e745f69642c206f726465725f69642c5446756c66696c6c6d656e745769746850726963655d60496e766573744f7264657273496e50726f63657373696e670c0134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640001206f726465725f696428011c4f72646572496400012c746f74616c5f6f7264657251020154546f74616c4f726465723c543a3a416d6f756e743e0006080901546f74616c4f7264657273206f6620696e766573746d656e74732061726520696e2070726f63657373696e67207374617465205b696e766573746d656e745f69642c546f726465725f69642c20546f74616c4f726465725d6052656465656d4f7264657273496e50726f63657373696e670c0134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640001206f726465725f696428011c4f72646572496400012c746f74616c5f6f7264657251020154546f74616c4f726465723c543a3a416d6f756e743e000708f8546f74616c4f7264657273206f6620726564656d7074696f6e7320696e2070726f63657373696e67207374617465205b696e766573746d656e745f69642c546f726465725f69642c20546f74616c4f726465725d90496e76657374436f6c6c6563746564576974686f7574416374697665506f736974696f6e08010c77686f000130543a3a4163636f756e744964000134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640008080d015369676e616c732074686174206120636f6c6c656374206f6620696e766573746d656e74732063616c6c20776173207375636365737366756c2062757420746865726598776173206e6f206f72646572206f662061207573657220746f20636f6c6c6563742066726f6d9052656465656d436f6c6c6563746564576974686f7574416374697665506f736974696f6e08010c77686f000130543a3a4163636f756e744964000134696e766573746d656e745f69647501013c543a3a496e766573746d656e7449640009080d015369676e616c732074686174206120636f6c6c656374206f6620726564656d7074696f6e732063616c6c20776173207375636365737366756c2062757420746865726598776173206e6f206f72646572206f662061207573657220746f20636f6c6c6563742066726f6d8c496e76657374436f6c6c6563746564466f724e6f6e436c65617265644f72646572496408010c77686f000130543a3a4163636f756e744964000134696e766573746d656e745f69647501013c543a3a496e766573746d656e744964000a0811014120636f6c6c6563742063616c6c20666f722074686520696e766573746d656e74732068617070656e65642c20627574207468652063757272656e74204f726465724964486973206e6f742079657420636c65617265648c52656465656d436f6c6c6563746564466f724e6f6e436c65617265644f72646572496408010c77686f000130543a3a4163636f756e744964000134696e766573746d656e745f69647501013c543a3a496e766573746d656e744964000b0811014120636f6c6c6563742063616c6c20666f722074686520726564656d7074696f6e732068617070656e65642c20627574207468652063757272656e74204f726465724964486973206e6f742079657420636c656172656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909093d0200000228004102084870616c6c65745f696e766573746d656e747340496e76657374436f6c6c656374696f6e041c42616c616e63650118000801607061796f75745f696e766573746d656e745f696e7665737418011c42616c616e636500016c72656d61696e696e675f696e766573746d656e745f696e7665737418011c42616c616e636500004502084870616c6c65745f696e766573746d656e747338436f6c6c6563744f7574636f6d650001083846756c6c79436f6c6c6563746564000000485061727469616c6c79436f6c6c6563746564000100004902084870616c6c65745f696e766573746d656e74734052656465656d436f6c6c656374696f6e041c42616c616e63650118000801607061796f75745f696e766573746d656e745f72656465656d18011c42616c616e636500016c72656d61696e696e675f696e766573746d656e745f72656465656d18011c42616c616e636500004d020c246366675f7479706573186f72646572735046756c66696c6c6d656e74576974685072696365043042616c616e6365526174696f017901000801246f665f616d6f756e743d01012c5065727175696e74696c6c00011470726963657901013042616c616e6365526174696f000051020c246366675f7479706573186f726465727328546f74616c4f72646572041c42616c616e6365011800040118616d6f756e7418011c42616c616e6365000055020c3870616c6c65745f726577617264731870616c6c6574144576656e740804540004490001143447726f7570526577617264656408012067726f75705f6964100128543a3a47726f75704964000118616d6f756e7418013c42616c616e63654f663c542c20493e000000385374616b654465706f736974656414012067726f75705f6964100128543a3a47726f75704964000124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e637949640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013c42616c616e63654f663c542c20493e000100385374616b6557697468647261776e14012067726f75705f6964100128543a3a47726f75704964000124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e637949640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013c42616c616e63654f663c542c20493e00020034526577617264436c61696d656414012067726f75705f6964100128543a3a47726f75704964000124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e637949640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013c42616c616e63654f663c542c20493e0003004043757272656e63794174746163686564100124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e6379496400011066726f6d5d0201484f7074696f6e3c543a3a47726f757049643e000108746f100128543a3a47726f7570496400040004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909095902084c646576656c6f706d656e745f72756e74696d6530526577617264446f6d61696e000108244c697175696469747900000014426c6f636b000100005d0204184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000061020c6070616c6c65745f6c69717569646974795f726577617264731870616c6c6574144576656e74040454000104204e657745706f63680c011c656e64735f6f6e100138543a3a426c6f636b4e756d626572000118726577617264180128543a3a42616c616e63650001306c6173745f6368616e6765736502013c45706f63684368616e6765733c543e00000004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909096502086070616c6c65745f6c69717569646974795f726577617264733045706f63684368616e67657304045400001001206475726174696f6e5d0201584f7074696f6e3c543a3a426c6f636b4e756d6265723e000118726577617264610101484f7074696f6e3c543a3a42616c616e63653e00011c77656967687473690201f4426f756e64656442547265654d61703c543a3a47726f757049642c20543a3a5765696768742c20543a3a4d61784368616e67657350657245706f63683e00012863757272656e636965737902010501426f756e64656442547265654d61703c543a3a43757272656e637949642c20543a3a47726f757049642c20543a3a4d61784368616e67657350657245706f63683e00006902101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601280453000004006d02013842547265654d61703c4b2c20563e00006d02042042547265654d617008044b011004560128000400710200000071020000027502007502000004081028007902101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b016901045601100453000004007d02013842547265654d61703c4b2c20563e00007d02042042547265654d617008044b01690104560110000400810200000081020000028502008502000004086901100089020c4470616c6c65745f636f6e6e6563746f72731870616c6c6574144576656e7404045400010c2c4d65737361676553656e7408011c6d6573736167658d0201304d6573736167654f663c543e000118646f6d61696e91020118446f6d61696e0000047841206d657373616765207761732073656e7420746f206120646f6d61696e3c536574446f6d61696e526f75746572080118646f6d61696e91020118446f6d61696e000118726f757465729d02015c526f757465723c43757272656e637949644f663c543e3e0001049454686520526f7574657220666f72206120676976656e20646f6d61696e20776173207365743c496e636f6d696e674d65737361676508011873656e646572000130543a3a4163636f756e74496400011c6d65737361676530011c5665633c75383e00020004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098d020c4470616c6c65745f636f6e6e6563746f72731c6d6573736167651c4d6573736167651418446f6d61696e01910218506f6f6c49640128245472616e6368654964016d011c42616c616e636501181052617465017901013c1c496e76616c69640000002c41646443757272656e637908012063757272656e63791801107531323800012c65766d5f61646472657373950201205b75383b2032305d0001001c416464506f6f6c04011c706f6f6c5f6964280118506f6f6c496400020044416c6c6f77506f6f6c43757272656e637908011c706f6f6c5f6964280118506f6f6c496400012063757272656e637918011075313238000300284164645472616e63686518011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000128746f6b656e5f6e616d65990201545b75383b20544f4b454e5f4e414d455f53495a455d000130746f6b656e5f73796d626f6c04015c5b75383b20544f4b454e5f53594d424f4c5f53495a455d000120646563696d616c730801087538000114707269636579010110526174650004005c5570646174655472616e636865546f6b656e50726963650c011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e636865496400011470726963657901011052617465000500305570646174654d656d62657210011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e63686549640001186d656d62657204011c4164647265737300012c76616c69645f756e74696c2801184d6f6d656e74000600205472616e7366657210012063757272656e63791801107531323800011873656e64657204011c41646472657373000120726563656976657204011c41646472657373000118616d6f756e7418011c42616c616e6365000700545472616e736665725472616e636865546f6b656e7318011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e636865496400011873656e64657204011c41646472657373000118646f6d61696e91020118446f6d61696e000120726563656976657204011c41646472657373000118616d6f756e7418011c42616c616e63650008004c496e637265617365496e766573744f7264657214011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000120696e766573746f7204011c4164647265737300012063757272656e637918011075313238000118616d6f756e7418011c42616c616e63650009004c4465637265617365496e766573744f7264657214011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000120696e766573746f7204011c4164647265737300012063757272656e637918011075313238000118616d6f756e7418011c42616c616e6365000a004c496e63726561736552656465656d4f7264657214011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000120696e766573746f7204011c4164647265737300012063757272656e637918011075313238000118616d6f756e7418011c42616c616e6365000b004c446563726561736552656465656d4f7264657214011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000120696e766573746f7204011c4164647265737300012063757272656e637918011075313238000118616d6f756e7418011c42616c616e6365000c0034436f6c6c656374496e766573740c011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000120696e766573746f7204011c41646472657373000d0034436f6c6c65637452656465656d0c011c706f6f6c5f6964280118506f6f6c49640001287472616e6368655f69646d0101245472616e6368654964000120696e766573746f7204011c41646472657373000e000091020c246366675f747970657338646f6d61696e5f6164647265737318446f6d61696e0001082843656e747269667567650000000c45564d040028012845564d436861696e496400010000950200000314000000080099020000038000000008009d020c4470616c6c65745f636f6e6e6563746f72731c726f757465727318526f75746572042843757272656e6379496401690101040c58636d0400a102015458636d446f6d61696e3c43757272656e637949643e00000000a1020c4470616c6c65745f636f6e6e6563746f72731c726f75746572732458636d446f6d61696e042843757272656e63794964016901001401206c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000180657468657265756d5f78636d5f7472616e736163745f63616c6c5f696e646578d502012901426f756e6465645665633c75382c20436f6e73745533323c7b2078636d5f7072696d6974697665733a3a4d41585f455448455245554d5f58434d5f494e5055545f53495a45207d0a3e3e000140636f6e74726163745f61646472657373d9020110483136300001306665655f63757272656e63796901012843757272656e637949640001346d61785f6761735f6c696d697428010c7536340000a502080c78636d5856657273696f6e65644d756c74694c6f636174696f6e0001080856300400a902014476303a3a4d756c74694c6f636174696f6e0000000856310400c902014476313a3a4d756c74694c6f636174696f6e00010000a902100c78636d087630386d756c74695f6c6f636174696f6e344d756c74694c6f636174696f6e000124104e756c6c0000000858310400ad0201204a756e6374696f6e0001000858320800ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0002000858330c00ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0003000858341000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0004000858351400ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0005000858361800ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0006000858371c00ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0007000858382000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e0000ad0201204a756e6374696f6e00080000ad02100c78636d087630206a756e6374696f6e204a756e6374696f6e00012818506172656e740000002450617261636861696e0400b102010c7533320001002c4163636f756e744964333208011c6e6574776f726bb50201244e6574776f726b496400010869640401205b75383b2033325d000200384163636f756e74496e646578363408011c6e6574776f726bb50201244e6574776f726b4964000114696e64657824010c753634000300304163636f756e744b6579323008011c6e6574776f726bb50201244e6574776f726b496400010c6b6579950201205b75383b2032305d0004003850616c6c6574496e7374616e6365040008010875380005003047656e6572616c496e6465780400bd020110753132380006002847656e6572616c4b65790400b90201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000700244f6e6c794368696c6400080024506c7572616c6974790801086964c1020118426f6479496400011070617274c5020120426f64795061727400090000b1020000061000b502100c78636d087630206a756e6374696f6e244e6574776f726b49640001100c416e79000000144e616d65640400b90201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000b902101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000bd020000061800c102100c78636d087630206a756e6374696f6e18426f6479496400012810556e6974000000144e616d65640400b90201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400b102010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000c502100c78636d087630206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74b102010c753332000100204672616374696f6e08010c6e6f6db102010c75333200011464656e6f6db102010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6db102010c75333200011464656e6f6db102010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6db102010c75333200011464656e6f6db102010c75333200040000c902100c78636d087631346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72cd0201244a756e6374696f6e730000cd02100c78636d087631346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400d10201204a756e6374696f6e0001000858320800d10201204a756e6374696f6e0000d10201204a756e6374696f6e0002000858330c00d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0003000858341000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0004000858351400d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0005000858361800d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0006000858371c00d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0007000858382000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e0000d10201204a756e6374696f6e00080000d102100c78636d087631206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400b102010c7533320000002c4163636f756e744964333208011c6e6574776f726bb50201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bb50201244e6574776f726b4964000114696e64657824010c753634000200304163636f756e744b6579323008011c6e6574776f726bb50201244e6574776f726b496400010c6b6579950201205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400bd020110753132380005002847656e6572616c4b65790400b90201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964c1020118426f6479496400011070617274c5020120426f64795061727400080000d502101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000d902083c7072696d69746976655f7479706573104831363000000400950201205b75383b2032305d0000dd020c5070616c6c65745f706f6f6c5f72656769737472791870616c6c6574144576656e74040454000114285265676973746572656404011c706f6f6c5f6964280124543a3a506f6f6c4964000004584120706f6f6c2077617320726567697374657265642e405570646174655265676973746572656404011c706f6f6c5f6964280124543a3a506f6f6c4964000104744120706f6f6c207570646174652077617320726567697374657265642e38557064617465457865637574656404011c706f6f6c5f6964280124543a3a506f6f6c49640002046c4120706f6f6c20757064617465207761732065786563757465642e3055706461746553746f72656404011c706f6f6c5f6964280124543a3a506f6f6c4964000304b44120706f6f6c20757064617465207761732073746f72656420666f72206c6174657220657865637574696f6e2e2c4d6574616461746153657408011c706f6f6c5f6964280124543a3a506f6f6c49640001206d65746164617461e1020188426f756e6465645665633c75382c20543a3a4d617853697a654d657461646174613e00040458506f6f6c206d6574616461746120776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e102101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e5020c3870616c6c65745f726577617264731870616c6c6574144576656e740804540004490001143447726f7570526577617264656408012067726f75705f6964100128543a3a47726f75704964000118616d6f756e7418013c42616c616e63654f663c542c20493e000000385374616b654465706f736974656414012067726f75705f6964100128543a3a47726f75704964000124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e637949640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013c42616c616e63654f663c542c20493e000100385374616b6557697468647261776e14012067726f75705f6964100128543a3a47726f75704964000124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e637949640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013c42616c616e63654f663c542c20493e00020034526577617264436c61696d656414012067726f75705f6964100128543a3a47726f75704964000124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e637949640001286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013c42616c616e63654f663c542c20493e0003004043757272656e63794174746163686564100124646f6d61696e5f69645902012c543a3a446f6d61696e496400012c63757272656e63795f696469010134543a3a43757272656e6379496400011066726f6d5d0201484f7074696f6e3c543a3a47726f757049643e000108746f100128543a3a47726f7570496400040004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e9020c5070616c6c65745f626c6f636b5f726577617264731870616c6c6574144576656e74040454000108284e657753657373696f6e0c013c636f6c6c61746f725f726577617264180128543a3a42616c616e6365000130746f74616c5f726577617264180128543a3a42616c616e63650001306c6173745f6368616e676573ed02014453657373696f6e4368616e6765733c543e0000006053657373696f6e416476616e63656d656e744661696c65640401146572726f7260013444697370617463684572726f7200010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ed02085070616c6c65745f626c6f636b5f726577617264733853657373696f6e4368616e6765730404540000100124636f6c6c61746f7273f1020148436f6c6c61746f724368616e6765733c543e000138636f6c6c61746f725f636f756e745d02012c4f7074696f6e3c7533323e00013c636f6c6c61746f725f726577617264610101484f7074696f6e3c543a3a42616c616e63653e000130746f74616c5f726577617264610101484f7074696f6e3c543a3a42616c616e63653e0000f102085070616c6c65745f626c6f636b5f726577617264733c436f6c6c61746f724368616e676573040454000008010c696e63f50201a4426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f6c6c61746f72733e00010c6f7574f50201a4426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d6178436f6c6c61746f72733e0000f502101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401000453000004008801185665633c543e0000f9020c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001201c537563636573730801306d6573736167655f68617368fd02013c4f7074696f6e3c543a3a486173683e00011877656967687420011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368fd02013c4f7074696f6e3c543a3a486173683e0001146572726f720103012058636d4572726f7200011877656967687420011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368fd02013c4f7074696f6e3c543a3a486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368fd02013c4f7074696f6e3c543a3a486173683e000304504261642058434d20666f726d617420757365642e445570776172644d65737361676553656e740401306d6573736167655f68617368fd02013c4f7074696f6e3c543a3a486173683e000404b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e3c58636d704d65737361676553656e740401306d6573736167655f68617368fd02013c4f7074696f6e3c543a3a486173683e000504c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e6465720503011850617261496400011c73656e745f617410014052656c6179426c6f636b4e756d626572000114696e64657828013c4f766572776569676874496e6465780001207265717569726564200118576569676874000604d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657828013c4f766572776569676874496e646578000110757365642001185765696768740007044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fd0204184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100000103100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040028010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404002801185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c650019000005030c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040010010c753332000009030c2870616c6c65745f78636d1870616c6c6574144576656e7404045400014424417474656d7074656404000d03015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00c90201344d756c74694c6f636174696f6e0000c90201344d756c74694c6f636174696f6e00001103011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800c90201344d756c74694c6f636174696f6e000028011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080028011c51756572794964000039030120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0028011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140028011c517565727949640000080108753800000801087538000020011857656967687400002001185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0028011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0028011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00c90201344d756c74694c6f636174696f6e000028011c5175657279496400005d0301544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800c90201344d756c74694c6f636174696f6e000028011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040028011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c002c0110483235360000c90201344d756c74694c6f636174696f6e00006103015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640800c90201344d756c74694c6f636174696f6e000010012858636d56657273696f6e000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00645c5b2064657374696e6174696f6e2c20726573756c74205c5d5c537570706f7274656456657273696f6e4368616e6765640800c90201344d756c74694c6f636174696f6e000010012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00c90201344d756c74694c6f636174696f6e000028011c5175657279496400000103012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c0800a502015856657273696f6e65644d756c74694c6f636174696f6e000028011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d34417373657473436c61696d65640c002c0110483235360000c90201344d756c74694c6f636174696f6e00006103015056657273696f6e65644d756c746941737365747300100cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d03100c78636d087632187472616974731c4f7574636f6d6500010c20436f6d706c657465040028011857656967687400000028496e636f6d706c65746508002801185765696768740000010301144572726f72000100144572726f720400010301144572726f720002000011030c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400150301745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000150300000219030019030c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404001d03012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404001d03012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404001d03012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696424011c51756572794964000120726573706f6e736539030120526573706f6e73650001286d61785f77656967687424010c753634000300345472616e7366657241737365740801186173736574731d03012c4d756c746941737365747300012c62656e6566696369617279c90201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731d03012c4d756c746941737365747300011064657374c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065450301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424010c75363400011063616c6c49030168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b102010c7533320001406d61785f6d6573736167655f73697a65b102010c7533320001306d61785f6361706163697479b102010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b102010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b102010c75333200011873656e646572b102010c753332000124726563697069656e74b102010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400cd020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696424011c5175657279496400011064657374c90201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687424010c753634000c00304465706f73697441737365740c01186173736574734d0301404d756c7469417373657446696c7465720001286d61785f617373657473b102010c75333200012c62656e6566696369617279c90201344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574734d0301404d756c7469417373657446696c7465720001286d61785f617373657473b102010c75333200011064657374c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e000e003445786368616e67654173736574080110676976654d0301404d756c7469417373657446696c74657200011c726563656976651d03012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574734d0301404d756c7469417373657446696c74657200011c72657365727665c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574734d0301404d756c7469417373657446696c74657200011064657374c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696424011c5175657279496400011064657374c90201344d756c74694c6f636174696f6e0001186173736574734d0301404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687424010c75363400120030427579457865637574696f6e08011066656573250301284d756c746941737365740001307765696768745f6c696d69745903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001103014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804001103014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574731d03012c4d756c74694173736574730001187469636b6574c90201344d756c74694c6f636174696f6e0018001054726170040024010c7536340019004053756273637269626556657273696f6e08012071756572795f696424011c5175657279496400014c6d61785f726573706f6e73655f77656967687424010c753634001a0048556e73756273637269626556657273696f6e001b00001d03100c78636d087631286d756c746961737365742c4d756c7469417373657473000004002103013c5665633c4d756c746941737365743e000021030000022503002503100c78636d087631286d756c74696173736574284d756c74694173736574000008010869642903011c4173736574496400010c66756e2d03012c46756e676962696c69747900002903100c78636d087631286d756c746961737365741c4173736574496400010820436f6e63726574650400c90201344d756c74694c6f636174696f6e000000204162737472616374040030011c5665633c75383e000100002d03100c78636d087631286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400bd020110753132380000002c4e6f6e46756e6769626c650400310301344173736574496e7374616e6365000100003103100c78636d087631286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400bd0201107531323800010018417272617934040040011c5b75383b20345d0002001841727261793804003503011c5b75383b20385d0003001c4172726179313604006d0101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040030011c5665633c75383e00060000350300000308000000080039030c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304001d03012c4d756c74694173736574730001003c457865637574696f6e526573756c7404003d0301504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040010013873757065723a3a56657273696f6e000300003d0304184f7074696f6e0404540141030108104e6f6e6500000010536f6d650400410300000100004103000004081001030045030c0c78636d087630284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000049030c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e00004d03100c78636d087631286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504001d03012c4d756c74694173736574730000001057696c6404005103013857696c644d756c74694173736574000100005103100c78636d087631286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869642903011c4173736574496400010c66756e5503013c57696c6446756e676962696c697479000100005503100c78636d087631286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000059030c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040024010c753634000100005d0304184f7074696f6e04045401c9020108104e6f6e6500000010536f6d650400c90200000100006103080c78636d5056657273696f6e65644d756c746941737365747300010808563004006503014c5665633c76303a3a4d756c746941737365743e00000008563104001d03013c76313a3a4d756c74694173736574730001000065030000026903006903100c78636d0876302c6d756c74695f6173736574284d756c74694173736574000130104e6f6e650000000c416c6c0001002c416c6c46756e6769626c6500020038416c6c4e6f6e46756e6769626c650003004c416c6c416273747261637446756e6769626c65040108696430011c5665633c75383e00040058416c6c41627374726163744e6f6e46756e6769626c65040114636c61737330011c5665633c75383e0005004c416c6c436f6e637265746546756e6769626c650401086964a90201344d756c74694c6f636174696f6e00060058416c6c436f6e63726574654e6f6e46756e6769626c65040114636c617373a90201344d756c74694c6f636174696f6e00070040416273747261637446756e6769626c65080108696430011c5665633c75383e000118616d6f756e74bd020110753132380008004c41627374726163744e6f6e46756e6769626c65080114636c61737330011c5665633c75383e000120696e7374616e6365310301344173736574496e7374616e636500090040436f6e637265746546756e6769626c650801086964a90201344d756c74694c6f636174696f6e000118616d6f756e74bd02011075313238000a004c436f6e63726574654e6f6e46756e6769626c65080114636c617373a90201344d756c74694c6f636174696f6e000120696e7374616e6365310301344173736574496e7374616e6365000b00006d030c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404003503011c5b75383b20385d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04003503011c5b75383b20385d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408003503011c5b75383b20385d00000d03011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090971030c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011834496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d650d03011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687420011857656967687400013c72657175697265645f776569676874200118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657828013c4f766572776569676874496e64657800013c72657175697265645f7765696768742001185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657828013c4f766572776569676874496e64657800012c7765696768745f75736564200118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090975030c306f726d6c5f78746f6b656e73186d6f64756c65144576656e74040454000104585472616e736665727265644d756c746941737365747310011873656e646572000130543a3a4163636f756e7449640001186173736574731d03012c4d756c746941737365747300010c666565250301284d756c7469417373657400011064657374c90201344d756c74694c6f636174696f6e000004885472616e7366657272656420604d756c74694173736574602077697468206665652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090979030c5470616c6c65745f78636d5f7472616e736163746f721870616c6c6574144576656e7404045400012c505472616e736163746564446572697661746976651001286163636f756e745f6964000130543a3a4163636f756e74496400011064657374c90201344d756c74694c6f636174696f6e00011063616c6c30011c5665633c75383e000114696e646578a8010c75313600000439015472616e7361637465642074686520696e6e65722063616c6c207468726f75676820612064657269766174697665206163636f756e7420696e20612064657374696e6174696f6e20636861696e2e4c5472616e736163746564536f7665726569676e0c01246665655f7061796572000130543a3a4163636f756e74496400011064657374c90201344d756c74694c6f636174696f6e00011063616c6c30011c5665633c75383e00010425015472616e736163746564207468652063616c6c207468726f7567682074686520736f7665726569676e206163636f756e7420696e20612064657374696e6174696f6e20636861696e2e405472616e7361637465645369676e65640c01246665655f7061796572000130543a3a4163636f756e74496400011064657374c90201344d756c74694c6f636174696f6e00011063616c6c30011c5665633c75383e00020411015472616e736163746564207468652063616c6c207468726f7567682061207369676e6564206163636f756e7420696e20612064657374696e6174696f6e20636861696e2e5052656769737465726564446572697661746976650801286163636f756e745f6964000130543a3a4163636f756e744964000114696e646578a8010c753136000304c0526567697374657265642061206465726976617469766520696e64657820666f7220616e206163636f756e742069642e5844655265676973746572656444657269766174697665040114696e646578a8010c753136000400385472616e736163744661696c65640401146572726f720103012058636d4572726f720005043c5472616e73616374206661696c65644c5472616e73616374496e666f4368616e6765640801206c6f636174696f6ec90201344d756c74694c6f636174696f6e00012c72656d6f74655f696e666f7d03017c52656d6f74655472616e73616374496e666f576974684d61785765696768740006049c4368616e67656420746865207472616e7361637420696e666f206f662061206c6f636174696f6e4c5472616e73616374496e666f52656d6f7665640401206c6f636174696f6ec90201344d756c74694c6f636174696f6e0007049c52656d6f76656420746865207472616e7361637420696e666f206f662061206c6f636174696f6e5c446573744665655065725365636f6e644368616e6765640801206c6f636174696f6ec90201344d756c74694c6f636174696f6e0001386665655f7065725f7365636f6e64180110753132380008045c53657420646573742066656520706572207365636f6e645c446573744665655065725365636f6e6452656d6f7665640401206c6f636174696f6ec90201344d756c74694c6f636174696f6e0009046852656d6f766520646573742066656520706572207365636f6e644848726d704d616e6167656d656e7453656e74040118616374696f6e8103013448726d704f7065726174696f6e000a048c48524d50206d616e61676520616374696f6e2073756363657366756c6c792073656e7404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097d030c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65747c52656d6f74655472616e73616374496e666f576974684d617857656967687400000c01547472616e736163745f65787472615f77656967687428012c58636d56325765696768740001286d61785f77656967687428012c58636d56325765696768740001707472616e736163745f65787472615f7765696768745f7369676e65640101014c4f7074696f6e3c58636d56325765696768743e000081030c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65743448726d704f7065726174696f6e00010c20496e69744f70656e04008503013848726d70496e6974506172616d730000001841636365707404011c706172615f69640503011850617261496400010014436c6f736504008903013448726d704368616e6e656c49640002000085030c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65743848726d70496e6974506172616d7300000c011c706172615f69640503011850617261496400015470726f706f7365645f6d61785f636170616369747910010c75333200016470726f706f7365645f6d61785f6d6573736167655f73697a6510010c753332000089030c48706f6c6b61646f745f70617261636861696e287072696d6974697665733448726d704368616e6e656c4964000008011873656e646572050301084964000124726563697069656e7405030108496400008d030c2c6f726d6c5f746f6b656e73186d6f64756c65144576656e740404540001341c456e646f7765640c012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f73740c012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000108ec416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77c84578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e7366657210012c63757272656e63795f696469010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2052657365727665640c012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000304e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e72657365727665640c012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656414012c63757272656e63795f696469010134543a3a43757272656e6379496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001187374617475737c013442616c616e6365537461747573000508f4536f6d652072657365727665642062616c616e63652077617320726570617472696174656420286d6f7665642066726f6d20726573657276656420746f44616e6f74686572206163636f756e74292e2842616c616e636553657410012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500060468412062616c616e6365207761732073657420627920726f6f742e40546f74616c49737375616e636553657408012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e6365000704b854686520746f74616c2069737375616e6365206f6620616e2063757272656e637920686173206265656e207365742457697468647261776e0c012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000804ec536f6d652062616c616e63657320776572652077697468647261776e2028652e672e2070617920666f72207472616e73616374696f6e20666565291c536c617368656410012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e74496400012c667265655f616d6f756e74180128543a3a42616c616e636500013c72657365727665645f616d6f756e74180128543a3a42616c616e6365000904d4536f6d652062616c616e636573207765726520736c61736865642028652e672e2064756520746f206d69732d6265686176696f7229244465706f73697465640c012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a04984465706f736974656420736f6d652062616c616e636520696e746f20616e206163636f756e741c4c6f636b53657410011c6c6f636b5f6964350301384c6f636b4964656e74696669657200012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b0454536f6d652066756e647320617265206c6f636b65642c4c6f636b52656d6f7665640c011c6c6f636b5f6964350301384c6f636b4964656e74696669657200012c63757272656e63795f696469010134543a3a43757272656e6379496400010c77686f000130543a3a4163636f756e744964000c047c536f6d65206c6f636b65642066756e6473207765726520756e6c6f636b656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090991030c2c636861696e6272696467651870616c6c6574144576656e740404540001345c52656c617965725468726573686f6c644368616e676564040010010c753332000004a8566f7465207468726573686f6c6420686173206368616e67656420286e65775f7468726573686f6c642940436861696e57686974656c6973746564040008011c436861696e4964000104b0436861696e206e6f7720617661696c61626c6520666f72207472616e73666572732028636861696e5f6964293052656c6179657241646465640400000130543a3a4163636f756e7449640002045052656c6179657220616464656420746f207365743852656c6179657252656d6f7665640400000130543a3a4163636f756e7449640003046052656c617965722072656d6f7665642066726f6d207365744046756e6769626c655472616e73666572140008011c436861696e496400002801304465706f7369744e6f6e636500000401285265736f75726365496400009503011055323536000030011c5665633c75383e000404990146756e676c69626c655472616e7366657220697320666f722072656c6179696e672066756e6769626c65732028646573745f69642c206e6f6e63652c207265736f757263655f69642c20616d6f756e742c20726563697069656e742c206d65746164617461294c4e6f6e46756e6769626c655472616e73666572180008011c436861696e496400002801304465706f7369744e6f6e636500000401285265736f757263654964000030011c5665633c75383e000030011c5665633c75383e000030011c5665633c75383e00050495014e6f6e46756e6769626c655472616e7366657220697320666f722072656c6179696e67204e4654532028646573745f69642c206e6f6e63652c207265736f757263655f69642c20746f6b656e5f69642c20726563697069656e742c206d65746164617461293c47656e657269635472616e73666572100008011c436861696e496400002801304465706f7369744e6f6e636500000401285265736f757263654964000030011c5665633c75383e000604550147656e657269635472616e7366657220697320666f7220612067656e657269632064617461207061796c6f61642028646573745f69642c206e6f6e63652c207265736f757263655f69642c206d65746164617461291c566f7465466f720c0008011c436861696e496400002801304465706f7369744e6f6e63650000000130543a3a4163636f756e74496400070490566f7465207375626d697474656420696e206661766f7572206f662070726f706f73616c2c566f7465416761696e73740c0008011c436861696e496400002801304465706f7369744e6f6e63650000000130543a3a4163636f756e74496400080478566f74207375626d697474656420616761696e73742070726f706f73616c4050726f706f73616c417070726f766564080008011c436861696e496400002801304465706f7369744e6f6e636500090480566f74696e67207375636365737366756c20666f7220612070726f706f73616c4050726f706f73616c52656a6563746564080008011c436861696e496400002801304465706f7369744e6f6e6365000a0468566f74696e672072656a656374656420612070726f706f73616c4450726f706f73616c537563636565646564080008011c436861696e496400002801304465706f7369744e6f6e6365000b046c457865637574696f6e206f662063616c6c207375636365656465643850726f706f73616c4661696c6564080008011c436861696e496400002801304465706f7369744e6f6e6365000c0460457865637574696f6e206f662063616c6c206661696c656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099503083c7072696d69746976655f7479706573105532353600000400990301205b7536343b20345d000099030000030400000028009d030c4c6f726d6c5f61737365745f7265676973747279186d6f64756c65144576656e740404540001083c52656769737465726564417373657408012061737365745f696469010128543a3a417373657449640001206d65746164617461a10301b041737365744d657461646174613c543a3a42616c616e63652c20543a3a437573746f6d4d657461646174613e0000003055706461746564417373657408012061737365745f696469010128543a3a417373657449640001206d65746164617461a10301b041737365744d657461646174613c543a3a42616c616e63652c20543a3a437573746f6d4d657461646174613e00010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a1030c2c6f726d6c5f7472616974733861737365745f72656769737472793441737365744d65746164617461081c42616c616e6365011838437573746f6d4d6574616461746101a50300180120646563696d616c7310010c7533320001106e616d6530011c5665633c75383e00011873796d626f6c30011c5665633c75383e00014c6578697374656e7469616c5f6465706f73697418011c42616c616e63650001206c6f636174696f6ead0301784f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e0001286164646974696f6e616ca5030138437573746f6d4d657461646174610000a5030c246366675f747970657318746f6b656e7338437573746f6d4d65746164617461000010010c78636da903012c58636d4d657461646174610001206d696e7461626c65c00110626f6f6c0001307065726d697373696f6e6564c00110626f6f6c000134706f6f6c5f63757272656e6379c00110626f6f6c0000a9030c246366675f74797065730c78636d2c58636d4d6574616461746100000401386665655f7065725f7365636f6e646101013c4f7074696f6e3c42616c616e63653e0000ad0304184f7074696f6e04045401a5020108104e6f6e6500000010536f6d650400a5020000010000b1030c206f726d6c5f78636d186d6f64756c65144576656e740404540001041053656e74080108746fc90201344d756c74694c6f636174696f6e00011c6d6573736167651103011c58636d3c28293e0000048458434d206d6573736167652073656e742e205c5b746f2c206d6573736167655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b5030c6070616c6c65745f6d6967726174696f6e5f6d616e616765721870616c6c6574144576656e74040454000124584d6967726174656453797374656d4163636f756e7473040010010c753332000004a84e756d626572206f66206163636f756e747320746861742068617665206265656e206d696772617465645c4d6967726174656456657374696e674163636f756e7473040010010c753332000104a44e756d626572206f662076657374696e6720746861742068617665206265656e206d69677261746564504d6967726174656450726f787950726f78696573040010010c753332000204a44e756d626572206f662070726f7869657320746861742068617665206265656e206d69677261746564544d69677261746564546f74616c49737375616e63650800180128543a3a42616c616e63650000180128543a3a42616c616e6365000308f4546865206e657720616e6420746865206f6c642069737375616e636520616674657220746865206d6967726174696f6e206f662069737375616e63652e785b604f6c6449737375616e6365602c20604e657749737375616e6365605d644661696c6564546f4d69677261746556657374696e67466f720400000130543a3a4163636f756e74496400040c09015468697320697320616e206572726f722074686174206d757374206265206469737061746368656420617320616e204576656e742c20617320776520646f206e6f74110177616e7420746f206661696c207468652077686f6c65206261746368207768656e206f6e65206163636f756e74206661696c732e2053686f756c6420616c736f206e6f74b068617070656e2c2061732077652074616b65207468656d2066726f6d206d61696e6e65742e204275742e2e2e484d6967726174656456657374696e67466f721000000130543a3a4163636f756e74496400001801fd013c3c542061732070616c6c65745f76657374696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a0a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e636500001801fd013c3c542061732070616c6c65745f76657374696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a0a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e63650000100138543a3a426c6f636b4e756d6265720005047c446566696e6573207468652076657374696e67207765206d696772617465646c4661696c6564546f4d69677261746550726f787944617461466f720400000130543a3a4163636f756e74496400060c0101496e646963617465732069662061206d6967726174696f6e206f662070726f78792064617461206661696c65642c20746869732073686f756c64204e45564552fc68617070656e2c20616e642063616e206f6e6c792068617070656e2064756520746f20696e73756666696369656e742062616c616e63657320647572696e671c72657365727665504d6967726174656450726f787944617461466f720c00000130543a3a4163636f756e74496400001801f5013c3c542061732070616c6c65745f70726f78793a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a0a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e6365000028010c753634000708ec496e6469636174657320746861742070726f7879206461746120686173206265656e206d696772617465642073756363657366756c6c7920666f7201015b6050726f786965644163636f756e74602c20604465706f7369744f6e50726f786965734163636f756e74602c20604e756d6265724f6650726f78696573605d444d6967726174696f6e46696e6973686564000804a0496e64696361746573207468617420746865206d6967726174696f6e2069732066696e697368656404a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b9030c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c749801384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572050101504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c749801384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bd030c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f67c103010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c61646472657373d902011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c61646472657373d90201104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c61646472657373d902011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c61646472657373d90201104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c1030c20657468657265756d0c6c6f670c4c6f6700000c011c61646472657373d902011048313630000118746f70696373c50301245665633c483235363e0001106461746130011442797465730000c5030000022c00c9030c3c70616c6c65745f626173655f6665651870616c6c6574144576656e7400010c404e65774261736546656550657247617304010c66656595030110553235360000003c426173654665654f766572666c6f77000100344e6577456c6173746963697479040128656c6173746963697479cd03011c5065726d696c6c00020004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909cd030c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000d1030c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656410011066726f6dd902011048313630000108746fd9020110483136300001407472616e73616374696f6e5f686173682c01104832353600012c657869745f726561736f6ed503012845786974526561736f6e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d5030c2065766d5f636f7265146572726f722845786974526561736f6e0001101c537563636565640400d903012c4578697453756363656564000000144572726f720400dd030124457869744572726f72000100185265766572740400ed0301284578697452657665727400020014466174616c0400f103012445786974466174616c00030000d9030c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e656400010020537569636964656400020000dd030c2065766d5f636f7265146572726f7224457869744572726f7200013c38537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400e10301184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f746865720400e5030144436f773c277374617469632c207374723e000d0000e1030c2065766d5f636f7265186f70636f6465184f70636f64650000040008010875380000e503040c436f7704045401e903000400e903000000e9030000050200ed030c2065766d5f636f7265146572726f72284578697452657665727400010420526576657274656400000000f1030c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c0400dd030124457869744572726f72000200144f746865720400e5030144436f773c277374617469632c207374723e00030000f50308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000f903000002b400fd0308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6eb102014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65e903016473705f72756e74696d653a3a52756e74696d65537472696e67000001040c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000014684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000324190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d73050401345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b6579730d0401205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05040000020904000904000004083030000d04000002300011040c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373150401845065724469737061746368436c6173733c57656967687473506572436c6173733e000015040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011904000c01186e6f726d616c190401045400012c6f7065726174696f6e616c19040104540001246d616e6461746f72791904010454000019040c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e7369631d0401384f7074696f6e3c5765696768743e0001246d61785f746f74616c1d0401384f7074696f6e3c5765696768743e00012072657365727665641d0401384f7074696f6e3c5765696768743e00001d0404184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000021040c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178250401545065724469737061746368436c6173733c7533323e000025040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400002904082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c75363400002d04082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65e903013452756e74696d65537472696e67000124696d706c5f6e616d65e903013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069733104011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800003104040c436f7704045401350400040035040000003504000002390400390400000408350310003d040c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657441040c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e44617461080448012c044e01100010012c706172656e745f6865616445040120486561644461746100014c72656c61795f706172656e745f6e756d6265721001044e00016472656c61795f706172656e745f73746f726167655f726f6f742c0104480001306d61785f706f765f73697a6510010c753332000045040c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040030011c5665633c75383e0000490404184f7074696f6e040454014d040108104e6f6e6500000010536f6d6504004d0400000100004d040c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e740000000051040c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465735504014442547265655365743c5665633c75383e3e000055040420425472656553657404045401300004000d0400000059040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f686561642c014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65b40128287533322c2075333229000140696e67726573735f6368616e6e656c735d0401885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c735d0401885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00005d04000002610400610400000408050365040065040c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747910010c7533320001386d61785f746f74616c5f73697a6510010c7533320001406d61785f6d6573736167655f73697a6510010c7533320001246d73675f636f756e7410010c753332000128746f74616c5f73697a6510010c7533320001206d71635f68656164fd0201304f7074696f6e3c486173683e000069040c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6510010c7533320001486d61785f686561645f646174615f73697a6510010c7533320001586d61785f7570776172645f71756575655f636f756e7410010c7533320001546d61785f7570776172645f71756575655f73697a6510010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6510010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746510010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e10012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617910012c426c6f636b4e756d62657200006d04089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e000004002c012452656c61794861736800007104042042547265654d617008044b0105030456016d040004007504000000750400000279040079040000040805036d04007d0400000281040081040860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401050300080124726563697069656e740503010849640001106461746130015073705f7374643a3a7665633a3a5665633c75383e000085040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174618904015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653001345570776172644d65737361676500010044617574686f72697a655f75706772616465040124636f64655f686173682c011c543a3a4861736800020060656e6163745f617574686f72697a65645f75706772616465040110636f646530011c5665633c75383e000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8904089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174614104015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174655104015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765738d04016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573950401a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e00008d0400000291040091040860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d62657200010c6d736730013c446f776e776172644d65737361676500009504042042547265654d617008044b0105030456019904000400a10400000099040000029d04009d040860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201100008011c73656e745f617410012c426c6f636b4e756d6265720001106461746130015073705f7374643a3a7665633a3a5665633c75383e0000a104000002a50400a504000004080503990400a9040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041501417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e675050726f686962697465644279506f6c6b61646f740001044901506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733877696c6c696e6720746f2072756e6856616c69646174696f6e446174614e6f74417661696c61626c65000304190154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404250154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad04101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400c50301185665633c543e0000b1040c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb504101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b904045300000400c10401185665633c543e0000b904083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964350301384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73bd04011c526561736f6e730000bd04083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000c104000002b90400c504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401c904045300000400cd0401185665633c543e0000c904083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720135031c42616c616e6365011800080108696435030144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000cd04000002c90400d1040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374d50401504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bd020128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686fd50401504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565bd020128543a3a42616c616e63650001306e65775f7265736572766564bd020128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365d50401504163636f756e7449644c6f6f6b75704f663c543e00011064657374d50401504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bd020128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c69766508011064657374d50401504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565bd020128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374d50401504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665c00110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686fd50401504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed5040c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e646578019c011408496404000001244163636f756e74496400000014496e6465780400d90401304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400950201205b75383b2032305d00040000d9040000069c00dd040c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e1040c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000e504086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000e904101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401000453000004008801185665633c543e0000ed04101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f104045300000400f50401185665633c543e0000f1040c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65743443616e646964617465496e666f08244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650000f504000002f10400f9040c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c65741043616c6c040454000114447365745f696e76756c6e657261626c657304010c6e65778801445665633c543a3a4163636f756e7449643e000004bc53657420746865206c697374206f6620696e76756c6e657261626c65202866697865642920636f6c6c61746f72732e587365745f646573697265645f63616e6469646174657304010c6d617810010c75333200010c11015365742074686520696465616c206e756d626572206f6620636f6c6c61746f727320286e6f7420696e636c7564696e672074686520696e76756c6e657261626c6573292e7d014966206c6f776572696e672074686973206e756d6265722c207468656e20746865206e756d626572206f662072756e6e696e6720636f6c6c61746f727320636f756c6420626520686967686572207468616e2074686973206669677572652e9d0141736964652066726f6d2074686174206564676520636173652c2074686572652073686f756c64206265206e6f206f746865722077617920746f2068617665206d6f726520636f6c6c61746f7273207468616e207468652064657369726564206e756d6265722e487365745f63616e6469646163795f626f6e64040110626f6e6418013042616c616e63654f663c543e00020478536574207468652063616e64696461637920626f6e6420616d6f756e742e5472656769737465725f61735f63616e646964617465000310410152656769737465722074686973206163636f756e74206173206120636f6c6c61746f722063616e6469646174652e20546865206163636f756e74206d7573742028612920616c726561647920686176651d01726567697374657265642073657373696f6e206b65797320616e64202862292062652061626c6520746f207265736572766520746865206043616e646964616379426f6e64602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e306c656176655f696e74656e7400041855014465726567697374657220606f726967696e60206173206120636f6c6c61746f722063616e6469646174652e204e6f746520746861742074686520636f6c6c61746f722063616e206f6e6c79206c65617665206f6e0d0173657373696f6e206368616e67652e20546865206043616e646964616379426f6e64602077696c6c20626520756e726573657276656420696d6d6564696174656c792e005d01546869732063616c6c2077696c6c206661696c2069662074686520746f74616c206e756d626572206f662063616e6469646174657320776f756c642064726f702062656c6f7720604d696e43616e64696461746573602e00dc546869732063616c6c206973206e6f7420617661696c61626c6520746f2060496e76756c6e657261626c656020636f6c6c61746f72732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd040c6470616c6c65745f636f6c6c61746f725f73656c656374696f6e1870616c6c6574144572726f7204045400012844546f6f4d616e7943616e646964617465730000044c546f6f206d616e792063616e6469646174657340546f6f46657743616e6469646174657300010448546f6f206665772063616e646964617465731c556e6b6e6f776e00020434556e6b6e6f776e206572726f72285065726d697373696f6e000304405065726d697373696f6e20697373756540416c726561647943616e6469646174650004046c5573657220697320616c726561647920612063616e646964617465304e6f7443616e6469646174650005045c55736572206973206e6f7420612063616e64696461746550546f6f4d616e79496e76756c6e657261626c657300060458546f6f206d616e7920696e76756c6e657261626c65734c416c7265616479496e76756c6e657261626c650007047c5573657220697320616c726561647920616e20496e76756c6e657261626c655c4e6f4173736f63696174656456616c696461746f724964000804984163636f756e7420686173206e6f206173736f6369617465642076616c696461746f722049445856616c696461746f724e6f74526567697374657265640009048856616c696461746f72204944206973206e6f7420796574207265676973746572656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454010505045300000400090501185665633c543e00000505084470616c6c65745f617574686f727368697038556e636c65456e7472794974656d0c2c426c6f636b4e756d62657201101048617368012c18417574686f72010001083c496e636c7573696f6e486569676874040010012c426c6f636b4e756d62657200000014556e636c6508002c0110486173680000050101384f7074696f6e3c417574686f723e0001000009050000020505000d050c4470616c6c65745f617574686f72736869701870616c6c65741043616c6c040454000104287365745f756e636c65730401286e65775f756e636c6573110501385665633c543a3a4865616465723e0000046050726f76696465206120736574206f6620756e636c65732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11050000021505001505102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572011010486173680119050014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572b10201184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f7574707574000118646967657374340118446967657374000019050c2873705f72756e74696d65187472616974732c426c616b6554776f323536000000001d050c4470616c6c65745f617574686f72736869701870616c6c6574144572726f7204045400011c48496e76616c6964556e636c65506172656e740000048854686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e40556e636c6573416c726561647953657400010480556e636c657320616c72656164792073657420696e2074686520626c6f636b2e34546f6f4d616e79556e636c657300020440546f6f206d616e7920756e636c65732e3047656e65736973556e636c650003045454686520756e636c652069732067656e657369732e30546f6f48696768556e636c650004047c54686520756e636c6520697320746f6f206869676820696e20636861696e2e50556e636c65416c7265616479496e636c756465640005047854686520756e636c6520697320616c726561647920696e636c756465642e204f6c64556e636c65000604b454686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092105000002250500250500000408002905002905084c646576656c6f706d656e745f72756e74696d652c53657373696f6e4b6579730000080110617572612d0501c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000134626c6f636b5f726577617264732d0501e43c426c6f636b52657761726473206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300002d05104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004003105013c737232353531393a3a5075626c6963000031050c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000350500000210003905000004083d0530003d050c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000041050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579732905011c543a3a4b65797300011470726f6f6630011c5665633c75383e000038e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002823203c7765696768743e11012d20436f6d706c65786974793a20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360a02d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360802d204462526561647320706572206b65792069643a20604b65794f776e657260842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e2870757267655f6b657973000140c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e002823203c7765696768743e61012d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468a420206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460a02d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e45050c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e4905101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012d050453000004004d0501185665633c543e00004d050000022d05005105084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c75363400005505000004080004005905083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e94015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c735d05018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e00005d05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401000453000004008801185665633c543e000061050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f726965738801445665633c543a3a4163636f756e7449643e00011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000405101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e002823203c7765696768743e19014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d442d204442205765696768743a204e6f6e65482d20506c75732043616c6c205765696768742c23203c2f7765696768743e2061735f6d756c74691401247468726573686f6c64a8010c7531360001446f746865725f7369676e61746f726965738801445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74390801844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f7765696768742001185765696768740001b45501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e002823203c7765696768743e502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743abc202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745dc0202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d482d20506c75732043616c6c205765696768742c23203c2f7765696768743e40617070726f76655f61735f6d756c74691401247468726573686f6c64a8010c7531360001446f746865725f7369676e61746f726965738801445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74390801844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687420011857656967687400028c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e002823203c7765696768743e242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e882d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743ab8202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745dbc202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c23203c2f7765696768743e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64a8010c7531360001446f746865725f7369676e61746f726965738801445665633c543a3a4163636f756e7449643e00012474696d65706f696e7494016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000368550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e002823203c7765696768743e242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e882d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743af8202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e74fc202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6505084c646576656c6f706d656e745f72756e74696d652c52756e74696d6543616c6c0001cc1853797374656d0400010401ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000003c50617261636861696e53797374656d0400850401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0001002454696d657374616d700400b10401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003002042616c616e6365730400d10401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00140044436f6c6c61746f7253656c656374696f6e0400f90401d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f7253656c656374696f6e2c2052756e74696d653e00470028417574686f727368697004000d0501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417574686f72736869702c2052756e74696d653e001e001c53657373696f6e0400410501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e001f00204d756c74697369670400610501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e003c001450726f78790400690501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e003d001c5574696c6974790400710501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e003e00245363686564756c65720400950501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e003f001c436f756e63696c04009d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e00400024456c656374696f6e730400a90501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e732c2052756e74696d653e0041002444656d6f63726163790400b10501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e004200204964656e746974790400c10501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0043001c56657374696e670400610601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e0044002054726561737572790400690601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0045001c556e697175657304006d0601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c556e69717565732c2052756e74696d653e00460020507265696d6167650400790601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e004800104665657304007d0601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466565732c2052756e74696d653e005a0018416e63686f720400810601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c416e63686f722c2052756e74696d653e005b0018436c61696d730400890601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436c61696d732c2052756e74696d653e005c003843726f77646c6f616e436c61696d04008d0601cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f77646c6f616e436c61696d2c2052756e74696d653e005d003c43726f77646c6f616e5265776172640400ad0601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43726f77646c6f616e5265776172642c2052756e74696d653e005e0028506f6f6c53797374656d0400b10601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6f6c53797374656d2c2052756e74696d653e005f00144c6f616e730400b50601a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c6f616e732c2052756e74696d653e0060002c5065726d697373696f6e730400b90601c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5065726d697373696f6e732c2052756e74696d653e00610044436f6c6c61746f72416c6c6f776c6973740400bd0601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6c6c61746f72416c6c6f776c6973742c2052756e74696d653e00620018546f6b656e730400c10601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546f6b656e732c2052756e74696d653e006300204e667453616c65730400c50601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e667453616c65732c2052756e74696d653e006400184272696467650400c90601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4272696467652c2052756e74696d653e006500104e6674730400cd0601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6674732c2052756e74696d653e006700204b657973746f72650400d90601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4b657973746f72652c2052756e74696d653e0068002c496e766573746d656e74730400e50601c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e766573746d656e74732c2052756e74696d653e006900404c6971756964697479526577617264730400e90601d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4c6971756964697479526577617264732c2052756e74696d653e006b0028436f6e6e6563746f72730400ed0601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e6e6563746f72732c2052756e74696d653e006c0030506f6f6c52656769737472790400f50601c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6f6c52656769737472792c2052756e74696d653e006d0030426c6f636b526577617264730400290701c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426c6f636b526577617264732c2052756e74696d653e006f002458636d70517565756504002d0701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0078002c506f6c6b61646f7458636d0400310701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00790020446d7051756575650400950701b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e007b001c58546f6b656e730400990701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58546f6b656e732c2052756e74696d653e007c003458636d5472616e736163746f720400a90701c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d5472616e736163746f722c2052756e74696d653e007d002c436861696e4272696467650400bd0701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436861696e4272696467652c2052756e74696d653e009700444f726d6c417373657452656769737472790400c10701d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f726d6c417373657452656769737472792c2052756e74696d653e0098001c4f726d6c58636d0400d10701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f726d6c58636d2c2052756e74696d653e009900244d6967726174696f6e0400d50701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d6967726174696f6e2c2052756e74696d653e00c700105375646f0400f90701a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e00c8000c45564d0400fd0701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e00a0001c4261736546656504000d0801b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173654665652c2052756e74696d653e00a20020457468657265756d0400110801b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e00a3000069050c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616cd50401504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970656d0501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00002c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465d50401504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065a40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465d50401504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065a40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065a40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578a8010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572d50401504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065a40130543a3a50726f787954797065000114696e646578a8010c753136000118686569676874b1020138543a3a426c6f636b4e756d6265720001246578745f696e646578b102010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cd50401504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cd50401504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465d50401504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465d50401504163636f756e7449644c6f6f6b75704f663c543e0001107265616cd50401504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970656d0501504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d0504184f7074696f6e04045401a40108104e6f6e6500000010536f6d650400a4000001000071050c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c737505017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578a8010c75313600011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c737505017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696e79050154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c737505017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c776974685f77656967687408011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e75050000026505007905084c646576656c6f706d656e745f72756e74696d65304f726967696e43616c6c65720001181873797374656d04007d0501746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400810501010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e0040002c506f6c6b61646f7458636d04008505014870616c6c65745f78636d3a3a4f726967696e0079002843756d756c757358636d04008905016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e007a0020457468657265756d04008d05015c70616c6c65745f657468657265756d3a3a4f726967696e00a30010566f69640400910501110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f6964000500007d050c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200008105084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000085050c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400c90201344d756c74694c6f636174696f6e00000020526573706f6e73650400c90201344d756c74694c6f636174696f6e0001000089050c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e040005030118506172614964000100008d05083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e0400d902011048313630000000009105081c73705f636f726510566f69640001000095050c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963990501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963990501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963990501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000414a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e002823203c7765696768743e5453616d65206173205b607363686564756c65605d2e2c23203c2f7765696768743e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963990501a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000514905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e002823203c7765696768743ec453616d65206173205b607363686564756c655f6e616d6564605d2853656c663a3a7363686564756c655f6e616d6564292e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e990504184f7074696f6e04045401b40108104e6f6e6500000010536f6d650400b400000100009d050c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d626572738801445665633c543a3a4163636f756e7449643e0001147072696d65050101504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616c6505017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b102010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b102012c4d656d626572436f756e7400012070726f706f73616c6505017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b102010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b102013450726f706f73616c496e64657800011c617070726f7665c00110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b102013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64a10501244f6c645765696768740001306c656e6774685f626f756e64b102010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b102013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642001185765696768740001306c656e6774685f626f756e64b102010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea105000006a50500a505082873705f77656967687473244f6c645765696768740000040028010c7536340000a9050c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c65741043616c6c04045400011810766f7465080114766f7465738801445665633c543a3a4163636f756e7449643e00011476616c7565bd02013042616c616e63654f663c543e00005c5901566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e20546869732063616e2062652063616c6c656420746fe07365742074686520696e697469616c20766f7465732c206f722075706461746520616c7265616479206578697374696e6720766f7465732e005d0155706f6e20696e697469616c20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e642061206465706f73697420616d6f756e742069734d0172657365727665642e20546865206465706f736974206973206261736564206f6e20746865206e756d626572206f6620766f74657320616e642063616e2062652075706461746564206f7665722074696d652e004c5468652060766f746573602073686f756c643a4420202d206e6f7420626520656d7074792e550120202d206265206c657373207468616e20746865206e756d626572206f6620706f737369626c652063616e646964617465732e204e6f7465207468617420616c6c2063757272656e74206d656d6265727320616e6411012020202072756e6e6572732d75702061726520616c736f206175746f6d61746963616c6c792063616e6469646174657320666f7220746865206e65787420726f756e642e0049014966206076616c756560206973206d6f7265207468616e206077686f60277320667265652062616c616e63652c207468656e20746865206d6178696d756d206f66207468652074776f20697320757365642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e6700550149742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f202a2a4e4f542a2a20706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865a86c6f636b20616e64206b65657020736f6d6520666f722066757274686572206f7065726174696f6e732e002823203c7765696768743e5101576520617373756d6520746865206d6178696d756d2077656967687420616d6f6e6720616c6c20332063617365733a20766f74655f657175616c2c20766f74655f6d6f726520616e6420766f74655f6c6573732e2c23203c2f7765696768743e3072656d6f76655f766f7465720001146c52656d6f766520606f726967696e60206173206120766f7465722e00b8546869732072656d6f76657320746865206c6f636b20616e642072657475726e7320746865206465706f7369742e00fc546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e656420616e64206265206120766f7465722e407375626d69745f63616e64696461637904013c63616e6469646174655f636f756e74b102010c75333200023c11015375626d6974206f6e6573656c6620666f722063616e6469646163792e204120666978656420616d6f756e74206f66206465706f736974206973207265636f726465642e005d01416c6c2063616e64696461746573206172652077697065642061742074686520656e64206f6620746865207465726d2e205468657920656974686572206265636f6d652061206d656d6265722f72756e6e65722d75702ccc6f72206c65617665207468652073797374656d207768696c65207468656972206465706f73697420697320736c61736865642e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642e002c232323205761726e696e67005d014576656e20696620612063616e64696461746520656e6473207570206265696e672061206d656d6265722c2074686579206d7573742063616c6c205b6043616c6c3a3a72656e6f756e63655f63616e646964616379605d5901746f20676574207468656972206465706f736974206261636b2e204c6f73696e67207468652073706f7420696e20616e20656c656374696f6e2077696c6c20616c77617973206c65616420746f206120736c6173682e002823203c7765696768743e0901546865206e756d626572206f662063757272656e742063616e64696461746573206d7573742062652070726f7669646564206173207769746e65737320646174612e2c23203c2f7765696768743e4872656e6f756e63655f63616e64696461637904012872656e6f756e63696e67ad05012852656e6f756e63696e670003484d0152656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c3c6f7574636f6d65732065786973743a0049012d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c20746865206465706f736974206973f02020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e61012d20606f726967696e6020697320612063757272656e742072756e6e65722d75702e20496e207468697320636173652c20746865206465706f73697420697320756e72657365727665642c2072657475726e656420616e648c20206f726967696e2069732072656d6f76656420617320612072756e6e65722d75702e55012d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c20746865206465706f73697420697320756e726573657276656420616e64206f726967696e2069735501202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e6101202053696d696c617220746f205b6072656d6f76655f6d656d626572605d2853656c663a3a72656d6f76655f6d656d626572292c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865795901202061726520696d6d6564696174656c7920757365642e20496620746865207072696d652069732072656e6f756e63696e672c207468656e206e6f207072696d652077696c6c20657869737420756e74696c207468653420206e65787420726f756e642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642c20616e642068617665206f6e65206f66207468652061626f766520726f6c65732e002823203c7765696768743ee05468652074797065206f662072656e6f756e63696e67206d7573742062652070726f7669646564206173207769746e65737320646174612e2c23203c2f7765696768743e3472656d6f76655f6d656d6265720c010c77686fd50401504163636f756e7449644c6f6f6b75704f663c543e000128736c6173685f626f6e64c00110626f6f6c000138726572756e5f656c656374696f6ec00110626f6f6c000448590152656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f667c746865206f7574676f696e67206d656d62657220697320736c61736865642e005501496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c616365732074686555016f7574676f696e67206d656d6265722e204f74686572776973652c2069662060726572756e5f656c656374696f6e60206973206074727565602c2061206e65772070687261676d656e20656c656374696f6e2069737c737461727465642c20656c73652c206e6f7468696e672068617070656e732e00590149662060736c6173685f626f6e64602069732073657420746f20747275652c2074686520626f6e64206f6620746865206d656d626572206265696e672072656d6f76656420697320736c61736865642e20456c73652c3c69742069732072657475726e65642e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e0041014e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e002823203c7765696768743e5101496620776520686176652061207265706c6163656d656e742c20776520757365206120736d616c6c207765696768742e20456c73652c2073696e63652074686973206973206120726f6f742063616c6c20616e64d077696c6c20676f20696e746f2070687261676d656e2c20776520617373756d652066756c6c20626c6f636b20666f72206e6f772e2c23203c2f7765696768743e50636c65616e5f646566756e63745f766f746572730801286e756d5f766f7465727310010c75333200012c6e756d5f646566756e637410010c7533320005284501436c65616e20616c6c20766f746572732077686f2061726520646566756e63742028692e652e207468657920646f206e6f7420736572766520616e7920707572706f736520617420616c6c292e20546865ac6465706f736974206f66207468652072656d6f76656420766f74657273206172652072657475726e65642e0001015468697320697320616e20726f6f742066756e6374696f6e20746f2062652075736564206f6e6c7920666f7220636c65616e696e67207468652073746174652e00b8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520726f6f742e002823203c7765696768743e5d0154686520746f74616c206e756d626572206f6620766f7465727320616e642074686f736520746861742061726520646566756e6374206d7573742062652070726f7669646564206173207769746e65737320646174612e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ead05086470616c6c65745f656c656374696f6e735f70687261676d656e2852656e6f756e63696e6700010c184d656d6265720000002052756e6e657255700001002443616e6469646174650400b102010c75333200020000b1050c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c0404540001481c70726f706f736508012070726f706f73616cb5050140426f756e64656443616c6c4f663c543e00011476616c7565bd02013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cb102012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578b102013c5265666572656e64756d496e646578000110766f7465d801644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e64657810013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616cb5050140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cb5050140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cb5050140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578b102013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fd50401504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6ebd050128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e64657810013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e6465785d02015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578b102012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb50510346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454016505010c184c6567616379040110686173682c01104861736800000018496e6c696e650400b9050134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e10010c75333200020000b905101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000bd050c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000c1050c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c04045400013c346164645f72656769737472617204011c6163636f756e74d50401504163636f756e7449644c6f6f6b75704f663c543e0000347841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e002823203c7765696768743e25012d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e302d204f6e65206576656e742e2c23203c2f7765696768743e307365745f6964656e74697479040110696e666fc50501a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e00014c290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e002823203c7765696768743e442d20604f2858202b205827202b205229601d0120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e64656429e020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429802d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e21012d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e302d204f6e65206576656e742e2c23203c2f7765696768743e207365745f73756273040110737562734d0601645665633c28543a3a4163636f756e7449642c2044617461293e0002548c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e002823203c7765696768743e302d20604f2850202b20532960e420202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e842d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e732e142d2044423adc20202d206050202b2053602073746f72616765206d75746174696f6e732028636f64656320636f6d706c657869747920604f2831296029bc20202d204f6e652073746f7261676520726561642028636f64656320636f6d706c657869747920604f28502960292ec020202d204f6e652073746f726167652077726974652028636f64656320636f6d706c657869747920604f28532960292ed020202d204f6e652073746f726167652d6578697374732028604964656e746974794f663a3a636f6e7461696e735f6b657960292e2c23203c2f7765696768743e38636c6561725f6964656e746974790003483901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e002823203c7765696768743e402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e882d204f6e652062616c616e63652d756e72657365727665206f7065726174696f6e2ec82d206032602073746f7261676520726561647320616e64206053202b2032602073746f726167652064656c6574696f6e732e302d204f6e65206576656e742e2c23203c2f7765696768743e44726571756573745f6a756467656d656e740801247265675f696e646578b1020138526567697374726172496e64657800011c6d61785f666565bd02013042616c616e63654f663c543e00045c94526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e002823203c7765696768743e342d20604f2852202b205829602e802d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2eb82d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e302d204f6e65206576656e742e2c23203c2f7765696768743e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e6465780005446843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e002823203c7765696768743e342d20604f2852202b205829602e802d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e882d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e2c2d204f6e65206576656e742c23203c2f7765696768743e1c7365745f666565080114696e646578b1020138526567697374726172496e64657800010c666565bd02013042616c616e63654f663c543e0006341901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e002823203c7765696768743e242d20604f285229602e782d204f6e652073746f72616765206d75746174696f6e20604f285229602ee42d2042656e63686d61726b3a20372e333135202b2052202a20302e33323920c2b57320286d696e207371756172657320616e616c79736973292c23203c2f7765696768743e387365745f6163636f756e745f6964080114696e646578b1020138526567697374726172496e64657800010c6e6577d50401504163636f756e7449644c6f6f6b75704f663c543e000734bc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e002823203c7765696768743e242d20604f285229602e782d204f6e652073746f72616765206d75746174696f6e20604f285229602ee02d2042656e63686d61726b3a20382e383233202b2052202a20302e333220c2b57320286d696e207371756172657320616e616c79736973292c23203c2f7765696768743e287365745f6669656c6473080114696e646578b1020138526567697374726172496e6465780001186669656c6473550601384964656e746974794669656c6473000834a853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e002823203c7765696768743e242d20604f285229602e782d204f6e652073746f72616765206d75746174696f6e20604f285229602ee42d2042656e63686d61726b3a20372e343634202b2052202a20302e33323520c2b57320286d696e207371756172657320616e616c79736973292c23203c2f7765696768743e4470726f766964655f6a756467656d656e741001247265675f696e646578b1020138526567697374726172496e646578000118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e745d06015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e746974792c011c543a3a48617368000950b850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e49012d20606964656e74697479603a205468652068617368206f6620746865205b604964656e74697479496e666f605d20666f72207468617420746865206a756467656d656e742069732070726f76696465642e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e002823203c7765696768743e342d20604f2852202b205829602e842d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e942d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2eb82d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e302d204f6e65206576656e742e2c23203c2f7765696768743e346b696c6c5f6964656e74697479040118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e000a4c410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e002823203c7765696768743e442d20604f2852202b2053202b205829602e802d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e702d206053202b2032602073746f72616765206d75746174696f6e732e302d204f6e65206576656e742e2c23203c2f7765696768743e1c6164645f73756208010c737562d50401504163636f756e7449644c6f6f6b75704f663c543e00011064617461d105011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c737562d50401504163636f756e7449644c6f6f6b75704f663c543e00011064617461d105011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c737562d50401504163636f756e7449644c6f6f6b75704f663c543e000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e04704964656e746974792070616c6c6574206465636c61726174696f6e2ec5050c3c70616c6c65745f6964656e74697479147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616cc9050190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c6179d1050110446174610001146c6567616cd10501104461746100010c776562d10501104461746100011072696f74d105011044617461000114656d61696cd10501104461746100013c7067705f66696e6765727072696e74490601404f7074696f6e3c5b75383b2032305d3e000114696d616765d10501104461746100011c74776974746572d1050110446174610000c905101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401cd05045300000400450601185665633c543e0000cd0500000408d105d10500d1050c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e6500000010526177300400d5050000010010526177310400d9050000020010526177320400dd050000030010526177330400e1050000040010526177340400400000050010526177350400e5050000060010526177360400e9050000070010526177370400ed05000008001052617738040035030000090010526177390400f10500000a001452617731300400f50500000b001452617731310400f90500000c001452617731320400fd0500000d001452617731330400010600000e001452617731340400050600000f00145261773135040009060000100014526177313604006d010000110014526177313704000d0600001200145261773138040011060000130014526177313904001506000014001452617732300400950200001500145261773231040019060000160014526177323204001d0600001700145261773233040021060000180014526177323404002506000019001452617732350400290600001a0014526177323604002d0600001b001452617732370400310600001c001452617732380400350600001d001452617732390400390600001e0014526177333004003d0600001f001452617733310400410600002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c53686154687265653235360400040000250000d505000003000000000800d905000003010000000800dd05000003020000000800e105000003030000000800e505000003050000000800e905000003060000000800ed05000003070000000800f105000003090000000800f5050000030a0000000800f9050000030b0000000800fd050000030c000000080001060000030d000000080005060000030e000000080009060000030f00000008000d060000031100000008001106000003120000000800150600000313000000080019060000031500000008001d060000031600000008002106000003170000000800250600000318000000080029060000031900000008002d060000031a000000080031060000031b000000080035060000031c000000080039060000031d00000008003d060000031e000000080041060000031f00000008004506000002cd0500490604184f7074696f6e0404540195020108104e6f6e6500000010536f6d650400950200000100004d0600000251060051060000040800d1050055060c3c70616c6c65745f6964656e7469747914747970657320426974466c6167730404540159060004002801344964656e746974794669656c64000059060c3c70616c6c65745f6964656e74697479147479706573344964656e746974794669656c640001201c446973706c6179000100144c6567616c0002000c5765620004001052696f7400080014456d61696c0010003850677046696e6765727072696e7400200014496d6167650040001c54776974746572008000005d060c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f75730006000061060c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000034b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20322052656164732c203220577269746573f8202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745dfc202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d2c23203c2f7765696768743e28766573745f6f74686572040118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e00013cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c203320577269746573f0202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74f4202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c23203c2f7765696768743e3c7665737465645f7472616e73666572080118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65650601a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00024464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c2033205772697465733901202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d3d01202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d2c23203c2f7765696768743e54666f7263655f7665737465645f7472616e736665720c0118736f75726365d50401504163636f756e7449644c6f6f6b75704f663c543e000118746172676574d50401504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65650601a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00034860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20342052656164732c2034205772697465733101202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e743501202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e742c23203c2f7765696768743e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e65060c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000069060c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565bd02013c42616c616e63654f663c542c20493e00012c62656e6566696369617279d50401504163636f756e7449644c6f6f6b75704f663c543e000024290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e002823203c7765696768743e482d20436f6d706c65786974793a204f283129b02d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460e82d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e74602c23203c2f7765696768743e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964b102013450726f706f73616c496e646578000124f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e002823203c7765696768743e482d20436f6d706c65786974793a204f283129cc2d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460d02d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e74602c23203c2f7765696768743e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964b102013450726f706f73616c496e6465780002285901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e002823203c7765696768743e4c2d20436f6d706c65786974793a204f2831292e8c2d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360582d20446257726974653a2060417070726f76616c73602c23203c2f7765696768743e147370656e64080118616d6f756e74bd02013c42616c616e63654f663c542c20493e00012c62656e6566696369617279d50401504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964b102013450726f706f73616c496e64657800043c2d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c002823203c7765696768743edc2d20436f6d706c65786974793a204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73882d20446220726561647320616e64207772697465733a2060417070726f76616c73602c23203c2f7765696768743e001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d060c3870616c6c65745f756e69717565731870616c6c65741043616c6c08045400044900016818637265617465080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400011461646d696ed50401504163636f756e7449644c6f6f6b75704f663c543e000040090149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d2061207075626c6963206f726967696e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e006101546865206f726967696e206d75737420636f6e666f726d20746f2074686520636f6e6669677572656420604372656174654f726967696e6020616e6420686176652073756666696369656e742066756e647320667265652e00ac604974656d4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a61012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e657720636f6c6c656374696f6e2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0098456d69747320604372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f2831296030666f7263655f6372656174650c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001146f776e6572d50401504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67c00110626f6f6c000144190149737375652061206e657720636f6c6c656374696f6e206f66206e6f6e2d66756e6769626c65206974656d732066726f6d20612070726976696c65676564206f726967696e2e00ac54686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c792e00a4546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e602e009c556e6c696b652060637265617465602c206e6f2066756e6473206172652072657365727665642e0049012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206e6577206974656d2e2054686973206d757374206e6f742062652063757272656e746c7920696e207573652e39012d20606f776e6572603a20546865206f776e6572206f66207468697320636f6c6c656374696f6e206f66206974656d732e20546865206f776e6572206861732066756c6c207375706572757365723420207065726d697373696f6e7321016f7665722074686973206974656d2c20627574206d6179206c61746572206368616e676520616e6420636f6e66696775726520746865207065726d697373696f6e73207573696e6790607472616e736665725f6f776e6572736869706020616e6420607365745f7465616d602e00ac456d6974732060466f7263654372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129601c64657374726f79080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400011c7769746e6573737106013844657374726f795769746e65737300023c9c44657374726f79206120636f6c6c656374696f6e206f662066756e6769626c65206974656d732e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d75737420626520746865686f776e6572206f66207468652060636f6c6c656374696f6e602e0005012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f2062652064657374726f7965642e31012d20607769746e657373603a20496e666f726d6174696f6e206f6e20746865206974656d73206d696e74656420696e2074686520636f6c6c656374696f6e2e2054686973206d75737420626520636f72726563742e00a0456d697473206044657374726f79656460206576656e74207768656e207375636365737366756c2e00645765696768743a20604f286e202b206d29602077686572653a542d20606e203d207769746e6573732e6974656d7360782d20606d203d207769746e6573732e6974656d5f6d657461646174617360682d206061203d207769746e6573732e6174747269627574657360106d696e740c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001146f776e6572d50401504163636f756e7449644c6f6f6b75704f663c543e00032ca04d696e7420616e206974656d206f66206120706172746963756c617220636f6c6c656374696f6e2e004101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d7573742062652074686520497373756572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ec82d20606974656d603a20546865206974656d2076616c7565206f6620746865206974656d20746f206265206d696e7465642ed82d206062656e6566696369617279603a2054686520696e697469616c206f776e6572206f6620746865206d696e746564206974656d2e0094456d697473206049737375656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400012c636865636b5f6f776e6572750601704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00043c5844657374726f7920612073696e676c65206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265206275726e65642e51012d2060636865636b5f6f776e6572603a2049662060536f6d6560207468656e20746865206f7065726174696f6e2077696c6c206661696c2077697468206057726f6e674f776e65726020756e6c657373207468657820206974656d206973206f776e656420627920746869732076616c75652e00b4456d69747320604275726e6564602077697468207468652061637475616c20616d6f756e74206275726e65642e00385765696768743a20604f283129607c4d6f6465733a2060636865636b5f6f776e65722e69735f736f6d652829602e207472616e736665720c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400011064657374d50401504163636f756e7449644c6f6f6b75704f663c543e000544c04d6f766520616e206974656d2066726f6d207468652073656e646572206163636f756e7420746f20616e6f746865722e00b454686973207265736574732074686520617070726f766564206163636f756e74206f6620746865206974656d2e00f44f726967696e206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374206265206569746865723a802d207468652041646d696e206f66207468652060636f6c6c656374696f6e603b682d20746865204f776e6572206f662074686520606974656d603b35012d2074686520617070726f7665642064656c656761746520666f722074686520606974656d602028696e207468697320636173652c2074686520617070726f76616c206973207265736574292e0028417267756d656e74733af42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207472616e736665727265642ec42d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207472616e736665727265642edc2d206064657374603a20546865206163636f756e7420746f2072656365697665206f776e657273686970206f6620746865206974656d2e0050456d69747320605472616e73666572726564602e00385765696768743a20604f283129602472656465706f736974080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001146974656d73f801385665633c543a3a4974656d49643e0006449852656576616c7561746520746865206465706f73697473206f6e20736f6d65206974656d732e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e29012d20606974656d73603a20546865206974656d73206f662074686520636f6c6c656374696f6e2077686f7365206465706f736974732077696c6c2062652072656576616c75617465642e002d014e4f54453a205468697320657869737473206173206120626573742d6566666f72742066756e6374696f6e2e20416e79206974656d732077686963682061726520756e6b6e6f776e206f723901696e207468652063617365207468617420746865206f776e6572206163636f756e7420646f6573206e6f7420686176652072657365727661626c652066756e647320746f2070617920666f7220614d016465706f73697420696e637265617365206172652069676e6f7265642e2047656e6572616c6c7920746865206f776e65722069736e277420676f696e6720746f2063616c6c2074686973206f6e206974656d73550177686f7365206578697374696e67206465706f736974206973206c657373207468616e2074686520726566726573686564206465706f73697420617320697420776f756c64206f6e6c7920636f7374207468656d2c78736f2069742773206f66206c6974746c6520636f6e73657175656e63652e00590149742077696c6c207374696c6c2072657475726e20616e206572726f7220696e20746865206361736520746861742074686520636f6c6c656374696f6e20697320756e6b6e6f776e206f6620746865207369676e6572706973206e6f74207065726d697474656420746f2063616c6c2069742e00605765696768743a20604f286974656d732e6c656e2829296018667265657a65080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d4964000728c8446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652066726f7a656e2eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f2062652066726f7a656e2e003c456d697473206046726f7a656e602e00385765696768743a20604f283129601074686177080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d4964000828a852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265207468617765642eb02d20606974656d603a20546865206974656d206f6620746865206974656d20746f206265207468617765642e003c456d6974732060546861776564602e00385765696768743a20604f2831296044667265657a655f636f6c6c656374696f6e040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e4964000924fc446973616c6c6f77206675727468657220756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f2062652066726f7a656e2e0064456d6974732060436f6c6c656374696f6e46726f7a656e602e00385765696768743a20604f283129603c746861775f636f6c6c656374696f6e040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e4964000a24dc52652d616c6c6f7720756e70726976696c65676564207472616e736665727320666f7220612077686f6c6520636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468652060636f6c6c656374696f6e602e00b02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e20746f206265207468617765642e0064456d6974732060436f6c6c656374696f6e546861776564602e00385765696768743a20604f28312960487472616e736665725f6f776e657273686970080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001146f776e6572d50401504163636f756e7449644c6f6f6b75704f663c543e000b2c844368616e676520746865204f776e6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365206f776e65722073686f756c64206265206368616e6765642e09012d20606f776e6572603a20546865206e6577204f776e6572206f66207468697320636f6c6c656374696f6e2e2054686579206d75737420686176652063616c6c656449012020607365745f6163636570745f6f776e6572736869706020776974682060636f6c6c656374696f6e6020696e206f7264657220666f722074686973206f7065726174696f6e20746f20737563636565642e0054456d69747320604f776e65724368616e676564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e4964000118697373756572d50401504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ed50401504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572d50401504163636f756e7449644c6f6f6b75704f663c543e000c30d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e0035014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468652060636f6c6c656374696f6e602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f2831296040617070726f76655f7472616e736665720c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400012064656c6567617465d50401504163636f756e7449644c6f6f6b75704f663c543e000d381501417070726f766520616e206974656d20746f206265207472616e7366657272656420627920612064656c6567617465642074686972642d7061727479206163636f756e742e004d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d75737420626520605369676e65646020616e64207468652073656e646572206d757374206265f865697468657220746865206f776e6572206f662074686520606974656d60206f72207468652061646d696e206f662074686520636f6c6c656374696f6e2e0045012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e15012d20606974656d603a20546865206974656d206f6620746865206974656d20746f20626520617070726f76656420666f722064656c656761746564207472616e736665722e19012d206064656c6567617465603a20546865206163636f756e7420746f2064656c6567617465207065726d697373696f6e20746f207472616e7366657220746865206974656d2e001901496d706f7274616e74204e4f54453a205468652060617070726f76656460206163636f756e7420676574732072657365742061667465722065616368207472616e736665722e0090456d6974732060417070726f7665645472616e7366657260206f6e20737563636573732e00385765696768743a20604f283129603c63616e63656c5f617070726f76616c0c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001506d617962655f636865636b5f64656c6567617465750601704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000e40110143616e63656c20746865207072696f7220617070726f76616c20666f7220746865207472616e73666572206f6620616e206974656d20627920612064656c65676174652e00584f726967696e206d757374206265206569746865723a542d207468652060466f72636560206f726967696e3bfc2d20605369676e656460207769746820746865207369676e6572206265696e67207468652041646d696e206f66207468652060636f6c6c656374696f6e603be42d20605369676e656460207769746820746865207369676e6572206265696e6720746865204f776e6572206f662074686520606974656d603b0028417267756d656e74733a3d012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e0d012d20606974656d603a20546865206974656d206f6620746865206974656d206f662077686f736520617070726f76616c2077696c6c2062652063616e63656c6c65642e51012d20606d617962655f636865636b5f64656c6567617465603a2049662060536f6d65602077696c6c20656e7375726520746861742074686520676976656e206163636f756e7420697320746865206f6e6520746fb020207768696368207065726d697373696f6e206f66207472616e736665722069732064656c6567617465642e0094456d6974732060417070726f76616c43616e63656c6c656460206f6e20737563636573732e00385765696768743a20604f2831296044666f7263655f6974656d5f7374617475731c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001146f776e6572d50401504163636f756e7449644c6f6f6b75704f663c543e000118697373756572d50401504163636f756e7449644c6f6f6b75704f663c543e00011461646d696ed50401504163636f756e7449644c6f6f6b75704f663c543e00011c667265657a6572d50401504163636f756e7449644c6f6f6b75704f663c543e000130667265655f686f6c64696e67c00110626f6f6c00012469735f66726f7a656ec00110626f6f6c000f4094416c746572207468652061747472696275746573206f66206120676976656e206974656d2e00744f726967696e206d7573742062652060466f7263654f726967696e602e00ac2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2e982d20606f776e6572603a20546865206e6577204f776e6572206f662074686973206974656d2ea02d2060697373756572603a20546865206e657720497373756572206f662074686973206974656d2e982d206061646d696e603a20546865206e65772041646d696e206f662074686973206974656d2ea82d2060667265657a6572603a20546865206e657720467265657a6572206f662074686973206974656d2e51012d2060667265655f686f6c64696e67603a20576865746865722061206465706f7369742069732074616b656e20666f7220686f6c64696e6720616e206974656d206f66207468697320636f6c6c656374696f6e2e39012d206069735f66726f7a656e603a2057686574686572207468697320636f6c6c656374696f6e2069732066726f7a656e2065786365707420666f72207065726d697373696f6e65642f61646d696e34696e737472756374696f6e732e00e0456d69747320604974656d5374617475734368616e67656460207769746820746865206964656e74697479206f6620746865206974656d2e00385765696768743a20604f28312960347365745f617474726962757465100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656dfc01444f7074696f6e3c543a3a4974656d49643e00010c6b6579f4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565f40174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001044a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2901604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f6174747269627574650c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656dfc01444f7074696f6e3c543a3a4974656d49643e00010c6b6579f4016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e001138b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d65746164617461100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400011064617461f40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656ec00110626f6f6c0012447453657420746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0050456d69747320604d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640013347c436c65617220746865206d6574616461746120666f7220616e206974656d2e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468651c606974656d602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0060456d69747320604d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d657461646174610c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400011064617461f40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00012469735f66726f7a656ec00110626f6f6c0014408853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e35012d206069735f66726f7a656e603a205768657468657220746865206d657461646174612073686f756c642062652066726f7a656e20616761696e73742066757274686572206368616e6765732e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e496400153090436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960507365745f6163636570745f6f776e6572736869700401406d617962655f636f6c6c656374696f6e0101015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001628110153657420286f72207265736574292074686520616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e0061014f726967696e206d75737420626520605369676e65646020616e6420696620606d617962655f636f6c6c656374696f6e602069732060536f6d65602c207468656e20746865207369676e6572206d757374206861766520614c70726f7669646572207265666572656e63652e0051012d20606d617962655f636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206f776e65727368697020746865207369676e65722069736101202077696c6c696e6720746f206163636570742c206f7220696620604e6f6e65602c20616e20696e6469636174696f6e207468617420746865207369676e65722069732077696c6c696e6720746f20616363657074206e6f5c20206f776e657273686970207472616e73666572616c2e008c456d69747320604f776e657273686970416363657074616e63654368616e676564602e647365745f636f6c6c656374696f6e5f6d61785f737570706c79080128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c75333200172ce053657420746865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66447468652060636f6c6c656374696f6e602e00e44e6f74653a20546869732066756e6374696f6e2063616e206f6e6c792073756363656564206f6e63652070657220636f6c6c656374696f6e2e00ec2d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e20746f206368616e67652e11012d20606d61785f737570706c79603a20546865206d6178696d756d20616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20636f756c6420686176652e00d4456d6974732060436f6c6c656374696f6e4d6178537570706c7953657460206576656e74207768656e207375636365737366756c2e247365745f7072696365100128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d496400011470726963656101015c4f7074696f6e3c4974656d50726963653c542c20493e3e00014477686974656c69737465645f6275796572750601704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00182c9453657420286f72207265736574292074686520707269636520666f7220616e206974656d2e0001014f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520617373657420606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2ea02d20606974656d603a20546865206974656d20746f207365742074686520707269636520666f722e0d012d20607072696365603a2054686520707269636520666f7220746865206974656d2e205061737320604e6f6e65602c20746f207265736574207468652070726963652ef42d20606275796572603a205265737472696374732074686520627579206f7065726174696f6e20746f2061207370656369666963206163636f756e742e00ec456d69747320604974656d507269636553657460206f6e207375636365737320696620746865207072696365206973206e6f7420604e6f6e65602eec456d69747320604974656d507269636552656d6f76656460206f6e20737563636573732069662074686520707269636520697320604e6f6e65602e206275795f6974656d0c0128636f6c6c656374696f6e28013c543a3a436f6c6c656374696f6e49640001106974656df00124543a3a4974656d49640001246269645f707269636518013c4974656d50726963653c542c20493e001924a8416c6c6f777320746f2062757920616e206974656d206966206974277320757020666f722073616c652e00f84f726967696e206d757374206265205369676e656420616e64206d757374206e6f7420626520746865206f776e6572206f662074686520606974656d602e00ac2d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d2eac2d20606974656d603a20546865206974656d207468652073656e6465722077616e747320746f206275792ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0078456d69747320604974656d426f7567687460206f6e20737563636573732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e71060c3870616c6c65745f756e69717565731474797065733844657374726f795769746e65737300000c01146974656d73b102010c7533320001386974656d5f6d6574616461746173b102010c75333200012861747472696275746573b102010c7533320000750604184f7074696f6e04045401d5040108104e6f6e6500000010536f6d650400d504000001000079060c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d060c2c70616c6c65745f666565731870616c6c65741043616c6c0404540001041c7365745f66656508010c6b657911010124543a3a4665654b657900010c66656518013042616c616e63654f663c543e000004745365742074686520676976656e2066656520666f7220746865206b6579042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e81060c3870616c6c65745f616e63686f72731870616c6c65741043616c6c040454000110287072655f636f6d6d6974080124616e63686f725f69642c011c543a3a486173680001307369676e696e675f726f6f742c011c543a3a48617368000048f84f627461696e7320616e206578636c7573697665206c6f636b20746f206d616b6520746865206e6578742075706461746520746f2061206365727461696e1101646f63756d656e742076657273696f6e206964656e7469666965642062792060616e63686f725f696460206f6e2043656e7472696675676520703270206e6574776f726b70666f722061206e756d626572206f6620626c6f636b7320676976656e09016279205b605052455f434f4d4d49545f45585049524154494f4e5f4455524154494f4e5f424c4f434b53605d2076616c75652e20607369676e696e675f726f6f7460050169732061206368696c64206e6f6465206f6620746865206f66662d636861696e206d65726b6c652074726565206f66207468617420646f63756d656e742e20496e010143656e747269667567652070726f746f636f6c2c206120646f63756d656e7420697320636f6d6d6974746564206f6e6c79206166746572207265616368696e671101636f6e73656e737573207769746820746865206f7468657220636f6c6c61626f7261746f7273206f6e2074686520646f63756d656e742e20436f6e73656e7375732069730901726561636865642062792067657474696e6720612063727970746f67726170686963207369676e61747572652066726f6d206f7468657220706172746965732062790d0173656e64696e67207468656d2074686520607369676e696e675f726f6f74602e20546f2064656e792074686520636f756e7465722d7061727479207468652066726565f86f7074696f6e206f66207075626c697368696e6720697473206f776e20737461746520636f6d6d69746d656e742075706f6e20726563656976696e67206111017265717565737420666f72207369676e61747572652c20746865206e6f64652063616e206669727374207075626c6973682061207072652d636f6d6d69742e204f6e6c79fc746865207072652d636f6d6d6974746572206163636f756e7420696e207468652043656e7472696675676520636861696e20697320616c6c6f77656420746f090160636f6d6d697460206120636f72726573706f6e64696e6720616e63686f72206265666f726520746865207072652d636f6d6d69742068617320657870697265642edc536f6d652066756e647320617265207265736572766564206f6e20612073756363657366756c207072652d636f6d6d69742063616c6c2ef854686573652066756e6473206172652072657475726e656420746f207468652073616d65206163636f756e7420616674657220612073756363657366756c11015b6050616c6c65743a3a636f6d6d69742829605d2063616c6c206f72206578706c69636974656c79206966206576696374696e6720746865207072652d636f6d6d697473fc62792063616c6c696e67205b6050616c6c65743a3a65766963745f7072655f636f6d6d6974732829605d2e20466f722061206d6f72652064657461696c65640d026578706c616e6174696f6e2072656665722073656374696f6e20332e34206f66205b43656e747269667567652050726f746f636f6c2050617065725d2868747470733a2f2f737461746963772e63656e747269667567652e696f2f6173736574732f63656e747269667567655f6f735f70726f746f636f6c5f70617065722e7064662918636f6d6d6974100148616e63686f725f69645f707265696d6167652c011c543a3a48617368000120646f635f726f6f742c011c543a3a4861736800011470726f6f662c011c543a3a4861736800014473746f7265645f756e74696c5f64617465280124543a3a4d6f6d656e74000130f8436f6d6d69747320612060646f63756d656e745f726f6f7460206f662061206d65726b6c697a6564206f666620636861696e20646f63756d656e7420696ef043656e7472696675676520703270206e6574776f726b20617320746865206c61746573742076657273696f6e2069642860616e63686f725f6964602911016f627461696e65642062792068617368696e672060616e63686f725f69645f707265696d616765602e2049662061207072652d636f6d6d69742065786973747320666f72fc746865206f627461696e65642060616e63686f725f6964602c2068617368206f66207072652d636f6d6d697474656420607369676e696e675f726f6f74202b050170726f6f6660206d757374206d617463682074686520676976656e2060646f635f726f6f74602e20416e79207072652d636f6d6d69747465642064617461206973f06175746f6d61746963616c6c792072656d6f766564206f6e20612073756363657366756c20636f6d6d697420616e6420746865207265736572766564f066756e64732066726f6d205b6050616c6c65743a3a7072655f636f6d6d69742829605d206172652072657475726e656420746f207468652073616d659c6163636f756e742e20546f2061766f696420737461746520626c6f6174206f6e20636861696e2cd474686520636f6d6d697474656420616e63686f7220776f756c6420626520657669637465642061667465722074686520676976656ee46073746f7265645f756e74696c5f64617465602e205468652063616c6c696e67206163636f756e7420776f756c6420626520636861726765640d016163636f7264696e676c7920666f72207468652073746f7261676520706572696f642e20466f722061206d6f72652064657461696c6564206578706c616e6174696f6edd0172656665722073656374696f6e20332e34206f66205b43656e747269667567652050726f746f636f6c2050617065725d2868747470733a2f2f737461746963772e63656e747269667567652e696f2f6173736574732f63656e747269667567655f6f735f70726f746f636f6c5f70617065722e706466294465766963745f7072655f636f6d6d697473040128616e63686f725f696473850601e4426f756e6465645665633c543a3a486173682c20436f6e73745533323c45564943545f5052455f434f4d4d49545f4c4953545f53495a453e3e0002100901496e69746961746573206576696374696f6e206f66207072652d636f6d6d697473207468617420686173206578706972656420676976656e2061206c697374206f6efc616e63686f72206964732e20466f7220656163682065766963746564207072652d636f6d6d6974732c20746865206465706f73697420686f6c64656420627909015b6050616c6c65743a3a7072655f636f6d6d69742829605d2063616c6c2077696c6c2062652072657475726e656420746f207468652073616d65206163636f756e746074686174206d616465206974206f726967696e616c6c792e3465766963745f616e63686f72730003141101496e69746961746573206576696374696f6e206f66206578706972656420616e63686f72732e2053696e636520616e63686f7273206172652073746f726564206f6e206109016368696c64207472696520696e6465786564206279207468656972206576696374696f6e20646174652c207768617420746869732066756e6374696f6e20646f65730d01697320746f2072656d6f76652074686f7365206368696c642074726965732077686963682068617320646174655f726570726573656e7465645f62795f726f6f74203cec63757272656e745f646174652e204164646974696f6e616c6c79206974206e6565647320746f2074616b652063617265206f6620696e646578657305016372656174656420666f7220616363657373696e6720616e63686f72732c2065673a20746f2066696e6420616e20616e63686f7220676976656e20616e2069642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400c50301185665633c543e000089060c3470616c6c65745f636c61696d731870616c6c65741043616c6c04045400010c14636c61696d0c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000134736f727465645f686173686573c50301305665633c543a3a486173683e000014c8436c61696d7320746f6b656e732061776172646564207468726f7567682054696e6c616b6520696e766573746d656e74732e002823203c7765696768743e602d204261736564206f6e20686173686573206c656e6774682c23203c2f7765696768743e487365745f75706c6f61645f6163636f756e740401286163636f756e745f6964000130543a3a4163636f756e744964000118fc41646d696e2066756e6374696f6e207468617420736574732074686520616c6c6f7765642075706c6f6164206163636f756e7420746f2061646420726f6f74a868617368657320436f6e74726f6c6c656420627920637573746f6d206f726967696e206f7220726f6f74002823203c7765696768743e902d204261736564206f6e206f726967696e20636865636b20616e64207772697465206f702c23203c2f7765696768743e3c73746f72655f726f6f745f68617368040124726f6f745f686173682c011c543a3a48617368000214e053746f72657320726f6f74206861736820666f7220636f72726573706f6e64656e7420636c61696d204d65726b6c6520747265652072756e002823203c7765696768743e902d204261736564206f6e206f726967696e20636865636b20616e64207772697465206f702c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d060c5870616c6c65745f63726f77646c6f616e5f636c61696d1870616c6c65741043616c6c04045400011c30636c61696d5f72657761726414015472656c6179636861696e5f6163636f756e745f6964000158543a3a52656c6179436861696e4163636f756e74496400015070617261636861696e5f6163636f756e745f696400015c50617261636861696e4163636f756e7449644f663c543e0001386964656e746974795f70726f6f66910601384d756c74695369676e6174757265000148636f6e747269627574696f6e5f70726f6f66a906013850726f6f663c543a3a486173683e000130636f6e747269627574696f6e180128543a3a42616c616e636500000464436c61696d20666f72206120726577617264207061796f757428696e697469616c697a65140134636f6e747269627574696f6e732c0134526f6f74486173684f663c543e0001246c6f636b65645f6174100138543a3a426c6f636b4e756d626572000114696e64657810012454726965496e64657800012c6c656173655f7374617274100138543a3a426c6f636b4e756d6265720001306c656173655f706572696f64100138543a3a426c6f636b4e756d62657200012c6c496e697469616c697a652074686520636c61696d2070616c6c657400f0546869732061646d696e6973747261746976652066756e6374696f6e206973207573656420746f207472616e7366657220746865206c697374206f660901636f6e7472696275746f727320616e64207468656972207265737065637469766520636f6e747269627574696f6e732c2073746f7265642061732061206368696c6421027472696520726f6f74206861736820696e207468652072656c617920636861696e2773205b6063726f77646c6f616e605d2868747470733a2f2f6769746875622e636f6d2f706172697479746563682f706f6c6b61646f742f626c6f622f726f636f636f2d76312f72756e74696d652f636f6d6d6f6e2f7372632f63726f77646c6f616e2e727329a070616c6c65742c20746f2060436f6e747269627574696f6e73602073746f72616765206974656d2ef854686973207472616e73616374696f6e2063616e206f6e6c792062652063616c6c6564207669612061207369676e6564207472616e73616374696f6e732e01015468652060636f6e747269627574696f6e736020706172616d6574657220636f6e7461696e73207468652068617368206f66207468652063726f77646c6f616ef470616c6c65742773206368696c64207472696520726f6f742e204974206973206c61746572207573656420666f722070726f76696e67207468617420610901636f6e7472696275746f72206566666563746976656c7920636f6e747269627574656420746f207468652063726f77646c6f616e2063616d706169676e2c20616e64dc746861742074686520616d6f756e74206f662074686520636f6e747269627574696f6e20697320636f72726563742061732077656c6c2e3c7365745f6c656173655f73746172740401147374617274100138543a3a426c6f636b4e756d6265720002048853657420746865207374617274206f6620746865206c6561736520706572696f642e407365745f6c656173655f706572696f64040118706572696f64100138543a3a426c6f636b4e756d6265720003045453657420746865206c6561736520706572696f642e587365745f636f6e747269627574696f6e735f726f6f74040110726f6f742c0134526f6f74486173684f663c543e000418fc5365742074686520726f6f742d68617368206f66207468652072656c61792d636861696e2c207765206c6f636b6564207468652072656c61792d636861696e44636f6e747269627574696f6e732061742e0011015468697320726f6f742d68617368204d5553542062652074686520726f6f742d68617368206f66207468652072656c61792d636861696e2061742074686520626c6f636bf47765206c6f636b65642061742e205468697320726f6f742d686173682077696c6c206265207573656420746f207665726966792070726f6f6673206f6634636f6e747269627574696f6e2e347365745f6c6f636b65645f61740401246c6f636b65645f6174100138543a3a426c6f636b4e756d626572000518f85365742074686520626c6f636b206f66207468652072656c6179206174207768696368207765206c6f636b2074686520636f6e747269627574696f6e732e00010154686973206d65616e732c207468617420616c6c2067656e6572617465642070726f6f6673204d5553542067656e6572617465207468652070726f6f66206f66fc746865697220636f6e747269627574696f6e206174207468697320626c6f636b2c206173206f74686572776973652074686520726f6f742d68617368207765e873746f726520686572652077696c6c206e6f7420626520666f756e6420696e207468652067656e6572617465642070726f6f66206f6620746865e4636f6e7472696275746f722c2077686963682077696c6c206c65616420746f20612072656a656374696f6e206f66207468652070726f6f662e607365745f63726f77646c6f616e5f747269655f696e646578040128747269655f696e64657810012454726965496e6465780006187c5365742074686520696e646578206f66207468652063726f77646c6f616e2e00f05468697320696e64657820636f6d65732066726f6d207468652072656c61792d636861696e2063726f77646c6f616e2070616c6c65742e204d6f726511017370656369666963616c6c792c207468697320696e646578206973207573656420746f206465726976652074686520696e7465726e616c207061747269636961206b65790d01696e7369646520746865206368696c6420747269652e2054686520696e6465782069732073746f72656420696e20746865206046756e64496e666f60206f66207468657472656c617920636861696e2063726f77646c6f616e2070616c6c65742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9106082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040095060148656432353531393a3a5369676e61747572650000001c5372323535313904009d060148737232353531393a3a5369676e61747572650001001445636473610400a106014065636473613a3a5369676e61747572650002000095060c1c73705f636f72651c65643235353139245369676e617475726500000400990601205b75383b2036345d000099060000034000000008009d060c1c73705f636f72651c73723235353139245369676e617475726500000400990601205b75383b2036345d0000a1060c1c73705f636f7265146563647361245369676e617475726500000400a50601205b75383b2036355d0000a506000003410000000800a906081870726f6f66731450726f6f66041048617368012c000801246c6561665f686173682c011048617368000134736f727465645f686173686573c50301245665633c486173683e0000ad060c5c70616c6c65745f63726f77646c6f616e5f7265776172641870616c6c65741043616c6c04045400011028696e697469616c697a650c014c6469726563745f7061796f75745f726174696f2101011c50657262696c6c00013876657374696e675f706572696f64100138543a3a426c6f636b4e756d62657200013476657374696e675f7374617274100138543a3a426c6f636b4e756d626572000004f041206f6e2063616c6c20696e69742e204261736963616c6c79206120636f6d706f736974696f6e206f662074686520736574746572732062656c6f77447365745f76657374696e675f73746172740401147374617274100138543a3a426c6f636b4e756d6265720001049053657420746865207374617274206f66207468652076657374696e6720706572696f642e487365745f76657374696e675f706572696f64040118706572696f64100138543a3a426c6f636b4e756d6265720002204c5365742076657374696e6720706572696f642e000d01546869732061646d696e697374726174697665207472616e73616374696f6e20616c6c6f777320746f206d6f64696679207468652076657374696e6720706572696f640d01616674657220612070726576696f7573205b6050616c6c65743a3a696e697469616c697a652829605d207472616e73616374696f6e2077617320747269676765726564c4696e206f7264657220746f20706572666f726d2073656d696e616c2070616c6c657420636f6e66696775726174696f6e2e0020232320456d6974734c55706461746556657374696e67506572696f645c7365745f6469726563745f7061796f75745f726174696f040114726174696f2101011c50657262696c6c000318e44d6f646966792074686520726174696f206265747765656e2076657374656420616e6420646972656374207061796f757420616d6f756e742e00dc546869732061646d696e6973747261746976652066756e6374696f6e20616c6c6f777320746f206d6f646966792074686520726174696fe06265747765656e2076657374656420616e6420646972656374207061796f757420616d6f756e74206166746572207468652070616c6c6574e877617320696e697469616c697a65642076696120612063616c6c20746f20746865205b6050616c6c65743a3a696e697469616c697a652829605d307472616e73616374696f6e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb1060c4870616c6c65745f706f6f6c5f73797374656d1870616c6c65741043616c6c0404540001103c7365745f6d61785f7265736572766508011c706f6f6c5f6964280124543a3a506f6f6c496400012c6d61785f72657365727665180128543a3a42616c616e636500001c8c5365747320746865206d6178696d756d207265736572766520666f72206120706f6f6c00c45468652063616c6c6572206d75737420686176652074686520604c697175696469747941646d696e6020726f6c6520696ec06f7264657220746f20696e766f6b6520746869732065787472696e7369632e205468697320726f6c65206973206e6f74c4676976656e20746f2074686520706f6f6c2063726561746f722062792064656661756c742c20616e64206d757374206265b46164646564207769746820746865205065726d697373696f6e732070616c6c6574206265666f726520746869736065787472696e7369632063616e2062652063616c6c65642e2c636c6f73655f65706f636804011c706f6f6c5f6964280124543a3a506f6f6c49640001485c436c6f7365207468652063757272656e742065706f636800bc436c6f73696e6720616e2065706f6368206c6f636b7320696e20616c6c20696e7665737420616e642072656465656db86f726465727320706c6163656420647572696e67207468652065706f63682c20616e642063617573657320616c6cc86675727468657220696e7665737420616e642072656465656d206f726465727320746f2062652073657420666f72207468652c6e6578742065706f63682e00cc496620616c6c206f72646572732063616e20626520657865637574656420776974686f75742076696f6c6174696e6720616e79d0706f6f6c20636f6e73747261696e7473202d20776869636820696e636c756465206d6178696d756d207265736572766520616e64d4746865207472616e636865207269736b2062756666657273202d2074686520657865637574696f6e2077696c6c20616c736f206265b8646f6e652e205365652060657865637574655f65706f63686020666f722064657461696c73206f6e2065706f636828657865637574696f6e2e00d8496620706f6f6c20636f6e73747261696e747320776f756c642062652076696f6c6174656420627920657865637574696e6720616c6cd46f72646572732c2074686520706f6f6c20656e746572732061207375626d697373696f6e20706572696f642e20447572696e672061d87375626d697373696f6e20706572696f642c207061727469616c20657865637574696f6e732063616e206265207375626d6974746564c0746f2062652073636f7265642c20616e642074686520626573742d73636f72696e6720736f6c7574696f6e2077696c6cb86576656e7475616c6c792062652065786563757465642e2053656520607375626d69745f736f6c7574696f6e602e3c7375626d69745f736f6c7574696f6e08011c706f6f6c5f6964280124543a3a506f6f6c4964000120736f6c7574696f6e410101505665633c5472616e636865536f6c7574696f6e3e000228d85375626d69742061207061727469616c20657865637574696f6e20736f6c7574696f6e20666f72206120636c6f7365642065706f636800b8496620746865207375626d697474656420736f6c7574696f6e206973202262657474657222207468616e20746865d470726576696f7573206265737420736f6c7574696f6e2c2069742077696c6c207265706c6163652069742e20536f6c7574696f6e73d0617265206f7264657265642073756368207468617420736f6c7574696f6e7320776869636820646f206e6f742076696f6c617465a8636f6e73747261696e74732061726520626574746572207468616e2074686f7365207468617420646f2e00b44f6e636520612076616c696420736f6c7574696f6e20686173206265656e207375626d69747465642c20746865d06368616c6c656e67652074696d6520626567696e732e2054686520706f6f6c2063616e206265206578656375746564206f6e63657c746865206368616c6c656e67652074696d652068617320657870697265642e34657865637574655f65706f636804011c706f6f6c5f6964280124543a3a506f6f6c496400031cd04578656375746520616e2065706f636820666f7220776869636820612076616c696420736f6c7574696f6e20686173206265656e287375626d69747465642e0011012a204d696e7473206f72206275726e73207472616e63686520746f6b656e73206261736564206f6e20696e766573746d656e747320616e6420726564656d7074696f6e7305012a20557064617465732074686520706f7274696f6e206f6620746865207265736572766520616e64206c6f616e2062616c616e63652061737369676e656420746f0501202065616368207472616e6368652c206261736564206f6e2074686520696e766573746d656e747320616e6420726564656d7074696f6e7320746f2074686f73652c20207472616e636865732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb5060c4070616c6c65745f6c6f616e735f7265661870616c6c65741043616c6c0404540001201863726561746508011c706f6f6c5f696428012c506f6f6c49644f663c543e000110696e666fa10101344c6f616e496e666f4f663c543e000010c8437265617465732061206e6577206c6f616e20616761696e73742074686520636f6c6c61746572616c2070726f766964656400bc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520636f6c6c61746572616c2ee45468697320636f6c6c61746572616c2077696c6c206265207472616e7366657272656420746f20746865206578697374696e6720706f6f6c2e18626f72726f770c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e6365000120a05472616e736665727320626f72726f7720616d6f756e7420746f2074686520626f72726f7765722e00b0546865206f726967696e206d7573742062652074686520626f72726f776572206f6620746865206c6f616e2e0d0154686520626f72726f7720616374696f6e2073686f756c642066756c66696c6c2074686520626f72726f77207265737472696374696f6e7320636f6e6669677572656401016174205b6074797065733a3a4c6f616e5265737472696374696f6e73605d2e205468652060616d6f756e74602077696c6c206265207472616e73666572726564090166726f6d20706f6f6c207265736572766520746f20626f72726f7765722e2054686520706f7274666f6c696f2076616c756174696f6e206f662074686520706f6f6ce06973207570646174656420746f207265666c65637420746865206e65772070726573656e742076616c7565206f6620746865206c6f616e2ed05261746520616363756d756c6174696f6e2077696c6c2073746172742061667465722074686520666972737420626f72726f772e1472657061790c011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e4964000118616d6f756e74180128543a3a42616c616e6365000224b85472616e736665727320616d6f756e7420626f72726f77656420746f2074686520706f6f6c20726573657276652e00b0546865206f726967696e206d7573742062652074686520626f72726f776572206f6620746865206c6f616e2e0d01496620746865207265706179696e6720616d6f756e74206973206d6f7265207468616e2063757272656e7420646562742c206f6e6c792063757272656e742064656274ec6973207472616e736665727265642e2054686520626f72726f7720616374696f6e2073686f756c642066756c66696c6c2074686520626f72726f7711017265737472696374696f6e7320636f6e66696775726564206174205b6074797065733a3a4c6f616e5265737472696374696f6e73605d2e205468652060616d6f756e7460010177696c6c206265207472616e736665727265642066726f6d20626f72726f77657220746f20706f6f6c20726573657276652e2054686520706f7274666f6c696f110176616c756174696f6e206f662074686520706f6f6c206973207570646174656420746f207265666c65637420746865206e65772070726573656e742076616c7565206f6624746865206c6f616e2e2477726974655f6f666608011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e49640003406c577269746573206f666620616e206f766572647565206c6f616e2e000d015468697320616374696f6e2077696c6c207772697465206f6666206261736564206f6e20746865207772697465206f666620706f6c69637920636f6e66696775726564a46279205b6050616c6c65743a3a7570646174655f77726974655f6f66665f706f6c6963792829605d2e0501546865207772697465206f666620616374696f6e2077696c6c206f6e6c792074616b65206566666563742069662069742077726974657320646f776e206d6f726501012870657263656e74616765206f722070656e616c747929207468616e207468652063757272656e74207772697465206f666620737461747573206f6620746865b06c6f616e2e205468697320616374696f6e2077696c6c206e65766572207772697465732075702e20692e653ae02d205772697465206f66662062792061646d696e20776974682070657263656e7461676520302e3520616e642070656e616c747920302e32b02d2054696d652070617373657320616e642074686520706f6c6963792063616e206265206170706c6965642ef82d205772697465206f662077697468206120706f6c696379207468617420736179733a2070657263656e7461676520302e332c2070656e616c7920302e3405012d20546865206c6f616e206973207772697474656e206f6666207769746820746865206d6178696d756d206265747765656e2074686520706f6c69637920616e64bc20207468652063757272656e742072756c653a2070657263656e7461676520302e352c2070656e616c747920302e3400c04e6f207370656369616c207065726d6973696f6e732061726520726571756972656420746f20746869732063616c6c2e050154686520706f7274666f6c696f2076616c756174696f6e206f662074686520706f6f6c206973207570646174656420746f207265666c65637420746865206e65776870726573656e742076616c7565206f6620746865206c6f616e2e3c61646d696e5f77726974655f6f666610011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e496400012870657263656e746167657901011c543a3a5261746500011c70656e616c74797901011c543a3a5261746500042890577269746573206f66662061206c6f616e2066726f6d2061646d696e206f726967696e2e000101466f7263657320612077726974696e67206f6666206f662061206c6f616e20696620746865206070657263656e746167656020616e64206070656e616c747960dc706172616d65746572732072657370656374696e672074686520706f6c6963792076616c75657320617320746865206d696e696d756d2e05015468697320616374696f6e2063616e20777269746520646f776e2f7570207468652063757272656e74207772697465206f666620737461747573206f662074686505016c6f616e2e204966207468657265206973206e6f2061637469766520706f6c6963792c20616e2061646d696e207772697465206f666620616374696f6e2063616e1101777269746520757020746865207772697465206f6666207374617475732e20427574206966207468657265206973206120706f6c696379206170706c6965642c20746865090161646d696e2063616e206f6e6c7920777269746520757020756e74696c2074686520706f6c6963792e20577269746520646f776e206d6f7265207468616e207468650101706f6c69637920697320616c7761797320616c6c6f7765642e2054686520706f7274666f6c696f2076616c756174696f6e206f662074686520706f6f6c206973d47570646174656420746f207265666c65637420746865206e65772070726573656e742076616c7565206f6620746865206c6f616e2e14636c6f736508011c706f6f6c5f696428012c506f6f6c49644f663c543e00011c6c6f616e5f6964280124543a3a4c6f616e49640005144c436c6f736573206120676976656e206c6f616e00110141206c6f616e206f6e6c792063616e20626520636c6f73656420696620697427732066756c6c792072657061696420627920746865206c6f616e20626f72726f7765722e0501436c6f73696e672061206c6f616e206769766573206261636b2074686520636f6c6c61746572616c207573656420666f7220746865206c6f616e20746f2074686528626f72726f776572202e5c7570646174655f77726974655f6f66665f706f6c69637908011c706f6f6c5f696428012c506f6f6c49644f663c543e000118706f6c696379d90101ec426f756e6465645665633c57726974654f666652756c653c543a3a526174653e2c20543a3a4d617857726974654f6666506f6c69637953697a653e000610c85570646174657320746865207772697465206f666620706f6c6963792077697468207772697465206f66662072756c65732e00f4546865207772697465206f666620706f6c696379206973207573656420746f206175746f6d61746963616c6c79207365742061207772697465206f6666686d696e696d756d2076616c756520746f20746865206c6f616e2e687570646174655f706f7274666f6c696f5f76616c756174696f6e04011c706f6f6c5f696428012c506f6f6c49644f663c543e000704c4557064617465732074686520706f72666f6c696f2076616c756174696f6e20666f722074686520676976656e20706f6f6c042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb9060c4870616c6c65745f7065726d697373696f6e731870616c6c65741043616c6c0404540001100c616464100124776974685f726f6c650102011c543a3a526f6c65000108746f000130543a3a4163636f756e74496400011473636f7065fd010120543a3a53636f7065000110726f6c650102011c543a3a526f6c650000001872656d6f7665100124776974685f726f6c650102011c543a3a526f6c6500011066726f6d000130543a3a4163636f756e74496400011473636f7065fd010120543a3a53636f7065000110726f6c650102011c543a3a526f6c6500010014707572676504011473636f7065fd010120543a3a53636f70650002002c61646d696e5f707572676508011066726f6d000130543a3a4163636f756e74496400011473636f7065fd010120543a3a53636f7065000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd060c6470616c6c65745f636f6c6c61746f725f616c6c6f776c6973741870616c6c65741043616c6c0404540001080c61646404012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000018b44164642074686520676976656e2060636f6c6c61746f725f69646020746f2074686520616c6c6f776c6973742e204661696c73206966a820202d20606f726967696e60206661696c73207468652060656e737572655f726f6f746020636865636bf820202d2060636f6c6c61746f725f69646020646964206e6f7420796574206c6f6164207468656972206b65797320696e746f207468652073657373696f6e282020202070616c6c6574c820202d2060636f6c6c61746f725f69646020697320616c72656164792070617274206f662074686520616c6c6f776c6973741872656d6f766504012c636f6c6c61746f725f6964000138543a3a56616c696461746f724964000110a852656d6f766520612060636f6c6c61746f725f6964602066726f6d2074686520616c6c6f776c6973742e204661696c73206966a820202d20606f726967696e60206661696c73207468652060656e737572655f726f6f746020636865636bb820202d2060636f6c6c61746f725f696460206973206e6f742070617274206f662074686520616c6c6f776c697374042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec1060c6070616c6c65745f726573747269637465645f746f6b656e731870616c6c65741043616c6c040454000114207472616e736665720c011064657374d504018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74bd020128543a3a42616c616e63650000004c7472616e736665725f6b6565705f616c6976650c011064657374d504018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74bd020128543a3a42616c616e6365000100307472616e736665725f616c6c0c011064657374d504018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696469010134543a3a43757272656e637949640001286b6565705f616c697665c00110626f6f6c00020038666f7263655f7472616e73666572100118736f75726365d504018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011064657374d504018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74bd020128543a3a42616c616e63650003002c7365745f62616c616e636510010c77686fd504018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500012c63757272656e63795f696469010134543a3a43757272656e637949640001206e65775f66726565bd020128543a3a42616c616e63650001306e65775f7265736572766564bd020128543a3a42616c616e6365000400042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec5060c4070616c6c65745f6e66745f73616c65731870616c6c65741043616c6c04045400010c0c6164640c0120636c6173735f696428013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964f00124543a3a4974656d496400011470726963651d02018850726963653c43757272656e63794f663c543e2c2042616c616e63654f663c543e3e00001c2841646420616e204e465400204661696c73206966d020202d20746865204e4654206973206e6f7420666f756e6420696e205b60436f6e6669673a3a4e6f6e46756e6769626c6573605da020202d20606f726967696e60206973206e6f7420746865206f776e6572206f6620746865206e66747c20202d20746865206e667420697320616c726561647920666f722073616c65110120202d207472616e7366657272696e67206f776e657273686970206f6620746865204e465420746f20746869732070616c6c65742773206163636f756e74206661696c731872656d6f7665080120636c6173735f696428013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964f00124543a3a4974656d49640001243452656d6f766520616e204e46540001015468652073656c6c6572206f6620616e204e4654207468617420697320666f722073616c652063616e2063616c6c20746869732065787472696e73696320746fe47265636c61696d206f776e657273686970206f766572207468656972204e465420616e642072656d6f76652069742066726f6d2073616c652e00204661696c732069666c20202d20746865206e6674206973206e6f7420666f722073616c65a420202d20606f726967696e60206973206e6f74207468652073656c6c6572206f6620746865204e4654090120202d207472616e7366657272696e6720746865206f776e657273686970206f6620746865204e4654206261636b20746f207468652073656c6c6572206661696c730c6275790c0120636c6173735f696428013c543a3a436f6c6c656374696f6e496400012c696e7374616e63655f6964f00124543a3a4974656d49640001246d61785f6f666665721d02018850726963653c43757272656e63794f663c543e2c2042616c616e63654f663c543e3e000244444275792074686520676976656e206e6674001101427579657273206d7573742070726f706f7365206120606d61785f6f666665726020746f2073617665207468656d2066726f6d2061207363656e6172696f20776865726501017468657920636f756c6420656e6420757020706179696e67206d6f7265207468616e2074686579206465736972656420666f7220616e204e46542e205468617409017363656e6172696f20636f756c642074616b6520706c616365206966207468652073656c6c657220696e63726561736564207468652061736b696e67207072696365e47269676874206265666f726520746865206275796572207375626d69747320746869732063616c6c20746f206275792073616964204e46542e00010142757965727320616c776179732070617920746865206c61746573742061736b696e67207072696365206173206c6f6e6720617320697420646f6573206e6f745c657863656564207468656972206d6178206f666665722e00204661696c732069666c20202d20746865204e4654206973206e6f7420666f722073616c659420202d20606f726967696e60206973207468652073656c6c6572206f6620746865204e4654110120202d20606f726967696e6020646f6573206e6f74206861766520656e6f7567682062616c616e6365206f66207468652063757272656e637920746865206e667420697344202020206265696e6720736f6c6420696e110120202d207472616e7366657272696e67207468652061736b696e672070726963652066726f6d2074686520627579657220746f207468652073656c6c6572206661696c73ac20202d207472616e7366657272696e6720746865206e667420746f20746865206275796572206661696c73042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec9060c3470616c6c65745f6272696467651870616c6c65741043616c6c04045400010c3c7472616e736665725f6e61746976650c0118616d6f756e7418013042616c616e63654f663c543e000124726563697069656e7430011c5665633c75383e00011c646573745f696408011c436861696e496400000801015472616e736665727320736f6d6520616d6f756e74206f6620746865206e617469766520746f6b656e20746f20736f6d6520726563697069656e74206f6e2061802877686974656c6973746564292064657374696e6174696f6e20636861696e2e207472616e736665720c0108746f0001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000110725f69640401285265736f7572636549640001081101457865637574657320612073696d706c652063757272656e6379207472616e73666572207573696e672074686520636861696e627269646765206163636f756e742061732874686520736f757263651872656d61726b080110686173682c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000110725f69640401285265736f7572636549640002080501546869732063616e2062652063616c6c65642062792074686520636861696e62726964676520746f2064656d6f6e73747261746520616e206172626974726172795463616c6c2066726f6d20612070726f706f73616c2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd060c2870616c6c65745f6e66741870616c6c65741043616c6c0404540001043476616c69646174655f6d696e74140124616e63686f725f69642c013c53797374656d486173684f663c543e00013c6465706f7369745f61646472657373950201384465706f7369744164647265737300011870726f6f6673d10601985665633c50726f6f663c486173686572486173684f663c42756e646c654861736865723e3e3e0001347374617469635f70726f6f6673d50601a4466978656441727261793c486173686572486173684f663c42756e646c654861736865723e2c20333e00011c646573745f69640801583c5420617320436f6e6669673e3a3a436861696e4964000024090156616c696461746573207468652070726f6f66732070726f766964656420616761696e73742074686520646f63756d656e7420726f6f74206173736f636961746564f4776974682074686520616e63686f725f69642e204f6e6365207468652070726f6f6673206172652076657269666965642c207765206372656174652061090162756e646c656420686173682060286465706f7369745f61646472657373202b205b70726f6f665b695d2e686173685d29602042756e646c65642048617368206973e46465706f736974656420746f20616e204465706f7369744173736574206576656e7420666f72206272696467696e6720707572706f7365732e000d0141646473206164646974696f6e616c2066656520746f20636f6d70656e73617465207468652063757272656e7420636f7374206f662074617267657420636861696e732823203c7765696768743e682d20646570656e6473206f6e2074686520617267756d656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed106000002a90600d506000003030000002c00d9060c3c70616c6c65745f6b657973746f72651870616c6c65741043616c6c04045400010c206164645f6b6579730401106b657973dd0601505665633c4164644b65793c543a3a486173683e3e00000464416464206b65797320746f207468652073746f72616765732e2c7265766f6b655f6b6579730801106b657973c50301305665633c543a3a486173683e00012c6b65795f707572706f7365310201284b6579507572706f73650001048c5265766f6b65206b65797320776974682073706563696669656420707572706f73652e2c7365745f6465706f73697404012c6e65775f6465706f736974180128543a3a42616c616e6365000204585365742061206e6577206b6579206465706f7369742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632edd06000002e10600e106083c70616c6c65745f6b657973746f7265184164644b6579041048617368012c000c010c6b65792c01104861736800011c707572706f7365310201284b6579507572706f73650001206b65795f747970653502011c4b6579547970650000e5060c4870616c6c65745f696e766573746d656e74731870616c6c65741043616c6c0404540001184c7570646174655f696e766573745f6f72646572080134696e766573746d656e745f69647501013c543a3a496e766573746d656e744964000118616d6f756e74180124543a3a416d6f756e74000020c855706461746520616e206f7264657220746f20696e7665737420696e746f206120676976656e20696e766573746d656e742e00cc4966207468652072657175657374656420616d6f756e742069732067726561746572207468616e207468652063757272656e74d8696e766573746d656e74206f726465722c207468652062616c616e63652077696c6c206265207472616e736665727265642066726f6dc47468652063616c6c696e67206163636f756e7420746f2074686520706f6f6c2e2049662074686520726571756573746564c8616d6f756e74206973206c657373207468616e207468652063757272656e74206f726465722c207468652062616c616e6365c077696c6c206265207472616e736665727265642066726f6d2074686520706f6f6c20746f207468652063616c6c696e67206163636f756e742e4c7570646174655f72656465656d5f6f72646572080134696e766573746d656e745f69647501013c543a3a496e766573746d656e744964000118616d6f756e74180124543a3a416d6f756e74000120c855706461746520616e206f7264657220746f2072656465656d2066726f6d206120676976656e20696e766573746d656e742e00cc4966207468652072657175657374656420616d6f756e742069732067726561746572207468616e207468652063757272656e74d8696e766573746d656e74206f726465722c207468652062616c616e63652077696c6c206265207472616e736665727265642066726f6dc47468652063616c6c696e67206163636f756e7420746f2074686520706f6f6c2e2049662074686520726571756573746564c8616d6f756e74206973206c657373207468616e207468652063757272656e74206f726465722c207468652062616c616e6365c077696c6c206265207472616e736665727265642066726f6d2074686520706f6f6c20746f207468652063616c6c696e67206163636f756e742e4c636f6c6c6563745f696e766573746d656e7473040134696e766573746d656e745f69647501013c543a3a496e766573746d656e74496400020ce8436f6c6c6563742074686520726573756c7473206f66206120757365727320696e76657374206f726465727320666f722074686520676976656ef8696e766573746d656e742e20496620616e7920616d6f756e747320617265206e6f742066756c66696c6c6564207468657920617265206469726563746c79d8617070656e64656420746f20746865206e65787420616374697665206f7264657220666f72207468697320696e766573746d656e742e4c636f6c6c6563745f726564656d7074696f6e73040134696e766573746d656e745f69647501013c543a3a496e766573746d656e74496400030ce8436f6c6c6563742074686520726573756c7473206f6620612075736572732072656465656d206f726465727320666f722074686520676976656ef8696e766573746d656e742e20496620616e7920616d6f756e747320617265206e6f742066756c66696c6c6564207468657920617265206469726563746c79d8617070656e64656420746f20746865206e65787420616374697665206f7264657220666f72207468697320696e766573746d656e742e5c636f6c6c6563745f696e766573746d656e74735f666f7208010c77686f000130543a3a4163636f756e744964000134696e766573746d656e745f69647501013c543a3a496e766573746d656e74496400040c0101436f6c6c6563742074686520726573756c7473206f6620616e6f7468657220757365727320696e76657374206f726465727320666f722074686520676976656ef8696e766573746d656e742e20496620616e7920616d6f756e747320617265206e6f742066756c66696c6c6564207468657920617265206469726563746c79d8617070656e64656420746f20746865206e65787420616374697665206f7264657220666f72207468697320696e766573746d656e742e5c636f6c6c6563745f726564656d7074696f6e735f666f7208010c77686f000130543a3a4163636f756e744964000134696e766573746d656e745f69647501013c543a3a496e766573746d656e74496400050c0101436f6c6c6563742074686520726573756c7473206f6620616e6f746865722075736572732072656465656d206f726465727320666f722074686520676976656ef8696e766573746d656e742e20496620616e7920616d6f756e747320617265206e6f742066756c66696c6c6564207468657920617265206469726563746c79d8617070656e64656420746f20746865206e65787420616374697665206f7264657220666f72207468697320696e766573746d656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee9060c6070616c6c65745f6c69717569646974795f726577617264731870616c6c65741043616c6c04045400011c147374616b6508012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500000c01014465706f7369742061207374616b6520616d6f756e74206173736f63696174656420746f20612063757272656e637920666f7220746865206f726967696e27730d016163636f756e742e20546865206163636f756e74206d757374206861766520656e6f7567682063757272656e637920746f206d616b6520746865206465706f7369742c806966206e6f742c20616e204572722077696c6c2062652072657475726e65642e1c756e7374616b6508012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500010c050157697468647261772061207374616b6520616d6f756e74206173736f63696174656420746f20612063757272656e637920666f7220746865206f726967696e277305016163636f756e742e20546865206163636f756e74206d757374206861766520656e6f7567682063757272656e6379207374616b656420746f206d616b6520746865a877697468647261772c206966206e6f742c20616e204572722077696c6c2062652072657475726e65642e30636c61696d5f72657761726404012c63757272656e63795f696469010134543a3a43757272656e63794964000208bc436c61696d73207468652072657761726420746865206173736f63696174656420746f20612063757272656e63792edc546865207265776172642077696c6c206265207472616e7366657272656420746f20746865206f726967696e2773206163636f756e742e587365745f64697374726962757465645f72657761726404011c62616c616e6365180128543a3a42616c616e6365000308fc41646d696e206d6574686f6420746f20736574207468652072657761726420616d6f756e74207573656420666f7220746865206e6578742065706f6368732eac43757272656e742065706f6368206973206e6f7420616666656374656420627920746869732063616c6c2e487365745f65706f63685f6475726174696f6e040118626c6f636b73100138543a3a426c6f636b4e756d626572000408e841646d696e206d6574686f6420746f2073657420746865206475726174696f6e207573656420666f7220746865206e6578742065706f6368732eac43757272656e742065706f6368206973206e6f7420616666656374656420627920746869732063616c6c2e407365745f67726f75705f77656967687408012067726f75705f6964100128543a3a47726f75704964000118776569676874280124543a3a576569676874000508fc41646d696e206d6574686f6420746f20736574207468652067726f75702077656967687473207573656420666f7220746865206e6578742065706f6368732eac43757272656e742065706f6368206973206e6f7420616666656374656420627920746869732063616c6c2e487365745f63757272656e63795f67726f757008012c63757272656e63795f696469010134543a3a43757272656e6379496400012067726f75705f6964100128543a3a47726f75704964000614f441646d696e206d6574686f6420746f20736574207468652067726f7570207573656420666f7220612063757272656e637920696e20746865206e657874cc65706f6368732e2043757272656e742065706f6368206973206e6f7420616666656374656420627920746869732063616c6c2e00e854686973206d6574686f642077696c6c20646f207468652063757272656e637920617661696c61626c6520666f72207573696e6720697420696e687374616b652f756e7374616b652f636c61696d2063616c6c732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed060c4470616c6c65745f636f6e6e6563746f72731870616c6c65741043616c6c040454000120447365745f646f6d61696e5f726f75746572080118646f6d61696e91020118446f6d61696e000118726f757465729d02015c526f757465723c43757272656e637949644f663c543e3e00000454536574206120446f6d61696e277320726f75746572346164645f636f6e6e6563746f72040124636f6e6e6563746f72000130543a3a4163636f756e744964000108f841646420616e204163636f756e74496420746f2074686520736574206f66206b6e6f776e20636f6e6e6563746f72732c20616c6c6f77696e672074686174846f726967696e20746f2073656e6420696e636f6d696e67206d657373616765732e206164645f706f6f6c08011c706f6f6c5f696428012c506f6f6c49644f663c543e000118646f6d61696e91020118446f6d61696e00020470416464206120706f6f6c20746f206120676976656e20646f6d61696e2c6164645f7472616e63686510011c706f6f6c5f696428012c506f6f6c49644f663c543e0001287472616e6368655f69646d0101385472616e63686549644f663c543e000120646563696d616c730801087538000118646f6d61696e91020118446f6d61696e0003047c4164642061207472616e63686520746f206120676976656e20646f6d61696e487570646174655f746f6b656e5f70726963650c011c706f6f6c5f696428012c506f6f6c49644f663c543e0001287472616e6368655f69646d0101385472616e63686549644f663c543e000118646f6d61696e91020118446f6d61696e00040450557064617465206120746f6b656e207072696365347570646174655f6d656d626572100138646f6d61696e5f61646472657373f1060134446f6d61696e4164647265737300011c706f6f6c5f696428012c506f6f6c49644f663c543e0001287472616e6368655f69646d0101385472616e63686549644f663c543e00012c76616c69645f756e74696c2801184d6f6d656e740005043c5570646174652061206d656d6265725c7472616e736665725f7472616e6368655f746f6b656e7310011c706f6f6c5f696428012c506f6f6c49644f663c543e0001287472616e6368655f69646d0101385472616e63686549644f663c543e000138646f6d61696e5f61646472657373f1060134446f6d61696e41646472657373000118616d6f756e741801783c542061732070616c6c65743a3a436f6e6669673e3a3a42616c616e6365000604a85472616e73666572207472616e63686520746f6b656e7320746f206120676976656e20616464726573731868616e646c65040114627974657330011c5665633c75383e0063146848616e646c6520616e20696e636f6d696e67206d6573736167651101544f444f286e756e6f293a2077652070726f6261626c79206e656564206120637573746f6d206f726967696e207479706520666f72207468657365206d657373616765730901746f20656e737572652074686579206861766520636f6d6520696e207468726f7567682058434d2e20466f72206e6f772c206c657427732068617665206120504f43d46865726520746f20746573742074686520706970656c696e6520457468657265756d202d2d2d3e204d6f6f6e6265616d202d2d2d3e5843656e747269667567653a3a636f6e6e6563746f7273042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef1060c246366675f747970657338646f6d61696e5f6164647265737334446f6d61696e416464726573730001082843656e7472696675676504000401205b75383b2033325d0000000c45564d080028012845564d436861696e49640000950201205b75383b2032305d00010000f5060c5070616c6c65745f706f6f6c5f72656769737472791870616c6c65741043616c6c04045400011020726567697374657218011461646d696e000130543a3a4163636f756e74496400011c706f6f6c5f6964280124543a3a506f6f6c49640001387472616e6368655f696e70757473f90601585665633c5472616e636865496e7075744f663c543e3e00012063757272656e637969010134543a3a43757272656e6379496400012c6d61785f72657365727665180128543a3a42616c616e63650001206d657461646174610107013c4f7074696f6e3c5665633c75383e3e000040444372656174652061206e657720706f6f6c00cc496e697469616c6973652061206e657720706f6f6c20776974682074686520676976656e20494420616e64207472616e636865e0636f6e66696775726174696f6e2e205472616e63686520302069732074686520657175697479207472616e6368652c20616e64206d757374a868617665207a65726f20696e74657265737420616e642061207a65726f207269736b206275666665722e00d4546865206d696e696d756d2065706f6368206c656e6774682c20616e64206d6178696d756d204e4156206167652077696c6c206265bc73657420746f20636861696e2d776964652064656661756c74732e20546865792063616e2062652075706461746564607769746820612063616c6c20746f2060757064617465602e00c45468652063616c6c65722077696c6c20626520676976656e207468652060506f6f6c41646d696e6020726f6c6520666f72c8746865206372656174656420706f6f6c2e204164646974696f6e616c2061646d696e6973747261746f72732063616e206265886164646564207769746820746865205065726d697373696f6e732070616c6c65742e00dc52657475726e7320616e206572726f72206966207468652072657175657374656420706f6f6c20494420697320616c726561647920696ed07573652c206f7220696620746865207472616e63686520636f6e66696775726174696f6e2063616e6e6f7420626520757365642e1875706461746508011c706f6f6c5f6964280124543a3a506f6f6c496400011c6368616e67657305070140506f6f6c4368616e6765734f663c543e0001309c557064617465207065722d706f6f6c20636f6e66696775726174696f6e2073657474696e67732e009854686973207570646174657320746865207472616e63686573206f662074686520706f6f6c2ccc7365747320746865206d696e696d756d2065706f6368206c656e6774682c20616e64206d6178696d756d204e4156206167652e00cc4966206e6f2064656c617920697320726571756972656420666f72207570646174657320616e6420726564656d7074696f6e73c4646f6e2774206861766520746f2062652066756c66696c6c65642c207468656e2074686973206973206578656375746564bc696d6d6564696174656c792e204f74686572776973652c2074686520757064617465206973207363686564756c656454746f206265206578656375746564206c617465722e00d45468652063616c6c6572206d7573742068617665207468652060506f6f6c41646d696e6020726f6c6520696e206f7264657220746f58696e766f6b6520746869732065787472696e7369632e38657865637574655f75706461746504011c706f6f6c5f6964280124543a3a506f6f6c4964000218a045786563757465642061207363686564756c65642075706461746520746f2074686520706f6f6c2e00c05468697320636865636b7320696620746865207363686564756c65642074696d6520697320696e207468652070617374b4616e642c2069662072657175697265642c20696620746865726520617265206e6f206f75747374616e64696e67c072656465656d206f72646572732e20496620626f7468206170706c792c207468656e20746865207363686564756c6564506368616e67657320617265206170706c6965642e307365745f6d6574616461746108011c706f6f6c5f6964280124543a3a506f6f6c49640001206d6574616461746130011c5665633c75383e000310d453657473207468652049504653206861736820666f722074686520706f6f6c206d6574616461746120696e666f726d6174696f6e2e00d45468652063616c6c6572206d7573742068617665207468652060506f6f6c41646d696e6020726f6c6520696e206f7264657220746f58696e766f6b6520746869732065787472696e7369632e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef906000002fd0600fd060c4870616c6c65745f706f6f6c5f73797374656d207472616e63686573305472616e636865496e7075740c1052617465017901484d6178546f6b656e4e616d654c656e677468017d01504d6178546f6b656e53796d626f6c4c656e677468018101000c01307472616e6368655f747970658d0101445472616e636865547970653c526174653e00012473656e696f726974795d0201444f7074696f6e3c53656e696f726974793e0001206d65746164617461910101e45472616e6368654d657461646174613c4d6178546f6b656e4e616d654c656e6774682c204d6178546f6b656e53796d626f6c4c656e6774683e0000010704184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000005070c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f74797065732c506f6f6c4368616e676573101052617465017901484d6178546f6b656e4e616d654c656e677468017d01504d6178546f6b656e53796d626f6c4c656e6774680181012c4d61785472616e63686573012d01001001207472616e63686573090701d04368616e67653c426f756e6465645665633c5472616e6368655570646174653c526174653e2c204d61785472616e636865733e3e0001407472616e6368655f6d6574616461746119070169014368616e67653c426f756e6465645665633c5472616e6368654d657461646174613c4d6178546f6b656e4e616d654c656e6774682c0a4d6178546f6b656e53796d626f6c4c656e6774683e2c204d61785472616e636865733e3e0001386d696e5f65706f63685f74696d65250701384368616e67653c4d6f6d656e743e00012c6d61785f6e61765f616765250701384368616e67653c4d6f6d656e743e00000907082c6f726d6c5f747261697473184368616e6765041456616c7565010d070108204e6f4368616e6765000000204e657756616c756504000d07011456616c7565000100000d07101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454011107045300000400150701185665633c543e000011070c4870616c6c65745f706f6f6c5f73797374656d207472616e63686573345472616e636865557064617465041052617465017901000801307472616e6368655f747970658d0101445472616e636865547970653c526174653e00012473656e696f726974795d0201444f7074696f6e3c53656e696f726974793e000015070000021107001907082c6f726d6c5f747261697473184368616e6765041456616c7565011d070108204e6f4368616e6765000000204e657756616c756504001d07011456616c7565000100001d07101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454019101045300000400210701185665633c543e000021070000029101002507082c6f726d6c5f747261697473184368616e6765041456616c756501280108204e6f4368616e6765000000204e657756616c7565040028011456616c75650001000029070c5070616c6c65745f626c6f636b5f726577617264731870616c6c65741043616c6c04045400010c30636c61696d5f7265776172640401286163636f756e745f6964000130543a3a4163636f756e744964000008bc436c61696d73207468652072657761726420746865206173736f63696174656420746f20612063757272656e63792ed4546865207265776172642077696c6c206265207472616e7366657272656420746f2074686520746172676574206163636f756e742e4c7365745f636f6c6c61746f725f72657761726404016c636f6c6c61746f725f7265776172645f7065725f73657373696f6e180128543a3a42616c616e6365000108050141646d696e206d6574686f6420746f20736574207468652072657761726420616d6f756e7420666f72206120636f6c6c61746f72207573656420666f7220746865f06e6578742073657373696f6e732e2043757272656e742073657373696f6e206973206e6f7420616666656374656420627920746869732063616c6c2e407365745f746f74616c5f726577617264040160746f74616c5f7265776172645f7065725f73657373696f6e180128543a3a42616c616e6365000210f841646d696e206d6574686f6420746f207365742074686520746f74616c2072657761726420646973747269627574696f6e20666f7220746865206e657874dc73657373696f6e732e2043757272656e742073657373696f6e206973206e6f7420616666656374656420627920746869732063616c6c2e00e85468726f777320696620746f74616c5f726577617264203c20636f6c6c61746f725f726577617264202a20636f6c6c61746f725f636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2d070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657828013c4f766572776569676874496e6465780001307765696768745f6c696d697428012458636d57656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657710010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657710010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657710010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657728012458636d57656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657728012458636d57656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657728012458636d57656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e31070c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e6408011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676535070154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f61737365747310011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747361030164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f61737365747310011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747361030164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765610701c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687428012458636d57656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ec9020148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e10012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e5d0201484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747361030164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69745903012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f61737365747314011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747361030164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d10010c7533320001307765696768745f6c696d69745903012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3507080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563004003907015076303a3a58636d3c52756e74696d6543616c6c3e00000008563104004d07015076313a3a58636d3c52756e74696d6543616c6c3e00010008563204001103015076323a3a58636d3c52756e74696d6543616c6c3e0002000039070c0c78636d0876300c58636d042c52756e74696d6543616c6c00012c34576974686472617741737365740801186173736574736503013c5665633c4d756c746941737365743e00011c656666656374733d07015c5665633c4f726465723c52756e74696d6543616c6c3e3e0000004c5265736572766541737365744465706f7369740801186173736574736503013c5665633c4d756c746941737365743e00011c656666656374733d07015c5665633c4f726465723c52756e74696d6543616c6c3e3e0001003454656c65706f727441737365740801186173736574736503013c5665633c4d756c746941737365743e00011c656666656374733d07015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696424010c753634000120726573706f6e736549070120526573706f6e7365000300345472616e7366657241737365740801186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065450301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c49030168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b102010c7533320001406d61785f6d6573736167655f73697a65b102010c7533320001306d61785f6361706163697479b102010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b102010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b102010c75333200011873656e646572b102010c753332000124726563697069656e74b102010c7533320009002c52656c6179656446726f6d08010c77686fa90201344d756c74694c6f636174696f6e00011c6d6573736167653907018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a00003d070000024107004107100c78636d087630146f72646572144f72646572042c52756e74696d6543616c6c000120104e756c6c000000304465706f73697441737365740801186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365740c01186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976656503013c5665633c4d756c746941737365743e00011c726563656976656503013c5665633c4d756c746941737365743e0003005c496e6974696174655265736572766557697468647261770c01186173736574736503013c5665633c4d756c746941737365743e00011c72657365727665a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696424010c75363400011064657374a90201344d756c74694c6f636174696f6e0001186173736574736503013c5665633c4d756c746941737365743e00060030427579457865637574696f6e14011066656573690301284d756c7469417373657400011877656967687428010c7536340001106465627428010c75363400013468616c745f6f6e5f6572726f72c00110626f6f6c00010c78636d450701545665633c58636d3c52756e74696d6543616c6c3e3e00070000450700000239070049070c0c78636d08763020526573706f6e73650001041841737365747304006503013c5665633c4d756c746941737365743e000000004d070c0c78636d0876310c58636d042c52756e74696d6543616c6c00013434576974686472617741737365740801186173736574731d03012c4d756c746941737365747300011c656666656374735107015c5665633c4f726465723c52756e74696d6543616c6c3e3e000000545265736572766541737365744465706f73697465640801186173736574731d03012c4d756c746941737365747300011c656666656374735107015c5665633c4f726465723c52756e74696d6543616c6c3e3e000100585265636569766554656c65706f7274656441737365740801186173736574731d03012c4d756c746941737365747300011c656666656374735107015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696424010c753634000120726573706f6e73655d070120526573706f6e7365000300345472616e7366657241737365740801186173736574731d03012c4d756c746941737365747300012c62656e6566696369617279c90201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731d03012c4d756c746941737365747300011064657374c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065450301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c49030168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b102010c7533320001406d61785f6d6573736167655f73697a65b102010c7533320001306d61785f6361706163697479b102010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b102010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b102010c75333200011873656e646572b102010c753332000124726563697069656e74b102010c7533320009002c52656c6179656446726f6d08010c77686fcd020154496e746572696f724d756c74694c6f636174696f6e00011c6d6573736167654d07018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a004053756273637269626556657273696f6e08012071756572795f696424010c75363400014c6d61785f726573706f6e73655f77656967687424010c753634000b0048556e73756273637269626556657273696f6e000c000051070000025507005507100c78636d087631146f72646572144f72646572042c52756e74696d6543616c6c000120104e6f6f70000000304465706f73697441737365740c01186173736574734d0301404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200012c62656e6566696369617279c90201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365741001186173736574734d0301404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200011064657374c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976654d0301404d756c7469417373657446696c74657200011c726563656976651d03012c4d756c74694173736574730003005c496e6974696174655265736572766557697468647261770c01186173736574734d0301404d756c7469417373657446696c74657200011c72657365727665c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574734d0301404d756c7469417373657446696c74657200011064657374c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696424010c75363400011064657374c90201344d756c74694c6f636174696f6e0001186173736574734d0301404d756c7469417373657446696c74657200060030427579457865637574696f6e14011066656573250301284d756c7469417373657400011877656967687428010c7536340001106465627428010c75363400013468616c745f6f6e5f6572726f72c00110626f6f6c000130696e737472756374696f6e73590701545665633c58636d3c52756e74696d6543616c6c3e3e0007000059070000024d07005d070c0c78636d08763120526573706f6e73650001081841737365747304001d03012c4d756c74694173736574730000001c56657273696f6e040010013873757065723a3a56657273696f6e000100006107080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563004006507015076303a3a58636d3c52756e74696d6543616c6c3e00000008563104007907015076313a3a58636d3c52756e74696d6543616c6c3e00010008563204008907015076323a3a58636d3c52756e74696d6543616c6c3e0002000065070c0c78636d0876300c58636d042c52756e74696d6543616c6c00012c34576974686472617741737365740801186173736574736503013c5665633c4d756c746941737365743e00011c656666656374736907015c5665633c4f726465723c52756e74696d6543616c6c3e3e0000004c5265736572766541737365744465706f7369740801186173736574736503013c5665633c4d756c746941737365743e00011c656666656374736907015c5665633c4f726465723c52756e74696d6543616c6c3e3e0001003454656c65706f727441737365740801186173736574736503013c5665633c4d756c746941737365743e00011c656666656374736907015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696424010c753634000120726573706f6e736549070120526573706f6e7365000300345472616e7366657241737365740801186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065450301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c75070168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b102010c7533320001406d61785f6d6573736167655f73697a65b102010c7533320001306d61785f6361706163697479b102010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b102010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b102010c75333200011873656e646572b102010c753332000124726563697069656e74b102010c7533320009002c52656c6179656446726f6d08010c77686fa90201344d756c74694c6f636174696f6e00011c6d6573736167656507018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a000069070000026d07006d07100c78636d087630146f72646572144f72646572042c52756e74696d6543616c6c000120104e756c6c000000304465706f73697441737365740801186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365740c01186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976656503013c5665633c4d756c746941737365743e00011c726563656976656503013c5665633c4d756c746941737365743e0003005c496e6974696174655265736572766557697468647261770c01186173736574736503013c5665633c4d756c746941737365743e00011c72657365727665a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574736503013c5665633c4d756c746941737365743e00011064657374a90201344d756c74694c6f636174696f6e00011c656666656374733d0701385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696424010c75363400011064657374a90201344d756c74694c6f636174696f6e0001186173736574736503013c5665633c4d756c746941737365743e00060030427579457865637574696f6e14011066656573690301284d756c7469417373657400011877656967687428010c7536340001106465627428010c75363400013468616c745f6f6e5f6572726f72c00110626f6f6c00010c78636d710701545665633c58636d3c52756e74696d6543616c6c3e3e00070000710700000265070075070c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000079070c0c78636d0876310c58636d042c52756e74696d6543616c6c00013434576974686472617741737365740801186173736574731d03012c4d756c746941737365747300011c656666656374737d07015c5665633c4f726465723c52756e74696d6543616c6c3e3e000000545265736572766541737365744465706f73697465640801186173736574731d03012c4d756c746941737365747300011c656666656374737d07015c5665633c4f726465723c52756e74696d6543616c6c3e3e000100585265636569766554656c65706f7274656441737365740801186173736574731d03012c4d756c746941737365747300011c656666656374737d07015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696424010c753634000120726573706f6e73655d070120526573706f6e7365000300345472616e7366657241737365740801186173736574731d03012c4d756c746941737365747300012c62656e6566696369617279c90201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731d03012c4d756c746941737365747300011064657374c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065450301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c75070168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b102010c7533320001406d61785f6d6573736167655f73697a65b102010c7533320001306d61785f6361706163697479b102010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b102010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b102010c75333200011873656e646572b102010c753332000124726563697069656e74b102010c7533320009002c52656c6179656446726f6d08010c77686fcd020154496e746572696f724d756c74694c6f636174696f6e00011c6d6573736167657907018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a004053756273637269626556657273696f6e08012071756572795f696424010c75363400014c6d61785f726573706f6e73655f77656967687424010c753634000b0048556e73756273637269626556657273696f6e000c00007d070000028107008107100c78636d087631146f72646572144f72646572042c52756e74696d6543616c6c000120104e6f6f70000000304465706f73697441737365740c01186173736574734d0301404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200012c62656e6566696369617279c90201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365741001186173736574734d0301404d756c7469417373657446696c7465720001286d61785f61737365747310010c75333200011064657374c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976654d0301404d756c7469417373657446696c74657200011c726563656976651d03012c4d756c74694173736574730003005c496e6974696174655265736572766557697468647261770c01186173736574734d0301404d756c7469417373657446696c74657200011c72657365727665c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574734d0301404d756c7469417373657446696c74657200011064657374c90201344d756c74694c6f636174696f6e00011c65666665637473510701385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696424010c75363400011064657374c90201344d756c74694c6f636174696f6e0001186173736574734d0301404d756c7469417373657446696c74657200060030427579457865637574696f6e14011066656573250301284d756c7469417373657400011877656967687428010c7536340001106465627428010c75363400013468616c745f6f6e5f6572726f72c00110626f6f6c000130696e737472756374696f6e73850701545665633c58636d3c52756e74696d6543616c6c3e3e00070000850700000279070089070c0c78636d0876320c58636d042c52756e74696d6543616c6c000004008d0701745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00008d0700000291070091070c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404001d03012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404001d03012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404001d03012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696424011c51756572794964000120726573706f6e736539030120526573706f6e73650001286d61785f77656967687424010c753634000300345472616e7366657241737365740801186173736574731d03012c4d756c746941737365747300012c62656e6566696369617279c90201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574731d03012c4d756c746941737365747300011064657374c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065450301284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424010c75363400011063616c6c75070168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b102010c7533320001406d61785f6d6573736167655f73697a65b102010c7533320001306d61785f6361706163697479b102010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b102010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b102010c75333200011873656e646572b102010c753332000124726563697069656e74b102010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400cd020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696424011c5175657279496400011064657374c90201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687424010c753634000c00304465706f73697441737365740c01186173736574734d0301404d756c7469417373657446696c7465720001286d61785f617373657473b102010c75333200012c62656e6566696369617279c90201344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574734d0301404d756c7469417373657446696c7465720001286d61785f617373657473b102010c75333200011064657374c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e000e003445786368616e67654173736574080110676976654d0301404d756c7469417373657446696c74657200011c726563656976651d03012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574734d0301404d756c7469417373657446696c74657200011c72657365727665c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574734d0301404d756c7469417373657446696c74657200011064657374c90201344d756c74694c6f636174696f6e00010c78636d1103011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696424011c5175657279496400011064657374c90201344d756c74694c6f636174696f6e0001186173736574734d0301404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687424010c75363400120030427579457865637574696f6e08011066656573250301284d756c746941737365740001307765696768745f6c696d69745903012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204008907014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804008907014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574731d03012c4d756c74694173736574730001187469636b6574c90201344d756c74694c6f636174696f6e0018001054726170040024010c7536340019004053756273637269626556657273696f6e08012071756572795f696424011c5175657279496400014c6d61785f726573706f6e73655f77656967687424010c753634001a0048556e73756273637269626556657273696f6e001b000095070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657828013c4f766572776569676874496e6465780001307765696768745f6c696d697428012458636d576569676874000030905365727669636520612073696e676c65206f766572776569676874206d6573736167652e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ee82d2060696e646578603a2054686520696e646578206f6620746865206f766572776569676874206d65737361676520746f20736572766963652e1d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f66207765696768742074686174206d65737361676520657865637574696f6e206d61792074616b652e001c4572726f72733aac2d2060556e6b6e6f776e603a204d657373616765206f662060696e6465786020697320756e6b6e6f776e2e15012d20604f7665724c696d6974603a204d65737361676520657865637574696f6e206d6179207573652067726561746572207468616e20607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e99070c306f726d6c5f78746f6b656e73186d6f64756c651043616c6c040454000118207472616e7366657210012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69745903012c5765696768744c696d69740000306c5472616e73666572206e61746976652063757272656e636965732e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e4c7472616e736665725f6d756c746961737365740c011461737365749d070160426f783c56657273696f6e65644d756c746941737365743e00011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69745903012c5765696768744c696d6974000130585472616e7366657220604d756c74694173736574602e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e447472616e736665725f776974685f66656514012c63757272656e63795f696469010134543a3a43757272656e63794964000118616d6f756e74180128543a3a42616c616e636500010c666565180128543a3a42616c616e636500011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69745903012c5765696768744c696d6974000254ec5472616e73666572206e61746976652063757272656e636965732073706563696679696e67207468652066656520616e6420616d6f756e742061732473657061726174652e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e000d0160666565602069732074686520616d6f756e7420746f206265207370656e7420746f2070617920666f7220657865637574696f6e20696e2064657374696e6174696f6ef8636861696e2e20426f74682066656520616e6420616d6f756e742077696c6c206265207375627472616374656420666f726d207468652063616c6c6572732062616c616e63652e000d014966206066656560206973206e6f74206869676820656e6f75676820746f20636f76657220666f722074686520657865637574696f6e20636f73747320696e20746865e464657374696e6174696f6e20636861696e2c207468656e20746865206173736574732077696c6c206265207472617070656420696e207468654464657374696e6174696f6e20636861696e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e707472616e736665725f6d756c746961737365745f776974685f66656510011461737365749d070160426f783c56657273696f6e65644d756c746941737365743e00010c6665659d070160426f783c56657273696f6e65644d756c746941737365743e00011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69745903012c5765696768744c696d697400035401015472616e7366657220604d756c74694173736574602073706563696679696e67207468652066656520616e6420616d6f756e742061732073657061726174652e00fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e00ec606665656020697320746865206d756c7469617373657420746f206265207370656e7420746f2070617920666f7220657865637574696f6e20696e090164657374696e6174696f6e20636861696e2e20426f74682066656520616e6420616d6f756e742077696c6c206265207375627472616374656420666f726d20746865110163616c6c6572732062616c616e636520466f72206e6f77207765206f6e6c79206163636570742066656520616e6420617373657420686176696e67207468652073616d654c604d756c74694c6f636174696f6e602069642e000d014966206066656560206973206e6f74206869676820656e6f75676820746f20636f76657220666f722074686520657865637574696f6e20636f73747320696e20746865e464657374696e6174696f6e20636861696e2c207468656e20746865206173736574732077696c6c206265207472617070656420696e207468654464657374696e6174696f6e20636861696e001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e607472616e736665725f6d756c746963757272656e6369657310012863757272656e63696573a10701805665633c28543a3a43757272656e637949642c20543a3a42616c616e6365293e0001206665655f6974656d10010c75333200011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69745903012c5765696768744c696d697400043c05015472616e73666572207365766572616c2063757272656e636965732073706563696679696e6720746865206974656d20746f20626520757365642061732066656500fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e000d01606665655f6974656d6020697320696e646578206f66207468652063757272656e63696573207475706c6520746861742077652077616e7420746f2075736520666f721c7061796d656e74001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e507472616e736665725f6d756c746961737365747310011861737365747361030164426f783c56657273696f6e65644d756c74694173736574733e0001206665655f6974656d10010c75333200011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000144646573745f7765696768745f6c696d69745903012c5765696768744c696d697400053c0d015472616e73666572207365766572616c20604d756c74694173736574602073706563696679696e6720746865206974656d20746f20626520757365642061732066656500fc60646573745f7765696768745f6c696d697460206973207468652077656967687420666f722058434d20657865637574696f6e206f6e2074686520646573740901636861696e2c20616e6420697420776f756c6420626520636861726765642066726f6d20746865207472616e73666572726564206173736574732e20496620736574050162656c6f7720726571756972656d656e74732c2074686520657865637574696f6e206d6179206661696c20616e642061737365747320776f756c646e27742062652472656365697665642e00f8606665655f6974656d6020697320696e646578206f6620746865204d756c746941737365747320746861742077652077616e7420746f2075736520666f721c7061796d656e74001101497427732061206e6f2d6f7020696620616e79206572726f72206f6e206c6f63616c2058434d20657865637574696f6e206f72206d6573736167652073656e64696e672ef84e6f74652073656e64696e6720617373657473206f75742070657220736520646f65736e27742067756172616e746565207468657920776f756c64206265110172656365697665642e20526563656976696e6720646570656e6473206f6e206966207468652058434d206d65737361676520636f756c642062652064656c697665726564dc627920746865206e6574776f726b2c20616e642069662074686520726563656976696e6720636861696e20776f756c642068616e646c654c6d6573736167657320636f72726563746c792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9d07080c78636d4c56657273696f6e65644d756c7469417373657400010808563004006903013876303a3a4d756c7469417373657400000008563104002503013876313a3a4d756c7469417373657400010000a107000002a50700a5070000040869011800a9070c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65741043616c6c04045400012820726567697374657208010c77686f000130543a3a4163636f756e744964000114696e646578a8010c753136000020f852656769737465722061206465726976617469766520696e64657820666f7220616e206163636f756e742069642e20446973706174636861626c652062798c4465726976617469766541646472657373526567697374726174696f6e4f726967696e004d01576520646f206e6f742073746f726520746865206465726976617469766520616464726573732c20627574206f6e6c792074686520696e6465782e20576520646f206e6f74206e65656420746f2073746f7265fc7468652064657269766174697665206164647265737320746f2069737375652063616c6c732c206f6e6c792074686520696e64657820697320656e6f756768005501466f72206e6f7720616e20696e646578206973207265676973746572656420666f7220616c6c20706f737369626c652064657374696e6174696f6e7320616e64206e6f74207065722d64657374696e6174696f6e2e510157652063616e206368616e6765207468697320696e207468652066757475726520616c74686f75676820697420776f756c64206a757374206d616b65207468696e6773206d6f726520636f6d706c6963617465642864657265676973746572040114696e646578a8010c753136000108510144652d52656769737465722061206465726976617469766520696e6465782e20546869732070726576656e747320616e206163636f756e7420746f20757365206120646572697661746976652061646472657373110128726570726573656e74656420627920616e20696e646578292066726f6d206f7572206f66206f757220736f7665726569676e206163636f756e747320616e796d6f72656c7472616e736163745f7468726f7567685f6465726976617469766514011064657374ad070134543a3a5472616e736163746f72000114696e646578a8010c75313600010c666565b107018043757272656e63795061796d656e743c43757272656e637949644f663c543e3e000128696e6e65725f63616c6c30011c5665633c75383e00012c7765696768745f696e666fb907013c5472616e736163745765696768747300021431015472616e736163742074686520696e6e65722063616c6c207468726f75676820612064657269766174697665206163636f756e7420696e20612064657374696e6174696f6e20636861696e2c5d017573696e6720276665655f6c6f636174696f6e2720746f2070617920666f722074686520666565732e2054686973206665655f6c6f636174696f6e20697320676976656e2061732061206d756c74696c6f636174696f6e0059015468652063616c6c6572206e6565647320746f20686176652074686520696e646578207265676973746572656420696e20746869732070616c6c65742e2054686520666565206d756c74696173736574206e656564731101746f2062652061207265736572766520617373657420666f72207468652064657374696e6174696f6e207472616e736163746f723a3a6d756c74696c6f636174696f6e2e687472616e736163745f7468726f7567685f736f7665726569676e18011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0001246665655f7061796572000130543a3a4163636f756e74496400010c666565b107018043757272656e63795061796d656e743c43757272656e637949644f663c543e3e00011063616c6c30011c5665633c75383e00012c6f726967696e5f6b696e64450301284f726967696e4b696e6400012c7765696768745f696e666fb907013c5472616e73616374576569676874730003101d015472616e73616374207468652063616c6c207468726f7567682074686520736f7665726569676e206163636f756e7420696e20612064657374696e6174696f6e20636861696e2c70276665655f706179657227207061797320666f72207468652066656500b8536f7665726569676e4163636f756e74446973706174636865724f726967696e2063616c6c61626c65206f6e6c79447365745f7472616e736163745f696e666f1001206c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0001547472616e736163745f65787472615f77656967687428012c58636d56325765696768740001286d61785f77656967687428010c7536340001707472616e736163745f65787472615f7765696768745f7369676e65640101014c4f7074696f6e3c58636d56325765696768743e000404984368616e676520746865207472616e7361637420696e666f206f662061206c6f636174696f6e5072656d6f76655f7472616e736163745f696e666f0401206c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0005049852656d6f766520746865207472616e7361637420696e666f206f662061206c6f636174696f6e5c7472616e736163745f7468726f7567685f7369676e656410011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00010c666565b107018043757272656e63795061796d656e743c43757272656e637949644f663c543e3e00011063616c6c30011c5665633c75383e00012c7765696768745f696e666fb907013c5472616e7361637457656967687473000614ec5472616e73616374207468652063616c6c207468726f756768207468652061207369676e6564206f726967696e20696e207468697320636861696e4d01746861742073686f756c6420626520636f6e76657274656420746f2061207472616e73616374696f6e206469737061746368206163636f756e7420696e207468652064657374696e6174696f6e20636861696eec627920616e79206d6574686f6420696d706c656d656e74656420696e207468652064657374696e6174696f6e20636861696e732072756e74696d65003501546869732074696d652077652061726520676976696e67207468652063757272656e637920617320612063757272656e6379496420696e7374656164206f66206d756c74696c6f636174696f6e487365745f6665655f7065725f7365636f6e6408013861737365745f6c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0001386665655f7065725f7365636f6e6418011075313238000704dc536574207468652066656520706572207365636f6e64206f6620616e206173736574206f6e20697473207265736572766520636861696e5472656d6f76655f6665655f7065725f7365636f6e6404013861737365745f6c6f636174696f6ea502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000804e852656d6f7665207468652066656520706572207365636f6e64206f6620616e206173736574206f6e20697473207265736572766520636861696e2c68726d705f6d616e6167650c0118616374696f6e8103013448726d704f7065726174696f6e00010c666565b107018043757272656e63795061796d656e743c43757272656e637949644f663c543e3e00012c7765696768745f696e666fb907013c5472616e7361637457656967687473000904584d616e6167652048524d50206f7065726174696f6e73042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ead07084c646576656c6f706d656e745f72756e74696d65384e756c6c5472616e736163746f7200000000b1070c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65743c43757272656e63795061796d656e74042843757272656e637949640169010008012063757272656e6379b507015043757272656e63793c43757272656e637949643e0001286665655f616d6f756e74610101304f7074696f6e3c753132383e0000b5070c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65742043757272656e6379042843757272656e63794964016901010830417343757272656e6379496404006901012843757272656e637949640000003c41734d756c74694c6f636174696f6e0400a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00010000b9070c5470616c6c65745f78636d5f7472616e736163746f721870616c6c65743c5472616e736163745765696768747300000801807472616e736163745f72657175697265645f7765696768745f61745f6d6f737428012c58636d56325765696768740001386f766572616c6c5f7765696768740101014c4f7074696f6e3c58636d56325765696768743e0000bd070c2c636861696e6272696467651870616c6c65741043616c6c040454000124347365745f7468726573686f6c640401247468726573686f6c6410010c75333200002098536574732074686520766f7465207468726573686f6c6420666f722070726f706f73616c732e00fc54686973207468726573686f6c64206973207573656420746f2064657465726d696e6520686f77206d616e7920766f74657320617265207265717569726564786265666f726520612070726f706f73616c2069732065786563757465642e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e307365745f7265736f7572636508010869640401285265736f7572636549640001186d6574686f6430011c5665633c75383e000114f853746f7265732061206d6574686f64206e616d65206f6e20636861696e20756e64657220616e206173736f636961746564207265736f757263652049442e002823203c7765696768743e302d204f2831292077726974652c23203c2f7765696768743e3c72656d6f76655f7265736f7572636504010869640401285265736f757263654964000220c052656d6f7665732061207265736f757263652049442066726f6d20746865207265736f75726365206d617070696e672e001901416674657220746869732063616c6c2c20627269646765207472616e7366657273207769746820746865206173736f636961746564207265736f757263652049442077696c6c3062652072656a65637465642e002823203c7765696768743e382d204f2831292072656d6f76616c2c23203c2f7765696768743e3c77686974656c6973745f636861696e040108696408011c436861696e49640003141101456e61626c6573206120636861696e204944206173206120736f75726365206f722064657374696e6174696f6e20666f72206120627269646765207472616e736665722e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e2c6164645f72656c6179657204010476000130543a3a4163636f756e74496400041498416464732061206e65772072656c6179657220746f207468652072656c61796572207365742e002823203c7765696768743e602d204f283129206c6f6f6b757020616e6420696e736572742c23203c2f7765696768743e3872656d6f76655f72656c617965720401286163636f756e745f6964000130543a3a4163636f756e744964000514a452656d6f76657320616e206578697374696e672072656c617965722066726f6d20746865207365742e002823203c7765696768743e642d204f283129206c6f6f6b757020616e642072656d6f76616c2c23203c2f7765696768743e5061636b6e6f776c656467655f70726f706f73616c1001146e6f6e63652801304465706f7369744e6f6e63650001187372635f696408011c436861696e4964000110725f69640401285265736f75726365496400011063616c6c65050170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e000620c8436f6d6d697473206120766f746520696e206661766f7572206f66207468652070726f76696465642070726f706f73616c2e005901496620612070726f706f73616c20776974682074686520676976656e206e6f6e636520616e6420736f7572636520636861696e20494420646f6573206e6f7420616c72656164792065786973742c2069742077696c6ce862652063726561746564207769746820616e20696e697469616c20766f746520696e206661766f75722066726f6d207468652063616c6c65722e002823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e3c72656a6563745f70726f706f73616c1001146e6f6e63652801304465706f7369744e6f6e63650001187372635f696408011c436861696e4964000110725f69640401285265736f75726365496400011063616c6c65050170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e000714ac436f6d6d697473206120766f746520616761696e737420612070726f76696465642070726f706f73616c2e002823203c7765696768743eec2d2046697865642c2073696e636520657865637574696f6e206f662070726f706f73616c2073686f756c64206e6f7420626520696e636c756465642c23203c2f7765696768743e3c6576616c5f766f74655f73746174650c01146e6f6e63652801304465706f7369744e6f6e63650001187372635f696408011c436861696e496400012070726f706f73616c65050170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e00082009014576616c7561746520746865207374617465206f6620612070726f706f73616c20676976656e207468652063757272656e7420766f7465207468726573686f6c642e004501412070726f706f73616c207769746820656e6f75676820766f7465732077696c6c20626520656974686572206578656375746564206f722063616e63656c6c65642c20616e6420746865207374617475737077696c6c2062652075706461746564206163636f7264696e676c792e002823203c7765696768743e1d012d20776569676874206f662070726f706f7365642063616c6c2c207265676172646c657373206f66207768657468657220657865637574696f6e20697320706572666f726d65642c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec1070c4c6f726d6c5f61737365745f7265676973747279186d6f64756c651043616c6c0404540001083872656769737465725f61737365740801206d65746164617461a10301b041737365744d657461646174613c543a3a42616c616e63652c20543a3a437573746f6d4d657461646174613e00012061737365745f6964c50701484f7074696f6e3c543a3a417373657449643e000000307570646174655f61737365741c012061737365745f696469010128543a3a41737365744964000120646563696d616c735d02012c4f7074696f6e3c7533323e0001106e616d650107013c4f7074696f6e3c5665633c75383e3e00011873796d626f6c0107013c4f7074696f6e3c5665633c75383e3e00014c6578697374656e7469616c5f6465706f736974610101484f7074696f6e3c543a3a42616c616e63653e0001206c6f636174696f6ec90701984f7074696f6e3c4f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e3e0001286164646974696f6e616ccd0701644f7074696f6e3c543a3a437573746f6d4d657461646174613e000100042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec50704184f7074696f6e0404540169010108104e6f6e6500000010536f6d65040069010000010000c90704184f7074696f6e04045401ad030108104e6f6e6500000010536f6d650400ad030000010000cd0704184f7074696f6e04045401a5030108104e6f6e6500000010536f6d650400a5030000010000d1070c206f726d6c5f78636d186d6f64756c651043616c6c0404540001044473656e645f61735f736f7665726569676e08011064657374a502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676535070154426f783c56657273696f6e656458636d3c28293e3e000004ac53656e6420616e2058434d206d6573736167652061732070617261636861696e20736f7665726569676e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed5070c6070616c6c65745f6d6967726174696f6e5f6d616e616765721870616c6c65741043616c6c040454000114586d6967726174655f73797374656d5f6163636f756e740401206163636f756e74730504015c5665633c285665633c75383e2c205665633c75383e293e000020d44d6967726174696e6720746865204163636f756e7420696e666f726d6174696f6e732066726f6d206672616d655f73797374656d2e000901546869732063616c6c2074616b65732074686520726177207363616c6520656e636f646564206b657920283d2070617472696369612d6b657920666f722065616368fc6163636f756e7420696e2074686520604163636f756e74602073746f7261676520616e6420696e7365727473207468652070726f7669646564207363616c65dc656e636f6465642076616c756520283d20604163636f756e74496e666f602920696e746f2074686520756e6465726c79696e672044422e0011014e6f74653a2041732077652061726520636f6e76657274696e672066726f6d207375627374726174652d763220746f207375627374726174652d7633207765206d757374e8646f20747970652d636f6e76657273696f6e732e2054686f736520636f6e76657273696f6e732061726520646f6e65206f66662d636861696e2e646d6967726174655f62616c616e6365735f69737375616e636504014c6164646974696f6e616c5f69737375616e6365180128543a3a42616c616e636500011c7c4d696772617465732061207468652060546f74616c49737375616e6365602e00dc5468652070726f766964652062616c616e636520686572652c2077696c6c20626520414444454420746f20746865206578697374696e67110160546f74616c49737375616e636560206f66207468652073797374656d2e2043616c6c65792062657474657220626520737572652c20746861742074686520746f74616ce469737375616e6365206d617463686573207468652061637475616c20746f74616c2069737375616e636520696e207468652073797374656d2cf07768696368206d65616e732c20746861742074686520604163636f756e74496e666f602066726f6d20746865206672616d655f73797374656d206973506d6967726174656420616674657277617264732e5c6d6967726174655f76657374696e675f76657374696e6704012076657374696e6773d90701f85665633c28543a3a4163636f756e7449642c2056657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e293e000210b04d696772617465732076657374696e6720696e666f726d6174696f6e20746f20746869732073797374656d2e000501546865206056657374696e67496e666f602069732061646170746564206f66662d636861696e2c20736f207468617420697420726570726573656e747320746865a8636f72726563742076657374696e6720696e666f726d6174696f6e206f6e207468697320636861696e2e546d6967726174655f70726f78795f70726f7869657304011c70726f78696573e107011d065665633c0a28543a3a4163636f756e7449642c3c3c542061732070616c6c65745f70726f78793a3a436f6e6669673e3a3a43757272656e63792061730a6672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a0a4163636f756e7449642c3e3e3a3a42616c616e63652c0a28426f756e6465645665633c50726f7879446566696e6974696f6e3c543a3a4163636f756e7449642c20543a3a50726f7879547970652c20543a3a0a426c6f636b4e756d6265723e2c3c542061732070616c6c65745f70726f78793a3a436f6e6669673e3a3a4d617850726f786965732c3e2c3c3c542061730a70616c6c65745f70726f78793a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c0a3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e63652c292c293e000318c44d6967726174657320746f206050726f78696573602073746f726167652066726f6d20616e6f7468657220636861696e2e001101417320746865206050726f78696573602073746f72616765206368616e676564206265747765656e20763220616e642076332c2061207472616e73666f726d6174696f6e0d01666f7220746865207632206461746120697320646f6e65206f66662d636861696e2e2054686520696e70757420646566696e657320616e206172726179206f66206f6609017475706c65732c2077686572652065616368207475706c6520646566696e65732c207468652070726f78696564206163636f756e742c2074686520726573657276650d0174686174206d75737420626520646f6e65206f6e2074686973206163636f756e7420616e64207468652070726f7869657320666f722074686973206163636f756e742e2066696e616c697a65000404a455706461746520746865206d6967726174696f6e2073746174757320746f2060436f6d706c65746560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed907000002dd0700dd070000040800650600e107000002e50700e5070000040c0018e90700e90700000408ed071800ed07101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f107045300000400f50701185665633c543e0000f107083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501a42c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065a4012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000f507000002f10700f9070c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000028350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e547375646f5f756e636865636b65645f77656967687408011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000128350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292ecc2d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e2c23203c2f7765696768743e1c7365745f6b657904010c6e6577d50401504163636f756e7449644c6f6f6b75704f663c543e0002285d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e402d204f6e65204442206368616e67652e2c23203c2f7765696768743e1c7375646f5f617308010c77686fd50401504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c6505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00032c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd070c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011020776974686472617708011c61646472657373d90201104831363000011476616c756518013042616c616e63654f663c543e000004e057697468647261772062616c616e63652066726f6d2045564d20696e746f2063757272656e63792f62616c616e6365732070616c6c65742e1063616c6c240118736f75726365d902011048313630000118746172676574d902011048313630000114696e70757430011c5665633c75383e00011476616c756595030110553235360001246761735f6c696d697428010c75363400013c6d61785f6665655f7065725f67617395030110553235360001606d61785f7072696f726974795f6665655f7065725f676173010801304f7074696f6e3c553235363e0001146e6f6e6365010801304f7074696f6e3c553235363e00012c6163636573735f6c697374050801585665633c28483136302c205665633c483235363e293e0001045d01497373756520616e2045564d2063616c6c206f7065726174696f6e2e20546869732069732073696d696c617220746f2061206d6573736167652063616c6c207472616e73616374696f6e20696e20457468657265756d2e18637265617465200118736f75726365d902011048313630000110696e697430011c5665633c75383e00011476616c756595030110553235360001246761735f6c696d697428010c75363400013c6d61785f6665655f7065725f67617395030110553235360001606d61785f7072696f726974795f6665655f7065725f676173010801304f7074696f6e3c553235363e0001146e6f6e6365010801304f7074696f6e3c553235363e00012c6163636573735f6c697374050801585665633c28483136302c205665633c483235363e293e0002085101497373756520616e2045564d20637265617465206f7065726174696f6e2e20546869732069732073696d696c617220746f206120636f6e7472616374206372656174696f6e207472616e73616374696f6e20696e24457468657265756d2e1c63726561746532240118736f75726365d902011048313630000110696e697430011c5665633c75383e00011073616c742c01104832353600011476616c756595030110553235360001246761735f6c696d697428010c75363400013c6d61785f6665655f7065725f67617395030110553235360001606d61785f7072696f726974795f6665655f7065725f676173010801304f7074696f6e3c553235363e0001146e6f6e6365010801304f7074696f6e3c553235363e00012c6163636573735f6c697374050801585665633c28483136302c205665633c483235363e293e0003047c497373756520616e2045564d2063726561746532206f7065726174696f6e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e010804184f7074696f6e0404540195030108104e6f6e6500000010536f6d650400950300000100000508000002090800090800000408d902c503000d080c3c70616c6c65745f626173655f6665651870616c6c65741043616c6c040454000108507365745f626173655f6665655f7065725f67617304010c6665659503011055323536000000387365745f656c6173746963697479040128656c6173746963697479cd03011c5065726d696c6c000100042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11080c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e1508012c5472616e73616374696f6e000004845472616e7361637420616e20457468657265756d207472616e73616374696f6e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15080c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400190801444c65676163795472616e73616374696f6e0000001c45495032393330040029080148454950323933305472616e73616374696f6e0001001c45495031353539040035080148454950313535395472616e73616374696f6e0002000019080c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e636595030110553235360001246761735f707269636595030110553235360001246761735f6c696d69749503011055323536000118616374696f6e1d0801445472616e73616374696f6e416374696f6e00011476616c75659503011055323536000114696e70757430011442797465730001247369676e6174757265210801505472616e73616374696f6e5369676e617475726500001d080c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c0400d902011048313630000000184372656174650001000021080c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476250801545472616e73616374696f6e5265636f766572794964000104722c011048323536000104732c011048323536000025080c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f7665727949640000040028010c753634000029080c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f696428010c7536340001146e6f6e636595030110553235360001246761735f707269636595030110553235360001246761735f6c696d69749503011055323536000118616374696f6e1d0801445472616e73616374696f6e416374696f6e00011476616c75659503011055323536000114696e707574300114427974657300012c6163636573735f6c6973742d0801284163636573734c6973740001306f64645f795f706172697479c00110626f6f6c000104722c011048323536000104732c01104832353600002d0800000231080031080c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c61646472657373d902011c4164647265737300013073746f726167655f6b657973c50301245665633c483235363e000035080c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f696428010c7536340001146e6f6e636595030110553235360001606d61785f7072696f726974795f6665655f7065725f676173950301105532353600013c6d61785f6665655f7065725f67617395030110553235360001246761735f6c696d69749503011055323536000118616374696f6e1d0801445472616e73616374696f6e416374696f6e00011476616c75659503011055323536000114696e707574300114427974657300012c6163636573735f6c6973742d0801284163636573734c6973740001306f64645f795f706172697479c00110626f6f6c000104722c011048323536000104732c0110483235360000390804184f7074696f6e04045401940108104e6f6e6500000010536f6d6504009400000100003d080c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909410800000408450818004508101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540149080453000004004d0801185665633c543e00004908083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d62657200004d0800000249080051080c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090955080c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095908101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454015d08045300000400650801185665633c543e00005d0804184f7074696f6e0404540161080108104e6f6e6500000010536f6d650400610800000100006108084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01b5052c426c6f636b4e756d62657201103450616c6c6574734f726967696e017905244163636f756e7449640100001401206d617962655f6964b801304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb505011043616c6c0001386d617962655f706572696f646963990501944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e7905013450616c6c6574734f726967696e000065080000025d080069080c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d08101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400c50301185665633c543e00007108084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e74000110617965738801385665633c4163636f756e7449643e0001106e6179738801385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000075080c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090979080000027d08007d08086470616c6c65745f656c656374696f6e735f70687261676d656e2853656174486f6c64657208244163636f756e74496401001c42616c616e63650118000c010c77686f0001244163636f756e7449640001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e636500008108086470616c6c65745f656c656374696f6e735f70687261676d656e14566f74657208244163636f756e74496401001c42616c616e63650118000c0114766f7465738801385665633c4163636f756e7449643e0001147374616b6518011c42616c616e636500011c6465706f73697418011c42616c616e6365000085080c6470616c6c65745f656c656374696f6e735f70687261676d656e1870616c6c6574144572726f7204045400014430556e61626c65546f566f7465000004c043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e1c4e6f566f746573000104944d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e30546f6f4d616e79566f7465730002048443616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e504d6178696d756d566f74657345786365656465640003049843616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e284c6f7742616c616e6365000404c443616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e3c556e61626c65546f506179426f6e6400050478566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2c4d7573744265566f746572000604404d757374206265206120766f7465722e4c4475706c69636174656443616e646964617465000704804475706c6963617465642063616e646964617465207375626d697373696f6e2e44546f6f4d616e7943616e6469646174657300080498546f6f206d616e792063616e646964617465732068617665206265656e20637265617465642e304d656d6265725375626d6974000904884d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e3852756e6e657255705375626d6974000a048852756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e68496e73756666696369656e7443616e64696461746546756e6473000b049443616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e244e6f744d656d626572000c04344e6f742061206d656d6265722e48496e76616c69645769746e65737344617461000d04e05468652070726f766964656420636f756e74206f66206e756d626572206f662063616e6469646174657320697320696e636f72726563742e40496e76616c6964566f7465436f756e74000e04cc5468652070726f766964656420636f756e74206f66206e756d626572206f6620766f74657320697320696e636f72726563742e44496e76616c696452656e6f756e63696e67000f04fc5468652072656e6f756e63696e67206f726967696e2070726573656e74656420612077726f6e67206052656e6f756e63696e676020706172616d657465722e48496e76616c69645265706c6163656d656e74001004fc50726564696374696f6e20726567617264696e67207265706c6163656d656e74206166746572206d656d6265722072656d6f76616c2069732077726f6e672e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098908101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454018d08045300000400910801185665633c543e00008d080000040c10b505000091080000028d0800950800000408990818009908101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401000453000004008801185665633c543e00009d080c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01b5051c42616c616e6365011801081c4f6e676f696e670400a10801c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564c00110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000a1080c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01b5051c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616cb505012050726f706f73616c0001247468726573686f6c64d40134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79a508013854616c6c793c42616c616e63653e0000a5080c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000a9080c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573ad0801f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73b908015044656c65676174696f6e733c42616c616e63653e0001147072696f72bd08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6ebd050128436f6e76696374696f6e00012c64656c65676174696f6e73b908015044656c65676174696f6e733c42616c616e63653e0001147072696f72bd08017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e00010000ad08101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401b108045300000400b50801185665633c543e0000b1080000040810d800b508000002b10800b9080c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000bd080c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000c10800000408b505d400c5080000040810990800c9080c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f7204045400015c2056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7704b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd080c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e7473004c4d61784164646974696f6e616c4669656c647300000c01286a756467656d656e7473d10801fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666fc50501844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e0000d108101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401d508045300000400d90801185665633c543e0000d50800000408105d0600d908000002d50800dd080000040818e10800e108101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401000453000004008801185665633c543e0000e508101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401e908045300000400f10801185665633c543e0000e90804184f7074696f6e04045401ed080108104e6f6e6500000010536f6d650400ed080000010000ed080c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f081c42616c616e63650118244163636f756e7449640100000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c6473550601384964656e746974794669656c64730000f108000002e90800f5080c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400014848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e34546f6f4d616e794669656c6473000b046c546f6f206d616e79206164646974696f6e616c206669656c64732e44546f6f4d616e7952656769737472617273000c04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000d04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000e047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000f04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479001004d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001104f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f908101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454016506045300000400fd0801185665633c543e0000fd080000026506000109083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000005090c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e0909083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e636500000d09101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540110045300000400350501185665633c543e0000110908346672616d655f737570706f72742050616c6c65744964000004003503011c5b75383b20385d000015090c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e19090c3870616c6c65745f756e697175657314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118002801146f776e65720001244163636f756e7449640001186973737565720001244163636f756e74496400011461646d696e0001244163636f756e74496400011c667265657a65720001244163636f756e744964000134746f74616c5f6465706f7369741801384465706f73697442616c616e6365000130667265655f686f6c64696e67c00110626f6f6c0001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001286174747269627574657310010c75333200012469735f66726f7a656ec00110626f6f6c00001d090000040c0028f00021090000040800280025090c3870616c6c65745f756e69717565731474797065732c4974656d44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e744964000120617070726f766564050101444f7074696f6e3c4163636f756e7449643e00012469735f66726f7a656ec00110626f6f6c00011c6465706f7369741801384465706f73697442616c616e6365000029090c3870616c6c65745f756e697175657314747970657348436f6c6c656374696f6e4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461f4016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656ec00110626f6f6c00002d090c3870616c6c65745f756e6971756573147479706573304974656d4d6574616461746108384465706f73697442616c616e636501182c537472696e674c696d697400000c011c6465706f7369741801384465706f73697442616c616e636500011064617461f4016c426f756e6465645665633c75382c20537472696e674c696d69743e00012469735f66726f7a656ec00110626f6f6c000031090000040c28fcf400350900000408f41800390900000408180501003d090c3870616c6c65745f756e69717565731870616c6c6574144572726f72080454000449000148304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e2857726f6e674f776e6572000304e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730004046c496e76616c6964207769746e657373206461746120676976656e2e14496e55736500050474546865206974656d20494420697320616c72656164792074616b656e2e1846726f7a656e00060484546865206974656d206f7220636f6c6c656374696f6e2069732066726f7a656e2e3457726f6e6744656c6567617465000704f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284e6f44656c6567617465000804785468657265206973206e6f2064656c656761746520617070726f7665642e28556e617070726f766564000904c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000a042501546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e657273686970206f662074686520636f6c6c656374696f6e2069732061636365707461626c652e184c6f636b6564000b044c546865206974656d206973206c6f636b65642e404d6178537570706c7952656163686564000c046c416c6c206974656d732068617665206265656e206d696e7465642e4c4d6178537570706c79416c7265616479536574000d0490546865206d617820737570706c792068617320616c7265616479206265656e207365742e444d6178537570706c79546f6f536d616c6c000e0441015468652070726f7669646564206d617820737570706c79206973206c65737320746f2074686520616d6f756e74206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d000f047454686520676976656e206974656d20494420697320756e6b6e6f776e2e284e6f74466f7253616c65001004544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001104705468652070726f76696465642062696420697320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094109083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974cc0150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974450901704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656e5d02012c4f7074696f6e3c7533323e00010000450904184f7074696f6e04045401cc0108104e6f6e6500000010536f6d650400cc00000100004909000004082c10004d09101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000051090c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095509083870616c6c65745f616e63686f727334507265436f6d6d697444617461101048617368012c244163636f756e74496401002c426c6f636b4e756d62657201101c42616c616e63650118001001307369676e696e675f726f6f742c0110486173680001206964656e746974790001244163636f756e74496400014065787069726174696f6e5f626c6f636b10012c426c6f636b4e756d62657200011c6465706f73697418011c42616c616e636500005909101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005d090c3870616c6c65745f616e63686f72731870616c6c6574144572726f720404540001204c416e63686f72416c726561647945786973747300000490416e63686f72207769746820616e63686f725f696420616c72656164792065786973747354416e63686f7253746f726544617465496e50617374000104a8416e63686f722073746f72652064617465206d75737420626520696e206e6f77206f722066757475726570416e63686f7253746f72654461746541626f76654d61784c696d6974000204d8416e63686f722073746f72652064617465206d757374206e6f74206265206d6f7265207468616e206d61782073746f7265206461746558507265436f6d6d6974416c7265616479457869737473000304645072652d636f6d6d697420616c7265616479206578697374734c4e6f744f776e65724f66507265436f6d6d69740004049453656e646572206973206e6f7420746865206f776e6572206f662070726520636f6d6d697454496e76616c6964507265436f6d6d697450726f6f6600050460496e76616c69642070726520636f6d6d69742070726f6f66484576696374696f6e44617465546f6f426967000604904576696374696f6e206461746520746f6f2062696720666f7220636f6e76657273696f6e684661696c6564546f436f6e7665727445706f6368546f44617973000704944661696c656420746f20636f6e766572742065706f636820696e204d5320746f206461797304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090961090c3470616c6c65745f636c61696d731870616c6c6574144572726f720404540001104c496e73756666696369656e7442616c616e6365000004f8416d6f756e74206265696e6720636c61696d6564206973206c657373207468616e2074686520617661696c61626c6520616d6f756e742073746f7265642e34496e76616c696450726f6f66730001080d0154686520636f6d62696e6174696f6e206f66206163636f756e742069642c20616d6f756e742c20616e642070726f6f667320766563746f7220696e206120636c61696d3077617320696e76616c69642e2c4d757374426541646d696e000204bc50726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792061646d696e38556e6465724d696e5061796f75740003080d01546865207061796f757420616d6f756e7420617474656d7074696e6720746f20626520636c61696d6564206973206c657373207468616e20746865206d696e696d756dac616c6c6f776564206279205b60436f6e6669673a3a4d696e696d616c5061796f7574416d6f756e74605d2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090965090000040800100069090c5870616c6c65745f63726f77646c6f616e5f636c61696d1870616c6c6574144572726f720404540001286050616c6c6574416c7265616479496e697469616c697a65640000047c43616e6e6f742072652d696e697469616c697a65207468652070616c6c65745050616c6c65744e6f74496e697469616c697a6564000104bc43616e6e6f742063616c6c20726577617264206265666f72652070616c6c657420697320696e697469616c697a656454436c61696d416c726561647950726f636573736564000204e8436c61696d2068617320616c7265616479206265656e2070726f63657373656420287265706c61792061747461636b2c2070726f6261626c792968496e76616c696450726f6f664f66436f6e747269627574696f6e000304985468652070726f6f66206f66206120636f6e747269627574696f6e20697320696e76616c696478436c61696d6564416d6f756e7449734f75744f66426f756e646172696573000404e4436c61696d656420616d6f756e74206973206f7574206f6620626f756e6461726965732028746f6f206c6f77206f7220746f6f2068696768294c4d757374426541646d696e6973747261746f72000508110153656e736974697665207472616e73616374696f6e732063616e206f6e6c7920626520706572666f726d65642062792061646d696e6973747261746f7220656e746974797c28652e672e205375646f206f722044656d6f63726163792070616c6c65742948496e76616c6964436c61696d416d6f756e740006080d015468652072657761726420616d6f756e74207468617420697320636c61696d656420646f6573206e6f7420636f72726573706f6e6420746f20746865206f6e65206f664074686520636f6e747269627574696f6e6c496e76616c6964436f6e7472696275746f725369676e61747572650007180501546865207369676e61747572652070726f76696465642062792074686520636f6e7472696275746f72207768656e207265676973746572696e67206973206e6f741876616c69642e000d0154686520636f6e73657175656e63652069732074686174207468652072656c6179636861696e20616e642070617261636861696e206163636f756e7473206265696e67f46e6f74206173736f6369617465642c2074686520636f6e7472696275746f72206973206e6f7420656c6c696769626c6520666f722061207265776172641c7061796f75742e304f6e676f696e674c65617365000808010141206c65617365206973206f6e676f67696e6720616e64207468652070616c6c65742063616e2068656e636564206e6f7420626520696e697469616c697a656414616761696e404f75744f664c65617365506572696f64000904c0436c61696d696e672072657761726473206973206f6e6c7920706f737369626c6520647572696e672061206c6561736504b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d090c5c70616c6c65745f63726f77646c6f616e5f7265776172641870616c6c6574144572726f7204045400010c4c4d757374426541646d696e6973747261746f72000004b0496e76616c69642063616c6c20746f20616e2061646d696e6973747261746976652065787472696e7369637348526577617264496e73756666696369656e74000104ac546865207265776172642069732062656c6f7720746865206578697374656e7469616c206465706f7369745050616c6c65744e6f74496e697469616c697a65640002048050616c6c6574206d75737420626520696e697469616c697a656420666972737404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090971090c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f74797065732c506f6f6c44657461696c73242843757272656e637949640169013c5472616e63686543757272656e63790175011c45706f6368496401101c42616c616e63650118105261746501790118576569676874017509245472616e6368654964016d0118506f6f6c496401282c4d61785472616e63686573012d010018012063757272656e63796901012843757272656e637949640001207472616e6368657379090141015472616e636865733c42616c616e63652c20526174652c205765696768742c205472616e63686543757272656e63792c205472616e63686549642c20506f6f6c49642c0a4d61785472616e636865733e000128706172616d657465727395090138506f6f6c506172616d657465727300011873746174757399090128506f6f6c53746174757300011465706f63689d09014c45706f636853746174653c45706f636849643e00011c72657365727665a109015c5265736572766544657461696c733c42616c616e63653e000075090c386366675f7072696d697469766573147479706573345472616e6368655765696768740000040018011075313238000079090c4870616c6c65745f706f6f6c5f73797374656d207472616e63686573205472616e636865731c1c42616c616e636501181052617465017901185765696768740175093c5472616e63686543757272656e6379017501245472616e6368654964016d0118506f6f6c496401282c4d61785472616e63686573012d01000c01207472616e636865737d09012101426f756e6465645665633c5472616e6368653c42616c616e63652c20526174652c205765696768742c205472616e63686543757272656e63793e2c204d61785472616e636865733e00010c69647389090188426f756e6465645665633c5472616e63686549642c204d61785472616e636865733e00011073616c749109014c5472616e63686553616c743c506f6f6c49643e00007d09101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454018109045300000400850901185665633c543e000081090c4870616c6c65745f706f6f6c5f73797374656d207472616e636865731c5472616e636865101c42616c616e636501181052617465017901185765696768740175092843757272656e63794964017501002001307472616e6368655f747970658d0101445472616e636865547970653c526174653e00012473656e696f7269747910012453656e696f7269747900012063757272656e63797501012843757272656e637949640001106465627418011c42616c616e636500011c7265736572766518011c42616c616e63650001106c6f737318011c42616c616e6365000114726174696f3d01012c5065727175696e74696c6c0001546c6173745f757064617465645f696e7465726573742801184d6f6d656e74000085090000028109008909101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454016d010453000004008d0901185665633c543e00008d090000026d010091090000040828280095090c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f747970657338506f6f6c506172616d657465727300000801386d696e5f65706f63685f74696d652801184d6f6d656e7400012c6d61785f6e61765f6167652801184d6f6d656e74000099090c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f747970657328506f6f6c537461747573000104104f70656e000000009d090c246366675f74797065731465706f63682845706f63685374617465041c45706f636849640110000c011c63757272656e7410011c45706f6368496400012c6c6173745f636c6f7365642801184d6f6d656e740001346c6173745f657865637574656410011c45706f636849640000a1090c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f7479706573385265736572766544657461696c73041c42616c616e63650118000c010c6d617818011c42616c616e6365000114746f74616c18011c42616c616e6365000124617661696c61626c6518011c42616c616e63650000a5090c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f7479706573585363686564756c656455706461746544657461696c73101052617465017901484d6178546f6b656e4e616d654c656e677468017d01504d6178546f6b656e53796d626f6c4c656e6774680181012c4d61785472616e63686573012d010008011c6368616e6765730507012101506f6f6c4368616e6765733c526174652c204d6178546f6b656e4e616d654c656e6774682c204d6178546f6b656e53796d626f6c4c656e6774682c204d61785472616e636865733e0001307375626d69747465645f61742801184d6f6d656e740000a9090c4870616c6c65745f706f6f6c5f73797374656d20736f6c7574696f6e4845706f6368457865637574696f6e496e666f1c1c42616c616e636501183042616c616e6365526174696f0179011c45706f636849640110185765696768740175092c426c6f636b4e756d62657201103c5472616e63686543757272656e63790175012c4d61785472616e63686573012d01001c011465706f636810011c45706f6368496400010c6e617618011c42616c616e636500011c7265736572766518011c42616c616e636500012c6d61785f7265736572766518011c42616c616e63650001207472616e63686573ad09014d0145706f6368457865637574696f6e5472616e636865733c42616c616e63652c2042616c616e6365526174696f2c205765696768742c205472616e63686543757272656e63792c0a4d61785472616e636865733e00013c626573745f7375626d697373696f6ebd0901ac4f7074696f6e3c45706f6368536f6c7574696f6e3c42616c616e63652c204d61785472616e636865733e3e0001506368616c6c656e67655f706572696f645f656e645d02014c4f7074696f6e3c426c6f636b4e756d6265723e0000ad090c4870616c6c65745f706f6f6c5f73797374656d207472616e636865735845706f6368457865637574696f6e5472616e63686573141c42616c616e636501183042616c616e6365526174696f017901185765696768740175093c5472616e63686543757272656e63790175012c4d61785472616e63686573012d01000401207472616e63686573b109017d01426f756e6465645665633c45706f6368457865637574696f6e5472616e6368653c42616c616e63652c2042616c616e6365526174696f2c205765696768742c0a5472616e63686543757272656e63793e2c204d61785472616e636865732c3e0000b109101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401b509045300000400b90901185665633c543e0000b5090c4870616c6c65745f706f6f6c5f73797374656d207472616e636865735445706f6368457865637574696f6e5472616e636865101c42616c616e636501183042616c616e6365526174696f017901185765696768740175093c5472616e63686543757272656e6379017501001c012063757272656e63797501013c5472616e63686543757272656e6379000118737570706c7918011c42616c616e636500011470726963657901013042616c616e6365526174696f000118696e7665737418011c42616c616e636500011872656465656d18011c42616c616e636500013c6d696e5f7269736b5f6275666665723d01012c5065727175696e74696c6c00012473656e696f7269747910012453656e696f726974790000b909000002b50900bd0904184f7074696f6e0404540129010108104e6f6e6500000010536f6d65040029010000010000c1090c4870616c6c65745f706f6f6c5f73797374656d28706f6f6c5f74797065733c506f6f6c4465706f736974496e666f08244163636f756e74496401001c42616c616e63650118000801246465706f7369746f720001244163636f756e74496400011c6465706f73697418011c42616c616e63650000c509084870616c6c65745f706f6f6c5f73797374656d1c52656c6561736500010808563000000008563100010000c9090c4870616c6c65745f706f6f6c5f73797374656d1870616c6c6574144572726f7204045400018424506f6f6c496e557365000004944120706f6f6c2077697468207468697320494420697320616c726561647920696e2075736550496e76616c69644a756e696f725472616e636865000104cc417474656d7074656420746f20637265617465206120706f6f6c20776974686f75742061206a756e696f72207472616e6368655c496e76616c69645472616e636865537472756374757265000208b4417474656d7074656420746f206372656174652061207472616e63686520737472756374757265207768657265a82a206e6f6e2d64656372656173696e6720696e746572657374207261746520706572207472616e636865284e6f53756368506f6f6c000304d4417474656d7074656420616e206f7065726174696f6e206f6e206120706f6f6c20776869636820646f6573206e6f74206578697374604d696e45706f636854696d654861734e6f7450617373656400040494417474656d7074656420746f20636c6f736520616e2065706f636820746f6f206561726c79644368616c6c656e676554696d654861734e6f745061737365640005049c417474656d7074656420746f206578656375746520616e2065706f636820746f6f206561726c7948496e5375626d697373696f6e506572696f64000604e443616e6e6f742062652063616c6c6564207768696c652074686520706f6f6c20697320696e2061207375626d697373696f6e20706572696f64244e4156546f6f4f6c64000704cc417474656d7074656420746f20636c6f736520616e2065706f6368207769746820616e206f7574206f662064617465204e4156245472616e6368654964000804b841205472616e6368652049442063616e6e6f7420626520636f6e76657274656420746f20616e20616464726573732057697065644f7574000904dc436c6f73696e67207468652065706f6368206e6f7720776f756c642077697065206f757420746865206a756e696f72207472616e6368653c496e76616c6964536f6c7574696f6e000a04a05468652070726f766964656420736f6c7574696f6e206973206e6f7420612076616c6964206f6e65544e6f74496e5375626d697373696f6e506572696f64000b04f4417474656d7074656420746f20736f6c7665206120706f6f6c207768696368206973206e6f7420696e2061207375626d697373696f6e20706572696f6450496e73756666696369656e7443757272656e6379000c04d4496e73756666696369656e742063757272656e637920617661696c61626c6520666f722064657369726564206f7065726174696f6e485269736b42756666657256696f6c61746564000d04745269736b204275666665722076616c69646174696f6e206661696c6564144e6f4e4156000e0464546865204e415620776173206e6f7420617661696c61626c654c45706f63684e6f744578656375746564596574000f04c445706f6368206e6565647320746f206265206578656375746564206265666f726520796f752063616e20636f6c6c6563746443616e6e6f744164644f7252656d6f76655472616e63686573001004ac416464696e6720262072656d6f76696e67207472616e63686573206973206e6f7420737570706f727465645c496e76616c69645472616e63686553656e696f7269747900110c7c496e76616c6964207472616e6368652073656e696f726974792076616c7565b82a2073656e696f72697479204d55535420626520736d616c6c6572206e756d626572206f66207472616e63686573802a204d55535420626520696e6372656173696e6720706572207472616e63686550496e76616c69645472616e636865557064617465001208c05072652d726571756972656d656e747320666f722061205472616e63686555706461746520617265206e6f74206d6574fc666f72206578616d706c653a205472616e636865206368616e67656420627574206e6f7420697473206d65746164617461206f7220766963652076657273616c4d65746164617461466f7243757272656e63794e6f74466f756e64001304984e6f206d657461646120666f722074686520676976656e2063757272656e637920666f756e645c5472616e636865546f6b656e4e616d65546f6f4c6f6e67001404d454686520676976656e207472616e63686520746f6b656e206e616d65206578636565647320746865206c656e677468206c696d6974605472616e63686553796d626f6c4e616d65546f6f4c6f6e67001504d854686520676976656e207472616e6368652073796d626f6c206e616d65206578636565647320746865206c656e677468206c696d69747c4661696c6564546f52656769737465725472616e6368654d65746164617461001604d45265676973746572696e6720746865206d6574616461746120666f722061207472616e63686520746872657720616e206572726f72744661696c6564546f5570646174655472616e6368654d65746164617461001704c85570646174696e6720746865206d6574616461746120666f722061207472616e63686520746872657720616e206572726f7240496e76616c69645472616e6368654964001804e8496e76616c6964205472616e6368654964207061737365642e20496e206d6f7374206361736573206f75742d6f662d626f756e6420696e6465783c546f6f4d616e795472616e63686573001904e454686520726571756573746564207472616e63686520636f6e66696775726174696f6e2068617320746f6f206d616e79207472616e63686573504e6f744e6577426573745375626d697373696f6e001a04a05375626d697474656420736f6c7574696f6e206973206e6f7420616e20696d70726f76656d656e744c4e6f536f6c7574696f6e417661696c61626c65001b04bc4e6f20736f6c7574696f6e2068617320796574206265656e2070726f766964656420666f72207468652065706f636868506f6f6c506172616d65746572426f756e6456696f6c61746564001c04ec4f6e65206f66207468652072756e74696d652d6c6576656c20706f6f6c20706172616d6574657220626f756e6473207761732076696f6c61746564444e6f5363686564756c6564557064617465001d048c4e6f2075706461746520666f722074686520706f6f6c206973207363686564756c6564645363686564756c656454696d654861734e6f74506173736564001e04bc5363686564756c65642074696d6520666f7220746869732075706461746520697320696e20746865206675747572657c557064617465507265726571756573697465734e6f7446756c66696c6c6564001f04785570646174652063616e6e6f742062652066756c66696c6c6564207965743c496e76616c696443757272656e6379002004e84120757365722068617320747269656420746f20637265617465206120706f6f6c207769746820616e20696e76616c69642063757272656e637904b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd090c4070616c6c65745f6c6f616e735f7265661474797065732c437265617465644c6f616e0404540000080110696e666fa10101a44c6f616e496e666f3c41737365744f663c543e2c20543a3a42616c616e63652c20543a3a526174653e000120626f72726f776572000130543a3a4163636f756e7449640000d109101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401d509045300000400dd0901185665633c543e0000d50900000408d9092800d9090c4070616c6c65745f6c6f616e735f726566147479706573284163746976654c6f616e040454000020011c6c6f616e5f6964280124543a3a4c6f616e4964000110696e666fa10101344c6f616e496e666f4f663c543e000120626f72726f776572000130543a3a4163636f756e74496400014077726974655f6f66665f737461747573d101015c57726974654f66665374617475733c543a3a526174653e0001406f726967696e6174696f6e5f646174652801184d6f6d656e7400013c6e6f726d616c697a65645f64656274180128543a3a42616c616e6365000138746f74616c5f626f72726f776564180128543a3a42616c616e6365000130746f74616c5f726570616964180128543a3a42616c616e63650000dd09000002d50900e1090c4070616c6c65745f6c6f616e735f72656614747970657328436c6f7365644c6f616e0404540000100124636c6f7365645f6174100138543a3a426c6f636b4e756d626572000110696e666fa10101a44c6f616e496e666f3c41737365744f663c543e2c20543a3a42616c616e63652c20543a3a526174653e000138746f74616c5f626f72726f776564180128543a3a42616c616e6365000130746f74616c5f726570616964180128543a3a42616c616e63650000e5090c4070616c6c65745f6c6f616e735f72656614747970657348506f7274666f6c696f56616c756174696f6e041c42616c616e636501180008011476616c756518011c42616c616e63650001306c6173745f757064617465642801184d6f6d656e740000e9090c4070616c6c65745f6c6f616e735f7265661870616c6c6574144572726f7204045400013030506f6f6c4e6f74466f756e6400000474456d697473207768656e20706f6f6c20646f65736e2774206578697374304c6f616e4e6f74466f756e6400010474456d697473207768656e206c6f616e20646f65736e2774206578697374344c6f616e4e6f74416374697665000204ac456d697473207768656e2061206c6f616e206578697374206275742069742773206e6f74206163746976654c4e6f56616c696457726974654f666652756c650003080d01456d697473207768656e20612077726974652d6f66662072756c65206973206e6f7420666f756e6420696e206120706f6c69637920666f72206120737065636966696311016c6f616e2e2049742068617070656e73207768656e207468657265206973206e6f20706f6c696379206f7220746865206c6f616e206973206e6f74206f7665726475652e404e46544f776e65724e6f74466f756e6400040494456d697473207768656e20746865204e4654206f776e6572206973206e6f7420666f756e642c4e6f744e46544f776e6572000504d4456d697473207768656e204e4654206f776e657220646f65736e2774206d6174636820746865206578706563746564206f776e65723c4e6f744c6f616e426f72726f7765720006040101456d697473207768656e20746865206170706c6963616e74206163636f756e74206973206e6f742074686520626f72726f776572206f6620746865206c6f616e544d61784163746976654c6f616e7352656163686564000704d4456d697473207768656e20746865206d6178206e756d626572206f6620616374697665206c6f616e732077617320726561636865643c4372656174654c6f616e4572726f720400ed09013c4372656174654c6f616e4572726f720008040d01456d697473207768656e20746865206c6f616e20697320696e636f72726563746c792073706563696669656420616e642063616e206e6f7420626520637265617465643c426f72726f774c6f616e4572726f720400f109013c426f72726f774c6f616e4572726f72000904b0456d697473207768656e20746865206c6f616e2063616e206e6f7420626520626f72726f7765642066726f6d3c5772697474656e4f66664572726f720400f509013c5772697474656e4f66664572726f72000a04a8456d697473207768656e20746865206c6f616e2063616e206e6f74206265207772697474656e206f666638436c6f73654c6f616e4572726f720400f9090138436c6f73654c6f616e4572726f72000b0494456d697473207768656e20746865206c6f616e2063616e206e6f7420626520636c6f73656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ed090c4070616c6c65745f6c6f616e735f7265661474797065733c4372656174654c6f616e4572726f7200010858496e76616c696456616c756174696f6e4d6574686f6400000060496e76616c696452657061796d656e745363686564756c6500010000f1090c4070616c6c65745f6c6f616e735f7265661474797065733c426f72726f774c6f616e4572726f7200010c444d6178416d6f756e744578636565646564000000545772697474656e4f66665265737472696374696f6e000100484d617475726974794461746550617373656400020000f5090c4070616c6c65745f6c6f616e735f7265661474797065733c5772697474656e4f66664572726f72000104384c6573735468616e506f6c69637900000000f9090c4070616c6c65745f6c6f616e735f72656614747970657338436c6f73654c6f616e4572726f72000104384e6f7446756c6c7952657061696400000000fd090000040800fd0100010a0c246366675f74797065732c7065726d697373696f6e733c5065726d697373696f6e526f6c6573140c4e6f77019c204d696e44656c617901050a245472616e6368654964016d012c4d61785472616e63686573012d01184d6f6d656e74012800100128706f6f6c5f61646d696e090a0138506f6f6c41646d696e526f6c657300013863757272656e63795f61646d696e0d0a014843757272656e637941646d696e526f6c65730001647065726d697373696f6e65645f61737365745f686f6c646572110a01c85065726d697373696f6e656443757272656e6379486f6c646572733c4e6f772c204d696e44656c61792c204d6f6d656e743e0001407472616e6368655f696e766573746f721d0a01fc5472616e636865496e766573746f72733c4e6f772c204d696e44656c61792c205472616e63686549642c204d6f6d656e742c204d61785472616e636865733e0000050a084c646576656c6f706d656e745f72756e74696d65204d696e44656c617900000000090a0c246366675f74797065732c7065726d697373696f6e7338506f6f6c41646d696e526f6c657300000401106269747310010c75333200000d0a0c246366675f74797065732c7065726d697373696f6e734843757272656e637941646d696e526f6c657300000401106269747310010c7533320000110a0c246366675f74797065732c7065726d697373696f6e736c5065726d697373696f6e656443757272656e6379486f6c646572730c0c4e6f77019c204d696e44656c617901050a184d6f6d656e74012800040110696e666f150a01b84f7074696f6e3c5065726d697373696f6e656443757272656e6379486f6c646572496e666f3c4d6f6d656e743e3e0000150a04184f7074696f6e04045401190a0108104e6f6e6500000010536f6d650400190a0000010000190a0c246366675f74797065732c7065726d697373696f6e73785065726d697373696f6e656443757272656e6379486f6c646572496e666f04184d6f6d656e740128000401447065726d697373696f6e65645f74696c6c2801184d6f6d656e7400001d0a0c246366675f74797065732c7065726d697373696f6e73405472616e636865496e766573746f7273140c4e6f77019c204d696e44656c617901050a245472616e6368654964016d01184d6f6d656e7401282c4d61785472616e63686573012d0100040110696e666f210a01fc426f756e6465645665633c5472616e636865496e766573746f72496e666f3c5472616e63686549642c204d6f6d656e743e2c204d61785472616e636865733e0000210a101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401250a045300000400290a01185665633c543e0000250a0c246366675f74797065732c7065726d697373696f6e734c5472616e636865496e766573746f72496e666f08245472616e6368654964016d01184d6f6d656e740128000801287472616e6368655f69646d0101245472616e63686549640001447065726d697373696f6e65645f74696c6c2801184d6f6d656e740000290a000002250a002d0a0c4870616c6c65745f7065726d697373696f6e731870616c6c6574144572726f7204045400011840526f6c65416c7265616479476976656e00000030526f6c654e6f74476976656e0001001c4e6f526f6c6573000200204e6f456469746f720003003c57726f6e67506172616d657465727300040030546f6f4d616e79526f6c657300050004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909310a0c6470616c6c65745f636f6c6c61746f725f616c6c6f776c6973741870616c6c6574144572726f7204045400010c58436f6c6c61746f72416c7265616479416c6c6f776564000004d454686520636f6c6c61746f722068617320616c7265616479206265656e20616464656420746f2074686520616c6c6f776c6973742e40436f6c6c61746f724e6f745265616479000108e454686520636f6c6c61746f72206973206e6f742072656164792079657420666f6c6c6f77696e6720746f2074686520756e6465726c79696e676860543a3a56616c696461746f72526567697374726174696f6e6048436f6c6c61746f724e6f7450726573656e74000204cc5468652070726f766964656420636f6c6c61746f7220776173206e6f7420666f756e6420696e207468652073746f726167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909350a0c6070616c6c65745f726573747269637465645f746f6b656e731870616c6c6574144572726f720404540001044c507265436f6e646974696f6e734e6f744d657400000004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909390a0c4070616c6c65745f6e66745f73616c65731870616c6c6574144572726f72040454000114204e6f74466f756e64000008d441207573657220747269656420746f2061646420616e204e4654207468617420636f756c64206e6f7420626520666f756e6420696e605b60436f6e6669673a3a4e6f6e46756e6769626c6573605d204e6f744f776e657200010494546865206f726967696e206973206e6f7420746865206f776e6572206f6620616e204e465438416c7265616479466f7253616c65000204f4412073656c6c65722068617320617474656d7074656420746f2061646420616e204e4654207468617420697320616c726561647920666f722073616c65284e6f74466f7253616c65000304e8416e206f7065726174696f6e20657870656374656420616e204e465420746f20626520666f722073616c65207768656e206974206973206e6f7430496e76616c69644f666665720004080d01412062757965722773206d6178206f6666657220697320696e76616c69642c20692e652e2c20656974686572207468652063757272656e6379206f7220616d6f756e74ec646964206e6f74206d6174636820746865206c61746573742061736b696e6720707269636520666f7220746865207461726765746564204e46542e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093d0a0c3470616c6c65745f6272696467651870616c6c6574144572726f720404540001043c496e76616c69645472616e7366657200000440496e76616c6964207472616e7366657204b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909410a101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401450a045300000400490a01185665633c543e0000450a085c70616c6c65745f696e7465726573745f6163637275616c2c5261746544657461696c730430496e74657265737452617465017901000c0154696e7465726573745f726174655f7065725f73656379010130496e74657265737452617465000140616363756d756c617465645f7261746579010130496e7465726573745261746500013c7265666572656e63655f636f756e7410010c7533320000490a000002450a004d0a085c70616c6c65745f696e7465726573745f6163637275616c1c52656c6561736500010c08563000000008563100010008563200020000510a0c5c70616c6c65745f696e7465726573745f6163637275616c1870616c6c6574144572726f72040454000114544465627443616c63756c6174696f6e4661696c656400000498456d697473207768656e2074686520646562742063616c63756c6174696f6e206661696c6564504465627441646a7573746d656e744661696c656400010494456d697473207768656e2074686520646562742061646a7573746d656e74206661696c6564284e6f5375636852617465000204a4456d697473207768656e2074686520696e746572657374207261746520776173206e6f7420757365642c496e76616c696452617465000304bc456d697473207768656e20612072617465206973206e6f742077697468696e207468652076616c69642072616e676530546f6f4d616e795261746573000404f0456d697473207768656e20616464696e672061206e6577207261746520776f756c6420657863656564207468652073746f72616765206c696d69747304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909550a0c2870616c6c65745f6e66741870616c6c6574144572726f7204045400010834496e76616c696450726f6f6673000008ec556e61626c6520746f2072656372656174652074686520616e63686f7220686173682066726f6d207468652070726f6f667320616e6420646174612470726f76696465642e4c446f63756d656e744e6f74416e63686f72656400010809014120676976656e20646f63756d656e7420696420646f6573206e6f74206d61746368206120636f72726573706f6e64696e6720646f63756d656e7420696e207468653c616e63686f722073746f726167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909590a00000408005d0a005d0a000004082c310200610a083c70616c6c65745f6b657973746f72650c4b6579082c426c6f636b4e756d62657201101c42616c616e636501180010011c707572706f7365310201284b6579507572706f73650001206b65795f747970653502011c4b6579547970650001287265766f6b65645f61745d02014c4f7074696f6e3c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650000650a0000040800310200690a0c3c70616c6c65745f6b657973746f72651870616c6c6574144572726f72040454000114184e6f4b657973000004584e6f206b65797320776572652070726f76696465642e2c546f6f4d616e794b657973000104a04d6f7265207468616e20543a3a4d61784b657973206b65797320776572652070726f76696465642e404b6579416c72656164794578697374730002045c546865206b657920616c7265616479206578697374732e2c4b65794e6f74466f756e6400030484546865206b657920776173206e6f7420666f756e6420696e2073746f726167652e444b6579416c72656164795265766f6b656400040470546865206b65792077617320616c7265616479207265766f6b65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d0a0000040800750100710a0c246366675f7479706573186f7264657273144f72646572081c42616c616e636501181c4f726465724964012800080118616d6f756e7418011c42616c616e63650001307375626d69747465645f617428011c4f7264657249640000750a0000040875012800790a0c4870616c6c65745f696e766573746d656e74731870616c6c6574144572726f720404540001283c4f726465724e6f74436c6561726564000008fc546865206f7264657220686173206e6f74206265656e206d61726b656420617320636c65617265642e20497427732065697468657220616374697665206f7234696e2070726f63657373696e67404f726465725374696c6c41637469766500010ce4546865206f726465722061207573657220747269656420746f20636f6c6c65637420666f72206973207374696c6c2061637469766520616e64e06e6565647320746f2062652070757420696e2070726f63657373696e6720616e64207468656e20626520636c6561726564206265666f7265546120636f6c6c65637420697320706f737369626c6544556e6b6e6f776e496e766573746d656e74000204b849766573746d656e744d616e6167657220646f6573206e6f74206e6f7720676976656e20696e766573746d656e743c436f6c6c6563745265717569726564000308bc54686520757365722068617320746f206d616e7920756e636f6c6c6563746564206f72646572732e204265666f7265d87375626d697474696e67206e6577206f72646572732c206120636f6c6c656374206f662074686f73652069732072657175697265642e505a65726f507269636564496e766573746d656e74000408e0412066756c66696c6c6d656e742068617070656e6564207769746820616e20696e766573746d656e74207072696365206f66207a65726f2e6c546865206f726465722077696c6c20626520646973636172646564504f726465724e6f74496e50726f63657373696e67000504d84f72646572206973207374696c6c2061637469766520616e642063616e206e6f742062652070726f6365737365642066757274686572444f72646572496e50726f63657373696e67000608d04f72646572206973206e6f742079657420636c656172656420616e64206d7573742062652070726f6365737365642066697273749c6265666f72652072657175657374696e67206e6577206f726465727320697320616c6c6f776564284e6f4e65774f726465720007048c557064617465206f66206f7264657220776173206e6f742061206e6577206f726465724c4e6f416374697665496e766573744f72646572000804f855736572206861732063757272656e746c79206e6f20696e76657374206f72646572732061637469766520616e642063616e206e6f7420636f6c6c6563744c4e6f41637469766552656465656d4f72646572000904f855736572206861732063757272656e746c79206e6f2072656465656d206f72646572732061637469766520616e642063616e206e6f7420636f6c6c65637404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909097d0a000004085902690100810a000004085d02850a00850a103870616c6c65745f72657761726473246d656368616e69736d10626173652043757272656e63790c1c42616c616e63650118105261746501890a304d61784d6f76656d656e747301910a0008012c746f74616c5f7374616b6518011c42616c616e636500012c7270745f6368616e676573950a0178426f756e6465645665633c526174652c204d61784d6f76656d656e74733e0000890a0c3473705f61726974686d657469632c66697865645f706f696e7424466978656449313238000004008d0a01106931323800008d0a0000050d00910a084c646576656c6f706d656e745f72756e74696d65504d617843757272656e63794d6f76656d656e747300000000950a101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401890a045300000400990a01185665633c543e0000990a000002890a009d0a103870616c6c65745f72657761726473246d656368616e69736d10626173651447726f7570081c42616c616e63650118105261746501890a0008012c746f74616c5f7374616b6518011c42616c616e636500010c727074890a0110526174650000a10a00000408007d0a00a50a103870616c6c65745f72657761726473246d656368616e69736d10626173651c4163636f756e74081c42616c616e63650118204942616c616e6365018d0a000c01147374616b6518011c42616c616e63650001307265776172645f74616c6c798d0a01204942616c616e63650001586c6173745f63757272656e63795f6d6f76656d656e74a8010c7531360000a90a0c3870616c6c65745f726577617264731870616c6c6574144572726f7208045400044900010c5043757272656e6379576974686f757447726f75700000004c43757272656e6379496e53616d6547726f75700001006c43757272656e63794d61784d6f76656d656e74735265616368656400020004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad0a086070616c6c65745f6c69717569646974795f726577617264732445706f63684461746104045400000c01206475726174696f6e100138543a3a426c6f636b4e756d626572000118726577617264180128543a3a42616c616e636500011c77656967687473b10a01d0426f756e64656442547265654d61703c543a3a47726f757049642c20543a3a5765696768742c20543a3a4d617847726f7570733e0000b10a101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601280453000004006d02013842547265654d61703c4b2c20563e0000b50a0c6070616c6c65745f6c69717569646974795f726577617264731870616c6c6574144572726f72040454000104644d61784368616e67657350657245706f63685265616368656400000811014c696d6974206f66206d61782063616c6c7320776974682073616d6520696420746f205b6050616c6c65743a3a7365745f67726f75705f7765696768742829605d206f72a45b6050616c6c65743a3a7365745f63757272656e63795f67726f75702829605d20726561636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b90a0c4470616c6c65745f636f6e6e6563746f72731870616c6c6574144572726f720404540001303441737365744e6f74466f756e6400000801014661696c656420746f206d61702074686520617373657420746f2074686520636f72726573706f6e64696e6720436f6e6e6563746f7227732047656e6572616c50496e64657820726570726573656e746174696f6e30506f6f6c4e6f74466f756e64000104644120706f6f6c20636f756c64206e6f7420626520666f756e643c5472616e6368654e6f74466f756e640002047041207472616e63686520636f756c64206e6f7420626520666f756e645c5472616e6368654d657461646174614e6f74466f756e64000304b8436f756c64206e6f742066696e6420746865206d65746164617461206f662061207472616e63686520746f6b656e4c4d697373696e675472616e636865507269636500040c984661696c656420746f2066657463682061207472616e63686520746f6b656e2070726963652ed4546869732063616e206f6363757220696620605472616e6368654e6f74466f756e6460206f72206966206566666563746976656c79c074686520707269636520666f722074686973207472616e63686520686173206e6f7420796574206265656e207365742e344d697373696e67526f7574657200050484526f75746572206e6f742073657420666f72206120676976656e20646f6d61696e54496e76616c69645472616e73666572416d6f756e74000604805472616e7366657220616d6f756e74206d757374206265206e6f6e2d7a65726f50556e617574686f72697a65645472616e73666572000704e441207472616e7366657220746f2061206e6f6e2d77686974656c69737465642064657374696e6174696f6e2077617320617474656d70746564704661696c6564546f4275696c64457468657265756d58636d43616c6c000804844661696c656420746f206275696c6420457468657265756d5f58636d2063616c6c70496e76616c6964496e636f6d696e674d6573736167654f726967696e000904e8546865206f726967696e206f6620616e20696e636f6d696e67206d657373616765206973206e6f7420696e2074686520616c6c6f772d6c69737458496e76616c6964496e636f6d696e674d657373616765000a04904661696c656420746f206465636f646520616e20696e636f6d696e67206d65737361676554496e76616c69645472616e73666572446f6d61696e000b04d441207472616e7366657220617474656d70742066726f6d20746865206c6f63616c20746f20746865206c6f63616c20646f6d61696e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909bd0a085070616c6c65745f706f6f6c5f726567697374727930506f6f6c4d6574616461746104204d65746153697a6501c10a000401206d65746164617461e1020160426f756e6465645665633c75382c204d65746153697a653e0000c10a084c646576656c6f706d656e745f72756e74696d653c4d617853697a654d6574616461746100000000c50a085070616c6c65745f706f6f6c5f726567697374727958506f6f6c526567697374726174696f6e537461747573000108285265676973746572656400000030556e7265676973746572656400010000c90a0c5070616c6c65745f706f6f6c5f72656769737472791870616c6c6574144572726f7204045400011c2c4261644d657461646174610000045c496e76616c6964206d657461646174612070617373656454506f6f6c416c726561647952656769737465726564000104ec4120506f6f6c20776974682074686520676976656e2049442077617320616c7265616479207265676973746572656420696e20746865207061737450496e76616c69645472616e636865557064617465000208c05072652d726571756972656d656e747320666f722061205472616e63686555706461746520617265206e6f74206d6574fc666f72206578616d706c653a205472616e636865206368616e67656420627574206e6f7420697473206d65746164617461206f7220766963652076657273616c4d65746164617461466f7243757272656e63794e6f74466f756e64000304a04e6f206d6574616461746120666f722074686520676976656e2063757272656e637920666f756e64484e6f53756368506f6f6c4d65746164617461000404984e6f204d6574616461746120666f756e6420666f722074686520676976656e20506f6f6c49645c5472616e636865546f6b656e4e616d65546f6f4c6f6e67000504d454686520676976656e207472616e63686520746f6b656e206e616d65206578636565647320746865206c656e677468206c696d6974605472616e63686553796d626f6c4e616d65546f6f4c6f6e67000604d854686520676976656e207472616e6368652073796d626f6c206e616d65206578636565647320746865206c656e677468206c696d697404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd0a000004085d02d10a00d10a103870616c6c65745f72657761726473246d656368616e69736d10626173652043757272656e63790c1c42616c616e63650118105261746501890a304d61784d6f76656d656e747301d50a0008012c746f74616c5f7374616b6518011c42616c616e636500012c7270745f6368616e676573d90a0178426f756e6465645665633c526174652c204d61784d6f76656d656e74733e0000d50a084c646576656c6f706d656e745f72756e74696d655853696e676c6543757272656e63794d6f76656d656e7400000000d90a101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401890a045300000400990a01185665633c543e0000dd0a0c3870616c6c65745f726577617264731870616c6c6574144572726f7208045400044900010c5043757272656e6379576974686f757447726f75700000004c43757272656e6379496e53616d6547726f75700001006c43757272656e63794d61784d6f76656d656e74735265616368656400020004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e10a085070616c6c65745f626c6f636b5f726577617264732c53657373696f6e4461746104045400000c013c636f6c6c61746f725f726577617264180128543a3a42616c616e6365000130746f74616c5f726577617264180128543a3a42616c616e6365000138636f6c6c61746f725f636f756e7410010c7533320000e50a0c5070616c6c65745f626c6f636b5f726577617264731870616c6c6574144572726f720404540001086c4d61784368616e67657350657253657373696f6e5265616368656400000811014c696d6974206f66206d61782063616c6c7320776974682073616d6520696420746f205b6050616c6c65743a3a7365745f636f6c6c61746f725f7265776172642829605da86f72205b6050616c6c65743a3a7365745f746f74616c5f7265776172642829605d20726561636865642e5c496e73756666696369656e74546f74616c52657761726400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e90a000002ed0a00ed0a086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572050301185061726149640001147374617465f10a0130496e626f756e6453746174650001406d6573736167655f6d65746164617461f50a01a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e0000f10a086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e64656400010000f50a000002f90a00f90a0000040810fd0a00fd0a0c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000010b0000040805031000050b000002090b00090b086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e740503011850617261496400011473746174650d0b01344f7574626f756e6453746174650001347369676e616c735f6578697374c00110626f6f6c00012c66697273745f696e646578a8010c7531360001286c6173745f696e646578a8010c75313600000d0b086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000110b000004080503a800150b086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6410010c75333200013864726f705f7468726573686f6c6410010c753332000140726573756d655f7468726573686f6c6410010c7533320001407468726573686f6c645f7765696768742001185765696768740001547765696768745f72657374726963745f646563617920011857656967687400016878636d705f6d61785f696e646976696475616c5f7765696768742001185765696768740000190b0000040c05031030001d0b0c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909210b0c2870616c6c65745f78636d1870616c6c6574144572726f720404540001342c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909250b0c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909290b086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c20011857656967687400002d0b086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656410012c50616765436f756e746572000120656e645f7573656410012c50616765436f756e7465720001406f7665727765696768745f636f756e7428013c4f766572776569676874496e6465780000310b000002350b00350b00000408103000390b0c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093d0b0c306f726d6c5f78746f6b656e73186d6f64756c65144572726f7204045400014c4441737365744861734e6f5265736572766500000478417373657420686173206e6f2072657365727665206c6f636174696f6e2e544e6f7443726f7373436861696e5472616e73666572000104644e6f742063726f73732d636861696e207472616e736665722e2c496e76616c69644465737400020474496e76616c6964207472616e736665722064657374696e6174696f6e2e844e6f7443726f7373436861696e5472616e7366657261626c6543757272656e6379000304a443757272656e6379206973206e6f742063726f73732d636861696e207472616e7366657261626c652e48556e776569676861626c654d657373616765000404b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e4858636d457865637574696f6e4661696c65640005045458434d20657865637574696f6e206661696c65642e3843616e6e6f745265616e63686f72000608e8436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468654864657374696e6174696f6e20636861696e2e3c496e76616c6964416e636573747279000704c4436f756c64206e6f742067657420616e636573747279206f662061737365742072657365727665206c6f636174696f6e2e30496e76616c6964417373657400080468546865204d756c7469417373657420697320696e76616c69642e6044657374696e6174696f6e4e6f74496e7665727469626c65000904f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e2842616456657273696f6e000a08ec5468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626530696e7465727072657465642e7444697374696e637452657365727665466f724173736574416e64466565000b08fc57652074726965642073656e64696e672064697374696e637420617373657420616e6420666565206275742074686579206861766520646966666572656e743c7265736572766520636861696e732e1c5a65726f466565000c044054686520666565206973207a65726f2e285a65726f416d6f756e74000d0494546865207472616e73666572696e6720617373657420616d6f756e74206973207a65726f2e58546f6f4d616e794173736574734265696e6753656e74000e04d0546865206e756d626572206f662061737365747320746f2062652073656e74206973206f76657220746865206d6178696d756d2e544173736574496e6465784e6f6e4578697374656e74000f04ec5468652073706563696669656420696e64657820646f6573206e6f7420657869737420696e2061204d756c7469417373657473207374727563742e304665654e6f74456e6f75676800100448466565206973206e6f7420656e6f7567682e644e6f74537570706f727465644d756c74694c6f636174696f6e0011046c4e6f7420737570706f72746564204d756c74694c6f636174696f6e4c4d696e58636d4665654e6f74446566696e6564001204d44d696e58636d466565206e6f74207265676973746572656420666f72206365727461696e2072657365727665206c6f636174696f6e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909410b0c5470616c6c65745f78636d5f7472616e736163746f721870616c6c6574144572726f720404540001644c496e646578416c7265616479436c61696d656400000038556e636c61696d6564496e646578000100204e6f744f776e657200020048556e776569676861626c654d6573736167650003003843616e6e6f745265616e63686f720004004441737365744861734e6f526573657276650005002c496e76616c696444657374000600544e6f7443726f7373436861696e5472616e7366657200070078417373657449734e6f7452657365727665496e44657374696e6174696f6e0008006044657374696e6174696f6e4e6f74496e7665727469626c65000900304572726f7253656e64696e67000a008c44697370617463685765696768744269676765725468616e546f74616c576569676874000b00385765696768744f766572666c6f77000c0038416d6f756e744f766572666c6f77000d00505472616e736163746f72496e666f4e6f74536574000e00844e6f7443726f7373436861696e5472616e7366657261626c6543757272656e6379000f003c58636d457865637574654572726f720010002842616456657273696f6e001100604d61785765696768745472616e736163745265616368656400120054556e61626c65546f57697468647261774173736574001300484665655065725365636f6e644e6f74536574001400985369676e65645472616e736163744e6f74416c6c6f776564466f7244657374696e6174696f6e001500744661696c65644d756c74694c6f636174696f6e546f4a756e6374696f6e0016006448726d7048616e646c65724e6f74496d706c656d656e74656400170038546f6f4d75636846656555736564001800040d01416e206572726f7220746861742063616e206f63637572207768696c6520657865637574696e6720746865206d617070696e672070616c6c65742773206c6f6769632e450b0000040800690100490b101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454014d0b045300000400510b01185665633c543e00004d0b082c6f726d6c5f746f6b656e732c42616c616e63654c6f636b041c42616c616e63650118000801086964350301384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e63650000510b0000024d0b00550b082c6f726d6c5f746f6b656e732c4163636f756e7444617461041c42616c616e63650118000c01106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e63650000590b101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454015d0b045300000400610b01185665633c543e00005d0b082c6f726d6c5f746f6b656e732c52657365727665446174610844526573657276654964656e7469666965720135031c42616c616e6365011800080108696435030144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000610b0000025d0b00650b0c2c6f726d6c5f746f6b656e73186d6f64756c65144572726f720404540001203442616c616e6365546f6f4c6f77000004585468652062616c616e636520697320746f6f206c6f775c416d6f756e74496e746f42616c616e63654661696c65640001049c43616e6e6f7420636f6e7665727420416d6f756e7420696e746f2042616c616e63652074797065544c69717569646974795265737472696374696f6e73000204d04661696c65642062656361757365206c6971756964697479207265737472696374696f6e732064756520746f206c6f636b696e67404d61784c6f636b734578636565646564000304b44661696c6564206265636175736520746865206d6178696d756d206c6f636b7320776173206578636565646564244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e74484578697374656e7469616c4465706f736974000504e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e79526573657276657300070004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909690b00000408086d0b006d0b0000040828650500710b0c2c636861696e6272696467651474797065733450726f706f73616c566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000100124766f7465735f666f728801385665633c4163636f756e7449643e000134766f7465735f616761696e73748801385665633c4163636f756e7449643e000118737461747573750b013850726f706f73616c53746174757300011865787069727910012c426c6f636b4e756d6265720000750b0c2c636861696e6272696467651474797065733850726f706f73616c53746174757300010c24496e6974696174656400000020417070726f7665640001002052656a656374656400020000790b0c2c636861696e6272696467651870616c6c6574144572726f7204045400013c3c5468726573686f6c644e6f745365740000046452656c61796572207468726573686f6c64206e6f742073657438496e76616c6964436861696e49640001047850726f766964656420636861696e204964206973206e6f742076616c696440496e76616c69645468726573686f6c640002047452656c61796572207468726573686f6c642063616e6e6f7420626520304c436861696e4e6f7457686974656c6973746564000304b4496e746572616374696f6e732077697468207468697320636861696e206973206e6f74207065726d69747465645c436861696e416c726561647957686974656c697374656400040478436861696e2068617320616c7265616479206265656e20656e61626c6564505265736f75726365446f65734e6f744578697374000504b45265736f757263652049442070726f76696465642069736e2774206d617070656420746f20616e797468696e675052656c61796572416c72656164794578697374730006045852656c6179657220616c726561647920696e207365743852656c61796572496e76616c69640007048c50726f7669646564206163636f756e744964206973206e6f7420612072656c61796572344d757374426552656c61796572000804c450726f746563746564206f7065726174696f6e2c206d75737420626520706572666f726d65642062792072656c617965724c52656c61796572416c7265616479566f746564000904e452656c617965722068617320616c7265616479207375626d697474656420736f6d6520766f746520666f7220746869732070726f706f73616c5450726f706f73616c416c7265616479457869737473000a04ec412070726f706f73616c207769746820746865736520706172616d65746572732068617320616c7265616479206265656e207375626d69747465645050726f706f73616c446f65734e6f744578697374000b04844e6f2070726f706f73616c2077697468207468652049442077617320666f756e644c50726f706f73616c4e6f74436f6d706c657465000c04a843616e6e6f7420636f6d706c6574652070726f706f73616c2c206e65656473206d6f726520766f7465735c50726f706f73616c416c7265616479436f6d706c657465000d049c50726f706f73616c2068617320656974686572206661696c6564206f72207375636365656465643c50726f706f73616c45787069726564000e04984c69666574696d65206f662070726f706f73616c20686173206265656e20657863656564656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909097d0b0c4c6f726d6c5f61737365745f7265676973747279186d6f64756c65144572726f720404540001143441737365744e6f74466f756e6400000450417373657420776173206e6f7420666f756e642e2842616456657273696f6e00010809015468652076657273696f6e206f6620746865206056657273696f6e65644d756c74694c6f636174696f6e602076616c75652075736564206973206e6f742061626c6548746f20626520696e7465727072657465642e38496e76616c6964417373657449640002046054686520617373657420696420697320696e76616c69642e4c436f6e666c696374696e674c6f636174696f6e000304d8416e6f746865722061737365742077617320616c726561647920726567697374657220776974682074686973206c6f636174696f6e2e48436f6e666c696374696e6741737365744964000404d8416e6f746865722061737365742077617320616c7265616479207265676973746572207769746820746869732061737365742069642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909810b0c206f726d6c5f78636d186d6f64756c65144572726f7204045400010c2c556e726561636861626c650000080d01546865206d65737361676520616e642064657374696e6174696f6e20636f6d62696e6174696f6e20776173206e6f74207265636f676e697a6564206173206265696e6728726561636861626c652e2c53656e644661696c7572650001080501546865206d65737361676520616e642064657374696e6174696f6e20776173207265636f676e697a6564206173206265696e6720726561636861626c652062757494746865206f7065726174696f6e20636f756c64206e6f7420626520636f6d706c657465642e2842616456657273696f6e000208ec5468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626530696e7465727072657465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909850b086070616c6c65745f6d6967726174696f6e5f6d616e616765723c4d6967726174696f6e53746174757300010c20496e6163746976650000001c4f6e676f696e6700010020436f6d706c65746500020000890b0c6070616c6c65745f6d6967726174696f6e5f6d616e616765721870616c6c6574144572726f720404540001143c546f6f4d616e794163636f756e7473000008bc546f6f206d616e79206163636f756e747320696e2074686520766563746f7220666f72207468652063616c6c206f6664606d6967726174655f73797374656d5f6163636f756e74602e3c546f6f4d616e7956657374696e6773000108cc546f6f206d616e792076657374696e67496e666f7320696e2074686520766563746f7220666f72207468652063616c6c206f6664606d6967726174655f766574696e675f76657374696e67602e38546f6f4d616e7950726f78696573000208b8546f6f206d616e792070726f7869657320696e2074686520766563746f7220666f72207468652063616c6c206f6660606d6967726174655f70726f78795f70726f78696573602e644d6967726174696f6e416c7265616479436f6d706c657465640003080d01496e6469636174657320746861742061206d6967726174696f6e2063616c6c2068617070656e65642c20616c74686f75676820746865206d6967726174696f6e20697338616c726561647920636c6f7365644c4f6e6c7946696e616c697a654f6e676f696e67000408fc496e64696361746573207468617420612066696e616c697a652063616c6c2068617070656e65642c20616c74686f75676820746865206d6967726174696f6e9470616c6c6574206973206e6f7420696e20616e206f6e676f696e67206d6967726174696f6e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098d0b0c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c6574910b00000408d9022c00950b0c2870616c6c65745f65766d1870616c6c6574144572726f7204045400012c2842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e24556e646566696e656400080440556e646566696e6564206572726f722e285265656e7472616e63790009043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000a04244549502d333630372c04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909990b0000029d0b009d0b0000040c1508a10bb50b00a10b081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f686173682c0110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6dd902011048313630000108746fa50b01304f7074696f6e3c483136303e000140636f6e74726163745f61646472657373a50b01304f7074696f6e3c483136303e0001106c6f6773a90b01205665633c4c6f673e0001286c6f67735f626c6f6f6dad0b0114426c6f6f6d0000a50b04184f7074696f6e04045401d9020108104e6f6e6500000010536f6d650400d9020000010000a90b000002c10300ad0b0820657468626c6f6f6d14426c6f6f6d00000400b10b01405b75383b20424c4f4f4d5f53495a455d0000b10b000003000100000800b50b0c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400b90b014445495036353852656365697074446174610000001c454950323933300400b90b01484549503239333052656365697074446174610001001c454950313535390400b90b014845495031353539526563656970744461746100020000b90b0c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f67617395030110553235360001286c6f67735f626c6f6f6dad0b0114426c6f6f6d0001106c6f6773a90b01205665633c4c6f673e0000bd0b0c20657468657265756d14626c6f636b14426c6f636b040454011508000c0118686561646572c10b01184865616465720001307472616e73616374696f6e73c90b01185665633c543e0001186f6d6d657273cd0b012c5665633c4865616465723e0000c10b0c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173682c01104832353600012c6f6d6d6572735f686173682c01104832353600012c62656e6566696369617279d90201104831363000012873746174655f726f6f742c0110483235360001447472616e73616374696f6e735f726f6f742c01104832353600013472656365697074735f726f6f742c0110483235360001286c6f67735f626c6f6f6dad0b0114426c6f6f6d000128646966666963756c747995030110553235360001186e756d62657295030110553235360001246761735f6c696d697495030110553235360001206761735f75736564950301105532353600012474696d657374616d7028010c75363400012865787472615f6461746130011442797465730001206d69785f686173682c0110483235360001146e6f6e6365c50b010c4836340000c50b0c38657468657265756d5f747970657310686173680c483634000004003503011c5b75383b20385d0000c90b000002150800cd0b000002c10b00d10b000002b50b00d50b000002a10b00d90b0c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909dd0b0c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301d5041043616c6c016505245369676e617475726501910614457874726101e10b000400090c01250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e0000e10b00000420e50be90bed0bf10bf50bfd0b010c050c00e50b10306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000e90b10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000ed0b10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000f10b10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000f50b10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400f90b010c4572610000f90b102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000fd0b10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400b1020120543a3a496e6465780000010c10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000050c086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400bd02013042616c616e63654f663c543e0000090c102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301d5041043616c6c016505245369676e617475726501910614457874726101e10b000400300000000d0c084c646576656c6f706d656e745f72756e74696d651c52756e74696d6500000000f81853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022cf9030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000fd0304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100c00400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100c00400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000f503040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01010401501830426c6f636b5765696768747311046d01e2817a5500070088526a7402004001c2e49817000107d0f2b977510200e000010700e6bd4f570200f000010000c2e49817000107d0944e926e0200300101070088526a7402004001010700a2941a1d02005000c2e498170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746821043000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687429044040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e2d04a1034063656e747269667567652d646576656c4063656e747269667567652d646576656c01000000fb030000010000003cdf6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000bc9d89904f5b923f0100000037c8bb1350a9a2a802000000ea93e3f16f3d696202000000c937d79c92c4e872010000009ce8a204acbb1235010000008f5c2d0094ecd04701000000582211f65bb14b8904000000e65b00e46cedd0aa0200000001000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978a808880014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e013d04003c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100300400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000300400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000410404000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100c0040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100101000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100490404001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600005104040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000590404001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000069040400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401006d0480000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301007104040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301007d0404000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d6573736167657301000d0404000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301000d04040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010010100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000200400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000200400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500002c040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003004000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01850401740001a904016052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100ad0404000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000022454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100c0040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01b1040004344d696e696d756d506572696f6428207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00033450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100050310640000000000000000042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200b504040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200c504040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01d10401780c484578697374656e7469616c4465706f73697418400010a5d4e8000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01dd0414485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100e10440000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100e50404000000018004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e001544436f6c6c61746f7253656c656374696f6e0144436f6c6c61746f7253656c656374696f6e1434496e76756c6e657261626c65730100e9040400048c2054686520696e76756c6e657261626c652c20666978656420636f6c6c61746f72732e2843616e646964617465730100ed04040004bc205468652028636f6d6d756e6974792c206c696d697465642920636f6c6c6174696f6e2063616e646964617465732e444c617374417574686f726564426c6f636b01010405001010000000000484204c61737420626c6f636b20617574686f72656420627920636f6c6c61746f722e444465736972656443616e6469646174657301001010000000000c782044657369726564206e756d626572206f662063616e646964617465732e00750120546869732073686f756c6420696465616c6c7920616c77617973206265206c657373207468616e205b60436f6e6669673a3a4d617843616e64696461746573605d20666f72207765696768747320746f20626520636f72726563742e3443616e646964616379426f6e6401001840000000000000000000000000000000000cb820466978656420616d6f756e7420746f206465706f73697420746f206265636f6d65206120636f6c6c61746f722e004101205768656e206120636f6c6c61746f722063616c6c7320606c656176655f696e74656e7460207468657920696d6d6564696174656c79207265636569766520746865206465706f736974206261636b2e01f90401840001fd044728417574686f72736869700128417574686f72736869700c18556e636c6573010001050400041c20556e636c657318417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e30446964536574556e636c65730100c0040004bc205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e010d05000440556e636c6547656e65726174696f6e731010050000000ccc20546865206e756d626572206f6620626c6f636b73206261636b2077652073686f756c642061636365707420756e636c65732ee42054686973206d65616e7320746861742077652077696c6c206465616c207769746820756e636c652d706172656e7473207468617420617265942060556e636c6547656e65726174696f6e73202b203160206265666f726520606e6f77602e011d051e1c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100880400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100c0040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010021050400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010035050400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050029050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405390500040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e014105018c000145051f1041757261011041757261082c417574686f726974696573010049050400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010051052000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000201c41757261457874011c41757261457874042c417574686f72697469657301004905040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e0000000021204d756c746973696701204d756c746973696704244d756c746973696773000108050255055905040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01610501900c2c4465706f73697442617365184000009e1869d02904000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f7218400000c52ebca2b10000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e013d083c1450726f7879011450726f7879081c50726f786965730101040500e9074400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500410844000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01690501a0184050726f78794465706f73697442617365184000009e1869d02904000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f7218400000c52ebca2b100000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310102000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710102000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f73697442617365184000007f80a935be08000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000008cde04bff436000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0151083d1c5574696c6974790001710501ac044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e0155083e245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051059080400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504b4040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01950501b008344d6178696d756d57656967687420280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0169083f1c436f756e63696c011c436f756e63696c182450726f706f73616c7301006d08040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c6505040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c7108040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100880400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e019d0501bc000175084024456c656374696f6e730124456c656374696f6e73141c4d656d626572730100790804000c74205468652063757272656e7420656c6563746564206d656d626572732e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100790804001084205468652063757272656e742072657365727665642072756e6e6572732d75702e00590120496e76617269616e743a20416c7761797320736f72746564206261736564206f6e2072616e6b2028776f72736520746f2062657374292e2055706f6e2072656d6f76616c206f662061206d656d6265722c20746865bc206c6173742028692e652e205f626573745f292072756e6e65722d75702077696c6c206265207265706c616365642e2843616e646964617465730100c80400185901205468652070726573656e742063616e646964617465206c6973742e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f72d020616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e007c205365636f6e6420656c656d656e7420697320746865206465706f7369742e00b820496e76617269616e743a20416c7761797320736f72746564206261736564206f6e206163636f756e742069642e38456c656374696f6e526f756e647301001010000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e18566f74696e6701010405008108840000000000000000000000000000000000000000000000000000000000000000000cb820566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e00c42054574f582d4e4f54453a205341464520617320604163636f756e7449646020697320612063727970746f20686173682e01a90501c4242050616c6c65744964350320706872656c65637404d0204964656e74696669657220666f722074686520656c656374696f6e732d70687261676d656e2070616c6c65742773206c6f636b3443616e646964616379426f6e6418400000a0dec5adc935360000000000000004050120486f77206d7563682073686f756c64206265206c6f636b656420757020696e206f7264657220746f207375626d6974206f6e6527732063616e6469646163792e38566f74696e67426f6e644261736518400000b2d3595bf006000000000000000010942042617365206465706f736974206173736f636961746564207769746820766f74696e672e00550120546869732073686f756c642062652073656e7369626c79206869676820746f2065636f6e6f6d6963616c6c7920656e73757265207468652070616c6c65742063616e6e6f742062652061747461636b656420627994206372656174696e67206120676967616e746963206e756d626572206f6620766f7465732e40566f74696e67426f6e64466163746f7218400000b2d3595bf00600000000000000000411012054686520616d6f756e74206f6620626f6e642074686174206e65656420746f206265206c6f636b656420666f72206561636820766f746520283332206279746573292e38446573697265644d656d626572731010070000000470204e756d626572206f66206d656d6265727320746f20656c6563742e404465736972656452756e6e65727355701010030000000478204e756d626572206f662072756e6e6572735f757020746f206b6565702e305465726d4475726174696f6e1010e0c400000c510120486f77206c6f6e6720656163682073656174206973206b6570742e205468697320646566696e657320746865206e65787420626c6f636b206e756d62657220617420776869636820616e20656c656374696f6e5d0120726f756e642077696c6c2068617070656e2e2049662073657420746f207a65726f2c206e6f20656c656374696f6e732061726520657665722074726967676572656420616e6420746865206d6f64756c652077696c6c5020626520696e2070617373697665206d6f64652e344d617843616e646964617465731010e803000014e420546865206d6178696d756d206e756d626572206f662063616e6469646174657320696e20612070687261676d656e20656c656374696f6e2e001501205761726e696e673a2054686520656c656374696f6e2068617070656e73206f6e636861696e2c20616e6420746869732076616c75652077696c6c2064657465726d696e65f4207468652073697a65206f662074686520656c656374696f6e2e205768656e2074686973206c696d69742069732072656163686564206e6f206d6f7265a42063616e646964617465732061726520616363657074656420696e2074686520656c656374696f6e2e244d6178566f7465727310101027000010f820546865206d6178696d756d206e756d626572206f6620766f7465727320746f20616c6c6f7720696e20612070687261676d656e20656c656374696f6e2e001501205761726e696e673a205468697320696d7061637473207468652073697a65206f662074686520656c656374696f6e2077686963682069732072756e206f6e636861696e2ed8205768656e20746865206c696d6974206973207265616368656420746865206e657720766f74657273206172652069676e6f7265642e018508412444656d6f6372616379012444656d6f63726163792c3c5075626c696350726f70436f756e74010010100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301008908040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040510950804000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010010100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010010100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f6600010405109d0804000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500a908d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100c00400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000c108040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062cc50804000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062cc00400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e01b10501d0303c456e6163746d656e74506572696f64101000e1000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641010e0c4000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641010e0c4000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f64101000e10000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400000e8890423c78a000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564c004000c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f6410108403000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641010e0c4000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657310106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73101064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473101064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656410106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01c90842204964656e7469747901204964656e7469747910284964656e746974794f660001040500cd0804000c210120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f66000104020051060400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500dd0844000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e28526567697374726172730100e5080400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e01c10501e0183042617369634465706f7369741840000010632d5ec76b050000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f73697418400000c4588bd7f15a0100000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f73697418400000d01309468e1501000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e7473101064000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e4c4d61784164646974696f6e616c4669656c6473101064000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4fe020726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e344d617852656769737472617273101014000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e01f508431c56657374696e67011c56657374696e67081c56657374696e670001040200f908040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100010904000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01610601e408444d696e5665737465645472616e7366657218400000e8890423c78a000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c000000000105094420547265617375727901205472656173757279103450726f706f73616c436f756e74010010100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051009090400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301000d09040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01690601e81c3050726f706f73616c426f6e64cd031050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000010632d5ec76b0500000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d61014401000050efe2d6e41a1b00000000000000044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641010c04b0300048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ecd0310102700000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c6574496411092070792f74727372790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e011509451c556e6971756573011c556e69717565732814436c61737300010402281909040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402002804000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202021d099c040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e30436c6173734163636f756e74000108020221099c04000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e1441737365740001080202a5012509040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e3c436c6173734d657461646174614f660001040228290904000468204d65746164617461206f66206120636f6c6c656374696f6e2e48496e7374616e63654d657461646174614f660001080202a5012d0904000454204d65746164617461206f6620616e206974656d2e2441747472696275746500010c02020231093509040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f660001080202a501390904000470205072696365206f6620616e20617373657420696e7374616e63652e4c436f6c6c656374696f6e4d6178537570706c79000104022810040004f0204b6565707320747261636b206f6620746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e206d6967687420686176652e016d0601ec2044436f6c6c656374696f6e4465706f7369741840000064a7b3b6e00d00000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f736974184000008a5d78456301000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184000008a5d784563010000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f73697442617365184000008a5d7845630100000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400000c16ff2862300000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410100001000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410100001000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410100001000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e013d094620507265696d6167650120507265696d6167650824537461747573466f72000104062c41090400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f720001040649094d0904000001790601090100015109481046656573011046656573042c46656542616c616e6365730101040111011840000064a7b3b6e00d000000000000000004e82053746f72657320746865206665652062616c616e636573206173736f636961746564207769746820612048617368206964656e746966696572017d06010d0100005a18416e63686f720118416e63686f721c28507265436f6d6d697473000104012c5509040008250120507265436f6d6d6974732073746f726520746865206d6170206f6620616e63686f7220496420746f20746865207072652d636f6d6d69742c2077686963682069732061206c6f636b98206f6e20616e20616e63686f7220696420746f20626520636f6d6d6974746564206c6174657240416e63686f7245766963744461746573000104012c10040004c4204d617020746f2066696e6420746865206576696374696f6e206461746520676976656e20616e20616e63686f7220696434416e63686f72496e646578657300010401282c04000478204d617020746f2066696e6420616e63686f72494420627920696e646578444c6174657374416e63686f72496e646578000028040004b4204c617465737420616e63686f72656420696e64657820746861742077617320726563656e746c792075736564604c617465737445766963746564416e63686f72496e64657800002804000c2501204c6174657374206576696374656420616e63686f7220696e6465782e205468697320776f756c64206b65657020747261636b206f6620746865206c61746573742065766963746564210120616e63686f7220696e64657820736f20746861742077652063616e207374617274207468652072656d6f76616c206f6620416e63686f724576696374446174657320696e64657819012066726f6d207468617420696e646578206f6e77617264732e20476f696e672066726f6d20416e63686f72496e6465786573203d3e20416e63686f7245766963744461746573444c6174657374457669637465644461746500001004000c0d01205468697320697320746f206b65657020747261636b206f66207468652064617465207768656e2061206368696c642074726965206f6620616e63686f72732077617319012065766963746564206c6173742e20497420697320746f20657669637420686973746f72696320616e63686f722064617461206368696c6420747269657320696620746865799020776572656e2774206576696374656420696e20612074696d656c79206d616e6e65722e4845766963746564416e63686f72526f6f74730001040110590904001009012053746f7261676520666f72206576696374656420616e63686f72206368696c64207472696520726f6f74732e20416e63686f72732077697468206120676976656e1901206578706972792f6576696374696f6e2064617465206172652073746f726564206f6e2d636861696e20696e20612073696e676c65206368696c6420747269652e20546869732501206368696c6420747269652069732072656d6f766564206166746572207468652065787069727920646174652068617320706173736564207768696c652069747320726f6f7420697309012073746f726564207065726d616e656e746c7920666f722070726f76696e6720616e206578697374656e6365206f6620616e206576696374656420616e63686f722e0181060000015d095b18436c61696d730118436c61696d730c38436c61696d6564416d6f756e7473010104020018400000000000000000000000000000000004a020546f74616c20636c61696d656420616d6f756e747320666f7220616c6c206163636f756e74732e20526f6f744861736800002c040004210120526f6f742068617368207468617420636f72726573706f6e6420746f206c69737473206f662072657761726420636c61696d20616d6f756e747320706572206163636f756e742e3455706c6f61644163636f756e74000000040004cc204163636f756e74207468617420697320616c6c6f77656420746f2075706c6f6164206e657720726f6f74206861736865732e018906011501084c4d696e696d616c5061796f7574416d6f756e7418400000f44482916345000000000000000010e0204d696e696d616c20616d6f756e7420746861742063616e20626520636c61696d656420666f72206120726577617264207061796f75742e00e501205468697320636f6e7374616e742069732073657420766961205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f74797065732988206d6163726f207768656e20636f6e6669677572696e6720612072756e74696d652e2050616c6c65744964110920702f636c61696d7314110120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f726520746865206d6f64756c65206964656e74696669657220666f7230207468652070616c6c65742e00a420546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d3d022060606050616c6c65744964282a622272642f636c61696d222960606020616e6420736574207573696e6720746865205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f7479706573290161095c3843726f77646c6f616e436c61696d013843726f77646c6f616e436c61696d2034436f6e747269627574696f6e7300002c040004fc20526f6f74206f662068617368206f66207468652072656c617920636861696e206174207468652074696d65206f6620696e697469616c697a6174696f6e2e204c6f636b656441740000100400004843726f77646c6f616e54726965496e64657800001004001015012054726965496e646578206f66207468652063726f77646c6f616e2063616d706169676e20696e73696465207468652072656c61792d636861696e2063726f77646c6f616e202070616c6c65742e000d012054686973206973206e656564656420696e206f7264657220746f206275696c642074686520636f7272656374206b65797320666f722070726f6f6620636865636b2e3c50726f636573736564436c61696d73000104026509c004000805012041206d617020636f6e7461696e696e6720746865206c697374206f6620636c61696d7320666f7220726577617264207061796f7574732074686174207765726558207375636365737366756c792070726f6365737365642443757272496e6465780100101000000000002450726576496e646578010010100000000000284c6561736553746172740100101000000000002c4c65617365506572696f64010010100000000000018d06011901042050616c6c6574496411092063632f636c61696d14110120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f7265207468652070616c6c6574206964656e74696669657220666f7230207468652070616c6c65742e00a4205468652070616c6c6574206964656e746966696572206d6179206265206f662074686520666f726d782060606050616c6c65744964282a622263632f636c61696d22296060602e0169095d3c43726f77646c6f616e526577617264013c43726f77646c6f616e5265776172640c444469726563745061796f7574526174696f010021011000c2eb0b081d0120576869636820726174696f206f6620746865207265776172647320617265207061796564206469726563746c792e205468652072657374206973207472616e73666572726564602076696120612076657374696e67207363686564756c652e3456657374696e67506572696f64000010040004c0204f76657220776869636820706572696f64206172652074686520636f6e747269627574696f6e73207665737465642e3056657374696e675374617274000010040004b820417420776869636820626c6f636b206e756d62657220646f6573207468652076657374696e672073746172742e01ad06011d01042050616c6c6574496411092063632f726577726458110120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f726520746865206d6f64756c65206964656e74696669657220666f7230207468652070616c6c65742e00a420546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d15012060606050616c6c65744964282a622263632f7277726422296060602e205468697320636f6e7374616e7420697320736574207768656e206275696c64696e6720746869737820636f6e66696720747261697420666f72207468652072756e74696d652e00282023204578616d706c653c20606060727573742c69676e6f726500d8202f2f20506172616d65746572697a652063726f77646c6f616e207265776172642070616c6c657420636f6e66696775726174696f6e4c20706172616d657465725f747970657321207bc020202070756220636f6e73742043726f77646c6f616e52657761726450616c6c657449643a2050616c6c65744964203d642050616c6c65744964282a622263632f7277726422293b207d000d01202f2f20496d706c656d656e742063726f77646c6f616e207265776172642070616c6c6574277320636f6e66696775726174696f6e20747261697420666f7220746865f02072756e74696d6520696d706c2070616c6c65745f63726f77646c6f61726e5f7265776172643a3a436f6e66696720666f722052756e74696d65207b5820202074797065204576656e74203d204576656e743b602020207479706520576569676874496e666f203d2028293bac202020747970652050616c6c65744964203d2043726f77646c6f616e52657761726450616c6c657449643b08207d1020606060016d095e28506f6f6c53797374656d0128506f6f6c53797374656d1810506f6f6c000104022871090400003c5363686564756c65645570646174650001040228a5090400003845706f6368457865637574696f6e0001040228a909040000384163636f756e744465706f7369740101040200184000000000000000000000000000000000002c506f6f6c4465706f7369740001040228c1090400003853746f7261676556657273696f6e0100c50904000001b106012501382050616c6c65744964110920726f632f706f6f6c002c50616c6c6574496e64657808045f0801012054686520696d6d757461626c6520696e646578206f6620746869732070616c6c6574207768656e20696e7374616e7469617465642077697468696e207468659c20636f6e74657874206f6620612072756e74696d6520776865726520697420697320757365642e2c50617261636861696e4964050310d007000000344368616c6c656e676554696d6510100a000000043c204368616c6c656e67652074696d654c44656661756c744d696e45706f636854696d6528202c01000000000000046020506f6f6c20706172616d657465722064656661756c74734044656661756c744d61784e415641676528203c0000000000000000584d696e45706f636854696d654c6f776572426f756e6428200100000000000000045820506f6f6c20706172616d6574657220626f756e6473584d696e45706f636854696d655570706572426f756e642820008d270000000000004c4d61784e41564167655570706572426f756e642820100e00000000000000384d696e55706461746544656c617928200100000000000000045420506f6f6c207570646174652073657474696e6773484d6178546f6b656e4e616d654c656e6774681010800000000490204d6178206c656e67746820666f722061207472616e63686520746f6b656e206e616d65504d6178546f6b656e53796d626f6c4c656e6774681010200000000498204d6178206c656e67746820666f722061207472616e63686520746f6b656e2073796d626f6c2c4d61785472616e63686573101005000000045c204d6178206e756d626572206f66205472616e636865732c506f6f6c4465706f7369741840000010632d5ec76b050000000000000004c82054686520616d6f756e742074686174206d75737420626520726573657276656420746f20637265617465206120706f6f6c01c9095f144c6f616e7301144c6f616e7318284c6173744c6f616e4964010104022828200000000000000000049020436f6e7461696e7320746865206c617374206c6f616e2069642067656e6572617465642c437265617465644c6f616e00010802029109cd0904000409012053746f7261676520666f72206c6f616e73207468617420686173206265656e20637265617465642062757420617265206e6f74207374696c6c206163746976652e2c4163746976654c6f616e730101040228d109040018682053746f7261676520666f7220616374697665206c6f616e732ef42054686520696e6465786174696f6e206f6620746869732073746f7261676520646966666572732066726f6d2060437265617465644c6f616e60206f7219012060436c6f7365644c6f616e60206265636175736520686572652077652074727920746f206d696e696d697a652074686520697465726174696f6e207370656564206f7665721d0120616c6c20616374697665206c6f616e7320696e206120706f6f6c2e20604d6f6d656e74602076616c756520616c6f6e6720776974682074686520604163746976654c6f616e60190120636f72726573706f6e6420746f20746865206c617374206d6f6d656e742074686520616374697665206c6f616e20776173207573656420746f20636f6d70757465207468659c20706f7274666f6c696f2076616c756174696f6e20696e20616e20696e6578616374207761792e28436c6f7365644c6f616e00010802029109e10904000c682053746f7261676520666f7220636c6f736564206c6f616e732eac204e6f206d75746174696f6e732061726520657870656374656420696e20746869732073746f726167652ebc204c6f616e73206172652073746f726564206865726520666f7220686973746f726963616c20707572706f7365732e3857726974654f6666506f6c6963790101040228d901040004a82053746f726573207772697465206f666620706f6c696379207573656420696e206561636820706f6f6c48506f7274666f6c696f56616c756174696f6e0101040228e5096000000000000000000000000000000000000000000000000004dc2053746f7265732074686520706f7274666f6c696f2076616c756174696f6e206173736f63696174656420746f206561636820706f6f6c01b506019d0108544d61784163746976654c6f616e73506572506f6f6c1010320000000494204d6178206e756d626572206f6620616374697665206c6f616e732070657220706f6f6c2e544d617857726974654f6666506f6c69637953697a6510100a00000004a4204d6178206e756d626572206f662077726974652d6f66662067726f7570732070657220706f6f6c2e01e909602c5065726d697373696f6e73012c5065726d697373696f6e7308285065726d697373696f6e0001080202fd09010a0400003c5065726d697373696f6e436f756e7400010402fd011004000001b90601f90104404d6178526f6c657350657253636f70651010e803000000012d0a6144436f6c6c61746f72416c6c6f776c6973740144436f6c6c61746f72416c6c6f776c6973740424416c6c6f776c69737400010401009c040008682054686520636f6c6c61746f72277320616c6c6f776c6973742e1d01204e6f74653a20576520696d706c656d656e74206974206173206120636c6f73652d656e6f75676820486173685365743a204d61703c56616c696461746f7249642c2028293e2e01bd06010d020001310a6218546f6b656e730001c1060111020001350a63204e667453616c657301204e667453616c6573081453616c65730001080202a50119020400084820546865206163746976652073616c65732e010120412073616c6520697320616e20656e747279206964656e74696669656420627920616e204e465420636f6c6c656374696f6e20616e64206974656d2069642e304e667473427953656c6c657201010c0202021d099c001058204e6674206c6f6f6b75702062792073656c6c65722e0009012057652075736520746869732073746f7261676520746f20656666696369656e746c79206c6f6f6b20757020746865204e465473206265696e6720736f6c642062795420616e206163636f756e74202873656c6c6572292e01c506011502042050616c6c6574496411092070616c2f6e667473045820546865204964206f6620746869732070616c6c657401390a641842726964676501184272696467650001c9060121020c3842726964676550616c6c6574496411092063686e6272646765144c2050616c6c6574206964656e7469666965722e00a420546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726db9022060606050616c6c65744964282a6222632f627269646765222960606020286120737472696e67206f6620656967687420636861726163746572732920616e6420736574207573696e6720746865205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f747970657329cc206d6163726f20696e206f6e65206f66207468652072756e74696d657320287365652072756e74696d6520666f6c646572292e344e6174697665546f6b656e4964048000000000000000000000000000000009e974040e705c10fb4de576d6cc26190100644e6174697665546f6b656e5472616e736665724665654b657911010402080101204b6579207573656420746f20726574726965766520746865206665652074686174206172652063686172676564207768656e207472616e7366657272696e6780206e617469766520746f6b656e7320746f2074617267657420636861696e732e013d0a653c496e7465726573744163637275616c013c496e7465726573744163637275616c0c1452617465730100410a0400002c4c61737455706461746564010028200000000000000000003853746f7261676556657273696f6e01004d0a040200000125020001510a66104e6674730001cd0601290208385265736f7572636548617368496404800000000000000000000000000000000cb3858f3e48815bfd35c5347aa3b34c011048205265736f7572636520686173682069642e001101205468697320747970652077617320696e697469616c6c79206465636c6172656420696e20746865206272696467652070616c6c65742062757420776173206d6f76656494206865726520746f2061766f69642063697263756c617220646570656e64656e636965732e604e667450726f6f6656616c69646174696f6e4665654b657911010403080101204164646974696f6e616c20666565206368617267656420666f722076616c69646174696e67204e46542070726f6f6620287768656e206d696e74696e67206118204e4654292e01550a67204b657973746f726501204b657973746f72650c104b6579730001080202590a610a04000480204b6579732074686174206172652063757272656e746c792073746f7265642e404c6173744b65794279507572706f73650001080202650a2c040004c42053746f72616765207573656420666f722072657472696576696e67206c617374206b657920627920707572706f73652e284b65794465706f73697401001840000010632d5ec76b05000000000000000405012053746f726573207468652063757272656e74206465706f73697420746861742077696c6c2062652074616b656e207768656e20736176696e672061206b65792e01d906012d02041c4d61784b65797310100a00000004d0204d6178696d756d206e756d626572206f66206b65797320746861742063616e20626520616464656420617420612074696d652e01690a682c496e766573746d656e7473012c496e766573746d656e74732834496e766573744f72646572496401010402750128200000000000000000003452656465656d4f726465724964010104027501282000000000000000000030496e766573744f726465727300010802026d0a710a0400003052656465656d4f726465727300010802026d0a710a04000048416374697665496e766573744f726465727301010402750151024000000000000000000000000000000000004841637469766552656465656d4f7264657273010104027501510240000000000000000000000000000000000060496e50726f63657373696e67496e766573744f7264657273000104027501510204000060496e50726f63657373696e6752656465656d4f726465727300010402750151020400004c436c6561726564496e766573744f72646572730001080205750a4d020400004c436c656172656452656465656d4f72646572730001080205750a4d0204000001e5060139020001790a691c52657761726473011c526577617264730c2043757272656e6379010104027d0a810a48000000000000000000000000000000000000001447726f757001010402109d0a80000000000000000000000000000000000000000000000000000000000000000000305374616b654163636f756e740101080202a10aa50a88000000000000000000000000000000000000000000000000000000000000000000000000015502042050616c6c65744964110920642f7265776172640c1501204964656e746966696572206f6620746869732070616c6c6574207573656420617320616e206163636f756e742077686572652073746f7265732074686520726577617264f02074686174206973206e6f7420636c61696d65642e205768656e20796f752064697374726962757465207265776172642c2074686520616d6f756e745c20646973747269627574656420676f657320686572652e01a90a6a404c69717569646974795265776172647301404c6971756964697479526577617264730c28456e644f6645706f6368010010100000000004190120436f6e7461696e73207468652074696d657374616d7020696e20626c6f636b73207768656e207468652063757272656e742065706f63682069732066696e616c697a65642e3c41637469766545706f6368446174610100ad0a5405000000000000000000000000000000000000000004982044617461206173736f63696174656420746f207468652063757272656e742065706f63682e404e65787445706f63684368616e67657301006502100000000008ec2050656e64696e672075706461746520646174612075736564207768656e207468652063757272656e742065706f63682066696e616c697a65732eac204f6e63652069742773207573656420666f7220746865207570646174652c20697427732072657365742e01e9060161020c244d617847726f7570731010140000000c80204d61782067726f757073207573656420627920746869732070616c6c65742ef42049662074686973206c696d697420697320726561636865642c207468652065786365656465642067726f7570732061726520656974686572206e6f746420636f6d707574656420616e64206e6f742073746f7265642e484d61784368616e67657350657245706f63681010320000000c1501204d6178206e756d626572206f66206368616e676573206f66207468652073616d65207479706520656e71756575656420746f206170706c7920696e20746865206e657874e42065706f63682e204d61782063616c6c7320746f205b6050616c6c65743a3a7365745f67726f75705f7765696768742829605d206f7220746fcc205b6050616c6c65743a3a7365745f63757272656e63795f67726f75702829605d2077697468207468652073616d652069642e50496e697469616c45706f63684475726174696f6e1010050000000c6020496e697469616c2065706f6368206475726174696f6e2e9820546869732076616c75652063616e2062652075706461746564206c61746572207573696e678c205b6050616c6c65743a3a7365745f65706f63685f6475726174696f6e2829605d602e01b50a6b28436f6e6e6563746f72730128436f6e6e6563746f72730830446f6d61696e526f757465720001040291029d020400003c4b6e6f776e436f6e6e6563746f727300010402009c04000c11012054686520736574206f66206b6e6f776e20636f6e6e6563746f72732e205468697320736574206973207573656420617320616e20616c6c6f772d6c697374207768656e050120617574686f72697a696e6720746865206f726967696e206f6620696e636f6d696e67206d65737361676573207468726f75676820746865206068616e646c65602c2065787472696e7369632e01ed06018902045447656e6572616c43757272656e6379507265666978fd0530b64fd1c3a60c26018838985004c0205468652070726566697820666f722063757272656e636965732061646465642076696120436f6e6e6563746f72732e01b90a6c30506f6f6c52656769737472790130506f6f6c52656769737472790830506f6f6c4d657461646174610001040228bd0a04000014506f6f6c730001040228c50a04000001f50601dd0210484d6178546f6b656e4e616d654c656e6774681010800000000490204d6178206c656e67746820666f722061207472616e63686520746f6b656e206e616d65504d6178546f6b656e53796d626f6c4c656e6774681010200000000498204d6178206c656e67746820666f722061207472616e63686520746f6b656e2073796d626f6c2c4d61785472616e63686573101005000000045c204d6178206e756d626572206f66205472616e636865733c4d617853697a654d6574616461746110102e0000000454204d61782073697a65206f66204d6574616461746101c90a6d40426c6f636b52657761726473426173650140426c6f636b52657761726473426173650c2043757272656e6379010104027d0acd0a48000000000000000000000000000000000000001447726f757001010402109d0a80000000000000000000000000000000000000000000000000000000000000000000305374616b654163636f756e740101080202a10aa50a8800000000000000000000000000000000000000000000000000000000000000000000000001e502042050616c6c65744964110920642f7265776172640c1501204964656e746966696572206f6620746869732070616c6c6574207573656420617320616e206163636f756e742077686572652073746f7265732074686520726577617264f02074686174206973206e6f7420636c61696d65642e205768656e20796f752064697374726962757465207265776172642c2074686520616d6f756e745c20646973747269627574656420676f657320686572652e01dd0a6e30426c6f636b526577617264730130426c6f636b52657761726473084441637469766553657373696f6e446174610100e10a9000000000000000000000000000000000000000000000000000000000000000000000000004a02044617461206173736f63696174656420746f207468652063757272656e742073657373696f6e2e484e65787453657373696f6e4368616e6765730100ed0214000000000008f42050656e64696e672075706461746520646174612075736564207768656e207468652063757272656e742073657373696f6e2066696e616c697a65732eac204f6e63652069742773207573656420666f7220746865207570646174652c20697427732072657365742e01290701e902143c5374616b6543757272656e63794964690108050008050120546865206964656e746966696572206f6620746865206172746966696369616c20626c6f636b20726577617264732063757272656e637920776869636820697384206d696e74656420616e64206275726e656420666f7220636f6c6c61746f72732e2c5374616b65416d6f756e741840000064a7b3b6e00d00000000000000000811012054686520616d6f756e74206f6620746865206172746966696369616c20626c6f636b20726577617264732063757272656e6379207768696368206973206d696e7465646820616e64206275726e656420666f7220636f6c6c61746f72732e305374616b6547726f75704964101001000000049820546865206964656e746966696572206f662074686520636f6c6c61746f722067726f75702e504d61784368616e67657350657253657373696f6e1010320000000c1501204d6178206e756d626572206f66206368616e676573206f66207468652073616d65207479706520656e71756575656420746f206170706c7920696e20746865206e657874f82073657373696f6e2e204d61782063616c6c7320746f205b6050616c6c65743a3a7365745f636f6c6c61746f725f7265776172642829605d206f7220746fc4205b6050616c6c65743a3a7365745f746f74616c5f7265776172642829605d2077697468207468652073616d652069642e304d6178436f6c6c61746f72731010200000000001e50a6f2458636d705175657565012458636d7051756575652444496e626f756e6458636d705374617475730100e90a0400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205010b30040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d705374617475730100050b0400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205110b30040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402050330040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100150b74020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f7665727765696768740001040528190b040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e3c4f766572776569676874436f756e7401002820000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100c004000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e012d0701f90200011d0b782c506f6c6b61646f7458636d000131070109030001210b792843756d756c757358636d0000016d030001250b7a20446d7051756575650120446d7051756575651034436f6e66696775726174696f6e0100290b280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e64657801002d0b4000000000000000000000000000000000044020546865207061676520696e6465782e1450616765730101040210310b04000444205468652071756575652070616765732e284f7665727765696768740001040228350b0400046420546865206f766572776569676874206d657373616765732e0195070171030001390b7b1c58546f6b656e73011c58546f6b656e7300019907017503083053656c664c6f636174696f6ec90214010100411f04542053656c6620636861696e206c6f636174696f6e2e344261736558636d576569676874282000e1f50500000000104420426173652058434d207765696768742e00f8205468652061637475616c6c792077656967687420666f7220616e2058434d206d6573736167652069732060543a3a4261736558636d576569676874202b6c20543a3a576569676865723a3a77656967687428266d736729602e013d0b7c3458636d5472616e736163746f72013458636d5472616e736163746f720c38496e646578546f4163636f756e7400010402a80004000c45012053696e636520776520617265207573696e672070616c6c65742d7574696c69747920666f72206163636f756e742064657269766174696f6e20287468726f75676820417344657269766174697665292c6d01207765206e65656420746f2070726f7669646520616e20696e64657820666f7220746865206163636f756e742064657269766174696f6e2e20546869732073746f72616765206974656d2073746f7265732074686520696e64657879012061737369676e656420666f72206120676976656e206c6f63616c206163636f756e742e20546865736520696e64696365732061726520757361626c65206173206465726976617469766520696e207468652072656c617920636861696e6c5472616e73616374496e666f576974685765696768744c696d697400010402c9027d0304000c6d012053746f72657320746865207472616e7361637420696e666f206f662061204d756c74694c6f636174696f6e2e205468697320646566696e657320686f77206d75636820657874726120776569676874207765206e65656420746f6d0120616464207768656e2077652077616e7420746f207472616e7361637420696e207468652064657374696e6174696f6e20636861696e20616e64206d6178696d756d20616d6f756e74206f662077656967687420616c6c6f77656464206279207468652064657374696e6174696f6e20636861696e7044657374696e6174696f6e41737365744665655065725365636f6e6400010405c902180400085d012053746f726573207468652066656520706572207365636f6e6420666f7220616e20617373657420696e20697473207265736572766520636861696e2e205468697320616c6c6f777320757320746f20636f6e766572744c2066726f6d2077656967687420746f2066656501a907017903083053656c664c6f636174696f6ec90214010100411f04542053656c6620636861696e206c6f636174696f6e2e344261736558636d576569676874282000e1f505000000000c00f0205468652061637475616c2077656967687420666f7220616e2058434d206d6573736167652069732060543a3a4261736558636d576569676874202b6c20543a3a576569676865723a3a77656967687428266d736729602e01410b7d284f726d6c546f6b656e7301284f726d6c546f6b656e731034546f74616c49737375616e636501010405690118400000000000000000000000000000000004902054686520746f74616c2069737375616e6365206f66206120746f6b656e20747970652e144c6f636b730101080205450b490b040008d820416e79206c6971756964697479206c6f636b73206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e204163636f756e74730101080205450b550bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018b8205468652062616c616e6365206f66206120746f6b656e207479706520756e64657220616e206163636f756e742e00fc204e4f54453a2049662074686520746f74616c2069732065766572207a65726f2c206465637265617365206163636f756e7420726566206163636f756e742e001901204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f7265282062616c616e6365732e2052657365727665730101080205450b590b040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00018d0308204d61784c6f636b73101032000000002c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01650b962c436861696e427269646765012c436861696e427269646765182c436861696e4e6f6e636573000104010828040004fc20416c6c2077686974656c697374656420636861696e7320616e642074686569722072657370656374697665207472616e73616374696f6e20636f756e74735052656c61796572566f74655468726573686f6c64010010100100000004cc204e756d626572206f6620766f74657320726571756972656420666f7220612070726f706f73616c20746f20657865637574652052656c61796572730101040100c00400046c20547261636b732063757272656e742072656c61796572207365743052656c61796572436f756e7401001010000000000468204e756d626572206f662072656c617965727320696e2073657414566f7465730001080101690b710b0400085420416c6c206b6e6f776e2070726f706f73616c732e2d0120546865206b6579206973207468652068617368206f66207468652063616c6c20616e6420746865206465706f7369742049442c20746f20656e73757265206974277320756e697175652e245265736f75726365730001040104300400041901205574696c697a6564206279207468652062726964676520736f66747761726520746f206d6170207265736f757263652049447320746f2061637475616c206d6574686f647301bd07019103101c436861696e4964080401087c20546865206964656e74696669657220666f72207468697320636861696e2e6d012054686973206d75737420626520756e6971756520616e64206d757374206e6f7420636f6c6c6964652077697468206578697374696e67204944732077697468696e206120736574206f66206272696467656420636861696e732e2050616c6c6574496411092063686e627264676510410120436f6e7374616e7420636f6e66696775726174696f6e20706172616d6574657220746f2073746f726520746865206d6f64756c65206964656e74696669657220666f72207468652070616c6c65742e00390120546865206d6f64756c65206964656e746966696572206d6179206265206f662074686520666f726d2060606050616c6c65744964282a622263686e6272646765222960606020616e6420736574a901207573696e6720746865205b60706172616d657465725f7479706573605d2868747470733a2f2f7375627374726174652e6465762f646f63732f656e2f6b6e6f776c65646765626173652f72756e74696d652f6d6163726f7323706172616d657465725f7479706573294050726f706f73616c4c69666574696d651010f4010000005052656c61796572566f74655468726573686f6c64101001000000040502205479706520666f722073657474696e6720696e697469616c206e756d626572206f6620766f74657320726571756972656420666f7220612070726f706f73616c20746f2062652065786563757465642028736565205b52656c61796572566f74655468726573686f6c645d20696e2073746f726167652073656374696f6e292e01790b97444f726d6c4173736574526567697374727901444f726d6c417373657452656769737472790c204d65746164617461000104056901a103040004bc20546865206d65746164617461206f6620616e2061737365742c20696e64657865642062792061737365742069642e444c6f636174696f6e546f4173736574496400010405c90269010400080501204d6170732061206d756c74696c6f636174696f6e20746f20616e206173736574206964202d2075736566756c207768656e2070726f63657373696e672078636d28206d657373616765732e2c4c61737441737365744964010069010400040d0120546865206c6173742070726f636573736564206173736574206964202d2075736564207768656e2061737369676e696e6720612073657175656e7469616c2069642e01c107019d0300017d0b981c4f726d6c58636d011c4f726d6c58636d0001d10701b1030001810b99244d6967726174696f6e01244d6967726174696f6e04185374617475730100850b04000001d50701b5030c504d6967726174696f6e4d61784163636f756e747310106400000004e0204d6178696d756d206e756d626572206f66206163636f756e747320746861742063616e206265206d69677261746564206174206f6e6365504d6967726174696f6e4d617856657374696e677310100a00000004e0204d6178696d756d206e756d626572206f662076657374696e677320746861742063616e206265206d69677261746564206174206f6e63654c4d6967726174696f6e4d617850726f7869657310100a00000004e0204d6178696d756d206e756d626572206f662076657374696e677320746861742063616e206265206d69677261746564206174206f6e636501890bc7105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01f90701b90300018d0bc80c45564d010c45564d08304163636f756e74436f64657301010402d902300400003c4163636f756e7453746f72616765730101080202910b2c8000000000000000000000000000000000000000000000000000000000000000000001fd0701bd030001950ba02845564d436861696e4964012845564d436861696e4964041c436861696e49640100282000000000000000000448205468652045564d20636861696e2049442e00000000a11c42617365466565011c42617365466565083442617365466565506572476173010095038000ca9a3b000000000000000000000000000000000000000000000000000000000028456c61737469636974790100cd031048e8010000010d0801c9030000a220457468657265756d0120457468657265756d141c50656e64696e670100990b040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000bd0b04000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e7452656365697074730000d10b0400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000d50b04000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b486173680101040595032c8000000000000000000000000000000000000000000000000000000000000000000001110801d1030001d90ba3dd0b042048436865636b4e6f6e5a65726f53656e646572e50b9c40436865636b5370656356657273696f6ee90b1038436865636b547856657273696f6eed0b1030436865636b47656e65736973f10b2c38436865636b4d6f7274616c697479f50b2c28436865636b4e6f6e6365fd0b9c2c436865636b576569676874010c9c604368617267655472616e73616374696f6e5061796d656e74050c9c0d0c" diff --git a/testworld/accounts_api_test.go b/testworld/accounts_api_test.go index 8a0f14b4e..e0bba8472 100644 --- a/testworld/accounts_api_test.go +++ b/testworld/accounts_api_test.go @@ -12,7 +12,7 @@ import ( "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/centrifuge/pod/config" "github.com/centrifuge/pod/crypto" - "github.com/centrifuge/pod/http/auth" + "github.com/centrifuge/pod/http/auth/token" "github.com/centrifuge/pod/http/coreapi" genericUtils "github.com/centrifuge/pod/testingutils/generic" "github.com/centrifuge/pod/testingutils/keyrings" @@ -42,7 +42,7 @@ func TestAccountsAPI_GenerateAccount(t *testing.T) { }, { Name: "Valid proxy type", - ProxyType: auth.PodAdminProxyType, + ProxyType: token.PodAdminProxyType, ExpectedStatusCode: http.StatusCreated, ExpectedAccount: true, }, @@ -158,7 +158,7 @@ func TestAccountsAPI_GetSelf(t *testing.T) { }, { Name: "Invalid proxy type", - ProxyType: auth.PodAdminProxyType, + ProxyType: token.PodAdminProxyType, ExpectedStatusCode: http.StatusForbidden, ExpectedAccount: false, }, @@ -219,7 +219,7 @@ func TestAccountsAPI_GetAccount(t *testing.T) { }, { Name: "Valid proxy type", - ProxyType: auth.PodAdminProxyType, + ProxyType: token.PodAdminProxyType, ExpectedStatusCode: http.StatusOK, ExpectedAccount: true, }, @@ -281,7 +281,7 @@ func TestAccountsAPI_GetAccounts(t *testing.T) { }, { Name: "Valid proxy type", - ProxyType: auth.PodAdminProxyType, + ProxyType: token.PodAdminProxyType, ExpectedStatusCode: http.StatusOK, ExpectedAccounts: true, }, diff --git a/testworld/investor_test.go b/testworld/investor_test.go new file mode 100644 index 000000000..412e024c0 --- /dev/null +++ b/testworld/investor_test.go @@ -0,0 +1,277 @@ +//go:build testworld + +package testworld + +import ( + "context" + "fmt" + "math/big" + "math/rand" + "net/http" + "testing" + "time" + + loansTypes "github.com/centrifuge/chain-custom-types/pkg/loans" + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/centrifuge/pod/http/auth/token" + nftv3 "github.com/centrifuge/pod/nft/v3" + "github.com/centrifuge/pod/pallets" + "github.com/centrifuge/pod/pallets/proxy" + "github.com/centrifuge/pod/pallets/utility" + "github.com/centrifuge/pod/testworld/park/behavior/client" + "github.com/centrifuge/pod/testworld/park/host" + "github.com/stretchr/testify/assert" +) + +func TestInvestorAPI_GetAsset(t *testing.T) { + t.Parallel() + + alice, err := controller.GetHost(host.Alice) + assert.NoError(t, err) + + // Create document + + aliceClient, err := controller.GetClientForHost(t, host.Alice) + assert.NoError(t, err) + + payload := genericCoreAPICreate(nil) + + res := aliceClient.CreateDocument("documents", http.StatusCreated, payload) + assert.Equal(t, client.GetDocumentStatus(res), "pending") + docID := client.GetDocumentIdentifier(res) + + // Create NFT collection + + collectionID := types.U64(rand.Int63()) + + payload = map[string]interface{}{ + "collection_id": collectionID, + } + + createClassRes := aliceClient.CreateNFTCollection(http.StatusAccepted, payload) + + jobID, err := client.GetJobID(createClassRes) + assert.NoError(t, err) + + err = aliceClient.WaitForJobCompletion(jobID) + assert.NoError(t, err) + + // Commit and mint NFT + + ipfsName := "ipfs_name" + ipfsDescription := "ipfs_description" + ipfsImage := "ipfs_image" + + ipfsMetadata := nftv3.IPFSMetadata{ + Name: ipfsName, + Description: ipfsDescription, + Image: ipfsImage, + DocumentAttributeKeys: nil, + } + + payload = map[string]interface{}{ + "collection_id": collectionID, + "document_id": docID, + "owner": alice.GetMainAccount().GetAccountID().ToHexString(), + "ipfs_metadata": ipfsMetadata, + "freeze_metadata": false, + } + + mintRes := aliceClient.CommitAndMintNFT(http.StatusAccepted, payload) + + jobID, err = client.GetJobID(mintRes) + assert.NoError(t, err) + + err = aliceClient.WaitForJobCompletion(jobID) + assert.NoError(t, err) + + // Get NFT item ID + + docVal := aliceClient.GetDocumentAndVerify(docID, nil, nil) + itemIDRaw := docVal.Path("$.header.nfts[0].item_id").String().Raw() + + i := new(big.Int) + bi, ok := i.SetString(itemIDRaw, 10) + assert.True(t, ok) + + itemID := types.NewU128(*bi) + + // Create a pool with the main account on the Alice host as admin. + + poolID := types.U64(rand.Int63()) + + registerPoolCall := pallets.GetRegisterPoolCallCreationFn( + alice.GetMainAccount().GetAccountID(), + poolID, + []pallets.TrancheInput{ + { + TrancheType: pallets.TrancheType{ + IsResidual: true, + }, + Seniority: types.NewOption[types.U32](0), + TrancheMetadata: pallets.TrancheMetadata{ + TokenName: []byte("CFG-TEST-1"), + TokenSymbol: []byte("CFGT1"), + }, + }, + { + TrancheType: pallets.TrancheType{ + IsNonResidual: true, + AsNonResidual: pallets.NonResidual{ + InterestRatePerSec: types.NewU128(*big.NewInt(1)), + MinRiskBuffer: 5, + }, + }, + Seniority: types.NewOption[types.U32](1), + TrancheMetadata: pallets.TrancheMetadata{ + TokenName: []byte("CFG-TEST-2"), + TokenSymbol: []byte("CFGT2"), + }, + }, + }, + pallets.CurrencyID{ + IsForeignAsset: true, + AsForeignAsset: types.U32(1), + }, + types.NewU128(*big.NewInt(rand.Int63())), + []byte("test"), + ) + + // Assign the Borrower permission to the main account on the Alice host. + + addBorrowerPermissionsCall := pallets.GetPermissionsCallCreationFn( + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsPoolAdmin: true}, + }, + alice.GetMainAccount().GetAccountID(), + pallets.PermissionScope{ + IsPool: true, + AsPool: poolID, + }, + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsBorrower: true}, + }, + ) + + // Assign the PODReadAccess permission to the POD auth proxy account on the Alice host. + + addPODReadPermissionsCall := pallets.GetPermissionsCallCreationFn( + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsPoolAdmin: true}, + }, + alice.GetMainAccount().GetPodAuthProxyAccountID(), + pallets.PermissionScope{ + IsPool: true, + AsPool: poolID, + }, + pallets.Role{ + IsPoolRole: true, + AsPoolRole: pallets.PoolRole{IsPODReadAccess: true}, + }, + ) + + // Create a loan using the NFT that was minted as collateral. + + loanCreateCall := pallets.GetCreateLoanCallCreationFn(poolID, loansTypes.LoanInfo{ + Schedule: loansTypes.RepaymentSchedule{ + Maturity: loansTypes.Maturity{ + IsFixed: true, + // 1 Year maturity date. + AsFixed: types.U64(time.Now().Add(356 * 24 * time.Hour).Unix()), + }, + InterestPayments: loansTypes.InterestPayments{ + IsNone: true, + }, + PayDownSchedule: loansTypes.PayDownSchedule{ + IsNone: true, + }, + }, + Collateral: loansTypes.Asset{ + CollectionID: collectionID, + ItemID: itemID, + }, + Pricing: loansTypes.Pricing{ + IsInternal: true, + AsInternal: loansTypes.InternalPricing{ + CollateralValue: types.NewU128(*big.NewInt(rand.Int63())), + ValuationMethod: loansTypes.ValuationMethod{ + IsOutstandingDebt: true, + }, + InterestRate: types.NewU128(*big.NewInt(0)), + MaxBorrowAmount: loansTypes.MaxBorrowAmount{ + IsUpToTotalBorrowed: true, + AsUpToTotalBorrowed: loansTypes.AdvanceRate{ + AdvanceRate: types.NewU128(*big.NewInt(11)), + }, + }, + }, + }, + Restrictions: loansTypes.LoanRestrictions{ + Borrows: loansTypes.BorrowRestrictions{ + IsNotWrittenOff: true, + }, + Repayments: loansTypes.RepayRestrictions{ + IsNone: true, + }, + }, + }) + + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute) + defer cancel() + + // Alice will execute a proxied batch call on behalf of the main account. + err = pallets.ExecuteWithTestClient( + ctx, + alice.GetServiceCtx(), + alice.GetOriginKeyringPair(), + proxy.WrapWithProxyCall( + alice.GetMainAccount().GetAccountID(), + types.NewOption(proxyType.Any), + utility.BatchCalls( + registerPoolCall, + addPODReadPermissionsCall, + addBorrowerPermissionsCall, + loanCreateCall, + ), + ), + ) + assert.NoError(t, err) + + // Use a PodAuth token and client since the POD auth proxy account ID is the one with the PODReadAccess permission. + podAuthToken, err := alice.GetMainAccount().GetJW3Token(proxyType.ProxyTypeName[proxyType.PodAuth]) + assert.NoError(t, err) + + testClient := client.New(t, controller.GetWebhookReceiver(), alice.GetAPIURL(), podAuthToken) + + // This should be the index of a newly created loan. + loanID := 1 + + assetRequest := &client.AssetRequest{ + PoolID: fmt.Sprintf("%d", poolID), + LoanID: fmt.Sprintf("%d", loanID), + AssetID: docID, + } + + assetRes := testClient.GetAsset(assetRequest, http.StatusOK) + assetID := client.GetDocumentIdentifier(assetRes) + + assert.Equal(t, docID, assetID) + + podOperationAuthToken, err := alice.GetMainAccount().GetJW3Token(proxyType.ProxyTypeName[proxyType.PodOperation]) + assert.NoError(t, err) + + testClient.SetAuthToken(podOperationAuthToken) + + _ = testClient.GetAsset(assetRequest, http.StatusForbidden) + + podAdminAuthToken, err := alice.GetMainAccount().GetJW3Token(token.PodAdminProxyType) + assert.NoError(t, err) + + testClient.SetAuthToken(podAdminAuthToken) + + _ = testClient.GetAsset(assetRequest, http.StatusForbidden) +} diff --git a/testworld/park/behavior/client/accounts.go b/testworld/park/behavior/client/accounts.go index 835f1e131..b908f566d 100644 --- a/testworld/park/behavior/client/accounts.go +++ b/testworld/park/behavior/client/accounts.go @@ -10,13 +10,13 @@ import ( ) func (c *Client) GetAccount(httpStatus int, identifier string) *httpexpect.Object { - resp := addCommonHeaders(c.expect.GET("/v2/accounts/"+identifier), c.jwtToken). + resp := addCommonHeaders(c.expect.GET("/v2/accounts/"+identifier), c.authToken). Expect().Status(httpStatus) return resp.JSON().Object() } func (c *Client) GetAllAccounts(httpStatus int) *httpexpect.Object { - resp := addCommonHeaders(c.expect.GET("/v2/accounts"), c.jwtToken). + resp := addCommonHeaders(c.expect.GET("/v2/accounts"), c.authToken). Expect().Status(httpStatus) return resp.JSON().Object() } @@ -25,13 +25,13 @@ func (c *Client) GenerateAccount( payload map[string]any, statusCode int, ) *httpexpect.Response { - req := addCommonHeaders(c.expect.POST("/v2/accounts/generate"), c.jwtToken).WithJSON(payload) + req := addCommonHeaders(c.expect.POST("/v2/accounts/generate"), c.authToken).WithJSON(payload) return req.Expect().Status(statusCode) } func (c *Client) GetSelf(statusCode int) *httpexpect.Response { - return addCommonHeaders(c.expect.GET("/v2/accounts/self"), c.jwtToken). + return addCommonHeaders(c.expect.GET("/v2/accounts/self"), c.authToken). Expect(). Status(statusCode) } @@ -43,7 +43,7 @@ func (c *Client) SignPayload( ) *httpexpect.Response { path := fmt.Sprintf("/v2/accounts/%s/sign", accountID.ToHexString()) - req := addCommonHeaders(c.expect.POST(path), c.jwtToken).WithJSON(payload) + req := addCommonHeaders(c.expect.POST(path), c.authToken).WithJSON(payload) return req.Expect().Status(httpStatus) } diff --git a/testworld/park/behavior/client/client.go b/testworld/park/behavior/client/client.go index ea2a45c77..147e67996 100644 --- a/testworld/park/behavior/client/client.go +++ b/testworld/park/behavior/client/client.go @@ -21,7 +21,15 @@ type Client struct { webhookReceiver *webhook.Receiver expect *httpexpect.Expect apiURL string - jwtToken string + authToken string +} + +func (c *Client) SetAuthToken(authToken string) { + if c == nil { + return + } + + c.authToken = authToken } func New( @@ -30,12 +38,10 @@ func New( apiURL string, jwtToken string, ) *Client { - expect := expect.CreateInsecureClientWithExpect(t, apiURL) - return &Client{ t, webhookReceiver, - expect, + expect.CreateInsecureClientWithExpect(t, apiURL), apiURL, jwtToken, } diff --git a/testworld/park/behavior/client/documents.go b/testworld/park/behavior/client/documents.go index 0d2899337..e6b6d268c 100644 --- a/testworld/park/behavior/client/documents.go +++ b/testworld/park/behavior/client/documents.go @@ -31,61 +31,61 @@ func (c *Client) CreateAndCommitDocument(payload map[string]interface{}) (string } func (c *Client) GetEntityRelationships(docIdentifier string) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/entities/"+docIdentifier+"/relationships"), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/entities/"+docIdentifier+"/relationships"), c.authToken). Expect().Status(http.StatusOK).JSON().NotNull() return objGet } func (c *Client) GetEntityWithRelation(relationshipID string) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/relationships/"+relationshipID+"/entity"), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/relationships/"+relationshipID+"/entity"), c.authToken). Expect().Status(http.StatusOK).JSON().NotNull() return objGet } func (c *Client) NonexistentEntityWithRelation(relationshipID string) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/relationships/"+relationshipID+"/entity"), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/relationships/"+relationshipID+"/entity"), c.authToken). Expect().Status(http.StatusNotFound).JSON().NotNull() return objGet } func (c *Client) NonExistingDocumentCheck(docIdentifier string) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docIdentifier+"/committed"), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docIdentifier+"/committed"), c.authToken). Expect().Status(http.StatusNotFound).JSON().NotNull() return objGet } func (c *Client) NonExistingDocumentVersionCheck(docID, versionID string) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/versions/"+versionID), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/versions/"+versionID), c.authToken). Expect().Status(http.StatusNotFound).JSON().NotNull() return objGet } func (c *Client) CreateDocument(documentType string, status int, payload map[string]interface{}) *httpexpect.Object { - obj := addCommonHeaders(c.expect.POST("/v2/"+documentType), c.jwtToken). + obj := addCommonHeaders(c.expect.POST("/v2/"+documentType), c.authToken). WithJSON(payload). Expect().Status(status).JSON().Object() return obj } func (c *Client) CloneDocument(documentType string, status int, payload map[string]interface{}) *httpexpect.Object { - obj := addCommonHeaders(c.expect.POST("/v2/"+documentType+"/"+payload["document_id"].(string)+"/clone"), c.jwtToken). + obj := addCommonHeaders(c.expect.POST("/v2/"+documentType+"/"+payload["document_id"].(string)+"/clone"), c.authToken). WithJSON(payload). Expect().Status(status).JSON().Object() return obj } func (c *Client) UpdateDocument(documentType string, status int, payload map[string]interface{}) *httpexpect.Object { - obj := addCommonHeaders(c.expect.PATCH("/v2/"+documentType+"/"+payload["document_id"].(string)), c.jwtToken). + obj := addCommonHeaders(c.expect.PATCH("/v2/"+documentType+"/"+payload["document_id"].(string)), c.authToken). WithJSON(payload). Expect().Status(status).JSON().Object() return obj } func (c *Client) RemoveCollaborators(docType string, status int, docID string, collabs ...string) *httpexpect.Object { - obj := addCommonHeaders(c.expect.DELETE("/v2/"+docType+"/"+docID+"/collaborators"), c.jwtToken). + obj := addCommonHeaders(c.expect.DELETE("/v2/"+docType+"/"+docID+"/collaborators"), c.authToken). WithJSON(map[string][]string{ "collaborators": collabs, }). @@ -94,13 +94,13 @@ func (c *Client) RemoveCollaborators(docType string, status int, docID string, c } func (c *Client) CommitDocument(documentType string, status int, docIdentifier string) *httpexpect.Object { - obj := addCommonHeaders(c.expect.POST("/v2/"+documentType+"/"+docIdentifier+"/commit"), c.jwtToken). + obj := addCommonHeaders(c.expect.POST("/v2/"+documentType+"/"+docIdentifier+"/commit"), c.authToken). Expect().Status(status).JSON().Object() return obj } func (c *Client) GetProof(httpStatus int, documentID string, payload map[string]interface{}) *httpexpect.Object { - resp := addCommonHeaders(c.expect.POST("/v2/documents/"+documentID+"/proofs"), c.jwtToken). + resp := addCommonHeaders(c.expect.POST("/v2/documents/"+documentID+"/proofs"), c.authToken). WithJSON(payload). Expect().Status(httpStatus) return resp.JSON().Object() @@ -112,7 +112,7 @@ func (c *Client) GetFingerprint(documentID string) string { } func (c *Client) GetDocumentAndVerify(documentID string, params map[string]interface{}, attrs coreapi.AttributeMapRequest) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+documentID+"/committed"), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+documentID+"/committed"), c.authToken). Expect().Status(http.StatusOK).JSON().NotNull() objGet.Path("$.header.document_id").String().Equal(documentID) @@ -149,7 +149,7 @@ func (c *Client) GetDocumentAndVerify(documentID string, params map[string]inter } func (c *Client) GetClonedDocumentAndCheck(docID string, docID1 string, params map[string]interface{}, attrs coreapi.AttributeMapRequest) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/committed"), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/committed"), c.authToken). Expect().Status(http.StatusOK).JSON().NotNull() objGet.Path("$.header.document_id").String().Equal(docID) @@ -157,7 +157,7 @@ func (c *Client) GetClonedDocumentAndCheck(docID string, docID1 string, params m objGet.Path("$.data." + k).String().Equal(v.(string)) } - objGet1 := addCommonHeaders(c.expect.GET("/v2/documents/"+docID1+"/committed"), c.jwtToken). + objGet1 := addCommonHeaders(c.expect.GET("/v2/documents/"+docID1+"/committed"), c.authToken). Expect().Status(http.StatusOK).JSON().NotNull() objGet1.Path("$.header.document_id").String().Equal(docID1) @@ -215,19 +215,19 @@ func (c *Client) GetClonedDocumentAndCheck(docID string, docID1 string, params m } func (c *Client) NonExistingGenericDocumentVersionCheck(documentID, versionID string) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+documentID+"/versions/"+versionID), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+documentID+"/versions/"+versionID), c.authToken). Expect().Status(404).JSON().NotNull() return objGet } func (c *Client) GetDocumentWithStatus(docID, status string, code int) *httpexpect.Value { - objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/"+status), c.jwtToken). + objGet := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/"+status), c.authToken). Expect().Status(code).JSON().NotNull() return objGet } func (c *Client) AddSignedAttribute(docID, label, payload, valType string) *httpexpect.Object { - objPost := addCommonHeaders(c.expect.POST("/v2/documents/"+docID+"/signed_attribute"), c.jwtToken).WithJSON(map[string]string{ + objPost := addCommonHeaders(c.expect.POST("/v2/documents/"+docID+"/signed_attribute"), c.authToken).WithJSON(map[string]string{ "label": label, "type": valType, "payload": payload, diff --git a/testworld/park/behavior/client/investor.go b/testworld/park/behavior/client/investor.go new file mode 100644 index 000000000..7c266195c --- /dev/null +++ b/testworld/park/behavior/client/investor.go @@ -0,0 +1,26 @@ +//go:build testworld + +package client + +import ( + "github.com/centrifuge/pod/http/coreapi" + "github.com/gavv/httpexpect" +) + +type AssetRequest struct { + PoolID string + LoanID string + AssetID string +} + +func (c *Client) GetAsset(assetRequest *AssetRequest, expectedStatus int) *httpexpect.Object { + req := c.expect.GET("/v3/investor/assets"). + WithQuery(coreapi.PoolIDQueryParam, assetRequest.PoolID). + WithQuery(coreapi.LoanIDQueryParam, assetRequest.LoanID). + WithQuery(coreapi.AssetIDQueryParam, assetRequest.AssetID) + + objGet := addCommonHeaders(req, c.authToken). + Expect().Status(expectedStatus).JSON().NotNull().Object() + + return objGet +} diff --git a/testworld/park/behavior/client/jobs.go b/testworld/park/behavior/client/jobs.go index 2e4158e06..15384dcfd 100644 --- a/testworld/park/behavior/client/jobs.go +++ b/testworld/park/behavior/client/jobs.go @@ -38,7 +38,7 @@ func (c *Client) WaitForJobCompletion(jobID string) error { } func (c *Client) getJobErrorMessage(jobID string) string { - resp := addCommonHeaders(c.expect.GET("/v2/jobs/"+jobID), c.jwtToken).Expect().Status(200).JSON().Object() + resp := addCommonHeaders(c.expect.GET("/v2/jobs/"+jobID), c.authToken).Expect().Status(200).JSON().Object() task := resp.Value("tasks").Array().Last().Object() message := task.Value("error").String().Raw() diff --git a/testworld/park/behavior/client/nfts.go b/testworld/park/behavior/client/nfts.go index 3b4f19cd6..8a36eec5c 100644 --- a/testworld/park/behavior/client/nfts.go +++ b/testworld/park/behavior/client/nfts.go @@ -10,7 +10,7 @@ import ( func (c *Client) CommitAndMintNFT(httpStatus int, payload map[string]interface{}) *httpexpect.Object { path := fmt.Sprintf("/v3/nfts/collections/%d/commit_and_mint", payload["collection_id"]) - resp := addCommonHeaders(c.expect.POST(path), c.jwtToken). + resp := addCommonHeaders(c.expect.POST(path), c.authToken). WithJSON(payload). Expect().Status(httpStatus) @@ -20,7 +20,7 @@ func (c *Client) CommitAndMintNFT(httpStatus int, payload map[string]interface{} func (c *Client) MintNFT(httpStatus int, payload map[string]interface{}) *httpexpect.Object { path := fmt.Sprintf("/v3/nfts/collections/%d/mint", payload["collection_id"]) - resp := addCommonHeaders(c.expect.POST(path), c.jwtToken). + resp := addCommonHeaders(c.expect.POST(path), c.authToken). WithJSON(payload). Expect().Status(httpStatus) @@ -35,7 +35,7 @@ func (c *Client) GetOwnerOfNFT(httpStatus int, payload map[string]interface{}) * payload["item_id"], ) - resp := addCommonHeaders(c.expect.GET(path), c.jwtToken). + resp := addCommonHeaders(c.expect.GET(path), c.authToken). Expect().Status(httpStatus) httpObj := resp.JSON().Object() @@ -49,7 +49,7 @@ func (c *Client) GetMetadataOfNFT(httpStatus int, payload map[string]interface{} payload["item_id"], ) - resp := addCommonHeaders(c.expect.GET(path), c.jwtToken). + resp := addCommonHeaders(c.expect.GET(path), c.authToken). Expect().Status(httpStatus) return resp.JSON().Object() @@ -63,14 +63,14 @@ func (c *Client) GetAttributeOfNFT(httpStatus int, payload map[string]interface{ payload["attribute_name"], ) - resp := addCommonHeaders(c.expect.GET(path), c.jwtToken). + resp := addCommonHeaders(c.expect.GET(path), c.authToken). Expect().Status(httpStatus) return resp.JSON().Object() } func (c *Client) CreateNFTCollection(httpStatus int, payload map[string]interface{}) *httpexpect.Object { - resp := addCommonHeaders(c.expect.POST("/v3/nfts/collections"), c.jwtToken). + resp := addCommonHeaders(c.expect.POST("/v3/nfts/collections"), c.authToken). WithJSON(payload). Expect().Status(httpStatus) diff --git a/testworld/park/behavior/client/roles.go b/testworld/park/behavior/client/roles.go index faa86eed0..3d627097c 100644 --- a/testworld/park/behavior/client/roles.go +++ b/testworld/park/behavior/client/roles.go @@ -12,13 +12,13 @@ import ( ) func (c *Client) GetRole(docID, roleID string, status int) *httpexpect.Object { - objPost := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/roles/"+roleID), c.jwtToken). + objPost := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/roles/"+roleID), c.authToken). Expect().Status(status).JSON().Object() return objPost } func (c *Client) AddRole(docID, roleID string, collaborators []string, status int) *httpexpect.Object { - objPost := addCommonHeaders(c.expect.POST("/v2/documents/"+docID+"/roles"), c.jwtToken).WithJSON(map[string]interface{}{ + objPost := addCommonHeaders(c.expect.POST("/v2/documents/"+docID+"/roles"), c.authToken).WithJSON(map[string]interface{}{ "key": roleID, "collaborators": collaborators, }).Expect().Status(status).JSON().Object() @@ -26,26 +26,26 @@ func (c *Client) AddRole(docID, roleID string, collaborators []string, status in } func (c *Client) UpdateRole(docID, roleID string, collaborators []string, status int) *httpexpect.Object { - objPost := addCommonHeaders(c.expect.PATCH("/v2/documents/"+docID+"/roles/"+roleID), c.jwtToken).WithJSON(map[string]interface{}{ + objPost := addCommonHeaders(c.expect.PATCH("/v2/documents/"+docID+"/roles/"+roleID), c.authToken).WithJSON(map[string]interface{}{ "collaborators": collaborators, }).Expect().Status(status).JSON().Object() return objPost } func (c *Client) AddTransitionRules(docID string, payload map[string][]map[string]interface{}, status int) *httpexpect.Object { - objPost := addCommonHeaders(c.expect.POST("/v2/documents/"+docID+"/transition_rules"), c.jwtToken).WithJSON( + objPost := addCommonHeaders(c.expect.POST("/v2/documents/"+docID+"/transition_rules"), c.authToken).WithJSON( payload).Expect().Status(status).JSON().Object() return objPost } func (c *Client) GetTransitionRule(docID, ruleID string, status int) *httpexpect.Object { - objPost := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/transition_rules/"+ruleID), c.jwtToken). + objPost := addCommonHeaders(c.expect.GET("/v2/documents/"+docID+"/transition_rules/"+ruleID), c.authToken). Expect().Status(status).JSON().Object() return objPost } func (c *Client) DeleteTransitionRule(docID, ruleID string, status int) *httpexpect.Response { - objPost := addCommonHeaders(c.expect.DELETE("/v2/documents/"+docID+"/transition_rules/"+ruleID), c.jwtToken). + objPost := addCommonHeaders(c.expect.DELETE("/v2/documents/"+docID+"/transition_rules/"+ruleID), c.authToken). Expect().Status(status) return objPost } diff --git a/testworld/park/behavior/controller.go b/testworld/park/behavior/controller.go index 4e5ec087b..c7da3e710 100644 --- a/testworld/park/behavior/controller.go +++ b/testworld/park/behavior/controller.go @@ -8,10 +8,12 @@ import ( "testing" "time" + "github.com/centrifuge/pod/pallets/utility" + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" podBootstrap "github.com/centrifuge/pod/bootstrap" "github.com/centrifuge/pod/bootstrap/bootstrappers/integration_test" - identityv2 "github.com/centrifuge/pod/identity/v2" + "github.com/centrifuge/pod/pallets" "github.com/centrifuge/pod/testworld/park/behavior/client" "github.com/centrifuge/pod/testworld/park/behavior/webhook" "github.com/centrifuge/pod/testworld/park/bootstrap" @@ -98,11 +100,11 @@ func (h *Controller) CreateRandomAccountOnHost(name host.Name) (*host.Account, e ctx, cancel := context.WithTimeout(context.Background(), accountCreationTimeout) defer cancel() - err = identityv2.ExecutePostAccountBootstrap( + err = pallets.ExecuteWithTestClient( ctx, testHost.GetServiceCtx(), testHost.GetOriginKeyringPair(), - postCreationCalls..., + utility.BatchCalls(postCreationCalls...), ) if err != nil { diff --git a/testworld/park/bootstrap/bootstrap.go b/testworld/park/bootstrap/bootstrap.go index 967cc3ff2..d8e58741d 100644 --- a/testworld/park/bootstrap/bootstrap.go +++ b/testworld/park/bootstrap/bootstrap.go @@ -7,10 +7,13 @@ import ( "fmt" "time" + "github.com/centrifuge/pod/pallets/utility" + + "github.com/centrifuge/pod/pallets" + proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" "github.com/centrifuge/go-substrate-rpc-client/v4/signature" "github.com/centrifuge/pod/centchain" - identityv2 "github.com/centrifuge/pod/identity/v2" "github.com/centrifuge/pod/testingutils/keyrings" "github.com/centrifuge/pod/testworld/park/factory" "github.com/centrifuge/pod/testworld/park/host" @@ -70,11 +73,11 @@ func CreateTestHosts(webhookURL string) (map[host.Name]*host.Host, error) { ctx, cancel := context.WithTimeout(context.Background(), postAccountBootstrapTimeout) defer cancel() - err = identityv2.ExecutePostAccountBootstrap( + err = pallets.ExecuteWithTestClient( ctx, hostControlUnit.GetServiceCtx(), testHostKrp, - postAccountBootstrapCalls..., + utility.BatchCalls(postAccountBootstrapCalls...), ) if err != nil { @@ -97,14 +100,14 @@ const ( func GetPostAccountCreationCalls(serviceCtx map[string]any, hostAccount *host.Account) ([]centchain.CallProviderFn, error) { postCreationCalls := []centchain.CallProviderFn{ - identityv2.GetBalanceTransferCallCreationFn(defaultBalance, hostAccount.GetAccountID().ToBytes()), + pallets.GetBalanceTransferCallCreationFn(defaultBalance, hostAccount.GetAccountID().ToBytes()), } postCreationCalls = append( postCreationCalls, - identityv2.GetAddProxyCallCreationFns( + pallets.GetAddProxyCallCreationFns( hostAccount.GetAccountID(), - identityv2.ProxyPairs{ + pallets.ProxyPairs{ { Delegate: hostAccount.GetPodOperatorAccountID(), ProxyType: proxyType.PodOperation, @@ -116,7 +119,7 @@ func GetPostAccountCreationCalls(serviceCtx map[string]any, hostAccount *host.Ac })..., ) - addKeysCall, err := identityv2.GetAddKeysCall(serviceCtx, hostAccount.GetAccount()) + addKeysCall, err := pallets.GetAddKeysCall(serviceCtx, hostAccount.GetAccount()) if err != nil { return nil, fmt.Errorf("couldn't get AddKeys call: %w", err) @@ -129,7 +132,7 @@ func GetPostAccountCreationCalls(serviceCtx map[string]any, hostAccount *host.Ac func getPostAccountBootstrapCalls(serviceCtx map[string]any, hostAccount *host.Account) ([]centchain.CallProviderFn, error) { postBootstrapCalls := []centchain.CallProviderFn{ - identityv2.GetBalanceTransferCallCreationFn(defaultBalance, hostAccount.GetPodOperatorAccountID().ToBytes()), + pallets.GetBalanceTransferCallCreationFn(defaultBalance, hostAccount.GetPodOperatorAccountID().ToBytes()), } postCreationCalls, err := GetPostAccountCreationCalls(serviceCtx, hostAccount) diff --git a/testworld/park/factory/host_account.go b/testworld/park/factory/host_account.go index 6d910b556..65730408c 100644 --- a/testworld/park/factory/host_account.go +++ b/testworld/park/factory/host_account.go @@ -5,10 +5,12 @@ package factory import ( "fmt" + v2 "github.com/centrifuge/pod/identity/v2" + "github.com/centrifuge/go-substrate-rpc-client/v4/signature" "github.com/centrifuge/pod/config" "github.com/centrifuge/pod/crypto" - identityv2 "github.com/centrifuge/pod/identity/v2" + "github.com/centrifuge/pod/pallets" genericUtils "github.com/centrifuge/pod/testingutils/generic" "github.com/centrifuge/pod/testworld/park/host" ) @@ -18,13 +20,13 @@ func CreateTestHostAccount( originKrp signature.KeyringPair, webhookURL string, ) (*host.Account, error) { - identity, err := identityv2.CreateAnonymousProxy(serviceCtx, originKrp) + identity, err := pallets.CreateAnonymousProxy(serviceCtx, originKrp) if err != nil { return nil, fmt.Errorf("couldn't get account ID: %w", err) } - acc, err := identityv2.CreateTestIdentity(serviceCtx, identity, webhookURL) + acc, err := v2.CreateTestIdentity(serviceCtx, identity, webhookURL) if err != nil { return nil, fmt.Errorf("couldn't create test account: %w", err) diff --git a/testworld/park/host/host_account.go b/testworld/park/host/host_account.go index af6486ee8..008784f56 100644 --- a/testworld/park/host/host_account.go +++ b/testworld/park/host/host_account.go @@ -5,12 +5,13 @@ package host import ( "fmt" + "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/go-substrate-rpc-client/v4/signature" proxyType "github.com/centrifuge/chain-custom-types/pkg/proxy" "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/centrifuge/pod/config" - "github.com/centrifuge/pod/http/auth" ) type Account struct { @@ -50,10 +51,18 @@ func (a *Account) GetAccountID() *types.AccountID { return a.acc.GetIdentity() } +func (a *Account) GetPodOperator() *SignerAccount { + return a.podOperator +} + func (a *Account) GetPodOperatorAccountID() *types.AccountID { return a.podOperator.AccountID } +func (a *Account) GetPodAuthProxy() *SignerAccount { + return a.podAuthProxy +} + func (a *Account) GetPodAuthProxyAccountID() *types.AccountID { return a.podAuthProxy.AccountID } @@ -69,7 +78,7 @@ func (a *Account) GetJW3Token(pt string) (string, error) { return "", fmt.Errorf("couldn't get token args: %w", err) } - return auth.CreateJW3Token( + return token.CreateJW3Token( tokenArgs.delegateAccountID, tokenArgs.delegatorAccountID, tokenArgs.secretSeed, @@ -102,7 +111,7 @@ func (a *Account) getTokenArgsForProxyType(pt string) (*tokenArgs, error) { secretSeed: a.podAuthProxy.SecretSeed, proxyType: pt, } - case auth.PodAdminProxyType: + case token.PodAdminProxyType: args = &tokenArgs{ delegateAccountID: a.podAdmin.AccountID, delegatorAccountID: a.podAdmin.AccountID, diff --git a/testworld/park/host/signer_account.go b/testworld/park/host/signer_account.go index 90f190cac..1008b05ef 100644 --- a/testworld/park/host/signer_account.go +++ b/testworld/park/host/signer_account.go @@ -5,10 +5,11 @@ package host import ( "fmt" + "github.com/centrifuge/pod/http/auth/token" + "github.com/centrifuge/go-substrate-rpc-client/v4/signature" "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/centrifuge/pod/crypto" - "github.com/centrifuge/pod/http/auth" "github.com/vedhavyas/go-subkey/v2" "github.com/vedhavyas/go-subkey/v2/sr25519" ) @@ -42,7 +43,7 @@ func GetSignerAccount(secretSeed string) (*SignerAccount, error) { return &SignerAccount{ AccountID: accountID, - Address: kp.SS58Address(auth.CentrifugeNetworkID), + Address: kp.SS58Address(token.CentrifugeNetworkID), SecretSeed: secretSeed, }, nil } diff --git a/validation/errors.go b/validation/errors.go index 9001d3361..d3f6fca94 100644 --- a/validation/errors.go +++ b/validation/errors.go @@ -6,4 +6,5 @@ const ( ErrMissingURL = errors.Error("missing URL") ErrInvalidURL = errors.Error("invalid URL") ErrInvalidAccountID = errors.Error("invalid account ID") + ErrInvalidU64 = errors.Error("invalid U64") ) diff --git a/validation/validation.go b/validation/validation.go index 2aa2212ce..f02ab47d2 100644 --- a/validation/validation.go +++ b/validation/validation.go @@ -55,11 +55,19 @@ var ( return nil } - AccountIDValidatorFn = func(accountID *types.AccountID) error { + AccountIDValidationFn = func(accountID *types.AccountID) error { if accountID == nil { return ErrInvalidAccountID } return nil } + + U64ValidationFn = func(v types.U64) error { + if v == 0 { + return ErrInvalidU64 + } + + return nil + } )