text:
package spectrum

import (
	"bytes"
	"code.google.com/p/google-api-go-client/googleapi"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"strconv"
	"strings"
)

// Always reference these packages, just in case the auto-generated code
// below doesn't.
var _ = bytes.NewBuffer
var _ = strconv.Itoa
var _ = fmt.Sprintf
var _ = json.NewDecoder
var _ = io.Copy
var _ = url.Parse
var _ = googleapi.Version
var _ = errors.New
var _ = strings.Replace

const apiId = "spectrum:v1explorer"
const apiName = "spectrum"
const apiVersion = "v1explorer"
const basePath = "https://www.googleapis.com/spectrum/v1explorer/paws/"

func New(client *http.Client) (*Service, error) {
	if client == nil {
		return nil, errors.New("client is nil")
	}
	s := &Service{client: client, BasePath: basePath}
	s.Paws = NewPawsService(s)
	return s, nil
}

type Service struct {
	client   *http.Client
	BasePath string // API endpoint base URL

	Paws *PawsService
}

func NewPawsService(s *Service) *PawsService {
	rs := &PawsService{s: s}
	return rs
}

type PawsService struct {
	s *Service
}

type AntennaCharacteristics struct {
	// Height: The antenna height in meters. Whether the antenna height is
	// required depends on the device type and the regulatory domain. Note
	// that the height may be negative.
	Height float64 `json:"height,omitempty"`

	// HeightType: If the height is required, then the height type (AGL for
	// above ground level or AMSL for above mean sea level) is also
	// required. The default is AGL.
	HeightType string `json:"heightType,omitempty"`

	// HeightUncertainty: The height uncertainty in meters. Whether this is
	// required depends on the regulatory domain.
	HeightUncertainty float64 `json:"heightUncertainty,omitempty"`
}

type DatabaseSpec struct {
	// Name: The display name for a database.
	Name string `json:"name,omitempty"`

	// Uri: The corresponding URI of the database.
	Uri string `json:"uri,omitempty"`
}

type DbUpdateSpec struct {
	// Databases: A required list of one or more databases. A device should
	// update its preconfigured list of databases to replace (only) the
	// database that provided the response with the specified entries.
	Databases []*DatabaseSpec `json:"databases,omitempty"`
}

type DeviceCapabilities struct {
	// FrequencyRanges: An optional list of frequency ranges supported by
	// the device. Each element must contain start and stop frequencies in
	// which the device can operate. Channel identifiers are optional. When
	// specified, the database should not return available spectrum that
	// falls outside these ranges or channel IDs.
	FrequencyRanges []*FrequencyRange `json:"frequencyRanges,omitempty"`
}

type DeviceDescriptor struct {
	// EtsiEnDeviceCategory: Specifies the ETSI white space device category.
	// Valid values are the strings master and slave. This field is
	// case-insensitive. Consult the ETSI documentation for details about
	// the device types.
	EtsiEnDeviceCategory string `json:"etsiEnDeviceCategory,omitempty"`

	// EtsiEnDeviceEmissionsClass: Specifies the ETSI white space device
	// emissions class. The values are represented by numeric strings, such
	// as 1, 2, etc. Consult the ETSI documentation for details about the
	// device types.
	EtsiEnDeviceEmissionsClass string `json:"etsiEnDeviceEmissionsClass,omitempty"`

	// EtsiEnDeviceType: Specifies the ETSI white space device type. Valid
	// values are single-letter strings, such as A, B, etc. Consult the ETSI
	// documentation for details about the device types.
	EtsiEnDeviceType string `json:"etsiEnDeviceType,omitempty"`

	// EtsiEnTechnologyId: Specifies the ETSI white space device technology
	// identifier. The string value must not exceed 64 characters in length.
	// Consult the ETSI documentation for details about the device types.
	EtsiEnTechnologyId string `json:"etsiEnTechnologyId,omitempty"`

	// FccId: Specifies the device's FCC certification identifier. The value
	// is an identifier string whose length should not exceed 32 characters.
	// Note that, in practice, a valid FCC ID may be limited to 19
	// characters.
	FccId string `json:"fccId,omitempty"`

	// FccTvbdDeviceType: Specifies the TV Band White Space device type, as
	// defined by the FCC. Valid values are FIXED, MODE_1, MODE_2.
	FccTvbdDeviceType string `json:"fccTvbdDeviceType,omitempty"`

	// ManufacturerId: The manufacturer's ID may be required by the
	// regulatory domain. This should represent the name of the device
	// manufacturer, should be consistent across all devices from the same
	// manufacturer, and should be distinct from that of other
	// manufacturers. The string value must not exceed 64 characters in
	// length.
	ManufacturerId string `json:"manufacturerId,omitempty"`

	// ModelId: The device's model ID may be required by the regulatory
	// domain. The string value must not exceed 64 characters in length.
	ModelId string `json:"modelId,omitempty"`

	// RulesetIds: The list of identifiers for rulesets supported by the
	// device. A database may require that the device provide this list
	// before servicing the device requests. If the database does not
	// support any of the rulesets specified in the list, the database may
	// refuse to service the device requests. If present, the list must
	// contain at least one entry.
	//
	// For information about the valid
	// requests, see section 9.2 of the PAWS specification. Currently,
	// FccTvBandWhiteSpace-2010 is the only supported ruleset.
	RulesetIds []string `json:"rulesetIds,omitempty"`

	// SerialNumber: The manufacturer's device serial number; required by
	// the applicable regulatory domain. The length of the value must not
	// exceed 64 characters.
	SerialNumber string `json:"serialNumber,omitempty"`
}

type DeviceOwner struct {
	// Operator: The vCard contact information for the device operator is
	// optional, but may be required by specific regulatory domains.
	Operator *Vcard `json:"operator,omitempty"`

	// Owner: The vCard contact information for the individual or business
	// that owns the device is required.
	Owner *Vcard `json:"owner,omitempty"`
}

type DeviceValidity struct {
	// DeviceDesc: The descriptor of the device for which the validity check
	// was requested. It will always be present.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// IsValid: The validity status: true if the device is valid for
	// operation, false otherwise. It will always be present.
	IsValid bool `json:"isValid,omitempty"`

	// Reason: If the device identifier is not valid, the database may
	// include a reason. The reason may be in any language. The length of
	// the value should not exceed 128 characters.
	Reason string `json:"reason,omitempty"`
}

type EventTime struct {
	// StartTime: The inclusive start of the event. It will be present.
	StartTime string `json:"startTime,omitempty"`

	// StopTime: The exclusive end of the event. It will be present.
	StopTime string `json:"stopTime,omitempty"`
}

type FrequencyRange struct {
	// ChannelId: The database may include a channel identifier, when
	// applicable. When it is included, the device should treat it as
	// informative. The length of the identifier should not exceed 16
	// characters.
	ChannelId string `json:"channelId,omitempty"`

	// MaxPowerDBm: The maximum total power level (EIRP)—computed over the
	// corresponding operating bandwidth—that is permitted within the
	// frequency range. Depending on the context in which the
	// frequency-range element appears, this value may be required. For
	// example, it is required in the available-spectrum response,
	// available-spectrum-batch response, and spectrum-use notification
	// message, but it should not be present (it is not applicable) when the
	// frequency range appears inside a device-capabilities message.
	MaxPowerDBm float64 `json:"maxPowerDBm,omitempty"`

	// StartHz: The required inclusive start of the frequency range (in
	// Hertz).
	StartHz float64 `json:"startHz,omitempty"`

	// StopHz: The required exclusive end of the frequency range (in Hertz).
	StopHz float64 `json:"stopHz,omitempty"`
}

type GeoLocation struct {
	// Confidence: The location confidence level, as an integer percentage,
	// may be required, depending on the regulatory domain. When the
	// parameter is optional and not provided, its value is assumed to be
	// 95. Valid values range from 0 to 99, since, in practice, 100-percent
	// confidence is not achievable. The confidence value is meaningful only
	// when geolocation refers to a point with uncertainty.
	Confidence int64 `json:"confidence,omitempty"`

	// Point: If present, indicates that the geolocation represents a point.
	// Paradoxically, a point is parameterized using an ellipse, where the
	// center represents the location of the point and the distances along
	// the major and minor axes represent the uncertainty. The uncertainty
	// values may be required, depending on the regulatory domain.
	Point *GeoLocationEllipse `json:"point,omitempty"`

	// Region: If present, indicates that the geolocation represents a
	// region. Database support for regions is optional.
	Region *GeoLocationPolygon `json:"region,omitempty"`
}

type GeoLocationEllipse struct {
	// Center: A required geo-spatial point representing the center of the
	// ellipse.
	Center *GeoLocationPoint `json:"center,omitempty"`

	// Orientation: A floating-point number that expresses the orientation
	// of the ellipse, representing the rotation, in degrees, of the
	// semi-major axis from North towards the East. For example, when the
	// uncertainty is greatest along the North-South direction, orientation
	// is 0 degrees; conversely, if the uncertainty is greatest along the
	// East-West direction, orientation is 90 degrees. When orientation is
	// not present, the orientation is assumed to be 0.
	Orientation float64 `json:"orientation,omitempty"`

	// SemiMajorAxis: A floating-point number that expresses the location
	// uncertainty along the major axis of the ellipse. May be required by
	// the regulatory domain. When the uncertainty is optional, the default
	// value is 0.
	SemiMajorAxis float64 `json:"semiMajorAxis,omitempty"`

	// SemiMinorAxis: A floating-point number that expresses the location
	// uncertainty along the minor axis of the ellipse. May be required by
	// the regulatory domain. When the uncertainty is optional, the default
	// value is 0.
	SemiMinorAxis float64 `json:"semiMinorAxis,omitempty"`
}

type GeoLocationPoint struct {
	// Latitude: A required floating-point number that expresses the
	// latitude in degrees using the WGS84 datum. For details on this
	// encoding, see the National Imagery and Mapping Agency's Technical
	// Report TR8350.2.
	Latitude float64 `json:"latitude,omitempty"`

	// Longitude: A required floating-point number that expresses the
	// longitude in degrees using the WGS84 datum. For details on this
	// encoding, see the National Imagery and Mapping Agency's Technical
	// Report TR8350.2.
	Longitude float64 `json:"longitude,omitempty"`
}

