code: def next_channel_from_routes(
          available_routes: List[RouteState],
          channelidentifiers_to_channels: ChannelMap,
          transfer_amount: PaymentAmount,
  ) -> Optional[NettingChannelState]:
      
      for route in available_routes:
          channel_identifier = route.channel_identifier
          channel_state = channelidentifiers_to_channels.get(channel_identifier)
  
          if not channel_state:
              continue
  
          if channel.get_status(channel_state) != CHANNEL_STATE_OPENED:
              continue
  
          pending_transfers = channel.get_number_of_pending_transfers(channel_state.our_state)
          if pending_transfers >= MAXIMUM_PENDING_TRANSFERS:
              continue
  
          distributable = channel.get_distributable(
              channel_state.our_state,
              channel_state.partner_state,
          )
          if transfer_amount > distributable:
              continue
  
          if channel.is_valid_amount(channel_state.our_state, transfer_amount):
              return channel_state
  
      return None
docs: Returns the first channel that can be used to start the transfer.
      The routing service can race with local changes, so the recommended routes
      must be validated.