From 3c4e39546e05ed97cda566215b636af22e07492c Mon Sep 17 00:00:00 2001 From: Quarto GHA Workflow Runner Date: Tue, 16 Jan 2024 23:57:04 +0000 Subject: [PATCH] Built site for gh-pages --- .nojekyll | 2 +- Tutorials/SWOTHR_s3Access_real_data_v11.html | 3830 +++++++++++++++++ .../figure-html/cell-14-output-2.png | Bin 0 -> 13363 bytes .../figure-html/cell-18-output-1.png | Bin 0 -> 153112 bytes .../figure-html/cell-23-output-1.png | Bin 0 -> 61501 bytes .../figure-html/cell-8-output-2.png | Bin 0 -> 16262 bytes index.html | 22 +- prerequisites.html | 17 +- schedule.html | 15 +- search.json | 62 +- sitemap.xml | 16 +- slides.html | 17 +- 12 files changed, 3935 insertions(+), 46 deletions(-) create mode 100644 Tutorials/SWOTHR_s3Access_real_data_v11.html create mode 100644 Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-14-output-2.png create mode 100644 Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-18-output-1.png create mode 100644 Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-23-output-1.png create mode 100644 Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-8-output-2.png diff --git a/.nojekyll b/.nojekyll index 9bf8696..8cf9751 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -190f29ad \ No newline at end of file +9e7a7266 \ No newline at end of file diff --git a/Tutorials/SWOTHR_s3Access_real_data_v11.html b/Tutorials/SWOTHR_s3Access_real_data_v11.html new file mode 100644 index 0000000..3f1f567 --- /dev/null +++ b/Tutorials/SWOTHR_s3Access_real_data_v11.html @@ -0,0 +1,3830 @@ + + + + + + + + + +2024 SWOT Pre-Conference Workshop: AGU Chapman - SWOT Hydrology Dataset Exploration in the Cloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + +
+ + + +
+ +
+
+

SWOT Hydrology Dataset Exploration in the Cloud

+
+ + + +
+ + + + +
+ + +
+ +
+

Accessing and Visualizing SWOT Datasets

+
+

Requirement:

+

This tutorial can only be run in an AWS cloud instance running in us-west-2: NASA Earthdata Cloud data in S3 can be directly accessed via earthaccess python library; this access is limited to requests made within the US West (Oregon) (code: us-west-2) AWS region.

+
+
+

Learning Objectives:

+
    +
  • Access SWOT HR data prodcuts (archived in NASA Earthdata Cloud) within the AWS cloud, without downloading to local machine
  • +
  • Visualize accessed data for a quick check
  • +
+
+

SWOT Level 2 KaRIn High Rate Version 1.1 (where available) Datasets:

+
    +
  1. River Vector Shapefile - SWOT_L2_HR_RIVERSP_1.1

  2. +
  3. Lake Vector Shapefile - SWOT_L2_HR_LAKESP_1.1

  4. +
  5. Water Mask Pixel Cloud NetCDF - SWOT_L2_HR_PIXC_1.1

  6. +
  7. Water Mask Pixel Cloud Vector Attribute NetCDF - SWOT_L2_HR_PIXCVec_1.1

  8. +
  9. Raster NetCDF - SWOT_L2_HR_Raster_1.1

  10. +
  11. Single Look Complex Data product - SWOT_L1B_HR_SLC_1.1

  12. +
+

Notebook Author: Cassie Nickles, NASA PO.DAAC (Aug 2023) || Other Contributors: Zoe Walschots (PO.DAAC Summer Intern 2023), Catalina Taglialatela (NASA PO.DAAC), Luis Lopez (NASA NSIDC DAAC)

+

Last updated: 4 Dec 2023

+
+
+
+

Libraries Needed

+
+
import glob
+import os
+import requests
+import s3fs
+import fiona
+import netCDF4 as nc
+import h5netcdf
+import xarray as xr
+import pandas as pd
+import geopandas as gpd
+import numpy as np
+import matplotlib.pyplot as plt
+import hvplot.xarray
+import earthaccess
+from earthaccess import Auth, DataCollections, DataGranules, Store
+
+ + +
+
+ +
+
+ +
+
+
+
+

Earthdata Login

+

An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. If you don’t already have one, please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. We use earthaccess to authenticate your login credentials below.

+
+
auth = earthaccess.login()
+
+
EARTHDATA_USERNAME and EARTHDATA_PASSWORD are not set in the current environment, try setting them or use a different strategy (netrc, interactive)
+You're now authenticated with NASA Earthdata Login
+Using token with expiration date: 01/07/2024
+Using .netrc file for EDL
+
+
+
+
+

Single File Access

+
+

1. River Vector Shapefiles

+

The s3 access link can be found using earthaccess data search. Since this collection consists of Reach and Node files, we need to extract only the granule for the Reach file. We do this by filtering for the ‘Reach’ title in the data link.

+

Alternatively, Earthdata Search (see tutorial) can be used to search in a map graphic user interface.

+

For additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.

+
+
+

Search for the data of interest

+
+
#Retrieves granule from the day we want, in this case by passing to `earthdata.search_data` function the data collection shortname, temporal bounds, and for restricted data one must specify the search count
+river_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_RIVERSP_1.1', 
+                                        temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'),
+                                        granule_name = '*Reach*_013_NA*') # here we filter by Reach files (not node), pass #13 and continent code=NA
+
+
Granules found: 14
+
+
+
+
+

Set up an s3fs session for Direct Cloud Access

+

s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.

+
+
fs_s3 = earthaccess.get_s3fs_session(results=river_results)
+
+
+
+

Create Fiona session to work with zip and embedded shapefiles in the AWS Cloud

+

The native format for this data is a .zip file, and we want the .shp file within the .zip file, so we will create a Fiona AWS session using the credentials from setting up the s3fs session above to access the shapefiles within the zip files. If we don’t do this, the alternative would be to download the data to the cloud environment (e.g. EC2 instance, user S3 bucket) and extract the .zip file there.

+
+
fiona_session=fiona.session.AWSSession(
+        aws_access_key_id=fs_s3.storage_options["key"],
+        aws_secret_access_key=fs_s3.storage_options["secret"],
+        aws_session_token=fs_s3.storage_options["token"]
+    )
+
+
+
# Get the link for the first zip file
+river_link = earthaccess.results.DataGranule.data_links(river_results[0], access='direct')[0]
+
+# We use the zip+ prefix so fiona knows that we are operating on a zip file
+river_shp_url = f"zip+{river_link}"
+
+with fiona.Env(session=fiona_session):
+    SWOT_HR_shp1 = gpd.read_file(river_shp_url) 
+
+#view the attribute table
+SWOT_HR_shp1 
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
reach_idtimetime_taitime_strp_latp_lonriver_namewsewse_uwse_r_u...p_wid_varp_n_nodesp_dist_outp_lengthp_mafp_dam_idp_n_ch_maxp_n_ch_modp_low_slpgeometry
0774600000137.342535e+087.342536e+082023-04-08T07:18:42Z40.621824-124.244823Eel River2.320100e+009.653000e-023.490000e-02...23702.8059619376.98619194.609276-1.000000e+120410LINESTRING (-124.29069 40.66364, -124.29104 40...
1774600000217.342535e+087.342536e+082023-04-08T07:18:42Z40.542406-124.156177Eel River9.248800e+009.071000e-021.130000e-02...3435.5245129478.83610101.849934-1.000000e+120210LINESTRING (-124.16119 40.58421, -124.16097 40...
2774600000317.342535e+087.342536e+082023-04-08T07:18:42Z40.494638-124.107178Eel River1.970160e+015.754600e-015.683800e-01...1202.5495039553.70710074.871060-1.000000e+120210LINESTRING (-124.13864 40.50871, -124.13829 40...
3774600000417.342535e+087.342536e+082023-04-08T07:18:42Z40.447111-124.021272Eel River3.471650e+011.486718e+011.486691e+01...645.9848155843.42516289.718636-1.000000e+120110LINESTRING (-124.09611 40.46269, -124.09575 40...
4774600000517.342535e+087.342536e+082023-04-08T07:18:42Z40.395990-123.930243Eel River3.229870e+019.148000e-021.638000e-02...1532.6585166073.91010230.484650-1.000000e+120210LINESTRING (-123.95755 40.42295, -123.95719 40...
..................................................................
35578322900143-1.000000e+12-1.000000e+12no_data50.998910-119.011806no_data-1.000000e+12-1.000000e+12-1.000000e+12...116183.8411559585.5352935.007230-1.000000e+120110LINESTRING (-119.03134 51.00406, -119.03105 51...
356783229001537.342537e+087.342537e+082023-04-08T07:21:51Z51.047442-119.042215no_data3.451806e+021.114110e+001.110470e+00...41059.0435130434.69910168.113068-1.000000e+120210LINESTRING (-119.03140 51.09147, -119.03165 51...
35778322900173-1.000000e+12-1.000000e+12no_data50.916115-119.036919no_data-1.000000e+12-1.000000e+12-1.000000e+12...186564.3619839488.85719642.879384-1.000000e+120410LINESTRING (-118.99201 50.99421, -118.99200 50...
358783229001837.342537e+087.342537e+082023-04-08T07:21:52Z51.060235-118.938606no_data-1.000000e+12-1.000000e+12-1.000000e+12...177029.3258656650.52717161.670624-1.000000e+120410LINESTRING (-118.99200 50.99394, -118.99201 50...
35978322900211-1.000000e+12-1.000000e+12no_data50.549433-119.062048Shuswap River-1.000000e+12-1.000000e+12-1.000000e+12...122.69050103956.98710074.432813-1.000000e+120210LINESTRING (-119.11242 50.54684, -119.11207 50...
+ +

360 rows × 127 columns

+
+
+
+
+
+

Quickly plot the SWOT river data

+
+
# Simple plot
+fig, ax = plt.subplots(figsize=(7,5))
+SWOT_HR_shp1.plot(ax=ax, color='black')
+
+
<Axes: >
+
+
+

+
+
+
+
# # Another way to plot geopandas dataframes is with `explore`, which also plots a basemap
+# SWOT_HR_shp1.explore()
+
+
+
+

2. Lake Vector Shapefiles

+

The lake vector shapefiles can be accessed in the same way as the river shapefiles above.

+

For additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.

+
+
+

Search for data of interest

+
+
lake_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_LAKESP_1.1', 
+                                       temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'),
+                                       granule_name = '*Obs*_013_NA*') # here we filter by files with 'Obs' in the name (This collection has three options: Obs, Unassigned, and Prior), pass #13 and continent code=NA
+
+
Granules found: 14
+
+
+
+
+

Set up an s3fs session for Direct Cloud Access

+

s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.

+
+
fs_s3 = earthaccess.get_s3fs_session(results=lake_results)
+
+
+
+

Create Fiona session to work with zip and embedded shapefiles in the AWS Cloud

+

The native format for this data is a .zip file, and we want the .shp file within the .zip file, so we will create a Fiona AWS session using the credentials from setting up the s3fs session above to access the shapefiles within the zip files. If we don’t do this, the alternative would be to download the data to the cloud environment (e.g. EC2 instance, user S3 bucket) and extract the .zip file there.

+
+
fiona_session=fiona.session.AWSSession(
+        aws_access_key_id=fs_s3.storage_options["key"],
+        aws_secret_access_key=fs_s3.storage_options["secret"],
+        aws_session_token=fs_s3.storage_options["token"]
+    )
+
+
+
# Get the link for the first zip file
+lake_link = earthaccess.results.DataGranule.data_links(lake_results[0], access='direct')[0]
+
+# We use the zip+ prefix so fiona knows that we are operating on a zip file
+lake_shp_url = f"zip+{lake_link}"
+
+with fiona.Env(session=fiona_session):
+    SWOT_HR_shp2 = gpd.read_file(lake_shp_url) 
+
+#view the attribute table
+SWOT_HR_shp2
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
obs_idlake_idoverlapn_overlapreach_idtimetime_taitime_strwsewse_u...load_tidefload_tidegpole_tidedry_trop_cwet_trop_ciono_cxovr_cal_clake_namep_res_idgeometry
0781229R0000067810001133851no_data7.342536e+087.342536e+082023-04-08T07:19:21Z593.9930.011...-0.019138-0.018407-0.002311-2.164411-0.074947-0.003339-1.000000e+12APPLEGATE RESERVOIR;APPLEGATE LAKE116MULTIPOLYGON (((-123.10728 42.03437, -123.1073...
1782232R0000187820002572;782000225386;802no_data7.342536e+087.342536e+082023-04-08T07:19:51Z439.8110.167...-0.016663-0.016105-0.002303-2.199668-0.069287-0.003153-1.000000e+12HILLS CREEK RESERVOIR-99999999MULTIPOLYGON (((-122.45387 43.68914, -122.4539...
2782243R0000137820039162101no_data7.342537e+087.342537e+082023-04-08T07:21:40Z341.4570.003...-0.009852-0.009920-0.002187-2.211506-0.079803-0.002515-1.000000e+12WHITEMAN CREEK;OKANAGAN LAKE;OKANAGAN-99999999MULTIPOLYGON (((-119.72285 49.72639, -119.7227...
3782243R0155867820039162171no_data7.342537e+087.342537e+082023-04-08T07:21:48Z341.5130.028...-0.009454-0.009599-0.002172-2.209661-0.079193-0.002491-1.000000e+12WHITEMAN CREEK;OKANAGAN LAKE;OKANAGAN-99999999MULTIPOLYGON (((-119.49606 50.06182, -119.4961...
4783245R000005783026394332178322700063;78322700091;78322800011;7832290001...7.342537e+087.342537e+082023-04-08T07:22:01Z344.8320.014...-0.009029-0.009206-0.002157-2.207273-0.082830-0.002465-1.000000e+12ROSS CREEK;EAGLE RIVER;SHUSWAP;LITTLE RIVER;SC...-99999999MULTIPOLYGON (((-119.35814 50.94441, -119.3580...
..................................................................
831783246R0090137830249372;783024935281;712no_data7.342537e+087.342538e+082023-04-08T07:22:13Z1837.2320.563...-0.008546-0.008791-0.002133-2.094712-0.066065-0.002440-1.000000e+12no_data-99999999MULTIPOLYGON (((-118.98292 51.59811, -118.9830...
832783246R0099317830249332871no_data7.342537e+087.342538e+082023-04-08T07:22:14Z1635.5140.325...-0.008539-0.008785-0.002132-2.136184-0.071612-0.002440-1.000000e+12no_data-99999999POLYGON ((-118.98463 51.61215, -118.98453 51.6...
833783246R0107407830243082821no_data7.342537e+087.342538e+082023-04-08T07:22:14Z2094.2955.792...-0.008558-0.008815-0.002135-1.942940-0.048756-0.002438-1.000000e+12no_data-99999999MULTIPOLYGON (((-119.07615 51.67504, -119.0759...
834783246R0109107830256902211no_data7.342537e+087.342538e+082023-04-08T07:22:14Z1996.6700.303...-0.008524-0.008775-0.002132-1.863152-0.041920-0.002443-1.000000e+12no_data-99999999POLYGON ((-118.97489 51.63692, -118.97478 51.6...
835782246R0127967820071012751no_data7.342537e+087.342538e+082023-04-08T07:22:15Z1962.5040.385...-0.008469-0.008730-0.002128-2.104326-0.068847-0.002438-1.000000e+12no_data-99999999POLYGON ((-118.88701 51.66364, -118.88710 51.6...
+ +

836 rows × 36 columns

+
+
+
+
+
+

Quickly plot the SWOT lakes data

+
+
fig, ax = plt.subplots(figsize=(7,5))
+SWOT_HR_shp2.plot(ax=ax, color='black')
+
+
<Axes: >
+
+
+

+
+
+

Accessing the remaining files is different than the shp files above. We do not need to read the shapefiles within a zip file using something like Fiona session (or to download and unzip in the cloud) because the following SWOT HR collections are stored in netCDF files in the cloud. For the rest of the products, we will open via xarray, not geopandas.

+
+
+

3. Water Mask Pixel Cloud NetCDF

+
+
+

Search for data collection and time of interest

+

For additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.

+
+
pixc_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_PIXC_1.1',
+                                       temporal = ('2023-04-22 00:00:00', '2023-04-22 23:59:59'), 
+                                       granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013                                       
+
+
Granules found: 164
+
+
+
+
+

Set up an s3fs session for Direct Cloud Access

+

s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.

+
+
fs_s3 = earthaccess.get_s3fs_session(results=pixc_results)
+
+# get link for file 100
+pixc_link = earthaccess.results.DataGranule.data_links(pixc_results[100], access='direct')[0]
+
+s3_file_obj3 = fs_s3.open(pixc_link, mode='rb')
+
+
+
+

Open data using xarray

+

The pixel cloud netCDF files are formatted with three groups titled, “pixel cloud”, “tvp”, or “noise” (more detail here). In order to access the coordinates and variables within the file, a group must be specified when calling xarray open_dataset.

+
+
ds_PIXC = xr.open_dataset(s3_file_obj3, group = 'pixel_cloud', engine='h5netcdf')
+ds_PIXC
+
+ +
+ + + + + + + + + + + + + + +
<xarray.Dataset>
+Dimensions:                                (points: 5180594, complex_depth: 2,
+                                            num_pixc_lines: 3239)
+Coordinates:
+    latitude                               (points) float64 ...
+    longitude                              (points) float64 ...
+Dimensions without coordinates: points, complex_depth, num_pixc_lines
+Data variables: (12/57)
+    azimuth_index                          (points) float64 ...
+    range_index                            (points) float64 ...
+    interferogram                          (points, complex_depth) float32 ...
+    power_plus_y                           (points) float32 ...
+    power_minus_y                          (points) float32 ...
+    coherent_power                         (points) float32 ...
+    ...                                     ...
+    interferogram_qual                     (points) float64 ...
+    classification_qual                    (points) float64 ...
+    geolocation_qual                       (points) float64 ...
+    sig0_qual                              (points) float64 ...
+    pixc_line_qual                         (num_pixc_lines) float64 ...
+    pixc_line_to_tvp                       (num_pixc_lines) float32 ...
+Attributes:
+    description:                 cloud of geolocated interferogram pixels
+    interferogram_size_azimuth:  3239
+    interferogram_size_range:    5526
+    looks_to_efflooks:           1.5309342049156023
+    num_azimuth_looks:           7.0
+    azimuth_offset:              3
+
+
+
+
+

Simple plot of the results

+
+
# This could take a few minutes to plot
+plt.scatter(x=ds_PIXC.longitude, y=ds_PIXC.latitude, c=ds_PIXC.height)
+plt.colorbar().set_label('Height (m)')
+
+

+
+
+
+
+

4. Water Mask Pixel Cloud Vector Attribute NetCDF

+
+
+

Search for data of interest

+
+
pixcvec_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_PIXCVEC_1.1', 
+                                          temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'), 
+                                          granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 
+
+
Granules found: 100
+
+
+
+
+

Set up an s3fs session for Direct Cloud Access

+

s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.

+
+
fs_s3 = earthaccess.get_s3fs_session(results=pixcvec_results)
+
+# get link for file 0
+pixcvec_link = earthaccess.results.DataGranule.data_links(pixcvec_results[0], access='direct')[0]
+
+s3_file_obj4 = fs_s3.open(pixcvec_link, mode='rb')
+
+
+
+

Open data using xarray

+
+
ds_PIXCVEC = xr.open_dataset(s3_file_obj4, decode_cf=False,  engine='h5netcdf')
+ds_PIXCVEC
+
+ +
+ + + + + + + + + + + + + + +
<xarray.Dataset>
+Dimensions:               (points: 11174047, nchar_reach_id: 11,
+                           nchar_node_id: 14, nchar_lake_id: 10,
+                           nchar_obs_id: 13)
+Dimensions without coordinates: points, nchar_reach_id, nchar_node_id,
+                                nchar_lake_id, nchar_obs_id
+Data variables:
+    azimuth_index         (points) int32 ...
+    range_index           (points) int32 ...
+    latitude_vectorproc   (points) float64 ...
+    longitude_vectorproc  (points) float64 ...
+    height_vectorproc     (points) float32 ...
+    reach_id              (points, nchar_reach_id) |S1 ...
+    node_id               (points, nchar_node_id) |S1 ...
+    lake_id               (points, nchar_lake_id) |S1 ...
+    obs_id                (points, nchar_obs_id) |S1 ...
+    ice_clim_f            (points) int8 ...
+    ice_dyn_f             (points) int8 ...
+Attributes: (12/45)
+    Conventions:                     CF-1.7
+    title:                           Level 2 KaRIn high rate pixel cloud vect...
+    short_name:                      L2_HR_PIXCVec
+    institution:                     JPL
+    source:                          Level 1B KaRIn High Rate Single Look Com...
+    history:                         2023-09-07T04:43:11.652934Z: Creation
+    ...                              ...
+    xref_prior_river_db_file:        
+    xref_prior_lake_db_file:         SWOT_LakeDatabase_Cal_013_20000101T00000...
+    xref_reforbittrack_files:        SWOT_RefOrbitTrackTileBoundary_Cal_20000...
+    xref_param_l2_hr_laketile_file:  SWOT_Param_L2_HR_LakeTile_20000101T00000...
+    ellipsoid_semi_major_axis:       6378137.0
+    ellipsoid_flattening:            0.0033528106647474805
+
+
+
+
+

Simple plot

+
+
pixcvec_htvals = ds_PIXCVEC.height_vectorproc.compute()
+pixcvec_latvals = ds_PIXCVEC.latitude_vectorproc.compute()
+pixcvec_lonvals = ds_PIXCVEC.longitude_vectorproc.compute()
+
+#Before plotting, we set all fill values to nan so that the graph shows up better spatially
+pixcvec_htvals[pixcvec_htvals > 15000] = np.nan
+pixcvec_latvals[pixcvec_latvals > 80] = np.nan
+pixcvec_latvals[pixcvec_latvals < -80] = np.nan
+pixcvec_lonvals[pixcvec_lonvals > 180] = np.nan
+pixcvec_lonvals[pixcvec_lonvals < -180] = np.nan
+
+
+
plt.scatter(x=pixcvec_lonvals, y=pixcvec_latvals, c=pixcvec_htvals)
+plt.colorbar().set_label('Height (m)')
+
+

+
+
+
+
+

5. Raster NetCDF

+
+
+

Search for data of interest

+

For additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.

+
+
#Say we know the exact cycle, pass & scene. We can search for one data granule!
+raster_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_Raster_1.1', 
+                                         temporal = ('2023-04-01 00:00:00', '2023-04-22 23:59:59'), 
+                                         granule_name = '*100m*_498_013_130F*') # here we filter by files with '100m' in the name (This collection has two resolution options: 100m & 250m), cycle=498, pass=013, scene = 130F 
+
+
Granules found: 1
+
+
+
+
+

Set up an s3fs session for Direct Cloud Access

+

s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.

+
+
fs_s3 = earthaccess.get_s3fs_session(results=raster_results)
+
+# get link for file 
+raster_link = earthaccess.results.DataGranule.data_links(raster_results[0], access='direct')[0]
+
+s3_file_obj5 = fs_s3.open(raster_link, mode='rb')
+
+
+
+

Open data with xarray

+
+
ds_raster = xr.open_dataset(s3_file_obj5, engine='h5netcdf')
+ds_raster
+
+
/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/coding/times.py:254: RuntimeWarning: invalid value encountered in cast
+  flat_num_dates_ns_int = (flat_num_dates * _NS_PER_TIME_DELTA[delta]).astype(
+/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/coding/times.py:254: RuntimeWarning: invalid value encountered in cast
+  flat_num_dates_ns_int = (flat_num_dates * _NS_PER_TIME_DELTA[delta]).astype(
+
+
+ +
+ + + + + + + + + + + + + + +
<xarray.Dataset>
+Dimensions:                  (x: 1652, y: 1651)
+Coordinates:
+  * x                        (x) float64 5.438e+05 5.439e+05 ... 7.089e+05
+  * y                        (y) float64 6.468e+06 6.468e+06 ... 6.633e+06
+Data variables: (12/39)
+    crs                      object ...
+    longitude                (y, x) float64 ...
+    latitude                 (y, x) float64 ...
+    wse                      (y, x) float32 ...
+    wse_qual                 (y, x) float32 ...
+    wse_qual_bitwise         (y, x) float64 ...
+    ...                       ...
+    load_tide_fes            (y, x) float32 ...
+    load_tide_got            (y, x) float32 ...
+    pole_tide                (y, x) float32 ...
+    model_dry_tropo_cor      (y, x) float32 ...
+    model_wet_tropo_cor      (y, x) float32 ...
+    iono_cor_gim_ka          (y, x) float32 ...
+Attributes: (12/49)
+    Conventions:                   CF-1.7
+    title:                         Level 2 KaRIn High Rate Raster Data Product
+    source:                        Ka-band radar interferometer
+    history:                       2023-09-13T20:22:58Z : Creation
+    platform:                      SWOT
+    reference_document:            JPL D-56416 - Revision B - October 24, 2022
+    ...                            ...
+    x_max:                         708900.0
+    y_min:                         6467900.0
+    y_max:                         6632900.0
+    institution:                   JPL
+    references:                    V1.0
+    product_version:               01
+
+
+
+
+

Quick interactive plot with hvplot

+
+
ds_raster.wse.hvplot.image(y='y', x='x')
+
+ +
+
+
+
+
+ +
+
+
+
+

6. SLC

+
+
+

Search for data collection and time of interest

+

For additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.

+
+
slc_results = earthaccess.search_data(short_name = 'SWOT_L1B_HR_SLC_1.1',
+                                       temporal = ('2023-04-22 00:00:00', '2023-04-22 23:59:59'), 
+                                       granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 with wildcards
+
+
Granules found: 164
+
+
+
+
+

Set up an s3fs session for Direct Cloud Access

+

s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.

+
+
fs_s3 = earthaccess.get_s3fs_session(results=slc_results)
+
+# get link for file 
+slc_link = earthaccess.results.DataGranule.data_links(slc_results[0], access='direct')[0]
+
+s3_file_obj6 = fs_s3.open(slc_link, mode='rb')
+
+
+
+

Open data using xarray

+

The L1B_HR_SLC product file contains five NetCDF data group called the slc, xfactor, noise, tvp, and grdem groups. More info can be found in the product description document within the dataset table for each group.

+
+
ds_SLC = xr.open_dataset(s3_file_obj6, group = 'slc', engine='h5netcdf')
+ds_SLC
+
+ +
+ + + + + + + + + + + + + + +
<xarray.Dataset>
+Dimensions:      (num_lines: 17954, num_pixels: 4630, complex_depth: 2)
+Dimensions without coordinates: num_lines, num_pixels, complex_depth
+Data variables:
+    slc_plus_y   (num_lines, num_pixels, complex_depth) float32 ...
+    slc_minus_y  (num_lines, num_pixels, complex_depth) float32 ...
+    slc_qual     (num_lines) float32 ...
+Attributes:
+    description:  Single look complex images for plus_y and minus_y channels
+
+
+ + +
+
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-14-output-2.png b/Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-14-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..12ec205eb138347b661d97edfe60edfdd919014b GIT binary patch literal 13363 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 YJ?p2-`X-|A4?GAB6>a4YiWb5D2SGTjk^lez literal 0 HcmV?d00001 diff --git a/Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-18-output-1.png b/Tutorials/SWOTHR_s3Access_real_data_v11_files/figure-html/cell-18-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7b8bc1a6e94933e8ee59b0887b64b4ebbf5010 GIT binary patch literal 153112 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

Z_jAN9|{2K z8WNW47BnE!Vo3`Yc7b@bJk1mk=E%jVFQy8sA@6R80o`#71D+$PEO_OLB@HG3cTLf8 zGQ-*w(`#4AoV6(^!|}t1@u{?`xyN$2k$4bsY(36=dcZ3uLE6_B zN(NdREHeTnEG{;S#N;H`C@EaD(KaB87%?S!;dkK^?60}YP>^%pE5PWz+xjeUMh5h+ z;`u6Qh(T#C7vWt0N>tx@9@f3%b+PBM929=x{J`t6Zo^7V)%`cx__As!P(c$_qzgh; zVXwKZ)WT@fEh-r@f6((#xK`UEt@*g$L-H_e+4pB(^oh04z=NXFgPX0Zr1@LD=zi(O z^H(pozb}?MfN#Jl;IRc4OdB3*N=MR0$(Jf0Wa|tRY(DKf(YL@`BKJUK_m-aCwDBz7 zGXR#m%nX)~LW27DJv!7YDR0+#gw*51V}S!b73x&n$dRN92}xOVg#o7c8O$gU7u5

n=qq#Oal-aV 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

ANIZI*h!q$H57 z#t0a5|4hx0rP;`=MWd)XAK?_i9q{<4pU>O=;3rPs#-qs2f|~D6J1Z1^l-st}7(e&K zr|@%6dn)Lwe3XJW*-kE(3gtiX*!(1yd4l@uUY0E_akBFn)1eAQkM5 z14?7zufw;)y2iU>nU0>I;Mj-6j+g z{>kxxbEtu2N_%&NsYANolK>LOG~wvWNll~EakQC}AVm{?n^%~h)f zsj5#!L2EPi#j_d!GP0o}?LnD(zdl9z26pqO?`3(Z%f#ekhq3vN+gg3!Luuoz zospddHIFfCr72(jsSuU$hhO{x|L=kk%@Ga>3l_|oB;evMRI&_NX) zBnnLznzBGE(BtG)#FPl?J>o)vM?oM1wbi6PJmm0Y-YALR>0Z*|ZbP?>$ZFVztN~6N zxxenuWc{vMAsnm1uQdrfMfCg$%+ob4t_&-wF{>$-F1=4yQ3nj`N}Tv0 zvjz6REK-lqOQtEOBXs`>sEt80hJgzVR40a1QCkEMxsalHfk{0@EV%6;ML})gDV8IO z0_;5nzRH4aj+!9#C_#i%u2cU{=fln14mw>IKyA15Ap2Crg{*r^jQ9o|Uwm7El z4Op;CL0=Qhaz;%&gUfO#>d;YeE0}@D*TyjP(WFZ;KNfsn;>p`7CY~ZrGZrOd=J6TJ zcMj z@`}!k*Y{vN$e=)4DHMVZ`nVlaM0<|{Fy?i%D-!ywgjy;aza#g@(g4(J_rI8^>_?vV zHvaLB|MGzQ{a<6>hUlja-TG&3Lpuv<9>exi*FTw`y8g+W=yZ7U|M;WPBuVABhcJ1I za>`(2a*N3=9*=K^Fxz1X08xRSf%=*(dJ(~GF+>M7(Dr)QloW#PNf5`1;*FxQY|P%s zXKk}~FQ1udl?<NMJI= zt-7g91t7f(8DWhBttOcgL2M|`gb8@js4(z>IWsOiJ_n?WP{be$j;@Ea>k(<7^bmzq zga)3)DZ}&~f#H!Rbed3Ga_AjPlv6dbG{)6q$Q)+b;l;u>1L}}=(4WY(hcd$Va=e46 z=8)Nh-kuDZDTq(xV2AEBgNi{Xa?FCK=MA+w^tOWR5BJ4cU^|E@q1i_Yj~-57O9I=| zP}iwY`pX9Ku+sGK{W-0F&d@BU$f0-8Lc_qcLLa1_R>5~Yhzq1pBrfqzvz`GAaV^$rdN`>M!^C3MRalBVd<#w-zaL$sjrQZ z5E^-Z@5z}IiaTo?+S!c453ijCHQxm`(`vEzO>f}m-}kqC_^x|Kz(%Sha5}7Sv%!mD z)nHeG-T*xL^ice2V8uY{s%q3Q%1T_dC6PiVt0fbHt`jMS)4Jll;@8%4tHwt0r@|S@OQDVvm9}Zf)`(QiRn@*dU=_4f;C_(ZNM@zK6`ziEbUByQ1)*ti`l*yo&=^Y#NAj zq$6lAg+@VX6&pF?;}QNqK|Wa!pW8&{2beBol*o#~P6J0A-HtHcGxULSGq6)&pwRJ9 z2c1d6^+#Qpi;4RQwk~8*3=tI5C7Px9O$q5yN8Ibs`npmmLWA*v-SFxI<6#3kV{#dR4m&W|zM@IRpn4r9 zd)=798U8$-YiS5@+?qeD-#whd;G6<(e8sA0xCT-J>r^TpkF5%R+TdiuQ)xGFK#AJw zs4hZ8s?;SRE3A468kvsZb#>ms5ZqF0Po@Q|fY?y!S_WYe?&^d@hcg6Oj184ygxP!qn|;mcDm8#zgp{BtLhW)G1?g1>Hd(?-SI=q$?$w7~BN7 zmPbpE%v&__Fy=A+2t5dHyT=utT0bS}HppuZf2AUI19xRa`ylIrJPFcUm6hD1br0Jj z*dxf+v5;z@0(qQJbUcPgDYoVmC%|@NY#)S(yqVzzdSjMGdy>MmF-IJYj?#OQK_iFs z9i~;_TXmSPg~>iWhSvL>vrUkF6Zp?3OuhIUoTzW1EFyaK1atWc)+qUbI{u!VVw2Eq z#L$Lx05a8qC4*1vq$VMCDXxHG%Q75Q3KU0%RfzA5@pnb|7k98xNs@Z_7fS#PjzyGr zY{J(-Qwc0bS3~Iw8*&uM6wn4+Q(}S!E=P!sgrcWiPeKc_0w^g(5DgW=?T~$i07Q&M z20iSd`H<#n&3iNI`y*{mwZ)v|t6tkTH(C*#E|tSsdq6vzeDC44v!Ld?%)0#?T?tj3 zhm&I2tXv&sNa{w!C@edGnaUJw35pp39hZBwzS_RPDgIqU5L)`g<5R^Y3YlUDfxVCt zY_>|Jc&E6gZVX!1>Tga5dSE2@b$Cq0o)}~`1ib!3=*-s#94Gk+XiNJ4(T|!@-OK z&f(i#bgV`Qr-9z2g|ZL(J4`JJg?h^B{4yYll(;91?;X(I)5J6)v}4I9lsplL8=(|O znd9OTT>^54xCmnvpBQK<%*FUg2Q!A`a6w@#gH|2N4Do`|as0BwG#%xHBF783$&)7v z#7I-nD-1Hxgn9_^Q5QtdObI$>V4(OpfvFr6LAy-w(_w$&9?FLE&RCPTj71wSwSrr6d#9&8BI#a3pBk6 z8xN@6yNs*E^FH*5AaEW6kSgbm)z#N%9eFt{>~=CMvzC3)wJ+K59hB9MdNx(-w`M92 zT@!N_)SR)M1vTGgcFVpa>;ATcl>Ah})FK66U+2+TXW|JJqnlxWqb5xDQYB0qekl+c zYn;7;GR#SDU8#JizxB`_<|N}%Y~1b{JW?|x~P4J-{|+IWy&a1%(S`%%9N zZm3qUp~+QXBc%yZ9T5S%Rg8*@1Jfmgik(8MbS4I;aTT6hR5MH!d!7ZxL`%iwm4I3W z?SUP-s|t{aQ8r>T4RRdlR?*~BieFR^gSJv^mf^Ys(h{=XQ&Nse$YY{5l#VV#?IYKxKgq*2{>$pd5N z9ld%FIbO#+Ii`MBf$zbhD-{Wxe%joeb zsMtr7H!+PS;=r%W10L@N$VDDw4M-?4V(=JI>YH-5J-dSyW%k}Nj_=#TAQ?wDDcS?c z6m3GWOOZKHFQ^TAs{l$AYhdYdHD;EAaNn0XzMbO>hxJN4e34sCXm>}i#X9^k1TWsN z0W#H#wUKamxK9*~eisNL=CdxSv-WMYEX%m*rkmKme?PrmkC~YnuD$kJ_Uzg7Ew_0V z)O?rOj_HZher6QXKG1_KC8U2{OF36#R^*^u2q``w>|@o0iB~nGuGO_`IvM@6J%g)- z$%+_!toSS>w-cw>DyCVqVsFYoqqrLDwKr>BP;1ZeWUH7bjG|2mQAfQ%&kKRU(KVS` z#jXOIRoRR|OTP-Nh9GM|RY86A@FT5_2hn)-l;Y|lYDY{;q6Cc#kNFH2w)GM9GQUkxGk99e{ZUa-@ zH$%vugfA(VY7~1sd_$?-Vd-B`N3M_N4CHu>IT#O8WE=6YQ=H=1m2H12ob$G!2lMs=EorJZE$ z??abI^|IwnRwrc$NyV!1t*^l5q1$QIU+>YNFNxP~UmfgJG!zDmhtv9+fv^PIlc32N zg=+(%xFiq*!20Fp5a8(AqXbuzudP8HYmZdvW@HUTFO?fCutUSfDmJFtPt~tdSrIS@ z;o5#Jl3Q~v=BNom-%W&?1qDcZxMB#CMpV@@@M{<&W`JHGd~gJm5<~q!e4SHcWL?{C zW81cE+qP{x>5gruKGL}`RaL(_R;9A~8b!XtC%jE<^EP9^g0_H&70T8UMt z7}(DDSDgGuHIXA?3WmNG9HCt^PKWZRzERm^DKP-tT(Ct(>faU``z7Y&q}X8Y^QGAl zHKqy5mPDDhBR<^WMa(CkLoYLYoGe4qv&k+R=Z$RPo#h{I%P`GV%UY6lIcb-dj?MMQ z2FT^KV7b(kUWbr7e~36B83G?1AM(z1{pUVYz~L3M>GL1O^2>Xh#z^|tosPhdi_FMO zzqx0qt>>)o4@1_z&#Ayy=GVoH-eDlx#LWm0f(;m^7Wy@s#e22md-HE8|BK_s|HilD zs&&)rKSo$n{^upT(>E}ulDe5otpwN=y0>-O>I;<66ZqV^e<{Ux+KXY-=lYn{|9Ug; zzKJ#Fhg?Pw4b}y>lb~;;K*Y6{nmAj1fUCs%846`{NRgPNajDq-Ge^Hv$FIbu5e`Qx zJ$R-XEYZ@$N$NTvl?_T!7umt1<+0_Mtd9@(To&Z~h=v~73dIUX7=mjE@SK7}N*K@q z7Bys^J-DZ4j7d`4s~*COVa1tfh7JZ#3icZ%O>gBbRh8ck<}nXLA#ufCCJ2e6w;^s- zgnLbewY~;Jh}vj^MV@y9U&X7h)dMvgbuGk9EN^P4T^0M*W6%^vi? z6&9no6O;_qFj0wBR7UDoTp_3SqO9OZNdbE-==cuS5F@WGGDo8(sgyD&(IkidBAV;|B5^cFW#H@@EJ@v3$~W^Zp3AHqysoDB8B%UK1n+j= zfJNO%$gry~o^es3EdHw+EmQrxs`%X)*07>GLB=qeNg!goXZp#Vz%0~$8RQo%rMw^Q z*3-znjXWaZap7%nEqO`-wm#A)gP|54HAadz1opX3n%rk~WONU5$QdVAP?0Vqm;D3B z4h~YEAM#F6XR^Bx2XUr^`Ow^cby8aK7aa@S)e~4_S&kTNd#?G#P7ikP9$vuLbd0#EuBEX3v9t$Ap6^JUvG{n2LQl9IciwR#T*a< zUk|X|ubv3;1D@0R-ups&trSU}bcc3wrZ-Zfp%7(TN({;!@xclw-$2xBn3m}8YyP%c zb>Sh(uCIbnrD)0_kV-IX?#~VN+tuR4i(xpr*d48I#IC@t58DgZB_BFs@LkiHkk?>g zCVCt;YMyJysv>Qh!v>pH8ZglXK=>6Eqe;DpvA~{s{piaG7DX}ZvU!9Xlu+GH*^jW( zObjl`MJFVNsCCf@HHx&^MeESk2y3tUr|zXZhNJf*F&5DkX`}{e#ebd+)0(&n0`uQ7xkQ$6DFoi+3wn?zbP z3l&fLG%nH$K>>OJrohZY{7NcAe^$d>-?v3g&31^|p55T8aSI{NGmzdCG(8F82oOlPq9OzTq>Q zgu24Vt@zC5y5)o5Rd4y^r)4Eqs^sIUiI1eu#vFb>wE(Iwzn#w9zWR2?3eX##Q%=!tq z3o3Ax`T^zwB77K+7p#!6EB<~;f6ui+E)#fN1-|{s+U-^UFC-zSp!o_!uOHU+dGUJ^ z=ab7J>;mA+8J#U8cmnOR61(rxs#}tj8nbT%hv&Y|pl$1pE<~p5BX)hXQ=vx7=pOj# zI#?iJC##N2vciBk2Iz%;n|7>fa#!5Oefh^%07MCyq~E_h z+^ayeri1yU1qYsjCLe$5T~ggj5Q8**>j$jiU|K!+0veI~l)T}rwowxiNat;vyB25? zJe0;|C`4K+OARd0{!$HjAE|=zy@ri3*^mu7q+Q=Epph)K80Ku}kR}ON1;M-@q_iT) z!21v7<`Nn2>X34I)bO&8oO6+^66j`C4mqLdC}q&7R=f5s7!Gpn=lpM|7RVB)Gunm5 zq@M;TPehC~$`9kqzf5f}l}-hxiefnd{!vRV!JCjp1RJO?1P!Fth*AqQpy;Aoq(2B} ze>1Q|H$KmM)1V5`nRWyPLa;+{W&{ff1wWxYzRArU1`~`DJY-?EG^w#h5h)P)p&dmsiX>D=+@h|l_SeiNg zCLwSb;UA0=aa#sMsIDAGh=y=9BRCgzE2uH9T0Yq{$RyTR1$qTGv5yD|TEA56DW$;+huhpGiTq z<%5_(tdVSa;hG>FQy7xYk>sM>)nXZ+1>$+OEu;}m)6*tZH5%9wYru3^KMh-8D=ZiU zKVgYq?Fdn^rjDk>>*Bai{ZV-0iy^4dUKXDbY1A@Sf9w=cefJ zUe2@ZZX)P%hi@7yBTeoH(H!(&f+b<%JGC|5Z`fr~K*HD{np8=dw29U|@4tjwAi)sC zCcltfjL*bF)iTow*!NLk*NXx|m3-mnc-GCnxs~fzSO1WQ*@>D&?#U{N3c)?Jj({@! zjlrxk3Zeh$yr0|m;C6X7$>kUMUk>=l5lFuJkKBHup8tjsI$+XlNN;kzH466f-ULnf z=`n(-4Y*AV^m}MCJk-AW*(Gpgt9&@Z9Kc%VJ!3yx(eod6t{W&VI9C3CQ1(7o&!6P( zdsQ@gtkMPr==VM9BR@S5r99=$?G8da_o9QGU=ruz7J$AS^oEv0ayDHd(TB!4qMLU= zVhW2e)4v?m`UZ3A6zc(y0#y+edOZqN3efiPh=&t?GRo+NMi!%uRz;Vm(6Qk@-D^H= zr$9~)HO!He&<9W4(zcVLoA+axume;flVi?(q0CVIgg^dhrv6d}5B=Aa5;SwZ#rZ}{ z)xM>m#aJD0MrRrWO%r*U8dg&uO;$SaV#*{&Otns@@1P5B9OE0p#c+TaGbT;sSt+_= zeqB}MRS(*yQ84aYrS|tEMvAugH~I{}8-gy9PqPU_D5m+T=i6yF+w=lA3Ms8z4XU10 zCS$=*W7*Gn*gFlI87`AK99=N)t^zBQy{V+xpXK2laPu!NfxHE&8Dbr}rr3pHpdm-| zoz!IcAbsoP!uvKie-;E-ObBG$hPrV)23Z=`%+4u)+7Sq6sH8(GvB^~y>Sv2)tlZTX z*?_v%qM=KtlSg`n_v%>c{9GG}3tT2myBNbiO;88L0EIg^hErFU^XL_A8CfU}VR&}& zZYvrSi?1gA-2~VA146_ngEqw&{t6#?12R6f5p>3qCZ0_N)~Nvo2bfkB>s&i*0-1Lg zGger8W7U+E8}X2n3op*!99Yoz+>aL_0BD{K+IF%9apeb1gcngdbgb;L8A=ZRKJevD z7Hw7&%U87BaAuRnIycai{;k+5u!)NkxlEco#?LDtw4aLL)l>!qNZyB6w$aw!R1KkS}S`*rTVxm++lqwnJ%NRH=@clV_w^I=)GlTUs5Qzpkv zTHnjV%tf0Z%=10}&NJ@UL7npf<(wCR@YCf*ro+nXmf-U(KhWdXMu-r8g=X))vyyQ) z#q3SBSw8wYrM%-7!zEeGD^?Ys_QVZi!vO-qX%8~*;(~AIv6`b!51t^ti&msTpm|C| z9+>*)765@jJ`PfJ?q$E(Q*YGi#-$%3$= z2Rqh7A--0Xk=3jImB%ernf6s~+z$)sDj`ie%Ayjx3mV@8q`Qj!DI7QN36{|5AXtR7 zY^<-zQD^z-n@=Q$je{PQ1zX#L8a;LTkS$|uA}3o$7&_vE(n@qjo`E+RfQUy*Eq~To zL8YL`)R0_m(+9~^5057L-a-2qIGJfs(|PzFzVqyx*?=;F;hlmm&%(J=m?u_jIdPHg z`ZuX|UB zpdIG00z}tk495`jm|BGG1ohV9M`<6WSS^Zfp^IjrI{0}AJx^8;CUiV{Frub?Ka49L zX%D8(H9Lh;kBAjQ5$X32j%nt@t?_?Hk~~kz_o3OgGzr|*hy8j7#z6zCIKAgmb)87T zQ&GQh1NtjXsy23kT7>9oEoD8MBQRrQqrDhoU+E+!+?N?*Z>G79y94zN-{}n()@PN? z7pCS-=f2!Jzkl=wZWENdtz5+aKZ-iOQ+u#y-~0CeBrRvM$_M{d%QxR&H?IxE?+x#t zM(LIox?FEv+fIQ~Cjgm^h9@}b4DD5CfhD9%(ra;T_^(TIO{R8+Fx5zDi9o{K0s z{Z-r|0vz&tJRV~r>WCbVC@M9mi1Zi13!VE7c5`ob{mxL@nW>=5FkyadLBnX7C1f=+ zwfc-fx=PwKwIyK8HB?{Kv=-G0$ruHiUj*pT=`xOxP9zjZ_i&IBl>=RxF6u~41a_s$ zED7s>_psQ3^^%g$By4!F^mS-EhZpL!Xks>qE{JLJ=n=tdvKoWMLlMGI&@zmYxF7{M z0l1&tx|&Fi&bVOHOur5%MG+Ux?K1|$_0Q88!%NPk<~O(|+@4%gP&3{`8sB*wozAPU z9q*(a$l3s}1l<{R2e#DgumP+3M=o|xTByP@Im1GGh~I?s%-IjK_+!Tj(S(k`D9p66 zYAEc;3#fMwq`zc>@6jL_CokWx{{978Y*#0!nlUcy`D==EMz6xa_&s4rbG(A%;j!>i zdV$Ys#7qoEH@?3(vGic2$s8D)054~n4YUegvdkL36&wsfNoP(?!Mgdr((^8<0Zg_@ z^^$E6GqvD~aux7fIlT~u&i-qeU>O-P+XE006sbm99ZP<@F~ZtIBL&?vY+Dg~zw`4Kwnl=5cGsH=$$5Uk93 zk+Ps?`QjAo@&H@^X*K98Z19S3kwKbP;Z;09+svKWTn+b<;-b7$VPK3FpfyY_{2eG1 z*L!o*4`clOEZjDW4_I&Br+EcF)7MQGf4UMvp^=5$3Xb0{>P~WR{HXtv8jU3qpVT`0 z(<}R*t9KkG@UJ(Y=}*Z5fPJ7;bZRA_bbz~{D%EnL@3ZYY9e8b+d4BI{>-)SaKlLT5 z+Fr}GzL|7A=i0wrI!WG$6m94O4Pt$*+~jKX2-XyJTve zip(D}{#cv>?A%8HB?L|%gFTw-Pk3)sFS4tkNa|4B@n}UUTnOQ->c6v(;Sl5iwx#bZ zYPMQBKOl3icW8?1FKr+vX~hBvV4GVt-lO47Bw|S6Jr+skBN~--nD8N~qu?)N^$>lc z6^7(Cfxl~bcA=59B*e;j#YSs1ooAR>Q3M$nph7i=x}F4&3b`Ck4<&j)9%rCMwFq0> zyKW34279EEl*xS@%3_9ZLQN;WtEhw^tlTb+R8yH*fb3w<{ecdipW5UCN8MPb=;saG zr_;pXKSYN$)tl7uWVV-aFr^@P@~lvd>)A8I+nN8;5BY8f|N?O~o3!aeKDHkKp_a{qRE5(b}-Vq6GQ+r%=t zRLE529p8vXBZJsv-|Q?@C_VR~TCB1Kr-r@~BuCn+|AYIB5;i+0l8|FRZ$2V4E?o9d zm9!SNP_Z$NrU{LDp#vUQ6@D7BJ8Ratzt996DBh&x&C3<)yw6TJ_AUQh;6NpRe#=IwW?`Gmcv`jW_1yV?KPvO|Zt1oO;vD_gfh z&kS8qJ7TA@Qgod^TmV~ z997Xs(Bil&>3q7nJoO??cs#XXqK-0=$d!N=K{uGxDq(jKYF$WvJgwCsihxF|O~6CM zSSvkc&lM=Ft(w2eIL+>~3=TmsLRCXMTqPvzFU2AINw9Yc-l!B5?^4l}vjdkwzLIVe zPWnHtFd?X&uAhzJ;4i(7O=B*BFO!NOA1KcIXn-C7Eo@;1{E zXz)Jr*;2Y@KHfT&?<{9Am^G+cWuq?q2-}LV8=#yCU#n5gH&J})*O0gzb`;OvG3h2y z1r5lTI#b2ysAZ}lb1Ik;WEvMLM;zaz5RjY@P^bub^!vy`I^zGl4pC6c%F<7f5U9&% zmE=kTmdOm^ZDsEVxw={z$-&xs@5#oKL4LxsD6#ga$Sf9QDl|xf@IxV*Y(Q=(z(F(B z2O>$)Xc!weuSjMW<#dy%(Wg-KO2UtM|!>$1t`d99M4%T~F{8f3_reJn^mcoB>1 zSZH7lx`;4=RhIhCP;LF8%34RYKT1i7h$Icd%}cM{nVEFFFe9WC^~vo@>iY()iG(e} zEhDzxpsq5LYLF1Krz*<-4pFx7sM#;YuBF?kf{W98|Li8x(Zn>wG^_(vP~K?G?F+b_ z@~(JtfeoK~{cQ8o4;zI3zS8f#2pcqh8N~K_oigrKYD9yB6pjNu~eZU<^z z`u=eRe69uNYIh%CejF)(QGjS0{=fvj1^+-jx~L{_%=px466IU>o`K61RUUHRh6D^%@3md{ohR zN#r&`F~lj!YYSJ;F2yDcO02QTdR6eU_#T zft)8P{AtExOdK}qB?U5-DCzKRCQGgQ23#r?YxRB{g+)VB0pT3^7lzP<>663(B0$$E z5cjo5VM85(4vl7j9#R>W2KVd0U2<8&i8e8VEGo|)RdRcfZM`yN16Fwzvafo?q#?+O z_zsL*bSVdQi|i1u5oV1wm0fND;`db{?x_X1&wPhVT;nQ5N1e1l)P!$r3E`<}1$xLz z430t7Wk-WFGZz7{ZGX%djeYJvZVvFDD=1xt1_fjrCEyMCQdaq;Ng{kog$hqP%*DK?kh{@?Z(*~HK|_g=^r32?7)+`mr%?`t2~jZ3J_fB4 z(V3lI`2Jhp#9v_F z`5T_*($?`neD{4xVnLia|1qZAa4J{Y>a|P1FF38>Hwxw=<;aMrLphcL=!9F^lqEUe zF@p12b-<%wiIUgI{hz}X;SY?Rj~eUx#krRk?q?_ufijP=!H-1&J;wCrPTHd4Xv2s$ zdq!x+kXsQgR07rT7>~3b)vBml@A2*fYK&-zANx3ZiUh^MHzoIp5oAhLN8T${ZmAnk zNnn#4Igy%TNr`;CY)Z+*KBnx%__ z@sU%VBKf%(H&fR9%4RgJ?}F{38k%V|d4r^g5G6DaBLms@ugg>Ej zp@~#Np2c45;Y4F@=C8@;AVZM@gfN>n;F~MVT7au%o7PfuC8Z7aQ!*e9R*`z_Yr43; zJ`-ElH}!}rP55+YtAr}4{C(tF5_qg5vc|LhA9q9R)XTN zrWka^d?D^AsggHd**rbxZ?`gluxZgVcoFPszbGT;DaU!VL0E+!HknFF2P4mHjIlB3 z+GC^sG_V&}b8P>fU=G9y(V2AH`EIGZtE=m_3zeGPFdqRLM}&kP3Xxs+!?6Q4H~duC z@9=kDr1HK$PMUn5ovf^_y)X24<+`?sqJ6Njuy|bdK%^7GUtcusd@ZRdUEY-;bS5K0<* zz=18oVBksA?@O}K+)jj&&EO-_6y36BNsx_J{GzTKrJ;gCMdc_UTg0GT5r5Qd>wDhv zRqoqdndaRQKHhlG@x9nNXRLP{J8`eN-toO!x#C=Vo7sJd-+k$aZhzXa|6YJJ>!5#K zF3fIiR`_*0ZHiz+CaDQX0DQ+J^x6N&mH%G*9`aB-S<8Q(^ZI&{W=?M%1x)Qe%Nac` z%fGJwXmi=U#nfvFyJ^1^3wTyH7W^wRE9{b!xR!$cp)`w8WxlqvNc;V$zIJc?^+pUP z$iRXMBm%~RYAnOEtG4XL%v2StI1NnDQc*^^EZibaXl;OiFl(Lxw4QP&OFRVyR3gBf z)D|ihyE0kusg6Op`)MNGK+0x#FiRbFQpc$LWmhId!e6{#e_37u`A}bI>M$uvu9WSc zlP22H4DvLZwZC0LTY}?B7v?p)A-bxfP(7%;oX1^d$N*Bbt5sKABv~lkoa6opcXryk ztl*3V)WN1WDrxHWAU|f&Gf;4$qg95navh7uxW)Qv&p$HYegvD52IW%Znze&X>y5_% zmSaTCMJLfl7TRdf{_y>R)1%8Rhk_cgO!!JJmLZt16YU|dK;`=c%YbREKVp>_LX)X@ z7F5H~wDo=I=z&ndwoLD)T^~fbqW{}4mof(*N>4V~34S7*AhGO=+5x-58}5kuY*zA+ z>JBO7+%LkyDCvW;KmMGN1SeaE^emnMR>#|#ws)t;gKI_Kcm~e;XIwRL3cJSYuUZGNtcuu9 z(Lote?diAWKnTqsjqP4orSWp;vSwLz+IWH+aZwQoR;5#^hMvSoMKm5QHzrGzz*6Yt zp15Okyk437FdQ2*F!hHrqbt{Oekop>{ZLnDKko^?)2|D-l07;86n@CtbN|3%I zX)be9CBgXCzBVaVt0mPylYOdHCJT5`mP5mwh+Kp-+ zBl7*v5hy?aWL~3*{_h5|Z7k2|TTD>~0Ht4}`6IJO)sC(nYdGVd#614^c=4#pqn+9G z&M?@+pw(To9CC-EwT2R}@&*UTjVFSB#7=5bDhhMBWfqYhv}ur<0{u|yU{d`+$1gh) zl>;aKB;RS3d0v(!u>cI6aM)A@Q6IU!x_Ojo4+%f8Nps519zJ9B0`XuSAg=8sl-`~A zE=%nw*ikM9&6?i^yt!I`5i&w_6aC-dTLAC?P(+MX%c>40wo#R8+U6&F>SR|LmtVsH z7(8zux{a}AV|=&{Jd#GuRS|dk!`*mt-CWX$G~FKuDe^VUJ54BRV@p{1z82&-E(xx> znX)9PQFS`&s44LK5?Qs@KJo%M1%Ep;VZJY}H-A^Hy!<`seJJb$D8@7ycFqyh`Cr+4 zuXXK=IJRw%YHAxkf)oN;)`Z+lU%nR{(b%*BAAKK?cQN6(+xT~60>chRq1e&f`XGoZ zw$4)Vq1}q}fMVZyZO|5SJ0)8^>2t|8YPI6zQ z2j)SZ88k~yb<#jOe$m8(#joqLL3-Pa86jm60-(r>X>I9oNPu=!f9agck$ZP5OHCb2 z2bU{ko<&0r5_(VdaS7ZhK<^CFVcrvh`L!14cNSIt%(T{tWaF$*FT$kM#E~JfCW&&! zJe}6Qkfq=$ZIOCDWGSw_3IF0H;Vkr5W*L&_mn)K^Qb}f)VWh%5$B!6rO4JTVOoGa$ z9AyL(=>kt4B&RznrM`A97<(JfLT>WCp>^aL)k1nDKw!=nn}o@2Dg3(+3)^(*6Ne41 zjunk53-(wVI;q1N!h>!HWucSIEm%7gBM;e@&f0T6j!0d@0UOn(#h76A^iGYYD&1`Xs{hmre5*1=x9% zJoFD@JY&32%sFp#`{ra-MAddHE$ndLJ{QOs7Q6e>;wj@nXV#c#XN$}h&=!PoLNmpF z9m&#uPa%WG)dO|$ov8&!bQ_DRd-{D(wE5}7`GN{pRP zeBtkQm~iCJseIo>*l^-$m)ixn@VV~MZ*Z~}*1C1x$%*r_Lk5x+k~PMv)|4Dl`k=#H z7qv5_fr2aRul+#x>+hS4j?3>)@Z?_FZD7zz(DqEcr9eLiRC+}Kpm z;$`guR}I-!(rXBoB>^zk{G>yr%H??EZdd`DvIWI?bC5$)F|Scd-}a{w?f4$Y*2b~M z$F2@!Zb4$JzypkIdeyRVmQ=Y!D^4{=?Hf_|ktKt><^=vC$;cUj)(W~rI4=4;7jzCXKWvSL|I%SJcLv?sWZ;dgryPCEgW#F;8*nd9b`8J)4rjd6BcgW`iQnS)$wq?G%BjnVFs@9etuZ?7yCw;G2Lgc?*HVfG}Mt^Edpd8t#Gb`bS#q3X(xyCuj^E^{`P8Z z5zKmE-Gr9e7Gai*GYJmhhq2ZdnGM=-OFYGjC5Wf_q=+4JPspWNZ<;^Zavbv-8L94m z8uoYbW_ zoP@0@4^quT?ZxTU25Zxd_gk-ln^XxDCXW?>yUk$K^o|yA_^-})8SbX;MtBnWYjSMR zgh+5)+Hy3`2`YwGxl0;E0=(1)#xfK-2#@whli#~XVa!ZO-am!>e1Vs$HKm5))U;nI zI(Z9b#g6G>GBJ3S>*tfyR?Ug}Tr1g7ii%z)5_bhChLwxjMW?Wm)TG-quAhL)34|Sb z9#XO-wpHz`7_unxQ;XnqPDss_1Sofmeqyd_wR8clF>hH5L?-LlFM%A?#eFJARz0qL^4 z^nH}LYP0aLGlDL7tLEB5J*7uoR=M!6Bs#Pdfw4`;XthwmPJL2RJN{chi)M?gCDNWxj`gUdCL^_LLyTzd)Qk zcsl=7&zVQvOl0a*xeP3V6em=u)I96d;h@{dxn`G!xmAG*IjN zgoYH;4Eq(<;OA;Z~y*!*&Upbuk)G#e=_e_I~f(1RtYb^+L#sV`myoZbDi+{F_q|-(}-Z3 z^vie(XRDpPq*OB+N`2qysSvMTxb46 zYtBPoJtKBbynn6S`>Cy(lV&Pb48$btfV64)OHgPvKw+H$ z(G~*Hnr}T7mQqA|@bf1N_y&p&>>2sCWr$i6@`9tBET|(mHZ0Z8fiG?_ca$QviddE? zGC%bYtIB=bo$BFSPAzD;&SX{NIk8=G#A+jm4Ut`uPWB=y#l~f`MLh2V90r~eXBqd? zT<6fQGp16%7!%5JcY%Nh45e9PNeWUUD>s8BRQ7R(roXM_y9d?p$V3s5n_XYvXc{x&CD7 zNO5n}JeR!=5-L+B!`$>Mre*p?Z6vQ^lRV3nu$092SwO0lYN_A33tT;NB@cTXo31UJ zIt-an{@oZ$Rs(`y-wgQO(W4`sYc30A1Y8weaS|@`4_Y^wsPLr_A~;$0(EdIsxrUvW zla;s+%bK_=St#tHZ-JVDKj~n@QEF1Ejqni1eYQTqSB@$pwXYYT|A;DL(L%7<7A;)9 z;Y%2&lHpM=oTnjzt?*`W-Fu-EzV{6r__czBeU*7AF8l)5I+ych^l{ktE&RGg7|Hef zqymj*t$))5mXsWEp0*IP05>B?|DUJv)3)Dtqj2L9Y69Pmz8sd}xNVmc13^P^3%#zEQf-TA5}J}mRa8WQgl zgFBcL(epyQLPD@;vR;=arYiw+!6_{12O0THa^sts@FfwU6KGvd>Bo}Otn-OzUb7Lb z3g)cZd2U6M(cMLw*m+)^eT0()eb z4kvs-DUnyrwwnwN}W7rojO=18Ar#8(y)OVGD18p&sxAg*`s$i5jZZC*d zm#HN7oeXhE(84bmY6!(|Ums4*4hAlI%rJpk8ifEgkX=AnL{%~svkuZZtnCx2&t*e= zvFDR_oSxqwUBIu0fPHR5FP6i`z&KK~m%BGNHQzbLM4RQM655t7!;q}|Ax5nJJUzEN zs-6YiZZk;Es<6r^jb;5>%q)-?f`J#ajB(9mvI}zP*T0oQWJPWAPG^-Uo}jB>Fk}{; zpaeQNjQPy^V?SvEB975(W_j&*T+{83WZxZMdyb8s7-@hdW%SX{6?TBps4n{YRk68Mi`sMZjp=)MW~(-E95noL zxzXPZeZ^W?zI;tgM6Td{L03jnxi7-*iTclw{@+OPzy9?UQ2Sakx3;$SzZeDa#{e;) zW6nPzG2o%N`>CZ)aA<=F2e<)mYj!gV+k4_1m>r;MR(tSCrO&>)%2TzxL|ZT#Pt;yc zY@!#86ah66?yiunCHSxR-wFxIHkwwLJl65cVOw{!p5L(;r{+KTwyS^CLLaaNVBEl9 zyOeSuF&)t`v`Mm}%=~K3wN!yzr%&Tlo~tzqh0~9}{y{0}V|?2jm-vJ`xIu^`$6U&9 z8r-|;FbLp#_EzqKZ~Zs4^{nJJLk>G6@WMO2 zBnn9A1@JNq%cy+ChBCoZkdE*KS`RsPV^s1b@+g*NNn4J$_(?UqNnvELoA!*@M^kxL zbyK6~NxCPr@R5*iH)AVT#lqH%^33)k#nG!le@X)c%DFW>JY!bHtApSCSrzc1HU+IT ze+gmmE3D^#f}xvaVL8g7u<|3)iZCy`7Z7FnW)%}2_@=>x|3f_Qhhu@SfH6b-8@`0W z7%Rm(Bx_S+_0lY54b4NInJ|?PT>s^Go9u<;KN7z~jmqMlM#UfZnY^{65{A;;lDVW}Fw#uy}pP$3=Dh_>hBvvQNqgS@KI^|6P12gdU? z8vF7qLm(GOS|35~yyPa=NF)9V{N^|2a|>A@K~fsRQ|pYVf*_JQb4Xk0(5eUYTKnUF zudU4a4sQkwip)e3Q>)yk03TCuK&7&OOrqZrx!<*We(_(2M#oJqyB56a>S_iiCN^Q= zIsM%?t$;h~z~u1oaOvi2V8WU7AoA<&`Q`ll69?8Ip16U( z+{=(i&HNsI_mOSq<$*n0;Yu(dWbLC%xF2cYA=QS0?2laBurnC^VI>_;s^8+C`dscqc9WwKV&c&XeV4otNE8d(Sd3 zu0tL{z_|i`vsP^@8>IUM5mk^5P4$OTDm;RKBx#{QZwk6)VG3X!tn~cY0Hrri^+!Uh z=)_G6T}(DuF1Ak6-sdlR4ovooB=jVr*eJKyJeW%M2+0ZX&E*mqDePI;t&EF1T7DU z5(yEaeSTqD`aTpnrW1X0*kB4p*uWj>R;lht``YO{UN&_s_tI_*~Zv( z{kN=it9<<<9GabXh6x2s)Hqz!f$T zvC91)WC2@|85*Fn9T@NF8}Idh$3cLao|(CQC>PEx7ydj$*28@?aRmlCre9|C`-c0v z{yA6uHO0~0iAPX15!jeiH_B(CD}zG5jlkuW7f_e@wcpo$`=fiW`<@7(dnTa${SYYO z_m9IM7>hPkXw++axh6FZ^1m)<3?LCl+1p#57J?(1Kl4F zDCFg{0$>#prFdFz*uz|$`uCJmUv5O%)I=$MK??)WuvZ)Rx5)LpMo-!{Z9jE{8g%(g zrEp#@2yPLKiqb2%V(cim763EiBU}4$2(|kMstQUDF>cL9o4SA?B3yw2hr)x@30;ks zAB1xqJ;tf}X$iKZfO2{VN2d3W&FP~%jr3N~!yex#J!QR9m|@!WpgiPiUTeH5K_rI^ zI>oG*&vM!ejo3MqAn+f8enbseRXO7I2+gk33GFHwwvg*iH-iT>#W;C2Gx03WUoM5V zLTrYXRCIeLJ}2pC%!~3o(k4aCx1h8joUsfV%uB%oQ#vm+gWQNroIt{_QJaOjD6`n* z{MnbxO#H2Q$-gLcuhj&6p2d#T@Nl6|(|G5tAEfb>L@E58<6kh}Crb`0i<~5LDm)dZ zBmI|b3t3~$f>wcHzt9|cJy0HSGOl}LW1nHPjn?Z#;>RlY>oS-Qdiy$3_kUqIf8BnE zC(2ElP73vb$Bw}~yo(vQ6SN1W`(Afqh|<*7N%ZJNZ(}lo!=)9Is8;O6xE1!oG*HKt zBT6S{1VxEoE?*31byw56ark-l;H@vp2Qk|&%95a{(PLQWy7())gb7Q zKYohMOWbirPjKbwb=+#`_g$)uE;tEIoCC?JyvhSio>_L^Oa;#7Uv@#>ge&6f<7x{E z+PqDm;_>s!tSUpnm46~>{?R3EiP-hpw)dK#90;gAU_jJ5lG+$j|#~e7iWrk zfh4xEov*N&iO^A5Tf~$?#ci_DYm8uMzE&Vk$(#-GN&jU8ACVxyyLVhU;Gr}`^bau@ zO5kKK+!C+G&~5R0>`{%ey%h1u;#tC_uMxvb1{_*y;12I?K;_$U`V!@Co-6lfRi$`V z)gPOXg(QeW4b~&Dk64ZE+e1Z%P*G2$Zb7@2JEM0C&hDe0#SOGu?u z*g>wv)ak}+rd{XE?0}!_w%~c7nDXyNsE>>|bhm?@RxvAJ{k>Pd!7vA`wh|?<@K*lW zyxG7vqlaPu0iVpIy38(8v=BPFQl!mGa#TKAhHso8nI!Gl$k9U>=-5K zhx}lcF|*-R5oQqR;D%BB{tqu~$5hI6h18lF(889XOtkS6)aY5@6?HzVd6?+6%Sl^@ z=mXs33V+(ONULpaxc51163+2Of@$$HDPx=6lPijQV^+hO^8p*A-`XljRx<4d&mkI2SeU<5;dTEGziiuM3OayKMAOwpbrHl zO-`ev6|Bw*G?L%7Wuj1}dGt(k&FoF5ZiIwU5QJ#6Tqx7S=g(Q?=gM5_cF-9-Q74A zxF1CkbQQ8R<|ac$_(e;ks^so(!R!-{x<+=>Zpkxc6w69_2roLDD61l-Ksr%>6HG$DZDmE2t`_X)NNZQE zclS;F3~Y^j+u?fH9{EKj)oFUsv5;WsuA zy}It}#bJ7N&tGjnf4|JVJuXo#z3r70w&|R26-l&zbL~$`E*f8_(iFaI z@J=?G(5WWIfui@WP=R3ZbD4egaHa;KVLNU;l(&Jv&qT`nS~MsgOt8TBDjdNYGT&w6 zecDEIhmOAt@8dJE?=bGdukpWQ^Xu~v!fwYOcpm2b_qj4hh{?(C-9P*oS$j_5-?qR} z8tR3C2#$b{Qv#-|{=hmS&Z3Yzs68h8iNuE4gu4E1CX6`wn_0?>xooozON+6jed%Sm z5B{jR5)7(Nr`iDPQ1TG>t|SPuOoQC5e~!ZvFXS3s=#U_n$)!sI^Zc>a^I<1+d%_+5 z{7K~wE*gf1#9&^;3GYIX7n-jxXCGV2sxf%4za|jAQ!pAt8_h?l3jZO=B;d=B!nj6b7^BQqrWny-glnbZj{Dh? zgBM&djS^$Mx-h}VVOByDt#tIVl`=P)P4yDh&oI-T93iWR$rM-uLl(A1L@AuB2+VT*m+=FerV!7U}g5*1{ zQ}gf49~9BWtk3}@H8=4K+0+9R74j~sCVLQt{;!G#Ut4j@4>Gm;U+?9>g#Fa-=4W<( z*PKOVm)%jwdAndz42(FHaf#q3SpF7K6ie7B)@7$i4D`1dN1C#79f4%bdOZ_gaf?$~ zZLa^L>71e??V1J}+nU(6&5mtOY)*`cZQGjI$;9qBnPg(ywl(?t{nq;Xu6sSJug+8F zRGq558y0&Gfodwh7E-F=U!hLKc^|wXZLyY-;zIkLroW(Fr;b7bPF07Fue)>F0`^!& z>I)jp2m(IRNxU}N?w$5P^JXq1|Anf(yk)=GK7JP(QY^eebZ>Hae<_Y+Z@KtUrgFuMuq!FAnnYcODJ}eVWn%90=84eu*>GLngGAMl z>I`Hmv`n3=^03e#w-xva7L-JmP_+KjrPo|*>|Gn4Fnq)Q7*3?xo(@~%ddYs5U5 z1k~8y#s?4XnMye9kOjsw-;=Ljh3+K87kHeoMI^del-AagWXN_azDxjyZ+lthN&-@yr9kmDl_GF^Xq%Q%(DsHKFzL1m8 z3GF%A^l!O~4c|@mSBlZV(E)|taiybRDBd%aDh?|3Mc;n%Ef;Sz`Jr?%T`?x16V~EHzDVBdc$EG}l@bSgp8S5Zzi0HXg~R`esH^o}!13R|Q40Z7o_to7 z`)guQUYh^^J0k6VdEb+>u>X!0L?OCL3{G$z&0=i9O<<(^@7#7dQ+aS_ZPt!h*8^c8 zs%<}drJ4EdloG_G^$-0fgq7I91soNQ5wP!KQzw4M4IxRWQ*fWLI>f8yR;ge*QVJ7U zPk$UtJd`l^WB&5R{z%%5{in_*p)K;|`=k4HXB=A3Y{@`r;3vDBNbE|kq0#|Fq8hhV z3o$J+?suVf#)n#!R*GCt>oz19+b*UW$wV)w__-1ANUYGhOSEjSvO>1hYGMz}PQHwy zQH*b)(ai^FSdGQ=JJj|S2fSA^c!@cK&I;fb$RA490WI=PY!U)O3V6g-Htx1^!9_Wy zw30fNV#3hFY4D5+;>#-2gh-4{%rh9#+^ibp*KE`yJWvj)=E+5DaL}e}tdTRtqL^V# zL+xN6(@JJh-q?INv0Z~VCd<8p*Gv2IC1X4kgg_;AYs8bB6;^vH7lI@ZSHFe-r0ElL` zB=+TteHaHMblcQPEPJrr^BH(!F)@dB#-VvzMvhf9ZzJm_58vQ1(J90wz$y~98y3b8 zs3cXF)}(9ThrK@A{vA&tqyRQ(#Ndtu$H>US577HzahXtqt8X7 zL#u!%E0SCO>ELW>^e|7s$7z2u&JK;DNe63>)oFrj zDpU!;$l*~^TyIPWY1aw5v2x7JW{FYAcP)N^cSQ7ICZ#nM|BhavL*hHu=C6j79qtV( z4N<;|TKZNJ(HeQu0@Px?DZ#k!WOr0i5p%eER~RimFudF(`T$aJSn8LHAq>k4=p9Mk zk8Dd`)Y{OcsL&=8vDAk|vVz;h3^Y151b*ya)Z}(v8gDA@8tIntZe>nNQCftDjFbjq z8A7l5gk6p@-tGO4UPmzE`ef#&GAe4ICQBH^@VIiNy;dGFnBPa}DMef1oNB{!Hk;v% z=s(>SjdROe$X>DwwVa%>kjhfP^zP+uf7n8IO3xx2a}{}%t5r!$I!o;mhVem;%=c0N z<;LG+GM8YEgd~I`ldXin^MY|DW2J|ZKOFyvR#o+up_QZA&Gg5u6~KYRS;v9pB3Ilm zTnFtU@e%~$x$k7ojTN#cD%uoo%_Y8-fLqGSuoMQC#^Ve+AU7ed@1Jik4nXfGJ2~=UQsZ$9pnG9$uVp{g$}Q9$m+^dUPcD$~*|~li zc;1Etyq!k0T)28n-fwT;i6?jwBv6Ae(~kZ+c6{CsCy?FNpfZN8jt=ko%w1HpGI6`b zBw;(mh_bHVjse9+3Y0qBWeA{&I)_BV2>v(U2px)Z=jop>6|y2zt8NrWA=$p!B2v^O0Y+~nGGEHD4 z6hX2Ku9Adigxf&J9e>>czR*LPmS#sM{HXQ|g8h&Dm8Lb%?}5`q4}=!GMddG9xMg;f zwlYg;F2obupgzFzp-5?aYsezS;3Ep~_`p`mX6bfa0KRz!*%^GCJJ}YRH)60Oe6o1= zfy^^MB{x#u)Ai1OJXYBodmEskdU$dgj00z zlsPv@ZQZu_n$6OUE+kea@1AnX>mOw4{mJUEOM4Ya5FOpO40TaP?o%wPY(ObNKL{Gv zK%#znku@>nakHCA2qj}~hzwO)vmq9v9AgcCrJi7fKcOvPgG z;wKSF&srTiF7MD7F*(^OX0xbH`Nz?!#Ef}oW zI>ASFN0K}WTZ#GKk2v&7b14OP;Eg4y4%#3~8TXm;*!FIO#(66z@xRx~2LZT&bLrsh zbKCSeSWjL)Ny9C`O4H7|s>r!1Xo&&r5)JPtFpZL852lb9+Zqb7~;Yy z5J8)Tv{Bk2mD`mJMBq6CUNy)7d%BNIUA6swQA$hS89A!PF(TC~G)RW5(MbY*^C%b~ zLcv%H3$G4C7Jp%lGNQ+bD1}(W4s{ha5k>nALIXkzX5zH?^}x;hI=0h&upQkkLdi4l zB!22QglZPn6PolaqY!;0z=`7lT!I0|n|x90ZlvQnoKU65(#cf0#2;~wYftlP=#fEV z3z?=aDPf{n>Bw_7E$ne5`fzh=I+uai4IV%a6jx?lL>8e4gHFos2BoB*jPH%!1mhOT&;zYc?Y{j$SXD3Z7Aen%Ztv!mcGy1_7?XFdj9)<;lAs7X#&mhUld&S9wbVJ_S zwU?MeI`9~el0fCUfV9A{KZ6)OL56VXb&u^E!>mPhs!A{BUGsqQ-AUe+P}T}dZoWYj9~ zA%a48Ab(~jD$M*$7oi?(2z*^DX%2dFo}70z#%`o-xQ-Cb0tYf9CMTEsfMXW#U_;>5 zPsJ5(S-+Nk8mixIwey?lb3biUj(Yei$TkDtgzyHnfDI;eR!kOzX2Ybt63MiackdW_ zDH&7?q!XqGPQkh-$rg02!b8^=vjxi5*Ae9BY}gN7I-yMrGM2pUtjIRNkI+(mv<gcd#;9fS z@30v-xGg6Jd>y=JUTSeCLsUy_&$9dRl| zizI;pGKBDHBu0(S>5O12cQvF zedEknR`Hrm(CjH~P3&XK2!5fLwaRe-EtRV|hB9za=SWa&J}}uY1qimiZ+B4xa5WDd z9DP9DfcGNP2L}f)zbR#Tue<0a{|FWN#_$uk<-8~kge-;%9x%Q`NJJKw zvT40Oc_8}4F3N4hjY6jj*0RL7gK3vE-Z5d0=tO%Ao0FWOH z1}K{mEJ~#ZMMhmFlPh^Hty2zIM$JA+2`APoAw}yt`hRd}Ctjm^z~650#cZ3%62LI5GR{hRMH@&Fr`T_^DyR|JC~8Rwr-`phR};$MmE zAm=9IsUqD^wZdcUm3sU&reT9!+8%N)@waH^=wEJJf{JrPW^wFeh@lWvRBTkXavIP) z%{Qs;?au7_9K`xpjl~u7#wxUlb+lRZVNm6^SJN`Jg~#}lM0^fd(*22X`Ka;HJ+X{I z)-C-^RxeRdXG1Y1!q0h}^%kX{st4ia_dSX69~EE~LqqBY|=^$h6- zhdp=;S0cH}`YmZB(mmV;);|40MBlGMc#~Ewm?yC+&LmPzX?;@dnvANVt)t}-`@-za zEU?%Sblv7kUQ{d;I$+fgh|Jn!@ye?5)+>E4wSqOJGX>7-iu_ZG6ANtKdt;8%VGS9Q?#p$l=3qxJcaAHbKGJiY(>B&N($@b z@w6>hD`Ntrh+w`#g(Gw|+A!SoI&0JBc&V8l-ePBKQBEv#wZ=b?OsM(%lQDteR>BPnDa=>VIfhr_YmLW99dJ zc#WB<)#3DUIqd-Ea^&;UPOPTV8St6j^xU4h-5Se~SKxp$0hXwPJ)J`17&e+x&kxd7aQaAv%ndTyypoKl0orGeE&KHY^95A!u z2QCruSElwr$e0*miomXVgprevmt5=I85AFNbSWl#WuPl!8}L zQtvcNLCCF0J=9QX^)(=N{b)dz^g%HS9wptgi48rk3OcE%dmmS&^P-S~wQ%azDrFSX zNK;78PMm9kD5Y6;lGRAx0AF6t8>$2~S^Jc#tp(x~NuWA3x)8lTih;rNyQT~{rDjfu zOz>|fBwGvh91cV6mZa#=RXxqpq~TJSZ;rimivc6mxSNEEGMbuMRkstVXO^9Z#(PS@ zio3Ig#M-ZEIViHz3^y8VJeXN)2L)U@qSV~}7f1X2{KT+oLv78q72?c+{oK(SxKGQO zu^IB%e12AVHP~>de$}5o3;HM=Y`Pp}R#=XN_yQB*#i}bA;PEDE7+h&J*t(Xr^`SARF!)e_$t7>>s(aVw`7%P5HXK2E}AwIx4x*M_%cGNN3_?4h5$@?TT zsg3EiHMGf+4nJ5b+|c%vk{TCIuECwv+S(c9KA`0?wU)FtA270Y<_cMwOKjrCP)mQr zSF2|u2l`@63Jt0xNkg;yAFgRTfA+l`7derFckksPit>?v=++Xm<8Sehy1+;slMUbw z+OY^8n=rjgye;I$Ir?|+6J77gt-fySsn1H8tH;Ed5Nc{26Ofdsugk z3?ugK-)+Q=7Z$;ls1)w9+(@uv7_l74B{aA(W{Vb+ErF|rZGYNiDuVhiZJO~r?BGS&;+ZKYAfjbY1un-Zw)li zmT#O(01h=k$n!r{b5=^OsOkOqsx2D4m+VlV@|Q1(yMRk1SdCgG?1GF1eh}t@FebHw z{lwY@Ko1{=!*A)ZB&mwTrAa7fQ+QZJJ#gpYgvSe+EMShFi(70%%P{~+4{y`^6qV>O z;c8rEz7ifqA?H_Wd}91*8sdzz?Y6?@)Cg}3hr5K0f)c4+#IafEUMQ}R8FY-%jJbsy zKPB$RW^ywL$0_v&F-T~|G{>`p%>(-b-tBw1M6^L;Ntomkp~W=2U^%jG)DnWZ4(Sw} zH?b|eMN$z5vE0cvmKsf11b%Rh`-tfw7bfqRD%WqZF}50(VNNR-{FL}1OTsIK;`Ip4N5qqjVIF*R$@36lTI%=(TMl`6?zGO05vZJrDeiv5ST-`#cKYCD1PYt zVgtTK*W!HvO`uE60NK;u{af|&H40dt_X$YR0S2QR;<9DR2_|kwCcJ~o3>V@N+QVRl zQB{^qK_Sx*H`kiOvG6FUzgmkmju>p=MmVC#kJO2wmWXmSB+6C>6fbCDSJ3+l``+Fy6Od?6;|hw4*Wr*KMFYOz%>_$%cvdQHe7x ziNn*RaEPN#&E!DB<}Z^wT)~K>%AAao8)gW|RJBDI@Q_kFRrgUhVd@3n;xpfAq!91D z1$351hp^gBVXIF`wLJwyhsPfQnI#2)ix3sR#kJXFHR=DrNeONJ+(0`bbn70Co*_*o zwn9D`A|;qW0vLsy>TE#}L0FI)uvg1K>eG2amZ8i+bZn>?qCOa~y8H=*FXDj4%@hRx z0qKU3Y$z*?EX+N5tyw~=+XHpC5`K^E;{;5`lhDBA7NH`(_J_9LYBH!#Bp6 z%5r$0SzZS{=rDNv@FsMgwt;*13?)R&N?ncuX+L?%HWZInWf)0tW#$T?*TM=O>A=cT zGx9X({OAhDZK_a)cfU*dwziQlil6_Qk2NfRdUC6b^-*=_eD-sj(9 zm)G;?SFG}u-`C40Lz$lM9+6{!#`y;gI;a4Iw-2J-?t&n9e)?ily3)G=L+w6~xL+6Z zebQ}kX_ytE|G0z^{?_tCKnCeH3N>VD@M8gaBVj_P*{O)Vl9j-)5X?;K5s+vU8}ey* zbC1-^Y?V4Hzsq(;SBt;}5VBhV{df`6@Y<`)+Gqk3l3B$y=(Tsx1T-`z;hHtxJ=T02 zv`iUxFj}k4%4FkqYS2(8=6!EdSJv(;^-#eiqvV`^xu3yLQ1g;S4{`(rMi`olKSqOp zKdkYy$gB#H`+&#dx>4Wplq;m`CMNtqR<5^{eylbpYYU#z+bv!Sl3?u|Gb4a4n{{K#}zy zz_MADTTlU%Tv6*8D;Mj0K9Ey|{&cEP5^}!nU_PE*^UOegHn^P;kMM-U?>#W6j52Ia zick1Nje(RKa2A4R$P6HZ$XGbh=SpyMb;|eJ##aSjEma>w35iKPtt6uDjaTo1}1&e9eyKl!ywRe5ho_Z`Sv_Ib_gzWe&Ya1siz%Qt@LWvK0 z!Pg5{nz{W7nX^RJTaFX_5K7{mX*{WL{B#QJoh$WFnIT#3(5XfSquJPbH#3WGL{Ato zFH_t9J;SDjvGTDZ;T6;%PiBz>bu=8}Hh7IUBGIo)jVjI(=nxstH-~Uj9hjb9QKO;1 zh&wwGXuXoW6S&D@Qv*Jjyb|){QhY`F;6d;JnKC$@5(yi^EppSFaew65a|M3=b=l*2 zI~ee4wHt=KXOgV0{&zRv>t7bj@uRljzF6y>GEF|M^sZ~b>9#Sk8GJVh%IX)#*W35A z*C*@!rSFbJU+=x|SNosW0V4nN6M)!A#46B_3n1VZdi{TT0tj*zdH-{QW#`XZ@eLQ> zB&Bp%sebq}K|J$JwW!WAwLgf-VuEmm1HAnVvdfr{TyQQ1RB~7&o@6BO%(XQi$P$N{ z2Sp+*SW{;|xO#Iinh_{Oi*xkyoa@WkyRD=}ODg1wxdN+alx=@I49FH*+R@uT1YjXZ zbKc|#l~&Q(rB`SRI>G1#{dOK+&{3esDZqT-Rco)h3{{c98JAlM%15=2*N7j*B!3_$ zt-5%t6)h(7)6sTgs_Dyx3dmPc(hm7Sw8EU}<4TDf=w=HYFSOo2#X1ka$kGTH1uS5B zb6MjT`6wxL@7fR|ypeDtaI29Cv;vxU>9B@;Fp!zY_|Wj+E&cGEz*#YY9g38-V#;jj zkqonC$jogplsLY7vucU%R2Wo-us->td`|O4-@62~#52ehFvR=%Ig$MRLWBYYb|fBM zvH$MJ1m`;0mJJ(2n?i8`16?jx9X2G@iwtBukslL@$DQxthx76I(N(J-Z6u-9IpjBd zo}nW>74mrjY?C)Ev`%j0S~!`VRnq?ZQ1@}z8~u%f)^{J}s4qEPb;j9L_)8TD+=oP9-Rd6?^_-JTdHSWni-09o%rScZ^|wp z6tV1>#1!$%Z7&Lf>-aMVbmx5Wz6@%yH;WakssWywKCJ!%8Cw)Zgus&|(677S!ob|_ zVo|qWEdH$%@g(s@kfdS178W@p)Eze30XASwiz54xfJerNMb<0EOUKyro}60MIX@qV z+QP{FZro!Mq~pDI$!&5~?t+pPvu9d5qiX{#ANW5)X5>e#XE1o-Ep|19PGziqscCwh z;#?wspHuBTjEl~~FuO%YEFDDJ#LZou+%=71+8F0vYbphpNu1_4-%Z`fLTR4b?g<)- zw>a8{{0)6*e zcIo(3PRiqN^*wprk*|Z>K6nu<>edG(5ur~+@PF2!H}io036tLX)s$=7qWFnX1C7)j z*BC;-P-VYuwgoD_A@S3xRgV;@3q~`SMRInSX+vhw|6G;iVMX_Ry)c+A(N3WC<`T4_ zDuk}pUi1`JpzjWpmCE}=rD2CHYED}QL`r?r%LHq01s1gnCMud%5RMEY88X2c5Ki7?X+a2 z%kx^~>}{HzYr6zDohra>l*#vDiGXiKm!Q0`g4SM@%rGMw9DTCE1^FpxEj~PLt7NWo zMM=y7Qo;`nPaQngHp`S8fcagK3G#*(bF7T%Fw|c5aEw}gUpe4+DqwUSx4h(zsU}YA zUF%0#xl*ys2d#x>Sp5?R1G;t)rRbuW(kxize3f)y&|E=NKy*EA0Fzv97beHh8wLT4|#jIWDHyzn1bX<5XNPYRwY>$ zDuR7irutK03^bkn$x085cYEO`s!ha(*B!Uh2`?f|=mtX+GS$36P~E*(u)WnFt{aaD zK0CvSJ(4paZm^V!nPe1DSDZ7j_>yfMSWVtoER@&_P?xPqUSv?o7GnyQg6;f-dpdCH zAIM{S{QkDmgrsSfRK!K7(%N4OOy+XR7n7Tj1YV$hKm&U6cQ^s~@Wb{H9i*i}MG;Mb zhEWA=MSzz4CQg}E4F@yWYzw(tfX10Se)u}rWbHQJcB`5nT}>8iFEVcu+?cJ_^E>Y3 zim1R~2>z!HV-Oc@h)^$ep(+?EcRem8RMngloo^}G99yHy*_1YT6ceswjHoIu+s>v= zDB)HO&XfPV7;fU+yd8X8{GORbgHWk+aX*rvI3$s3=N1{c!cWkxBT->}{t7NGToz=< zOd^xFIdt(m01s5}w4CSIiqq2%mSP`#`Wqo81IFH5f|B=jqH&$t^MGiJ;gk3_G=qkE^G@Lp9fmq-c&dQ|Xy&%~> zSJX2z2c&Ngg4rBFa?)^G$0nz`morbB`^kBmy4AoA``DXYM-c8~;_ZkkQuNRXubMBO z#o?4#4?AE&Yz%t&W_Vj#$+1R_U$_(3IUdyH*)R6*pd7-(^Mza6FWErc9`~+qO$NxB zD)B}$qRGscgH%GYGmn|PXURF2#`wNJZ`m)5JLnm-{6AUh4<)~SqW8V}_5JDnEBN(v zUcc+rLpjCN@`?W20Bx-TK|X@ROBMFsUGko~7`mye5Z98ECSf;jwB|?o$+Aoec7BtS zNJJM0;i+M)Ev%v??g)r20kS!c#={L3a-a)Z+l$o-8z;5|AJMCIFB`+rn%s%jU`aLT zTDMlg`1+X(OnCNR`;;9y@{)$AHt6G!)DD#_KeZfg^gixP9e{6p{tNstO zHgOIr1kE$wPiXfhf4v!foxivzQ_}eTO93U}A0RdeAIba5Xl7pC;pVkJ&wuKKcF@Wn z3BD(J2_o5(42P75PY$Tn+6Sfadms1H0XpaS z0nd!;_qCWtg6#zbuQ^{+MR9SrT)u}J5N#y9LF3Q@lwR{MRqZw!NhQ%!5FuvTL{X>; zQRZUxrU=89!mMnq!LX&H%M|)T_%Rv_KKkV59O=cD6&nl6sz^;)#q^IQ&5N02^bp^h zD?2JPb5d4v&W;2zs5LfQ@h-cn)odwRZE7+qTWjsLyfoi3*>Si%zL#D9y{W>2&=ST}X8|W(=Z=Ve-&R^Z@XEn>=@^Wb=)3!bdTfb0XpUPla{rd07*zCHpi?cv5&%C}3DXgT1_(Y_Ln@Fd zY!_zs0Op+C*r^_&vl%RiAB4i#c+shmQr*RC0J?B?OK1e*cyw>AQ1Ra8%AxLPBynSl zdo-f^oQ3yhRIN_Dh@BW@-)KvsYaV6ODVnm$g$MA54Zwu8XLfuYpc;skiPWZ{eXgtq zl^ZUo*+yWsgSs&ApUYwi8}poN`i!9)gI{ft*Tflv4^Yg$v32Go<5R+irCMw67-KO9 zA`8~Kj7=lVtvgL`BrYN(>k)WtcLft+JEqp zy>kY@i*T`K!B7~k0n)$}=ylgJA0hBou9ieBWcClO$VKXv#Z0^cpO;;5pQ%R2)93&Kvq1INR2El7Z>|m{7Fbcye^uvWi zSnjciN{wu+Vzl{H(JgGE(-7xCtR%P;+v&g_LHXJ@`;nZ$fznK484 z=wVDKkeN0|%v?YKysO)4grImo-g<(xbQnATVgTdGd?gD)_e#76bscM2&O{hE$v>Gb zt&IENm16HHmm0z=?q?OgfjaBla4b-AblX@zS=E)F?1~Q^%LZ)Y(Ger z_j+I7{tLRR94*)cvE{KOfgsu7-K~#+=heXkL;V5h8#~zl%u2brgpl}w$HLDY3Q9`x z89ystF04fUfTV-=!tbloO})K;-`@B^3PP)&e_itj|D${N-h{C>08Y! zZwH%5WY#T@)(3nk)*oB+-5Z@+Kxd04K`0JPIf2=f7grWR@a{}EVnNGXRT4c)B!Of8 zqLWEC3lB0)BIhh6WTPs&6O>fUR9sR{eMyt^QRkr{@YBS|O7RrdAcO`s7@Incr!S;J z!AN5d;dd{xraUfwXja%C4zlB7hNc9jgIKz3MaQWsHm*{J4~xvNQW7@jSm)xov|;z) zFBL^Hq|r>{g@qYl>q!4tk?_OCsI8Z0HLUsmG}zI`CNC24GqE#)KDi+R*Khe9;S-B531Hih%1g*zkjQu_@iW#kRB6{iys1s>D;Q-Q ziSjul4unD&YKMOb=OVD|{Pghz;!<(UlG)T}H zy)c4TLf$MtYH#h=3@*@~!4N1Pt0L=x?fix_(^w&U(@5SSeLQ%rH^LRG<9*InCHK(G zymsF%hM7kbhz)p0wd*W7_L|F{yDSglQ^3AQwy3CFC!#^S#ndAa#cJ@k-P;-6_HsARtzB)e2y{F+Pvfmxstu3 zADBeT=~)X_NEH?_CRBvYaqOSd|#kL>M{gT=(eFfuX<8gC*ZBJNud)BEqy_y=#l=56nS zkgoq;dNO(+N*8Ro{2!zPQXPHw34C7$Nsd5$PcI{}36YhrJFp_Sawcsb|CyjZUPnd# zIUC+aYqRq3L_|8>Pw|Kx@Ed*XeG@UxBOj>x&kjI zWsl!8TR{-F$m{1!!!$sxz@6hcx+01VC*oNg(h(s))mU>V4%~dS5$$apF1GT&7MQiR zmkuruWgqX$-O&MG+1k#Vy&=9k90g|EXKP0g zTw}*3Z4QmyD?~gY2pv8}_6Qb(iBn=5o+YD1NkggX&ZSYa#?8wttV&TZR30kDT251N zarPArc(k|uyA;w}?Cm8GG))%a?b!P|@cx9WW6GnUF!5knqm;lD>F6nZmr70e_@Z^J zZyC`*SUuq?w7g*c;nkUNHS(FxBKwh{caDelUkZ$6Ce{yvpWP+R0EJTI#+~_0dz47I zGtZ+`riRPH%`r>UyI&I$SG2Y4)#28KFFkw~P|lPt5LtLyR7^l6<3vWLH+13a<=SgV-EoKbR z6%-1$$bJN(xL8ZFGKLsM(*?q*Ylu3JByH@=Eb30MjO_@97}NiXs+?U21|oEVrEUrf9eL9Hh3P?Fw*drgIu?le*l+rWG>x7 z@)0kHb}K^p|5DMg0fL(SZs0`X`x3Ev>YeyvS;b4F@IVhA<{-*n7t1CpE>jo&@e27n z44e1p9>pjd;d|uMGhW?13N0{huF@GWw{}H*mAF{0Qy7e+=0Y`s z=2R=L%4m)krj-KbyU`&F&&cCBTyF16M+sb%6DmwW$yZJUo4ZJeu5B)_0|xqRp0GS5 zeVM;LiGuKYIK`jf&+b*&xMD-P+Mj{_)9@}3f&k`31+iv?UXuPgf%>REyEqxRqijK5 z4p;8pS2BvmXES}+(1=fw@PAgL@kF_xTV2qWAOvQ=-J2&kt!rQ)6jjUT|M8Nkx!UU| z0D8iwzf&of7YN!Ih?hJHUMH>Yww`-4{?kTU`TP5Sd_MPF`w4=MI4}T)uv%vj^oSS-(P#RHK^eq^*MdOpcZ#(TRN7W13=vtwtvp?zYWKk z@61)rN-G(&{j}#eZGX^Eu~PW<;%O$p(S3zR9)iEgwy!dH2uaH)DBEXp(cq{fv|vXN zVR>oK3G{{4$ASGo>xuk9H=38R{xP|6Tp;3y&5 z5PhZkC?XqWIDT!{CbdGw8VFcs>e7bv`g+LRFY;}Pea){&Hq*DXLaE>eUFDRYg#9a# z{_^K(am$iAC#`<}E0!Jn1Ch^&h|7q83zX`gU;X6PnO67Qj*62ehDn14N}{Ag8EEpV z_Jaq-m`SB095PcG&dxM*gcKvI1-pt-q%$ImPuE%^EOOmD$#+hVtnwN#vaq<`?1*_> ztbju`ppUZscOZZ5y?z%4izgPESnm7h?tiH54;^?cbo~>Q(Yk&+GFZ|^y}kY*|d|`Mq$aW`|{_s;HA~}*FgFGdVr6g*9uCd zAbaaY2ArgLVkcPvOzy9r?WFj@)uWj;P~~QM@jAdGl$V;-wB=aaoCn;J0?=+^Zzven7xAQWx9{Fat%z&iYIvHjSxy$n!)rfv0U-D{3i5^%T2d9L5#Drn;6Kw-a)bzO%R5bLwc#Pzvyh? zf?6<_T7dOugiG@xS-_eG8gi|jHJt7@^QoP8u~7PID9``rF~|My%5n+m20|QBI20VP}7~@YuS<^ra>1TFK8}}q*g1BliA@=lj$86jf0i+VGD$~)W_je zMrIrP5byQhz4f9B(H=n>)pb`estHHw>%XtV)RLZ5jR{V`6p-)W3@(4KRGO4Ah9S1` zssFBV;MI#Gd+bci%+*7fcjO(rtyfaHD3Itjj@v0YlU>)4W07HgF-76ymR2Vv@S1>3 z`^NwwRFD5aYz~Raba}13a$N+G4 z!4z8x4HM}kS^rTay6|UY@N8E@IBxG+*p-OId(oBTXwGV%Z8ZI1)=Y1dBJxMupPuI} z0skJ)Yr`MCua=-sW>(g22+0R&eZc4WYNHwK`_tvVmH&}dW=_t&Pw%l0SY~eSfwcdD zwAXXj_SD4%BWT(SG{AbjTUA}RX93a!gJl?a;Qc2g{P|z{?D+NM2w7ADGQj+t8m#h# zXn&ZK|4-faQr-8)aMk<%LnEzR@Q}{;*wg=b<-yr*acMA0T4V0>zvGyH-!xT*{y?MI z=*zItha?Dcsst)7IkE}}2pIkVB^S8?|6c!RG6XqfeO3hidtpJfrRAH&dVlxWkH1(X zA3LzGpknDOZ1>j`?V(IGseudoNW9kGVv{4M83mko7 zA#rLbRnf;~d~T^W-bcpapU;LC@KsSs-bx6$sUTk8v*MV9Q;VeZO3lUeFY`f>sg|1?Vi~2!g9F~`w0*PEj{|5*` z_r6de7AOV;7h45Cr2)_|YQUx8T+~4Z;HQ0H2PQoX1Y3IinjxN5=m};c!Sq6FHS)ltLHo`>#J66%S^oUlYQhFl<!`Ud;L`#9%H zSUfn*P->L%5Us;-5&Yr|rZuE?S4#cTJ~Y;eU5cDDU}8RDaHP&&6Oq4G^LVYb$A#(~NUs3;2S?k55uE zhpB7=q*X$0P#-J~@B!?ME@HLNk4rStP?@H{KBc*CND0DvH87kh$uG_!@%U1!@gM=< z~QP+S+VdFSJHjK2Yw0r z7)!d{aLE0?@G}p4UqAo(&+{GM@f{C%|1EEM3;+2)|7X7YyT6;8Zn}xJwKaC^*ui&v z$9M1xzwiqu36Y1xA@6d%mfl=Hg%awbS2GDljqf zm66j3z|epPzVNSqjH%XROHYkrrQ7ERe*0q_II%w7#<=4^22nROtK8!E$HjE>$jLYWHL_G(~{c47o-#^*_)JdJw2^q5RH zE4&oQ-6qhffKU$TwiEBSPSEhFlO`k35>{fi_x=oUa4L#Kp(wkfOb4;W?I zgaB%CU|^v<*Pu_?jbgDPI3%n_lp&xIp+`~05@~h9OziQ#dcZfd@=S@4)I(B2;)xDH zx?#v$kajKf9K}Q&K$2uMZddyKK0BPDSXn~}hd{ND!&n$jL#t-VUR{!`$7m-aS#)H( zEWRl;+JZk&qu7YaqKKJ`?qGhVN$NcNXKVCN2*Z^Y<**LBa^m|OjntFGU8bJXr+-9P zxZJVv)omP@@R(W4AZy^`Rb*oZx)vruh92wywGs3}#gir#=x%H9iV*^eH5$@zqBNU_ zxv=I*>M1Hh!xqG*BogKGht7vPBcemWSZ^>53okfIwjMF~@+@fR!cFx%8VQw8&UiB8 z1Gt&4PF6Pvy=y~35<%lo;WRvdolS(R&=>Sz8V1W0&@xpT3s@R*$!{GaQrVnPjQX#Q zx_tX;U{tK{Sy1!v;>iqZzLn$GfBo0_(I5R$YPA}_{_DT~pv%7Vo$q|a>wioo-OXl` ztFF3gEG~L1(eL;9*vCG`hd%V7hqZi~rle{5n78|QMSmoA9&y22V%&1zR4}s@;P_CQ z`of44aTd@~` z)d@FhwL&?S(49(X*j>W~J6j)TV6sqV&6J!8IjveHPNhwPKlY&z; ziGpTgy(BS0;lnJyF2DfPfHW*K15bK~Yx+SkA6g8+XmUzh+ zwuNH0#^k;tcmc%;)IbL%wx5L={^%Tw0S%1|M~srOkZ!M2Yc}Zm5^RKbL8}pAa4Mnc zdQkz%6jX({fWj!gG?>KTCOixjtA@lwRvNS$`cRd#K&F@ih7+K%p=KN`8T?Gd(Da$G zG2MQjPQAv|FvC>3nt=%Q5^7BghlJkm<)qtk^6!foOtz?#)9MOt30$hkg3@*+tM^^X z>fM604KMy@e@C(-;f~wq*}u3AH}JT2o!$;d?|4dnsKjZBT{ZZb70y4Q=JWT^#0&~-@wH)@1f3no%z#CH(uVcOT~JcmGGGn>GIU zr+$zfGmjpfU%GvsKX}KRC`-qG{+sLgfhC+pFykaSGB*0)VKxINPD8adbG!LQym<*|yUFQ;`5V zY&DjP;6e;Q(}v2a++heQ0aYdHJ5VKW*^s)jg2oZrFHs}d-VhQ)87GJYR)$GSK6D6{ zs1OFja4e|@=@kqo4H*%0`wFCOS-8s)XUeh54fSYOwcJqkwn<#0@_gYEakF0{oEswC0*|Z_6yhm zrc^N^tRM8WjG>h@v4ng2?1dH#g`S!|u9gxObZMeNF!UcV9@h zE5>-wcYfDrIDGR(Y@B1*x3YjH4SMSdlXE9nIuuds3ccw8Ym03dCZzxKJT80JH(2Qy zc1*9Zu{Oc})orlXg!=b}gT#YPpkE2M%mDp{0ppPK6+It%ePt>W2HSUYPw!+kO7_40 z|Lnbaylq)k-}@bNu5Ndyzx}Pc_f}s;b@ZKJiy}x&Ao}1%iA_2micwK{&%|g%(Vz)x zUSbzS%u_Ugih@7{1f`KeD5|CUs@pfG-`(ow9Pf|0_BrQP)vYS31B)|0pL@?ad#}Cr z+H23X=5LPi8^2$V%(bbCHQcKz%r~yWkq+s-9fp71rb-lA3d2Bks-w^erIAN$AmWG$ zREk7k7QsX&_^Z`TNy{nm$`rEVaoG@^Qb>Wz1+6^(FvtjqJ?U~&s+y!ERRj2+lyi-2 z$=rNtfTpS{zWar5Vr^x_-UIXe)(3z5F>(C1;~cRKYR-zShL%r+x#gEsetN?j-oPtf z@e0mA|9noLKFyon^d>&`v5#@%jW=@OzyX$*mpOd+FvpJ{=jAVdIq!VuJGu1IOWD19 z_eRImYhU|X_U+rpo8SEAv-bU>7rlsm`}Xn9cfRvceUPsNn}myhp+TMZ12%Tl0GKV= z8fg}h8;`LGdN#}+C(jqU*~J8;vE_$e^&(#VjZc5nZQ`oRyZ`Pce*3RJ!||0svd-d& zfAX9w`Nz+=oZo!+C%EqB!??n4f~}1gH$Pp-*tCv~iPy^jawgmOiBhUkM;5v%SQGZO z0qB&vWyp7=AvM4Cos`Ww)CMI&ADj?5bXf0+#*Qj6R0~O1rDp;a=vsk#g>JfWe{pHk zGmXrK~{Kt1uBYFLf26$VFvRR;yt>iq#lN`GCn_}ofA5;#udd>gv+4aclaE1 zHp0h-WVt5pSIC`bf7uoV*Kq3 zn3F@MZmg+$!staip*yDS2jF0ow~43vaBm7NOM9VDt5e~vr>|YkcVpJ>+{vPJsOAGG zot^mt&wJWE%uHAO!6&{2S3AFii9iA#3(0!;a*cqr!*?tSNgqa`ngt?MrY5~_m4(k1 zbSl3=(ATp023$b(8yQkJ8A108BOB%4bHzo^y@)$+I)2XQ|MJeaob$P-Qaowpr=NP9 z%1=N4)F?kaSd?YSJ@?$hg%@5(6g@Ug;4cZ(y!zFz=Hnm#IE#ym?AWn`=RNOv{M^s| z99LX%1pse<``h{6@BQ8fyl$)N;n#iL*KzRRLEirMw{JXu`|Y=L>7|$Qp$~nCm%QX9 zkLrVbC4icr{PPd+o*Qp{a8NTL2v2@aCieRghc^I@0uF4xIg#uAejeI0$2))awb;jy za`s-i_sj~FbDTFnO*=i?)a>M$HD2}Oze`=Yv-vN&cq`Tlufe9*3PX74@d8J-&Vytj~&<49+*#I=(qSog$YEF zjnqiteQ^3VHDXd^xxmL@`yS&JD}uHoOkG1q&?E`0UJvq737e#5p?m zm8?x$s)d+rRAFkU+6H1n=WmaN@)04uIyt2Z_{(=7xu@FE#UKe`|y>a)QKlK;*pbztR`rkQCd$e4N+?z7(rSkWNW8Tc9LN>s#X#QZ5Zo9w~^^9 z*1~WXXc|hgG6L&8Rb%^68jp5029st?>vz4V{PQ?0q!=ne`xhEp^7 zcmJ}}1jtPES(@iflK}u8n4KVOGvVtPftNh@5`OHp-@r`o@gW*d;y2&_X@2XypG5Lt zbztrXZZ^tkumN78(?i;)#%F_{i7}=3xX8j(`>dPq2e_(7~0DrQ{^K|f7;Mm9$=5GqJ1T4IrU;~@^A|{RMRxUxs)|uz zkd`Gb$8?W4+83`gbTMfXak^5H@hr)09g0ZE_bN6iIk@W>hfnXPj#k*${yXwx$MNyS zsN0E|8xZfBjTMBVdKq>->LC=KM zU~0lS^ASPw$OO=!bvVDRQQ+U!K#?ih2HPjJaSx#0A-FM=ncGOih>?)lS__=AxP}-Z zjycD2+>`tN=RKLHYz$Bx593tLj+lh|558Cb9S|kOYm=@Rks8gpv}Yz&p?mfwT*d5V#M`UX(DY zO*)Zk=U}yh+!1@BXe)GMy3XM1P?n+srYy;+oI321DmJ((xI@#1)gE-jU?mWmd)FOf zrFqv$$CHR)GKiB1otc8c7)*jrw=kK(M**nRnc&+o2EjEe{5lQ??o@*&%_QsN0Tawm zRe&D2$_Edj>L_F5!IyB{(9t-2X)(mHY=EcubWZPN#qwT*+%cxDN*kc6H+eGBWMqt> zk!^g{2$mtnz|taS9I`sn==eNjJVHc;{FAR_cIMG%Z+6afdE<9}J-_hIk2Ki_gZ7~I zp12><^;_#GXJt=138TvvzF^3!!Dua7iN6+aUU9bj!I9d>@0N^BJyk zxTTzE2ys!-pA(phNNNj_qqSaBwjvnU0Z3M!Qi8nw*ejh?A<7GiNbPnh)L;thun0AcriIJ92 z&-LKcI=ESz^B;oIhO)`!cSK4Q7<%pA|U=oW4{`7Ex#X9w+tWv09* zO>36!IUm{MX?HyKiXlb>vj+auJY$4p=+ITrdA9*Je5}Zd2WL?YxMPFYH7OA{z|n*} z7vcl$U3$E!?O`o=nK$Px@5)qg`*<{8hqLxVj_mgr{ zAcjlecR^!3+my5BXYnUiuv^Q$=ZbjycK>CGNjCej?&B#KXU?2?P*cp|aQLYCqT8eV z35@Ahi`#$tM*#SX8*kyq{^)}nNM&Pgeh_f8@yA1isU8Su*!a8Iv4vaiI?2ob<$nW( z@B5DD^ZnoXf=4x2zT?H$uzPNb-}v)Sa?8D^!?7AeH4T;b*cA;6{>ic5FQcNyP|aps z_MG$hKY#F>IC*@PcmB^$AxVrhWJm$TIdtqGO~D9uSm35wbOs*!1u8;qLGi?A`j{wT z*pAVCowNL|Oq$?}yx}YOKnUp3$wNeh4cQUh=xSJ;!;>IDZ)ur7zcHqB?Ps{8=eRLn0Oy&$*TES@N`C8#$q~PcBwNQ)+6S?~N3`*mOLq z5{V!vouMNiIaHO77I+`ZOo6qo(9Q6b3u@3!In%@ztl8wrOx`C7<5!QIMzSPmLqGIG02_1DZ~yjh^Ze&O|55F88`L~W@oiUK z!M9y?1w~c!1Hbn!K7GfDv)$-JIert^n9YUa17b@H_&K8?$4>T*z}x=Ur}*7J{uGH7 ze*dlC!~VVV54DE}#EY&x#EY&x#Jwk%`LBQa2|n`qMuyuM+OcJH0xrT^&ZeDKdchhH5cRed%{8;?WBQkG&?M`$ZXTVX;2nwuss-L~5pQE0A`~ zdZt8i6x_ulp)R04FGdSX;uGSPF&>NB2t!1?sKiv1U8s67UInY*hv4T0jX_<=Ao!+S zVidfWMwAcCw2<`;w(%kA&zJB@L;pSpA4<{1KAFIZPO=li+$xMlo>6Ww2Mg-U+vvRo zS>IB$986o<14u@O+QV>XFs}58!Jn>RYMp99q3n>%j9DIK&@-f!Ak_|18?k=ZWh`F$ zC!|M(zxRek-@=tMFck-)xEI#Pb1)0TBj3Q8HDLc?dS=MlJv$-p5TCJ_#Z~McD94uZ z^*y517>yK34H<$KkWUC=mEaEnX9AZhNZ7RZ8QxP(nY>#@x81R0h3rm78zAnNNM{Q+(`WAA3~$+~(AL znd3jb_apq?$G)&h4xVsr05jU;i=1^U@?gscdHg{_sx7L$wGXY~lN+Q{W~MTJ>n;C` zy?f@)y_0i9URM0d|N0mo{LF0(CO6lOGL#0J1rKULtic-L&wuG(uyeKtKvg;Z>wkJb zA9(NQ(W1nxkJ#{eVsk%0Km<{Qvj*+8LMr~mD#kmABV1iGzH%pOO_&&5b1-8M!yFwG zy0Fk-c34+P6hmDRJB8&w5rlSL1ZxbMCX|GQe4Y?W0C9@3f}0UEi-~KXbkxStx&1U| z94I%9=r1uaq~YCM+{S7PdMT1Sd?JW=>UM;&7N5lAcxW4NFl}DsT;sj?SI!D(q zS%T{UQ9^AEbr*a>5GfRkW=*$_5I#2`lY?nash2Q0Cn)`%r#B9({r2At8C_y1k5{<+ zhSV#4#6Sz#$fA2AM44r_f)oGPpcUl{_BT6$?tviv$$$Yy0Re)KcLLi zfSN~gdzye6se{dcPC&z?R5RfY0MB{G0e<;szw=RjhP#d}@^63rPdUD{h1j*pbwmVy z_WNGS%btJ5173UjpK`{Lx&V;hfq%$eDp&O~H8*pP% zOe)l~8Dti33Z}leOqH|21ri$Hspd44^FltKFtY}uEP{op!0S;Dk)=p2-a*v1SRA9I zLahyM%|#Fw)J{en3%)L)R?>k%=b-MyXcSiOJ^{6YibZ=MeF?3`4m2Wk%Q;Zf5J#GE zkO+ant{|ToF;zLL^%2u+>v$ieZZJXubb-?%*j*N%31+`QWEmWYPzT&=(2>AF3*ORO zQlvEWXAE2@Fcc^>aDh~iJ?m&S8_2mmh4>6a5eKs`A}(cE$1GJH4ot6e*NJP8Sc7S0 zJcdyQ4tg{9a@o#fTzC3;$e9M*R089O#MNlK;#*$y5!`4eAOG}oscaOS2!uee6_DlN zh#g2wVET2?w=o7Pi29J0;XK4=9C7pgZm1_V<5C-7BY@@}#tzNEt~-nd2Mwjk+Dte* zlhuon4IWRZdURQB0C3$nkh4X|uD|aI0X0u`k}y1ppynqZCs6ZCPfbwsc*i!V z`3j61?mNy;y#4*0Sn5LwW^0E}19&DR;d9=iCR!F1h*Ru_+M9+<(EVT7tPFddl=uDN z>mT*8-*)&kKl`>1a_^~S%E}R0!`EJWA>Z}Q&*Z8L_deun^P=LLU-pZ%&J<8P#OZ^7 zz9NX}i4jy4XTs`Ms(PdQLjdiys9Omj7*&QIa5XwAu|AXlY+a#ZHr~fn^#&N(aJgzu zRtl&Q3TfymQG~%V?DR2>14WB4Cpnaw00I>7Jz?p>o%mf5QW>U>ufn=ePsf<47d!k6Sdk}51Koaf=RfilL_CC`7>2f5;qVY&mi-L;?p{h4b((v9yq zUTQ$7316mIg<}eb!WS#0&^fI57?KrFT~yP6)&XWa%hU*Yl5FWkwG{N|qrAmRuF%zBc|2}tBzw=@7GaeY6%8&AS2YY;A9FNh4wgz z%SZrdjAO_Y$w9@#7$gf0<#IyNeZZn1MTDeBdGZ zm?n$U4MI?@dxH5XF;o_!QTUk*n-xP#AQs%Zk~U+-+rV!U+mx3E9#Mi)cdcZhnifuP zBNRE&RhpE@(j)yQBNPPxCLx6F%#qU%4QhW(NNY!J1ZLW}et{IBOGSXldvK0Y1WN!po=v`tG%nvYp}WblQN3UQbYda)9_M2Q zNlkk_$M_EFVbxml4xD_^9IZ1-YptLfLNV_#eL<%LiU|51-w6|ucmZSZ9S<#~o>gQR z5udJ+!r}{$+$$g+zq7=*V$3*{pHLt8Hbw~2xdG6411vO2lJyjG8R+MS9FK&VBw=1i;P;>1!* zGae)mu!{&}#fJ|2&?z3s*;Ao&iNYWXvX{M#-}#;2 zVc))ek9ptQnVNq<;l1)dKl1nd?q7a}wSFE}*yWbe5@Dr_2eaiCXUfJ)#y^4^pYvhA zll?V6CpX+qC*eQ6={uQU=(2Oi)Z+?pzV=`K8hKuydxN`|m|kqajcOoO)-^K9H;BXx zMh)O;hz{PPlkyZmU2kB$TqMZdrv}6ml?I(pF{29giXD_-Eyg*jCLz!?USTuMoOEKqQY=RbzShN+$MBYjOI33wMV1QVW<2kc` zTTl;6%JG=GC}=6{YBDt*HYZkV(KJH$&xi6!;_(*^F<(=mHwoON)UPS2Yenu=aBWzu zS>NTzM?#udqR-DGxzIs4nJQdHP`opNPo&d|ESx~scZ2m9Tc9QmAgzi*TY9X`$&Uk~ zKLtz~%q(yiB!EPNA%V(B7yZTiZgK zKTDa|A;*_D+RY#Iirkv5d9YCBFAl%;tIE*w$;#AR@`lGJQ*-+-KXo!S_m8c@dyh4? zGd2H!!WiMT-}EeA`%TZHcAhh913vkMd-%n7d>Bd%3co7IR#>n40I|PwhUx~Ox&OA( zxB?IR1wZ)1zYjpG6?568d-;hsyo_DDroZIRGf6Q{;*tY9_`+@H?&gsFvlP<-lE~VS zZ4V=X^%#{Xth8Gi3^s=ri3Af_R4Srb!KEOl9qCd4F?t5d zxPmlB3PD;Lz>X@kKm+v%t$+%ONN54QG$GfDQK=m9iZQ}I*aSD;BSnq5`!qg|unQfy za~ior;PN%(QcqNtM7J4qR}HfR>I071L5AO_xV4(4w8G9O3^GW@hV(w6Ul+)JAQR-I zqRYEr)*}m}=6fANahNFC!^E+|mf zXF^u5J4Ky$G5am;BQUmtpI5YLs7qEQd~PQJIJKe7097Q+i;Bp>@RL#RqIU z6?ic!Av>mVC^^+_L2ISV45kjv0e0l@y(kcik5)iTJq2bMI(Vz}oiwOr}f^8a5qW}+e zUprSOXUo2}K0h8+eE$0Tc+G468|`+=_kaJ3dBrQ9P86N{<~S}Z{`hadz#n}4dQPtN z!)GyuYcAN$&;E;-@~R*I-E*rbZ#|^x4#ji_@`CKx0J`nKuNjPxagJDvMiGq0A?0p@ zh?yn{loir+^2BA$y7A~xpsf%qu9MGWGm=$DIVHp^In4JcyWn=l*imR-mdfBX z4<1yJgnCA8U~C~3G*U)WN^20|yN)6j(uD{k9$is1uSwzv&UkY5AQ7TECXW+?cN5+4H`Ri9pa;&ss}O@a7w+Zu+O6|=vRAb zEDww##zP`F3qG&$F~rLib)@)6=r)(2cGIvJ@F8=H5K6E-M3x4EoWWx-zTJ+;5ZmRa zCpEUqPfwxvo9pl9H~-{sxZ{pRq-yg-`P zZvnJXEC!(4+5Ehd8+~&L^Z}Qd;58M+kmnH9M9U5>8p5)ejTP~PL>wi8-#JCSKA_&e zi+H(Dy?Yv`hR7%$ff~%HpxE8QIYm^7%7P-za2>@gE0J-;E_8GCr9|c|m1#k{3_aI2 z36>A*CCmuY7GxlJ(I;;X(+*TK{1$G@biK% zbGjc_?D~MDtQl8eh66H$)GK)-{N{HF{cqd_X~h1|fc1i3TSIGs`7XYjphXR?#!qFa zK>C8?l%Ly;&Yr|wRx-6msZ@z;$Egn5li{gFVV~k|ok2y>P8lwQg%R3<=oHX}s;ijQSv+YdIYok` z1v(%Yj4mjlrUZ<@)Pd(D$3o{@EkOiYog!E)C)k|l%wjf+EA;(obtGD z%2f`|gbGtDG`JBtMIs5{abo}nuG}PR7~OK@p}92^<>C9^0Gjdtm&bnnT(5je#*YM$}TFi`*N`#!-J?+RdOT_7h{No@N^%=Bo>!tX!puOBMJ1(aMKxPxkMDQA^6fFqG;w}Rmky}o&?3=IAw52&fYJ07z?%;IJpU* zyAmN2fiqCvJY@8u9o+kk3bo_V$7T@Q2+<95B(nIaEKI6xFh5H^;c%%U`mH>t#57>~| zq4t5O-2Brm9cd*2Se-K-q}yo{?>q9V5B19J*pA0FUir#bp7nR0=lq+0^Ka;MI%hrp zp7*@xOWyZ3sCf#<{^OKmCt+?h7yGJ)gSiYN@y46=jgCZ)KrGRhEIJ8AnX1L0v^5!DRspE{f3^ zkM}-+iYmN)-Lja)5vE?J-Zh0wQltPID`r^Yyo7SfbPI+tMr$~+g7Jd3TIk*mmBa`_ zydsoc$J$(qDV6SuBP~IXmx%M6IcNf4v%stYpJ7&Os1!+Ra1d9PD2F<+L1DR3(Dic( znmd>=NG15Ohml1DQt`xnC0DcUX4agG-u%MATW=o+Pa%b3|a zkFa_$X7Ei5-1CyqmcHk&At}>9sC5k>=%qn$PQV@A#ro|-+E;tpuI9Y&y^T|UGtc^c zyKp^EArWE>+HoOMGfD%OH!m19f{>**gIQ!vIY?L?;wnCrt~g&i67G}NO6I{@_tF$L5SVk58xib2;*u-dSj?%NYv z6P?o_vQPrUKo0h!paYnqNY-$X78MGRMA2D=TRpv8u`YBnW-h$e2#5_T&WJ$L_&!af z9AxtvFtZV?JOt5x%e8yI3l+0nntH-w+xzK(F+F`Y2lKnW>$@JeeQ%eazDi=8SNzVq zKfwn+dK0UQ<8yjPnZj>^6*zb4$!%#Nf0!X;tnj>Vyp;Ezy06)uEpNctkKI31iPnP? z_@sSZyvGhbwwhe*TV6a_i8eoyyH_y2DQcHhgXWq(k;sNp)#Ui&2#q6jlp{?`x3&^k zAL4*vOi)$JOz2|4U{UN^37Oz}U8D{P1Y?zQ?+nHXVuSFV!y{JEPE0*ktas@8Dqe(Y zzDpSibvNE};>J*S(Nt-TYQ#HSWEkuLmTFjN*5xgT7AwSpEezr-q_UWCO}&ty35XiR z8^m~&fYdZHLAR&|T~#nbPc`Vgta)7SSUI&u+bM-A)>w9mqs(hG5!4!d3H44$SE0Pn z5~*SFnhq?)(6UJ4+4(U`Jdn_F>l%gy2I*#6qCy5JA z-ZR7K!~!l_ggFO;8e|617MdxH3^ItojX|T}BHtKkiET0;k!8|f*A$f4kWrXujHwb= zikfiUm=$H}1gI#3P<>+BD^i9PM*_MuuzY!QVV{c${7}GV3{jyQZ#NMiw5uNLHVp$Fgh{GDMhHzUVkBg5@-fs+CQ1ZigVqHj2ij}liUNr&6oGJ?7LGCz zBugNQiJMmXe71|5O^75o5lH2!GK)>MgU(4~CE#It9T_=% z-xBQ}6E8UQMoZ;;6h0!7b*yo;W^3}UVAavPM#*(d$3v1U#yk3v<>Z|$$Yv0;2J3r} z8AW3OiO@5IG|Ob^-4IyBL>s)84QSJF&2T^gW=WCUV^*7MriQMB&h@IfzG613y+#_2 z8$saFN01bXz5jJn`z;(Bf!mLfoa6F3S9~=B8h8>x%@03LpypS%LCqtH?ef!CX*~Do z7xK4%_TvB?KefhP_nzjiyU(!RA2ZdG83A zi8}#A@Ufy3wSGUj`3uZgoOOc=A7V$L1Ic2rt0SV7 zA$8AE?doBy4c=WdQ zE6mhzm&eaVtPBcfDxuh!5cveVuB3}au!a~Z%a=wF*^n`@1j4Y5QCmahkb9s?ggjNc zxA!-`%fc(#6Vk<+=~F5F7c8JBSIAbNQp3U#$Y+G^En`-nCHM|cez6G_2qAb(Anrj&DH29nOt;JSC%8uv1p3Dn^7V z0pbjC4pUS}?St)h)`GPGgTx}SMJvVkB6M5^JE3*RoF`8O;)qyMD(A7WQtj>`M8qQC z9U6g)BQ$Ghxw*$NMomoL3+x0>@NvQl{&a~hL_ykkhl82sG<5|ENbgY+4AwK5T`glYYDO1OxwJ4l?xuv>N5cPCFoDmP>z&$YyNQf-n22P0@ z*~s3A0EG+PP9nJWnAxvA&C-!J_1z001y7Ayad(GVbDiLjRT>ShW;ou;E}|0jr>$2wH)VOaTlul%ncJd00G1ieSS5 zR|Gv9K-Qs^E8+s6F@UXgf@3z^(?tNIp(9NoTP#EN@nH~(>XuC9Ek_=4#%4QH^TcLq zE_?msld1XQuWe^)9!YFxYM!Kc#sByF+D;ZTW;NW?wzlE70)?v;LCJm4;|JT zvMk|(i+Az={rsOok;Anrv~3UV+FmuLw3tKw%d*;KPFl3$GVU0cto)cYMz96@$dc)N7vTRIWS-S?so%l{SW*A zQ>}+=%6wAe_^CC1<$wGYpZ?rEn-40`vrI=REhnrjjW!;BxK*J5Q%5RR5vqCHyl4ym zJnl)@OgLl}%J`nyc%_!%Xz3piEd*DG{q0$M>o3R#w@ndpb0 zl_1MX(KbXrl;|{qtnbN&il#8?MdVq~ZmIS=y7$7)lS1u0l@s)YGRg+nO2|;gs(3s} zUXvRkyRlEEkXuV;OdtRoLstdYwA)u!NDQ=(fjI^12Zgi`&_YCT+kw?8m4F@T=TS>n3_MqEsGap2Pg6UUF?7EJ=}9o2RSp3jUv<}s8f7C z2t?tS(Aicgctuswy@Iixcp;~*bKH_4xzgb8?jn^zcS9|q)qLV@u)(<(g?LPZ&bC}z zy1C&wGMw5xy;f8_QU|B6)-26-JauCm)I7nlJQ_VDpaC`}^lSg$|ITyv?&B9<`pq1i zn|-nl@j>Iri4|V^W4}jPHZ7v}JN`9Sv!)cSXYsurBcs=O6_2)Bu;;F}uSb(G*-n89<6D8^uc3INZk}krq7Rm_96ygzN2o510 zRTu>E`fN6o8pdmAY z!Ggt%pq2YD`2tkXT5@!k!9{`|x3otNRgW>y8Wi|AqJ6T&4;@8S5d#qtG*Z z(GKK^f}~7$b7tpOIlfeJa97ExbaO4R0ca+J7QhIL1iP>8`0~egOZSr-+o0wNj&J*e|9S2##Qnp-b;pnK&Hv-= z{Kh}|cAj(Ie%eWld4gQAA1Z#~zkT3=fad;(;S`A?+*H#vQ`MNpoNwZB!k2GBBB7!Krz3XhR%_awY3u8Rw@sqEvhSo(?@e6Q^Hit?2@v+ALtjb?s4q| zF783;;mC+Qc8vGN*dfT+QFRPu+f!B+Q#RgGLr0lYneyi)Bah1y1P#rT||FWL;=!P$|wU%JEL3S&uP`1cko9k+K$u zJ!P#SBWOa+QzzrSThO^=c=mX2e$yY!gTLNRg4>qH&`SP%svteX3+U7g0|~AVR9(`rs1{ z%Bhy1np!o>oJpGAg6n`CY?@0efsZK)a8i`Ow{b@m_DFC+7El$c zg^ZQ?l-cY0i~z|?${6&Ng*d}S29+_3S0_Zv3SH0q3b;YV%3U=~#c+N%Omd?UH4Z(P zAcco@D7!$f!?-^tT2&$y>QP0p-=aHWSP72ft}QrQ1_jw20)rOOilaVJhf>p}C3N~h z6z93qa5zGo5RVk%3|;h83*aub)TLtj9>1m(a|Y8=5`l6Jqy$$KLKY{D=Tdi)*o3U|aGyh5 z%4p{Zz1S09*Jajq0${yUC~b-L0#-?m#iVm%q8E%feJaKeWFtRd&?1ds}@viH?k#D@@qx4J1XbfNX(ogb{ zo1aJFGcK9?4ENo22s8i{wHn&u2ZF{5?Ffva9sp)1QQHUiZtuwlpteAWsSyN^ZSsKt zj8jHOl-9m6Vinh_po)XUf`e*T0;e{C%|@-Y`CWlgTkzA##@}cDkBj*CmtV@;e&&5= zUAoz<*pBV^hZftQ<_Qiff^WpQ9&tSI$0`2MayNQz9E6LL>;Z1-onA((_x+bJ-k!s$inYVVi~&tfU6~8Kr7_$P7fGgoX$! z&zXWsnZ9X2aajbP8^R9IWraF}wxQ~lh_fv2_QWTlYn0Z=amH1siRhXxiH=!0=226l za|zTHx;R8jq26P0>!DTMtXHTnDR-rS!;S)I(_S378*WV11(}KRUGCK6K`U zOifeK6PWRy5>Q{W_N@!F7E4B#cBw9ipio8_;v3eOJ>~G$5*aW_M87GyM6HNc5!86i za!h$!iNAOqCl2nIMTv=Bf)`TM%o|wui*xa*G=ivVnaG9cKB23)FZvH5a=R zk9bRc+YF}d=tWkM3!Ir_Ln~1hj~`C zviRXQdWeh6M}l=thNfvjRtw&HOubc!I4A{AA1NuimV7G0reX4_C9Kk=sW@nAh?Xl{ zVo8#)O{tq&XwYmYo2mH;h$;vZa!dnm96?acgF#43aAQZ^A~2BCung81RnFGh~lXjhRD z_zbiI;{oW=5;@P{cbMQ^%Pzr>V+p5J2ingq##5rOOD23NS{o zC}k#?3UrU4iK0Ewfx@(63h11%bvQWl+c(}%x=x8uo)NmA{x?qfS1S!{!vCpiAqv!3(F zK#kC-Z}H%Op&8YGa>K3sz}GyNgY&bG(-A%}uDp29<{uB%ZP6Uhxt_urToM2bZp${- z;L?zJF=L0VHymt82M*J(DR-m+Sl}UR2%;i5=NRvZNKTjdB*xbs6NQ;z0%ElJZ)@wT zZuwUd27G111Rgb&r^tcDkc@$`QddfuIegb{Ob)ug8(PFQ!d)|sTETp79d=td>CrU9 zU!)A~8j}nJCyt#fjx+O?E!9Zw5LKKBj@*^kKmZ2X5;!%rkqwfyQIKPv?8Jch^a$p95JhNY z7)l*%A$GP{+(odfFc#V4V5Mf%i39ofw4>z&Tg*_Tf*aNJdTYf0Xw0bJqqt>?&T(+- zP__-D8xFC%bvJ{gL@UGjGkq@Kw?>@67jN3l$qVLbea_JlLTO21(LsBt%-jum3r3eH za$hrM&Ig|<$7YbrHBec&4@1L2rif9B@#$(_hS;>xy&)k{TIWbi(F! z3f7?NpjL=Lk_xp^_V9NTcfb^u?fU`N7IBuv$cwi4v_Az~`ZJqB&J!Zk7x zxM9n9Z-5R0tz`T5z8znEu|4Xag!t=!{=IzN+kf|=H+qm1rQF|*nvltU-_5u2x)(o> zd(W)!ho8QlPuy`Is_@(k&*L@EyM~K*KeoPyD6)LlKY0%S^G`mrd2IJbFXu47+}w%5 zi$b&|Gt+PY6v1^2&O6eTD(s6Uld@7mY{(<<8sUvLnly^6R+K5AHIhcK=7Z^9L|6rD z$i7&>t2XQjf?yw;m@y*E38TjA5eaV|SukaA*NzH9StwQE@Vmih2Am=4#-Yiis?eu( z@SPa@={4k_M^``(^(Z5UKRV{rl`&d-WW7YYFt9OFrtDnG@hhHT8Zn-C$m#H1&v>C4 zD5vLuX+SHu(S!p(P{LXS=X;6@WI>6Spmk@ArX}qXOd7$-poyXp#14${jOGN%gw$DD zW5*zJ$Po|Yni_EH1--R(R5m-DCNw0|d^ed09#}avjoXS3Dk*8HE%veTi;k(n=(_V>KNfxm0bhIyAWAE4ALou9U z@z$NFOURaC`KJA>-&ZiZ;938yp>iX3T(QdVv$J$OlnaJrSvM>`79v4vr6{4U6>bG) z6m|l)10!G`#C3$KkQhOi0_ixv(&5`sei7=i(p?gwRY4=e;39|L=^#_26}V(tfer$g zqBcn8h?1IW5JsUS3Of?CGBA?Ry&W|JRKV{O=5AD0MJTLbM3Bom=$&Kqlt&rEe2S=T zT5B3$FAbnc!!`S-Z~W(v=z8CdCpfmtPfu!WD+)h}am8EzGx`0`_LfqNG&8R>id#}W z5HMJT?|#m;Jaf-pe*B&92Lg$6>+54{xn$1*-~aW`;w4vIyy=DXC4{Q-HQ(_oXCLF% z-6-H1vhcb1HIs1nM{8^V95bwl`%RaX2^}0h5r{*IJr`gq!WluFr>dLOk0pq$r4q~z zP550SgCR`F6V=u-oVbk-;0#0!!g0;}0%20w5%wcvrG09X3zZk1+JNl{Iwe>aNWZ2s z_ld`37t=l&GIiRC z@KMY-38H?QC{lq&hRW8cbzp_gJxaYJf<=qA1)D3j41iSz4(-AP-~L7N!3@P(!s6l- zRi1M7b3Q{poZ+tPFCiHSrfG*$AId;B*Uj|531C;7;kIOfj-u@VZp3&PDy@-0vN$+n zn^1;S3#F~Y`CU|!0l3|YKM15X_I8C`5Q)H4MHv~ijza3hcueFl)>98B*FprwhVH0Z zAO|8rj>6pWBy{gNHh|7#jQUCCNoe$XCMKG&wbkiQ-}v2J@E8|2PxW}R6osGmZyp~- z;hTSBTT%Ft#5Sn;GQ@xU@P~Q(^-kw5 z%eW?4t2TD;0TKz5iVY-zGE#gu4y0NG9D4uQ}b?SyCr+BXQsL=2oG$}Cl7 zhy?0h*pEwNA`QpdzBgx#U?rzFEUDI%wsWkQA$Cjm90NJl7UW9-N?o=YjGQv95R&aH(A-?RAK2mX!)pBA_XObt>B zv5RoA4P2pI$VwRQ2AhJf9j&n;o*r}lbMIrYHp9_-ccW^E)}SuIw3Xzr5@n#i`O+L% z7c4f60!FCwW@I#gVQI<*g8IC|Ud2?9-j||@*&wTHrvVbCq}sDiAk0`K^57MFJs9=K zv|=xExRy{?G3pgD4zXb@+DIvflc5+;ir%BJrya)L-@}}bLY`6C7^sus>j6LUKoA=1 z44Chw{OZ5@CtQ7COZj*^&KXY{sQK5A6R7#kZBX+_VjI+a8N+$c|NVgv@$Q>~rnxjX zF!Az0fY5wPi8XxZ)2`%Qe|IBp;;%Hh>7C`LdShknRUsC%QZzQGSL(J! zBcXN>d118Wtu`8DWAI&zOaO`qt`2rRRZ2+r7h&n^Y5aBwSRw+(1S}P^!QVtm-S{{Y z+C<&BCf5cAdzx%f0kZ5+U&Bd9JO$da7;)5{7-kK!o|7K0iJeeI!s?9RQ=lh=G=hd! z_A!_pf^2RSiB;s;CjFX;3Q+ zq5>{*NG6zNgYBmcuqn}*F{)Fj5wZh|j1|<6*_o`ebn78d#r7529($!HYI(|`rM^4H zL=FykBsPdBW{c>gISt&L2I#Ze971H`FoECK*Q$q z=gg8Qtc?r)%ljSyS@|3>)9dhwcfEmk|JL_C=o{_dGs9oM`$zfsdw-m_{pxqoZiO4M z5xC@{U0n1v=kdYSBV6+%Z{^w_{V(`T`QRV_TmJgb-auqFKZc|+)vgxhe2hyZq}Cg- zWGatwN;Gi9Yc*OawR%!jCdLvQq~Ho<#UZN>ry4R^nc`ByOuYsa9=s<(nbPp;!iQ2- zN1^3HiONjMda*z(6Il=dY$o_La9-rN!f6erhlzz9DY7$yUPNsr0Fa{<=0t%^r;M(e zhDwkj=x#;!5xQV91B(gb4e>sRRuwrda3@fCr01!3DRs+{WeV$#)ea02&~Z(>H1yU4 zlX^<$uxlFRmybKlz>$kXikd0sDQd?$jh+vo(`niWJzxOT2Myy3Q+i+MbL=}0u=Fg; z)Z!WmjzS&T$pY~yxn!V2q~+nz6y>2V1A(F#lifL>U4w}&+D!t#sQ?#}9B33FE((ge zMNk5+dWxF{-A!ntZ-g8ri;yD`EJM-qESqU=`s-(M&vj4Z`Om(Um%Q+!XyPdrz==|q zj(Sy*(>1bO6ODb~W=+UdMxZTd8bDmO2GNQ#y_V2A+9tWZjf^Zls)H^-oWLl9`6Xm( ziTvm^oR~*W@8`_XE8xPz$P&SGs@L$i6wE_ z)|hE5vja;!Y5g+y*)i1t^OB`fKSz!n zq1WqusfYFtGA`e_gKKv0=B87pa0G82SBLbsOxS-42WDsZ;jeo>-*)9?y!(?kZtmdW z27EIEzvu66;>Z8d*OJALo*TYkSXN%|#dN;RAp4Zvpt5oA2Ruzw@VXe9Pf_ z_`$dR1po`(79V=gj}lqS5B%6WxcTc|O4KxhnFyENW zgs!T(K|r3+1+zP$9z$zfBVO>CVorJVM1{G)v3^BH9vfI5fhy7s83S{*g2uRYPqg4L zGY;+sR)8U}AKayi`-mYfgm}s_ij>h9qEd-#Pp^h_#zNsK*K7PpiAOoE23Phe$DXz^ zn5MimP$f~NtDyw7AcDD1xzBl4b_w-(o!Q&rp4aRk`ofUi$0`yc%BhUJG7xnbcfd?} zqH&Esm{E5v?xvi4pCdZb$C{YY`5E2-zD7-iS<(R_Xc5@`UAgp!RC#)EGO zzV8DMs{)RPmhZBN@N+>QDFBQVDc6I-bD=?dMgS|g)l1Z?-zn@EkG0*t1U*o0MUdVs{mDd9B?|$LkeEd^) zPYxSeEpjPHR^7(yjPpb`BCb3VffK>Gz;`ejh@rj#CZL$HLJqD+D1BI9Rv``T*hLiD zyc-q+5fi2Z8!IJ+v-6q}jAvnRK1_cOil)6*Y%?P-D{8@Z!MCH(KQ55eB`yLz>>=}T zfrFhXq!z96zy+#6P^?wlv>?-9E>#$WNsVQYzEJKgsa%R#Q^YBLry+k@OnqI&FoxEu zCl+W&F|`|0w*+%)gsYVTLA?@rr6y!)l+bbGMCbyk2!~E6gPvjd#Q~=-j+nZ6oovyw zd>|n@BTN+q@pMh(BF4MBxH!d`G-M&HXLJSFk;5!|s-7cS8A5GvdopSxU@VHjz~Q?R zI(cfPwjm3_$l_xUGr?NG6=*f@mB@>~0`CY8vbAUVUyb!q*IH@oYS}nzn zf~xT;qhMjycw$W8uT6Aa4Cssr?f!#MriuqZ3;ZHTG$fyDp>2cj?*MVosv2cNCB8+d z<}{SYx*7Sjz%XV0gBFazi?Eo@GyS#qFn1_t`urmtfB$)n{e|Eb1h=M`bx^DLT5*vO zYr`>X=rxfKLkXv#O3OD{EP-!%>078fhPV9mKjnGPzVOjsyxXxI|A6C5Dn9|-amO9( z-Mg1VhYs=TSHGIO@4ovn9l(3v`(B>^{O9w!*S(HiyLNHql~?i$zwiq<=N|HPMNzQ6 zzJAuff2eV2Zk9iP?RWEC*Ir8}3BYbDP5HiOJ(Iuu-q-TNL+78>!Sw3qUA_6@hhyh% zDNm(OV%`09zx}6Y{e7;(6yO8b-^KHO{8#zEfBXHs|K7t4_C)mKEqEwPDP|*b5egA1 zWANTll{H#7q*mtx8PqH4LwY}QO4R7ssPo9G$F5c|YKRpzu*bj-i{BMd?lu&JWXPDa zGruBR9%z1VuYfIJ?OEWTF8E#G=LlrqOwf6uUWX`$s8U8C0%hHve?vYhy?pR~`=Jfy)urSlYw=M3xi0WWMaw5#ma;hL+9TO28&vnX%b~Qf^ zs8SV;pq_DP%Y|~c18svlAFPi;hul;}?n{QZT!3+5jpj2TQ|uJD82SrgTr7BHHiwmw za_ZWeQ`c7DeQt07)*ZlNP|MWRu_vSahnVion2Uoqlyzyf;NdYf%sc`aJfRRuw2502_$y&0F?l8 z0Dsam($Fz}76Dq>Y_nCEzZF*ZD&=m_{mpysP~0hC6|&jj(w#2D)QU2Wl%fMV6H#Xh z`(0@9jzRA6=q`n^L0b;r4eieo3wjvZJtb0*uY>N#+jyy&Iu)`Ftyu6Cj2aL(J|wi4 z9p*%VA6Km9L#7F8iN??=aI_Ou08cQ_({oyP5Eg?8TTN+ zP0=yT++Z2Ep}fkm^z~!Xn+)AE31us^V7cW^usrA!%1>t?-bllMb`(~I)I%ZN6@zT{ zYs)AnU2;KuQuVCPJWIelx8HS&zrW#Lo_Y1bhr9Z=;|Y%K^3#(WkE#1}}g%|P@ zKk*a%=#T#B#^d+idoPC$9pdw!|2)@Td+kH+sL zg(!g;j!Yj4;@MaOx zqe9sM*$J(qN-~7y^8!yqry3v@2U`h-9*%jqd>r<7P>Do{mLOVI+MkW_QG_H0i6I&a zc3g+VfFYE8mUChU&UhkMQLT+JR*8xLWZEVO;F&CfIslt7P^;qGLUq27EDOccW|3h* z`^KEe2*j4!8cGEh8_I7Gl20_=TbIYwFEGdvMRqB2REVa8slOMh)G)j-!@F>@oOR*+ zln!HE_$u-UUkjQ6Z5u#E)YM)^8eGeB8kOl9Qy5xHF@ts;kf#ZqKobokTN&a{JIXwK zQQio#kYdPcDg8a$D~^)}b4AOEu-e*{S&}5lgT5|JQ_}RS+u-Daopb!V zZ~q4V-M4=O@BX_R`I&e9RRah%w-MmqzU+mM3DDemY>{_;^b36M_M;dPUUba`yz1+& zVfWm*Ge7skRp*Xo9@xsq^-bw18hTvY;JsqJpu3{b!ab}>1`uUU^>iGBdQ4)GG=L5x zF6f&L0)f|v;v+$F(De#wS+pHPFM?AAq*bu`?nOw)Qrj?zC^8Xj!A&Vu3TB{`%V5XQ z0}RUCCt>-8iY5{=LBSviw+BZ16Y0(^m0+QuLEYI8*O^`&;w2pn9HadPIW9z}h4KKQgKJbHX9R1TQqm=g z8^Y>U4q{7o-w0xZFD&`K1TPNXGRR0Eb-3vgDg$)_g%9=$6LRh}0RY4b0|TuDDj0Wi zBoj1~rZrnIb2a1^t%O=E_?j6HD^{s`0)>#Q1(3-NHOw0H48%u4rUZ!V`7+5z3Z>Pz%TyK51;keoyQh=#|N(CE&ta);>FiKI3e)|U-kli z{r#Uj+g$R&VoNq>l4SBWWM}Y-9eaGs1SM4m#({Jq$_|uejjTYLnMO+{q8geX7V)BzEEe%3@ z))?jw2bb^FE2pSif|Lbr#ggw&k==qlY!E+!J3#gtWWQoo4GhBs>~2#`M`54Blp?;S z+6(oPBN}Ho@t8VB(vU$RilB^x50cA6zqcg-LnTbsHgpA0$-Z|q^<0%pSF#!#xz z83Yqid;mjg4WfZ4tq{o6Cj2C6#QPMmCTKftiI;xQuk-%5y>8>)x*bn`Y?q&&-1w5p zPj7g`8+gSlUcve2pU>&jr+L$x-o(c~_Azd}@kS0DIKcAqGKUWz=J@gBy!_=a=bi6- zCzoD&DZ6*?-sqTm?Q37lzJ2?6^PArcz>ye?%oHAIP?o?G&in z0lX*>EmxQdToO8(v}eHw(&)x*x~fA*P}m)r_e3R#(X)gJwf5v)D7#H*t29j}Mv$&W z)|Gl*&`F9w6+Km=2TTAz1eqJ12TDa$@F-M}+@|F79(o`%3e&o|xYFj6O}OvUtg3TD zm(BtKZKQ(S=wPl2;HRTu7VTJMu_E?@xvN7~8OmO$&cp?<;xPv5$dlf?hFJ@xNDD|+ zQh6}Fj54k8iw4y`Vfsr>+V#4`bFRmf}L? z;2lA0Yb_R5Md^x?@9<1(3P}XEQMKNBhqO&5F(Fte0CfswTk&x-)>oB81XKb6c_n=P zDjw=!!9nHdjX)w`P?I#n!W)6Q!sI^aA4MkAx&Rv+kOy8(s-QNM)?CMgI;1M9f@>L6 zm6_R$zx=Hqe5fn&t1h0b^3&Dd_xO~bZg|^v`RS3wmjvIB9zDuyUh^6*z4TIE`N~(4 zBnhAX^rtsku;2UM_ww|oKb@Dq{N(_=`qi)I=}&(;zwsNtv9XWChYz2{l{xRc^Z3w* zKE!p`UB}f|U(M@Z|9XD-hkuwizVVHZ$LHIQ#}M!Mz-J%wc~$t2Z~xFapa0A+{oqC` z>ba1!p5yt+W95#RGF74_C0X-_y+9xI z6zEZqQFD@{sUbvc_KQazneoU$MS6lPH<_j@JnU@vBrOd+yyFrC>W)(FFX->8sp}e9 z7s_17_gjh`f~yLgG5Dsn$rU-J^H^0%pW|w!oy2q_i+aV@z)D40=R_->wzc$qNRX_j zhCGd6aZLB#AvEe3%wdb1iAZl~ z)7|OW_cw-vA5dIpiR|z=v`;6BPn%`!j6rik8K-SRdv{zzDM($TrQ${z-Z|>4Y9#d- zQz0`oepV@86d`enH8mum%F`yO^p=&UeW!4rD))KMbm=%)Dbr$@U4yb;P%Zb7wHo7_ z6493LPHSKcz6zsMN=QaRJZgZ+T;M0EDBgs!l}3OG85gxcA=DPU3)#TB72&NQMleYN zQyEOBp%X4KkeJZL?b+1j)NoofY5~z?(FU_KYf+aZPr_2Y;pr=n6VxXnKbcFPjK`R3rW7ravL;fTGNs{6$R^V5k|8$c1_VNv^`V1P?|CtN&&To-+jnbut+e+Oms7aw51j& zv2IM3VnS&GJa)-btpQUSY_?UAK9GY9fI1@@8f-r!c1m7Dre)B!Ss!DT9G$@c@4y#1 zH0MB#Au%?zsvGEF!sB9C-D$89R6|2H5;7xlGpcQ;y_5AH2JU9%*|df%s%fd{l{zl8jp*f-EfK7h>XLZOWIP=ETj0sndH{d!~bI z2s#zcTO9xTqn{!?co4S7E|;1XQaYIhi3HX#bgkGiBh_8o|53ttt`9O9T#C zXoD1tvutJ?mAPi4_N+6YM)MRg>=AVPohniKYKq;7hGuS5; z_0tYKbV?<5p+j$@HGAvz;X}qx6VSw>&JnHokcDe@=>hH9=Cg-!?G=11Y)E!D+x^^+ zyo{GT|MCZ3$X|u=q-AQp=W)u^ynQ=U^GIS_esVj`8P5Ahu#K`Z7_(!h3qV=byymCg z!QoS@VT0xlJ=co)r{8)tzx9#NoxSJ~&=hpMSvNKnXshvL^3Axx;AkR27}EuLiFQm&^+CM08UtFy>b5T?^Rg!5zu4y~~MnFQVE;rwN23urH#w620P zNMS)M(pqt;!}SH}1c0bs!*TDau-B&)z9x!Ha3J?JwpM%;hc2i^L3j8-7M?X6|JDk# zqRd?v6BogJqXhia2%n}%9b*fExurB*n#hMX{%XR#Q8W@#HBc+wDkcp|(Ub%rW(9VG zJqB@Ozu^Q-89Lx5d|!pY6S8cSpu}3LISC|W2vPu(l2k($R|Rj+1~ijP@!$X2`?o>O zlN{TenkP55*<;&r&e%2k$Oy)1W4%ySj<5Y!za9Y1Btz2t8{`#ld+*-|>37}o9O0+y z&}hpL_%g-j!gErh@)K#*y$S40&;`&D$f6?0Y8cn3^>`an{AxfKEOx~aEs4K)fB=@0)Ai9xlVJpG3 z-jY8S8cu|tG<_q@-AY6eBP6LONh;`o-=oBHfdiZEgx*N#9ZTsB+QAB_3tD>0v65C5 zz6!1EX}5>klmZw5iXld+MUW&AV3)4Rs4nV2H>0?E3Ynimy-;7AAO|g34OD{L>lt4P z4jOI$lMZvmJq!ZJU6z=qJ*n*ERJ)lsENEq*T;2iO@9mSPH%AI2>LifXvzS*_1u^b=ftPU`6o7HR$I7IJG>?dZZsyuL>qN!Oo%#*}j&C zI0eMxcGg6;5#)=MF^-WcQC`t1YUbNQ=e|I2=4Oyu(7mwy%>|2Bk3fSK536nDv_&Nd z3CB3E+?zNYcjL5QuFIgiZhx z9LPX$upu9kZfL?3I!OZ!#7wpUV;oza!HU2sU;wM54oP zpizz_dz)*wF-skRtD>aVC+takb@yaA)(!m>dZ5D+)Wq z5@P|J5;LAsSXfhJt!8sI7C}w~7TeK(rOp{V8+ylKYd^@xLEDP8XuSx1esd=@^S4&^=b*FVD#54BiRZprYzn90tWPUH}nK=k7qh zDTvmLk3=&%?R8mnu(>pWWx-55EO#OC=mQ1e@(S7xF#*?xeBjW2O-n853&z;v1H!%g zFu4bpFz$O=rJ%KoZ%>(_2T$Vf?Q?Kz4h4!+HCqcI79h9mz`hhYmLQ)o5CZnu5VoM| zf}DZ0Bk1KdtP0c#GV~-Kr~+0X6U85|$W|@>n1fu%osX`!M1?5vhZn-C7RLg+$_jk3lD5RC#QW6qypPtm7t><&Vg3IhZSxRbdJcO2_T!G zi^^^ufzVV}(d|y0Vl6lqFeXsf%|=bo%gru&> z#gUX-goO^>EzhI_p%fN!Kyr$1i)vr&O0^!YajlwqwT1R9)&{(99F$8Tv@DZrEwT=+ z2Vv4v%ncCoFUyioDQ%!p*o>R$Iy`i(Fuj-WY4ZSaLakt z|KcFw{61PkL9V@z-W3i%P8fdda@g)L|EhDCaE{G~Gm_g6vwvODg)`_G(6fr#ilMZk zBI$O66Gfa-U9On>``As1CU&hDYfz12yyPT6y9kJ{U`I*L1d3D$wV~>R-Vo4N+J$nZIRqMd+VCdXEsmv*qr)(rCko`tVArSguqj{bF^ZdJEH(XrX8@zV^C3lZU0f8_6T)uBg6U|1vk^Y8dNZoBEq$GGF(fAxYh%g54o zI}bJ|c2v-dPDr#1_0+nzBF<7^ufSoCC>a1U2S-x$87aErFcyqa&$?c`)GH zhR_!3Hb`6XwNmec$+96CTjXOFmMt8T_{ZBWqQl>_6VzDbff61Hus=bw9wc3KM;J|n z;ke7fY9OnW^__sc>?FN!yr0hg0pb2Y9YRz9!%LMJGO+W9Lzg(Ukh9k)mT;uCLUo^uRFUHa1!Vk z#qn!xXY`6FP?lY9(Rqs+hTZK2gV96UqzlCwLUl%k=_=Xr1(~X$D{ikEXKc? z-2%=)HC4~`0y-a$ZRQOu8)Qx*5qt-9sA%4dP8&{Eau#~0%#;JX`#JI{Y`n1fOibx- zk6iqA3!3O{qs^!0|9R)_kNz;uFvFJtW}TWDo)8PYHoy7f-_A$wIl+5AdM}f_;>try zy!s_Kve@tJZg=AR)>KJ)F{T}wC+Low049$wknw8xzaP5LrMAqi?lCakW@j%#% zWWs=?CQ4xgyFrDftjM+_IbnRr;1>;c$Fp@9mhJ)Tm5l)~6n6SByhfvZd#Og3% z=sOh|IS&1vrzl|kMqo7{ZHbDfcLPU3Q-v!*8ebgsQO$$_=M<69aB8Aj1;9-6i>6Jj zNU6XWkPXn!EX6TY+oD>d+aJKIk5tvW_jg2wy+F3mi}`#=^xl)^8X!R{GMfW$&;s^>>1nS_gWa1 zEWg~MxkV3eP@VCF!9LPMBRJm!vqQQh=;i`qJ*x5e(LnSI3b9)!1Bd#k=1WwmJ%mFk zzMY_L$NaH8Zfgx|UmcKKsZ50n2@9G~pHHb?QX^MdigRtu&NAlHO4$n0Psj?S0bTcK z1uYTASHuykHWo7_pbLRiiSEda9}_h(hC@L6@fdXu+UHH=^)#vTva6ztolZ4|K!`sA<}vQQLf&3{VSi`{lpjTmP47MKr?~6tnTu(~4P9Gs9w++CaKlQFa2=6%H!ccy@p)V8+7YvB2gyU_K81N}6n`fS7=$AXv2PIsJElV31EM z+ygvIqa*N*QHdi#(9;1u2=;>@w*;i6NH0fSi`l`#vZ!dx3L_ovuf9^#oV%=y$umyxZS;zJcGhOC!z?vnwk3_U6ET!ZvCDgV5W zR+h{x;t{z17~#PTHT#jN+)RZSAZF3bG~GUlIY|a|RFZ7gREr5=e=91n5@GHW9#2cKqQFf1#599ll43rT{_ZSQg0EdKNLX6Pp8OpK3 zVvWv$Ou!s-&A}XE=c@ztnlk7HIyqQ1j2EG|8R=U%XrF^}5o#y6x;cKr^mxCJYZH&L zY4D|Gudy@37alY9)6O{ zVsWEH5)94u)AfuCN~sHKDi@%1N|mlHj!Je2$h{kQzB&uo%b>w#pL*ybC6@(B+Y{o=R(lY2ZeI{o!^zaz#44E>f`iUnMm1La$WyumNrd!FO>)LEyb`d{)5VM<(L>sTiXiHtCGq|0G=G=1 z5dS8Jfp&!s6jFyc2)zze88TjCr!`^w)F#r01N)Q@K5V&aagB7@aQuPGv0G~}ROD=+ zJdmK>CG?(v9$1gcC~0y{w-tN)73eb2T^HDMd~u*dq_P-i@P#Lj0w(6ScIJ?2c+fXr9*1a=~XwRrloJGtBU1f>}{B!&8FV2WW$d8sfd?!-Yi-TuQ?R zSHx^XlBTekGQS>qdf9Mmc8jKA>}c$6m+TRWFH%$kHnp@**9;FjOmkjeEm*3yhx?!< z244rNKs?d^lp&l@q0*n+{Axe86fNEhG4lCJ1 zIsMiS-I1es&nkYQhQz>DiuEoU5H>{7sjS_FIGpoV(2+utAd7P(!%=(^Hh4!;?w ze2el5L6b$Kh)%bQYePz77+a;YnV3P(%$ zq{kZ}2}-L}%1qf2WuFiD09!3^4+Of_GE5D6$RMj0CIKx4f)MQTZa{omK@y0*G0Tdd zH-y~KDm<+!9tUd)umffb!hMP!1$wd2ki~d#`vkI&R8&S;=o;E5g)IlJHXQx~IJFS) zU!$CVPR+_4v9Lj5?k;8PW{LcuCeB+LBTI#g)KUV?xGNsFvx4Sn!fgEXv|?7&%WF^fAqG?{QyGUSGDy^F~y$FUC{<|}UeAn*G9mjl9J z(jt|B<`6o8GIcPHq}V#x7-ukyN^I?cRfnFf@I6aX3Nop1K=4XxgrOD24wmCYkM*{) zGzn~-&_-z`NYWfnsiM7@;66P@vmvzB8qSOXvX~f8tt_b`X>`cm4vHR!xs%a!+JDV- zpN=r+>Fp>oi1UgSFL)OZ+5jd&*}g;D0>5i^o%t#kz!fROlk~ zPL1hEKo*)eZY6=1Az07g>UqY8Q##!q-K+b!t9nq@m{0B?mEf-ss>_AS>Tc9S5Jk)+ zrbdgPPLNcQd4((>r)n7b$QKC>2gwLBwwRl1veiI)9@@SO+rXW`rv-B!NED?{J>179 z&p(6r-TO?=mwk@jy3YSRdjoai`Kqt`W2DM)WrYojvn4$l;5s8*Td*pzsBJ-&LRAtC z{+4Srhawg7Mh)lcK&SL1HWGUW&ajEl8^%VPSLh~+9F;iQ@(L5^tSfVyiYWumfnN|N z6736y1_t|J=P(S92*rY->=_0J4fV|qxyg|qvB$&Mx2wk&@PoVA=jP;vTiRE&)< zF_70VkeCV{LMQC zMZ=|$3%1q0pBJ6UOxx`xv4|1&#$bN)EPM=(}y9X7z#~>)3;Xce=9fmKfU=ifuxaiNH7P`Y&1O!72 zE3}~6`B@cn@yOa|!LZA@7sKKhtAptgpIHFQi&$*xnOzGekGiDMBm%ef5naMFxs z3=BN2T#+mVfx;@*DucR&v5kf0Fm?(AV8z6=^1jA`(HQ6(kSaz7sK8DcQ_Fi6J1>|K z__IXspteEs8aK$muTf-zEM~CgF)c-|5}XkC{gF0$u*6zJb*@i##sDSh;#pW1Sjk{> z9!&;>uz(j!NCcfU&eAF9Bp~I0O?R`$gHrP z8r%WUo~4>Im|FIPeaCAufx2rU1sN+LC3?^ZNb@(8rrTAwVn@l=u~;EMx)oS>7__Bq z+&V&!LHkS#l@xO>`pSqEtO1ij2tvIGix2wU&%xRKkQ9!j>5^Ilrpc1pJsw3s0?AOR z`|$%&7~$(*dNpr+&CA)h(0%lW2nHConMAJg) zk?nR(K}O9lEqP24mhW1mYtfEUpQ&IC+FLNWzS&O@I0wu@xG*xOvN4tWVIm=RzsAv1 zVIUQxaZsKKR{u}kArnfC!zr4j?AWaFC2(G~K#q&=u;+dy)%!aZOpjWW1eNY@S7InO8r z(#4o(G)IEufeNTmDiO3VaI?bDVA?`38s+R&iPi~f6jp1@yhYU@+a;l{F>?lgB#T*B zg^z}bizUECl9VuWNss3hfQ9^Uz-9xoeuqK|e3_Hc2Pw#2 zb`n!LMjt#tXdCKO;t0`zmKkLa(%}djq7Z7Lf#m=@ZAan-hoGtyO^SKBD2#ewMoM*B z(0)J*#jk)miv+M&2)&O5*sK{_q1qoMcTK$#6?p=|HXN}aU=^P>ziV_6-Z-Dr8w>sW zTTDz&`8P-K`#J7V53FFf19hKR@NYn8OQ^-;n!{}WIWV?n2!x)CjZx9v)D8qB1d?GO zh!BiWb%c<>J3sjV@BHL{+C9AA@%mTsmCw57u|DcEJW0&PPfssqMa>LP8CDni{J~pa z$ES~-;Xl6f13YwYletcd=U;O(4Y@j({ z^SD^}HoLr?$Ap4*1ey5QX;6ulz*9BI^r-;ZSeP74(Sy+_&DBaRWs|31BM)Za8yWT_ zvO|+DTy0>|Sm-a(gf7<6&Og{)lR!aGA2~5P5Bb%gE5L)w#(qUs1crghAxKXv?b;#1 z#NbO5DnUi@-eBqqO@y$%K|&nUnV__Z?~4se-Vs>tQe1a{&h4kDH%3%fwMjyo;iAKg zDy*$2`bxG@vvjw?8=-U#V=cXbVTXVyq~h>EPXzIS^#eq8*Sr!sii`y|0TQGGVm#rD zi6gTslrXL^b3!;bL3@+<~X%rMdFC?R3IDy--;eGCO{jdeKs&&fl^I8h8v%mX_X@-kTu+! z-2>22=Pd?|k>eiwm0&g`U_+ACU|WeD8n!eMI16KljGR`Ebo}$(Rv^pH|F@ni-yQJoAbJ{Ote! zO^>?%#m_v#2R{Aq#aHgS%*F5a#a^4Ot!Nz_Dq>L~JgT@cfSEugM2{MHT!odkEo^&a zM>_Jl+TR%nTUHB5q%N+jJD zV(H#5)Yl1;2Z}4B%pF(9g0DzWby0z%ia9YNOge6WH9jVdH zfOG|E+1O<|3k-YUgsL?}U4l#|7;!LHvVJ;Xoe*kBU$}*ONB!|tAi=wU+Nle#!T=~h zFfeKnWK0b#2G87kDn{8RC%Fomg0z)l5%tUE_Fi!L|fvN_&N-z?;U}E50 zXu6a_-i2($-r{+|ah(ufcXV)!8z@4x;LxVHeZxVI&Prpx%T*^Zfc6 zNy@M{TN9ubCvcfBinuIV|0Ncie4*iutWrZxOunRlb zVUFGT4EsBGu+se$rmwVCAZ$R`Sb^dYY8=`zs2C)S(YD7goko(_L8&Hzy6iJLIftI^ zkY{7^YzM8Q1kYt0<9uEYS!0;Mj^Xho$k~oS*N9njgA=u13rrb5v-6E(;*&PW# zvY@%}sR%GC;fH?t_aA4g87>vm5!B~;nc>ngD{5wV+F*?E>p$}M`K2HH78ZJY#5rq( zZ+P+b{EvVAzjEclWkiGz{nDHGxi|f-c)L8hxOuGFB~eIfx3jPV~3D&N-auv&XOEj$8>789}+n3SRS5d zDcNS_nZw;~hGYN&-k{EbvoJVBl^>)|`^Z8&zG|1iwgZVHyF5+ErKZNCp{C4g5+|`W z9V*<~R$TYJ$9hlyKF|2NHu{`J^qLM6Q?YXm_{%MRQK@Us74NS}P6ix;!y-FM|CC}? z=?()&K3sA9Rm#W-3E;OBPI@@)83S{b$joM{I3$`xhM52DWcdf{Uc% z+Cf?=ty5q=qjWwUSo(~TX!L)a`p;Y>6jZtBzd_>INqhEDozEx2AAICqCPjJ4+t2U_ zs6I8987>Jk_0tSr^w``P@tPm`Wj1z--3|sW)+C`B)9j9FxR?)IS@trbiW*WA-B!0E z-9=z80at``H%4NmHc82$^i7LC#4d~|Xa%Qt;C?{c=;1c(x6qbd88#&t9DFc7VNF4= z)2Ni1S}jA&3S|vR4TVFp3Mw#R3>rzyvRE`Dp&F4cK}KjY2D1uo1&k%A zkHxHQMn}Gg`ASBhY}^^U6=oEWHAe_8j_Qn$Z`?p(5*kHTO=nXv^@!}=5-0KIQUv{b z%V=uRb`t+4j<}HIC8DtMaiM!o&?Js6{Z5T`Ae%%#p~5Pu7;1rIuZ_iW_oD`PG8WSv zqH<{$7w~CzTEg%ajV&HC9mguIHCVU@hN}WW&{FAbX*@;>jcMu^@^VD5n^nBZK`nx| z<2X_iq9Zi1`&af&6UY9<&}RE?*YQ99)%Sk(JA4V@=~6#E@0;I>OFlpKQ(fhJQHC@pJ&+HfU8+4r^pl(6oaWgD}D525JZ) zz$nM14yiqAghUL%2)Priq$G=7CT)7a;TK4qy|c0Ma^=wa*G{x>(#=$c%v?{Z8c|4;a3}1Z$=Vuh1(IfT?j6%U8OaR#U_k}s z2OOHkMC7@Ih09IHWmQ*V(#tSWK2QH0K47P3-zky%} zN_|zVCe=E0MW7D29mPwWsF_iS?$O2|l|d_oRM1fi>4Qm2d^LxNB7PZciE<1yP^)YlW_l{y79xz#G9Lv_`JsAwlj7j4@;_VKS*mYDHaa z+$oWYwXDLmzqAIx>1!R^uUu+OWE8BRsc`yllyv7SdS`^}Pr5MY$a{i46T2gq{eguN zYW1YID+8m11);nS=y~dGgRUlQt_mw3E_WM>Mp&{vGR$M^(7&6 z6Y|7hhe|7WWHjX)Ur?MFgW6cohvp^tIyRn+(Y-u1jib89DrG;7GQH#KHEcZcX%QwbaevA`0bfiMV2&%##- z1SP!}%8x_V2AhH#!ovMkGaV4nfE9z!6_Fg-pOTa%vZEA(5x$sUhJh+X{}@wwT0k->ml1Y$)qB*5-JBSF9?aHe_pAVdTjIzbEhYWDoFraR3v9S*+xOtZ!zp!tPsur zfVu{sDy~vggy1|fhS~~rEKZeTNAdfb&Qlpc6lob06G^THf@zlWL}9*&MPG3Z#%|*4 zNW#XasPRxM?JXOVudmW5^REo_6|p5+D-4pzV`{3`ni`#0tTmYCP-(do6AE-um@^5c z^0dd1FCK^#pu8_sEg}Cq7U>B~C)V-HFj?r}&t=q!fliyC6ZC4OytYI}hV8#-VO|00 zy$PKU$9lm@Y#sK4#?aE+o3WB8Ygc3cr!gv=zd~6!-V{gz9zlGgq;k#n7koaZb<9PD&1_Mf z;Y$QFqVNn~GWf1nz4-BOY&tj&XjRZEAuXc3wp5L6_zTXMMmMy9i{0dbI93U8`TI-k z=?bf0gTdAoGqKT=h7MF62n|V<46e`MMWBnohlwlZ!?5~?!lCy$4tzj3^!qt%*Ob=_ zJWJ?r6)fJ7)7??3l_YkC8pFPD@)TzMTMjP@Cs@Pa}9?n5!8USf_SiJ z6`2UK0ENIllq*!}E773uSwglJaCtypB=pY1m2Vqx%`dF6{|?9UM-pCf%|pEO&_g_D z={VOOJP9xL=m{mixn$#83WhgWigxs^nHa%4ArJ#Y148F?z)Zk&TI4Tib9T-!Netc@ zf)y%(v(FXQUJU1MgTdtx4mdUs#gUpl8(^&jg^)KL8j;3(so^;_+^itN;2^N%*m{m- z`$nO*@jcO|3#oPdY;eJ6VE6MNO>t!5@}<8%PQy<%rr#-_@8!whz3+W5uYUEbIdtd{ zBEs+d&hK1wyQ=b*x4eZzhYrzhxB2R?{%Y>L^UjO5DT;#c{oe0oWo3nKx63zv<2Q2R z#EFZx+1%XZwXc0G^Yin}&(HJP*S?mmt*y`DU3%&;D{5x=lEJsX;`v zXwmwpV0rH(bozxJXch%4Tz*gBvOh2Aex$^PK;nh0uw?6w&ix6k z+YQv+XtFom!r%C1v_Vz|-1>kLC107N zTJ9rxNq47+LaLKFl*AYu4qA<9#6oElkKkNfq-DJZuUG|*X7uO2fH%3d7PEL?tWw~NuwJo~!^-*DAE==Bw1mE;qa?4-h+V|+LzT%M7qhVh&* zS+H?GZ9{9MxB>BX-juO*YsT3ZXB@vZ;nd3$=(}BB&*VTnLiJ$A@JPlmi9B`I1G=c> z3yoU<@i3frVunk?@UTPE3!3r9FxhXY_8ID=Ib?ktl`8SQnOkoYAll{2P zFoixvmnVVIXvDLh{cL{j=YH-nZ~r&{=HKu$Kl3yE+|T_SANtUTIB?(qU-xxi$6zqn z-R2E%cmu!v+rQ0k{^oD;zW2S4;c&>SUiB)x-}52(wr~43?zrO){_qd~kU#vxKje-( z?%=hreeIKbvQIH)>ZcjL#49zl&Py{p1v7-i*O9AaO!O==F>yO2)8o8(au&)tE;@a6 z8_lhgJ?}p(dn&x?-5c)BoB!r*eEZ8@^aLNWFHJmM>Zccc(^I2<`q1xuZt5oy;kSSL zxA~@T`X(TDX$~Da#2eo527c&=eh7$Nnbp-*{`J59*S!AquV;IEn|=HC@vFc3t9{CP{_^c<4N;kub{C7sT2)D=} zI11JRZ69MGroouwfT$93K(;WVkT0OYAsP6k91({-5eP?pT=CClXuiVsNkP&r=AOTS z7}&Ud1#yCu3UeSss5b@YJ(GT$Y-bDtNl?VdUO@wmI!G8^*(0PDjIed8&*Bx)R=`|P z&;UI5NA6>I(s0+mdv=_Hq4d@Q69VO`L9j?$r~+uExH@vbTALu7F-<%_6pt~HI4%oL zqcATK@_q4ma+~1#LZL|viJgE|K!nhk?*)lP(k>OIV$Z(-sF&hnx^^54QgBf|6tG** z|JD!veXc(A1l`dYJ}bW1)K3pS_#kJ_oZ%I(c*X8@S(fotU-ebI|NZah^{;eqQ;?SMopq=l^7Wetx&00eJC?U(EdcJnw)1`)5VX3^QDa z?IPz*fBE~o`^0@0UEgylufOR<{G%IQ!1ags^JCxs3V!U{UxD|57yj=*dr_D6qID+| zLaj&*lE$-pHGxoo#Zab@4RW;8NVT_O3ZY3XVJ^F9Z$?3Dzy#EoSh#32mI={DU#BSy zbyMJ2aG66ME}`}m&XQFHlnS9n9z2Z}J}P1aytSAtgR;aI_1>b>yub^KxO%0Hos=ZK z4meBE%jgsy-JVb#>XMwCkQ1GXy8$E-5*5a(xB#SvvMABikT`=R4(~k{@GT2C(oG>d zKEh{?(K8d49;na&=MSZ5CZrqS7nD>%jiH!$tOe&RY1^Qs!PHO|bu4fu7UpXx4Iwp{ zEf4d)3GPghUP;pTRGSLP8d*Q!&o5K$Si-VLuZa-}oO3XV0b7a^>UlQr1Z|8OwWr9I zU_zX5nbczPIDV=+Ah{6G*f^Pzt|W3?1~)HJ&u6h%08V`T8C-SiS$qI7vGs9bx2AVl z!1Tw2Nq6^fX$iE?E7%%uqM>3jCrmO!TE@woG+mVLS)p`FaX@2H;+qF(>e|k!N2r{L z+@a7o23J1tyrT#C#PM@@2O({^GZ!wZ)0%BD);er~Z8u{pfyILgwu6*RQUwa_rc#-EGn|WpQ!wQQJ)Kf9A{?_V3^S zsQvHXzkhd|zY5HXni;<6PzBFx-}Rf^xpDSUw+-u(e|N`U@H2P(1+TvHnf#Myy@adg zm$BCHk^l5YZhq6-VAy!4aq-Egx|kTQUZcF*2%-5xC+p(Yx3Kvn)(y@;2uNPz@|wD9 z(0&IA%?Qd|a9-cIxkeg@V5<^MVzy4@g`_Hh1f)jWkdF=ILpZe!#v$VYnpcn{NL5AY ztpZ^}=z8iRPH%$7=PcfX7_{lwurZ+yz>zMt@My;oQb*Zs(XJp_7Dk5>Wa1b+w1osH zn^{(-Q1k>-#_>gM4V474B&vsuhuQ?X+pw{ck!qlQDo_=M@}Q&Bv-kj$l@J$T4@Ls1 z3MvL)3e;dkDLRTQ7~I%V=Oq+2W?wC8l#5LQS^!lGR@SJtx~Od-R1~8U(hd4cp25}< z7(>v2S*$VphiC!%aBoj0KkfDxpmT~34l5;<7-TM?w?2rHZBd3mM<9RJ5@D_t9i2@i z)J{$9Xu2UWxf1H&amJu3yM>J^Johbk^Wh(QE>o?vG~*^AcKK|8WCOZdGg%TsV+J`9 zNKvd;T4!N$S#-9RK*K#!6uV~v;E__wwDp`TM&jmAley z-7CZtU?DclrsLIFLG#q(sqEAoK79D1>woOWevG%gB@VgIwn!oXTzrOE#)V)sLuGiz0_mWh!l z-?cW5EDrS$t?{W~@(MF3Na~8hcy^AoNhXF)72vXY^cnM1Eulg%Mv%(W%av9csLG1E zsF_G$)DpbJ@tJYL(za)QLlH0JmlC3>!mXP`rG|QLC|fe z`vF!Qsm(CHg^Yx-1#G2IHr2@13XIxNMV^kjF5249U~mvLqxC>W$Bd~@r}%q>7ae|p z0|(Zk-w#A?PG_%Mp@3g*5jv4mG!z9NNbA4~&{3#bN^mjE(@z)r<~`S@p83;XycG+i zR;bkz@Ti7{xDycZ-1z2?Oz##iL1SXMHpgI-!_-<==1eUs<%r|QkF&kKy?goLAO7Jdy^jM24gfr=n{w{lx!vx~fddC9%aYB_ z%_rRE?Ab@3c%DCh{!v|^rxUZHW`-|1{PqKP?vXb?3##Dxu0Q=PM%5#-X#_$NgDHa} zc4(Tj)(gpy!z)1_b$W~Rp|i+?=P}zOTt6Y1jPU0-kV=`p0xt$*Ez-;-thHb)nY9FC z$*o{AiSBCC1*<5~a|4p&TO@0vm>vyuOQn5!LJ(oRKfx{=I(bcdp-X+V#kqqmcIxOr zTm_|HzD3>2R$MbKxm#c4B zXYHJ)KX;rL-*yMrUiTSdn+a$u8Wc@6Iz%rRLd)R~t}qg)tl2fXTfKdg{eO0nFd2gb zpFr(|+C>7cCJ>zPuK)Ws&Yplo3>JwI8X>TCUU}zl-O793dmCqNOWA3rmKSz%REUA4 zPNM3|Lsr9~4^?P45Hb)IOfE2%=zEk2bTv9Cca`x?f#HocgPSTw&#a&mkSy>oU$Do2 znBw5lBKQ8-8~Nk!c`XaQ44c4wH{rVdORV-g+;-(<{OR}n1MdB2Z^XG-C>nA z)TchRyUne)-pcm&Hn-n?`|dU${NM-K-rnBb=C1;?qj-idI;>4bgiD-3D=?}{e&@kE z`Fq#i^5_lR^z1lt6fU5p0N`6@&v2}uRV6#Luv{0EkffD z5*!#W)N?8L8au8qOI_T?C>B`0iUE-EDG`P{gkgzjw9I!z1#|(_i=dTdyxL>#!JX&| zyV8MkqbOIGXt|%SX1Mh#F8132mY`}U=t2)?Eu7lM&$Te6UBNzNAl8buBU?{4&7~Aml=Q&?5_q z^@b1>bpfqPBvFtQZ3&Vq&c_wsb%5HyHk3rUGHsxowz!+TC>xMg91q=d_F7uWeLU~V zZR*nTi4R^ysPASh#AMUT#$srJ7%VD~SC$q9cD#i*2Js;l9jahrPS$~skI|&$^fd|W z>w+|?=?28b{e1M#Zrdv;r74`J6>2&zEZ~Ha? z=I7`6NB`&_@%`Wb{VXppv$V9to8SCqZoc_uUjFiz18~C)H}Lge|Mk4?b+6+;{>T3a zz;}Juck!xMz3Q)wBn(foQ}dR$yd^U8FStxwSpdKFTffCCU-?Q_R#p%Z?zrQQ&$`cF z{^ehO)ILRoJkOu>i<#le14sG`PwK$5BHVHQ6aYW)s;}I;p($vl#2U5DNNU=4Z*JSX z=7QROYSb4zvOR)4pw2LE8%C=w%0nsEI(*?V=f|YyCbZ6tFdGwsukpsC&QdP7DYpig zx<-o%%COh|2k6WpodieZ$<##gPX}Rs3nceA52Kq_823BqdX72^ZAYS(`nK!f=w;Md zM)jgYl$oFtLs-lx>YU0(bGu|*lP|Ohm&Y?Y<3aifb}m62_%tA8-*j_A%I-I5n1+&03!cWcH?)M&i!G6^ZZZ~2yQ;UzD5 z37t-d-}}Aai=E>Jzy9mL&doR9%qw2;3SRMwSMaQ7J&Rxc)n9#jU+g3Bq&qb?-gqPL zde^&lf4}erjz%M1@{*VE&ENdZyzX_cyX1Y&&CPMoJ@;I6U90u^>H25*(#5x4^KAaV z2S0tu+Y5qg)F|Knvgh;m|M3?T(=(e!IU=xov@67g0^%8Z<_Oer-BU$0L@tL*kh}!1 zWI?FULu%qaQ|qYaQtGzDoF8H*fwU|!K;E$!1Ua-s`Oq39E_%!qW%L!%8gpg?8qQ7~ z6q>>Y5uCAPs1)4OIf&lS)1(gw;s4w)Z<^4#L5J83zJQXydp*(>mr6%{g?V4P|uR zg}7#i0(4A_MyMQ09kuJhpwpa-M&47Gb7(k6)(ITCam=X?Eu+@ON}(qHP3sy{Rs>&= z7@x7QHIQZntBTo6$Z6>rk`?(7|Rnpn2x zJ#*WD6^z&2!bY0WsO}!5aQR0-KO&sC4#Evhr^Yk{9|4BK-LLz8TFEp?YKAX5Jca6~ zOT|}z^;h#m7IY%QTi)`PCnOoSS}or3j(6~mcf8|qw^>?R;@5ud*PhgK`$FSM7d6hg zi@GxxV(KLL&_fSBseL}O<1@owZ``_igjXNEf!}-Ru1ng!*1$^-UAg=FhyUFh`G@cL z4LlRumW4RBF_MBrYyoNmQ=r{yrKM zS)UMUC7pPD+fnu{+;{*i*iW3nx3Wm44Hgnd@SYG9Yb_T(HH$LpCYajODgszbLR2hy zG1M)=_n}*Wd(Zvk&tAqaF2Zw;V2YaJ-czvcX^kq}ddXm43wKQi%?zB|Mn{T1V+FSp z!;x&^@y<~862hcJD+n!z2{qIyXD?Gs3zm)rLQAlD@j=$H0<<1BzrdT4!J~WF5p0p*KLK3#Fyu(#C%V8rxW1Vk@L3%C@Eq@Jypz zOyIwIW>Bo#W+)ues>@U;5r}SOJjQn|*GpsH68eR8P214IKSLl9bo%ZPw=3Gv`nBtw#K3!tU z64MQl&(cnidBFq+L&L_ZWo=O?7NAO$IuUx6uyi`08-i{ti6}{1(M)5(H~=;yKSmZn zHx>B|aK<4WK{BCg1JZ}V91I%C+J!uEl~~kFvrMJ=e;^j89w?hT*hNm9n8(+O6~)*! z3=(zAg+dT)&&E-nGuY6?X85qno!MJI;z4ud&v)qj!P%I;-cF+Y+}lXxbRQe&wveNJ=0CiJ8Pu5L6{DUd>`ReM;Oq%lUP4?4MgzhN7f{Lqci@ zm$ewRJ^i&B=_+%_#%w3b_}V!%O`tBZzCsJZrxNXwM{)6`_KXq-tw1o~3PsumYeBXI z-2_b(%_KSn8wj-^8xje-i_IH20Pc#vCqtp-g-Iu>qZn~f>s;i5E{4X=Ml^n5FJG#0 z)1?wf45!b|u@9#A4Fd0z$les`T?2Mqq!#i(5B zHoh@7#IDJnpqyZu({qu%_<`x^wu!0Q2BEmYaglB>&=@xE9p{fkfLP>l0cULbvuST# z_vW8r{`}s3UU0)9e*T}n<}vm*!xtPESIVFJK4!Qid|ug4qtS?~uDXgJ{J|gOO>cVB z?)48n^bl8Gc_knF*vELzbDs00_8CIpxzBwrFMa7tdHdVn{Okuix`A?%X^_+a~;tE3V^jUinPAN%~pud-Fee+iui>PMbfWLNJkliIAKx zn7=2-m34FhDLes1j6pLOITF^QU5BO?POW1fJV*4a0b5q_tRKi1Gu&ph)SosJnujN8 zEcqu{N_f$=*zuUw9mmOuYqpUXY2Z@>3mw>;pdpSbip7-i{s2oYq-@hUos)~=+XfbF zB)Tqjk+mVr^`J8c!!g?Os7d1kY;IytT3U?@ZO03?W7%4CuxRmTJ$g+SItHyP?3qBh zAPwmwMjvS3UCs3rqy&AUP?~aoK@G@Qo|3x3ROq9I>cuv;fY63(>?b@le+k_yH8V$!h>K>wPNC99CZGIR0Vuxd2nLy@ZcSj*eh@BJ1-gBH5Gt+u|N+4F~9KX<8;1R{k zBisotx^bG(G^OIScvQc=`+#D2?1Jd+Z~R7H{G6*F=W3qI>UfB1)g_@Y8;XJ_Y8Zi_Q~dEwfH zef;=~9___(DfrO8{T`nG13!-#kZHz%B(PaBf6lXWnWfy9a(*SD|NbE@z*1p~8V!M> zs7MjW0zL$+2eK}jIAoF|K?y;3*Oz27b`h1vb|p)2b-<%IggSGi?G*EY&rqbo_~;6L zwL|Aa$C;#pt-vpJv4awsYoU{hqznj-{;|N$@sjb4!tkmVvQ+~AmB7|1i>Yg}QB9{1#wv6_HKKOH#&SY^G>LA>Ll5JC zwL%yNtP#SzL2E_M3)%s;LEE5xzzNj`s8>V{5~6ny!)9F4EYNii>Tz79V-rSVcS~SG z%s?Umb2g5l{7T$bf`Ey}c=+aY*u=sjngB=MPfDN?gI0p?fU7#V?Vb3ynPxs20oN2M zdo7#z!!@xQBKU3!A{_pJr|t@;o(m+A7#?{*iWH!oSagZGpe3kH2g+z9cdK0ZD7(;< zM#|3KS-!ns!#!^ClPYKczVB_n%Lo4NH(<=nqHKmQPkdfSc2N}Eb=O@SJb3V_dOoNs zcieHuXWeI(WsfoPQ-LAnl3C>z-nCJ z66e5LLhY&B2EW{eqx*3|Y29@OtRWm;q&(Q89*oi2$L`W)3nbRURsq4&6-R%~KwcB( z4WXYxCFrI@PX{#fSaMutu{#x<-bBgqy;cnSA;%wR6Bhb#1i}@<_{x;?R}0=Ld6wYY zmj2kV^6`S~;}ujEJ!Gl&3xXo57!9-l>4LPHS8oLw3*=x^kbR*0HG0p?v)4+WzGVZD z9@th~(8EaaBZUc=smkX#gsx&r=$$ff3g`iuAf=&oKE<6$kVFvIyz>g$1r>vJk$+{1 z37jpV-yyNF`{ZGdlp;+>%Gr2HY;-iXg72r0#kr494XASHqj2bhp6&?`Ci>2ZQB(p* z{HZpeCjKN*$RJ(} z;VDJXr{*%lCE-bRYTo?jH}mROznUXQj&SbWIo|r#x3aUd!*_hgcL1=lvBAR+Kg_99 z(KBQ!(>`$Ez^=OK+rRzWx$Lsb_^F@zDFA-_$A6p`zxc&mbImpE?CkLNx4)e`?zn@W z|M{PP%3kCQGXQitZT{j%|5v{9U;JP33T5hUk3X8SgTmR0{%2~Orm!&~J3Aojf8VX0#1*rBf-~!mK5u#9~0_t$F})qFd8x}4sjK01dP2PXL>y8V*k29_#s?00j6DLtkqg!?@CiiMugJ?mi^ z3RSciA)Oji3a)5DF``;%Au7mDfvA!nHB6i$J05MNw9Yw9?$NUzx&j5%OG2Gl(m|l` zM7~HRNXnjMK14@eNt*7MY9#o!W0H9=#NbH>3<5?3Q6Z#4h?X*#9Q&76Jh;O1fcUwpRc$kI7qTuRzxVp_P%23xbUXjCgG#uZekH zqNuZkj)V5a&aK**E>1Cj6588>H$Y+u1lC>{_VPJ|T^6 zr*%#2@M!z73zzQJXD?`G_$$DSQ}eXqNp)&YoH)VX{kwmc>#nC?NvZ*6VyUElRx z+;GDUyy6wF;N;1Zy!XBD<%KVN;ZyPYW|-k3EY9`$)K9;W|M5@1GhSf;7f=(Ekx5{1 zUBc#3!|2w_Ddr&|Kv_`4;Q~nsnHRFVj!|z8soCSqU?d7{8V{OqU;%%0A9YKp+a{`} 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

c(fYJk({6zMHLFUwo6tRc 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

-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%0D3vrNa&|9m4y8$y26p+kpaCHh6T1@_g1 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 1642c48..1ccb70c 100644 --- a/index.html +++ b/index.html @@ -107,6 +107,10 @@

  • +
  • + + Intro to HR Datasets +
  • @@ -199,6 +206,7 @@

    On this page

  • Acknowledgements
  • @@ -251,6 +259,14 @@

    Workshop Goals

    Workshop Description

    The Surface Water and Ocean Topography (SWOT) satellite, a joint NASA-CNES venture, provides unprecedented measurements of surface water extents and elevations for hydrologic science and applications. The observations are offered through a range of data products including river and lake vector data in shapefiles, and raster, pixel cloud, and pixel vector data in netCDF. The shapefile products will also contain estimates of river discharge and lake storage change. In this pre-meeting workshop, participants will be introduced to SWOT and the various ways to access and utilize its data products, including via cloud computing, local download, and data transformation tools. Participants will be able to utilize a provided cloud computing environment accessed via personal laptops, or their own laptop’s compute power to explore SWOT data using data recipes by PO.DAAC, NASA’s Physical Oceanography Data Active Archive Center. No prior cloud computing experience is necessary. We welcome all to come and see how SWOT data could augment existing workflows or initiate new, innovative science and applications! The data tutorials at the workshop will use Python, but no prior experience is needed.

    +
    +

    Additional SWOT Resources

    + +

    Acknowledgements

    diff --git a/prerequisites.html b/prerequisites.html index eb12c26..135ca5c 100644 --- a/prerequisites.html +++ b/prerequisites.html @@ -108,6 +108,10 @@
  • +
  • + + Intro to HR Datasets +
  • @@ -228,11 +235,11 @@

    Prerequisites

    Before the Workshop, you will need the following:

    1. Earthdata Login Account

    -

    An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. Please remember your username and password!

    +

    An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. Please remember your username and password!

    2. GitHub Account

    -

    A GitHub account is required to gain access to the provided 2i2c cloud computing platform. Please visit https://github.com/join to register and create a free GitHub account. There was an opportunity to send in your GitHub username when you registered for the workshop, if you did not do so, please email cassandra.l.nickles@jpl.nasa.gov with your GitHub username and mention you are a participant for this workshop.

    +

    A GitHub account is required to gain access to the provided 2i2c cloud computing platform. Please visit https://github.com/join to register and create a free GitHub account. There was an opportunity to send in your GitHub username when you registered for the workshop, if you did not do so, please email cassandra.l.nickles@jpl.nasa.gov with your GitHub username and mention you are a participant for this workshop.

    3. Laptop or tablet

    diff --git a/schedule.html b/schedule.html index 0b67117..ea3a165 100644 --- a/schedule.html +++ b/schedule.html @@ -108,6 +108,10 @@
  • +
  • + + Intro to HR Datasets +
  • @@ -227,7 +234,7 @@

    Schedule

    The Data Access Workshop for NASA’s SWOT Satellite will take place on Tuesday, February 13th from 9:00-12:30.

    -

    Note, hands-on exercises will be executed from a Jupyter Lab instance in 2i2c. Click here to deploy the instance and simultaneously clone this GitHub repository to follow along with the tutorials. Please pass along your GitHub Username to get access.

    +

    Note, hands-on exercises will be executed from a Jupyter Lab instance in 2i2c. Click here to deploy the instance and simultaneously clone this GitHub repository to follow along with the tutorials. Please pass along your GitHub Username to get access.

    Workshop Schedule

    diff --git a/search.json b/search.json index 4e01513..c08cb22 100644 --- a/search.json +++ b/search.json @@ -18,7 +18,7 @@ "href": "index.html#about", "title": "Data Access Workshop for NASA’s SWOT Satellite", "section": "About", - "text": "About\n\nWorkshop Goals\n\nProvide an inclusive place to learn about and experience working with NASA’s SWOT Hydrology Data;\nProvide strategies and best practices for finding and accessing NASA Earthdata in the Cloud. Specifically, participants will learn how to access data from AWS S3 buckets and have a better understanding of the Python ecosystem used to analyze the data depending on size and data formats;\nBetter understand the needs of Earthdata data scientists by providing a post survey and engaging in discussions with workshop participants;\nPractice using popular open source tools and utilities.\n\n\n\nWorkshop Description\nThe Surface Water and Ocean Topography (SWOT) satellite, a joint NASA-CNES venture, provides unprecedented measurements of surface water extents and elevations for hydrologic science and applications. The observations are offered through a range of data products including river and lake vector data in shapefiles, and raster, pixel cloud, and pixel vector data in netCDF. The shapefile products will also contain estimates of river discharge and lake storage change. In this pre-meeting workshop, participants will be introduced to SWOT and the various ways to access and utilize its data products, including via cloud computing, local download, and data transformation tools. Participants will be able to utilize a provided cloud computing environment accessed via personal laptops, or their own laptop’s compute power to explore SWOT data using data recipes by PO.DAAC, NASA’s Physical Oceanography Data Active Archive Center. No prior cloud computing experience is necessary. We welcome all to come and see how SWOT data could augment existing workflows or initiate new, innovative science and applications! The data tutorials at the workshop will use Python, but no prior experience is needed." + "text": "About\n\nWorkshop Goals\n\nProvide an inclusive place to learn about and experience working with NASA’s SWOT Hydrology Data;\nProvide strategies and best practices for finding and accessing NASA Earthdata in the Cloud. Specifically, participants will learn how to access data from AWS S3 buckets and have a better understanding of the Python ecosystem used to analyze the data depending on size and data formats;\nBetter understand the needs of Earthdata data scientists by providing a post survey and engaging in discussions with workshop participants;\nPractice using popular open source tools and utilities.\n\n\n\nWorkshop Description\nThe Surface Water and Ocean Topography (SWOT) satellite, a joint NASA-CNES venture, provides unprecedented measurements of surface water extents and elevations for hydrologic science and applications. The observations are offered through a range of data products including river and lake vector data in shapefiles, and raster, pixel cloud, and pixel vector data in netCDF. The shapefile products will also contain estimates of river discharge and lake storage change. In this pre-meeting workshop, participants will be introduced to SWOT and the various ways to access and utilize its data products, including via cloud computing, local download, and data transformation tools. Participants will be able to utilize a provided cloud computing environment accessed via personal laptops, or their own laptop’s compute power to explore SWOT data using data recipes by PO.DAAC, NASA’s Physical Oceanography Data Active Archive Center. No prior cloud computing experience is necessary. We welcome all to come and see how SWOT data could augment existing workflows or initiate new, innovative science and applications! The data tutorials at the workshop will use Python, but no prior experience is needed.\n\n\nAdditional SWOT Resources\n\nPO.DAAC Cookbook: SWOT Chapter - additional tutorials & tips\nSWOT Community GitHub - more community contributions\nSWOT Product Description Documents - pdfs embedded in the table" }, { "objectID": "index.html#acknowledgements", @@ -28,18 +28,25 @@ "text": "Acknowledgements\nThis Workshop and its content has been developed by the PO.DAAC team at NASA’s Jet Propulsion Laboratory, California Institute of Technology." }, { - "objectID": "prerequisites.html", - "href": "prerequisites.html", - "title": "Prerequisites", + "objectID": "schedule.html", + "href": "schedule.html", + "title": "Schedule", "section": "", - "text": "An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. Please remember your username and password!\n\n\n\nA GitHub account is required to gain access to the provided 2i2c cloud computing platform. Please visit https://github.com/join to register and create a free GitHub account. There was an opportunity to send in your GitHub username when you registered for the workshop, if you did not do so, please email cassandra.l.nickles@jpl.nasa.gov with your GitHub username and mention you are a participant for this workshop.\n\n\n\nParticipation in the exercises requires a laptop or tablet. Yes, a tablet works too! All participants will have access to a 2i2c Jupyter Lab instance running in AWS us-west 2." + "text": "The Data Access Workshop for NASA’s SWOT Satellite will take place on Tuesday, February 13th from 9:00-12:30.\nNote, hands-on exercises will be executed from a Jupyter Lab instance in 2i2c. Click here to deploy the instance and simultaneously clone this GitHub repository to follow along with the tutorials. Please pass along your GitHub Username to get access." }, { - "objectID": "prerequisites.html#before-the-workshop-you-will-need-the-following", - "href": "prerequisites.html#before-the-workshop-you-will-need-the-following", - "title": "Prerequisites", - "section": "", - "text": "An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. Please remember your username and password!\n\n\n\nA GitHub account is required to gain access to the provided 2i2c cloud computing platform. Please visit https://github.com/join to register and create a free GitHub account. There was an opportunity to send in your GitHub username when you registered for the workshop, if you did not do so, please email cassandra.l.nickles@jpl.nasa.gov with your GitHub username and mention you are a participant for this workshop.\n\n\n\nParticipation in the exercises requires a laptop or tablet. Yes, a tablet works too! All participants will have access to a 2i2c Jupyter Lab instance running in AWS us-west 2." + "objectID": "schedule.html#workshop-schedule", + "href": "schedule.html#workshop-schedule", + "title": "Schedule", + "section": "Workshop Schedule", + "text": "Workshop Schedule\n\nFebruary 13th, 2024\n\n\n\nTime, HST (UTC-10)\nEvent\n\n\n\n\n\n9:00 am\nWelcome / Ice Breaker\n\n\n\n9:15 am\nIntroduction to SWOT & PO.DAAC\n\n\n\n9:40 am\nEarthdata Search Walkthrough\n\n\n\n10:00 am\nBreak\n\n\n\n10:10 am\nData Access Tutorials\n\n\n\n11:10 am\nBreak\n\n\n\n11:25 am\nTransformation Tools\n\n\n\n11:45 am\nHydroweb.next Demo\n\n\n\n12:00 pm\nDiscussion & Feedback\n\n\n\n12:20 pm\nSummary & Closing" + }, + { + "objectID": "schedule.html#closing---close-out-your-jupyter-hub", + "href": "schedule.html#closing---close-out-your-jupyter-hub", + "title": "Schedule", + "section": "Closing - Close out your Jupyter Hub!", + "text": "Closing - Close out your Jupyter Hub!\n\nClose out your JupyterHub instance if you are finished for the day, following these instructions.\nYou will continue to have access to the 2i2c JupyterHub in AWS for two weeks following this Workshop. You may use that time on your own to continue work and learn more about migrating data access routines and science workflows to the cloud. This cloud compute environment is supported by the NASA Openscapes project.\n\n\nThank you!" }, { "objectID": "slides.html", @@ -56,24 +63,31 @@ "text": "TODO: embed slides" }, { - "objectID": "schedule.html", - "href": "schedule.html", - "title": "Schedule", + "objectID": "prerequisites.html", + "href": "prerequisites.html", + "title": "Prerequisites", "section": "", - "text": "The Data Access Workshop for NASA’s SWOT Satellite will take place on Tuesday, February 13th from 9:00-12:30.\nNote, hands-on exercises will be executed from a Jupyter Lab instance in 2i2c. Click here to deploy the instance and simultaneously clone this GitHub repository to follow along with the tutorials. Please pass along your GitHub Username to get access." + "text": "An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. Please remember your username and password!\n\n\n\nA GitHub account is required to gain access to the provided 2i2c cloud computing platform. Please visit https://github.com/join to register and create a free GitHub account. There was an opportunity to send in your GitHub username when you registered for the workshop, if you did not do so, please email cassandra.l.nickles@jpl.nasa.gov with your GitHub username and mention you are a participant for this workshop.\n\n\n\nParticipation in the exercises requires a laptop or tablet. Yes, a tablet works too! All participants will have access to a 2i2c Jupyter Lab instance running in AWS us-west 2." }, { - "objectID": "schedule.html#workshop-schedule", - "href": "schedule.html#workshop-schedule", - "title": "Schedule", - "section": "Workshop Schedule", - "text": "Workshop Schedule\n\nFebruary 13th, 2024\n\n\n\nTime, HST (UTC-10)\nEvent\n\n\n\n\n\n9:00 am\nWelcome / Ice Breaker\n\n\n\n9:15 am\nIntroduction to SWOT & PO.DAAC\n\n\n\n9:40 am\nEarthdata Search Walkthrough\n\n\n\n10:00 am\nBreak\n\n\n\n10:10 am\nData Access Tutorials\n\n\n\n11:10 am\nBreak\n\n\n\n11:25 am\nTransformation Tools\n\n\n\n11:45 am\nHydroweb.next Demo\n\n\n\n12:00 pm\nDiscussion & Feedback\n\n\n\n12:20 pm\nSummary & Closing" + "objectID": "prerequisites.html#before-the-workshop-you-will-need-the-following", + "href": "prerequisites.html#before-the-workshop-you-will-need-the-following", + "title": "Prerequisites", + "section": "", + "text": "An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. Please remember your username and password!\n\n\n\nA GitHub account is required to gain access to the provided 2i2c cloud computing platform. Please visit https://github.com/join to register and create a free GitHub account. There was an opportunity to send in your GitHub username when you registered for the workshop, if you did not do so, please email cassandra.l.nickles@jpl.nasa.gov with your GitHub username and mention you are a participant for this workshop.\n\n\n\nParticipation in the exercises requires a laptop or tablet. Yes, a tablet works too! All participants will have access to a 2i2c Jupyter Lab instance running in AWS us-west 2." }, { - "objectID": "schedule.html#closing---close-out-your-jupyter-hub", - "href": "schedule.html#closing---close-out-your-jupyter-hub", - "title": "Schedule", - "section": "Closing - Close out your Jupyter Hub!", - "text": "Closing - Close out your Jupyter Hub!\n\nClose out your JupyterHub instance if you are finished for the day, following these instructions.\nYou will continue to have access to the 2i2c JupyterHub in AWS for two weeks following this Workshop. You may use that time on your own to continue work and learn more about migrating data access routines and science workflows to the cloud. This cloud compute environment is supported by the NASA Openscapes project.\n\n\nThank you!" + "objectID": "Tutorials/SWOTHR_s3Access_real_data_v11.html", + "href": "Tutorials/SWOTHR_s3Access_real_data_v11.html", + "title": "SWOT Hydrology Dataset Exploration in the Cloud", + "section": "", + "text": "This tutorial can only be run in an AWS cloud instance running in us-west-2: NASA Earthdata Cloud data in S3 can be directly accessed via earthaccess python library; this access is limited to requests made within the US West (Oregon) (code: us-west-2) AWS region.\n\n\n\n\nAccess SWOT HR data prodcuts (archived in NASA Earthdata Cloud) within the AWS cloud, without downloading to local machine\nVisualize accessed data for a quick check\n\n\n\n\nRiver Vector Shapefile - SWOT_L2_HR_RIVERSP_1.1\nLake Vector Shapefile - SWOT_L2_HR_LAKESP_1.1\nWater Mask Pixel Cloud NetCDF - SWOT_L2_HR_PIXC_1.1\nWater Mask Pixel Cloud Vector Attribute NetCDF - SWOT_L2_HR_PIXCVec_1.1\nRaster NetCDF - SWOT_L2_HR_Raster_1.1\nSingle Look Complex Data product - SWOT_L1B_HR_SLC_1.1\n\nNotebook Author: Cassie Nickles, NASA PO.DAAC (Aug 2023) || Other Contributors: Zoe Walschots (PO.DAAC Summer Intern 2023), Catalina Taglialatela (NASA PO.DAAC), Luis Lopez (NASA NSIDC DAAC)\nLast updated: 4 Dec 2023\n\n\n\n\n\nimport glob\nimport os\nimport requests\nimport s3fs\nimport fiona\nimport netCDF4 as nc\nimport h5netcdf\nimport xarray as xr\nimport pandas as pd\nimport geopandas as gpd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport hvplot.xarray\nimport earthaccess\nfrom earthaccess import Auth, DataCollections, DataGranules, Store\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAn Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. If you don’t already have one, please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. We use earthaccess to authenticate your login credentials below.\n\nauth = earthaccess.login()\n\nEARTHDATA_USERNAME and EARTHDATA_PASSWORD are not set in the current environment, try setting them or use a different strategy (netrc, interactive)\nYou're now authenticated with NASA Earthdata Login\nUsing token with expiration date: 01/07/2024\nUsing .netrc file for EDL\n\n\n\n\n\n\n\nThe s3 access link can be found using earthaccess data search. Since this collection consists of Reach and Node files, we need to extract only the granule for the Reach file. We do this by filtering for the ‘Reach’ title in the data link.\nAlternatively, Earthdata Search (see tutorial) can be used to search in a map graphic user interface.\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\n\n\n\n#Retrieves granule from the day we want, in this case by passing to `earthdata.search_data` function the data collection shortname, temporal bounds, and for restricted data one must specify the search count\nriver_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_RIVERSP_1.1', \n temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'),\n granule_name = '*Reach*_013_NA*') # here we filter by Reach files (not node), pass #13 and continent code=NA\n\nGranules found: 14\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=river_results)\n\n\n\n\nThe native format for this data is a .zip file, and we want the .shp file within the .zip file, so we will create a Fiona AWS session using the credentials from setting up the s3fs session above to access the shapefiles within the zip files. If we don’t do this, the alternative would be to download the data to the cloud environment (e.g. EC2 instance, user S3 bucket) and extract the .zip file there.\n\nfiona_session=fiona.session.AWSSession(\n aws_access_key_id=fs_s3.storage_options[\"key\"],\n aws_secret_access_key=fs_s3.storage_options[\"secret\"],\n aws_session_token=fs_s3.storage_options[\"token\"]\n )\n\n\n# Get the link for the first zip file\nriver_link = earthaccess.results.DataGranule.data_links(river_results[0], access='direct')[0]\n\n# We use the zip+ prefix so fiona knows that we are operating on a zip file\nriver_shp_url = f\"zip+{river_link}\"\n\nwith fiona.Env(session=fiona_session):\n SWOT_HR_shp1 = gpd.read_file(river_shp_url) \n\n#view the attribute table\nSWOT_HR_shp1 \n\n\n\n\n\n\n\n\nreach_id\ntime\ntime_tai\ntime_str\np_lat\np_lon\nriver_name\nwse\nwse_u\nwse_r_u\n...\np_wid_var\np_n_nodes\np_dist_out\np_length\np_maf\np_dam_id\np_n_ch_max\np_n_ch_mod\np_low_slp\ngeometry\n\n\n\n\n0\n77460000013\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.621824\n-124.244823\nEel River\n2.320100e+00\n9.653000e-02\n3.490000e-02\n...\n23702.805\n96\n19376.986\n19194.609276\n-1.000000e+12\n0\n4\n1\n0\nLINESTRING (-124.29069 40.66364, -124.29104 40...\n\n\n1\n77460000021\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.542406\n-124.156177\nEel River\n9.248800e+00\n9.071000e-02\n1.130000e-02\n...\n3435.524\n51\n29478.836\n10101.849934\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-124.16119 40.58421, -124.16097 40...\n\n\n2\n77460000031\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.494638\n-124.107178\nEel River\n1.970160e+01\n5.754600e-01\n5.683800e-01\n...\n1202.549\n50\n39553.707\n10074.871060\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-124.13864 40.50871, -124.13829 40...\n\n\n3\n77460000041\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.447111\n-124.021272\nEel River\n3.471650e+01\n1.486718e+01\n1.486691e+01\n...\n645.984\n81\n55843.425\n16289.718636\n-1.000000e+12\n0\n1\n1\n0\nLINESTRING (-124.09611 40.46269, -124.09575 40...\n\n\n4\n77460000051\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.395990\n-123.930243\nEel River\n3.229870e+01\n9.148000e-02\n1.638000e-02\n...\n1532.658\n51\n66073.910\n10230.484650\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-123.95755 40.42295, -123.95719 40...\n\n\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n\n\n355\n78322900143\n-1.000000e+12\n-1.000000e+12\nno_data\n50.998910\n-119.011806\nno_data\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n116183.841\n15\n59585.535\n2935.007230\n-1.000000e+12\n0\n1\n1\n0\nLINESTRING (-119.03134 51.00406, -119.03105 51...\n\n\n356\n78322900153\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:51Z\n51.047442\n-119.042215\nno_data\n3.451806e+02\n1.114110e+00\n1.110470e+00\n...\n41059.043\n51\n30434.699\n10168.113068\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-119.03140 51.09147, -119.03165 51...\n\n\n357\n78322900173\n-1.000000e+12\n-1.000000e+12\nno_data\n50.916115\n-119.036919\nno_data\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n186564.361\n98\n39488.857\n19642.879384\n-1.000000e+12\n0\n4\n1\n0\nLINESTRING (-118.99201 50.99421, -118.99200 50...\n\n\n358\n78322900183\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:52Z\n51.060235\n-118.938606\nno_data\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n177029.325\n86\n56650.527\n17161.670624\n-1.000000e+12\n0\n4\n1\n0\nLINESTRING (-118.99200 50.99394, -118.99201 50...\n\n\n359\n78322900211\n-1.000000e+12\n-1.000000e+12\nno_data\n50.549433\n-119.062048\nShuswap River\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n122.690\n50\n103956.987\n10074.432813\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-119.11242 50.54684, -119.11207 50...\n\n\n\n\n360 rows × 127 columns\n\n\n\n\n\n\n\n# Simple plot\nfig, ax = plt.subplots(figsize=(7,5))\nSWOT_HR_shp1.plot(ax=ax, color='black')\n\n<Axes: >\n\n\n\n\n\n\n# # Another way to plot geopandas dataframes is with `explore`, which also plots a basemap\n# SWOT_HR_shp1.explore()\n\n\n\n\nThe lake vector shapefiles can be accessed in the same way as the river shapefiles above.\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\n\n\n\nlake_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_LAKESP_1.1', \n temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'),\n granule_name = '*Obs*_013_NA*') # here we filter by files with 'Obs' in the name (This collection has three options: Obs, Unassigned, and Prior), pass #13 and continent code=NA\n\nGranules found: 14\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=lake_results)\n\n\n\n\nThe native format for this data is a .zip file, and we want the .shp file within the .zip file, so we will create a Fiona AWS session using the credentials from setting up the s3fs session above to access the shapefiles within the zip files. If we don’t do this, the alternative would be to download the data to the cloud environment (e.g. EC2 instance, user S3 bucket) and extract the .zip file there.\n\nfiona_session=fiona.session.AWSSession(\n aws_access_key_id=fs_s3.storage_options[\"key\"],\n aws_secret_access_key=fs_s3.storage_options[\"secret\"],\n aws_session_token=fs_s3.storage_options[\"token\"]\n )\n\n\n# Get the link for the first zip file\nlake_link = earthaccess.results.DataGranule.data_links(lake_results[0], access='direct')[0]\n\n# We use the zip+ prefix so fiona knows that we are operating on a zip file\nlake_shp_url = f\"zip+{lake_link}\"\n\nwith fiona.Env(session=fiona_session):\n SWOT_HR_shp2 = gpd.read_file(lake_shp_url) \n\n#view the attribute table\nSWOT_HR_shp2\n\n\n\n\n\n\n\n\nobs_id\nlake_id\noverlap\nn_overlap\nreach_id\ntime\ntime_tai\ntime_str\nwse\nwse_u\n...\nload_tidef\nload_tideg\npole_tide\ndry_trop_c\nwet_trop_c\niono_c\nxovr_cal_c\nlake_name\np_res_id\ngeometry\n\n\n\n\n0\n781229R000006\n7810001133\n85\n1\nno_data\n7.342536e+08\n7.342536e+08\n2023-04-08T07:19:21Z\n593.993\n0.011\n...\n-0.019138\n-0.018407\n-0.002311\n-2.164411\n-0.074947\n-0.003339\n-1.000000e+12\nAPPLEGATE RESERVOIR;APPLEGATE LAKE\n116\nMULTIPOLYGON (((-123.10728 42.03437, -123.1073...\n\n\n1\n782232R000018\n7820002572;7820002253\n86;80\n2\nno_data\n7.342536e+08\n7.342536e+08\n2023-04-08T07:19:51Z\n439.811\n0.167\n...\n-0.016663\n-0.016105\n-0.002303\n-2.199668\n-0.069287\n-0.003153\n-1.000000e+12\nHILLS CREEK RESERVOIR\n-99999999\nMULTIPOLYGON (((-122.45387 43.68914, -122.4539...\n\n\n2\n782243R000013\n7820039162\n10\n1\nno_data\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:40Z\n341.457\n0.003\n...\n-0.009852\n-0.009920\n-0.002187\n-2.211506\n-0.079803\n-0.002515\n-1.000000e+12\nWHITEMAN CREEK;OKANAGAN LAKE;OKANAGAN\n-99999999\nMULTIPOLYGON (((-119.72285 49.72639, -119.7227...\n\n\n3\n782243R015586\n7820039162\n17\n1\nno_data\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:48Z\n341.513\n0.028\n...\n-0.009454\n-0.009599\n-0.002172\n-2.209661\n-0.079193\n-0.002491\n-1.000000e+12\nWHITEMAN CREEK;OKANAGAN LAKE;OKANAGAN\n-99999999\nMULTIPOLYGON (((-119.49606 50.06182, -119.4961...\n\n\n4\n783245R000005\n7830263943\n32\n1\n78322700063;78322700091;78322800011;7832290001...\n7.342537e+08\n7.342537e+08\n2023-04-08T07:22:01Z\n344.832\n0.014\n...\n-0.009029\n-0.009206\n-0.002157\n-2.207273\n-0.082830\n-0.002465\n-1.000000e+12\nROSS CREEK;EAGLE RIVER;SHUSWAP;LITTLE RIVER;SC...\n-99999999\nMULTIPOLYGON (((-119.35814 50.94441, -119.3580...\n\n\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n\n\n831\n783246R009013\n7830249372;7830249352\n81;71\n2\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:13Z\n1837.232\n0.563\n...\n-0.008546\n-0.008791\n-0.002133\n-2.094712\n-0.066065\n-0.002440\n-1.000000e+12\nno_data\n-99999999\nMULTIPOLYGON (((-118.98292 51.59811, -118.9830...\n\n\n832\n783246R009931\n7830249332\n87\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:14Z\n1635.514\n0.325\n...\n-0.008539\n-0.008785\n-0.002132\n-2.136184\n-0.071612\n-0.002440\n-1.000000e+12\nno_data\n-99999999\nPOLYGON ((-118.98463 51.61215, -118.98453 51.6...\n\n\n833\n783246R010740\n7830243082\n82\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:14Z\n2094.295\n5.792\n...\n-0.008558\n-0.008815\n-0.002135\n-1.942940\n-0.048756\n-0.002438\n-1.000000e+12\nno_data\n-99999999\nMULTIPOLYGON (((-119.07615 51.67504, -119.0759...\n\n\n834\n783246R010910\n7830256902\n21\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:14Z\n1996.670\n0.303\n...\n-0.008524\n-0.008775\n-0.002132\n-1.863152\n-0.041920\n-0.002443\n-1.000000e+12\nno_data\n-99999999\nPOLYGON ((-118.97489 51.63692, -118.97478 51.6...\n\n\n835\n782246R012796\n7820071012\n75\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:15Z\n1962.504\n0.385\n...\n-0.008469\n-0.008730\n-0.002128\n-2.104326\n-0.068847\n-0.002438\n-1.000000e+12\nno_data\n-99999999\nPOLYGON ((-118.88701 51.66364, -118.88710 51.6...\n\n\n\n\n836 rows × 36 columns\n\n\n\n\n\n\n\nfig, ax = plt.subplots(figsize=(7,5))\nSWOT_HR_shp2.plot(ax=ax, color='black')\n\n<Axes: >\n\n\n\n\n\nAccessing the remaining files is different than the shp files above. We do not need to read the shapefiles within a zip file using something like Fiona session (or to download and unzip in the cloud) because the following SWOT HR collections are stored in netCDF files in the cloud. For the rest of the products, we will open via xarray, not geopandas.\n\n\n\n\n\n\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\npixc_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_PIXC_1.1',\n temporal = ('2023-04-22 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 \n\nGranules found: 164\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=pixc_results)\n\n# get link for file 100\npixc_link = earthaccess.results.DataGranule.data_links(pixc_results[100], access='direct')[0]\n\ns3_file_obj3 = fs_s3.open(pixc_link, mode='rb')\n\n\n\n\nThe pixel cloud netCDF files are formatted with three groups titled, “pixel cloud”, “tvp”, or “noise” (more detail here). In order to access the coordinates and variables within the file, a group must be specified when calling xarray open_dataset.\n\nds_PIXC = xr.open_dataset(s3_file_obj3, group = 'pixel_cloud', engine='h5netcdf')\nds_PIXC\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (points: 5180594, complex_depth: 2,\n num_pixc_lines: 3239)\nCoordinates:\n latitude (points) float64 ...\n longitude (points) float64 ...\nDimensions without coordinates: points, complex_depth, num_pixc_lines\nData variables: (12/57)\n azimuth_index (points) float64 ...\n range_index (points) float64 ...\n interferogram (points, complex_depth) float32 ...\n power_plus_y (points) float32 ...\n power_minus_y (points) float32 ...\n coherent_power (points) float32 ...\n ... ...\n interferogram_qual (points) float64 ...\n classification_qual (points) float64 ...\n geolocation_qual (points) float64 ...\n sig0_qual (points) float64 ...\n pixc_line_qual (num_pixc_lines) float64 ...\n pixc_line_to_tvp (num_pixc_lines) float32 ...\nAttributes:\n description: cloud of geolocated interferogram pixels\n interferogram_size_azimuth: 3239\n interferogram_size_range: 5526\n looks_to_efflooks: 1.5309342049156023\n num_azimuth_looks: 7.0\n azimuth_offset: 3xarray.DatasetDimensions:points: 5180594complex_depth: 2num_pixc_lines: 3239Coordinates: (2)latitude(points)float64...long_name :latitude (positive N, negative S)standard_name :latitudeunits :degrees_northquality_flag :geolocation_qualvalid_min :-80.0valid_max :80.0comment :Geodetic latitude [-80,80] (degrees north of equator) of the pixel.[5180594 values with dtype=float64]longitude(points)float64...long_name :longitude (degrees East)standard_name :longitudeunits :degrees_eastquality_flag :geolocation_qualvalid_min :-180.0valid_max :180.0comment :Longitude [-180,180) (east of the Greenwich meridian) of the pixel.[5180594 values with dtype=float64]Data variables: (57)azimuth_index(points)float64...long_name :rare interferogram azimuth indexunits :1valid_min :0valid_max :999999comment :Rare interferogram azimuth index (indexed from 0).[5180594 values with dtype=float64]range_index(points)float64...long_name :rare interferogram range indexunits :1valid_min :0valid_max :999999comment :Rare interferogram range index (indexed from 0).[5180594 values with dtype=float64]interferogram(points, complex_depth)float32...long_name :rare interferogramunits :1quality_flag :interferogram_qualvalid_min :-1e+20valid_max :1e+20comment :Complex unflattened rare interferogram.[10361188 values with dtype=float32]power_plus_y(points)float32...long_name :power for plus_y channelunits :1quality_flag :interferogram_qualvalid_min :0.0valid_max :1e+20comment :Power for the plus_y channel (arbitrary units that give sigma0 when noise subtracted and normalized by the X factor).[5180594 values with dtype=float32]power_minus_y(points)float32...long_name :power for minus_y channelunits :1quality_flag :interferogram_qualvalid_min :0.0valid_max :1e+20comment :Power for the minus_y channel (arbitrary units that give sigma0 when noise subtracted and normalized by the X factor).[5180594 values with dtype=float32]coherent_power(points)float32...long_name :coherent power combination of minus_y and plus_y channelsunits :1quality_flag :interferogram_qualvalid_min :0.0valid_max :1e+20comment :Power computed by combining the plus_y and minus_y channels coherently by co-aligning the phases (arbitrary units that give sigma0 when noise subtracted and normalized by the X factor).[5180594 values with dtype=float32]x_factor_plus_y(points)float32...long_name :X factor for plus_y channel powerunits :1valid_min :0.0valid_max :1e+20comment :X factor for the plus_y channel power in linear units (arbitrary units to normalize noise-subtracted power to sigma0).[5180594 values with dtype=float32]x_factor_minus_y(points)float32...long_name :X factor for minus_y channel powerunits :1valid_min :0.0valid_max :1e+20comment :X factor for the minus_y channel power in linear units (arbitrary units to normalize noise-subtracted power to sigma0).[5180594 values with dtype=float32]water_frac(points)float32...long_name :water fractionunits :1quality_flag :classification_qualvalid_min :-1000.0valid_max :10000.0comment :Noisy estimate of the fraction of the pixel that is water.[5180594 values with dtype=float32]water_frac_uncert(points)float32...long_name :water fraction uncertaintyunits :1valid_min :0.0valid_max :999999.0comment :Uncertainty estimate of the water fraction estimate (width of noisy water frac estimate distribution).[5180594 values with dtype=float32]classification(points)float32...long_name :classificationquality_flag :classification_qualflag_meanings :land land_near_water water_near_land open_water dark_water low_coh_water_near_land open_low_coh_waterflag_values :[1 2 3 4 5 6 7]valid_min :1valid_max :7comment :Flags indicating water detection results.[5180594 values with dtype=float32]false_detection_rate(points)float32...long_name :false detection rateunits :1quality_flag :classification_qualvalid_min :0.0valid_max :1.0comment :Probability of falsely detecting water when there is none.[5180594 values with dtype=float32]missed_detection_rate(points)float32...long_name :missed detection rateunits :1quality_flag :classification_qualvalid_min :0.0valid_max :1.0comment :Probability of falsely detecting no water when there is water.[5180594 values with dtype=float32]prior_water_prob(points)float32...long_name :prior water probabilityunits :1valid_min :0.0valid_max :1.0comment :Prior probability of water occurring.[5180594 values with dtype=float32]bright_land_flag(points)float32...long_name :bright land flagstandard_name :status_flagflag_meanings :not_bright_land bright_land bright_land_or_waterflag_values :[0 1 2]valid_min :0valid_max :2comment :Flag indicating areas that are not typically water but are expected to be bright (e.g., urban areas, ice). Flag value 2 indicates cases where prior data indicate land, but where prior_water_prob indicates possible water.[5180594 values with dtype=float32]layover_impact(points)float32...long_name :layover impactunits :mvalid_min :-999999.0valid_max :999999.0comment :Estimate of the height error caused by layover, which may not be reliable on a pixel by pixel basis, but may be useful to augment aggregated height uncertainties.[5180594 values with dtype=float32]eff_num_rare_looks(points)float32...long_name :effective number of rare looksunits :1valid_min :0.0valid_max :999999.0comment :Effective number of independent looks taken to form the rare interferogram.[5180594 values with dtype=float32]height(points)float32...long_name :height above reference ellipsoidunits :mquality_flag :geolocation_qualvalid_min :-1500.0valid_max :15000.0comment :Height of the pixel above the reference ellipsoid.[5180594 values with dtype=float32]cross_track(points)float32...long_name :approximate cross-track locationunits :mquality_flag :geolocation_qualvalid_min :-75000.0valid_max :75000.0comment :Approximate cross-track location of the pixel.[5180594 values with dtype=float32]pixel_area(points)float32...long_name :pixel areaunits :m^2quality_flag :geolocation_qualvalid_min :0.0valid_max :999999.0comment :Pixel area.[5180594 values with dtype=float32]inc(points)float32...long_name :incidence angleunits :degreesquality_flag :geolocation_qualvalid_min :0.0valid_max :999999.0comment :Incidence angle.[5180594 values with dtype=float32]phase_noise_std(points)float32...long_name :phase noise standard deviationunits :radiansvalid_min :-999999.0valid_max :999999.0comment :Estimate of the phase noise standard deviation.[5180594 values with dtype=float32]dlatitude_dphase(points)float32...long_name :sensitivity of latitude estimate to interferogram phaseunits :degrees/radianquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the latitude estimate to the interferogram phase.[5180594 values with dtype=float32]dlongitude_dphase(points)float32...long_name :sensitivity of longitude estimate to interferogram phaseunits :degrees/radianquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the longitude estimate to the interferogram phase.[5180594 values with dtype=float32]dheight_dphase(points)float32...long_name :sensitivity of height estimate to interferogram phaseunits :m/radianquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the interferogram phase.[5180594 values with dtype=float32]dheight_droll(points)float32...long_name :sensitivity of height estimate to spacecraft rollunits :m/degreesquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the spacecraft roll.[5180594 values with dtype=float32]dheight_dbaseline(points)float32...long_name :sensitivity of height estimate to interferometric baselineunits :m/mquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the interferometric baseline.[5180594 values with dtype=float32]dheight_drange(points)float32...long_name :sensitivity of height estimate to range (delay)units :m/mquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the range (delay).[5180594 values with dtype=float32]darea_dheight(points)float32...long_name :sensitivity of pixel area to reference heightunits :m^2/mquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the pixel area to the reference height.[5180594 values with dtype=float32]illumination_time(points)datetime64[ns]...long_name :time of illumination of each pixel (UTC)standard_name :timetai_utc_difference :37.0leap_second :0000-00-00T00:00:00Zcomment :Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.[5180594 values with dtype=datetime64[ns]]illumination_time_tai(points)datetime64[ns]...long_name :time of illumination of each pixel (TAI)standard_name :timecomment :Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [illumination_time:tai_utc_difference].[5180594 values with dtype=datetime64[ns]]eff_num_medium_looks(points)float32...long_name :effective number of medium looksunits :1valid_min :0.0valid_max :999999.0comment :Effective number of independent looks taken in forming the medium interferogram (after adaptive averaging).[5180594 values with dtype=float32]sig0(points)float32...long_name :sigma0units :1quality_flag :sig0_qualvalid_min :-999999.0valid_max :999999.0comment :Normalized radar cross section (sigma0) in real, linear units (not decibels). The value may be negative due to noise subtraction.[5180594 values with dtype=float32]sig0_uncert(points)float32...long_name :sigma0 uncertaintyunits :1valid_min :-999999.0valid_max :999999.0comment :1-sigma uncertainty in the sig0 measurement. The value is given as an additive (not multiplicative) linear term (not a term in decibels).[5180594 values with dtype=float32]phase_unwrapping_region(points)float64...long_name :phase unwrapping region indexunits :1valid_min :-1valid_max :99999999comment :Phase unwrapping region index.[5180594 values with dtype=float64]ambiguity_cost1(points)float32...long_name :phase ambiguity minimum costunits :1valid_min :-999999.0valid_max :999999.0comment :Phase ambiguity minimum cost.[5180594 values with dtype=float32]ambiguity_cost2(points)float32...long_name :phase ambiguity 2nd minimum costunits :1valid_min :-999999.0valid_max :999999.0comment :Phase ambiguity 2nd minimum cost.[5180594 values with dtype=float32]instrument_range_cor(points)float32...long_name :instrument range correctionunits :mvalid_min :-999999.0valid_max :999999.0comment :Term that incorporates all calibration corrections applied to range before geolocation.[5180594 values with dtype=float32]instrument_phase_cor(points)float32...long_name :instrument phase correctionunits :radiansvalid_min :-999999.0valid_max :999999.0comment :Term that incorporates all calibration corrections applied to phase before geolocation.[5180594 values with dtype=float32]instrument_baseline_cor(points)float32...long_name :instrument baseline correctionunits :mvalid_min :-999999.0valid_max :999999.0comment :Term that incorporates all calibration corrections applied to baseline before geolocation.[5180594 values with dtype=float32]sig0_cor_atmos_model(points)float32...long_name :two-way atmospheric correction to sigma0 from modelsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFunits :1valid_min :1.0valid_max :10.0comment :Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0 and x_factor_plus_y and x_factor_minus_y.[5180594 values with dtype=float32]height_cor_xover(points)float32...long_name :height correction from KaRIn crossoversunits :mvalid_min :-10.0valid_max :10.0comment :Height correction from KaRIn crossover calibration. The correction is applied before geolocation but reported as an equivalent height correction.[5180594 values with dtype=float32]model_dry_tropo_cor(points)float32...long_name :dry troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFunits :mvalid_min :-3.0valid_max :-1.5comment :Equivalent vertical correction due to dry troposphere delay. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported pixel height results in the uncorrected pixel height.[5180594 values with dtype=float32]model_wet_tropo_cor(points)float32...long_name :wet troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFunits :mvalid_min :-1.0valid_max :0.0comment :Equivalent vertical correction due to wet troposphere delay. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported pixel height results in the uncorrected pixel height.[5180594 values with dtype=float32]iono_cor_gim_ka(points)float32...long_name :ionosphere vertical correctionsource :Global Ionosphere Mapsinstitution :JPLunits :mvalid_min :-0.5valid_max :0.0comment :Equivalent vertical correction due to ionosphere delay. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported pixel height results in the uncorrected pixel height.[5180594 values with dtype=float32]geoid(points)float32...long_name :geoid heightstandard_name :geoid_height_above_reference_ellipsoidsource :EGM2008 (Pavlis et al., 2012)units :mvalid_min :-150.0valid_max :150.0comment :Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency). This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]solid_earth_tide(points)float32...long_name :solid Earth tide heightsource :Cartwright and Taylor (1971) and Cartwright and Edden (1973)units :mvalid_min :-1.0valid_max :1.0comment :Solid-Earth (body) tide height. The zero-frequency permanent tide component is not included. This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]load_tide_fes(points)float32...long_name :geocentric load tide height (FES)source :FES2014b (Carrere et al., 2016)institution :LEGOS/CNESunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth's crust. This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]load_tide_got(points)float32...long_name :geocentric load tide height (GOT)source :GOT4.10c (Ray, 2013)institution :GSFCunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth's crust. This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]pole_tide(points)float32...long_name :geocentric pole tide heightsource :Wahr (1985) and Desai et al. (2015)units :mvalid_min :-0.2valid_max :0.2comment :Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth's crust). This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]ancillary_surface_classification_flag(points)float32...long_name :surface classificationstandard_name :status_flagsource :MODIS/GlobCoverinstitution :European Space Agencyflag_meanings :open_ocean land continental_water aquatic_vegetation continental_ice_snow floating_ice salted_basinflag_values :[0 1 2 3 4 5 6]valid_min :0valid_max :6comment :7-state surface type classification computed from a mask built with MODIS and GlobCover data.[5180594 values with dtype=float32]interferogram_qual(points)float64...standard_name :status_flagflag_meanings :rare_power_suspect rare_phase_suspect tvp_suspect sc_event_suspect small_karin_gap in_air_pixel_degraded specular_ringing_degraded rare_power_bad rare_phase_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 2048 4096 8192 16384 32768 262144\n 524288 134217728 268435456 536870912 1073741824 2147483648]valid_min :0valid_max :4161599488comment :Quality flag for the interferogram quantities in the pixel cloud data[5180594 values with dtype=float64]classification_qual(points)float64...standard_name :status_flagflag_meanings :no_coherent_gain power_close_to_noise_floor detected_water_but_no_prior_water detected_water_but_bright_land water_false_detection_rate_suspect coherent_power_suspect tvp_suspect sc_event_suspect small_karin_gap in_air_pixel_degraded specular_ringing_degraded coherent_power_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 8 16 2048\n 8192 16384 32768 262144 524288 134217728\n 536870912 1073741824 2147483648]valid_min :0valid_max :3893159967comment :Quality flag for the classification quantities in the pixel cloud data[5180594 values with dtype=float64]geolocation_qual(points)float64...standard_name :status_flagflag_meanings :layover_significant phase_noise_suspect phase_unwrapping_suspect model_dry_tropo_cor_suspect model_wet_tropo_cor_suspect iono_cor_gim_ka_suspect xovercal_suspect medium_phase_suspect tvp_suspect sc_event_suspect small_karin_gap specular_ringing_degraded model_dry_tropo_cor_missing model_wet_tropo_cor_missing iono_cor_gim_ka_missing xovercal_missing geolocation_is_from_refloc no_geolocation_bad medium_phase_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 8 16 32\n 64 4096 8192 16384 32768 524288\n 1048576 2097152 4194304 8388608 16777216 134217728\n 268435456 536870912 1073741824 2147483648]valid_min :0valid_max :4193841279comment :Quality flag for the geolocation quantities in the pixel cloud data[5180594 values with dtype=float64]sig0_qual(points)float64...standard_name :status_flagflag_meanings :sig0_uncert_suspect sig0_cor_atmos_suspect noise_power_suspect xfactor_suspect rare_power_suspect tvp_suspect sc_event_suspect small_karin_gap in_air_pixel_degraded specular_ringing_degraded sig0_cor_atmos_missing noise_power_bad xfactor_bad rare_power_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 8 2048 8192\n 16384 32768 262144 524288 1048576 33554432\n 67108864 134217728 536870912 1073741824 2147483648]valid_min :0valid_max :3994871823comment :Quality flag for sig0[5180594 values with dtype=float64]pixc_line_qual(num_pixc_lines)float64...standard_name :status_flagflag_meanings :not_in_tile tvp_suspect sc_event_suspect small_karin_gap tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 8192 16384 32768 536870912 1073741824\n 2147483649]valid_min :0valid_max :3758153729comment :Quality flag for pixel cloud data per rare-posted interferogram line (similar to slc_qual in the L1B_HR_SLC product)[3239 values with dtype=float64]pixc_line_to_tvp(num_pixc_lines)float32...long_name :pixel cloud rare line to tvp indexunits :1valid_min :0.0valid_max :999999.0comment :Pixel cloud rare radar grid line index to tvp index mapping[3239 values with dtype=float32]Indexes: (0)Attributes: (6)description :cloud of geolocated interferogram pixelsinterferogram_size_azimuth :3239interferogram_size_range :5526looks_to_efflooks :1.5309342049156023num_azimuth_looks :7.0azimuth_offset :3\n\n\n\n\n\n\n# This could take a few minutes to plot\nplt.scatter(x=ds_PIXC.longitude, y=ds_PIXC.latitude, c=ds_PIXC.height)\nplt.colorbar().set_label('Height (m)')\n\n\n\n\n\n\n\n\n\n\n\npixcvec_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_PIXCVEC_1.1', \n temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 \n\nGranules found: 100\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=pixcvec_results)\n\n# get link for file 0\npixcvec_link = earthaccess.results.DataGranule.data_links(pixcvec_results[0], access='direct')[0]\n\ns3_file_obj4 = fs_s3.open(pixcvec_link, mode='rb')\n\n\n\n\n\nds_PIXCVEC = xr.open_dataset(s3_file_obj4, decode_cf=False, engine='h5netcdf')\nds_PIXCVEC\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (points: 11174047, nchar_reach_id: 11,\n nchar_node_id: 14, nchar_lake_id: 10,\n nchar_obs_id: 13)\nDimensions without coordinates: points, nchar_reach_id, nchar_node_id,\n nchar_lake_id, nchar_obs_id\nData variables:\n azimuth_index (points) int32 ...\n range_index (points) int32 ...\n latitude_vectorproc (points) float64 ...\n longitude_vectorproc (points) float64 ...\n height_vectorproc (points) float32 ...\n reach_id (points, nchar_reach_id) |S1 ...\n node_id (points, nchar_node_id) |S1 ...\n lake_id (points, nchar_lake_id) |S1 ...\n obs_id (points, nchar_obs_id) |S1 ...\n ice_clim_f (points) int8 ...\n ice_dyn_f (points) int8 ...\nAttributes: (12/45)\n Conventions: CF-1.7\n title: Level 2 KaRIn high rate pixel cloud vect...\n short_name: L2_HR_PIXCVec\n institution: JPL\n source: Level 1B KaRIn High Rate Single Look Com...\n history: 2023-09-07T04:43:11.652934Z: Creation\n ... ...\n xref_prior_river_db_file: \n xref_prior_lake_db_file: SWOT_LakeDatabase_Cal_013_20000101T00000...\n xref_reforbittrack_files: SWOT_RefOrbitTrackTileBoundary_Cal_20000...\n xref_param_l2_hr_laketile_file: SWOT_Param_L2_HR_LakeTile_20000101T00000...\n ellipsoid_semi_major_axis: 6378137.0\n ellipsoid_flattening: 0.0033528106647474805xarray.DatasetDimensions:points: 11174047nchar_reach_id: 11nchar_node_id: 14nchar_lake_id: 10nchar_obs_id: 13Coordinates: (0)Data variables: (11)azimuth_index(points)int32..._FillValue :2147483647long_name :rare interferogram azimuth indexunits :1valid_min :0valid_max :999999coordinates :longitude_vectorproc latitude_vectorproccomment :Rare interferogram azimuth index (indexed from 0).[11174047 values with dtype=int32]range_index(points)int32..._FillValue :2147483647long_name :rare interferogram range indexunits :1valid_min :0valid_max :999999coordinates :longitude_vectorproc latitude_vectorproccomment :Rare interferogram range index (indexed from 0).[11174047 values with dtype=int32]latitude_vectorproc(points)float64..._FillValue :9.969209968386869e+36long_name :height-constrained geolocation latitudestandard_name :latitudeunits :degrees_northvalid_min :-80.0valid_max :80.0comment :Height-constrained geodetic latitude of the pixel. Units are in degrees north of the equator.[11174047 values with dtype=float64]longitude_vectorproc(points)float64..._FillValue :9.969209968386869e+36long_name :height-constrained geolocation longitudestandard_name :longitudeunits :degrees_eastvalid_min :-180.0valid_max :180.0comment :Height-constrained geodetic longitude of the pixel. Positive=degrees east of the Greenwich meridian. Negative=degrees west of the Greenwich meridian.[11174047 values with dtype=float64]height_vectorproc(points)float32..._FillValue :9.96921e+36long_name :height above reference ellipsoidunits :mvalid_min :-1500.0valid_max :15000.0coordinates :longitude_vectorproc latitude_vectorproccomment :Height-constrained height of the pixel above the reference ellipsoid.[11174047 values with dtype=float32]reach_id(points, nchar_reach_id)|S1...long_name :identifier of the associated prior river reachcoordinates :longitude_vectorproc latitude_vectorproccomment :Unique reach identifier from the prior river database. The format of the identifier is CBBBBBRRRRT, where C=continent, B=basin, R=reach, T=type.[122914517 values with dtype=|S1]node_id(points, nchar_node_id)|S1...long_name :identifier of the associated prior river nodecoordinates :longitude_vectorproc latitude_vectorproccomment :Unique node identifier from the prior river database. The format of the identifier is CBBBBBRRRRNNNT, where C=continent, B=basin, R=reach, N=node, T=type of water body.[156436658 values with dtype=|S1]lake_id(points, nchar_lake_id)|S1...long_name :identifier of the associated prior lakecoordinates :longitude_vectorproc latitude_vectorproccomment :Identifier of the lake from the lake prior database) associated to the pixel. The format of the identifier is CBBNNNNNNT, where C=continent, B=basin, N=counter within the basin, T=type of water body.[111740470 values with dtype=|S1]obs_id(points, nchar_obs_id)|S1...long_name :identifier of the observed featurecoordinates :longitude_vectorproc latitude_vectorproccomment :Tile-specific identifier of the observed feature associated to the pixel. The format of the identifier is CBBTTTSNNNNNN, where C=continent, B=basin, T=tile number, S=swath side, N=lake counter within the PIXC tile.[145262611 values with dtype=|S1]ice_clim_f(points)int8..._FillValue :127long_name :climatological ice cover flagflag_meanings :no_ice_cover uncertain_ice_cover full_ice_coverflag_values :[0 1 2]institution :University of North Carolinacoordinates :longitude_vectorproc latitude_vectorproccomment :Climatological ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on external climatological information (not the SWOT measurement). Values of 0, 1, and 2 indicate that the surface is not ice covered, may or may not be partially or fully ice covered, and fully ice covered, respectively. A value of 127 indicates that this flag is not available.[11174047 values with dtype=int8]ice_dyn_f(points)int8..._FillValue :127long_name :dynamical ice cover flagflag_meanings :no_ice_cover partial_ice_cover full_ice_coverflag_values :[0 1 2]institution :University of North Carolinacoordinates :longitude_vectorproc latitude_vectorproccomment :Dynamic ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on analysis of external satellite optical data. Values of 0, 1, and 2 indicate that the surface is not ice covered, partially ice covered, and fully ice covered, respectively. A value of 255 indicates that this flag is not available.[11174047 values with dtype=int8]Indexes: (0)Attributes: (45)Conventions :CF-1.7title :Level 2 KaRIn high rate pixel cloud vector attribute productshort_name :L2_HR_PIXCVecinstitution :JPLsource :Level 1B KaRIn High Rate Single Look Complex Data Producthistory :2023-09-07T04:43:11.652934Z: Creationplatform :SWOTreferences :SWOT-DD-CDM-0565-CNES_SAS_Design_L2_HR_LakeSP - Revision A - 20220531reference_document :SWOT-TN-CDM-0677-CNES_Product_Description_L2_HR_PIXCVec - Revision A - 20220531product_version :V5.2.0crid :PIB0pge_name :PGE_L2_HR_LakeSPpge_version :V4.2.0contact :SWOT-contact@cnes.frcycle_number :498pass_number :13tile_number :223swath_side :Rtile_name :013_223Rcontinent_id :NAcontinent_code :7time_granule_start :2023-04-22T05:07:12.471771Ztime_granule_end :2023-04-22T05:07:23.493987Ztime_coverage_start :2023-04-22T05:07:13.018824Ztime_coverage_end :2023-04-22T05:07:22.948748Zgeospatial_lon_min :-124.56790968330785geospatial_lon_max :-123.63542466025933geospatial_lat_min :38.55706990508294geospatial_lat_max :39.315223768521015inner_first_longitude :-124.56790968330785inner_first_latitude :38.69222477165863inner_last_longitude :-124.38372359338888inner_last_latitude :39.315223768521015outer_first_longitude :-123.82494326341896outer_first_latitude :38.55706990508294outer_last_longitude :-123.63542466025933outer_last_latitude :39.17838265794308xref_l2_hr_pixc_file :SWOT_L2_HR_PIXC_498_013_223R_20230422T050712_20230422T050723_PIB0_01.ncxref_l2_hr_pixcvecriver_file :SWOT_L2_HR_PIXCVecRiver_498_013_223R_20230422T050712_20230422T050723_PIB0_01.ncxref_prior_river_db_file :xref_prior_lake_db_file :SWOT_LakeDatabase_Cal_013_20000101T000000_20991231T235959_20230614T000000_v102.sqlitexref_reforbittrack_files :SWOT_RefOrbitTrackTileBoundary_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txtxref_param_l2_hr_laketile_file :SWOT_Param_L2_HR_LakeTile_20000101T000000_20991231T235959_20230614T170000_v410.cfgellipsoid_semi_major_axis :6378137.0ellipsoid_flattening :0.0033528106647474805\n\n\n\n\n\n\npixcvec_htvals = ds_PIXCVEC.height_vectorproc.compute()\npixcvec_latvals = ds_PIXCVEC.latitude_vectorproc.compute()\npixcvec_lonvals = ds_PIXCVEC.longitude_vectorproc.compute()\n\n#Before plotting, we set all fill values to nan so that the graph shows up better spatially\npixcvec_htvals[pixcvec_htvals > 15000] = np.nan\npixcvec_latvals[pixcvec_latvals > 80] = np.nan\npixcvec_latvals[pixcvec_latvals < -80] = np.nan\npixcvec_lonvals[pixcvec_lonvals > 180] = np.nan\npixcvec_lonvals[pixcvec_lonvals < -180] = np.nan\n\n\nplt.scatter(x=pixcvec_lonvals, y=pixcvec_latvals, c=pixcvec_htvals)\nplt.colorbar().set_label('Height (m)')\n\n\n\n\n\n\n\n\n\n\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\n#Say we know the exact cycle, pass & scene. We can search for one data granule!\nraster_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_Raster_1.1', \n temporal = ('2023-04-01 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*100m*_498_013_130F*') # here we filter by files with '100m' in the name (This collection has two resolution options: 100m & 250m), cycle=498, pass=013, scene = 130F \n\nGranules found: 1\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=raster_results)\n\n# get link for file \nraster_link = earthaccess.results.DataGranule.data_links(raster_results[0], access='direct')[0]\n\ns3_file_obj5 = fs_s3.open(raster_link, mode='rb')\n\n\n\n\n\nds_raster = xr.open_dataset(s3_file_obj5, engine='h5netcdf')\nds_raster\n\n/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/coding/times.py:254: RuntimeWarning: invalid value encountered in cast\n flat_num_dates_ns_int = (flat_num_dates * _NS_PER_TIME_DELTA[delta]).astype(\n/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/coding/times.py:254: RuntimeWarning: invalid value encountered in cast\n flat_num_dates_ns_int = (flat_num_dates * _NS_PER_TIME_DELTA[delta]).astype(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (x: 1652, y: 1651)\nCoordinates:\n * x (x) float64 5.438e+05 5.439e+05 ... 7.089e+05\n * y (y) float64 6.468e+06 6.468e+06 ... 6.633e+06\nData variables: (12/39)\n crs object ...\n longitude (y, x) float64 ...\n latitude (y, x) float64 ...\n wse (y, x) float32 ...\n wse_qual (y, x) float32 ...\n wse_qual_bitwise (y, x) float64 ...\n ... ...\n load_tide_fes (y, x) float32 ...\n load_tide_got (y, x) float32 ...\n pole_tide (y, x) float32 ...\n model_dry_tropo_cor (y, x) float32 ...\n model_wet_tropo_cor (y, x) float32 ...\n iono_cor_gim_ka (y, x) float32 ...\nAttributes: (12/49)\n Conventions: CF-1.7\n title: Level 2 KaRIn High Rate Raster Data Product\n source: Ka-band radar interferometer\n history: 2023-09-13T20:22:58Z : Creation\n platform: SWOT\n reference_document: JPL D-56416 - Revision B - October 24, 2022\n ... ...\n x_max: 708900.0\n y_min: 6467900.0\n y_max: 6632900.0\n institution: JPL\n references: V1.0\n product_version: 01xarray.DatasetDimensions:x: 1652y: 1651Coordinates: (2)x(x)float645.438e+05 5.439e+05 ... 7.089e+05long_name :x coordinate of projectionstandard_name :projection_x_coordinateunits :mvalid_min :-10000000.0valid_max :10000000.0comment :UTM easting coordinate of the pixel.array([543800., 543900., 544000., ..., 708700., 708800., 708900.])y(y)float646.468e+06 6.468e+06 ... 6.633e+06long_name :y coordinate of projectionstandard_name :projection_y_coordinateunits :mvalid_min :-20000000.0valid_max :20000000.0comment :UTM northing coordinate of the pixel.array([6467900., 6468000., 6468100., ..., 6632700., 6632800., 6632900.])Data variables: (39)crs()object...long_name :CRS Definitiongrid_mapping_name :transverse_mercatorprojected_crs_name :WGS 84 / UTM zone 11Ngeographic_crs_name :WGS 84reference_ellipsoid_name :WGS 84horizontal_datum_name :WGS_1984prime_meridian_name :Greenwichfalse_easting :500000.0false_northing :0.0longitude_of_central_meridian :-117.0longitude_of_prime_meridian :0.0latitude_of_projection_origin :0.0scale_factor_at_central_meridian :0.9996semi_major_axis :6378137.0inverse_flattening :298.257223563crs_wkt :PROJCS[\"WGS 84 / UTM zone 11N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32611\"]]spatial_ref :PROJCS[\"WGS 84 / UTM zone 11N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32611\"]]comment :UTM zone coordinate reference system.[1 values with dtype=object]longitude(y, x)float64...long_name :longitude (degrees East)standard_name :longitudegrid_mapping :crsunits :degrees_eastvalid_min :-180.0valid_max :180.0comment :Geodetic longitude [-180,180) (east of the Greenwich meridian) of the pixel.[2727452 values with dtype=float64]latitude(y, x)float64...long_name :latitude (positive N, negative S)standard_name :latitudegrid_mapping :crsunits :degrees_northvalid_min :-80.0valid_max :80.0comment :Geodetic latitude [-80,80] (degrees north of equator) of the pixel.[2727452 values with dtype=float64]wse(y, x)float32...long_name :water surface elevation above geoidgrid_mapping :crsunits :mquality_flag :wse_qualvalid_min :-1500.0valid_max :15000.0comment :Water surface elevation of the pixel above the geoid and after using models to subtract the effects of tides (solid_earth_tide, load_tide_fes, pole_tide).[2727452 values with dtype=float32]wse_qual(y, x)float32...long_name :summary quality indicator for the water surface elevationstandard_name :status_flaggrid_mapping :crsflag_meanings :good suspect degraded badflag_values :[0 1 2 3]valid_min :0valid_max :3comment :Summary quality indicator for the water surface elevation quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.[2727452 values with dtype=float32]wse_qual_bitwise(y, x)float64...long_name :bitwise quality indicator for the water surface elevationstandard_name :status_flaggrid_mapping :crsflag_meanings :classification_qual_suspect geolocation_qual_suspect large_uncert_suspect bright_land few_pixels far_range_suspect near_range_suspect classification_qual_degraded geolocation_qual_degraded value_bad no_pixels outside_scene_bounds inner_swath missing_karin_dataflag_masks :[ 2 4 32 128 4096 8192\n 16384 262144 524288 16777216 268435456 536870912\n 1073741824 2147483648]valid_min :0valid_max :4044124326comment :Bitwise quality indicator for the water surface elevation quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.[2727452 values with dtype=float64]wse_uncert(y, x)float32...long_name :uncertainty in the water surface elevationgrid_mapping :crsunits :mvalid_min :0.0valid_max :999999.0comment :1-sigma uncertainty in the water surface elevation.[2727452 values with dtype=float32]water_area(y, x)float32...long_name :water surface areagrid_mapping :crsunits :m^2quality_flag :water_area_qualvalid_min :-2000000.0valid_max :2000000000.0comment :Surface area of the water pixels.[2727452 values with dtype=float32]water_area_qual(y, x)float32...long_name :summary quality indicator for the water surface areastandard_name :status_flaggrid_mapping :crsflag_meanings :good suspect degraded badflag_values :[0 1 2 3]valid_min :0valid_max :3comment :Summary quality indicator for the water surface area and water fraction quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.[2727452 values with dtype=float32]water_area_qual_bitwise(y, x)float64...long_name :bitwise quality indicator for the water surface areastandard_name :status_flaggrid_mapping :crsflag_meanings :classification_qual_suspect geolocation_qual_suspect water_fraction_suspect large_uncert_suspect bright_land few_pixels far_range_suspect near_range_suspect classification_qual_degraded geolocation_qual_degraded value_bad no_pixels outside_scene_bounds inner_swath missing_karin_dataflag_masks :[ 2 4 8 32 128 4096\n 8192 16384 262144 524288 16777216 268435456\n 536870912 1073741824 2147483648]valid_min :0valid_max :4044124334comment :Bitwise quality indicator for the water surface area and water fraction quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.[2727452 values with dtype=float64]water_area_uncert(y, x)float32...long_name :uncertainty in the water surface areagrid_mapping :crsunits :m^2valid_min :0.0valid_max :2000000000.0comment :1-sigma uncertainty in the water surface area.[2727452 values with dtype=float32]water_frac(y, x)float32...long_name :water fractiongrid_mapping :crsunits :1quality_flag :water_area_qualvalid_min :-1000.0valid_max :10000.0comment :Fraction of the pixel that is water.[2727452 values with dtype=float32]water_frac_uncert(y, x)float32...long_name :uncertainty in the water fractiongrid_mapping :crsunits :1valid_min :0.0valid_max :999999.0comment :1-sigma uncertainty in the water fraction.[2727452 values with dtype=float32]sig0(y, x)float32...long_name :sigma0grid_mapping :crsunits :1quality_flag :sig0_qualvalid_min :-1000.0valid_max :10000000.0comment :Normalized radar cross section (sigma0) in real, linear units (not decibels). The value may be negative due to noise subtraction.[2727452 values with dtype=float32]sig0_qual(y, x)float32...long_name :summary quality indicator for the sigma0standard_name :status_flaggrid_mapping :crsflag_meanings :good suspect degraded badflag_values :[0 1 2 3]valid_min :0valid_max :3comment :Summary quality indicator for the sigma0 quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.[2727452 values with dtype=float32]sig0_qual_bitwise(y, x)float64...long_name :bitwise quality indicator for the sigma0standard_name :status_flaggrid_mapping :crsflag_meanings :sig0_qual_suspect classification_qual_suspect geolocation_qual_suspect large_uncert_suspect bright_land few_pixels far_range_suspect near_range_suspect sig0_qual_degraded classification_qual_degraded geolocation_qual_degraded value_bad no_pixels outside_scene_bounds inner_swath missing_karin_dataflag_masks :[ 1 2 4 32 128 4096\n 8192 16384 131072 262144 524288 16777216\n 268435456 536870912 1073741824 2147483648]valid_min :0valid_max :4044255399comment :Bitwise quality indicator for the sigma0 quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.[2727452 values with dtype=float64]sig0_uncert(y, x)float32...long_name :uncertainty in sigma0grid_mapping :crsunits :1valid_min :0.0valid_max :1000.0comment :1-sigma uncertainty in sigma0. The value is provided in linear units. This value is a one-sigma additive (not multiplicative) uncertainty term, which can be added to or subtracted from sigma0.[2727452 values with dtype=float32]inc(y, x)float32...long_name :incidence anglegrid_mapping :crsunits :degreesvalid_min :0.0valid_max :90.0comment :Incidence angle.[2727452 values with dtype=float32]cross_track(y, x)float32...long_name :approximate cross-track locationgrid_mapping :crsunits :mvalid_min :-75000.0valid_max :75000.0comment :Approximate cross-track location of the pixel.[2727452 values with dtype=float32]illumination_time(y, x)datetime64[ns]...long_name :time of illumination of each pixel (UTC)standard_name :timetai_utc_difference :37.0leap_second :0000-00-00T00:00:00Zcomment :Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.[2727452 values with dtype=datetime64[ns]]illumination_time_tai(y, x)datetime64[ns]...long_name :time of illumination of each pixel (TAI)standard_name :timecomment :Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [illumination_time:tai_utc_difference].[2727452 values with dtype=datetime64[ns]]n_wse_pix(y, x)float64...long_name :number of water surface elevation pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in water surface elevation aggregation.[2727452 values with dtype=float64]n_water_area_pix(y, x)float64...long_name :number of water surface area pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in water surface area and water fraction aggregation.[2727452 values with dtype=float64]n_sig0_pix(y, x)float64...long_name :number of sigma0 pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in sigma0 aggregation.[2727452 values with dtype=float64]n_other_pix(y, x)float64...long_name :number of other pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in aggregation of quantities not related to water surface elevation, water surface area, water fraction or sigma0.[2727452 values with dtype=float64]dark_frac(y, x)float32...long_name :fractional area of dark watergrid_mapping :crsunits :lvalid_min :-1000.0valid_max :10000.0comment :Fraction of pixel water surface area covered by dark water.[2727452 values with dtype=float32]ice_clim_flag(y, x)float32...long_name :climatological ice cover flagstandard_name :status_flagsource :UNCgrid_mapping :crsflag_meanings :no_ice_cover uncertain_ice_cover full_ice_coverflag_values :[0 1 2]valid_min :0valid_max :2comment :Climatological ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on external climatological information (not the SWOT measurement). Values of 0, 1, and 2 indicate that the pixel is likely not ice covered, may or may not be partially or fully ice covered, and likely fully ice covered, respectively.[2727452 values with dtype=float32]ice_dyn_flag(y, x)float32...long_name :dynamic ice cover flagstandard_name :status_flagsource :UNCgrid_mapping :crsflag_meanings :no_ice_cover partial_ice_cover full_ice_coverflag_values :[0 1 2]valid_min :0valid_max :2comment :Dynamic ice cover flag indicating whether the surface is ice-covered on the day of the observation based on analysis of external satellite optical data. Values of 0, 1, and 2 indicate that the pixel is not ice covered, partially ice covered, and fully ice covered, respectively.[2727452 values with dtype=float32]layover_impact(y, x)float32...long_name :layover impactgrid_mapping :crsunits :mvalid_min :-999999.0valid_max :999999.0comment :Estimate of the water surface elevation error caused by layover.[2727452 values with dtype=float32]sig0_cor_atmos_model(y, x)float32...long_name :two-way atmospheric correction to sigma0 from modelsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFgrid_mapping :crsunits :1valid_min :1.0valid_max :10.0comment :Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0.[2727452 values with dtype=float32]height_cor_xover(y, x)float32...long_name :height correction from KaRIn crossoversgrid_mapping :crsunits :mvalid_min :-10.0valid_max :10.0comment :Height correction from KaRIn crossover calibration. The correction is applied before geolocation but reported as an equivalent height correction.[2727452 values with dtype=float32]geoid(y, x)float32...long_name :geoid heightstandard_name :geoid_height_above_reference_ellipsoidsource :EGM2008 (Pavlis et al., 2012)grid_mapping :crsunits :mvalid_min :-150.0valid_max :150.0comment :Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency).[2727452 values with dtype=float32]solid_earth_tide(y, x)float32...long_name :solid Earth tide heightsource :Cartwright and Taylor (1971) and Cartwright and Edden (1973)grid_mapping :crsunits :mvalid_min :-1.0valid_max :1.0comment :Solid-Earth (body) tide height. The zero-frequency permanent tide component is not included.[2727452 values with dtype=float32]load_tide_fes(y, x)float32...long_name :geocentric load tide height (FES)source :FES2014b (Carrere et al., 2016)institution :LEGOS/CNESgrid_mapping :crsunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust.[2727452 values with dtype=float32]load_tide_got(y, x)float32...long_name :geocentric load tide height (GOT)source :GOT4.10c (Ray, 2013)institution :GSFCgrid_mapping :crsunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust. This value is reported for reference but is not applied to the reported height.[2727452 values with dtype=float32]pole_tide(y, x)float32...long_name :geocentric pole tide heightsource :Wahr (1985) and Desai et al. (2015)grid_mapping :crsunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth’s crust).[2727452 values with dtype=float32]model_dry_tropo_cor(y, x)float32...long_name :dry troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFgrid_mapping :crsunits :mvalid_min :-3.0valid_max :-1.5comment :Equivalent vertical correction due to dry troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.[2727452 values with dtype=float32]model_wet_tropo_cor(y, x)float32...long_name :wet troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFgrid_mapping :crsunits :mvalid_min :-1.0valid_max :0.0comment :Equivalent vertical correction due to wet troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.[2727452 values with dtype=float32]iono_cor_gim_ka(y, x)float32...long_name :ionosphere vertical correctionsource :Global Ionosphere Mapsinstitution :JPLgrid_mapping :crsunits :mvalid_min :-0.5valid_max :0.0comment :Equivalent vertical correction due to ionosphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.[2727452 values with dtype=float32]Indexes: (2)xPandasIndexPandasIndex(Float64Index([543800.0, 543900.0, 544000.0, 544100.0, 544200.0, 544300.0,\n 544400.0, 544500.0, 544600.0, 544700.0,\n ...\n 708000.0, 708100.0, 708200.0, 708300.0, 708400.0, 708500.0,\n 708600.0, 708700.0, 708800.0, 708900.0],\n dtype='float64', name='x', length=1652))yPandasIndexPandasIndex(Float64Index([6467900.0, 6468000.0, 6468100.0, 6468200.0, 6468300.0, 6468400.0,\n 6468500.0, 6468600.0, 6468700.0, 6468800.0,\n ...\n 6632000.0, 6632100.0, 6632200.0, 6632300.0, 6632400.0, 6632500.0,\n 6632600.0, 6632700.0, 6632800.0, 6632900.0],\n dtype='float64', name='y', length=1651))Attributes: (49)Conventions :CF-1.7title :Level 2 KaRIn High Rate Raster Data Productsource :Ka-band radar interferometerhistory :2023-09-13T20:22:58Z : Creationplatform :SWOTreference_document :JPL D-56416 - Revision B - October 24, 2022contact :alexander.t.corben[at]jpl.nasa.govcycle_number :498pass_number :13scene_number :130tile_numbers :[258 259 260 261 258 259 260 261]tile_names :013_258L, 013_259L, 013_260L, 013_261L, 013_258R, 013_259R, 013_260R, 013_261Rtile_polarizations :H, H, H, H, V, V, V, Vcoordinate_reference_system :Universal Transverse Mercatorresolution :100.0short_name :L2_HR_Rasterdescriptor_string :100m_UTM11V_N_x_x_xcrid :PIB0pge_name :PGE_L2_HR_RASTERpge_version :4.3.1time_granule_start :2023-04-22T05:13:10.260709Ztime_granule_end :2023-04-22T05:13:31.241801Ztime_coverage_start :2023-04-22T05:13:10.800929Ztime_coverage_end :2023-04-22T05:13:30.702796Zgeospatial_lon_min :-116.24217879897503geospatial_lon_max :-113.32307884940133geospatial_lat_min :58.3213119877029geospatial_lat_max :59.82415217044179left_first_longitude :-116.24217879897503left_first_latitude :58.75581670990796left_last_longitude :-115.40805937157408left_last_latitude :59.82415217044179right_first_longitude :-114.20750262227017right_first_latitude :58.3213119877029right_last_longitude :-113.32307884940133right_last_latitude :59.37343181849022xref_l2_hr_pixc_files :SWOT_L2_HR_PIXC_498_013_258L_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_259L_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_260L_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_261L_20230422T051330_20230422T051341_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_258R_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_259R_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_260R_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_261R_20230422T051330_20230422T051341_PIB0_01.ncxref_l2_hr_pixcvec_files :SWOT_L2_HR_PIXCVec_498_013_258L_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_259L_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_260L_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_261L_20230422T051330_20230422T051341_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_258R_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_259R_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_260R_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_261R_20230422T051330_20230422T051341_PIB0_01.ncxref_param_l2_hr_raster_file :SWOT_Param_L2_HR_Raster_20000101T000000_21000101T000000_20230321T100000_v301.rdfxref_reforbittrack_files :SWOT_RefOrbitTrackTileBoundary_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txt, SWOT_RefOrbitTrack125mPass1_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txt, SWOT_RefOrbitTrack125mPass2_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txtutm_zone_num :11mgrs_latitude_band :Vx_min :543800.0x_max :708900.0y_min :6467900.0y_max :6632900.0institution :JPLreferences :V1.0product_version :01\n\n\n\n\n\n\nds_raster.wse.hvplot.image(y='y', x='x')\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\nslc_results = earthaccess.search_data(short_name = 'SWOT_L1B_HR_SLC_1.1',\n temporal = ('2023-04-22 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 with wildcards\n\nGranules found: 164\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=slc_results)\n\n# get link for file \nslc_link = earthaccess.results.DataGranule.data_links(slc_results[0], access='direct')[0]\n\ns3_file_obj6 = fs_s3.open(slc_link, mode='rb')\n\n\n\n\nThe L1B_HR_SLC product file contains five NetCDF data group called the slc, xfactor, noise, tvp, and grdem groups. More info can be found in the product description document within the dataset table for each group.\n\nds_SLC = xr.open_dataset(s3_file_obj6, group = 'slc', engine='h5netcdf')\nds_SLC\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (num_lines: 17954, num_pixels: 4630, complex_depth: 2)\nDimensions without coordinates: num_lines, num_pixels, complex_depth\nData variables:\n slc_plus_y (num_lines, num_pixels, complex_depth) float32 ...\n slc_minus_y (num_lines, num_pixels, complex_depth) float32 ...\n slc_qual (num_lines) float32 ...\nAttributes:\n description: Single look complex images for plus_y and minus_y channelsxarray.DatasetDimensions:num_lines: 17954num_pixels: 4630complex_depth: 2Coordinates: (0)Data variables: (3)slc_plus_y(num_lines, num_pixels, complex_depth)float32...long_name :single look complex image for the plus_y channelunits :1valid_min :-1e+20valid_max :1e+20comment :SLC complex image for the plus_y channel (arbitrary scaling consistent with the X factor).[166254040 values with dtype=float32]slc_minus_y(num_lines, num_pixels, complex_depth)float32...long_name :single look complex image for the minus_y channelunits :1valid_min :-1e+20valid_max :1e+20comment :SLC complex image for the minus_y channel (arbitrary scaling consistent with the X factor).[166254040 values with dtype=float32]slc_qual(num_lines)float32...long_name :SLC quality flagstandard_name :status_flagflag_meanings :tvp_suspect sc_event_suspect small_karin_gap tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 32 64 128]valid_min :0valid_max :231comment :Flag indicating conditions that may affect the quality of the SLC data.[17954 values with dtype=float32]Indexes: (0)Attributes: (1)description :Single look complex images for plus_y and minus_y channels" + }, + { + "objectID": "Tutorials/SWOTHR_s3Access_real_data_v11.html#accessing-and-visualizing-swot-datasets", + "href": "Tutorials/SWOTHR_s3Access_real_data_v11.html#accessing-and-visualizing-swot-datasets", + "title": "SWOT Hydrology Dataset Exploration in the Cloud", + "section": "", + "text": "This tutorial can only be run in an AWS cloud instance running in us-west-2: NASA Earthdata Cloud data in S3 can be directly accessed via earthaccess python library; this access is limited to requests made within the US West (Oregon) (code: us-west-2) AWS region.\n\n\n\n\nAccess SWOT HR data prodcuts (archived in NASA Earthdata Cloud) within the AWS cloud, without downloading to local machine\nVisualize accessed data for a quick check\n\n\n\n\nRiver Vector Shapefile - SWOT_L2_HR_RIVERSP_1.1\nLake Vector Shapefile - SWOT_L2_HR_LAKESP_1.1\nWater Mask Pixel Cloud NetCDF - SWOT_L2_HR_PIXC_1.1\nWater Mask Pixel Cloud Vector Attribute NetCDF - SWOT_L2_HR_PIXCVec_1.1\nRaster NetCDF - SWOT_L2_HR_Raster_1.1\nSingle Look Complex Data product - SWOT_L1B_HR_SLC_1.1\n\nNotebook Author: Cassie Nickles, NASA PO.DAAC (Aug 2023) || Other Contributors: Zoe Walschots (PO.DAAC Summer Intern 2023), Catalina Taglialatela (NASA PO.DAAC), Luis Lopez (NASA NSIDC DAAC)\nLast updated: 4 Dec 2023\n\n\n\n\n\nimport glob\nimport os\nimport requests\nimport s3fs\nimport fiona\nimport netCDF4 as nc\nimport h5netcdf\nimport xarray as xr\nimport pandas as pd\nimport geopandas as gpd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport hvplot.xarray\nimport earthaccess\nfrom earthaccess import Auth, DataCollections, DataGranules, Store\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAn Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. If you don’t already have one, please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up. We use earthaccess to authenticate your login credentials below.\n\nauth = earthaccess.login()\n\nEARTHDATA_USERNAME and EARTHDATA_PASSWORD are not set in the current environment, try setting them or use a different strategy (netrc, interactive)\nYou're now authenticated with NASA Earthdata Login\nUsing token with expiration date: 01/07/2024\nUsing .netrc file for EDL\n\n\n\n\n\n\n\nThe s3 access link can be found using earthaccess data search. Since this collection consists of Reach and Node files, we need to extract only the granule for the Reach file. We do this by filtering for the ‘Reach’ title in the data link.\nAlternatively, Earthdata Search (see tutorial) can be used to search in a map graphic user interface.\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\n\n\n\n#Retrieves granule from the day we want, in this case by passing to `earthdata.search_data` function the data collection shortname, temporal bounds, and for restricted data one must specify the search count\nriver_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_RIVERSP_1.1', \n temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'),\n granule_name = '*Reach*_013_NA*') # here we filter by Reach files (not node), pass #13 and continent code=NA\n\nGranules found: 14\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=river_results)\n\n\n\n\nThe native format for this data is a .zip file, and we want the .shp file within the .zip file, so we will create a Fiona AWS session using the credentials from setting up the s3fs session above to access the shapefiles within the zip files. If we don’t do this, the alternative would be to download the data to the cloud environment (e.g. EC2 instance, user S3 bucket) and extract the .zip file there.\n\nfiona_session=fiona.session.AWSSession(\n aws_access_key_id=fs_s3.storage_options[\"key\"],\n aws_secret_access_key=fs_s3.storage_options[\"secret\"],\n aws_session_token=fs_s3.storage_options[\"token\"]\n )\n\n\n# Get the link for the first zip file\nriver_link = earthaccess.results.DataGranule.data_links(river_results[0], access='direct')[0]\n\n# We use the zip+ prefix so fiona knows that we are operating on a zip file\nriver_shp_url = f\"zip+{river_link}\"\n\nwith fiona.Env(session=fiona_session):\n SWOT_HR_shp1 = gpd.read_file(river_shp_url) \n\n#view the attribute table\nSWOT_HR_shp1 \n\n\n\n\n\n\n\n\nreach_id\ntime\ntime_tai\ntime_str\np_lat\np_lon\nriver_name\nwse\nwse_u\nwse_r_u\n...\np_wid_var\np_n_nodes\np_dist_out\np_length\np_maf\np_dam_id\np_n_ch_max\np_n_ch_mod\np_low_slp\ngeometry\n\n\n\n\n0\n77460000013\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.621824\n-124.244823\nEel River\n2.320100e+00\n9.653000e-02\n3.490000e-02\n...\n23702.805\n96\n19376.986\n19194.609276\n-1.000000e+12\n0\n4\n1\n0\nLINESTRING (-124.29069 40.66364, -124.29104 40...\n\n\n1\n77460000021\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.542406\n-124.156177\nEel River\n9.248800e+00\n9.071000e-02\n1.130000e-02\n...\n3435.524\n51\n29478.836\n10101.849934\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-124.16119 40.58421, -124.16097 40...\n\n\n2\n77460000031\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.494638\n-124.107178\nEel River\n1.970160e+01\n5.754600e-01\n5.683800e-01\n...\n1202.549\n50\n39553.707\n10074.871060\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-124.13864 40.50871, -124.13829 40...\n\n\n3\n77460000041\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.447111\n-124.021272\nEel River\n3.471650e+01\n1.486718e+01\n1.486691e+01\n...\n645.984\n81\n55843.425\n16289.718636\n-1.000000e+12\n0\n1\n1\n0\nLINESTRING (-124.09611 40.46269, -124.09575 40...\n\n\n4\n77460000051\n7.342535e+08\n7.342536e+08\n2023-04-08T07:18:42Z\n40.395990\n-123.930243\nEel River\n3.229870e+01\n9.148000e-02\n1.638000e-02\n...\n1532.658\n51\n66073.910\n10230.484650\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-123.95755 40.42295, -123.95719 40...\n\n\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n\n\n355\n78322900143\n-1.000000e+12\n-1.000000e+12\nno_data\n50.998910\n-119.011806\nno_data\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n116183.841\n15\n59585.535\n2935.007230\n-1.000000e+12\n0\n1\n1\n0\nLINESTRING (-119.03134 51.00406, -119.03105 51...\n\n\n356\n78322900153\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:51Z\n51.047442\n-119.042215\nno_data\n3.451806e+02\n1.114110e+00\n1.110470e+00\n...\n41059.043\n51\n30434.699\n10168.113068\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-119.03140 51.09147, -119.03165 51...\n\n\n357\n78322900173\n-1.000000e+12\n-1.000000e+12\nno_data\n50.916115\n-119.036919\nno_data\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n186564.361\n98\n39488.857\n19642.879384\n-1.000000e+12\n0\n4\n1\n0\nLINESTRING (-118.99201 50.99421, -118.99200 50...\n\n\n358\n78322900183\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:52Z\n51.060235\n-118.938606\nno_data\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n177029.325\n86\n56650.527\n17161.670624\n-1.000000e+12\n0\n4\n1\n0\nLINESTRING (-118.99200 50.99394, -118.99201 50...\n\n\n359\n78322900211\n-1.000000e+12\n-1.000000e+12\nno_data\n50.549433\n-119.062048\nShuswap River\n-1.000000e+12\n-1.000000e+12\n-1.000000e+12\n...\n122.690\n50\n103956.987\n10074.432813\n-1.000000e+12\n0\n2\n1\n0\nLINESTRING (-119.11242 50.54684, -119.11207 50...\n\n\n\n\n360 rows × 127 columns\n\n\n\n\n\n\n\n# Simple plot\nfig, ax = plt.subplots(figsize=(7,5))\nSWOT_HR_shp1.plot(ax=ax, color='black')\n\n<Axes: >\n\n\n\n\n\n\n# # Another way to plot geopandas dataframes is with `explore`, which also plots a basemap\n# SWOT_HR_shp1.explore()\n\n\n\n\nThe lake vector shapefiles can be accessed in the same way as the river shapefiles above.\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\n\n\n\nlake_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_LAKESP_1.1', \n temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'),\n granule_name = '*Obs*_013_NA*') # here we filter by files with 'Obs' in the name (This collection has three options: Obs, Unassigned, and Prior), pass #13 and continent code=NA\n\nGranules found: 14\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=lake_results)\n\n\n\n\nThe native format for this data is a .zip file, and we want the .shp file within the .zip file, so we will create a Fiona AWS session using the credentials from setting up the s3fs session above to access the shapefiles within the zip files. If we don’t do this, the alternative would be to download the data to the cloud environment (e.g. EC2 instance, user S3 bucket) and extract the .zip file there.\n\nfiona_session=fiona.session.AWSSession(\n aws_access_key_id=fs_s3.storage_options[\"key\"],\n aws_secret_access_key=fs_s3.storage_options[\"secret\"],\n aws_session_token=fs_s3.storage_options[\"token\"]\n )\n\n\n# Get the link for the first zip file\nlake_link = earthaccess.results.DataGranule.data_links(lake_results[0], access='direct')[0]\n\n# We use the zip+ prefix so fiona knows that we are operating on a zip file\nlake_shp_url = f\"zip+{lake_link}\"\n\nwith fiona.Env(session=fiona_session):\n SWOT_HR_shp2 = gpd.read_file(lake_shp_url) \n\n#view the attribute table\nSWOT_HR_shp2\n\n\n\n\n\n\n\n\nobs_id\nlake_id\noverlap\nn_overlap\nreach_id\ntime\ntime_tai\ntime_str\nwse\nwse_u\n...\nload_tidef\nload_tideg\npole_tide\ndry_trop_c\nwet_trop_c\niono_c\nxovr_cal_c\nlake_name\np_res_id\ngeometry\n\n\n\n\n0\n781229R000006\n7810001133\n85\n1\nno_data\n7.342536e+08\n7.342536e+08\n2023-04-08T07:19:21Z\n593.993\n0.011\n...\n-0.019138\n-0.018407\n-0.002311\n-2.164411\n-0.074947\n-0.003339\n-1.000000e+12\nAPPLEGATE RESERVOIR;APPLEGATE LAKE\n116\nMULTIPOLYGON (((-123.10728 42.03437, -123.1073...\n\n\n1\n782232R000018\n7820002572;7820002253\n86;80\n2\nno_data\n7.342536e+08\n7.342536e+08\n2023-04-08T07:19:51Z\n439.811\n0.167\n...\n-0.016663\n-0.016105\n-0.002303\n-2.199668\n-0.069287\n-0.003153\n-1.000000e+12\nHILLS CREEK RESERVOIR\n-99999999\nMULTIPOLYGON (((-122.45387 43.68914, -122.4539...\n\n\n2\n782243R000013\n7820039162\n10\n1\nno_data\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:40Z\n341.457\n0.003\n...\n-0.009852\n-0.009920\n-0.002187\n-2.211506\n-0.079803\n-0.002515\n-1.000000e+12\nWHITEMAN CREEK;OKANAGAN LAKE;OKANAGAN\n-99999999\nMULTIPOLYGON (((-119.72285 49.72639, -119.7227...\n\n\n3\n782243R015586\n7820039162\n17\n1\nno_data\n7.342537e+08\n7.342537e+08\n2023-04-08T07:21:48Z\n341.513\n0.028\n...\n-0.009454\n-0.009599\n-0.002172\n-2.209661\n-0.079193\n-0.002491\n-1.000000e+12\nWHITEMAN CREEK;OKANAGAN LAKE;OKANAGAN\n-99999999\nMULTIPOLYGON (((-119.49606 50.06182, -119.4961...\n\n\n4\n783245R000005\n7830263943\n32\n1\n78322700063;78322700091;78322800011;7832290001...\n7.342537e+08\n7.342537e+08\n2023-04-08T07:22:01Z\n344.832\n0.014\n...\n-0.009029\n-0.009206\n-0.002157\n-2.207273\n-0.082830\n-0.002465\n-1.000000e+12\nROSS CREEK;EAGLE RIVER;SHUSWAP;LITTLE RIVER;SC...\n-99999999\nMULTIPOLYGON (((-119.35814 50.94441, -119.3580...\n\n\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n\n\n831\n783246R009013\n7830249372;7830249352\n81;71\n2\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:13Z\n1837.232\n0.563\n...\n-0.008546\n-0.008791\n-0.002133\n-2.094712\n-0.066065\n-0.002440\n-1.000000e+12\nno_data\n-99999999\nMULTIPOLYGON (((-118.98292 51.59811, -118.9830...\n\n\n832\n783246R009931\n7830249332\n87\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:14Z\n1635.514\n0.325\n...\n-0.008539\n-0.008785\n-0.002132\n-2.136184\n-0.071612\n-0.002440\n-1.000000e+12\nno_data\n-99999999\nPOLYGON ((-118.98463 51.61215, -118.98453 51.6...\n\n\n833\n783246R010740\n7830243082\n82\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:14Z\n2094.295\n5.792\n...\n-0.008558\n-0.008815\n-0.002135\n-1.942940\n-0.048756\n-0.002438\n-1.000000e+12\nno_data\n-99999999\nMULTIPOLYGON (((-119.07615 51.67504, -119.0759...\n\n\n834\n783246R010910\n7830256902\n21\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:14Z\n1996.670\n0.303\n...\n-0.008524\n-0.008775\n-0.002132\n-1.863152\n-0.041920\n-0.002443\n-1.000000e+12\nno_data\n-99999999\nPOLYGON ((-118.97489 51.63692, -118.97478 51.6...\n\n\n835\n782246R012796\n7820071012\n75\n1\nno_data\n7.342537e+08\n7.342538e+08\n2023-04-08T07:22:15Z\n1962.504\n0.385\n...\n-0.008469\n-0.008730\n-0.002128\n-2.104326\n-0.068847\n-0.002438\n-1.000000e+12\nno_data\n-99999999\nPOLYGON ((-118.88701 51.66364, -118.88710 51.6...\n\n\n\n\n836 rows × 36 columns\n\n\n\n\n\n\n\nfig, ax = plt.subplots(figsize=(7,5))\nSWOT_HR_shp2.plot(ax=ax, color='black')\n\n<Axes: >\n\n\n\n\n\nAccessing the remaining files is different than the shp files above. We do not need to read the shapefiles within a zip file using something like Fiona session (or to download and unzip in the cloud) because the following SWOT HR collections are stored in netCDF files in the cloud. For the rest of the products, we will open via xarray, not geopandas.\n\n\n\n\n\n\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\npixc_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_PIXC_1.1',\n temporal = ('2023-04-22 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 \n\nGranules found: 164\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=pixc_results)\n\n# get link for file 100\npixc_link = earthaccess.results.DataGranule.data_links(pixc_results[100], access='direct')[0]\n\ns3_file_obj3 = fs_s3.open(pixc_link, mode='rb')\n\n\n\n\nThe pixel cloud netCDF files are formatted with three groups titled, “pixel cloud”, “tvp”, or “noise” (more detail here). In order to access the coordinates and variables within the file, a group must be specified when calling xarray open_dataset.\n\nds_PIXC = xr.open_dataset(s3_file_obj3, group = 'pixel_cloud', engine='h5netcdf')\nds_PIXC\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (points: 5180594, complex_depth: 2,\n num_pixc_lines: 3239)\nCoordinates:\n latitude (points) float64 ...\n longitude (points) float64 ...\nDimensions without coordinates: points, complex_depth, num_pixc_lines\nData variables: (12/57)\n azimuth_index (points) float64 ...\n range_index (points) float64 ...\n interferogram (points, complex_depth) float32 ...\n power_plus_y (points) float32 ...\n power_minus_y (points) float32 ...\n coherent_power (points) float32 ...\n ... ...\n interferogram_qual (points) float64 ...\n classification_qual (points) float64 ...\n geolocation_qual (points) float64 ...\n sig0_qual (points) float64 ...\n pixc_line_qual (num_pixc_lines) float64 ...\n pixc_line_to_tvp (num_pixc_lines) float32 ...\nAttributes:\n description: cloud of geolocated interferogram pixels\n interferogram_size_azimuth: 3239\n interferogram_size_range: 5526\n looks_to_efflooks: 1.5309342049156023\n num_azimuth_looks: 7.0\n azimuth_offset: 3xarray.DatasetDimensions:points: 5180594complex_depth: 2num_pixc_lines: 3239Coordinates: (2)latitude(points)float64...long_name :latitude (positive N, negative S)standard_name :latitudeunits :degrees_northquality_flag :geolocation_qualvalid_min :-80.0valid_max :80.0comment :Geodetic latitude [-80,80] (degrees north of equator) of the pixel.[5180594 values with dtype=float64]longitude(points)float64...long_name :longitude (degrees East)standard_name :longitudeunits :degrees_eastquality_flag :geolocation_qualvalid_min :-180.0valid_max :180.0comment :Longitude [-180,180) (east of the Greenwich meridian) of the pixel.[5180594 values with dtype=float64]Data variables: (57)azimuth_index(points)float64...long_name :rare interferogram azimuth indexunits :1valid_min :0valid_max :999999comment :Rare interferogram azimuth index (indexed from 0).[5180594 values with dtype=float64]range_index(points)float64...long_name :rare interferogram range indexunits :1valid_min :0valid_max :999999comment :Rare interferogram range index (indexed from 0).[5180594 values with dtype=float64]interferogram(points, complex_depth)float32...long_name :rare interferogramunits :1quality_flag :interferogram_qualvalid_min :-1e+20valid_max :1e+20comment :Complex unflattened rare interferogram.[10361188 values with dtype=float32]power_plus_y(points)float32...long_name :power for plus_y channelunits :1quality_flag :interferogram_qualvalid_min :0.0valid_max :1e+20comment :Power for the plus_y channel (arbitrary units that give sigma0 when noise subtracted and normalized by the X factor).[5180594 values with dtype=float32]power_minus_y(points)float32...long_name :power for minus_y channelunits :1quality_flag :interferogram_qualvalid_min :0.0valid_max :1e+20comment :Power for the minus_y channel (arbitrary units that give sigma0 when noise subtracted and normalized by the X factor).[5180594 values with dtype=float32]coherent_power(points)float32...long_name :coherent power combination of minus_y and plus_y channelsunits :1quality_flag :interferogram_qualvalid_min :0.0valid_max :1e+20comment :Power computed by combining the plus_y and minus_y channels coherently by co-aligning the phases (arbitrary units that give sigma0 when noise subtracted and normalized by the X factor).[5180594 values with dtype=float32]x_factor_plus_y(points)float32...long_name :X factor for plus_y channel powerunits :1valid_min :0.0valid_max :1e+20comment :X factor for the plus_y channel power in linear units (arbitrary units to normalize noise-subtracted power to sigma0).[5180594 values with dtype=float32]x_factor_minus_y(points)float32...long_name :X factor for minus_y channel powerunits :1valid_min :0.0valid_max :1e+20comment :X factor for the minus_y channel power in linear units (arbitrary units to normalize noise-subtracted power to sigma0).[5180594 values with dtype=float32]water_frac(points)float32...long_name :water fractionunits :1quality_flag :classification_qualvalid_min :-1000.0valid_max :10000.0comment :Noisy estimate of the fraction of the pixel that is water.[5180594 values with dtype=float32]water_frac_uncert(points)float32...long_name :water fraction uncertaintyunits :1valid_min :0.0valid_max :999999.0comment :Uncertainty estimate of the water fraction estimate (width of noisy water frac estimate distribution).[5180594 values with dtype=float32]classification(points)float32...long_name :classificationquality_flag :classification_qualflag_meanings :land land_near_water water_near_land open_water dark_water low_coh_water_near_land open_low_coh_waterflag_values :[1 2 3 4 5 6 7]valid_min :1valid_max :7comment :Flags indicating water detection results.[5180594 values with dtype=float32]false_detection_rate(points)float32...long_name :false detection rateunits :1quality_flag :classification_qualvalid_min :0.0valid_max :1.0comment :Probability of falsely detecting water when there is none.[5180594 values with dtype=float32]missed_detection_rate(points)float32...long_name :missed detection rateunits :1quality_flag :classification_qualvalid_min :0.0valid_max :1.0comment :Probability of falsely detecting no water when there is water.[5180594 values with dtype=float32]prior_water_prob(points)float32...long_name :prior water probabilityunits :1valid_min :0.0valid_max :1.0comment :Prior probability of water occurring.[5180594 values with dtype=float32]bright_land_flag(points)float32...long_name :bright land flagstandard_name :status_flagflag_meanings :not_bright_land bright_land bright_land_or_waterflag_values :[0 1 2]valid_min :0valid_max :2comment :Flag indicating areas that are not typically water but are expected to be bright (e.g., urban areas, ice). Flag value 2 indicates cases where prior data indicate land, but where prior_water_prob indicates possible water.[5180594 values with dtype=float32]layover_impact(points)float32...long_name :layover impactunits :mvalid_min :-999999.0valid_max :999999.0comment :Estimate of the height error caused by layover, which may not be reliable on a pixel by pixel basis, but may be useful to augment aggregated height uncertainties.[5180594 values with dtype=float32]eff_num_rare_looks(points)float32...long_name :effective number of rare looksunits :1valid_min :0.0valid_max :999999.0comment :Effective number of independent looks taken to form the rare interferogram.[5180594 values with dtype=float32]height(points)float32...long_name :height above reference ellipsoidunits :mquality_flag :geolocation_qualvalid_min :-1500.0valid_max :15000.0comment :Height of the pixel above the reference ellipsoid.[5180594 values with dtype=float32]cross_track(points)float32...long_name :approximate cross-track locationunits :mquality_flag :geolocation_qualvalid_min :-75000.0valid_max :75000.0comment :Approximate cross-track location of the pixel.[5180594 values with dtype=float32]pixel_area(points)float32...long_name :pixel areaunits :m^2quality_flag :geolocation_qualvalid_min :0.0valid_max :999999.0comment :Pixel area.[5180594 values with dtype=float32]inc(points)float32...long_name :incidence angleunits :degreesquality_flag :geolocation_qualvalid_min :0.0valid_max :999999.0comment :Incidence angle.[5180594 values with dtype=float32]phase_noise_std(points)float32...long_name :phase noise standard deviationunits :radiansvalid_min :-999999.0valid_max :999999.0comment :Estimate of the phase noise standard deviation.[5180594 values with dtype=float32]dlatitude_dphase(points)float32...long_name :sensitivity of latitude estimate to interferogram phaseunits :degrees/radianquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the latitude estimate to the interferogram phase.[5180594 values with dtype=float32]dlongitude_dphase(points)float32...long_name :sensitivity of longitude estimate to interferogram phaseunits :degrees/radianquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the longitude estimate to the interferogram phase.[5180594 values with dtype=float32]dheight_dphase(points)float32...long_name :sensitivity of height estimate to interferogram phaseunits :m/radianquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the interferogram phase.[5180594 values with dtype=float32]dheight_droll(points)float32...long_name :sensitivity of height estimate to spacecraft rollunits :m/degreesquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the spacecraft roll.[5180594 values with dtype=float32]dheight_dbaseline(points)float32...long_name :sensitivity of height estimate to interferometric baselineunits :m/mquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the interferometric baseline.[5180594 values with dtype=float32]dheight_drange(points)float32...long_name :sensitivity of height estimate to range (delay)units :m/mquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the height estimate to the range (delay).[5180594 values with dtype=float32]darea_dheight(points)float32...long_name :sensitivity of pixel area to reference heightunits :m^2/mquality_flag :geolocation_qualvalid_min :-999999.0valid_max :999999.0comment :Sensitivity of the pixel area to the reference height.[5180594 values with dtype=float32]illumination_time(points)datetime64[ns]...long_name :time of illumination of each pixel (UTC)standard_name :timetai_utc_difference :37.0leap_second :0000-00-00T00:00:00Zcomment :Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.[5180594 values with dtype=datetime64[ns]]illumination_time_tai(points)datetime64[ns]...long_name :time of illumination of each pixel (TAI)standard_name :timecomment :Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [illumination_time:tai_utc_difference].[5180594 values with dtype=datetime64[ns]]eff_num_medium_looks(points)float32...long_name :effective number of medium looksunits :1valid_min :0.0valid_max :999999.0comment :Effective number of independent looks taken in forming the medium interferogram (after adaptive averaging).[5180594 values with dtype=float32]sig0(points)float32...long_name :sigma0units :1quality_flag :sig0_qualvalid_min :-999999.0valid_max :999999.0comment :Normalized radar cross section (sigma0) in real, linear units (not decibels). The value may be negative due to noise subtraction.[5180594 values with dtype=float32]sig0_uncert(points)float32...long_name :sigma0 uncertaintyunits :1valid_min :-999999.0valid_max :999999.0comment :1-sigma uncertainty in the sig0 measurement. The value is given as an additive (not multiplicative) linear term (not a term in decibels).[5180594 values with dtype=float32]phase_unwrapping_region(points)float64...long_name :phase unwrapping region indexunits :1valid_min :-1valid_max :99999999comment :Phase unwrapping region index.[5180594 values with dtype=float64]ambiguity_cost1(points)float32...long_name :phase ambiguity minimum costunits :1valid_min :-999999.0valid_max :999999.0comment :Phase ambiguity minimum cost.[5180594 values with dtype=float32]ambiguity_cost2(points)float32...long_name :phase ambiguity 2nd minimum costunits :1valid_min :-999999.0valid_max :999999.0comment :Phase ambiguity 2nd minimum cost.[5180594 values with dtype=float32]instrument_range_cor(points)float32...long_name :instrument range correctionunits :mvalid_min :-999999.0valid_max :999999.0comment :Term that incorporates all calibration corrections applied to range before geolocation.[5180594 values with dtype=float32]instrument_phase_cor(points)float32...long_name :instrument phase correctionunits :radiansvalid_min :-999999.0valid_max :999999.0comment :Term that incorporates all calibration corrections applied to phase before geolocation.[5180594 values with dtype=float32]instrument_baseline_cor(points)float32...long_name :instrument baseline correctionunits :mvalid_min :-999999.0valid_max :999999.0comment :Term that incorporates all calibration corrections applied to baseline before geolocation.[5180594 values with dtype=float32]sig0_cor_atmos_model(points)float32...long_name :two-way atmospheric correction to sigma0 from modelsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFunits :1valid_min :1.0valid_max :10.0comment :Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0 and x_factor_plus_y and x_factor_minus_y.[5180594 values with dtype=float32]height_cor_xover(points)float32...long_name :height correction from KaRIn crossoversunits :mvalid_min :-10.0valid_max :10.0comment :Height correction from KaRIn crossover calibration. The correction is applied before geolocation but reported as an equivalent height correction.[5180594 values with dtype=float32]model_dry_tropo_cor(points)float32...long_name :dry troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFunits :mvalid_min :-3.0valid_max :-1.5comment :Equivalent vertical correction due to dry troposphere delay. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported pixel height results in the uncorrected pixel height.[5180594 values with dtype=float32]model_wet_tropo_cor(points)float32...long_name :wet troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFunits :mvalid_min :-1.0valid_max :0.0comment :Equivalent vertical correction due to wet troposphere delay. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported pixel height results in the uncorrected pixel height.[5180594 values with dtype=float32]iono_cor_gim_ka(points)float32...long_name :ionosphere vertical correctionsource :Global Ionosphere Mapsinstitution :JPLunits :mvalid_min :-0.5valid_max :0.0comment :Equivalent vertical correction due to ionosphere delay. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported pixel height results in the uncorrected pixel height.[5180594 values with dtype=float32]geoid(points)float32...long_name :geoid heightstandard_name :geoid_height_above_reference_ellipsoidsource :EGM2008 (Pavlis et al., 2012)units :mvalid_min :-150.0valid_max :150.0comment :Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency). This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]solid_earth_tide(points)float32...long_name :solid Earth tide heightsource :Cartwright and Taylor (1971) and Cartwright and Edden (1973)units :mvalid_min :-1.0valid_max :1.0comment :Solid-Earth (body) tide height. The zero-frequency permanent tide component is not included. This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]load_tide_fes(points)float32...long_name :geocentric load tide height (FES)source :FES2014b (Carrere et al., 2016)institution :LEGOS/CNESunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth's crust. This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]load_tide_got(points)float32...long_name :geocentric load tide height (GOT)source :GOT4.10c (Ray, 2013)institution :GSFCunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth's crust. This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]pole_tide(points)float32...long_name :geocentric pole tide heightsource :Wahr (1985) and Desai et al. (2015)units :mvalid_min :-0.2valid_max :0.2comment :Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth's crust). This value is reported for reference but is not applied to the reported height.[5180594 values with dtype=float32]ancillary_surface_classification_flag(points)float32...long_name :surface classificationstandard_name :status_flagsource :MODIS/GlobCoverinstitution :European Space Agencyflag_meanings :open_ocean land continental_water aquatic_vegetation continental_ice_snow floating_ice salted_basinflag_values :[0 1 2 3 4 5 6]valid_min :0valid_max :6comment :7-state surface type classification computed from a mask built with MODIS and GlobCover data.[5180594 values with dtype=float32]interferogram_qual(points)float64...standard_name :status_flagflag_meanings :rare_power_suspect rare_phase_suspect tvp_suspect sc_event_suspect small_karin_gap in_air_pixel_degraded specular_ringing_degraded rare_power_bad rare_phase_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 2048 4096 8192 16384 32768 262144\n 524288 134217728 268435456 536870912 1073741824 2147483648]valid_min :0valid_max :4161599488comment :Quality flag for the interferogram quantities in the pixel cloud data[5180594 values with dtype=float64]classification_qual(points)float64...standard_name :status_flagflag_meanings :no_coherent_gain power_close_to_noise_floor detected_water_but_no_prior_water detected_water_but_bright_land water_false_detection_rate_suspect coherent_power_suspect tvp_suspect sc_event_suspect small_karin_gap in_air_pixel_degraded specular_ringing_degraded coherent_power_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 8 16 2048\n 8192 16384 32768 262144 524288 134217728\n 536870912 1073741824 2147483648]valid_min :0valid_max :3893159967comment :Quality flag for the classification quantities in the pixel cloud data[5180594 values with dtype=float64]geolocation_qual(points)float64...standard_name :status_flagflag_meanings :layover_significant phase_noise_suspect phase_unwrapping_suspect model_dry_tropo_cor_suspect model_wet_tropo_cor_suspect iono_cor_gim_ka_suspect xovercal_suspect medium_phase_suspect tvp_suspect sc_event_suspect small_karin_gap specular_ringing_degraded model_dry_tropo_cor_missing model_wet_tropo_cor_missing iono_cor_gim_ka_missing xovercal_missing geolocation_is_from_refloc no_geolocation_bad medium_phase_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 8 16 32\n 64 4096 8192 16384 32768 524288\n 1048576 2097152 4194304 8388608 16777216 134217728\n 268435456 536870912 1073741824 2147483648]valid_min :0valid_max :4193841279comment :Quality flag for the geolocation quantities in the pixel cloud data[5180594 values with dtype=float64]sig0_qual(points)float64...standard_name :status_flagflag_meanings :sig0_uncert_suspect sig0_cor_atmos_suspect noise_power_suspect xfactor_suspect rare_power_suspect tvp_suspect sc_event_suspect small_karin_gap in_air_pixel_degraded specular_ringing_degraded sig0_cor_atmos_missing noise_power_bad xfactor_bad rare_power_bad tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 8 2048 8192\n 16384 32768 262144 524288 1048576 33554432\n 67108864 134217728 536870912 1073741824 2147483648]valid_min :0valid_max :3994871823comment :Quality flag for sig0[5180594 values with dtype=float64]pixc_line_qual(num_pixc_lines)float64...standard_name :status_flagflag_meanings :not_in_tile tvp_suspect sc_event_suspect small_karin_gap tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 8192 16384 32768 536870912 1073741824\n 2147483649]valid_min :0valid_max :3758153729comment :Quality flag for pixel cloud data per rare-posted interferogram line (similar to slc_qual in the L1B_HR_SLC product)[3239 values with dtype=float64]pixc_line_to_tvp(num_pixc_lines)float32...long_name :pixel cloud rare line to tvp indexunits :1valid_min :0.0valid_max :999999.0comment :Pixel cloud rare radar grid line index to tvp index mapping[3239 values with dtype=float32]Indexes: (0)Attributes: (6)description :cloud of geolocated interferogram pixelsinterferogram_size_azimuth :3239interferogram_size_range :5526looks_to_efflooks :1.5309342049156023num_azimuth_looks :7.0azimuth_offset :3\n\n\n\n\n\n\n# This could take a few minutes to plot\nplt.scatter(x=ds_PIXC.longitude, y=ds_PIXC.latitude, c=ds_PIXC.height)\nplt.colorbar().set_label('Height (m)')\n\n\n\n\n\n\n\n\n\n\n\npixcvec_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_PIXCVEC_1.1', \n temporal = ('2023-04-08 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 \n\nGranules found: 100\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=pixcvec_results)\n\n# get link for file 0\npixcvec_link = earthaccess.results.DataGranule.data_links(pixcvec_results[0], access='direct')[0]\n\ns3_file_obj4 = fs_s3.open(pixcvec_link, mode='rb')\n\n\n\n\n\nds_PIXCVEC = xr.open_dataset(s3_file_obj4, decode_cf=False, engine='h5netcdf')\nds_PIXCVEC\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (points: 11174047, nchar_reach_id: 11,\n nchar_node_id: 14, nchar_lake_id: 10,\n nchar_obs_id: 13)\nDimensions without coordinates: points, nchar_reach_id, nchar_node_id,\n nchar_lake_id, nchar_obs_id\nData variables:\n azimuth_index (points) int32 ...\n range_index (points) int32 ...\n latitude_vectorproc (points) float64 ...\n longitude_vectorproc (points) float64 ...\n height_vectorproc (points) float32 ...\n reach_id (points, nchar_reach_id) |S1 ...\n node_id (points, nchar_node_id) |S1 ...\n lake_id (points, nchar_lake_id) |S1 ...\n obs_id (points, nchar_obs_id) |S1 ...\n ice_clim_f (points) int8 ...\n ice_dyn_f (points) int8 ...\nAttributes: (12/45)\n Conventions: CF-1.7\n title: Level 2 KaRIn high rate pixel cloud vect...\n short_name: L2_HR_PIXCVec\n institution: JPL\n source: Level 1B KaRIn High Rate Single Look Com...\n history: 2023-09-07T04:43:11.652934Z: Creation\n ... ...\n xref_prior_river_db_file: \n xref_prior_lake_db_file: SWOT_LakeDatabase_Cal_013_20000101T00000...\n xref_reforbittrack_files: SWOT_RefOrbitTrackTileBoundary_Cal_20000...\n xref_param_l2_hr_laketile_file: SWOT_Param_L2_HR_LakeTile_20000101T00000...\n ellipsoid_semi_major_axis: 6378137.0\n ellipsoid_flattening: 0.0033528106647474805xarray.DatasetDimensions:points: 11174047nchar_reach_id: 11nchar_node_id: 14nchar_lake_id: 10nchar_obs_id: 13Coordinates: (0)Data variables: (11)azimuth_index(points)int32..._FillValue :2147483647long_name :rare interferogram azimuth indexunits :1valid_min :0valid_max :999999coordinates :longitude_vectorproc latitude_vectorproccomment :Rare interferogram azimuth index (indexed from 0).[11174047 values with dtype=int32]range_index(points)int32..._FillValue :2147483647long_name :rare interferogram range indexunits :1valid_min :0valid_max :999999coordinates :longitude_vectorproc latitude_vectorproccomment :Rare interferogram range index (indexed from 0).[11174047 values with dtype=int32]latitude_vectorproc(points)float64..._FillValue :9.969209968386869e+36long_name :height-constrained geolocation latitudestandard_name :latitudeunits :degrees_northvalid_min :-80.0valid_max :80.0comment :Height-constrained geodetic latitude of the pixel. Units are in degrees north of the equator.[11174047 values with dtype=float64]longitude_vectorproc(points)float64..._FillValue :9.969209968386869e+36long_name :height-constrained geolocation longitudestandard_name :longitudeunits :degrees_eastvalid_min :-180.0valid_max :180.0comment :Height-constrained geodetic longitude of the pixel. Positive=degrees east of the Greenwich meridian. Negative=degrees west of the Greenwich meridian.[11174047 values with dtype=float64]height_vectorproc(points)float32..._FillValue :9.96921e+36long_name :height above reference ellipsoidunits :mvalid_min :-1500.0valid_max :15000.0coordinates :longitude_vectorproc latitude_vectorproccomment :Height-constrained height of the pixel above the reference ellipsoid.[11174047 values with dtype=float32]reach_id(points, nchar_reach_id)|S1...long_name :identifier of the associated prior river reachcoordinates :longitude_vectorproc latitude_vectorproccomment :Unique reach identifier from the prior river database. The format of the identifier is CBBBBBRRRRT, where C=continent, B=basin, R=reach, T=type.[122914517 values with dtype=|S1]node_id(points, nchar_node_id)|S1...long_name :identifier of the associated prior river nodecoordinates :longitude_vectorproc latitude_vectorproccomment :Unique node identifier from the prior river database. The format of the identifier is CBBBBBRRRRNNNT, where C=continent, B=basin, R=reach, N=node, T=type of water body.[156436658 values with dtype=|S1]lake_id(points, nchar_lake_id)|S1...long_name :identifier of the associated prior lakecoordinates :longitude_vectorproc latitude_vectorproccomment :Identifier of the lake from the lake prior database) associated to the pixel. The format of the identifier is CBBNNNNNNT, where C=continent, B=basin, N=counter within the basin, T=type of water body.[111740470 values with dtype=|S1]obs_id(points, nchar_obs_id)|S1...long_name :identifier of the observed featurecoordinates :longitude_vectorproc latitude_vectorproccomment :Tile-specific identifier of the observed feature associated to the pixel. The format of the identifier is CBBTTTSNNNNNN, where C=continent, B=basin, T=tile number, S=swath side, N=lake counter within the PIXC tile.[145262611 values with dtype=|S1]ice_clim_f(points)int8..._FillValue :127long_name :climatological ice cover flagflag_meanings :no_ice_cover uncertain_ice_cover full_ice_coverflag_values :[0 1 2]institution :University of North Carolinacoordinates :longitude_vectorproc latitude_vectorproccomment :Climatological ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on external climatological information (not the SWOT measurement). Values of 0, 1, and 2 indicate that the surface is not ice covered, may or may not be partially or fully ice covered, and fully ice covered, respectively. A value of 127 indicates that this flag is not available.[11174047 values with dtype=int8]ice_dyn_f(points)int8..._FillValue :127long_name :dynamical ice cover flagflag_meanings :no_ice_cover partial_ice_cover full_ice_coverflag_values :[0 1 2]institution :University of North Carolinacoordinates :longitude_vectorproc latitude_vectorproccomment :Dynamic ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on analysis of external satellite optical data. Values of 0, 1, and 2 indicate that the surface is not ice covered, partially ice covered, and fully ice covered, respectively. A value of 255 indicates that this flag is not available.[11174047 values with dtype=int8]Indexes: (0)Attributes: (45)Conventions :CF-1.7title :Level 2 KaRIn high rate pixel cloud vector attribute productshort_name :L2_HR_PIXCVecinstitution :JPLsource :Level 1B KaRIn High Rate Single Look Complex Data Producthistory :2023-09-07T04:43:11.652934Z: Creationplatform :SWOTreferences :SWOT-DD-CDM-0565-CNES_SAS_Design_L2_HR_LakeSP - Revision A - 20220531reference_document :SWOT-TN-CDM-0677-CNES_Product_Description_L2_HR_PIXCVec - Revision A - 20220531product_version :V5.2.0crid :PIB0pge_name :PGE_L2_HR_LakeSPpge_version :V4.2.0contact :SWOT-contact@cnes.frcycle_number :498pass_number :13tile_number :223swath_side :Rtile_name :013_223Rcontinent_id :NAcontinent_code :7time_granule_start :2023-04-22T05:07:12.471771Ztime_granule_end :2023-04-22T05:07:23.493987Ztime_coverage_start :2023-04-22T05:07:13.018824Ztime_coverage_end :2023-04-22T05:07:22.948748Zgeospatial_lon_min :-124.56790968330785geospatial_lon_max :-123.63542466025933geospatial_lat_min :38.55706990508294geospatial_lat_max :39.315223768521015inner_first_longitude :-124.56790968330785inner_first_latitude :38.69222477165863inner_last_longitude :-124.38372359338888inner_last_latitude :39.315223768521015outer_first_longitude :-123.82494326341896outer_first_latitude :38.55706990508294outer_last_longitude :-123.63542466025933outer_last_latitude :39.17838265794308xref_l2_hr_pixc_file :SWOT_L2_HR_PIXC_498_013_223R_20230422T050712_20230422T050723_PIB0_01.ncxref_l2_hr_pixcvecriver_file :SWOT_L2_HR_PIXCVecRiver_498_013_223R_20230422T050712_20230422T050723_PIB0_01.ncxref_prior_river_db_file :xref_prior_lake_db_file :SWOT_LakeDatabase_Cal_013_20000101T000000_20991231T235959_20230614T000000_v102.sqlitexref_reforbittrack_files :SWOT_RefOrbitTrackTileBoundary_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txtxref_param_l2_hr_laketile_file :SWOT_Param_L2_HR_LakeTile_20000101T000000_20991231T235959_20230614T170000_v410.cfgellipsoid_semi_major_axis :6378137.0ellipsoid_flattening :0.0033528106647474805\n\n\n\n\n\n\npixcvec_htvals = ds_PIXCVEC.height_vectorproc.compute()\npixcvec_latvals = ds_PIXCVEC.latitude_vectorproc.compute()\npixcvec_lonvals = ds_PIXCVEC.longitude_vectorproc.compute()\n\n#Before plotting, we set all fill values to nan so that the graph shows up better spatially\npixcvec_htvals[pixcvec_htvals > 15000] = np.nan\npixcvec_latvals[pixcvec_latvals > 80] = np.nan\npixcvec_latvals[pixcvec_latvals < -80] = np.nan\npixcvec_lonvals[pixcvec_lonvals > 180] = np.nan\npixcvec_lonvals[pixcvec_lonvals < -180] = np.nan\n\n\nplt.scatter(x=pixcvec_lonvals, y=pixcvec_latvals, c=pixcvec_htvals)\nplt.colorbar().set_label('Height (m)')\n\n\n\n\n\n\n\n\n\n\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\n#Say we know the exact cycle, pass & scene. We can search for one data granule!\nraster_results = earthaccess.search_data(short_name = 'SWOT_L2_HR_Raster_1.1', \n temporal = ('2023-04-01 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*100m*_498_013_130F*') # here we filter by files with '100m' in the name (This collection has two resolution options: 100m & 250m), cycle=498, pass=013, scene = 130F \n\nGranules found: 1\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=raster_results)\n\n# get link for file \nraster_link = earthaccess.results.DataGranule.data_links(raster_results[0], access='direct')[0]\n\ns3_file_obj5 = fs_s3.open(raster_link, mode='rb')\n\n\n\n\n\nds_raster = xr.open_dataset(s3_file_obj5, engine='h5netcdf')\nds_raster\n\n/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/coding/times.py:254: RuntimeWarning: invalid value encountered in cast\n flat_num_dates_ns_int = (flat_num_dates * _NS_PER_TIME_DELTA[delta]).astype(\n/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/coding/times.py:254: RuntimeWarning: invalid value encountered in cast\n flat_num_dates_ns_int = (flat_num_dates * _NS_PER_TIME_DELTA[delta]).astype(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (x: 1652, y: 1651)\nCoordinates:\n * x (x) float64 5.438e+05 5.439e+05 ... 7.089e+05\n * y (y) float64 6.468e+06 6.468e+06 ... 6.633e+06\nData variables: (12/39)\n crs object ...\n longitude (y, x) float64 ...\n latitude (y, x) float64 ...\n wse (y, x) float32 ...\n wse_qual (y, x) float32 ...\n wse_qual_bitwise (y, x) float64 ...\n ... ...\n load_tide_fes (y, x) float32 ...\n load_tide_got (y, x) float32 ...\n pole_tide (y, x) float32 ...\n model_dry_tropo_cor (y, x) float32 ...\n model_wet_tropo_cor (y, x) float32 ...\n iono_cor_gim_ka (y, x) float32 ...\nAttributes: (12/49)\n Conventions: CF-1.7\n title: Level 2 KaRIn High Rate Raster Data Product\n source: Ka-band radar interferometer\n history: 2023-09-13T20:22:58Z : Creation\n platform: SWOT\n reference_document: JPL D-56416 - Revision B - October 24, 2022\n ... ...\n x_max: 708900.0\n y_min: 6467900.0\n y_max: 6632900.0\n institution: JPL\n references: V1.0\n product_version: 01xarray.DatasetDimensions:x: 1652y: 1651Coordinates: (2)x(x)float645.438e+05 5.439e+05 ... 7.089e+05long_name :x coordinate of projectionstandard_name :projection_x_coordinateunits :mvalid_min :-10000000.0valid_max :10000000.0comment :UTM easting coordinate of the pixel.array([543800., 543900., 544000., ..., 708700., 708800., 708900.])y(y)float646.468e+06 6.468e+06 ... 6.633e+06long_name :y coordinate of projectionstandard_name :projection_y_coordinateunits :mvalid_min :-20000000.0valid_max :20000000.0comment :UTM northing coordinate of the pixel.array([6467900., 6468000., 6468100., ..., 6632700., 6632800., 6632900.])Data variables: (39)crs()object...long_name :CRS Definitiongrid_mapping_name :transverse_mercatorprojected_crs_name :WGS 84 / UTM zone 11Ngeographic_crs_name :WGS 84reference_ellipsoid_name :WGS 84horizontal_datum_name :WGS_1984prime_meridian_name :Greenwichfalse_easting :500000.0false_northing :0.0longitude_of_central_meridian :-117.0longitude_of_prime_meridian :0.0latitude_of_projection_origin :0.0scale_factor_at_central_meridian :0.9996semi_major_axis :6378137.0inverse_flattening :298.257223563crs_wkt :PROJCS[\"WGS 84 / UTM zone 11N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32611\"]]spatial_ref :PROJCS[\"WGS 84 / UTM zone 11N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32611\"]]comment :UTM zone coordinate reference system.[1 values with dtype=object]longitude(y, x)float64...long_name :longitude (degrees East)standard_name :longitudegrid_mapping :crsunits :degrees_eastvalid_min :-180.0valid_max :180.0comment :Geodetic longitude [-180,180) (east of the Greenwich meridian) of the pixel.[2727452 values with dtype=float64]latitude(y, x)float64...long_name :latitude (positive N, negative S)standard_name :latitudegrid_mapping :crsunits :degrees_northvalid_min :-80.0valid_max :80.0comment :Geodetic latitude [-80,80] (degrees north of equator) of the pixel.[2727452 values with dtype=float64]wse(y, x)float32...long_name :water surface elevation above geoidgrid_mapping :crsunits :mquality_flag :wse_qualvalid_min :-1500.0valid_max :15000.0comment :Water surface elevation of the pixel above the geoid and after using models to subtract the effects of tides (solid_earth_tide, load_tide_fes, pole_tide).[2727452 values with dtype=float32]wse_qual(y, x)float32...long_name :summary quality indicator for the water surface elevationstandard_name :status_flaggrid_mapping :crsflag_meanings :good suspect degraded badflag_values :[0 1 2 3]valid_min :0valid_max :3comment :Summary quality indicator for the water surface elevation quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.[2727452 values with dtype=float32]wse_qual_bitwise(y, x)float64...long_name :bitwise quality indicator for the water surface elevationstandard_name :status_flaggrid_mapping :crsflag_meanings :classification_qual_suspect geolocation_qual_suspect large_uncert_suspect bright_land few_pixels far_range_suspect near_range_suspect classification_qual_degraded geolocation_qual_degraded value_bad no_pixels outside_scene_bounds inner_swath missing_karin_dataflag_masks :[ 2 4 32 128 4096 8192\n 16384 262144 524288 16777216 268435456 536870912\n 1073741824 2147483648]valid_min :0valid_max :4044124326comment :Bitwise quality indicator for the water surface elevation quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.[2727452 values with dtype=float64]wse_uncert(y, x)float32...long_name :uncertainty in the water surface elevationgrid_mapping :crsunits :mvalid_min :0.0valid_max :999999.0comment :1-sigma uncertainty in the water surface elevation.[2727452 values with dtype=float32]water_area(y, x)float32...long_name :water surface areagrid_mapping :crsunits :m^2quality_flag :water_area_qualvalid_min :-2000000.0valid_max :2000000000.0comment :Surface area of the water pixels.[2727452 values with dtype=float32]water_area_qual(y, x)float32...long_name :summary quality indicator for the water surface areastandard_name :status_flaggrid_mapping :crsflag_meanings :good suspect degraded badflag_values :[0 1 2 3]valid_min :0valid_max :3comment :Summary quality indicator for the water surface area and water fraction quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.[2727452 values with dtype=float32]water_area_qual_bitwise(y, x)float64...long_name :bitwise quality indicator for the water surface areastandard_name :status_flaggrid_mapping :crsflag_meanings :classification_qual_suspect geolocation_qual_suspect water_fraction_suspect large_uncert_suspect bright_land few_pixels far_range_suspect near_range_suspect classification_qual_degraded geolocation_qual_degraded value_bad no_pixels outside_scene_bounds inner_swath missing_karin_dataflag_masks :[ 2 4 8 32 128 4096\n 8192 16384 262144 524288 16777216 268435456\n 536870912 1073741824 2147483648]valid_min :0valid_max :4044124334comment :Bitwise quality indicator for the water surface area and water fraction quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.[2727452 values with dtype=float64]water_area_uncert(y, x)float32...long_name :uncertainty in the water surface areagrid_mapping :crsunits :m^2valid_min :0.0valid_max :2000000000.0comment :1-sigma uncertainty in the water surface area.[2727452 values with dtype=float32]water_frac(y, x)float32...long_name :water fractiongrid_mapping :crsunits :1quality_flag :water_area_qualvalid_min :-1000.0valid_max :10000.0comment :Fraction of the pixel that is water.[2727452 values with dtype=float32]water_frac_uncert(y, x)float32...long_name :uncertainty in the water fractiongrid_mapping :crsunits :1valid_min :0.0valid_max :999999.0comment :1-sigma uncertainty in the water fraction.[2727452 values with dtype=float32]sig0(y, x)float32...long_name :sigma0grid_mapping :crsunits :1quality_flag :sig0_qualvalid_min :-1000.0valid_max :10000000.0comment :Normalized radar cross section (sigma0) in real, linear units (not decibels). The value may be negative due to noise subtraction.[2727452 values with dtype=float32]sig0_qual(y, x)float32...long_name :summary quality indicator for the sigma0standard_name :status_flaggrid_mapping :crsflag_meanings :good suspect degraded badflag_values :[0 1 2 3]valid_min :0valid_max :3comment :Summary quality indicator for the sigma0 quantities. A value of 0 indicates a nominal measurement, 1 indicates a suspect measurement, 2 indicates a degraded measurement, and 3 indicates a bad measurement.[2727452 values with dtype=float32]sig0_qual_bitwise(y, x)float64...long_name :bitwise quality indicator for the sigma0standard_name :status_flaggrid_mapping :crsflag_meanings :sig0_qual_suspect classification_qual_suspect geolocation_qual_suspect large_uncert_suspect bright_land few_pixels far_range_suspect near_range_suspect sig0_qual_degraded classification_qual_degraded geolocation_qual_degraded value_bad no_pixels outside_scene_bounds inner_swath missing_karin_dataflag_masks :[ 1 2 4 32 128 4096\n 8192 16384 131072 262144 524288 16777216\n 268435456 536870912 1073741824 2147483648]valid_min :0valid_max :4044255399comment :Bitwise quality indicator for the sigma0 quantities. If this word is interpreted as an unsigned integer, a value of 0 indicates good data, positive values less than 32768 represent suspect data, values greater than or equal to 32768 but less than 8388608 represent degraded data, and values greater than or equal to 8388608 represent bad data.[2727452 values with dtype=float64]sig0_uncert(y, x)float32...long_name :uncertainty in sigma0grid_mapping :crsunits :1valid_min :0.0valid_max :1000.0comment :1-sigma uncertainty in sigma0. The value is provided in linear units. This value is a one-sigma additive (not multiplicative) uncertainty term, which can be added to or subtracted from sigma0.[2727452 values with dtype=float32]inc(y, x)float32...long_name :incidence anglegrid_mapping :crsunits :degreesvalid_min :0.0valid_max :90.0comment :Incidence angle.[2727452 values with dtype=float32]cross_track(y, x)float32...long_name :approximate cross-track locationgrid_mapping :crsunits :mvalid_min :-75000.0valid_max :75000.0comment :Approximate cross-track location of the pixel.[2727452 values with dtype=float32]illumination_time(y, x)datetime64[ns]...long_name :time of illumination of each pixel (UTC)standard_name :timetai_utc_difference :37.0leap_second :0000-00-00T00:00:00Zcomment :Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.[2727452 values with dtype=datetime64[ns]]illumination_time_tai(y, x)datetime64[ns]...long_name :time of illumination of each pixel (TAI)standard_name :timecomment :Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [illumination_time:tai_utc_difference].[2727452 values with dtype=datetime64[ns]]n_wse_pix(y, x)float64...long_name :number of water surface elevation pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in water surface elevation aggregation.[2727452 values with dtype=float64]n_water_area_pix(y, x)float64...long_name :number of water surface area pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in water surface area and water fraction aggregation.[2727452 values with dtype=float64]n_sig0_pix(y, x)float64...long_name :number of sigma0 pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in sigma0 aggregation.[2727452 values with dtype=float64]n_other_pix(y, x)float64...long_name :number of other pixelsgrid_mapping :crsunits :lvalid_min :0valid_max :999999comment :Number of pixel cloud samples used in aggregation of quantities not related to water surface elevation, water surface area, water fraction or sigma0.[2727452 values with dtype=float64]dark_frac(y, x)float32...long_name :fractional area of dark watergrid_mapping :crsunits :lvalid_min :-1000.0valid_max :10000.0comment :Fraction of pixel water surface area covered by dark water.[2727452 values with dtype=float32]ice_clim_flag(y, x)float32...long_name :climatological ice cover flagstandard_name :status_flagsource :UNCgrid_mapping :crsflag_meanings :no_ice_cover uncertain_ice_cover full_ice_coverflag_values :[0 1 2]valid_min :0valid_max :2comment :Climatological ice cover flag indicating whether the pixel is ice-covered on the day of the observation based on external climatological information (not the SWOT measurement). Values of 0, 1, and 2 indicate that the pixel is likely not ice covered, may or may not be partially or fully ice covered, and likely fully ice covered, respectively.[2727452 values with dtype=float32]ice_dyn_flag(y, x)float32...long_name :dynamic ice cover flagstandard_name :status_flagsource :UNCgrid_mapping :crsflag_meanings :no_ice_cover partial_ice_cover full_ice_coverflag_values :[0 1 2]valid_min :0valid_max :2comment :Dynamic ice cover flag indicating whether the surface is ice-covered on the day of the observation based on analysis of external satellite optical data. Values of 0, 1, and 2 indicate that the pixel is not ice covered, partially ice covered, and fully ice covered, respectively.[2727452 values with dtype=float32]layover_impact(y, x)float32...long_name :layover impactgrid_mapping :crsunits :mvalid_min :-999999.0valid_max :999999.0comment :Estimate of the water surface elevation error caused by layover.[2727452 values with dtype=float32]sig0_cor_atmos_model(y, x)float32...long_name :two-way atmospheric correction to sigma0 from modelsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFgrid_mapping :crsunits :1valid_min :1.0valid_max :10.0comment :Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0.[2727452 values with dtype=float32]height_cor_xover(y, x)float32...long_name :height correction from KaRIn crossoversgrid_mapping :crsunits :mvalid_min :-10.0valid_max :10.0comment :Height correction from KaRIn crossover calibration. The correction is applied before geolocation but reported as an equivalent height correction.[2727452 values with dtype=float32]geoid(y, x)float32...long_name :geoid heightstandard_name :geoid_height_above_reference_ellipsoidsource :EGM2008 (Pavlis et al., 2012)grid_mapping :crsunits :mvalid_min :-150.0valid_max :150.0comment :Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency).[2727452 values with dtype=float32]solid_earth_tide(y, x)float32...long_name :solid Earth tide heightsource :Cartwright and Taylor (1971) and Cartwright and Edden (1973)grid_mapping :crsunits :mvalid_min :-1.0valid_max :1.0comment :Solid-Earth (body) tide height. The zero-frequency permanent tide component is not included.[2727452 values with dtype=float32]load_tide_fes(y, x)float32...long_name :geocentric load tide height (FES)source :FES2014b (Carrere et al., 2016)institution :LEGOS/CNESgrid_mapping :crsunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust.[2727452 values with dtype=float32]load_tide_got(y, x)float32...long_name :geocentric load tide height (GOT)source :GOT4.10c (Ray, 2013)institution :GSFCgrid_mapping :crsunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric load tide height. The effect of the ocean tide loading of the Earth’s crust. This value is reported for reference but is not applied to the reported height.[2727452 values with dtype=float32]pole_tide(y, x)float32...long_name :geocentric pole tide heightsource :Wahr (1985) and Desai et al. (2015)grid_mapping :crsunits :mvalid_min :-0.2valid_max :0.2comment :Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth’s crust).[2727452 values with dtype=float32]model_dry_tropo_cor(y, x)float32...long_name :dry troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFgrid_mapping :crsunits :mvalid_min :-3.0valid_max :-1.5comment :Equivalent vertical correction due to dry troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.[2727452 values with dtype=float32]model_wet_tropo_cor(y, x)float32...long_name :wet troposphere vertical correctionsource :European Centre for Medium-Range Weather Forecastsinstitution :ECMWFgrid_mapping :crsunits :mvalid_min :-1.0valid_max :0.0comment :Equivalent vertical correction due to wet troposphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.[2727452 values with dtype=float32]iono_cor_gim_ka(y, x)float32...long_name :ionosphere vertical correctionsource :Global Ionosphere Mapsinstitution :JPLgrid_mapping :crsunits :mvalid_min :-0.5valid_max :0.0comment :Equivalent vertical correction due to ionosphere delay. The reported water surface elevation, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported water surface elevation results in the uncorrected pixel height.[2727452 values with dtype=float32]Indexes: (2)xPandasIndexPandasIndex(Float64Index([543800.0, 543900.0, 544000.0, 544100.0, 544200.0, 544300.0,\n 544400.0, 544500.0, 544600.0, 544700.0,\n ...\n 708000.0, 708100.0, 708200.0, 708300.0, 708400.0, 708500.0,\n 708600.0, 708700.0, 708800.0, 708900.0],\n dtype='float64', name='x', length=1652))yPandasIndexPandasIndex(Float64Index([6467900.0, 6468000.0, 6468100.0, 6468200.0, 6468300.0, 6468400.0,\n 6468500.0, 6468600.0, 6468700.0, 6468800.0,\n ...\n 6632000.0, 6632100.0, 6632200.0, 6632300.0, 6632400.0, 6632500.0,\n 6632600.0, 6632700.0, 6632800.0, 6632900.0],\n dtype='float64', name='y', length=1651))Attributes: (49)Conventions :CF-1.7title :Level 2 KaRIn High Rate Raster Data Productsource :Ka-band radar interferometerhistory :2023-09-13T20:22:58Z : Creationplatform :SWOTreference_document :JPL D-56416 - Revision B - October 24, 2022contact :alexander.t.corben[at]jpl.nasa.govcycle_number :498pass_number :13scene_number :130tile_numbers :[258 259 260 261 258 259 260 261]tile_names :013_258L, 013_259L, 013_260L, 013_261L, 013_258R, 013_259R, 013_260R, 013_261Rtile_polarizations :H, H, H, H, V, V, V, Vcoordinate_reference_system :Universal Transverse Mercatorresolution :100.0short_name :L2_HR_Rasterdescriptor_string :100m_UTM11V_N_x_x_xcrid :PIB0pge_name :PGE_L2_HR_RASTERpge_version :4.3.1time_granule_start :2023-04-22T05:13:10.260709Ztime_granule_end :2023-04-22T05:13:31.241801Ztime_coverage_start :2023-04-22T05:13:10.800929Ztime_coverage_end :2023-04-22T05:13:30.702796Zgeospatial_lon_min :-116.24217879897503geospatial_lon_max :-113.32307884940133geospatial_lat_min :58.3213119877029geospatial_lat_max :59.82415217044179left_first_longitude :-116.24217879897503left_first_latitude :58.75581670990796left_last_longitude :-115.40805937157408left_last_latitude :59.82415217044179right_first_longitude :-114.20750262227017right_first_latitude :58.3213119877029right_last_longitude :-113.32307884940133right_last_latitude :59.37343181849022xref_l2_hr_pixc_files :SWOT_L2_HR_PIXC_498_013_258L_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_259L_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_260L_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_261L_20230422T051330_20230422T051341_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_258R_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_259R_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_260R_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXC_498_013_261R_20230422T051330_20230422T051341_PIB0_01.ncxref_l2_hr_pixcvec_files :SWOT_L2_HR_PIXCVec_498_013_258L_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_259L_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_260L_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_261L_20230422T051330_20230422T051341_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_258R_20230422T051300_20230422T051311_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_259R_20230422T051310_20230422T051321_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_260R_20230422T051320_20230422T051331_PIB0_01.nc, SWOT_L2_HR_PIXCVec_498_013_261R_20230422T051330_20230422T051341_PIB0_01.ncxref_param_l2_hr_raster_file :SWOT_Param_L2_HR_Raster_20000101T000000_21000101T000000_20230321T100000_v301.rdfxref_reforbittrack_files :SWOT_RefOrbitTrackTileBoundary_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txt, SWOT_RefOrbitTrack125mPass1_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txt, SWOT_RefOrbitTrack125mPass2_Cal_20000101T000000_21000101T000000_20200617T193054_v101.txtutm_zone_num :11mgrs_latitude_band :Vx_min :543800.0x_max :708900.0y_min :6467900.0y_max :6632900.0institution :JPLreferences :V1.0product_version :01\n\n\n\n\n\n\nds_raster.wse.hvplot.image(y='y', x='x')\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\nFor additional tips on spatial searching of SWOT HR L2 data, see also PO.DAAC Cookbook - SWOT Chapter tips section.\n\nslc_results = earthaccess.search_data(short_name = 'SWOT_L1B_HR_SLC_1.1',\n temporal = ('2023-04-22 00:00:00', '2023-04-22 23:59:59'), \n granule_name = '*_498_013_*') # here we filter by cycle=498 and pass=013 with wildcards\n\nGranules found: 164\n\n\n\n\n\ns3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the data access information.\n\nfs_s3 = earthaccess.get_s3fs_session(results=slc_results)\n\n# get link for file \nslc_link = earthaccess.results.DataGranule.data_links(slc_results[0], access='direct')[0]\n\ns3_file_obj6 = fs_s3.open(slc_link, mode='rb')\n\n\n\n\nThe L1B_HR_SLC product file contains five NetCDF data group called the slc, xfactor, noise, tvp, and grdem groups. More info can be found in the product description document within the dataset table for each group.\n\nds_SLC = xr.open_dataset(s3_file_obj6, group = 'slc', engine='h5netcdf')\nds_SLC\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (num_lines: 17954, num_pixels: 4630, complex_depth: 2)\nDimensions without coordinates: num_lines, num_pixels, complex_depth\nData variables:\n slc_plus_y (num_lines, num_pixels, complex_depth) float32 ...\n slc_minus_y (num_lines, num_pixels, complex_depth) float32 ...\n slc_qual (num_lines) float32 ...\nAttributes:\n description: Single look complex images for plus_y and minus_y channelsxarray.DatasetDimensions:num_lines: 17954num_pixels: 4630complex_depth: 2Coordinates: (0)Data variables: (3)slc_plus_y(num_lines, num_pixels, complex_depth)float32...long_name :single look complex image for the plus_y channelunits :1valid_min :-1e+20valid_max :1e+20comment :SLC complex image for the plus_y channel (arbitrary scaling consistent with the X factor).[166254040 values with dtype=float32]slc_minus_y(num_lines, num_pixels, complex_depth)float32...long_name :single look complex image for the minus_y channelunits :1valid_min :-1e+20valid_max :1e+20comment :SLC complex image for the minus_y channel (arbitrary scaling consistent with the X factor).[166254040 values with dtype=float32]slc_qual(num_lines)float32...long_name :SLC quality flagstandard_name :status_flagflag_meanings :tvp_suspect sc_event_suspect small_karin_gap tvp_bad sc_event_bad large_karin_gapflag_masks :[ 1 2 4 32 64 128]valid_min :0valid_max :231comment :Flag indicating conditions that may affect the quality of the SLC data.[17954 values with dtype=float32]Indexes: (0)Attributes: (1)description :Single look complex images for plus_y and minus_y channels" } ] \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 295639e..8b9ce5d 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,18 +2,22 @@ https://podaac.github.io/2024-SWOT-Hydro-Workshop/index.html - 2024-01-05T19:09:37.928Z + 2024-01-16T23:57:03.421Z - https://podaac.github.io/2024-SWOT-Hydro-Workshop/prerequisites.html - 2024-01-05T19:09:37.288Z + https://podaac.github.io/2024-SWOT-Hydro-Workshop/schedule.html + 2024-01-16T23:56:59.597Z https://podaac.github.io/2024-SWOT-Hydro-Workshop/slides.html - 2024-01-05T19:09:36.424Z + 2024-01-16T23:56:58.365Z - https://podaac.github.io/2024-SWOT-Hydro-Workshop/schedule.html - 2024-01-05T19:09:37.604Z + https://podaac.github.io/2024-SWOT-Hydro-Workshop/prerequisites.html + 2024-01-16T23:56:59.273Z + + + https://podaac.github.io/2024-SWOT-Hydro-Workshop/Tutorials/SWOTHR_s3Access_real_data_v11.html + 2024-01-16T23:57:03.049Z diff --git a/slides.html b/slides.html index 9b3ab6c..ff0aa93 100644 --- a/slides.html +++ b/slides.html @@ -30,6 +30,7 @@ + @@ -107,6 +108,10 @@
  • +
  • + + Intro to HR Datasets +
  • @@ -581,6 +589,9 @@

    + + Intro to HR Datasets +