type GeoLocationPolygon struct {
	// Exterior: When the geolocation describes a region, the exterior field
	// refers to a list of latitude/longitude points that represent the
	// vertices of a polygon. The first and last points must be the same.
	// Thus, a minimum of four points is required. The following polygon
	// restrictions from RFC5491 apply:
	// - A connecting line shall not
	// cross another connecting line of the same polygon.
	// - The vertices
	// must be defined in a counterclockwise order.
	// - The edges of a
	// polygon are defined by the shortest path between two points in space
	// (not a geodesic curve). Consequently, the length between two adjacent
	// vertices should be restricted to a maximum of 130 km.
	// - All vertices
	// are assumed to be at the same altitude.
	// - Polygon shapes should be
	// restricted to a maximum of 15 vertices (16 points that include the
	// repeated vertex).
	Exterior []*GeoLocationPoint `json:"exterior,omitempty"`
}

type GeoSpectrumSchedule struct {
	// Location: The geolocation identifies the location at which the
	// spectrum schedule applies. It will always be present.
	Location *GeoLocation `json:"location,omitempty"`

	// SpectrumSchedules: A list of available spectrum profiles and
	// associated times. It will always be present, and at least one
	// schedule must be included (though it may be empty if there is no
	// available spectrum). More than one schedule may be included to
	// represent future changes to the available spectrum.
	SpectrumSchedules []*SpectrumSchedule `json:"spectrumSchedules,omitempty"`
}

