diff --git a/app/controllers/admin/dfc_product_imports_controller.rb b/app/controllers/admin/dfc_product_imports_controller.rb index 8dc580afbd..c1076ea775 100644 --- a/app/controllers/admin/dfc_product_imports_controller.rb +++ b/app/controllers/admin/dfc_product_imports_controller.rb @@ -20,7 +20,7 @@ module Admin catalog_url = params.require(:catalog_url) - json_catalog = DfcRequest.new(spree_current_user).call(catalog_url) + json_catalog = fetch_catalog(catalog_url) graph = DfcIo.import(json_catalog) # * First step: import all products for given enterprise. @@ -34,6 +34,16 @@ module Admin private + def fetch_catalog(url) + if url =~ /food-data-collaboration/ + fdc_json = FdcRequest.new(spree_current_user).call(url) + fdc_message = JSON.parse(fdc_json) + fdc_message["products"] + else + DfcRequest.new(spree_current_user).call(url) + end + end + # Most of this code is the same as in the DfcProvider::SuppliedProductsController. def import_product(subject, enterprise) return unless subject.is_a? DataFoodConsortium::Connector::SuppliedProduct diff --git a/spec/fixtures/vcr_cassettes/DFC_Product_Import/imports_from_a_FDC_catalog.yml b/spec/fixtures/vcr_cassettes/DFC_Product_Import/imports_from_a_FDC_catalog.yml new file mode 100644 index 0000000000..ad4af0b09b --- /dev/null +++ b/spec/fixtures/vcr_cassettes/DFC_Product_Import/imports_from_a_FDC_catalog.yml @@ -0,0 +1,206 @@ +--- +http_interactions: +- request: + method: post + uri: https://food-data-collaboration-produc-fe870152f634.herokuapp.com/fdc/products?shop=test-hodmedod.myshopify.com + body: + encoding: UTF-8 + string: '{"userId":"testdfc@protonmail.com","accessToken":""}' + headers: + Content-Type: + - application/json + Authorization: + - "" + User-Agent: + - Faraday v2.9.0 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 403 + message: Forbidden + headers: + Server: + - Cowboy + Report-To: + - '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1716531220&sid=812dcc77-0bd0-43b1-a5f1-b25750382959&s=GSiP%2FtCyGGyQZrjxJKzy4%2F8ZDbqeNOf8qWTTKv61%2FjQ%3D"}]}' + Reporting-Endpoints: + - heroku-nel=https://nel.heroku.com/reports?ts=1716531220&sid=812dcc77-0bd0-43b1-a5f1-b25750382959&s=GSiP%2FtCyGGyQZrjxJKzy4%2F8ZDbqeNOf8qWTTKv61%2FjQ%3D + Nel: + - '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}' + Connection: + - keep-alive + X-Powered-By: + - Express + Access-Control-Allow-Origin: + - "*" + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '62' + Etag: + - W/"3e-3yNPCMU4MDQmKmieGPWfDcA/0Eg" + Date: + - Fri, 24 May 2024 06:13:41 GMT + Via: + - 1.1 vegur + body: + encoding: UTF-8 + string: '{"message":"User access denied","error":"User not authorized"}' + recorded_at: Fri, 24 May 2024 06:13:41 GMT +- request: + method: get + uri: https://login.lescommuns.org/auth/realms/data-food-consortium/.well-known/openid-configuration + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - SWD 2.0.3 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 24 May 2024 06:13:42 GMT + Content-Type: + - application/json;charset=UTF-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Vary: + - Accept-Encoding + Set-Cookie: + - AUTH_SESSION_ID=1716531223.827.7041.811327|6055218c9898cae39f8ffd531999e49a; + Path=/; Secure; HttpOnly + Cache-Control: + - no-cache, must-revalidate, no-transform, no-store + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + body: + encoding: ASCII-8BIT + string: '{"issuer":"https://login.lescommuns.org/auth/realms/data-food-consortium","authorization_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/auth","token_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/token","introspection_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/token/introspect","userinfo_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/userinfo","end_session_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/logout","frontchannel_logout_session_supported":true,"frontchannel_logout_supported":true,"jwks_uri":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/certs","check_session_iframe":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/login-status-iframe.html","grant_types_supported":["authorization_code","implicit","refresh_token","password","client_credentials","urn:openid:params:grant-type:ciba","urn:ietf:params:oauth:grant-type:device_code"],"acr_values_supported":["0","1"],"response_types_supported":["code","none","id_token","token","id_token + token","code id_token","code token","code id_token token"],"subject_types_supported":["public","pairwise"],"id_token_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"id_token_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"id_token_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"userinfo_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512","none"],"userinfo_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"userinfo_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"request_object_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512","none"],"request_object_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"request_object_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"response_modes_supported":["query","fragment","form_post","query.jwt","fragment.jwt","form_post.jwt","jwt"],"registration_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/clients-registrations/openid-connect","token_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"token_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"introspection_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"introspection_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"authorization_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"authorization_encryption_alg_values_supported":["RSA-OAEP","RSA-OAEP-256","RSA1_5"],"authorization_encryption_enc_values_supported":["A256GCM","A192GCM","A128GCM","A128CBC-HS256","A192CBC-HS384","A256CBC-HS512"],"claims_supported":["aud","sub","iss","auth_time","name","given_name","family_name","preferred_username","email","acr"],"claim_types_supported":["normal"],"claims_parameter_supported":true,"scopes_supported":["openid","microprofile-jwt","phone","roles","profile","email","address","web-origins","acr","offline_access"],"request_parameter_supported":true,"request_uri_parameter_supported":true,"require_request_uri_registration":true,"code_challenge_methods_supported":["plain","S256"],"tls_client_certificate_bound_access_tokens":true,"revocation_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/revoke","revocation_endpoint_auth_methods_supported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt"],"revocation_endpoint_auth_signing_alg_values_supported":["PS384","ES384","RS384","HS256","HS512","ES256","RS256","HS384","ES512","PS256","PS512","RS512"],"backchannel_logout_supported":true,"backchannel_logout_session_supported":true,"device_authorization_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/auth/device","backchannel_token_delivery_modes_supported":["poll","ping"],"backchannel_authentication_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/ext/ciba/auth","backchannel_authentication_request_signing_alg_values_supported":["PS384","ES384","RS384","ES256","RS256","ES512","PS256","PS512","RS512"],"require_pushed_authorization_requests":false,"pushed_authorization_request_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/ext/par/request","mtls_endpoint_aliases":{"token_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/token","revocation_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/revoke","introspection_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/token/introspect","device_authorization_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/auth/device","registration_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/clients-registrations/openid-connect","userinfo_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/userinfo","pushed_authorization_request_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/ext/par/request","backchannel_authentication_endpoint":"https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/ext/ciba/auth"},"authorization_response_iss_parameter_supported":true}' + recorded_at: Fri, 24 May 2024 06:13:43 GMT +- request: + method: post + uri: https://login.lescommuns.org/auth/realms/data-food-consortium/protocol/openid-connect/token + body: + encoding: UTF-8 + string: grant_type=refresh_token&refresh_token= + headers: + User-Agent: + - Rack::OAuth2 (2.2.1) + Authorization: + - "" + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 24 May 2024 06:13:44 GMT + Content-Type: + - application/json + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Vary: + - Accept-Encoding + Set-Cookie: + - AUTH_SESSION_ID=1716531225.15.7041.192535|6055218c9898cae39f8ffd531999e49a; + Path=/; Secure; HttpOnly + Cache-Control: + - no-store + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + body: + encoding: ASCII-8BIT + string: '{"access_token":"","expires_in":1800,"refresh_expires_in":31357813,"refresh_token":"","token_type":"Bearer","id_token":"","not-before-policy":0,"session_state":"cfaa4a60-c2aa-4590-9fdf-a117f23d564f","scope":"openid + profile email"}' + recorded_at: Fri, 24 May 2024 06:13:44 GMT +- request: + method: post + uri: https://food-data-collaboration-produc-fe870152f634.herokuapp.com/fdc/products?shop=test-hodmedod.myshopify.com + body: + encoding: UTF-8 + string: '{"userId":"testdfc@protonmail.com","accessToken":""}' + headers: + Content-Type: + - application/json + Authorization: + - "" + User-Agent: + - Faraday v2.9.0 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - Cowboy + Report-To: + - '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1716531225&sid=812dcc77-0bd0-43b1-a5f1-b25750382959&s=zHpdjRNvPwW4u7pYofDRsdOcjztCveqnM3K9GcGjhMU%3D"}]}' + Reporting-Endpoints: + - heroku-nel=https://nel.heroku.com/reports?ts=1716531225&sid=812dcc77-0bd0-43b1-a5f1-b25750382959&s=zHpdjRNvPwW4u7pYofDRsdOcjztCveqnM3K9GcGjhMU%3D + Nel: + - '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}' + Connection: + - keep-alive + X-Powered-By: + - Express + Access-Control-Allow-Origin: + - "*" + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '41161' + Etag: + - W/"a0c9-f4oAeN9fidSaWKNQXG3R8vniAac" + Date: + - Fri, 24 May 2024 06:13:49 GMT + Via: + - 1.1 vegur + body: + encoding: ASCII-8BIT + string: !binary |- + eyJwcm9kdWN0cyI6IntcIkBjb250ZXh0XCI6XCJodHRwczovL3d3dy5kYXRhZm9vZGNvbnNvcnRpdW0ub3JnXCIsXCJAZ3JhcGhcIjpbe1wiQGlkXCI6XCJfOmIxXCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOktpbG9ncmFtXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMC40XCJ9LHtcIkBpZFwiOlwiXzpiMTBcIixcIkB0eXBlXCI6XCJkZmMtYjpQcmljZVwiLFwiZGZjLWI6VkFUcmF0ZVwiOlwiMFwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06RXVyb1wiLFwiZGZjLWI6dmFsdWVcIjpcIjIuODlcIn0se1wiQGlkXCI6XCJfOmIxMVwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpLaWxvZ3JhbVwiLFwiZGZjLWI6dmFsdWVcIjpcIjAuNFwifSx7XCJAaWRcIjpcIl86YjEyXCIsXCJAdHlwZVwiOlwiZGZjLWI6UHJpY2VcIixcImRmYy1iOlZBVHJhdGVcIjpcIjBcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOkV1cm9cIixcImRmYy1iOnZhbHVlXCI6XCIwLjk5XCJ9LHtcIkBpZFwiOlwiXzpiMTNcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06S2lsb2dyYW1cIixcImRmYy1iOnZhbHVlXCI6XCIwLjNcIn0se1wiQGlkXCI6XCJfOmIxNFwiLFwiQHR5cGVcIjpcImRmYy1iOlByaWNlXCIsXCJkZmMtYjpWQVRyYXRlXCI6XCIwXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpFdXJvXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMi45OVwifSx7XCJAaWRcIjpcIl86YjE1XCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOktpbG9ncmFtXCIsXCJkZmMtYjp2YWx1ZVwiOlwiNC44XCJ9LHtcIkBpZFwiOlwiXzpiMTZcIixcIkB0eXBlXCI6XCJkZmMtYjpQcmljZVwiLFwiZGZjLWI6VkFUcmF0ZVwiOlwiMFwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06RXVyb1wiLFwiZGZjLWI6dmFsdWVcIjpcIjE4Ljg1XCJ9LHtcIkBpZFwiOlwiXzpiMTdcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06S2lsb2dyYW1cIixcImRmYy1iOnZhbHVlXCI6XCI0LjhcIn0se1wiQGlkXCI6XCJfOmIxOFwiLFwiQHR5cGVcIjpcImRmYy1iOlByaWNlXCIsXCJkZmMtYjpWQVRyYXRlXCI6XCIwXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpFdXJvXCIsXCJkZmMtYjp2YWx1ZVwiOlwiNy40MlwifSx7XCJAaWRcIjpcIl86YjE5XCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOktpbG9ncmFtXCIsXCJkZmMtYjp2YWx1ZVwiOlwiNVwifSx7XCJAaWRcIjpcIl86YjJcIixcIkB0eXBlXCI6XCJkZmMtYjpQcmljZVwiLFwiZGZjLWI6VkFUcmF0ZVwiOlwiMFwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06RXVyb1wiLFwiZGZjLWI6dmFsdWVcIjpcIjIuMDlcIn0se1wiQGlkXCI6XCJfOmIyMFwiLFwiQHR5cGVcIjpcImRmYy1iOlByaWNlXCIsXCJkZmMtYjpWQVRyYXRlXCI6XCIwXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpFdXJvXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMTIuNjBcIn0se1wiQGlkXCI6XCJfOmIyMVwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpLaWxvZ3JhbVwiLFwiZGZjLWI6dmFsdWVcIjpcIjQuOFwifSx7XCJAaWRcIjpcIl86YjIyXCIsXCJAdHlwZVwiOlwiZGZjLWI6UHJpY2VcIixcImRmYy1iOlZBVHJhdGVcIjpcIjBcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOkV1cm9cIixcImRmYy1iOnZhbHVlXCI6XCI4Ljc2XCJ9LHtcIkBpZFwiOlwiXzpiMjNcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06S2lsb2dyYW1cIixcImRmYy1iOnZhbHVlXCI6XCIxLjA1XCJ9LHtcIkBpZFwiOlwiXzpiMjRcIixcIkB0eXBlXCI6XCJkZmMtYjpQcmljZVwiLFwiZGZjLWI6VkFUcmF0ZVwiOlwiMFwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06RXVyb1wiLFwiZGZjLWI6dmFsdWVcIjpcIjEzLjA1XCJ9LHtcIkBpZFwiOlwiXzpiMjVcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06S2lsb2dyYW1cIixcImRmYy1iOnZhbHVlXCI6XCI0LjhcIn0se1wiQGlkXCI6XCJfOmIyNlwiLFwiQHR5cGVcIjpcImRmYy1iOlByaWNlXCIsXCJkZmMtYjpWQVRyYXRlXCI6XCIwXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpFdXJvXCIsXCJkZmMtYjp2YWx1ZVwiOlwiNi43NlwifSx7XCJAaWRcIjpcIl86YjI3XCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOktpbG9ncmFtXCIsXCJkZmMtYjp2YWx1ZVwiOlwiM1wifSx7XCJAaWRcIjpcIl86YjI4XCIsXCJAdHlwZVwiOlwiZGZjLWI6UHJpY2VcIixcImRmYy1iOlZBVHJhdGVcIjpcIjBcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOkV1cm9cIixcImRmYy1iOnZhbHVlXCI6XCIxNS45MFwifSx7XCJAaWRcIjpcIl86YjI5XCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOlBpZWNlXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMTJcIn0se1wiQGlkXCI6XCJfOmIzXCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOktpbG9ncmFtXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMC40XCJ9LHtcIkBpZFwiOlwiXzpiMzBcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCIxXCJ9LHtcIkBpZFwiOlwiXzpiMzFcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCIxMlwifSx7XCJAaWRcIjpcIl86YjMyXCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOlBpZWNlXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMVwifSx7XCJAaWRcIjpcIl86YjMzXCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOlBpZWNlXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMTBcIn0se1wiQGlkXCI6XCJfOmIzNFwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpQaWVjZVwiLFwiZGZjLWI6dmFsdWVcIjpcIjFcIn0se1wiQGlkXCI6XCJfOmIzNVwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpQaWVjZVwiLFwiZGZjLWI6dmFsdWVcIjpcIjEyXCJ9LHtcIkBpZFwiOlwiXzpiMzZcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCIxXCJ9LHtcIkBpZFwiOlwiXzpiMzdcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCI2XCJ9LHtcIkBpZFwiOlwiXzpiMzhcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCIxXCJ9LHtcIkBpZFwiOlwiXzpiMzlcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCIxMlwifSx7XCJAaWRcIjpcIl86YjRcIixcIkB0eXBlXCI6XCJkZmMtYjpQcmljZVwiLFwiZGZjLWI6VkFUcmF0ZVwiOlwiMFwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06RXVyb1wiLFwiZGZjLWI6dmFsdWVcIjpcIjEuMTlcIn0se1wiQGlkXCI6XCJfOmI0MFwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpQaWVjZVwiLFwiZGZjLWI6dmFsdWVcIjpcIjFcIn0se1wiQGlkXCI6XCJfOmI0MVwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpQaWVjZVwiLFwiZGZjLWI6dmFsdWVcIjpcIjEwXCJ9LHtcIkBpZFwiOlwiXzpiNDJcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06UGllY2VcIixcImRmYy1iOnZhbHVlXCI6XCIxXCJ9LHtcIkBpZFwiOlwiXzpiNVwiLFwiQHR5cGVcIjpcImRmYy1iOlF1YW50aXRhdGl2ZVZhbHVlXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpLaWxvZ3JhbVwiLFwiZGZjLWI6dmFsdWVcIjpcIjAuNVwifSx7XCJAaWRcIjpcIl86YjZcIixcIkB0eXBlXCI6XCJkZmMtYjpQcmljZVwiLFwiZGZjLWI6VkFUcmF0ZVwiOlwiMFwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06RXVyb1wiLFwiZGZjLWI6dmFsdWVcIjpcIjEuNjlcIn0se1wiQGlkXCI6XCJfOmI3XCIsXCJAdHlwZVwiOlwiZGZjLWI6UXVhbnRpdGF0aXZlVmFsdWVcIixcImRmYy1iOmhhc1VuaXRcIjpcImRmYy1tOktpbG9ncmFtXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMC40XCJ9LHtcIkBpZFwiOlwiXzpiOFwiLFwiQHR5cGVcIjpcImRmYy1iOlByaWNlXCIsXCJkZmMtYjpWQVRyYXRlXCI6XCIwXCIsXCJkZmMtYjpoYXNVbml0XCI6XCJkZmMtbTpFdXJvXCIsXCJkZmMtYjp2YWx1ZVwiOlwiMS4zOVwifSx7XCJAaWRcIjpcIl86YjlcIixcIkB0eXBlXCI6XCJkZmMtYjpRdWFudGl0YXRpdmVWYWx1ZVwiLFwiZGZjLWI6aGFzVW5pdFwiOlwiZGZjLW06S2lsb2dyYW1cIixcImRmYy1iOnZhbHVlXCI6XCIwLjE3NVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY0Njc2MzVcIixcIkB0eXBlXCI6XCJkZmMtYjpTdXBwbGllZFByb2R1Y3RcIixcImRmYy1iOmRlc2NyaXB0aW9uXCI6XCI8dGFibGUgd2lkdGg9XFxcIjEwMCVcXFwiPlxcbjx0Ym9keT5cXG48dHIgc3R5bGU9XFxcImJvcmRlcjogMHB4O1xcXCI+XFxuPHRkIGJnY29sb3I9XFxcIiNkNmZiZWRcXFwiIHN0eWxlPVxcXCJjb2xvcjogIzAwMDAwMDsgYm9yZGVyOiAwcHg7XFxcIj48c3Ryb25nPlRoZXkncmUgYmFjayE8L3N0cm9uZz48L3RkPlxcbjwvdHI+XFxuPC90Ym9keT5cXG48L3RhYmxlPlxcbjxwPjxzdHJvbmc+VGhpbmsgYmFrZWQgYmVhbnMgYXJlIEJyaXRpc2g/IFRoZXkgYXJlIG5vdyEgV2UgdXNlIG9ubHkgQnJpdGlzaC1ncm93biBmYXZhIGJlYW5zIC0gQnJpdGFpbidzIG9yaWdpbmFsIGJlYW4sIGdyb3duIGhlcmUgc2luY2UgdGhlIElyb24gQWdlLiBPdXIgQmFrZWQgQnJpdGlzaCBCZWFucyBhcmUgZGVsaWNpb3VzbHkgZGlmZmVyZW50LCB3aXRoIGxhcmdlIG1lYXR5IGZhdmEgYmVhbnMgaW4gYSB0YXN0eSB0b21hdG8gc2F1Y2UuPC9zdHJvbmc+PC9wPlxcbjxwPjxzdHJvbmc+PGEgdGl0bGU9XFxcIldoYXQgYXJlIGZhdmEgYmVhbnM/IEFyZW4ndCB0aGV5IGp1c3QgYnJvYWQgYmVhbnM/XFxcIiBocmVmPVxcXCIvYmxvZ3MvbmV3cy93aGF0LWFyZS1mYXZhLWJlYW5zLWFyZS10aGV5LWp1c3QtYnJvYWQtYmVhbnNcXFwiIGRhdGEtbWNlLWZyYWdtZW50PVxcXCIxXFxcIiBkYXRhLW1jZS1ocmVmPVxcXCIvYmxvZ3MvbmV3cy93aGF0LWFyZS1mYXZhLWJlYW5zLWFyZS10aGV5LWp1c3QtYnJvYWQtYmVhbnNcXFwiPldoYXQgYXJlIGZhdmEgYmVhbnM/IEZpbmQgb3V0IGhlcmUuLi48L2E+PC9zdHJvbmc+PC9wPlxcbjwhLS0gc3BsaXQgLS0+PGgzPkNvbXBsZXRlIFByb2R1Y3QgRGV0YWlsczwvaDM+PHA+T3VyIEJha2VkIEJyaXRpc2ggQmVhbnMgYXJlIGNvb2tlZCBhbmQgcmVhZHkgdG8gZWF0LCBob3Qgb3IgY29sZC4gVGhleSdyZSBnb29kIHNlcnZlZCBvbiB0b2FzdCBidXQgYWxzbyBkZWxpY2lvdXMgYWRkZWQgdG8gc3Rld3MsIGN1cnJpZXMgb3IgY2Fzc2Vyb2xlcy4gT3IgZXZlbiBpbiBhIHBpZS48L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+Q29va2luZyBpbnN0cnVjdGlvbnM8L2g1PlxcbjxwPjxzdHJvbmc+Q29va2luZyBvbiB0aGUgSG9iPC9zdHJvbmc+PGJyPkVtcHR5IGNvbnRlbnRzIGludG8gc2F1Y2VwYW4uIEhlYXQgZ2VudGx5IGZvciA0LTUgbWludXRlcyB3aGlsZSBzdGlycmluZy4gRm9yIGJlc3QgZmxhdm91ciBkbyBub3QgYm9pbCBvciBvdmVyY29vay4gRG8gbm90IHJlaGVhdC48L3A+XFxuPHA+PHN0cm9uZz5NaWNyb3dhdmUgQ29va2luZzwvc3Ryb25nPjxicj5FbXB0eSBjb250ZW50cyBpbnRvIGEgbm9uLW1ldGFsbGljIGJvd2wgYW5kIGNvdmVyLiBIZWF0IGZvciAyIHRvIDMgbWludXRlcywgc3RpcnJpbmcgaGFsZndheS4gQ2hlY2sgdGhlIGZvb2QgaXMgaG90LCBzdGlyIHdlbGwgYW5kIHNlcnZlLiBEbyBub3QgcmVoZWF0LjwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5UbyBTdG9yZTwvaDU+XFxuPHA+U3RvcmUgaW4gYSBjb29sLCBkcnkgcGxhY2UuIE9uY2Ugb3BlbmVkLCB0cmFuc2ZlciBjb250ZW50cyB0byBhIG5vbi1tZXRhbGxpYyBjb250YWluZXIsIGNvdmVyIHJlZnJpZ2VyYXRlIGFuZCB1c2Ugd2l0aCAyIGRheXMuPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPkluZ3JlZGllbnRzPC9oNT5cXG48cD5GYXZhIEJlYW5zIChCcm9hZCBCZWFucykgKDQyJSksIFdhdGVyLCBUb21hdG8gUHVyZWUsIFN1Z2FyLCBNb2RpZmllZCBNYWl6ZSBTdGFyY2gsIFNhbHQsIEhlcmJzICZhbXA7IFNwaWNlcywgQ29uY2VudHJhdGVkIExlbW9uIEp1aWNlPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPkFsbGVyZ3kgaW5mb3JtYXRpb248L2g1PlxcbjxwPk5vIEFsbGVyZ2VuczwvcD5cXG48dGFibGUgd2lkdGg9XFxcIjEwMCVcXFwiPlxcbjx0Ym9keT5cXG48dHI+XFxuPHRkPjxzdHJvbmc+VHlwaWNhbCB2YWx1ZXM8L3N0cm9uZz48L3RkPlxcbjx0ZD48c3Ryb25nPlBlciAxMDBnPC9zdHJvbmc+PC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RW5lcmd5PC90ZD5cXG48dGQ+Mjkya0ogKDY5a2NhbCk8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5GYXQ8L3RkPlxcbjx0ZD4wLjRnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+b2Ygd2hpY2ggc2F0dXJhdGVzPC90ZD5cXG48dGQ+MC4xZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkNhcmJvaHlkcmF0ZTwvdGQ+XFxuPHRkPjEwLjFnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+b2Ygd2hpY2ggc3VnYXJzPC90ZD5cXG48dGQ+NC42ZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkZpYnJlPC90ZD5cXG48dGQ+NWc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5Qcm90ZWluPC90ZD5cXG48dGQ+NGc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5TYWx0PC90ZD5cXG48dGQ+MC42ZzwvdGQ+XFxuPC90cj5cXG48L3Rib2R5PlxcbjwvdGFibGU+PGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+TW9yZTwvaDU+XFxuPHA+RGVsaWNpb3VzLCBudXRyaXRpb3VzIGFuZCBnb29kIGZvciB0aGUgc29pbCwgZmF2YSBiZWFucyBhcmUgYSB2YXJpZXR5IG9mIGJyb2FkIGJlYW4sIFZpY2lhIGZhYmEsIGxlZnQgdG8gcmlwZW4gYW5kIGRyeSBiZWZvcmUgaGFydmVzdC4gVGhleeKAmXJlIGFsc28ga25vd24gYXMgZmllbGQgYmVhbnMsIGhvcnNlIGJlYW5zLCBXaW5kc29yIGJlYW5zIG9yIGZ1bC48L3A+XFxuPHA+U3VpdGFibGUgZm9yIHZlZ2FucyBhbmQgdmVnZXRhcmlhbnM8L3A+XFxuXCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMVwiLFwiZGZjLWI6aW1hZ2VcIjpcImh0dHBzOi8vY2RuLnNob3BpZnkuY29tL3MvZmlsZXMvMS8wNzMxLzg0ODMvNzkzOS9wcm9kdWN0cy9QYWNrLUNhbi1CYWtlZC1CZWFucy0xODAweDZfOTgzeDY1Nl81MTM3NThlNi0yNjE2LTQ2ODctYThiMi1iYTZkZGU4NjQ5MjMuanBnP3Y9MTY3Nzc2MDc3OFwiLFwiZGZjLWI6bmFtZVwiOlwiQmFrZWQgQnJpdGlzaCBCZWFucyAtIFJldGFpbCBjYW4sIDQwMGcgKGNhbilcIixcImRmYy1iOnJlZmVyZW5jZWRCeVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjQ2NzYzNS9jYXRhbG9nSXRlbVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY0Njc2MzUvY2F0YWxvZ0l0ZW1cIixcIkB0eXBlXCI6XCJkZmMtYjpDYXRhbG9nSXRlbVwiLFwiZGZjLWI6b2ZmZXJlZFRocm91Z2hcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY0Njc2MzUvb2ZmZXJcIixcImRmYy1iOnNrdVwiOlwiTkNCQi9UNFwiLFwiZGZjLWI6c3RvY2tMaW1pdGF0aW9uXCI6XCItMVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY0Njc2MzUvb2ZmZXJcIixcIkB0eXBlXCI6XCJkZmMtYjpPZmZlclwiLFwiZGZjLWI6aGFzUHJpY2VcIjp7XCJAaWRcIjpcIl86YjJcIn19LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjQ2NzYzNS9wbGFubmVkQ29uc3VtcHRpb25GbG93XCIsXCJAdHlwZVwiOlwiZGZjLWI6QXNQbGFubmVkQ29uc3VtcHRpb25GbG93XCIsXCJkZmMtYjpjb25zdW1lc1wiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjQ2NzYzNVwiLFwiZGZjLWI6aGFzUXVhbnRpdHlcIjpcIl86YjI5XCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjQ2NzYzNS9wbGFubmVkUHJvZHVjdGlvbkZsb3dcIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRQcm9kdWN0aW9uRmxvd1wiLFwiZGZjLWI6aGFzUXVhbnRpdHlcIjpcIl86YjMwXCIsXCJkZmMtYjpwcm9kdWNlc1wiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUwMDQwM1wifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY0Njc2MzUvdHJhbnNmb3JtYXRpb25cIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRUcmFuc2Zvcm1hdGlvblwiLFwiZGZjLWI6aGFzSW5jb21lXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NDY3NjM1L3BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcImRmYy1iOmhhc091dGNvbWVcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY0Njc2MzUvcGxhbm5lZFByb2R1Y3Rpb25GbG93XCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUwMDQwM1wiLFwiQHR5cGVcIjpcImRmYy1iOlN1cHBsaWVkUHJvZHVjdFwiLFwiZGZjLWI6ZGVzY3JpcHRpb25cIjpcIjx0YWJsZSB3aWR0aD1cXFwiMTAwJVxcXCI+XFxuPHRib2R5Plxcbjx0ciBzdHlsZT1cXFwiYm9yZGVyOiAwcHg7XFxcIj5cXG48dGQgYmdjb2xvcj1cXFwiI2Q2ZmJlZFxcXCIgc3R5bGU9XFxcImNvbG9yOiAjMDAwMDAwOyBib3JkZXI6IDBweDtcXFwiPjxzdHJvbmc+VGhleSdyZSBiYWNrITwvc3Ryb25nPjwvdGQ+XFxuPC90cj5cXG48L3Rib2R5PlxcbjwvdGFibGU+XFxuPHA+PHN0cm9uZz5UaGluayBiYWtlZCBiZWFucyBhcmUgQnJpdGlzaD8gVGhleSBhcmUgbm93ISBXZSB1c2Ugb25seSBCcml0aXNoLWdyb3duIGZhdmEgYmVhbnMgLSBCcml0YWluJ3Mgb3JpZ2luYWwgYmVhbiwgZ3Jvd24gaGVyZSBzaW5jZSB0aGUgSXJvbiBBZ2UuIE91ciBCYWtlZCBCcml0aXNoIEJlYW5zIGFyZSBkZWxpY2lvdXNseSBkaWZmZXJlbnQsIHdpdGggbGFyZ2UgbWVhdHkgZmF2YSBiZWFucyBpbiBhIHRhc3R5IHRvbWF0byBzYXVjZS48L3N0cm9uZz48L3A+XFxuPHA+PHN0cm9uZz48YSB0aXRsZT1cXFwiV2hhdCBhcmUgZmF2YSBiZWFucz8gQXJlbid0IHRoZXkganVzdCBicm9hZCBiZWFucz9cXFwiIGhyZWY9XFxcIi9ibG9ncy9uZXdzL3doYXQtYXJlLWZhdmEtYmVhbnMtYXJlLXRoZXktanVzdC1icm9hZC1iZWFuc1xcXCIgZGF0YS1tY2UtZnJhZ21lbnQ9XFxcIjFcXFwiIGRhdGEtbWNlLWhyZWY9XFxcIi9ibG9ncy9uZXdzL3doYXQtYXJlLWZhdmEtYmVhbnMtYXJlLXRoZXktanVzdC1icm9hZC1iZWFuc1xcXCI+V2hhdCBhcmUgZmF2YSBiZWFucz8gRmluZCBvdXQgaGVyZS4uLjwvYT48L3N0cm9uZz48L3A+XFxuPCEtLSBzcGxpdCAtLT48aDM+Q29tcGxldGUgUHJvZHVjdCBEZXRhaWxzPC9oMz48cD5PdXIgQmFrZWQgQnJpdGlzaCBCZWFucyBhcmUgY29va2VkIGFuZCByZWFkeSB0byBlYXQsIGhvdCBvciBjb2xkLiBUaGV5J3JlIGdvb2Qgc2VydmVkIG9uIHRvYXN0IGJ1dCBhbHNvIGRlbGljaW91cyBhZGRlZCB0byBzdGV3cywgY3VycmllcyBvciBjYXNzZXJvbGVzLiBPciBldmVuIGluIGEgcGllLjwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5Db29raW5nIGluc3RydWN0aW9uczwvaDU+XFxuPHA+PHN0cm9uZz5Db29raW5nIG9uIHRoZSBIb2I8L3N0cm9uZz48YnI+RW1wdHkgY29udGVudHMgaW50byBzYXVjZXBhbi4gSGVhdCBnZW50bHkgZm9yIDQtNSBtaW51dGVzIHdoaWxlIHN0aXJyaW5nLiBGb3IgYmVzdCBmbGF2b3VyIGRvIG5vdCBib2lsIG9yIG92ZXJjb29rLiBEbyBub3QgcmVoZWF0LjwvcD5cXG48cD48c3Ryb25nPk1pY3Jvd2F2ZSBDb29raW5nPC9zdHJvbmc+PGJyPkVtcHR5IGNvbnRlbnRzIGludG8gYSBub24tbWV0YWxsaWMgYm93bCBhbmQgY292ZXIuIEhlYXQgZm9yIDIgdG8gMyBtaW51dGVzLCBzdGlycmluZyBoYWxmd2F5LiBDaGVjayB0aGUgZm9vZCBpcyBob3QsIHN0aXIgd2VsbCBhbmQgc2VydmUuIERvIG5vdCByZWhlYXQuPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPlRvIFN0b3JlPC9oNT5cXG48cD5TdG9yZSBpbiBhIGNvb2wsIGRyeSBwbGFjZS4gT25jZSBvcGVuZWQsIHRyYW5zZmVyIGNvbnRlbnRzIHRvIGEgbm9uLW1ldGFsbGljIGNvbnRhaW5lciwgY292ZXIgcmVmcmlnZXJhdGUgYW5kIHVzZSB3aXRoIDIgZGF5cy48L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+SW5ncmVkaWVudHM8L2g1PlxcbjxwPkZhdmEgQmVhbnMgKEJyb2FkIEJlYW5zKSAoNDIlKSwgV2F0ZXIsIFRvbWF0byBQdXJlZSwgU3VnYXIsIE1vZGlmaWVkIE1haXplIFN0YXJjaCwgU2FsdCwgSGVyYnMgJmFtcDsgU3BpY2VzLCBDb25jZW50cmF0ZWQgTGVtb24gSnVpY2U8L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+QWxsZXJneSBpbmZvcm1hdGlvbjwvaDU+XFxuPHA+Tm8gQWxsZXJnZW5zPC9wPlxcbjx0YWJsZSB3aWR0aD1cXFwiMTAwJVxcXCI+XFxuPHRib2R5Plxcbjx0cj5cXG48dGQ+PHN0cm9uZz5UeXBpY2FsIHZhbHVlczwvc3Ryb25nPjwvdGQ+XFxuPHRkPjxzdHJvbmc+UGVyIDEwMGc8L3N0cm9uZz48L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5FbmVyZ3k8L3RkPlxcbjx0ZD4yOTJrSiAoNjlrY2FsKTwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkZhdDwvdGQ+XFxuPHRkPjAuNGc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5vZiB3aGljaCBzYXR1cmF0ZXM8L3RkPlxcbjx0ZD4wLjFnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+Q2FyYm9oeWRyYXRlPC90ZD5cXG48dGQ+MTAuMWc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5vZiB3aGljaCBzdWdhcnM8L3RkPlxcbjx0ZD40LjZnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RmlicmU8L3RkPlxcbjx0ZD41ZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPlByb3RlaW48L3RkPlxcbjx0ZD40ZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPlNhbHQ8L3RkPlxcbjx0ZD4wLjZnPC90ZD5cXG48L3RyPlxcbjwvdGJvZHk+XFxuPC90YWJsZT48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5Nb3JlPC9oNT5cXG48cD5EZWxpY2lvdXMsIG51dHJpdGlvdXMgYW5kIGdvb2QgZm9yIHRoZSBzb2lsLCBmYXZhIGJlYW5zIGFyZSBhIHZhcmlldHkgb2YgYnJvYWQgYmVhbiwgVmljaWEgZmFiYSwgbGVmdCB0byByaXBlbiBhbmQgZHJ5IGJlZm9yZSBoYXJ2ZXN0LiBUaGV54oCZcmUgYWxzbyBrbm93biBhcyBmaWVsZCBiZWFucywgaG9yc2UgYmVhbnMsIFdpbmRzb3IgYmVhbnMgb3IgZnVsLjwvcD5cXG48cD5TdWl0YWJsZSBmb3IgdmVnYW5zIGFuZCB2ZWdldGFyaWFuczwvcD5cXG5cIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIxNVwiLFwiZGZjLWI6aW1hZ2VcIjpcImh0dHBzOi8vY2RuLnNob3BpZnkuY29tL3MvZmlsZXMvMS8wNzMxLzg0ODMvNzkzOS9wcm9kdWN0cy9QYWNrLUNhbi1CYWtlZC1CZWFucy0xODAweDZfOTgzeDY1Nl81MTM3NThlNi0yNjE2LTQ2ODctYThiMi1iYTZkZGU4NjQ5MjMuanBnP3Y9MTY3Nzc2MDc3OFwiLFwiZGZjLWI6bmFtZVwiOlwiQmFrZWQgQnJpdGlzaCBCZWFucyAtIENhc2UsIDEyIHggNDAwZyAoY2FuKVwiLFwiZGZjLWI6cmVmZXJlbmNlZEJ5XCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTAwNDAzL2NhdGFsb2dJdGVtXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUwMDQwMy9jYXRhbG9nSXRlbVwiLFwiQHR5cGVcIjpcImRmYy1iOkNhdGFsb2dJdGVtXCIsXCJkZmMtYjpvZmZlcmVkVGhyb3VnaFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUwMDQwMy9vZmZlclwiLFwiZGZjLWI6c2t1XCI6XCJOQ0JCL0NEXCIsXCJkZmMtYjpzdG9ja0xpbWl0YXRpb25cIjpcIi0xXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUwMDQwMy9vZmZlclwiLFwiQHR5cGVcIjpcImRmYy1iOk9mZmVyXCIsXCJkZmMtYjpoYXNQcmljZVwiOntcIkBpZFwiOlwiXzpiMTZcIn19LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUzMzE3MVwiLFwiQHR5cGVcIjpcImRmYy1iOlN1cHBsaWVkUHJvZHVjdFwiLFwiZGZjLWI6ZGVzY3JpcHRpb25cIjpcIjx0YWJsZSB3aWR0aD1cXFwiMTAwJVxcXCI+XFxuPHRib2R5Plxcbjx0ciBzdHlsZT1cXFwiYm9yZGVyOiAwcHg7XFxcIj5cXG48dGQgYmdjb2xvcj1cXFwiI2Q2ZmJlZFxcXCIgc3R5bGU9XFxcImNvbG9yOiAjMDAwMDAwOyBib3JkZXI6IDBweDtcXFwiPjxzdHJvbmc+U29ycnksIHN0YW5kYXJkIGJhcmxleSBmbGFrZXMgYXJlIG5vIGxvbmdlciBhdmFpbGFibGUgYnV0IG91ciBkZWxpY2lvdXMgIE9yZ2FuaWMgTmFrZWQgQmFybGV5IEZsYWtlcyBhcmUgYmFjay48L3N0cm9uZz48L3RkPlxcbjwvdHI+XFxuPC90Ym9keT5cXG48L3RhYmxlPjxwPk91ciByaWNoIGFuZCBtYWx0eSBiYXJsZXkgZmxha2VzIGFyZSBhIHN0b3JlIGN1cGJvYXJkIHN0YXBsZS4gT3JnYW5pY2FsbHkgZ3Jvd24gYW5kIG1pbGxlZCBpbiB0aGUgVUssIHRoZXkgYWRkIHRleHR1cmUgdG8gZmxhcGphY2sgYW5kIGJpc2N1aXQgcmVjaXBlcywgb3IgdG8gbWFrZSBhIGhlYXJ0aWVyLCBydXN0aWMgcG9ycmlkZ2Ug4oCTIHRyeSBibGVuZGluZyB3aXRoIG91ciBvdGhlciBmbGFrZXM8L3A+XFxuPCEtLSBzcGxpdCAtLT48aDM+Q29tcGxldGUgUHJvZHVjdCBEZXRhaWxzPC9oMz48bGkgaWQ9XFxcInRhYjFcXFwiIGNsYXNzPVxcXCJhY3RpdmVcXFwiPlxcbjxwPkJhcmxleSBmbGFrZXMgYXJlIGdyZWF0IGFkZGVkIHRvIG11ZXNsaSBvciBncmFub2xhLCBvciB1c2VkIGluIGJha2luZyBhcyBhIHRvcHBpbmcgb3IgbWl4ZWQgaW50byBkb3VnaC4gRWF0IHRoZW0gYXMgYSBjZXJlYWwsIGJha2Ugd2l0aCB0aGVtLCBvciBhZGQgdGhlbSB0byBzb3VwcyBhbmQgc3Rld3MgdG8gdGhpY2tlbiwgYm9vc3QgdGhlaXIgbnV0cml0aW9uIGFuZCBhZGQgZmxhdm91ci48L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+Q29va2luZyBpbnN0cnVjdGlvbnM8L2g1PlxcbjxwPlRvIGVhdCBhcyBhIG11ZXNsaSwgY29tYmluZSB3aXRoIG90aGVyIGNlcmVhbCBmbGFrZXMgYW5kIGVuam95LiBPciB1c2UgYXMgYW4gb2F0IHN1YnN0aXR1dGUgaW4gYW55IGJha2luZyByZWNpcGUuPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPkluZ3JlZGllbnRzPC9oNT5cXG48cD48Yj5CYXJsZXnCoDwvYj5GbGFrZXM8L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+QWxsZXJneSBpbmZvcm1hdGlvbjwvaDU+XFxuPHA+Rm9yIGFsbGVyZ2VucywgaW5jbHVkaW5nIGNlcmVhbHMgY29udGFpbmluZyBnbHV0ZW4sIHNlZSBpbmdyZWRpZW50cyBpbiA8c3Ryb25nPmJvbGQ8L3N0cm9uZz48L3A+XFxuPHRhYmxlIHdpZHRoPVxcXCIxMDAlXFxcIj5cXG48dGJvZHk+XFxuPHRyPlxcbjx0ZD48c3Ryb25nPlR5cGljYWwgdmFsdWVzPC9zdHJvbmc+PC90ZD5cXG48dGQ+PHN0cm9uZz5QZXIgMTAwZzwvc3Ryb25nPjwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkVuZXJneTwvdGQ+XFxuPHRkPjEsNDAxa0ogKDMzMmtjYWwpPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RmF0PC90ZD5cXG48dGQ+Mi4xZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPm9mIHdoaWNoIHNhdHVyYXRlczwvdGQ+XFxuPHRkPjAuMGc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5DYXJib2h5ZHJhdGU8L3RkPlxcbjx0ZD41OC4zZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPm9mIHdoaWNoIHN1Z2FyczwvdGQ+XFxuPHRkPjEuN2c8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5GaWJyZTwvdGQ+XFxuPHRkPjE3LjNnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+UHJvdGVpbjwvdGQ+XFxuPHRkPjExLjRnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+U2FsdDwvdGQ+XFxuPHRkPjAuMGc8L3RkPlxcbjwvdHI+XFxuPC90Ym9keT5cXG48L3RhYmxlPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPk1vcmU8L2g1Plxcbjx1bD5cXG48bGk+U3VpdGFibGUgZm9yIHZlZ2FucyBhbmQgdmVnZXRhcmlhbnNcXG48L2xpPlxcbjxsaT5ObyBhcnRpZmljaWFsIGluZ3JlZGllbnRzXFxuPC9saT5cXG48bGk+R00gZnJlZVxcbjwvbGk+XFxuPGxpPkhpZ2ggRmlicmVcXG48L2xpPlxcbjwvdWw+XFxuPC9saT5cIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmI1XCIsXCJkZmMtYjppbWFnZVwiOlwiaHR0cHM6Ly9jZG4uc2hvcGlmeS5jb20vcy9maWxlcy8xLzA3MzEvODQ4My83OTM5L3Byb2R1Y3RzL0JhcmxleS1GbGFrZXMtMjQwMHgxNjAwX2MxMjE0MDdjLTZmZDItNDZjYS1hMTI0LWRiNWRmOTQ0MjM2OC5qcGc/dj0xNjc3NzYwNzgxXCIsXCJkZmMtYjpuYW1lXCI6XCJCYXJsZXkgRmxha2VzLCBPcmdhbmljIC0gUmV0YWlsIHBhY2ssIDUwMGdcIixcImRmYy1iOnJlZmVyZW5jZWRCeVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUzMzE3MS9jYXRhbG9nSXRlbVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY1MzMxNzEvY2F0YWxvZ0l0ZW1cIixcIkB0eXBlXCI6XCJkZmMtYjpDYXRhbG9nSXRlbVwiLFwiZGZjLWI6b2ZmZXJlZFRocm91Z2hcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY1MzMxNzEvb2ZmZXJcIixcImRmYy1iOnNrdVwiOlwiT0tCQVI1XCIsXCJkZmMtYjpzdG9ja0xpbWl0YXRpb25cIjpcIi0xXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUzMzE3MS9vZmZlclwiLFwiQHR5cGVcIjpcImRmYy1iOk9mZmVyXCIsXCJkZmMtYjpoYXNQcmljZVwiOntcIkBpZFwiOlwiXzpiNlwifX0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTMzMTcxL3BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcImRmYy1iOmNvbnN1bWVzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTMzMTcxXCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMzNcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTMzMTcxL3BsYW5uZWRQcm9kdWN0aW9uRmxvd1wiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFByb2R1Y3Rpb25GbG93XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMzRcIixcImRmYy1iOnByb2R1Y2VzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTY1OTM5XCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUzMzE3MS90cmFuc2Zvcm1hdGlvblwiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFRyYW5zZm9ybWF0aW9uXCIsXCJkZmMtYjpoYXNJbmNvbWVcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY1MzMxNzEvcGxhbm5lZENvbnN1bXB0aW9uRmxvd1wiLFwiZGZjLWI6aGFzT3V0Y29tZVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ2NjUzMzE3MS9wbGFubmVkUHJvZHVjdGlvbkZsb3dcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTY1OTM5XCIsXCJAdHlwZVwiOlwiZGZjLWI6U3VwcGxpZWRQcm9kdWN0XCIsXCJkZmMtYjpkZXNjcmlwdGlvblwiOlwiPHRhYmxlIHdpZHRoPVxcXCIxMDAlXFxcIj5cXG48dGJvZHk+XFxuPHRyIHN0eWxlPVxcXCJib3JkZXI6IDBweDtcXFwiPlxcbjx0ZCBiZ2NvbG9yPVxcXCIjZDZmYmVkXFxcIiBzdHlsZT1cXFwiY29sb3I6ICMwMDAwMDA7IGJvcmRlcjogMHB4O1xcXCI+PHN0cm9uZz5Tb3JyeSwgc3RhbmRhcmQgYmFybGV5IGZsYWtlcyBhcmUgbm8gbG9uZ2VyIGF2YWlsYWJsZSBidXQgb3VyIGRlbGljaW91cyAgT3JnYW5pYyBOYWtlZCBCYXJsZXkgRmxha2VzIGFyZSBiYWNrLjwvc3Ryb25nPjwvdGQ+XFxuPC90cj5cXG48L3Rib2R5PlxcbjwvdGFibGU+PHA+T3VyIHJpY2ggYW5kIG1hbHR5IGJhcmxleSBmbGFrZXMgYXJlIGEgc3RvcmUgY3VwYm9hcmQgc3RhcGxlLiBPcmdhbmljYWxseSBncm93biBhbmQgbWlsbGVkIGluIHRoZSBVSywgdGhleSBhZGQgdGV4dHVyZSB0byBmbGFwamFjayBhbmQgYmlzY3VpdCByZWNpcGVzLCBvciB0byBtYWtlIGEgaGVhcnRpZXIsIHJ1c3RpYyBwb3JyaWRnZSDigJMgdHJ5IGJsZW5kaW5nIHdpdGggb3VyIG90aGVyIGZsYWtlczwvcD5cXG48IS0tIHNwbGl0IC0tPjxoMz5Db21wbGV0ZSBQcm9kdWN0IERldGFpbHM8L2gzPjxsaSBpZD1cXFwidGFiMVxcXCIgY2xhc3M9XFxcImFjdGl2ZVxcXCI+XFxuPHA+QmFybGV5IGZsYWtlcyBhcmUgZ3JlYXQgYWRkZWQgdG8gbXVlc2xpIG9yIGdyYW5vbGEsIG9yIHVzZWQgaW4gYmFraW5nIGFzIGEgdG9wcGluZyBvciBtaXhlZCBpbnRvIGRvdWdoLiBFYXQgdGhlbSBhcyBhIGNlcmVhbCwgYmFrZSB3aXRoIHRoZW0sIG9yIGFkZCB0aGVtIHRvIHNvdXBzIGFuZCBzdGV3cyB0byB0aGlja2VuLCBib29zdCB0aGVpciBudXRyaXRpb24gYW5kIGFkZCBmbGF2b3VyLjwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5Db29raW5nIGluc3RydWN0aW9uczwvaDU+XFxuPHA+VG8gZWF0IGFzIGEgbXVlc2xpLCBjb21iaW5lIHdpdGggb3RoZXIgY2VyZWFsIGZsYWtlcyBhbmQgZW5qb3kuIE9yIHVzZSBhcyBhbiBvYXQgc3Vic3RpdHV0ZSBpbiBhbnkgYmFraW5nIHJlY2lwZS48L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+SW5ncmVkaWVudHM8L2g1PlxcbjxwPjxiPkJhcmxlecKgPC9iPkZsYWtlczwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5BbGxlcmd5IGluZm9ybWF0aW9uPC9oNT5cXG48cD5Gb3IgYWxsZXJnZW5zLCBpbmNsdWRpbmcgY2VyZWFscyBjb250YWluaW5nIGdsdXRlbiwgc2VlIGluZ3JlZGllbnRzIGluIDxzdHJvbmc+Ym9sZDwvc3Ryb25nPjwvcD5cXG48dGFibGUgd2lkdGg9XFxcIjEwMCVcXFwiPlxcbjx0Ym9keT5cXG48dHI+XFxuPHRkPjxzdHJvbmc+VHlwaWNhbCB2YWx1ZXM8L3N0cm9uZz48L3RkPlxcbjx0ZD48c3Ryb25nPlBlciAxMDBnPC9zdHJvbmc+PC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RW5lcmd5PC90ZD5cXG48dGQ+MSw0MDFrSiAoMzMya2NhbCk8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5GYXQ8L3RkPlxcbjx0ZD4yLjFnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+b2Ygd2hpY2ggc2F0dXJhdGVzPC90ZD5cXG48dGQ+MC4wZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkNhcmJvaHlkcmF0ZTwvdGQ+XFxuPHRkPjU4LjNnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+b2Ygd2hpY2ggc3VnYXJzPC90ZD5cXG48dGQ+MS43ZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkZpYnJlPC90ZD5cXG48dGQ+MTcuM2c8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5Qcm90ZWluPC90ZD5cXG48dGQ+MTEuNGc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5TYWx0PC90ZD5cXG48dGQ+MC4wZzwvdGQ+XFxuPC90cj5cXG48L3Rib2R5PlxcbjwvdGFibGU+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+TW9yZTwvaDU+XFxuPHVsPlxcbjxsaT5TdWl0YWJsZSBmb3IgdmVnYW5zIGFuZCB2ZWdldGFyaWFuc1xcbjwvbGk+XFxuPGxpPk5vIGFydGlmaWNpYWwgaW5ncmVkaWVudHNcXG48L2xpPlxcbjxsaT5HTSBmcmVlXFxuPC9saT5cXG48bGk+SGlnaCBGaWJyZVxcbjwvbGk+XFxuPC91bD5cXG48L2xpPlwiLFwiZGZjLWI6aGFzUXVhbnRpdHlcIjpcIl86YjE5XCIsXCJkZmMtYjppbWFnZVwiOlwiaHR0cHM6Ly9jZG4uc2hvcGlmeS5jb20vcy9maWxlcy8xLzA3MzEvODQ4My83OTM5L3Byb2R1Y3RzL0JhcmxleS1GbGFrZXMtMjQwMHgxNjAwX2MxMjE0MDdjLTZmZDItNDZjYS1hMTI0LWRiNWRmOTQ0MjM2OC5qcGc/dj0xNjc3NzYwNzgxXCIsXCJkZmMtYjpuYW1lXCI6XCJCYXJsZXkgRmxha2VzLCBPcmdhbmljIC0gU3RhbmRhcmQgY2FzZSwgMTAgeCA1MDBnXCIsXCJkZmMtYjpyZWZlcmVuY2VkQnlcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY1NjU5MzkvY2F0YWxvZ0l0ZW1cIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTY1OTM5L2NhdGFsb2dJdGVtXCIsXCJAdHlwZVwiOlwiZGZjLWI6Q2F0YWxvZ0l0ZW1cIixcImRmYy1iOm9mZmVyZWRUaHJvdWdoXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDY2NTY1OTM5L29mZmVyXCIsXCJkZmMtYjpza3VcIjpcIk9LQkFDWFwiLFwiZGZjLWI6c3RvY2tMaW1pdGF0aW9uXCI6XCItMVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NjY1NjU5Mzkvb2ZmZXJcIixcIkB0eXBlXCI6XCJkZmMtYjpPZmZlclwiLFwiZGZjLWI6aGFzUHJpY2VcIjp7XCJAaWRcIjpcIl86YjIwXCJ9fSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NzMzNDg5MTVcIixcIkB0eXBlXCI6XCJkZmMtYjpTdXBwbGllZFByb2R1Y3RcIixcImRmYy1iOmRlc2NyaXB0aW9uXCI6XCI8cD48c3Ryb25nPkZlcm1lbnRlZCB3aG9sZWdyYWluIG5ha2VkIGJhcmxleSzCoHRhc3R5IGFuZCBzdWNjdWxlbnTCoGdyYWlucyBvZiByaWNoIG1hbHR5IHVtYW1pIGZsYXZvdXIuPC9zdHJvbmc+PC9wPlxcbjxwPlRoZXNlIHdob2xlIGZlcm1lbnRlZCBiYXJsZXnCoGdyYWlucyBhcmUgcGFja2VkIHdpdGggZGVlcCBmbGF2b3VyIGFuZCBtYWtlIGEgZGVsaWNpb3VzIGFkZGl0aW9uIHRvIGJyZWFkLCByaXNvdHRvLCBzdGV3cywgc2FsYWRzIGFuZCBtb3JlLjwvcD5cXG48IS0tIHNwbGl0IC0tPjxoMz5Db21wbGV0ZSBQcm9kdWN0IERldGFpbHM8L2gzPlxcbjxwPkFkZCBpbnRlbnNlbHkgZmxhdm91cmVkIG1hbHR5IGFuZCBzdWNjdWxlbnQgZ3JhaW5zwqBmdWxsIG9mIHVtYW1pIHJpY2huZXNzIHRvIGJyZWFkcywgcmlzb3R0bywgc3Rld3MsIHNvdXBzLCBhbmQgZXZlbiBzYWxhZHMuPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPkNvb2tpbmcgaW5zdHJ1Y3Rpb25zPC9oNT5cXG48cD5BZGQgYWJvdXQgaGFsZiBhIHRlYXNwb29uIHBlciBzZXJ2aW5nIHRvIGFsbW9zdCBhbnkgZGlzaCBmb3IgYWRkZWQgZGVwdGgsIHVtYW1pIHJpY2huZXNzIGFuZCBtYWx0eSBmbGF2b3VyLjwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5UbyBzdG9yZTwvaDU+XFxuPHA+S2VlcCByZWZyaWdlcmF0ZWQgYW5kIHVzZSB3aXRoaW4gNCB3ZWVrcyBvZiBvcGVuaW5nLjwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5JbmdyZWRpZW50czwvaDU+XFxuPHA+TmFrZWQgPHN0cm9uZz5CYXJsZXk8L3N0cm9uZz4sIFdhdGVyLCA8c3Ryb25nPldoZWF0PC9zdHJvbmc+IEZsb3VyLCBTYWx0LCBMaXZlIEN1bHR1cmVzKjxicj4gKjxlbT5MYWN0b2JhY2lsbHVzIGRlbGJydWVja2lpPC9lbT4sIDxlbT5Bc3BlcmdpbGx1cyBzb2phZTwvZW0+LCA8ZW0+Wnlnb3NhY2NoYXJvbXljZXMgcm91eGlpPC9lbT48L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+QWxsZXJneSBpbmZvcm1hdGlvbjwvaDU+XFxuPHA+Q29udGFpbnMgPHN0cm9uZz5CYXJsZXkgKEdsdXRlbik8L3N0cm9uZz4sPHN0cm9uZz4gV2hlYXQgKEdsdXRlbik8L3N0cm9uZz48L3A+XFxuPHRhYmxlIHdpZHRoPVxcXCIxMDAlXFxcIj5cXG48dGJvZHk+XFxuPHRyPlxcbjx0ZD48c3Ryb25nPlR5cGljYWwgdmFsdWVzPC9zdHJvbmc+PC90ZD5cXG48dGQ+PHN0cm9uZz5QZXIgMTAwZzwvc3Ryb25nPjwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkVuZXJneTwvdGQ+XFxuPHRkPjUwMGtKICgxMTlrY2FsKTwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPkZhdDwvdGQ+XFxuPHRkPjEuN2c8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5vZiB3aGljaCBzYXR1cmF0ZXM8L3RkPlxcbjx0ZD4wLjVnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+Q2FyYm9oeWRyYXRlPC90ZD5cXG48dGQ+MTkuMWc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5vZiB3aGljaCBzdWdhcnM8L3RkPlxcbjx0ZD4yLjdnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RmlicmU8L3RkPlxcbjx0ZD41LjJnPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+UHJvdGVpbjwvdGQ+XFxuPHRkPjQuMmc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5TYWx0PC90ZD5cXG48dGQ+OC41ZzwvdGQ+XFxuPC90cj5cXG48L3Rib2R5PlxcbjwvdGFibGU+PGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+TW9yZTwvaDU+XFxuPHA+T3VyIEZlcm1lbnRlZCBXaG9sZWdyYWluIE5ha2VkIEJhcmxleSBpcyBmZXJtZW50ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIG1hbnkgc295YSBmZXJtZW50cyB1c2VkIGZvciBibGFjayBiZWFucywgYnV0IHVzaW5nwqBuYWtlZCBiYXJsZXkgZ3JhaW4gaW5zdGVhZCBvZiBzb3kgYmVhbnMuIEl0J3MgbWFkZSB3aXRoIGp1c3QgbmFrZWQgYmFybGV5IGdyYWlucywgd2F0ZXIgYW5kIHNhbHQsIGZlcm1lbnRlZCB3aXRoIGEgbGl2ZSBjdWx0dXJlIG9mIDxlbT5MYWN0b2JhY2lsbHVzIGRlbGJydWVja2lpPC9lbT4sIDxlbT5Bc3BlcmdpbGx1cyBzb2phZTwvZW0+IGFuZCA8ZW0+Wnlnb3NhY2NoYXJvbXljZXMgcm91eGlpPC9lbT4uPC9wPlxcbjxwPlN1aXRhYmxlIGZvciB2ZWdhbnMuPC9wPlxcbjxwPlBhY2tlZCBpbiByZWN5Y2xhYmxlIGdsYXNzIGphciB3aXRoIG1ldGFsIGxpZC48L3A+XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiOVwiLFwiZGZjLWI6aW1hZ2VcIjpcImh0dHBzOi8vY2RuLnNob3BpZnkuY29tL3MvZmlsZXMvMS8wNzMxLzg0ODMvNzkzOS9wcm9kdWN0cy9GZXJtZW50ZWQtV2hvbGVncmFpbi1OYWtlZC1CYXJsZXktU3Bvb24tMTYwMHgxMDAwX2Q2ZmVhMDkyLWZkZTQtNGE5OC1iZWM4LWJiM2NhMGExZmQ0ZC5qcGc/dj0xNjc3NzYwODYwXCIsXCJkZmMtYjpuYW1lXCI6XCJGZXJtZW50ZWQgTmFrZWQgQmFybGV5IC0gUmV0YWlsIGphciwgMTc1ZyAoamFyKVwiLFwiZGZjLWI6cmVmZXJlbmNlZEJ5XCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDczMzQ4OTE1L2NhdGFsb2dJdGVtXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM0ODkxNS9jYXRhbG9nSXRlbVwiLFwiQHR5cGVcIjpcImRmYy1iOkNhdGFsb2dJdGVtXCIsXCJkZmMtYjpvZmZlcmVkVGhyb3VnaFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM0ODkxNS9vZmZlclwiLFwiZGZjLWI6c2t1XCI6XCJOTU5CL0pGXCIsXCJkZmMtYjpzdG9ja0xpbWl0YXRpb25cIjpcIi0xXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM0ODkxNS9vZmZlclwiLFwiQHR5cGVcIjpcImRmYy1iOk9mZmVyXCIsXCJkZmMtYjpoYXNQcmljZVwiOntcIkBpZFwiOlwiXzpiMTBcIn19LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM0ODkxNS9wbGFubmVkQ29uc3VtcHRpb25GbG93XCIsXCJAdHlwZVwiOlwiZGZjLWI6QXNQbGFubmVkQ29uc3VtcHRpb25GbG93XCIsXCJkZmMtYjpjb25zdW1lc1wiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM0ODkxNVwiLFwiZGZjLWI6aGFzUXVhbnRpdHlcIjpcIl86YjM3XCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM0ODkxNS9wbGFubmVkUHJvZHVjdGlvbkZsb3dcIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRQcm9kdWN0aW9uRmxvd1wiLFwiZGZjLWI6aGFzUXVhbnRpdHlcIjpcIl86YjM4XCIsXCJkZmMtYjpwcm9kdWNlc1wiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM4MTY4M1wifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NzMzNDg5MTUvdHJhbnNmb3JtYXRpb25cIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRUcmFuc2Zvcm1hdGlvblwiLFwiZGZjLWI6aGFzSW5jb21lXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTE5NDczMzQ4OTE1L3BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcImRmYy1iOmhhc091dGNvbWVcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NzMzNDg5MTUvcGxhbm5lZFByb2R1Y3Rpb25GbG93XCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM4MTY4M1wiLFwiQHR5cGVcIjpcImRmYy1iOlN1cHBsaWVkUHJvZHVjdFwiLFwiZGZjLWI6ZGVzY3JpcHRpb25cIjpcIjxwPjxzdHJvbmc+RmVybWVudGVkIHdob2xlZ3JhaW4gbmFrZWQgYmFybGV5LMKgdGFzdHkgYW5kIHN1Y2N1bGVudMKgZ3JhaW5zIG9mIHJpY2ggbWFsdHkgdW1hbWkgZmxhdm91ci48L3N0cm9uZz48L3A+XFxuPHA+VGhlc2Ugd2hvbGUgZmVybWVudGVkIGJhcmxlecKgZ3JhaW5zIGFyZSBwYWNrZWQgd2l0aCBkZWVwIGZsYXZvdXIgYW5kIG1ha2UgYSBkZWxpY2lvdXMgYWRkaXRpb24gdG8gYnJlYWQsIHJpc290dG8sIHN0ZXdzLCBzYWxhZHMgYW5kIG1vcmUuPC9wPlxcbjwhLS0gc3BsaXQgLS0+PGgzPkNvbXBsZXRlIFByb2R1Y3QgRGV0YWlsczwvaDM+XFxuPHA+QWRkIGludGVuc2VseSBmbGF2b3VyZWQgbWFsdHkgYW5kIHN1Y2N1bGVudCBncmFpbnPCoGZ1bGwgb2YgdW1hbWkgcmljaG5lc3MgdG8gYnJlYWRzLCByaXNvdHRvLCBzdGV3cywgc291cHMsIGFuZCBldmVuIHNhbGFkcy48L3A+XFxuPGg1IGNsYXNzPVxcXCJwcm9kdWN0LWRldGFpbC10aXRsZVxcXCI+Q29va2luZyBpbnN0cnVjdGlvbnM8L2g1PlxcbjxwPkFkZCBhYm91dCBoYWxmIGEgdGVhc3Bvb24gcGVyIHNlcnZpbmcgdG8gYWxtb3N0IGFueSBkaXNoIGZvciBhZGRlZCBkZXB0aCwgdW1hbWkgcmljaG5lc3MgYW5kIG1hbHR5IGZsYXZvdXIuPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPlRvIHN0b3JlPC9oNT5cXG48cD5LZWVwIHJlZnJpZ2VyYXRlZCBhbmQgdXNlIHdpdGhpbiA0IHdlZWtzIG9mIG9wZW5pbmcuPC9wPlxcbjxoNSBjbGFzcz1cXFwicHJvZHVjdC1kZXRhaWwtdGl0bGVcXFwiPkluZ3JlZGllbnRzPC9oNT5cXG48cD5OYWtlZCA8c3Ryb25nPkJhcmxleTwvc3Ryb25nPiwgV2F0ZXIsIDxzdHJvbmc+V2hlYXQ8L3N0cm9uZz4gRmxvdXIsIFNhbHQsIExpdmUgQ3VsdHVyZXMqPGJyPiAqPGVtPkxhY3RvYmFjaWxsdXMgZGVsYnJ1ZWNraWk8L2VtPiwgPGVtPkFzcGVyZ2lsbHVzIHNvamFlPC9lbT4sIDxlbT5aeWdvc2FjY2hhcm9teWNlcyByb3V4aWk8L2VtPjwvcD5cXG48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5BbGxlcmd5IGluZm9ybWF0aW9uPC9oNT5cXG48cD5Db250YWlucyA8c3Ryb25nPkJhcmxleSAoR2x1dGVuKTwvc3Ryb25nPiw8c3Ryb25nPiBXaGVhdCAoR2x1dGVuKTwvc3Ryb25nPjwvcD5cXG48dGFibGUgd2lkdGg9XFxcIjEwMCVcXFwiPlxcbjx0Ym9keT5cXG48dHI+XFxuPHRkPjxzdHJvbmc+VHlwaWNhbCB2YWx1ZXM8L3N0cm9uZz48L3RkPlxcbjx0ZD48c3Ryb25nPlBlciAxMDBnPC9zdHJvbmc+PC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RW5lcmd5PC90ZD5cXG48dGQ+NTAwa0ogKDExOWtjYWwpPC90ZD5cXG48L3RyPlxcbjx0cj5cXG48dGQ+RmF0PC90ZD5cXG48dGQ+MS43ZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPm9mIHdoaWNoIHNhdHVyYXRlczwvdGQ+XFxuPHRkPjAuNWc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5DYXJib2h5ZHJhdGU8L3RkPlxcbjx0ZD4xOS4xZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPm9mIHdoaWNoIHN1Z2FyczwvdGQ+XFxuPHRkPjIuN2c8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5GaWJyZTwvdGQ+XFxuPHRkPjUuMmc8L3RkPlxcbjwvdHI+XFxuPHRyPlxcbjx0ZD5Qcm90ZWluPC90ZD5cXG48dGQ+NC4yZzwvdGQ+XFxuPC90cj5cXG48dHI+XFxuPHRkPlNhbHQ8L3RkPlxcbjx0ZD44LjVnPC90ZD5cXG48L3RyPlxcbjwvdGJvZHk+XFxuPC90YWJsZT48aDUgY2xhc3M9XFxcInByb2R1Y3QtZGV0YWlsLXRpdGxlXFxcIj5Nb3JlPC9oNT5cXG48cD5PdXIgRmVybWVudGVkIFdob2xlZ3JhaW4gTmFrZWQgQmFybGV5IGlzIGZlcm1lbnRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgbWFueSBzb3lhIGZlcm1lbnRzIHVzZWQgZm9yIGJsYWNrIGJlYW5zLCBidXQgdXNpbmfCoG5ha2VkIGJhcmxleSBncmFpbiBpbnN0ZWFkIG9mIHNveSBiZWFucy4gSXQncyBtYWRlIHdpdGgganVzdCBuYWtlZCBiYXJsZXkgZ3JhaW5zLCB3YXRlciBhbmQgc2FsdCwgZmVybWVudGVkIHdpdGggYSBsaXZlIGN1bHR1cmUgb2YgPGVtPkxhY3RvYmFjaWxsdXMgZGVsYnJ1ZWNraWk8L2VtPiwgPGVtPkFzcGVyZ2lsbHVzIHNvamFlPC9lbT4gYW5kIDxlbT5aeWdvc2FjY2hhcm9teWNlcyByb3V4aWk8L2VtPi48L3A+XFxuPHA+U3VpdGFibGUgZm9yIHZlZ2Fucy48L3A+XFxuPHA+UGFja2VkIGluIHJlY3ljbGFibGUgZ2xhc3MgamFyIHdpdGggbWV0YWwgbGlkLjwvcD5cIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIyM1wiLFwiZGZjLWI6aW1hZ2VcIjpcImh0dHBzOi8vY2RuLnNob3BpZnkuY29tL3MvZmlsZXMvMS8wNzMxLzg0ODMvNzkzOS9wcm9kdWN0cy9GZXJtZW50ZWQtV2hvbGVncmFpbi1OYWtlZC1CYXJsZXktU3Bvb24tMTYwMHgxMDAwX2Q2ZmVhMDkyLWZkZTQtNGE5OC1iZWM4LWJiM2NhMGExZmQ0ZC5qcGc/dj0xNjc3NzYwODYwXCIsXCJkZmMtYjpuYW1lXCI6XCJGZXJtZW50ZWQgTmFrZWQgQmFybGV5IC0gQ2FzZSwgNiB4IDE3NWcgKGphcilcIixcImRmYy1iOnJlZmVyZW5jZWRCeVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUxOTQ3MzM4MTY4My9jYXRhbG9nSXRlbVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NzMzODE2ODMvY2F0YWxvZ0l0ZW1cIixcIkB0eXBlXCI6XCJkZmMtYjpDYXRhbG9nSXRlbVwiLFwiZGZjLWI6b2ZmZXJlZFRocm91Z2hcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NzMzODE2ODMvb2ZmZXJcIixcImRmYy1iOnNrdVwiOlwiTk1OQi9DNlwiLFwiZGZjLWI6c3RvY2tMaW1pdGF0aW9uXCI6XCItMVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MTk0NzMzODE2ODMvb2ZmZXJcIixcIkB0eXBlXCI6XCJkZmMtYjpPZmZlclwiLFwiZGZjLWI6aGFzUHJpY2VcIjp7XCJAaWRcIjpcIl86YjI0XCJ9fSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2MjcyNDQ4NTFcIixcIkB0eXBlXCI6XCJkZmMtYjpTdXBwbGllZFByb2R1Y3RcIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIxN1wiLFwiZGZjLWI6aW1hZ2VcIjpcImh0dHBzOi8vY2RuLnNob3BpZnkuY29tL3MvZmlsZXMvMS8wNzMxLzg0ODMvNzkzOS9wcm9kdWN0cy9QYWNrLUNhbi1CYWtlZC1CZWFucy0xODAweDZfYTRkNTg0NTktYmY1Mi00OGE5LWJhZTctODA3ZjQwMzViODdmLmpwZz92PTE2Nzc3NjA3NzdcIixcImRmYy1iOm5hbWVcIjpcIkJha2VkIEJyaXRpc2ggQmVhbnMgKFRvTCkgLSBDYXNlIC0gMTIgeCA0MDBnIGNhbnNcIixcImRmYy1iOnJlZmVyZW5jZWRCeVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI0NDg1MS9jYXRhbG9nSXRlbVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2MjcyNDQ4NTEvY2F0YWxvZ0l0ZW1cIixcIkB0eXBlXCI6XCJkZmMtYjpDYXRhbG9nSXRlbVwiLFwiZGZjLWI6b2ZmZXJlZFRocm91Z2hcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2MjcyNDQ4NTEvb2ZmZXJcIixcImRmYy1iOnNrdVwiOlwiTkNCQkNEXCIsXCJkZmMtYjpzdG9ja0xpbWl0YXRpb25cIjpcIi0xXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI0NDg1MS9vZmZlclwiLFwiQHR5cGVcIjpcImRmYy1iOk9mZmVyXCIsXCJkZmMtYjpoYXNQcmljZVwiOntcIkBpZFwiOlwiXzpiMThcIn19LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI3NzYxOVwiLFwiQHR5cGVcIjpcImRmYy1iOlN1cHBsaWVkUHJvZHVjdFwiLFwiZGZjLWI6aGFzUXVhbnRpdHlcIjpcIl86YjNcIixcImRmYy1iOmltYWdlXCI6XCJodHRwczovL2Nkbi5zaG9waWZ5LmNvbS9zL2ZpbGVzLzEvMDczMS84NDgzLzc5MzkvcHJvZHVjdHMvUGFjay1DYW4tQmFrZWQtQmVhbnMtMTgwMHg2X2E0ZDU4NDU5LWJmNTItNDhhOS1iYWU3LTgwN2Y0MDM1Yjg3Zi5qcGc/dj0xNjc3NzYwNzc3XCIsXCJkZmMtYjpuYW1lXCI6XCJCYWtlZCBCcml0aXNoIEJlYW5zIChUb0wpIC0gU2luZ2xlIC0gNDAwZyBjYW5cIixcImRmYy1iOnJlZmVyZW5jZWRCeVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI3NzYxOS9jYXRhbG9nSXRlbVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2MjcyNzc2MTkvY2F0YWxvZ0l0ZW1cIixcIkB0eXBlXCI6XCJkZmMtYjpDYXRhbG9nSXRlbVwiLFwiZGZjLWI6b2ZmZXJlZFRocm91Z2hcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2MjcyNzc2MTkvb2ZmZXJcIixcImRmYy1iOnNrdVwiOlwiTkNCQlQ0XCIsXCJkZmMtYjpzdG9ja0xpbWl0YXRpb25cIjpcIjIwXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI3NzYxOS9vZmZlclwiLFwiQHR5cGVcIjpcImRmYy1iOk9mZmVyXCIsXCJkZmMtYjpoYXNQcmljZVwiOntcIkBpZFwiOlwiXzpiNFwifX0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI3Mjc3NjE5L3BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcImRmYy1iOmNvbnN1bWVzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI3Mjc3NjE5XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMzFcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI3Mjc3NjE5L3BsYW5uZWRQcm9kdWN0aW9uRmxvd1wiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFByb2R1Y3Rpb25GbG93XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMzJcIixcImRmYy1iOnByb2R1Y2VzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI3MjQ0ODUxXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI3NzYxOS90cmFuc2Zvcm1hdGlvblwiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFRyYW5zZm9ybWF0aW9uXCIsXCJkZmMtYjpoYXNJbmNvbWVcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2MjcyNzc2MTkvcGxhbm5lZENvbnN1bXB0aW9uRmxvd1wiLFwiZGZjLWI6aGFzT3V0Y29tZVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyNzI3NzYxOS9wbGFubmVkUHJvZHVjdGlvbkZsb3dcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4Nzg0OTQ3XCIsXCJAdHlwZVwiOlwiZGZjLWI6U3VwcGxpZWRQcm9kdWN0XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMjVcIixcImRmYy1iOmltYWdlXCI6XCJodHRwczovL2Nkbi5zaG9waWZ5LmNvbS9zL2ZpbGVzLzEvMDczMS84NDgzLzc5MzkvcHJvZHVjdHMvV2hvbGUtRmF2YS1CZWFucy1PcmdhbmljLUNhbm5lZF9mY2I2NGZkNy04Y2EzLTQ2NWEtOGY1Ni00NDNjZjI4ZTBiNzEuanBnP3Y9MTY3Nzc2MDk3N1wiLFwiZGZjLWI6bmFtZVwiOlwiT3JnYW5pYyBXaG9sZSBGYXZhIEJlYW5zIGluIFdhdGVyIChUb0wpIC0gQ2FzZSAtIDEyIHggNDAwZyBjYW5zXCIsXCJkZmMtYjpyZWZlcmVuY2VkQnlcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2Mjg3ODQ5NDcvY2F0YWxvZ0l0ZW1cIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4Nzg0OTQ3L2NhdGFsb2dJdGVtXCIsXCJAdHlwZVwiOlwiZGZjLWI6Q2F0YWxvZ0l0ZW1cIixcImRmYy1iOm9mZmVyZWRUaHJvdWdoXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4Nzg0OTQ3L29mZmVyXCIsXCJkZmMtYjpza3VcIjpcIk9DRkJDRFwiLFwiZGZjLWI6c3RvY2tMaW1pdGF0aW9uXCI6XCItMVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2Mjg3ODQ5NDcvb2ZmZXJcIixcIkB0eXBlXCI6XCJkZmMtYjpPZmZlclwiLFwiZGZjLWI6aGFzUHJpY2VcIjp7XCJAaWRcIjpcIl86YjI2XCJ9fSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2Mjg4MTc3MTVcIixcIkB0eXBlXCI6XCJkZmMtYjpTdXBwbGllZFByb2R1Y3RcIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIxMVwiLFwiZGZjLWI6aW1hZ2VcIjpcImh0dHBzOi8vY2RuLnNob3BpZnkuY29tL3MvZmlsZXMvMS8wNzMxLzg0ODMvNzkzOS9wcm9kdWN0cy9XaG9sZS1GYXZhLUJlYW5zLU9yZ2FuaWMtQ2FubmVkX2ZjYjY0ZmQ3LThjYTMtNDY1YS04ZjU2LTQ0M2NmMjhlMGI3MS5qcGc/dj0xNjc3NzYwOTc3XCIsXCJkZmMtYjpuYW1lXCI6XCJPcmdhbmljIFdob2xlIEZhdmEgQmVhbnMgaW4gV2F0ZXIgKFRvTCkgLSBTaW5nbGUgLSA0MDBnIGNhblwiLFwiZGZjLWI6cmVmZXJlbmNlZEJ5XCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4ODE3NzE1L2NhdGFsb2dJdGVtXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyODgxNzcxNS9jYXRhbG9nSXRlbVwiLFwiQHR5cGVcIjpcImRmYy1iOkNhdGFsb2dJdGVtXCIsXCJkZmMtYjpvZmZlcmVkVGhyb3VnaFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyODgxNzcxNS9vZmZlclwiLFwiZGZjLWI6c2t1XCI6XCJPQ0ZCVDRcIixcImRmYy1iOnN0b2NrTGltaXRhdGlvblwiOlwiLTFcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4ODE3NzE1L29mZmVyXCIsXCJAdHlwZVwiOlwiZGZjLWI6T2ZmZXJcIixcImRmYy1iOmhhc1ByaWNlXCI6e1wiQGlkXCI6XCJfOmIxMlwifX0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4ODE3NzE1L3BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcImRmYy1iOmNvbnN1bWVzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4ODE3NzE1XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMzlcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4ODE3NzE1L3BsYW5uZWRQcm9kdWN0aW9uRmxvd1wiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFByb2R1Y3Rpb25GbG93XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiNDBcIixcImRmYy1iOnByb2R1Y2VzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjI4Nzg0OTQ3XCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyODgxNzcxNS90cmFuc2Zvcm1hdGlvblwiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFRyYW5zZm9ybWF0aW9uXCIsXCJkZmMtYjpoYXNJbmNvbWVcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2Mjg4MTc3MTUvcGxhbm5lZENvbnN1bXB0aW9uRmxvd1wiLFwiZGZjLWI6aGFzT3V0Y29tZVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTYyODgxNzcxNS9wbGFubmVkUHJvZHVjdGlvbkZsb3dcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDQ5MDc1XCIsXCJAdHlwZVwiOlwiZGZjLWI6U3VwcGxpZWRQcm9kdWN0XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiN1wiLFwiZGZjLWI6bmFtZVwiOlwiQ2FybGluIFBlYXMgaW4gV2F0ZXIsIE9yZ2FuaWMgKERJU1RSSUJVVE9SKSAtIFJldGFpbCBjYW4gKDQwMGcgY2FuKVwiLFwiZGZjLWI6cmVmZXJlbmNlZEJ5XCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDQ5MDc1L2NhdGFsb2dJdGVtXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY1NDA0OTA3NS9jYXRhbG9nSXRlbVwiLFwiQHR5cGVcIjpcImRmYy1iOkNhdGFsb2dJdGVtXCIsXCJkZmMtYjpvZmZlcmVkVGhyb3VnaFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY1NDA0OTA3NS9vZmZlclwiLFwiZGZjLWI6c2t1XCI6XCJPQ0NQVDRcIixcImRmYy1iOnN0b2NrTGltaXRhdGlvblwiOlwiLTFcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDQ5MDc1L29mZmVyXCIsXCJAdHlwZVwiOlwiZGZjLWI6T2ZmZXJcIixcImRmYy1iOmhhc1ByaWNlXCI6e1wiQGlkXCI6XCJfOmI4XCJ9fSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwNDkwNzUvcGxhbm5lZENvbnN1bXB0aW9uRmxvd1wiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZENvbnN1bXB0aW9uRmxvd1wiLFwiZGZjLWI6Y29uc3VtZXNcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwNDkwNzVcIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIzNVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwNDkwNzUvcGxhbm5lZFByb2R1Y3Rpb25GbG93XCIsXCJAdHlwZVwiOlwiZGZjLWI6QXNQbGFubmVkUHJvZHVjdGlvbkZsb3dcIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIzNlwiLFwiZGZjLWI6cHJvZHVjZXNcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwODE4NDNcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDQ5MDc1L3RyYW5zZm9ybWF0aW9uXCIsXCJAdHlwZVwiOlwiZGZjLWI6QXNQbGFubmVkVHJhbnNmb3JtYXRpb25cIixcImRmYy1iOmhhc0luY29tZVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY1NDA0OTA3NS9wbGFubmVkQ29uc3VtcHRpb25GbG93XCIsXCJkZmMtYjpoYXNPdXRjb21lXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDQ5MDc1L3BsYW5uZWRQcm9kdWN0aW9uRmxvd1wifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwODE4NDNcIixcIkB0eXBlXCI6XCJkZmMtYjpTdXBwbGllZFByb2R1Y3RcIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIyMVwiLFwiZGZjLWI6bmFtZVwiOlwiQ2FybGluIFBlYXMgaW4gV2F0ZXIsIE9yZ2FuaWMgKERJU1RSSUJVVE9SKSAtIFN0YW5kYXJkIGNhc2UgKDEyIHggNDAwZyBjYW4pXCIsXCJkZmMtYjpyZWZlcmVuY2VkQnlcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwODE4NDMvY2F0YWxvZ0l0ZW1cIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDgxODQzL2NhdGFsb2dJdGVtXCIsXCJAdHlwZVwiOlwiZGZjLWI6Q2F0YWxvZ0l0ZW1cIixcImRmYy1iOm9mZmVyZWRUaHJvdWdoXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjU0MDgxODQzL29mZmVyXCIsXCJkZmMtYjpza3VcIjpcIk9DQ1BDRFwiLFwiZGZjLWI6c3RvY2tMaW1pdGF0aW9uXCI6XCItMVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NTQwODE4NDMvb2ZmZXJcIixcIkB0eXBlXCI6XCJkZmMtYjpPZmZlclwiLFwiZGZjLWI6aGFzUHJpY2VcIjp7XCJAaWRcIjpcIl86YjIyXCJ9fSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NjM1ODQ1NjNcIixcIkB0eXBlXCI6XCJkZmMtYjpTdXBwbGllZFByb2R1Y3RcIixcImRmYy1iOmhhc1F1YW50aXR5XCI6XCJfOmIxM1wiLFwiZGZjLWI6bmFtZVwiOlwiUm9hc3RlZCBGYXZhIEJlYW5zLCBMaWdodGx5IFNlYSBTYWx0ZWQgKERJU1RSSUJVVE9SKSAtIFJldGFpbCBwYWNrICgzMDBnKVwiLFwiZGZjLWI6cmVmZXJlbmNlZEJ5XCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNTg0NTYzL2NhdGFsb2dJdGVtXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY2MzU4NDU2My9jYXRhbG9nSXRlbVwiLFwiQHR5cGVcIjpcImRmYy1iOkNhdGFsb2dJdGVtXCIsXCJkZmMtYjpvZmZlcmVkVGhyb3VnaFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY2MzU4NDU2My9vZmZlclwiLFwiZGZjLWI6c2t1XCI6XCJOUkZTUjNcIixcImRmYy1iOnN0b2NrTGltaXRhdGlvblwiOlwiLTFcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNTg0NTYzL29mZmVyXCIsXCJAdHlwZVwiOlwiZGZjLWI6T2ZmZXJcIixcImRmYy1iOmhhc1ByaWNlXCI6e1wiQGlkXCI6XCJfOmIxNFwifX0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNTg0NTYzL3BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcIkB0eXBlXCI6XCJkZmMtYjpBc1BsYW5uZWRDb25zdW1wdGlvbkZsb3dcIixcImRmYy1iOmNvbnN1bWVzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNTg0NTYzXCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiNDFcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNTg0NTYzL3BsYW5uZWRQcm9kdWN0aW9uRmxvd1wiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFByb2R1Y3Rpb25GbG93XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiNDJcIixcImRmYy1iOnByb2R1Y2VzXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNjE3MzMxXCJ9LHtcIkBpZFwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY2MzU4NDU2My90cmFuc2Zvcm1hdGlvblwiLFwiQHR5cGVcIjpcImRmYy1iOkFzUGxhbm5lZFRyYW5zZm9ybWF0aW9uXCIsXCJkZmMtYjpoYXNJbmNvbWVcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NjM1ODQ1NjMvcGxhbm5lZENvbnN1bXB0aW9uRmxvd1wiLFwiZGZjLWI6aGFzT3V0Y29tZVwiOlwiaHR0cHM6Ly9mb29kLWRhdGEtY29sbGFib3JhdGlvbi1wcm9kdWMtZmU4NzAxNTJmNjM0Lmhlcm9rdWFwcC5jb20vcHJvZHVjdC80NDUyNTY2MzU4NDU2My9wbGFubmVkUHJvZHVjdGlvbkZsb3dcIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNjE3MzMxXCIsXCJAdHlwZVwiOlwiZGZjLWI6U3VwcGxpZWRQcm9kdWN0XCIsXCJkZmMtYjpoYXNRdWFudGl0eVwiOlwiXzpiMjdcIixcImRmYy1iOm5hbWVcIjpcIlJvYXN0ZWQgRmF2YSBCZWFucywgTGlnaHRseSBTZWEgU2FsdGVkIChESVNUUklCVVRPUikgLSBTdGFuZGFyZCBjYXNlICgxMCB4IDMwMGcpXCIsXCJkZmMtYjpyZWZlcmVuY2VkQnlcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NjM2MTczMzEvY2F0YWxvZ0l0ZW1cIn0se1wiQGlkXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNjE3MzMxL2NhdGFsb2dJdGVtXCIsXCJAdHlwZVwiOlwiZGZjLWI6Q2F0YWxvZ0l0ZW1cIixcImRmYy1iOm9mZmVyZWRUaHJvdWdoXCI6XCJodHRwczovL2Zvb2QtZGF0YS1jb2xsYWJvcmF0aW9uLXByb2R1Yy1mZTg3MDE1MmY2MzQuaGVyb2t1YXBwLmNvbS9wcm9kdWN0LzQ0NTI1NjYzNjE3MzMxL29mZmVyXCIsXCJkZmMtYjpza3VcIjpcIk5SRlNDWFwiLFwiZGZjLWI6c3RvY2tMaW1pdGF0aW9uXCI6XCItMVwifSx7XCJAaWRcIjpcImh0dHBzOi8vZm9vZC1kYXRhLWNvbGxhYm9yYXRpb24tcHJvZHVjLWZlODcwMTUyZjYzNC5oZXJva3VhcHAuY29tL3Byb2R1Y3QvNDQ1MjU2NjM2MTczMzEvb2ZmZXJcIixcIkB0eXBlXCI6XCJkZmMtYjpPZmZlclwiLFwiZGZjLWI6aGFzUHJpY2VcIjp7XCJAaWRcIjpcIl86YjI4XCJ9fV19IiwibGFzdElkIjoiODE0NzI5MjI1ODYxMSIsInJlbWFpbmluZ1Byb2R1Y3RzQ291bnRBZnRlciI6MCwic3VjY2VzcyI6dHJ1ZSwibWVzc2FnZSI6IlByb2R1Y3RzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkifQ== + recorded_at: Fri, 24 May 2024 06:13:50 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/system/admin/dfc_product_import_spec.rb b/spec/system/admin/dfc_product_import_spec.rb index 224b4d89af..f02f4b5565 100644 --- a/spec/system/admin/dfc_product_import_spec.rb +++ b/spec/system/admin/dfc_product_import_spec.rb @@ -41,4 +41,27 @@ RSpec.describe "DFC Product Import" do expect(page).to have_content "Importing a DFC product catalog" expect(page).to have_content "Imported products: 1" end + + it "imports from a FDC catalog", vcr: true do + user.oidc_account.update!( + uid: "testdfc@protonmail.com", + refresh_token: ENV.fetch("OPENID_REFRESH_TOKEN"), + updated_at: 1.day.ago, + ) + + visit admin_product_import_path + + select enterprise.name, from: "Enterprise" + + url = "https://food-data-collaboration-produc-fe870152f634.herokuapp.com/fdc/products?shop=test-hodmedod.myshopify.com" + fill_in "catalog_url", with: url + + expect { + click_button "Import" + }.to change { + enterprise.supplied_products.count + } + + expect(page).to have_content "Importing a DFC product catalog" + end end