# (pair signed_weather_data actual_level)
parameter (pair (signature @sig) (nat @nat));
# (pair (under_key over_key) (pair weather_service_key (pair rain_level days_in_future)))
storage (pair (pair (contract @lt unit unit)
                    (contract @geq unit unit))
              (pair nat key));
return unit;
code { DUP; DUP;
       CAR; MAP_CDR{H};
       SWAP; CDDDR; CHECK_SIGNATURE; # Check if the data has been correctly signed
       ASSERT; # If signature is not correct, end the execution
       DUP; DUP; DUP; DIIIP{CDR}; # Place storage type on bottom of stack
       DIIP{CDAR};                # Place contracts below numbers
       DIP{CADR};                # Get actual rain
       CDDAR;                     # Get rain threshold
       CMPLT; IF {CAR @winner} {CDR @winner};     # Select contract to receive tokens
       BALANCE; UNIT; TRANSFER_TOKENS; # Setup and execute transfer
       PAIR };                          # Save storage