type PawsGetSpectrumBatchRequest struct {
	// Antenna: Depending on device type and regulatory domain, antenna
	// characteristics may be required.
	Antenna *AntennaCharacteristics `json:"antenna,omitempty"`

	// Capabilities: The master device may include its device capabilities
	// to limit the available-spectrum batch response to the spectrum that
	// is compatible with its capabilities. The database should not return
	// spectrum that is incompatible with the specified capabilities.
	Capabilities *DeviceCapabilities `json:"capabilities,omitempty"`

	// DeviceDesc: When the available spectrum request is made on behalf of
	// a specific device (a master or slave device), device descriptor
	// information for the device on whose behalf the request is made is
	// required (in such cases, the requestType parameter must be empty).
	// When a requestType value is specified, device descriptor information
	// may be optional or required according to the rules of the applicable
	// regulatory domain.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// Locations: A geolocation list is required. This allows a device to
	// specify its current location plus additional anticipated locations
	// when allowed by the regulatory domain. At least one location must be
	// included. Geolocation must be given as the location of the radiation
	// center of the device's antenna. If a location specifies a region,
	// rather than a point, the database may return an UNIMPLEMENTED error
	// if it does not support query by region.
	//
	// There is no upper limit on
	// the number of locations included in a available spectrum batch
	// request, but the database may restrict the number of locations it
	// supports by returning a response with fewer locations than specified
	// in the batch request. Note that geolocations must be those of the
	// master device (a device with geolocation capability that makes an
	// available spectrum batch request), whether the master device is
	// making the request on its own behalf or on behalf of a slave device
	// (one without geolocation capability).
	Locations []*GeoLocation `json:"locations,omitempty"`

	// MasterDeviceDesc: When an available spectrum batch request is made by
	// the master device (a device with geolocation capability) on behalf of
	// a slave device (a device without geolocation capability), the rules
	// of the applicable regulatory domain may require the master device to
	// provide its own device descriptor information (in addition to device
	// descriptor information for the slave device in a separate parameter).
	MasterDeviceDesc *DeviceDescriptor `json:"masterDeviceDesc,omitempty"`

	// Owner: Depending on device type and regulatory domain, device owner
	// information may be included in an available spectrum batch request.
	// This allows the device to register and get spectrum-availability
	// information in a single request.
	Owner *DeviceOwner `json:"owner,omitempty"`

	// RequestType: The request type parameter is an optional parameter that
	// can be used to modify an available spectrum batch request, but its
	// use depends on applicable regulatory rules. For example, It may be
	// used to request generic slave device parameters without having to
	// specify the device descriptor for a specific device. When the
	// requestType parameter is missing, the request is for a specific
	// device (master or slave), and the device descriptor parameter for the
	// device on whose behalf the batch request is made is required.
	RequestType string `json:"requestType,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsGetSpectrumBatchResponse struct {
	// DatabaseChange: A database may include the databaseChange parameter
	// to notify a device of a change to its database URI, providing one or
	// more alternate database URIs. The device should use this information
	// to update its list of pre-configured databases by (only) replacing
	// its entry for the responding database with the list of alternate
	// URIs.
	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`

	// DeviceDesc: The database must return in its available spectrum
	// response the device descriptor information it received in the master
	// device's available spectrum batch request.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// GeoSpectrumSchedules: The available spectrum batch response must
	// contain a geo-spectrum schedule list, The list may be empty if
	// spectrum is not available. The database may return more than one
	// geo-spectrum schedule to represent future changes to the available
	// spectrum. How far in advance a schedule may be provided depends upon
	// the applicable regulatory domain. The database may return available
	// spectrum for fewer geolocations than requested. The device must not
	// make assumptions about the order of the entries in the list, and must
	// use the geolocation value in each geo-spectrum schedule entry to
	// match available spectrum to a location.
	GeoSpectrumSchedules []*GeoSpectrumSchedule `json:"geoSpectrumSchedules,omitempty"`

	// Kind: Identifies what kind of resource this is. Value: the fixed
	// string "spectrum#pawsGetSpectrumBatchResponse".
	Kind string `json:"kind,omitempty"`

	// MaxContiguousBwHz: The database may return a constraint on the
	// allowed maximum contiguous bandwidth (in Hertz). A regulatory domain
	// may require the database to return this parameter. When this
	// parameter is present in the response, the device must apply this
	// constraint to its spectrum-selection logic to ensure that no single
	// block of spectrum has bandwidth that exceeds this value.
	MaxContiguousBwHz float64 `json:"maxContiguousBwHz,omitempty"`

	// MaxTotalBwHz: The database may return a constraint on the allowed
	// maximum total bandwidth (in Hertz), which does not need to be
	// contiguous. A regulatory domain may require the database to return
	// this parameter. When this parameter is present in the available
	// spectrum batch response, the device must apply this constraint to its
	// spectrum-selection logic to ensure that total bandwidth does not
	// exceed this value.
	MaxTotalBwHz float64 `json:"maxTotalBwHz,omitempty"`

	// NeedsSpectrumReport: For regulatory domains that require a
	// spectrum-usage report from devices, the database must return true for
	// this parameter if the geo-spectrum schedules list is not empty;
	// otherwise, the database should either return false or omit this
	// parameter. If this parameter is present and its value is true, the
	// device must send a spectrum use notify message to the database;
	// otherwise, the device should not send the notification.
	NeedsSpectrumReport bool `json:"needsSpectrumReport,omitempty"`

	// RulesetInfo: The database should return ruleset information, which
	// identifies the applicable regulatory authority and ruleset for the
	// available spectrum batch response. If included, the device must use
	// the corresponding ruleset to interpret the response. Values provided
	// in the returned ruleset information, such as maxLocationChange, take
	// precedence over any conflicting values provided in the ruleset
	// information returned in a prior initialization response sent by the
	// database to the device.
	RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"`

	// Timestamp: The database includes a timestamp of the form,
	// YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339), in its
	// available spectrum batch response. The timestamp should be used by
	// the device as a reference for the start and stop times specified in
	// the response spectrum schedules.
	Timestamp string `json:"timestamp,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsGetSpectrumRequest struct {
	// Antenna: Depending on device type and regulatory domain, the
	// characteristics of the antenna may be required.
	Antenna *AntennaCharacteristics `json:"antenna,omitempty"`

	// Capabilities: The master device may include its device capabilities
	// to limit the available-spectrum response to the spectrum that is
	// compatible with its capabilities. The database should not return
	// spectrum that is incompatible with the specified capabilities.
	Capabilities *DeviceCapabilities `json:"capabilities,omitempty"`

	// DeviceDesc: When the available spectrum request is made on behalf of
	// a specific device (a master or slave device), device descriptor
	// information for that device is required (in such cases, the
	// requestType parameter must be empty). When a requestType value is
	// specified, device descriptor information may be optional or required
	// according to the rules of the applicable regulatory domain.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// Location: The geolocation of the master device (a device with
	// geolocation capability that makes an available spectrum request) is
	// required whether the master device is making the request on its own
	// behalf or on behalf of a slave device (one without geolocation
	// capability). The location must be the location of the radiation
	// center of the master device's antenna. To support mobile devices, a
	// regulatory domain may allow the anticipated position of the master
	// device to be given instead. If the location specifies a region,
	// rather than a point, the database may return an UNIMPLEMENTED error
	// code if it does not support query by region.
	Location *GeoLocation `json:"location,omitempty"`

	// MasterDeviceDesc: When an available spectrum request is made by the
	// master device (a device with geolocation capability) on behalf of a
	// slave device (a device without geolocation capability), the rules of
	// the applicable regulatory domain may require the master device to
	// provide its own device descriptor information (in addition to device
	// descriptor information for the slave device, which is provided in a
	// separate parameter).
	MasterDeviceDesc *DeviceDescriptor `json:"masterDeviceDesc,omitempty"`

	// Owner: Depending on device type and regulatory domain, device owner
	// information may be included in an available spectrum request. This
	// allows the device to register and get spectrum-availability
	// information in a single request.
	Owner *DeviceOwner `json:"owner,omitempty"`

	// RequestType: The request type parameter is an optional parameter that
	// can be used to modify an available spectrum request, but its use
	// depends on applicable regulatory rules. It may be used, for example,
	// to request generic slave device parameters without having to specify
	// the device descriptor for a specific device. When the requestType
	// parameter is missing, the request is for a specific device (master or
	// slave), and the deviceDesc parameter for the device on whose behalf
	// the request is made is required.
	RequestType string `json:"requestType,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsGetSpectrumResponse struct {
	// DatabaseChange: A database may include the databaseChange parameter
	// to notify a device of a change to its database URI, providing one or
	// more alternate database URIs. The device should use this information
	// to update its list of pre-configured databases by (only) replacing
	// its entry for the responding database with the list of alternate
	// URIs.
	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`

	// DeviceDesc: The database must return, in its available spectrum
	// response, the device descriptor information it received in the master
	// device's available spectrum request.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// Kind: Identifies what kind of resource this is. Value: the fixed
	// string "spectrum#pawsGetSpectrumResponse".
	Kind string `json:"kind,omitempty"`

	// MaxContiguousBwHz: The database may return a constraint on the
	// allowed maximum contiguous bandwidth (in Hertz). A regulatory domain
	// may require the database to return this parameter. When this
	// parameter is present in the response, the device must apply this
	// constraint to its spectrum-selection logic to ensure that no single
	// block of spectrum has bandwidth that exceeds this value.
	MaxContiguousBwHz float64 `json:"maxContiguousBwHz,omitempty"`

	// MaxTotalBwHz: The database may return a constraint on the allowed
	// maximum total bandwidth (in Hertz), which need not be contiguous. A
	// regulatory domain may require the database to return this parameter.
	// When this parameter is present in the available spectrum response,
	// the device must apply this constraint to its spectrum-selection logic
	// to ensure that total bandwidth does not exceed this value.
	MaxTotalBwHz float64 `json:"maxTotalBwHz,omitempty"`

	// NeedsSpectrumReport: For regulatory domains that require a
	// spectrum-usage report from devices, the database must return true for
	// this parameter if the spectrum schedule list is not empty; otherwise,
	// the database will either return false or omit this parameter. If this
	// parameter is present and its value is true, the device must send a
	// spectrum use notify message to the database; otherwise, the device
	// must not send the notification.
	NeedsSpectrumReport bool `json:"needsSpectrumReport,omitempty"`

	// RulesetInfo: The database should return ruleset information, which
	// identifies the applicable regulatory authority and ruleset for the
	// available spectrum response. If included, the device must use the
	// corresponding ruleset to interpret the response. Values provided in
	// the returned ruleset information, such as maxLocationChange, take
	// precedence over any conflicting values provided in the ruleset
	// information returned in a prior initialization response sent by the
	// database to the device.
	RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"`

	// SpectrumSchedules: The available spectrum response must contain a
	// spectrum schedule list. The list may be empty if spectrum is not
	// available. The database may return more than one spectrum schedule to
	// represent future changes to the available spectrum. How far in
	// advance a schedule may be provided depends on the applicable
	// regulatory domain.
	SpectrumSchedules []*SpectrumSchedule `json:"spectrumSchedules,omitempty"`

	// Timestamp: The database includes a timestamp of the form
	// YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339) in its
	// available spectrum response. The timestamp should be used by the
	// device as a reference for the start and stop times specified in the
	// response spectrum schedules.
	Timestamp string `json:"timestamp,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsInitRequest struct {
	// DeviceDesc: The DeviceDescriptor parameter is required. If the
	// database does not support the device or any of the rulesets specified
	// in the device descriptor, it must return an UNSUPPORTED error code in
	// the error response.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// Location: A device's geolocation is required.
	Location *GeoLocation `json:"location,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsInitResponse struct {
	// DatabaseChange: A database may include the databaseChange parameter
	// to notify a device of a change to its database URI, providing one or
	// more alternate database URIs. The device should use this information
	// to update its list of pre-configured databases by (only) replacing
	// its entry for the responding database with the list of alternate
	// URIs.
	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`

	// Kind: Identifies what kind of resource this is. Value: the fixed
	// string "spectrum#pawsInitResponse".
	Kind string `json:"kind,omitempty"`

	// RulesetInfo: The rulesetInfo parameter must be included in the
	// response. This parameter specifies the regulatory domain and
	// parameters applicable to that domain. The database must include the
	// authority field, which defines the regulatory domain for the location
	// specified in the INIT_REQ message.
	RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsNotifySpectrumUseRequest struct {
	// DeviceDesc: Device descriptor information is required in the
	// spectrum-use notification message.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// Location: The geolocation of the master device (the device that is
	// sending the spectrum-use notification) to the database is required in
	// the spectrum-use notification message.
	Location *GeoLocation `json:"location,omitempty"`

	// Spectra: A spectrum list is required in the spectrum-use
	// notification. The list specifies the spectrum that the device expects
	// to use, which includes frequency ranges and maximum power levels. The
	// list may be empty if the device decides not to use any of spectrum.
	// For consistency, the psdBandwidthHz value should match that from one
	// of the spectrum elements in the corresponding available spectrum
	// response previously sent to the device by the database. Note that
	// maximum power levels in the spectrum element must be expressed as
	// power spectral density over the specified psdBandwidthHz value. The
	// actual bandwidth to be used (as computed from the start and stop
	// frequencies) may be different from the psdBandwidthHz value. As an
	// example, when regulatory rules express maximum power spectral density
	// in terms of maximum power over any 100 kHz band, then the
	// psdBandwidthHz value should be set to 100 kHz, even though the actual
	// bandwidth used can be 20 kHz.
	Spectra []*SpectrumMessage `json:"spectra,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsNotifySpectrumUseResponse struct {
	// Kind: Identifies what kind of resource this is. Value: the fixed
	// string "spectrum#pawsNotifySpectrumUseResponse".
	Kind string `json:"kind,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsRegisterRequest struct {
	// Antenna: Antenna characteristics, including its height and height
	// type.
	Antenna *AntennaCharacteristics `json:"antenna,omitempty"`

	// DeviceDesc: A DeviceDescriptor is required.
	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`

	// DeviceOwner: Device owner information is required.
	DeviceOwner *DeviceOwner `json:"deviceOwner,omitempty"`

	// Location: A device's geolocation is required.
	Location *GeoLocation `json:"location,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsRegisterResponse struct {
	// DatabaseChange: A database may include the databaseChange parameter
	// to notify a device of a change to its database URI, providing one or
	// more alternate database URIs. The device should use this information
	// to update its list of pre-configured databases by (only) replacing
	// its entry for the responding database with the list of alternate
	// URIs.
	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`

	// Kind: Identifies what kind of resource this is. Value: the fixed
	// string "spectrum#pawsRegisterResponse".
	Kind string `json:"kind,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsVerifyDeviceRequest struct {
	// DeviceDescs: A list of device descriptors, which specifies the slave
	// devices to be validated, is required.
	DeviceDescs []*DeviceDescriptor `json:"deviceDescs,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type PawsVerifyDeviceResponse struct {
	// DatabaseChange: A database may include the databaseChange parameter
	// to notify a device of a change to its database URI, providing one or
	// more alternate database URIs. The device should use this information
	// to update its list of pre-configured databases by (only) replacing
	// its entry for the responding database with the list of alternate
	// URIs.
	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`

	// DeviceValidities: A device validities list is required in the device
	// validation response to report whether each slave device listed in a
	// previous device validation request is valid. The number of entries
	// must match the number of device descriptors listed in the previous
	// device validation request.
	DeviceValidities []*DeviceValidity `json:"deviceValidities,omitempty"`

	// Kind: Identifies what kind of resource this is. Value: the fixed
	// string "spectrum#pawsVerifyDeviceResponse".
	Kind string `json:"kind,omitempty"`

	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
	// ...).
	//
	// Required field.
	Type string `json:"type,omitempty"`

	// Version: The PAWS version. Must be exactly 1.0.
	//
	// Required field.
	Version string `json:"version,omitempty"`
}

type RulesetInfo struct {
	// Authority: The regulatory domain to which the ruleset belongs is
	// required. It must be a 2-letter country code. The device should use
	// this to determine additional device behavior required by the
	// associated regulatory domain.
	Authority string `json:"authority,omitempty"`

	// MaxLocationChange: The maximum location change in meters is required
	// in the initialization response, but optional otherwise. When the
	// device changes location by more than this specified distance, it must
	// contact the database to get the available spectrum for the new
	// location. If the device is using spectrum that is no longer
	// available, it must immediately cease use of the spectrum under rules
	// for database-managed spectrum. If this value is provided within the
	// context of an available-spectrum response, it takes precedence over
	// the value within the initialization response.
	MaxLocationChange float64 `json:"maxLocationChange,omitempty"`

	// MaxPollingSecs: The maximum duration, in seconds, between requests
	// for available spectrum. It is required in the initialization
	// response, but optional otherwise. The device must contact the
	// database to get available spectrum no less frequently than this
	// duration. If the new spectrum information indicates that the device
	// is using spectrum that is no longer available, it must immediately
	// cease use of those frequencies under rules for database-managed
	// spectrum. If this value is provided within the context of an
	// available-spectrum response, it takes precedence over the value
	// within the initialization response.
	MaxPollingSecs int64 `json:"maxPollingSecs,omitempty"`

	// RulesetIds: The identifiers of the rulesets supported for the
	// device's location. The database should include at least one
	// applicable ruleset in the initialization response. The device may use
	// the ruleset identifiers to determine parameters to include in
	// subsequent requests. Within the context of the available-spectrum
	// responses, the database should include the identifier of the ruleset
	// that it used to determine the available-spectrum response. If
	// included, the device must use the specified ruleset to interpret the
	// response. If the device does not support the indicated ruleset, it
	// must not operate in the spectrum governed by the ruleset.
	RulesetIds []string `json:"rulesetIds,omitempty"`
}

type SpectrumMessage struct {
	// Bandwidth: The bandwidth (in Hertz) for which permissible power
	// levels are specified. For example, FCC regulation would require only
	// one spectrum specification at 6MHz bandwidth, but Ofcom regulation
	// would require two specifications, at 0.1MHz and 8MHz. This parameter
	// may be empty if there is no available spectrum. It will be present
	// otherwise.
	Bandwidth float64 `json:"bandwidth,omitempty"`

	// FrequencyRanges: The list of frequency ranges and permissible power
	// levels. The list may be empty if there is no available spectrum,
	// otherwise it will be present.
	FrequencyRanges []*FrequencyRange `json:"frequencyRanges,omitempty"`
}

type SpectrumSchedule struct {
	// EventTime: The event time expresses when the spectrum profile is
	// valid. It will always be present.
	EventTime *EventTime `json:"eventTime,omitempty"`

	// Spectra: A list of spectrum messages representing the usable profile.
	// It will always be present, but may be empty when there is no
	// available spectrum.
	Spectra []*SpectrumMessage `json:"spectra,omitempty"`
}

type Vcard struct {
	// Adr: The street address of the entity.
	Adr *VcardAddress `json:"adr,omitempty"`

	// Email: An email address that can be used to reach the contact.
	Email *VcardTypedText `json:"email,omitempty"`

	// Fn: The full name of the contact person. For example: John A. Smith.
	Fn string `json:"fn,omitempty"`

	// Org: The organization associated with the registering entity.
	Org *VcardTypedText `json:"org,omitempty"`

	// Tel: A telephone number that can be used to call the contact.
	Tel *VcardTelephone `json:"tel,omitempty"`
}

type VcardAddress struct {
	// Code: The postal code associated with the address. For example:
	// 94423.
	Code string `json:"code,omitempty"`

	// Country: The country name. For example: US.
	Country string `json:"country,omitempty"`

	// Locality: The city or local equivalent portion of the address. For
	// example: San Jose.
	Locality string `json:"locality,omitempty"`

	// Pobox: An optional post office box number.
	Pobox string `json:"pobox,omitempty"`

	// Region: The state or local equivalent portion of the address. For
	// example: CA.
	Region string `json:"region,omitempty"`

	// Street: The street number and name. For example: 123 Any St.
	Street string `json:"street,omitempty"`
}

type VcardTelephone struct {
	// Uri: A nested telephone URI of the form: tel:+1-123-456-7890.
	Uri string `json:"uri,omitempty"`
}

type VcardTypedText struct {
	// Text: The text string associated with this item. For example, for an
	// org field: ACME, inc. For an email field: smith@example.com.
	Text string `json:"text,omitempty"`
}

// method id "spectrum.paws.getSpectrum":

type PawsGetSpectrumCall struct {
	s                      *Service
	pawsgetspectrumrequest *PawsGetSpectrumRequest
	opt_                   map[string]interface{}
}

// GetSpectrum: Requests information about the available spectrum for a
// device at a location. Requests from a fixed-mode device must include
// owner information so the device can be registered with the database.
func (r *PawsService) GetSpectrum(pawsgetspectrumrequest *PawsGetSpectrumRequest) *PawsGetSpectrumCall {
	c := &PawsGetSpectrumCall{s: r.s, opt_: make(map[string]interface{})}
	c.pawsgetspectrumrequest = pawsgetspectrumrequest
	return c
}

func (c *PawsGetSpectrumCall) Do() (*PawsGetSpectrumResponse, error) {
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumrequest)
	if err != nil {
		return nil, err
	}
	ctype := "application/json"
	params := make(url.Values)
	params.Set("alt", "json")
	urls := googleapi.ResolveRelative(c.s.BasePath, "getSpectrum")
	urls += "?" + params.Encode()
	req, _ := http.NewRequest("POST", urls, body)
	googleapi.SetOpaque(req.URL)
	req.Header.Set("Content-Type", ctype)
	req.Header.Set("User-Agent", "google-api-go-client/0.5")
	res, err := c.s.client.Do(req)
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, err
	}
	ret := new(PawsGetSpectrumResponse)
	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Requests information about the available spectrum for a device at a location. Requests from a fixed-mode device must include owner information so the device can be registered with the database.",
	//   "httpMethod": "POST",
	//   "id": "spectrum.paws.getSpectrum",
	//   "path": "getSpectrum",
	//   "request": {
	//     "$ref": "PawsGetSpectrumRequest"
	//   },
	//   "response": {
	//     "$ref": "PawsGetSpectrumResponse"
	//   }
	// }

}

// method id "spectrum.paws.getSpectrumBatch":

type PawsGetSpectrumBatchCall struct {
	s                           *Service
	pawsgetspectrumbatchrequest *PawsGetSpectrumBatchRequest
	opt_                        map[string]interface{}
}

// GetSpectrumBatch: The Google Spectrum Database does not support batch
// requests, so this method always yields an UNIMPLEMENTED error.
func (r *PawsService) GetSpectrumBatch(pawsgetspectrumbatchrequest *PawsGetSpectrumBatchRequest) *PawsGetSpectrumBatchCall {
	c := &PawsGetSpectrumBatchCall{s: r.s, opt_: make(map[string]interface{})}
	c.pawsgetspectrumbatchrequest = pawsgetspectrumbatchrequest
	return c
}

func (c *PawsGetSpectrumBatchCall) Do() (*PawsGetSpectrumBatchResponse, error) {
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumbatchrequest)
	if err != nil {
		return nil, err
	}
	ctype := "application/json"
	params := make(url.Values)
	params.Set("alt", "json")
	urls := googleapi.ResolveRelative(c.s.BasePath, "getSpectrumBatch")
	urls += "?" + params.Encode()
	req, _ := http.NewRequest("POST", urls, body)
	googleapi.SetOpaque(req.URL)
	req.Header.Set("Content-Type", ctype)
	req.Header.Set("User-Agent", "google-api-go-client/0.5")
	res, err := c.s.client.Do(req)
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, err
	}
	ret := new(PawsGetSpectrumBatchResponse)
	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "The Google Spectrum Database does not support batch requests, so this method always yields an UNIMPLEMENTED error.",
	//   "httpMethod": "POST",
	//   "id": "spectrum.paws.getSpectrumBatch",
	//   "path": "getSpectrumBatch",
	//   "request": {
	//     "$ref": "PawsGetSpectrumBatchRequest"
	//   },
	//   "response": {
	//     "$ref": "PawsGetSpectrumBatchResponse"
	//   }
	// }

}

// method id "spectrum.paws.init":

type PawsInitCall struct {
	s               *Service
	pawsinitrequest *PawsInitRequest
	opt_            map[string]interface{}
}

// Init: Initializes the connection between a white space device and the
// database.
func (r *PawsService) Init(pawsinitrequest *PawsInitRequest) *PawsInitCall {
	c := &PawsInitCall{s: r.s, opt_: make(map[string]interface{})}
	c.pawsinitrequest = pawsinitrequest
	return c
}

func (c *PawsInitCall) Do() (*PawsInitResponse, error) {
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsinitrequest)
	if err != nil {
		return nil, err
	}
	ctype := "application/json"
	params := make(url.Values)
	params.Set("alt", "json")
	urls := googleapi.ResolveRelative(c.s.BasePath, "init")
	urls += "?" + params.Encode()
	req, _ := http.NewRequest("POST", urls, body)
	googleapi.SetOpaque(req.URL)
	req.Header.Set("Content-Type", ctype)
	req.Header.Set("User-Agent", "google-api-go-client/0.5")
	res, err := c.s.client.Do(req)
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, err
	}
	ret := new(PawsInitResponse)
	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Initializes the connection between a white space device and the database.",
	//   "httpMethod": "POST",
	//   "id": "spectrum.paws.init",
	//   "path": "init",
	//   "request": {
	//     "$ref": "PawsInitRequest"
	//   },
	//   "response": {
	//     "$ref": "PawsInitResponse"
	//   }
	// }

}

// method id "spectrum.paws.notifySpectrumUse":

type PawsNotifySpectrumUseCall struct {
	s                            *Service
	pawsnotifyspectrumuserequest *PawsNotifySpectrumUseRequest
	opt_                         map[string]interface{}
}

// NotifySpectrumUse: Notifies the database that the device has selected
// certain frequency ranges for transmission. Only to be invoked when
// required by the regulator. The Google Spectrum Database does not
// operate in domains that require notification, so this always yields
// an UNIMPLEMENTED error.
func (r *PawsService) NotifySpectrumUse(pawsnotifyspectrumuserequest *PawsNotifySpectrumUseRequest) *PawsNotifySpectrumUseCall {
	c := &PawsNotifySpectrumUseCall{s: r.s, opt_: make(map[string]interface{})}
	c.pawsnotifyspectrumuserequest = pawsnotifyspectrumuserequest
	return c
}

func (c *PawsNotifySpectrumUseCall) Do() (*PawsNotifySpectrumUseResponse, error) {
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsnotifyspectrumuserequest)
	if err != nil {
		return nil, err
	}
	ctype := "application/json"
	params := make(url.Values)
	params.Set("alt", "json")
	urls := googleapi.ResolveRelative(c.s.BasePath, "notifySpectrumUse")
	urls += "?" + params.Encode()
	req, _ := http.NewRequest("POST", urls, body)
	googleapi.SetOpaque(req.URL)
	req.Header.Set("Content-Type", ctype)
	req.Header.Set("User-Agent", "google-api-go-client/0.5")
	res, err := c.s.client.Do(req)
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, err
	}
	ret := new(PawsNotifySpectrumUseResponse)
	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Notifies the database that the device has selected certain frequency ranges for transmission. Only to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that require notification, so this always yields an UNIMPLEMENTED error.",
	//   "httpMethod": "POST",
	//   "id": "spectrum.paws.notifySpectrumUse",
	//   "path": "notifySpectrumUse",
	//   "request": {
	//     "$ref": "PawsNotifySpectrumUseRequest"
	//   },
	//   "response": {
	//     "$ref": "PawsNotifySpectrumUseResponse"
	//   }
	// }

}

// method id "spectrum.paws.register":

type PawsRegisterCall struct {
	s                   *Service
	pawsregisterrequest *PawsRegisterRequest
	opt_                map[string]interface{}
}

// Register: The Google Spectrum Database implements registration in the
// getSpectrum method. As such this always returns an UNIMPLEMENTED
// error.
func (r *PawsService) Register(pawsregisterrequest *PawsRegisterRequest) *PawsRegisterCall {
	c := &PawsRegisterCall{s: r.s, opt_: make(map[string]interface{})}
	c.pawsregisterrequest = pawsregisterrequest
	return c
}

func (c *PawsRegisterCall) Do() (*PawsRegisterResponse, error) {
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsregisterrequest)
	if err != nil {
		return nil, err
	}
	ctype := "application/json"
	params := make(url.Values)
	params.Set("alt", "json")
	urls := googleapi.ResolveRelative(c.s.BasePath, "register")
	urls += "?" + params.Encode()
	req, _ := http.NewRequest("POST", urls, body)
	googleapi.SetOpaque(req.URL)
	req.Header.Set("Content-Type", ctype)
	req.Header.Set("User-Agent", "google-api-go-client/0.5")
	res, err := c.s.client.Do(req)
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, err
	}
	ret := new(PawsRegisterResponse)
	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "The Google Spectrum Database implements registration in the getSpectrum method. As such this always returns an UNIMPLEMENTED error.",
	//   "httpMethod": "POST",
	//   "id": "spectrum.paws.register",
	//   "path": "register",
	//   "request": {
	//     "$ref": "PawsRegisterRequest"
	//   },
	//   "response": {
	//     "$ref": "PawsRegisterResponse"
	//   }
	// }

}

// method id "spectrum.paws.verifyDevice":

type PawsVerifyDeviceCall struct {
	s                       *Service
	pawsverifydevicerequest *PawsVerifyDeviceRequest
	opt_                    map[string]interface{}
}

// VerifyDevice: Validates a device for white space use in accordance
// with regulatory rules. The Google Spectrum Database does not support
// master/slave configurations, so this always yields an UNIMPLEMENTED
// error.
func (r *PawsService) VerifyDevice(pawsverifydevicerequest *PawsVerifyDeviceRequest) *PawsVerifyDeviceCall {
	c := &PawsVerifyDeviceCall{s: r.s, opt_: make(map[string]interface{})}
	c.pawsverifydevicerequest = pawsverifydevicerequest
	return c
}

func (c *PawsVerifyDeviceCall) Do() (*PawsVerifyDeviceResponse, error) {
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsverifydevicerequest)
	if err != nil {
		return nil, err
	}
	ctype := "application/json"
	params := make(url.Values)
	params.Set("alt", "json")
	urls := googleapi.ResolveRelative(c.s.BasePath, "verifyDevice")
	urls += "?" + params.Encode()
	req, _ := http.NewRequest("POST", urls, body)
	googleapi.SetOpaque(req.URL)
	req.Header.Set("Content-Type", ctype)
	req.Header.Set("User-Agent", "google-api-go-client/0.5")
	res, err := c.s.client.Do(req)
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, err
	}
	ret := new(PawsVerifyDeviceResponse)
	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Validates a device for white space use in accordance with regulatory rules. The Google Spectrum Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED error.",
	//   "httpMethod": "POST",
	//   "id": "spectrum.paws.verifyDevice",
	//   "path": "verifyDevice",
	//   "request": {
	//     "$ref": "PawsVerifyDeviceRequest"
	//   },
	//   "response": {
	//     "$ref": "PawsVerifyDeviceResponse"
	//   }
	// }

}

redpajama_set_name: RedPajamaGithub


text:
Future Law Students
America's workplace has been and continues to be dominated by men especially in the area of leadership. Women are significantly underrepresented in the legal arena. However, there are women who have overcome barriers to climb to the top. The National Diversity Council seeks to recognize and honor these women who have not only achieved personal success but have made it possible for others to more easily follow in their footsteps.
Received a high degree of peer recognition for leadership excellence and professional expertise.
Exemplifies a noteworthy commitment to fairness, equity, and justice in client representations and professional collaborations.
Maintains a superior level of integrity and dignity across the full spectrum of legal dealings and responsibilities.
Demonstrates commitment to helping other women succeed.
Winner's Requirements
Send bio and a photo, which needs to be in 300dpi resolution and in jpeg or gif style, to event coordinator.
Be present at the conference where the awards will be presented.
A call for nominations is sent out through email blast, and social media networks.
Individuals nominate award winners online or via email.
Award winners are notified of their selection by Dennis Kennedy, Founder and Chair of the National Diversity Council, either by email or Linkedin.
Top 50 Women Lawyers Award Nomination
Please select a city*
Please select a cityDallas, TXHouston, TX
Nominee's Name*
Nominee's Email*
Nominee's Job Title*
Nominee's Company*
Nominee's City*
Nominee's State*
Your Company*
Based on the criteria, please submit reasons nominee should be considered:*
Privacy · Copyright (c) 2016-2017 National Diversity Council. All rights reserved.

redpajama_set_name: RedPajamaCommonCrawl


text:
East Africa February 25, 2021	 0 comments on Church unearthed in Ethiopia rewrites the history of African Christianity – Smithsonian Magazine Online
Church unearthed in Ethiopia rewrites the history of African Christianity – Smithsonian Magazine Online
by Andrew Lawler
This archaeological finding is significant for the continual and more conscious construction of the cultural identity of African Christianity. It gives substance to, what may be described as, the lure and challenge of "historic Ethiopia" towards overcoming forms of Christianity sustained in foreign trappings. African contributions to the shaping of earliest Christianity is mostly muted or at best nuanced in mainstream Christian historical documentations. For long, this has served to sustain the conviction that Christianity is totally foreign to Africa and is opposed to everything indigenous to Africa in its message.
An international assemblage of scientists discovered the church 30 miles northeast of Aksum, the capital of the Aksumite kingdom, a trading empire that emerged in the first century A.D. and would go on to dominate much of eastern Africa and western Arabia. Through radiocarbon dating artifacts uncovered at the church, the researchers concluded that the structure was built in the fourth century A.D., about the same time when Roman Emperor Constantine I legalized Christianty in 313 CE and then converted on his deathbed in 337 CE. The team detailed their findings in a paper published today in Antiquity.
The discovery of the church and its contents confirm Ethiopian tradition that Christianity arrived at an early date in an area nearly 3,000 miles from Rome. The find suggests that the new religion spread quickly through long-distance trading networks that linked the Mediterranean via the Red Sea with Africa and South Asia, shedding fresh light on a significant era about which historians know little.
Read the full article titled, Church Unearthed in Ethiopia Rewrites the History of Christianity in Africa, on Smithsonian Magazine Online.
Andrew Lawler is author of The Secret Token: Myth, Obsession, and the Search for the Lost Colony of Roanoke. He is also a contributing writer for Science magazine and has written for The New York Times, The Washington Post, Smithsonian, National Geographic, and other publications.
African Agency
World's most committed christians live in Africa, Latin America, U.S. – Pew Research Center
What responsibilities follow the numerical dominance of Africans in World Christianity? – Quartz Africa
African Initiative February 25, 2021	 0 comments on The Spanish Flu and the awakening of indigenous spirituality in African Christianity – OZY
The Spanish Flu and the awakening of indigenous spirituality in African Christianity – OZY
by Eromo Egbejule
The Covid-19 global pandemic brings to mind how a similar global pandemic sparked off creative reception of Christianity that altered the direction of development of both christian and religious history of sub-Saharan Africa built on a continuity of African spirituality in African Christianity. A century […]
History February 25, 2021	 0 comments on Origins of Coptic Christianity in ancient Egypt's religio-cultural context – National Geographic
Origins of Coptic Christianity in ancient Egypt's religio-cultural context – National Geographic
by José Péréz-Accino
At last, some indications of the influence of ancient Egypt's language, history and culture in Egyptian Christianity, which survives as Coptic christianity. Latin Christianity, as the religion of the Roman empire, which sought to wipe out earlier alternative christian faiths, became gradually watered down and […]
History February 25, 2021	 0 comments on Complex roots and dynamics of Pentecostalism in African Christianity – Lausanne Movement
Complex roots and dynamics of Pentecostalism in African Christianity – Lausanne Movement
by Daewon Moon
It is important to note that "charismatic" manifestations based on the "pneumatic aspect of Christianity" predated or came in parallel with the Asuza street and subsequent pentecostal-type revivals in the West. Has African Pentecostalism truly matured a distinctive spirituality? What is distinctive about present day […]


Fashion is a big part of my life. I've always had two wardrobes. Being British Indian, there have always been western clothes and Indian clothes equally dividing my cupboard space.
My western wardrobe is full of my work outfits and casual gear, which is how I dress day-to-day. Then along comes a big family event, wedding or a religious ceremony and out come my sarees, lehengas and salwar kameez.
Here I will talk about specific events, my go-to outlets for Indian wear as well as general fashion observations. There will be lots and lots of colourful photos so I hope you enjoy!


text:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <com.hloong.demo.CircleBarTwoSider
    	android:id="@+id/circle"
        android:layout_width="200dp"
    	android:layout_height="200dp"
    	android:layout_marginTop="20dip"
    	android:layout_gravity="center"
    	android:clickable="true"
    />
    <com.hloong.demo.CircleBar
    	android:id="@+id/circle2"
        android:layout_width="200dp"
    	android:layout_height="200dp"
    	android:layout_marginTop="320dip"
    	android:layout_gravity="center"
    	android:clickable="true"
    />

</RelativeLayout>


Jen Lyons is 500 hour Yoga Teacher Certified. She completed her 200 hour training at the Anamaya in Montezuma, Costa Rica with Lagos.corp in the fall of 2015 with a specialization in Thai yoga massage. She then completed her 300 hour teacher training at Tambo Illusion in Tarapoto, Peru with The Kula Collective during the fall of2016 with a specialization in Reiki.
Jen is Reiki III attuned. She loves to combine energy healing into her classes while she teaches. She also enjoys mixing crystals, aromatherapy, asana and meditation together to help work to balance the Chakra system. Jen has sat several ten-day silent Vispassana meditation retreats in the Mid-Atlantic Region over the past eight years.
Her philosophy on yoga is that she believes yoga is not solely about the asana but the all encompassing benefits you receive from the practice for your mind body and spirit. Yoga is a way of living. A way to remain in the present moment and be in tune with life. Jen uses her teaching cues to help guide, strengthen and deepen her students practice. She believes it is all in the personal practice. Jen implores her students to stay true to themselves and to cultivate their own individual practice within the energy of the group environment.


"Syros Island has been called «Lady of the Cyclades» and «nymph of the Aegean Sea". It is the homeland of Ferekydis, an ancient Greek philosopher, teacher of Pythagoras. In the Neolithic Age, Syros was one of the most important islands of the Cycladic civilisation. In the 13th century the Venetians took the island over.
The mediaeval town, built on a hill overlooking the port, its founding and everyday life structure have had a leading impact on the island's history to this very day. During the Turkish occupation, many persecuted people from nearby islands took refuge here. In the late 19th century, the island experienced an unprecedented growth: the construction of boatyards, trading stations and factories, made Syros one of the most frequently visited islands of the Aegean, and Ermoupoli became the hub of island life. Area: 84 sq. km, coastline: 87 km, population: 19,800.
Ermoupoli has been named after the ancient Greek god Hermes. It is the island's capital town and the administrative capital of all the Cyclades islands. This is one of the most beautiful Greek towns (12,000 residents), with many wonderful neoclassical buildings and a particular architectural style influenced by the 19th century western standards. It has been built in an amphitheatrical arrangement on the hill overlooking the Aegean. The largest part of it was built after the 1821 Greek Independence War, by refugees who came from Chios, Psara, Kassos, Kydonia and Smyrna. During that time it became densely populated and evolved into an important commercial and manufacturing centre. In addition to that, and as a result of its geographical location and the financial boom it experienced, its port became an important trading and maritime hub of the newly created Greek state during the 19th century.


text:
Cosmos » Body and Mind » Cosmos Q&A: COVID and global health
Ian Connellan
Cosmos Q&A: COVID and global health
First phase lockdowns altered our habits and our wellbeing.
Credit: RenataAphotography
I've just had COVID – do I need to delay my booster shot?
COVID in 2022 – what happens next?
What we know about Omicron
Pandemic weather: The effect of COVID-19 on lightning
Testing capability pushed to the limit around the world
Given the unprecedented nature of the COVID-19 pandemic and subsequent societal changes, it's not surprising that we've shifted our behaviours relating to health and wellbeing.
A study by the Pennington Biomedical Research Centre (PBRC) in Louisiana, US, published in the journal Obesity, reveals the changes wrought by lockdown and notes that they're magnified among people with obesity.
Cosmos spoke with authors Leanne Redman and Emily Flanagan about the results. Sydney-born Redman heads the reproductive endocrinology and women's health team at PBRC, where she's worked since 2005. Flanagan is a postdoctoral research fellow in Redman's laboratory.
To have run a global survey about these matters back in April suggests the study team had started thinking about lockdown impacts very early. What were the main things that prompted the work?
Stay-at-home orders in Louisiana began on 23 March 2020. We knew that the lockdown would spark sudden and dramatic changes to health behaviours as normal life was disrupted and individuals became confined to their homes. As researchers interested in how health behaviours influence obesity, we thought it would be important to capture the initial responses to stay-at-home orders.
It's somewhat counter-intuitive that people classed as obese improved their diets the most, but also had the highest incidence of weight gain. What does the study indicate as the cause for that?
Leanne Redman
The study provided representation of the obesity epidemic both here in the US and Australia. Approximately one third of the respondents had healthy weight (Body Mass Index – BMI – 18.5–24.9), one third was overweight (BMI 25–29.0), and one third of obesity weight (BMI >30). We asked participants to report their weight and height and from those responses we computed BMI.
At the start of the pandemic, respondents with obesity had lowest dietary behaviours scores. Therefore, with the stay-at-home orders, they had the most dramatic changes to their eating behaviours. The overall healthy eating score actually didn't change among individuals who gained weight. Individuals who reported gaining weight reported the largest declines in physical activity, increases in sedentary behaviour time, and the most drastic changes in sleep timing.
The survey did not capture information on dietary intake in terms of total caloric consumption. For weight gain to occur there would need to be an imbalance between what was being eaten and what was be expended/physical activity.
While residents of more than 50 countries – including Australia – responded to the survey, most respondents are from Louisiana. Can you describe the lockdown regime there in April? Were there the differences between it and stay-at-home rules in a major Australian city such as Melbourne?
The Louisiana state government announced a "stay-at-home" mandate to begin on 23 March. During this time, schools initiated virtual learning so that students and staff could learn from home, all state employees who were considered "non-essential" workers were asked to work from home, "non-essential" business (eg fitness facilities, shops) including retail, restaurants, cafés, movie theatres and entertainment venues temporarily closed their doors, and public parks were closed.
Only grocery stores and gas stations were permitted to remain open with limited operating hours. Banks and medical centres remained open for limited virtual or curb-side appointments. The stay-at-home orders were remarkably similar between Louisiana and Melbourne.
While there's broad understanding of the link between anxiety/mental health and overall physical health, the findings indicate a surprising – alarming – jump in anxiety levels early in the pandemic. To the best of your knowledge, have these levels endured through 2020? What's likely to be the long-term effect of people living with such stress?
Since our survey was designed to capture the initial peak of the pandemic, it was expected that we saw increased anxiety and declines to mental health during this time. However, we were also alarmed that the magnitude of increases was equivalent to anxiety responses to natural disasters.
Emily Flanagan
Research has shown us that heightened levels of stress and anxiety drastically increase the likelihood of weight gain and further insults to health behaviours. Since the stay-at-home orders and the COVID-19 pandemic overlap, it is of course difficult to know if the anxiety is due to COVID-19 itself or due to the order to stay at home. Indeed, as a result, many people reported a reduction to their income or loss of employment, which indeed would contribute to stress and anxiety.
We're now seeing second- and even third-wave COVID outbreaks in many countries. Will you be repeating the survey in an effort to understand the cumulative effect of multiple lockdowns?
Since our survey was completely anonymous, we're not able to follow up with any of these participants to see how individual health behaviours have changed. For these reasons, we have no plans for follow up. However, we feel it will be important to observe how health behaviours continue to change as the pandemic continues, as well as once we eventually begin to return to normalcy.
The pandemic has progressed six months from the time of the survey. What questions in relation to physical and emotional health would you like to explore now, and why?
Now that we have a sense of how behaviours and mental health changed across the first peak of COVID-19 in a diverse population, health care providers can prepare for how to treat these ancillary impacts of the COVID-19 pandemic. It would also be important to understand how health behaviours have changed over the long-term.
Originally published by Cosmos as Cosmos Q&A: COVID and global health
Ian Connellan is editor-in-chief of the Royal Institution of Australia.
Feeling twitchy? Get ready for the Aussie Backyard Bird Count
Australian Academy of Science welcomes new head
Pedalling towards better health
Women disadvantaged when it comes to cardiac care
Wired for sound: The observatory that's always listening
A sugar tax is good for all
Time to lower Australia's blood pressure
R U OK? Understanding mental health in a global pandemic


text:
Best Contemporary Art Museums in the World
Art museums that house and exhibit only a particular style or era of art are not a novelty any more. There are many contemporary art museums around the world, but only a handful of them are considered to be the best. Let's take a look at some of the best contemporary art museums in the world.
Home / Uncategorized / Best Contemporary Art Museums in the World
Art museums that house and exhibit only a particular style or era of art are not a novelty any more. There are many contemporary art museums around the world, but only a handful of them are considered to be the best. Let's take a look at some of the best contemporary art museums in the world.
The best way to assimilate the culture and art of any particular era or a particular art movement is by going to an art museum. There are many different art movements from Neo Classicism, Post-modernism, Abstract Expressionism to Impressionism. For a layman, who is not well versed in the intricacy of art styles and art movement, all these terms can seem a little incomprehensive.
The best way to understand art from a particular period is to go to an art museum and browse through their extensive collection. There are many art museums that are devoted to exhibiting art from a particular style. One such modern art style that is very much popular is contemporary art.
Contemporary art can be defined as art from the period ranging from just after the World War II to the present period. However, this definition of contemporary art is too narrow and limiting. Art movements including abstract expressionism, minimalism, pop art, feminist art and post modernism all fall under the category of contemporary art. There are many contemporary art museums in the world that showcase some of the best works in contemporary art. Here, we will focus on some of the best contemporary art museums in the world.
Best Contemporary Art Museums
New Museum of Contemporary Art, New York
The New Museum of Contemporary Art, New York is a relatively new museum which was constructed in 1977. It is located at 235 Bowery in New York. The museum was founded by Marcia Tucker and is the only museum in New York that exhibits solely contemporary art work. It is well-known for its exclusive exhibitions that showcases the works of both well renowned and lesser know contemporary artists of our times.
Both solo and group exhibitions focusing on under-recognized contemporary artists including William Kentridge, Adrian Piper, David Wojanarowicz, Carroll Dunham and Paul McCarthy are displayed in the museum. The best thing about New Museum of Contemporary Art is that it exhibits works of art from contemporary artists all over the world.
Museum of Contemporary Art, Asia
Another good museum that boasts of some of the best exhibits of contemporary art is the Museum of Contemporary Art, Asia. The museum was established in 2007 in Hong Kong and houses the work of established contemporary painters and sculptors of the world. Works of new and emerging artists who show potential in the field of contemporary art are also showcased in the art museum. Art displays in Moca Asia is not just limited to paintings but also showcases sculptures, photography, art installation and drawings. Some of the most notable exhibits in Moca include Portraits of Nature by Mau Lim and Architectural Allegories.
Museum of Contemporary Art, Chicago
The museum of Contemporary Art located at Chicago is one of the most well-known art museums in the world. It exhibits not only paintings by prominent contemporary artists of our times, but also showcases art installations, sculptures and photo exhibits related to contemporary art. The museum has one of the most incredible architecture and was designed by German architect Josef Paul Kleihues. It houses a theater, a restaurant and a bookshop in addition to the main exhibition section.
Museum of Contemporary Art, Sydney
Considered to be one of the best contemporary art museums in the world, The Museum of Contemporary Art, Sydney houses some of the best works of contemporary art by modern artists. It collects and exhibits works of contemporary art by artists based in Australia as well as across the globe. It houses prominent art collections like the The Loti And Victor Smorgon Collection of Contemporary Australian Art, The Arnott's Biscuits Collection of Aborginal Bark Paintings and The Maningrida Collection of Aborginal Art.
Besides these museums, there are other contemporary art museums from around the world that house some of the most noteworthy contemporary art collections. Besides art collections, contemporary art museums also hosts exhibitions of paintings, drawings, sculptures and art installations from time to time. Some other noteworthy contemporary art museums in the world are listed below.
Contemporary Arts Center, Cincinnati, Ohio
Museum of Contemporary Art, Tokyo
The Aldrich Contemporary Art Museum, Ridgefield
Barcelona Museum of Contemporary Art, Barcelona
National Museum of Contemporary Art, Bucharest
Museum of Modern Art, Warsaw
National Museum of the 21st Century Arts, Rome
Lille Métropole Museum of Modern, Contemporary and Outsider Art, Villeneuve d'Ascq
Museo Nacional Centro de Arte Reina Sofía, Madrid
Museum of Contemporary Canadian Art (MOCCA), Toronto
Museum of Contemporary Art, University of São Paulo
Thessaloniki State Museum of Contemporary Art, Greece
Saatchi Gallery, London
Tate, United Kingdom
If you want to study and understand contemporary art, then you should definitely visit at least some of these contemporary art museums. Visiting a contemporary art museum is a great way to understand contemporary art and develop a greater appreciation for this art form.


text:
Secret City: Season 1
Real people sit down with friends and family to share terrifying true stories from their past, re-created through chilling re-enactments.
Genre: Documentary, Reality
Never Better
Never Better is a British television sitcom which started on BBC Two on 10 January 2008. It stars Stephen Mangan as recovering alcoholic Keith Merchant and Kate Ashfield as his…
When heroes alone are not enough … the world needs legends. Having seen the future, one he will desperately try to prevent from happening, time-traveling rogue Rip Hunter is tasked…
Genre: Action & Adventure, Drama, Sci-Fi & Fantasy
The lives of a group of Southerners who are always broke as a joke and struggling for the American dream of status and wealth. What they don't realize is that…
The pirate adventures of Captain Flint and his men twenty years prior to Robert Louis Stevenson's classic "Treasure Island." Flint, the most brilliant and most feared pirate captain of his…
Genre: Adventure, Drama
Set in a dystopian America ruled by a totalitarian political party, the series follows several seemingly unrelated characters living in a small city. Tying them all together is a mysterious…
In Beacon Heights, a seemingly perfect town, a group of three college friends struggle with the stress of being overachievers. In the aftermath of the town's first murder, each Perfectionist…
Making It Through
Sugako Hashida Drama Wataru Seken wa Oni Bakari is a Japanese television drama series that first aired on TBS in 1990.
After crash-landing on an alien planet, the Robinson family fights against all odds to survive and escape. But they're surrounded by hidden dangers.
Genre: Action & Adventure, Mystery, Sci-Fi & Fantasy
North Shore is an American prime-time soap opera It centered around the staff and guests of the fictional Grand Waimea Hotel and Resort on Oahu's North Shore in Hawaii.
Genre: Drama, Soap
Boardwalk Empire is a period drama focusing on Enoch "Nucky" Thompson (based on the historical Enoch L. Johnson), a political figure who rose to prominence and controlled Atlantic City, New…
Bookmark - 123MOVIES4U.BID, SOLARMOVIE.WIN & GOMOVIES.DATE
Powered By GOMOVIES
123moviesfree movieswatch movies online freefree movies online123movieshub123movies4u


text:
package org.opencloudb.route.function;

import java.math.BigInteger;

import org.opencloudb.config.model.rule.RuleAlgorithm;

/**
 * number column partion by Mod operator
 * if count is 10 then 0 to 0,21 to 1 (21 % 10 =1)
 * @author wuzhih
 *
 */
public class PartitionByMod extends AbstractPartitionAlgorithm implements RuleAlgorithm  {

	private int count;
	@Override
	public void init() {

	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public Integer calculate(String columnValue) {

	BigInteger bigNum = new BigInteger(columnValue).abs();
	 return (bigNum.mod(BigInteger.valueOf(count))).intValue();
	}

}


For example, to create a token to enable a build and. there are a number of actions that may have.Please note that CIBC WILL NEVER call or email you to request your token.
After we create the most viable token model for your business and prepare everything for a token launch,.
What data is stored in the symbol table for a number token?
Numbers can be explicitly assigned to token ids using the general number.For example, if an organization revamps its site, a page that you bookmarked may display a message informing you of the change,.
Go further than you ever imagined in a new Ford vehicle, built just for you.Easily manage OAuth Access and Refresh Tokens with Token Authentication for PHP applications.
Moreover you can personalize each token individually with names, numbers,.Quite often when writing a batch file, you will come across a FOR loop. The Token Number is found within your RSA software token app or on the front of your.
Subtracting Dates with Date Token Calculator. I will copy in an example of what I currently have. and provide tokens for number of milliseconds, seconds,.A sequence of calls to this function split str into tokens, which are sequences of contiguous characters separated by any of the characters that are part of delimiters.
Reduces the number of. example, the total amount of lifetime token tax.
Welcome to our API. and a security token so that our request can be authenticated.


text:
Recovery operators demand greater protection on UK motorways
Mark Salisbury	 Aug 02, 2019
Friday, August 2, 2019 - 08:28
Accident Management, Driver Safety, Driver Training/Safety, General News, News, Newsletter, Secondary News
Mark Salisbury
Campaigners from the roadside recovery industry today claimed new government figures on motorway breakdowns have significantly bolstered the case for increased protections for roadside rescue and recovery operators – including the right to use red warning beacons.
Dramatic damage of a RAC van after being hit by a car on a motorway
Highways England figures show that 181,961 vehicles ground to a halt on motorways after developing a fault in the year to the end of March. The number of breakdowns was up by 14.3 per cent in 12 months and represented a rise of more than 20 per cent over two years. The increase outstripped a rise in the overall number of vehicles on the road over the same period. In the past year, levels of traffic on motorways have increased by less than 1 per cent.
Commenting on the data, spokesperson for Safer Roadside Rescue and Recovery Richard Goddard said: "The admission by Highways England that breakdowns are increasing is vindication for recovery operators who have been anecdotally claiming they need more protection to cope with increased breakdown frequency. More breakdowns means more recovery operators. The Government should take the immediate and cost-free step of permitting recovery operators to use red flashing warning beacons. The increase in breakdowns also comes at a time when the Government are removing the hard shoulder across much of the motorway network, further endangering motorists and recovery operators alike. This is not inevitable. It is the direct result of the Government's decision to remove the hard shoulder – a short-sighted, cost-saving piece of policy making. The roll-out of All Lane Running Motorways should be halted until the government can prove they are safe."
The increase in breakdowns comes as 400 miles of the motorway network in England has been converted into All Lane Running ('smart') motorways – where the hard shoulder is converted into a running lane, with emergency laybys placed 1.5 miles apart. Red X lights on overhead gantries warn drivers about a broken-down vehicle or accident in the road ahead, closing the lane. But there are concerns that 'Red X' signals provide insufficient protection for drivers who breakdown and are unable to reach an emergency layby, and for the recovery operators tasked with rescuing them. The most recent Government statistics show a rate of non-compliance with red-X signals of 6%.
Motorways, road safety, Roadside Recovery, Smart Motorways
Mina and ev.energy bring EV Smart charging an...
Jan 21, 2022No Comments
Award-winning EV fleet payment specialist, Mina has integrated with home-charging software specialists ev.energy to further simplify EV charging for fleets, small businesses and sole traders. Drivers on
New Citroën ë-Berlingo Va...
Yesterday, Thursday 20 January 2022, marked the commercial launch
Sapphire rolls on by joinin...
Independent truck and van repairer Sapphire Vehicle Services has
Jeep Renegade & Compas...
Jeep has announced the introduction of new e-Hybrid (MHEV)


text:
Unpacking the Absurd Logic of Cultural Appropriation—and What It Will Cost Us
By Ryan Holiday • 07/31/17 10:01am
The Band performs with Bob Dylan in 1974. (Left to right: Rick Danko (bass), Robbie Robertson (guitar), Bob Dylan (guitar), Levon Helm(drums)) Wikipedia
In late August, 1968, a successful, young Canadian songwriter named Robbie Robertson would sit down to engage in one of the most preposterous acts of cultural appropriation in music history. His subject matter was a particularly painful moment in American history, told from the perspective of a group that had experienced merciless violence at the hands of the U.S federal government, expressed in the form of a rock and roll song. At the time Robertson knew so little about the group he was singing about—it wasn't his culture, after all—that he would have to visit his local library to read up on them before he started writing.
Yet somehow, his song worked. Like so many acts of cultural appropriation from the past a lack of familiarity or a genuine connection to the traditions involved was hardly an obstacle to commercial or critical success. The song was an enormous hit that has spanned the decades, even covers of it would go on to chart as high as #3 on the Billboard charts. And the only thing more stunning than its success is that nobody seems to mind or be bothered by the fact that the songwriter was writing about a cause that wasn't his own, that he was quite literally taking up someone else's banner.
While this might seem like a strange way to describe and contextualize the generally beloved song "The Night They Drove Old Dixie Down" by The Band, using today's increasingly militant standards of cultural appropriation, it's absolutely true.
Cultural appropriation, properly defined, is the exploitation or co-opting of a culture to which one has no rightful heritage. What does that look like in practice? Depending on who you talk to, it's Katy Perry wearing a kimono in her performance at the American Music Awards. It's Elvis popularizing black music and becoming obscenely rich in the process. According to one angry student in San Francisco, it can be growing your hair into dreadlocks. Just this year, a massive controversy in the art world reared up over whether a white painter could show a painting about the death of Emmett Till.
The question then is: Who does Robbie Robertson think he is, trying to speak about the plight of the poor tenant farmers of Dixie?
Consider: He's not American. He's not from the South. His song is not about a "winner" of history either. He is taking up the voice of the poor white Southerner, used as cannon fodder in a war most of them never wanted; he's singing about a part of the country decimated by Sherman's troops, a world that Drew Gilpin Faust would call the "Republic of Suffering." Worse still, according to later copyright disputes, a contributors to the song (who was Southern) believes he was not fully credited for what he brought to the project.
Robertson admits much of this too. He would even say that he chose these themes of his songs precisely because he thought they would sound good coming out of the voice of Levon Helm, the token American and Southerner in The Band. He would say, about another one of his songs about the South, that he had simply traveled below the Mason-Dixon Line as a kid and began looting the place for themes and personalities and ideas to use in his pursuit of rock stardom. As Robertson said to American Songwriter about a visit to Tennessee,
"While I was there, I was just gathering images and names, and ideas and rhythms, and I was storing all of these things … in my mind somewhere. And when it was time to sit down and write songs, when I reached into the attic to see what I was gonna write about, that's what was there. I just felt a strong passion toward the discovery of going there, and it opened my eyes, and all my senses were overwhelmed by the feeling of that place. When I sat down to write songs, that's all I could think of…"
Again, to argue that we should be upset about the appropriation of Southern culture—a slave owning culture—might seem absurd, but we've already begun to take the outrage over appropriation so far that posing this question now seems almost overdue. Why shouldn't American Southerners have just as good a case as any to protest "The Night They Drove Old Dixie Down?" Students at Oberlin have boycotted the dorm cafeteria over its decision to serve sushi (appropriated from Japan), students at the University of Ottawa can get a yoga class cancelled (appropriated from India) and a burrito cart in Portland was shut down because they got recipe ideas and cooking tips on a trip to Mexico. Just a few months ago in Canada, where Roberston is from, an editor dared to suggest that art inspired by or capturing a culture other than one's own deserved a special prize, and his peers basically tried to drive him from his profession. A fellow editor who tweeted approvingly of his idea actually was!
So why aren't American southerners protesting to have "The Night They Drove Old Dixie Down" banned from the radio? To demand that the Grammy's revoke The Band's lifetime achievement award?
Because Robertson's humanizing, somehow apolitical portrait of loss and pain and confusion at the collapse of the Confederacy in the final days of the Civil War is an astounding artistic achievement. So too is the final live performance that was perfectly captured and frozen in time by Martin Scorsese's documentary The Last Waltz.
To think that today's increasingly strict and aggressive standards of cultural appropriation—if applied fairly—would prevent the song from being written? That by these rules of heritage the only thing Robertson should be allowed to write about is the perspective of an indigenous Canadian? I shudder at the thought.
Thankfully, none of this has happened. "The Night They Drove Old Dixie Down" is currently safe and widely considered to be one of the greatest songs in the history of American music. As it should be.
The problem with policing political correctness issues like cultural appropriation is not that it protects people. We should all seek to be polite, respectful and understanding, particularly of groups that are different than us and that have been treated unfairly in the past. The instincts behind it are good. The problem with political correctness is that by mandating this protection—by using social pressure and even shaming to enforce codes about what is OK and not OK—it becomes fundamentally oppressive. That in trying to prevent some poorly thought out theme in a Katy Perry video, you trample the seeds of some brilliant, risky artistic expression by someone else. And you deprive people of the opportunity to learn about new cultures and contribute to a free exchange between them.
The idea that a novelist would write a book about the love story between an illiterate concentration camp guard and the 15 year old boy she had an affair with (sorry, raping) is offensive beyond words. That the writer was a white German male probably makes it worse. Yet somehow The Reader works. It's brilliant and moving and does what all great art is supposed to do: it makes us think about what it means to be a human being. Which is the point: You never know what's going to work or who will be able to make something work until it happens.
My editor has said to me before, "It's not what a book is"—who made it, what its intentions are—"it's what a book does." And "The Night They Drove Old Dixie Down" does something. It captures something so completely, creates such a vivid illusion that it comes to many people as a surprise who made it. It does what Robertson set out to do.
If "The Night They Drove Old Dixie Down" had failed to do that, if it has been trite or unfeeling, we wouldn't need to line up to accuse them of cultural appropriation, by the way. We already have plenty of language to describe bad or mediocre art. For that reason, it is interesting to listen to Joan Baez's chart topping cover of the song which, as it happens, misses completely the sorrow and the pain of the song, singing it like it's some fun church choir romp (it also gets the lyrics wrong). And has, as a result, mostly faded from memory while the original song remains popular.
My guess is that we give Robertson and The Band a pass because deep down we know that cultural appropriation—when done right, when done well—is actually called art. And when we are not too busy looking for outrage points on the internet to look at the art itself, we know that it is actually something quite powerful and important. As Ralph Gleason would write in Rolling Stone about "The Night They Drove Old Dixie Down" in 1969, it's almost unreal how good the song is—it is better at capturing the personal cost of the fall of that flawed, broken cause than any history book or primary source.
"Nothing I have read," he said, "brought home the overwhelming human sense of history that this song does….It's a remarkable song, the rhythmic structure, the voice of Levon and the bass line with the drum accents and then the heavy close harmony of Levon, Richard and Rick in the theme, make it seem impossible that this isn't some traditional material handed down from father to son straight from that winter of 1865 to today."
Yet if Robertson had done this for the slave experience, is there any chance that we would have—in any era—let him get away with it? Cultural appropriation is not an accusation you should be able to selectively apply. Does the fact that Robertson was writing about a group that social justice warriors or the politically correct care much about mean he gets a free pass? Cultural appropriation is either exploitative and bad or it's not.
Lionel Shriver in her controversial speech at the Brisbane Writers Festival in defense of cultural appropriation would argue that this is precisely what art is designed to do, what it is supposed to do. Referring to sombreros as a particularly distasteful example of appropriation, she said, "The moral of the sombrero scandals is clear: you're not supposed to try on other people's hats. Yet that's what we're paid to do, isn't it? Step into other people's shoes, and try on their hats."
She is picking a deliberately provocative example, but she's not wrong. That is what art is for. To explore ourselves and other people.
The writer Roxane Gay recently complained about HBO's new series (a show that's not even out yet and is already being accused of appropriation) which imagines a world in which slavery wasn't abolished after the Civil War by pointing out all the other alternative histories the writers could have chosen. Why not an alternative history about Native Americans or if Mexicans won the Mexican-American was, she asks? (I would ask where her outrage is about The Man in the High Castle which imagines a world where the Japanese and Germans won WWII.) But that's the point—the artists chose this one. And we should encourage everyone else to tackle whatever they want to as well, nor should we let backgrounds limit who decides to try.
And of this argument that cultural appropriation drowns out local or more deserving voices: How many better qualified bands were there to write about the fall of the South in 1968? Lynyrd Skynyrd was around and going strong. How many talented historians and orators had tried to explain where and what the Lost Cause had come from? All came up painfully short. It was an outsider who had managed to do it, it was a guy who went to the library for a few hours and put it to music that he had been working on for nearly a year and magic was created. He was able to see it more simply, more humanely than those who had spent their lives in the complexity of the trees and lost sight of the forest.
It is not stealing or looting to take things that inspire you in one culture and adapt and change them to further your own expression. It's a right. It's the essence of art. And it's a right to be extended both ways.
Elvis should be able to turn black music into rock and roll, just as Rick Ross should be able to transcend his career as a correctional officer to take up any image he likes as a rapper, just as Idris Elba should be and could be a badass James Bond, just as Lin-Manuel Miranda is rightly lauded for doing whatever he wants with Alexander Hamilton and just as Stephen L. Carter's novel The Impeachment of Abraham Lincoln was rightly given glowing praise. The Band should be able to, as Canadians, dig their feet into the mud at Muscle Shoals and find inspiration there, just like hip-hop's greatest beat makers should feel free to borrow from Steely Dan (as Kanye did) or The Doors (as Jay Z did) and remake any song that they obtain legal permission to sample (that was Puffy's only mistake with "Every Breath You Take"—not that it was cultural appropriation).
It's from this that we create beautiful things, that 1+1=3, and that we learn and are exposed to new perspectives. And if this is occasionally done in poor taste or obscenely profitable, well, that's what we have income tax for. (Elvis, for what it's worth, paid a tax rate as high as 94% for most of his glory days. One hopes that the profits from Joan Baez's terrible cover of Dixie went straight to Uncle Sam.)
A music critic would say of "The Night They Drove Old Dixie Down" that,
"It is hard for me to comprehend how any Northerner, raised on a very different war than Virgil Kane's, could listen to this song without finding himself changed. You can't get out from under the singer's truth—not the whole truth, but his truth—and the little autobiography closes the gap between us."
That's what cultural appropriation is uniquely suited to do. And that's what we need lots more of. For all issues. Every cause and every community deserves something as good as "The Night They Drove Old Dixie Down,"—deserves lots of them. Because it's a wonderful way to close gaps and create empathy, even for people you might not otherwise feel it for (a la people who fought for the South). It's how we generate understanding and a new, better, shared culture.
If someone can capture the pain of the inner city and communicate it to the world in a way that changes people, if someone can articulate the subtle stabs of systemic oppression or violation, if someone can communicate the hopelessness of aging middle America, if someone can teach us what it feels like to be an outsider or how trauma stays with a person, who the hell cares who the person saying it is?
If they can do it, as the Canadian writer Hal Niedzviecki I mentioned earlier got himself in trouble for suggesting—if they can accomplish this impossible but important task of closing even the smallest of gaps via appropriation—we shouldn't question their credentials, we should give them a prize.
Ryan Holiday is the best-selling author of Ego is the Enemy. Ryan is an editor-at-large for the Observer, and he lives in Austin, Texas.
He's also put together this list of 15 books that you've probably never heard of that will alter your worldview, help you excel at your career and teach you how to live a better life.
Also by Ryan Holiday:
We Used to Put Statues Up, Now We Just Tear Them Down
I Helped Create the Milo Trolling Playbook. You Should Stop Playing Right Into It.
How the Online 'Diversity Police' Defeat Themselves, and Leave Us All Much Worse Off
We Are Living in a Post-Shame World—And That's Not a Good Thing
We Don't Have a Fake News Problem—We Are the Fake News Problem
Want to Really Make America Great Again? Stop Reading the News.
The Real Reason We Need to Stop Trying to Protect Everyone's Feelings
This Is the Hollowed-Out World That Outrage Culture Has Created
Filed Under: Innovation, Media, Media, songwriting, political correctness, Robbie Robertson
SEE ALSO: Pioneering VR Comic Duncan Trussell on Closure of Startup Powering All-Digital Shows