text:
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// ** This file is automatically generated by gapic-generator-typescript. **
// ** https://github.com/googleapis/gapic-generator-typescript **
// ** All changes to this file may be overwritten. **

/* global window */
import type * as gax from 'google-gax';
import type {
  Callback,
  CallOptions,
  Descriptors,
  ClientOptions,
  GrpcClientOptions,
  LROperation,
  PaginationCallback,
  GaxCall,
} from 'google-gax';
import {Transform} from 'stream';
import * as protos from '../../protos/protos';
import jsonProtos = require('../../protos/protos.json');
/**
 * Client JSON configuration object, loaded from
 * `src/v3/tag_values_client_config.json`.
 * This file defines retry strategy and timeouts for all API methods in this library.
 */
import * as gapicConfig from './tag_values_client_config.json';
const version = require('../../../package.json').version;

/**
 *  Allow users to create and manage tag values.
 * @class
 * @memberof v3
 */
export class TagValuesClient {
  private _terminated = false;
  private _opts: ClientOptions;
  private _providedCustomServicePath: boolean;
  private _gaxModule: typeof gax | typeof gax.fallback;
  private _gaxGrpc: gax.GrpcClient | gax.fallback.GrpcClient;
  private _protos: {};
  private _defaults: {[method: string]: gax.CallSettings};
  auth: gax.GoogleAuth;
  descriptors: Descriptors = {
    page: {},
    stream: {},
    longrunning: {},
    batching: {},
  };
  warn: (code: string, message: string, warnType?: string) => void;
  innerApiCalls: {[name: string]: Function};
  pathTemplates: {[name: string]: gax.PathTemplate};
  operationsClient: gax.OperationsClient;
  tagValuesStub?: Promise<{[name: string]: Function}>;

