<?php return [
  'service' => [
    'actions' => [
      'CreateBucket' => [
        'request' => [
          'operation' => 'CreateBucket',
        ],
        'resource' => [
          'type' => 'Bucket',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'requestParameter',
              'path' => 'Bucket',
            ],
          ],
        ],
      ],
    ],
    'has' => [
      'Bucket' => [
        'resource' => [
          'type' => 'Bucket',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'input',
            ],
          ],
        ],
      ],
    ],
    'hasMany' => [
      'Buckets' => [
        'request' => [
          'operation' => 'ListBuckets',
        ],
        'resource' => [
          'type' => 'Bucket',
          'identifiers' => [
            [
              'target' => 'Name',
              'source' => 'response',
              'path' => 'Buckets[].Name',
            ],
          ],
          'path' => 'Buckets[]',
        ],
      ],
    ],
  ],
  'resources' => [
    'Bucket' => [
      'identifiers' => [
        [
          'name' => 'Name',
        ],
      ],
      'shape' => 'Bucket',
      'actions' => [
        'Create' => [
          'request' => [
            'operation' => 'CreateBucket',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteBucket',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'DeleteObjects' => [
          'request' => [
            'operation' => 'DeleteObjects',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'PutObject' => [
          'request' => [
            'operation' => 'PutObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Key',
                'source' => 'requestParameter',
                'path' => 'Key',
              ],
            ],
          ],
        ],
      ],
      'waiters' => [
        'Exists' => [
          'waiterName' => 'BucketExists',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
        'NotExists' => [
          'waiterName' => 'BucketNotExists',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'Name',
            ],
          ],
        ],
      ],
      'has' => [
        'Acl' => [
          'resource' => [
            'type' => 'BucketAcl',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Cors' => [
          'resource' => [
            'type' => 'BucketCors',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Lifecycle' => [
          'resource' => [
            'type' => 'BucketLifecycle',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Logging' => [
          'resource' => [
            'type' => 'BucketLogging',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Notification' => [
          'resource' => [
            'type' => 'BucketNotification',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Object' => [
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Key',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'Policy' => [
          'resource' => [
            'type' => 'BucketPolicy',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'RequestPayment' => [
          'resource' => [
            'type' => 'BucketRequestPayment',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Tagging' => [
          'resource' => [
            'type' => 'BucketTagging',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Versioning' => [
          'resource' => [
            'type' => 'BucketVersioning',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
        'Website' => [
          'resource' => [
            'type' => 'BucketWebsite',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'MultipartUploads' => [
          'request' => [
            'operation' => 'ListMultipartUploads',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'response',
                'path' => 'Uploads[].Key',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'Uploads[].UploadId',
              ],
            ],
            'path' => 'Uploads[]',
          ],
        ],
        'ObjectVersions' => [
          'request' => [
            'operation' => 'ListObjectVersions',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'ObjectVersion',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'response',
                'path' => '[Versions,DeleteMarkers]|[].Key',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => '[Versions,DeleteMarkers]|[].VersionId',
              ],
            ],
            'path' => '[Versions,DeleteMarkers]|[]',
          ],
        ],
        'Objects' => [
          'request' => [
            'operation' => 'ListObjects',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'Name',
              ],
            ],
          ],
          'resource' => [
            'type' => 'ObjectSummary',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'Name',
              ],
              [
                'target' => 'Key',
                'source' => 'response',
                'path' => 'Contents[].Key',
              ],
            ],
            'path' => 'Contents[]',
          ],
        ],
      ],
    ],
    'BucketAcl' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketAclOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketAcl',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Put' => [
          'request' => [
            'operation' => 'PutBucketAcl',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketCors' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketCorsOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketCors',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteBucketCors',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutBucketCors',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketLifecycle' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketLifecycleOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketLifecycle',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteBucketLifecycle',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutBucketLifecycle',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketLogging' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketLoggingOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketLogging',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Put' => [
          'request' => [
            'operation' => 'PutBucketLogging',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketNotification' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'NotificationConfiguration',
      'load' => [
        'request' => [
          'operation' => 'GetBucketNotificationConfiguration',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Put' => [
          'request' => [
            'operation' => 'PutBucketNotificationConfiguration',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketPolicy' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketPolicyOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketPolicy',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteBucketPolicy',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutBucketPolicy',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketRequestPayment' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketRequestPaymentOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketRequestPayment',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Put' => [
          'request' => [
            'operation' => 'PutBucketRequestPayment',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketTagging' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketTaggingOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketTagging',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteBucketTagging',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutBucketTagging',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketVersioning' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketVersioningOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketVersioning',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Enable' => [
          'request' => [
            'operation' => 'PutBucketVersioning',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'VersioningConfiguration.Status',
                'source' => 'string',
                'value' => 'Enabled',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutBucketVersioning',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'Suspend' => [
          'request' => [
            'operation' => 'PutBucketVersioning',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'VersioningConfiguration.Status',
                'source' => 'string',
                'value' => 'Suspended',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'BucketWebsite' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
      ],
      'shape' => 'GetBucketWebsiteOutput',
      'load' => [
        'request' => [
          'operation' => 'GetBucketWebsite',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteBucketWebsite',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutBucketWebsite',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
      ],
    ],
    'MultipartUpload' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
        [
          'name' => 'ObjectKey',
        ],
        [
          'name' => 'Id',
        ],
      ],
      'shape' => 'MultipartUpload',
      'actions' => [
        'Abort' => [
          'request' => [
            'operation' => 'AbortMultipartUpload',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'UploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'Complete' => [
          'request' => [
            'operation' => 'CompleteMultipartUpload',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'UploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Object' => [
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
            ],
          ],
        ],
        'Part' => [
          'resource' => [
            'type' => 'MultipartUploadPart',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'MultipartUploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
              [
                'target' => 'PartNumber',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
      'hasMany' => [
        'Parts' => [
          'request' => [
            'operation' => 'ListParts',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'UploadId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MultipartUploadPart',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'requestParameter',
                'path' => 'Bucket',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'requestParameter',
                'path' => 'Key',
              ],
              [
                'target' => 'MultipartUploadId',
                'source' => 'requestParameter',
                'path' => 'UploadId',
              ],
              [
                'target' => 'PartNumber',
                'source' => 'response',
                'path' => 'Parts[].PartNumber',
              ],
            ],
            'path' => 'Parts[]',
          ],
        ],
      ],
    ],
    'MultipartUploadPart' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
        [
          'name' => 'ObjectKey',
        ],
        [
          'name' => 'MultipartUploadId',
        ],
        [
          'name' => 'PartNumber',
          'type' => 'integer',
          'memberName' => 'PartNumber',
        ],
      ],
      'shape' => 'Part',
      'actions' => [
        'CopyFrom' => [
          'request' => [
            'operation' => 'UploadPartCopy',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'UploadId',
                'source' => 'identifier',
                'name' => 'MultipartUploadId',
              ],
              [
                'target' => 'PartNumber',
                'source' => 'identifier',
                'name' => 'PartNumber',
              ],
            ],
          ],
        ],
        'Upload' => [
          'request' => [
            'operation' => 'UploadPart',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'UploadId',
                'source' => 'identifier',
                'name' => 'MultipartUploadId',
              ],
              [
                'target' => 'PartNumber',
                'source' => 'identifier',
                'name' => 'PartNumber',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'MultipartUpload' => [
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'Id',
                'source' => 'identifier',
                'name' => 'MultipartUploadId',
              ],
            ],
          ],
        ],
      ],
    ],
    'Object' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
        [
          'name' => 'Key',
        ],
      ],
      'shape' => 'HeadObjectOutput',
      'load' => [
        'request' => [
          'operation' => 'HeadObject',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
            [
              'target' => 'Key',
              'source' => 'identifier',
              'name' => 'Key',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'CopyFrom' => [
          'request' => [
            'operation' => 'CopyObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Get' => [
          'request' => [
            'operation' => 'GetObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'InitiateMultipartUpload' => [
          'request' => [
            'operation' => 'CreateMultipartUpload',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'UploadId',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
      ],
      'batchActions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteObjects',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Delete.Objects[].Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
      ],
      'waiters' => [
        'Exists' => [
          'waiterName' => 'ObjectExists',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
            [
              'target' => 'Key',
              'source' => 'identifier',
              'name' => 'Key',
            ],
          ],
        ],
        'NotExists' => [
          'waiterName' => 'ObjectNotExists',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
            [
              'target' => 'Key',
              'source' => 'identifier',
              'name' => 'Key',
            ],
          ],
        ],
      ],
      'has' => [
        'Acl' => [
          'resource' => [
            'type' => 'ObjectAcl',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'MultipartUpload' => [
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'Version' => [
          'resource' => [
            'type' => 'ObjectVersion',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
    ],
    'ObjectAcl' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
        [
          'name' => 'ObjectKey',
        ],
      ],
      'shape' => 'GetObjectAclOutput',
      'load' => [
        'request' => [
          'operation' => 'GetObjectAcl',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
            [
              'target' => 'Key',
              'source' => 'identifier',
              'name' => 'ObjectKey',
            ],
          ],
        ],
        'path' => '@',
      ],
      'actions' => [
        'Put' => [
          'request' => [
            'operation' => 'PutObjectAcl',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Object' => [
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
            ],
          ],
        ],
      ],
    ],
    'ObjectSummary' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
        [
          'name' => 'Key',
        ],
      ],
      'shape' => 'Object',
      'actions' => [
        'CopyFrom' => [
          'request' => [
            'operation' => 'CopyObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Delete' => [
          'request' => [
            'operation' => 'DeleteObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Get' => [
          'request' => [
            'operation' => 'GetObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'InitiateMultipartUpload' => [
          'request' => [
            'operation' => 'CreateMultipartUpload',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
              [
                'target' => 'Id',
                'source' => 'response',
                'path' => 'UploadId',
              ],
            ],
          ],
        ],
        'Put' => [
          'request' => [
            'operation' => 'PutObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
      ],
      'batchActions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteObjects',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Delete.Objects[].Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
      ],
      'waiters' => [
        'Exists' => [
          'waiterName' => 'ObjectExists',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
            [
              'target' => 'Key',
              'source' => 'identifier',
              'name' => 'Key',
            ],
          ],
        ],
        'NotExists' => [
          'waiterName' => 'ObjectNotExists',
          'params' => [
            [
              'target' => 'Bucket',
              'source' => 'identifier',
              'name' => 'BucketName',
            ],
            [
              'target' => 'Key',
              'source' => 'identifier',
              'name' => 'Key',
            ],
          ],
        ],
      ],
      'has' => [
        'Acl' => [
          'resource' => [
            'type' => 'ObjectAcl',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Bucket' => [
          'resource' => [
            'type' => 'Bucket',
            'identifiers' => [
              [
                'target' => 'Name',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
            ],
          ],
        ],
        'MultipartUpload' => [
          'resource' => [
            'type' => 'MultipartUpload',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
        'Object' => [
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'Key',
              ],
            ],
          ],
        ],
        'Version' => [
          'resource' => [
            'type' => 'ObjectVersion',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'ObjectKey',
                'source' => 'identifier',
                'name' => 'Key',
              ],
              [
                'target' => 'Id',
                'source' => 'input',
              ],
            ],
          ],
        ],
      ],
    ],
    'ObjectVersion' => [
      'identifiers' => [
        [
          'name' => 'BucketName',
        ],
        [
          'name' => 'ObjectKey',
        ],
        [
          'name' => 'Id',
        ],
      ],
      'shape' => 'ObjectVersion',
      'actions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'VersionId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'Get' => [
          'request' => [
            'operation' => 'GetObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'VersionId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
        'Head' => [
          'request' => [
            'operation' => 'HeadObject',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'VersionId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
      'batchActions' => [
        'Delete' => [
          'request' => [
            'operation' => 'DeleteObjects',
            'params' => [
              [
                'target' => 'Bucket',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Delete.Objects[*].Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
              [
                'target' => 'Delete.Objects[*].VersionId',
                'source' => 'identifier',
                'name' => 'Id',
              ],
            ],
          ],
        ],
      ],
      'has' => [
        'Object' => [
          'resource' => [
            'type' => 'Object',
            'identifiers' => [
              [
                'target' => 'BucketName',
                'source' => 'identifier',
                'name' => 'BucketName',
              ],
              [
                'target' => 'Key',
                'source' => 'identifier',
                'name' => 'ObjectKey',
              ],
            ],
          ],
        ],
      ],
    ],
  ],
];
