public CompleteMultipartUploadResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    CompleteMultipartUploadResult completeMultipartUploadResult =
        new CompleteMultipartUploadResult();

    if (context.isStartOfDocument()) {
      if (context.getHeader("Location") != null) {
        context.setCurrentHeader("Location");
        completeMultipartUploadResult.setLocation(
            StringJsonUnmarshaller.getInstance().unmarshall(context));
      }

      if (context.getHeader("x-amz-sha256-tree-hash") != null) {
        context.setCurrentHeader("x-amz-sha256-tree-hash");
        completeMultipartUploadResult.setChecksum(
            StringJsonUnmarshaller.getInstance().unmarshall(context));
      }

      if (context.getHeader("x-amz-archive-id") != null) {
        context.setCurrentHeader("x-amz-archive-id");
        completeMultipartUploadResult.setArchiveId(
            StringJsonUnmarshaller.getInstance().unmarshall(context));
      }
    }

    return completeMultipartUploadResult;
  }
  public ListPartsResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ListPartsResult listPartsResult = new ListPartsResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("MultipartUploadId", targetDepth)) {
          context.nextToken();
          listPartsResult.setMultipartUploadId(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("VaultARN", targetDepth)) {
          context.nextToken();
          listPartsResult.setVaultARN(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ArchiveDescription", targetDepth)) {
          context.nextToken();
          listPartsResult.setArchiveDescription(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("PartSizeInBytes", targetDepth)) {
          context.nextToken();
          listPartsResult.setPartSizeInBytes(
              LongJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("CreationDate", targetDepth)) {
          context.nextToken();
          listPartsResult.setCreationDate(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Parts", targetDepth)) {
          context.nextToken();
          listPartsResult.setParts(
              new ListUnmarshaller<PartListElement>(PartListElementJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Marker", targetDepth)) {
          context.nextToken();
          listPartsResult.setMarker(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return listPartsResult;
  }
  public ActivityType unmarshall(JsonUnmarshallerContext context) throws Exception {
    ActivityType activityType = new ActivityType();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("name", targetDepth)) {
          context.nextToken();
          activityType.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("version", targetDepth)) {
          context.nextToken();
          activityType.setVersion(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return activityType;
  }
  public IncompatibilityMessage unmarshall(JsonUnmarshallerContext context) throws Exception {
    IncompatibilityMessage incompatibilityMessage = new IncompatibilityMessage();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("message", targetDepth)) {
          context.nextToken();
          incompatibilityMessage.setMessage(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("type", targetDepth)) {
          context.nextToken();
          incompatibilityMessage.setType(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return incompatibilityMessage;
  }
  public Location unmarshall(JsonUnmarshallerContext context) throws Exception {
    Location location = new Location();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("locationCode", targetDepth)) {
          context.nextToken();
          location.setLocationCode(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("locationName", targetDepth)) {
          context.nextToken();
          location.setLocationName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return location;
  }
  public StopDeploymentResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    StopDeploymentResult stopDeploymentResult = new StopDeploymentResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("status", targetDepth)) {
          context.nextToken();
          stopDeploymentResult.setStatus(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("statusMessage", targetDepth)) {
          context.nextToken();
          stopDeploymentResult.setStatusMessage(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return stopDeploymentResult;
  }
  public DecisionTask unmarshall(JsonUnmarshallerContext context) throws Exception {
    DecisionTask decisionTask = new DecisionTask();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("taskToken", targetDepth)) {
          context.nextToken();
          decisionTask.setTaskToken(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("startedEventId", targetDepth)) {
          context.nextToken();
          decisionTask.setStartedEventId(LongJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("workflowExecution", targetDepth)) {
          context.nextToken();
          decisionTask.setWorkflowExecution(
              WorkflowExecutionJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("workflowType", targetDepth)) {
          context.nextToken();
          decisionTask.setWorkflowType(
              WorkflowTypeJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("events", targetDepth)) {
          decisionTask.setEvents(
              new ListUnmarshaller<HistoryEvent>(HistoryEventJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("nextPageToken", targetDepth)) {
          context.nextToken();
          decisionTask.setNextPageToken(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("previousStartedEventId", targetDepth)) {
          context.nextToken();
          decisionTask.setPreviousStartedEventId(
              LongJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return decisionTask;
  }
  public JobFlowExecutionStatusDetail unmarshall(JsonUnmarshallerContext context) throws Exception {
    JobFlowExecutionStatusDetail jobFlowExecutionStatusDetail = new JobFlowExecutionStatusDetail();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("State", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setState(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("CreationDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setCreationDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("StartDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setStartDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ReadyDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setReadyDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("EndDateTime", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setEndDateTime(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LastStateChangeReason", targetDepth)) {
          context.nextToken();
          jobFlowExecutionStatusDetail.setLastStateChangeReason(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return jobFlowExecutionStatusDetail;
  }
  public QueryResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    QueryResult queryResult = new QueryResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Items", targetDepth)) {
          context.nextToken();
          queryResult.setItems(
              new ListUnmarshaller<java.util.Map<String, AttributeValue>>(
                      new MapUnmarshaller<String, AttributeValue>(
                          StringJsonUnmarshaller.getInstance(),
                          AttributeValueJsonUnmarshaller.getInstance()))
                  .unmarshall(context));
        }
        if (context.testExpression("Count", targetDepth)) {
          context.nextToken();
          queryResult.setCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ScannedCount", targetDepth)) {
          context.nextToken();
          queryResult.setScannedCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LastEvaluatedKey", targetDepth)) {
          context.nextToken();
          queryResult.setLastEvaluatedKey(
              new MapUnmarshaller<String, AttributeValue>(
                      StringJsonUnmarshaller.getInstance(),
                      AttributeValueJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("ConsumedCapacity", targetDepth)) {
          context.nextToken();
          queryResult.setConsumedCapacity(
              ConsumedCapacityJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return queryResult;
  }
  public Recipes unmarshall(JsonUnmarshallerContext context) throws Exception {
    Recipes recipes = new Recipes();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Setup", targetDepth)) {
          context.nextToken();
          recipes.setSetup(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Configure", targetDepth)) {
          context.nextToken();
          recipes.setConfigure(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Deploy", targetDepth)) {
          context.nextToken();
          recipes.setDeploy(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Undeploy", targetDepth)) {
          context.nextToken();
          recipes.setUndeploy(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Shutdown", targetDepth)) {
          context.nextToken();
          recipes.setShutdown(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return recipes;
  }
  public RedshiftDestinationUpdate unmarshall(JsonUnmarshallerContext context) throws Exception {
    RedshiftDestinationUpdate redshiftDestinationUpdate = new RedshiftDestinationUpdate();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("RoleARN", targetDepth)) {
          context.nextToken();
          redshiftDestinationUpdate.setRoleARN(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ClusterJDBCURL", targetDepth)) {
          context.nextToken();
          redshiftDestinationUpdate.setClusterJDBCURL(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("CopyCommand", targetDepth)) {
          context.nextToken();
          redshiftDestinationUpdate.setCopyCommand(
              CopyCommandJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Username", targetDepth)) {
          context.nextToken();
          redshiftDestinationUpdate.setUsername(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Password", targetDepth)) {
          context.nextToken();
          redshiftDestinationUpdate.setPassword(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("S3Update", targetDepth)) {
          context.nextToken();
          redshiftDestinationUpdate.setS3Update(
              S3DestinationUpdateJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return redshiftDestinationUpdate;
  }
  public VolumeConfiguration unmarshall(JsonUnmarshallerContext context) throws Exception {
    VolumeConfiguration volumeConfiguration = new VolumeConfiguration();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("MountPoint", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setMountPoint(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("RaidLevel", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setRaidLevel(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("NumberOfDisks", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setNumberOfDisks(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Size", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setSize(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("VolumeType", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setVolumeType(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Iops", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setIops(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return volumeConfiguration;
  }
  public ActivityTask unmarshall(JsonUnmarshallerContext context) throws Exception {
    ActivityTask activityTask = new ActivityTask();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("taskToken", targetDepth)) {
          context.nextToken();
          activityTask.setTaskToken(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("activityId", targetDepth)) {
          context.nextToken();
          activityTask.setActivityId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("startedEventId", targetDepth)) {
          context.nextToken();
          activityTask.setStartedEventId(LongJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("workflowExecution", targetDepth)) {
          context.nextToken();
          activityTask.setWorkflowExecution(
              WorkflowExecutionJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("activityType", targetDepth)) {
          context.nextToken();
          activityTask.setActivityType(
              ActivityTypeJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("input", targetDepth)) {
          context.nextToken();
          activityTask.setInput(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return activityTask;
  }
  public StackSummary unmarshall(JsonUnmarshallerContext context) throws Exception {
    StackSummary stackSummary = new StackSummary();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("StackId", targetDepth)) {
          context.nextToken();
          stackSummary.setStackId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          stackSummary.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Arn", targetDepth)) {
          context.nextToken();
          stackSummary.setArn(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LayersCount", targetDepth)) {
          context.nextToken();
          stackSummary.setLayersCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("AppsCount", targetDepth)) {
          context.nextToken();
          stackSummary.setAppsCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("InstancesCount", targetDepth)) {
          context.nextToken();
          stackSummary.setInstancesCount(
              InstancesCountJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return stackSummary;
  }
  public VolumeiSCSIAttributes unmarshall(JsonUnmarshallerContext context) throws Exception {
    VolumeiSCSIAttributes volumeiSCSIAttributes = new VolumeiSCSIAttributes();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("TargetARN", targetDepth)) {
          context.nextToken();
          volumeiSCSIAttributes.setTargetARN(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("NetworkInterfaceId", targetDepth)) {
          context.nextToken();
          volumeiSCSIAttributes.setNetworkInterfaceId(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("NetworkInterfacePort", targetDepth)) {
          context.nextToken();
          volumeiSCSIAttributes.setNetworkInterfacePort(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LunNumber", targetDepth)) {
          context.nextToken();
          volumeiSCSIAttributes.setLunNumber(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ChapEnabled", targetDepth)) {
          context.nextToken();
          volumeiSCSIAttributes.setChapEnabled(
              BooleanJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return volumeiSCSIAttributes;
  }
  public PipelineDescription unmarshall(JsonUnmarshallerContext context) throws Exception {
    PipelineDescription pipelineDescription = new PipelineDescription();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("pipelineId", targetDepth)) {
          context.nextToken();
          pipelineDescription.setPipelineId(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("name", targetDepth)) {
          context.nextToken();
          pipelineDescription.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("fields", targetDepth)) {
          context.nextToken();
          pipelineDescription.setFields(
              new ListUnmarshaller<Field>(FieldJsonUnmarshaller.getInstance()).unmarshall(context));
        }
        if (context.testExpression("description", targetDepth)) {
          context.nextToken();
          pipelineDescription.setDescription(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("tags", targetDepth)) {
          context.nextToken();
          pipelineDescription.setTags(
              new ListUnmarshaller<Tag>(TagJsonUnmarshaller.getInstance()).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return pipelineDescription;
  }
  public UpdateDeploymentResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    UpdateDeploymentResult updateDeploymentResult = new UpdateDeploymentResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("id", targetDepth)) {
          context.nextToken();
          updateDeploymentResult.setId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("description", targetDepth)) {
          context.nextToken();
          updateDeploymentResult.setDescription(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("createdDate", targetDepth)) {
          context.nextToken();
          updateDeploymentResult.setCreatedDate(
              DateJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("apiSummary", targetDepth)) {
          context.nextToken();
          updateDeploymentResult.setApiSummary(
              new MapUnmarshaller<String, java.util.Map<String, MethodSnapshot>>(
                      StringJsonUnmarshaller.getInstance(),
                      new MapUnmarshaller<String, MethodSnapshot>(
                          StringJsonUnmarshaller.getInstance(),
                          MethodSnapshotJsonUnmarshaller.getInstance()))
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return updateDeploymentResult;
  }
  public ScheduleActivityTaskFailedEventAttributes unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    ScheduleActivityTaskFailedEventAttributes scheduleActivityTaskFailedEventAttributes =
        new ScheduleActivityTaskFailedEventAttributes();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("activityType", targetDepth)) {
          context.nextToken();
          scheduleActivityTaskFailedEventAttributes.setActivityType(
              ActivityTypeJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("activityId", targetDepth)) {
          context.nextToken();
          scheduleActivityTaskFailedEventAttributes.setActivityId(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("cause", targetDepth)) {
          context.nextToken();
          scheduleActivityTaskFailedEventAttributes.setCause(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("decisionTaskCompletedEventId", targetDepth)) {
          context.nextToken();
          scheduleActivityTaskFailedEventAttributes.setDecisionTaskCompletedEventId(
              LongJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return scheduleActivityTaskFailedEventAttributes;
  }
  public WebACL unmarshall(JsonUnmarshallerContext context) throws Exception {
    WebACL webACL = new WebACL();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("WebACLId", targetDepth)) {
          context.nextToken();
          webACL.setWebACLId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          webACL.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("MetricName", targetDepth)) {
          context.nextToken();
          webACL.setMetricName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("DefaultAction", targetDepth)) {
          context.nextToken();
          webACL.setDefaultAction(WafActionJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Rules", targetDepth)) {
          context.nextToken();
          webACL.setRules(
              new ListUnmarshaller<ActivatedRule>(ActivatedRuleJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return webACL;
  }
  public Shard unmarshall(JsonUnmarshallerContext context) throws Exception {
    Shard shard = new Shard();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("ShardId", targetDepth)) {
          context.nextToken();
          shard.setShardId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ParentShardId", targetDepth)) {
          context.nextToken();
          shard.setParentShardId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("AdjacentParentShardId", targetDepth)) {
          context.nextToken();
          shard.setAdjacentParentShardId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("HashKeyRange", targetDepth)) {
          context.nextToken();
          shard.setHashKeyRange(HashKeyRangeJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("SequenceNumberRange", targetDepth)) {
          context.nextToken();
          shard.setSequenceNumberRange(
              SequenceNumberRangeJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return shard;
  }
  public VaultAccessPolicy unmarshall(JsonUnmarshallerContext context) throws Exception {
    VaultAccessPolicy vaultAccessPolicy = new VaultAccessPolicy();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Policy", targetDepth)) {
          context.nextToken();
          vaultAccessPolicy.setPolicy(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return vaultAccessPolicy;
  }
  public DeleteRequest unmarshall(JsonUnmarshallerContext context) throws Exception {
    DeleteRequest deleteRequest = new DeleteRequest();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Key", targetDepth)) {
          context.nextToken();
          deleteRequest.setKey(
              new MapUnmarshaller<String, AttributeValue>(
                      StringJsonUnmarshaller.getInstance(),
                      AttributeValueJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return deleteRequest;
  }
  public ListRunsResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ListRunsResult listRunsResult = new ListRunsResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("runs", targetDepth)) {
          context.nextToken();
          listRunsResult.setRuns(
              new ListUnmarshaller<Run>(RunJsonUnmarshaller.getInstance()).unmarshall(context));
        }
        if (context.testExpression("nextToken", targetDepth)) {
          context.nextToken();
          listRunsResult.setNextToken(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return listRunsResult;
  }
  public BootstrapActionConfig unmarshall(JsonUnmarshallerContext context) throws Exception {
    BootstrapActionConfig bootstrapActionConfig = new BootstrapActionConfig();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          bootstrapActionConfig.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ScriptBootstrapAction", targetDepth)) {
          context.nextToken();
          bootstrapActionConfig.setScriptBootstrapAction(
              ScriptBootstrapActionConfigJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return bootstrapActionConfig;
  }
  public RetrieveDomainAuthCodeResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    RetrieveDomainAuthCodeResult retrieveDomainAuthCodeResult = new RetrieveDomainAuthCodeResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("AuthCode", targetDepth)) {
          context.nextToken();
          retrieveDomainAuthCodeResult.setAuthCode(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return retrieveDomainAuthCodeResult;
  }
  public AddUploadBufferResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    AddUploadBufferResult addUploadBufferResult = new AddUploadBufferResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("GatewayARN", targetDepth)) {
          context.nextToken();
          addUploadBufferResult.setGatewayARN(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return addUploadBufferResult;
  }
  public DataRetrievalRule unmarshall(JsonUnmarshallerContext context) throws Exception {
    DataRetrievalRule dataRetrievalRule = new DataRetrievalRule();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Strategy", targetDepth)) {
          context.nextToken();
          dataRetrievalRule.setStrategy(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("BytesPerHour", targetDepth)) {
          context.nextToken();
          dataRetrievalRule.setBytesPerHour(LongJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }

      token = context.nextToken();
    }

    return dataRetrievalRule;
  }
  public DeleteItemResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    DeleteItemResult deleteItemResult = new DeleteItemResult();

    int originalDepth = context.getCurrentDepth();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Attributes", targetDepth)) {
          deleteItemResult.setAttributes(
              new MapUnmarshaller<String, AttributeValue>(
                      StringJsonUnmarshaller.getInstance(),
                      AttributeValueJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("ConsumedCapacityUnits", targetDepth)) {
          context.nextToken();
          deleteItemResult.setConsumedCapacityUnits(
              DoubleJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getCurrentDepth() <= originalDepth) break;
      }

      token = context.nextToken();
    }

    return deleteItemResult;
  }
  public BatchResponse unmarshall(JsonUnmarshallerContext context) throws Exception {
    BatchResponse batchResponse = new BatchResponse();

    int originalDepth = context.getCurrentDepth();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Items", targetDepth)) {
          batchResponse.setItems(
              new ListUnmarshaller<java.util.Map<String, AttributeValue>>(
                      new MapUnmarshaller<String, AttributeValue>(
                          StringJsonUnmarshaller.getInstance(),
                          AttributeValueJsonUnmarshaller.getInstance()))
                  .unmarshall(context));
        }
        if (context.testExpression("ConsumedCapacityUnits", targetDepth)) {
          context.nextToken();
          batchResponse.setConsumedCapacityUnits(
              DoubleJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getCurrentDepth() <= originalDepth) break;
      }

      token = context.nextToken();
    }

    return batchResponse;
  }
  public KMSEncryptionConfig unmarshall(JsonUnmarshallerContext context) throws Exception {
    KMSEncryptionConfig kMSEncryptionConfig = new KMSEncryptionConfig();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("AWSKMSKeyARN", targetDepth)) {
          context.nextToken();
          kMSEncryptionConfig.setAWSKMSKeyARN(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return kMSEncryptionConfig;
  }