  /**
   * Construct an instance of TagValuesClient.
   *
   * @param {object} [options] - The configuration object.
   * The options accepted by the constructor are described in detail
   * in [this document](https://github.com/googleapis/gax-nodejs/blob/main/client-libraries.md#creating-the-client-instance).
   * The common options are:
   * @param {object} [options.credentials] - Credentials object.
   * @param {string} [options.credentials.client_email]
   * @param {string} [options.credentials.private_key]
   * @param {string} [options.email] - Account email address. Required when
   *     using a .pem or .p12 keyFilename.
   * @param {string} [options.keyFilename] - Full path to the a .json, .pem, or
   *     .p12 key downloaded from the Google Developers Console. If you provide
   *     a path to a JSON file, the projectId option below is not necessary.
   *     NOTE: .pem and .p12 require you to specify options.email as well.
   * @param {number} [options.port] - The port on which to connect to
   *     the remote host.
   * @param {string} [options.projectId] - The project ID from the Google
   *     Developer's Console, e.g. 'grape-spaceship-123'. We will also check
   *     the environment variable GCLOUD_PROJECT for your project ID. If your
   *     app is running in an environment which supports
   *     {@link https://developers.google.com/identity/protocols/application-default-credentials Application Default Credentials},
   *     your project ID will be detected automatically.
   * @param {string} [options.apiEndpoint] - The domain name of the
   *     API remote host.
   * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override.
   *     Follows the structure of {@link gapicConfig}.
   * @param {boolean | "rest"} [options.fallback] - Use HTTP fallback mode.
   *     Pass "rest" to use HTTP/1.1 REST API instead of gRPC.
   *     For more information, please check the
   *     {@link https://github.com/googleapis/gax-nodejs/blob/main/client-libraries.md#http11-rest-api-mode documentation}.
   * @param {gax} [gaxInstance]: loaded instance of `google-gax`. Useful if you
   *     need to avoid loading the default gRPC version and want to use the fallback
   *     HTTP implementation. Load only fallback version and pass it to the constructor:
   *     ```
   *     const gax = require('google-gax/build/src/fallback'); // avoids loading google-gax with gRPC
   *     const client = new TagValuesClient({fallback: 'rest'}, gax);
   *     ```
   */
  constructor(
    opts?: ClientOptions,
    gaxInstance?: typeof gax | typeof gax.fallback
  ) {
    // Ensure that options include all the required fields.
    const staticMembers = this.constructor as typeof TagValuesClient;
    const servicePath =
      opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath;
    this._providedCustomServicePath = !!(
      opts?.servicePath || opts?.apiEndpoint
    );
    const port = opts?.port || staticMembers.port;
    const clientConfig = opts?.clientConfig ?? {};
    const fallback =
      opts?.fallback ??
      (typeof window !== 'undefined' && typeof window?.fetch === 'function');
    opts = Object.assign({servicePath, port, clientConfig, fallback}, opts);

    // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case.
    if (servicePath !== staticMembers.servicePath && !('scopes' in opts)) {
      opts['scopes'] = staticMembers.scopes;
    }

    // Load google-gax module synchronously if needed
    if (!gaxInstance) {
      gaxInstance = require('google-gax') as typeof gax;
    }

    // Choose either gRPC or proto-over-HTTP implementation of google-gax.
    this._gaxModule = opts.fallback ? gaxInstance.fallback : gaxInstance;

    // Create a `gaxGrpc` object, with any grpc-specific options sent to the client.
    this._gaxGrpc = new this._gaxModule.GrpcClient(opts);

    // Save options to use in initialize() method.
    this._opts = opts;

    // Save the auth object to the client, for use by other methods.
    this.auth = this._gaxGrpc.auth as gax.GoogleAuth;

    // Set useJWTAccessWithScope on the auth object.
    this.auth.useJWTAccessWithScope = true;

    // Set defaultServicePath on the auth object.
    this.auth.defaultServicePath = staticMembers.servicePath;

    // Set the default scopes in auth client if needed.
    if (servicePath === staticMembers.servicePath) {
      this.auth.defaultScopes = staticMembers.scopes;
    }

    // Determine the client header string.
    const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`];
    if (typeof process !== 'undefined' && 'versions' in process) {
      clientHeader.push(`gl-node/${process.versions.node}`);
    } else {
      clientHeader.push(`gl-web/${this._gaxModule.version}`);
    }
    if (!opts.fallback) {
      clientHeader.push(`grpc/${this._gaxGrpc.grpcVersion}`);
    } else if (opts.fallback === 'rest') {
      clientHeader.push(`rest/${this._gaxGrpc.grpcVersion}`);
    }
    if (opts.libName && opts.libVersion) {
      clientHeader.push(`${opts.libName}/${opts.libVersion}`);
    }
    // Load the applicable protos.
    this._protos = this._gaxGrpc.loadProtoJSON(jsonProtos);

    // This API contains "path templates"; forward-slash-separated
    // identifiers to uniquely identify resources within the API.
    // Create useful helper objects for these.
    this.pathTemplates = {
      folderPathTemplate: new this._gaxModule.PathTemplate('folders/{folder}'),
      organizationPathTemplate: new this._gaxModule.PathTemplate(
        'organizations/{organization}'
      ),
      projectPathTemplate: new this._gaxModule.PathTemplate(
        'projects/{project}'
      ),
      tagBindingPathTemplate: new this._gaxModule.PathTemplate(
        'tagBindings/{tag_binding}'
      ),
      tagKeyPathTemplate: new this._gaxModule.PathTemplate('tagKeys/{tag_key}'),
      tagValuePathTemplate: new this._gaxModule.PathTemplate(
        'tagValues/{tag_value}'
      ),
    };

    // Some of the methods on this service return "paged" results,
    // (e.g. 50 results at a time, with tokens to get subsequent
    // pages). Denote the keys used for pagination and results.
    this.descriptors.page = {
      listTagValues: new this._gaxModule.PageDescriptor(
        'pageToken',
        'nextPageToken',
        'tagValues'
      ),
    };

    const protoFilesRoot = this._gaxModule.protobuf.Root.fromJSON(jsonProtos);
    // This API contains "long-running operations", which return a
    // an Operation object that allows for tracking of the operation,
    // rather than holding a request open.
    const lroOptions: GrpcClientOptions = {
      auth: this.auth,
      grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined,
    };
    if (opts.fallback === 'rest') {
      lroOptions.protoJson = protoFilesRoot;
      lroOptions.httpRules = [
        {
          selector: 'google.longrunning.Operations.GetOperation',
          get: '/v3/{name=operations/**}',
        },
      ];
    }
    this.operationsClient = this._gaxModule
      .lro(lroOptions)
      .operationsClient(opts);
    const createTagValueResponse = protoFilesRoot.lookup(
      '.google.cloud.resourcemanager.v3.TagValue'
    ) as gax.protobuf.Type;
    const createTagValueMetadata = protoFilesRoot.lookup(
      '.google.cloud.resourcemanager.v3.CreateTagValueMetadata'
    ) as gax.protobuf.Type;
    const updateTagValueResponse = protoFilesRoot.lookup(
      '.google.cloud.resourcemanager.v3.TagValue'
    ) as gax.protobuf.Type;
    const updateTagValueMetadata = protoFilesRoot.lookup(
      '.google.cloud.resourcemanager.v3.UpdateTagValueMetadata'
    ) as gax.protobuf.Type;
    const deleteTagValueResponse = protoFilesRoot.lookup(
      '.google.cloud.resourcemanager.v3.TagValue'
    ) as gax.protobuf.Type;
    const deleteTagValueMetadata = protoFilesRoot.lookup(
      '.google.cloud.resourcemanager.v3.DeleteTagValueMetadata'
    ) as gax.protobuf.Type;

    this.descriptors.longrunning = {
      createTagValue: new this._gaxModule.LongrunningDescriptor(
        this.operationsClient,
        createTagValueResponse.decode.bind(createTagValueResponse),
        createTagValueMetadata.decode.bind(createTagValueMetadata)
      ),
      updateTagValue: new this._gaxModule.LongrunningDescriptor(
        this.operationsClient,
        updateTagValueResponse.decode.bind(updateTagValueResponse),
        updateTagValueMetadata.decode.bind(updateTagValueMetadata)
      ),
      deleteTagValue: new this._gaxModule.LongrunningDescriptor(
        this.operationsClient,
        deleteTagValueResponse.decode.bind(deleteTagValueResponse),
        deleteTagValueMetadata.decode.bind(deleteTagValueMetadata)
      ),
    };

    // Put together the default options sent with requests.
    this._defaults = this._gaxGrpc.constructSettings(
      'google.cloud.resourcemanager.v3.TagValues',
      gapicConfig as gax.ClientConfig,
      opts.clientConfig || {},
      {'x-goog-api-client': clientHeader.join(' ')}
    );

    // Set up a dictionary of "inner API calls"; the core implementation
    // of calling the API is handled in `google-gax`, with this code
    // merely providing the destination and request information.
    this.innerApiCalls = {};

    // Add a warn function to the client constructor so it can be easily tested.
    this.warn = this._gaxModule.warn;
  }

  /**
   * Initialize the client.
   * Performs asynchronous operations (such as authentication) and prepares the client.
   * This function will be called automatically when any class method is called for the
   * first time, but if you need to initialize it before calling an actual method,
   * feel free to call initialize() directly.
   *
   * You can await on this method if you want to make sure the client is initialized.
   *
   * @returns {Promise} A promise that resolves to an authenticated service stub.
   */
  initialize() {
    // If the client stub promise is already initialized, return immediately.
    if (this.tagValuesStub) {
      return this.tagValuesStub;
    }

    // Put together the "service stub" for
    // google.cloud.resourcemanager.v3.TagValues.
    this.tagValuesStub = this._gaxGrpc.createStub(
      this._opts.fallback
        ? (this._protos as protobuf.Root).lookupService(
            'google.cloud.resourcemanager.v3.TagValues'
          )
        : // eslint-disable-next-line @typescript-eslint/no-explicit-any
          (this._protos as any).google.cloud.resourcemanager.v3.TagValues,
      this._opts,
      this._providedCustomServicePath
    ) as Promise<{[method: string]: Function}>;

    // Iterate over each of the methods that the service provides
    // and create an API call method for each.
    const tagValuesStubMethods = [
      'listTagValues',
      'getTagValue',
      'createTagValue',
      'updateTagValue',
      'deleteTagValue',
      'getIamPolicy',
      'setIamPolicy',
      'testIamPermissions',
    ];
    for (const methodName of tagValuesStubMethods) {
      const callPromise = this.tagValuesStub.then(
        stub =>
          (...args: Array<{}>) => {
            if (this._terminated) {
              return Promise.reject('The client has already been closed.');
            }
            const func = stub[methodName];
            return func.apply(stub, args);
          },
        (err: Error | null | undefined) => () => {
          throw err;
        }
      );

      const descriptor =
        this.descriptors.page[methodName] ||
        this.descriptors.longrunning[methodName] ||
        undefined;
      const apiCall = this._gaxModule.createApiCall(
        callPromise,
        this._defaults[methodName],
        descriptor,
        this._opts.fallback
      );

      this.innerApiCalls[methodName] = apiCall;
    }

    return this.tagValuesStub;
  }

  /**
   * The DNS address for this API service.
   * @returns {string} The DNS address for this service.
   */
  static get servicePath() {
    return 'cloudresourcemanager.googleapis.com';
  }

  /**
   * The DNS address for this API service - same as servicePath(),
   * exists for compatibility reasons.
   * @returns {string} The DNS address for this service.
   */
  static get apiEndpoint() {
    return 'cloudresourcemanager.googleapis.com';
  }

  /**
   * The port for this API service.
   * @returns {number} The default port for this service.
   */
  static get port() {
    return 443;
  }

  /**
   * The scopes needed to make gRPC calls for every method defined
   * in this service.
   * @returns {string[]} List of default scopes.
   */
  static get scopes() {
    return [
      'https://www.googleapis.com/auth/cloud-platform',
      'https://www.googleapis.com/auth/cloud-platform.read-only',
    ];
  }

  getProjectId(): Promise<string>;
  getProjectId(callback: Callback<string, undefined, undefined>): void;
  /**
   * Return the project ID used by this class.
   * @returns {Promise} A promise that resolves to string containing the project ID.
   */
  getProjectId(
    callback?: Callback<string, undefined, undefined>
  ): Promise<string> | void {
    if (callback) {
      this.auth.getProjectId(callback);
      return;
    }
    return this.auth.getProjectId();
  }

  // -------------------
  // -- Service calls --
  // -------------------
  /**
   * Retrieves TagValue. If the TagValue or namespaced name does not exist, or
   * if the user does not have permission to view it, this method will return
   * `PERMISSION_DENIED`.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.name
   *   Required. Resource name for TagValue to be fetched in the format `tagValues/456`.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing [TagValue]{@link google.cloud.resourcemanager.v3.TagValue}.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.get_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_GetTagValue_async
   */
  getTagValue(
    request?: protos.google.cloud.resourcemanager.v3.IGetTagValueRequest,
    options?: CallOptions
  ): Promise<
    [
      protos.google.cloud.resourcemanager.v3.ITagValue,
      protos.google.cloud.resourcemanager.v3.IGetTagValueRequest | undefined,
      {} | undefined
    ]
  >;
  getTagValue(
    request: protos.google.cloud.resourcemanager.v3.IGetTagValueRequest,
    options: CallOptions,
    callback: Callback<
      protos.google.cloud.resourcemanager.v3.ITagValue,
      | protos.google.cloud.resourcemanager.v3.IGetTagValueRequest
      | null
      | undefined,
      {} | null | undefined
    >
  ): void;
  getTagValue(
    request: protos.google.cloud.resourcemanager.v3.IGetTagValueRequest,
    callback: Callback<
      protos.google.cloud.resourcemanager.v3.ITagValue,
      | protos.google.cloud.resourcemanager.v3.IGetTagValueRequest
      | null
      | undefined,
      {} | null | undefined
    >
  ): void;
  getTagValue(
    request?: protos.google.cloud.resourcemanager.v3.IGetTagValueRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          protos.google.cloud.resourcemanager.v3.ITagValue,
          | protos.google.cloud.resourcemanager.v3.IGetTagValueRequest
          | null
          | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      protos.google.cloud.resourcemanager.v3.ITagValue,
      | protos.google.cloud.resourcemanager.v3.IGetTagValueRequest
      | null
      | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      protos.google.cloud.resourcemanager.v3.ITagValue,
      protos.google.cloud.resourcemanager.v3.IGetTagValueRequest | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    options.otherArgs.headers['x-goog-request-params'] =
      this._gaxModule.routingHeader.fromParams({
        name: request.name ?? '',
      });
    this.initialize();
    return this.innerApiCalls.getTagValue(request, options, callback);
  }
  /**
   * Gets the access control policy for a TagValue. The returned policy may be
   * empty if no such policy or resource exists. The `resource` field should
   * be the TagValue's resource name. For example: `tagValues/1234`.
   * The caller must have the
   * `cloudresourcemanager.googleapis.com/tagValues.getIamPolicy` permission on
   * the identified TagValue to get the access control policy.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.resource
   *   REQUIRED: The resource for which the policy is being requested.
   *   See the operation documentation for the appropriate value for this field.
   * @param {google.iam.v1.GetPolicyOptions} request.options
   *   OPTIONAL: A `GetPolicyOptions` object for specifying options to
   *   `GetIamPolicy`.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing [Policy]{@link google.iam.v1.Policy}.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.get_iam_policy.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_GetIamPolicy_async
   */
  getIamPolicy(
    request?: protos.google.iam.v1.IGetIamPolicyRequest,
    options?: CallOptions
  ): Promise<
    [
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.IGetIamPolicyRequest | undefined,
      {} | undefined
    ]
  >;
  getIamPolicy(
    request: protos.google.iam.v1.IGetIamPolicyRequest,
    options: CallOptions,
    callback: Callback<
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.IGetIamPolicyRequest | null | undefined,
      {} | null | undefined
    >
  ): void;
  getIamPolicy(
    request: protos.google.iam.v1.IGetIamPolicyRequest,
    callback: Callback<
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.IGetIamPolicyRequest | null | undefined,
      {} | null | undefined
    >
  ): void;
  getIamPolicy(
    request?: protos.google.iam.v1.IGetIamPolicyRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          protos.google.iam.v1.IPolicy,
          protos.google.iam.v1.IGetIamPolicyRequest | null | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.IGetIamPolicyRequest | null | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.IGetIamPolicyRequest | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    options.otherArgs.headers['x-goog-request-params'] =
      this._gaxModule.routingHeader.fromParams({
        resource: request.resource ?? '',
      });
    this.initialize();
    return this.innerApiCalls.getIamPolicy(request, options, callback);
  }
  /**
   * Sets the access control policy on a TagValue, replacing any existing
   * policy. The `resource` field should be the TagValue's resource name.
   * For example: `tagValues/1234`.
   * The caller must have `resourcemanager.tagValues.setIamPolicy` permission
   * on the identified tagValue.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.resource
   *   REQUIRED: The resource for which the policy is being specified.
   *   See the operation documentation for the appropriate value for this field.
   * @param {google.iam.v1.Policy} request.policy
   *   REQUIRED: The complete policy to be applied to the `resource`. The size of
   *   the policy is limited to a few 10s of KB. An empty policy is a
   *   valid policy but certain Cloud Platform services (such as Projects)
   *   might reject them.
   * @param {google.protobuf.FieldMask} request.updateMask
   *   OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only
   *   the fields in the mask will be modified. If no mask is provided, the
   *   following default mask is used:
   *
   *   `paths: "bindings, etag"`
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing [Policy]{@link google.iam.v1.Policy}.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.set_iam_policy.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_SetIamPolicy_async
   */
  setIamPolicy(
    request?: protos.google.iam.v1.ISetIamPolicyRequest,
    options?: CallOptions
  ): Promise<
    [
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.ISetIamPolicyRequest | undefined,
      {} | undefined
    ]
  >;
  setIamPolicy(
    request: protos.google.iam.v1.ISetIamPolicyRequest,
    options: CallOptions,
    callback: Callback<
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.ISetIamPolicyRequest | null | undefined,
      {} | null | undefined
    >
  ): void;
  setIamPolicy(
    request: protos.google.iam.v1.ISetIamPolicyRequest,
    callback: Callback<
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.ISetIamPolicyRequest | null | undefined,
      {} | null | undefined
    >
  ): void;
  setIamPolicy(
    request?: protos.google.iam.v1.ISetIamPolicyRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          protos.google.iam.v1.IPolicy,
          protos.google.iam.v1.ISetIamPolicyRequest | null | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.ISetIamPolicyRequest | null | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      protos.google.iam.v1.IPolicy,
      protos.google.iam.v1.ISetIamPolicyRequest | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    options.otherArgs.headers['x-goog-request-params'] =
      this._gaxModule.routingHeader.fromParams({
        resource: request.resource ?? '',
      });
    this.initialize();
    return this.innerApiCalls.setIamPolicy(request, options, callback);
  }
  /**
   * Returns permissions that a caller has on the specified TagValue.
   * The `resource` field should be the TagValue's resource name. For example:
   * `tagValues/1234`.
   *
   * There are no permissions required for making this API call.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.resource
   *   REQUIRED: The resource for which the policy detail is being requested.
   *   See the operation documentation for the appropriate value for this field.
   * @param {string[]} request.permissions
   *   The set of permissions to check for the `resource`. Permissions with
   *   wildcards (such as '*' or 'storage.*') are not allowed. For more
   *   information see
   *   [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing [TestIamPermissionsResponse]{@link google.iam.v1.TestIamPermissionsResponse}.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.test_iam_permissions.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_TestIamPermissions_async
   */
  testIamPermissions(
    request?: protos.google.iam.v1.ITestIamPermissionsRequest,
    options?: CallOptions
  ): Promise<
    [
      protos.google.iam.v1.ITestIamPermissionsResponse,
      protos.google.iam.v1.ITestIamPermissionsRequest | undefined,
      {} | undefined
    ]
  >;
  testIamPermissions(
    request: protos.google.iam.v1.ITestIamPermissionsRequest,
    options: CallOptions,
    callback: Callback<
      protos.google.iam.v1.ITestIamPermissionsResponse,
      protos.google.iam.v1.ITestIamPermissionsRequest | null | undefined,
      {} | null | undefined
    >
  ): void;
  testIamPermissions(
    request: protos.google.iam.v1.ITestIamPermissionsRequest,
    callback: Callback<
      protos.google.iam.v1.ITestIamPermissionsResponse,
      protos.google.iam.v1.ITestIamPermissionsRequest | null | undefined,
      {} | null | undefined
    >
  ): void;
  testIamPermissions(
    request?: protos.google.iam.v1.ITestIamPermissionsRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          protos.google.iam.v1.ITestIamPermissionsResponse,
          protos.google.iam.v1.ITestIamPermissionsRequest | null | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      protos.google.iam.v1.ITestIamPermissionsResponse,
      protos.google.iam.v1.ITestIamPermissionsRequest | null | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      protos.google.iam.v1.ITestIamPermissionsResponse,
      protos.google.iam.v1.ITestIamPermissionsRequest | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    options.otherArgs.headers['x-goog-request-params'] =
      this._gaxModule.routingHeader.fromParams({
        resource: request.resource ?? '',
      });
    this.initialize();
    return this.innerApiCalls.testIamPermissions(request, options, callback);
  }

  /**
   * Creates a TagValue as a child of the specified TagKey. If a another
   * request with the same parameters is sent while the original request is in
   * process the second request will receive an error. A maximum of 300
   * TagValues can exist under a TagKey at any given time.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {google.cloud.resourcemanager.v3.TagValue} request.tagValue
   *   Required. The TagValue to be created. Only fields `short_name`, `description`,
   *   and `parent` are considered during the creation request.
   * @param {boolean} [request.validateOnly]
   *   Optional. Set as true to perform the validations necessary for creating the resource,
   *   but not actually perform the action.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing
   *   a long running operation. Its `promise()` method returns a promise
   *   you can `await` for.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.create_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_CreateTagValue_async
   */
  createTagValue(
    request?: protos.google.cloud.resourcemanager.v3.ICreateTagValueRequest,
    options?: CallOptions
  ): Promise<
    [
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.ICreateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | undefined,
      {} | undefined
    ]
  >;
  createTagValue(
    request: protos.google.cloud.resourcemanager.v3.ICreateTagValueRequest,
    options: CallOptions,
    callback: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.ICreateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): void;
  createTagValue(
    request: protos.google.cloud.resourcemanager.v3.ICreateTagValueRequest,
    callback: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.ICreateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): void;
  createTagValue(
    request?: protos.google.cloud.resourcemanager.v3.ICreateTagValueRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          LROperation<
            protos.google.cloud.resourcemanager.v3.ITagValue,
            protos.google.cloud.resourcemanager.v3.ICreateTagValueMetadata
          >,
          protos.google.longrunning.IOperation | null | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.ICreateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.ICreateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    this.initialize();
    return this.innerApiCalls.createTagValue(request, options, callback);
  }
  /**
   * Check the status of the long running operation returned by `createTagValue()`.
   * @param {String} name
   *   The operation name that will be passed.
   * @returns {Promise} - The promise which resolves to an object.
   *   The decoded operation object has result and metadata field to get information from.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.create_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_CreateTagValue_async
   */
  async checkCreateTagValueProgress(
    name: string
  ): Promise<
    LROperation<
      protos.google.cloud.resourcemanager.v3.TagValue,
      protos.google.cloud.resourcemanager.v3.CreateTagValueMetadata
    >
  > {
    const request =
      new this._gaxModule.operationsProtos.google.longrunning.GetOperationRequest(
        {name}
      );
    const [operation] = await this.operationsClient.getOperation(request);
    const decodeOperation = new this._gaxModule.Operation(
      operation,
      this.descriptors.longrunning.createTagValue,
      this._gaxModule.createDefaultBackoffSettings()
    );
    return decodeOperation as LROperation<
      protos.google.cloud.resourcemanager.v3.TagValue,
      protos.google.cloud.resourcemanager.v3.CreateTagValueMetadata
    >;
  }
  /**
   * Updates the attributes of the TagValue resource.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {google.cloud.resourcemanager.v3.TagValue} request.tagValue
   *   Required. The new definition of the TagValue. Only fields `description` and `etag`
   *   fields can be updated by this request. If the `etag` field is nonempty, it
   *   must match the `etag` field of the existing ControlGroup. Otherwise,
   *   `FAILED_PRECONDITION` will be returned.
   * @param {google.protobuf.FieldMask} [request.updateMask]
   *   Optional. Fields to be updated.
   * @param {boolean} [request.validateOnly]
   *   Optional. True to perform validations necessary for updating the resource, but not
   *   actually perform the action.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing
   *   a long running operation. Its `promise()` method returns a promise
   *   you can `await` for.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.update_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_UpdateTagValue_async
   */
  updateTagValue(
    request?: protos.google.cloud.resourcemanager.v3.IUpdateTagValueRequest,
    options?: CallOptions
  ): Promise<
    [
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IUpdateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | undefined,
      {} | undefined
    ]
  >;
  updateTagValue(
    request: protos.google.cloud.resourcemanager.v3.IUpdateTagValueRequest,
    options: CallOptions,
    callback: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IUpdateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): void;
  updateTagValue(
    request: protos.google.cloud.resourcemanager.v3.IUpdateTagValueRequest,
    callback: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IUpdateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): void;
  updateTagValue(
    request?: protos.google.cloud.resourcemanager.v3.IUpdateTagValueRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          LROperation<
            protos.google.cloud.resourcemanager.v3.ITagValue,
            protos.google.cloud.resourcemanager.v3.IUpdateTagValueMetadata
          >,
          protos.google.longrunning.IOperation | null | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IUpdateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IUpdateTagValueMetadata
      >,
      protos.google.longrunning.IOperation | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    options.otherArgs.headers['x-goog-request-params'] =
      this._gaxModule.routingHeader.fromParams({
        'tag_value.name': request.tagValue!.name ?? '',
      });
    this.initialize();
    return this.innerApiCalls.updateTagValue(request, options, callback);
  }
  /**
   * Check the status of the long running operation returned by `updateTagValue()`.
   * @param {String} name
   *   The operation name that will be passed.
   * @returns {Promise} - The promise which resolves to an object.
   *   The decoded operation object has result and metadata field to get information from.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.update_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_UpdateTagValue_async
   */
  async checkUpdateTagValueProgress(
    name: string
  ): Promise<
    LROperation<
      protos.google.cloud.resourcemanager.v3.TagValue,
      protos.google.cloud.resourcemanager.v3.UpdateTagValueMetadata
    >
  > {
    const request =
      new this._gaxModule.operationsProtos.google.longrunning.GetOperationRequest(
        {name}
      );
    const [operation] = await this.operationsClient.getOperation(request);
    const decodeOperation = new this._gaxModule.Operation(
      operation,
      this.descriptors.longrunning.updateTagValue,
      this._gaxModule.createDefaultBackoffSettings()
    );
    return decodeOperation as LROperation<
      protos.google.cloud.resourcemanager.v3.TagValue,
      protos.google.cloud.resourcemanager.v3.UpdateTagValueMetadata
    >;
  }
  /**
   * Deletes a TagValue. The TagValue cannot have any bindings when it is
   * deleted.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.name
   *   Required. Resource name for TagValue to be deleted in the format tagValues/456.
   * @param {boolean} [request.validateOnly]
   *   Optional. Set as true to perform the validations necessary for deletion, but not
   *   actually perform the action.
   * @param {string} [request.etag]
   *   Optional. The etag known to the client for the expected state of the TagValue. This
   *   is to be used for optimistic concurrency.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is an object representing
   *   a long running operation. Its `promise()` method returns a promise
   *   you can `await` for.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.delete_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_DeleteTagValue_async
   */
  deleteTagValue(
    request?: protos.google.cloud.resourcemanager.v3.IDeleteTagValueRequest,
    options?: CallOptions
  ): Promise<
    [
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IDeleteTagValueMetadata
      >,
      protos.google.longrunning.IOperation | undefined,
      {} | undefined
    ]
  >;
  deleteTagValue(
    request: protos.google.cloud.resourcemanager.v3.IDeleteTagValueRequest,
    options: CallOptions,
    callback: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IDeleteTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): void;
  deleteTagValue(
    request: protos.google.cloud.resourcemanager.v3.IDeleteTagValueRequest,
    callback: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IDeleteTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): void;
  deleteTagValue(
    request?: protos.google.cloud.resourcemanager.v3.IDeleteTagValueRequest,
    optionsOrCallback?:
      | CallOptions
      | Callback<
          LROperation<
            protos.google.cloud.resourcemanager.v3.ITagValue,
            protos.google.cloud.resourcemanager.v3.IDeleteTagValueMetadata
          >,
          protos.google.longrunning.IOperation | null | undefined,
          {} | null | undefined
        >,
    callback?: Callback<
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IDeleteTagValueMetadata
      >,
      protos.google.longrunning.IOperation | null | undefined,
      {} | null | undefined
    >
  ): Promise<
    [
      LROperation<
        protos.google.cloud.resourcemanager.v3.ITagValue,
        protos.google.cloud.resourcemanager.v3.IDeleteTagValueMetadata
      >,
      protos.google.longrunning.IOperation | undefined,
      {} | undefined
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    options.otherArgs.headers['x-goog-request-params'] =
      this._gaxModule.routingHeader.fromParams({
        name: request.name ?? '',
      });
    this.initialize();
    return this.innerApiCalls.deleteTagValue(request, options, callback);
  }
  /**
   * Check the status of the long running operation returned by `deleteTagValue()`.
   * @param {String} name
   *   The operation name that will be passed.
   * @returns {Promise} - The promise which resolves to an object.
   *   The decoded operation object has result and metadata field to get information from.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.delete_tag_value.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_DeleteTagValue_async
   */
  async checkDeleteTagValueProgress(
    name: string
  ): Promise<
    LROperation<
      protos.google.cloud.resourcemanager.v3.TagValue,
      protos.google.cloud.resourcemanager.v3.DeleteTagValueMetadata
    >
  > {
    const request =
      new this._gaxModule.operationsProtos.google.longrunning.GetOperationRequest(
        {name}
      );
    const [operation] = await this.operationsClient.getOperation(request);
    const decodeOperation = new this._gaxModule.Operation(
      operation,
      this.descriptors.longrunning.deleteTagValue,
      this._gaxModule.createDefaultBackoffSettings()
    );
    return decodeOperation as LROperation<
      protos.google.cloud.resourcemanager.v3.TagValue,
      protos.google.cloud.resourcemanager.v3.DeleteTagValueMetadata
    >;
  }
  /**
   * Lists all TagValues for a specific TagKey.
   *
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.parent
   *   Required. Resource name for TagKey, parent of the TagValues to be listed,
   *   in the format `tagKeys/123`.
   * @param {number} [request.pageSize]
   *   Optional. The maximum number of TagValues to return in the response. The server
   *   allows a maximum of 300 TagValues to return. If unspecified, the server
   *   will use 100 as the default.
   * @param {string} [request.pageToken]
   *   Optional. A pagination token returned from a previous call to `ListTagValues`
   *   that indicates where this listing should continue from.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Promise} - The promise which resolves to an array.
   *   The first element of the array is Array of [TagValue]{@link google.cloud.resourcemanager.v3.TagValue}.
   *   The client library will perform auto-pagination by default: it will call the API as many
   *   times as needed and will merge results from all the pages into this array.
   *   Note that it can affect your quota.
   *   We recommend using `listTagValuesAsync()`
   *   method described below for async iteration which you can stop as needed.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination)
   *   for more details and examples.
   */
  listTagValues(
    request?: protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
    options?: CallOptions
  ): Promise<
    [
      protos.google.cloud.resourcemanager.v3.ITagValue[],
      protos.google.cloud.resourcemanager.v3.IListTagValuesRequest | null,
      protos.google.cloud.resourcemanager.v3.IListTagValuesResponse
    ]
  >;
  listTagValues(
    request: protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
    options: CallOptions,
    callback: PaginationCallback<
      protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
      | protos.google.cloud.resourcemanager.v3.IListTagValuesResponse
      | null
      | undefined,
      protos.google.cloud.resourcemanager.v3.ITagValue
    >
  ): void;
  listTagValues(
    request: protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
    callback: PaginationCallback<
      protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
      | protos.google.cloud.resourcemanager.v3.IListTagValuesResponse
      | null
      | undefined,
      protos.google.cloud.resourcemanager.v3.ITagValue
    >
  ): void;
  listTagValues(
    request?: protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
    optionsOrCallback?:
      | CallOptions
      | PaginationCallback<
          protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
          | protos.google.cloud.resourcemanager.v3.IListTagValuesResponse
          | null
          | undefined,
          protos.google.cloud.resourcemanager.v3.ITagValue
        >,
    callback?: PaginationCallback<
      protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
      | protos.google.cloud.resourcemanager.v3.IListTagValuesResponse
      | null
      | undefined,
      protos.google.cloud.resourcemanager.v3.ITagValue
    >
  ): Promise<
    [
      protos.google.cloud.resourcemanager.v3.ITagValue[],
      protos.google.cloud.resourcemanager.v3.IListTagValuesRequest | null,
      protos.google.cloud.resourcemanager.v3.IListTagValuesResponse
    ]
  > | void {
    request = request || {};
    let options: CallOptions;
    if (typeof optionsOrCallback === 'function' && callback === undefined) {
      callback = optionsOrCallback;
      options = {};
    } else {
      options = optionsOrCallback as CallOptions;
    }
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    this.initialize();
    return this.innerApiCalls.listTagValues(request, options, callback);
  }

  /**
   * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object.
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.parent
   *   Required. Resource name for TagKey, parent of the TagValues to be listed,
   *   in the format `tagKeys/123`.
   * @param {number} [request.pageSize]
   *   Optional. The maximum number of TagValues to return in the response. The server
   *   allows a maximum of 300 TagValues to return. If unspecified, the server
   *   will use 100 as the default.
   * @param {string} [request.pageToken]
   *   Optional. A pagination token returned from a previous call to `ListTagValues`
   *   that indicates where this listing should continue from.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Stream}
   *   An object stream which emits an object representing [TagValue]{@link google.cloud.resourcemanager.v3.TagValue} on 'data' event.
   *   The client library will perform auto-pagination by default: it will call the API as many
   *   times as needed. Note that it can affect your quota.
   *   We recommend using `listTagValuesAsync()`
   *   method described below for async iteration which you can stop as needed.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination)
   *   for more details and examples.
   */
  listTagValuesStream(
    request?: protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
    options?: CallOptions
  ): Transform {
    request = request || {};
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    const defaultCallSettings = this._defaults['listTagValues'];
    const callSettings = defaultCallSettings.merge(options);
    this.initialize();
    return this.descriptors.page.listTagValues.createStream(
      this.innerApiCalls.listTagValues as GaxCall,
      request,
      callSettings
    );
  }

  /**
   * Equivalent to `listTagValues`, but returns an iterable object.
   *
   * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand.
   * @param {Object} request
   *   The request object that will be sent.
   * @param {string} request.parent
   *   Required. Resource name for TagKey, parent of the TagValues to be listed,
   *   in the format `tagKeys/123`.
   * @param {number} [request.pageSize]
   *   Optional. The maximum number of TagValues to return in the response. The server
   *   allows a maximum of 300 TagValues to return. If unspecified, the server
   *   will use 100 as the default.
   * @param {string} [request.pageToken]
   *   Optional. A pagination token returned from a previous call to `ListTagValues`
   *   that indicates where this listing should continue from.
   * @param {object} [options]
   *   Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details.
   * @returns {Object}
   *   An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols).
   *   When you iterate the returned iterable, each element will be an object representing
   *   [TagValue]{@link google.cloud.resourcemanager.v3.TagValue}. The API will be called under the hood as needed, once per the page,
   *   so you can stop the iteration when you don't need more results.
   *   Please see the
   *   [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination)
   *   for more details and examples.
   * @example <caption>include:samples/generated/v3/tag_values.list_tag_values.js</caption>
   * region_tag:cloudresourcemanager_v3_generated_TagValues_ListTagValues_async
   */
  listTagValuesAsync(
    request?: protos.google.cloud.resourcemanager.v3.IListTagValuesRequest,
    options?: CallOptions
  ): AsyncIterable<protos.google.cloud.resourcemanager.v3.ITagValue> {
    request = request || {};
    options = options || {};
    options.otherArgs = options.otherArgs || {};
    options.otherArgs.headers = options.otherArgs.headers || {};
    const defaultCallSettings = this._defaults['listTagValues'];
    const callSettings = defaultCallSettings.merge(options);
    this.initialize();
    return this.descriptors.page.listTagValues.asyncIterate(
      this.innerApiCalls['listTagValues'] as GaxCall,
      request as {},
      callSettings
    ) as AsyncIterable<protos.google.cloud.resourcemanager.v3.ITagValue>;
  }
  // --------------------
  // -- Path templates --
  // --------------------

  /**
   * Return a fully-qualified folder resource name string.
   *
   * @param {string} folder
   * @returns {string} Resource name string.
   */
  folderPath(folder: string) {
    return this.pathTemplates.folderPathTemplate.render({
      folder: folder,
    });
  }

  /**
   * Parse the folder from Folder resource.
   *
   * @param {string} folderName
   *   A fully-qualified path representing Folder resource.
   * @returns {string} A string representing the folder.
   */
  matchFolderFromFolderName(folderName: string) {
    return this.pathTemplates.folderPathTemplate.match(folderName).folder;
  }

  /**
   * Return a fully-qualified organization resource name string.
   *
   * @param {string} organization
   * @returns {string} Resource name string.
   */
  organizationPath(organization: string) {
    return this.pathTemplates.organizationPathTemplate.render({
      organization: organization,
    });
  }

  /**
   * Parse the organization from Organization resource.
   *
   * @param {string} organizationName
   *   A fully-qualified path representing Organization resource.
   * @returns {string} A string representing the organization.
   */
  matchOrganizationFromOrganizationName(organizationName: string) {
    return this.pathTemplates.organizationPathTemplate.match(organizationName)
      .organization;
  }

  /**
   * Return a fully-qualified project resource name string.
   *
   * @param {string} project
   * @returns {string} Resource name string.
   */
  projectPath(project: string) {
    return this.pathTemplates.projectPathTemplate.render({
      project: project,
    });
  }

  /**
   * Parse the project from Project resource.
   *
   * @param {string} projectName
   *   A fully-qualified path representing Project resource.
   * @returns {string} A string representing the project.
   */
  matchProjectFromProjectName(projectName: string) {
    return this.pathTemplates.projectPathTemplate.match(projectName).project;
  }

  /**
   * Return a fully-qualified tagBinding resource name string.
   *
   * @param {string} tag_binding
   * @returns {string} Resource name string.
   */
  tagBindingPath(tagBinding: string) {
    return this.pathTemplates.tagBindingPathTemplate.render({
      tag_binding: tagBinding,
    });
  }

  /**
   * Parse the tag_binding from TagBinding resource.
   *
   * @param {string} tagBindingName
   *   A fully-qualified path representing TagBinding resource.
   * @returns {string} A string representing the tag_binding.
   */
  matchTagBindingFromTagBindingName(tagBindingName: string) {
    return this.pathTemplates.tagBindingPathTemplate.match(tagBindingName)
      .tag_binding;
  }

  /**
   * Return a fully-qualified tagKey resource name string.
   *
   * @param {string} tag_key
   * @returns {string} Resource name string.
   */
  tagKeyPath(tagKey: string) {
    return this.pathTemplates.tagKeyPathTemplate.render({
      tag_key: tagKey,
    });
  }

  /**
   * Parse the tag_key from TagKey resource.
   *
   * @param {string} tagKeyName
   *   A fully-qualified path representing TagKey resource.
   * @returns {string} A string representing the tag_key.
   */
  matchTagKeyFromTagKeyName(tagKeyName: string) {
    return this.pathTemplates.tagKeyPathTemplate.match(tagKeyName).tag_key;
  }

  /**
   * Return a fully-qualified tagValue resource name string.
   *
   * @param {string} tag_value
   * @returns {string} Resource name string.
   */
  tagValuePath(tagValue: string) {
    return this.pathTemplates.tagValuePathTemplate.render({
      tag_value: tagValue,
    });
  }

  /**
   * Parse the tag_value from TagValue resource.
   *
   * @param {string} tagValueName
   *   A fully-qualified path representing TagValue resource.
   * @returns {string} A string representing the tag_value.
   */
  matchTagValueFromTagValueName(tagValueName: string) {
    return this.pathTemplates.tagValuePathTemplate.match(tagValueName)
      .tag_value;
  }

  /**
   * Terminate the gRPC channel and close the client.
   *
   * The client will no longer be usable and all future behavior is undefined.
   * @returns {Promise} A promise that resolves when the client is closed.
   */
  close(): Promise<void> {
    if (this.tagValuesStub && !this._terminated) {
      return this.tagValuesStub.then(stub => {
        this._terminated = true;
        stub.close();
        this.operationsClient.close();
      });
    }
    return Promise.resolve();
  }
}


text:
Q: RedHat - how RPM may automatically select correct JVM version? I distributing my own RPM package, which contains of jar file. I targeting RHEL 8.
By default, on RHEL 8 installed Java 8. My jar requires Java 11.
In order to bring it and install "automatically" in case missing, inside my RPM "spec" I added dependency on Java 11 like this:
Requires:       java-11-openjdk-headless

...and indeed Java 11 package downloaded and installed together with mine.
In order to execute my jar I running the following command:
java -jar <my.jar>

However, seems like Java 8 is the one which being selected and my application fails to run properly. If I using "alternatives" and selecting Java 11 - everything works fine. But I want to provide my customers a "self-contained" RPM package, without need to perform additional manual steps. I don't want them to select the correct Java version, I want this to happen somehow by itself.
Is it possible somehow to automatically select correct Java version when my jar being executed?

A:
Is it possible somehow to automatically select correct Java version when my jar being executed?

If your customers run your application like this:
 $ java -jar some.jar

then it is NOT possible for your application to select the correct version of Java.  You are implicitly using the version of Java that is on the current search path; i.e. what java points at.  That is in the hands of the user.
If you want your application to chose the correct version, you will need to write a wrapper script that knows the pathnames for the directories where different Java versions are installed by the distro.  You should be able to work this out by following the symlinks from (say) /usr/bin/java to the actual executable.
There are two variations on this:

*

*You could have the installer script make the choice and embed that in the generated wrapper script.

*You could have the wrapper script make the choice itself, possibly with the guidance of a command-line option or an environment variable.

(Note that the /etc/alternatives mechanism doesn't directly help with this problem.  That allows the user to select a version of (say) the java command.  But that works by modifying the symlink chains for /usr/bin/java.  It affects everything that use /usr/bin/java ... not just your application.)
(Also, note that trying to do this with RPM dependencies won't work.  The dependencies ensure that the required version of Java is installed ... not that it is actually used.)

redpajama_set_name: RedPajamaStackExchange


Lincoln is working on keeping the consumer happy and excited at the same time. There are going to be some upgrades for the MKC 2017.
There is going to be new content and tech in the vehicle. Plus an auto hold lift gate and Sync 3. My car doesn't even have sync 3. I'm a bit jealous.
In short, the MKC 2017 looks like a car/SUV that is going to keep on giving.
If you need a loan? Click here to get fast approval!


stickpoll.me 9 out of 10 based on 326 ratings. 2,550 user reviews.
October 12, 2018 Hershey Treasures Although it usually focuses on American vintage vehicles, the world's biggest antique car swap meet and show sometimes provides surprises.


text:
Operations>Franchising
Inspire names industry veterans to top posts
Don Crocker to oversee development; Christopher Held to head supply chain
Ron Ruggless | Jun 12, 2019
Inspire Brands has named two industry veterans as chief development officer and chief supply officer, the company said Wednesday.
Atlanta-based Inspire said Don Crocker, left, formerly of Chick-fil-A Inc., will serve as chief development officer, leading company and franchise restaurant development, and Christopher Held will be chief supply officer, centralizing the supply chain functions of Buffalo Wild Wings, Sonic Drive-In and Rusty Taco and Arby's outside the United States.
Related: Inspire closes on Sonic acquisition
The company said "ARCOP, Arby's supply chain cooperative, will continue to manage Arby's U.S. supply chain and will work closely with the Inspire supply chain team to coordinate supplier relationships across the enterprise."
Crocker most recently was with Chick-fil-A Inc., where for more than two decades he served in a number of senior leadership roles within the company's real estate, restaurant development, and supply chain groups.
Related: Inspire Brands taps former Sephora, Walmart executive as CIO
"Don brings a wealth of experience in the restaurant industry," said Paul Brown, Inspire CEO, in a statement. "I am thrilled to work alongside him as we accelerate unit growth and welcome new franchisees to the Inspire family."
Held, left, most recently was with Restaurant Supply Chain Solutions, the supply-chain management organization for Yum Brands Inc. At RSCS, Chris served as senior vice president for Kentucky Fried Chicken, where he was responsible for leading the supply chain for 4,500 KFC locations.
"We are very excited to welcome Chris as part of the Inspire family," Brown said, citing his experience in the quick-service restaurant segment. "The centralization of our supply chain under Chris' leadership will allow us to fully leverage our combined scale in support of our brands."
Inspire Brands has more than 8,400 restaurants under its four brands and its systemwide sales exceeded $12.2 billion in 2018.
Contact Ron Ruggless at [email protected]
Follow him on Twitter: @RonRuggless
TAGS: Casual Dining People Supply Chain Quick Service

redpajama_set_name: RedPajamaCommonCrawl


The Cayman Islands Tourism Association is a non-profit association which represents its membership of just over 250 tourism related private businesses in the Cayman Islands. The various sectors within the Tourism Association include : Hotels, Condo/Villas, Watersports, Restaurants, Transportation, Attractions, Cruise and Allied (all other businesses associated with our tourism product).
It was formed in March 2001 through an amalgamation of the Cayman Tourism Alliance and the Cayman Islands Hotel and Condominium Association. The association is wholly funded by membership subscriptions and fundraising. CITA actively promotes the continuing improvement and development of Cayman's tourism Industry through the exchange of information, government relations, training and education, marketing, and events.
The Cayman Islands Tourism Association provides leadership, guidance and appropriate services for the benefit of its members and so contributes to a viable and sustainable tourism industry.
To encourage and support growth in our industry in a well - balanced manner, all short, medium and long-term tourism goals for the Country with clear intention and consideration towards our social, environmental and economic needs.
We commit to support members through services, initiatives, government and community relations to foster growth and success for our tourism industry.
A body in which private tourism businesses band together to speak to the issues facing our industry, share knowledge and experience for the greater good of our Country's tourism product.
To respect and lead the members of the Association and the Tourism industry forward with responsible, sustainable practices.
To reinforce and cultivate exceptional service, and distinct performance standards by exceeding our guests expectations.
The Cayman Islands Tourism Association is an association that is committed to supporting the tourism industry and it's member businesses through government relations (lobbying) and through initiatives that will drive the industry forward and meet the goals of the country. By working closely with Department of Tourism, CITA is able to contribute on behalf of it's membership towards the marketing, sales and promotional efforts that support the destination.
The CITA Board of Directors and their members clearly identified the economic intensity of Travel and Tourism to the Cayman Islands. Travel and Tourism permeate the depth and breadth of the general economy and the overall fabric of Cayman's society. Below are our top tourism issues and critical success factors.
Stay-Over Tourism - Ensuring growth of the stay-over industry through improved airport experience, marketing, and education.
Business Environment - Creating a business environment that allows the tourism sector to maximize delivery of the highest service levels at a price point in line with our target market.
Cruise Business - Enhancing the overall cruise passenger experience to stabilize and secure the number of cruise arrivals each year and generate repeat visits.
Embracing Cayman/Cayman Kind - Instilling a national culture and responsibility with a view to ensure tourism remains a strong pillar of the economy.
Environment - Highlighting environmental issues and best practices to remain competitive in the marketplace; supporting sustainable development for future generations while protecting the environment.
CITA continues to support efforts to enhance our tourism product with both physical assets and initiatives and with human capitol development. This needs to remain a priority for our industry and our country (with other industry's included) in order to maintain competitiveness and increase our market share.
The Association would not be possible without the commitment from our volunteer Board of Directors. The Board of Directors attend monthly meetings and are tasked to sit on various other committees throughout the year in order to ensure their sector and tourism as a whole is represented.


It feels like Friday today, but it's not Friday. It's Thursday. But I wish it was Friday, but it's not, it's only Thursday. Tomorrow will be Friday. I hope I will be just as excited tomorrow as i was this morning when I thought it was Friday, but it wasn't.
Thursday is the silent killer of days. Everybody knows about Mondays and braces for them. But by Thursday your guard is down, and Friday is gleaming in the distance like the Emerald City. But Thursday yanks you back to reality and sends flying monkeys to kidnap you.
i completely disagree. days of the week don't mean much to me anymore, but when i was in my last job and i hated everything about it, i always told myself that if i can make it through thursday, i will always have the office, which will sustain me through one more measly weekday. making it all the way to friday was too much. thursday was my strength. bless you, thursday.
Joel, that comment is so good, it should be its own post.
I feel that, kelli. maybe they did that on purpose, (those who love us at nbc) and were sympathetic for our need to make it through the week. thus, they scheduled The Office on Thursdays. Thanks, nbc.


On March 9, 2018, Alexandra Shapiro spoke at the "Prosecution After McDonnell and Beyond," symposium at Pace Law School. Speakers at the symposium included leading prosecutors, defense attorneys, and academics as well as a U.S. District Judge, who discussed some of the issues raised by McDonnell and how it is expected to impact the prosecution of public corruption cases. Ms. Shapiro represented former New York State Senate Majority Leader Dean Skelos in his successful appeal in the Second Circuit, and appeared on a panel addressing the scope of McDonnell and how it has affected prosecutors' ability to police public corruption.
A full recording of the panel featuring Ms. Shapiro can be viewed here.


Boasting a host of everyday functions, smartphones are the modern day Swiss Army knives. They've replaced our watches, books, travel passes and loyalty cards. And now, De La Rue – the British printer of secure documents and banknotes – is working on a way of adding your passport to that list.
Don't you just hate it when you've gone out for the night and as you approach your destination you notice that you've left your ID at home? As smartphones contain increasing amounts of personal information and are rarely out of reach, could they make this issue a thing of the past?
The World Economic Forum ranks Australia at just 18th in terms of countries that are 'digitally ready' – surprisingly low – due to slow internet speeds and a lack of infrastructure. But as media companies spend on online ads and mobile penetration goes up, Aussies are switching on to digital.


text:
Q: How to handle real time GPS data with ArcGIS Javascript API? I'm developing a web app using Arcgis Server 9.3.1 and Javascript API
I have a database with gps data from several vehicles and I need to display each vehicle real position in a map. I display this points in a Dynamic Layer, but I need to add an Identify action on hover, so I created a graphics layer, and every 10 seconds, I clear the graphics layer and query the database to get the new coordinates values, then, I create and add each point to the graphics layer, so I can hover over the features and ifentify them.
This is already working in IE and Firefox, but in Chrome this causes a memory overflow.
Does anyone have any suggestions to fix this? Thanks.


A variety of methods to track student performance in the online environment are available within your Blackboard course. Find out how to leverage the data available to you with the resources below, and contact STaR if you need assistance with collecting or interpreting performance data in your UA Little Rock online courses.
If you're looking for data regarding student activity in your course, an assortment of reports are available to you from the Evaluation menu that track usage across content areas. These reports count 'hits' — requests sent by the student to the Blackboard server when they click content links — and are best used to obtain a general sense of activity in the course.
Keep in mind that hits do not necessarily represent time spent on course activities, and other metrics may be necessary to understand how students interact with course content.
Try running multiple reports for small periods of time in favor of running a single report to see more detail.
Remember to pull reports periodically when necessary, as data available through the reporting tool in the course will eventually expire.
The performance dashboard offers quick access to summary information about user activity within your course, showing when they accessed and, depending on the setup of your course, what they viewed while they were there.
Blackboard can help identify at-risk students in a course by aggregating performance indicators like missed deadlines, low grades, and lack of activity within the course in a centralized area called the Retention Center. Here, you can also create rules to trigger notifications about at-risk students, and contact students in need of intervention directly from the Retention Center interface.


text:
Thompson Falls jazz trios
A Jazz Trio can help set the perfect mood for your event: weddings, birthdays, corporate functions, charitable events, and more. Add an air of sophistication to any occasion. Find one in the Thompson Falls, MT area on GigMasters today!
Montana /
Thompson Falls, MT Jazz Trios
Please note these Jazz Trios will also travel to Trout Creek, De Borgia, Saltese, Haugan, Plains, Mullan, Murray, Saint Regis, Wallace, Silverton, Paradise, Hot Springs, Lonepine, Osburn, Prichard, Avery, Noxon, Superior, Kellogg, Smelterville, Heron, Pinehurst, Marion, Kingston, Elmo, Calder, Kila, Proctor
Top Jazz Trios Near Thompson Falls, MT
V&G Entertainment
Classical Quartet from Vancouver, BC (370 miles from Thompson Falls, MT)
V & G Entertainment have been providing live music for weddings and other special events for over 20 years. Their roster of professional musicians will cater the perfect musical ensemble to your event. Requests are not only welcome, they are encouraged. Ensembles on the V & G roster include classical string quartets, jazz trios & quartets; cover/dance bands; solo cellists, violinists, pianists, harpists & bagpipers; their popular violin/guitar/cello trio and their flagship violin & guitar... (more)
The James Zeller Trio
Jazz Trio from San Francisco, CA (766 miles from Thompson Falls, MT)
If you're looking for a musical act to bring elegance, excitement and Jazz entertainment to your event, look no further than The James Zeller Trio! Now located in Northern, CA, following the leader's move back to the west coast from NYC, the trio is available regionally in all of California and along the west coast. Their fantastic repertoire is a unique and entertaining mix of swinging Jazz and timeless American Songbook classics from the 1920's-50's, New Orleans and Trad Jazz, classic... (more)
Jazz Trio from Boston, MA (2162 miles from Thompson Falls, MT)
Jazz Trio from New York City, NY (2076 miles from Thompson Falls, MT)
Jazz Trio from Houston, TX (1624 miles from Thompson Falls, MT)
String Quartet from New York City, NY (2075 miles from Thompson Falls, MT)
Jazz Ensemble from New York City, NY (2075 miles from Thompson Falls, MT)
Flamenco Duo from Chicago, IL (1401 miles from Thompson Falls, MT)
Jazz Quartet from Dublin, OH (1672 miles from Thompson Falls, MT)
A Cappella Group from Orlando, FL (2239 miles from Thompson Falls, MT)


The Real Estate Savings Center Network introduces Home Sellers to the growing number of REALTORS® throughout the United States that offer the unbeatable combination of Professional Services with Substantial Savings.
All Real Estate Brokers and Agents at the Real Estate Savings Center Network have at least 5-years of Home Listing, Marketing, and Selling, as well as Professional Buyer Representation experience. Importantly, our Network Members do not have to pay any marketing fees or referral fees, so they can afford to make the Greatest Savings Offers when it comes to selling your home and keeping a lot more of your equity at closing.
How much is my House Really Worth? Almost every Realtor offers a Free Comparative Market Analysis (CMA). Even if you know a good Realtor, it is a good idea to invite 3 Realtors over to see your property first-hand and to give you their personal opinions on how to price it, and how to get it ready for sale. Normally their estimates of Value will be close to the same if they are using the data on Homes that have Sold and that are currently on the market. Keep in mind that Buyer Agents and their Buyers also have access to the data so you homes value will be determined by how much a Buyer is willing to pay for it.
Are Realtor Fees Really Negotiable? Yes!Some Realtors do Negotiate their Listing, Marketing, and Selling Fee and some do not. However a growing number of Realtors and Real Estate Companies put their Services and Fees right upfront on their Websites. Competition in the Real Estate Marketplace continues to Real Estate Agent Fees down. You will find some Realtors at The Real Estate Savings Center Network offer the old 6% Full Service Listing today for 4% or less, and other Network Members may offer an "ala Carte Menu" of services and fees for your to choose from.
What are the Basic Costs to get my home sold using a Realtor? In addition to your Realtor's Commission, their are a number of other costs associated with getting your home sold. Of course, the biggest cost of course is paying off your current mortgage if you have one. Updating your property to increase appeal and add value is usually a necessary cost, and almost any Home Inspector is going to find some replace and/or repair issues. Then, home staging and keeping the utilities on, particularly for vacant properties, can cost a pretty penny but can cut the time on the market. Other closing costs can include a closing Attorney or Closing Service Provider, Transfer Fees, the Seller's Share of HOA Fees and Property Taxes. Plus many buyers today will also ask for the Seller to pay for some of the Buyer's Closing Costs, or ask for a decorator allowance if new flooring or painting is needed, or a Home Warranty to give the Buyer better peace of mind. And don't forget the Landscaping and good looking Front Door Hardware to give Buyer's the best First Impression.
What is the Average Time it takes to Get a Home Sold? – More than location, a home sale is dependent on Price, Condition, and how the home is marketed by the Realtor. De-cluttering the home and adding Professional Photography including Virtual Home Tours or Video are big pluses to getting a home sold because these are what the Buyers want and need to see. Realtors at The Real Estate Savings Center have a great deal of experience selling residential real estate and can hep you get your home ready for sale, get it sold within your time frame, and help ensure you keep more of your equity at closing .


text:
Global News Blog
Somali piracy back in spotlight with US hostage
The FBI has joined the effort to try to secure Capt. Richard Phillips's release.
By Jonathan Adams Correspondent
The first pirate attack on a US ship in some 200 years has put Somali pirates back on the front page.
World attention began focusing on the pirates last year after a sharp spike in attacks. Speedboat-borne bandits from the failed northeastern African state had become increasingly emboldened, and a kidnap-for-ransom trade thrived off the Somali coast.
The problem faded from the headlines earlier this year, after a US-led naval force stepped up antipiracy patrols in the Gulf of Aden, and countries such as China joined the fight.
Now, the pirates are back in the spotlight. A group of them boarded the Maersk Alabama cargo ship Wednesday, taking 20 crewmembers hostage. But the crew seized back control of the ship from the pirates, after the captain surrendered and pirates fled with him in a lifeboat According to the latest reports, Capt. Richard Phillips and several pirates are now adrift in the powerless lifeboat, as a US destroyer and a spy plane loom nearby.
More US ships are on their way to the scene, as is the FBI, which has been called in to negotiate with the pirates.
The standoff shows that the world community has yet to take a serious approach to neutralizing the pirate threat, according to one expert. This, despite the pirates' direct interference in a key global shipping lane, through which passes 12 percent of the world's oil shipped by sea.
The attack is also likely to spur debate on whether the crews of merchant ships should be armed, and what kind of anti-piracy training they should receive.
A recent spike in pirate attacks reflects a change in tactics. Faced with stepped-up multinational patrols in the Gulf of Aden, the pirates began attacking farther out at sea, away from naval escorts.
Somalia has been without a stable government since the early 1990s. For years, Somalis have been the victims of this political breakdown. Now, the chaos has spilled into international waters, affecting global business, and ships and crews from countries the world over.
Somali militia leaders have teamed up with coastal fishermen to profit from the hijacking trade. Some security experts now wonder if Somali Islamists, or even foreign terrorists, are using pirates for their own fundraising efforts.
Beefed-up navy patrols may somewhat deter the pirates. But as Iqbal Jhazbhay, a Somali expert at the University of South Africa in Tshwane, argues, only a stable and effective Somali government can truly bring them to heel.
Does a military solution for Somali piracy work?
Pirates off Somalia hijack first commercial vessel since 2012
For Somali pirates, July was a very bad month


text:
Commuter Rail Operations & Maintenance Facility
19699 County Road 43, Big Lake
Description: Built in 2009, the Commuter Rail Operations & Maintenance Facility serves the Northstar Commuter Rail Line which runs 40 miles between Minneapolis and Big Lake. The facility is located just east of Northstar's Big Lake Station at Highway 10 and County Road 43. There are approximately 30 employees at the facility, including administrators, mechanics and support staff. Northstar's 19 train cars and six locomotives are washed, inspected and serviced at the facility. There is indoor storage for up to 2 locomotives and five train cars. The remainder of the fleet is stored on outdoor tracks.


Architecting, designing and building a robust and reliable analytics platform that satisfy business and operational needs, consist of several steps that should be carefully planned and analyzed before bringing them into use. The following section describes a high-level overview of processes and storage systems that should be considered in on-premise or cloud environments when evaluating different analytics technologies and solutions.
Data sources and ingestion strategies present the core foundation of an analytic platform. Some data may change infrequently while others may need to be processed at higher rates, some is structured while other comes in a less structured forms. Platform ingestion layer should consider and enable most of the above cases and additionally take care of fault-tolerance, data availability and the ability of horizontal scaling.
Fewer and unified processing environments can result in greater developer productivity and less operational complexity. In the last few years we could see a number of new processing framework which is suitable for different use cases. When choosing the appropriate framework, we have to often make trade-off decisions between performance and streaming model, delivery semantics, state management and latency requirements. Another important factor to consider is framework maturity and its application ecosystems that enables integration with other operational systems.
One of the first steps in designing a storage layer is defining technical requirements of the storage workload which consequently drives the decision of the underlying storage approach (OLAP, OLTP, HLTP, etc.). Depending on scale and desired performance, this layer often consists of several storage and caching technologies.
Despite hardware cost reduction, big amount of data located in specialized systems like data warehouses present significant cost to the owner. One way how to reduce them is to keep rarely used data on less computational intensive but higher density storage. Such policies often enables owners to optimize their hardware cost and preserve the ability to analyze archival data or meet regulatory compliance.
Long-term business value of data lies in the surrounding environment of data services and their efficiency of extracting and providing insights to end users and surrounding systems. On the market, we may find a large number of BI and other analytics solutions that tries to address needs of data engineers, data scientist or data data analyst however not many of them covers all of the required functionalities. Enterprise report visualization, data discovery, advanced analytics and custom tailored solutions are just some of the options that have to be considered before establishing the right analytics environment.


text:
Kubo Won't Let Me Be Invisible Chapter 114: Kubo & Shiraishi Prep For The Play! Release Date & Plot
in Manga, news
Kubo Won't Let Me Be Invisible Chapter 114 is scheduled for release this week. The series follows Shiraishi and his need to stay away from the sight of others. However, after catching the eyes of Kubo, his life changes a great deal. Kubo finds it necessary to add Kubo to all her activities. This has led to Kubo forcing Shiraishi for the upcoming play organized for the school festival. While Shiraishi is uncertain about it, Kubo seems pretty confident. So, will the duo get to perform as Romeo and Juliet at the festival? Here are all the details about the next chapter.
In the following outing, the duo will find themselves caught in school work. The school festival is a huge event for all the students. However, some are more excited than others. Kubo has set her eyes on the romance drama play. She might try to audition for it in the future.
Kubo Won't Let Me Be Invisible Chapter 114: What Will Happen Next?
Kubo Won't Let Me Be Invisible Chapter 114 will resume the previous events. So, Kubo has finally gained the courage to speak to Shiraishi about the upcoming event. She asked her crush to accompany her during the school festival. Shiraishi has agreed to it. So, the next chapters will find the duo attending the event together. They are likely to spend a lot of time together, which will bring them closer. However, this is not all, as Kubo has much more in her mind.
The school festival will feature a play. After knowing about it, Kubo has asked Shiraishi to act for it. The duo prepared for a small scene together. It is likely that they will prepare for the play once again. Next, Kubo will lead them to the auditions. If Shiraishi does not shy away, then the main couple could be seen acting in the school festival's play. Lastly, the next chapter will highlight these details.
Kubo Won't Let Me Be Invisible Chapter 113 began with Kubo and Shiraishi walking around the school. Soon Kubo caught the eye of two fellow students acting for a play. Kubo realized that the play was Romeo and Juliet. This made her want to take part in it. However, she mentioned auditioning for the next year. Shiraishi stated that Romeo and Juliet would not get repeated for two consecutive years. So, Kubo took Shiraishi to the stairs to act a scene out with him.
The duo then sat on the stairs and talked about a few things. Shiraishi sat shyly, taking note of how things had changed after meeting Kubo. He stated that it is due to Kubo that he has now talked to other students. Finally, Shiraishi was seen about to say something. Kubo interrupted and asked him to join her for the school festival. Shiraishi agreed to the offer. The final panel found the duo heading back to class.
Kubo Won't Let Me Be Invisible Chapter 114: Release Date
So, Kubo Won't Let Me Be Invisible Chapter 114 will release on June 4, 2022. The series is available on Viz Media and Manga Plus. Thus, for more updates on the series, stay tuned.
Olympia Kyklos Manga Ends This July! Release Details & More To Know
Sasaki And Miyano Stage Play: Key Visual And Cast Info Out! Premiere Day


VERY NICE CLEAN WELL KEPT HOME IN GOOD AREA OF LYNN HAVEN. WOOD BURNING (SMALL) FIREPLACE IN ONE BEDROOM. SECURITY SYSTEM. LARGE COVERED PATIO. LARGE FENCED BACKYARD. 100% FINANCING AVAILABLE TO QUALIFIED BUYER. ALL ''REASONABLE OFFERS'' SERIOUSLY CONSIDERED. EFFECTIVE YR. 1994.DOUBLE PANED WINDOWS. CAST IRON TUB WITH TILE BACKING. STAINLESS DOUBLE SINKS IN KITCHEN. PANTRY. VINYL TRIM. TILE SILLS. TERRAZZO FLOORS IN HOME, CARPET OVER IN LIVING ROOM. VENTED STOVE AND TILE BACKSPLASH IN KITCHEN. NEW METAL ROOF INSTALLED 1-15.


Just curious about the free gift that was suppose to be included at the end of today's webinar. Which suppose to be the interactive table that details the interactions of the knowledge areas and process groups. I though this was a great tool and was curious how i can access this material?
Coach Dan Ryan will contact you directly about it.