{"version":3,"file":"static/chunks/8690-8f6b3765adde974b.js","mappings":"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","sources":["webpack://_N_E/./node_modules/aws-sdk/clients/acm.js","webpack://_N_E/./node_modules/aws-sdk/clients/apigateway.js","webpack://_N_E/./node_modules/aws-sdk/clients/applicationautoscaling.js","webpack://_N_E/./node_modules/aws-sdk/clients/athena.js","webpack://_N_E/./node_modules/aws-sdk/clients/autoscaling.js","webpack://_N_E/./node_modules/aws-sdk/clients/browser_default.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudformation.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudfront.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudhsm.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudhsmv2.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudtrail.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudwatch.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudwatchevents.js","webpack://_N_E/./node_modules/aws-sdk/clients/cloudwatchlogs.js","webpack://_N_E/./node_modules/aws-sdk/clients/codebuild.js","webpack://_N_E/./node_modules/aws-sdk/clients/codecommit.js","webpack://_N_E/./node_modules/aws-sdk/clients/codedeploy.js","webpack://_N_E/./node_modules/aws-sdk/clients/codepipeline.js","webpack://_N_E/./node_modules/aws-sdk/clients/cognitoidentity.js","webpack://_N_E/./node_modules/aws-sdk/clients/cognitoidentityserviceprovider.js","webpack://_N_E/./node_modules/aws-sdk/clients/cognitosync.js","webpack://_N_E/./node_modules/aws-sdk/clients/comprehend.js","webpack://_N_E/./node_modules/aws-sdk/clients/comprehendmedical.js","webpack://_N_E/./node_modules/aws-sdk/clients/configservice.js","webpack://_N_E/./node_modules/aws-sdk/clients/connect.js","webpack://_N_E/./node_modules/aws-sdk/clients/costexplorer.js","webpack://_N_E/./node_modules/aws-sdk/clients/cur.js","webpack://_N_E/./node_modules/aws-sdk/clients/devicefarm.js","webpack://_N_E/./node_modules/aws-sdk/clients/directconnect.js","webpack://_N_E/./node_modules/aws-sdk/clients/dynamodb.js","webpack://_N_E/./node_modules/aws-sdk/clients/dynamodbstreams.js","webpack://_N_E/./node_modules/aws-sdk/clients/ec2.js","webpack://_N_E/./node_modules/aws-sdk/clients/ecr.js","webpack://_N_E/./node_modules/aws-sdk/clients/ecs.js","webpack://_N_E/./node_modules/aws-sdk/clients/efs.js","webpack://_N_E/./node_modules/aws-sdk/clients/elasticache.js","webpack://_N_E/./node_modules/aws-sdk/clients/elasticbeanstalk.js","webpack://_N_E/./node_modules/aws-sdk/clients/elastictranscoder.js","webpack://_N_E/./node_modules/aws-sdk/clients/elb.js","webpack://_N_E/./node_modules/aws-sdk/clients/elbv2.js","webpack://_N_E/./node_modules/aws-sdk/clients/emr.js","webpack://_N_E/./node_modules/aws-sdk/clients/firehose.js","webpack://_N_E/./node_modules/aws-sdk/clients/forecastqueryservice.js","webpack://_N_E/./node_modules/aws-sdk/clients/forecastservice.js","webpack://_N_E/./node_modules/aws-sdk/clients/gamelift.js","webpack://_N_E/./node_modules/aws-sdk/clients/iam.js","webpack://_N_E/./node_modules/aws-sdk/clients/inspector.js","webpack://_N_E/./node_modules/aws-sdk/clients/iot.js","webpack://_N_E/./node_modules/aws-sdk/clients/iotanalytics.js","webpack://_N_E/./node_modules/aws-sdk/clients/iotdata.js","webpack://_N_E/./node_modules/aws-sdk/clients/kinesis.js","webpack://_N_E/./node_modules/aws-sdk/clients/kinesisvideo.js","webpack://_N_E/./node_modules/aws-sdk/clients/kinesisvideoarchivedmedia.js","webpack://_N_E/./node_modules/aws-sdk/clients/kinesisvideomedia.js","webpack://_N_E/./node_modules/aws-sdk/clients/kinesisvideosignalingchannels.js","webpack://_N_E/./node_modules/aws-sdk/clients/kms.js","webpack://_N_E/./node_modules/aws-sdk/clients/lambda.js","webpack://_N_E/./node_modules/aws-sdk/clients/lexmodelbuildingservice.js","webpack://_N_E/./node_modules/aws-sdk/clients/lexruntime.js","webpack://_N_E/./node_modules/aws-sdk/clients/lexruntimev2.js","webpack://_N_E/./node_modules/aws-sdk/clients/location.js","webpack://_N_E/./node_modules/aws-sdk/clients/machinelearning.js","webpack://_N_E/./node_modules/aws-sdk/clients/marketplacecommerceanalytics.js","webpack://_N_E/./node_modules/aws-sdk/clients/mediastoredata.js","webpack://_N_E/./node_modules/aws-sdk/clients/mobileanalytics.js","webpack://_N_E/./node_modules/aws-sdk/clients/mturk.js","webpack://_N_E/./node_modules/aws-sdk/clients/opsworks.js","webpack://_N_E/./node_modules/aws-sdk/clients/personalize.js","webpack://_N_E/./node_modules/aws-sdk/clients/personalizeevents.js","webpack://_N_E/./node_modules/aws-sdk/clients/personalizeruntime.js","webpack://_N_E/./node_modules/aws-sdk/clients/polly.js","webpack://_N_E/./node_modules/aws-sdk/clients/pricing.js","webpack://_N_E/./node_modules/aws-sdk/clients/rds.js","webpack://_N_E/./node_modules/aws-sdk/clients/redshift.js","webpack://_N_E/./node_modules/aws-sdk/clients/rekognition.js","webpack://_N_E/./node_modules/aws-sdk/clients/resourcegroups.js","webpack://_N_E/./node_modules/aws-sdk/clients/route53.js","webpack://_N_E/./node_modules/aws-sdk/clients/route53domains.js","webpack://_N_E/./node_modules/aws-sdk/clients/s3.js","webpack://_N_E/./node_modules/aws-sdk/clients/secretsmanager.js","webpack://_N_E/./node_modules/aws-sdk/clients/servicecatalog.js","webpack://_N_E/./node_modules/aws-sdk/clients/ses.js","webpack://_N_E/./node_modules/aws-sdk/clients/sns.js","webpack://_N_E/./node_modules/aws-sdk/clients/sqs.js","webpack://_N_E/./node_modules/aws-sdk/clients/ssm.js","webpack://_N_E/./node_modules/aws-sdk/clients/storagegateway.js","webpack://_N_E/./node_modules/aws-sdk/clients/sts.js","webpack://_N_E/./node_modules/aws-sdk/clients/translate.js","webpack://_N_E/./node_modules/aws-sdk/clients/waf.js","webpack://_N_E/./node_modules/aws-sdk/clients/workdocs.js","webpack://_N_E/./node_modules/aws-sdk/clients/xray.js","webpack://_N_E/./node_modules/aws-sdk/lib/api_loader.js","webpack://_N_E/./node_modules/aws-sdk/lib/browser.js","webpack://_N_E/./node_modules/aws-sdk/lib/browserCryptoLib.js","webpack://_N_E/./node_modules/aws-sdk/lib/browserHashUtils.js","webpack://_N_E/./node_modules/aws-sdk/lib/browserHmac.js","webpack://_N_E/./node_modules/aws-sdk/lib/browserMd5.js","webpack://_N_E/./node_modules/aws-sdk/lib/browserSha1.js","webpack://_N_E/./node_modules/aws-sdk/lib/browserSha256.js","webpack://_N_E/./node_modules/aws-sdk/lib/browser_loader.js","webpack://_N_E/./node_modules/aws-sdk/lib/cloudfront/signer.js","webpack://_N_E/./node_modules/aws-sdk/lib/config.js","webpack://_N_E/./node_modules/aws-sdk/lib/config_regional_endpoint.js","webpack://_N_E/./node_modules/aws-sdk/lib/core.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials/saml_credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials/temporary_credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/discover_endpoint.js","webpack://_N_E/./node_modules/aws-sdk/lib/dynamodb/converter.js","webpack://_N_E/./node_modules/aws-sdk/lib/dynamodb/document_client.js","webpack://_N_E/./node_modules/aws-sdk/lib/dynamodb/numberValue.js","webpack://_N_E/./node_modules/aws-sdk/lib/dynamodb/set.js","webpack://_N_E/./node_modules/aws-sdk/lib/dynamodb/translator.js","webpack://_N_E/./node_modules/aws-sdk/lib/dynamodb/types.js","webpack://_N_E/./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js","webpack://_N_E/./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js","webpack://_N_E/./node_modules/aws-sdk/lib/event-stream/int64.js","webpack://_N_E/./node_modules/aws-sdk/lib/event-stream/parse-event.js","webpack://_N_E/./node_modules/aws-sdk/lib/event-stream/parse-message.js","webpack://_N_E/./node_modules/aws-sdk/lib/event-stream/split-message.js","webpack://_N_E/./node_modules/aws-sdk/lib/event_listeners.js","webpack://_N_E/./node_modules/aws-sdk/lib/http.js","webpack://_N_E/./node_modules/aws-sdk/lib/http/xhr.js","webpack://_N_E/./node_modules/aws-sdk/lib/json/builder.js","webpack://_N_E/./node_modules/aws-sdk/lib/json/parser.js","webpack://_N_E/./node_modules/aws-sdk/lib/model/api.js","webpack://_N_E/./node_modules/aws-sdk/lib/model/collection.js","webpack://_N_E/./node_modules/aws-sdk/lib/model/operation.js","webpack://_N_E/./node_modules/aws-sdk/lib/model/paginator.js","webpack://_N_E/./node_modules/aws-sdk/lib/model/resource_waiter.js","webpack://_N_E/./node_modules/aws-sdk/lib/model/shape.js","webpack://_N_E/./node_modules/aws-sdk/lib/param_validator.js","webpack://_N_E/./node_modules/aws-sdk/lib/polly/presigner.js","webpack://_N_E/./node_modules/aws-sdk/lib/protocol/helpers.js","webpack://_N_E/./node_modules/aws-sdk/lib/protocol/json.js","webpack://_N_E/./node_modules/aws-sdk/lib/protocol/query.js","webpack://_N_E/./node_modules/aws-sdk/lib/protocol/rest.js","webpack://_N_E/./node_modules/aws-sdk/lib/protocol/rest_json.js","webpack://_N_E/./node_modules/aws-sdk/lib/protocol/rest_xml.js","webpack://_N_E/./node_modules/aws-sdk/lib/query/query_param_serializer.js","webpack://_N_E/./node_modules/aws-sdk/lib/rds/signer.js","webpack://_N_E/./node_modules/aws-sdk/lib/realclock/browserClock.js","webpack://_N_E/./node_modules/aws-sdk/lib/region/utils.js","webpack://_N_E/./node_modules/aws-sdk/lib/region_config.js","webpack://_N_E/./node_modules/aws-sdk/lib/request.js","webpack://_N_E/./node_modules/aws-sdk/lib/resource_waiter.js","webpack://_N_E/./node_modules/aws-sdk/lib/response.js","webpack://_N_E/./node_modules/aws-sdk/lib/s3/managed_upload.js","webpack://_N_E/./node_modules/aws-sdk/lib/sequential_executor.js","webpack://_N_E/./node_modules/aws-sdk/lib/service.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/apigateway.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/cloudfront.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/dynamodb.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/ec2.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/iotdata.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/lambda.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/machinelearning.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/polly.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/rds.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/rdsutil.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/route53.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/s3.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/s3util.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/sqs.js","webpack://_N_E/./node_modules/aws-sdk/lib/services/sts.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/presign.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/request_signer.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/s3.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/v2.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/v3.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/v3https.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/v4.js","webpack://_N_E/./node_modules/aws-sdk/lib/signers/v4_credentials.js","webpack://_N_E/./node_modules/aws-sdk/lib/state_machine.js","webpack://_N_E/./node_modules/aws-sdk/lib/util.js","webpack://_N_E/./node_modules/aws-sdk/lib/xml/browser_parser.js","webpack://_N_E/./node_modules/aws-sdk/lib/xml/builder.js","webpack://_N_E/./node_modules/aws-sdk/lib/xml/escape-attribute.js","webpack://_N_E/./node_modules/aws-sdk/lib/xml/escape-element.js","webpack://_N_E/./node_modules/aws-sdk/lib/xml/xml-node.js","webpack://_N_E/./node_modules/aws-sdk/lib/xml/xml-text.js","webpack://_N_E/./node_modules/aws-sdk/node_modules/buffer/index.js","webpack://_N_E/./node_modules/aws-sdk/node_modules/events/events.js","webpack://_N_E/./node_modules/aws-sdk/node_modules/ieee754/index.js","webpack://_N_E/./node_modules/aws-sdk/node_modules/isarray/index.js","webpack://_N_E/./node_modules/aws-sdk/vendor/endpoint-cache/index.js","webpack://_N_E/./node_modules/aws-sdk/vendor/endpoint-cache/utils/LRU.js","webpack://_N_E/./node_modules/base64-js/index.js","webpack://_N_E/./node_modules/call-bind/callBound.js","webpack://_N_E/./node_modules/call-bind/index.js","webpack://_N_E/./node_modules/foreach/index.js","webpack://_N_E/./node_modules/function-bind/implementation.js","webpack://_N_E/./node_modules/function-bind/index.js","webpack://_N_E/./node_modules/get-intrinsic/index.js","webpack://_N_E/./node_modules/has-symbols/index.js","webpack://_N_E/./node_modules/has-symbols/shams.js","webpack://_N_E/./node_modules/has-tostringtag/shams.js","webpack://_N_E/./node_modules/has/src/index.js","webpack://_N_E/./node_modules/inherits/inherits_browser.js","webpack://_N_E/./node_modules/is-arguments/index.js","webpack://_N_E/./node_modules/is-generator-function/index.js","webpack://_N_E/./node_modules/is-typed-array/index.js","webpack://_N_E/./node_modules/jmespath/jmespath.js","webpack://_N_E/./node_modules/next/dist/compiled/native-url/index.js","webpack://_N_E/./node_modules/querystring/decode.js","webpack://_N_E/./node_modules/querystring/encode.js","webpack://_N_E/./node_modules/querystring/index.js","webpack://_N_E/./node_modules/util/support/isBufferBrowser.js","webpack://_N_E/./node_modules/util/support/types.js","webpack://_N_E/./node_modules/util/util.js","webpack://_N_E/./node_modules/uuid/index.js","webpack://_N_E/./node_modules/uuid/lib/bytesToUuid.js","webpack://_N_E/./node_modules/uuid/lib/rng-browser.js","webpack://_N_E/./node_modules/uuid/v1.js","webpack://_N_E/./node_modules/uuid/v4.js","webpack://_N_E/./node_modules/which-typed-array/index.js","webpack://_N_E/./node_modules/available-typed-arrays/index.js","webpack://_N_E/./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js"],"sourcesContent":["require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['acm'] = {};\nAWS.ACM = Service.defineService('acm', ['2015-12-08']);\nObject.defineProperty(apiLoader.services['acm'], '2015-12-08', {\n get: function get() {\n var model = require('../apis/acm-2015-12-08.min.json');\n model.paginators = require('../apis/acm-2015-12-08.paginators.json').pagination;\n model.waiters = require('../apis/acm-2015-12-08.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ACM;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['apigateway'] = {};\nAWS.APIGateway = Service.defineService('apigateway', ['2015-07-09']);\nrequire('../lib/services/apigateway');\nObject.defineProperty(apiLoader.services['apigateway'], '2015-07-09', {\n get: function get() {\n var model = require('../apis/apigateway-2015-07-09.min.json');\n model.paginators = require('../apis/apigateway-2015-07-09.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.APIGateway;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['applicationautoscaling'] = {};\nAWS.ApplicationAutoScaling = Service.defineService('applicationautoscaling', ['2016-02-06']);\nObject.defineProperty(apiLoader.services['applicationautoscaling'], '2016-02-06', {\n get: function get() {\n var model = require('../apis/application-autoscaling-2016-02-06.min.json');\n model.paginators = require('../apis/application-autoscaling-2016-02-06.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ApplicationAutoScaling;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['athena'] = {};\nAWS.Athena = Service.defineService('athena', ['2017-05-18']);\nObject.defineProperty(apiLoader.services['athena'], '2017-05-18', {\n get: function get() {\n var model = require('../apis/athena-2017-05-18.min.json');\n model.paginators = require('../apis/athena-2017-05-18.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Athena;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['autoscaling'] = {};\nAWS.AutoScaling = Service.defineService('autoscaling', ['2011-01-01']);\nObject.defineProperty(apiLoader.services['autoscaling'], '2011-01-01', {\n get: function get() {\n var model = require('../apis/autoscaling-2011-01-01.min.json');\n model.paginators = require('../apis/autoscaling-2011-01-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.AutoScaling;\n","require('../lib/node_loader');\nmodule.exports = {\n ACM: require('./acm'),\n APIGateway: require('./apigateway'),\n ApplicationAutoScaling: require('./applicationautoscaling'),\n AutoScaling: require('./autoscaling'),\n CloudFormation: require('./cloudformation'),\n CloudFront: require('./cloudfront'),\n CloudHSM: require('./cloudhsm'),\n CloudTrail: require('./cloudtrail'),\n CloudWatch: require('./cloudwatch'),\n CloudWatchEvents: require('./cloudwatchevents'),\n CloudWatchLogs: require('./cloudwatchlogs'),\n CodeBuild: require('./codebuild'),\n CodeCommit: require('./codecommit'),\n CodeDeploy: require('./codedeploy'),\n CodePipeline: require('./codepipeline'),\n CognitoIdentity: require('./cognitoidentity'),\n CognitoIdentityServiceProvider: require('./cognitoidentityserviceprovider'),\n CognitoSync: require('./cognitosync'),\n ConfigService: require('./configservice'),\n CUR: require('./cur'),\n DeviceFarm: require('./devicefarm'),\n DirectConnect: require('./directconnect'),\n DynamoDB: require('./dynamodb'),\n DynamoDBStreams: require('./dynamodbstreams'),\n EC2: require('./ec2'),\n ECR: require('./ecr'),\n ECS: require('./ecs'),\n EFS: require('./efs'),\n ElastiCache: require('./elasticache'),\n ElasticBeanstalk: require('./elasticbeanstalk'),\n ELB: require('./elb'),\n ELBv2: require('./elbv2'),\n EMR: require('./emr'),\n ElasticTranscoder: require('./elastictranscoder'),\n Firehose: require('./firehose'),\n GameLift: require('./gamelift'),\n IAM: require('./iam'),\n Inspector: require('./inspector'),\n Iot: require('./iot'),\n IotData: require('./iotdata'),\n Kinesis: require('./kinesis'),\n KMS: require('./kms'),\n Lambda: require('./lambda'),\n LexRuntime: require('./lexruntime'),\n MachineLearning: require('./machinelearning'),\n MarketplaceCommerceAnalytics: require('./marketplacecommerceanalytics'),\n MTurk: require('./mturk'),\n MobileAnalytics: require('./mobileanalytics'),\n OpsWorks: require('./opsworks'),\n Polly: require('./polly'),\n RDS: require('./rds'),\n Redshift: require('./redshift'),\n Rekognition: require('./rekognition'),\n Route53: require('./route53'),\n Route53Domains: require('./route53domains'),\n S3: require('./s3'),\n ServiceCatalog: require('./servicecatalog'),\n SES: require('./ses'),\n SNS: require('./sns'),\n SQS: require('./sqs'),\n SSM: require('./ssm'),\n StorageGateway: require('./storagegateway'),\n STS: require('./sts'),\n XRay: require('./xray'),\n WAF: require('./waf'),\n WorkDocs: require('./workdocs'),\n LexModelBuildingService: require('./lexmodelbuildingservice'),\n Athena: require('./athena'),\n CloudHSMV2: require('./cloudhsmv2'),\n Pricing: require('./pricing'),\n CostExplorer: require('./costexplorer'),\n MediaStoreData: require('./mediastoredata'),\n Comprehend: require('./comprehend'),\n KinesisVideoArchivedMedia: require('./kinesisvideoarchivedmedia'),\n KinesisVideoMedia: require('./kinesisvideomedia'),\n KinesisVideo: require('./kinesisvideo'),\n Translate: require('./translate'),\n ResourceGroups: require('./resourcegroups'),\n Connect: require('./connect'),\n SecretsManager: require('./secretsmanager'),\n IoTAnalytics: require('./iotanalytics'),\n ComprehendMedical: require('./comprehendmedical'),\n Personalize: require('./personalize'),\n PersonalizeEvents: require('./personalizeevents'),\n PersonalizeRuntime: require('./personalizeruntime'),\n ForecastService: require('./forecastservice'),\n ForecastQueryService: require('./forecastqueryservice'),\n KinesisVideoSignalingChannels: require('./kinesisvideosignalingchannels'),\n Location: require('./location'),\n LexRuntimeV2: require('./lexruntimev2')\n};","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudformation'] = {};\nAWS.CloudFormation = Service.defineService('cloudformation', ['2010-05-15']);\nObject.defineProperty(apiLoader.services['cloudformation'], '2010-05-15', {\n get: function get() {\n var model = require('../apis/cloudformation-2010-05-15.min.json');\n model.paginators = require('../apis/cloudformation-2010-05-15.paginators.json').pagination;\n model.waiters = require('../apis/cloudformation-2010-05-15.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudFormation;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudfront'] = {};\nAWS.CloudFront = Service.defineService('cloudfront', ['2013-05-12*', '2013-11-11*', '2014-05-31*', '2014-10-21*', '2014-11-06*', '2015-04-17*', '2015-07-27*', '2015-09-17*', '2016-01-13*', '2016-01-28*', '2016-08-01*', '2016-08-20*', '2016-09-07*', '2016-09-29*', '2016-11-25', '2016-11-25*', '2017-03-25', '2017-03-25*', '2017-10-30', '2017-10-30*', '2018-06-18', '2018-06-18*', '2018-11-05', '2018-11-05*', '2019-03-26', '2019-03-26*', '2020-05-31']);\nrequire('../lib/services/cloudfront');\nObject.defineProperty(apiLoader.services['cloudfront'], '2016-11-25', {\n get: function get() {\n var model = require('../apis/cloudfront-2016-11-25.min.json');\n model.paginators = require('../apis/cloudfront-2016-11-25.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2016-11-25.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['cloudfront'], '2017-03-25', {\n get: function get() {\n var model = require('../apis/cloudfront-2017-03-25.min.json');\n model.paginators = require('../apis/cloudfront-2017-03-25.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2017-03-25.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['cloudfront'], '2017-10-30', {\n get: function get() {\n var model = require('../apis/cloudfront-2017-10-30.min.json');\n model.paginators = require('../apis/cloudfront-2017-10-30.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2017-10-30.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['cloudfront'], '2018-06-18', {\n get: function get() {\n var model = require('../apis/cloudfront-2018-06-18.min.json');\n model.paginators = require('../apis/cloudfront-2018-06-18.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2018-06-18.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['cloudfront'], '2018-11-05', {\n get: function get() {\n var model = require('../apis/cloudfront-2018-11-05.min.json');\n model.paginators = require('../apis/cloudfront-2018-11-05.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2018-11-05.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['cloudfront'], '2019-03-26', {\n get: function get() {\n var model = require('../apis/cloudfront-2019-03-26.min.json');\n model.paginators = require('../apis/cloudfront-2019-03-26.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2019-03-26.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['cloudfront'], '2020-05-31', {\n get: function get() {\n var model = require('../apis/cloudfront-2020-05-31.min.json');\n model.paginators = require('../apis/cloudfront-2020-05-31.paginators.json').pagination;\n model.waiters = require('../apis/cloudfront-2020-05-31.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudFront;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudhsm'] = {};\nAWS.CloudHSM = Service.defineService('cloudhsm', ['2014-05-30']);\nObject.defineProperty(apiLoader.services['cloudhsm'], '2014-05-30', {\n get: function get() {\n var model = require('../apis/cloudhsm-2014-05-30.min.json');\n model.paginators = require('../apis/cloudhsm-2014-05-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudHSM;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudhsmv2'] = {};\nAWS.CloudHSMV2 = Service.defineService('cloudhsmv2', ['2017-04-28']);\nObject.defineProperty(apiLoader.services['cloudhsmv2'], '2017-04-28', {\n get: function get() {\n var model = require('../apis/cloudhsmv2-2017-04-28.min.json');\n model.paginators = require('../apis/cloudhsmv2-2017-04-28.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudHSMV2;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudtrail'] = {};\nAWS.CloudTrail = Service.defineService('cloudtrail', ['2013-11-01']);\nObject.defineProperty(apiLoader.services['cloudtrail'], '2013-11-01', {\n get: function get() {\n var model = require('../apis/cloudtrail-2013-11-01.min.json');\n model.paginators = require('../apis/cloudtrail-2013-11-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudTrail;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudwatch'] = {};\nAWS.CloudWatch = Service.defineService('cloudwatch', ['2010-08-01']);\nObject.defineProperty(apiLoader.services['cloudwatch'], '2010-08-01', {\n get: function get() {\n var model = require('../apis/monitoring-2010-08-01.min.json');\n model.paginators = require('../apis/monitoring-2010-08-01.paginators.json').pagination;\n model.waiters = require('../apis/monitoring-2010-08-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudWatch;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudwatchevents'] = {};\nAWS.CloudWatchEvents = Service.defineService('cloudwatchevents', ['2014-02-03*', '2015-10-07']);\nObject.defineProperty(apiLoader.services['cloudwatchevents'], '2015-10-07', {\n get: function get() {\n var model = require('../apis/events-2015-10-07.min.json');\n model.paginators = require('../apis/events-2015-10-07.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudWatchEvents;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cloudwatchlogs'] = {};\nAWS.CloudWatchLogs = Service.defineService('cloudwatchlogs', ['2014-03-28']);\nObject.defineProperty(apiLoader.services['cloudwatchlogs'], '2014-03-28', {\n get: function get() {\n var model = require('../apis/logs-2014-03-28.min.json');\n model.paginators = require('../apis/logs-2014-03-28.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CloudWatchLogs;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['codebuild'] = {};\nAWS.CodeBuild = Service.defineService('codebuild', ['2016-10-06']);\nObject.defineProperty(apiLoader.services['codebuild'], '2016-10-06', {\n get: function get() {\n var model = require('../apis/codebuild-2016-10-06.min.json');\n model.paginators = require('../apis/codebuild-2016-10-06.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CodeBuild;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['codecommit'] = {};\nAWS.CodeCommit = Service.defineService('codecommit', ['2015-04-13']);\nObject.defineProperty(apiLoader.services['codecommit'], '2015-04-13', {\n get: function get() {\n var model = require('../apis/codecommit-2015-04-13.min.json');\n model.paginators = require('../apis/codecommit-2015-04-13.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CodeCommit;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['codedeploy'] = {};\nAWS.CodeDeploy = Service.defineService('codedeploy', ['2014-10-06']);\nObject.defineProperty(apiLoader.services['codedeploy'], '2014-10-06', {\n get: function get() {\n var model = require('../apis/codedeploy-2014-10-06.min.json');\n model.paginators = require('../apis/codedeploy-2014-10-06.paginators.json').pagination;\n model.waiters = require('../apis/codedeploy-2014-10-06.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CodeDeploy;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['codepipeline'] = {};\nAWS.CodePipeline = Service.defineService('codepipeline', ['2015-07-09']);\nObject.defineProperty(apiLoader.services['codepipeline'], '2015-07-09', {\n get: function get() {\n var model = require('../apis/codepipeline-2015-07-09.min.json');\n model.paginators = require('../apis/codepipeline-2015-07-09.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CodePipeline;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cognitoidentity'] = {};\nAWS.CognitoIdentity = Service.defineService('cognitoidentity', ['2014-06-30']);\nObject.defineProperty(apiLoader.services['cognitoidentity'], '2014-06-30', {\n get: function get() {\n var model = require('../apis/cognito-identity-2014-06-30.min.json');\n model.paginators = require('../apis/cognito-identity-2014-06-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CognitoIdentity;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cognitoidentityserviceprovider'] = {};\nAWS.CognitoIdentityServiceProvider = Service.defineService('cognitoidentityserviceprovider', ['2016-04-18']);\nObject.defineProperty(apiLoader.services['cognitoidentityserviceprovider'], '2016-04-18', {\n get: function get() {\n var model = require('../apis/cognito-idp-2016-04-18.min.json');\n model.paginators = require('../apis/cognito-idp-2016-04-18.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CognitoIdentityServiceProvider;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cognitosync'] = {};\nAWS.CognitoSync = Service.defineService('cognitosync', ['2014-06-30']);\nObject.defineProperty(apiLoader.services['cognitosync'], '2014-06-30', {\n get: function get() {\n var model = require('../apis/cognito-sync-2014-06-30.min.json');\n model.paginators = require('../apis/cognito-sync-2014-06-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CognitoSync;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['comprehend'] = {};\nAWS.Comprehend = Service.defineService('comprehend', ['2017-11-27']);\nObject.defineProperty(apiLoader.services['comprehend'], '2017-11-27', {\n get: function get() {\n var model = require('../apis/comprehend-2017-11-27.min.json');\n model.paginators = require('../apis/comprehend-2017-11-27.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Comprehend;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['comprehendmedical'] = {};\nAWS.ComprehendMedical = Service.defineService('comprehendmedical', ['2018-10-30']);\nObject.defineProperty(apiLoader.services['comprehendmedical'], '2018-10-30', {\n get: function get() {\n var model = require('../apis/comprehendmedical-2018-10-30.min.json');\n model.paginators = require('../apis/comprehendmedical-2018-10-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ComprehendMedical;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['configservice'] = {};\nAWS.ConfigService = Service.defineService('configservice', ['2014-11-12']);\nObject.defineProperty(apiLoader.services['configservice'], '2014-11-12', {\n get: function get() {\n var model = require('../apis/config-2014-11-12.min.json');\n model.paginators = require('../apis/config-2014-11-12.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ConfigService;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['connect'] = {};\nAWS.Connect = Service.defineService('connect', ['2017-08-08']);\nObject.defineProperty(apiLoader.services['connect'], '2017-08-08', {\n get: function get() {\n var model = require('../apis/connect-2017-08-08.min.json');\n model.paginators = require('../apis/connect-2017-08-08.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Connect;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['costexplorer'] = {};\nAWS.CostExplorer = Service.defineService('costexplorer', ['2017-10-25']);\nObject.defineProperty(apiLoader.services['costexplorer'], '2017-10-25', {\n get: function get() {\n var model = require('../apis/ce-2017-10-25.min.json');\n model.paginators = require('../apis/ce-2017-10-25.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CostExplorer;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cur'] = {};\nAWS.CUR = Service.defineService('cur', ['2017-01-06']);\nObject.defineProperty(apiLoader.services['cur'], '2017-01-06', {\n get: function get() {\n var model = require('../apis/cur-2017-01-06.min.json');\n model.paginators = require('../apis/cur-2017-01-06.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CUR;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['devicefarm'] = {};\nAWS.DeviceFarm = Service.defineService('devicefarm', ['2015-06-23']);\nObject.defineProperty(apiLoader.services['devicefarm'], '2015-06-23', {\n get: function get() {\n var model = require('../apis/devicefarm-2015-06-23.min.json');\n model.paginators = require('../apis/devicefarm-2015-06-23.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.DeviceFarm;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['directconnect'] = {};\nAWS.DirectConnect = Service.defineService('directconnect', ['2012-10-25']);\nObject.defineProperty(apiLoader.services['directconnect'], '2012-10-25', {\n get: function get() {\n var model = require('../apis/directconnect-2012-10-25.min.json');\n model.paginators = require('../apis/directconnect-2012-10-25.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.DirectConnect;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['dynamodb'] = {};\nAWS.DynamoDB = Service.defineService('dynamodb', ['2011-12-05', '2012-08-10']);\nrequire('../lib/services/dynamodb');\nObject.defineProperty(apiLoader.services['dynamodb'], '2011-12-05', {\n get: function get() {\n var model = require('../apis/dynamodb-2011-12-05.min.json');\n model.paginators = require('../apis/dynamodb-2011-12-05.paginators.json').pagination;\n model.waiters = require('../apis/dynamodb-2011-12-05.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['dynamodb'], '2012-08-10', {\n get: function get() {\n var model = require('../apis/dynamodb-2012-08-10.min.json');\n model.paginators = require('../apis/dynamodb-2012-08-10.paginators.json').pagination;\n model.waiters = require('../apis/dynamodb-2012-08-10.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.DynamoDB;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['dynamodbstreams'] = {};\nAWS.DynamoDBStreams = Service.defineService('dynamodbstreams', ['2012-08-10']);\nObject.defineProperty(apiLoader.services['dynamodbstreams'], '2012-08-10', {\n get: function get() {\n var model = require('../apis/streams.dynamodb-2012-08-10.min.json');\n model.paginators = require('../apis/streams.dynamodb-2012-08-10.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.DynamoDBStreams;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['ec2'] = {};\nAWS.EC2 = Service.defineService('ec2', ['2013-06-15*', '2013-10-15*', '2014-02-01*', '2014-05-01*', '2014-06-15*', '2014-09-01*', '2014-10-01*', '2015-03-01*', '2015-04-15*', '2015-10-01*', '2016-04-01*', '2016-09-15*', '2016-11-15']);\nrequire('../lib/services/ec2');\nObject.defineProperty(apiLoader.services['ec2'], '2016-11-15', {\n get: function get() {\n var model = require('../apis/ec2-2016-11-15.min.json');\n model.paginators = require('../apis/ec2-2016-11-15.paginators.json').pagination;\n model.waiters = require('../apis/ec2-2016-11-15.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.EC2;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['ecr'] = {};\nAWS.ECR = Service.defineService('ecr', ['2015-09-21']);\nObject.defineProperty(apiLoader.services['ecr'], '2015-09-21', {\n get: function get() {\n var model = require('../apis/ecr-2015-09-21.min.json');\n model.paginators = require('../apis/ecr-2015-09-21.paginators.json').pagination;\n model.waiters = require('../apis/ecr-2015-09-21.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ECR;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['ecs'] = {};\nAWS.ECS = Service.defineService('ecs', ['2014-11-13']);\nObject.defineProperty(apiLoader.services['ecs'], '2014-11-13', {\n get: function get() {\n var model = require('../apis/ecs-2014-11-13.min.json');\n model.paginators = require('../apis/ecs-2014-11-13.paginators.json').pagination;\n model.waiters = require('../apis/ecs-2014-11-13.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ECS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['efs'] = {};\nAWS.EFS = Service.defineService('efs', ['2015-02-01']);\nObject.defineProperty(apiLoader.services['efs'], '2015-02-01', {\n get: function get() {\n var model = require('../apis/elasticfilesystem-2015-02-01.min.json');\n model.paginators = require('../apis/elasticfilesystem-2015-02-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.EFS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['elasticache'] = {};\nAWS.ElastiCache = Service.defineService('elasticache', ['2012-11-15*', '2014-03-24*', '2014-07-15*', '2014-09-30*', '2015-02-02']);\nObject.defineProperty(apiLoader.services['elasticache'], '2015-02-02', {\n get: function get() {\n var model = require('../apis/elasticache-2015-02-02.min.json');\n model.paginators = require('../apis/elasticache-2015-02-02.paginators.json').pagination;\n model.waiters = require('../apis/elasticache-2015-02-02.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ElastiCache;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['elasticbeanstalk'] = {};\nAWS.ElasticBeanstalk = Service.defineService('elasticbeanstalk', ['2010-12-01']);\nObject.defineProperty(apiLoader.services['elasticbeanstalk'], '2010-12-01', {\n get: function get() {\n var model = require('../apis/elasticbeanstalk-2010-12-01.min.json');\n model.paginators = require('../apis/elasticbeanstalk-2010-12-01.paginators.json').pagination;\n model.waiters = require('../apis/elasticbeanstalk-2010-12-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ElasticBeanstalk;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['elastictranscoder'] = {};\nAWS.ElasticTranscoder = Service.defineService('elastictranscoder', ['2012-09-25']);\nObject.defineProperty(apiLoader.services['elastictranscoder'], '2012-09-25', {\n get: function get() {\n var model = require('../apis/elastictranscoder-2012-09-25.min.json');\n model.paginators = require('../apis/elastictranscoder-2012-09-25.paginators.json').pagination;\n model.waiters = require('../apis/elastictranscoder-2012-09-25.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ElasticTranscoder;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['elb'] = {};\nAWS.ELB = Service.defineService('elb', ['2012-06-01']);\nObject.defineProperty(apiLoader.services['elb'], '2012-06-01', {\n get: function get() {\n var model = require('../apis/elasticloadbalancing-2012-06-01.min.json');\n model.paginators = require('../apis/elasticloadbalancing-2012-06-01.paginators.json').pagination;\n model.waiters = require('../apis/elasticloadbalancing-2012-06-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ELB;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['elbv2'] = {};\nAWS.ELBv2 = Service.defineService('elbv2', ['2015-12-01']);\nObject.defineProperty(apiLoader.services['elbv2'], '2015-12-01', {\n get: function get() {\n var model = require('../apis/elasticloadbalancingv2-2015-12-01.min.json');\n model.paginators = require('../apis/elasticloadbalancingv2-2015-12-01.paginators.json').pagination;\n model.waiters = require('../apis/elasticloadbalancingv2-2015-12-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ELBv2;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['emr'] = {};\nAWS.EMR = Service.defineService('emr', ['2009-03-31']);\nObject.defineProperty(apiLoader.services['emr'], '2009-03-31', {\n get: function get() {\n var model = require('../apis/elasticmapreduce-2009-03-31.min.json');\n model.paginators = require('../apis/elasticmapreduce-2009-03-31.paginators.json').pagination;\n model.waiters = require('../apis/elasticmapreduce-2009-03-31.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.EMR;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['firehose'] = {};\nAWS.Firehose = Service.defineService('firehose', ['2015-08-04']);\nObject.defineProperty(apiLoader.services['firehose'], '2015-08-04', {\n get: function get() {\n var model = require('../apis/firehose-2015-08-04.min.json');\n model.paginators = require('../apis/firehose-2015-08-04.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Firehose;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['forecastqueryservice'] = {};\nAWS.ForecastQueryService = Service.defineService('forecastqueryservice', ['2018-06-26']);\nObject.defineProperty(apiLoader.services['forecastqueryservice'], '2018-06-26', {\n get: function get() {\n var model = require('../apis/forecastquery-2018-06-26.min.json');\n model.paginators = require('../apis/forecastquery-2018-06-26.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ForecastQueryService;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['forecastservice'] = {};\nAWS.ForecastService = Service.defineService('forecastservice', ['2018-06-26']);\nObject.defineProperty(apiLoader.services['forecastservice'], '2018-06-26', {\n get: function get() {\n var model = require('../apis/forecast-2018-06-26.min.json');\n model.paginators = require('../apis/forecast-2018-06-26.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ForecastService;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['gamelift'] = {};\nAWS.GameLift = Service.defineService('gamelift', ['2015-10-01']);\nObject.defineProperty(apiLoader.services['gamelift'], '2015-10-01', {\n get: function get() {\n var model = require('../apis/gamelift-2015-10-01.min.json');\n model.paginators = require('../apis/gamelift-2015-10-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.GameLift;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['iam'] = {};\nAWS.IAM = Service.defineService('iam', ['2010-05-08']);\nObject.defineProperty(apiLoader.services['iam'], '2010-05-08', {\n get: function get() {\n var model = require('../apis/iam-2010-05-08.min.json');\n model.paginators = require('../apis/iam-2010-05-08.paginators.json').pagination;\n model.waiters = require('../apis/iam-2010-05-08.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.IAM;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['inspector'] = {};\nAWS.Inspector = Service.defineService('inspector', ['2015-08-18*', '2016-02-16']);\nObject.defineProperty(apiLoader.services['inspector'], '2016-02-16', {\n get: function get() {\n var model = require('../apis/inspector-2016-02-16.min.json');\n model.paginators = require('../apis/inspector-2016-02-16.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Inspector;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['iot'] = {};\nAWS.Iot = Service.defineService('iot', ['2015-05-28']);\nObject.defineProperty(apiLoader.services['iot'], '2015-05-28', {\n get: function get() {\n var model = require('../apis/iot-2015-05-28.min.json');\n model.paginators = require('../apis/iot-2015-05-28.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Iot;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['iotanalytics'] = {};\nAWS.IoTAnalytics = Service.defineService('iotanalytics', ['2017-11-27']);\nObject.defineProperty(apiLoader.services['iotanalytics'], '2017-11-27', {\n get: function get() {\n var model = require('../apis/iotanalytics-2017-11-27.min.json');\n model.paginators = require('../apis/iotanalytics-2017-11-27.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.IoTAnalytics;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['iotdata'] = {};\nAWS.IotData = Service.defineService('iotdata', ['2015-05-28']);\nrequire('../lib/services/iotdata');\nObject.defineProperty(apiLoader.services['iotdata'], '2015-05-28', {\n get: function get() {\n var model = require('../apis/iot-data-2015-05-28.min.json');\n model.paginators = require('../apis/iot-data-2015-05-28.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.IotData;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kinesis'] = {};\nAWS.Kinesis = Service.defineService('kinesis', ['2013-12-02']);\nObject.defineProperty(apiLoader.services['kinesis'], '2013-12-02', {\n get: function get() {\n var model = require('../apis/kinesis-2013-12-02.min.json');\n model.paginators = require('../apis/kinesis-2013-12-02.paginators.json').pagination;\n model.waiters = require('../apis/kinesis-2013-12-02.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Kinesis;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kinesisvideo'] = {};\nAWS.KinesisVideo = Service.defineService('kinesisvideo', ['2017-09-30']);\nObject.defineProperty(apiLoader.services['kinesisvideo'], '2017-09-30', {\n get: function get() {\n var model = require('../apis/kinesisvideo-2017-09-30.min.json');\n model.paginators = require('../apis/kinesisvideo-2017-09-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.KinesisVideo;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kinesisvideoarchivedmedia'] = {};\nAWS.KinesisVideoArchivedMedia = Service.defineService('kinesisvideoarchivedmedia', ['2017-09-30']);\nObject.defineProperty(apiLoader.services['kinesisvideoarchivedmedia'], '2017-09-30', {\n get: function get() {\n var model = require('../apis/kinesis-video-archived-media-2017-09-30.min.json');\n model.paginators = require('../apis/kinesis-video-archived-media-2017-09-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.KinesisVideoArchivedMedia;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kinesisvideomedia'] = {};\nAWS.KinesisVideoMedia = Service.defineService('kinesisvideomedia', ['2017-09-30']);\nObject.defineProperty(apiLoader.services['kinesisvideomedia'], '2017-09-30', {\n get: function get() {\n var model = require('../apis/kinesis-video-media-2017-09-30.min.json');\n model.paginators = require('../apis/kinesis-video-media-2017-09-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.KinesisVideoMedia;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kinesisvideosignalingchannels'] = {};\nAWS.KinesisVideoSignalingChannels = Service.defineService('kinesisvideosignalingchannels', ['2019-12-04']);\nObject.defineProperty(apiLoader.services['kinesisvideosignalingchannels'], '2019-12-04', {\n get: function get() {\n var model = require('../apis/kinesis-video-signaling-2019-12-04.min.json');\n model.paginators = require('../apis/kinesis-video-signaling-2019-12-04.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.KinesisVideoSignalingChannels;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kms'] = {};\nAWS.KMS = Service.defineService('kms', ['2014-11-01']);\nObject.defineProperty(apiLoader.services['kms'], '2014-11-01', {\n get: function get() {\n var model = require('../apis/kms-2014-11-01.min.json');\n model.paginators = require('../apis/kms-2014-11-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.KMS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['lambda'] = {};\nAWS.Lambda = Service.defineService('lambda', ['2014-11-11', '2015-03-31']);\nrequire('../lib/services/lambda');\nObject.defineProperty(apiLoader.services['lambda'], '2014-11-11', {\n get: function get() {\n var model = require('../apis/lambda-2014-11-11.min.json');\n model.paginators = require('../apis/lambda-2014-11-11.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['lambda'], '2015-03-31', {\n get: function get() {\n var model = require('../apis/lambda-2015-03-31.min.json');\n model.paginators = require('../apis/lambda-2015-03-31.paginators.json').pagination;\n model.waiters = require('../apis/lambda-2015-03-31.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Lambda;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['lexmodelbuildingservice'] = {};\nAWS.LexModelBuildingService = Service.defineService('lexmodelbuildingservice', ['2017-04-19']);\nObject.defineProperty(apiLoader.services['lexmodelbuildingservice'], '2017-04-19', {\n get: function get() {\n var model = require('../apis/lex-models-2017-04-19.min.json');\n model.paginators = require('../apis/lex-models-2017-04-19.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.LexModelBuildingService;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['lexruntime'] = {};\nAWS.LexRuntime = Service.defineService('lexruntime', ['2016-11-28']);\nObject.defineProperty(apiLoader.services['lexruntime'], '2016-11-28', {\n get: function get() {\n var model = require('../apis/runtime.lex-2016-11-28.min.json');\n model.paginators = require('../apis/runtime.lex-2016-11-28.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.LexRuntime;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['lexruntimev2'] = {};\nAWS.LexRuntimeV2 = Service.defineService('lexruntimev2', ['2020-08-07']);\nObject.defineProperty(apiLoader.services['lexruntimev2'], '2020-08-07', {\n get: function get() {\n var model = require('../apis/runtime.lex.v2-2020-08-07.min.json');\n model.paginators = require('../apis/runtime.lex.v2-2020-08-07.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.LexRuntimeV2;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['location'] = {};\nAWS.Location = Service.defineService('location', ['2020-11-19']);\nObject.defineProperty(apiLoader.services['location'], '2020-11-19', {\n get: function get() {\n var model = require('../apis/location-2020-11-19.min.json');\n model.paginators = require('../apis/location-2020-11-19.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Location;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['machinelearning'] = {};\nAWS.MachineLearning = Service.defineService('machinelearning', ['2014-12-12']);\nrequire('../lib/services/machinelearning');\nObject.defineProperty(apiLoader.services['machinelearning'], '2014-12-12', {\n get: function get() {\n var model = require('../apis/machinelearning-2014-12-12.min.json');\n model.paginators = require('../apis/machinelearning-2014-12-12.paginators.json').pagination;\n model.waiters = require('../apis/machinelearning-2014-12-12.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.MachineLearning;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['marketplacecommerceanalytics'] = {};\nAWS.MarketplaceCommerceAnalytics = Service.defineService('marketplacecommerceanalytics', ['2015-07-01']);\nObject.defineProperty(apiLoader.services['marketplacecommerceanalytics'], '2015-07-01', {\n get: function get() {\n var model = require('../apis/marketplacecommerceanalytics-2015-07-01.min.json');\n model.paginators = require('../apis/marketplacecommerceanalytics-2015-07-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.MarketplaceCommerceAnalytics;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['mediastoredata'] = {};\nAWS.MediaStoreData = Service.defineService('mediastoredata', ['2017-09-01']);\nObject.defineProperty(apiLoader.services['mediastoredata'], '2017-09-01', {\n get: function get() {\n var model = require('../apis/mediastore-data-2017-09-01.min.json');\n model.paginators = require('../apis/mediastore-data-2017-09-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.MediaStoreData;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['mobileanalytics'] = {};\nAWS.MobileAnalytics = Service.defineService('mobileanalytics', ['2014-06-05']);\nObject.defineProperty(apiLoader.services['mobileanalytics'], '2014-06-05', {\n get: function get() {\n var model = require('../apis/mobileanalytics-2014-06-05.min.json');\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.MobileAnalytics;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['mturk'] = {};\nAWS.MTurk = Service.defineService('mturk', ['2017-01-17']);\nObject.defineProperty(apiLoader.services['mturk'], '2017-01-17', {\n get: function get() {\n var model = require('../apis/mturk-requester-2017-01-17.min.json');\n model.paginators = require('../apis/mturk-requester-2017-01-17.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.MTurk;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['opsworks'] = {};\nAWS.OpsWorks = Service.defineService('opsworks', ['2013-02-18']);\nObject.defineProperty(apiLoader.services['opsworks'], '2013-02-18', {\n get: function get() {\n var model = require('../apis/opsworks-2013-02-18.min.json');\n model.paginators = require('../apis/opsworks-2013-02-18.paginators.json').pagination;\n model.waiters = require('../apis/opsworks-2013-02-18.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.OpsWorks;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['personalize'] = {};\nAWS.Personalize = Service.defineService('personalize', ['2018-05-22']);\nObject.defineProperty(apiLoader.services['personalize'], '2018-05-22', {\n get: function get() {\n var model = require('../apis/personalize-2018-05-22.min.json');\n model.paginators = require('../apis/personalize-2018-05-22.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Personalize;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['personalizeevents'] = {};\nAWS.PersonalizeEvents = Service.defineService('personalizeevents', ['2018-03-22']);\nObject.defineProperty(apiLoader.services['personalizeevents'], '2018-03-22', {\n get: function get() {\n var model = require('../apis/personalize-events-2018-03-22.min.json');\n model.paginators = require('../apis/personalize-events-2018-03-22.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.PersonalizeEvents;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['personalizeruntime'] = {};\nAWS.PersonalizeRuntime = Service.defineService('personalizeruntime', ['2018-05-22']);\nObject.defineProperty(apiLoader.services['personalizeruntime'], '2018-05-22', {\n get: function get() {\n var model = require('../apis/personalize-runtime-2018-05-22.min.json');\n model.paginators = require('../apis/personalize-runtime-2018-05-22.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.PersonalizeRuntime;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['polly'] = {};\nAWS.Polly = Service.defineService('polly', ['2016-06-10']);\nrequire('../lib/services/polly');\nObject.defineProperty(apiLoader.services['polly'], '2016-06-10', {\n get: function get() {\n var model = require('../apis/polly-2016-06-10.min.json');\n model.paginators = require('../apis/polly-2016-06-10.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Polly;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['pricing'] = {};\nAWS.Pricing = Service.defineService('pricing', ['2017-10-15']);\nObject.defineProperty(apiLoader.services['pricing'], '2017-10-15', {\n get: function get() {\n var model = require('../apis/pricing-2017-10-15.min.json');\n model.paginators = require('../apis/pricing-2017-10-15.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Pricing;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['rds'] = {};\nAWS.RDS = Service.defineService('rds', ['2013-01-10', '2013-02-12', '2013-09-09', '2014-09-01', '2014-09-01*', '2014-10-31']);\nrequire('../lib/services/rds');\nObject.defineProperty(apiLoader.services['rds'], '2013-01-10', {\n get: function get() {\n var model = require('../apis/rds-2013-01-10.min.json');\n model.paginators = require('../apis/rds-2013-01-10.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['rds'], '2013-02-12', {\n get: function get() {\n var model = require('../apis/rds-2013-02-12.min.json');\n model.paginators = require('../apis/rds-2013-02-12.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['rds'], '2013-09-09', {\n get: function get() {\n var model = require('../apis/rds-2013-09-09.min.json');\n model.paginators = require('../apis/rds-2013-09-09.paginators.json').pagination;\n model.waiters = require('../apis/rds-2013-09-09.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['rds'], '2014-09-01', {\n get: function get() {\n var model = require('../apis/rds-2014-09-01.min.json');\n model.paginators = require('../apis/rds-2014-09-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['rds'], '2014-10-31', {\n get: function get() {\n var model = require('../apis/rds-2014-10-31.min.json');\n model.paginators = require('../apis/rds-2014-10-31.paginators.json').pagination;\n model.waiters = require('../apis/rds-2014-10-31.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.RDS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['redshift'] = {};\nAWS.Redshift = Service.defineService('redshift', ['2012-12-01']);\nObject.defineProperty(apiLoader.services['redshift'], '2012-12-01', {\n get: function get() {\n var model = require('../apis/redshift-2012-12-01.min.json');\n model.paginators = require('../apis/redshift-2012-12-01.paginators.json').pagination;\n model.waiters = require('../apis/redshift-2012-12-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Redshift;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['rekognition'] = {};\nAWS.Rekognition = Service.defineService('rekognition', ['2016-06-27']);\nObject.defineProperty(apiLoader.services['rekognition'], '2016-06-27', {\n get: function get() {\n var model = require('../apis/rekognition-2016-06-27.min.json');\n model.paginators = require('../apis/rekognition-2016-06-27.paginators.json').pagination;\n model.waiters = require('../apis/rekognition-2016-06-27.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Rekognition;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['resourcegroups'] = {};\nAWS.ResourceGroups = Service.defineService('resourcegroups', ['2017-11-27']);\nObject.defineProperty(apiLoader.services['resourcegroups'], '2017-11-27', {\n get: function get() {\n var model = require('../apis/resource-groups-2017-11-27.min.json');\n model.paginators = require('../apis/resource-groups-2017-11-27.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ResourceGroups;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['route53'] = {};\nAWS.Route53 = Service.defineService('route53', ['2013-04-01']);\nrequire('../lib/services/route53');\nObject.defineProperty(apiLoader.services['route53'], '2013-04-01', {\n get: function get() {\n var model = require('../apis/route53-2013-04-01.min.json');\n model.paginators = require('../apis/route53-2013-04-01.paginators.json').pagination;\n model.waiters = require('../apis/route53-2013-04-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Route53;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['route53domains'] = {};\nAWS.Route53Domains = Service.defineService('route53domains', ['2014-05-15']);\nObject.defineProperty(apiLoader.services['route53domains'], '2014-05-15', {\n get: function get() {\n var model = require('../apis/route53domains-2014-05-15.min.json');\n model.paginators = require('../apis/route53domains-2014-05-15.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Route53Domains;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['s3'] = {};\nAWS.S3 = Service.defineService('s3', ['2006-03-01']);\nrequire('../lib/services/s3');\nObject.defineProperty(apiLoader.services['s3'], '2006-03-01', {\n get: function get() {\n var model = require('../apis/s3-2006-03-01.min.json');\n model.paginators = require('../apis/s3-2006-03-01.paginators.json').pagination;\n model.waiters = require('../apis/s3-2006-03-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.S3;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['secretsmanager'] = {};\nAWS.SecretsManager = Service.defineService('secretsmanager', ['2017-10-17']);\nObject.defineProperty(apiLoader.services['secretsmanager'], '2017-10-17', {\n get: function get() {\n var model = require('../apis/secretsmanager-2017-10-17.min.json');\n model.paginators = require('../apis/secretsmanager-2017-10-17.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.SecretsManager;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['servicecatalog'] = {};\nAWS.ServiceCatalog = Service.defineService('servicecatalog', ['2015-12-10']);\nObject.defineProperty(apiLoader.services['servicecatalog'], '2015-12-10', {\n get: function get() {\n var model = require('../apis/servicecatalog-2015-12-10.min.json');\n model.paginators = require('../apis/servicecatalog-2015-12-10.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.ServiceCatalog;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['ses'] = {};\nAWS.SES = Service.defineService('ses', ['2010-12-01']);\nObject.defineProperty(apiLoader.services['ses'], '2010-12-01', {\n get: function get() {\n var model = require('../apis/email-2010-12-01.min.json');\n model.paginators = require('../apis/email-2010-12-01.paginators.json').pagination;\n model.waiters = require('../apis/email-2010-12-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.SES;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['sns'] = {};\nAWS.SNS = Service.defineService('sns', ['2010-03-31']);\nObject.defineProperty(apiLoader.services['sns'], '2010-03-31', {\n get: function get() {\n var model = require('../apis/sns-2010-03-31.min.json');\n model.paginators = require('../apis/sns-2010-03-31.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.SNS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['sqs'] = {};\nAWS.SQS = Service.defineService('sqs', ['2012-11-05']);\nrequire('../lib/services/sqs');\nObject.defineProperty(apiLoader.services['sqs'], '2012-11-05', {\n get: function get() {\n var model = require('../apis/sqs-2012-11-05.min.json');\n model.paginators = require('../apis/sqs-2012-11-05.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.SQS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['ssm'] = {};\nAWS.SSM = Service.defineService('ssm', ['2014-11-06']);\nObject.defineProperty(apiLoader.services['ssm'], '2014-11-06', {\n get: function get() {\n var model = require('../apis/ssm-2014-11-06.min.json');\n model.paginators = require('../apis/ssm-2014-11-06.paginators.json').pagination;\n model.waiters = require('../apis/ssm-2014-11-06.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.SSM;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['storagegateway'] = {};\nAWS.StorageGateway = Service.defineService('storagegateway', ['2013-06-30']);\nObject.defineProperty(apiLoader.services['storagegateway'], '2013-06-30', {\n get: function get() {\n var model = require('../apis/storagegateway-2013-06-30.min.json');\n model.paginators = require('../apis/storagegateway-2013-06-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.StorageGateway;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['sts'] = {};\nAWS.STS = Service.defineService('sts', ['2011-06-15']);\nrequire('../lib/services/sts');\nObject.defineProperty(apiLoader.services['sts'], '2011-06-15', {\n get: function get() {\n var model = require('../apis/sts-2011-06-15.min.json');\n model.paginators = require('../apis/sts-2011-06-15.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.STS;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['translate'] = {};\nAWS.Translate = Service.defineService('translate', ['2017-07-01']);\nObject.defineProperty(apiLoader.services['translate'], '2017-07-01', {\n get: function get() {\n var model = require('../apis/translate-2017-07-01.min.json');\n model.paginators = require('../apis/translate-2017-07-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Translate;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['waf'] = {};\nAWS.WAF = Service.defineService('waf', ['2015-08-24']);\nObject.defineProperty(apiLoader.services['waf'], '2015-08-24', {\n get: function get() {\n var model = require('../apis/waf-2015-08-24.min.json');\n model.paginators = require('../apis/waf-2015-08-24.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.WAF;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['workdocs'] = {};\nAWS.WorkDocs = Service.defineService('workdocs', ['2016-05-01']);\nObject.defineProperty(apiLoader.services['workdocs'], '2016-05-01', {\n get: function get() {\n var model = require('../apis/workdocs-2016-05-01.min.json');\n model.paginators = require('../apis/workdocs-2016-05-01.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.WorkDocs;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['xray'] = {};\nAWS.XRay = Service.defineService('xray', ['2016-04-12']);\nObject.defineProperty(apiLoader.services['xray'], '2016-04-12', {\n get: function get() {\n var model = require('../apis/xray-2016-04-12.min.json');\n model.paginators = require('../apis/xray-2016-04-12.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.XRay;\n","function apiLoader(svc, version) {\n if (!apiLoader.services.hasOwnProperty(svc)) {\n throw new Error('InvalidService: Failed to load api for ' + svc);\n }\n return apiLoader.services[svc][version];\n}\n\n/**\n * @api private\n *\n * This member of AWS.apiLoader is private, but changing it will necessitate a\n * change to ../scripts/services-table-generator.ts\n */\napiLoader.services = {};\n\n/**\n * @api private\n */\nmodule.exports = apiLoader;\n","require('./browser_loader');\n\nvar AWS = require('./core');\n\nif (typeof window !== 'undefined') window.AWS = AWS;\nif (typeof module !== 'undefined') {\n /**\n * @api private\n */\n module.exports = AWS;\n}\nif (typeof self !== 'undefined') self.AWS = AWS;\n\n/**\n * @private\n * DO NOT REMOVE\n * browser builder will strip out this line if services are supplied on the command line.\n */\nrequire('../clients/browser_default');\n","var Hmac = require('./browserHmac');\nvar Md5 = require('./browserMd5');\nvar Sha1 = require('./browserSha1');\nvar Sha256 = require('./browserSha256');\n\n/**\n * @api private\n */\nmodule.exports = exports = {\n createHash: function createHash(alg) {\n alg = alg.toLowerCase();\n if (alg === 'md5') {\n return new Md5();\n } else if (alg === 'sha256') {\n return new Sha256();\n } else if (alg === 'sha1') {\n return new Sha1();\n }\n\n throw new Error('Hash algorithm ' + alg + ' is not supported in the browser SDK');\n },\n createHmac: function createHmac(alg, key) {\n alg = alg.toLowerCase();\n if (alg === 'md5') {\n return new Hmac(Md5, key);\n } else if (alg === 'sha256') {\n return new Hmac(Sha256, key);\n } else if (alg === 'sha1') {\n return new Hmac(Sha1, key);\n }\n\n throw new Error('HMAC algorithm ' + alg + ' is not supported in the browser SDK');\n },\n createSign: function() {\n throw new Error('createSign is not implemented in the browser');\n }\n };\n","var Buffer = require('buffer/').Buffer;\n\n/**\n * This is a polyfill for the static method `isView` of `ArrayBuffer`, which is\n * e.g. missing in IE 10.\n *\n * @api private\n */\nif (\n typeof ArrayBuffer !== 'undefined' &&\n typeof ArrayBuffer.isView === 'undefined'\n) {\n ArrayBuffer.isView = function(arg) {\n return viewStrings.indexOf(Object.prototype.toString.call(arg)) > -1;\n };\n}\n\n/**\n * @api private\n */\nvar viewStrings = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object DataView]',\n];\n\n/**\n * @api private\n */\nfunction isEmptyData(data) {\n if (typeof data === 'string') {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\n\n/**\n * @api private\n */\nfunction convertToBuffer(data) {\n if (typeof data === 'string') {\n data = new Buffer(data, 'utf8');\n }\n\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n\n return new Uint8Array(data);\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = {\n isEmptyData: isEmptyData,\n convertToBuffer: convertToBuffer,\n};\n","var hashUtils = require('./browserHashUtils');\n\n/**\n * @api private\n */\nfunction Hmac(hashCtor, secret) {\n this.hash = new hashCtor();\n this.outer = new hashCtor();\n\n var inner = bufferFromSecret(hashCtor, secret);\n var outer = new Uint8Array(hashCtor.BLOCK_SIZE);\n outer.set(inner);\n\n for (var i = 0; i < hashCtor.BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n\n this.hash.update(inner);\n this.outer.update(outer);\n\n // Zero out the copied key buffer.\n for (var i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Hmac;\n\nHmac.prototype.update = function (toHash) {\n if (hashUtils.isEmptyData(toHash) || this.error) {\n return this;\n }\n\n try {\n this.hash.update(hashUtils.convertToBuffer(toHash));\n } catch (e) {\n this.error = e;\n }\n\n return this;\n};\n\nHmac.prototype.digest = function (encoding) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n\n return this.outer.digest(encoding);\n};\n\nfunction bufferFromSecret(hashCtor, secret) {\n var input = hashUtils.convertToBuffer(secret);\n if (input.byteLength > hashCtor.BLOCK_SIZE) {\n var bufferHash = new hashCtor;\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n var buffer = new Uint8Array(hashCtor.BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n","var hashUtils = require('./browserHashUtils');\nvar Buffer = require('buffer/').Buffer;\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 16;\n\nvar INIT = [\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n];\n\n/**\n * @api private\n */\nfunction Md5() {\n this.state = [\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n ];\n this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE));\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Md5;\n\nMd5.BLOCK_SIZE = BLOCK_SIZE;\n\nMd5.prototype.update = function (sourceData) {\n if (hashUtils.isEmptyData(sourceData)) {\n return this;\n } else if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n var data = hashUtils.convertToBuffer(sourceData);\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n while (byteLength > 0) {\n this.buffer.setUint8(this.bufferLength++, data[position++]);\n byteLength--;\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n\n return this;\n};\n\nMd5.prototype.digest = function (encoding) {\n if (!this.finished) {\n var _a = this, buffer = _a.buffer, undecoratedLength = _a.bufferLength, bytesHashed = _a.bytesHashed;\n var bitsHashed = bytesHashed * 8;\n buffer.setUint8(this.bufferLength++, 128);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n buffer.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n buffer.setUint8(i, 0);\n }\n buffer.setUint32(BLOCK_SIZE - 8, bitsHashed >>> 0, true);\n buffer.setUint32(BLOCK_SIZE - 4, Math.floor(bitsHashed / 0x100000000), true);\n this.hashBuffer();\n this.finished = true;\n }\n var out = new DataView(new ArrayBuffer(DIGEST_LENGTH));\n for (var i = 0; i < 4; i++) {\n out.setUint32(i * 4, this.state[i], true);\n }\n var buff = new Buffer(out.buffer, out.byteOffset, out.byteLength);\n return encoding ? buff.toString(encoding) : buff;\n};\n\nMd5.prototype.hashBuffer = function () {\n var _a = this, buffer = _a.buffer, state = _a.state;\n var a = state[0], b = state[1], c = state[2], d = state[3];\n a = ff(a, b, c, d, buffer.getUint32(0, true), 7, 0xd76aa478);\n d = ff(d, a, b, c, buffer.getUint32(4, true), 12, 0xe8c7b756);\n c = ff(c, d, a, b, buffer.getUint32(8, true), 17, 0x242070db);\n b = ff(b, c, d, a, buffer.getUint32(12, true), 22, 0xc1bdceee);\n a = ff(a, b, c, d, buffer.getUint32(16, true), 7, 0xf57c0faf);\n d = ff(d, a, b, c, buffer.getUint32(20, true), 12, 0x4787c62a);\n c = ff(c, d, a, b, buffer.getUint32(24, true), 17, 0xa8304613);\n b = ff(b, c, d, a, buffer.getUint32(28, true), 22, 0xfd469501);\n a = ff(a, b, c, d, buffer.getUint32(32, true), 7, 0x698098d8);\n d = ff(d, a, b, c, buffer.getUint32(36, true), 12, 0x8b44f7af);\n c = ff(c, d, a, b, buffer.getUint32(40, true), 17, 0xffff5bb1);\n b = ff(b, c, d, a, buffer.getUint32(44, true), 22, 0x895cd7be);\n a = ff(a, b, c, d, buffer.getUint32(48, true), 7, 0x6b901122);\n d = ff(d, a, b, c, buffer.getUint32(52, true), 12, 0xfd987193);\n c = ff(c, d, a, b, buffer.getUint32(56, true), 17, 0xa679438e);\n b = ff(b, c, d, a, buffer.getUint32(60, true), 22, 0x49b40821);\n a = gg(a, b, c, d, buffer.getUint32(4, true), 5, 0xf61e2562);\n d = gg(d, a, b, c, buffer.getUint32(24, true), 9, 0xc040b340);\n c = gg(c, d, a, b, buffer.getUint32(44, true), 14, 0x265e5a51);\n b = gg(b, c, d, a, buffer.getUint32(0, true), 20, 0xe9b6c7aa);\n a = gg(a, b, c, d, buffer.getUint32(20, true), 5, 0xd62f105d);\n d = gg(d, a, b, c, buffer.getUint32(40, true), 9, 0x02441453);\n c = gg(c, d, a, b, buffer.getUint32(60, true), 14, 0xd8a1e681);\n b = gg(b, c, d, a, buffer.getUint32(16, true), 20, 0xe7d3fbc8);\n a = gg(a, b, c, d, buffer.getUint32(36, true), 5, 0x21e1cde6);\n d = gg(d, a, b, c, buffer.getUint32(56, true), 9, 0xc33707d6);\n c = gg(c, d, a, b, buffer.getUint32(12, true), 14, 0xf4d50d87);\n b = gg(b, c, d, a, buffer.getUint32(32, true), 20, 0x455a14ed);\n a = gg(a, b, c, d, buffer.getUint32(52, true), 5, 0xa9e3e905);\n d = gg(d, a, b, c, buffer.getUint32(8, true), 9, 0xfcefa3f8);\n c = gg(c, d, a, b, buffer.getUint32(28, true), 14, 0x676f02d9);\n b = gg(b, c, d, a, buffer.getUint32(48, true), 20, 0x8d2a4c8a);\n a = hh(a, b, c, d, buffer.getUint32(20, true), 4, 0xfffa3942);\n d = hh(d, a, b, c, buffer.getUint32(32, true), 11, 0x8771f681);\n c = hh(c, d, a, b, buffer.getUint32(44, true), 16, 0x6d9d6122);\n b = hh(b, c, d, a, buffer.getUint32(56, true), 23, 0xfde5380c);\n a = hh(a, b, c, d, buffer.getUint32(4, true), 4, 0xa4beea44);\n d = hh(d, a, b, c, buffer.getUint32(16, true), 11, 0x4bdecfa9);\n c = hh(c, d, a, b, buffer.getUint32(28, true), 16, 0xf6bb4b60);\n b = hh(b, c, d, a, buffer.getUint32(40, true), 23, 0xbebfbc70);\n a = hh(a, b, c, d, buffer.getUint32(52, true), 4, 0x289b7ec6);\n d = hh(d, a, b, c, buffer.getUint32(0, true), 11, 0xeaa127fa);\n c = hh(c, d, a, b, buffer.getUint32(12, true), 16, 0xd4ef3085);\n b = hh(b, c, d, a, buffer.getUint32(24, true), 23, 0x04881d05);\n a = hh(a, b, c, d, buffer.getUint32(36, true), 4, 0xd9d4d039);\n d = hh(d, a, b, c, buffer.getUint32(48, true), 11, 0xe6db99e5);\n c = hh(c, d, a, b, buffer.getUint32(60, true), 16, 0x1fa27cf8);\n b = hh(b, c, d, a, buffer.getUint32(8, true), 23, 0xc4ac5665);\n a = ii(a, b, c, d, buffer.getUint32(0, true), 6, 0xf4292244);\n d = ii(d, a, b, c, buffer.getUint32(28, true), 10, 0x432aff97);\n c = ii(c, d, a, b, buffer.getUint32(56, true), 15, 0xab9423a7);\n b = ii(b, c, d, a, buffer.getUint32(20, true), 21, 0xfc93a039);\n a = ii(a, b, c, d, buffer.getUint32(48, true), 6, 0x655b59c3);\n d = ii(d, a, b, c, buffer.getUint32(12, true), 10, 0x8f0ccc92);\n c = ii(c, d, a, b, buffer.getUint32(40, true), 15, 0xffeff47d);\n b = ii(b, c, d, a, buffer.getUint32(4, true), 21, 0x85845dd1);\n a = ii(a, b, c, d, buffer.getUint32(32, true), 6, 0x6fa87e4f);\n d = ii(d, a, b, c, buffer.getUint32(60, true), 10, 0xfe2ce6e0);\n c = ii(c, d, a, b, buffer.getUint32(24, true), 15, 0xa3014314);\n b = ii(b, c, d, a, buffer.getUint32(52, true), 21, 0x4e0811a1);\n a = ii(a, b, c, d, buffer.getUint32(16, true), 6, 0xf7537e82);\n d = ii(d, a, b, c, buffer.getUint32(44, true), 10, 0xbd3af235);\n c = ii(c, d, a, b, buffer.getUint32(8, true), 15, 0x2ad7d2bb);\n b = ii(b, c, d, a, buffer.getUint32(36, true), 21, 0xeb86d391);\n state[0] = (a + state[0]) & 0xFFFFFFFF;\n state[1] = (b + state[1]) & 0xFFFFFFFF;\n state[2] = (c + state[2]) & 0xFFFFFFFF;\n state[3] = (d + state[3]) & 0xFFFFFFFF;\n};\n\nfunction cmn(q, a, b, x, s, t) {\n a = (((a + q) & 0xFFFFFFFF) + ((x + t) & 0xFFFFFFFF)) & 0xFFFFFFFF;\n return (((a << s) | (a >>> (32 - s))) + b) & 0xFFFFFFFF;\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | (~d)), a, b, x, s, t);\n}\n","var Buffer = require('buffer/').Buffer;\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 20;\n\nvar KEY = new Uint32Array([\n 0x5a827999,\n 0x6ed9eba1,\n 0x8f1bbcdc | 0,\n 0xca62c1d6 | 0\n]);\n\nvar INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n];\n\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n\n/**\n * @api private\n */\nfunction Sha1() {\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n // The first 64 bytes (16 words) is the data chunk\n this.block = new Uint32Array(80);\n this.offset = 0;\n this.shift = 24;\n this.totalLength = 0;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Sha1;\n\nSha1.BLOCK_SIZE = BLOCK_SIZE;\n\nSha1.prototype.update = function (data) {\n if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n if (hashUtils.isEmptyData(data)) {\n return this;\n }\n\n data = hashUtils.convertToBuffer(data);\n\n var length = data.length;\n this.totalLength += length * 8;\n for (var i = 0; i < length; i++) {\n this.write(data[i]);\n }\n\n return this;\n};\n\nSha1.prototype.write = function write(byte) {\n this.block[this.offset] |= (byte & 0xff) << this.shift;\n if (this.shift) {\n this.shift -= 8;\n } else {\n this.offset++;\n this.shift = 24;\n }\n\n if (this.offset === 16) this.processBlock();\n};\n\nSha1.prototype.digest = function (encoding) {\n // Pad\n this.write(0x80);\n if (this.offset > 14 || (this.offset === 14 && this.shift < 24)) {\n this.processBlock();\n }\n this.offset = 14;\n this.shift = 24;\n\n // 64-bit length big-endian\n this.write(0x00); // numbers this big aren't accurate in javascript anyway\n this.write(0x00); // ..So just hard-code to zero.\n this.write(this.totalLength > 0xffffffffff ? this.totalLength / 0x10000000000 : 0x00);\n this.write(this.totalLength > 0xffffffff ? this.totalLength / 0x100000000 : 0x00);\n for (var s = 24; s >= 0; s -= 8) {\n this.write(this.totalLength >> s);\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Buffer(DIGEST_LENGTH);\n var outView = new DataView(out.buffer);\n outView.setUint32(0, this.h0, false);\n outView.setUint32(4, this.h1, false);\n outView.setUint32(8, this.h2, false);\n outView.setUint32(12, this.h3, false);\n outView.setUint32(16, this.h4, false);\n\n return encoding ? out.toString(encoding) : out;\n};\n\nSha1.prototype.processBlock = function processBlock() {\n // Extend the sixteen 32-bit words into eighty 32-bit words:\n for (var i = 16; i < 80; i++) {\n var w = this.block[i - 3] ^ this.block[i - 8] ^ this.block[i - 14] ^ this.block[i - 16];\n this.block[i] = (w << 1) | (w >>> 31);\n }\n\n // Initialize hash value for this chunk:\n var a = this.h0;\n var b = this.h1;\n var c = this.h2;\n var d = this.h3;\n var e = this.h4;\n var f, k;\n\n // Main loop:\n for (i = 0; i < 80; i++) {\n if (i < 20) {\n f = d ^ (b & (c ^ d));\n k = 0x5A827999;\n }\n else if (i < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n }\n else if (i < 60) {\n f = (b & c) | (d & (b | c));\n k = 0x8F1BBCDC;\n }\n else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n var temp = (a << 5 | a >>> 27) + f + e + k + (this.block[i]|0);\n e = d;\n d = c;\n c = (b << 30 | b >>> 2);\n b = a;\n a = temp;\n }\n\n // Add this chunk's hash to result so far:\n this.h0 = (this.h0 + a) | 0;\n this.h1 = (this.h1 + b) | 0;\n this.h2 = (this.h2 + c) | 0;\n this.h3 = (this.h3 + d) | 0;\n this.h4 = (this.h4 + e) | 0;\n\n // The block is now reusable.\n this.offset = 0;\n for (i = 0; i < 16; i++) {\n this.block[i] = 0;\n }\n};\n","var Buffer = require('buffer/').Buffer;\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 32;\n\nvar KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n\nvar INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n];\n\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n\n/**\n * @private\n */\nfunction Sha256() {\n this.state = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n ];\n this.temp = new Int32Array(64);\n this.buffer = new Uint8Array(64);\n this.bufferLength = 0;\n this.bytesHashed = 0;\n /**\n * @private\n */\n this.finished = false;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Sha256;\n\nSha256.BLOCK_SIZE = BLOCK_SIZE;\n\nSha256.prototype.update = function (data) {\n if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n if (hashUtils.isEmptyData(data)) {\n return this;\n }\n\n data = hashUtils.convertToBuffer(data);\n\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n throw new Error('Cannot hash more than 2^53 - 1 bits');\n }\n\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n\n return this;\n};\n\nSha256.prototype.digest = function (encoding) {\n if (!this.finished) {\n var bitsHashed = this.bytesHashed * 8;\n var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n var undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n this.hashBuffer();\n this.finished = true;\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Buffer(DIGEST_LENGTH);\n for (var i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return encoding ? out.toString(encoding) : out;\n};\n\nSha256.prototype.hashBuffer = function () {\n var _a = this,\n buffer = _a.buffer,\n state = _a.state;\n var state0 = state[0],\n state1 = state[1],\n state2 = state[2],\n state3 = state[3],\n state4 = state[4],\n state5 = state[5],\n state6 = state[6],\n state7 = state[7];\n for (var i = 0; i < BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] = (((buffer[i * 4] & 0xff) << 24) |\n ((buffer[(i * 4) + 1] & 0xff) << 16) |\n ((buffer[(i * 4) + 2] & 0xff) << 8) |\n (buffer[(i * 4) + 3] & 0xff));\n }\n else {\n var u = this.temp[i - 2];\n var t1_1 = (u >>> 17 | u << 15) ^\n (u >>> 19 | u << 13) ^\n (u >>> 10);\n u = this.temp[i - 15];\n var t2_1 = (u >>> 7 | u << 25) ^\n (u >>> 18 | u << 14) ^\n (u >>> 3);\n this.temp[i] = (t1_1 + this.temp[i - 7] | 0) +\n (t2_1 + this.temp[i - 16] | 0);\n }\n var t1 = (((((state4 >>> 6 | state4 << 26) ^\n (state4 >>> 11 | state4 << 21) ^\n (state4 >>> 25 | state4 << 7))\n + ((state4 & state5) ^ (~state4 & state6))) | 0)\n + ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) | 0;\n var t2 = (((state0 >>> 2 | state0 << 30) ^\n (state0 >>> 13 | state0 << 19) ^\n (state0 >>> 22 | state0 << 10)) + ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) | 0;\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n};\n","var util = require('./util');\n\n// browser specific modules\nutil.crypto.lib = require('./browserCryptoLib');\nutil.Buffer = require('buffer/').Buffer;\nutil.url = require('url/');\nutil.querystring = require('querystring/');\nutil.realClock = require('./realclock/browserClock');\nutil.environment = 'js';\nutil.createEventStream = require('./event-stream/buffered-create-event-stream').createEventStream;\nutil.isBrowser = function() { return true; };\nutil.isNode = function() { return false; };\n\nvar AWS = require('./core');\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nrequire('./credentials/temporary_credentials');\nrequire('./credentials/chainable_temporary_credentials');\nrequire('./credentials/web_identity_credentials');\nrequire('./credentials/cognito_identity_credentials');\nrequire('./credentials/saml_credentials');\n\n// Load the DOMParser XML parser\nAWS.XML.Parser = require('./xml/browser_parser');\n\n// Load the XHR HttpClient\nrequire('./http/xhr');\n\nif (typeof process === 'undefined') {\n var process = {\n browser: true\n };\n}\n","var AWS = require('../core'),\n url = AWS.util.url,\n crypto = AWS.util.crypto.lib,\n base64Encode = AWS.util.base64.encode,\n inherit = AWS.util.inherit;\n\nvar queryEncode = function (string) {\n var replacements = {\n '+': '-',\n '=': '_',\n '/': '~'\n };\n return string.replace(/[\\+=\\/]/g, function (match) {\n return replacements[match];\n });\n};\n\nvar signPolicy = function (policy, privateKey) {\n var sign = crypto.createSign('RSA-SHA1');\n sign.write(policy);\n return queryEncode(sign.sign(privateKey, 'base64'));\n};\n\nvar signWithCannedPolicy = function (url, expires, keyPairId, privateKey) {\n var policy = JSON.stringify({\n Statement: [\n {\n Resource: url,\n Condition: { DateLessThan: { 'AWS:EpochTime': expires } }\n }\n ]\n });\n\n return {\n Expires: expires,\n 'Key-Pair-Id': keyPairId,\n Signature: signPolicy(policy.toString(), privateKey)\n };\n};\n\nvar signWithCustomPolicy = function (policy, keyPairId, privateKey) {\n policy = policy.replace(/\\s/mg, '');\n\n return {\n Policy: queryEncode(base64Encode(policy)),\n 'Key-Pair-Id': keyPairId,\n Signature: signPolicy(policy, privateKey)\n };\n};\n\nvar determineScheme = function (url) {\n var parts = url.split('://');\n if (parts.length < 2) {\n throw new Error('Invalid URL.');\n }\n\n return parts[0].replace('*', '');\n};\n\nvar getRtmpUrl = function (rtmpUrl) {\n var parsed = url.parse(rtmpUrl);\n return parsed.path.replace(/^\\//, '') + (parsed.hash || '');\n};\n\nvar getResource = function (url) {\n switch (determineScheme(url)) {\n case 'http':\n case 'https':\n return url;\n case 'rtmp':\n return getRtmpUrl(url);\n default:\n throw new Error('Invalid URI scheme. Scheme must be one of'\n + ' http, https, or rtmp');\n }\n};\n\nvar handleError = function (err, callback) {\n if (!callback || typeof callback !== 'function') {\n throw err;\n }\n\n callback(err);\n};\n\nvar handleSuccess = function (result, callback) {\n if (!callback || typeof callback !== 'function') {\n return result;\n }\n\n callback(null, result);\n};\n\nAWS.CloudFront.Signer = inherit({\n /**\n * A signer object can be used to generate signed URLs and cookies for granting\n * access to content on restricted CloudFront distributions.\n *\n * @see http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\n *\n * @param keyPairId [String] (Required) The ID of the CloudFront key pair\n * being used.\n * @param privateKey [String] (Required) A private key in RSA format.\n */\n constructor: function Signer(keyPairId, privateKey) {\n if (keyPairId === void 0 || privateKey === void 0) {\n throw new Error('A key pair ID and private key are required');\n }\n\n this.keyPairId = keyPairId;\n this.privateKey = privateKey;\n },\n\n /**\n * Create a signed Amazon CloudFront Cookie.\n *\n * @param options [Object] The options to create a signed cookie.\n * @option options url [String] The URL to which the signature will grant\n * access. Required unless you pass in a full\n * policy.\n * @option options expires [Number] A Unix UTC timestamp indicating when the\n * signature should expire. Required unless you\n * pass in a full policy.\n * @option options policy [String] A CloudFront JSON policy. Required unless\n * you pass in a url and an expiry time.\n *\n * @param cb [Function] if a callback is provided, this function will\n * pass the hash as the second parameter (after the error parameter) to\n * the callback function.\n *\n * @return [Object] if called synchronously (with no callback), returns the\n * signed cookie parameters.\n * @return [null] nothing is returned if a callback is provided.\n */\n getSignedCookie: function (options, cb) {\n var signatureHash = 'policy' in options\n ? signWithCustomPolicy(options.policy, this.keyPairId, this.privateKey)\n : signWithCannedPolicy(options.url, options.expires, this.keyPairId, this.privateKey);\n\n var cookieHash = {};\n for (var key in signatureHash) {\n if (Object.prototype.hasOwnProperty.call(signatureHash, key)) {\n cookieHash['CloudFront-' + key] = signatureHash[key];\n }\n }\n\n return handleSuccess(cookieHash, cb);\n },\n\n /**\n * Create a signed Amazon CloudFront URL.\n *\n * Keep in mind that URLs meant for use in media/flash players may have\n * different requirements for URL formats (e.g. some require that the\n * extension be removed, some require the file name to be prefixed\n * - mp4:, some require you to add \"/cfx/st\" into your URL).\n *\n * @param options [Object] The options to create a signed URL.\n * @option options url [String] The URL to which the signature will grant\n * access. Any query params included with\n * the URL should be encoded. Required.\n * @option options expires [Number] A Unix UTC timestamp indicating when the\n * signature should expire. Required unless you\n * pass in a full policy.\n * @option options policy [String] A CloudFront JSON policy. Required unless\n * you pass in a url and an expiry time.\n *\n * @param cb [Function] if a callback is provided, this function will\n * pass the URL as the second parameter (after the error parameter) to\n * the callback function.\n *\n * @return [String] if called synchronously (with no callback), returns the\n * signed URL.\n * @return [null] nothing is returned if a callback is provided.\n */\n getSignedUrl: function (options, cb) {\n try {\n var resource = getResource(options.url);\n } catch (err) {\n return handleError(err, cb);\n }\n\n var parsedUrl = url.parse(options.url, true),\n signatureHash = Object.prototype.hasOwnProperty.call(options, 'policy')\n ? signWithCustomPolicy(options.policy, this.keyPairId, this.privateKey)\n : signWithCannedPolicy(resource, options.expires, this.keyPairId, this.privateKey);\n\n parsedUrl.search = null;\n for (var key in signatureHash) {\n if (Object.prototype.hasOwnProperty.call(signatureHash, key)) {\n parsedUrl.query[key] = signatureHash[key];\n }\n }\n\n try {\n var signedUrl = determineScheme(options.url) === 'rtmp'\n ? getRtmpUrl(url.format(parsedUrl))\n : url.format(parsedUrl);\n } catch (err) {\n return handleError(err, cb);\n }\n\n return handleSuccess(signedUrl, cb);\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.CloudFront.Signer;\n","var AWS = require('./core');\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nvar PromisesDependency;\n\n/**\n * The main configuration class used by all service objects to set\n * the region, credentials, and other options for requests.\n *\n * By default, credentials and region settings are left unconfigured.\n * This should be configured by the application before using any\n * AWS service APIs.\n *\n * In order to set global configuration options, properties should\n * be assigned to the global {AWS.config} object.\n *\n * @see AWS.config\n *\n * @!group General Configuration Options\n *\n * @!attribute credentials\n * @return [AWS.Credentials] the AWS credentials to sign requests with.\n *\n * @!attribute region\n * @example Set the global region setting to us-west-2\n * AWS.config.update({region: 'us-west-2'});\n * @return [AWS.Credentials] The region to send service requests to.\n * @see http://docs.amazonwebservices.com/general/latest/gr/rande.html\n * A list of available endpoints for each AWS service\n *\n * @!attribute maxRetries\n * @return [Integer] the maximum amount of retries to perform for a\n * service request. By default this value is calculated by the specific\n * service object that the request is being made to.\n *\n * @!attribute maxRedirects\n * @return [Integer] the maximum amount of redirects to follow for a\n * service request. Defaults to 10.\n *\n * @!attribute paramValidation\n * @return [Boolean|map] whether input parameters should be validated against\n * the operation description before sending the request. Defaults to true.\n * Pass a map to enable any of the following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n *\n * @!attribute computeChecksums\n * @return [Boolean] whether to compute checksums for payload bodies when\n * the service accepts it (currently supported in S3 and SQS only).\n *\n * @!attribute convertResponseTypes\n * @return [Boolean] whether types are converted when parsing response data.\n * Currently only supported for JSON based services. Turning this off may\n * improve performance on large response payloads. Defaults to `true`.\n *\n * @!attribute correctClockSkew\n * @return [Boolean] whether to apply a clock skew correction and retry\n * requests that fail because of an skewed client clock. Defaults to\n * `false`.\n *\n * @!attribute sslEnabled\n * @return [Boolean] whether SSL is enabled for requests\n *\n * @!attribute s3ForcePathStyle\n * @return [Boolean] whether to force path style URLs for S3 objects\n *\n * @!attribute s3BucketEndpoint\n * @note Setting this configuration option requires an `endpoint` to be\n * provided explicitly to the service constructor.\n * @return [Boolean] whether the provided endpoint addresses an individual\n * bucket (false if it addresses the root API endpoint).\n *\n * @!attribute s3DisableBodySigning\n * @return [Boolean] whether to disable S3 body signing when using signature version `v4`.\n * Body signing can only be disabled when using https. Defaults to `true`.\n *\n * @!attribute s3UsEast1RegionalEndpoint\n * @return ['legacy'|'regional'] when region is set to 'us-east-1', whether to send s3\n * request to global endpoints or 'us-east-1' regional endpoints. This config is only\n * applicable to S3 client;\n * Defaults to 'legacy'\n * @!attribute s3UseArnRegion\n * @return [Boolean] whether to override the request region with the region inferred\n * from requested resource's ARN. Only available for S3 buckets\n * Defaults to `true`\n *\n * @!attribute useAccelerateEndpoint\n * @note This configuration option is only compatible with S3 while accessing\n * dns-compatible buckets.\n * @return [Boolean] Whether to use the Accelerate endpoint with the S3 service.\n * Defaults to `false`.\n *\n * @!attribute retryDelayOptions\n * @example Set the base retry delay for all services to 300 ms\n * AWS.config.update({retryDelayOptions: {base: 300}});\n * // Delays with maxRetries = 3: 300, 600, 1200\n * @example Set a custom backoff function to provide delay values on retries\n * AWS.config.update({retryDelayOptions: {customBackoff: function(retryCount, err) {\n * // returns delay in ms\n * }}});\n * @return [map] A set of options to configure the retry delay on retryable errors.\n * Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all services except\n * DynamoDB, where it defaults to 50ms.\n *\n * * **customBackoff ** [function] — A custom function that accepts a\n * retry count and error and returns the amount of time to delay in\n * milliseconds. If the result is a non-zero negative value, no further\n * retry attempts will be made. The `base` option will be ignored if this\n * option is supplied. The function is only called for retryable errors.\n *\n * @!attribute httpOptions\n * @return [map] A set of options to pass to the low-level HTTP request.\n * Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only supported in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — The number of milliseconds a request can\n * take before automatically being terminated.\n * Defaults to two minutes (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @!attribute logger\n * @return [#write,#log] an object that responds to .write() (like a stream)\n * or .log() (like the console object) in order to log information about\n * requests\n *\n * @!attribute systemClockOffset\n * @return [Number] an offset value in milliseconds to apply to all signing\n * times. Use this to compensate for clock skew when your system may be\n * out of sync with the service time. Note that this configuration option\n * can only be applied to the global `AWS.config` object and cannot be\n * overridden in service-specific configuration. Defaults to 0 milliseconds.\n *\n * @!attribute signatureVersion\n * @return [String] the signature version to sign requests with (overriding\n * the API configuration). Possible values are: 'v2', 'v3', 'v4'.\n *\n * @!attribute signatureCache\n * @return [Boolean] whether the signature to sign requests with (overriding\n * the API configuration) is cached. Only applies to the signature version 'v4'.\n * Defaults to `true`.\n *\n * @!attribute endpointDiscoveryEnabled\n * @return [Boolean|undefined] whether to call operations with endpoints\n * given by service dynamically. Setting this config to `true` will enable\n * endpoint discovery for all applicable operations. Setting it to `false`\n * will explicitly disable endpoint discovery even though operations that\n * require endpoint discovery will presumably fail. Leaving it to\n * `undefined` means SDK only do endpoint discovery when it's required.\n * Defaults to `undefined`\n *\n * @!attribute endpointCacheSize\n * @return [Number] the size of the global cache storing endpoints from endpoint\n * discovery operations. Once endpoint cache is created, updating this setting\n * cannot change existing cache size.\n * Defaults to 1000\n *\n * @!attribute hostPrefixEnabled\n * @return [Boolean] whether to marshal request parameters to the prefix of\n * hostname. Defaults to `true`.\n *\n * @!attribute stsRegionalEndpoints\n * @return ['legacy'|'regional'] whether to send sts request to global endpoints or\n * regional endpoints.\n * Defaults to 'legacy'.\n *\n * @!attribute useFipsEndpoint\n * @return [Boolean] Enables FIPS compatible endpoints. Defaults to `false`.\n *\n * @!attribute useDualstackEndpoint\n * @return [Boolean] Enables IPv6 dualstack endpoint. Defaults to `false`.\n */\nAWS.Config = AWS.util.inherit({\n /**\n * @!endgroup\n */\n\n /**\n * Creates a new configuration object. This is the object that passes\n * option data along to service requests, including credentials, security,\n * region information, and some service specific settings.\n *\n * @example Creating a new configuration object with credentials and region\n * var config = new AWS.Config({\n * accessKeyId: 'AKID', secretAccessKey: 'SECRET', region: 'us-west-2'\n * });\n * @option options accessKeyId [String] your AWS access key ID.\n * @option options secretAccessKey [String] your AWS secret access key.\n * @option options sessionToken [AWS.Credentials] the optional AWS\n * session token to sign requests with.\n * @option options credentials [AWS.Credentials] the AWS credentials\n * to sign requests with. You can either specify this object, or\n * specify the accessKeyId and secretAccessKey options directly.\n * @option options credentialProvider [AWS.CredentialProviderChain] the\n * provider chain used to resolve credentials if no static `credentials`\n * property is set.\n * @option options region [String] the region to send service requests to.\n * See {region} for more information.\n * @option options maxRetries [Integer] the maximum amount of retries to\n * attempt with a request. See {maxRetries} for more information.\n * @option options maxRedirects [Integer] the maximum amount of redirects to\n * follow with a request. See {maxRedirects} for more information.\n * @option options sslEnabled [Boolean] whether to enable SSL for\n * requests.\n * @option options paramValidation [Boolean|map] whether input parameters\n * should be validated against the operation description before sending\n * the request. Defaults to true. Pass a map to enable any of the\n * following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n * @option options computeChecksums [Boolean] whether to compute checksums\n * for payload bodies when the service accepts it (currently supported\n * in S3 only)\n * @option options convertResponseTypes [Boolean] whether types are converted\n * when parsing response data. Currently only supported for JSON based\n * services. Turning this off may improve performance on large response\n * payloads. Defaults to `true`.\n * @option options correctClockSkew [Boolean] whether to apply a clock skew\n * correction and retry requests that fail because of an skewed client\n * clock. Defaults to `false`.\n * @option options s3ForcePathStyle [Boolean] whether to force path\n * style URLs for S3 objects.\n * @option options s3BucketEndpoint [Boolean] whether the provided endpoint\n * addresses an individual bucket (false if it addresses the root API\n * endpoint). Note that setting this configuration option requires an\n * `endpoint` to be provided explicitly to the service constructor.\n * @option options s3DisableBodySigning [Boolean] whether S3 body signing\n * should be disabled when using signature version `v4`. Body signing\n * can only be disabled when using https. Defaults to `true`.\n * @option options s3UsEast1RegionalEndpoint ['legacy'|'regional'] when region\n * is set to 'us-east-1', whether to send s3 request to global endpoints or\n * 'us-east-1' regional endpoints. This config is only applicable to S3 client.\n * Defaults to `legacy`\n * @option options s3UseArnRegion [Boolean] whether to override the request region\n * with the region inferred from requested resource's ARN. Only available for S3 buckets\n * Defaults to `true`\n *\n * @option options retryDelayOptions [map] A set of options to configure\n * the retry delay on retryable errors. Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all\n * services except DynamoDB, where it defaults to 50ms.\n * * **customBackoff ** [function] — A custom function that accepts a\n * retry count and error and returns the amount of time to delay in\n * milliseconds. If the result is a non-zero negative value, no further\n * retry attempts will be made. The `base` option will be ignored if this\n * option is supplied. The function is only called for retryable errors.\n * @option options httpOptions [map] A set of options to pass to the low-level\n * HTTP request. Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Defaults to the global\n * agent (`http.globalAgent`) for non-SSL connections. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only available in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — Sets the socket to timeout after timeout\n * milliseconds of inactivity on the socket. Defaults to two minutes\n * (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @option options apiVersion [String, Date] a String in YYYY-MM-DD format\n * (or a date) that represents the latest possible API version that can be\n * used in all services (unless overridden by `apiVersions`). Specify\n * 'latest' to use the latest possible version.\n * @option options apiVersions [map] a map of service\n * identifiers (the lowercase service class name) with the API version to\n * use when instantiating a service. Specify 'latest' for each individual\n * that can use the latest available version.\n * @option options logger [#write,#log] an object that responds to .write()\n * (like a stream) or .log() (like the console object) in order to log\n * information about requests\n * @option options systemClockOffset [Number] an offset value in milliseconds\n * to apply to all signing times. Use this to compensate for clock skew\n * when your system may be out of sync with the service time. Note that\n * this configuration option can only be applied to the global `AWS.config`\n * object and cannot be overridden in service-specific configuration.\n * Defaults to 0 milliseconds.\n * @option options signatureVersion [String] the signature version to sign\n * requests with (overriding the API configuration). Possible values are:\n * 'v2', 'v3', 'v4'.\n * @option options signatureCache [Boolean] whether the signature to sign\n * requests with (overriding the API configuration) is cached. Only applies\n * to the signature version 'v4'. Defaults to `true`.\n * @option options dynamoDbCrc32 [Boolean] whether to validate the CRC32\n * checksum of HTTP response bodies returned by DynamoDB. Default: `true`.\n * @option options useAccelerateEndpoint [Boolean] Whether to use the\n * S3 Transfer Acceleration endpoint with the S3 service. Default: `false`.\n * @option options clientSideMonitoring [Boolean] whether to collect and\n * publish this client's performance metrics of all its API requests.\n * @option options endpointDiscoveryEnabled [Boolean|undefined] whether to\n * call operations with endpoints given by service dynamically. Setting this\n * config to `true` will enable endpoint discovery for all applicable operations.\n * Setting it to `false` will explicitly disable endpoint discovery even though\n * operations that require endpoint discovery will presumably fail. Leaving it\n * to `undefined` means SDK will only do endpoint discovery when it's required.\n * Defaults to `undefined`\n * @option options endpointCacheSize [Number] the size of the global cache storing\n * endpoints from endpoint discovery operations. Once endpoint cache is created,\n * updating this setting cannot change existing cache size.\n * Defaults to 1000\n * @option options hostPrefixEnabled [Boolean] whether to marshal request\n * parameters to the prefix of hostname.\n * Defaults to `true`.\n * @option options stsRegionalEndpoints ['legacy'|'regional'] whether to send sts request\n * to global endpoints or regional endpoints.\n * Defaults to 'legacy'.\n * @option options useFipsEndpoint [Boolean] Enables FIPS compatible endpoints.\n * Defaults to `false`.\n * @option options useDualstackEndpoint [Boolean] Enables IPv6 dualstack endpoint.\n * Defaults to `false`.\n */\n constructor: function Config(options) {\n if (options === undefined) options = {};\n options = this.extractCredentials(options);\n\n AWS.util.each.call(this, this.keys, function (key, value) {\n this.set(key, options[key], value);\n });\n },\n\n /**\n * @!group Managing Credentials\n */\n\n /**\n * Loads credentials from the configuration object. This is used internally\n * by the SDK to ensure that refreshable {Credentials} objects are properly\n * refreshed and loaded when sending a request. If you want to ensure that\n * your credentials are loaded prior to a request, you can use this method\n * directly to provide accurate credential data stored in the object.\n *\n * @note If you configure the SDK with static or environment credentials,\n * the credential data should already be present in {credentials} attribute.\n * This method is primarily necessary to load credentials from asynchronous\n * sources, or sources that can refresh credentials periodically.\n * @example Getting your access key\n * AWS.config.getCredentials(function(err) {\n * if (err) console.log(err.stack); // credentials not loaded\n * else console.log(\"Access Key:\", AWS.config.credentials.accessKeyId);\n * })\n * @callback callback function(err)\n * Called when the {credentials} have been properly set on the configuration\n * object.\n *\n * @param err [Error] if this is set, credentials were not successfully\n * loaded and this error provides information why.\n * @see credentials\n * @see Credentials\n */\n getCredentials: function getCredentials(callback) {\n var self = this;\n\n function finish(err) {\n callback(err, err ? null : self.credentials);\n }\n\n function credError(msg, err) {\n return new AWS.util.error(err || new Error(), {\n code: 'CredentialsError',\n message: msg,\n name: 'CredentialsError'\n });\n }\n\n function getAsyncCredentials() {\n self.credentials.get(function(err) {\n if (err) {\n var msg = 'Could not load credentials from ' +\n self.credentials.constructor.name;\n err = credError(msg, err);\n }\n finish(err);\n });\n }\n\n function getStaticCredentials() {\n var err = null;\n if (!self.credentials.accessKeyId || !self.credentials.secretAccessKey) {\n err = credError('Missing credentials');\n }\n finish(err);\n }\n\n if (self.credentials) {\n if (typeof self.credentials.get === 'function') {\n getAsyncCredentials();\n } else { // static credentials\n getStaticCredentials();\n }\n } else if (self.credentialProvider) {\n self.credentialProvider.resolve(function(err, creds) {\n if (err) {\n err = credError('Could not load credentials from any providers', err);\n }\n self.credentials = creds;\n finish(err);\n });\n } else {\n finish(credError('No credentials to load'));\n }\n },\n\n /**\n * @!group Loading and Setting Configuration Options\n */\n\n /**\n * @overload update(options, allowUnknownKeys = false)\n * Updates the current configuration object with new options.\n *\n * @example Update maxRetries property of a configuration object\n * config.update({maxRetries: 10});\n * @param [Object] options a map of option keys and values.\n * @param [Boolean] allowUnknownKeys whether unknown keys can be set on\n * the configuration object. Defaults to `false`.\n * @see constructor\n */\n update: function update(options, allowUnknownKeys) {\n allowUnknownKeys = allowUnknownKeys || false;\n options = this.extractCredentials(options);\n AWS.util.each.call(this, options, function (key, value) {\n if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) ||\n AWS.Service.hasService(key)) {\n this.set(key, value);\n }\n });\n },\n\n /**\n * Loads configuration data from a JSON file into this config object.\n * @note Loading configuration will reset all existing configuration\n * on the object.\n * @!macro nobrowser\n * @param path [String] the path relative to your process's current\n * working directory to load configuration from.\n * @return [AWS.Config] the same configuration object\n */\n loadFromPath: function loadFromPath(path) {\n this.clear();\n\n var options = JSON.parse(AWS.util.readFileSync(path));\n var fileSystemCreds = new AWS.FileSystemCredentials(path);\n var chain = new AWS.CredentialProviderChain();\n chain.providers.unshift(fileSystemCreds);\n chain.resolve(function (err, creds) {\n if (err) throw err;\n else options.credentials = creds;\n });\n\n this.constructor(options);\n\n return this;\n },\n\n /**\n * Clears configuration data on this object\n *\n * @api private\n */\n clear: function clear() {\n /*jshint forin:false */\n AWS.util.each.call(this, this.keys, function (key) {\n delete this[key];\n });\n\n // reset credential provider\n this.set('credentials', undefined);\n this.set('credentialProvider', undefined);\n },\n\n /**\n * Sets a property on the configuration object, allowing for a\n * default value\n * @api private\n */\n set: function set(property, value, defaultValue) {\n if (value === undefined) {\n if (defaultValue === undefined) {\n defaultValue = this.keys[property];\n }\n if (typeof defaultValue === 'function') {\n this[property] = defaultValue.call(this);\n } else {\n this[property] = defaultValue;\n }\n } else if (property === 'httpOptions' && this[property]) {\n // deep merge httpOptions\n this[property] = AWS.util.merge(this[property], value);\n } else {\n this[property] = value;\n }\n },\n\n /**\n * All of the keys with their default values.\n *\n * @constant\n * @api private\n */\n keys: {\n credentials: null,\n credentialProvider: null,\n region: null,\n logger: null,\n apiVersions: {},\n apiVersion: null,\n endpoint: undefined,\n httpOptions: {\n timeout: 120000\n },\n maxRetries: undefined,\n maxRedirects: 10,\n paramValidation: true,\n sslEnabled: true,\n s3ForcePathStyle: false,\n s3BucketEndpoint: false,\n s3DisableBodySigning: true,\n s3UsEast1RegionalEndpoint: 'legacy',\n s3UseArnRegion: undefined,\n computeChecksums: true,\n convertResponseTypes: true,\n correctClockSkew: false,\n customUserAgent: null,\n dynamoDbCrc32: true,\n systemClockOffset: 0,\n signatureVersion: null,\n signatureCache: true,\n retryDelayOptions: {},\n useAccelerateEndpoint: false,\n clientSideMonitoring: false,\n endpointDiscoveryEnabled: undefined,\n endpointCacheSize: 1000,\n hostPrefixEnabled: true,\n stsRegionalEndpoints: 'legacy',\n useFipsEndpoint: false,\n useDualstackEndpoint: false\n },\n\n /**\n * Extracts accessKeyId, secretAccessKey and sessionToken\n * from a configuration hash.\n *\n * @api private\n */\n extractCredentials: function extractCredentials(options) {\n if (options.accessKeyId && options.secretAccessKey) {\n options = AWS.util.copy(options);\n options.credentials = new AWS.Credentials(options);\n }\n return options;\n },\n\n /**\n * Sets the promise dependency the SDK will use wherever Promises are returned.\n * Passing `null` will force the SDK to use native Promises if they are available.\n * If native Promises are not available, passing `null` will have no effect.\n * @param [Constructor] dep A reference to a Promise constructor\n */\n setPromisesDependency: function setPromisesDependency(dep) {\n PromisesDependency = dep;\n // if null was passed in, we should try to use native promises\n if (dep === null && typeof Promise === 'function') {\n PromisesDependency = Promise;\n }\n var constructors = [AWS.Request, AWS.Credentials, AWS.CredentialProviderChain];\n if (AWS.S3) {\n constructors.push(AWS.S3);\n if (AWS.S3.ManagedUpload) {\n constructors.push(AWS.S3.ManagedUpload);\n }\n }\n AWS.util.addPromises(constructors, PromisesDependency);\n },\n\n /**\n * Gets the promise dependency set by `AWS.config.setPromisesDependency`.\n */\n getPromisesDependency: function getPromisesDependency() {\n return PromisesDependency;\n }\n});\n\n/**\n * @return [AWS.Config] The global configuration object singleton instance\n * @readonly\n * @see AWS.Config\n */\nAWS.config = new AWS.Config();\n","var AWS = require('./core');\n/**\n * @api private\n */\nfunction validateRegionalEndpointsFlagValue(configValue, errorOptions) {\n if (typeof configValue !== 'string') return undefined;\n else if (['legacy', 'regional'].indexOf(configValue.toLowerCase()) >= 0) {\n return configValue.toLowerCase();\n } else {\n throw AWS.util.error(new Error(), errorOptions);\n }\n}\n\n/**\n * Resolve the configuration value for regional endpoint from difference sources: client\n * config, environmental variable, shared config file. Value can be case-insensitive\n * 'legacy' or 'reginal'.\n * @param originalConfig user-supplied config object to resolve\n * @param options a map of config property names from individual configuration source\n * - env: name of environmental variable that refers to the config\n * - sharedConfig: name of shared configuration file property that refers to the config\n * - clientConfig: name of client configuration property that refers to the config\n *\n * @api private\n */\nfunction resolveRegionalEndpointsFlag(originalConfig, options) {\n originalConfig = originalConfig || {};\n //validate config value\n var resolved;\n if (originalConfig[options.clientConfig]) {\n resolved = validateRegionalEndpointsFlagValue(originalConfig[options.clientConfig], {\n code: 'InvalidConfiguration',\n message: 'invalid \"' + options.clientConfig + '\" configuration. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + originalConfig[options.clientConfig] + '\".'\n });\n if (resolved) return resolved;\n }\n if (!AWS.util.isNode()) return resolved;\n //validate environmental variable\n if (Object.prototype.hasOwnProperty.call(process.env, options.env)) {\n var envFlag = process.env[options.env];\n resolved = validateRegionalEndpointsFlagValue(envFlag, {\n code: 'InvalidEnvironmentalVariable',\n message: 'invalid ' + options.env + ' environmental variable. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + process.env[options.env] + '\".'\n });\n if (resolved) return resolved;\n }\n //validate shared config file\n var profile = {};\n try {\n var profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);\n profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];\n } catch (e) {};\n if (profile && Object.prototype.hasOwnProperty.call(profile, options.sharedConfig)) {\n var fileFlag = profile[options.sharedConfig];\n resolved = validateRegionalEndpointsFlagValue(fileFlag, {\n code: 'InvalidConfiguration',\n message: 'invalid ' + options.sharedConfig + ' profile config. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + profile[options.sharedConfig] + '\".'\n });\n if (resolved) return resolved;\n }\n return resolved;\n}\n\nmodule.exports = resolveRegionalEndpointsFlag;\n","/**\n * The main AWS namespace\n */\nvar AWS = { util: require('./util') };\n\n/**\n * @api private\n * @!macro [new] nobrowser\n * @note This feature is not supported in the browser environment of the SDK.\n */\nvar _hidden = {}; _hidden.toString(); // hack to parse macro\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nAWS.util.update(AWS, {\n\n /**\n * @constant\n */\n VERSION: '2.1050.0',\n\n /**\n * @api private\n */\n Signers: {},\n\n /**\n * @api private\n */\n Protocol: {\n Json: require('./protocol/json'),\n Query: require('./protocol/query'),\n Rest: require('./protocol/rest'),\n RestJson: require('./protocol/rest_json'),\n RestXml: require('./protocol/rest_xml')\n },\n\n /**\n * @api private\n */\n XML: {\n Builder: require('./xml/builder'),\n Parser: null // conditionally set based on environment\n },\n\n /**\n * @api private\n */\n JSON: {\n Builder: require('./json/builder'),\n Parser: require('./json/parser')\n },\n\n /**\n * @api private\n */\n Model: {\n Api: require('./model/api'),\n Operation: require('./model/operation'),\n Shape: require('./model/shape'),\n Paginator: require('./model/paginator'),\n ResourceWaiter: require('./model/resource_waiter')\n },\n\n /**\n * @api private\n */\n apiLoader: require('./api_loader'),\n\n /**\n * @api private\n */\n EndpointCache: require('../vendor/endpoint-cache').EndpointCache\n});\nrequire('./sequential_executor');\nrequire('./service');\nrequire('./config');\nrequire('./http');\nrequire('./event_listeners');\nrequire('./request');\nrequire('./response');\nrequire('./resource_waiter');\nrequire('./signers/request_signer');\nrequire('./param_validator');\n\n/**\n * @readonly\n * @return [AWS.SequentialExecutor] a collection of global event listeners that\n * are attached to every sent request.\n * @see AWS.Request AWS.Request for a list of events to listen for\n * @example Logging the time taken to send a request\n * AWS.events.on('send', function startSend(resp) {\n * resp.startTime = new Date().getTime();\n * }).on('complete', function calculateTime(resp) {\n * var time = (new Date().getTime() - resp.startTime) / 1000;\n * console.log('Request took ' + time + ' seconds');\n * });\n *\n * new AWS.S3().listBuckets(); // prints 'Request took 0.285 seconds'\n */\nAWS.events = new AWS.SequentialExecutor();\n\n//create endpoint cache lazily\nAWS.util.memoizedProperty(AWS, 'endpointCache', function() {\n return new AWS.EndpointCache(AWS.config.endpointCacheSize);\n}, true);\n","var AWS = require('./core');\n\n/**\n * Represents your AWS security credentials, specifically the\n * {accessKeyId}, {secretAccessKey}, and optional {sessionToken}.\n * Creating a `Credentials` object allows you to pass around your\n * security information to configuration and service objects.\n *\n * Note that this class typically does not need to be constructed manually,\n * as the {AWS.Config} and {AWS.Service} classes both accept simple\n * options hashes with the three keys. These structures will be converted\n * into Credentials objects automatically.\n *\n * ## Expiring and Refreshing Credentials\n *\n * Occasionally credentials can expire in the middle of a long-running\n * application. In this case, the SDK will automatically attempt to\n * refresh the credentials from the storage location if the Credentials\n * class implements the {refresh} method.\n *\n * If you are implementing a credential storage location, you\n * will want to create a subclass of the `Credentials` class and\n * override the {refresh} method. This method allows credentials to be\n * retrieved from the backing store, be it a file system, database, or\n * some network storage. The method should reset the credential attributes\n * on the object.\n *\n * @!attribute expired\n * @return [Boolean] whether the credentials have been expired and\n * require a refresh. Used in conjunction with {expireTime}.\n * @!attribute expireTime\n * @return [Date] a time when credentials should be considered expired. Used\n * in conjunction with {expired}.\n * @!attribute accessKeyId\n * @return [String] the AWS access key ID\n * @!attribute secretAccessKey\n * @return [String] the AWS secret access key\n * @!attribute sessionToken\n * @return [String] an optional AWS session token\n */\nAWS.Credentials = AWS.util.inherit({\n /**\n * A credentials object can be created using positional arguments or an options\n * hash.\n *\n * @overload AWS.Credentials(accessKeyId, secretAccessKey, sessionToken=null)\n * Creates a Credentials object with a given set of credential information\n * as positional arguments.\n * @param accessKeyId [String] the AWS access key ID\n * @param secretAccessKey [String] the AWS secret access key\n * @param sessionToken [String] the optional AWS session token\n * @example Create a credentials object with AWS credentials\n * var creds = new AWS.Credentials('akid', 'secret', 'session');\n * @overload AWS.Credentials(options)\n * Creates a Credentials object with a given set of credential information\n * as an options hash.\n * @option options accessKeyId [String] the AWS access key ID\n * @option options secretAccessKey [String] the AWS secret access key\n * @option options sessionToken [String] the optional AWS session token\n * @example Create a credentials object with AWS credentials\n * var creds = new AWS.Credentials({\n * accessKeyId: 'akid', secretAccessKey: 'secret', sessionToken: 'session'\n * });\n */\n constructor: function Credentials() {\n // hide secretAccessKey from being displayed with util.inspect\n AWS.util.hideProperties(this, ['secretAccessKey']);\n\n this.expired = false;\n this.expireTime = null;\n this.refreshCallbacks = [];\n if (arguments.length === 1 && typeof arguments[0] === 'object') {\n var creds = arguments[0].credentials || arguments[0];\n this.accessKeyId = creds.accessKeyId;\n this.secretAccessKey = creds.secretAccessKey;\n this.sessionToken = creds.sessionToken;\n } else {\n this.accessKeyId = arguments[0];\n this.secretAccessKey = arguments[1];\n this.sessionToken = arguments[2];\n }\n },\n\n /**\n * @return [Integer] the number of seconds before {expireTime} during which\n * the credentials will be considered expired.\n */\n expiryWindow: 15,\n\n /**\n * @return [Boolean] whether the credentials object should call {refresh}\n * @note Subclasses should override this method to provide custom refresh\n * logic.\n */\n needsRefresh: function needsRefresh() {\n var currentTime = AWS.util.date.getDate().getTime();\n var adjustedTime = new Date(currentTime + this.expiryWindow * 1000);\n\n if (this.expireTime && adjustedTime > this.expireTime) {\n return true;\n } else {\n return this.expired || !this.accessKeyId || !this.secretAccessKey;\n }\n },\n\n /**\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means either credentials\n * do not need to be refreshed or refreshed credentials information has\n * been loaded into the object (as the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n */\n get: function get(callback) {\n var self = this;\n if (this.needsRefresh()) {\n this.refresh(function(err) {\n if (!err) self.expired = false; // reset expired flag\n if (callback) callback(err);\n });\n } else if (callback) {\n callback();\n }\n },\n\n /**\n * @!method getPromise()\n * Returns a 'thenable' promise.\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means either credentials do not need to be refreshed or refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `get` call.\n * @example Calling the `getPromise` method.\n * var promise = credProvider.getPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * @!method refreshPromise()\n * Returns a 'thenable' promise.\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means refreshed credentials information has been loaded into the object\n * (as the `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Calling the `refreshPromise` method.\n * var promise = credProvider.refreshPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @note Subclasses should override this class to reset the\n * {accessKeyId}, {secretAccessKey} and optional {sessionToken}\n * on the credentials object and then call the callback with\n * any error information.\n * @see get\n */\n refresh: function refresh(callback) {\n this.expired = false;\n callback();\n },\n\n /**\n * @api private\n * @param callback\n */\n coalesceRefresh: function coalesceRefresh(callback, sync) {\n var self = this;\n if (self.refreshCallbacks.push(callback) === 1) {\n self.load(function onLoad(err) {\n AWS.util.arrayEach(self.refreshCallbacks, function(callback) {\n if (sync) {\n callback(err);\n } else {\n // callback could throw, so defer to ensure all callbacks are notified\n AWS.util.defer(function () {\n callback(err);\n });\n }\n });\n self.refreshCallbacks.length = 0;\n });\n }\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n callback();\n }\n});\n\n/**\n * @api private\n */\nAWS.Credentials.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.getPromise = AWS.util.promisifyMethod('get', PromiseDependency);\n this.prototype.refreshPromise = AWS.util.promisifyMethod('refresh', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.Credentials.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getPromise;\n delete this.prototype.refreshPromise;\n};\n\nAWS.util.addPromises(AWS.Credentials);\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * AWS.ChainableTemporaryCredentials differs from AWS.TemporaryCredentials in\n * the way masterCredentials and refreshes are handled.\n * AWS.ChainableTemporaryCredentials refreshes expired credentials using the\n * masterCredentials passed by the user to support chaining of STS credentials.\n * However, AWS.TemporaryCredentials recursively collapses the masterCredentials\n * during instantiation, precluding the ability to refresh credentials which\n * require intermediate, temporary credentials.\n *\n * For example, if the application should use RoleA, which must be assumed from\n * RoleB, and the environment provides credentials which can assume RoleB, then\n * AWS.ChainableTemporaryCredentials must be used to support refreshing the\n * temporary credentials for RoleA:\n *\n * ```javascript\n * var roleACreds = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleA'},\n * masterCredentials: new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleB'},\n * masterCredentials: new AWS.EnvironmentCredentials('AWS')\n * })\n * });\n * ```\n *\n * If AWS.TemporaryCredentials had been used in the previous example,\n * `roleACreds` would fail to refresh because `roleACreds` would\n * use the environment credentials for the AssumeRole request.\n *\n * Another difference is that AWS.ChainableTemporaryCredentials creates the STS\n * service instance during instantiation while AWS.TemporaryCredentials creates\n * the STS service instance during the first refresh. Creating the service\n * instance during instantiation effectively captures the master credentials\n * from the global config, so that subsequent changes to the global config do\n * not affect the master credentials used to refresh the temporary credentials.\n *\n * This allows an instance of AWS.ChainableTemporaryCredentials to be assigned\n * to AWS.config.credentials:\n *\n * ```javascript\n * var envCreds = new AWS.EnvironmentCredentials('AWS');\n * AWS.config.credentials = envCreds;\n * // masterCredentials will be envCreds\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * Similarly, to use the CredentialProviderChain's default providers as the\n * master credentials, simply create a new instance of\n * AWS.ChainableTemporaryCredentials:\n *\n * ```javascript\n * AWS.config.credentials = new ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * @!attribute service\n * @return [AWS.STS] the STS service instance used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.ChainableTemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @param options [map] a set of options\n * @option options params [map] ({}) a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role. If a `SerialNumber` parameter is passed in, {tokenCodeFn} must\n * also be passed in or an error will be thrown.\n * @option options masterCredentials [AWS.Credentials] the master credentials\n * used to get and refresh temporary credentials from AWS STS. By default,\n * AWS.config.credentials or AWS.config.credentialProvider will be used.\n * @option options tokenCodeFn [Function] (null) Function to provide\n * `TokenCode`, if `SerialNumber` is provided for profile in {params}. Function\n * is called with value of `SerialNumber` and `callback`, and should provide\n * the `TokenCode` or an error to the callback in the format\n * `callback(err, token)`.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials'\n * }\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function ChainableTemporaryCredentials(options) {\n AWS.Credentials.call(this);\n options = options || {};\n this.errorCode = 'ChainableTemporaryCredentialsProviderFailure';\n this.expired = true;\n this.tokenCodeFn = null;\n\n var params = AWS.util.copy(options.params) || {};\n if (params.RoleArn) {\n params.RoleSessionName = params.RoleSessionName || 'temporary-credentials';\n }\n if (params.SerialNumber) {\n if (!options.tokenCodeFn || (typeof options.tokenCodeFn !== 'function')) {\n throw new AWS.util.error(\n new Error('tokenCodeFn must be a function when params.SerialNumber is given'),\n {code: this.errorCode}\n );\n } else {\n this.tokenCodeFn = options.tokenCodeFn;\n }\n }\n var config = AWS.util.merge(\n {\n params: params,\n credentials: options.masterCredentials || AWS.config.credentials\n },\n options.stsConfig || {}\n );\n this.service = new STS(config);\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n var operation = self.service.config.params.RoleArn ? 'assumeRole' : 'getSessionToken';\n this.getTokenCode(function (err, tokenCode) {\n var params = {};\n if (err) {\n callback(err);\n return;\n }\n if (tokenCode) {\n params.TokenCode = tokenCode;\n }\n self.service[operation](params, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n getTokenCode: function getTokenCode(callback) {\n var self = this;\n if (this.tokenCodeFn) {\n this.tokenCodeFn(this.service.config.params.SerialNumber, function (err, token) {\n if (err) {\n var message = err;\n if (err instanceof Error) {\n message = err.message;\n }\n callback(\n AWS.util.error(\n new Error('Error fetching MFA token: ' + message),\n { code: self.errorCode}\n )\n );\n return;\n }\n callback(null, token);\n });\n } else {\n callback(null);\n }\n }\n});\n","var AWS = require('../core');\nvar CognitoIdentity = require('../../clients/cognitoidentity');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation using\n * the Amazon Cognito Identity service.\n *\n * By default this provider gets credentials using the\n * {AWS.CognitoIdentity.getCredentialsForIdentity} service operation, which\n * requires either an `IdentityId` or an `IdentityPoolId` (Amazon Cognito\n * Identity Pool ID), which is used to call {AWS.CognitoIdentity.getId} to\n * obtain an `IdentityId`. If the identity or identity pool is not configured in\n * the Amazon Cognito Console to use IAM roles with the appropriate permissions,\n * then additionally a `RoleArn` is required containing the ARN of the IAM trust\n * policy for the Amazon Cognito role that the user will log into. If a `RoleArn`\n * is provided, then this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation, after first getting an\n * Open ID token from {AWS.CognitoIdentity.getOpenIdToken}.\n *\n * In addition, if this credential provider is used to provide authenticated\n * login, the `Logins` map may be set to the tokens provided by the respective\n * identity providers. See {constructor} for an example on creating a credentials\n * object with proper property values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.Logins['graph.facebook.com'] = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.CognitoIdentity.getId},\n * {AWS.CognitoIdentity.getOpenIdToken}, and\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.CognitoIdentity.getCredentialsForIdentity}, or\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n * @!attribute identityId\n * @return [String] the Cognito ID returned by the last call to\n * {AWS.CognitoIdentity.getOpenIdToken}. This ID represents the actual\n * final resolved identity ID from Amazon Cognito.\n */\nAWS.CognitoIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * @api private\n */\n localStorageKey: {\n id: 'aws.cognito.identity-id.',\n providers: 'aws.cognito.identity-providers.'\n },\n\n /**\n * Creates a new credentials object.\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n *\n * // either IdentityPoolId or IdentityId is required\n * // See the IdentityPoolId param for AWS.CognitoIdentity.getID (linked below)\n * // See the IdentityId param for AWS.CognitoIdentity.getCredentialsForIdentity\n * // or AWS.CognitoIdentity.getOpenIdToken (linked below)\n * IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',\n * IdentityId: 'us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f'\n *\n * // optional, only necessary when the identity pool is not configured\n * // to use IAM roles in the Amazon Cognito Console\n * // See the RoleArn param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleArn: 'arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity',\n *\n * // optional tokens, used for authenticated login\n * // See the Logins param for AWS.CognitoIdentity.getID (linked below)\n * Logins: {\n * 'graph.facebook.com': 'FBTOKEN',\n * 'www.amazon.com': 'AMAZONTOKEN',\n * 'accounts.google.com': 'GOOGLETOKEN',\n * 'api.twitter.com': 'TWITTERTOKEN',\n * 'www.digits.com': 'DIGITSTOKEN'\n * },\n *\n * // optional name, defaults to web-identity\n * // See the RoleSessionName param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleSessionName: 'web',\n *\n * // optional, only necessary when application runs in a browser\n * // and multiple users are signed in at once, used for caching\n * LoginId: 'example@gmail.com'\n *\n * }, {\n * // optionally provide configuration to apply to the underlying service clients\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // region should match the region your identity pool is located in\n * region: 'us-east-1',\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.CognitoIdentity.getId\n * @see AWS.CognitoIdentity.getCredentialsForIdentity\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.CognitoIdentity.getOpenIdToken\n * @see AWS.Config\n * @note If a region is not provided in the global AWS.config, or\n * specified in the `clientConfig` to the CognitoIdentityCredentials\n * constructor, you may encounter a 'Missing credentials in config' error\n * when calling making a service call.\n */\n constructor: function CognitoIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.data = null;\n this._identityId = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n this.loadCachedId();\n var self = this;\n Object.defineProperty(this, 'identityId', {\n get: function() {\n self.loadCachedId();\n return self._identityId || self.params.IdentityId;\n },\n set: function(identityId) {\n self._identityId = identityId;\n }\n });\n },\n\n /**\n * Refreshes credentials using {AWS.CognitoIdentity.getCredentialsForIdentity},\n * or {AWS.STS.assumeRoleWithWebIdentity}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.data = null;\n self._identityId = null;\n self.getId(function(err) {\n if (!err) {\n if (!self.params.RoleArn) {\n self.getCredentialsForIdentity(callback);\n } else {\n self.getCredentialsFromSTS(callback);\n }\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * Clears the cached Cognito ID associated with the currently configured\n * identity pool ID. Use this to manually invalidate your cache if\n * the identity pool ID was deleted.\n */\n clearCachedId: function clearCache() {\n this._identityId = null;\n delete this.params.IdentityId;\n\n var poolId = this.params.IdentityPoolId;\n var loginId = this.params.LoginId || '';\n delete this.storage[this.localStorageKey.id + poolId + loginId];\n delete this.storage[this.localStorageKey.providers + poolId + loginId];\n },\n\n /**\n * @api private\n */\n clearIdOnNotAuthorized: function clearIdOnNotAuthorized(err) {\n var self = this;\n if (err.code == 'NotAuthorizedException') {\n self.clearCachedId();\n }\n },\n\n /**\n * Retrieves a Cognito ID, loading from cache if it was already retrieved\n * on this device.\n *\n * @callback callback function(err, identityId)\n * @param err [Error, null] an error object if the call failed or null if\n * it succeeded.\n * @param identityId [String, null] if successful, the callback will return\n * the Cognito ID.\n * @note If not loaded explicitly, the Cognito ID is loaded and stored in\n * localStorage in the browser environment of a device.\n * @api private\n */\n getId: function getId(callback) {\n var self = this;\n if (typeof self.params.IdentityId === 'string') {\n return callback(null, self.params.IdentityId);\n }\n\n self.cognito.getId(function(err, data) {\n if (!err && data.IdentityId) {\n self.params.IdentityId = data.IdentityId;\n callback(null, data.IdentityId);\n } else {\n callback(err);\n }\n });\n },\n\n\n /**\n * @api private\n */\n loadCredentials: function loadCredentials(data, credentials) {\n if (!data || !credentials) return;\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n },\n\n /**\n * @api private\n */\n getCredentialsForIdentity: function getCredentialsForIdentity(callback) {\n var self = this;\n self.cognito.getCredentialsForIdentity(function(err, data) {\n if (!err) {\n self.cacheId(data);\n self.data = data;\n self.loadCredentials(self.data, self);\n } else {\n self.clearIdOnNotAuthorized(err);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n getCredentialsFromSTS: function getCredentialsFromSTS(callback) {\n var self = this;\n self.cognito.getOpenIdToken(function(err, data) {\n if (!err) {\n self.cacheId(data);\n self.params.WebIdentityToken = data.Token;\n self.webIdentityCredentials.refresh(function(webErr) {\n if (!webErr) {\n self.data = self.webIdentityCredentials.data;\n self.sts.credentialsFrom(self.data, self);\n }\n callback(webErr);\n });\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * @api private\n */\n loadCachedId: function loadCachedId() {\n var self = this;\n\n // in the browser we source default IdentityId from localStorage\n if (AWS.util.isBrowser() && !self.params.IdentityId) {\n var id = self.getStorage('id');\n if (id && self.params.Logins) {\n var actualProviders = Object.keys(self.params.Logins);\n var cachedProviders =\n (self.getStorage('providers') || '').split(',');\n\n // only load ID if at least one provider used this ID before\n var intersect = cachedProviders.filter(function(n) {\n return actualProviders.indexOf(n) !== -1;\n });\n if (intersect.length !== 0) {\n self.params.IdentityId = id;\n }\n } else if (id) {\n self.params.IdentityId = id;\n }\n }\n },\n\n /**\n * @api private\n */\n createClients: function() {\n var clientConfig = this._clientConfig;\n this.webIdentityCredentials = this.webIdentityCredentials ||\n new AWS.WebIdentityCredentials(this.params, clientConfig);\n if (!this.cognito) {\n var cognitoConfig = AWS.util.merge({}, clientConfig);\n cognitoConfig.params = this.params;\n this.cognito = new CognitoIdentity(cognitoConfig);\n }\n this.sts = this.sts || new STS(clientConfig);\n },\n\n /**\n * @api private\n */\n cacheId: function cacheId(data) {\n this._identityId = data.IdentityId;\n this.params.IdentityId = this._identityId;\n\n // cache this IdentityId in browser localStorage if possible\n if (AWS.util.isBrowser()) {\n this.setStorage('id', data.IdentityId);\n\n if (this.params.Logins) {\n this.setStorage('providers', Object.keys(this.params.Logins).join(','));\n }\n }\n },\n\n /**\n * @api private\n */\n getStorage: function getStorage(key) {\n return this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')];\n },\n\n /**\n * @api private\n */\n setStorage: function setStorage(key, val) {\n try {\n this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')] = val;\n } catch (_) {}\n },\n\n /**\n * @api private\n */\n storage: (function() {\n try {\n var storage = AWS.util.isBrowser() && window.localStorage !== null && typeof window.localStorage === 'object' ?\n window.localStorage : {};\n\n // Test set/remove which would throw an error in Safari's private browsing\n storage['aws.test-storage'] = 'foobar';\n delete storage['aws.test-storage'];\n\n return storage;\n } catch (_) {\n return {};\n }\n })()\n});\n","var AWS = require('../core');\n\n/**\n * Creates a credential provider chain that searches for AWS credentials\n * in a list of credential providers specified by the {providers} property.\n *\n * By default, the chain will use the {defaultProviders} to resolve credentials.\n * These providers will look in the environment using the\n * {AWS.EnvironmentCredentials} class with the 'AWS' and 'AMAZON' prefixes.\n *\n * ## Setting Providers\n *\n * Each provider in the {providers} list should be a function that returns\n * a {AWS.Credentials} object, or a hardcoded credentials object. The function\n * form allows for delayed execution of the credential construction.\n *\n * ## Resolving Credentials from a Chain\n *\n * Call {resolve} to return the first valid credential object that can be\n * loaded by the provider chain.\n *\n * For example, to resolve a chain with a custom provider that checks a file\n * on disk after the set of {defaultProviders}:\n *\n * ```javascript\n * var diskProvider = new AWS.FileSystemCredentials('./creds.json');\n * var chain = new AWS.CredentialProviderChain();\n * chain.providers.push(diskProvider);\n * chain.resolve();\n * ```\n *\n * The above code will return the `diskProvider` object if the\n * file contains credentials and the `defaultProviders` do not contain\n * any credential settings.\n *\n * @!attribute providers\n * @return [Array]\n * a list of credentials objects or functions that return credentials\n * objects. If the provider is a function, the function will be\n * executed lazily when the provider needs to be checked for valid\n * credentials. By default, this object will be set to the\n * {defaultProviders}.\n * @see defaultProviders\n */\nAWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {\n\n /**\n * Creates a new CredentialProviderChain with a default set of providers\n * specified by {defaultProviders}.\n */\n constructor: function CredentialProviderChain(providers) {\n if (providers) {\n this.providers = providers;\n } else {\n this.providers = AWS.CredentialProviderChain.defaultProviders.slice(0);\n }\n this.resolveCallbacks = [];\n },\n\n /**\n * @!method resolvePromise()\n * Returns a 'thenable' promise.\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(credentials)\n * Called if the promise is fulfilled and the provider resolves the chain\n * to a credentials object\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param err [Error] the error object returned if no credentials are found.\n * @return [Promise] A promise that represents the state of the `resolve` method call.\n * @example Calling the `resolvePromise` method.\n * var promise = chain.resolvePromise();\n * promise.then(function(credentials) { ... }, function(err) { ... });\n */\n\n /**\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * @callback callback function(err, credentials)\n * Called when the provider resolves the chain to a credentials object\n * or null if no credentials can be found.\n *\n * @param err [Error] the error object returned if no credentials are\n * found.\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @return [AWS.CredentialProviderChain] the provider, for chaining.\n */\n resolve: function resolve(callback) {\n var self = this;\n if (self.providers.length === 0) {\n callback(new Error('No providers'));\n return self;\n }\n\n if (self.resolveCallbacks.push(callback) === 1) {\n var index = 0;\n var providers = self.providers.slice(0);\n\n function resolveNext(err, creds) {\n if ((!err && creds) || index === providers.length) {\n AWS.util.arrayEach(self.resolveCallbacks, function (callback) {\n callback(err, creds);\n });\n self.resolveCallbacks.length = 0;\n return;\n }\n\n var provider = providers[index++];\n if (typeof provider === 'function') {\n creds = provider.call();\n } else {\n creds = provider;\n }\n\n if (creds.get) {\n creds.get(function (getErr) {\n resolveNext(getErr, getErr ? null : creds);\n });\n } else {\n resolveNext(null, creds);\n }\n }\n\n resolveNext();\n }\n\n return self;\n }\n});\n\n/**\n * The default set of providers used by a vanilla CredentialProviderChain.\n *\n * In the browser:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = []\n * ```\n *\n * In Node.js:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = [\n * function () { return new AWS.EnvironmentCredentials('AWS'); },\n * function () { return new AWS.EnvironmentCredentials('AMAZON'); },\n * function () { return new AWS.SharedIniFileCredentials(); },\n * function () { return new AWS.ECSCredentials(); },\n * function () { return new AWS.ProcessCredentials(); },\n * function () { return new AWS.TokenFileWebIdentityCredentials(); },\n * function () { return new AWS.EC2MetadataCredentials() }\n * ]\n * ```\n */\nAWS.CredentialProviderChain.defaultProviders = [];\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.resolvePromise = AWS.util.promisifyMethod('resolve', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.resolvePromise;\n};\n\nAWS.util.addPromises(AWS.CredentialProviderChain);\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS SAML support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithSAML} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given, as well as a `PrincipalArn`\n * representing the ARN for the SAML identity provider. In addition, the\n * `SAMLAssertion` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the SAMLAssertion, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.SAMLAssertion = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithSAML}. To update the token, set the\n * `params.SAMLAssertion` property.\n */\nAWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithSAML)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.SAMLCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole',\n * PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal',\n * SAMLAssertion: 'base64-token', // base64-encoded token from IdP\n * });\n * @see AWS.STS.assumeRoleWithSAML\n */\n constructor: function SAMLCredentials(params) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithSAML}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithSAML(function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function() {\n this.service = this.service || new STS({params: this.params});\n }\n\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * @note AWS.TemporaryCredentials is deprecated, but remains available for\n * backwards compatibility. {AWS.ChainableTemporaryCredentials} is the\n * preferred class for temporary credentials.\n *\n * To setup temporary credentials, configure a set of master credentials\n * using the standard credentials providers (environment, EC2 instance metadata,\n * or from the filesystem), then set the global credentials to a new\n * temporary credentials object:\n *\n * ```javascript\n * // Note that environment credentials are loaded by default,\n * // the following line is shown for clarity:\n * AWS.config.credentials = new AWS.EnvironmentCredentials('AWS');\n *\n * // Now set temporary credentials seeded from the master credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n *\n * // subsequent requests will now use temporary credentials from AWS STS.\n * new AWS.S3().listBucket(function(err, data) { ... });\n * ```\n *\n * @!attribute masterCredentials\n * @return [AWS.Credentials] the master (non-temporary) credentials used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.TemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @note In order to create temporary credentials, you first need to have\n * \"master\" credentials configured in {AWS.Config.credentials}. These\n * master credentials are necessary to retrieve the temporary credentials,\n * as well as refresh the credentials when they expire.\n * @param params [map] a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role.\n * @param masterCredentials [AWS.Credentials] the master (non-temporary) credentials\n * used to get and refresh temporary credentials from AWS STS.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.TemporaryCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials',\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function TemporaryCredentials(params, masterCredentials) {\n AWS.Credentials.call(this);\n this.loadMasterCredentials(masterCredentials);\n this.expired = true;\n\n this.params = params || {};\n if (this.params.RoleArn) {\n this.params.RoleSessionName =\n this.params.RoleSessionName || 'temporary-credentials';\n }\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh (callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load (callback) {\n var self = this;\n self.createClients();\n self.masterCredentials.get(function () {\n self.service.config.credentials = self.masterCredentials;\n var operation = self.params.RoleArn ?\n self.service.assumeRole : self.service.getSessionToken;\n operation.call(self.service, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n loadMasterCredentials: function loadMasterCredentials (masterCredentials) {\n this.masterCredentials = masterCredentials || AWS.config.credentials;\n while (this.masterCredentials.masterCredentials) {\n this.masterCredentials = this.masterCredentials.masterCredentials;\n }\n\n if (typeof this.masterCredentials.get !== 'function') {\n this.masterCredentials = new AWS.Credentials(this.masterCredentials);\n }\n },\n\n /**\n * @api private\n */\n createClients: function () {\n this.service = this.service || new STS({params: this.params});\n }\n\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given. In addition, the\n * `WebIdentityToken` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn` and `WebIdentityToken` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.WebIdentityToken = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n */\nAWS.WebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithWebIdentity)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.WebIdentityCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/WebIdentity',\n * WebIdentityToken: 'ABCDEFGHIJKLMNOP', // token from identity service\n * RoleSessionName: 'web' // optional name, defaults to web-identity\n * }, {\n * // optionally provide configuration to apply to the underlying AWS.STS service client\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.Config\n */\n constructor: function WebIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.params.RoleSessionName = this.params.RoleSessionName || 'web-identity';\n this.data = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithWebIdentity(function (err, data) {\n self.data = null;\n if (!err) {\n self.data = data;\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function() {\n if (!this.service) {\n var stsConfig = AWS.util.merge({}, this._clientConfig);\n stsConfig.params = this.params;\n this.service = new STS(stsConfig);\n }\n }\n\n});\n","var AWS = require('./core');\nvar util = require('./util');\nvar endpointDiscoveryEnabledEnvs = ['AWS_ENABLE_ENDPOINT_DISCOVERY', 'AWS_ENDPOINT_DISCOVERY_ENABLED'];\n\n/**\n * Generate key (except resources and operation part) to index the endpoints in the cache\n * If input shape has endpointdiscoveryid trait then use\n * accessKey + operation + resources + region + service as cache key\n * If input shape doesn't have endpointdiscoveryid trait then use\n * accessKey + region + service as cache key\n * @return [map] object with keys to index endpoints.\n * @api private\n */\nfunction getCacheKey(request) {\n var service = request.service;\n var api = service.api || {};\n var operations = api.operations;\n var identifiers = {};\n if (service.config.region) {\n identifiers.region = service.config.region;\n }\n if (api.serviceId) {\n identifiers.serviceId = api.serviceId;\n }\n if (service.config.credentials.accessKeyId) {\n identifiers.accessKeyId = service.config.credentials.accessKeyId;\n }\n return identifiers;\n}\n\n/**\n * Recursive helper for marshallCustomIdentifiers().\n * Looks for required string input members that have 'endpointdiscoveryid' trait.\n * @api private\n */\nfunction marshallCustomIdentifiersHelper(result, params, shape) {\n if (!shape || params === undefined || params === null) return;\n if (shape.type === 'structure' && shape.required && shape.required.length > 0) {\n util.arrayEach(shape.required, function(name) {\n var memberShape = shape.members[name];\n if (memberShape.endpointDiscoveryId === true) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n result[locationName] = String(params[name]);\n } else {\n marshallCustomIdentifiersHelper(result, params[name], memberShape);\n }\n });\n }\n}\n\n/**\n * Get custom identifiers for cache key.\n * Identifies custom identifiers by checking each shape's `endpointDiscoveryId` trait.\n * @param [object] request object\n * @param [object] input shape of the given operation's api\n * @api private\n */\nfunction marshallCustomIdentifiers(request, shape) {\n var identifiers = {};\n marshallCustomIdentifiersHelper(identifiers, request.params, shape);\n return identifiers;\n}\n\n/**\n * Call endpoint discovery operation when it's optional.\n * When endpoint is available in cache then use the cached endpoints. If endpoints\n * are unavailable then use regional endpoints and call endpoint discovery operation\n * asynchronously. This is turned off by default.\n * @param [object] request object\n * @api private\n */\nfunction optionalDiscoverEndpoint(request) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n var endpoints = AWS.endpointCache.get(cacheKey);\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //or endpoint operation just failed in 1 minute\n return;\n } else if (endpoints && endpoints.length > 0) {\n //found endpoint record from cache\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n } else {\n //endpoint record not in cache or outdated. make discovery operation\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers,\n });\n addApiVersionHeader(endpointRequest);\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK);\n //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1\n }]);\n endpointRequest.send(function(err, data) {\n if (data && data.Endpoints) {\n AWS.endpointCache.put(cacheKey, data.Endpoints);\n } else if (err) {\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute\n }]);\n }\n });\n }\n}\n\nvar requestQueue = {};\n\n/**\n * Call endpoint discovery operation when it's required.\n * When endpoint is available in cache then use cached ones. If endpoints are\n * unavailable then SDK should call endpoint operation then use returned new\n * endpoint for the api call. SDK will automatically attempt to do endpoint\n * discovery. This is turned off by default\n * @param [object] request object\n * @api private\n */\nfunction requiredDiscoverEndpoint(request, done) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n var cacheKeyStr = AWS.EndpointCache.getKeyString(cacheKey);\n var endpoints = AWS.endpointCache.get(cacheKeyStr); //endpoint cache also accepts string keys\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //push request object to a pending queue\n if (!requestQueue[cacheKeyStr]) requestQueue[cacheKeyStr] = [];\n requestQueue[cacheKeyStr].push({request: request, callback: done});\n return;\n } else if (endpoints && endpoints.length > 0) {\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n done();\n } else {\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers,\n });\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n addApiVersionHeader(endpointRequest);\n\n //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n AWS.endpointCache.put(cacheKeyStr, [{\n Address: '',\n CachePeriodInMinutes: 60 //long-live cache\n }]);\n endpointRequest.send(function(err, data) {\n if (err) {\n request.response.error = util.error(err, { retryable: false });\n AWS.endpointCache.remove(cacheKey);\n\n //fail all the pending requests in batch\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function(requestContext) {\n requestContext.request.response.error = util.error(err, { retryable: false });\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n } else if (data) {\n AWS.endpointCache.put(cacheKeyStr, data.Endpoints);\n request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n\n //update the endpoint for all the pending requests in batch\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function(requestContext) {\n requestContext.request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n }\n done();\n });\n }\n}\n\n/**\n * add api version header to endpoint operation\n * @api private\n */\nfunction addApiVersionHeader(endpointRequest) {\n var api = endpointRequest.service.api;\n var apiVersion = api.apiVersion;\n if (apiVersion && !endpointRequest.httpRequest.headers['x-amz-api-version']) {\n endpointRequest.httpRequest.headers['x-amz-api-version'] = apiVersion;\n }\n}\n\n/**\n * If api call gets invalid endpoint exception, SDK should attempt to remove the invalid\n * endpoint from cache.\n * @api private\n */\nfunction invalidateCachedEndpoints(response) {\n var error = response.error;\n var httpResponse = response.httpResponse;\n if (error &&\n (error.code === 'InvalidEndpointException' || httpResponse.statusCode === 421)\n ) {\n var request = response.request;\n var operations = request.service.api.operations || {};\n var inputShape = operations[request.operation] ? operations[request.operation].input : undefined;\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operations[request.operation]) cacheKey.operation = operations[request.operation].name;\n }\n AWS.endpointCache.remove(cacheKey);\n }\n}\n\n/**\n * If endpoint is explicitly configured, SDK should not do endpoint discovery in anytime.\n * @param [object] client Service client object.\n * @api private\n */\nfunction hasCustomEndpoint(client) {\n //if set endpoint is set for specific client, enable endpoint discovery will raise an error.\n if (client._originalConfig && client._originalConfig.endpoint && client._originalConfig.endpointDiscoveryEnabled === true) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.'\n });\n };\n var svcConfig = AWS.config[client.serviceIdentifier] || {};\n return Boolean(AWS.config.endpoint || svcConfig.endpoint || (client._originalConfig && client._originalConfig.endpoint));\n}\n\n/**\n * @api private\n */\nfunction isFalsy(value) {\n return ['false', '0'].indexOf(value) >= 0;\n}\n\n/**\n * If endpoint discovery should perform for this request when no operation requires endpoint\n * discovery for the given service.\n * SDK performs config resolution in order like below:\n * 1. If set in client configuration.\n * 2. If set in env AWS_ENABLE_ENDPOINT_DISCOVERY.\n * 3. If set in shared ini config file with key 'endpoint_discovery_enabled'.\n * @param [object] request request object.\n * @returns [boolean|undefined] if endpoint discovery config is not set in any source, this\n * function returns undefined\n * @api private\n */\nfunction resolveEndpointDiscoveryConfig(request) {\n var service = request.service || {};\n if (service.config.endpointDiscoveryEnabled !== undefined) {\n return service.config.endpointDiscoveryEnabled;\n }\n\n //shared ini file is only available in Node\n //not to check env in browser\n if (util.isBrowser()) return undefined;\n\n // If any of recognized endpoint discovery config env is set\n for (var i = 0; i < endpointDiscoveryEnabledEnvs.length; i++) {\n var env = endpointDiscoveryEnabledEnvs[i];\n if (Object.prototype.hasOwnProperty.call(process.env, env)) {\n if (process.env[env] === '' || process.env[env] === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'environmental variable ' + env + ' cannot be set to nothing'\n });\n }\n return !isFalsy(process.env[env]);\n }\n }\n\n var configFile = {};\n try {\n configFile = AWS.util.iniLoader ? AWS.util.iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[AWS.util.sharedConfigFileEnv]\n }) : {};\n } catch (e) {}\n var sharedFileConfig = configFile[\n process.env.AWS_PROFILE || AWS.util.defaultProfile\n ] || {};\n if (Object.prototype.hasOwnProperty.call(sharedFileConfig, 'endpoint_discovery_enabled')) {\n if (sharedFileConfig.endpoint_discovery_enabled === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'config file entry \\'endpoint_discovery_enabled\\' cannot be set to nothing'\n });\n }\n return !isFalsy(sharedFileConfig.endpoint_discovery_enabled);\n }\n return undefined;\n}\n\n/**\n * attach endpoint discovery logic to request object\n * @param [object] request\n * @api private\n */\nfunction discoverEndpoint(request, done) {\n var service = request.service || {};\n if (hasCustomEndpoint(service) || request.isPresigned()) return done();\n\n var operations = service.api.operations || {};\n var operationModel = operations[request.operation];\n var isEndpointDiscoveryRequired = operationModel ? operationModel.endpointDiscoveryRequired : 'NULL';\n var isEnabled = resolveEndpointDiscoveryConfig(request);\n var hasRequiredEndpointDiscovery = service.api.hasRequiredEndpointDiscovery;\n if (isEnabled || hasRequiredEndpointDiscovery) {\n // Once a customer enables endpoint discovery, the SDK should start appending\n // the string endpoint-discovery to the user-agent on all requests.\n request.httpRequest.appendToUserAgent('endpoint-discovery');\n }\n switch (isEndpointDiscoveryRequired) {\n case 'OPTIONAL':\n if (isEnabled || hasRequiredEndpointDiscovery) {\n // For a given service; if at least one operation requires endpoint discovery then the SDK must enable endpoint discovery\n // by default for all operations of that service, including operations where endpoint discovery is optional.\n optionalDiscoverEndpoint(request);\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n }\n done();\n break;\n case 'REQUIRED':\n if (isEnabled === false) {\n // For a given operation; if endpoint discovery is required and it has been disabled on the SDK client,\n // then the SDK must return a clear and actionable exception.\n request.response.error = util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Endpoint Discovery is disabled but ' + service.api.className + '.' + request.operation +\n '() requires it. Please check your configurations.'\n });\n done();\n break;\n }\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n requiredDiscoverEndpoint(request, done);\n break;\n case 'NULL':\n default:\n done();\n break;\n }\n}\n\nmodule.exports = {\n discoverEndpoint: discoverEndpoint,\n requiredDiscoverEndpoint: requiredDiscoverEndpoint,\n optionalDiscoverEndpoint: optionalDiscoverEndpoint,\n marshallCustomIdentifiers: marshallCustomIdentifiers,\n getCacheKey: getCacheKey,\n invalidateCachedEndpoint: invalidateCachedEndpoints,\n};\n","var AWS = require('../core');\nvar util = AWS.util;\nvar typeOf = require('./types').typeOf;\nvar DynamoDBSet = require('./set');\nvar NumberValue = require('./numberValue');\n\nAWS.DynamoDB.Converter = {\n /**\n * Convert a JavaScript value to its equivalent DynamoDB AttributeValue type\n *\n * @param data [any] The data to convert to a DynamoDB AttributeValue\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n * @return [map] An object in the Amazon DynamoDB AttributeValue format\n *\n * @see AWS.DynamoDB.Converter.marshall AWS.DynamoDB.Converter.marshall to\n * convert entire records (rather than individual attributes)\n */\n input: function convertInput(data, options) {\n options = options || {};\n var type = typeOf(data);\n if (type === 'Object') {\n return formatMap(data, options);\n } else if (type === 'Array') {\n return formatList(data, options);\n } else if (type === 'Set') {\n return formatSet(data, options);\n } else if (type === 'String') {\n if (data.length === 0 && options.convertEmptyValues) {\n return convertInput(null);\n }\n return { S: data };\n } else if (type === 'Number' || type === 'NumberValue') {\n return { N: data.toString() };\n } else if (type === 'Binary') {\n if (data.length === 0 && options.convertEmptyValues) {\n return convertInput(null);\n }\n return { B: data };\n } else if (type === 'Boolean') {\n return { BOOL: data };\n } else if (type === 'null') {\n return { NULL: true };\n } else if (type !== 'undefined' && type !== 'Function') {\n // this value has a custom constructor\n return formatMap(data, options);\n }\n },\n\n /**\n * Convert a JavaScript object into a DynamoDB record.\n *\n * @param data [any] The data to convert to a DynamoDB record\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n *\n * @return [map] An object in the DynamoDB record format.\n *\n * @example Convert a JavaScript object into a DynamoDB record\n * var marshalled = AWS.DynamoDB.Converter.marshall({\n * string: 'foo',\n * list: ['fizz', 'buzz', 'pop'],\n * map: {\n * nestedMap: {\n * key: 'value',\n * }\n * },\n * number: 123,\n * nullValue: null,\n * boolValue: true,\n * stringSet: new DynamoDBSet(['foo', 'bar', 'baz'])\n * });\n */\n marshall: function marshallItem(data, options) {\n return AWS.DynamoDB.Converter.input(data, options).M;\n },\n\n /**\n * Convert a DynamoDB AttributeValue object to its equivalent JavaScript type.\n *\n * @param data [map] An object in the Amazon DynamoDB AttributeValue format\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n *\n * @return [Object|Array|String|Number|Boolean|null]\n *\n * @see AWS.DynamoDB.Converter.unmarshall AWS.DynamoDB.Converter.unmarshall to\n * convert entire records (rather than individual attributes)\n */\n output: function convertOutput(data, options) {\n options = options || {};\n var list, map, i;\n for (var type in data) {\n var values = data[type];\n if (type === 'M') {\n map = {};\n for (var key in values) {\n map[key] = convertOutput(values[key], options);\n }\n return map;\n } else if (type === 'L') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(convertOutput(values[i], options));\n }\n return list;\n } else if (type === 'SS') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(values[i] + '');\n }\n return new DynamoDBSet(list);\n } else if (type === 'NS') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(convertNumber(values[i], options.wrapNumbers));\n }\n return new DynamoDBSet(list);\n } else if (type === 'BS') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(AWS.util.buffer.toBuffer(values[i]));\n }\n return new DynamoDBSet(list);\n } else if (type === 'S') {\n return values + '';\n } else if (type === 'N') {\n return convertNumber(values, options.wrapNumbers);\n } else if (type === 'B') {\n return util.buffer.toBuffer(values);\n } else if (type === 'BOOL') {\n return (values === 'true' || values === 'TRUE' || values === true);\n } else if (type === 'NULL') {\n return null;\n }\n }\n },\n\n /**\n * Convert a DynamoDB record into a JavaScript object.\n *\n * @param data [any] The DynamoDB record\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n *\n * @return [map] An object whose properties have been converted from\n * DynamoDB's AttributeValue format into their corresponding native\n * JavaScript types.\n *\n * @example Convert a record received from a DynamoDB stream\n * var unmarshalled = AWS.DynamoDB.Converter.unmarshall({\n * string: {S: 'foo'},\n * list: {L: [{S: 'fizz'}, {S: 'buzz'}, {S: 'pop'}]},\n * map: {\n * M: {\n * nestedMap: {\n * M: {\n * key: {S: 'value'}\n * }\n * }\n * }\n * },\n * number: {N: '123'},\n * nullValue: {NULL: true},\n * boolValue: {BOOL: true}\n * });\n */\n unmarshall: function unmarshall(data, options) {\n return AWS.DynamoDB.Converter.output({M: data}, options);\n }\n};\n\n/**\n * @api private\n * @param data [Array]\n * @param options [map]\n */\nfunction formatList(data, options) {\n var list = {L: []};\n for (var i = 0; i < data.length; i++) {\n list['L'].push(AWS.DynamoDB.Converter.input(data[i], options));\n }\n return list;\n}\n\n/**\n * @api private\n * @param value [String]\n * @param wrapNumbers [Boolean]\n */\nfunction convertNumber(value, wrapNumbers) {\n return wrapNumbers ? new NumberValue(value) : Number(value);\n}\n\n/**\n * @api private\n * @param data [map]\n * @param options [map]\n */\nfunction formatMap(data, options) {\n var map = {M: {}};\n for (var key in data) {\n var formatted = AWS.DynamoDB.Converter.input(data[key], options);\n if (formatted !== void 0) {\n map['M'][key] = formatted;\n }\n }\n return map;\n}\n\n/**\n * @api private\n */\nfunction formatSet(data, options) {\n options = options || {};\n var values = data.values;\n if (options.convertEmptyValues) {\n values = filterEmptySetValues(data);\n if (values.length === 0) {\n return AWS.DynamoDB.Converter.input(null);\n }\n }\n\n var map = {};\n switch (data.type) {\n case 'String': map['SS'] = values; break;\n case 'Binary': map['BS'] = values; break;\n case 'Number': map['NS'] = values.map(function (value) {\n return value.toString();\n });\n }\n return map;\n}\n\n/**\n * @api private\n */\nfunction filterEmptySetValues(set) {\n var nonEmptyValues = [];\n var potentiallyEmptyTypes = {\n String: true,\n Binary: true,\n Number: false\n };\n if (potentiallyEmptyTypes[set.type]) {\n for (var i = 0; i < set.values.length; i++) {\n if (set.values[i].length === 0) {\n continue;\n }\n nonEmptyValues.push(set.values[i]);\n }\n\n return nonEmptyValues;\n }\n\n return set.values;\n}\n\n/**\n * @api private\n */\nmodule.exports = AWS.DynamoDB.Converter;\n","var AWS = require('../core');\nvar Translator = require('./translator');\nvar DynamoDBSet = require('./set');\n\n/**\n * The document client simplifies working with items in Amazon DynamoDB\n * by abstracting away the notion of attribute values. This abstraction\n * annotates native JavaScript types supplied as input parameters, as well\n * as converts annotated response data to native JavaScript types.\n *\n * ## Marshalling Input and Unmarshalling Response Data\n *\n * The document client affords developers the use of native JavaScript types\n * instead of `AttributeValue`s to simplify the JavaScript development\n * experience with Amazon DynamoDB. JavaScript objects passed in as parameters\n * are marshalled into `AttributeValue` shapes required by Amazon DynamoDB.\n * Responses from DynamoDB are unmarshalled into plain JavaScript objects\n * by the `DocumentClient`. The `DocumentClient`, does not accept\n * `AttributeValue`s in favor of native JavaScript types.\n *\n * | JavaScript Type | DynamoDB AttributeValue |\n * |:----------------------------------------------------------------------:|-------------------------|\n * | String | S |\n * | Number | N |\n * | Boolean | BOOL |\n * | null | NULL |\n * | Array | L |\n * | Object | M |\n * | Buffer, File, Blob, ArrayBuffer, DataView, and JavaScript typed arrays | B |\n *\n * ## Support for Sets\n *\n * The `DocumentClient` offers a convenient way to create sets from\n * JavaScript Arrays. The type of set is inferred from the first element\n * in the array. DynamoDB supports string, number, and binary sets. To\n * learn more about supported types see the\n * [Amazon DynamoDB Data Model Documentation](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html)\n * For more information see {AWS.DynamoDB.DocumentClient.createSet}\n *\n */\nAWS.DynamoDB.DocumentClient = AWS.util.inherit({\n\n /**\n * Creates a DynamoDB document client with a set of configuration options.\n *\n * @option options params [map] An optional map of parameters to bind to every\n * request sent by this service object.\n * @option options service [AWS.DynamoDB] An optional pre-configured instance\n * of the AWS.DynamoDB service object to use for requests. The object may\n * bound parameters used by the document client.\n * @option options convertEmptyValues [Boolean] set to true if you would like\n * the document client to convert empty values (0-length strings, binary\n * buffers, and sets) to be converted to NULL types when persisting to\n * DynamoDB.\n * @option options wrapNumbers [Boolean] Set to true to return numbers as a\n * NumberValue object instead of converting them to native JavaScript numbers.\n * This allows for the safe round-trip transport of numbers of arbitrary size.\n * @see AWS.DynamoDB.constructor\n *\n */\n constructor: function DocumentClient(options) {\n var self = this;\n self.options = options || {};\n self.configure(self.options);\n },\n\n /**\n * @api private\n */\n configure: function configure(options) {\n var self = this;\n self.service = options.service;\n self.bindServiceObject(options);\n self.attrValue = options.attrValue =\n self.service.api.operations.putItem.input.members.Item.value.shape;\n },\n\n /**\n * @api private\n */\n bindServiceObject: function bindServiceObject(options) {\n var self = this;\n options = options || {};\n\n if (!self.service) {\n self.service = new AWS.DynamoDB(options);\n } else {\n var config = AWS.util.copy(self.service.config);\n self.service = new self.service.constructor.__super__(config);\n self.service.config.params =\n AWS.util.merge(self.service.config.params || {}, options.params);\n }\n },\n\n /**\n * @api private\n */\n makeServiceRequest: function(operation, params, callback) {\n var self = this;\n var request = self.service[operation](params);\n self.setupRequest(request);\n self.setupResponse(request);\n if (typeof callback === 'function') {\n request.send(callback);\n }\n return request;\n },\n\n /**\n * @api private\n */\n serviceClientOperationsMap: {\n batchGet: 'batchGetItem',\n batchWrite: 'batchWriteItem',\n delete: 'deleteItem',\n get: 'getItem',\n put: 'putItem',\n query: 'query',\n scan: 'scan',\n update: 'updateItem',\n transactGet: 'transactGetItems',\n transactWrite: 'transactWriteItems'\n },\n\n /**\n * Returns the attributes of one or more items from one or more tables\n * by delegating to `AWS.DynamoDB.batchGetItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.batchGetItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.batchGetItem\n * @example Get items from multiple tables\n * var params = {\n * RequestItems: {\n * 'Table-1': {\n * Keys: [\n * {\n * HashKey: 'haskey',\n * NumberRangeKey: 1\n * }\n * ]\n * },\n * 'Table-2': {\n * Keys: [\n * { foo: 'bar' },\n * ]\n * }\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.batchGet(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n batchGet: function(params, callback) {\n var operation = this.serviceClientOperationsMap['batchGet'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Puts or deletes multiple items in one or more tables by delegating\n * to `AWS.DynamoDB.batchWriteItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.batchWriteItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.batchWriteItem\n * @example Write to and delete from a table\n * var params = {\n * RequestItems: {\n * 'Table-1': [\n * {\n * DeleteRequest: {\n * Key: { HashKey: 'someKey' }\n * }\n * },\n * {\n * PutRequest: {\n * Item: {\n * HashKey: 'anotherKey',\n * NumAttribute: 1,\n * BoolAttribute: true,\n * ListAttribute: [1, 'two', false],\n * MapAttribute: { foo: 'bar' }\n * }\n * }\n * }\n * ]\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.batchWrite(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n batchWrite: function(params, callback) {\n var operation = this.serviceClientOperationsMap['batchWrite'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Deletes a single item in a table by primary key by delegating to\n * `AWS.DynamoDB.deleteItem()`\n *\n * Supply the same parameters as {AWS.DynamoDB.deleteItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.deleteItem\n * @example Delete an item from a table\n * var params = {\n * TableName : 'Table',\n * Key: {\n * HashKey: 'hashkey',\n * NumberRangeKey: 1\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.delete(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n delete: function(params, callback) {\n var operation = this.serviceClientOperationsMap['delete'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Returns a set of attributes for the item with the given primary key\n * by delegating to `AWS.DynamoDB.getItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.getItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.getItem\n * @example Get an item from a table\n * var params = {\n * TableName : 'Table',\n * Key: {\n * HashKey: 'hashkey'\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.get(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n get: function(params, callback) {\n var operation = this.serviceClientOperationsMap['get'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Creates a new item, or replaces an old item with a new item by\n * delegating to `AWS.DynamoDB.putItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.putItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.putItem\n * @example Create a new item in a table\n * var params = {\n * TableName : 'Table',\n * Item: {\n * HashKey: 'haskey',\n * NumAttribute: 1,\n * BoolAttribute: true,\n * ListAttribute: [1, 'two', false],\n * MapAttribute: { foo: 'bar'},\n * NullAttribute: null\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.put(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n put: function(params, callback) {\n var operation = this.serviceClientOperationsMap['put'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Edits an existing item's attributes, or adds a new item to the table if\n * it does not already exist by delegating to `AWS.DynamoDB.updateItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.updateItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.updateItem\n * @example Update an item with expressions\n * var params = {\n * TableName: 'Table',\n * Key: { HashKey : 'hashkey' },\n * UpdateExpression: 'set #a = :x + :y',\n * ConditionExpression: '#a < :MAX',\n * ExpressionAttributeNames: {'#a' : 'Sum'},\n * ExpressionAttributeValues: {\n * ':x' : 20,\n * ':y' : 45,\n * ':MAX' : 100,\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.update(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n update: function(params, callback) {\n var operation = this.serviceClientOperationsMap['update'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Returns one or more items and item attributes by accessing every item\n * in a table or a secondary index.\n *\n * Supply the same parameters as {AWS.DynamoDB.scan} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.scan\n * @example Scan the table with a filter expression\n * var params = {\n * TableName : 'Table',\n * FilterExpression : 'Year = :this_year',\n * ExpressionAttributeValues : {':this_year' : 2015}\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.scan(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n scan: function(params, callback) {\n var operation = this.serviceClientOperationsMap['scan'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Directly access items from a table by primary key or a secondary index.\n *\n * Supply the same parameters as {AWS.DynamoDB.query} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.query\n * @example Query an index\n * var params = {\n * TableName: 'Table',\n * IndexName: 'Index',\n * KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey',\n * ExpressionAttributeValues: {\n * ':hkey': 'key',\n * ':rkey': 2015\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.query(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n query: function(params, callback) {\n var operation = this.serviceClientOperationsMap['query'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Synchronous write operation that groups up to 25 action requests.\n *\n * Supply the same parameters as {AWS.DynamoDB.transactWriteItems} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.transactWriteItems\n * @example Get items from multiple tables\n * var params = {\n * TransactItems: [{\n * Put: {\n * TableName : 'Table0',\n * Item: {\n * HashKey: 'haskey',\n * NumAttribute: 1,\n * BoolAttribute: true,\n * ListAttribute: [1, 'two', false],\n * MapAttribute: { foo: 'bar'},\n * NullAttribute: null\n * }\n * }\n * }, {\n * Update: {\n * TableName: 'Table1',\n * Key: { HashKey : 'hashkey' },\n * UpdateExpression: 'set #a = :x + :y',\n * ConditionExpression: '#a < :MAX',\n * ExpressionAttributeNames: {'#a' : 'Sum'},\n * ExpressionAttributeValues: {\n * ':x' : 20,\n * ':y' : 45,\n * ':MAX' : 100,\n * }\n * }\n * }]\n * };\n *\n * documentClient.transactWrite(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n */\n transactWrite: function(params, callback) {\n var operation = this.serviceClientOperationsMap['transactWrite'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Atomically retrieves multiple items from one or more tables (but not from indexes)\n * in a single account and region.\n *\n * Supply the same parameters as {AWS.DynamoDB.transactGetItems} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.transactGetItems\n * @example Get items from multiple tables\n * var params = {\n * TransactItems: [{\n * Get: {\n * TableName : 'Table0',\n * Key: {\n * HashKey: 'hashkey0'\n * }\n * }\n * }, {\n * Get: {\n * TableName : 'Table1',\n * Key: {\n * HashKey: 'hashkey1'\n * }\n * }\n * }]\n * };\n *\n * documentClient.transactGet(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n */\n transactGet: function(params, callback) {\n var operation = this.serviceClientOperationsMap['transactGet'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Creates a set of elements inferring the type of set from\n * the type of the first element. Amazon DynamoDB currently supports\n * the number sets, string sets, and binary sets. For more information\n * about DynamoDB data types see the documentation on the\n * [Amazon DynamoDB Data Model](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes).\n *\n * @param list [Array] Collection to represent your DynamoDB Set\n * @param options [map]\n * * **validate** [Boolean] set to true if you want to validate the type\n * of each element in the set. Defaults to `false`.\n * @example Creating a number set\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * var params = {\n * Item: {\n * hashkey: 'hashkey'\n * numbers: documentClient.createSet([1, 2, 3]);\n * }\n * };\n *\n * documentClient.put(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n createSet: function(list, options) {\n options = options || {};\n return new DynamoDBSet(list, options);\n },\n\n /**\n * @api private\n */\n getTranslator: function() {\n return new Translator(this.options);\n },\n\n /**\n * @api private\n */\n setupRequest: function setupRequest(request) {\n var self = this;\n var translator = self.getTranslator();\n var operation = request.operation;\n var inputShape = request.service.api.operations[operation].input;\n request._events.validate.unshift(function(req) {\n req.rawParams = AWS.util.copy(req.params);\n req.params = translator.translateInput(req.rawParams, inputShape);\n });\n },\n\n /**\n * @api private\n */\n setupResponse: function setupResponse(request) {\n var self = this;\n var translator = self.getTranslator();\n var outputShape = self.service.api.operations[request.operation].output;\n request.on('extractData', function(response) {\n response.data = translator.translateOutput(response.data, outputShape);\n });\n\n var response = request.response;\n response.nextPage = function(cb) {\n var resp = this;\n var req = resp.request;\n var config;\n var service = req.service;\n var operation = req.operation;\n try {\n config = service.paginationConfig(operation, true);\n } catch (e) { resp.error = e; }\n\n if (!resp.hasNextPage()) {\n if (cb) cb(resp.error, null);\n else if (resp.error) throw resp.error;\n return null;\n }\n\n var params = AWS.util.copy(req.rawParams);\n if (!resp.nextPageTokens) {\n return cb ? cb(null, null) : null;\n } else {\n var inputTokens = config.inputToken;\n if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n for (var i = 0; i < inputTokens.length; i++) {\n params[inputTokens[i]] = resp.nextPageTokens[i];\n }\n return self[operation](params, cb);\n }\n };\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.DynamoDB.DocumentClient;\n","var util = require('../core').util;\n\n/**\n * An object recognizable as a numeric value that stores the underlying number\n * as a string.\n *\n * Intended to be a deserialization target for the DynamoDB Document Client when\n * the `wrapNumbers` flag is set. This allows for numeric values that lose\n * precision when converted to JavaScript's `number` type.\n */\nvar DynamoDBNumberValue = util.inherit({\n constructor: function NumberValue(value) {\n this.wrapperName = 'NumberValue';\n this.value = value.toString();\n },\n\n /**\n * Render the underlying value as a number when converting to JSON.\n */\n toJSON: function () {\n return this.toNumber();\n },\n\n /**\n * Convert the underlying value to a JavaScript number.\n */\n toNumber: function () {\n return Number(this.value);\n },\n\n /**\n * Return a string representing the unaltered value provided to the\n * constructor.\n */\n toString: function () {\n return this.value;\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = DynamoDBNumberValue;\n","var util = require('../core').util;\nvar typeOf = require('./types').typeOf;\n\n/**\n * @api private\n */\nvar memberTypeToSetType = {\n 'String': 'String',\n 'Number': 'Number',\n 'NumberValue': 'Number',\n 'Binary': 'Binary'\n};\n\n/**\n * @api private\n */\nvar DynamoDBSet = util.inherit({\n\n constructor: function Set(list, options) {\n options = options || {};\n this.wrapperName = 'Set';\n this.initialize(list, options.validate);\n },\n\n initialize: function(list, validate) {\n var self = this;\n self.values = [].concat(list);\n self.detectType();\n if (validate) {\n self.validate();\n }\n },\n\n detectType: function() {\n this.type = memberTypeToSetType[typeOf(this.values[0])];\n if (!this.type) {\n throw util.error(new Error(), {\n code: 'InvalidSetType',\n message: 'Sets can contain string, number, or binary values'\n });\n }\n },\n\n validate: function() {\n var self = this;\n var length = self.values.length;\n var values = self.values;\n for (var i = 0; i < length; i++) {\n if (memberTypeToSetType[typeOf(values[i])] !== self.type) {\n throw util.error(new Error(), {\n code: 'InvalidType',\n message: self.type + ' Set contains ' + typeOf(values[i]) + ' value'\n });\n }\n }\n },\n\n /**\n * Render the underlying values only when converting to JSON.\n */\n toJSON: function() {\n var self = this;\n return self.values;\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = DynamoDBSet;\n","var util = require('../core').util;\nvar convert = require('./converter');\n\nvar Translator = function(options) {\n options = options || {};\n this.attrValue = options.attrValue;\n this.convertEmptyValues = Boolean(options.convertEmptyValues);\n this.wrapNumbers = Boolean(options.wrapNumbers);\n};\n\nTranslator.prototype.translateInput = function(value, shape) {\n this.mode = 'input';\n return this.translate(value, shape);\n};\n\nTranslator.prototype.translateOutput = function(value, shape) {\n this.mode = 'output';\n return this.translate(value, shape);\n};\n\nTranslator.prototype.translate = function(value, shape) {\n var self = this;\n if (!shape || value === undefined) return undefined;\n\n if (shape.shape === self.attrValue) {\n return convert[self.mode](value, {\n convertEmptyValues: self.convertEmptyValues,\n wrapNumbers: self.wrapNumbers,\n });\n }\n switch (shape.type) {\n case 'structure': return self.translateStructure(value, shape);\n case 'map': return self.translateMap(value, shape);\n case 'list': return self.translateList(value, shape);\n default: return self.translateScalar(value, shape);\n }\n};\n\nTranslator.prototype.translateStructure = function(structure, shape) {\n var self = this;\n if (structure == null) return undefined;\n\n var struct = {};\n util.each(structure, function(name, value) {\n var memberShape = shape.members[name];\n if (memberShape) {\n var result = self.translate(value, memberShape);\n if (result !== undefined) struct[name] = result;\n }\n });\n return struct;\n};\n\nTranslator.prototype.translateList = function(list, shape) {\n var self = this;\n if (list == null) return undefined;\n\n var out = [];\n util.arrayEach(list, function(value) {\n var result = self.translate(value, shape.member);\n if (result === undefined) out.push(null);\n else out.push(result);\n });\n return out;\n};\n\nTranslator.prototype.translateMap = function(map, shape) {\n var self = this;\n if (map == null) return undefined;\n\n var out = {};\n util.each(map, function(key, value) {\n var result = self.translate(value, shape.value);\n if (result === undefined) out[key] = null;\n else out[key] = result;\n });\n return out;\n};\n\nTranslator.prototype.translateScalar = function(value, shape) {\n return shape.toType(value);\n};\n\n/**\n * @api private\n */\nmodule.exports = Translator;\n","var util = require('../core').util;\n\nfunction typeOf(data) {\n if (data === null && typeof data === 'object') {\n return 'null';\n } else if (data !== undefined && isBinary(data)) {\n return 'Binary';\n } else if (data !== undefined && data.constructor) {\n return data.wrapperName || util.typeName(data.constructor);\n } else if (data !== undefined && typeof data === 'object') {\n // this object is the result of Object.create(null), hence the absence of a\n // defined constructor\n return 'Object';\n } else {\n return 'undefined';\n }\n}\n\nfunction isBinary(data) {\n var types = [\n 'Buffer', 'File', 'Blob', 'ArrayBuffer', 'DataView',\n 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',\n 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',\n 'Float32Array', 'Float64Array'\n ];\n if (util.isNode()) {\n var Stream = util.stream.Stream;\n if (util.Buffer.isBuffer(data) || data instanceof Stream) {\n return true;\n }\n }\n\n for (var i = 0; i < types.length; i++) {\n if (data !== undefined && data.constructor) {\n if (util.isType(data, types[i])) return true;\n if (util.typeName(data.constructor) === types[i]) return true;\n }\n }\n\n return false;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n typeOf: typeOf,\n isBinary: isBinary\n};\n","var eventMessageChunker = require('../event-stream/event-message-chunker').eventMessageChunker;\nvar parseEvent = require('./parse-event').parseEvent;\n\nfunction createEventStream(body, parser, model) {\n var eventMessages = eventMessageChunker(body);\n\n var events = [];\n\n for (var i = 0; i < eventMessages.length; i++) {\n events.push(parseEvent(parser, eventMessages[i], model));\n }\n\n return events;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n createEventStream: createEventStream\n};\n","/**\n * Takes in a buffer of event messages and splits them into individual messages.\n * @param {Buffer} buffer\n * @api private\n */\nfunction eventMessageChunker(buffer) {\n /** @type Buffer[] */\n var messages = [];\n var offset = 0;\n\n while (offset < buffer.length) {\n var totalLength = buffer.readInt32BE(offset);\n\n // create new buffer for individual message (shares memory with original)\n var message = buffer.slice(offset, totalLength + offset);\n // increment offset to it starts at the next message\n offset += totalLength;\n\n messages.push(message);\n }\n\n return messages;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n eventMessageChunker: eventMessageChunker\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n/**\n * A lossless representation of a signed, 64-bit integer. Instances of this\n * class may be used in arithmetic expressions as if they were numeric\n * primitives, but the binary representation will be preserved unchanged as the\n * `bytes` property of the object. The bytes should be encoded as big-endian,\n * two's complement integers.\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction Int64(bytes) {\n if (bytes.length !== 8) {\n throw new Error('Int64 buffers must be exactly 8 bytes');\n }\n if (!util.Buffer.isBuffer(bytes)) bytes = toBuffer(bytes);\n\n this.bytes = bytes;\n}\n\n/**\n * @param {number} number\n * @returns {Int64}\n *\n * @api private\n */\nInt64.fromNumber = function(number) {\n if (number > 9223372036854775807 || number < -9223372036854775808) {\n throw new Error(\n number + ' is too large (or, if negative, too small) to represent as an Int64'\n );\n }\n\n var bytes = new Uint8Array(8);\n for (\n var i = 7, remaining = Math.abs(Math.round(number));\n i > -1 && remaining > 0;\n i--, remaining /= 256\n ) {\n bytes[i] = remaining;\n }\n\n if (number < 0) {\n negate(bytes);\n }\n\n return new Int64(bytes);\n};\n\n/**\n * @returns {number}\n *\n * @api private\n */\nInt64.prototype.valueOf = function() {\n var bytes = this.bytes.slice(0);\n var negative = bytes[0] & 128;\n if (negative) {\n negate(bytes);\n }\n\n return parseInt(bytes.toString('hex'), 16) * (negative ? -1 : 1);\n};\n\nInt64.prototype.toString = function() {\n return String(this.valueOf());\n};\n\n/**\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction negate(bytes) {\n for (var i = 0; i < 8; i++) {\n bytes[i] ^= 0xFF;\n }\n for (var i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0) {\n break;\n }\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n Int64: Int64\n};\n","var parseMessage = require('./parse-message').parseMessage;\n\n/**\n *\n * @param {*} parser\n * @param {Buffer} message\n * @param {*} shape\n * @api private\n */\nfunction parseEvent(parser, message, shape) {\n var parsedMessage = parseMessage(message);\n\n // check if message is an event or error\n var messageType = parsedMessage.headers[':message-type'];\n if (messageType) {\n if (messageType.value === 'error') {\n throw parseError(parsedMessage);\n } else if (messageType.value !== 'event') {\n // not sure how to parse non-events/non-errors, ignore for now\n return;\n }\n }\n\n // determine event type\n var eventType = parsedMessage.headers[':event-type'];\n // check that the event type is modeled\n var eventModel = shape.members[eventType.value];\n if (!eventModel) {\n return;\n }\n\n var result = {};\n // check if an event payload exists\n var eventPayloadMemberName = eventModel.eventPayloadMemberName;\n if (eventPayloadMemberName) {\n var payloadShape = eventModel.members[eventPayloadMemberName];\n // if the shape is binary, return the byte array\n if (payloadShape.type === 'binary') {\n result[eventPayloadMemberName] = parsedMessage.body;\n } else {\n result[eventPayloadMemberName] = parser.parse(parsedMessage.body.toString(), payloadShape);\n }\n }\n\n // read event headers\n var eventHeaderNames = eventModel.eventHeaderMemberNames;\n for (var i = 0; i < eventHeaderNames.length; i++) {\n var name = eventHeaderNames[i];\n if (parsedMessage.headers[name]) {\n // parse the header!\n result[name] = eventModel.members[name].toType(parsedMessage.headers[name].value);\n }\n }\n\n var output = {};\n output[eventType.value] = result;\n return output;\n}\n\nfunction parseError(message) {\n var errorCode = message.headers[':error-code'];\n var errorMessage = message.headers[':error-message'];\n var error = new Error(errorMessage.value || errorMessage);\n error.code = error.name = errorCode.value || errorCode;\n return error;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n parseEvent: parseEvent\n};\n","var Int64 = require('./int64').Int64;\n\nvar splitMessage = require('./split-message').splitMessage;\n\nvar BOOLEAN_TAG = 'boolean';\nvar BYTE_TAG = 'byte';\nvar SHORT_TAG = 'short';\nvar INT_TAG = 'integer';\nvar LONG_TAG = 'long';\nvar BINARY_TAG = 'binary';\nvar STRING_TAG = 'string';\nvar TIMESTAMP_TAG = 'timestamp';\nvar UUID_TAG = 'uuid';\n\n/**\n * @api private\n *\n * @param {Buffer} headers\n */\nfunction parseHeaders(headers) {\n var out = {};\n var position = 0;\n while (position < headers.length) {\n var nameLength = headers.readUInt8(position++);\n var name = headers.slice(position, position + nameLength).toString();\n position += nameLength;\n switch (headers.readUInt8(position++)) {\n case 0 /* boolTrue */:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true\n };\n break;\n case 1 /* boolFalse */:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false\n };\n break;\n case 2 /* byte */:\n out[name] = {\n type: BYTE_TAG,\n value: headers.readInt8(position++)\n };\n break;\n case 3 /* short */:\n out[name] = {\n type: SHORT_TAG,\n value: headers.readInt16BE(position)\n };\n position += 2;\n break;\n case 4 /* integer */:\n out[name] = {\n type: INT_TAG,\n value: headers.readInt32BE(position)\n };\n position += 4;\n break;\n case 5 /* long */:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(headers.slice(position, position + 8))\n };\n position += 8;\n break;\n case 6 /* byteArray */:\n var binaryLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: headers.slice(position, position + binaryLength)\n };\n position += binaryLength;\n break;\n case 7 /* string */:\n var stringLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: headers.slice(\n position,\n position + stringLength\n ).toString()\n };\n position += stringLength;\n break;\n case 8 /* timestamp */:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(\n new Int64(headers.slice(position, position + 8))\n .valueOf()\n )\n };\n position += 8;\n break;\n case 9 /* uuid */:\n var uuidChars = headers.slice(position, position + 16)\n .toString('hex');\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: uuidChars.substr(0, 8) + '-' +\n uuidChars.substr(8, 4) + '-' +\n uuidChars.substr(12, 4) + '-' +\n uuidChars.substr(16, 4) + '-' +\n uuidChars.substr(20)\n };\n break;\n default:\n throw new Error('Unrecognized header type tag');\n }\n }\n return out;\n}\n\nfunction parseMessage(message) {\n var parsed = splitMessage(message);\n return { headers: parseHeaders(parsed.headers), body: parsed.body };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n parseMessage: parseMessage\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n// All prelude components are unsigned, 32-bit integers\nvar PRELUDE_MEMBER_LENGTH = 4;\n// The prelude consists of two components\nvar PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;\n// Checksums are always CRC32 hashes.\nvar CHECKSUM_LENGTH = 4;\n// Messages must include a full prelude, a prelude checksum, and a message checksum\nvar MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\n\n/**\n * @api private\n *\n * @param {Buffer} message\n */\nfunction splitMessage(message) {\n if (!util.Buffer.isBuffer(message)) message = toBuffer(message);\n\n if (message.length < MINIMUM_MESSAGE_LENGTH) {\n throw new Error('Provided message too short to accommodate event stream message overhead');\n }\n\n if (message.length !== message.readUInt32BE(0)) {\n throw new Error('Reported message length does not match received message length');\n }\n\n var expectedPreludeChecksum = message.readUInt32BE(PRELUDE_LENGTH);\n\n if (\n expectedPreludeChecksum !== util.crypto.crc32(\n message.slice(0, PRELUDE_LENGTH)\n )\n ) {\n throw new Error(\n 'The prelude checksum specified in the message (' +\n expectedPreludeChecksum +\n ') does not match the calculated CRC32 checksum.'\n );\n }\n\n var expectedMessageChecksum = message.readUInt32BE(message.length - CHECKSUM_LENGTH);\n\n if (\n expectedMessageChecksum !== util.crypto.crc32(\n message.slice(0, message.length - CHECKSUM_LENGTH)\n )\n ) {\n throw new Error(\n 'The message checksum did not match the expected value of ' +\n expectedMessageChecksum\n );\n }\n\n var headersStart = PRELUDE_LENGTH + CHECKSUM_LENGTH;\n var headersEnd = headersStart + message.readUInt32BE(PRELUDE_MEMBER_LENGTH);\n\n return {\n headers: message.slice(headersStart, headersEnd),\n body: message.slice(headersEnd, message.length - CHECKSUM_LENGTH),\n };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n splitMessage: splitMessage\n};\n","var AWS = require('./core');\nvar SequentialExecutor = require('./sequential_executor');\nvar DISCOVER_ENDPOINT = require('./discover_endpoint').discoverEndpoint;\n/**\n * The namespace used to register global event listeners for request building\n * and sending.\n */\nAWS.EventListeners = {\n /**\n * @!attribute VALIDATE_CREDENTIALS\n * A request listener that validates whether the request is being\n * sent with credentials.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating credentials\n * var listener = AWS.EventListeners.Core.VALIDATE_CREDENTIALS;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_REGION\n * A request listener that validates whether the region is set\n * for a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating region configuration\n * var listener = AWS.EventListeners.Core.VALIDATE_REGION;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_PARAMETERS\n * A request listener that validates input parameters in a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating parameters\n * var listener = AWS.EventListeners.Core.VALIDATE_PARAMETERS;\n * request.removeListener('validate', listener);\n * @example Disable parameter validation globally\n * AWS.EventListeners.Core.removeListener('validate',\n * AWS.EventListeners.Core.VALIDATE_REGION);\n * @readonly\n * @return [Function]\n * @!attribute SEND\n * A request listener that initiates the HTTP connection for a\n * request being sent. Handles the {AWS.Request~send 'send' Request event}\n * @example Replacing the HTTP handler\n * var listener = AWS.EventListeners.Core.SEND;\n * request.removeListener('send', listener);\n * request.on('send', function(response) {\n * customHandler.send(response);\n * });\n * @return [Function]\n * @readonly\n * @!attribute HTTP_DATA\n * A request listener that reads data from the HTTP connection in order\n * to build the response data.\n * Handles the {AWS.Request~httpData 'httpData' Request event}.\n * Remove this handler if you are overriding the 'httpData' event and\n * do not want extra data processing and buffering overhead.\n * @example Disabling default data processing\n * var listener = AWS.EventListeners.Core.HTTP_DATA;\n * request.removeListener('httpData', listener);\n * @return [Function]\n * @readonly\n */\n Core: {} /* doc hack */\n};\n\n/**\n * @api private\n */\nfunction getOperationAuthtype(req) {\n if (!req.service.api.operations) {\n return '';\n }\n var operation = req.service.api.operations[req.operation];\n return operation ? operation.authtype : '';\n}\n\nAWS.EventListeners = {\n Core: new SequentialExecutor().addNamedListeners(function(add, addAsync) {\n addAsync('VALIDATE_CREDENTIALS', 'validate',\n function VALIDATE_CREDENTIALS(req, done) {\n if (!req.service.api.signatureVersion && !req.service.config.signatureVersion) return done(); // none\n req.service.config.getCredentials(function(err) {\n if (err) {\n req.response.error = AWS.util.error(err,\n {code: 'CredentialsError', message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1'});\n }\n done();\n });\n });\n\n add('VALIDATE_REGION', 'validate', function VALIDATE_REGION(req) {\n if (!req.service.isGlobalEndpoint) {\n var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);\n if (!req.service.config.region) {\n req.response.error = AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Missing region in config'});\n } else if (!dnsHostRegex.test(req.service.config.region)) {\n req.response.error = AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Invalid region in config'});\n }\n }\n });\n\n add('BUILD_IDEMPOTENCY_TOKENS', 'validate', function BUILD_IDEMPOTENCY_TOKENS(req) {\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n if (!operation) {\n return;\n }\n var idempotentMembers = operation.idempotentMembers;\n if (!idempotentMembers.length) {\n return;\n }\n // creates a copy of params so user's param object isn't mutated\n var params = AWS.util.copy(req.params);\n for (var i = 0, iLen = idempotentMembers.length; i < iLen; i++) {\n if (!params[idempotentMembers[i]]) {\n // add the member\n params[idempotentMembers[i]] = AWS.util.uuid.v4();\n }\n }\n req.params = params;\n });\n\n add('VALIDATE_PARAMETERS', 'validate', function VALIDATE_PARAMETERS(req) {\n if (!req.service.api.operations) {\n return;\n }\n var rules = req.service.api.operations[req.operation].input;\n var validation = req.service.config.paramValidation;\n new AWS.ParamValidator(validation).validate(rules, req.params);\n });\n\n add('COMPUTE_CHECKSUM', 'afterBuild', function COMPUTE_CHECKSUM(req) {\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n if (!operation) {\n return;\n }\n var body = req.httpRequest.body;\n var isNonStreamingPayload = body && (AWS.util.Buffer.isBuffer(body) || typeof body === 'string');\n var headers = req.httpRequest.headers;\n if (\n operation.httpChecksumRequired &&\n req.service.config.computeChecksums &&\n isNonStreamingPayload &&\n !headers['Content-MD5']\n ) {\n var md5 = AWS.util.crypto.md5(body, 'base64');\n headers['Content-MD5'] = md5;\n }\n });\n\n addAsync('COMPUTE_SHA256', 'afterBuild', function COMPUTE_SHA256(req, done) {\n req.haltHandlersOnError();\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!req.service.api.signatureVersion && !authtype && !req.service.config.signatureVersion) return done(); // none\n if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n var body = req.httpRequest.body || '';\n if (authtype.indexOf('unsigned-body') >= 0) {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n return done();\n }\n AWS.util.computeSha256(body, function(err, sha) {\n if (err) {\n done(err);\n }\n else {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = sha;\n done();\n }\n });\n } else {\n done();\n }\n });\n\n add('SET_CONTENT_LENGTH', 'afterBuild', function SET_CONTENT_LENGTH(req) {\n var authtype = getOperationAuthtype(req);\n var payloadMember = AWS.util.getRequestPayloadShape(req);\n if (req.httpRequest.headers['Content-Length'] === undefined) {\n try {\n var length = AWS.util.string.byteLength(req.httpRequest.body);\n req.httpRequest.headers['Content-Length'] = length;\n } catch (err) {\n if (payloadMember && payloadMember.isStreaming) {\n if (payloadMember.requiresLength) {\n //streaming payload requires length(s3, glacier)\n throw err;\n } else if (authtype.indexOf('unsigned-body') >= 0) {\n //unbounded streaming payload(lex, mediastore)\n req.httpRequest.headers['Transfer-Encoding'] = 'chunked';\n return;\n } else {\n throw err;\n }\n }\n throw err;\n }\n }\n });\n\n add('SET_HTTP_HOST', 'afterBuild', function SET_HTTP_HOST(req) {\n req.httpRequest.headers['Host'] = req.httpRequest.endpoint.host;\n });\n\n add('RESTART', 'restart', function RESTART() {\n var err = this.response.error;\n if (!err || !err.retryable) return;\n\n this.httpRequest = new AWS.HttpRequest(\n this.service.endpoint,\n this.service.region\n );\n\n if (this.response.retryCount < this.service.config.maxRetries) {\n this.response.retryCount++;\n } else {\n this.response.error = null;\n }\n });\n\n var addToHead = true;\n addAsync('DISCOVER_ENDPOINT', 'sign', DISCOVER_ENDPOINT, addToHead);\n\n addAsync('SIGN', 'sign', function SIGN(req, done) {\n var service = req.service;\n var operations = req.service.api.operations || {};\n var operation = operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!service.api.signatureVersion && !authtype && !service.config.signatureVersion) return done(); // none\n\n service.config.getCredentials(function (err, credentials) {\n if (err) {\n req.response.error = err;\n return done();\n }\n\n try {\n var date = service.getSkewCorrectedDate();\n var SignerClass = service.getSignerClass(req);\n var signer = new SignerClass(req.httpRequest,\n service.getSigningName(req),\n {\n signatureCache: service.config.signatureCache,\n operation: operation,\n signatureVersion: service.api.signatureVersion\n });\n signer.setServiceClientId(service._clientId);\n\n // clear old authorization headers\n delete req.httpRequest.headers['Authorization'];\n delete req.httpRequest.headers['Date'];\n delete req.httpRequest.headers['X-Amz-Date'];\n\n // add new authorization\n signer.addAuthorization(credentials, date);\n req.signedAt = date;\n } catch (e) {\n req.response.error = e;\n }\n done();\n });\n });\n\n add('VALIDATE_RESPONSE', 'validateResponse', function VALIDATE_RESPONSE(resp) {\n if (this.service.successfulResponse(resp, this)) {\n resp.data = {};\n resp.error = null;\n } else {\n resp.data = null;\n resp.error = AWS.util.error(new Error(),\n {code: 'UnknownError', message: 'An unknown error occurred.'});\n }\n });\n\n addAsync('SEND', 'send', function SEND(resp, done) {\n resp.httpResponse._abortCallback = done;\n resp.error = null;\n resp.data = null;\n\n function callback(httpResp) {\n resp.httpResponse.stream = httpResp;\n var stream = resp.request.httpRequest.stream;\n var service = resp.request.service;\n var api = service.api;\n var operationName = resp.request.operation;\n var operation = api.operations[operationName] || {};\n\n httpResp.on('headers', function onHeaders(statusCode, headers, statusMessage) {\n resp.request.emit(\n 'httpHeaders',\n [statusCode, headers, resp, statusMessage]\n );\n\n if (!resp.httpResponse.streaming) {\n if (AWS.HttpClient.streamsApiVersion === 2) { // streams2 API check\n // if we detect event streams, we're going to have to\n // return the stream immediately\n if (operation.hasEventOutput && service.successfulResponse(resp)) {\n // skip reading the IncomingStream\n resp.request.emit('httpDone');\n done();\n return;\n }\n\n httpResp.on('readable', function onReadable() {\n var data = httpResp.read();\n if (data !== null) {\n resp.request.emit('httpData', [data, resp]);\n }\n });\n } else { // legacy streams API\n httpResp.on('data', function onData(data) {\n resp.request.emit('httpData', [data, resp]);\n });\n }\n }\n });\n\n httpResp.on('end', function onEnd() {\n if (!stream || !stream.didCallback) {\n if (AWS.HttpClient.streamsApiVersion === 2 && (operation.hasEventOutput && service.successfulResponse(resp))) {\n // don't concatenate response chunks when streaming event stream data when response is successful\n return;\n }\n resp.request.emit('httpDone');\n done();\n }\n });\n }\n\n function progress(httpResp) {\n httpResp.on('sendProgress', function onSendProgress(value) {\n resp.request.emit('httpUploadProgress', [value, resp]);\n });\n\n httpResp.on('receiveProgress', function onReceiveProgress(value) {\n resp.request.emit('httpDownloadProgress', [value, resp]);\n });\n }\n\n function error(err) {\n if (err.code !== 'RequestAbortedError') {\n var errCode = err.code === 'TimeoutError' ? err.code : 'NetworkingError';\n err = AWS.util.error(err, {\n code: errCode,\n region: resp.request.httpRequest.region,\n hostname: resp.request.httpRequest.endpoint.hostname,\n retryable: true\n });\n }\n resp.error = err;\n resp.request.emit('httpError', [resp.error, resp], function() {\n done();\n });\n }\n\n function executeSend() {\n var http = AWS.HttpClient.getInstance();\n var httpOptions = resp.request.service.config.httpOptions || {};\n try {\n var stream = http.handleRequest(resp.request.httpRequest, httpOptions,\n callback, error);\n progress(stream);\n } catch (err) {\n error(err);\n }\n }\n var timeDiff = (resp.request.service.getSkewCorrectedDate() - this.signedAt) / 1000;\n if (timeDiff >= 60 * 10) { // if we signed 10min ago, re-sign\n this.emit('sign', [this], function(err) {\n if (err) done(err);\n else executeSend();\n });\n } else {\n executeSend();\n }\n });\n\n add('HTTP_HEADERS', 'httpHeaders',\n function HTTP_HEADERS(statusCode, headers, resp, statusMessage) {\n resp.httpResponse.statusCode = statusCode;\n resp.httpResponse.statusMessage = statusMessage;\n resp.httpResponse.headers = headers;\n resp.httpResponse.body = AWS.util.buffer.toBuffer('');\n resp.httpResponse.buffers = [];\n resp.httpResponse.numBytes = 0;\n var dateHeader = headers.date || headers.Date;\n var service = resp.request.service;\n if (dateHeader) {\n var serverTime = Date.parse(dateHeader);\n if (service.config.correctClockSkew\n && service.isClockSkewed(serverTime)) {\n service.applyClockOffset(serverTime);\n }\n }\n });\n\n add('HTTP_DATA', 'httpData', function HTTP_DATA(chunk, resp) {\n if (chunk) {\n if (AWS.util.isNode()) {\n resp.httpResponse.numBytes += chunk.length;\n\n var total = resp.httpResponse.headers['content-length'];\n var progress = { loaded: resp.httpResponse.numBytes, total: total };\n resp.request.emit('httpDownloadProgress', [progress, resp]);\n }\n\n resp.httpResponse.buffers.push(AWS.util.buffer.toBuffer(chunk));\n }\n });\n\n add('HTTP_DONE', 'httpDone', function HTTP_DONE(resp) {\n // convert buffers array into single buffer\n if (resp.httpResponse.buffers && resp.httpResponse.buffers.length > 0) {\n var body = AWS.util.buffer.concat(resp.httpResponse.buffers);\n resp.httpResponse.body = body;\n }\n delete resp.httpResponse.numBytes;\n delete resp.httpResponse.buffers;\n });\n\n add('FINALIZE_ERROR', 'retry', function FINALIZE_ERROR(resp) {\n if (resp.httpResponse.statusCode) {\n resp.error.statusCode = resp.httpResponse.statusCode;\n if (resp.error.retryable === undefined) {\n resp.error.retryable = this.service.retryableError(resp.error, this);\n }\n }\n });\n\n add('INVALIDATE_CREDENTIALS', 'retry', function INVALIDATE_CREDENTIALS(resp) {\n if (!resp.error) return;\n switch (resp.error.code) {\n case 'RequestExpired': // EC2 only\n case 'ExpiredTokenException':\n case 'ExpiredToken':\n resp.error.retryable = true;\n resp.request.service.config.credentials.expired = true;\n }\n });\n\n add('EXPIRED_SIGNATURE', 'retry', function EXPIRED_SIGNATURE(resp) {\n var err = resp.error;\n if (!err) return;\n if (typeof err.code === 'string' && typeof err.message === 'string') {\n if (err.code.match(/Signature/) && err.message.match(/expired/)) {\n resp.error.retryable = true;\n }\n }\n });\n\n add('CLOCK_SKEWED', 'retry', function CLOCK_SKEWED(resp) {\n if (!resp.error) return;\n if (this.service.clockSkewError(resp.error)\n && this.service.config.correctClockSkew) {\n resp.error.retryable = true;\n }\n });\n\n add('REDIRECT', 'retry', function REDIRECT(resp) {\n if (resp.error && resp.error.statusCode >= 300 &&\n resp.error.statusCode < 400 && resp.httpResponse.headers['location']) {\n this.httpRequest.endpoint =\n new AWS.Endpoint(resp.httpResponse.headers['location']);\n this.httpRequest.headers['Host'] = this.httpRequest.endpoint.host;\n resp.error.redirect = true;\n resp.error.retryable = true;\n }\n });\n\n add('RETRY_CHECK', 'retry', function RETRY_CHECK(resp) {\n if (resp.error) {\n if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.error.retryDelay = 0;\n } else if (resp.retryCount < resp.maxRetries) {\n resp.error.retryDelay = this.service.retryDelays(resp.retryCount, resp.error) || 0;\n }\n }\n });\n\n addAsync('RESET_RETRY_STATE', 'afterRetry', function RESET_RETRY_STATE(resp, done) {\n var delay, willRetry = false;\n\n if (resp.error) {\n delay = resp.error.retryDelay || 0;\n if (resp.error.retryable && resp.retryCount < resp.maxRetries) {\n resp.retryCount++;\n willRetry = true;\n } else if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.redirectCount++;\n willRetry = true;\n }\n }\n\n // delay < 0 is a signal from customBackoff to skip retries\n if (willRetry && delay >= 0) {\n resp.error = null;\n setTimeout(done, delay);\n } else {\n done();\n }\n });\n }),\n\n CorePost: new SequentialExecutor().addNamedListeners(function(add) {\n add('EXTRACT_REQUEST_ID', 'extractData', AWS.util.extractRequestId);\n add('EXTRACT_REQUEST_ID', 'extractError', AWS.util.extractRequestId);\n\n add('ENOTFOUND_ERROR', 'httpError', function ENOTFOUND_ERROR(err) {\n function isDNSError(err) {\n return err.errno === 'ENOTFOUND' ||\n typeof err.errno === 'number' &&\n typeof AWS.util.getSystemErrorName === 'function' &&\n ['EAI_NONAME', 'EAI_NODATA'].indexOf(AWS.util.getSystemErrorName(err.errno) >= 0);\n }\n if (err.code === 'NetworkingError' && isDNSError(err)) {\n var message = 'Inaccessible host: `' + err.hostname + '\\' at port `' + err.port +\n '\\'. This service may not be available in the `' + err.region +\n '\\' region.';\n this.response.error = AWS.util.error(new Error(message), {\n code: 'UnknownEndpoint',\n region: err.region,\n hostname: err.hostname,\n retryable: true,\n originalError: err\n });\n }\n });\n }),\n\n Logger: new SequentialExecutor().addNamedListeners(function(add) {\n add('LOG_REQUEST', 'complete', function LOG_REQUEST(resp) {\n var req = resp.request;\n var logger = req.service.config.logger;\n if (!logger) return;\n function filterSensitiveLog(inputShape, shape) {\n if (!shape) {\n return shape;\n }\n if (inputShape.isSensitive) {\n return '***SensitiveInformation***';\n }\n switch (inputShape.type) {\n case 'structure':\n var struct = {};\n AWS.util.each(shape, function(subShapeName, subShape) {\n if (Object.prototype.hasOwnProperty.call(inputShape.members, subShapeName)) {\n struct[subShapeName] = filterSensitiveLog(inputShape.members[subShapeName], subShape);\n } else {\n struct[subShapeName] = subShape;\n }\n });\n return struct;\n case 'list':\n var list = [];\n AWS.util.arrayEach(shape, function(subShape, index) {\n list.push(filterSensitiveLog(inputShape.member, subShape));\n });\n return list;\n case 'map':\n var map = {};\n AWS.util.each(shape, function(key, value) {\n map[key] = filterSensitiveLog(inputShape.value, value);\n });\n return map;\n default:\n return shape;\n }\n }\n\n function buildMessage() {\n var time = resp.request.service.getSkewCorrectedDate().getTime();\n var delta = (time - req.startTime.getTime()) / 1000;\n var ansi = logger.isTTY ? true : false;\n var status = resp.httpResponse.statusCode;\n var censoredParams = req.params;\n if (\n req.service.api.operations &&\n req.service.api.operations[req.operation] &&\n req.service.api.operations[req.operation].input\n ) {\n var inputShape = req.service.api.operations[req.operation].input;\n censoredParams = filterSensitiveLog(inputShape, req.params);\n }\n var params = require('util').inspect(censoredParams, true, null);\n var message = '';\n if (ansi) message += '\\x1B[33m';\n message += '[AWS ' + req.service.serviceIdentifier + ' ' + status;\n message += ' ' + delta.toString() + 's ' + resp.retryCount + ' retries]';\n if (ansi) message += '\\x1B[0;1m';\n message += ' ' + AWS.util.string.lowerFirst(req.operation);\n message += '(' + params + ')';\n if (ansi) message += '\\x1B[0m';\n return message;\n }\n\n var line = buildMessage();\n if (typeof logger.log === 'function') {\n logger.log(line);\n } else if (typeof logger.write === 'function') {\n logger.write(line + '\\n');\n }\n });\n }),\n\n Json: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/json');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n Rest: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n RestJson: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest_json');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n RestXml: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest_xml');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n Query: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/query');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n })\n};\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\n\n/**\n * The endpoint that a service will talk to, for example,\n * `'https://ec2.ap-southeast-1.amazonaws.com'`. If\n * you need to override an endpoint for a service, you can\n * set the endpoint on a service by passing the endpoint\n * object with the `endpoint` option key:\n *\n * ```javascript\n * var ep = new AWS.Endpoint('awsproxy.example.com');\n * var s3 = new AWS.S3({endpoint: ep});\n * s3.service.endpoint.hostname == 'awsproxy.example.com'\n * ```\n *\n * Note that if you do not specify a protocol, the protocol will\n * be selected based on your current {AWS.config} configuration.\n *\n * @!attribute protocol\n * @return [String] the protocol (http or https) of the endpoint\n * URL\n * @!attribute hostname\n * @return [String] the host portion of the endpoint, e.g.,\n * example.com\n * @!attribute host\n * @return [String] the host portion of the endpoint including\n * the port, e.g., example.com:80\n * @!attribute port\n * @return [Integer] the port of the endpoint\n * @!attribute href\n * @return [String] the full URL of the endpoint\n */\nAWS.Endpoint = inherit({\n\n /**\n * @overload Endpoint(endpoint)\n * Constructs a new endpoint given an endpoint URL. If the\n * URL omits a protocol (http or https), the default protocol\n * set in the global {AWS.config} will be used.\n * @param endpoint [String] the URL to construct an endpoint from\n */\n constructor: function Endpoint(endpoint, config) {\n AWS.util.hideProperties(this, ['slashes', 'auth', 'hash', 'search', 'query']);\n\n if (typeof endpoint === 'undefined' || endpoint === null) {\n throw new Error('Invalid endpoint: ' + endpoint);\n } else if (typeof endpoint !== 'string') {\n return AWS.util.copy(endpoint);\n }\n\n if (!endpoint.match(/^http/)) {\n var useSSL = config && config.sslEnabled !== undefined ?\n config.sslEnabled : AWS.config.sslEnabled;\n endpoint = (useSSL ? 'https' : 'http') + '://' + endpoint;\n }\n\n AWS.util.update(this, AWS.util.urlParse(endpoint));\n\n // Ensure the port property is set as an integer\n if (this.port) {\n this.port = parseInt(this.port, 10);\n } else {\n this.port = this.protocol === 'https:' ? 443 : 80;\n }\n }\n\n});\n\n/**\n * The low level HTTP request object, encapsulating all HTTP header\n * and body data sent by a service request.\n *\n * @!attribute method\n * @return [String] the HTTP method of the request\n * @!attribute path\n * @return [String] the path portion of the URI, e.g.,\n * \"/list/?start=5&num=10\"\n * @!attribute headers\n * @return [map]\n * a map of header keys and their respective values\n * @!attribute body\n * @return [String] the request body payload\n * @!attribute endpoint\n * @return [AWS.Endpoint] the endpoint for the request\n * @!attribute region\n * @api private\n * @return [String] the region, for signing purposes only.\n */\nAWS.HttpRequest = inherit({\n\n /**\n * @api private\n */\n constructor: function HttpRequest(endpoint, region) {\n endpoint = new AWS.Endpoint(endpoint);\n this.method = 'POST';\n this.path = endpoint.path || '/';\n this.headers = {};\n this.body = '';\n this.endpoint = endpoint;\n this.region = region;\n this._userAgent = '';\n this.setUserAgent();\n },\n\n /**\n * @api private\n */\n setUserAgent: function setUserAgent() {\n this._userAgent = this.headers[this.getUserAgentHeaderName()] = AWS.util.userAgent();\n },\n\n getUserAgentHeaderName: function getUserAgentHeaderName() {\n var prefix = AWS.util.isBrowser() ? 'X-Amz-' : '';\n return prefix + 'User-Agent';\n },\n\n /**\n * @api private\n */\n appendToUserAgent: function appendToUserAgent(agentPartial) {\n if (typeof agentPartial === 'string' && agentPartial) {\n this._userAgent += ' ' + agentPartial;\n }\n this.headers[this.getUserAgentHeaderName()] = this._userAgent;\n },\n\n /**\n * @api private\n */\n getUserAgent: function getUserAgent() {\n return this._userAgent;\n },\n\n /**\n * @return [String] the part of the {path} excluding the\n * query string\n */\n pathname: function pathname() {\n return this.path.split('?', 1)[0];\n },\n\n /**\n * @return [String] the query string portion of the {path}\n */\n search: function search() {\n var query = this.path.split('?', 2)[1];\n if (query) {\n query = AWS.util.queryStringParse(query);\n return AWS.util.queryParamsToString(query);\n }\n return '';\n },\n\n /**\n * @api private\n * update httpRequest endpoint with endpoint string\n */\n updateEndpoint: function updateEndpoint(endpointStr) {\n var newEndpoint = new AWS.Endpoint(endpointStr);\n this.endpoint = newEndpoint;\n this.path = newEndpoint.path || '/';\n if (this.headers['Host']) {\n this.headers['Host'] = newEndpoint.host;\n }\n }\n});\n\n/**\n * The low level HTTP response object, encapsulating all HTTP header\n * and body data returned from the request.\n *\n * @!attribute statusCode\n * @return [Integer] the HTTP status code of the response (e.g., 200, 404)\n * @!attribute headers\n * @return [map]\n * a map of response header keys and their respective values\n * @!attribute body\n * @return [String] the response body payload\n * @!attribute [r] streaming\n * @return [Boolean] whether this response is being streamed at a low-level.\n * Defaults to `false` (buffered reads). Do not modify this manually, use\n * {createUnbufferedStream} to convert the stream to unbuffered mode\n * instead.\n */\nAWS.HttpResponse = inherit({\n\n /**\n * @api private\n */\n constructor: function HttpResponse() {\n this.statusCode = undefined;\n this.headers = {};\n this.body = undefined;\n this.streaming = false;\n this.stream = null;\n },\n\n /**\n * Disables buffering on the HTTP response and returns the stream for reading.\n * @return [Stream, XMLHttpRequest, null] the underlying stream object.\n * Use this object to directly read data off of the stream.\n * @note This object is only available after the {AWS.Request~httpHeaders}\n * event has fired. This method must be called prior to\n * {AWS.Request~httpData}.\n * @example Taking control of a stream\n * request.on('httpHeaders', function(statusCode, headers) {\n * if (statusCode < 300) {\n * if (headers.etag === 'xyz') {\n * // pipe the stream, disabling buffering\n * var stream = this.response.httpResponse.createUnbufferedStream();\n * stream.pipe(process.stdout);\n * } else { // abort this request and set a better error message\n * this.abort();\n * this.response.error = new Error('Invalid ETag');\n * }\n * }\n * }).send(console.log);\n */\n createUnbufferedStream: function createUnbufferedStream() {\n this.streaming = true;\n return this.stream;\n }\n});\n\n\nAWS.HttpClient = inherit({});\n\n/**\n * @api private\n */\nAWS.HttpClient.getInstance = function getInstance() {\n if (this.singleton === undefined) {\n this.singleton = new this();\n }\n return this.singleton;\n};\n","var AWS = require('../core');\nvar EventEmitter = require('events').EventEmitter;\nrequire('../http');\n\n/**\n * @api private\n */\nAWS.XHRClient = AWS.util.inherit({\n handleRequest: function handleRequest(httpRequest, httpOptions, callback, errCallback) {\n var self = this;\n var endpoint = httpRequest.endpoint;\n var emitter = new EventEmitter();\n var href = endpoint.protocol + '//' + endpoint.hostname;\n if (endpoint.port !== 80 && endpoint.port !== 443) {\n href += ':' + endpoint.port;\n }\n href += httpRequest.path;\n\n var xhr = new XMLHttpRequest(), headersEmitted = false;\n httpRequest.stream = xhr;\n\n xhr.addEventListener('readystatechange', function() {\n try {\n if (xhr.status === 0) return; // 0 code is invalid\n } catch (e) { return; }\n\n if (this.readyState >= this.HEADERS_RECEIVED && !headersEmitted) {\n emitter.statusCode = xhr.status;\n emitter.headers = self.parseHeaders(xhr.getAllResponseHeaders());\n emitter.emit(\n 'headers',\n emitter.statusCode,\n emitter.headers,\n xhr.statusText\n );\n headersEmitted = true;\n }\n if (this.readyState === this.DONE) {\n self.finishRequest(xhr, emitter);\n }\n }, false);\n xhr.upload.addEventListener('progress', function (evt) {\n emitter.emit('sendProgress', evt);\n });\n xhr.addEventListener('progress', function (evt) {\n emitter.emit('receiveProgress', evt);\n }, false);\n xhr.addEventListener('timeout', function () {\n errCallback(AWS.util.error(new Error('Timeout'), {code: 'TimeoutError'}));\n }, false);\n xhr.addEventListener('error', function () {\n errCallback(AWS.util.error(new Error('Network Failure'), {\n code: 'NetworkingError'\n }));\n }, false);\n xhr.addEventListener('abort', function () {\n errCallback(AWS.util.error(new Error('Request aborted'), {\n code: 'RequestAbortedError'\n }));\n }, false);\n\n callback(emitter);\n xhr.open(httpRequest.method, href, httpOptions.xhrAsync !== false);\n AWS.util.each(httpRequest.headers, function (key, value) {\n if (key !== 'Content-Length' && key !== 'User-Agent' && key !== 'Host') {\n xhr.setRequestHeader(key, value);\n }\n });\n\n if (httpOptions.timeout && httpOptions.xhrAsync !== false) {\n xhr.timeout = httpOptions.timeout;\n }\n\n if (httpOptions.xhrWithCredentials) {\n xhr.withCredentials = true;\n }\n try { xhr.responseType = 'arraybuffer'; } catch (e) {}\n\n try {\n if (httpRequest.body) {\n xhr.send(httpRequest.body);\n } else {\n xhr.send();\n }\n } catch (err) {\n if (httpRequest.body && typeof httpRequest.body.buffer === 'object') {\n xhr.send(httpRequest.body.buffer); // send ArrayBuffer directly\n } else {\n throw err;\n }\n }\n\n return emitter;\n },\n\n parseHeaders: function parseHeaders(rawHeaders) {\n var headers = {};\n AWS.util.arrayEach(rawHeaders.split(/\\r?\\n/), function (line) {\n var key = line.split(':', 1)[0];\n var value = line.substring(key.length + 2);\n if (key.length > 0) headers[key.toLowerCase()] = value;\n });\n return headers;\n },\n\n finishRequest: function finishRequest(xhr, emitter) {\n var buffer;\n if (xhr.responseType === 'arraybuffer' && xhr.response) {\n var ab = xhr.response;\n buffer = new AWS.util.Buffer(ab.byteLength);\n var view = new Uint8Array(ab);\n for (var i = 0; i < buffer.length; ++i) {\n buffer[i] = view[i];\n }\n }\n\n try {\n if (!buffer && typeof xhr.responseText === 'string') {\n buffer = new AWS.util.Buffer(xhr.responseText);\n }\n } catch (e) {}\n\n if (buffer) emitter.emit('data', buffer);\n emitter.emit('end');\n }\n});\n\n/**\n * @api private\n */\nAWS.HttpClient.prototype = AWS.XHRClient.prototype;\n\n/**\n * @api private\n */\nAWS.HttpClient.streamsApiVersion = 1;\n","var util = require('../util');\n\nfunction JsonBuilder() { }\n\nJsonBuilder.prototype.build = function(value, shape) {\n return JSON.stringify(translate(value, shape));\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined || value === null) return undefined;\n\n switch (shape.type) {\n case 'structure': return translateStructure(value, shape);\n case 'map': return translateMap(value, shape);\n case 'list': return translateList(value, shape);\n default: return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n if (shape.isDocument) {\n return structure;\n }\n var struct = {};\n util.each(structure, function(name, value) {\n var memberShape = shape.members[name];\n if (memberShape) {\n if (memberShape.location !== 'body') return;\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n var result = translate(value, memberShape);\n if (result !== undefined) struct[locationName] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n var out = [];\n util.arrayEach(list, function(value) {\n var result = translate(value, shape.member);\n if (result !== undefined) out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n var out = {};\n util.each(map, function(key, value) {\n var result = translate(value, shape.value);\n if (result !== undefined) out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toWireFormat(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonBuilder;\n","var util = require('../util');\n\nfunction JsonParser() { }\n\nJsonParser.prototype.parse = function(value, shape) {\n return translate(JSON.parse(value), shape);\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined) return undefined;\n\n switch (shape.type) {\n case 'structure': return translateStructure(value, shape);\n case 'map': return translateMap(value, shape);\n case 'list': return translateList(value, shape);\n default: return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n if (structure == null) return undefined;\n if (shape.isDocument) return structure;\n\n var struct = {};\n var shapeMembers = shape.members;\n util.each(shapeMembers, function(name, memberShape) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n if (Object.prototype.hasOwnProperty.call(structure, locationName)) {\n var value = structure[locationName];\n var result = translate(value, memberShape);\n if (result !== undefined) struct[name] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n if (list == null) return undefined;\n\n var out = [];\n util.arrayEach(list, function(value) {\n var result = translate(value, shape.member);\n if (result === undefined) out.push(null);\n else out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n if (map == null) return undefined;\n\n var out = {};\n util.each(map, function(key, value) {\n var result = translate(value, shape.value);\n if (result === undefined) out[key] = null;\n else out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toType(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonParser;\n","var Collection = require('./collection');\nvar Operation = require('./operation');\nvar Shape = require('./shape');\nvar Paginator = require('./paginator');\nvar ResourceWaiter = require('./resource_waiter');\nvar metadata = require('../../apis/metadata.json');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Api(api, options) {\n var self = this;\n api = api || {};\n options = options || {};\n options.api = this;\n\n api.metadata = api.metadata || {};\n\n var serviceIdentifier = options.serviceIdentifier;\n delete options.serviceIdentifier;\n\n property(this, 'isApi', true, false);\n property(this, 'apiVersion', api.metadata.apiVersion);\n property(this, 'endpointPrefix', api.metadata.endpointPrefix);\n property(this, 'signingName', api.metadata.signingName);\n property(this, 'globalEndpoint', api.metadata.globalEndpoint);\n property(this, 'signatureVersion', api.metadata.signatureVersion);\n property(this, 'jsonVersion', api.metadata.jsonVersion);\n property(this, 'targetPrefix', api.metadata.targetPrefix);\n property(this, 'protocol', api.metadata.protocol);\n property(this, 'timestampFormat', api.metadata.timestampFormat);\n property(this, 'xmlNamespaceUri', api.metadata.xmlNamespace);\n property(this, 'abbreviation', api.metadata.serviceAbbreviation);\n property(this, 'fullName', api.metadata.serviceFullName);\n property(this, 'serviceId', api.metadata.serviceId);\n if (serviceIdentifier && metadata[serviceIdentifier]) {\n property(this, 'xmlNoDefaultLists', metadata[serviceIdentifier].xmlNoDefaultLists, false);\n }\n\n memoizedProperty(this, 'className', function() {\n var name = api.metadata.serviceAbbreviation || api.metadata.serviceFullName;\n if (!name) return null;\n\n name = name.replace(/^Amazon|AWS\\s*|\\(.*|\\s+|\\W+/g, '');\n if (name === 'ElasticLoadBalancing') name = 'ELB';\n return name;\n });\n\n function addEndpointOperation(name, operation) {\n if (operation.endpointoperation === true) {\n property(self, 'endpointOperation', util.string.lowerFirst(name));\n }\n if (operation.endpointdiscovery && !self.hasRequiredEndpointDiscovery) {\n property(\n self,\n 'hasRequiredEndpointDiscovery',\n operation.endpointdiscovery.required === true\n );\n }\n }\n\n property(this, 'operations', new Collection(api.operations, options, function(name, operation) {\n return new Operation(name, operation, options);\n }, util.string.lowerFirst, addEndpointOperation));\n\n property(this, 'shapes', new Collection(api.shapes, options, function(name, shape) {\n return Shape.create(shape, options);\n }));\n\n property(this, 'paginators', new Collection(api.paginators, options, function(name, paginator) {\n return new Paginator(name, paginator, options);\n }));\n\n property(this, 'waiters', new Collection(api.waiters, options, function(name, waiter) {\n return new ResourceWaiter(name, waiter, options);\n }, util.string.lowerFirst));\n\n if (options.documentation) {\n property(this, 'documentation', api.documentation);\n property(this, 'documentationUrl', api.documentationUrl);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = Api;\n","var memoizedProperty = require('../util').memoizedProperty;\n\nfunction memoize(name, value, factory, nameTr) {\n memoizedProperty(this, nameTr(name), function() {\n return factory(name, value);\n });\n}\n\nfunction Collection(iterable, options, factory, nameTr, callback) {\n nameTr = nameTr || String;\n var self = this;\n\n for (var id in iterable) {\n if (Object.prototype.hasOwnProperty.call(iterable, id)) {\n memoize.call(self, id, iterable[id], factory, nameTr);\n if (callback) callback(id, iterable[id]);\n }\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = Collection;\n","var Shape = require('./shape');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Operation(name, operation, options) {\n var self = this;\n options = options || {};\n\n property(this, 'name', operation.name || name);\n property(this, 'api', options.api, false);\n\n operation.http = operation.http || {};\n property(this, 'endpoint', operation.endpoint);\n property(this, 'httpMethod', operation.http.method || 'POST');\n property(this, 'httpPath', operation.http.requestUri || '/');\n property(this, 'authtype', operation.authtype || '');\n property(\n this,\n 'endpointDiscoveryRequired',\n operation.endpointdiscovery ?\n (operation.endpointdiscovery.required ? 'REQUIRED' : 'OPTIONAL') :\n 'NULL'\n );\n property(this, 'httpChecksumRequired', operation.httpChecksumRequired, false);\n\n memoizedProperty(this, 'input', function() {\n if (!operation.input) {\n return new Shape.create({type: 'structure'}, options);\n }\n return Shape.create(operation.input, options);\n });\n\n memoizedProperty(this, 'output', function() {\n if (!operation.output) {\n return new Shape.create({type: 'structure'}, options);\n }\n return Shape.create(operation.output, options);\n });\n\n memoizedProperty(this, 'errors', function() {\n var list = [];\n if (!operation.errors) return null;\n\n for (var i = 0; i < operation.errors.length; i++) {\n list.push(Shape.create(operation.errors[i], options));\n }\n\n return list;\n });\n\n memoizedProperty(this, 'paginator', function() {\n return options.api.paginators[name];\n });\n\n if (options.documentation) {\n property(this, 'documentation', operation.documentation);\n property(this, 'documentationUrl', operation.documentationUrl);\n }\n\n // idempotentMembers only tracks top-level input shapes\n memoizedProperty(this, 'idempotentMembers', function() {\n var idempotentMembers = [];\n var input = self.input;\n var members = input.members;\n if (!input.members) {\n return idempotentMembers;\n }\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n continue;\n }\n if (members[name].isIdempotent === true) {\n idempotentMembers.push(name);\n }\n }\n return idempotentMembers;\n });\n\n memoizedProperty(this, 'hasEventOutput', function() {\n var output = self.output;\n return hasEventStream(output);\n });\n}\n\nfunction hasEventStream(topLevelShape) {\n var members = topLevelShape.members;\n var payload = topLevelShape.payload;\n\n if (!topLevelShape.members) {\n return false;\n }\n\n if (payload) {\n var payloadMember = members[payload];\n return payloadMember.isEventStream;\n }\n\n // check if any member is an event stream\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n if (members[name].isEventStream === true) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * @api private\n */\nmodule.exports = Operation;\n","var property = require('../util').property;\n\nfunction Paginator(name, paginator) {\n property(this, 'inputToken', paginator.input_token);\n property(this, 'limitKey', paginator.limit_key);\n property(this, 'moreResults', paginator.more_results);\n property(this, 'outputToken', paginator.output_token);\n property(this, 'resultKey', paginator.result_key);\n}\n\n/**\n * @api private\n */\nmodule.exports = Paginator;\n","var util = require('../util');\nvar property = util.property;\n\nfunction ResourceWaiter(name, waiter, options) {\n options = options || {};\n property(this, 'name', name);\n property(this, 'api', options.api, false);\n\n if (waiter.operation) {\n property(this, 'operation', util.string.lowerFirst(waiter.operation));\n }\n\n var self = this;\n var keys = [\n 'type',\n 'description',\n 'delay',\n 'maxAttempts',\n 'acceptors'\n ];\n\n keys.forEach(function(key) {\n var value = waiter[key];\n if (value) {\n property(self, key, value);\n }\n });\n}\n\n/**\n * @api private\n */\nmodule.exports = ResourceWaiter;\n","var Collection = require('./collection');\n\nvar util = require('../util');\n\nfunction property(obj, name, value) {\n if (value !== null && value !== undefined) {\n util.property.apply(this, arguments);\n }\n}\n\nfunction memoizedProperty(obj, name) {\n if (!obj.constructor.prototype[name]) {\n util.memoizedProperty.apply(this, arguments);\n }\n}\n\nfunction Shape(shape, options, memberName) {\n options = options || {};\n\n property(this, 'shape', shape.shape);\n property(this, 'api', options.api, false);\n property(this, 'type', shape.type);\n property(this, 'enum', shape.enum);\n property(this, 'min', shape.min);\n property(this, 'max', shape.max);\n property(this, 'pattern', shape.pattern);\n property(this, 'location', shape.location || this.location || 'body');\n property(this, 'name', this.name || shape.xmlName || shape.queryName ||\n shape.locationName || memberName);\n property(this, 'isStreaming', shape.streaming || this.isStreaming || false);\n property(this, 'requiresLength', shape.requiresLength, false);\n property(this, 'isComposite', shape.isComposite || false);\n property(this, 'isShape', true, false);\n property(this, 'isQueryName', Boolean(shape.queryName), false);\n property(this, 'isLocationName', Boolean(shape.locationName), false);\n property(this, 'isIdempotent', shape.idempotencyToken === true);\n property(this, 'isJsonValue', shape.jsonvalue === true);\n property(this, 'isSensitive', shape.sensitive === true || shape.prototype && shape.prototype.sensitive === true);\n property(this, 'isEventStream', Boolean(shape.eventstream), false);\n property(this, 'isEvent', Boolean(shape.event), false);\n property(this, 'isEventPayload', Boolean(shape.eventpayload), false);\n property(this, 'isEventHeader', Boolean(shape.eventheader), false);\n property(this, 'isTimestampFormatSet', Boolean(shape.timestampFormat) || shape.prototype && shape.prototype.isTimestampFormatSet === true, false);\n property(this, 'endpointDiscoveryId', Boolean(shape.endpointdiscoveryid), false);\n property(this, 'hostLabel', Boolean(shape.hostLabel), false);\n\n if (options.documentation) {\n property(this, 'documentation', shape.documentation);\n property(this, 'documentationUrl', shape.documentationUrl);\n }\n\n if (shape.xmlAttribute) {\n property(this, 'isXmlAttribute', shape.xmlAttribute || false);\n }\n\n // type conversion and parsing\n property(this, 'defaultValue', null);\n this.toWireFormat = function(value) {\n if (value === null || value === undefined) return '';\n return value;\n };\n this.toType = function(value) { return value; };\n}\n\n/**\n * @api private\n */\nShape.normalizedTypes = {\n character: 'string',\n double: 'float',\n long: 'integer',\n short: 'integer',\n biginteger: 'integer',\n bigdecimal: 'float',\n blob: 'binary'\n};\n\n/**\n * @api private\n */\nShape.types = {\n 'structure': StructureShape,\n 'list': ListShape,\n 'map': MapShape,\n 'boolean': BooleanShape,\n 'timestamp': TimestampShape,\n 'float': FloatShape,\n 'integer': IntegerShape,\n 'string': StringShape,\n 'base64': Base64Shape,\n 'binary': BinaryShape\n};\n\nShape.resolve = function resolve(shape, options) {\n if (shape.shape) {\n var refShape = options.api.shapes[shape.shape];\n if (!refShape) {\n throw new Error('Cannot find shape reference: ' + shape.shape);\n }\n\n return refShape;\n } else {\n return null;\n }\n};\n\nShape.create = function create(shape, options, memberName) {\n if (shape.isShape) return shape;\n\n var refShape = Shape.resolve(shape, options);\n if (refShape) {\n var filteredKeys = Object.keys(shape);\n if (!options.documentation) {\n filteredKeys = filteredKeys.filter(function(name) {\n return !name.match(/documentation/);\n });\n }\n\n // create an inline shape with extra members\n var InlineShape = function() {\n refShape.constructor.call(this, shape, options, memberName);\n };\n InlineShape.prototype = refShape;\n return new InlineShape();\n } else {\n // set type if not set\n if (!shape.type) {\n if (shape.members) shape.type = 'structure';\n else if (shape.member) shape.type = 'list';\n else if (shape.key) shape.type = 'map';\n else shape.type = 'string';\n }\n\n // normalize types\n var origType = shape.type;\n if (Shape.normalizedTypes[shape.type]) {\n shape.type = Shape.normalizedTypes[shape.type];\n }\n\n if (Shape.types[shape.type]) {\n return new Shape.types[shape.type](shape, options, memberName);\n } else {\n throw new Error('Unrecognized shape type: ' + origType);\n }\n }\n};\n\nfunction CompositeShape(shape) {\n Shape.apply(this, arguments);\n property(this, 'isComposite', true);\n\n if (shape.flattened) {\n property(this, 'flattened', shape.flattened || false);\n }\n}\n\nfunction StructureShape(shape, options) {\n var self = this;\n var requiredMap = null, firstInit = !this.isShape;\n\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return {}; });\n property(this, 'members', {});\n property(this, 'memberNames', []);\n property(this, 'required', []);\n property(this, 'isRequired', function() { return false; });\n property(this, 'isDocument', Boolean(shape.document));\n }\n\n if (shape.members) {\n property(this, 'members', new Collection(shape.members, options, function(name, member) {\n return Shape.create(member, options, name);\n }));\n memoizedProperty(this, 'memberNames', function() {\n return shape.xmlOrder || Object.keys(shape.members);\n });\n\n if (shape.event) {\n memoizedProperty(this, 'eventPayloadMemberName', function() {\n var members = self.members;\n var memberNames = self.memberNames;\n // iterate over members to find ones that are event payloads\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventPayload) {\n return memberNames[i];\n }\n }\n });\n\n memoizedProperty(this, 'eventHeaderMemberNames', function() {\n var members = self.members;\n var memberNames = self.memberNames;\n var eventHeaderMemberNames = [];\n // iterate over members to find ones that are event headers\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventHeader) {\n eventHeaderMemberNames.push(memberNames[i]);\n }\n }\n return eventHeaderMemberNames;\n });\n }\n }\n\n if (shape.required) {\n property(this, 'required', shape.required);\n property(this, 'isRequired', function(name) {\n if (!requiredMap) {\n requiredMap = {};\n for (var i = 0; i < shape.required.length; i++) {\n requiredMap[shape.required[i]] = true;\n }\n }\n\n return requiredMap[name];\n }, false, true);\n }\n\n property(this, 'resultWrapper', shape.resultWrapper || null);\n\n if (shape.payload) {\n property(this, 'payload', shape.payload);\n }\n\n if (typeof shape.xmlNamespace === 'string') {\n property(this, 'xmlNamespaceUri', shape.xmlNamespace);\n } else if (typeof shape.xmlNamespace === 'object') {\n property(this, 'xmlNamespacePrefix', shape.xmlNamespace.prefix);\n property(this, 'xmlNamespaceUri', shape.xmlNamespace.uri);\n }\n}\n\nfunction ListShape(shape, options) {\n var self = this, firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return []; });\n }\n\n if (shape.member) {\n memoizedProperty(this, 'member', function() {\n return Shape.create(shape.member, options);\n });\n }\n\n if (this.flattened) {\n var oldName = this.name;\n memoizedProperty(this, 'name', function() {\n return self.member.name || oldName;\n });\n }\n}\n\nfunction MapShape(shape, options) {\n var firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return {}; });\n property(this, 'key', Shape.create({type: 'string'}, options));\n property(this, 'value', Shape.create({type: 'string'}, options));\n }\n\n if (shape.key) {\n memoizedProperty(this, 'key', function() {\n return Shape.create(shape.key, options);\n });\n }\n if (shape.value) {\n memoizedProperty(this, 'value', function() {\n return Shape.create(shape.value, options);\n });\n }\n}\n\nfunction TimestampShape(shape) {\n var self = this;\n Shape.apply(this, arguments);\n\n if (shape.timestampFormat) {\n property(this, 'timestampFormat', shape.timestampFormat);\n } else if (self.isTimestampFormatSet && this.timestampFormat) {\n property(this, 'timestampFormat', this.timestampFormat);\n } else if (this.location === 'header') {\n property(this, 'timestampFormat', 'rfc822');\n } else if (this.location === 'querystring') {\n property(this, 'timestampFormat', 'iso8601');\n } else if (this.api) {\n switch (this.api.protocol) {\n case 'json':\n case 'rest-json':\n property(this, 'timestampFormat', 'unixTimestamp');\n break;\n case 'rest-xml':\n case 'query':\n case 'ec2':\n property(this, 'timestampFormat', 'iso8601');\n break;\n }\n }\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n if (typeof value.toUTCString === 'function') return value;\n return typeof value === 'string' || typeof value === 'number' ?\n util.date.parseTimestamp(value) : null;\n };\n\n this.toWireFormat = function(value) {\n return util.date.format(value, self.timestampFormat);\n };\n}\n\nfunction StringShape() {\n Shape.apply(this, arguments);\n\n var nullLessProtocols = ['rest-xml', 'query', 'ec2'];\n this.toType = function(value) {\n value = this.api && nullLessProtocols.indexOf(this.api.protocol) > -1 ?\n value || '' : value;\n if (this.isJsonValue) {\n return JSON.parse(value);\n }\n\n return value && typeof value.toString === 'function' ?\n value.toString() : value;\n };\n\n this.toWireFormat = function(value) {\n return this.isJsonValue ? JSON.stringify(value) : value;\n };\n}\n\nfunction FloatShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n return parseFloat(value);\n };\n this.toWireFormat = this.toType;\n}\n\nfunction IntegerShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n return parseInt(value, 10);\n };\n this.toWireFormat = this.toType;\n}\n\nfunction BinaryShape() {\n Shape.apply(this, arguments);\n this.toType = function(value) {\n var buf = util.base64.decode(value);\n if (this.isSensitive && util.isNode() && typeof util.Buffer.alloc === 'function') {\n /* Node.js can create a Buffer that is not isolated.\n * i.e. buf.byteLength !== buf.buffer.byteLength\n * This means that the sensitive data is accessible to anyone with access to buf.buffer.\n * If this is the node shared Buffer, then other code within this process _could_ find this secret.\n * Copy sensitive data to an isolated Buffer and zero the sensitive data.\n * While this is safe to do here, copying this code somewhere else may produce unexpected results.\n */\n var secureBuf = util.Buffer.alloc(buf.length, buf);\n buf.fill(0);\n buf = secureBuf;\n }\n return buf;\n };\n this.toWireFormat = util.base64.encode;\n}\n\nfunction Base64Shape() {\n BinaryShape.apply(this, arguments);\n}\n\nfunction BooleanShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (typeof value === 'boolean') return value;\n if (value === null || value === undefined) return null;\n return value === 'true';\n };\n}\n\n/**\n * @api private\n */\nShape.shapes = {\n StructureShape: StructureShape,\n ListShape: ListShape,\n MapShape: MapShape,\n StringShape: StringShape,\n BooleanShape: BooleanShape,\n Base64Shape: Base64Shape\n};\n\n/**\n * @api private\n */\nmodule.exports = Shape;\n","var AWS = require('./core');\n\n/**\n * @api private\n */\nAWS.ParamValidator = AWS.util.inherit({\n /**\n * Create a new validator object.\n *\n * @param validation [Boolean|map] whether input parameters should be\n * validated against the operation description before sending the\n * request. Pass a map to enable any of the following specific\n * validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n */\n constructor: function ParamValidator(validation) {\n if (validation === true || validation === undefined) {\n validation = {'min': true};\n }\n this.validation = validation;\n },\n\n validate: function validate(shape, params, context) {\n this.errors = [];\n this.validateMember(shape, params || {}, context || 'params');\n\n if (this.errors.length > 1) {\n var msg = this.errors.join('\\n* ');\n msg = 'There were ' + this.errors.length +\n ' validation errors:\\n* ' + msg;\n throw AWS.util.error(new Error(msg),\n {code: 'MultipleValidationErrors', errors: this.errors});\n } else if (this.errors.length === 1) {\n throw this.errors[0];\n } else {\n return true;\n }\n },\n\n fail: function fail(code, message) {\n this.errors.push(AWS.util.error(new Error(message), {code: code}));\n },\n\n validateStructure: function validateStructure(shape, params, context) {\n this.validateType(params, context, ['object'], 'structure');\n\n var paramName;\n for (var i = 0; shape.required && i < shape.required.length; i++) {\n paramName = shape.required[i];\n var value = params[paramName];\n if (value === undefined || value === null) {\n this.fail('MissingRequiredParameter',\n 'Missing required key \\'' + paramName + '\\' in ' + context);\n }\n }\n\n // validate hash members\n for (paramName in params) {\n if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue;\n\n var paramValue = params[paramName],\n memberShape = shape.members[paramName];\n\n if (memberShape !== undefined) {\n var memberContext = [context, paramName].join('.');\n this.validateMember(memberShape, paramValue, memberContext);\n } else if (paramValue !== undefined && paramValue !== null) {\n this.fail('UnexpectedParameter',\n 'Unexpected key \\'' + paramName + '\\' found in ' + context);\n }\n }\n\n return true;\n },\n\n validateMember: function validateMember(shape, param, context) {\n switch (shape.type) {\n case 'structure':\n return this.validateStructure(shape, param, context);\n case 'list':\n return this.validateList(shape, param, context);\n case 'map':\n return this.validateMap(shape, param, context);\n default:\n return this.validateScalar(shape, param, context);\n }\n },\n\n validateList: function validateList(shape, params, context) {\n if (this.validateType(params, context, [Array])) {\n this.validateRange(shape, params.length, context, 'list member count');\n // validate array members\n for (var i = 0; i < params.length; i++) {\n this.validateMember(shape.member, params[i], context + '[' + i + ']');\n }\n }\n },\n\n validateMap: function validateMap(shape, params, context) {\n if (this.validateType(params, context, ['object'], 'map')) {\n // Build up a count of map members to validate range traits.\n var mapCount = 0;\n for (var param in params) {\n if (!Object.prototype.hasOwnProperty.call(params, param)) continue;\n // Validate any map key trait constraints\n this.validateMember(shape.key, param,\n context + '[key=\\'' + param + '\\']');\n this.validateMember(shape.value, params[param],\n context + '[\\'' + param + '\\']');\n mapCount++;\n }\n this.validateRange(shape, mapCount, context, 'map member count');\n }\n },\n\n validateScalar: function validateScalar(shape, value, context) {\n switch (shape.type) {\n case null:\n case undefined:\n case 'string':\n return this.validateString(shape, value, context);\n case 'base64':\n case 'binary':\n return this.validatePayload(value, context);\n case 'integer':\n case 'float':\n return this.validateNumber(shape, value, context);\n case 'boolean':\n return this.validateType(value, context, ['boolean']);\n case 'timestamp':\n return this.validateType(value, context, [Date,\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/, 'number'],\n 'Date object, ISO-8601 string, or a UNIX timestamp');\n default:\n return this.fail('UnkownType', 'Unhandled type ' +\n shape.type + ' for ' + context);\n }\n },\n\n validateString: function validateString(shape, value, context) {\n var validTypes = ['string'];\n if (shape.isJsonValue) {\n validTypes = validTypes.concat(['number', 'object', 'boolean']);\n }\n if (value !== null && this.validateType(value, context, validTypes)) {\n this.validateEnum(shape, value, context);\n this.validateRange(shape, value.length, context, 'string length');\n this.validatePattern(shape, value, context);\n this.validateUri(shape, value, context);\n }\n },\n\n validateUri: function validateUri(shape, value, context) {\n if (shape['location'] === 'uri') {\n if (value.length === 0) {\n this.fail('UriParameterError', 'Expected uri parameter to have length >= 1,'\n + ' but found \"' + value +'\" for ' + context);\n }\n }\n },\n\n validatePattern: function validatePattern(shape, value, context) {\n if (this.validation['pattern'] && shape['pattern'] !== undefined) {\n if (!(new RegExp(shape['pattern'])).test(value)) {\n this.fail('PatternMatchError', 'Provided value \"' + value + '\" '\n + 'does not match regex pattern /' + shape['pattern'] + '/ for '\n + context);\n }\n }\n },\n\n validateRange: function validateRange(shape, value, context, descriptor) {\n if (this.validation['min']) {\n if (shape['min'] !== undefined && value < shape['min']) {\n this.fail('MinRangeError', 'Expected ' + descriptor + ' >= '\n + shape['min'] + ', but found ' + value + ' for ' + context);\n }\n }\n if (this.validation['max']) {\n if (shape['max'] !== undefined && value > shape['max']) {\n this.fail('MaxRangeError', 'Expected ' + descriptor + ' <= '\n + shape['max'] + ', but found ' + value + ' for ' + context);\n }\n }\n },\n\n validateEnum: function validateRange(shape, value, context) {\n if (this.validation['enum'] && shape['enum'] !== undefined) {\n // Fail if the string value is not present in the enum list\n if (shape['enum'].indexOf(value) === -1) {\n this.fail('EnumError', 'Found string value of ' + value + ', but '\n + 'expected ' + shape['enum'].join('|') + ' for ' + context);\n }\n }\n },\n\n validateType: function validateType(value, context, acceptedTypes, type) {\n // We will not log an error for null or undefined, but we will return\n // false so that callers know that the expected type was not strictly met.\n if (value === null || value === undefined) return false;\n\n var foundInvalidType = false;\n for (var i = 0; i < acceptedTypes.length; i++) {\n if (typeof acceptedTypes[i] === 'string') {\n if (typeof value === acceptedTypes[i]) return true;\n } else if (acceptedTypes[i] instanceof RegExp) {\n if ((value || '').toString().match(acceptedTypes[i])) return true;\n } else {\n if (value instanceof acceptedTypes[i]) return true;\n if (AWS.util.isType(value, acceptedTypes[i])) return true;\n if (!type && !foundInvalidType) acceptedTypes = acceptedTypes.slice();\n acceptedTypes[i] = AWS.util.typeName(acceptedTypes[i]);\n }\n foundInvalidType = true;\n }\n\n var acceptedType = type;\n if (!acceptedType) {\n acceptedType = acceptedTypes.join(', ').replace(/,([^,]+)$/, ', or$1');\n }\n\n var vowel = acceptedType.match(/^[aeiou]/i) ? 'n' : '';\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a' +\n vowel + ' ' + acceptedType);\n return false;\n },\n\n validateNumber: function validateNumber(shape, value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') {\n var castedValue = parseFloat(value);\n if (castedValue.toString() === value) value = castedValue;\n }\n if (this.validateType(value, context, ['number'])) {\n this.validateRange(shape, value, context, 'numeric value');\n }\n },\n\n validatePayload: function validatePayload(value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') return;\n if (value && typeof value.byteLength === 'number') return; // typed arrays\n if (AWS.util.isNode()) { // special check for buffer/stream in Node.js\n var Stream = AWS.util.stream.Stream;\n if (AWS.util.Buffer.isBuffer(value) || value instanceof Stream) return;\n } else {\n if (typeof Blob !== void 0 && value instanceof Blob) return;\n }\n\n var types = ['Buffer', 'Stream', 'File', 'Blob', 'ArrayBuffer', 'DataView'];\n if (value) {\n for (var i = 0; i < types.length; i++) {\n if (AWS.util.isType(value, types[i])) return;\n if (AWS.util.typeName(value.constructor) === types[i]) return;\n }\n }\n\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a ' +\n 'string, Buffer, Stream, Blob, or typed array object');\n }\n});\n","var AWS = require('../core');\nvar rest = AWS.Protocol.Rest;\n\n/**\n * A presigner object can be used to generate presigned urls for the Polly service.\n */\nAWS.Polly.Presigner = AWS.util.inherit({\n /**\n * Creates a presigner object with a set of configuration options.\n *\n * @option options params [map] An optional map of parameters to bind to every\n * request sent by this service object.\n * @option options service [AWS.Polly] An optional pre-configured instance\n * of the AWS.Polly service object to use for requests. The object may\n * bound parameters used by the presigner.\n * @see AWS.Polly.constructor\n */\n constructor: function Signer(options) {\n options = options || {};\n this.options = options;\n this.service = options.service;\n this.bindServiceObject(options);\n this._operations = {};\n },\n\n /**\n * @api private\n */\n bindServiceObject: function bindServiceObject(options) {\n options = options || {};\n if (!this.service) {\n this.service = new AWS.Polly(options);\n } else {\n var config = AWS.util.copy(this.service.config);\n this.service = new this.service.constructor.__super__(config);\n this.service.config.params = AWS.util.merge(this.service.config.params || {}, options.params);\n }\n },\n\n /**\n * @api private\n */\n modifyInputMembers: function modifyInputMembers(input) {\n // make copies of the input so we don't overwrite the api\n // need to be careful to copy anything we access/modify\n var modifiedInput = AWS.util.copy(input);\n modifiedInput.members = AWS.util.copy(input.members);\n AWS.util.each(input.members, function(name, member) {\n modifiedInput.members[name] = AWS.util.copy(member);\n // update location and locationName\n if (!member.location || member.location === 'body') {\n modifiedInput.members[name].location = 'querystring';\n modifiedInput.members[name].locationName = name;\n }\n });\n return modifiedInput;\n },\n\n /**\n * @api private\n */\n convertPostToGet: function convertPostToGet(req) {\n // convert method\n req.httpRequest.method = 'GET';\n\n var operation = req.service.api.operations[req.operation];\n // get cached operation input first\n var input = this._operations[req.operation];\n if (!input) {\n // modify the original input\n this._operations[req.operation] = input = this.modifyInputMembers(operation.input);\n }\n\n var uri = rest.generateURI(req.httpRequest.endpoint.path, operation.httpPath, input, req.params);\n\n req.httpRequest.path = uri;\n req.httpRequest.body = '';\n\n // don't need these headers on a GET request\n delete req.httpRequest.headers['Content-Length'];\n delete req.httpRequest.headers['Content-Type'];\n },\n\n /**\n * @overload getSynthesizeSpeechUrl(params = {}, [expires = 3600], [callback])\n * Generate a presigned url for {AWS.Polly.synthesizeSpeech}.\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n * @param params [map] parameters to pass to the operation. See the {AWS.Polly.synthesizeSpeech}\n * operation for the expected operation parameters.\n * @param expires [Integer] (3600) the number of seconds to expire the pre-signed URL operation in.\n * Defaults to 1 hour.\n * @return [string] if called synchronously (with no callback), returns the signed URL.\n * @return [null] nothing is returned if a callback is provided.\n * @callback callback function (err, url)\n * If a callback is supplied, it is called when a signed URL has been generated.\n * @param err [Error] the error object returned from the presigner.\n * @param url [String] the signed URL.\n * @see AWS.Polly.synthesizeSpeech\n */\n getSynthesizeSpeechUrl: function getSynthesizeSpeechUrl(params, expires, callback) {\n var self = this;\n var request = this.service.makeRequest('synthesizeSpeech', params);\n // remove existing build listeners\n request.removeAllListeners('build');\n request.on('build', function(req) {\n self.convertPostToGet(req);\n });\n return request.presign(expires, callback);\n }\n});\n","var util = require('../util');\nvar AWS = require('../core');\n\n/**\n * Prepend prefix defined by API model to endpoint that's already\n * constructed. This feature does not apply to operations using\n * endpoint discovery and can be disabled.\n * @api private\n */\nfunction populateHostPrefix(request) {\n var enabled = request.service.config.hostPrefixEnabled;\n if (!enabled) return request;\n var operationModel = request.service.api.operations[request.operation];\n //don't marshal host prefix when operation has endpoint discovery traits\n if (hasEndpointDiscover(request)) return request;\n if (operationModel.endpoint && operationModel.endpoint.hostPrefix) {\n var hostPrefixNotation = operationModel.endpoint.hostPrefix;\n var hostPrefix = expandHostPrefix(hostPrefixNotation, request.params, operationModel.input);\n prependEndpointPrefix(request.httpRequest.endpoint, hostPrefix);\n validateHostname(request.httpRequest.endpoint.hostname);\n }\n return request;\n}\n\n/**\n * @api private\n */\nfunction hasEndpointDiscover(request) {\n var api = request.service.api;\n var operationModel = api.operations[request.operation];\n var isEndpointOperation = api.endpointOperation && (api.endpointOperation === util.string.lowerFirst(operationModel.name));\n return (operationModel.endpointDiscoveryRequired !== 'NULL' || isEndpointOperation === true);\n}\n\n/**\n * @api private\n */\nfunction expandHostPrefix(hostPrefixNotation, params, shape) {\n util.each(shape.members, function(name, member) {\n if (member.hostLabel === true) {\n if (typeof params[name] !== 'string' || params[name] === '') {\n throw util.error(new Error(), {\n message: 'Parameter ' + name + ' should be a non-empty string.',\n code: 'InvalidParameter'\n });\n }\n var regex = new RegExp('\\\\{' + name + '\\\\}', 'g');\n hostPrefixNotation = hostPrefixNotation.replace(regex, params[name]);\n }\n });\n return hostPrefixNotation;\n}\n\n/**\n * @api private\n */\nfunction prependEndpointPrefix(endpoint, prefix) {\n if (endpoint.host) {\n endpoint.host = prefix + endpoint.host;\n }\n if (endpoint.hostname) {\n endpoint.hostname = prefix + endpoint.hostname;\n }\n}\n\n/**\n * @api private\n */\nfunction validateHostname(hostname) {\n var labels = hostname.split('.');\n //Reference: https://tools.ietf.org/html/rfc1123#section-2\n var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]$/;\n util.arrayEach(labels, function(label) {\n if (!label.length || label.length < 1 || label.length > 63) {\n throw util.error(new Error(), {\n code: 'ValidationError',\n message: 'Hostname label length should be between 1 to 63 characters, inclusive.'\n });\n }\n if (!hostPattern.test(label)) {\n throw AWS.util.error(new Error(),\n {code: 'ValidationError', message: label + ' is not hostname compatible.'});\n }\n });\n}\n\nmodule.exports = {\n populateHostPrefix: populateHostPrefix\n};\n","var util = require('../util');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var httpRequest = req.httpRequest;\n var api = req.service.api;\n var target = api.targetPrefix + '.' + api.operations[req.operation].name;\n var version = api.jsonVersion || '1.0';\n var input = api.operations[req.operation].input;\n var builder = new JsonBuilder();\n\n if (version === 1) version = '1.0';\n httpRequest.body = builder.build(req.params || {}, input);\n httpRequest.headers['Content-Type'] = 'application/x-amz-json-' + version;\n httpRequest.headers['X-Amz-Target'] = target;\n\n populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var error = {};\n var httpResponse = resp.httpResponse;\n\n error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';\n if (typeof error.code === 'string') {\n error.code = error.code.split(':')[0];\n }\n\n if (httpResponse.body.length > 0) {\n try {\n var e = JSON.parse(httpResponse.body.toString());\n var code = e.__type || e.code || e.Code;\n if (code) {\n error.code = code.split('#').pop();\n }\n if (error.code === 'RequestEntityTooLarge') {\n error.message = 'Request body must be less than 1 MB';\n } else {\n error.message = (e.message || e.Message || null);\n }\n } catch (e) {\n error.statusCode = httpResponse.statusCode;\n error.message = httpResponse.statusMessage;\n }\n } else {\n error.statusCode = httpResponse.statusCode;\n error.message = httpResponse.statusCode.toString();\n }\n\n resp.error = util.error(new Error(), error);\n}\n\nfunction extractData(resp) {\n var body = resp.httpResponse.body.toString() || '{}';\n if (resp.request.service.config.convertResponseTypes === false) {\n resp.data = JSON.parse(body);\n } else {\n var operation = resp.request.service.api.operations[resp.request.operation];\n var shape = operation.output || {};\n var parser = new JsonParser();\n resp.data = parser.parse(body, shape);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar QueryParamSerializer = require('../query/query_param_serializer');\nvar Shape = require('../model/shape');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var operation = req.service.api.operations[req.operation];\n var httpRequest = req.httpRequest;\n httpRequest.headers['Content-Type'] =\n 'application/x-www-form-urlencoded; charset=utf-8';\n httpRequest.params = {\n Version: req.service.api.apiVersion,\n Action: operation.name\n };\n\n // convert the request parameters into a list of query params,\n // e.g. Deeply.NestedParam.0.Name=value\n var builder = new QueryParamSerializer();\n builder.serialize(req.params, operation.input, function(name, value) {\n httpRequest.params[name] = value;\n });\n httpRequest.body = util.queryParamsToString(httpRequest.params);\n\n populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var data, body = resp.httpResponse.body.toString();\n if (body.match('= 0 ? '&' : '?');\n var parts = [];\n util.arrayEach(Object.keys(queryString).sort(), function(key) {\n if (!Array.isArray(queryString[key])) {\n queryString[key] = [queryString[key]];\n }\n for (var i = 0; i < queryString[key].length; i++) {\n parts.push(util.uriEscape(String(key)) + '=' + queryString[key][i]);\n }\n });\n uri += parts.join('&');\n }\n\n return uri;\n}\n\nfunction populateURI(req) {\n var operation = req.service.api.operations[req.operation];\n var input = operation.input;\n\n var uri = generateURI(req.httpRequest.endpoint.path, operation.httpPath, input, req.params);\n req.httpRequest.path = uri;\n}\n\nfunction populateHeaders(req) {\n var operation = req.service.api.operations[req.operation];\n util.each(operation.input.members, function (name, member) {\n var value = req.params[name];\n if (value === null || value === undefined) return;\n\n if (member.location === 'headers' && member.type === 'map') {\n util.each(value, function(key, memberValue) {\n req.httpRequest.headers[member.name + key] = memberValue;\n });\n } else if (member.location === 'header') {\n value = member.toWireFormat(value).toString();\n if (member.isJsonValue) {\n value = util.base64.encode(value);\n }\n req.httpRequest.headers[member.name] = value;\n }\n });\n}\n\nfunction buildRequest(req) {\n populateMethod(req);\n populateURI(req);\n populateHeaders(req);\n populateHostPrefix(req);\n}\n\nfunction extractError() {\n}\n\nfunction extractData(resp) {\n var req = resp.request;\n var data = {};\n var r = resp.httpResponse;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n\n // normalize headers names to lower-cased keys for matching\n var headers = {};\n util.each(r.headers, function (k, v) {\n headers[k.toLowerCase()] = v;\n });\n\n util.each(output.members, function(name, member) {\n var header = (member.name || name).toLowerCase();\n if (member.location === 'headers' && member.type === 'map') {\n data[name] = {};\n var location = member.isLocationName ? member.name : '';\n var pattern = new RegExp('^' + location + '(.+)', 'i');\n util.each(r.headers, function (k, v) {\n var result = k.match(pattern);\n if (result !== null) {\n data[name][result[1]] = v;\n }\n });\n } else if (member.location === 'header') {\n if (headers[header] !== undefined) {\n var value = member.isJsonValue ?\n util.base64.decode(headers[header]) :\n headers[header];\n data[name] = member.toType(value);\n }\n } else if (member.location === 'statusCode') {\n data[name] = parseInt(r.statusCode, 10);\n }\n });\n\n resp.data = data;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData,\n generateURI: generateURI\n};\n","var util = require('../util');\nvar Rest = require('./rest');\nvar Json = require('./json');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\n\nfunction populateBody(req) {\n var builder = new JsonBuilder();\n var input = req.service.api.operations[req.operation].input;\n\n if (input.payload) {\n var params = {};\n var payloadShape = input.members[input.payload];\n params = req.params[input.payload];\n\n if (payloadShape.type === 'structure') {\n req.httpRequest.body = builder.build(params || {}, payloadShape);\n applyContentTypeHeader(req);\n } else if (params !== undefined) {\n // non-JSON payload\n req.httpRequest.body = params;\n if (payloadShape.type === 'binary' || payloadShape.isStreaming) {\n applyContentTypeHeader(req, true);\n }\n }\n } else {\n req.httpRequest.body = builder.build(req.params, input);\n applyContentTypeHeader(req);\n }\n}\n\nfunction applyContentTypeHeader(req, isBinary) {\n if (!req.httpRequest.headers['Content-Type']) {\n var type = isBinary ? 'binary/octet-stream' : 'application/json';\n req.httpRequest.headers['Content-Type'] = type;\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req);\n\n // never send body payload on GET/HEAD/DELETE\n if (['GET', 'HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Json.extractError(resp);\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n\n var req = resp.request;\n var operation = req.service.api.operations[req.operation];\n var rules = req.service.api.operations[req.operation].output || {};\n var parser;\n var hasEventOutput = operation.hasEventOutput;\n\n if (rules.payload) {\n var payloadMember = rules.members[rules.payload];\n var body = resp.httpResponse.body;\n if (payloadMember.isEventStream) {\n parser = new JsonParser();\n resp.data[payload] = util.createEventStream(\n AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body,\n parser,\n payloadMember\n );\n } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {\n var parser = new JsonParser();\n resp.data[rules.payload] = parser.parse(body, payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[rules.payload] = body;\n } else {\n resp.data[rules.payload] = payloadMember.toType(body);\n }\n } else {\n var data = resp.data;\n Json.extractData(resp);\n resp.data = util.merge(data, resp.data);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar Rest = require('./rest');\n\nfunction populateBody(req) {\n var input = req.service.api.operations[req.operation].input;\n var builder = new AWS.XML.Builder();\n var params = req.params;\n\n var payload = input.payload;\n if (payload) {\n var payloadMember = input.members[payload];\n params = params[payload];\n if (params === undefined) return;\n\n if (payloadMember.type === 'structure') {\n var rootElement = payloadMember.name;\n req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);\n } else { // non-xml payload\n req.httpRequest.body = params;\n }\n } else {\n req.httpRequest.body = builder.toXML(params, input, input.name ||\n input.shape || util.string.upperFirst(req.operation) + 'Request');\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req);\n\n // never send body payload on GET/HEAD\n if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Rest.extractError(resp);\n\n var data;\n try {\n data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());\n } catch (e) {\n data = {\n Code: resp.httpResponse.statusCode,\n Message: resp.httpResponse.statusMessage\n };\n }\n\n if (data.Errors) data = data.Errors;\n if (data.Error) data = data.Error;\n if (data.Code) {\n resp.error = util.error(new Error(), {\n code: data.Code,\n message: data.Message\n });\n } else {\n resp.error = util.error(new Error(), {\n code: resp.httpResponse.statusCode,\n message: null\n });\n }\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n\n var parser;\n var req = resp.request;\n var body = resp.httpResponse.body;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n\n var hasEventOutput = operation.hasEventOutput;\n\n var payload = output.payload;\n if (payload) {\n var payloadMember = output.members[payload];\n if (payloadMember.isEventStream) {\n parser = new AWS.XML.Parser();\n resp.data[payload] = util.createEventStream(\n AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : resp.httpResponse.body,\n parser,\n payloadMember\n );\n } else if (payloadMember.type === 'structure') {\n parser = new AWS.XML.Parser();\n resp.data[payload] = parser.parse(body.toString(), payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[payload] = body;\n } else {\n resp.data[payload] = payloadMember.toType(body);\n }\n } else if (body.length > 0) {\n parser = new AWS.XML.Parser();\n var data = parser.parse(body.toString(), output);\n util.update(resp.data, data);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var util = require('../util');\n\nfunction QueryParamSerializer() {\n}\n\nQueryParamSerializer.prototype.serialize = function(params, shape, fn) {\n serializeStructure('', params, shape, fn);\n};\n\nfunction ucfirst(shape) {\n if (shape.isQueryName || shape.api.protocol !== 'ec2') {\n return shape.name;\n } else {\n return shape.name[0].toUpperCase() + shape.name.substr(1);\n }\n}\n\nfunction serializeStructure(prefix, struct, rules, fn) {\n util.each(rules.members, function(name, member) {\n var value = struct[name];\n if (value === null || value === undefined) return;\n\n var memberName = ucfirst(member);\n memberName = prefix ? prefix + '.' + memberName : memberName;\n serializeMember(memberName, value, member, fn);\n });\n}\n\nfunction serializeMap(name, map, rules, fn) {\n var i = 1;\n util.each(map, function (key, value) {\n var prefix = rules.flattened ? '.' : '.entry.';\n var position = prefix + (i++) + '.';\n var keyName = position + (rules.key.name || 'key');\n var valueName = position + (rules.value.name || 'value');\n serializeMember(name + keyName, key, rules.key, fn);\n serializeMember(name + valueName, value, rules.value, fn);\n });\n}\n\nfunction serializeList(name, list, rules, fn) {\n var memberRules = rules.member || {};\n\n if (list.length === 0) {\n fn.call(this, name, null);\n return;\n }\n\n util.arrayEach(list, function (v, n) {\n var suffix = '.' + (n + 1);\n if (rules.api.protocol === 'ec2') {\n // Do nothing for EC2\n suffix = suffix + ''; // make linter happy\n } else if (rules.flattened) {\n if (memberRules.name) {\n var parts = name.split('.');\n parts.pop();\n parts.push(ucfirst(memberRules));\n name = parts.join('.');\n }\n } else {\n suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;\n }\n serializeMember(name + suffix, v, memberRules, fn);\n });\n}\n\nfunction serializeMember(name, value, rules, fn) {\n if (value === null || value === undefined) return;\n if (rules.type === 'structure') {\n serializeStructure(name, value, rules, fn);\n } else if (rules.type === 'list') {\n serializeList(name, value, rules, fn);\n } else if (rules.type === 'map') {\n serializeMap(name, value, rules, fn);\n } else {\n fn(name, rules.toWireFormat(value).toString());\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = QueryParamSerializer;\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nvar service = null;\n\n/**\n * @api private\n */\nvar api = {\n signatureVersion: 'v4',\n signingName: 'rds-db',\n operations: {}\n};\n\n/**\n * @api private\n */\nvar requiredAuthTokenOptions = {\n region: 'string',\n hostname: 'string',\n port: 'number',\n username: 'string'\n};\n\n/**\n * A signer object can be used to generate an auth token to a database.\n */\nAWS.RDS.Signer = AWS.util.inherit({\n /**\n * Creates a signer object can be used to generate an auth token.\n *\n * @option options credentials [AWS.Credentials] the AWS credentials\n * to sign requests with. Uses the default credential provider chain\n * if not specified.\n * @option options hostname [String] the hostname of the database to connect to.\n * @option options port [Number] the port number the database is listening on.\n * @option options region [String] the region the database is located in.\n * @option options username [String] the username to login as.\n * @example Passing in options to constructor\n * var signer = new AWS.RDS.Signer({\n * credentials: new AWS.SharedIniFileCredentials({profile: 'default'}),\n * region: 'us-east-1',\n * hostname: 'db.us-east-1.rds.amazonaws.com',\n * port: 8000,\n * username: 'name'\n * });\n */\n constructor: function Signer(options) {\n this.options = options || {};\n },\n\n /**\n * @api private\n * Strips the protocol from a url.\n */\n convertUrlToAuthToken: function convertUrlToAuthToken(url) {\n // we are always using https as the protocol\n var protocol = 'https://';\n if (url.indexOf(protocol) === 0) {\n return url.substring(protocol.length);\n }\n },\n\n /**\n * @overload getAuthToken(options = {}, [callback])\n * Generate an auth token to a database.\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n *\n * @param options [map] The fields to use when generating an auth token.\n * Any options specified here will be merged on top of any options passed\n * to AWS.RDS.Signer:\n *\n * * **credentials** (AWS.Credentials) — the AWS credentials\n * to sign requests with. Uses the default credential provider chain\n * if not specified.\n * * **hostname** (String) — the hostname of the database to connect to.\n * * **port** (Number) — the port number the database is listening on.\n * * **region** (String) — the region the database is located in.\n * * **username** (String) — the username to login as.\n * @return [String] if called synchronously (with no callback), returns the\n * auth token.\n * @return [null] nothing is returned if a callback is provided.\n * @callback callback function (err, token)\n * If a callback is supplied, it is called when an auth token has been generated.\n * @param err [Error] the error object returned from the signer.\n * @param token [String] the auth token.\n *\n * @example Generating an auth token synchronously\n * var signer = new AWS.RDS.Signer({\n * // configure options\n * region: 'us-east-1',\n * username: 'default',\n * hostname: 'db.us-east-1.amazonaws.com',\n * port: 8000\n * });\n * var token = signer.getAuthToken({\n * // these options are merged with those defined when creating the signer, overriding in the case of a duplicate option\n * // credentials are not specified here or when creating the signer, so default credential provider will be used\n * username: 'test' // overriding username\n * });\n * @example Generating an auth token asynchronously\n * var signer = new AWS.RDS.Signer({\n * // configure options\n * region: 'us-east-1',\n * username: 'default',\n * hostname: 'db.us-east-1.amazonaws.com',\n * port: 8000\n * });\n * signer.getAuthToken({\n * // these options are merged with those defined when creating the signer, overriding in the case of a duplicate option\n * // credentials are not specified here or when creating the signer, so default credential provider will be used\n * username: 'test' // overriding username\n * }, function(err, token) {\n * if (err) {\n * // handle error\n * } else {\n * // use token\n * }\n * });\n *\n */\n getAuthToken: function getAuthToken(options, callback) {\n if (typeof options === 'function' && callback === undefined) {\n callback = options;\n options = {};\n }\n var self = this;\n var hasCallback = typeof callback === 'function';\n // merge options with existing options\n options = AWS.util.merge(this.options, options);\n // validate options\n var optionsValidation = this.validateAuthTokenOptions(options);\n if (optionsValidation !== true) {\n if (hasCallback) {\n return callback(optionsValidation, null);\n }\n throw optionsValidation;\n }\n\n // 15 minutes\n var expires = 900;\n // create service to generate a request from\n var serviceOptions = {\n region: options.region,\n endpoint: new AWS.Endpoint(options.hostname + ':' + options.port),\n paramValidation: false,\n signatureVersion: 'v4'\n };\n if (options.credentials) {\n serviceOptions.credentials = options.credentials;\n }\n service = new AWS.Service(serviceOptions);\n // ensure the SDK is using sigv4 signing (config is not enough)\n service.api = api;\n\n var request = service.makeRequest();\n // add listeners to request to properly build auth token\n this.modifyRequestForAuthToken(request, options);\n\n if (hasCallback) {\n request.presign(expires, function(err, url) {\n if (url) {\n url = self.convertUrlToAuthToken(url);\n }\n callback(err, url);\n });\n } else {\n var url = request.presign(expires);\n return this.convertUrlToAuthToken(url);\n }\n },\n\n /**\n * @api private\n * Modifies a request to allow the presigner to generate an auth token.\n */\n modifyRequestForAuthToken: function modifyRequestForAuthToken(request, options) {\n request.on('build', request.buildAsGet);\n var httpRequest = request.httpRequest;\n httpRequest.body = AWS.util.queryParamsToString({\n Action: 'connect',\n DBUser: options.username\n });\n },\n\n /**\n * @api private\n * Validates that the options passed in contain all the keys with values of the correct type that\n * are needed to generate an auth token.\n */\n validateAuthTokenOptions: function validateAuthTokenOptions(options) {\n // iterate over all keys in options\n var message = '';\n options = options || {};\n for (var key in requiredAuthTokenOptions) {\n if (!Object.prototype.hasOwnProperty.call(requiredAuthTokenOptions, key)) {\n continue;\n }\n if (typeof options[key] !== requiredAuthTokenOptions[key]) {\n message += 'option \\'' + key + '\\' should have been type \\'' + requiredAuthTokenOptions[key] + '\\', was \\'' + typeof options[key] + '\\'.\\n';\n }\n }\n if (message.length) {\n return AWS.util.error(new Error(), {\n code: 'InvalidParameter',\n message: message\n });\n }\n return true;\n }\n});\n","module.exports = {\n //provide realtime clock for performance measurement\n now: function now() {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n }\n};\n","function isFipsRegion(region) {\n return typeof region === 'string' && (region.startsWith('fips-') || region.endsWith('-fips'));\n}\n\nfunction isGlobalRegion(region) {\n return typeof region === 'string' && ['aws-global', 'aws-us-gov-global'].includes(region);\n}\n\nfunction getRealRegion(region) {\n return ['fips-aws-global', 'aws-fips', 'aws-global'].includes(region)\n ? 'us-east-1'\n : ['fips-aws-us-gov-global', 'aws-us-gov-global'].includes(region)\n ? 'us-gov-west-1'\n : region.replace(/fips-(dkr-|prod-)?|-fips/, '');\n}\n\nmodule.exports = {\n isFipsRegion: isFipsRegion,\n isGlobalRegion: isGlobalRegion,\n getRealRegion: getRealRegion\n};\n","var util = require('./util');\nvar regionConfig = require('./region_config_data.json');\n\nfunction generateRegionPrefix(region) {\n if (!region) return null;\n var parts = region.split('-');\n if (parts.length < 3) return null;\n return parts.slice(0, parts.length - 2).join('-') + '-*';\n}\n\nfunction derivedKeys(service) {\n var region = service.config.region;\n var regionPrefix = generateRegionPrefix(region);\n var endpointPrefix = service.api.endpointPrefix;\n\n return [\n [region, endpointPrefix],\n [regionPrefix, endpointPrefix],\n [region, '*'],\n [regionPrefix, '*'],\n ['*', endpointPrefix],\n ['*', '*']\n ].map(function(item) {\n return item[0] && item[1] ? item.join('/') : null;\n });\n}\n\nfunction applyConfig(service, config) {\n util.each(config, function(key, value) {\n if (key === 'globalEndpoint') return;\n if (service.config[key] === undefined || service.config[key] === null) {\n service.config[key] = value;\n }\n });\n}\n\nfunction configureEndpoint(service) {\n var keys = derivedKeys(service);\n var useFipsEndpoint = service.config.useFipsEndpoint;\n var useDualstackEndpoint = service.config.useDualstackEndpoint;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!key) continue;\n\n var rules = useFipsEndpoint\n ? useDualstackEndpoint\n ? regionConfig.dualstackFipsRules\n : regionConfig.fipsRules\n : useDualstackEndpoint\n ? regionConfig.dualstackRules\n : regionConfig.rules;\n\n if (Object.prototype.hasOwnProperty.call(rules, key)) {\n var config = rules[key];\n if (typeof config === 'string') {\n config = regionConfig.patterns[config];\n }\n\n // set global endpoint\n service.isGlobalEndpoint = !!config.globalEndpoint;\n if (config.signingRegion) {\n service.signingRegion = config.signingRegion;\n }\n\n // signature version\n if (!config.signatureVersion) config.signatureVersion = 'v4';\n\n // merge config\n applyConfig(service, config);\n return;\n }\n }\n}\n\nfunction getEndpointSuffix(region) {\n var regionRegexes = {\n '^(us|eu|ap|sa|ca|me)\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com',\n '^cn\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com.cn',\n '^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com',\n '^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$': 'c2s.ic.gov',\n '^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$': 'sc2s.sgov.gov'\n };\n var defaultSuffix = 'amazonaws.com';\n var regexes = Object.keys(regionRegexes);\n for (var i = 0; i < regexes.length; i++) {\n var regionPattern = RegExp(regexes[i]);\n var dnsSuffix = regionRegexes[regexes[i]];\n if (regionPattern.test(region)) return dnsSuffix;\n }\n return defaultSuffix;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n configureEndpoint: configureEndpoint,\n getEndpointSuffix: getEndpointSuffix,\n};\n","var AWS = require('./core');\nvar AcceptorStateMachine = require('./state_machine');\nvar inherit = AWS.util.inherit;\nvar domain = AWS.util.domain;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nvar hardErrorStates = {success: 1, error: 1, complete: 1};\n\nfunction isTerminalState(machine) {\n return Object.prototype.hasOwnProperty.call(hardErrorStates, machine._asm.currentState);\n}\n\nvar fsm = new AcceptorStateMachine();\nfsm.setupStates = function() {\n var transition = function(_, done) {\n var self = this;\n self._haltHandlersOnError = false;\n\n self.emit(self._asm.currentState, function(err) {\n if (err) {\n if (isTerminalState(self)) {\n if (domain && self.domain instanceof domain.Domain) {\n err.domainEmitter = self;\n err.domain = self.domain;\n err.domainThrown = false;\n self.domain.emit('error', err);\n } else {\n throw err;\n }\n } else {\n self.response.error = err;\n done(err);\n }\n } else {\n done(self.response.error);\n }\n });\n\n };\n\n this.addState('validate', 'build', 'error', transition);\n this.addState('build', 'afterBuild', 'restart', transition);\n this.addState('afterBuild', 'sign', 'restart', transition);\n this.addState('sign', 'send', 'retry', transition);\n this.addState('retry', 'afterRetry', 'afterRetry', transition);\n this.addState('afterRetry', 'sign', 'error', transition);\n this.addState('send', 'validateResponse', 'retry', transition);\n this.addState('validateResponse', 'extractData', 'extractError', transition);\n this.addState('extractError', 'extractData', 'retry', transition);\n this.addState('extractData', 'success', 'retry', transition);\n this.addState('restart', 'build', 'error', transition);\n this.addState('success', 'complete', 'complete', transition);\n this.addState('error', 'complete', 'complete', transition);\n this.addState('complete', null, null, transition);\n};\nfsm.setupStates();\n\n/**\n * ## Asynchronous Requests\n *\n * All requests made through the SDK are asynchronous and use a\n * callback interface. Each service method that kicks off a request\n * returns an `AWS.Request` object that you can use to register\n * callbacks.\n *\n * For example, the following service method returns the request\n * object as \"request\", which can be used to register callbacks:\n *\n * ```javascript\n * // request is an AWS.Request object\n * var request = ec2.describeInstances();\n *\n * // register callbacks on request to retrieve response data\n * request.on('success', function(response) {\n * console.log(response.data);\n * });\n * ```\n *\n * When a request is ready to be sent, the {send} method should\n * be called:\n *\n * ```javascript\n * request.send();\n * ```\n *\n * Since registered callbacks may or may not be idempotent, requests should only\n * be sent once. To perform the same operation multiple times, you will need to\n * create multiple request objects, each with its own registered callbacks.\n *\n * ## Removing Default Listeners for Events\n *\n * Request objects are built with default listeners for the various events,\n * depending on the service type. In some cases, you may want to remove\n * some built-in listeners to customize behaviour. Doing this requires\n * access to the built-in listener functions, which are exposed through\n * the {AWS.EventListeners.Core} namespace. For instance, you may\n * want to customize the HTTP handler used when sending a request. In this\n * case, you can remove the built-in listener associated with the 'send'\n * event, the {AWS.EventListeners.Core.SEND} listener and add your own.\n *\n * ## Multiple Callbacks and Chaining\n *\n * You can register multiple callbacks on any request object. The\n * callbacks can be registered for different events, or all for the\n * same event. In addition, you can chain callback registration, for\n * example:\n *\n * ```javascript\n * request.\n * on('success', function(response) {\n * console.log(\"Success!\");\n * }).\n * on('error', function(error, response) {\n * console.log(\"Error!\");\n * }).\n * on('complete', function(response) {\n * console.log(\"Always!\");\n * }).\n * send();\n * ```\n *\n * The above example will print either \"Success! Always!\", or \"Error! Always!\",\n * depending on whether the request succeeded or not.\n *\n * @!attribute httpRequest\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpRequest] the raw HTTP request object\n * containing request headers and body information\n * sent by the service.\n *\n * @!attribute startTime\n * @readonly\n * @!group Operation Properties\n * @return [Date] the time that the request started\n *\n * @!group Request Building Events\n *\n * @!event validate(request)\n * Triggered when a request is being validated. Listeners\n * should throw an error if the request should not be sent.\n * @param request [Request] the request object being sent\n * @see AWS.EventListeners.Core.VALIDATE_CREDENTIALS\n * @see AWS.EventListeners.Core.VALIDATE_REGION\n * @example Ensuring that a certain parameter is set before sending a request\n * var req = s3.putObject(params);\n * req.on('validate', function() {\n * if (!req.params.Body.match(/^Hello\\s/)) {\n * throw new Error('Body must start with \"Hello \"');\n * }\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event build(request)\n * Triggered when the request payload is being built. Listeners\n * should fill the necessary information to send the request\n * over HTTP.\n * @param (see AWS.Request~validate)\n * @example Add a custom HTTP header to a request\n * var req = s3.putObject(params);\n * req.on('build', function() {\n * req.httpRequest.headers['Custom-Header'] = 'value';\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event sign(request)\n * Triggered when the request is being signed. Listeners should\n * add the correct authentication headers and/or adjust the body,\n * depending on the authentication mechanism being used.\n * @param (see AWS.Request~validate)\n *\n * @!group Request Sending Events\n *\n * @!event send(response)\n * Triggered when the request is ready to be sent. Listeners\n * should call the underlying transport layer to initiate\n * the sending of the request.\n * @param response [Response] the response object\n * @context [Request] the request object that was sent\n * @see AWS.EventListeners.Core.SEND\n *\n * @!event retry(response)\n * Triggered when a request failed and might need to be retried or redirected.\n * If the response is retryable, the listener should set the\n * `response.error.retryable` property to `true`, and optionally set\n * `response.error.retryDelay` to the millisecond delay for the next attempt.\n * In the case of a redirect, `response.error.redirect` should be set to\n * `true` with `retryDelay` set to an optional delay on the next request.\n *\n * If a listener decides that a request should not be retried,\n * it should set both `retryable` and `redirect` to false.\n *\n * Note that a retryable error will be retried at most\n * {AWS.Config.maxRetries} times (based on the service object's config).\n * Similarly, a request that is redirected will only redirect at most\n * {AWS.Config.maxRedirects} times.\n *\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @example Adding a custom retry for a 404 response\n * request.on('retry', function(response) {\n * // this resource is not yet available, wait 10 seconds to get it again\n * if (response.httpResponse.statusCode === 404 && response.error) {\n * response.error.retryable = true; // retry this error\n * response.error.retryDelay = 10000; // wait 10 seconds\n * }\n * });\n *\n * @!group Data Parsing Events\n *\n * @!event extractError(response)\n * Triggered on all non-2xx requests so that listeners can extract\n * error details from the response body. Listeners to this event\n * should set the `response.error` property.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event extractData(response)\n * Triggered in successful requests to allow listeners to\n * de-serialize the response body into `response.data`.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group Completion Events\n *\n * @!event success(response)\n * Triggered when the request completed successfully.\n * `response.data` will contain the response data and\n * `response.error` will be null.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event error(error, response)\n * Triggered when an error occurs at any point during the\n * request. `response.error` will contain details about the error\n * that occurred. `response.data` will be null.\n * @param error [Error] the error object containing details about\n * the error that occurred.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event complete(response)\n * Triggered whenever a request cycle completes. `response.error`\n * should be checked, since the request may have failed.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group HTTP Events\n *\n * @!event httpHeaders(statusCode, headers, response, statusMessage)\n * Triggered when headers are sent by the remote server\n * @param statusCode [Integer] the HTTP response code\n * @param headers [map] the response headers\n * @param (see AWS.Request~send)\n * @param statusMessage [String] A status message corresponding to the HTTP\n * response code\n * @context (see AWS.Request~send)\n *\n * @!event httpData(chunk, response)\n * Triggered when data is sent by the remote server\n * @param chunk [Buffer] the buffer data containing the next data chunk\n * from the server\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @see AWS.EventListeners.Core.HTTP_DATA\n *\n * @!event httpUploadProgress(progress, response)\n * Triggered when the HTTP request has uploaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpDownloadProgress(progress, response)\n * Triggered when the HTTP request has downloaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpError(error, response)\n * Triggered when the HTTP request failed\n * @param error [Error] the error object that was thrown\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event httpDone(response)\n * Triggered when the server is finished sending data\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @see AWS.Response\n */\nAWS.Request = inherit({\n\n /**\n * Creates a request for an operation on a given service with\n * a set of input parameters.\n *\n * @param service [AWS.Service] the service to perform the operation on\n * @param operation [String] the operation to perform on the service\n * @param params [Object] parameters to send to the operation.\n * See the operation's documentation for the format of the\n * parameters.\n */\n constructor: function Request(service, operation, params) {\n var endpoint = service.endpoint;\n var region = service.config.region;\n var customUserAgent = service.config.customUserAgent;\n\n if (service.signingRegion) {\n region = service.signingRegion;\n } else if (service.isGlobalEndpoint) {\n region = 'us-east-1';\n }\n\n this.domain = domain && domain.active;\n this.service = service;\n this.operation = operation;\n this.params = params || {};\n this.httpRequest = new AWS.HttpRequest(endpoint, region);\n this.httpRequest.appendToUserAgent(customUserAgent);\n this.startTime = service.getSkewCorrectedDate();\n\n this.response = new AWS.Response(this);\n this._asm = new AcceptorStateMachine(fsm.states, 'validate');\n this._haltHandlersOnError = false;\n\n AWS.SequentialExecutor.call(this);\n this.emit = this.emitEvent;\n },\n\n /**\n * @!group Sending a Request\n */\n\n /**\n * @overload send(callback = null)\n * Sends the request object.\n *\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @context [AWS.Request] the request object being sent.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n * @example Sending a request with a callback\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.send(function(err, data) { console.log(err, data); });\n * @example Sending a request with no callback (using event handlers)\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.on('complete', function(response) { ... }); // register a callback\n * request.send();\n */\n send: function send(callback) {\n if (callback) {\n // append to user agent\n this.httpRequest.appendToUserAgent('callback');\n this.on('complete', function (resp) {\n callback.call(resp, resp.error, resp.data);\n });\n }\n this.runTo();\n\n return this.response;\n },\n\n /**\n * @!method promise()\n * Sends the request and returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [Object] the de-serialized data returned from the request.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param error [Error] the error object returned from the request.\n * @return [Promise] A promise that represents the state of the request.\n * @example Sending a request using promises.\n * var request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * var result = request.promise();\n * result.then(function(data) { ... }, function(error) { ... });\n */\n\n /**\n * @api private\n */\n build: function build(callback) {\n return this.runTo('send', callback);\n },\n\n /**\n * @api private\n */\n runTo: function runTo(state, done) {\n this._asm.runTo(state, done, this);\n return this;\n },\n\n /**\n * Aborts a request, emitting the error and complete events.\n *\n * @!macro nobrowser\n * @example Aborting a request after sending\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 5) // 5MB payload\n * };\n * var request = s3.putObject(params);\n * request.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(request.abort.bind(request), 1000);\n *\n * // prints \"Error: RequestAbortedError Request aborted by user\"\n * @return [AWS.Request] the same request object, for chaining.\n * @since v1.4.0\n */\n abort: function abort() {\n this.removeAllListeners('validateResponse');\n this.removeAllListeners('extractError');\n this.on('validateResponse', function addAbortedError(resp) {\n resp.error = AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError', retryable: false\n });\n });\n\n if (this.httpRequest.stream && !this.httpRequest.stream.didCallback) { // abort HTTP stream\n this.httpRequest.stream.abort();\n if (this.httpRequest._abortCallback) {\n this.httpRequest._abortCallback();\n } else {\n this.removeAllListeners('send'); // haven't sent yet, so let's not\n }\n }\n\n return this;\n },\n\n /**\n * Iterates over each page of results given a pageable request, calling\n * the provided callback with each page of data. After all pages have been\n * retrieved, the callback is called with `null` data.\n *\n * @note This operation can generate multiple requests to a service.\n * @example Iterating over multiple pages of objects in an S3 bucket\n * var pages = 1;\n * s3.listObjects().eachPage(function(err, data) {\n * if (err) return;\n * console.log(\"Page\", pages++);\n * console.log(data);\n * });\n * @example Iterating over multiple pages with an asynchronous callback\n * s3.listObjects(params).eachPage(function(err, data, done) {\n * doSomethingAsyncAndOrExpensive(function() {\n * // The next page of results isn't fetched until done is called\n * done();\n * });\n * });\n * @callback callback function(err, data, [doneCallback])\n * Called with each page of resulting data from the request. If the\n * optional `doneCallback` is provided in the function, it must be called\n * when the callback is complete.\n *\n * @param err [Error] an error object, if an error occurred.\n * @param data [Object] a single page of response data. If there is no\n * more data, this object will be `null`.\n * @param doneCallback [Function] an optional done callback. If this\n * argument is defined in the function declaration, it should be called\n * when the next page is ready to be retrieved. This is useful for\n * controlling serial pagination across asynchronous operations.\n * @return [Boolean] if the callback returns `false`, pagination will\n * stop.\n *\n * @see AWS.Request.eachItem\n * @see AWS.Response.nextPage\n * @since v1.4.0\n */\n eachPage: function eachPage(callback) {\n // Make all callbacks async-ish\n callback = AWS.util.fn.makeAsync(callback, 3);\n\n function wrappedCallback(response) {\n callback.call(response, response.error, response.data, function (result) {\n if (result === false) return;\n\n if (response.hasNextPage()) {\n response.nextPage().on('complete', wrappedCallback).send();\n } else {\n callback.call(response, null, null, AWS.util.fn.noop);\n }\n });\n }\n\n this.on('complete', wrappedCallback).send();\n },\n\n /**\n * Enumerates over individual items of a request, paging the responses if\n * necessary.\n *\n * @api experimental\n * @since v1.4.0\n */\n eachItem: function eachItem(callback) {\n var self = this;\n function wrappedCallback(err, data) {\n if (err) return callback(err, null);\n if (data === null) return callback(null, null);\n\n var config = self.service.paginationConfig(self.operation);\n var resultKey = config.resultKey;\n if (Array.isArray(resultKey)) resultKey = resultKey[0];\n var items = jmespath.search(data, resultKey);\n var continueIteration = true;\n AWS.util.arrayEach(items, function(item) {\n continueIteration = callback(null, item);\n if (continueIteration === false) {\n return AWS.util.abort;\n }\n });\n return continueIteration;\n }\n\n this.eachPage(wrappedCallback);\n },\n\n /**\n * @return [Boolean] whether the operation can return multiple pages of\n * response data.\n * @see AWS.Response.eachPage\n * @since v1.4.0\n */\n isPageable: function isPageable() {\n return this.service.paginationConfig(this.operation) ? true : false;\n },\n\n /**\n * Sends the request and converts the request object into a readable stream\n * that can be read from or piped into a writable stream.\n *\n * @note The data read from a readable stream contains only\n * the raw HTTP body contents.\n * @example Manually reading from a stream\n * request.createReadStream().on('data', function(data) {\n * console.log(\"Got data:\", data.toString());\n * });\n * @example Piping a request body into a file\n * var out = fs.createWriteStream('/path/to/outfile.jpg');\n * s3.service.getObject(params).createReadStream().pipe(out);\n * @return [Stream] the readable stream object that can be piped\n * or read from (by registering 'data' event listeners).\n * @!macro nobrowser\n */\n createReadStream: function createReadStream() {\n var streams = AWS.util.stream;\n var req = this;\n var stream = null;\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n stream = new streams.PassThrough();\n process.nextTick(function() { req.send(); });\n } else {\n stream = new streams.Stream();\n stream.readable = true;\n\n stream.sent = false;\n stream.on('newListener', function(event) {\n if (!stream.sent && event === 'data') {\n stream.sent = true;\n process.nextTick(function() { req.send(); });\n }\n });\n }\n\n this.on('error', function(err) {\n stream.emit('error', err);\n });\n\n this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {\n if (statusCode < 300) {\n req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);\n req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);\n req.on('httpError', function streamHttpError(error) {\n resp.error = error;\n resp.error.retryable = false;\n });\n\n var shouldCheckContentLength = false;\n var expectedLen;\n if (req.httpRequest.method !== 'HEAD') {\n expectedLen = parseInt(headers['content-length'], 10);\n }\n if (expectedLen !== undefined && !isNaN(expectedLen) && expectedLen >= 0) {\n shouldCheckContentLength = true;\n var receivedLen = 0;\n }\n\n var checkContentLengthAndEmit = function checkContentLengthAndEmit() {\n if (shouldCheckContentLength && receivedLen !== expectedLen) {\n stream.emit('error', AWS.util.error(\n new Error('Stream content length mismatch. Received ' +\n receivedLen + ' of ' + expectedLen + ' bytes.'),\n { code: 'StreamContentLengthMismatch' }\n ));\n } else if (AWS.HttpClient.streamsApiVersion === 2) {\n stream.end();\n } else {\n stream.emit('end');\n }\n };\n\n var httpStream = resp.httpResponse.createUnbufferedStream();\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n if (shouldCheckContentLength) {\n var lengthAccumulator = new streams.PassThrough();\n lengthAccumulator._write = function(chunk) {\n if (chunk && chunk.length) {\n receivedLen += chunk.length;\n }\n return streams.PassThrough.prototype._write.apply(this, arguments);\n };\n\n lengthAccumulator.on('end', checkContentLengthAndEmit);\n stream.on('error', function(err) {\n shouldCheckContentLength = false;\n httpStream.unpipe(lengthAccumulator);\n lengthAccumulator.emit('end');\n lengthAccumulator.end();\n });\n httpStream.pipe(lengthAccumulator).pipe(stream, { end: false });\n } else {\n httpStream.pipe(stream);\n }\n } else {\n\n if (shouldCheckContentLength) {\n httpStream.on('data', function(arg) {\n if (arg && arg.length) {\n receivedLen += arg.length;\n }\n });\n }\n\n httpStream.on('data', function(arg) {\n stream.emit('data', arg);\n });\n httpStream.on('end', checkContentLengthAndEmit);\n }\n\n httpStream.on('error', function(err) {\n shouldCheckContentLength = false;\n stream.emit('error', err);\n });\n }\n });\n\n return stream;\n },\n\n /**\n * @param [Array,Response] args This should be the response object,\n * or an array of args to send to the event.\n * @api private\n */\n emitEvent: function emit(eventName, args, done) {\n if (typeof args === 'function') { done = args; args = null; }\n if (!done) done = function() { };\n if (!args) args = this.eventParameters(eventName, this.response);\n\n var origEmit = AWS.SequentialExecutor.prototype.emit;\n origEmit.call(this, eventName, args, function (err) {\n if (err) this.response.error = err;\n done.call(this, err);\n });\n },\n\n /**\n * @api private\n */\n eventParameters: function eventParameters(eventName) {\n switch (eventName) {\n case 'restart':\n case 'validate':\n case 'sign':\n case 'build':\n case 'afterValidate':\n case 'afterBuild':\n return [this];\n case 'error':\n return [this.response.error, this.response];\n default:\n return [this.response];\n }\n },\n\n /**\n * @api private\n */\n presign: function presign(expires, callback) {\n if (!callback && typeof expires === 'function') {\n callback = expires;\n expires = null;\n }\n return new AWS.Signers.Presign().sign(this.toGet(), expires, callback);\n },\n\n /**\n * @api private\n */\n isPresigned: function isPresigned() {\n return Object.prototype.hasOwnProperty.call(this.httpRequest.headers, 'presigned-expires');\n },\n\n /**\n * @api private\n */\n toUnauthenticated: function toUnauthenticated() {\n this._unAuthenticated = true;\n this.removeListener('validate', AWS.EventListeners.Core.VALIDATE_CREDENTIALS);\n this.removeListener('sign', AWS.EventListeners.Core.SIGN);\n return this;\n },\n\n /**\n * @api private\n */\n toGet: function toGet() {\n if (this.service.api.protocol === 'query' ||\n this.service.api.protocol === 'ec2') {\n this.removeListener('build', this.buildAsGet);\n this.addListener('build', this.buildAsGet);\n }\n return this;\n },\n\n /**\n * @api private\n */\n buildAsGet: function buildAsGet(request) {\n request.httpRequest.method = 'GET';\n request.httpRequest.path = request.service.endpoint.path +\n '?' + request.httpRequest.body;\n request.httpRequest.body = '';\n\n // don't need these headers on a GET request\n delete request.httpRequest.headers['Content-Length'];\n delete request.httpRequest.headers['Content-Type'];\n },\n\n /**\n * @api private\n */\n haltHandlersOnError: function haltHandlersOnError() {\n this._haltHandlersOnError = true;\n }\n});\n\n/**\n * @api private\n */\nAWS.Request.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = function promise() {\n var self = this;\n // append to user agent\n this.httpRequest.appendToUserAgent('promise');\n return new PromiseDependency(function(resolve, reject) {\n self.on('complete', function(resp) {\n if (resp.error) {\n reject(resp.error);\n } else {\n // define $response property so that it is not enumerable\n // this prevents circular reference errors when stringifying the JSON object\n resolve(Object.defineProperty(\n resp.data || {},\n '$response',\n {value: resp}\n ));\n }\n });\n self.runTo();\n });\n };\n};\n\n/**\n * @api private\n */\nAWS.Request.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.Request);\n\nAWS.util.mixin(AWS.Request, AWS.SequentialExecutor);\n","/**\n * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You\n * may not use this file except in compliance with the License. A copy of\n * the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n */\n\nvar AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nfunction CHECK_ACCEPTORS(resp) {\n var waiter = resp.request._waiter;\n var acceptors = waiter.config.acceptors;\n var acceptorMatched = false;\n var state = 'retry';\n\n acceptors.forEach(function(acceptor) {\n if (!acceptorMatched) {\n var matcher = waiter.matchers[acceptor.matcher];\n if (matcher && matcher(resp, acceptor.expected, acceptor.argument)) {\n acceptorMatched = true;\n state = acceptor.state;\n }\n }\n });\n\n if (!acceptorMatched && resp.error) state = 'failure';\n\n if (state === 'success') {\n waiter.setSuccess(resp);\n } else {\n waiter.setError(resp, state === 'retry');\n }\n}\n\n/**\n * @api private\n */\nAWS.ResourceWaiter = inherit({\n /**\n * Waits for a given state on a service object\n * @param service [Service] the service object to wait on\n * @param state [String] the state (defined in waiter configuration) to wait\n * for.\n * @example Create a waiter for running EC2 instances\n * var ec2 = new AWS.EC2;\n * var waiter = new AWS.ResourceWaiter(ec2, 'instanceRunning');\n */\n constructor: function constructor(service, state) {\n this.service = service;\n this.state = state;\n this.loadWaiterConfig(this.state);\n },\n\n service: null,\n\n state: null,\n\n config: null,\n\n matchers: {\n path: function(resp, expected, argument) {\n try {\n var result = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n return jmespath.strictDeepEqual(result,expected);\n },\n\n pathAll: function(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n if (!numResults) return false;\n for (var ind = 0 ; ind < numResults; ind++) {\n if (!jmespath.strictDeepEqual(results[ind], expected)) {\n return false;\n }\n }\n return true;\n },\n\n pathAny: function(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n for (var ind = 0 ; ind < numResults; ind++) {\n if (jmespath.strictDeepEqual(results[ind], expected)) {\n return true;\n }\n }\n return false;\n },\n\n status: function(resp, expected) {\n var statusCode = resp.httpResponse.statusCode;\n return (typeof statusCode === 'number') && (statusCode === expected);\n },\n\n error: function(resp, expected) {\n if (typeof expected === 'string' && resp.error) {\n return expected === resp.error.code;\n }\n // if expected is not string, can be boolean indicating presence of error\n return expected === !!resp.error;\n }\n },\n\n listeners: new AWS.SequentialExecutor().addNamedListeners(function(add) {\n add('RETRY_CHECK', 'retry', function(resp) {\n var waiter = resp.request._waiter;\n if (resp.error && resp.error.code === 'ResourceNotReady') {\n resp.error.retryDelay = (waiter.config.delay || 0) * 1000;\n }\n });\n\n add('CHECK_OUTPUT', 'extractData', CHECK_ACCEPTORS);\n\n add('CHECK_ERROR', 'extractError', CHECK_ACCEPTORS);\n }),\n\n /**\n * @return [AWS.Request]\n */\n wait: function wait(params, callback) {\n if (typeof params === 'function') {\n callback = params; params = undefined;\n }\n\n if (params && params.$waiter) {\n params = AWS.util.copy(params);\n if (typeof params.$waiter.delay === 'number') {\n this.config.delay = params.$waiter.delay;\n }\n if (typeof params.$waiter.maxAttempts === 'number') {\n this.config.maxAttempts = params.$waiter.maxAttempts;\n }\n delete params.$waiter;\n }\n\n var request = this.service.makeRequest(this.config.operation, params);\n request._waiter = this;\n request.response.maxRetries = this.config.maxAttempts;\n request.addListeners(this.listeners);\n\n if (callback) request.send(callback);\n return request;\n },\n\n setSuccess: function setSuccess(resp) {\n resp.error = null;\n resp.data = resp.data || {};\n resp.request.removeAllListeners('extractData');\n },\n\n setError: function setError(resp, retryable) {\n resp.data = null;\n resp.error = AWS.util.error(resp.error || new Error(), {\n code: 'ResourceNotReady',\n message: 'Resource is not in the state ' + this.state,\n retryable: retryable\n });\n },\n\n /**\n * Loads waiter configuration from API configuration\n *\n * @api private\n */\n loadWaiterConfig: function loadWaiterConfig(state) {\n if (!this.service.api.waiters[state]) {\n throw new AWS.util.error(new Error(), {\n code: 'StateNotFoundError',\n message: 'State ' + state + ' not found.'\n });\n }\n\n this.config = AWS.util.copy(this.service.api.waiters[state]);\n }\n});\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * This class encapsulates the response information\n * from a service request operation sent through {AWS.Request}.\n * The response object has two main properties for getting information\n * back from a request:\n *\n * ## The `data` property\n *\n * The `response.data` property contains the serialized object data\n * retrieved from the service request. For instance, for an\n * Amazon DynamoDB `listTables` method call, the response data might\n * look like:\n *\n * ```\n * > resp.data\n * { TableNames:\n * [ 'table1', 'table2', ... ] }\n * ```\n *\n * The `data` property can be null if an error occurs (see below).\n *\n * ## The `error` property\n *\n * In the event of a service error (or transfer error), the\n * `response.error` property will be filled with the given\n * error data in the form:\n *\n * ```\n * { code: 'SHORT_UNIQUE_ERROR_CODE',\n * message: 'Some human readable error message' }\n * ```\n *\n * In the case of an error, the `data` property will be `null`.\n * Note that if you handle events that can be in a failure state,\n * you should always check whether `response.error` is set\n * before attempting to access the `response.data` property.\n *\n * @!attribute data\n * @readonly\n * @!group Data Properties\n * @note Inside of a {AWS.Request~httpData} event, this\n * property contains a single raw packet instead of the\n * full de-serialized service response.\n * @return [Object] the de-serialized response data\n * from the service.\n *\n * @!attribute error\n * An structure containing information about a service\n * or networking error.\n * @readonly\n * @!group Data Properties\n * @note This attribute is only filled if a service or\n * networking error occurs.\n * @return [Error]\n * * code [String] a unique short code representing the\n * error that was emitted.\n * * message [String] a longer human readable error message\n * * retryable [Boolean] whether the error message is\n * retryable.\n * * statusCode [Numeric] in the case of a request that reached the service,\n * this value contains the response status code.\n * * time [Date] the date time object when the error occurred.\n * * hostname [String] set when a networking error occurs to easily\n * identify the endpoint of the request.\n * * region [String] set when a networking error occurs to easily\n * identify the region of the request.\n *\n * @!attribute requestId\n * @readonly\n * @!group Data Properties\n * @return [String] the unique request ID associated with the response.\n * Log this value when debugging requests for AWS support.\n *\n * @!attribute retryCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of retries that were\n * attempted before the request was completed.\n *\n * @!attribute redirectCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of redirects that were\n * followed before the request was completed.\n *\n * @!attribute httpResponse\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpResponse] the raw HTTP response object\n * containing the response headers and body information\n * from the server.\n *\n * @see AWS.Request\n */\nAWS.Response = inherit({\n\n /**\n * @api private\n */\n constructor: function Response(request) {\n this.request = request;\n this.data = null;\n this.error = null;\n this.retryCount = 0;\n this.redirectCount = 0;\n this.httpResponse = new AWS.HttpResponse();\n if (request) {\n this.maxRetries = request.service.numRetries();\n this.maxRedirects = request.service.config.maxRedirects;\n }\n },\n\n /**\n * Creates a new request for the next page of response data, calling the\n * callback with the page data if a callback is provided.\n *\n * @callback callback function(err, data)\n * Called when a page of data is returned from the next request.\n *\n * @param err [Error] an error object, if an error occurred in the request\n * @param data [Object] the next page of data, or null, if there are no\n * more pages left.\n * @return [AWS.Request] the request object for the next page of data\n * @return [null] if no callback is provided and there are no pages left\n * to retrieve.\n * @since v1.4.0\n */\n nextPage: function nextPage(callback) {\n var config;\n var service = this.request.service;\n var operation = this.request.operation;\n try {\n config = service.paginationConfig(operation, true);\n } catch (e) { this.error = e; }\n\n if (!this.hasNextPage()) {\n if (callback) callback(this.error, null);\n else if (this.error) throw this.error;\n return null;\n }\n\n var params = AWS.util.copy(this.request.params);\n if (!this.nextPageTokens) {\n return callback ? callback(null, null) : null;\n } else {\n var inputTokens = config.inputToken;\n if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n for (var i = 0; i < inputTokens.length; i++) {\n params[inputTokens[i]] = this.nextPageTokens[i];\n }\n return service.makeRequest(this.request.operation, params, callback);\n }\n },\n\n /**\n * @return [Boolean] whether more pages of data can be returned by further\n * requests\n * @since v1.4.0\n */\n hasNextPage: function hasNextPage() {\n this.cacheNextPageTokens();\n if (this.nextPageTokens) return true;\n if (this.nextPageTokens === undefined) return undefined;\n else return false;\n },\n\n /**\n * @api private\n */\n cacheNextPageTokens: function cacheNextPageTokens() {\n if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens;\n this.nextPageTokens = undefined;\n\n var config = this.request.service.paginationConfig(this.request.operation);\n if (!config) return this.nextPageTokens;\n\n this.nextPageTokens = null;\n if (config.moreResults) {\n if (!jmespath.search(this.data, config.moreResults)) {\n return this.nextPageTokens;\n }\n }\n\n var exprs = config.outputToken;\n if (typeof exprs === 'string') exprs = [exprs];\n AWS.util.arrayEach.call(this, exprs, function (expr) {\n var output = jmespath.search(this.data, expr);\n if (output) {\n this.nextPageTokens = this.nextPageTokens || [];\n this.nextPageTokens.push(output);\n }\n });\n\n return this.nextPageTokens;\n }\n\n});\n","var AWS = require('../core');\nvar byteLength = AWS.util.string.byteLength;\nvar Buffer = AWS.util.Buffer;\n\n/**\n * The managed uploader allows for easy and efficient uploading of buffers,\n * blobs, or streams, using a configurable amount of concurrency to perform\n * multipart uploads where possible. This abstraction also enables uploading\n * streams of unknown size due to the use of multipart uploads.\n *\n * To construct a managed upload object, see the {constructor} function.\n *\n * ## Tracking upload progress\n *\n * The managed upload object can also track progress by attaching an\n * 'httpUploadProgress' listener to the upload manager. This event is similar\n * to {AWS.Request~httpUploadProgress} but groups all concurrent upload progress\n * into a single event. See {AWS.S3.ManagedUpload~httpUploadProgress} for more\n * information.\n *\n * ## Handling Multipart Cleanup\n *\n * By default, this class will automatically clean up any multipart uploads\n * when an individual part upload fails. This behavior can be disabled in order\n * to manually handle failures by setting the `leavePartsOnError` configuration\n * option to `true` when initializing the upload object.\n *\n * @!event httpUploadProgress(progress)\n * Triggered when the uploader has uploaded more data.\n * @note The `total` property may not be set if the stream being uploaded has\n * not yet finished chunking. In this case the `total` will be undefined\n * until the total stream size is known.\n * @note This event will not be emitted in Node.js 0.8.x.\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request and the `key` of the S3 object. Note that `total` may be undefined until the payload\n * size is known.\n * @context (see AWS.Request~send)\n */\nAWS.S3.ManagedUpload = AWS.util.inherit({\n /**\n * Creates a managed upload object with a set of configuration options.\n *\n * @note A \"Body\" parameter is required to be set prior to calling {send}.\n * @note In Node.js, sending \"Body\" as {https://nodejs.org/dist/latest/docs/api/stream.html#stream_object_mode object-mode stream}\n * may result in upload hangs. Using buffer stream is preferable.\n * @option options params [map] a map of parameters to pass to the upload\n * requests. The \"Body\" parameter is required to be specified either on\n * the service or in the params option.\n * @note ContentMD5 should not be provided when using the managed upload object.\n * Instead, setting \"computeChecksums\" to true will enable automatic ContentMD5 generation\n * by the managed upload object.\n * @option options queueSize [Number] (4) the size of the concurrent queue\n * manager to upload parts in parallel. Set to 1 for synchronous uploading\n * of parts. Note that the uploader will buffer at most queueSize * partSize\n * bytes into memory at any given time.\n * @option options partSize [Number] (5mb) the size in bytes for each\n * individual part to be uploaded. Adjust the part size to ensure the number\n * of parts does not exceed {maxTotalParts}. See {minPartSize} for the\n * minimum allowed part size.\n * @option options leavePartsOnError [Boolean] (false) whether to abort the\n * multipart upload if an error occurs. Set to true if you want to handle\n * failures manually.\n * @option options service [AWS.S3] an optional S3 service object to use for\n * requests. This object might have bound parameters used by the uploader.\n * @option options tags [Array] The tags to apply to the uploaded object.\n * Each tag should have a `Key` and `Value` keys.\n * @example Creating a default uploader for a stream object\n * var upload = new AWS.S3.ManagedUpload({\n * params: {Bucket: 'bucket', Key: 'key', Body: stream}\n * });\n * @example Creating an uploader with concurrency of 1 and partSize of 10mb\n * var upload = new AWS.S3.ManagedUpload({\n * partSize: 10 * 1024 * 1024, queueSize: 1,\n * params: {Bucket: 'bucket', Key: 'key', Body: stream}\n * });\n * @example Creating an uploader with tags\n * var upload = new AWS.S3.ManagedUpload({\n * params: {Bucket: 'bucket', Key: 'key', Body: stream},\n * tags: [{Key: 'tag1', Value: 'value1'}, {Key: 'tag2', Value: 'value2'}]\n * });\n * @see send\n */\n constructor: function ManagedUpload(options) {\n var self = this;\n AWS.SequentialExecutor.call(self);\n self.body = null;\n self.sliceFn = null;\n self.callback = null;\n self.parts = {};\n self.completeInfo = [];\n self.fillQueue = function() {\n self.callback(new Error('Unsupported body payload ' + typeof self.body));\n };\n\n self.configure(options);\n },\n\n /**\n * @api private\n */\n configure: function configure(options) {\n options = options || {};\n this.partSize = this.minPartSize;\n\n if (options.queueSize) this.queueSize = options.queueSize;\n if (options.partSize) this.partSize = options.partSize;\n if (options.leavePartsOnError) this.leavePartsOnError = true;\n if (options.tags) {\n if (!Array.isArray(options.tags)) {\n throw new Error('Tags must be specified as an array; ' +\n typeof options.tags + ' provided.');\n }\n this.tags = options.tags;\n }\n\n if (this.partSize < this.minPartSize) {\n throw new Error('partSize must be greater than ' +\n this.minPartSize);\n }\n\n this.service = options.service;\n this.bindServiceObject(options.params);\n this.validateBody();\n this.adjustTotalBytes();\n },\n\n /**\n * @api private\n */\n leavePartsOnError: false,\n\n /**\n * @api private\n */\n queueSize: 4,\n\n /**\n * @api private\n */\n partSize: null,\n\n /**\n * @readonly\n * @return [Number] the minimum number of bytes for an individual part\n * upload.\n */\n minPartSize: 1024 * 1024 * 5,\n\n /**\n * @readonly\n * @return [Number] the maximum allowed number of parts in a multipart upload.\n */\n maxTotalParts: 10000,\n\n /**\n * Initiates the managed upload for the payload.\n *\n * @callback callback function(err, data)\n * @param err [Error] an error or null if no error occurred.\n * @param data [map] The response data from the successful upload:\n * * `Location` (String) the URL of the uploaded object\n * * `ETag` (String) the ETag of the uploaded object\n * * `Bucket` (String) the bucket to which the object was uploaded\n * * `Key` (String) the key to which the object was uploaded\n * @example Sending a managed upload object\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * var upload = new AWS.S3.ManagedUpload({params: params});\n * upload.send(function(err, data) {\n * console.log(err, data);\n * });\n */\n send: function(callback) {\n var self = this;\n self.failed = false;\n self.callback = callback || function(err) { if (err) throw err; };\n\n var runFill = true;\n if (self.sliceFn) {\n self.fillQueue = self.fillBuffer;\n } else if (AWS.util.isNode()) {\n var Stream = AWS.util.stream.Stream;\n if (self.body instanceof Stream) {\n runFill = false;\n self.fillQueue = self.fillStream;\n self.partBuffers = [];\n self.body.\n on('error', function(err) { self.cleanup(err); }).\n on('readable', function() { self.fillQueue(); }).\n on('end', function() {\n self.isDoneChunking = true;\n self.numParts = self.totalPartNumbers;\n self.fillQueue.call(self);\n\n if (self.isDoneChunking && self.totalPartNumbers >= 1 && self.doneParts === self.numParts) {\n self.finishMultiPart();\n }\n });\n }\n }\n\n if (runFill) self.fillQueue.call(self);\n },\n\n /**\n * @!method promise()\n * Returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [map] The response data from the successful upload:\n * `Location` (String) the URL of the uploaded object\n * `ETag` (String) the ETag of the uploaded object\n * `Bucket` (String) the bucket to which the object was uploaded\n * `Key` (String) the key to which the object was uploaded\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] an error or null if no error occurred.\n * @return [Promise] A promise that represents the state of the upload request.\n * @example Sending an upload request using promises.\n * var upload = s3.upload({Bucket: 'bucket', Key: 'key', Body: stream});\n * var promise = upload.promise();\n * promise.then(function(data) { ... }, function(err) { ... });\n */\n\n /**\n * Aborts a managed upload, including all concurrent upload requests.\n * @note By default, calling this function will cleanup a multipart upload\n * if one was created. To leave the multipart upload around after aborting\n * a request, configure `leavePartsOnError` to `true` in the {constructor}.\n * @note Calling {abort} in the browser environment will not abort any requests\n * that are already in flight. If a multipart upload was created, any parts\n * not yet uploaded will not be sent, and the multipart upload will be cleaned up.\n * @example Aborting an upload\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 25) // 25MB payload\n * };\n * var upload = s3.upload(params);\n * upload.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(upload.abort.bind(upload), 1000);\n */\n abort: function() {\n var self = this;\n //abort putObject request\n if (self.isDoneChunking === true && self.totalPartNumbers === 1 && self.singlePart) {\n self.singlePart.abort();\n } else {\n self.cleanup(AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError', retryable: false\n }));\n }\n },\n\n /**\n * @api private\n */\n validateBody: function validateBody() {\n var self = this;\n self.body = self.service.config.params.Body;\n if (typeof self.body === 'string') {\n self.body = AWS.util.buffer.toBuffer(self.body);\n } else if (!self.body) {\n throw new Error('params.Body is required');\n }\n self.sliceFn = AWS.util.arraySliceFn(self.body);\n },\n\n /**\n * @api private\n */\n bindServiceObject: function bindServiceObject(params) {\n params = params || {};\n var self = this;\n // bind parameters to new service object\n if (!self.service) {\n self.service = new AWS.S3({params: params});\n } else {\n // Create a new S3 client from the supplied client's constructor.\n var service = self.service;\n var config = AWS.util.copy(service.config);\n config.signatureVersion = service.getSignatureVersion();\n self.service = new service.constructor.__super__(config);\n self.service.config.params =\n AWS.util.merge(self.service.config.params || {}, params);\n Object.defineProperty(self.service, '_originalConfig', {\n get: function() { return service._originalConfig; },\n enumerable: false,\n configurable: true\n });\n }\n },\n\n /**\n * @api private\n */\n adjustTotalBytes: function adjustTotalBytes() {\n var self = this;\n try { // try to get totalBytes\n self.totalBytes = byteLength(self.body);\n } catch (e) { }\n\n // try to adjust partSize if we know payload length\n if (self.totalBytes) {\n var newPartSize = Math.ceil(self.totalBytes / self.maxTotalParts);\n if (newPartSize > self.partSize) self.partSize = newPartSize;\n } else {\n self.totalBytes = undefined;\n }\n },\n\n /**\n * @api private\n */\n isDoneChunking: false,\n\n /**\n * @api private\n */\n partPos: 0,\n\n /**\n * @api private\n */\n totalChunkedBytes: 0,\n\n /**\n * @api private\n */\n totalUploadedBytes: 0,\n\n /**\n * @api private\n */\n totalBytes: undefined,\n\n /**\n * @api private\n */\n numParts: 0,\n\n /**\n * @api private\n */\n totalPartNumbers: 0,\n\n /**\n * @api private\n */\n activeParts: 0,\n\n /**\n * @api private\n */\n doneParts: 0,\n\n /**\n * @api private\n */\n parts: null,\n\n /**\n * @api private\n */\n completeInfo: null,\n\n /**\n * @api private\n */\n failed: false,\n\n /**\n * @api private\n */\n multipartReq: null,\n\n /**\n * @api private\n */\n partBuffers: null,\n\n /**\n * @api private\n */\n partBufferLength: 0,\n\n /**\n * @api private\n */\n fillBuffer: function fillBuffer() {\n var self = this;\n var bodyLen = byteLength(self.body);\n\n if (bodyLen === 0) {\n self.isDoneChunking = true;\n self.numParts = 1;\n self.nextChunk(self.body);\n return;\n }\n\n while (self.activeParts < self.queueSize && self.partPos < bodyLen) {\n var endPos = Math.min(self.partPos + self.partSize, bodyLen);\n var buf = self.sliceFn.call(self.body, self.partPos, endPos);\n self.partPos += self.partSize;\n\n if (byteLength(buf) < self.partSize || self.partPos === bodyLen) {\n self.isDoneChunking = true;\n self.numParts = self.totalPartNumbers + 1;\n }\n self.nextChunk(buf);\n }\n },\n\n /**\n * @api private\n */\n fillStream: function fillStream() {\n var self = this;\n if (self.activeParts >= self.queueSize) return;\n\n var buf = self.body.read(self.partSize - self.partBufferLength) ||\n self.body.read();\n if (buf) {\n self.partBuffers.push(buf);\n self.partBufferLength += buf.length;\n self.totalChunkedBytes += buf.length;\n }\n\n if (self.partBufferLength >= self.partSize) {\n // if we have single buffer we avoid copyfull concat\n var pbuf = self.partBuffers.length === 1 ?\n self.partBuffers[0] : Buffer.concat(self.partBuffers);\n self.partBuffers = [];\n self.partBufferLength = 0;\n\n // if we have more than partSize, push the rest back on the queue\n if (pbuf.length > self.partSize) {\n var rest = pbuf.slice(self.partSize);\n self.partBuffers.push(rest);\n self.partBufferLength += rest.length;\n pbuf = pbuf.slice(0, self.partSize);\n }\n\n self.nextChunk(pbuf);\n }\n\n if (self.isDoneChunking && !self.isDoneSending) {\n // if we have single buffer we avoid copyfull concat\n pbuf = self.partBuffers.length === 1 ?\n self.partBuffers[0] : Buffer.concat(self.partBuffers);\n self.partBuffers = [];\n self.partBufferLength = 0;\n self.totalBytes = self.totalChunkedBytes;\n self.isDoneSending = true;\n\n if (self.numParts === 0 || pbuf.length > 0) {\n self.numParts++;\n self.nextChunk(pbuf);\n }\n }\n\n self.body.read(0);\n },\n\n /**\n * @api private\n */\n nextChunk: function nextChunk(chunk) {\n var self = this;\n if (self.failed) return null;\n\n var partNumber = ++self.totalPartNumbers;\n if (self.isDoneChunking && partNumber === 1) {\n var params = {Body: chunk};\n if (this.tags) {\n params.Tagging = this.getTaggingHeader();\n }\n var req = self.service.putObject(params);\n req._managedUpload = self;\n req.on('httpUploadProgress', self.progress).send(self.finishSinglePart);\n self.singlePart = req; //save the single part request\n return null;\n } else if (self.service.config.params.ContentMD5) {\n var err = AWS.util.error(new Error('The Content-MD5 you specified is invalid for multi-part uploads.'), {\n code: 'InvalidDigest', retryable: false\n });\n\n self.cleanup(err);\n return null;\n }\n\n if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) {\n return null; // Already uploaded this part.\n }\n\n self.activeParts++;\n if (!self.service.config.params.UploadId) {\n\n if (!self.multipartReq) { // create multipart\n self.multipartReq = self.service.createMultipartUpload();\n self.multipartReq.on('success', function(resp) {\n self.service.config.params.UploadId = resp.data.UploadId;\n self.multipartReq = null;\n });\n self.queueChunks(chunk, partNumber);\n self.multipartReq.on('error', function(err) {\n self.cleanup(err);\n });\n self.multipartReq.send();\n } else {\n self.queueChunks(chunk, partNumber);\n }\n } else { // multipart is created, just send\n self.uploadPart(chunk, partNumber);\n }\n },\n\n /**\n * @api private\n */\n getTaggingHeader: function getTaggingHeader() {\n var kvPairStrings = [];\n for (var i = 0; i < this.tags.length; i++) {\n kvPairStrings.push(AWS.util.uriEscape(this.tags[i].Key) + '=' +\n AWS.util.uriEscape(this.tags[i].Value));\n }\n\n return kvPairStrings.join('&');\n },\n\n /**\n * @api private\n */\n uploadPart: function uploadPart(chunk, partNumber) {\n var self = this;\n\n var partParams = {\n Body: chunk,\n ContentLength: AWS.util.string.byteLength(chunk),\n PartNumber: partNumber\n };\n\n var partInfo = {ETag: null, PartNumber: partNumber};\n self.completeInfo[partNumber] = partInfo;\n\n var req = self.service.uploadPart(partParams);\n self.parts[partNumber] = req;\n req._lastUploadedBytes = 0;\n req._managedUpload = self;\n req.on('httpUploadProgress', self.progress);\n req.send(function(err, data) {\n delete self.parts[partParams.PartNumber];\n self.activeParts--;\n\n if (!err && (!data || !data.ETag)) {\n var message = 'No access to ETag property on response.';\n if (AWS.util.isBrowser()) {\n message += ' Check CORS configuration to expose ETag header.';\n }\n\n err = AWS.util.error(new Error(message), {\n code: 'ETagMissing', retryable: false\n });\n }\n if (err) return self.cleanup(err);\n //prevent sending part being returned twice (https://github.com/aws/aws-sdk-js/issues/2304)\n if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) return null;\n partInfo.ETag = data.ETag;\n self.doneParts++;\n if (self.isDoneChunking && self.doneParts === self.numParts) {\n self.finishMultiPart();\n } else {\n self.fillQueue.call(self);\n }\n });\n },\n\n /**\n * @api private\n */\n queueChunks: function queueChunks(chunk, partNumber) {\n var self = this;\n self.multipartReq.on('success', function() {\n self.uploadPart(chunk, partNumber);\n });\n },\n\n /**\n * @api private\n */\n cleanup: function cleanup(err) {\n var self = this;\n if (self.failed) return;\n\n // clean up stream\n if (typeof self.body.removeAllListeners === 'function' &&\n typeof self.body.resume === 'function') {\n self.body.removeAllListeners('readable');\n self.body.removeAllListeners('end');\n self.body.resume();\n }\n\n // cleanup multipartReq listeners\n if (self.multipartReq) {\n self.multipartReq.removeAllListeners('success');\n self.multipartReq.removeAllListeners('error');\n self.multipartReq.removeAllListeners('complete');\n delete self.multipartReq;\n }\n\n if (self.service.config.params.UploadId && !self.leavePartsOnError) {\n self.service.abortMultipartUpload().send();\n } else if (self.leavePartsOnError) {\n self.isDoneChunking = false;\n }\n\n AWS.util.each(self.parts, function(partNumber, part) {\n part.removeAllListeners('complete');\n part.abort();\n });\n\n self.activeParts = 0;\n self.partPos = 0;\n self.numParts = 0;\n self.totalPartNumbers = 0;\n self.parts = {};\n self.failed = true;\n self.callback(err);\n },\n\n /**\n * @api private\n */\n finishMultiPart: function finishMultiPart() {\n var self = this;\n var completeParams = { MultipartUpload: { Parts: self.completeInfo.slice(1) } };\n self.service.completeMultipartUpload(completeParams, function(err, data) {\n if (err) {\n return self.cleanup(err);\n }\n\n if (data && typeof data.Location === 'string') {\n data.Location = data.Location.replace(/%2F/g, '/');\n }\n\n if (Array.isArray(self.tags)) {\n for (var i = 0; i < self.tags.length; i++) {\n self.tags[i].Value = String(self.tags[i].Value);\n }\n self.service.putObjectTagging(\n {Tagging: {TagSet: self.tags}},\n function(e, d) {\n if (e) {\n self.callback(e);\n } else {\n self.callback(e, data);\n }\n }\n );\n } else {\n self.callback(err, data);\n }\n });\n },\n\n /**\n * @api private\n */\n finishSinglePart: function finishSinglePart(err, data) {\n var upload = this.request._managedUpload;\n var httpReq = this.request.httpRequest;\n var endpoint = httpReq.endpoint;\n if (err) return upload.callback(err);\n data.Location =\n [endpoint.protocol, '//', endpoint.host, httpReq.path].join('');\n data.key = this.request.params.Key; // will stay undocumented\n data.Key = this.request.params.Key;\n data.Bucket = this.request.params.Bucket;\n upload.callback(err, data);\n },\n\n /**\n * @api private\n */\n progress: function progress(info) {\n var upload = this._managedUpload;\n if (this.operation === 'putObject') {\n info.part = 1;\n info.key = this.params.Key;\n } else {\n upload.totalUploadedBytes += info.loaded - this._lastUploadedBytes;\n this._lastUploadedBytes = info.loaded;\n info = {\n loaded: upload.totalUploadedBytes,\n total: upload.totalBytes,\n part: this.params.PartNumber,\n key: this.params.Key\n };\n }\n upload.emit('httpUploadProgress', [info]);\n }\n});\n\nAWS.util.mixin(AWS.S3.ManagedUpload, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = AWS.util.promisifyMethod('send', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.S3.ManagedUpload);\n\n/**\n * @api private\n */\nmodule.exports = AWS.S3.ManagedUpload;\n","var AWS = require('./core');\n\n/**\n * @api private\n * @!method on(eventName, callback)\n * Registers an event listener callback for the event given by `eventName`.\n * Parameters passed to the callback function depend on the individual event\n * being triggered. See the event documentation for those parameters.\n *\n * @param eventName [String] the event name to register the listener for\n * @param callback [Function] the listener callback function\n * @param toHead [Boolean] attach the listener callback to the head of callback array if set to true.\n * Default to be false.\n * @return [AWS.SequentialExecutor] the same object for chaining\n */\nAWS.SequentialExecutor = AWS.util.inherit({\n\n constructor: function SequentialExecutor() {\n this._events = {};\n },\n\n /**\n * @api private\n */\n listeners: function listeners(eventName) {\n return this._events[eventName] ? this._events[eventName].slice(0) : [];\n },\n\n on: function on(eventName, listener, toHead) {\n if (this._events[eventName]) {\n toHead ?\n this._events[eventName].unshift(listener) :\n this._events[eventName].push(listener);\n } else {\n this._events[eventName] = [listener];\n }\n return this;\n },\n\n onAsync: function onAsync(eventName, listener, toHead) {\n listener._isAsync = true;\n return this.on(eventName, listener, toHead);\n },\n\n removeListener: function removeListener(eventName, listener) {\n var listeners = this._events[eventName];\n if (listeners) {\n var length = listeners.length;\n var position = -1;\n for (var i = 0; i < length; ++i) {\n if (listeners[i] === listener) {\n position = i;\n }\n }\n if (position > -1) {\n listeners.splice(position, 1);\n }\n }\n return this;\n },\n\n removeAllListeners: function removeAllListeners(eventName) {\n if (eventName) {\n delete this._events[eventName];\n } else {\n this._events = {};\n }\n return this;\n },\n\n /**\n * @api private\n */\n emit: function emit(eventName, eventArgs, doneCallback) {\n if (!doneCallback) doneCallback = function() { };\n var listeners = this.listeners(eventName);\n var count = listeners.length;\n this.callListeners(listeners, eventArgs, doneCallback);\n return count > 0;\n },\n\n /**\n * @api private\n */\n callListeners: function callListeners(listeners, args, doneCallback, prevError) {\n var self = this;\n var error = prevError || null;\n\n function callNextListener(err) {\n if (err) {\n error = AWS.util.error(error || new Error(), err);\n if (self._haltHandlersOnError) {\n return doneCallback.call(self, error);\n }\n }\n self.callListeners(listeners, args, doneCallback, error);\n }\n\n while (listeners.length > 0) {\n var listener = listeners.shift();\n if (listener._isAsync) { // asynchronous listener\n listener.apply(self, args.concat([callNextListener]));\n return; // stop here, callNextListener will continue\n } else { // synchronous listener\n try {\n listener.apply(self, args);\n } catch (err) {\n error = AWS.util.error(error || new Error(), err);\n }\n if (error && self._haltHandlersOnError) {\n doneCallback.call(self, error);\n return;\n }\n }\n }\n doneCallback.call(self, error);\n },\n\n /**\n * Adds or copies a set of listeners from another list of\n * listeners or SequentialExecutor object.\n *\n * @param listeners [map>, AWS.SequentialExecutor]\n * a list of events and callbacks, or an event emitter object\n * containing listeners to add to this emitter object.\n * @return [AWS.SequentialExecutor] the emitter object, for chaining.\n * @example Adding listeners from a map of listeners\n * emitter.addListeners({\n * event1: [function() { ... }, function() { ... }],\n * event2: [function() { ... }]\n * });\n * emitter.emit('event1'); // emitter has event1\n * emitter.emit('event2'); // emitter has event2\n * @example Adding listeners from another emitter object\n * var emitter1 = new AWS.SequentialExecutor();\n * emitter1.on('event1', function() { ... });\n * emitter1.on('event2', function() { ... });\n * var emitter2 = new AWS.SequentialExecutor();\n * emitter2.addListeners(emitter1);\n * emitter2.emit('event1'); // emitter2 has event1\n * emitter2.emit('event2'); // emitter2 has event2\n */\n addListeners: function addListeners(listeners) {\n var self = this;\n\n // extract listeners if parameter is an SequentialExecutor object\n if (listeners._events) listeners = listeners._events;\n\n AWS.util.each(listeners, function(event, callbacks) {\n if (typeof callbacks === 'function') callbacks = [callbacks];\n AWS.util.arrayEach(callbacks, function(callback) {\n self.on(event, callback);\n });\n });\n\n return self;\n },\n\n /**\n * Registers an event with {on} and saves the callback handle function\n * as a property on the emitter object using a given `name`.\n *\n * @param name [String] the property name to set on this object containing\n * the callback function handle so that the listener can be removed in\n * the future.\n * @param (see on)\n * @return (see on)\n * @example Adding a named listener DATA_CALLBACK\n * var listener = function() { doSomething(); };\n * emitter.addNamedListener('DATA_CALLBACK', 'data', listener);\n *\n * // the following prints: true\n * console.log(emitter.DATA_CALLBACK == listener);\n */\n addNamedListener: function addNamedListener(name, eventName, callback, toHead) {\n this[name] = callback;\n this.addListener(eventName, callback, toHead);\n return this;\n },\n\n /**\n * @api private\n */\n addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback, toHead) {\n callback._isAsync = true;\n return this.addNamedListener(name, eventName, callback, toHead);\n },\n\n /**\n * Helper method to add a set of named listeners using\n * {addNamedListener}. The callback contains a parameter\n * with a handle to the `addNamedListener` method.\n *\n * @callback callback function(add)\n * The callback function is called immediately in order to provide\n * the `add` function to the block. This simplifies the addition of\n * a large group of named listeners.\n * @param add [Function] the {addNamedListener} function to call\n * when registering listeners.\n * @example Adding a set of named listeners\n * emitter.addNamedListeners(function(add) {\n * add('DATA_CALLBACK', 'data', function() { ... });\n * add('OTHER', 'otherEvent', function() { ... });\n * add('LAST', 'lastEvent', function() { ... });\n * });\n *\n * // these properties are now set:\n * emitter.DATA_CALLBACK;\n * emitter.OTHER;\n * emitter.LAST;\n */\n addNamedListeners: function addNamedListeners(callback) {\n var self = this;\n callback(\n function() {\n self.addNamedListener.apply(self, arguments);\n },\n function() {\n self.addNamedAsyncListener.apply(self, arguments);\n }\n );\n return this;\n }\n});\n\n/**\n * {on} is the prefered method.\n * @api private\n */\nAWS.SequentialExecutor.prototype.addListener = AWS.SequentialExecutor.prototype.on;\n\n/**\n * @api private\n */\nmodule.exports = AWS.SequentialExecutor;\n","var AWS = require('./core');\nvar Api = require('./model/api');\nvar regionConfig = require('./region_config');\n\nvar inherit = AWS.util.inherit;\nvar clientCount = 0;\nvar region_utils = require('./region/utils');\n\n/**\n * The service class representing an AWS service.\n *\n * @class_abstract This class is an abstract class.\n *\n * @!attribute apiVersions\n * @return [Array] the list of API versions supported by this service.\n * @readonly\n */\nAWS.Service = inherit({\n /**\n * Create a new service object with a configuration object\n *\n * @param config [map] a map of configuration options\n */\n constructor: function Service(config) {\n if (!this.loadServiceClass) {\n throw AWS.util.error(new Error(),\n 'Service must be constructed with `new\\' operator');\n }\n\n if (config) {\n if (config.region) {\n var region = config.region;\n if (region_utils.isFipsRegion(region)) {\n config.region = region_utils.getRealRegion(region);\n config.useFipsEndpoint = true;\n }\n if (region_utils.isGlobalRegion(region)) {\n config.region = region_utils.getRealRegion(region);\n }\n }\n if (typeof config.useDualstack === 'boolean'\n && typeof config.useDualstackEndpoint !== 'boolean') {\n config.useDualstackEndpoint = config.useDualstack;\n }\n }\n\n var ServiceClass = this.loadServiceClass(config || {});\n if (ServiceClass) {\n var originalConfig = AWS.util.copy(config);\n var svc = new ServiceClass(config);\n Object.defineProperty(svc, '_originalConfig', {\n get: function() { return originalConfig; },\n enumerable: false,\n configurable: true\n });\n svc._clientId = ++clientCount;\n return svc;\n }\n this.initialize(config);\n },\n\n /**\n * @api private\n */\n initialize: function initialize(config) {\n var svcConfig = AWS.config[this.serviceIdentifier];\n this.config = new AWS.Config(AWS.config);\n if (svcConfig) this.config.update(svcConfig, true);\n if (config) this.config.update(config, true);\n\n this.validateService();\n if (!this.config.endpoint) regionConfig.configureEndpoint(this);\n\n this.config.endpoint = this.endpointFromTemplate(this.config.endpoint);\n this.setEndpoint(this.config.endpoint);\n //enable attaching listeners to service client\n AWS.SequentialExecutor.call(this);\n AWS.Service.addDefaultMonitoringListeners(this);\n if ((this.config.clientSideMonitoring || AWS.Service._clientSideMonitoring) && this.publisher) {\n var publisher = this.publisher;\n this.addNamedListener('PUBLISH_API_CALL', 'apiCall', function PUBLISH_API_CALL(event) {\n process.nextTick(function() {publisher.eventHandler(event);});\n });\n this.addNamedListener('PUBLISH_API_ATTEMPT', 'apiCallAttempt', function PUBLISH_API_ATTEMPT(event) {\n process.nextTick(function() {publisher.eventHandler(event);});\n });\n }\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {\n },\n\n /**\n * @api private\n */\n loadServiceClass: function loadServiceClass(serviceConfig) {\n var config = serviceConfig;\n if (!AWS.util.isEmpty(this.api)) {\n return null;\n } else if (config.apiConfig) {\n return AWS.Service.defineServiceApi(this.constructor, config.apiConfig);\n } else if (!this.constructor.services) {\n return null;\n } else {\n config = new AWS.Config(AWS.config);\n config.update(serviceConfig, true);\n var version = config.apiVersions[this.constructor.serviceIdentifier];\n version = version || config.apiVersion;\n return this.getLatestServiceClass(version);\n }\n },\n\n /**\n * @api private\n */\n getLatestServiceClass: function getLatestServiceClass(version) {\n version = this.getLatestServiceVersion(version);\n if (this.constructor.services[version] === null) {\n AWS.Service.defineServiceApi(this.constructor, version);\n }\n\n return this.constructor.services[version];\n },\n\n /**\n * @api private\n */\n getLatestServiceVersion: function getLatestServiceVersion(version) {\n if (!this.constructor.services || this.constructor.services.length === 0) {\n throw new Error('No services defined on ' +\n this.constructor.serviceIdentifier);\n }\n\n if (!version) {\n version = 'latest';\n } else if (AWS.util.isType(version, Date)) {\n version = AWS.util.date.iso8601(version).split('T')[0];\n }\n\n if (Object.hasOwnProperty(this.constructor.services, version)) {\n return version;\n }\n\n var keys = Object.keys(this.constructor.services).sort();\n var selectedVersion = null;\n for (var i = keys.length - 1; i >= 0; i--) {\n // versions that end in \"*\" are not available on disk and can be\n // skipped, so do not choose these as selectedVersions\n if (keys[i][keys[i].length - 1] !== '*') {\n selectedVersion = keys[i];\n }\n if (keys[i].substr(0, 10) <= version) {\n return selectedVersion;\n }\n }\n\n throw new Error('Could not find ' + this.constructor.serviceIdentifier +\n ' API to satisfy version constraint `' + version + '\\'');\n },\n\n /**\n * @api private\n */\n api: {},\n\n /**\n * @api private\n */\n defaultRetryCount: 3,\n\n /**\n * @api private\n */\n customizeRequests: function customizeRequests(callback) {\n if (!callback) {\n this.customRequestHandler = null;\n } else if (typeof callback === 'function') {\n this.customRequestHandler = callback;\n } else {\n throw new Error('Invalid callback type \\'' + typeof callback + '\\' provided in customizeRequests');\n }\n },\n\n /**\n * Calls an operation on a service with the given input parameters.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeRequest: function makeRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = null;\n }\n\n params = params || {};\n if (this.config.params) { // copy only toplevel bound params\n var rules = this.api.operations[operation];\n if (rules) {\n params = AWS.util.copy(params);\n AWS.util.each(this.config.params, function(key, value) {\n if (rules.input.members[key]) {\n if (params[key] === undefined || params[key] === null) {\n params[key] = value;\n }\n }\n });\n }\n }\n\n var request = new AWS.Request(this, operation, params);\n this.addAllRequestListeners(request);\n this.attachMonitoringEmitter(request);\n if (callback) request.send(callback);\n return request;\n },\n\n /**\n * Calls an operation on a service with the given input parameters, without\n * any authentication data. This method is useful for \"public\" API operations.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeUnauthenticatedRequest: function makeUnauthenticatedRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = {};\n }\n\n var request = this.makeRequest(operation, params).toUnauthenticated();\n return callback ? request.send(callback) : request;\n },\n\n /**\n * Waits for a given state\n *\n * @param state [String] the state on the service to wait for\n * @param params [map] a map of parameters to pass with each request\n * @option params $waiter [map] a map of configuration options for the waiter\n * @option params $waiter.delay [Number] The number of seconds to wait between\n * requests\n * @option params $waiter.maxAttempts [Number] The maximum number of requests\n * to send while waiting\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n waitFor: function waitFor(state, params, callback) {\n var waiter = new AWS.ResourceWaiter(this, state);\n return waiter.wait(params, callback);\n },\n\n /**\n * @api private\n */\n addAllRequestListeners: function addAllRequestListeners(request) {\n var list = [AWS.events, AWS.EventListeners.Core, this.serviceInterface(),\n AWS.EventListeners.CorePost];\n for (var i = 0; i < list.length; i++) {\n if (list[i]) request.addListeners(list[i]);\n }\n\n // disable parameter validation\n if (!this.config.paramValidation) {\n request.removeListener('validate',\n AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n }\n\n if (this.config.logger) { // add logging events\n request.addListeners(AWS.EventListeners.Logger);\n }\n\n this.setupRequestListeners(request);\n // call prototype's customRequestHandler\n if (typeof this.constructor.prototype.customRequestHandler === 'function') {\n this.constructor.prototype.customRequestHandler(request);\n }\n // call instance's customRequestHandler\n if (Object.prototype.hasOwnProperty.call(this, 'customRequestHandler') && typeof this.customRequestHandler === 'function') {\n this.customRequestHandler(request);\n }\n },\n\n /**\n * Event recording metrics for a whole API call.\n * @returns {object} a subset of api call metrics\n * @api private\n */\n apiCallEvent: function apiCallEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCall',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Region: request.httpRequest.region,\n MaxRetriesExceeded: 0,\n UserAgent: request.httpRequest.getUserAgent(),\n };\n var response = request.response;\n if (response.httpResponse.statusCode) {\n monitoringEvent.FinalHttpStatusCode = response.httpResponse.statusCode;\n }\n if (response.error) {\n var error = response.error;\n var statusCode = response.httpResponse.statusCode;\n if (statusCode > 299) {\n if (error.code) monitoringEvent.FinalAwsException = error.code;\n if (error.message) monitoringEvent.FinalAwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.FinalSdkException = error.code || error.name;\n if (error.message) monitoringEvent.FinalSdkExceptionMessage = error.message;\n }\n }\n return monitoringEvent;\n },\n\n /**\n * Event recording metrics for an API call attempt.\n * @returns {object} a subset of api call attempt metrics\n * @api private\n */\n apiAttemptEvent: function apiAttemptEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCallAttempt',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Fqdn: request.httpRequest.endpoint.hostname,\n UserAgent: request.httpRequest.getUserAgent(),\n };\n var response = request.response;\n if (response.httpResponse.statusCode) {\n monitoringEvent.HttpStatusCode = response.httpResponse.statusCode;\n }\n if (\n !request._unAuthenticated &&\n request.service.config.credentials &&\n request.service.config.credentials.accessKeyId\n ) {\n monitoringEvent.AccessKey = request.service.config.credentials.accessKeyId;\n }\n if (!response.httpResponse.headers) return monitoringEvent;\n if (request.httpRequest.headers['x-amz-security-token']) {\n monitoringEvent.SessionToken = request.httpRequest.headers['x-amz-security-token'];\n }\n if (response.httpResponse.headers['x-amzn-requestid']) {\n monitoringEvent.XAmznRequestId = response.httpResponse.headers['x-amzn-requestid'];\n }\n if (response.httpResponse.headers['x-amz-request-id']) {\n monitoringEvent.XAmzRequestId = response.httpResponse.headers['x-amz-request-id'];\n }\n if (response.httpResponse.headers['x-amz-id-2']) {\n monitoringEvent.XAmzId2 = response.httpResponse.headers['x-amz-id-2'];\n }\n return monitoringEvent;\n },\n\n /**\n * Add metrics of failed request.\n * @api private\n */\n attemptFailEvent: function attemptFailEvent(request) {\n var monitoringEvent = this.apiAttemptEvent(request);\n var response = request.response;\n var error = response.error;\n if (response.httpResponse.statusCode > 299 ) {\n if (error.code) monitoringEvent.AwsException = error.code;\n if (error.message) monitoringEvent.AwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.SdkException = error.code || error.name;\n if (error.message) monitoringEvent.SdkExceptionMessage = error.message;\n }\n return monitoringEvent;\n },\n\n /**\n * Attach listeners to request object to fetch metrics of each request\n * and emit data object through \\'ApiCall\\' and \\'ApiCallAttempt\\' events.\n * @api private\n */\n attachMonitoringEmitter: function attachMonitoringEmitter(request) {\n var attemptTimestamp; //timestamp marking the beginning of a request attempt\n var attemptStartRealTime; //Start time of request attempt. Used to calculating attemptLatency\n var attemptLatency; //latency from request sent out to http response reaching SDK\n var callStartRealTime; //Start time of API call. Used to calculating API call latency\n var attemptCount = 0; //request.retryCount is not reliable here\n var region; //region cache region for each attempt since it can be updated in plase (e.g. s3)\n var callTimestamp; //timestamp when the request is created\n var self = this;\n var addToHead = true;\n\n request.on('validate', function () {\n callStartRealTime = AWS.util.realClock.now();\n callTimestamp = Date.now();\n }, addToHead);\n request.on('sign', function () {\n attemptStartRealTime = AWS.util.realClock.now();\n attemptTimestamp = Date.now();\n region = request.httpRequest.region;\n attemptCount++;\n }, addToHead);\n request.on('validateResponse', function() {\n attemptLatency = Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n });\n request.addNamedListener('API_CALL_ATTEMPT', 'success', function API_CALL_ATTEMPT() {\n var apiAttemptEvent = self.apiAttemptEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL_ATTEMPT_RETRY', 'retry', function API_CALL_ATTEMPT_RETRY() {\n var apiAttemptEvent = self.attemptFailEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n //attemptLatency may not be available if fail before response\n attemptLatency = attemptLatency ||\n Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL', 'complete', function API_CALL() {\n var apiCallEvent = self.apiCallEvent(request);\n apiCallEvent.AttemptCount = attemptCount;\n if (apiCallEvent.AttemptCount <= 0) return;\n apiCallEvent.Timestamp = callTimestamp;\n var latency = Math.round(AWS.util.realClock.now() - callStartRealTime);\n apiCallEvent.Latency = latency >= 0 ? latency : 0;\n var response = request.response;\n if (\n response.error &&\n response.error.retryable &&\n typeof response.retryCount === 'number' &&\n typeof response.maxRetries === 'number' &&\n (response.retryCount >= response.maxRetries)\n ) {\n apiCallEvent.MaxRetriesExceeded = 1;\n }\n self.emit('apiCall', [apiCallEvent]);\n });\n },\n\n /**\n * Override this method to setup any custom request listeners for each\n * new request to the service.\n *\n * @method_abstract This is an abstract method.\n */\n setupRequestListeners: function setupRequestListeners(request) {\n },\n\n /**\n * Gets the signing name for a given request\n * @api private\n */\n getSigningName: function getSigningName() {\n return this.api.signingName || this.api.endpointPrefix;\n },\n\n /**\n * Gets the signer class for a given request\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var version;\n // get operation authtype if present\n var operation = null;\n var authtype = '';\n if (request) {\n var operations = request.service.api.operations || {};\n operation = operations[request.operation] || null;\n authtype = operation ? operation.authtype : '';\n }\n if (this.config.signatureVersion) {\n version = this.config.signatureVersion;\n } else if (authtype === 'v4' || authtype === 'v4-unsigned-body') {\n version = 'v4';\n } else {\n version = this.api.signatureVersion;\n }\n return AWS.Signers.RequestSigner.getVersion(version);\n },\n\n /**\n * @api private\n */\n serviceInterface: function serviceInterface() {\n switch (this.api.protocol) {\n case 'ec2': return AWS.EventListeners.Query;\n case 'query': return AWS.EventListeners.Query;\n case 'json': return AWS.EventListeners.Json;\n case 'rest-json': return AWS.EventListeners.RestJson;\n case 'rest-xml': return AWS.EventListeners.RestXml;\n }\n if (this.api.protocol) {\n throw new Error('Invalid service `protocol\\' ' +\n this.api.protocol + ' in API config');\n }\n },\n\n /**\n * @api private\n */\n successfulResponse: function successfulResponse(resp) {\n return resp.httpResponse.statusCode < 300;\n },\n\n /**\n * How many times a failed request should be retried before giving up.\n * the defaultRetryCount can be overriden by service classes.\n *\n * @api private\n */\n numRetries: function numRetries() {\n if (this.config.maxRetries !== undefined) {\n return this.config.maxRetries;\n } else {\n return this.defaultRetryCount;\n }\n },\n\n /**\n * @api private\n */\n retryDelays: function retryDelays(retryCount, err) {\n return AWS.util.calculateRetryDelay(retryCount, this.config.retryDelayOptions, err);\n },\n\n /**\n * @api private\n */\n retryableError: function retryableError(error) {\n if (this.timeoutError(error)) return true;\n if (this.networkingError(error)) return true;\n if (this.expiredCredentialsError(error)) return true;\n if (this.throttledError(error)) return true;\n if (error.statusCode >= 500) return true;\n return false;\n },\n\n /**\n * @api private\n */\n networkingError: function networkingError(error) {\n return error.code === 'NetworkingError';\n },\n\n /**\n * @api private\n */\n timeoutError: function timeoutError(error) {\n return error.code === 'TimeoutError';\n },\n\n /**\n * @api private\n */\n expiredCredentialsError: function expiredCredentialsError(error) {\n // TODO : this only handles *one* of the expired credential codes\n return (error.code === 'ExpiredTokenException');\n },\n\n /**\n * @api private\n */\n clockSkewError: function clockSkewError(error) {\n switch (error.code) {\n case 'RequestTimeTooSkewed':\n case 'RequestExpired':\n case 'InvalidSignatureException':\n case 'SignatureDoesNotMatch':\n case 'AuthFailure':\n case 'RequestInTheFuture':\n return true;\n default: return false;\n }\n },\n\n /**\n * @api private\n */\n getSkewCorrectedDate: function getSkewCorrectedDate() {\n return new Date(Date.now() + this.config.systemClockOffset);\n },\n\n /**\n * @api private\n */\n applyClockOffset: function applyClockOffset(newServerTime) {\n if (newServerTime) {\n this.config.systemClockOffset = newServerTime - Date.now();\n }\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(newServerTime) {\n if (newServerTime) {\n return Math.abs(this.getSkewCorrectedDate().getTime() - newServerTime) >= 300000;\n }\n },\n\n /**\n * @api private\n */\n throttledError: function throttledError(error) {\n // this logic varies between services\n if (error.statusCode === 429) return true;\n switch (error.code) {\n case 'ProvisionedThroughputExceededException':\n case 'Throttling':\n case 'ThrottlingException':\n case 'RequestLimitExceeded':\n case 'RequestThrottled':\n case 'RequestThrottledException':\n case 'TooManyRequestsException':\n case 'TransactionInProgressException': //dynamodb\n case 'EC2ThrottledException':\n return true;\n default:\n return false;\n }\n },\n\n /**\n * @api private\n */\n endpointFromTemplate: function endpointFromTemplate(endpoint) {\n if (typeof endpoint !== 'string') return endpoint;\n\n var e = endpoint;\n e = e.replace(/\\{service\\}/g, this.api.endpointPrefix);\n e = e.replace(/\\{region\\}/g, this.config.region);\n e = e.replace(/\\{scheme\\}/g, this.config.sslEnabled ? 'https' : 'http');\n return e;\n },\n\n /**\n * @api private\n */\n setEndpoint: function setEndpoint(endpoint) {\n this.endpoint = new AWS.Endpoint(endpoint, this.config);\n },\n\n /**\n * @api private\n */\n paginationConfig: function paginationConfig(operation, throwException) {\n var paginator = this.api.operations[operation].paginator;\n if (!paginator) {\n if (throwException) {\n var e = new Error();\n throw AWS.util.error(e, 'No pagination configuration for ' + operation);\n }\n return null;\n }\n\n return paginator;\n }\n});\n\nAWS.util.update(AWS.Service, {\n\n /**\n * Adds one method for each operation described in the api configuration\n *\n * @api private\n */\n defineMethods: function defineMethods(svc) {\n AWS.util.each(svc.prototype.api.operations, function iterator(method) {\n if (svc.prototype[method]) return;\n var operation = svc.prototype.api.operations[method];\n if (operation.authtype === 'none') {\n svc.prototype[method] = function (params, callback) {\n return this.makeUnauthenticatedRequest(method, params, callback);\n };\n } else {\n svc.prototype[method] = function (params, callback) {\n return this.makeRequest(method, params, callback);\n };\n }\n });\n },\n\n /**\n * Defines a new Service class using a service identifier and list of versions\n * including an optional set of features (functions) to apply to the class\n * prototype.\n *\n * @param serviceIdentifier [String] the identifier for the service\n * @param versions [Array] a list of versions that work with this\n * service\n * @param features [Object] an object to attach to the prototype\n * @return [Class] the service class defined by this function.\n */\n defineService: function defineService(serviceIdentifier, versions, features) {\n AWS.Service._serviceMap[serviceIdentifier] = true;\n if (!Array.isArray(versions)) {\n features = versions;\n versions = [];\n }\n\n var svc = inherit(AWS.Service, features || {});\n\n if (typeof serviceIdentifier === 'string') {\n AWS.Service.addVersions(svc, versions);\n\n var identifier = svc.serviceIdentifier || serviceIdentifier;\n svc.serviceIdentifier = identifier;\n } else { // defineService called with an API\n svc.prototype.api = serviceIdentifier;\n AWS.Service.defineMethods(svc);\n }\n AWS.SequentialExecutor.call(this.prototype);\n //util.clientSideMonitoring is only available in node\n if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {\n var Publisher = AWS.util.clientSideMonitoring.Publisher;\n var configProvider = AWS.util.clientSideMonitoring.configProvider;\n var publisherConfig = configProvider();\n this.prototype.publisher = new Publisher(publisherConfig);\n if (publisherConfig.enabled) {\n //if csm is enabled in environment, SDK should send all metrics\n AWS.Service._clientSideMonitoring = true;\n }\n }\n AWS.SequentialExecutor.call(svc.prototype);\n AWS.Service.addDefaultMonitoringListeners(svc.prototype);\n return svc;\n },\n\n /**\n * @api private\n */\n addVersions: function addVersions(svc, versions) {\n if (!Array.isArray(versions)) versions = [versions];\n\n svc.services = svc.services || {};\n for (var i = 0; i < versions.length; i++) {\n if (svc.services[versions[i]] === undefined) {\n svc.services[versions[i]] = null;\n }\n }\n\n svc.apiVersions = Object.keys(svc.services).sort();\n },\n\n /**\n * @api private\n */\n defineServiceApi: function defineServiceApi(superclass, version, apiConfig) {\n var svc = inherit(superclass, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n\n function setApi(api) {\n if (api.isApi) {\n svc.prototype.api = api;\n } else {\n svc.prototype.api = new Api(api, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n }\n }\n\n if (typeof version === 'string') {\n if (apiConfig) {\n setApi(apiConfig);\n } else {\n try {\n setApi(AWS.apiLoader(superclass.serviceIdentifier, version));\n } catch (err) {\n throw AWS.util.error(err, {\n message: 'Could not find API configuration ' +\n superclass.serviceIdentifier + '-' + version\n });\n }\n }\n if (!Object.prototype.hasOwnProperty.call(superclass.services, version)) {\n superclass.apiVersions = superclass.apiVersions.concat(version).sort();\n }\n superclass.services[version] = svc;\n } else {\n setApi(version);\n }\n\n AWS.Service.defineMethods(svc);\n return svc;\n },\n\n /**\n * @api private\n */\n hasService: function(identifier) {\n return Object.prototype.hasOwnProperty.call(AWS.Service._serviceMap, identifier);\n },\n\n /**\n * @param attachOn attach default monitoring listeners to object\n *\n * Each monitoring event should be emitted from service client to service constructor prototype and then\n * to global service prototype like bubbling up. These default monitoring events listener will transfer\n * the monitoring events to the upper layer.\n * @api private\n */\n addDefaultMonitoringListeners: function addDefaultMonitoringListeners(attachOn) {\n attachOn.addNamedListener('MONITOR_EVENTS_BUBBLE', 'apiCallAttempt', function EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCallAttempt', [event]);\n });\n attachOn.addNamedListener('CALL_EVENTS_BUBBLE', 'apiCall', function CALL_EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCall', [event]);\n });\n },\n\n /**\n * @api private\n */\n _serviceMap: {}\n});\n\nAWS.util.mixin(AWS.Service, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nmodule.exports = AWS.Service;\n","var AWS = require('../core');\n\nAWS.util.update(AWS.APIGateway.prototype, {\n/**\n * Sets the Accept header to application/json.\n *\n * @api private\n */\n setAcceptHeader: function setAcceptHeader(req) {\n var httpRequest = req.httpRequest;\n if (!httpRequest.headers.Accept) {\n httpRequest.headers['Accept'] = 'application/json';\n }\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('build', this.setAcceptHeader);\n if (request.operation === 'getExport') {\n var params = request.params || {};\n if (params.exportType === 'swagger') {\n request.addListener('extractData', AWS.util.convertPayloadToString);\n }\n }\n }\n});\n\n","var AWS = require('../core');\n\n// pull in CloudFront signer\nrequire('../cloudfront/signer');\n\nAWS.util.update(AWS.CloudFront.prototype, {\n\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('extractData', AWS.util.hoistPayloadMember);\n }\n\n});\n","var AWS = require('../core');\nrequire('../dynamodb/document_client');\n\nAWS.util.update(AWS.DynamoDB.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n if (request.service.config.dynamoDbCrc32) {\n request.removeListener('extractData', AWS.EventListeners.Json.EXTRACT_DATA);\n request.addListener('extractData', this.checkCrc32);\n request.addListener('extractData', AWS.EventListeners.Json.EXTRACT_DATA);\n }\n },\n\n /**\n * @api private\n */\n checkCrc32: function checkCrc32(resp) {\n if (!resp.httpResponse.streaming && !resp.request.service.crc32IsValid(resp)) {\n resp.data = null;\n resp.error = AWS.util.error(new Error(), {\n code: 'CRC32CheckFailed',\n message: 'CRC32 integrity check failed',\n retryable: true\n });\n resp.request.haltHandlersOnError();\n throw (resp.error);\n }\n },\n\n /**\n * @api private\n */\n crc32IsValid: function crc32IsValid(resp) {\n var crc = resp.httpResponse.headers['x-amz-crc32'];\n if (!crc) return true; // no (valid) CRC32 header\n return parseInt(crc, 10) === AWS.util.crypto.crc32(resp.httpResponse.body);\n },\n\n /**\n * @api private\n */\n defaultRetryCount: 10,\n\n /**\n * @api private\n */\n retryDelays: function retryDelays(retryCount, err) {\n var retryDelayOptions = AWS.util.copy(this.config.retryDelayOptions);\n\n if (typeof retryDelayOptions.base !== 'number') {\n retryDelayOptions.base = 50; // default for dynamodb\n }\n var delay = AWS.util.calculateRetryDelay(retryCount, retryDelayOptions, err);\n return delay;\n }\n});\n","var AWS = require('../core');\n\nAWS.util.update(AWS.EC2.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.removeListener('extractError', AWS.EventListeners.Query.EXTRACT_ERROR);\n request.addListener('extractError', this.extractError);\n\n if (request.operation === 'copySnapshot') {\n request.onAsync('validate', this.buildCopySnapshotPresignedUrl);\n }\n },\n\n /**\n * @api private\n */\n buildCopySnapshotPresignedUrl: function buildCopySnapshotPresignedUrl(req, done) {\n if (req.params.PresignedUrl || req._subRequest) {\n return done();\n }\n\n req.params = AWS.util.copy(req.params);\n req.params.DestinationRegion = req.service.config.region;\n\n var config = AWS.util.copy(req.service.config);\n delete config.endpoint;\n config.region = req.params.SourceRegion;\n var svc = new req.service.constructor(config);\n var newReq = svc[req.operation](req.params);\n newReq._subRequest = true;\n newReq.presign(function(err, url) {\n if (err) done(err);\n else {\n req.params.PresignedUrl = url;\n done();\n }\n });\n },\n\n /**\n * @api private\n */\n extractError: function extractError(resp) {\n // EC2 nests the error code and message deeper than other AWS Query services.\n var httpResponse = resp.httpResponse;\n var data = new AWS.XML.Parser().parse(httpResponse.body.toString() || '');\n if (data.Errors) {\n resp.error = AWS.util.error(new Error(), {\n code: data.Errors.Error.Code,\n message: data.Errors.Error.Message\n });\n } else {\n resp.error = AWS.util.error(new Error(), {\n code: httpResponse.statusCode,\n message: null\n });\n }\n resp.error.requestId = data.RequestID || null;\n }\n});\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nvar blobPayloadOutputOps = [\n 'deleteThingShadow',\n 'getThingShadow',\n 'updateThingShadow'\n];\n\n/**\n * Constructs a service interface object. Each API operation is exposed as a\n * function on service.\n *\n * ### Sending a Request Using IotData\n *\n * ```javascript\n * var iotdata = new AWS.IotData({endpoint: 'my.host.tld'});\n * iotdata.getThingShadow(params, function (err, data) {\n * if (err) console.log(err, err.stack); // an error occurred\n * else console.log(data); // successful response\n * });\n * ```\n *\n * ### Locking the API Version\n *\n * In order to ensure that the IotData object uses this specific API,\n * you can construct the object by passing the `apiVersion` option to the\n * constructor:\n *\n * ```javascript\n * var iotdata = new AWS.IotData({\n * endpoint: 'my.host.tld',\n * apiVersion: '2015-05-28'\n * });\n * ```\n *\n * You can also set the API version globally in `AWS.config.apiVersions` using\n * the **iotdata** service identifier:\n *\n * ```javascript\n * AWS.config.apiVersions = {\n * iotdata: '2015-05-28',\n * // other service API versions\n * };\n *\n * var iotdata = new AWS.IotData({endpoint: 'my.host.tld'});\n * ```\n *\n * @note You *must* provide an `endpoint` configuration parameter when\n * constructing this service. See {constructor} for more information.\n *\n * @!method constructor(options = {})\n * Constructs a service object. This object has one method for each\n * API operation.\n *\n * @example Constructing a IotData object\n * var iotdata = new AWS.IotData({endpoint: 'my.host.tld'});\n * @note You *must* provide an `endpoint` when constructing this service.\n * @option (see AWS.Config.constructor)\n *\n * @service iotdata\n * @version 2015-05-28\n */\nAWS.util.update(AWS.IotData.prototype, {\n /**\n * @api private\n */\n validateService: function validateService() {\n if (!this.config.endpoint || this.config.endpoint.indexOf('{') >= 0) {\n var msg = 'AWS.IotData requires an explicit ' +\n '`endpoint\\' configuration option.';\n throw AWS.util.error(new Error(),\n {name: 'InvalidEndpoint', message: msg});\n }\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('validateResponse', this.validateResponseBody);\n if (blobPayloadOutputOps.indexOf(request.operation) > -1) {\n request.addListener('extractData', AWS.util.convertPayloadToString);\n }\n },\n\n /**\n * @api private\n */\n validateResponseBody: function validateResponseBody(resp) {\n var body = resp.httpResponse.body.toString() || '{}';\n var bodyCheck = body.trim();\n if (!bodyCheck || bodyCheck.charAt(0) !== '{') {\n resp.httpResponse.body = '';\n }\n }\n\n});\n","var AWS = require('../core');\n\nAWS.util.update(AWS.Lambda.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n if (request.operation === 'invoke') {\n request.addListener('extractData', AWS.util.convertPayloadToString);\n }\n }\n});\n\n","var AWS = require('../core');\n\nAWS.util.update(AWS.MachineLearning.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n if (request.operation === 'predict') {\n request.addListener('build', this.buildEndpoint);\n }\n },\n\n /**\n * Updates request endpoint from PredictEndpoint\n * @api private\n */\n buildEndpoint: function buildEndpoint(request) {\n var url = request.params.PredictEndpoint;\n if (url) {\n request.httpRequest.endpoint = new AWS.Endpoint(url);\n }\n }\n\n});\n","require('../polly/presigner');\n","var AWS = require('../core');\nvar rdsutil = require('./rdsutil');\nrequire('../rds/signer');\n /**\n * @api private\n */\n var crossRegionOperations = ['copyDBSnapshot', 'createDBInstanceReadReplica', 'createDBCluster', 'copyDBClusterSnapshot', 'startDBInstanceAutomatedBackupsReplication'];\n\n AWS.util.update(AWS.RDS.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n rdsutil.setupRequestListeners(this, request, crossRegionOperations);\n },\n });\n","var AWS = require('../core');\n\nvar rdsutil = {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(service, request, crossRegionOperations) {\n if (crossRegionOperations.indexOf(request.operation) !== -1 &&\n request.params.SourceRegion) {\n request.params = AWS.util.copy(request.params);\n if (request.params.PreSignedUrl ||\n request.params.SourceRegion === service.config.region) {\n delete request.params.SourceRegion;\n } else {\n var doesParamValidation = !!service.config.paramValidation;\n // remove the validate parameters listener so we can re-add it after we build the URL\n if (doesParamValidation) {\n request.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n }\n request.onAsync('validate', rdsutil.buildCrossRegionPresignedUrl);\n if (doesParamValidation) {\n request.addListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n }\n }\n }\n },\n\n /**\n * @api private\n */\n buildCrossRegionPresignedUrl: function buildCrossRegionPresignedUrl(req, done) {\n var config = AWS.util.copy(req.service.config);\n config.region = req.params.SourceRegion;\n delete req.params.SourceRegion;\n delete config.endpoint;\n // relevant params for the operation will already be in req.params\n delete config.params;\n config.signatureVersion = 'v4';\n var destinationRegion = req.service.config.region;\n\n var svc = new req.service.constructor(config);\n var newReq = svc[req.operation](AWS.util.copy(req.params));\n newReq.on('build', function addDestinationRegionParam(request) {\n var httpRequest = request.httpRequest;\n httpRequest.params.DestinationRegion = destinationRegion;\n httpRequest.body = AWS.util.queryParamsToString(httpRequest.params);\n });\n newReq.presign(function(err, url) {\n if (err) done(err);\n else {\n req.params.PreSignedUrl = url;\n done();\n }\n });\n }\n};\n\n/**\n * @api private\n */\nmodule.exports = rdsutil;\n","var AWS = require('../core');\n\nAWS.util.update(AWS.Route53.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.on('build', this.sanitizeUrl);\n },\n\n /**\n * @api private\n */\n sanitizeUrl: function sanitizeUrl(request) {\n var path = request.httpRequest.path;\n request.httpRequest.path = path.replace(/\\/%2F\\w+%2F/, '/');\n },\n\n /**\n * @return [Boolean] whether the error can be retried\n * @api private\n */\n retryableError: function retryableError(error) {\n if (error.code === 'PriorRequestNotComplete' &&\n error.statusCode === 400) {\n return true;\n } else {\n var _super = AWS.Service.prototype.retryableError;\n return _super.call(this, error);\n }\n }\n});\n","var AWS = require('../core');\nvar v4Credentials = require('../signers/v4_credentials');\nvar resolveRegionalEndpointsFlag = require('../config_regional_endpoint');\nvar s3util = require('./s3util');\nvar regionUtil = require('../region_config');\n\n// Pull in managed upload extension\nrequire('../s3/managed_upload');\n\n/**\n * @api private\n */\nvar operationsWith200StatusCodeError = {\n 'completeMultipartUpload': true,\n 'copyObject': true,\n 'uploadPartCopy': true\n};\n\n/**\n * @api private\n */\n var regionRedirectErrorCodes = [\n 'AuthorizationHeaderMalformed', // non-head operations on virtual-hosted global bucket endpoints\n 'BadRequest', // head operations on virtual-hosted global bucket endpoints\n 'PermanentRedirect', // non-head operations on path-style or regional endpoints\n 301 // head operations on path-style or regional endpoints\n ];\n\nvar OBJECT_LAMBDA_SERVICE = 's3-object-lambda';\n\nAWS.util.update(AWS.S3.prototype, {\n /**\n * @api private\n */\n getSignatureVersion: function getSignatureVersion(request) {\n var defaultApiVersion = this.api.signatureVersion;\n var userDefinedVersion = this._originalConfig ? this._originalConfig.signatureVersion : null;\n var regionDefinedVersion = this.config.signatureVersion;\n var isPresigned = request ? request.isPresigned() : false;\n /*\n 1) User defined version specified:\n a) always return user defined version\n 2) No user defined version specified:\n a) If not using presigned urls, default to V4\n b) If using presigned urls, default to lowest version the region supports\n */\n if (userDefinedVersion) {\n userDefinedVersion = userDefinedVersion === 'v2' ? 's3' : userDefinedVersion;\n return userDefinedVersion;\n }\n if (isPresigned !== true) {\n defaultApiVersion = 'v4';\n } else if (regionDefinedVersion) {\n defaultApiVersion = regionDefinedVersion;\n }\n return defaultApiVersion;\n },\n\n /**\n * @api private\n */\n getSigningName: function getSigningName(req) {\n if (req && req.operation === 'writeGetObjectResponse') {\n return OBJECT_LAMBDA_SERVICE;\n }\n\n var _super = AWS.Service.prototype.getSigningName;\n return (req && req._parsedArn && req._parsedArn.service)\n ? req._parsedArn.service\n : _super.call(this);\n },\n\n /**\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var signatureVersion = this.getSignatureVersion(request);\n return AWS.Signers.RequestSigner.getVersion(signatureVersion);\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {\n var msg;\n var messages = [];\n\n // default to us-east-1 when no region is provided\n if (!this.config.region) this.config.region = 'us-east-1';\n\n if (!this.config.endpoint && this.config.s3BucketEndpoint) {\n messages.push('An endpoint must be provided when configuring ' +\n '`s3BucketEndpoint` to true.');\n }\n if (messages.length === 1) {\n msg = messages[0];\n } else if (messages.length > 1) {\n msg = 'Multiple configuration errors:\\n' + messages.join('\\n');\n }\n if (msg) {\n throw AWS.util.error(new Error(),\n {name: 'InvalidEndpoint', message: msg});\n }\n },\n\n /**\n * @api private\n */\n shouldDisableBodySigning: function shouldDisableBodySigning(request) {\n var signerClass = this.getSignerClass();\n if (this.config.s3DisableBodySigning === true && signerClass === AWS.Signers.V4\n && request.httpRequest.endpoint.protocol === 'https:') {\n return true;\n }\n return false;\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n var prependListener = true;\n request.addListener('validate', this.validateScheme);\n request.addListener('validate', this.validateBucketName, prependListener);\n request.addListener('validate', this.optInUsEast1RegionalEndpoint, prependListener);\n\n request.removeListener('validate',\n AWS.EventListeners.Core.VALIDATE_REGION);\n request.addListener('build', this.addContentType);\n request.addListener('build', this.computeContentMd5);\n request.addListener('build', this.computeSseCustomerKeyMd5);\n request.addListener('build', this.populateURI);\n request.addListener('afterBuild', this.addExpect100Continue);\n request.addListener('extractError', this.extractError);\n request.addListener('extractData', AWS.util.hoistPayloadMember);\n request.addListener('extractData', this.extractData);\n request.addListener('extractData', this.extractErrorFrom200Response);\n request.addListener('beforePresign', this.prepareSignedUrl);\n if (this.shouldDisableBodySigning(request)) {\n request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n request.addListener('afterBuild', this.disableBodySigning);\n }\n //deal with ARNs supplied to Bucket\n if (request.operation !== 'createBucket' && s3util.isArnInParam(request, 'Bucket')) {\n // avoid duplicate parsing in the future\n request._parsedArn = AWS.util.ARN.parse(request.params.Bucket);\n\n request.removeListener('validate', this.validateBucketName);\n request.removeListener('build', this.populateURI);\n if (request._parsedArn.service === 's3') {\n request.addListener('validate', s3util.validateS3AccessPointArn);\n request.addListener('validate', this.validateArnResourceType);\n request.addListener('validate', this.validateArnRegion);\n } else if (request._parsedArn.service === 's3-outposts') {\n request.addListener('validate', s3util.validateOutpostsAccessPointArn);\n request.addListener('validate', s3util.validateOutpostsArn);\n request.addListener('validate', s3util.validateArnRegion);\n }\n request.addListener('validate', s3util.validateArnAccount);\n request.addListener('validate', s3util.validateArnService);\n request.addListener('build', this.populateUriFromAccessPointArn);\n request.addListener('build', s3util.validatePopulateUriFromArn);\n return;\n }\n //listeners regarding region inference\n request.addListener('validate', this.validateBucketEndpoint);\n request.addListener('validate', this.correctBucketRegionFromCache);\n request.onAsync('extractError', this.requestBucketRegion);\n if (AWS.util.isBrowser()) {\n request.onAsync('retry', this.reqRegionForNetworkingError);\n }\n },\n\n /**\n * @api private\n */\n validateScheme: function(req) {\n var params = req.params,\n scheme = req.httpRequest.endpoint.protocol,\n sensitive = params.SSECustomerKey || params.CopySourceSSECustomerKey;\n if (sensitive && scheme !== 'https:') {\n var msg = 'Cannot send SSE keys over HTTP. Set \\'sslEnabled\\'' +\n 'to \\'true\\' in your configuration';\n throw AWS.util.error(new Error(),\n { code: 'ConfigError', message: msg });\n }\n },\n\n /**\n * @api private\n */\n validateBucketEndpoint: function(req) {\n if (!req.params.Bucket && req.service.config.s3BucketEndpoint) {\n var msg = 'Cannot send requests to root API with `s3BucketEndpoint` set.';\n throw AWS.util.error(new Error(),\n { code: 'ConfigError', message: msg });\n }\n },\n\n /**\n * @api private\n */\n validateArnRegion: function validateArnRegion(req) {\n s3util.validateArnRegion(req, { allowFipsEndpoint: true });\n },\n\n /**\n * Validate resource-type supplied in S3 ARN\n */\n validateArnResourceType: function validateArnResourceType(req) {\n var resource = req._parsedArn.resource;\n\n if (\n resource.indexOf('accesspoint:') !== 0 &&\n resource.indexOf('accesspoint/') !== 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN resource should begin with \\'accesspoint/\\''\n });\n }\n },\n\n /**\n * @api private\n */\n validateBucketName: function validateBucketName(req) {\n var service = req.service;\n var signatureVersion = service.getSignatureVersion(req);\n var bucket = req.params && req.params.Bucket;\n var key = req.params && req.params.Key;\n var slashIndex = bucket && bucket.indexOf('/');\n if (bucket && slashIndex >= 0) {\n if (typeof key === 'string' && slashIndex > 0) {\n req.params = AWS.util.copy(req.params);\n // Need to include trailing slash to match sigv2 behavior\n var prefix = bucket.substr(slashIndex + 1) || '';\n req.params.Key = prefix + '/' + key;\n req.params.Bucket = bucket.substr(0, slashIndex);\n } else if (signatureVersion === 'v4') {\n var msg = 'Bucket names cannot contain forward slashes. Bucket: ' + bucket;\n throw AWS.util.error(new Error(),\n { code: 'InvalidBucket', message: msg });\n }\n }\n },\n\n /**\n * @api private\n */\n isValidAccelerateOperation: function isValidAccelerateOperation(operation) {\n var invalidOperations = [\n 'createBucket',\n 'deleteBucket',\n 'listBuckets'\n ];\n return invalidOperations.indexOf(operation) === -1;\n },\n\n /**\n * When us-east-1 region endpoint configuration is set, in stead of sending request to\n * global endpoint(e.g. 's3.amazonaws.com'), we will send request to\n * 's3.us-east-1.amazonaws.com'.\n * @api private\n */\n optInUsEast1RegionalEndpoint: function optInUsEast1RegionalEndpoint(req) {\n var service = req.service;\n var config = service.config;\n config.s3UsEast1RegionalEndpoint = resolveRegionalEndpointsFlag(service._originalConfig, {\n env: 'AWS_S3_US_EAST_1_REGIONAL_ENDPOINT',\n sharedConfig: 's3_us_east_1_regional_endpoint',\n clientConfig: 's3UsEast1RegionalEndpoint'\n });\n if (\n !(service._originalConfig || {}).endpoint &&\n req.httpRequest.region === 'us-east-1' &&\n config.s3UsEast1RegionalEndpoint === 'regional' &&\n req.httpRequest.endpoint.hostname.indexOf('s3.amazonaws.com') >= 0\n ) {\n var insertPoint = config.endpoint.indexOf('.amazonaws.com');\n regionalEndpoint = config.endpoint.substring(0, insertPoint) +\n '.us-east-1' + config.endpoint.substring(insertPoint);\n req.httpRequest.updateEndpoint(regionalEndpoint);\n }\n },\n\n /**\n * S3 prefers dns-compatible bucket names to be moved from the uri path\n * to the hostname as a sub-domain. This is not possible, even for dns-compat\n * buckets when using SSL and the bucket name contains a dot ('.'). The\n * ssl wildcard certificate is only 1-level deep.\n *\n * @api private\n */\n populateURI: function populateURI(req) {\n var httpRequest = req.httpRequest;\n var b = req.params.Bucket;\n var service = req.service;\n var endpoint = httpRequest.endpoint;\n if (b) {\n if (!service.pathStyleBucketName(b)) {\n if (service.config.useAccelerateEndpoint && service.isValidAccelerateOperation(req.operation)) {\n if (service.config.useDualstackEndpoint) {\n endpoint.hostname = b + '.s3-accelerate.dualstack.amazonaws.com';\n } else {\n endpoint.hostname = b + '.s3-accelerate.amazonaws.com';\n }\n } else if (!service.config.s3BucketEndpoint) {\n endpoint.hostname =\n b + '.' + endpoint.hostname;\n }\n\n var port = endpoint.port;\n if (port !== 80 && port !== 443) {\n endpoint.host = endpoint.hostname + ':' +\n endpoint.port;\n } else {\n endpoint.host = endpoint.hostname;\n }\n\n httpRequest.virtualHostedBucket = b; // needed for signing the request\n service.removeVirtualHostedBucketFromPath(req);\n }\n }\n },\n\n /**\n * Takes the bucket name out of the path if bucket is virtual-hosted\n *\n * @api private\n */\n removeVirtualHostedBucketFromPath: function removeVirtualHostedBucketFromPath(req) {\n var httpRequest = req.httpRequest;\n var bucket = httpRequest.virtualHostedBucket;\n if (bucket && httpRequest.path) {\n if (req.params && req.params.Key) {\n var encodedS3Key = '/' + AWS.util.uriEscapePath(req.params.Key);\n if (httpRequest.path.indexOf(encodedS3Key) === 0 && (httpRequest.path.length === encodedS3Key.length || httpRequest.path[encodedS3Key.length] === '?')) {\n //path only contains key or path contains only key and querystring\n return;\n }\n }\n httpRequest.path = httpRequest.path.replace(new RegExp('/' + bucket), '');\n if (httpRequest.path[0] !== '/') {\n httpRequest.path = '/' + httpRequest.path;\n }\n }\n },\n\n /**\n * When user supply an access point ARN in the Bucket parameter, we need to\n * populate the URI according to the ARN.\n */\n populateUriFromAccessPointArn: function populateUriFromAccessPointArn(req) {\n var accessPointArn = req._parsedArn;\n\n var isOutpostArn = accessPointArn.service === 's3-outposts';\n var isObjectLambdaArn = accessPointArn.service === 's3-object-lambda';\n\n var outpostsSuffix = isOutpostArn ? '.' + accessPointArn.outpostId: '';\n var serviceName = isOutpostArn ? 's3-outposts': 's3-accesspoint';\n var fipsSuffix = !isOutpostArn && req.service.config.useFipsEndpoint ? '-fips': '';\n var dualStackSuffix = !isOutpostArn &&\n req.service.config.useDualstackEndpoint ? '.dualstack' : '';\n\n var endpoint = req.httpRequest.endpoint;\n var dnsSuffix = regionUtil.getEndpointSuffix(accessPointArn.region);\n var useArnRegion = req.service.config.s3UseArnRegion;\n\n endpoint.hostname = [\n accessPointArn.accessPoint + '-' + accessPointArn.accountId + outpostsSuffix,\n serviceName + fipsSuffix + dualStackSuffix,\n useArnRegion ? accessPointArn.region : req.service.config.region,\n dnsSuffix\n ].join('.');\n\n if (isObjectLambdaArn) {\n // should be in the format: \"accesspoint/${accesspointName}\"\n var serviceName = 's3-object-lambda';\n var accesspointName = accessPointArn.resource.split('/')[1];\n var fipsSuffix = req.service.config.useFipsEndpoint ? '-fips': '';\n endpoint.hostname = [\n accesspointName + '-' + accessPointArn.accountId,\n serviceName + fipsSuffix,\n useArnRegion ? accessPointArn.region : req.service.config.region,\n dnsSuffix\n ].join('.');\n }\n endpoint.host = endpoint.hostname;\n var encodedArn = AWS.util.uriEscape(req.params.Bucket);\n var path = req.httpRequest.path;\n //remove the Bucket value from path\n req.httpRequest.path = path.replace(new RegExp('/' + encodedArn), '');\n if (req.httpRequest.path[0] !== '/') {\n req.httpRequest.path = '/' + req.httpRequest.path;\n }\n req.httpRequest.region = accessPointArn.region; //region used to sign\n },\n\n /**\n * Adds Expect: 100-continue header if payload is greater-or-equal 1MB\n * @api private\n */\n addExpect100Continue: function addExpect100Continue(req) {\n var len = req.httpRequest.headers['Content-Length'];\n if (AWS.util.isNode() && (len >= 1024 * 1024 || req.params.Body instanceof AWS.util.stream.Stream)) {\n req.httpRequest.headers['Expect'] = '100-continue';\n }\n },\n\n /**\n * Adds a default content type if none is supplied.\n *\n * @api private\n */\n addContentType: function addContentType(req) {\n var httpRequest = req.httpRequest;\n if (httpRequest.method === 'GET' || httpRequest.method === 'HEAD') {\n // Content-Type is not set in GET/HEAD requests\n delete httpRequest.headers['Content-Type'];\n return;\n }\n\n if (!httpRequest.headers['Content-Type']) { // always have a Content-Type\n httpRequest.headers['Content-Type'] = 'application/octet-stream';\n }\n\n var contentType = httpRequest.headers['Content-Type'];\n if (AWS.util.isBrowser()) {\n if (typeof httpRequest.body === 'string' && !contentType.match(/;\\s*charset=/)) {\n var charset = '; charset=UTF-8';\n httpRequest.headers['Content-Type'] += charset;\n } else {\n var replaceFn = function(_, prefix, charsetName) {\n return prefix + charsetName.toUpperCase();\n };\n\n httpRequest.headers['Content-Type'] =\n contentType.replace(/(;\\s*charset=)(.+)$/, replaceFn);\n }\n }\n },\n\n /**\n * Checks whether checksums should be computed for the request if it's not\n * already set by {AWS.EventListeners.Core.COMPUTE_CHECKSUM}. It depends on\n * whether {AWS.Config.computeChecksums} is set.\n *\n * @param req [AWS.Request] the request to check against\n * @return [Boolean] whether to compute checksums for a request.\n * @api private\n */\n willComputeChecksums: function willComputeChecksums(req) {\n var rules = req.service.api.operations[req.operation].input.members;\n var body = req.httpRequest.body;\n var needsContentMD5 = rules.ContentMD5 &&\n !req.params.ContentMD5 &&\n body &&\n (AWS.util.Buffer.isBuffer(req.httpRequest.body) || typeof req.httpRequest.body === 'string');\n\n // Sha256 signing disabled, and not a presigned url\n if (needsContentMD5 && req.service.shouldDisableBodySigning(req) && !req.isPresigned()) {\n return true;\n }\n\n // SigV2 and presign, for backwards compatibility purpose.\n if (needsContentMD5 && this.getSignatureVersion(req) === 's3' && req.isPresigned()) {\n return true;\n }\n\n return false;\n },\n\n /**\n * A listener that computes the Content-MD5 and sets it in the header.\n * This listener is to support S3-specific features like\n * s3DisableBodySigning and SigV2 presign. Content MD5 logic for SigV4 is\n * handled in AWS.EventListeners.Core.COMPUTE_CHECKSUM\n *\n * @api private\n */\n computeContentMd5: function computeContentMd5(req) {\n if (req.service.willComputeChecksums(req)) {\n var md5 = AWS.util.crypto.md5(req.httpRequest.body, 'base64');\n req.httpRequest.headers['Content-MD5'] = md5;\n }\n },\n\n /**\n * @api private\n */\n computeSseCustomerKeyMd5: function computeSseCustomerKeyMd5(req) {\n var keys = {\n SSECustomerKey: 'x-amz-server-side-encryption-customer-key-MD5',\n CopySourceSSECustomerKey: 'x-amz-copy-source-server-side-encryption-customer-key-MD5'\n };\n AWS.util.each(keys, function(key, header) {\n if (req.params[key]) {\n var value = AWS.util.crypto.md5(req.params[key], 'base64');\n req.httpRequest.headers[header] = value;\n }\n });\n },\n\n /**\n * Returns true if the bucket name should be left in the URI path for\n * a request to S3. This function takes into account the current\n * endpoint protocol (e.g. http or https).\n *\n * @api private\n */\n pathStyleBucketName: function pathStyleBucketName(bucketName) {\n // user can force path style requests via the configuration\n if (this.config.s3ForcePathStyle) return true;\n if (this.config.s3BucketEndpoint) return false;\n\n if (s3util.dnsCompatibleBucketName(bucketName)) {\n return (this.config.sslEnabled && bucketName.match(/\\./)) ? true : false;\n } else {\n return true; // not dns compatible names must always use path style\n }\n },\n\n /**\n * For COPY operations, some can be error even with status code 200.\n * SDK treats the response as exception when response body indicates\n * an exception or body is empty.\n *\n * @api private\n */\n extractErrorFrom200Response: function extractErrorFrom200Response(resp) {\n if (!operationsWith200StatusCodeError[resp.request.operation]) return;\n var httpResponse = resp.httpResponse;\n if (httpResponse.body && httpResponse.body.toString().match('')) {\n // Response body with '...' indicates an exception.\n // Get S3 client object. In ManagedUpload, this.service refers to\n // S3 client object.\n resp.data = null;\n var service = this.service ? this.service : this;\n service.extractError(resp);\n throw resp.error;\n } else if (!httpResponse.body || !httpResponse.body.toString().match(/<[\\w_]/)) {\n // When body is empty or incomplete, S3 might stop the request on detecting client\n // side aborting the request.\n resp.data = null;\n throw AWS.util.error(new Error(), {\n code: 'InternalError',\n message: 'S3 aborted request'\n });\n }\n },\n\n /**\n * @return [Boolean] whether the error can be retried\n * @api private\n */\n retryableError: function retryableError(error, request) {\n if (operationsWith200StatusCodeError[request.operation] &&\n error.statusCode === 200) {\n return true;\n } else if (request._requestRegionForBucket &&\n request.service.bucketRegionCache[request._requestRegionForBucket]) {\n return false;\n } else if (error && error.code === 'RequestTimeout') {\n return true;\n } else if (error &&\n regionRedirectErrorCodes.indexOf(error.code) != -1 &&\n error.region && error.region != request.httpRequest.region) {\n request.httpRequest.region = error.region;\n if (error.statusCode === 301) {\n request.service.updateReqBucketRegion(request);\n }\n return true;\n } else {\n var _super = AWS.Service.prototype.retryableError;\n return _super.call(this, error, request);\n }\n },\n\n /**\n * Updates httpRequest with region. If region is not provided, then\n * the httpRequest will be updated based on httpRequest.region\n *\n * @api private\n */\n updateReqBucketRegion: function updateReqBucketRegion(request, region) {\n var httpRequest = request.httpRequest;\n if (typeof region === 'string' && region.length) {\n httpRequest.region = region;\n }\n if (!httpRequest.endpoint.host.match(/s3(?!-accelerate).*\\.amazonaws\\.com$/)) {\n return;\n }\n var service = request.service;\n var s3Config = service.config;\n var s3BucketEndpoint = s3Config.s3BucketEndpoint;\n if (s3BucketEndpoint) {\n delete s3Config.s3BucketEndpoint;\n }\n var newConfig = AWS.util.copy(s3Config);\n delete newConfig.endpoint;\n newConfig.region = httpRequest.region;\n\n httpRequest.endpoint = (new AWS.S3(newConfig)).endpoint;\n service.populateURI(request);\n s3Config.s3BucketEndpoint = s3BucketEndpoint;\n httpRequest.headers.Host = httpRequest.endpoint.host;\n\n if (request._asm.currentState === 'validate') {\n request.removeListener('build', service.populateURI);\n request.addListener('build', service.removeVirtualHostedBucketFromPath);\n }\n },\n\n /**\n * Provides a specialized parser for getBucketLocation -- all other\n * operations are parsed by the super class.\n *\n * @api private\n */\n extractData: function extractData(resp) {\n var req = resp.request;\n if (req.operation === 'getBucketLocation') {\n var match = resp.httpResponse.body.toString().match(/>(.+)<\\/Location/);\n delete resp.data['_'];\n if (match) {\n resp.data.LocationConstraint = match[1];\n } else {\n resp.data.LocationConstraint = '';\n }\n }\n var bucket = req.params.Bucket || null;\n if (req.operation === 'deleteBucket' && typeof bucket === 'string' && !resp.error) {\n req.service.clearBucketRegionCache(bucket);\n } else {\n var headers = resp.httpResponse.headers || {};\n var region = headers['x-amz-bucket-region'] || null;\n if (!region && req.operation === 'createBucket' && !resp.error) {\n var createBucketConfiguration = req.params.CreateBucketConfiguration;\n if (!createBucketConfiguration) {\n region = 'us-east-1';\n } else if (createBucketConfiguration.LocationConstraint === 'EU') {\n region = 'eu-west-1';\n } else {\n region = createBucketConfiguration.LocationConstraint;\n }\n }\n if (region) {\n if (bucket && region !== req.service.bucketRegionCache[bucket]) {\n req.service.bucketRegionCache[bucket] = region;\n }\n }\n }\n req.service.extractRequestIds(resp);\n },\n\n /**\n * Extracts an error object from the http response.\n *\n * @api private\n */\n extractError: function extractError(resp) {\n var codes = {\n 304: 'NotModified',\n 403: 'Forbidden',\n 400: 'BadRequest',\n 404: 'NotFound'\n };\n\n var req = resp.request;\n var code = resp.httpResponse.statusCode;\n var body = resp.httpResponse.body || '';\n\n var headers = resp.httpResponse.headers || {};\n var region = headers['x-amz-bucket-region'] || null;\n var bucket = req.params.Bucket || null;\n var bucketRegionCache = req.service.bucketRegionCache;\n if (region && bucket && region !== bucketRegionCache[bucket]) {\n bucketRegionCache[bucket] = region;\n }\n\n var cachedRegion;\n if (codes[code] && body.length === 0) {\n if (bucket && !region) {\n cachedRegion = bucketRegionCache[bucket] || null;\n if (cachedRegion !== req.httpRequest.region) {\n region = cachedRegion;\n }\n }\n resp.error = AWS.util.error(new Error(), {\n code: codes[code],\n message: null,\n region: region\n });\n } else {\n var data = new AWS.XML.Parser().parse(body.toString());\n\n if (data.Region && !region) {\n region = data.Region;\n if (bucket && region !== bucketRegionCache[bucket]) {\n bucketRegionCache[bucket] = region;\n }\n } else if (bucket && !region && !data.Region) {\n cachedRegion = bucketRegionCache[bucket] || null;\n if (cachedRegion !== req.httpRequest.region) {\n region = cachedRegion;\n }\n }\n\n resp.error = AWS.util.error(new Error(), {\n code: data.Code || code,\n message: data.Message || null,\n region: region\n });\n }\n req.service.extractRequestIds(resp);\n },\n\n /**\n * If region was not obtained synchronously, then send async request\n * to get bucket region for errors resulting from wrong region.\n *\n * @api private\n */\n requestBucketRegion: function requestBucketRegion(resp, done) {\n var error = resp.error;\n var req = resp.request;\n var bucket = req.params.Bucket || null;\n\n if (!error || !bucket || error.region || req.operation === 'listObjects' ||\n (AWS.util.isNode() && req.operation === 'headBucket') ||\n (error.statusCode === 400 && req.operation !== 'headObject') ||\n regionRedirectErrorCodes.indexOf(error.code) === -1) {\n return done();\n }\n var reqOperation = AWS.util.isNode() ? 'headBucket' : 'listObjects';\n var reqParams = {Bucket: bucket};\n if (reqOperation === 'listObjects') reqParams.MaxKeys = 0;\n var regionReq = req.service[reqOperation](reqParams);\n regionReq._requestRegionForBucket = bucket;\n regionReq.send(function() {\n var region = req.service.bucketRegionCache[bucket] || null;\n error.region = region;\n done();\n });\n },\n\n /**\n * For browser only. If NetworkingError received, will attempt to obtain\n * the bucket region.\n *\n * @api private\n */\n reqRegionForNetworkingError: function reqRegionForNetworkingError(resp, done) {\n if (!AWS.util.isBrowser()) {\n return done();\n }\n var error = resp.error;\n var request = resp.request;\n var bucket = request.params.Bucket;\n if (!error || error.code !== 'NetworkingError' || !bucket ||\n request.httpRequest.region === 'us-east-1') {\n return done();\n }\n var service = request.service;\n var bucketRegionCache = service.bucketRegionCache;\n var cachedRegion = bucketRegionCache[bucket] || null;\n\n if (cachedRegion && cachedRegion !== request.httpRequest.region) {\n service.updateReqBucketRegion(request, cachedRegion);\n done();\n } else if (!s3util.dnsCompatibleBucketName(bucket)) {\n service.updateReqBucketRegion(request, 'us-east-1');\n if (bucketRegionCache[bucket] !== 'us-east-1') {\n bucketRegionCache[bucket] = 'us-east-1';\n }\n done();\n } else if (request.httpRequest.virtualHostedBucket) {\n var getRegionReq = service.listObjects({Bucket: bucket, MaxKeys: 0});\n service.updateReqBucketRegion(getRegionReq, 'us-east-1');\n getRegionReq._requestRegionForBucket = bucket;\n\n getRegionReq.send(function() {\n var region = service.bucketRegionCache[bucket] || null;\n if (region && region !== request.httpRequest.region) {\n service.updateReqBucketRegion(request, region);\n }\n done();\n });\n } else {\n // DNS-compatible path-style\n // (s3ForcePathStyle or bucket name with dot over https)\n // Cannot obtain region information for this case\n done();\n }\n },\n\n /**\n * Cache for bucket region.\n *\n * @api private\n */\n bucketRegionCache: {},\n\n /**\n * Clears bucket region cache.\n *\n * @api private\n */\n clearBucketRegionCache: function(buckets) {\n var bucketRegionCache = this.bucketRegionCache;\n if (!buckets) {\n buckets = Object.keys(bucketRegionCache);\n } else if (typeof buckets === 'string') {\n buckets = [buckets];\n }\n for (var i = 0; i < buckets.length; i++) {\n delete bucketRegionCache[buckets[i]];\n }\n return bucketRegionCache;\n },\n\n /**\n * Corrects request region if bucket's cached region is different\n *\n * @api private\n */\n correctBucketRegionFromCache: function correctBucketRegionFromCache(req) {\n var bucket = req.params.Bucket || null;\n if (bucket) {\n var service = req.service;\n var requestRegion = req.httpRequest.region;\n var cachedRegion = service.bucketRegionCache[bucket];\n if (cachedRegion && cachedRegion !== requestRegion) {\n service.updateReqBucketRegion(req, cachedRegion);\n }\n }\n },\n\n /**\n * Extracts S3 specific request ids from the http response.\n *\n * @api private\n */\n extractRequestIds: function extractRequestIds(resp) {\n var extendedRequestId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-id-2'] : null;\n var cfId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-cf-id'] : null;\n resp.extendedRequestId = extendedRequestId;\n resp.cfId = cfId;\n\n if (resp.error) {\n resp.error.requestId = resp.requestId || null;\n resp.error.extendedRequestId = extendedRequestId;\n resp.error.cfId = cfId;\n }\n },\n\n /**\n * Get a pre-signed URL for a given operation name.\n *\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n * @note Not all operation parameters are supported when using pre-signed\n * URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n * `ContentLength`, or `Tagging` must be provided as headers when sending a\n * request. If you are using pre-signed URLs to upload from a browser and\n * need to use these fields, see {createPresignedPost}.\n * @note The default signer allows altering the request by adding corresponding\n * headers to set some parameters (e.g. Range) and these added parameters\n * won't be signed. You must use signatureVersion v4 to to include these\n * parameters in the signed portion of the URL and enforce exact matching\n * between headers and signed params in the URL.\n * @note This operation cannot be used with a promise. See note above regarding\n * asynchronous credentials and use with a callback.\n * @param operation [String] the name of the operation to call\n * @param params [map] parameters to pass to the operation. See the given\n * operation for the expected operation parameters. In addition, you can\n * also pass the \"Expires\" parameter to inform S3 how long the URL should\n * work for.\n * @option params Expires [Integer] (900) the number of seconds to expire\n * the pre-signed URL operation in. Defaults to 15 minutes.\n * @param callback [Function] if a callback is provided, this function will\n * pass the URL as the second parameter (after the error parameter) to\n * the callback function.\n * @return [String] if called synchronously (with no callback), returns the\n * signed URL.\n * @return [null] nothing is returned if a callback is provided.\n * @example Pre-signing a getObject operation (synchronously)\n * var params = {Bucket: 'bucket', Key: 'key'};\n * var url = s3.getSignedUrl('getObject', params);\n * console.log('The URL is', url);\n * @example Pre-signing a putObject (asynchronously)\n * var params = {Bucket: 'bucket', Key: 'key'};\n * s3.getSignedUrl('putObject', params, function (err, url) {\n * console.log('The URL is', url);\n * });\n * @example Pre-signing a putObject operation with a specific payload\n * var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n * var url = s3.getSignedUrl('putObject', params);\n * console.log('The URL is', url);\n * @example Passing in a 1-minute expiry time for a pre-signed URL\n * var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n * var url = s3.getSignedUrl('getObject', params);\n * console.log('The URL is', url); // expires in 60 seconds\n */\n getSignedUrl: function getSignedUrl(operation, params, callback) {\n params = AWS.util.copy(params || {});\n var expires = params.Expires || 900;\n\n if (typeof expires !== 'number') {\n throw AWS.util.error(new Error(),\n { code: 'InvalidParameterException', message: 'The expiration must be a number, received ' + typeof expires });\n }\n\n delete params.Expires; // we can't validate this\n var request = this.makeRequest(operation, params);\n\n if (callback) {\n AWS.util.defer(function() {\n request.presign(expires, callback);\n });\n } else {\n return request.presign(expires, callback);\n }\n },\n\n /**\n * @!method getSignedUrlPromise()\n * Returns a 'thenable' promise that will be resolved with a pre-signed URL\n * for a given operation name.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @note Not all operation parameters are supported when using pre-signed\n * URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n * `ContentLength`, or `Tagging` must be provided as headers when sending a\n * request. If you are using pre-signed URLs to upload from a browser and\n * need to use these fields, see {createPresignedPost}.\n * @param operation [String] the name of the operation to call\n * @param params [map] parameters to pass to the operation. See the given\n * operation for the expected operation parameters. In addition, you can\n * also pass the \"Expires\" parameter to inform S3 how long the URL should\n * work for.\n * @option params Expires [Integer] (900) the number of seconds to expire\n * the pre-signed URL operation in. Defaults to 15 minutes.\n * @callback fulfilledCallback function(url)\n * Called if the promise is fulfilled.\n * @param url [String] the signed url\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Pre-signing a getObject operation\n * var params = {Bucket: 'bucket', Key: 'key'};\n * var promise = s3.getSignedUrlPromise('getObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n * @example Pre-signing a putObject operation with a specific payload\n * var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n * var promise = s3.getSignedUrlPromise('putObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n * @example Passing in a 1-minute expiry time for a pre-signed URL\n * var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n * var promise = s3.getSignedUrlPromise('getObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n */\n\n /**\n * Get a pre-signed POST policy to support uploading to S3 directly from an\n * HTML form.\n *\n * @param params [map]\n * @option params Bucket [String] The bucket to which the post should be\n * uploaded\n * @option params Expires [Integer] (3600) The number of seconds for which\n * the presigned policy should be valid.\n * @option params Conditions [Array] An array of conditions that must be met\n * for the presigned policy to allow the\n * upload. This can include required tags,\n * the accepted range for content lengths,\n * etc.\n * @see http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html\n * @option params Fields [map] Fields to include in the form. All\n * values passed in as fields will be\n * signed as exact match conditions.\n * @param callback [Function]\n *\n * @note All fields passed in when creating presigned post data will be signed\n * as exact match conditions. Any fields that will be interpolated by S3\n * must be added to the fields hash after signing, and an appropriate\n * condition for such fields must be explicitly added to the Conditions\n * array passed to this function before signing.\n *\n * @example Presiging post data with a known key\n * var params = {\n * Bucket: 'bucket',\n * Fields: {\n * key: 'key'\n * }\n * };\n * s3.createPresignedPost(params, function(err, data) {\n * if (err) {\n * console.error('Presigning post data encountered an error', err);\n * } else {\n * console.log('The post data is', data);\n * }\n * });\n *\n * @example Presigning post data with an interpolated key\n * var params = {\n * Bucket: 'bucket',\n * Conditions: [\n * ['starts-with', '$key', 'path/to/uploads/']\n * ]\n * };\n * s3.createPresignedPost(params, function(err, data) {\n * if (err) {\n * console.error('Presigning post data encountered an error', err);\n * } else {\n * data.Fields.key = 'path/to/uploads/${filename}';\n * console.log('The post data is', data);\n * }\n * });\n *\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n *\n * @return [map] If called synchronously (with no callback), returns a hash\n * with the url to set as the form action and a hash of fields\n * to include in the form.\n * @return [null] Nothing is returned if a callback is provided.\n *\n * @callback callback function (err, data)\n * @param err [Error] the error object returned from the policy signer\n * @param data [map] The data necessary to construct an HTML form\n * @param data.url [String] The URL to use as the action of the form\n * @param data.fields [map] A hash of fields that must be included in the\n * form for the upload to succeed. This hash will\n * include the signed POST policy, your access key\n * ID and security token (if present), etc. These\n * may be safely included as input elements of type\n * 'hidden.'\n */\n createPresignedPost: function createPresignedPost(params, callback) {\n if (typeof params === 'function' && callback === undefined) {\n callback = params;\n params = null;\n }\n\n params = AWS.util.copy(params || {});\n var boundParams = this.config.params || {};\n var bucket = params.Bucket || boundParams.Bucket,\n self = this,\n config = this.config,\n endpoint = AWS.util.copy(this.endpoint);\n if (!config.s3BucketEndpoint) {\n endpoint.pathname = '/' + bucket;\n }\n\n function finalizePost() {\n return {\n url: AWS.util.urlFormat(endpoint),\n fields: self.preparePostFields(\n config.credentials,\n config.region,\n bucket,\n params.Fields,\n params.Conditions,\n params.Expires\n )\n };\n }\n\n if (callback) {\n config.getCredentials(function (err) {\n if (err) {\n callback(err);\n } else {\n try {\n callback(null, finalizePost());\n } catch (err) {\n callback(err);\n }\n }\n });\n } else {\n return finalizePost();\n }\n },\n\n /**\n * @api private\n */\n preparePostFields: function preparePostFields(\n credentials,\n region,\n bucket,\n fields,\n conditions,\n expiresInSeconds\n ) {\n var now = this.getSkewCorrectedDate();\n if (!credentials || !region || !bucket) {\n throw new Error('Unable to create a POST object policy without a bucket,'\n + ' region, and credentials');\n }\n fields = AWS.util.copy(fields || {});\n conditions = (conditions || []).slice(0);\n expiresInSeconds = expiresInSeconds || 3600;\n\n var signingDate = AWS.util.date.iso8601(now).replace(/[:\\-]|\\.\\d{3}/g, '');\n var shortDate = signingDate.substr(0, 8);\n var scope = v4Credentials.createScope(shortDate, region, 's3');\n var credential = credentials.accessKeyId + '/' + scope;\n\n fields['bucket'] = bucket;\n fields['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n fields['X-Amz-Credential'] = credential;\n fields['X-Amz-Date'] = signingDate;\n if (credentials.sessionToken) {\n fields['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n for (var field in fields) {\n if (fields.hasOwnProperty(field)) {\n var condition = {};\n condition[field] = fields[field];\n conditions.push(condition);\n }\n }\n\n fields.Policy = this.preparePostPolicy(\n new Date(now.valueOf() + expiresInSeconds * 1000),\n conditions\n );\n fields['X-Amz-Signature'] = AWS.util.crypto.hmac(\n v4Credentials.getSigningKey(credentials, shortDate, region, 's3', true),\n fields.Policy,\n 'hex'\n );\n\n return fields;\n },\n\n /**\n * @api private\n */\n preparePostPolicy: function preparePostPolicy(expiration, conditions) {\n return AWS.util.base64.encode(JSON.stringify({\n expiration: AWS.util.date.iso8601(expiration),\n conditions: conditions\n }));\n },\n\n /**\n * @api private\n */\n prepareSignedUrl: function prepareSignedUrl(request) {\n request.addListener('validate', request.service.noPresignedContentLength);\n request.removeListener('build', request.service.addContentType);\n if (!request.params.Body) {\n // no Content-MD5/SHA-256 if body is not provided\n request.removeListener('build', request.service.computeContentMd5);\n } else {\n request.addListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n }\n },\n\n /**\n * @api private\n * @param request\n */\n disableBodySigning: function disableBodySigning(request) {\n var headers = request.httpRequest.headers;\n // Add the header to anything that isn't a presigned url, unless that presigned url had a body defined\n if (!Object.prototype.hasOwnProperty.call(headers, 'presigned-expires')) {\n headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n }\n },\n\n /**\n * @api private\n */\n noPresignedContentLength: function noPresignedContentLength(request) {\n if (request.params.ContentLength !== undefined) {\n throw AWS.util.error(new Error(), {code: 'UnexpectedParameter',\n message: 'ContentLength is not supported in pre-signed URLs.'});\n }\n },\n\n createBucket: function createBucket(params, callback) {\n // When creating a bucket *outside* the classic region, the location\n // constraint must be set for the bucket and it must match the endpoint.\n // This chunk of code will set the location constraint param based\n // on the region (when possible), but it will not override a passed-in\n // location constraint.\n if (typeof params === 'function' || !params) {\n callback = callback || params;\n params = {};\n }\n var hostname = this.endpoint.hostname;\n // copy params so that appending keys does not unintentioinallly\n // mutate params object argument passed in by user\n var copiedParams = AWS.util.copy(params);\n\n if (hostname !== this.api.globalEndpoint && !params.CreateBucketConfiguration) {\n copiedParams.CreateBucketConfiguration = { LocationConstraint: this.config.region };\n }\n return this.makeRequest('createBucket', copiedParams, callback);\n },\n\n writeGetObjectResponse: function writeGetObjectResponse(params, callback) {\n\n var request = this.makeRequest('writeGetObjectResponse', AWS.util.copy(params), callback);\n var hostname = this.endpoint.hostname;\n if (hostname.indexOf(this.config.region) !== -1) {\n // hostname specifies a region already\n hostname = hostname.replace('s3.', OBJECT_LAMBDA_SERVICE + '.');\n } else {\n // Hostname doesn't have a region.\n // Object Lambda requires an explicit region.\n hostname = hostname.replace('s3.', OBJECT_LAMBDA_SERVICE + '.' + this.config.region + '.');\n }\n\n request.httpRequest.endpoint = new AWS.Endpoint(hostname, this.config);\n return request;\n },\n\n /**\n * @see AWS.S3.ManagedUpload\n * @overload upload(params = {}, [options], [callback])\n * Uploads an arbitrarily sized buffer, blob, or stream, using intelligent\n * concurrent handling of parts if the payload is large enough. You can\n * configure the concurrent queue size by setting `options`. Note that this\n * is the only operation for which the SDK can retry requests with stream\n * bodies.\n *\n * @param (see AWS.S3.putObject)\n * @option (see AWS.S3.ManagedUpload.constructor)\n * @return [AWS.S3.ManagedUpload] the managed upload object that can call\n * `send()` or track progress.\n * @example Uploading a stream object\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * s3.upload(params, function(err, data) {\n * console.log(err, data);\n * });\n * @example Uploading a stream with concurrency of 1 and partSize of 10mb\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * var options = {partSize: 10 * 1024 * 1024, queueSize: 1};\n * s3.upload(params, options, function(err, data) {\n * console.log(err, data);\n * });\n * @callback callback function(err, data)\n * @param err [Error] an error or null if no error occurred.\n * @param data [map] The response data from the successful upload:\n * @param data.Location [String] the URL of the uploaded object\n * @param data.ETag [String] the ETag of the uploaded object\n * @param data.Bucket [String] the bucket to which the object was uploaded\n * @param data.Key [String] the key to which the object was uploaded\n */\n upload: function upload(params, options, callback) {\n if (typeof options === 'function' && callback === undefined) {\n callback = options;\n options = null;\n }\n\n options = options || {};\n options = AWS.util.merge(options || {}, {service: this, params: params});\n\n var uploader = new AWS.S3.ManagedUpload(options);\n if (typeof callback === 'function') uploader.send(callback);\n return uploader;\n }\n});\n\n/**\n * @api private\n */\nAWS.S3.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.getSignedUrlPromise = AWS.util.promisifyMethod('getSignedUrl', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getSignedUrlPromise;\n};\n\nAWS.util.addPromises(AWS.S3);\n","var AWS = require('../core');\nvar regionUtil = require('../region_config');\n\nvar s3util = {\n /**\n * @api private\n */\n isArnInParam: function isArnInParam(req, paramName) {\n var inputShape = (req.service.api.operations[req.operation] || {}).input || {};\n var inputMembers = inputShape.members || {};\n if (!req.params[paramName] || !inputMembers[paramName]) return false;\n return AWS.util.ARN.validate(req.params[paramName]);\n },\n\n /**\n * Validate service component from ARN supplied in Bucket parameter\n */\n validateArnService: function validateArnService(req) {\n var parsedArn = req._parsedArn;\n\n if (parsedArn.service !== 's3'\n && parsedArn.service !== 's3-outposts'\n && parsedArn.service !== 's3-object-lambda') {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'expect \\'s3\\' or \\'s3-outposts\\' or \\'s3-object-lambda\\' in ARN service component'\n });\n }\n },\n\n /**\n * Validate account ID from ARN supplied in Bucket parameter is a valid account\n */\n validateArnAccount: function validateArnAccount(req) {\n var parsedArn = req._parsedArn;\n\n if (!/[0-9]{12}/.exec(parsedArn.accountId)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN accountID does not match regex \"[0-9]{12}\"'\n });\n }\n },\n\n /**\n * Validate ARN supplied in Bucket parameter is a valid access point ARN\n */\n validateS3AccessPointArn: function validateS3AccessPointArn(req) {\n var parsedArn = req._parsedArn;\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['accesspoint'.length];\n\n if (parsedArn.resource.split(delimiter).length !== 2) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access Point ARN should have one resource accesspoint/{accesspointName}'\n });\n }\n\n var accessPoint = parsedArn.resource.split(delimiter)[1];\n var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;\n if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\\./)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint\n });\n }\n\n //set parsed valid access point\n req._parsedArn.accessPoint = accessPoint;\n },\n\n /**\n * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN\n */\n validateOutpostsArn: function validateOutpostsArn(req) {\n var parsedArn = req._parsedArn;\n\n if (\n parsedArn.resource.indexOf('outpost:') !== 0 &&\n parsedArn.resource.indexOf('outpost/') !== 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN resource should begin with \\'outpost/\\''\n });\n }\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['outpost'.length];\n var outpostId = parsedArn.resource.split(delimiter)[1];\n var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);\n if (!dnsHostRegex.test(outpostId)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Outpost resource in ARN is not DNS compatible. Got ' + outpostId\n });\n }\n req._parsedArn.outpostId = outpostId;\n },\n\n /**\n * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN\n */\n validateOutpostsAccessPointArn: function validateOutpostsAccessPointArn(req) {\n var parsedArn = req._parsedArn;\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['outpost'.length];\n\n if (parsedArn.resource.split(delimiter).length !== 4) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Outposts ARN should have two resources outpost/{outpostId}/accesspoint/{accesspointName}'\n });\n }\n\n var accessPoint = parsedArn.resource.split(delimiter)[3];\n var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;\n if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\\./)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint\n });\n }\n\n //set parsed valid access point\n req._parsedArn.accessPoint = accessPoint;\n },\n\n /**\n * Validate region field in ARN supplied in Bucket parameter is a valid region\n */\n validateArnRegion: function validateArnRegion(req, options) {\n if (options === undefined) {\n options = {};\n }\n\n var useArnRegion = s3util.loadUseArnRegionConfig(req);\n var regionFromArn = req._parsedArn.region;\n var clientRegion = req.service.config.region;\n var useFipsEndpoint = req.service.config.useFipsEndpoint;\n var allowFipsEndpoint = options.allowFipsEndpoint || false;\n\n if (!regionFromArn) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN region is empty'\n });\n }\n\n if (useFipsEndpoint && !allowFipsEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'ARN endpoint is not compatible with FIPS region'\n });\n }\n\n if (regionFromArn.indexOf('fips') >= 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'FIPS region not allowed in ARN'\n });\n }\n\n if (!useArnRegion && regionFromArn !== clientRegion) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Configured region conflicts with access point region'\n });\n } else if (\n useArnRegion &&\n regionUtil.getEndpointSuffix(regionFromArn) !== regionUtil.getEndpointSuffix(clientRegion)\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Configured region and access point region not in same partition'\n });\n }\n\n if (req.service.config.useAccelerateEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'useAccelerateEndpoint config is not supported with access point ARN'\n });\n }\n\n if (req._parsedArn.service === 's3-outposts' && req.service.config.useDualstackEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Dualstack is not supported with outposts access point ARN'\n });\n }\n },\n\n loadUseArnRegionConfig: function loadUseArnRegionConfig(req) {\n var envName = 'AWS_S3_USE_ARN_REGION';\n var configName = 's3_use_arn_region';\n var useArnRegion = true;\n var originalConfig = req.service._originalConfig || {};\n if (req.service.config.s3UseArnRegion !== undefined) {\n return req.service.config.s3UseArnRegion;\n } else if (originalConfig.s3UseArnRegion !== undefined) {\n useArnRegion = originalConfig.s3UseArnRegion === true;\n } else if (AWS.util.isNode()) {\n //load from environmental variable AWS_USE_ARN_REGION\n if (process.env[envName]) {\n var value = process.env[envName].trim().toLowerCase();\n if (['false', 'true'].indexOf(value) < 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: envName + ' only accepts true or false. Got ' + process.env[envName],\n retryable: false\n });\n }\n useArnRegion = value === 'true';\n } else { //load from shared config property use_arn_region\n var profiles = {};\n var profile = {};\n try {\n profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);\n profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];\n } catch (e) {}\n if (profile[configName]) {\n if (['false', 'true'].indexOf(profile[configName].trim().toLowerCase()) < 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: configName + ' only accepts true or false. Got ' + profile[configName],\n retryable: false\n });\n }\n useArnRegion = profile[configName].trim().toLowerCase() === 'true';\n }\n }\n }\n req.service.config.s3UseArnRegion = useArnRegion;\n return useArnRegion;\n },\n\n /**\n * Validations before URI can be populated\n */\n validatePopulateUriFromArn: function validatePopulateUriFromArn(req) {\n if (req.service._originalConfig && req.service._originalConfig.endpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Custom endpoint is not compatible with access point ARN'\n });\n }\n\n if (req.service.config.s3ForcePathStyle) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Cannot construct path-style endpoint with access point'\n });\n }\n },\n\n /**\n * Returns true if the bucket name is DNS compatible. Buckets created\n * outside of the classic region MUST be DNS compatible.\n *\n * @api private\n */\n dnsCompatibleBucketName: function dnsCompatibleBucketName(bucketName) {\n var b = bucketName;\n var domain = new RegExp(/^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/);\n var ipAddress = new RegExp(/(\\d+\\.){3}\\d+/);\n var dots = new RegExp(/\\.\\./);\n return (b.match(domain) && !b.match(ipAddress) && !b.match(dots)) ? true : false;\n },\n};\n\n/**\n * @api private\n */\nmodule.exports = s3util;\n","var AWS = require('../core');\n\nAWS.util.update(AWS.SQS.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('build', this.buildEndpoint);\n\n if (request.service.config.computeChecksums) {\n if (request.operation === 'sendMessage') {\n request.addListener('extractData', this.verifySendMessageChecksum);\n } else if (request.operation === 'sendMessageBatch') {\n request.addListener('extractData', this.verifySendMessageBatchChecksum);\n } else if (request.operation === 'receiveMessage') {\n request.addListener('extractData', this.verifyReceiveMessageChecksum);\n }\n }\n },\n\n /**\n * @api private\n */\n verifySendMessageChecksum: function verifySendMessageChecksum(response) {\n if (!response.data) return;\n\n var md5 = response.data.MD5OfMessageBody;\n var body = this.params.MessageBody;\n var calculatedMd5 = this.service.calculateChecksum(body);\n if (calculatedMd5 !== md5) {\n var msg = 'Got \"' + response.data.MD5OfMessageBody +\n '\", expecting \"' + calculatedMd5 + '\".';\n this.service.throwInvalidChecksumError(response,\n [response.data.MessageId], msg);\n }\n },\n\n /**\n * @api private\n */\n verifySendMessageBatchChecksum: function verifySendMessageBatchChecksum(response) {\n if (!response.data) return;\n\n var service = this.service;\n var entries = {};\n var errors = [];\n var messageIds = [];\n AWS.util.arrayEach(response.data.Successful, function (entry) {\n entries[entry.Id] = entry;\n });\n AWS.util.arrayEach(this.params.Entries, function (entry) {\n if (entries[entry.Id]) {\n var md5 = entries[entry.Id].MD5OfMessageBody;\n var body = entry.MessageBody;\n if (!service.isChecksumValid(md5, body)) {\n errors.push(entry.Id);\n messageIds.push(entries[entry.Id].MessageId);\n }\n }\n });\n\n if (errors.length > 0) {\n service.throwInvalidChecksumError(response, messageIds,\n 'Invalid messages: ' + errors.join(', '));\n }\n },\n\n /**\n * @api private\n */\n verifyReceiveMessageChecksum: function verifyReceiveMessageChecksum(response) {\n if (!response.data) return;\n\n var service = this.service;\n var messageIds = [];\n AWS.util.arrayEach(response.data.Messages, function(message) {\n var md5 = message.MD5OfBody;\n var body = message.Body;\n if (!service.isChecksumValid(md5, body)) {\n messageIds.push(message.MessageId);\n }\n });\n\n if (messageIds.length > 0) {\n service.throwInvalidChecksumError(response, messageIds,\n 'Invalid messages: ' + messageIds.join(', '));\n }\n },\n\n /**\n * @api private\n */\n throwInvalidChecksumError: function throwInvalidChecksumError(response, ids, message) {\n response.error = AWS.util.error(new Error(), {\n retryable: true,\n code: 'InvalidChecksum',\n messageIds: ids,\n message: response.request.operation +\n ' returned an invalid MD5 response. ' + message\n });\n },\n\n /**\n * @api private\n */\n isChecksumValid: function isChecksumValid(checksum, data) {\n return this.calculateChecksum(data) === checksum;\n },\n\n /**\n * @api private\n */\n calculateChecksum: function calculateChecksum(data) {\n return AWS.util.crypto.md5(data, 'hex');\n },\n\n /**\n * @api private\n */\n buildEndpoint: function buildEndpoint(request) {\n var url = request.httpRequest.params.QueueUrl;\n if (url) {\n request.httpRequest.endpoint = new AWS.Endpoint(url);\n\n // signature version 4 requires the region name to be set,\n // sqs queue urls contain the region name\n var matches = request.httpRequest.endpoint.host.match(/^sqs\\.(.+?)\\./);\n if (matches) request.httpRequest.region = matches[1];\n }\n }\n});\n","var AWS = require('../core');\nvar resolveRegionalEndpointsFlag = require('../config_regional_endpoint');\nvar ENV_REGIONAL_ENDPOINT_ENABLED = 'AWS_STS_REGIONAL_ENDPOINTS';\nvar CONFIG_REGIONAL_ENDPOINT_ENABLED = 'sts_regional_endpoints';\n\nAWS.util.update(AWS.STS.prototype, {\n /**\n * @overload credentialsFrom(data, credentials = null)\n * Creates a credentials object from STS response data containing\n * credentials information. Useful for quickly setting AWS credentials.\n *\n * @note This is a low-level utility function. If you want to load temporary\n * credentials into your process for subsequent requests to AWS resources,\n * you should use {AWS.TemporaryCredentials} instead.\n * @param data [map] data retrieved from a call to {getFederatedToken},\n * {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.\n * @param credentials [AWS.Credentials] an optional credentials object to\n * fill instead of creating a new object. Useful when modifying an\n * existing credentials object from a refresh call.\n * @return [AWS.TemporaryCredentials] the set of temporary credentials\n * loaded from a raw STS operation response.\n * @example Using credentialsFrom to load global AWS credentials\n * var sts = new AWS.STS();\n * sts.getSessionToken(function (err, data) {\n * if (err) console.log(\"Error getting credentials\");\n * else {\n * AWS.config.credentials = sts.credentialsFrom(data);\n * }\n * });\n * @see AWS.TemporaryCredentials\n */\n credentialsFrom: function credentialsFrom(data, credentials) {\n if (!data) return null;\n if (!credentials) credentials = new AWS.TemporaryCredentials();\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretAccessKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n return credentials;\n },\n\n assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);\n },\n\n assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('validate', this.optInRegionalEndpoint, true);\n },\n\n /**\n * @api private\n */\n optInRegionalEndpoint: function optInRegionalEndpoint(req) {\n var service = req.service;\n var config = service.config;\n config.stsRegionalEndpoints = resolveRegionalEndpointsFlag(service._originalConfig, {\n env: ENV_REGIONAL_ENDPOINT_ENABLED,\n sharedConfig: CONFIG_REGIONAL_ENDPOINT_ENABLED,\n clientConfig: 'stsRegionalEndpoints'\n });\n if (\n config.stsRegionalEndpoints === 'regional' &&\n service.isGlobalEndpoint\n ) {\n //client will throw if region is not supplied; request will be signed with specified region\n if (!config.region) {\n throw AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Missing region in config'});\n }\n var insertPoint = config.endpoint.indexOf('.amazonaws.com');\n var regionalEndpoint = config.endpoint.substring(0, insertPoint) +\n '.' + config.region + config.endpoint.substring(insertPoint);\n req.httpRequest.updateEndpoint(regionalEndpoint);\n req.httpRequest.region = config.region;\n }\n }\n\n});\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nfunction signedUrlBuilder(request) {\n var expires = request.httpRequest.headers[expiresHeader];\n var signerClass = request.service.getSignerClass(request);\n\n delete request.httpRequest.headers['User-Agent'];\n delete request.httpRequest.headers['X-Amz-User-Agent'];\n\n if (signerClass === AWS.Signers.V4) {\n if (expires > 604800) { // one week expiry is invalid\n var message = 'Presigning does not support expiry time greater ' +\n 'than a week with SigV4 signing.';\n throw AWS.util.error(new Error(), {\n code: 'InvalidExpiryTime', message: message, retryable: false\n });\n }\n request.httpRequest.headers[expiresHeader] = expires;\n } else if (signerClass === AWS.Signers.S3) {\n var now = request.service ? request.service.getSkewCorrectedDate() : AWS.util.date.getDate();\n request.httpRequest.headers[expiresHeader] = parseInt(\n AWS.util.date.unixTimestamp(now) + expires, 10).toString();\n } else {\n throw AWS.util.error(new Error(), {\n message: 'Presigning only supports S3 or SigV4 signing.',\n code: 'UnsupportedSigner', retryable: false\n });\n }\n}\n\n/**\n * @api private\n */\nfunction signedUrlSigner(request) {\n var endpoint = request.httpRequest.endpoint;\n var parsedUrl = AWS.util.urlParse(request.httpRequest.path);\n var queryParams = {};\n\n if (parsedUrl.search) {\n queryParams = AWS.util.queryStringParse(parsedUrl.search.substr(1));\n }\n\n var auth = request.httpRequest.headers['Authorization'].split(' ');\n if (auth[0] === 'AWS') {\n auth = auth[1].split(':');\n queryParams['Signature'] = auth.pop();\n queryParams['AWSAccessKeyId'] = auth.join(':');\n\n AWS.util.each(request.httpRequest.headers, function (key, value) {\n if (key === expiresHeader) key = 'Expires';\n if (key.indexOf('x-amz-meta-') === 0) {\n // Delete existing, potentially not normalized key\n delete queryParams[key];\n key = key.toLowerCase();\n }\n queryParams[key] = value;\n });\n delete request.httpRequest.headers[expiresHeader];\n delete queryParams['Authorization'];\n delete queryParams['Host'];\n } else if (auth[0] === 'AWS4-HMAC-SHA256') { // SigV4 signing\n auth.shift();\n var rest = auth.join(' ');\n var signature = rest.match(/Signature=(.*?)(?:,|\\s|\\r?\\n|$)/)[1];\n queryParams['X-Amz-Signature'] = signature;\n delete queryParams['Expires'];\n }\n\n // build URL\n endpoint.pathname = parsedUrl.pathname;\n endpoint.search = AWS.util.queryParamsToString(queryParams);\n}\n\n/**\n * @api private\n */\nAWS.Signers.Presign = inherit({\n /**\n * @api private\n */\n sign: function sign(request, expireTime, callback) {\n request.httpRequest.headers[expiresHeader] = expireTime || 3600;\n request.on('build', signedUrlBuilder);\n request.on('sign', signedUrlSigner);\n request.removeListener('afterBuild',\n AWS.EventListeners.Core.SET_CONTENT_LENGTH);\n request.removeListener('afterBuild',\n AWS.EventListeners.Core.COMPUTE_SHA256);\n\n request.emit('beforePresign', [request]);\n\n if (callback) {\n request.build(function() {\n if (this.response.error) callback(this.response.error);\n else {\n callback(null, AWS.util.urlFormat(request.httpRequest.endpoint));\n }\n });\n } else {\n request.build();\n if (request.response.error) throw request.response.error;\n return AWS.util.urlFormat(request.httpRequest.endpoint);\n }\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.Presign;\n","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.RequestSigner = inherit({\n constructor: function RequestSigner(request) {\n this.request = request;\n },\n\n setServiceClientId: function setServiceClientId(id) {\n this.serviceClientId = id;\n },\n\n getServiceClientId: function getServiceClientId() {\n return this.serviceClientId;\n }\n});\n\nAWS.Signers.RequestSigner.getVersion = function getVersion(version) {\n switch (version) {\n case 'v2': return AWS.Signers.V2;\n case 'v3': return AWS.Signers.V3;\n case 's3v4': return AWS.Signers.V4;\n case 'v4': return AWS.Signers.V4;\n case 's3': return AWS.Signers.S3;\n case 'v3https': return AWS.Signers.V3Https;\n }\n throw new Error('Unknown signing version ' + version);\n};\n\nrequire('./v2');\nrequire('./v3');\nrequire('./v3https');\nrequire('./v4');\nrequire('./s3');\nrequire('./presign');\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.S3 = inherit(AWS.Signers.RequestSigner, {\n /**\n * When building the stringToSign, these sub resource params should be\n * part of the canonical resource string with their NON-decoded values\n */\n subResources: {\n 'acl': 1,\n 'accelerate': 1,\n 'analytics': 1,\n 'cors': 1,\n 'lifecycle': 1,\n 'delete': 1,\n 'inventory': 1,\n 'location': 1,\n 'logging': 1,\n 'metrics': 1,\n 'notification': 1,\n 'partNumber': 1,\n 'policy': 1,\n 'requestPayment': 1,\n 'replication': 1,\n 'restore': 1,\n 'tagging': 1,\n 'torrent': 1,\n 'uploadId': 1,\n 'uploads': 1,\n 'versionId': 1,\n 'versioning': 1,\n 'versions': 1,\n 'website': 1\n },\n\n // when building the stringToSign, these querystring params should be\n // part of the canonical resource string with their NON-encoded values\n responseHeaders: {\n 'response-content-type': 1,\n 'response-content-language': 1,\n 'response-expires': 1,\n 'response-cache-control': 1,\n 'response-content-disposition': 1,\n 'response-content-encoding': 1\n },\n\n addAuthorization: function addAuthorization(credentials, date) {\n if (!this.request.headers['presigned-expires']) {\n this.request.headers['X-Amz-Date'] = AWS.util.date.rfc822(date);\n }\n\n if (credentials.sessionToken) {\n // presigned URLs require this header to be lowercased\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n var signature = this.sign(credentials.secretAccessKey, this.stringToSign());\n var auth = 'AWS ' + credentials.accessKeyId + ':' + signature;\n\n this.request.headers['Authorization'] = auth;\n },\n\n stringToSign: function stringToSign() {\n var r = this.request;\n\n var parts = [];\n parts.push(r.method);\n parts.push(r.headers['Content-MD5'] || '');\n parts.push(r.headers['Content-Type'] || '');\n\n // This is the \"Date\" header, but we use X-Amz-Date.\n // The S3 signing mechanism requires us to pass an empty\n // string for this Date header regardless.\n parts.push(r.headers['presigned-expires'] || '');\n\n var headers = this.canonicalizedAmzHeaders();\n if (headers) parts.push(headers);\n parts.push(this.canonicalizedResource());\n\n return parts.join('\\n');\n\n },\n\n canonicalizedAmzHeaders: function canonicalizedAmzHeaders() {\n\n var amzHeaders = [];\n\n AWS.util.each(this.request.headers, function (name) {\n if (name.match(/^x-amz-/i))\n amzHeaders.push(name);\n });\n\n amzHeaders.sort(function (a, b) {\n return a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n });\n\n var parts = [];\n AWS.util.arrayEach.call(this, amzHeaders, function (name) {\n parts.push(name.toLowerCase() + ':' + String(this.request.headers[name]));\n });\n\n return parts.join('\\n');\n\n },\n\n canonicalizedResource: function canonicalizedResource() {\n\n var r = this.request;\n\n var parts = r.path.split('?');\n var path = parts[0];\n var querystring = parts[1];\n\n var resource = '';\n\n if (r.virtualHostedBucket)\n resource += '/' + r.virtualHostedBucket;\n\n resource += path;\n\n if (querystring) {\n\n // collect a list of sub resources and query params that need to be signed\n var resources = [];\n\n AWS.util.arrayEach.call(this, querystring.split('&'), function (param) {\n var name = param.split('=')[0];\n var value = param.split('=')[1];\n if (this.subResources[name] || this.responseHeaders[name]) {\n var subresource = { name: name };\n if (value !== undefined) {\n if (this.subResources[name]) {\n subresource.value = value;\n } else {\n subresource.value = decodeURIComponent(value);\n }\n }\n resources.push(subresource);\n }\n });\n\n resources.sort(function (a, b) { return a.name < b.name ? -1 : 1; });\n\n if (resources.length) {\n\n querystring = [];\n AWS.util.arrayEach(resources, function (res) {\n if (res.value === undefined) {\n querystring.push(res.name);\n } else {\n querystring.push(res.name + '=' + res.value);\n }\n });\n\n resource += '?' + querystring.join('&');\n }\n\n }\n\n return resource;\n\n },\n\n sign: function sign(secret, string) {\n return AWS.util.crypto.hmac(secret, string, 'base64', 'sha1');\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.S3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n\n if (!date) date = AWS.util.date.getDate();\n\n var r = this.request;\n\n r.params.Timestamp = AWS.util.date.iso8601(date);\n r.params.SignatureVersion = '2';\n r.params.SignatureMethod = 'HmacSHA256';\n r.params.AWSAccessKeyId = credentials.accessKeyId;\n\n if (credentials.sessionToken) {\n r.params.SecurityToken = credentials.sessionToken;\n }\n\n delete r.params.Signature; // delete old Signature for re-signing\n r.params.Signature = this.signature(credentials);\n\n r.body = AWS.util.queryParamsToString(r.params);\n r.headers['Content-Length'] = r.body.length;\n },\n\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push(this.request.endpoint.host.toLowerCase());\n parts.push(this.request.pathname());\n parts.push(AWS.util.queryParamsToString(this.request.params));\n return parts.join('\\n');\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V2;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n\n var datetime = AWS.util.date.rfc822(date);\n\n this.request.headers['X-Amz-Date'] = datetime;\n\n if (credentials.sessionToken) {\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n this.request.headers['X-Amzn-Authorization'] =\n this.authorization(credentials, datetime);\n\n },\n\n authorization: function authorization(credentials) {\n return 'AWS3 ' +\n 'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n 'Algorithm=HmacSHA256,' +\n 'SignedHeaders=' + this.signedHeaders() + ',' +\n 'Signature=' + this.signature(credentials);\n },\n\n signedHeaders: function signedHeaders() {\n var headers = [];\n AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n headers.push(h.toLowerCase());\n });\n return headers.sort().join(';');\n },\n\n canonicalHeaders: function canonicalHeaders() {\n var headers = this.request.headers;\n var parts = [];\n AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n parts.push(h.toLowerCase().trim() + ':' + String(headers[h]).trim());\n });\n return parts.sort().join('\\n') + '\\n';\n },\n\n headersToSign: function headersToSign() {\n var headers = [];\n AWS.util.each(this.request.headers, function iterator(k) {\n if (k === 'Host' || k === 'Content-Encoding' || k.match(/^X-Amz/i)) {\n headers.push(k);\n }\n });\n return headers;\n },\n\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push('/');\n parts.push('');\n parts.push(this.canonicalHeaders());\n parts.push(this.request.body);\n return AWS.util.crypto.sha256(parts.join('\\n'));\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\nrequire('./v3');\n\n/**\n * @api private\n */\nAWS.Signers.V3Https = inherit(AWS.Signers.V3, {\n authorization: function authorization(credentials) {\n return 'AWS3-HTTPS ' +\n 'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n 'Algorithm=HmacSHA256,' +\n 'Signature=' + this.signature(credentials);\n },\n\n stringToSign: function stringToSign() {\n return this.request.headers['X-Amz-Date'];\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3Https;\n","var AWS = require('../core');\nvar v4Credentials = require('./v4_credentials');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nAWS.Signers.V4 = inherit(AWS.Signers.RequestSigner, {\n constructor: function V4(request, serviceName, options) {\n AWS.Signers.RequestSigner.call(this, request);\n this.serviceName = serviceName;\n options = options || {};\n this.signatureCache = typeof options.signatureCache === 'boolean' ? options.signatureCache : true;\n this.operation = options.operation;\n this.signatureVersion = options.signatureVersion;\n },\n\n algorithm: 'AWS4-HMAC-SHA256',\n\n addAuthorization: function addAuthorization(credentials, date) {\n var datetime = AWS.util.date.iso8601(date).replace(/[:\\-]|\\.\\d{3}/g, '');\n\n if (this.isPresigned()) {\n this.updateForPresigned(credentials, datetime);\n } else {\n this.addHeaders(credentials, datetime);\n }\n\n this.request.headers['Authorization'] =\n this.authorization(credentials, datetime);\n },\n\n addHeaders: function addHeaders(credentials, datetime) {\n this.request.headers['X-Amz-Date'] = datetime;\n if (credentials.sessionToken) {\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n },\n\n updateForPresigned: function updateForPresigned(credentials, datetime) {\n var credString = this.credentialString(datetime);\n var qs = {\n 'X-Amz-Date': datetime,\n 'X-Amz-Algorithm': this.algorithm,\n 'X-Amz-Credential': credentials.accessKeyId + '/' + credString,\n 'X-Amz-Expires': this.request.headers[expiresHeader],\n 'X-Amz-SignedHeaders': this.signedHeaders()\n };\n\n if (credentials.sessionToken) {\n qs['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n\n if (this.request.headers['Content-Type']) {\n qs['Content-Type'] = this.request.headers['Content-Type'];\n }\n if (this.request.headers['Content-MD5']) {\n qs['Content-MD5'] = this.request.headers['Content-MD5'];\n }\n if (this.request.headers['Cache-Control']) {\n qs['Cache-Control'] = this.request.headers['Cache-Control'];\n }\n\n // need to pull in any other X-Amz-* headers\n AWS.util.each.call(this, this.request.headers, function(key, value) {\n if (key === expiresHeader) return;\n if (this.isSignableHeader(key)) {\n var lowerKey = key.toLowerCase();\n // Metadata should be normalized\n if (lowerKey.indexOf('x-amz-meta-') === 0) {\n qs[lowerKey] = value;\n } else if (lowerKey.indexOf('x-amz-') === 0) {\n qs[key] = value;\n }\n }\n });\n\n var sep = this.request.path.indexOf('?') >= 0 ? '&' : '?';\n this.request.path += sep + AWS.util.queryParamsToString(qs);\n },\n\n authorization: function authorization(credentials, datetime) {\n var parts = [];\n var credString = this.credentialString(datetime);\n parts.push(this.algorithm + ' Credential=' +\n credentials.accessKeyId + '/' + credString);\n parts.push('SignedHeaders=' + this.signedHeaders());\n parts.push('Signature=' + this.signature(credentials, datetime));\n return parts.join(', ');\n },\n\n signature: function signature(credentials, datetime) {\n var signingKey = v4Credentials.getSigningKey(\n credentials,\n datetime.substr(0, 8),\n this.request.region,\n this.serviceName,\n this.signatureCache\n );\n return AWS.util.crypto.hmac(signingKey, this.stringToSign(datetime), 'hex');\n },\n\n stringToSign: function stringToSign(datetime) {\n var parts = [];\n parts.push('AWS4-HMAC-SHA256');\n parts.push(datetime);\n parts.push(this.credentialString(datetime));\n parts.push(this.hexEncodedHash(this.canonicalString()));\n return parts.join('\\n');\n },\n\n canonicalString: function canonicalString() {\n var parts = [], pathname = this.request.pathname();\n if (this.serviceName !== 's3' && this.signatureVersion !== 's3v4') pathname = AWS.util.uriEscapePath(pathname);\n\n parts.push(this.request.method);\n parts.push(pathname);\n parts.push(this.request.search());\n parts.push(this.canonicalHeaders() + '\\n');\n parts.push(this.signedHeaders());\n parts.push(this.hexEncodedBodyHash());\n return parts.join('\\n');\n },\n\n canonicalHeaders: function canonicalHeaders() {\n var headers = [];\n AWS.util.each.call(this, this.request.headers, function (key, item) {\n headers.push([key, item]);\n });\n headers.sort(function (a, b) {\n return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n });\n var parts = [];\n AWS.util.arrayEach.call(this, headers, function (item) {\n var key = item[0].toLowerCase();\n if (this.isSignableHeader(key)) {\n var value = item[1];\n if (typeof value === 'undefined' || value === null || typeof value.toString !== 'function') {\n throw AWS.util.error(new Error('Header ' + key + ' contains invalid value'), {\n code: 'InvalidHeader'\n });\n }\n parts.push(key + ':' +\n this.canonicalHeaderValues(value.toString()));\n }\n });\n return parts.join('\\n');\n },\n\n canonicalHeaderValues: function canonicalHeaderValues(values) {\n return values.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n },\n\n signedHeaders: function signedHeaders() {\n var keys = [];\n AWS.util.each.call(this, this.request.headers, function (key) {\n key = key.toLowerCase();\n if (this.isSignableHeader(key)) keys.push(key);\n });\n return keys.sort().join(';');\n },\n\n credentialString: function credentialString(datetime) {\n return v4Credentials.createScope(\n datetime.substr(0, 8),\n this.request.region,\n this.serviceName\n );\n },\n\n hexEncodedHash: function hash(string) {\n return AWS.util.crypto.sha256(string, 'hex');\n },\n\n hexEncodedBodyHash: function hexEncodedBodyHash() {\n var request = this.request;\n if (this.isPresigned() && (['s3', 's3-object-lambda'].indexOf(this.serviceName) > -1) && !request.body) {\n return 'UNSIGNED-PAYLOAD';\n } else if (request.headers['X-Amz-Content-Sha256']) {\n return request.headers['X-Amz-Content-Sha256'];\n } else {\n return this.hexEncodedHash(this.request.body || '');\n }\n },\n\n unsignableHeaders: [\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n expiresHeader,\n 'expect',\n 'x-amzn-trace-id'\n ],\n\n isSignableHeader: function isSignableHeader(key) {\n if (key.toLowerCase().indexOf('x-amz-') === 0) return true;\n return this.unsignableHeaders.indexOf(key) < 0;\n },\n\n isPresigned: function isPresigned() {\n return this.request.headers[expiresHeader] ? true : false;\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V4;\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nvar cachedSecret = {};\n\n/**\n * @api private\n */\nvar cacheQueue = [];\n\n/**\n * @api private\n */\nvar maxCacheEntries = 50;\n\n/**\n * @api private\n */\nvar v4Identifier = 'aws4_request';\n\n/**\n * @api private\n */\nmodule.exports = {\n /**\n * @api private\n *\n * @param date [String]\n * @param region [String]\n * @param serviceName [String]\n * @return [String]\n */\n createScope: function createScope(date, region, serviceName) {\n return [\n date.substr(0, 8),\n region,\n serviceName,\n v4Identifier\n ].join('/');\n },\n\n /**\n * @api private\n *\n * @param credentials [Credentials]\n * @param date [String]\n * @param region [String]\n * @param service [String]\n * @param shouldCache [Boolean]\n * @return [String]\n */\n getSigningKey: function getSigningKey(\n credentials,\n date,\n region,\n service,\n shouldCache\n ) {\n var credsIdentifier = AWS.util.crypto\n .hmac(credentials.secretAccessKey, credentials.accessKeyId, 'base64');\n var cacheKey = [credsIdentifier, date, region, service].join('_');\n shouldCache = shouldCache !== false;\n if (shouldCache && (cacheKey in cachedSecret)) {\n return cachedSecret[cacheKey];\n }\n\n var kDate = AWS.util.crypto.hmac(\n 'AWS4' + credentials.secretAccessKey,\n date,\n 'buffer'\n );\n var kRegion = AWS.util.crypto.hmac(kDate, region, 'buffer');\n var kService = AWS.util.crypto.hmac(kRegion, service, 'buffer');\n\n var signingKey = AWS.util.crypto.hmac(kService, v4Identifier, 'buffer');\n if (shouldCache) {\n cachedSecret[cacheKey] = signingKey;\n cacheQueue.push(cacheKey);\n if (cacheQueue.length > maxCacheEntries) {\n // remove the oldest entry (not the least recently used)\n delete cachedSecret[cacheQueue.shift()];\n }\n }\n\n return signingKey;\n },\n\n /**\n * @api private\n *\n * Empties the derived signing key cache. Made available for testing purposes\n * only.\n */\n emptyCache: function emptyCache() {\n cachedSecret = {};\n cacheQueue = [];\n }\n};\n","function AcceptorStateMachine(states, state) {\n this.currentState = state || null;\n this.states = states || {};\n}\n\nAcceptorStateMachine.prototype.runTo = function runTo(finalState, done, bindObject, inputError) {\n if (typeof finalState === 'function') {\n inputError = bindObject; bindObject = done;\n done = finalState; finalState = null;\n }\n\n var self = this;\n var state = self.states[self.currentState];\n state.fn.call(bindObject || self, inputError, function(err) {\n if (err) {\n if (state.fail) self.currentState = state.fail;\n else return done ? done.call(bindObject, err) : null;\n } else {\n if (state.accept) self.currentState = state.accept;\n else return done ? done.call(bindObject) : null;\n }\n if (self.currentState === finalState) {\n return done ? done.call(bindObject, err) : null;\n }\n\n self.runTo(finalState, done, bindObject, err);\n });\n};\n\nAcceptorStateMachine.prototype.addState = function addState(name, acceptState, failState, fn) {\n if (typeof acceptState === 'function') {\n fn = acceptState; acceptState = null; failState = null;\n } else if (typeof failState === 'function') {\n fn = failState; failState = null;\n }\n\n if (!this.currentState) this.currentState = name;\n this.states[name] = { accept: acceptState, fail: failState, fn: fn };\n return this;\n};\n\n/**\n * @api private\n */\nmodule.exports = AcceptorStateMachine;\n","/* eslint guard-for-in:0 */\nvar AWS;\n\n/**\n * A set of utility methods for use with the AWS SDK.\n *\n * @!attribute abort\n * Return this value from an iterator function {each} or {arrayEach}\n * to break out of the iteration.\n * @example Breaking out of an iterator function\n * AWS.util.each({a: 1, b: 2, c: 3}, function(key, value) {\n * if (key == 'b') return AWS.util.abort;\n * });\n * @see each\n * @see arrayEach\n * @api private\n */\nvar util = {\n environment: 'nodejs',\n engine: function engine() {\n if (util.isBrowser() && typeof navigator !== 'undefined') {\n return navigator.userAgent;\n } else {\n var engine = process.platform + '/' + process.version;\n if (process.env.AWS_EXECUTION_ENV) {\n engine += ' exec-env/' + process.env.AWS_EXECUTION_ENV;\n }\n return engine;\n }\n },\n\n userAgent: function userAgent() {\n var name = util.environment;\n var agent = 'aws-sdk-' + name + '/' + require('./core').VERSION;\n if (name === 'nodejs') agent += ' ' + util.engine();\n return agent;\n },\n\n uriEscape: function uriEscape(string) {\n var output = encodeURIComponent(string);\n output = output.replace(/[^A-Za-z0-9_.~\\-%]+/g, escape);\n\n // AWS percent-encodes some extra non-standard characters in a URI\n output = output.replace(/[*]/g, function(ch) {\n return '%' + ch.charCodeAt(0).toString(16).toUpperCase();\n });\n\n return output;\n },\n\n uriEscapePath: function uriEscapePath(string) {\n var parts = [];\n util.arrayEach(string.split('/'), function (part) {\n parts.push(util.uriEscape(part));\n });\n return parts.join('/');\n },\n\n urlParse: function urlParse(url) {\n return util.url.parse(url);\n },\n\n urlFormat: function urlFormat(url) {\n return util.url.format(url);\n },\n\n queryStringParse: function queryStringParse(qs) {\n return util.querystring.parse(qs);\n },\n\n queryParamsToString: function queryParamsToString(params) {\n var items = [];\n var escape = util.uriEscape;\n var sortedKeys = Object.keys(params).sort();\n\n util.arrayEach(sortedKeys, function(name) {\n var value = params[name];\n var ename = escape(name);\n var result = ename + '=';\n if (Array.isArray(value)) {\n var vals = [];\n util.arrayEach(value, function(item) { vals.push(escape(item)); });\n result = ename + '=' + vals.sort().join('&' + ename + '=');\n } else if (value !== undefined && value !== null) {\n result = ename + '=' + escape(value);\n }\n items.push(result);\n });\n\n return items.join('&');\n },\n\n readFileSync: function readFileSync(path) {\n if (util.isBrowser()) return null;\n return require('fs').readFileSync(path, 'utf-8');\n },\n\n base64: {\n encode: function encode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 encode number ' + string));\n }\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n var buf = util.buffer.toBuffer(string);\n return buf.toString('base64');\n },\n\n decode: function decode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 decode number ' + string));\n }\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n return util.buffer.toBuffer(string, 'base64');\n }\n\n },\n\n buffer: {\n /**\n * Buffer constructor for Node buffer and buffer pollyfill\n */\n toBuffer: function(data, encoding) {\n return (typeof util.Buffer.from === 'function' && util.Buffer.from !== Uint8Array.from) ?\n util.Buffer.from(data, encoding) : new util.Buffer(data, encoding);\n },\n\n alloc: function(size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new Error('size passed to alloc must be a number.');\n }\n if (typeof util.Buffer.alloc === 'function') {\n return util.Buffer.alloc(size, fill, encoding);\n } else {\n var buf = new util.Buffer(size);\n if (fill !== undefined && typeof buf.fill === 'function') {\n buf.fill(fill, undefined, undefined, encoding);\n }\n return buf;\n }\n },\n\n toStream: function toStream(buffer) {\n if (!util.Buffer.isBuffer(buffer)) buffer = util.buffer.toBuffer(buffer);\n\n var readable = new (util.stream.Readable)();\n var pos = 0;\n readable._read = function(size) {\n if (pos >= buffer.length) return readable.push(null);\n\n var end = pos + size;\n if (end > buffer.length) end = buffer.length;\n readable.push(buffer.slice(pos, end));\n pos = end;\n };\n\n return readable;\n },\n\n /**\n * Concatenates a list of Buffer objects.\n */\n concat: function(buffers) {\n var length = 0,\n offset = 0,\n buffer = null, i;\n\n for (i = 0; i < buffers.length; i++) {\n length += buffers[i].length;\n }\n\n buffer = util.buffer.alloc(length);\n\n for (i = 0; i < buffers.length; i++) {\n buffers[i].copy(buffer, offset);\n offset += buffers[i].length;\n }\n\n return buffer;\n }\n },\n\n string: {\n byteLength: function byteLength(string) {\n if (string === null || string === undefined) return 0;\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n\n if (typeof string.byteLength === 'number') {\n return string.byteLength;\n } else if (typeof string.length === 'number') {\n return string.length;\n } else if (typeof string.size === 'number') {\n return string.size;\n } else if (typeof string.path === 'string') {\n return require('fs').lstatSync(string.path).size;\n } else {\n throw util.error(new Error('Cannot determine length of ' + string),\n { object: string });\n }\n },\n\n upperFirst: function upperFirst(string) {\n return string[0].toUpperCase() + string.substr(1);\n },\n\n lowerFirst: function lowerFirst(string) {\n return string[0].toLowerCase() + string.substr(1);\n }\n },\n\n ini: {\n parse: function string(ini) {\n var currentSection, map = {};\n util.arrayEach(ini.split(/\\r?\\n/), function(line) {\n line = line.split(/(^|\\s)[;#]/)[0]; // remove comments\n var section = line.match(/^\\s*\\[([^\\[\\]]+)\\]\\s*$/);\n if (section) {\n currentSection = section[1];\n if (currentSection === '__proto__' || currentSection.split(/\\s/)[1] === '__proto__') {\n throw util.error(\n new Error('Cannot load profile name \\'' + currentSection + '\\' from shared ini file.')\n );\n }\n } else if (currentSection) {\n var item = line.match(/^\\s*(.+?)\\s*=\\s*(.+?)\\s*$/);\n if (item) {\n map[currentSection] = map[currentSection] || {};\n map[currentSection][item[1]] = item[2];\n }\n }\n });\n\n return map;\n }\n },\n\n fn: {\n noop: function() {},\n callback: function (err) { if (err) throw err; },\n\n /**\n * Turn a synchronous function into as \"async\" function by making it call\n * a callback. The underlying function is called with all but the last argument,\n * which is treated as the callback. The callback is passed passed a first argument\n * of null on success to mimick standard node callbacks.\n */\n makeAsync: function makeAsync(fn, expectedArgs) {\n if (expectedArgs && expectedArgs <= fn.length) {\n return fn;\n }\n\n return function() {\n var args = Array.prototype.slice.call(arguments, 0);\n var callback = args.pop();\n var result = fn.apply(null, args);\n callback(result);\n };\n }\n },\n\n /**\n * Date and time utility functions.\n */\n date: {\n\n /**\n * @return [Date] the current JavaScript date object. Since all\n * AWS services rely on this date object, you can override\n * this function to provide a special time value to AWS service\n * requests.\n */\n getDate: function getDate() {\n if (!AWS) AWS = require('./core');\n if (AWS.config.systemClockOffset) { // use offset when non-zero\n return new Date(new Date().getTime() + AWS.config.systemClockOffset);\n } else {\n return new Date();\n }\n },\n\n /**\n * @return [String] the date in ISO-8601 format\n */\n iso8601: function iso8601(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n },\n\n /**\n * @return [String] the date in RFC 822 format\n */\n rfc822: function rfc822(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.toUTCString();\n },\n\n /**\n * @return [Integer] the UNIX timestamp value for the current time\n */\n unixTimestamp: function unixTimestamp(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.getTime() / 1000;\n },\n\n /**\n * @param [String,number,Date] date\n * @return [Date]\n */\n from: function format(date) {\n if (typeof date === 'number') {\n return new Date(date * 1000); // unix timestamp\n } else {\n return new Date(date);\n }\n },\n\n /**\n * Given a Date or date-like value, this function formats the\n * date into a string of the requested value.\n * @param [String,number,Date] date\n * @param [String] formatter Valid formats are:\n # * 'iso8601'\n # * 'rfc822'\n # * 'unixTimestamp'\n * @return [String]\n */\n format: function format(date, formatter) {\n if (!formatter) formatter = 'iso8601';\n return util.date[formatter](util.date.from(date));\n },\n\n parseTimestamp: function parseTimestamp(value) {\n if (typeof value === 'number') { // unix timestamp (number)\n return new Date(value * 1000);\n } else if (value.match(/^\\d+$/)) { // unix timestamp\n return new Date(value * 1000);\n } else if (value.match(/^\\d{4}/)) { // iso8601\n return new Date(value);\n } else if (value.match(/^\\w{3},/)) { // rfc822\n return new Date(value);\n } else {\n throw util.error(\n new Error('unhandled timestamp format: ' + value),\n {code: 'TimestampParserError'});\n }\n }\n\n },\n\n crypto: {\n crc32Table: [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,\n 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,\n 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,\n 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,\n 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,\n 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,\n 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,\n 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,\n 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,\n 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,\n 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,\n 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,\n 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,\n 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,\n 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,\n 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,\n 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,\n 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,\n 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,\n 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,\n 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,\n 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,\n 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,\n 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,\n 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,\n 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,\n 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,\n 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,\n 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,\n 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,\n 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,\n 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,\n 0x2D02EF8D],\n\n crc32: function crc32(data) {\n var tbl = util.crypto.crc32Table;\n var crc = 0 ^ -1;\n\n if (typeof data === 'string') {\n data = util.buffer.toBuffer(data);\n }\n\n for (var i = 0; i < data.length; i++) {\n var code = data.readUInt8(i);\n crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xFF];\n }\n return (crc ^ -1) >>> 0;\n },\n\n hmac: function hmac(key, string, digest, fn) {\n if (!digest) digest = 'binary';\n if (digest === 'buffer') { digest = undefined; }\n if (!fn) fn = 'sha256';\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);\n },\n\n md5: function md5(data, digest, callback) {\n return util.crypto.hash('md5', data, digest, callback);\n },\n\n sha256: function sha256(data, digest, callback) {\n return util.crypto.hash('sha256', data, digest, callback);\n },\n\n hash: function(algorithm, data, digest, callback) {\n var hash = util.crypto.createHash(algorithm);\n if (!digest) { digest = 'binary'; }\n if (digest === 'buffer') { digest = undefined; }\n if (typeof data === 'string') data = util.buffer.toBuffer(data);\n var sliceFn = util.arraySliceFn(data);\n var isBuffer = util.Buffer.isBuffer(data);\n //Identifying objects with an ArrayBuffer as buffers\n if (util.isBrowser() && typeof ArrayBuffer !== 'undefined' && data && data.buffer instanceof ArrayBuffer) isBuffer = true;\n\n if (callback && typeof data === 'object' &&\n typeof data.on === 'function' && !isBuffer) {\n data.on('data', function(chunk) { hash.update(chunk); });\n data.on('error', function(err) { callback(err); });\n data.on('end', function() { callback(null, hash.digest(digest)); });\n } else if (callback && sliceFn && !isBuffer &&\n typeof FileReader !== 'undefined') {\n // this might be a File/Blob\n var index = 0, size = 1024 * 512;\n var reader = new FileReader();\n reader.onerror = function() {\n callback(new Error('Failed to read data.'));\n };\n reader.onload = function() {\n var buf = new util.Buffer(new Uint8Array(reader.result));\n hash.update(buf);\n index += buf.length;\n reader._continueReading();\n };\n reader._continueReading = function() {\n if (index >= data.size) {\n callback(null, hash.digest(digest));\n return;\n }\n\n var back = index + size;\n if (back > data.size) back = data.size;\n reader.readAsArrayBuffer(sliceFn.call(data, index, back));\n };\n\n reader._continueReading();\n } else {\n if (util.isBrowser() && typeof data === 'object' && !isBuffer) {\n data = new util.Buffer(new Uint8Array(data));\n }\n var out = hash.update(data).digest(digest);\n if (callback) callback(null, out);\n return out;\n }\n },\n\n toHex: function toHex(data) {\n var out = [];\n for (var i = 0; i < data.length; i++) {\n out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2));\n }\n return out.join('');\n },\n\n createHash: function createHash(algorithm) {\n return util.crypto.lib.createHash(algorithm);\n }\n\n },\n\n /** @!ignore */\n\n /* Abort constant */\n abort: {},\n\n each: function each(object, iterFunction) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n var ret = iterFunction.call(this, key, object[key]);\n if (ret === util.abort) break;\n }\n }\n },\n\n arrayEach: function arrayEach(array, iterFunction) {\n for (var idx in array) {\n if (Object.prototype.hasOwnProperty.call(array, idx)) {\n var ret = iterFunction.call(this, array[idx], parseInt(idx, 10));\n if (ret === util.abort) break;\n }\n }\n },\n\n update: function update(obj1, obj2) {\n util.each(obj2, function iterator(key, item) {\n obj1[key] = item;\n });\n return obj1;\n },\n\n merge: function merge(obj1, obj2) {\n return util.update(util.copy(obj1), obj2);\n },\n\n copy: function copy(object) {\n if (object === null || object === undefined) return object;\n var dupe = {};\n // jshint forin:false\n for (var key in object) {\n dupe[key] = object[key];\n }\n return dupe;\n },\n\n isEmpty: function isEmpty(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n return false;\n }\n }\n return true;\n },\n\n arraySliceFn: function arraySliceFn(obj) {\n var fn = obj.slice || obj.webkitSlice || obj.mozSlice;\n return typeof fn === 'function' ? fn : null;\n },\n\n isType: function isType(obj, type) {\n // handle cross-\"frame\" objects\n if (typeof type === 'function') type = util.typeName(type);\n return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n },\n\n typeName: function typeName(type) {\n if (Object.prototype.hasOwnProperty.call(type, 'name')) return type.name;\n var str = type.toString();\n var match = str.match(/^\\s*function (.+)\\(/);\n return match ? match[1] : str;\n },\n\n error: function error(err, options) {\n var originalError = null;\n if (typeof err.message === 'string' && err.message !== '') {\n if (typeof options === 'string' || (options && options.message)) {\n originalError = util.copy(err);\n originalError.message = err.message;\n }\n }\n err.message = err.message || null;\n\n if (typeof options === 'string') {\n err.message = options;\n } else if (typeof options === 'object' && options !== null) {\n util.update(err, options);\n if (options.message)\n err.message = options.message;\n if (options.code || options.name)\n err.code = options.code || options.name;\n if (options.stack)\n err.stack = options.stack;\n }\n\n if (typeof Object.defineProperty === 'function') {\n Object.defineProperty(err, 'name', {writable: true, enumerable: false});\n Object.defineProperty(err, 'message', {enumerable: true});\n }\n\n err.name = String(options && options.name || err.name || err.code || 'Error');\n err.time = new Date();\n\n if (originalError) err.originalError = originalError;\n\n return err;\n },\n\n /**\n * @api private\n */\n inherit: function inherit(klass, features) {\n var newObject = null;\n if (features === undefined) {\n features = klass;\n klass = Object;\n newObject = {};\n } else {\n var ctor = function ConstructorWrapper() {};\n ctor.prototype = klass.prototype;\n newObject = new ctor();\n }\n\n // constructor not supplied, create pass-through ctor\n if (features.constructor === Object) {\n features.constructor = function() {\n if (klass !== Object) {\n return klass.apply(this, arguments);\n }\n };\n }\n\n features.constructor.prototype = newObject;\n util.update(features.constructor.prototype, features);\n features.constructor.__super__ = klass;\n return features.constructor;\n },\n\n /**\n * @api private\n */\n mixin: function mixin() {\n var klass = arguments[0];\n for (var i = 1; i < arguments.length; i++) {\n // jshint forin:false\n for (var prop in arguments[i].prototype) {\n var fn = arguments[i].prototype[prop];\n if (prop !== 'constructor') {\n klass.prototype[prop] = fn;\n }\n }\n }\n return klass;\n },\n\n /**\n * @api private\n */\n hideProperties: function hideProperties(obj, props) {\n if (typeof Object.defineProperty !== 'function') return;\n\n util.arrayEach(props, function (key) {\n Object.defineProperty(obj, key, {\n enumerable: false, writable: true, configurable: true });\n });\n },\n\n /**\n * @api private\n */\n property: function property(obj, name, value, enumerable, isValue) {\n var opts = {\n configurable: true,\n enumerable: enumerable !== undefined ? enumerable : true\n };\n if (typeof value === 'function' && !isValue) {\n opts.get = value;\n }\n else {\n opts.value = value; opts.writable = true;\n }\n\n Object.defineProperty(obj, name, opts);\n },\n\n /**\n * @api private\n */\n memoizedProperty: function memoizedProperty(obj, name, get, enumerable) {\n var cachedValue = null;\n\n // build enumerable attribute for each value with lazy accessor.\n util.property(obj, name, function() {\n if (cachedValue === null) {\n cachedValue = get();\n }\n return cachedValue;\n }, enumerable);\n },\n\n /**\n * TODO Remove in major version revision\n * This backfill populates response data without the\n * top-level payload name.\n *\n * @api private\n */\n hoistPayloadMember: function hoistPayloadMember(resp) {\n var req = resp.request;\n var operationName = req.operation;\n var operation = req.service.api.operations[operationName];\n var output = operation.output;\n if (output.payload && !operation.hasEventOutput) {\n var payloadMember = output.members[output.payload];\n var responsePayload = resp.data[output.payload];\n if (payloadMember.type === 'structure') {\n util.each(responsePayload, function(key, value) {\n util.property(resp.data, key, value, false);\n });\n }\n }\n },\n\n /**\n * Compute SHA-256 checksums of streams\n *\n * @api private\n */\n computeSha256: function computeSha256(body, done) {\n if (util.isNode()) {\n var Stream = util.stream.Stream;\n var fs = require('fs');\n if (typeof Stream === 'function' && body instanceof Stream) {\n if (typeof body.path === 'string') { // assume file object\n var settings = {};\n if (typeof body.start === 'number') {\n settings.start = body.start;\n }\n if (typeof body.end === 'number') {\n settings.end = body.end;\n }\n body = fs.createReadStream(body.path, settings);\n } else { // TODO support other stream types\n return done(new Error('Non-file stream objects are ' +\n 'not supported with SigV4'));\n }\n }\n }\n\n util.crypto.sha256(body, 'hex', function(err, sha) {\n if (err) done(err);\n else done(null, sha);\n });\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(serverTime) {\n if (serverTime) {\n util.property(AWS.config, 'isClockSkewed',\n Math.abs(new Date().getTime() - serverTime) >= 300000, false);\n return AWS.config.isClockSkewed;\n }\n },\n\n applyClockOffset: function applyClockOffset(serverTime) {\n if (serverTime)\n AWS.config.systemClockOffset = serverTime - new Date().getTime();\n },\n\n /**\n * @api private\n */\n extractRequestId: function extractRequestId(resp) {\n var requestId = resp.httpResponse.headers['x-amz-request-id'] ||\n resp.httpResponse.headers['x-amzn-requestid'];\n\n if (!requestId && resp.data && resp.data.ResponseMetadata) {\n requestId = resp.data.ResponseMetadata.RequestId;\n }\n\n if (requestId) {\n resp.requestId = requestId;\n }\n\n if (resp.error) {\n resp.error.requestId = requestId;\n }\n },\n\n /**\n * @api private\n */\n addPromises: function addPromises(constructors, PromiseDependency) {\n var deletePromises = false;\n if (PromiseDependency === undefined && AWS && AWS.config) {\n PromiseDependency = AWS.config.getPromisesDependency();\n }\n if (PromiseDependency === undefined && typeof Promise !== 'undefined') {\n PromiseDependency = Promise;\n }\n if (typeof PromiseDependency !== 'function') deletePromises = true;\n if (!Array.isArray(constructors)) constructors = [constructors];\n\n for (var ind = 0; ind < constructors.length; ind++) {\n var constructor = constructors[ind];\n if (deletePromises) {\n if (constructor.deletePromisesFromClass) {\n constructor.deletePromisesFromClass();\n }\n } else if (constructor.addPromisesToClass) {\n constructor.addPromisesToClass(PromiseDependency);\n }\n }\n },\n\n /**\n * @api private\n * Return a function that will return a promise whose fate is decided by the\n * callback behavior of the given method with `methodName`. The method to be\n * promisified should conform to node.js convention of accepting a callback as\n * last argument and calling that callback with error as the first argument\n * and success value on the second argument.\n */\n promisifyMethod: function promisifyMethod(methodName, PromiseDependency) {\n return function promise() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n return new PromiseDependency(function(resolve, reject) {\n args.push(function(err, data) {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n });\n self[methodName].apply(self, args);\n });\n };\n },\n\n /**\n * @api private\n */\n isDualstackAvailable: function isDualstackAvailable(service) {\n if (!service) return false;\n var metadata = require('../apis/metadata.json');\n if (typeof service !== 'string') service = service.serviceIdentifier;\n if (typeof service !== 'string' || !metadata.hasOwnProperty(service)) return false;\n return !!metadata[service].dualstackAvailable;\n },\n\n /**\n * @api private\n */\n calculateRetryDelay: function calculateRetryDelay(retryCount, retryDelayOptions, err) {\n if (!retryDelayOptions) retryDelayOptions = {};\n var customBackoff = retryDelayOptions.customBackoff || null;\n if (typeof customBackoff === 'function') {\n return customBackoff(retryCount, err);\n }\n var base = typeof retryDelayOptions.base === 'number' ? retryDelayOptions.base : 100;\n var delay = Math.random() * (Math.pow(2, retryCount) * base);\n return delay;\n },\n\n /**\n * @api private\n */\n handleRequestWithRetries: function handleRequestWithRetries(httpRequest, options, cb) {\n if (!options) options = {};\n var http = AWS.HttpClient.getInstance();\n var httpOptions = options.httpOptions || {};\n var retryCount = 0;\n\n var errCallback = function(err) {\n var maxRetries = options.maxRetries || 0;\n if (err && err.code === 'TimeoutError') err.retryable = true;\n\n // Call `calculateRetryDelay()` only when relevant, see #3401\n if (err && err.retryable && retryCount < maxRetries) {\n var delay = util.calculateRetryDelay(retryCount, options.retryDelayOptions, err);\n if (delay >= 0) {\n retryCount++;\n setTimeout(sendRequest, delay + (err.retryAfter || 0));\n return;\n }\n }\n cb(err);\n };\n\n var sendRequest = function() {\n var data = '';\n http.handleRequest(httpRequest, httpOptions, function(httpResponse) {\n httpResponse.on('data', function(chunk) { data += chunk.toString(); });\n httpResponse.on('end', function() {\n var statusCode = httpResponse.statusCode;\n if (statusCode < 300) {\n cb(null, data);\n } else {\n var retryAfter = parseInt(httpResponse.headers['retry-after'], 10) * 1000 || 0;\n var err = util.error(new Error(),\n {\n statusCode: statusCode,\n retryable: statusCode >= 500 || statusCode === 429\n }\n );\n if (retryAfter && err.retryable) err.retryAfter = retryAfter;\n errCallback(err);\n }\n });\n }, errCallback);\n };\n\n AWS.util.defer(sendRequest);\n },\n\n /**\n * @api private\n */\n uuid: {\n v4: function uuidV4() {\n return require('uuid').v4();\n }\n },\n\n /**\n * @api private\n */\n convertPayloadToString: function convertPayloadToString(resp) {\n var req = resp.request;\n var operation = req.operation;\n var rules = req.service.api.operations[operation].output || {};\n if (rules.payload && resp.data[rules.payload]) {\n resp.data[rules.payload] = resp.data[rules.payload].toString();\n }\n },\n\n /**\n * @api private\n */\n defer: function defer(callback) {\n if (typeof process === 'object' && typeof process.nextTick === 'function') {\n process.nextTick(callback);\n } else if (typeof setImmediate === 'function') {\n setImmediate(callback);\n } else {\n setTimeout(callback, 0);\n }\n },\n\n /**\n * @api private\n */\n getRequestPayloadShape: function getRequestPayloadShape(req) {\n var operations = req.service.api.operations;\n if (!operations) return undefined;\n var operation = (operations || {})[req.operation];\n if (!operation || !operation.input || !operation.input.payload) return undefined;\n return operation.input.members[operation.input.payload];\n },\n\n getProfilesFromSharedConfig: function getProfilesFromSharedConfig(iniLoader, filename) {\n var profiles = {};\n var profilesFromConfig = {};\n if (process.env[util.configOptInEnv]) {\n var profilesFromConfig = iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[util.sharedConfigFileEnv]\n });\n }\n var profilesFromCreds= {};\n try {\n var profilesFromCreds = iniLoader.loadFrom({\n filename: filename ||\n (process.env[util.configOptInEnv] && process.env[util.sharedCredentialsFileEnv])\n });\n } catch (error) {\n // if using config, assume it is fully descriptive without a credentials file:\n if (!process.env[util.configOptInEnv]) throw error;\n }\n for (var i = 0, profileNames = Object.keys(profilesFromConfig); i < profileNames.length; i++) {\n profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromConfig[profileNames[i]]);\n }\n for (var i = 0, profileNames = Object.keys(profilesFromCreds); i < profileNames.length; i++) {\n profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromCreds[profileNames[i]]);\n }\n return profiles;\n\n /**\n * Roughly the semantics of `Object.assign(target, source)`\n */\n function objectAssign(target, source) {\n for (var i = 0, keys = Object.keys(source); i < keys.length; i++) {\n target[keys[i]] = source[keys[i]];\n }\n return target;\n }\n },\n\n /**\n * @api private\n */\n ARN: {\n validate: function validateARN(str) {\n return str && str.indexOf('arn:') === 0 && str.split(':').length >= 6;\n },\n parse: function parseARN(arn) {\n var matched = arn.split(':');\n return {\n partition: matched[1],\n service: matched[2],\n region: matched[3],\n accountId: matched[4],\n resource: matched.slice(5).join(':')\n };\n },\n build: function buildARN(arnObject) {\n if (\n arnObject.service === undefined ||\n arnObject.region === undefined ||\n arnObject.accountId === undefined ||\n arnObject.resource === undefined\n ) throw util.error(new Error('Input ARN object is invalid'));\n return 'arn:'+ (arnObject.partition || 'aws') + ':' + arnObject.service +\n ':' + arnObject.region + ':' + arnObject.accountId + ':' + arnObject.resource;\n }\n },\n\n /**\n * @api private\n */\n defaultProfile: 'default',\n\n /**\n * @api private\n */\n configOptInEnv: 'AWS_SDK_LOAD_CONFIG',\n\n /**\n * @api private\n */\n sharedCredentialsFileEnv: 'AWS_SHARED_CREDENTIALS_FILE',\n\n /**\n * @api private\n */\n sharedConfigFileEnv: 'AWS_CONFIG_FILE',\n\n /**\n * @api private\n */\n imdsDisabledEnv: 'AWS_EC2_METADATA_DISABLED'\n};\n\n/**\n * @api private\n */\nmodule.exports = util;\n","var util = require('../util');\nvar Shape = require('../model/shape');\n\nfunction DomXmlParser() { }\n\nDomXmlParser.prototype.parse = function(xml, shape) {\n if (xml.replace(/^\\s+/, '') === '') return {};\n\n var result, error;\n try {\n if (window.DOMParser) {\n try {\n var parser = new DOMParser();\n result = parser.parseFromString(xml, 'text/xml');\n } catch (syntaxError) {\n throw util.error(new Error('Parse error in document'),\n {\n originalError: syntaxError,\n code: 'XMLParserError',\n retryable: true\n });\n }\n\n if (result.documentElement === null) {\n throw util.error(new Error('Cannot parse empty document.'),\n {\n code: 'XMLParserError',\n retryable: true\n });\n }\n\n var isError = result.getElementsByTagName('parsererror')[0];\n if (isError && (isError.parentNode === result ||\n isError.parentNode.nodeName === 'body' ||\n isError.parentNode.parentNode === result ||\n isError.parentNode.parentNode.nodeName === 'body')) {\n var errorElement = isError.getElementsByTagName('div')[0] || isError;\n throw util.error(new Error(errorElement.textContent || 'Parser error in document'),\n {\n code: 'XMLParserError',\n retryable: true\n });\n }\n } else if (window.ActiveXObject) {\n result = new window.ActiveXObject('Microsoft.XMLDOM');\n result.async = false;\n\n if (!result.loadXML(xml)) {\n throw util.error(new Error('Parse error in document'),\n {\n code: 'XMLParserError',\n retryable: true\n });\n }\n } else {\n throw new Error('Cannot load XML parser');\n }\n } catch (e) {\n error = e;\n }\n\n if (result && result.documentElement && !error) {\n var data = parseXml(result.documentElement, shape);\n var metadata = getElementByTagName(result.documentElement, 'ResponseMetadata');\n if (metadata) {\n data.ResponseMetadata = parseXml(metadata, {});\n }\n return data;\n } else if (error) {\n throw util.error(error || new Error(), {code: 'XMLParserError', retryable: true});\n } else { // empty xml document\n return {};\n }\n};\n\nfunction getElementByTagName(xml, tag) {\n var elements = xml.getElementsByTagName(tag);\n for (var i = 0, iLen = elements.length; i < iLen; i++) {\n if (elements[i].parentNode === xml) {\n return elements[i];\n }\n }\n}\n\nfunction parseXml(xml, shape) {\n if (!shape) shape = {};\n switch (shape.type) {\n case 'structure': return parseStructure(xml, shape);\n case 'map': return parseMap(xml, shape);\n case 'list': return parseList(xml, shape);\n case undefined: case null: return parseUnknown(xml);\n default: return parseScalar(xml, shape);\n }\n}\n\nfunction parseStructure(xml, shape) {\n var data = {};\n if (xml === null) return data;\n\n util.each(shape.members, function(memberName, memberShape) {\n if (memberShape.isXmlAttribute) {\n if (Object.prototype.hasOwnProperty.call(xml.attributes, memberShape.name)) {\n var value = xml.attributes[memberShape.name].value;\n data[memberName] = parseXml({textContent: value}, memberShape);\n }\n } else {\n var xmlChild = memberShape.flattened ? xml :\n getElementByTagName(xml, memberShape.name);\n if (xmlChild) {\n data[memberName] = parseXml(xmlChild, memberShape);\n } else if (\n !memberShape.flattened &&\n memberShape.type === 'list' &&\n !shape.api.xmlNoDefaultLists) {\n data[memberName] = memberShape.defaultValue;\n }\n }\n });\n\n return data;\n}\n\nfunction parseMap(xml, shape) {\n var data = {};\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n var tagName = shape.flattened ? shape.name : 'entry';\n\n var child = xml.firstElementChild;\n while (child) {\n if (child.nodeName === tagName) {\n var key = getElementByTagName(child, xmlKey).textContent;\n var value = getElementByTagName(child, xmlValue);\n data[key] = parseXml(value, shape.value);\n }\n child = child.nextElementSibling;\n }\n return data;\n}\n\nfunction parseList(xml, shape) {\n var data = [];\n var tagName = shape.flattened ? shape.name : (shape.member.name || 'member');\n\n var child = xml.firstElementChild;\n while (child) {\n if (child.nodeName === tagName) {\n data.push(parseXml(child, shape.member));\n }\n child = child.nextElementSibling;\n }\n return data;\n}\n\nfunction parseScalar(xml, shape) {\n if (xml.getAttribute) {\n var encoding = xml.getAttribute('encoding');\n if (encoding === 'base64') {\n shape = new Shape.create({type: encoding});\n }\n }\n\n var text = xml.textContent;\n if (text === '') text = null;\n if (typeof shape.toType === 'function') {\n return shape.toType(text);\n } else {\n return text;\n }\n}\n\nfunction parseUnknown(xml) {\n if (xml === undefined || xml === null) return '';\n\n // empty object\n if (!xml.firstElementChild) {\n if (xml.parentNode.parentNode === null) return {};\n if (xml.childNodes.length === 0) return '';\n else return xml.textContent;\n }\n\n // object, parse as structure\n var shape = {type: 'structure', members: {}};\n var child = xml.firstElementChild;\n while (child) {\n var tag = child.nodeName;\n if (Object.prototype.hasOwnProperty.call(shape.members, tag)) {\n // multiple tags of the same name makes it a list\n shape.members[tag].type = 'list';\n } else {\n shape.members[tag] = {name: tag};\n }\n child = child.nextElementSibling;\n }\n return parseStructure(xml, shape);\n}\n\n/**\n * @api private\n */\nmodule.exports = DomXmlParser;\n","var util = require('../util');\nvar XmlNode = require('./xml-node').XmlNode;\nvar XmlText = require('./xml-text').XmlText;\n\nfunction XmlBuilder() { }\n\nXmlBuilder.prototype.toXML = function(params, shape, rootElement, noEmpty) {\n var xml = new XmlNode(rootElement);\n applyNamespaces(xml, shape, true);\n serialize(xml, params, shape);\n return xml.children.length > 0 || noEmpty ? xml.toString() : '';\n};\n\nfunction serialize(xml, value, shape) {\n switch (shape.type) {\n case 'structure': return serializeStructure(xml, value, shape);\n case 'map': return serializeMap(xml, value, shape);\n case 'list': return serializeList(xml, value, shape);\n default: return serializeScalar(xml, value, shape);\n }\n}\n\nfunction serializeStructure(xml, params, shape) {\n util.arrayEach(shape.memberNames, function(memberName) {\n var memberShape = shape.members[memberName];\n if (memberShape.location !== 'body') return;\n\n var value = params[memberName];\n var name = memberShape.name;\n if (value !== undefined && value !== null) {\n if (memberShape.isXmlAttribute) {\n xml.addAttribute(name, value);\n } else if (memberShape.flattened) {\n serialize(xml, value, memberShape);\n } else {\n var element = new XmlNode(name);\n xml.addChildNode(element);\n applyNamespaces(element, memberShape);\n serialize(element, value, memberShape);\n }\n }\n });\n}\n\nfunction serializeMap(xml, map, shape) {\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n\n util.each(map, function(key, value) {\n var entry = new XmlNode(shape.flattened ? shape.name : 'entry');\n xml.addChildNode(entry);\n\n var entryKey = new XmlNode(xmlKey);\n var entryValue = new XmlNode(xmlValue);\n entry.addChildNode(entryKey);\n entry.addChildNode(entryValue);\n\n serialize(entryKey, key, shape.key);\n serialize(entryValue, value, shape.value);\n });\n}\n\nfunction serializeList(xml, list, shape) {\n if (shape.flattened) {\n util.arrayEach(list, function(value) {\n var name = shape.member.name || shape.name;\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n } else {\n util.arrayEach(list, function(value) {\n var name = shape.member.name || 'member';\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n }\n}\n\nfunction serializeScalar(xml, value, shape) {\n xml.addChildNode(\n new XmlText(shape.toWireFormat(value))\n );\n}\n\nfunction applyNamespaces(xml, shape, isRoot) {\n var uri, prefix = 'xmlns';\n if (shape.xmlNamespaceUri) {\n uri = shape.xmlNamespaceUri;\n if (shape.xmlNamespacePrefix) prefix += ':' + shape.xmlNamespacePrefix;\n } else if (isRoot && shape.api.xmlNamespaceUri) {\n uri = shape.api.xmlNamespaceUri;\n }\n\n if (uri) xml.addAttribute(prefix, uri);\n}\n\n/**\n * @api private\n */\nmodule.exports = XmlBuilder;\n","/**\n * Escapes characters that can not be in an XML attribute.\n */\nfunction escapeAttribute(value) {\n return value.replace(/&/g, '&').replace(/'/g, ''').replace(//g, '>').replace(/\"/g, '"');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n escapeAttribute: escapeAttribute\n};\n","/**\n * Escapes characters that can not be in an XML element.\n */\nfunction escapeElement(value) {\n return value.replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\\r/g, ' ')\n .replace(/\\n/g, ' ')\n .replace(/\\u0085/g, '…')\n .replace(/\\u2028/, '
');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n escapeElement: escapeElement\n};\n","var escapeAttribute = require('./escape-attribute').escapeAttribute;\n\n/**\n * Represents an XML node.\n * @api private\n */\nfunction XmlNode(name, children) {\n if (children === void 0) { children = []; }\n this.name = name;\n this.children = children;\n this.attributes = {};\n}\nXmlNode.prototype.addAttribute = function (name, value) {\n this.attributes[name] = value;\n return this;\n};\nXmlNode.prototype.addChildNode = function (child) {\n this.children.push(child);\n return this;\n};\nXmlNode.prototype.removeAttribute = function (name) {\n delete this.attributes[name];\n return this;\n};\nXmlNode.prototype.toString = function () {\n var hasChildren = Boolean(this.children.length);\n var xmlText = '<' + this.name;\n // add attributes\n var attributes = this.attributes;\n for (var i = 0, attributeNames = Object.keys(attributes); i < attributeNames.length; i++) {\n var attributeName = attributeNames[i];\n var attribute = attributes[attributeName];\n if (typeof attribute !== 'undefined' && attribute !== null) {\n xmlText += ' ' + attributeName + '=\\\"' + escapeAttribute('' + attribute) + '\\\"';\n }\n }\n return xmlText += !hasChildren ? '/>' : '>' + this.children.map(function (c) { return c.toString(); }).join('') + '';\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n XmlNode: XmlNode\n};\n","var escapeElement = require('./escape-element').escapeElement;\n\n/**\n * Represents an XML text value.\n * @api private\n */\nfunction XmlText(value) {\n this.value = value;\n}\n\nXmlText.prototype.toString = function () {\n return escapeElement('' + this.value);\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n XmlText: XmlText\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LRU_1 = require(\"./utils/LRU\");\nvar CACHE_SIZE = 1000;\n/**\n * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache]\n */\nvar EndpointCache = /** @class */ (function () {\n function EndpointCache(maxSize) {\n if (maxSize === void 0) { maxSize = CACHE_SIZE; }\n this.maxSize = maxSize;\n this.cache = new LRU_1.LRUCache(maxSize);\n }\n ;\n Object.defineProperty(EndpointCache.prototype, \"size\", {\n get: function () {\n return this.cache.length;\n },\n enumerable: true,\n configurable: true\n });\n EndpointCache.prototype.put = function (key, value) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var endpointRecord = this.populateValue(value);\n this.cache.put(keyString, endpointRecord);\n };\n EndpointCache.prototype.get = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var now = Date.now();\n var records = this.cache.get(keyString);\n if (records) {\n for (var i = records.length-1; i >= 0; i--) {\n var record = records[i];\n if (record.Expire < now) {\n records.splice(i, 1);\n }\n }\n if (records.length === 0) {\n this.cache.remove(keyString);\n return undefined;\n }\n }\n return records;\n };\n EndpointCache.getKeyString = function (key) {\n var identifiers = [];\n var identifierNames = Object.keys(key).sort();\n for (var i = 0; i < identifierNames.length; i++) {\n var identifierName = identifierNames[i];\n if (key[identifierName] === undefined)\n continue;\n identifiers.push(key[identifierName]);\n }\n return identifiers.join(' ');\n };\n EndpointCache.prototype.populateValue = function (endpoints) {\n var now = Date.now();\n return endpoints.map(function (endpoint) { return ({\n Address: endpoint.Address || '',\n Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000\n }); });\n };\n EndpointCache.prototype.empty = function () {\n this.cache.empty();\n };\n EndpointCache.prototype.remove = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n this.cache.remove(keyString);\n };\n return EndpointCache;\n}());\nexports.EndpointCache = EndpointCache;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedListNode = /** @class */ (function () {\n function LinkedListNode(key, value) {\n this.key = key;\n this.value = value;\n }\n return LinkedListNode;\n}());\nvar LRUCache = /** @class */ (function () {\n function LRUCache(size) {\n this.nodeMap = {};\n this.size = 0;\n if (typeof size !== 'number' || size < 1) {\n throw new Error('Cache size can only be positive number');\n }\n this.sizeLimit = size;\n }\n Object.defineProperty(LRUCache.prototype, \"length\", {\n get: function () {\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n LRUCache.prototype.prependToList = function (node) {\n if (!this.headerNode) {\n this.tailNode = node;\n }\n else {\n this.headerNode.prev = node;\n node.next = this.headerNode;\n }\n this.headerNode = node;\n this.size++;\n };\n LRUCache.prototype.removeFromTail = function () {\n if (!this.tailNode) {\n return undefined;\n }\n var node = this.tailNode;\n var prevNode = node.prev;\n if (prevNode) {\n prevNode.next = undefined;\n }\n node.prev = undefined;\n this.tailNode = prevNode;\n this.size--;\n return node;\n };\n LRUCache.prototype.detachFromList = function (node) {\n if (this.headerNode === node) {\n this.headerNode = node.next;\n }\n if (this.tailNode === node) {\n this.tailNode = node.prev;\n }\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n node.next = undefined;\n node.prev = undefined;\n this.size--;\n };\n LRUCache.prototype.get = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n this.prependToList(node);\n return node.value;\n }\n };\n LRUCache.prototype.remove = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n LRUCache.prototype.put = function (key, value) {\n if (this.nodeMap[key]) {\n this.remove(key);\n }\n else if (this.size === this.sizeLimit) {\n var tailNode = this.removeFromTail();\n var key_1 = tailNode.key;\n delete this.nodeMap[key_1];\n }\n var newNode = new LinkedListNode(key, value);\n this.nodeMap[key] = newNode;\n this.prependToList(newNode);\n };\n LRUCache.prototype.empty = function () {\n var keys = Object.keys(this.nodeMap);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n return LRUCache;\n}());\nexports.LRUCache = LRUCache;","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","(function(exports) {\n \"use strict\";\n\n function isArray(obj) {\n if (obj !== null) {\n return Object.prototype.toString.call(obj) === \"[object Array]\";\n } else {\n return false;\n }\n }\n\n function isObject(obj) {\n if (obj !== null) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n } else {\n return false;\n }\n }\n\n function strictDeepEqual(first, second) {\n // Check the scalar case first.\n if (first === second) {\n return true;\n }\n\n // Check if they are the same type.\n var firstType = Object.prototype.toString.call(first);\n if (firstType !== Object.prototype.toString.call(second)) {\n return false;\n }\n // We know that first and second have the same type so we can just check the\n // first type from now on.\n if (isArray(first) === true) {\n // Short circuit if they're not the same length;\n if (first.length !== second.length) {\n return false;\n }\n for (var i = 0; i < first.length; i++) {\n if (strictDeepEqual(first[i], second[i]) === false) {\n return false;\n }\n }\n return true;\n }\n if (isObject(first) === true) {\n // An object is equal if it has the same key/value pairs.\n var keysSeen = {};\n for (var key in first) {\n if (hasOwnProperty.call(first, key)) {\n if (strictDeepEqual(first[key], second[key]) === false) {\n return false;\n }\n keysSeen[key] = true;\n }\n }\n // Now check that there aren't any keys in second that weren't\n // in first.\n for (var key2 in second) {\n if (hasOwnProperty.call(second, key2)) {\n if (keysSeen[key2] !== true) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n function isFalse(obj) {\n // From the spec:\n // A false value corresponds to the following values:\n // Empty list\n // Empty object\n // Empty string\n // False boolean\n // null value\n\n // First check the scalar values.\n if (obj === \"\" || obj === false || obj === null) {\n return true;\n } else if (isArray(obj) && obj.length === 0) {\n // Check for an empty array.\n return true;\n } else if (isObject(obj)) {\n // Check for an empty object.\n for (var key in obj) {\n // If there are any keys, then\n // the object is not empty so the object\n // is not false.\n if (obj.hasOwnProperty(key)) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n }\n\n function objValues(obj) {\n var keys = Object.keys(obj);\n var values = [];\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n return values;\n }\n\n function merge(a, b) {\n var merged = {};\n for (var key in a) {\n merged[key] = a[key];\n }\n for (var key2 in b) {\n merged[key2] = b[key2];\n }\n return merged;\n }\n\n var trimLeft;\n if (typeof String.prototype.trimLeft === \"function\") {\n trimLeft = function(str) {\n return str.trimLeft();\n };\n } else {\n trimLeft = function(str) {\n return str.match(/^\\s*(.*)/)[1];\n };\n }\n\n // Type constants used to define functions.\n var TYPE_NUMBER = 0;\n var TYPE_ANY = 1;\n var TYPE_STRING = 2;\n var TYPE_ARRAY = 3;\n var TYPE_OBJECT = 4;\n var TYPE_BOOLEAN = 5;\n var TYPE_EXPREF = 6;\n var TYPE_NULL = 7;\n var TYPE_ARRAY_NUMBER = 8;\n var TYPE_ARRAY_STRING = 9;\n\n var TOK_EOF = \"EOF\";\n var TOK_UNQUOTEDIDENTIFIER = \"UnquotedIdentifier\";\n var TOK_QUOTEDIDENTIFIER = \"QuotedIdentifier\";\n var TOK_RBRACKET = \"Rbracket\";\n var TOK_RPAREN = \"Rparen\";\n var TOK_COMMA = \"Comma\";\n var TOK_COLON = \"Colon\";\n var TOK_RBRACE = \"Rbrace\";\n var TOK_NUMBER = \"Number\";\n var TOK_CURRENT = \"Current\";\n var TOK_EXPREF = \"Expref\";\n var TOK_PIPE = \"Pipe\";\n var TOK_OR = \"Or\";\n var TOK_AND = \"And\";\n var TOK_EQ = \"EQ\";\n var TOK_GT = \"GT\";\n var TOK_LT = \"LT\";\n var TOK_GTE = \"GTE\";\n var TOK_LTE = \"LTE\";\n var TOK_NE = \"NE\";\n var TOK_FLATTEN = \"Flatten\";\n var TOK_STAR = \"Star\";\n var TOK_FILTER = \"Filter\";\n var TOK_DOT = \"Dot\";\n var TOK_NOT = \"Not\";\n var TOK_LBRACE = \"Lbrace\";\n var TOK_LBRACKET = \"Lbracket\";\n var TOK_LPAREN= \"Lparen\";\n var TOK_LITERAL= \"Literal\";\n\n // The \"&\", \"[\", \"<\", \">\" tokens\n // are not in basicToken because\n // there are two token variants\n // (\"&&\", \"[?\", \"<=\", \">=\"). This is specially handled\n // below.\n\n var basicTokens = {\n \".\": TOK_DOT,\n \"*\": TOK_STAR,\n \",\": TOK_COMMA,\n \":\": TOK_COLON,\n \"{\": TOK_LBRACE,\n \"}\": TOK_RBRACE,\n \"]\": TOK_RBRACKET,\n \"(\": TOK_LPAREN,\n \")\": TOK_RPAREN,\n \"@\": TOK_CURRENT\n };\n\n var operatorStartToken = {\n \"<\": true,\n \">\": true,\n \"=\": true,\n \"!\": true\n };\n\n var skipChars = {\n \" \": true,\n \"\\t\": true,\n \"\\n\": true\n };\n\n\n function isAlpha(ch) {\n return (ch >= \"a\" && ch <= \"z\") ||\n (ch >= \"A\" && ch <= \"Z\") ||\n ch === \"_\";\n }\n\n function isNum(ch) {\n return (ch >= \"0\" && ch <= \"9\") ||\n ch === \"-\";\n }\n function isAlphaNum(ch) {\n return (ch >= \"a\" && ch <= \"z\") ||\n (ch >= \"A\" && ch <= \"Z\") ||\n (ch >= \"0\" && ch <= \"9\") ||\n ch === \"_\";\n }\n\n function Lexer() {\n }\n Lexer.prototype = {\n tokenize: function(stream) {\n var tokens = [];\n this._current = 0;\n var start;\n var identifier;\n var token;\n while (this._current < stream.length) {\n if (isAlpha(stream[this._current])) {\n start = this._current;\n identifier = this._consumeUnquotedIdentifier(stream);\n tokens.push({type: TOK_UNQUOTEDIDENTIFIER,\n value: identifier,\n start: start});\n } else if (basicTokens[stream[this._current]] !== undefined) {\n tokens.push({type: basicTokens[stream[this._current]],\n value: stream[this._current],\n start: this._current});\n this._current++;\n } else if (isNum(stream[this._current])) {\n token = this._consumeNumber(stream);\n tokens.push(token);\n } else if (stream[this._current] === \"[\") {\n // No need to increment this._current. This happens\n // in _consumeLBracket\n token = this._consumeLBracket(stream);\n tokens.push(token);\n } else if (stream[this._current] === \"\\\"\") {\n start = this._current;\n identifier = this._consumeQuotedIdentifier(stream);\n tokens.push({type: TOK_QUOTEDIDENTIFIER,\n value: identifier,\n start: start});\n } else if (stream[this._current] === \"'\") {\n start = this._current;\n identifier = this._consumeRawStringLiteral(stream);\n tokens.push({type: TOK_LITERAL,\n value: identifier,\n start: start});\n } else if (stream[this._current] === \"`\") {\n start = this._current;\n var literal = this._consumeLiteral(stream);\n tokens.push({type: TOK_LITERAL,\n value: literal,\n start: start});\n } else if (operatorStartToken[stream[this._current]] !== undefined) {\n tokens.push(this._consumeOperator(stream));\n } else if (skipChars[stream[this._current]] !== undefined) {\n // Ignore whitespace.\n this._current++;\n } else if (stream[this._current] === \"&\") {\n start = this._current;\n this._current++;\n if (stream[this._current] === \"&\") {\n this._current++;\n tokens.push({type: TOK_AND, value: \"&&\", start: start});\n } else {\n tokens.push({type: TOK_EXPREF, value: \"&\", start: start});\n }\n } else if (stream[this._current] === \"|\") {\n start = this._current;\n this._current++;\n if (stream[this._current] === \"|\") {\n this._current++;\n tokens.push({type: TOK_OR, value: \"||\", start: start});\n } else {\n tokens.push({type: TOK_PIPE, value: \"|\", start: start});\n }\n } else {\n var error = new Error(\"Unknown character:\" + stream[this._current]);\n error.name = \"LexerError\";\n throw error;\n }\n }\n return tokens;\n },\n\n _consumeUnquotedIdentifier: function(stream) {\n var start = this._current;\n this._current++;\n while (this._current < stream.length && isAlphaNum(stream[this._current])) {\n this._current++;\n }\n return stream.slice(start, this._current);\n },\n\n _consumeQuotedIdentifier: function(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n while (stream[this._current] !== \"\\\"\" && this._current < maxLength) {\n // You can escape a double quote and you can escape an escape.\n var current = this._current;\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n stream[current + 1] === \"\\\"\")) {\n current += 2;\n } else {\n current++;\n }\n this._current = current;\n }\n this._current++;\n return JSON.parse(stream.slice(start, this._current));\n },\n\n _consumeRawStringLiteral: function(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n while (stream[this._current] !== \"'\" && this._current < maxLength) {\n // You can escape a single quote and you can escape an escape.\n var current = this._current;\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n stream[current + 1] === \"'\")) {\n current += 2;\n } else {\n current++;\n }\n this._current = current;\n }\n this._current++;\n var literal = stream.slice(start + 1, this._current - 1);\n return literal.replace(\"\\\\'\", \"'\");\n },\n\n _consumeNumber: function(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n while (isNum(stream[this._current]) && this._current < maxLength) {\n this._current++;\n }\n var value = parseInt(stream.slice(start, this._current));\n return {type: TOK_NUMBER, value: value, start: start};\n },\n\n _consumeLBracket: function(stream) {\n var start = this._current;\n this._current++;\n if (stream[this._current] === \"?\") {\n this._current++;\n return {type: TOK_FILTER, value: \"[?\", start: start};\n } else if (stream[this._current] === \"]\") {\n this._current++;\n return {type: TOK_FLATTEN, value: \"[]\", start: start};\n } else {\n return {type: TOK_LBRACKET, value: \"[\", start: start};\n }\n },\n\n _consumeOperator: function(stream) {\n var start = this._current;\n var startingChar = stream[start];\n this._current++;\n if (startingChar === \"!\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_NE, value: \"!=\", start: start};\n } else {\n return {type: TOK_NOT, value: \"!\", start: start};\n }\n } else if (startingChar === \"<\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_LTE, value: \"<=\", start: start};\n } else {\n return {type: TOK_LT, value: \"<\", start: start};\n }\n } else if (startingChar === \">\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_GTE, value: \">=\", start: start};\n } else {\n return {type: TOK_GT, value: \">\", start: start};\n }\n } else if (startingChar === \"=\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_EQ, value: \"==\", start: start};\n }\n }\n },\n\n _consumeLiteral: function(stream) {\n this._current++;\n var start = this._current;\n var maxLength = stream.length;\n var literal;\n while(stream[this._current] !== \"`\" && this._current < maxLength) {\n // You can escape a literal char or you can escape the escape.\n var current = this._current;\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n stream[current + 1] === \"`\")) {\n current += 2;\n } else {\n current++;\n }\n this._current = current;\n }\n var literalString = trimLeft(stream.slice(start, this._current));\n literalString = literalString.replace(\"\\\\`\", \"`\");\n if (this._looksLikeJSON(literalString)) {\n literal = JSON.parse(literalString);\n } else {\n // Try to JSON parse it as \"\"\n literal = JSON.parse(\"\\\"\" + literalString + \"\\\"\");\n }\n // +1 gets us to the ending \"`\", +1 to move on to the next char.\n this._current++;\n return literal;\n },\n\n _looksLikeJSON: function(literalString) {\n var startingChars = \"[{\\\"\";\n var jsonLiterals = [\"true\", \"false\", \"null\"];\n var numberLooking = \"-0123456789\";\n\n if (literalString === \"\") {\n return false;\n } else if (startingChars.indexOf(literalString[0]) >= 0) {\n return true;\n } else if (jsonLiterals.indexOf(literalString) >= 0) {\n return true;\n } else if (numberLooking.indexOf(literalString[0]) >= 0) {\n try {\n JSON.parse(literalString);\n return true;\n } catch (ex) {\n return false;\n }\n } else {\n return false;\n }\n }\n };\n\n var bindingPower = {};\n bindingPower[TOK_EOF] = 0;\n bindingPower[TOK_UNQUOTEDIDENTIFIER] = 0;\n bindingPower[TOK_QUOTEDIDENTIFIER] = 0;\n bindingPower[TOK_RBRACKET] = 0;\n bindingPower[TOK_RPAREN] = 0;\n bindingPower[TOK_COMMA] = 0;\n bindingPower[TOK_RBRACE] = 0;\n bindingPower[TOK_NUMBER] = 0;\n bindingPower[TOK_CURRENT] = 0;\n bindingPower[TOK_EXPREF] = 0;\n bindingPower[TOK_PIPE] = 1;\n bindingPower[TOK_OR] = 2;\n bindingPower[TOK_AND] = 3;\n bindingPower[TOK_EQ] = 5;\n bindingPower[TOK_GT] = 5;\n bindingPower[TOK_LT] = 5;\n bindingPower[TOK_GTE] = 5;\n bindingPower[TOK_LTE] = 5;\n bindingPower[TOK_NE] = 5;\n bindingPower[TOK_FLATTEN] = 9;\n bindingPower[TOK_STAR] = 20;\n bindingPower[TOK_FILTER] = 21;\n bindingPower[TOK_DOT] = 40;\n bindingPower[TOK_NOT] = 45;\n bindingPower[TOK_LBRACE] = 50;\n bindingPower[TOK_LBRACKET] = 55;\n bindingPower[TOK_LPAREN] = 60;\n\n function Parser() {\n }\n\n Parser.prototype = {\n parse: function(expression) {\n this._loadTokens(expression);\n this.index = 0;\n var ast = this.expression(0);\n if (this._lookahead(0) !== TOK_EOF) {\n var t = this._lookaheadToken(0);\n var error = new Error(\n \"Unexpected token type: \" + t.type + \", value: \" + t.value);\n error.name = \"ParserError\";\n throw error;\n }\n return ast;\n },\n\n _loadTokens: function(expression) {\n var lexer = new Lexer();\n var tokens = lexer.tokenize(expression);\n tokens.push({type: TOK_EOF, value: \"\", start: expression.length});\n this.tokens = tokens;\n },\n\n expression: function(rbp) {\n var leftToken = this._lookaheadToken(0);\n this._advance();\n var left = this.nud(leftToken);\n var currentToken = this._lookahead(0);\n while (rbp < bindingPower[currentToken]) {\n this._advance();\n left = this.led(currentToken, left);\n currentToken = this._lookahead(0);\n }\n return left;\n },\n\n _lookahead: function(number) {\n return this.tokens[this.index + number].type;\n },\n\n _lookaheadToken: function(number) {\n return this.tokens[this.index + number];\n },\n\n _advance: function() {\n this.index++;\n },\n\n nud: function(token) {\n var left;\n var right;\n var expression;\n switch (token.type) {\n case TOK_LITERAL:\n return {type: \"Literal\", value: token.value};\n case TOK_UNQUOTEDIDENTIFIER:\n return {type: \"Field\", name: token.value};\n case TOK_QUOTEDIDENTIFIER:\n var node = {type: \"Field\", name: token.value};\n if (this._lookahead(0) === TOK_LPAREN) {\n throw new Error(\"Quoted identifier not allowed for function names.\");\n } else {\n return node;\n }\n break;\n case TOK_NOT:\n right = this.expression(bindingPower.Not);\n return {type: \"NotExpression\", children: [right]};\n case TOK_STAR:\n left = {type: \"Identity\"};\n right = null;\n if (this._lookahead(0) === TOK_RBRACKET) {\n // This can happen in a multiselect,\n // [a, b, *]\n right = {type: \"Identity\"};\n } else {\n right = this._parseProjectionRHS(bindingPower.Star);\n }\n return {type: \"ValueProjection\", children: [left, right]};\n case TOK_FILTER:\n return this.led(token.type, {type: \"Identity\"});\n case TOK_LBRACE:\n return this._parseMultiselectHash();\n case TOK_FLATTEN:\n left = {type: TOK_FLATTEN, children: [{type: \"Identity\"}]};\n right = this._parseProjectionRHS(bindingPower.Flatten);\n return {type: \"Projection\", children: [left, right]};\n case TOK_LBRACKET:\n if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {\n right = this._parseIndexExpression();\n return this._projectIfSlice({type: \"Identity\"}, right);\n } else if (this._lookahead(0) === TOK_STAR &&\n this._lookahead(1) === TOK_RBRACKET) {\n this._advance();\n this._advance();\n right = this._parseProjectionRHS(bindingPower.Star);\n return {type: \"Projection\",\n children: [{type: \"Identity\"}, right]};\n } else {\n return this._parseMultiselectList();\n }\n break;\n case TOK_CURRENT:\n return {type: TOK_CURRENT};\n case TOK_EXPREF:\n expression = this.expression(bindingPower.Expref);\n return {type: \"ExpressionReference\", children: [expression]};\n case TOK_LPAREN:\n var args = [];\n while (this._lookahead(0) !== TOK_RPAREN) {\n if (this._lookahead(0) === TOK_CURRENT) {\n expression = {type: TOK_CURRENT};\n this._advance();\n } else {\n expression = this.expression(0);\n }\n args.push(expression);\n }\n this._match(TOK_RPAREN);\n return args[0];\n default:\n this._errorToken(token);\n }\n },\n\n led: function(tokenName, left) {\n var right;\n switch(tokenName) {\n case TOK_DOT:\n var rbp = bindingPower.Dot;\n if (this._lookahead(0) !== TOK_STAR) {\n right = this._parseDotRHS(rbp);\n return {type: \"Subexpression\", children: [left, right]};\n } else {\n // Creating a projection.\n this._advance();\n right = this._parseProjectionRHS(rbp);\n return {type: \"ValueProjection\", children: [left, right]};\n }\n break;\n case TOK_PIPE:\n right = this.expression(bindingPower.Pipe);\n return {type: TOK_PIPE, children: [left, right]};\n case TOK_OR:\n right = this.expression(bindingPower.Or);\n return {type: \"OrExpression\", children: [left, right]};\n case TOK_AND:\n right = this.expression(bindingPower.And);\n return {type: \"AndExpression\", children: [left, right]};\n case TOK_LPAREN:\n var name = left.name;\n var args = [];\n var expression, node;\n while (this._lookahead(0) !== TOK_RPAREN) {\n if (this._lookahead(0) === TOK_CURRENT) {\n expression = {type: TOK_CURRENT};\n this._advance();\n } else {\n expression = this.expression(0);\n }\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n }\n args.push(expression);\n }\n this._match(TOK_RPAREN);\n node = {type: \"Function\", name: name, children: args};\n return node;\n case TOK_FILTER:\n var condition = this.expression(0);\n this._match(TOK_RBRACKET);\n if (this._lookahead(0) === TOK_FLATTEN) {\n right = {type: \"Identity\"};\n } else {\n right = this._parseProjectionRHS(bindingPower.Filter);\n }\n return {type: \"FilterProjection\", children: [left, right, condition]};\n case TOK_FLATTEN:\n var leftNode = {type: TOK_FLATTEN, children: [left]};\n var rightNode = this._parseProjectionRHS(bindingPower.Flatten);\n return {type: \"Projection\", children: [leftNode, rightNode]};\n case TOK_EQ:\n case TOK_NE:\n case TOK_GT:\n case TOK_GTE:\n case TOK_LT:\n case TOK_LTE:\n return this._parseComparator(left, tokenName);\n case TOK_LBRACKET:\n var token = this._lookaheadToken(0);\n if (token.type === TOK_NUMBER || token.type === TOK_COLON) {\n right = this._parseIndexExpression();\n return this._projectIfSlice(left, right);\n } else {\n this._match(TOK_STAR);\n this._match(TOK_RBRACKET);\n right = this._parseProjectionRHS(bindingPower.Star);\n return {type: \"Projection\", children: [left, right]};\n }\n break;\n default:\n this._errorToken(this._lookaheadToken(0));\n }\n },\n\n _match: function(tokenType) {\n if (this._lookahead(0) === tokenType) {\n this._advance();\n } else {\n var t = this._lookaheadToken(0);\n var error = new Error(\"Expected \" + tokenType + \", got: \" + t.type);\n error.name = \"ParserError\";\n throw error;\n }\n },\n\n _errorToken: function(token) {\n var error = new Error(\"Invalid token (\" +\n token.type + \"): \\\"\" +\n token.value + \"\\\"\");\n error.name = \"ParserError\";\n throw error;\n },\n\n\n _parseIndexExpression: function() {\n if (this._lookahead(0) === TOK_COLON || this._lookahead(1) === TOK_COLON) {\n return this._parseSliceExpression();\n } else {\n var node = {\n type: \"Index\",\n value: this._lookaheadToken(0).value};\n this._advance();\n this._match(TOK_RBRACKET);\n return node;\n }\n },\n\n _projectIfSlice: function(left, right) {\n var indexExpr = {type: \"IndexExpression\", children: [left, right]};\n if (right.type === \"Slice\") {\n return {\n type: \"Projection\",\n children: [indexExpr, this._parseProjectionRHS(bindingPower.Star)]\n };\n } else {\n return indexExpr;\n }\n },\n\n _parseSliceExpression: function() {\n // [start:end:step] where each part is optional, as well as the last\n // colon.\n var parts = [null, null, null];\n var index = 0;\n var currentToken = this._lookahead(0);\n while (currentToken !== TOK_RBRACKET && index < 3) {\n if (currentToken === TOK_COLON) {\n index++;\n this._advance();\n } else if (currentToken === TOK_NUMBER) {\n parts[index] = this._lookaheadToken(0).value;\n this._advance();\n } else {\n var t = this._lookahead(0);\n var error = new Error(\"Syntax error, unexpected token: \" +\n t.value + \"(\" + t.type + \")\");\n error.name = \"Parsererror\";\n throw error;\n }\n currentToken = this._lookahead(0);\n }\n this._match(TOK_RBRACKET);\n return {\n type: \"Slice\",\n children: parts\n };\n },\n\n _parseComparator: function(left, comparator) {\n var right = this.expression(bindingPower[comparator]);\n return {type: \"Comparator\", name: comparator, children: [left, right]};\n },\n\n _parseDotRHS: function(rbp) {\n var lookahead = this._lookahead(0);\n var exprTokens = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER, TOK_STAR];\n if (exprTokens.indexOf(lookahead) >= 0) {\n return this.expression(rbp);\n } else if (lookahead === TOK_LBRACKET) {\n this._match(TOK_LBRACKET);\n return this._parseMultiselectList();\n } else if (lookahead === TOK_LBRACE) {\n this._match(TOK_LBRACE);\n return this._parseMultiselectHash();\n }\n },\n\n _parseProjectionRHS: function(rbp) {\n var right;\n if (bindingPower[this._lookahead(0)] < 10) {\n right = {type: \"Identity\"};\n } else if (this._lookahead(0) === TOK_LBRACKET) {\n right = this.expression(rbp);\n } else if (this._lookahead(0) === TOK_FILTER) {\n right = this.expression(rbp);\n } else if (this._lookahead(0) === TOK_DOT) {\n this._match(TOK_DOT);\n right = this._parseDotRHS(rbp);\n } else {\n var t = this._lookaheadToken(0);\n var error = new Error(\"Sytanx error, unexpected token: \" +\n t.value + \"(\" + t.type + \")\");\n error.name = \"ParserError\";\n throw error;\n }\n return right;\n },\n\n _parseMultiselectList: function() {\n var expressions = [];\n while (this._lookahead(0) !== TOK_RBRACKET) {\n var expression = this.expression(0);\n expressions.push(expression);\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n if (this._lookahead(0) === TOK_RBRACKET) {\n throw new Error(\"Unexpected token Rbracket\");\n }\n }\n }\n this._match(TOK_RBRACKET);\n return {type: \"MultiSelectList\", children: expressions};\n },\n\n _parseMultiselectHash: function() {\n var pairs = [];\n var identifierTypes = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER];\n var keyToken, keyName, value, node;\n for (;;) {\n keyToken = this._lookaheadToken(0);\n if (identifierTypes.indexOf(keyToken.type) < 0) {\n throw new Error(\"Expecting an identifier token, got: \" +\n keyToken.type);\n }\n keyName = keyToken.value;\n this._advance();\n this._match(TOK_COLON);\n value = this.expression(0);\n node = {type: \"KeyValuePair\", name: keyName, value: value};\n pairs.push(node);\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n } else if (this._lookahead(0) === TOK_RBRACE) {\n this._match(TOK_RBRACE);\n break;\n }\n }\n return {type: \"MultiSelectHash\", children: pairs};\n }\n };\n\n\n function TreeInterpreter(runtime) {\n this.runtime = runtime;\n }\n\n TreeInterpreter.prototype = {\n search: function(node, value) {\n return this.visit(node, value);\n },\n\n visit: function(node, value) {\n var matched, current, result, first, second, field, left, right, collected, i;\n switch (node.type) {\n case \"Field\":\n if (value === null ) {\n return null;\n } else if (isObject(value)) {\n field = value[node.name];\n if (field === undefined) {\n return null;\n } else {\n return field;\n }\n } else {\n return null;\n }\n break;\n case \"Subexpression\":\n result = this.visit(node.children[0], value);\n for (i = 1; i < node.children.length; i++) {\n result = this.visit(node.children[1], result);\n if (result === null) {\n return null;\n }\n }\n return result;\n case \"IndexExpression\":\n left = this.visit(node.children[0], value);\n right = this.visit(node.children[1], left);\n return right;\n case \"Index\":\n if (!isArray(value)) {\n return null;\n }\n var index = node.value;\n if (index < 0) {\n index = value.length + index;\n }\n result = value[index];\n if (result === undefined) {\n result = null;\n }\n return result;\n case \"Slice\":\n if (!isArray(value)) {\n return null;\n }\n var sliceParams = node.children.slice(0);\n var computed = this.computeSliceParams(value.length, sliceParams);\n var start = computed[0];\n var stop = computed[1];\n var step = computed[2];\n result = [];\n if (step > 0) {\n for (i = start; i < stop; i += step) {\n result.push(value[i]);\n }\n } else {\n for (i = start; i > stop; i += step) {\n result.push(value[i]);\n }\n }\n return result;\n case \"Projection\":\n // Evaluate left child.\n var base = this.visit(node.children[0], value);\n if (!isArray(base)) {\n return null;\n }\n collected = [];\n for (i = 0; i < base.length; i++) {\n current = this.visit(node.children[1], base[i]);\n if (current !== null) {\n collected.push(current);\n }\n }\n return collected;\n case \"ValueProjection\":\n // Evaluate left child.\n base = this.visit(node.children[0], value);\n if (!isObject(base)) {\n return null;\n }\n collected = [];\n var values = objValues(base);\n for (i = 0; i < values.length; i++) {\n current = this.visit(node.children[1], values[i]);\n if (current !== null) {\n collected.push(current);\n }\n }\n return collected;\n case \"FilterProjection\":\n base = this.visit(node.children[0], value);\n if (!isArray(base)) {\n return null;\n }\n var filtered = [];\n var finalResults = [];\n for (i = 0; i < base.length; i++) {\n matched = this.visit(node.children[2], base[i]);\n if (!isFalse(matched)) {\n filtered.push(base[i]);\n }\n }\n for (var j = 0; j < filtered.length; j++) {\n current = this.visit(node.children[1], filtered[j]);\n if (current !== null) {\n finalResults.push(current);\n }\n }\n return finalResults;\n case \"Comparator\":\n first = this.visit(node.children[0], value);\n second = this.visit(node.children[1], value);\n switch(node.name) {\n case TOK_EQ:\n result = strictDeepEqual(first, second);\n break;\n case TOK_NE:\n result = !strictDeepEqual(first, second);\n break;\n case TOK_GT:\n result = first > second;\n break;\n case TOK_GTE:\n result = first >= second;\n break;\n case TOK_LT:\n result = first < second;\n break;\n case TOK_LTE:\n result = first <= second;\n break;\n default:\n throw new Error(\"Unknown comparator: \" + node.name);\n }\n return result;\n case TOK_FLATTEN:\n var original = this.visit(node.children[0], value);\n if (!isArray(original)) {\n return null;\n }\n var merged = [];\n for (i = 0; i < original.length; i++) {\n current = original[i];\n if (isArray(current)) {\n merged.push.apply(merged, current);\n } else {\n merged.push(current);\n }\n }\n return merged;\n case \"Identity\":\n return value;\n case \"MultiSelectList\":\n if (value === null) {\n return null;\n }\n collected = [];\n for (i = 0; i < node.children.length; i++) {\n collected.push(this.visit(node.children[i], value));\n }\n return collected;\n case \"MultiSelectHash\":\n if (value === null) {\n return null;\n }\n collected = {};\n var child;\n for (i = 0; i < node.children.length; i++) {\n child = node.children[i];\n collected[child.name] = this.visit(child.value, value);\n }\n return collected;\n case \"OrExpression\":\n matched = this.visit(node.children[0], value);\n if (isFalse(matched)) {\n matched = this.visit(node.children[1], value);\n }\n return matched;\n case \"AndExpression\":\n first = this.visit(node.children[0], value);\n\n if (isFalse(first) === true) {\n return first;\n }\n return this.visit(node.children[1], value);\n case \"NotExpression\":\n first = this.visit(node.children[0], value);\n return isFalse(first);\n case \"Literal\":\n return node.value;\n case TOK_PIPE:\n left = this.visit(node.children[0], value);\n return this.visit(node.children[1], left);\n case TOK_CURRENT:\n return value;\n case \"Function\":\n var resolvedArgs = [];\n for (i = 0; i < node.children.length; i++) {\n resolvedArgs.push(this.visit(node.children[i], value));\n }\n return this.runtime.callFunction(node.name, resolvedArgs);\n case \"ExpressionReference\":\n var refNode = node.children[0];\n // Tag the node with a specific attribute so the type\n // checker verify the type.\n refNode.jmespathType = TOK_EXPREF;\n return refNode;\n default:\n throw new Error(\"Unknown node type: \" + node.type);\n }\n },\n\n computeSliceParams: function(arrayLength, sliceParams) {\n var start = sliceParams[0];\n var stop = sliceParams[1];\n var step = sliceParams[2];\n var computed = [null, null, null];\n if (step === null) {\n step = 1;\n } else if (step === 0) {\n var error = new Error(\"Invalid slice, step cannot be 0\");\n error.name = \"RuntimeError\";\n throw error;\n }\n var stepValueNegative = step < 0 ? true : false;\n\n if (start === null) {\n start = stepValueNegative ? arrayLength - 1 : 0;\n } else {\n start = this.capSliceRange(arrayLength, start, step);\n }\n\n if (stop === null) {\n stop = stepValueNegative ? -1 : arrayLength;\n } else {\n stop = this.capSliceRange(arrayLength, stop, step);\n }\n computed[0] = start;\n computed[1] = stop;\n computed[2] = step;\n return computed;\n },\n\n capSliceRange: function(arrayLength, actualValue, step) {\n if (actualValue < 0) {\n actualValue += arrayLength;\n if (actualValue < 0) {\n actualValue = step < 0 ? -1 : 0;\n }\n } else if (actualValue >= arrayLength) {\n actualValue = step < 0 ? arrayLength - 1 : arrayLength;\n }\n return actualValue;\n }\n\n };\n\n function Runtime(interpreter) {\n this._interpreter = interpreter;\n this.functionTable = {\n // name: [function, ]\n // The can be:\n //\n // {\n // args: [[type1, type2], [type1, type2]],\n // variadic: true|false\n // }\n //\n // Each arg in the arg list is a list of valid types\n // (if the function is overloaded and supports multiple\n // types. If the type is \"any\" then no type checking\n // occurs on the argument. Variadic is optional\n // and if not provided is assumed to be false.\n abs: {_func: this._functionAbs, _signature: [{types: [TYPE_NUMBER]}]},\n avg: {_func: this._functionAvg, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n ceil: {_func: this._functionCeil, _signature: [{types: [TYPE_NUMBER]}]},\n contains: {\n _func: this._functionContains,\n _signature: [{types: [TYPE_STRING, TYPE_ARRAY]},\n {types: [TYPE_ANY]}]},\n \"ends_with\": {\n _func: this._functionEndsWith,\n _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n floor: {_func: this._functionFloor, _signature: [{types: [TYPE_NUMBER]}]},\n length: {\n _func: this._functionLength,\n _signature: [{types: [TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT]}]},\n map: {\n _func: this._functionMap,\n _signature: [{types: [TYPE_EXPREF]}, {types: [TYPE_ARRAY]}]},\n max: {\n _func: this._functionMax,\n _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n \"merge\": {\n _func: this._functionMerge,\n _signature: [{types: [TYPE_OBJECT], variadic: true}]\n },\n \"max_by\": {\n _func: this._functionMaxBy,\n _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n },\n sum: {_func: this._functionSum, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n \"starts_with\": {\n _func: this._functionStartsWith,\n _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n min: {\n _func: this._functionMin,\n _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n \"min_by\": {\n _func: this._functionMinBy,\n _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n },\n type: {_func: this._functionType, _signature: [{types: [TYPE_ANY]}]},\n keys: {_func: this._functionKeys, _signature: [{types: [TYPE_OBJECT]}]},\n values: {_func: this._functionValues, _signature: [{types: [TYPE_OBJECT]}]},\n sort: {_func: this._functionSort, _signature: [{types: [TYPE_ARRAY_STRING, TYPE_ARRAY_NUMBER]}]},\n \"sort_by\": {\n _func: this._functionSortBy,\n _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n },\n join: {\n _func: this._functionJoin,\n _signature: [\n {types: [TYPE_STRING]},\n {types: [TYPE_ARRAY_STRING]}\n ]\n },\n reverse: {\n _func: this._functionReverse,\n _signature: [{types: [TYPE_STRING, TYPE_ARRAY]}]},\n \"to_array\": {_func: this._functionToArray, _signature: [{types: [TYPE_ANY]}]},\n \"to_string\": {_func: this._functionToString, _signature: [{types: [TYPE_ANY]}]},\n \"to_number\": {_func: this._functionToNumber, _signature: [{types: [TYPE_ANY]}]},\n \"not_null\": {\n _func: this._functionNotNull,\n _signature: [{types: [TYPE_ANY], variadic: true}]\n }\n };\n }\n\n Runtime.prototype = {\n callFunction: function(name, resolvedArgs) {\n var functionEntry = this.functionTable[name];\n if (functionEntry === undefined) {\n throw new Error(\"Unknown function: \" + name + \"()\");\n }\n this._validateArgs(name, resolvedArgs, functionEntry._signature);\n return functionEntry._func.call(this, resolvedArgs);\n },\n\n _validateArgs: function(name, args, signature) {\n // Validating the args requires validating\n // the correct arity and the correct type of each arg.\n // If the last argument is declared as variadic, then we need\n // a minimum number of args to be required. Otherwise it has to\n // be an exact amount.\n var pluralized;\n if (signature[signature.length - 1].variadic) {\n if (args.length < signature.length) {\n pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n throw new Error(\"ArgumentError: \" + name + \"() \" +\n \"takes at least\" + signature.length + pluralized +\n \" but received \" + args.length);\n }\n } else if (args.length !== signature.length) {\n pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n throw new Error(\"ArgumentError: \" + name + \"() \" +\n \"takes \" + signature.length + pluralized +\n \" but received \" + args.length);\n }\n var currentSpec;\n var actualType;\n var typeMatched;\n for (var i = 0; i < signature.length; i++) {\n typeMatched = false;\n currentSpec = signature[i].types;\n actualType = this._getTypeName(args[i]);\n for (var j = 0; j < currentSpec.length; j++) {\n if (this._typeMatches(actualType, currentSpec[j], args[i])) {\n typeMatched = true;\n break;\n }\n }\n if (!typeMatched) {\n throw new Error(\"TypeError: \" + name + \"() \" +\n \"expected argument \" + (i + 1) +\n \" to be type \" + currentSpec +\n \" but received type \" + actualType +\n \" instead.\");\n }\n }\n },\n\n _typeMatches: function(actual, expected, argValue) {\n if (expected === TYPE_ANY) {\n return true;\n }\n if (expected === TYPE_ARRAY_STRING ||\n expected === TYPE_ARRAY_NUMBER ||\n expected === TYPE_ARRAY) {\n // The expected type can either just be array,\n // or it can require a specific subtype (array of numbers).\n //\n // The simplest case is if \"array\" with no subtype is specified.\n if (expected === TYPE_ARRAY) {\n return actual === TYPE_ARRAY;\n } else if (actual === TYPE_ARRAY) {\n // Otherwise we need to check subtypes.\n // I think this has potential to be improved.\n var subtype;\n if (expected === TYPE_ARRAY_NUMBER) {\n subtype = TYPE_NUMBER;\n } else if (expected === TYPE_ARRAY_STRING) {\n subtype = TYPE_STRING;\n }\n for (var i = 0; i < argValue.length; i++) {\n if (!this._typeMatches(\n this._getTypeName(argValue[i]), subtype,\n argValue[i])) {\n return false;\n }\n }\n return true;\n }\n } else {\n return actual === expected;\n }\n },\n _getTypeName: function(obj) {\n switch (Object.prototype.toString.call(obj)) {\n case \"[object String]\":\n return TYPE_STRING;\n case \"[object Number]\":\n return TYPE_NUMBER;\n case \"[object Array]\":\n return TYPE_ARRAY;\n case \"[object Boolean]\":\n return TYPE_BOOLEAN;\n case \"[object Null]\":\n return TYPE_NULL;\n case \"[object Object]\":\n // Check if it's an expref. If it has, it's been\n // tagged with a jmespathType attr of 'Expref';\n if (obj.jmespathType === TOK_EXPREF) {\n return TYPE_EXPREF;\n } else {\n return TYPE_OBJECT;\n }\n }\n },\n\n _functionStartsWith: function(resolvedArgs) {\n return resolvedArgs[0].lastIndexOf(resolvedArgs[1]) === 0;\n },\n\n _functionEndsWith: function(resolvedArgs) {\n var searchStr = resolvedArgs[0];\n var suffix = resolvedArgs[1];\n return searchStr.indexOf(suffix, searchStr.length - suffix.length) !== -1;\n },\n\n _functionReverse: function(resolvedArgs) {\n var typeName = this._getTypeName(resolvedArgs[0]);\n if (typeName === TYPE_STRING) {\n var originalStr = resolvedArgs[0];\n var reversedStr = \"\";\n for (var i = originalStr.length - 1; i >= 0; i--) {\n reversedStr += originalStr[i];\n }\n return reversedStr;\n } else {\n var reversedArray = resolvedArgs[0].slice(0);\n reversedArray.reverse();\n return reversedArray;\n }\n },\n\n _functionAbs: function(resolvedArgs) {\n return Math.abs(resolvedArgs[0]);\n },\n\n _functionCeil: function(resolvedArgs) {\n return Math.ceil(resolvedArgs[0]);\n },\n\n _functionAvg: function(resolvedArgs) {\n var sum = 0;\n var inputArray = resolvedArgs[0];\n for (var i = 0; i < inputArray.length; i++) {\n sum += inputArray[i];\n }\n return sum / inputArray.length;\n },\n\n _functionContains: function(resolvedArgs) {\n return resolvedArgs[0].indexOf(resolvedArgs[1]) >= 0;\n },\n\n _functionFloor: function(resolvedArgs) {\n return Math.floor(resolvedArgs[0]);\n },\n\n _functionLength: function(resolvedArgs) {\n if (!isObject(resolvedArgs[0])) {\n return resolvedArgs[0].length;\n } else {\n // As far as I can tell, there's no way to get the length\n // of an object without O(n) iteration through the object.\n return Object.keys(resolvedArgs[0]).length;\n }\n },\n\n _functionMap: function(resolvedArgs) {\n var mapped = [];\n var interpreter = this._interpreter;\n var exprefNode = resolvedArgs[0];\n var elements = resolvedArgs[1];\n for (var i = 0; i < elements.length; i++) {\n mapped.push(interpreter.visit(exprefNode, elements[i]));\n }\n return mapped;\n },\n\n _functionMerge: function(resolvedArgs) {\n var merged = {};\n for (var i = 0; i < resolvedArgs.length; i++) {\n var current = resolvedArgs[i];\n for (var key in current) {\n merged[key] = current[key];\n }\n }\n return merged;\n },\n\n _functionMax: function(resolvedArgs) {\n if (resolvedArgs[0].length > 0) {\n var typeName = this._getTypeName(resolvedArgs[0][0]);\n if (typeName === TYPE_NUMBER) {\n return Math.max.apply(Math, resolvedArgs[0]);\n } else {\n var elements = resolvedArgs[0];\n var maxElement = elements[0];\n for (var i = 1; i < elements.length; i++) {\n if (maxElement.localeCompare(elements[i]) < 0) {\n maxElement = elements[i];\n }\n }\n return maxElement;\n }\n } else {\n return null;\n }\n },\n\n _functionMin: function(resolvedArgs) {\n if (resolvedArgs[0].length > 0) {\n var typeName = this._getTypeName(resolvedArgs[0][0]);\n if (typeName === TYPE_NUMBER) {\n return Math.min.apply(Math, resolvedArgs[0]);\n } else {\n var elements = resolvedArgs[0];\n var minElement = elements[0];\n for (var i = 1; i < elements.length; i++) {\n if (elements[i].localeCompare(minElement) < 0) {\n minElement = elements[i];\n }\n }\n return minElement;\n }\n } else {\n return null;\n }\n },\n\n _functionSum: function(resolvedArgs) {\n var sum = 0;\n var listToSum = resolvedArgs[0];\n for (var i = 0; i < listToSum.length; i++) {\n sum += listToSum[i];\n }\n return sum;\n },\n\n _functionType: function(resolvedArgs) {\n switch (this._getTypeName(resolvedArgs[0])) {\n case TYPE_NUMBER:\n return \"number\";\n case TYPE_STRING:\n return \"string\";\n case TYPE_ARRAY:\n return \"array\";\n case TYPE_OBJECT:\n return \"object\";\n case TYPE_BOOLEAN:\n return \"boolean\";\n case TYPE_EXPREF:\n return \"expref\";\n case TYPE_NULL:\n return \"null\";\n }\n },\n\n _functionKeys: function(resolvedArgs) {\n return Object.keys(resolvedArgs[0]);\n },\n\n _functionValues: function(resolvedArgs) {\n var obj = resolvedArgs[0];\n var keys = Object.keys(obj);\n var values = [];\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n return values;\n },\n\n _functionJoin: function(resolvedArgs) {\n var joinChar = resolvedArgs[0];\n var listJoin = resolvedArgs[1];\n return listJoin.join(joinChar);\n },\n\n _functionToArray: function(resolvedArgs) {\n if (this._getTypeName(resolvedArgs[0]) === TYPE_ARRAY) {\n return resolvedArgs[0];\n } else {\n return [resolvedArgs[0]];\n }\n },\n\n _functionToString: function(resolvedArgs) {\n if (this._getTypeName(resolvedArgs[0]) === TYPE_STRING) {\n return resolvedArgs[0];\n } else {\n return JSON.stringify(resolvedArgs[0]);\n }\n },\n\n _functionToNumber: function(resolvedArgs) {\n var typeName = this._getTypeName(resolvedArgs[0]);\n var convertedValue;\n if (typeName === TYPE_NUMBER) {\n return resolvedArgs[0];\n } else if (typeName === TYPE_STRING) {\n convertedValue = +resolvedArgs[0];\n if (!isNaN(convertedValue)) {\n return convertedValue;\n }\n }\n return null;\n },\n\n _functionNotNull: function(resolvedArgs) {\n for (var i = 0; i < resolvedArgs.length; i++) {\n if (this._getTypeName(resolvedArgs[i]) !== TYPE_NULL) {\n return resolvedArgs[i];\n }\n }\n return null;\n },\n\n _functionSort: function(resolvedArgs) {\n var sortedArray = resolvedArgs[0].slice(0);\n sortedArray.sort();\n return sortedArray;\n },\n\n _functionSortBy: function(resolvedArgs) {\n var sortedArray = resolvedArgs[0].slice(0);\n if (sortedArray.length === 0) {\n return sortedArray;\n }\n var interpreter = this._interpreter;\n var exprefNode = resolvedArgs[1];\n var requiredType = this._getTypeName(\n interpreter.visit(exprefNode, sortedArray[0]));\n if ([TYPE_NUMBER, TYPE_STRING].indexOf(requiredType) < 0) {\n throw new Error(\"TypeError\");\n }\n var that = this;\n // In order to get a stable sort out of an unstable\n // sort algorithm, we decorate/sort/undecorate (DSU)\n // by creating a new list of [index, element] pairs.\n // In the cmp function, if the evaluated elements are\n // equal, then the index will be used as the tiebreaker.\n // After the decorated list has been sorted, it will be\n // undecorated to extract the original elements.\n var decorated = [];\n for (var i = 0; i < sortedArray.length; i++) {\n decorated.push([i, sortedArray[i]]);\n }\n decorated.sort(function(a, b) {\n var exprA = interpreter.visit(exprefNode, a[1]);\n var exprB = interpreter.visit(exprefNode, b[1]);\n if (that._getTypeName(exprA) !== requiredType) {\n throw new Error(\n \"TypeError: expected \" + requiredType + \", received \" +\n that._getTypeName(exprA));\n } else if (that._getTypeName(exprB) !== requiredType) {\n throw new Error(\n \"TypeError: expected \" + requiredType + \", received \" +\n that._getTypeName(exprB));\n }\n if (exprA > exprB) {\n return 1;\n } else if (exprA < exprB) {\n return -1;\n } else {\n // If they're equal compare the items by their\n // order to maintain relative order of equal keys\n // (i.e. to get a stable sort).\n return a[0] - b[0];\n }\n });\n // Undecorate: extract out the original list elements.\n for (var j = 0; j < decorated.length; j++) {\n sortedArray[j] = decorated[j][1];\n }\n return sortedArray;\n },\n\n _functionMaxBy: function(resolvedArgs) {\n var exprefNode = resolvedArgs[1];\n var resolvedArray = resolvedArgs[0];\n var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n var maxNumber = -Infinity;\n var maxRecord;\n var current;\n for (var i = 0; i < resolvedArray.length; i++) {\n current = keyFunction(resolvedArray[i]);\n if (current > maxNumber) {\n maxNumber = current;\n maxRecord = resolvedArray[i];\n }\n }\n return maxRecord;\n },\n\n _functionMinBy: function(resolvedArgs) {\n var exprefNode = resolvedArgs[1];\n var resolvedArray = resolvedArgs[0];\n var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n var minNumber = Infinity;\n var minRecord;\n var current;\n for (var i = 0; i < resolvedArray.length; i++) {\n current = keyFunction(resolvedArray[i]);\n if (current < minNumber) {\n minNumber = current;\n minRecord = resolvedArray[i];\n }\n }\n return minRecord;\n },\n\n createKeyFunction: function(exprefNode, allowedTypes) {\n var that = this;\n var interpreter = this._interpreter;\n var keyFunc = function(x) {\n var current = interpreter.visit(exprefNode, x);\n if (allowedTypes.indexOf(that._getTypeName(current)) < 0) {\n var msg = \"TypeError: expected one of \" + allowedTypes +\n \", received \" + that._getTypeName(current);\n throw new Error(msg);\n }\n return current;\n };\n return keyFunc;\n }\n\n };\n\n function compile(stream) {\n var parser = new Parser();\n var ast = parser.parse(stream);\n return ast;\n }\n\n function tokenize(stream) {\n var lexer = new Lexer();\n return lexer.tokenize(stream);\n }\n\n function search(data, expression) {\n var parser = new Parser();\n // This needs to be improved. Both the interpreter and runtime depend on\n // each other. The runtime needs the interpreter to support exprefs.\n // There's likely a clean way to avoid the cyclic dependency.\n var runtime = new Runtime();\n var interpreter = new TreeInterpreter(runtime);\n runtime._interpreter = interpreter;\n var node = parser.parse(expression);\n return interpreter.search(node, data);\n }\n\n exports.tokenize = tokenize;\n exports.compile = compile;\n exports.search = search;\n exports.strictDeepEqual = strictDeepEqual;\n})(typeof exports === \"undefined\" ? this.jmespath = {} : exports);\n","module.exports=function(){var e={715:function(e,t,o){var a,s=(a=o(191))&&\"object\"==typeof a&&\"default\"in a?a.default:a,n=/https?|ftp|gopher|file/;function r(e){\"string\"==typeof e&&(e=d(e));var t=function(e,t,r){var o=e.auth,a=e.hostname,s=e.protocol||\"\",n=e.pathname||\"\",p=e.hash||\"\",c=e.query||\"\",h=!1;o=o?encodeURIComponent(o).replace(/%3A/i,\":\")+\"@\":\"\",e.host?h=o+e.host:a&&(h=o+(~a.indexOf(\":\")?\"[\"+a+\"]\":a),e.port&&(h+=\":\"+e.port)),c&&\"object\"==typeof c&&(c=t.encode(c));var l=e.search||c&&\"?\"+c||\"\";return s&&\":\"!==s.substr(-1)&&(s+=\":\"),e.slashes||(!s||r.test(s))&&!1!==h?(h=\"//\"+(h||\"\"),n&&\"/\"!==n[0]&&(n=\"/\"+n)):h||(h=\"\"),p&&\"#\"!==p[0]&&(p=\"#\"+p),l&&\"?\"!==l[0]&&(l=\"?\"+l),{protocol:s,host:h,pathname:n=n.replace(/[?#]/g,encodeURIComponent),search:l=l.replace(\"#\",\"%23\"),hash:p}}(e,s,n);return\"\"+t.protocol+t.host+t.pathname+t.search+t.hash}var p=\"http://\",c=\"w.w\",i=p+c,u=/^([a-z0-9.+-]*:\\/\\/\\/)([a-z0-9.+-]:\\/*)?/i,f=/https?|ftp|gopher|file/;function h(e,t){var o=\"string\"==typeof e?d(e):e;e=\"object\"==typeof e?r(e):e;var a=d(t),s=\"\";o.protocol&&!o.slashes&&(s=o.protocol,e=e.replace(o.protocol,\"\"),s+=\"/\"===t[0]||\"/\"===e[0]?\"/\":\"\"),s&&a.protocol&&(s=\"\",a.slashes||(s=a.protocol,t=t.replace(a.protocol,\"\")));var n=e.match(u);n&&!a.protocol&&(e=e.substr((s=n[1]+(n[2]||\"\")).length),/^\\/\\/[^/]/.test(t)&&(s=s.slice(0,-1)));var c=new URL(e,i+\"/\"),h=new URL(t,c).toString().replace(i,\"\"),l=a.protocol||o.protocol;return l+=o.slashes||a.slashes?\"//\":\"\",!s&&l?h=h.replace(p,l):s&&(h=h.replace(p,\"\")),f.test(h)||~t.indexOf(\".\")||\"/\"===e.slice(-1)||\"/\"===t.slice(-1)||\"/\"!==h.slice(-1)||(h=h.slice(0,-1)),s&&(h=s+(\"/\"===h[0]?h.substr(1):h)),h}function l(){}l.prototype.parse=d,l.prototype.format=r,l.prototype.resolve=h,l.prototype.resolveObject=h;var m=/^https?|ftp|gopher|file/,v=/^(.*?)([#?].*)/,_=/^([a-z0-9.+-]*:)(\\/{0,3})(.*)/i,b=/^([a-z0-9.+-]*:)?\\/\\/\\/*/i,g=/^([a-z0-9.+-]*:)(\\/{0,2})\\[(.*)\\]$/i;function d(e,t,o){if(void 0===t&&(t=!1),void 0===o&&(o=!1),e&&\"object\"==typeof e&&e instanceof l)return e;var a=(e=e.trim()).match(v);e=a?a[1].replace(/\\\\/g,\"/\")+a[2]:e.replace(/\\\\/g,\"/\"),g.test(e)&&\"/\"!==e.slice(-1)&&(e+=\"/\");var n=!/(^javascript)/.test(e)&&e.match(_),p=b.test(e),h=\"\";n&&(m.test(n[1])||(h=n[1].toLowerCase(),e=\"\"+n[2]+n[3]),n[2]||(p=!1,m.test(n[1])?(h=n[1],e=\"\"+n[3]):e=\"//\"+n[3]),3!==n[2].length&&1!==n[2].length||(h=n[1],e=\"/\"+n[3]));var u,f=(a?a[1]:e).match(/^https?:\\/\\/[^/]+(:[0-9]+)(?=\\/|$)/),d=f&&f[1],y=new l,w=\"\",C=\"\";try{u=new URL(e)}catch(t){w=t,h||o||!/^\\/\\//.test(e)||/^\\/\\/.+[@.]/.test(e)||(C=\"/\",e=e.substr(1));try{u=new URL(e,i)}catch(e){return y.protocol=h,y.href=h,y}}y.slashes=p&&!C,y.host=u.host===c?\"\":u.host,y.hostname=u.hostname===c?\"\":u.hostname.replace(/(\\[|\\])/g,\"\"),y.protocol=w?h||null:u.protocol,y.search=u.search.replace(/\\\\/g,\"%5C\"),y.hash=u.hash.replace(/\\\\/g,\"%5C\");var U=e.split(\"#\");!y.search&&~U[0].indexOf(\"?\")&&(y.search=\"?\"),y.hash||\"\"!==U[1]||(y.hash=\"#\"),y.query=t?s.decode(u.search.substr(1)):y.search.substr(1),y.pathname=C+(n?function(e){return e.replace(/['^|`]/g,function(e){return\"%\"+e.charCodeAt().toString(16).toUpperCase()}).replace(/((?:%[0-9A-F]{2})+)/g,function(e,t){try{return decodeURIComponent(t).split(\"\").map(function(e){var t=e.charCodeAt();return t>256||/^[a-z0-9]$/i.test(e)?e:\"%\"+t.toString(16).toUpperCase()}).join(\"\")}catch(e){return t}})}(u.pathname):u.pathname),\"about:\"===y.protocol&&\"blank\"===y.pathname&&(y.protocol=\"\",y.pathname=\"\"),w&&\"/\"!==e[0]&&(y.pathname=y.pathname.substr(1)),h&&!m.test(h)&&\"/\"!==e.slice(-1)&&\"/\"===y.pathname&&(y.pathname=\"\"),y.path=y.pathname+y.search,y.auth=[u.username,u.password].map(decodeURIComponent).filter(Boolean).join(\":\"),y.port=u.port,d&&!y.host.endsWith(d)&&(y.host+=d,y.port=d.slice(1)),y.href=C?\"\"+y.pathname+y.search+y.hash:r(y);var j=/^(file)/.test(y.href)?[\"host\",\"hostname\"]:[];return Object.keys(y).forEach(function(e){~j.indexOf(e)||(y[e]=y[e]||null)}),y}t.parse=d,t.format=r,t.resolve=h,t.resolveObject=function(e,t){return d(h(e,t))},t.Url=l},191:function(e){\"use strict\";e.exports=require(\"querystring\")}};var t={};function __nccwpck_require__(r){if(t[r]){return t[r].exports}var o=t[r]={exports:{}};var a=true;try{e[r](o,o.exports,__nccwpck_require__);a=false}finally{if(a)delete t[r]}return o.exports}__nccwpck_require__.ab=__dirname+\"/\";return __nccwpck_require__(715)}();","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n"],"names":["AWS","Service","apiLoader","services","ACM","defineService","Object","defineProperty","get","model","paginators","waiters","enumerable","configurable","module","exports","APIGateway","ApplicationAutoScaling","Athena","AutoScaling","CloudFormation","CloudFront","CloudHSM","CloudTrail","CloudWatch","CloudWatchEvents","CloudWatchLogs","CodeBuild","CodeCommit","CodeDeploy","CodePipeline","CognitoIdentity","CognitoIdentityServiceProvider","CognitoSync","ConfigService","CUR","DeviceFarm","DirectConnect","DynamoDB","DynamoDBStreams","EC2","ECR","ECS","EFS","ElastiCache","ElasticBeanstalk","ELB","ELBv2","EMR","ElasticTranscoder","Firehose","GameLift","IAM","Inspector","Iot","IotData","Kinesis","KMS","Lambda","LexRuntime","MachineLearning","MarketplaceCommerceAnalytics","MTurk","MobileAnalytics","OpsWorks","Polly","RDS","Redshift","Rekognition","Route53","Route53Domains","S3","ServiceCatalog","SES","SNS","SQS","SSM","StorageGateway","STS","XRay","WAF","WorkDocs","LexModelBuildingService","CloudHSMV2","Pricing","CostExplorer","MediaStoreData","Comprehend","KinesisVideoArchivedMedia","KinesisVideoMedia","KinesisVideo","Translate","ResourceGroups","Connect","SecretsManager","IoTAnalytics","ComprehendMedical","Personalize","PersonalizeEvents","PersonalizeRuntime","ForecastService","ForecastQueryService","KinesisVideoSignalingChannels","Location","LexRuntimeV2","svc","version","hasOwnProperty","Error","window","self","Hmac","Md5","Sha1","Sha256","createHash","alg","toLowerCase","createHmac","key","createSign","Buffer","ArrayBuffer","isView","arg","viewStrings","indexOf","prototype","toString","call","isEmptyData","data","length","byteLength","convertToBuffer","Uint8Array","buffer","byteOffset","BYTES_PER_ELEMENT","hashUtils","hashCtor","secret","this","hash","outer","inner","input","BLOCK_SIZE","bufferHash","update","digest","set","bufferFromSecret","i","toHash","error","e","encoding","finished","state","DataView","bufferLength","bytesHashed","cmn","q","a","b","x","s","t","ff","c","d","gg","hh","ii","sourceData","position","setUint8","hashBuffer","_a","undecoratedLength","bitsHashed","setUint32","Math","floor","out","buff","getUint32","Uint32Array","pow","h0","h1","h2","h3","h4","block","offset","shift","totalLength","write","byte","processBlock","outView","w","f","k","temp","KEY","MAX_HASHABLE_LENGTH","Int32Array","bufferView","state0","state1","state2","state3","state4","state5","state6","state7","u","t1_1","t2_1","t1","t2","util","crypto","lib","url","querystring","realClock","environment","createEventStream","isBrowser","isNode","XML","Parser","process","browser","base64Encode","base64","encode","inherit","queryEncode","string","replacements","replace","match","signPolicy","policy","privateKey","sign","signWithCannedPolicy","expires","keyPairId","JSON","stringify","Statement","Resource","Condition","DateLessThan","Expires","Signature","signWithCustomPolicy","Policy","determineScheme","parts","split","getRtmpUrl","rtmpUrl","parsed","parse","path","handleError","err","callback","handleSuccess","result","Signer","constructor","getSignedCookie","options","cb","signatureHash","cookieHash","getSignedUrl","resource","getResource","parsedUrl","search","query","signedUrl","format","PromisesDependency","Config","undefined","extractCredentials","each","keys","value","getCredentials","finish","credentials","credError","msg","code","message","name","accessKeyId","secretAccessKey","getStaticCredentials","credentialProvider","resolve","creds","allowUnknownKeys","hasService","loadFromPath","clear","readFileSync","fileSystemCreds","FileSystemCredentials","chain","CredentialProviderChain","providers","unshift","property","defaultValue","merge","region","logger","apiVersions","apiVersion","endpoint","httpOptions","timeout","maxRetries","maxRedirects","paramValidation","sslEnabled","s3ForcePathStyle","s3BucketEndpoint","s3DisableBodySigning","s3UsEast1RegionalEndpoint","s3UseArnRegion","computeChecksums","convertResponseTypes","correctClockSkew","customUserAgent","dynamoDbCrc32","systemClockOffset","signatureVersion","signatureCache","retryDelayOptions","useAccelerateEndpoint","clientSideMonitoring","endpointDiscoveryEnabled","endpointCacheSize","hostPrefixEnabled","stsRegionalEndpoints","useFipsEndpoint","useDualstackEndpoint","copy","Credentials","setPromisesDependency","dep","Promise","constructors","Request","push","ManagedUpload","addPromises","getPromisesDependency","config","validateRegionalEndpointsFlagValue","configValue","errorOptions","originalConfig","resolved","clientConfig","env","profile","getProfilesFromSharedConfig","iniLoader","AWS_PROFILE","defaultProfile","sharedConfig","VERSION","Signers","Protocol","Json","Query","Rest","RestJson","RestXml","Builder","Model","Api","Operation","Shape","Paginator","ResourceWaiter","EndpointCache","events","SequentialExecutor","memoizedProperty","hideProperties","expired","expireTime","refreshCallbacks","arguments","sessionToken","expiryWindow","needsRefresh","currentTime","date","getDate","getTime","adjustedTime","Date","refresh","coalesceRefresh","sync","load","arrayEach","defer","addPromisesToClass","PromiseDependency","getPromise","promisifyMethod","refreshPromise","deletePromisesFromClass","ChainableTemporaryCredentials","errorCode","tokenCodeFn","params","RoleArn","RoleSessionName","SerialNumber","masterCredentials","stsConfig","service","fn","operation","getTokenCode","tokenCode","TokenCode","credentialsFrom","token","CognitoIdentityCredentials","localStorageKey","id","_identityId","_clientConfig","loadCachedId","IdentityId","identityId","createClients","getId","clearIdOnNotAuthorized","getCredentialsFromSTS","getCredentialsForIdentity","clearCachedId","poolId","IdentityPoolId","loginId","LoginId","storage","cognito","loadCredentials","AccessKeyId","SecretKey","SessionToken","Expiration","cacheId","getOpenIdToken","WebIdentityToken","Token","webIdentityCredentials","webErr","sts","getStorage","Logins","actualProviders","filter","n","WebIdentityCredentials","cognitoConfig","setStorage","join","val","_","localStorage","defaultProviders","slice","resolveCallbacks","index","resolveNext","provider","getErr","resolvePromise","SAMLCredentials","assumeRoleWithSAML","TemporaryCredentials","loadMasterCredentials","assumeRole","getSessionToken","assumeRoleWithWebIdentity","endpointDiscoveryEnabledEnvs","getCacheKey","request","api","identifiers","operations","serviceId","marshallCustomIdentifiersHelper","shape","type","required","memberShape","members","endpointDiscoveryId","locationName","isLocationName","String","marshallCustomIdentifiers","optionalDiscoverEndpoint","operationModel","cacheKey","endpoints","endpointCache","Address","httpRequest","updateEndpoint","endpointRequest","makeRequest","endpointOperation","Identifiers","addApiVersionHeader","removeListener","EventListeners","Core","VALIDATE_PARAMETERS","RETRY_CHECK","put","CachePeriodInMinutes","send","Endpoints","requestQueue","requiredDiscoverEndpoint","done","inputShape","cacheKeyStr","getKeyString","response","retryable","remove","pendingRequests","requestContext","headers","invalidateCachedEndpoints","httpResponse","statusCode","isFalsy","discoverEndpoint","client","_originalConfig","svcConfig","serviceIdentifier","Boolean","hasCustomEndpoint","isPresigned","isEndpointDiscoveryRequired","endpointDiscoveryRequired","isEnabled","configFile","loadFrom","isConfig","filename","sharedConfigFileEnv","sharedFileConfig","endpoint_discovery_enabled","resolveEndpointDiscoveryConfig","hasRequiredEndpointDiscovery","appendToUserAgent","addNamedListener","className","invalidateCachedEndpoint","typeOf","DynamoDBSet","NumberValue","convertNumber","wrapNumbers","Number","formatMap","map","M","formatted","Converter","convertInput","list","L","formatList","values","convertEmptyValues","nonEmptyValues","Binary","filterEmptySetValues","formatSet","S","N","B","BOOL","NULL","marshall","output","convertOutput","toBuffer","unmarshall","Translator","DocumentClient","configure","bindServiceObject","attrValue","putItem","Item","__super__","makeServiceRequest","setupRequest","setupResponse","serviceClientOperationsMap","batchGet","batchWrite","delete","scan","transactGet","transactWrite","createSet","getTranslator","translator","_events","validate","req","rawParams","translateInput","outputShape","on","translateOutput","nextPage","resp","paginationConfig","hasNextPage","nextPageTokens","inputTokens","inputToken","DynamoDBNumberValue","wrapperName","toJSON","toNumber","memberTypeToSetType","initialize","concat","detectType","convert","mode","translate","translateStructure","translateMap","translateList","translateScalar","structure","struct","member","toType","isBinary","types","Stream","stream","isBuffer","isType","typeName","eventMessageChunker","parseEvent","body","parser","eventMessages","messages","readInt32BE","Int64","bytes","negate","fromNumber","number","remaining","abs","round","valueOf","negative","parseInt","parseMessage","parsedMessage","messageType","errorMessage","parseError","eventType","eventModel","eventPayloadMemberName","payloadShape","eventHeaderNames","eventHeaderMemberNames","splitMessage","BOOLEAN_TAG","parseHeaders","nameLength","readUInt8","readInt8","readInt16BE","binaryLength","readUInt16BE","stringLength","uuidChars","substr","PRELUDE_LENGTH","readUInt32BE","expectedPreludeChecksum","PRELUDE_MEMBER_LENGTH","crc32","expectedMessageChecksum","headersEnd","DISCOVER_ENDPOINT","addNamedListeners","add","addAsync","isGlobalEndpoint","dnsHostRegex","RegExp","test","idempotentMembers","iLen","uuid","v4","rules","validation","ParamValidator","isNonStreamingPayload","httpChecksumRequired","md5","haltHandlersOnError","authtype","getSignerClass","V4","computeSha256","sha","getOperationAuthtype","payloadMember","getRequestPayloadShape","isStreaming","requiresLength","host","HttpRequest","retryCount","getSkewCorrectedDate","signer","getSigningName","setServiceClientId","_clientId","addAuthorization","signedAt","successfulResponse","httpResp","operationName","statusMessage","emit","streaming","HttpClient","streamsApiVersion","hasEventOutput","read","didCallback","errCode","hostname","executeSend","http","getInstance","handleRequest","_abortCallback","buffers","numBytes","dateHeader","serverTime","isClockSkewed","applyClockOffset","chunk","total","progress","loaded","retryableError","clockSkewError","Endpoint","redirect","redirectCount","retryDelay","retryDelays","delay","willRetry","setTimeout","CorePost","extractRequestId","errno","getSystemErrorName","isDNSError","port","originalError","Logger","line","delta","startTime","ansi","isTTY","status","censoredParams","filterSensitiveLog","lowerFirst","buildMessage","log","isSensitive","subShapeName","subShape","buildRequest","extractData","extractError","urlParse","protocol","method","_userAgent","setUserAgent","getUserAgentHeaderName","userAgent","agentPartial","getUserAgent","pathname","queryStringParse","queryParamsToString","endpointStr","newEndpoint","HttpResponse","createUnbufferedStream","singleton","EventEmitter","XHRClient","errCallback","emitter","href","xhr","XMLHttpRequest","headersEmitted","addEventListener","readyState","HEADERS_RECEIVED","getAllResponseHeaders","statusText","DONE","finishRequest","upload","evt","open","xhrAsync","setRequestHeader","xhrWithCredentials","withCredentials","responseType","rawHeaders","substring","ab","view","responseText","JsonBuilder","isDocument","location","toWireFormat","build","JsonParser","shapeMembers","Collection","metadata","endpointPrefix","signingName","globalEndpoint","jsonVersion","targetPrefix","timestampFormat","xmlNamespace","serviceAbbreviation","serviceFullName","xmlNoDefaultLists","endpointoperation","endpointdiscovery","shapes","create","paginator","waiter","documentation","documentationUrl","memoize","factory","nameTr","iterable","requestUri","errors","isIdempotent","topLevelShape","payload","isEventStream","hasEventStream","input_token","limit_key","more_results","output_token","result_key","forEach","obj","apply","memberName","enum","min","max","pattern","xmlName","queryName","isComposite","idempotencyToken","jsonvalue","sensitive","eventstream","event","eventpayload","eventheader","isTimestampFormatSet","endpointdiscoveryid","hostLabel","xmlAttribute","CompositeShape","flattened","StructureShape","requiredMap","firstInit","isShape","document","xmlOrder","memberNames","isEventPayload","isEventHeader","resultWrapper","prefix","uri","ListShape","oldName","MapShape","StringShape","nullLessProtocols","isJsonValue","BinaryShape","buf","decode","alloc","secureBuf","fill","Base64Shape","BooleanShape","normalizedTypes","character","double","long","short","biginteger","bigdecimal","blob","toUTCString","parseTimestamp","parseFloat","refShape","filteredKeys","InlineShape","origType","context","validateMember","fail","validateStructure","paramName","validateType","paramValue","memberContext","param","validateList","validateMap","validateScalar","Array","validateRange","mapCount","validateString","validatePayload","validateNumber","validTypes","validateEnum","validatePattern","validateUri","descriptor","acceptedTypes","foundInvalidType","acceptedType","vowel","castedValue","Blob","rest","Presigner","_operations","modifyInputMembers","modifiedInput","convertPostToGet","generateURI","httpPath","getSynthesizeSpeechUrl","removeAllListeners","presign","populateHostPrefix","isEndpointOperation","hasEndpointDiscover","hostPrefix","hostPrefixNotation","regex","expandHostPrefix","prependEndpointPrefix","labels","hostPattern","label","validateHostname","target","builder","__type","Code","pop","Message","QueryParamSerializer","Version","Action","serialize","requestId","Errors","origRules","tmp","_XAMZRequestId","requestIdShape","endpointPath","operationPath","queryString","queryStringSet","plus","uriEscapePath","uriEscape","isArray","sort","httpMethod","populateMethod","populateURI","memberValue","populateHeaders","r","v","header","applyContentTypeHeader","populateBody","rootElement","toXML","upperFirst","ucfirst","isQueryName","toUpperCase","serializeStructure","serializeMember","memberRules","suffix","serializeList","keyName","valueName","serializeMap","requiredAuthTokenOptions","username","convertUrlToAuthToken","getAuthToken","hasCallback","optionsValidation","validateAuthTokenOptions","serviceOptions","modifyRequestForAuthToken","buildAsGet","DBUser","now","performance","isFipsRegion","startsWith","endsWith","isGlobalRegion","includes","getRealRegion","regionConfig","applyConfig","configureEndpoint","regionPrefix","generateRegionPrefix","item","derivedKeys","dualstackFipsRules","fipsRules","dualstackRules","patterns","signingRegion","getEndpointSuffix","regionRegexes","regexes","regionPattern","dnsSuffix","AcceptorStateMachine","domain","jmespath","hardErrorStates","success","complete","fsm","setupStates","transition","_haltHandlersOnError","_asm","currentState","machine","Domain","domainEmitter","domainThrown","addState","active","Response","states","emitEvent","runTo","abort","eachPage","makeAsync","wrappedCallback","noop","eachItem","resultKey","items","continueIteration","isPageable","createReadStream","streams","PassThrough","nextTick","readable","sent","HTTP_DATA","HTTP_ERROR","expectedLen","shouldCheckContentLength","isNaN","receivedLen","checkContentLengthAndEmit","end","httpStream","lengthAccumulator","_write","unpipe","pipe","eventName","args","eventParameters","Presign","toGet","toUnauthenticated","_unAuthenticated","VALIDATE_CREDENTIALS","SIGN","addListener","promise","reject","mixin","CHECK_ACCEPTORS","_waiter","acceptors","acceptorMatched","acceptor","matcher","matchers","expected","argument","setSuccess","setError","loadWaiterConfig","strictDeepEqual","pathAll","results","numResults","ind","pathAny","listeners","wait","$waiter","maxAttempts","addListeners","numRetries","cacheNextPageTokens","moreResults","exprs","outputToken","expr","sliceFn","completeInfo","fillQueue","partSize","minPartSize","queueSize","leavePartsOnError","tags","validateBody","adjustTotalBytes","maxTotalParts","failed","runFill","fillBuffer","fillStream","partBuffers","cleanup","isDoneChunking","numParts","totalPartNumbers","doneParts","finishMultiPart","singlePart","Body","arraySliceFn","getSignatureVersion","totalBytes","newPartSize","ceil","partPos","totalChunkedBytes","totalUploadedBytes","activeParts","multipartReq","partBufferLength","bodyLen","nextChunk","endPos","pbuf","isDoneSending","partNumber","Tagging","getTaggingHeader","putObject","_managedUpload","finishSinglePart","ContentMD5","ETag","UploadId","uploadPart","queueChunks","createMultipartUpload","kvPairStrings","Key","Value","partParams","ContentLength","PartNumber","partInfo","_lastUploadedBytes","resume","abortMultipartUpload","part","completeParams","MultipartUpload","Parts","completeMultipartUpload","putObjectTagging","TagSet","httpReq","Bucket","info","listener","toHead","onAsync","_isAsync","splice","eventArgs","doneCallback","count","callListeners","prevError","callNextListener","callbacks","addNamedAsyncListener","clientCount","region_utils","loadServiceClass","useDualstack","ServiceClass","validateService","endpointFromTemplate","setEndpoint","addDefaultMonitoringListeners","_clientSideMonitoring","publisher","eventHandler","serviceConfig","isEmpty","apiConfig","defineServiceApi","getLatestServiceClass","getLatestServiceVersion","iso8601","selectedVersion","defaultRetryCount","customizeRequests","customRequestHandler","addAllRequestListeners","attachMonitoringEmitter","makeUnauthenticatedRequest","waitFor","serviceInterface","setupRequestListeners","apiCallEvent","monitoringEvent","Type","Region","MaxRetriesExceeded","UserAgent","FinalHttpStatusCode","FinalAwsException","FinalAwsExceptionMessage","FinalSdkException","FinalSdkExceptionMessage","apiAttemptEvent","Fqdn","HttpStatusCode","AccessKey","XAmznRequestId","XAmzRequestId","XAmzId2","attemptFailEvent","AwsException","AwsExceptionMessage","SdkException","SdkExceptionMessage","attemptTimestamp","attemptStartRealTime","attemptLatency","callStartRealTime","callTimestamp","attemptCount","Timestamp","AttemptLatency","AttemptCount","latency","Latency","RequestSigner","getVersion","calculateRetryDelay","timeoutError","networkingError","expiredCredentialsError","throttledError","newServerTime","throwException","defineMethods","versions","features","_serviceMap","addVersions","identifier","Publisher","publisherConfig","configProvider","enabled","superclass","setApi","isApi","attachOn","baseClass","getPrototypeOf","setAcceptHeader","Accept","exportType","convertPayloadToString","hoistPayloadMember","EXTRACT_DATA","checkCrc32","crc32IsValid","crc","base","EXTRACT_ERROR","buildCopySnapshotPresignedUrl","PresignedUrl","_subRequest","DestinationRegion","SourceRegion","newReq","RequestID","blobPayloadOutputOps","validateResponseBody","bodyCheck","trim","charAt","buildEndpoint","PredictEndpoint","rdsutil","crossRegionOperations","PreSignedUrl","doesParamValidation","buildCrossRegionPresignedUrl","destinationRegion","sanitizeUrl","v4Credentials","resolveRegionalEndpointsFlag","s3util","regionUtil","operationsWith200StatusCodeError","regionRedirectErrorCodes","OBJECT_LAMBDA_SERVICE","defaultApiVersion","userDefinedVersion","regionDefinedVersion","_super","_parsedArn","shouldDisableBodySigning","signerClass","validateScheme","validateBucketName","optInUsEast1RegionalEndpoint","VALIDATE_REGION","addContentType","computeContentMd5","computeSseCustomerKeyMd5","addExpect100Continue","extractErrorFrom200Response","prepareSignedUrl","COMPUTE_SHA256","disableBodySigning","isArnInParam","ARN","validateS3AccessPointArn","validateArnResourceType","validateArnRegion","validateOutpostsAccessPointArn","validateOutpostsArn","validateArnAccount","validateArnService","populateUriFromAccessPointArn","validatePopulateUriFromArn","validateBucketEndpoint","correctBucketRegionFromCache","requestBucketRegion","reqRegionForNetworkingError","scheme","SSECustomerKey","CopySourceSSECustomerKey","allowFipsEndpoint","bucket","slashIndex","isValidAccelerateOperation","insertPoint","regionalEndpoint","pathStyleBucketName","virtualHostedBucket","removeVirtualHostedBucketFromPath","encodedS3Key","accessPointArn","isOutpostArn","isObjectLambdaArn","outpostsSuffix","outpostId","serviceName","fipsSuffix","dualStackSuffix","useArnRegion","accessPoint","accountId","accesspointName","encodedArn","len","contentType","charsetName","willComputeChecksums","needsContentMD5","bucketName","dnsCompatibleBucketName","_requestRegionForBucket","bucketRegionCache","updateReqBucketRegion","s3Config","newConfig","Host","LocationConstraint","createBucketConfiguration","CreateBucketConfiguration","clearBucketRegionCache","extractRequestIds","cachedRegion","codes","reqOperation","reqParams","MaxKeys","regionReq","getRegionReq","listObjects","buckets","requestRegion","extendedRequestId","cfId","createPresignedPost","boundParams","finalizePost","urlFormat","fields","preparePostFields","Fields","Conditions","conditions","expiresInSeconds","signingDate","shortDate","scope","createScope","credential","field","condition","preparePostPolicy","hmac","getSigningKey","expiration","noPresignedContentLength","createBucket","copiedParams","writeGetObjectResponse","uploader","getSignedUrlPromise","inputMembers","parsedArn","exec","delimiter","accessPointPrefix","loadUseArnRegionConfig","regionFromArn","clientRegion","envName","configName","ipAddress","dots","verifySendMessageChecksum","verifySendMessageBatchChecksum","verifyReceiveMessageChecksum","MD5OfMessageBody","MessageBody","calculatedMd5","calculateChecksum","throwInvalidChecksumError","MessageId","entries","messageIds","Successful","entry","Id","Entries","isChecksumValid","Messages","MD5OfBody","ids","checksum","QueueUrl","matches","SecretAccessKey","optInRegionalEndpoint","expiresHeader","signedUrlBuilder","unixTimestamp","signedUrlSigner","queryParams","auth","signature","SET_CONTENT_LENGTH","serviceClientId","getServiceClientId","V2","V3","V3Https","subResources","responseHeaders","rfc822","stringToSign","canonicalizedAmzHeaders","canonicalizedResource","amzHeaders","resources","subresource","decodeURIComponent","res","SignatureVersion","SignatureMethod","AWSAccessKeyId","SecurityToken","datetime","authorization","signedHeaders","headersToSign","h","canonicalHeaders","sha256","algorithm","updateForPresigned","addHeaders","credString","credentialString","qs","isSignableHeader","lowerKey","sep","signingKey","hexEncodedHash","canonicalString","hexEncodedBodyHash","canonicalHeaderValues","unsignableHeaders","cachedSecret","cacheQueue","v4Identifier","shouldCache","kDate","kRegion","kService","emptyCache","finalState","bindObject","inputError","accept","acceptState","failState","engine","navigator","platform","AWS_EXECUTION_ENV","agent","encodeURIComponent","escape","ch","charCodeAt","sortedKeys","ename","vals","from","size","toStream","pos","_read","object","ini","currentSection","section","expectedArgs","toISOString","formatter","crc32Table","tbl","FileReader","reader","onerror","onload","_continueReading","back","readAsArrayBuffer","toHex","iterFunction","array","idx","obj1","obj2","dupe","prop","webkitSlice","mozSlice","str","stack","writable","time","klass","newObject","ctor","props","isValue","opts","cachedValue","responsePayload","fs","settings","start","ResponseMetadata","RequestId","deletePromises","methodName","isDualstackAvailable","dualstackAvailable","customBackoff","random","handleRequestWithRetries","sendRequest","retryAfter","setImmediate","profiles","profilesFromConfig","configOptInEnv","profilesFromCreds","sharedCredentialsFileEnv","profileNames","objectAssign","source","arn","matched","partition","arnObject","imdsDisabledEnv","DomXmlParser","getElementByTagName","xml","tag","elements","getElementsByTagName","parentNode","parseXml","parseStructure","xmlKey","xmlValue","tagName","child","firstElementChild","nodeName","textContent","nextElementSibling","parseMap","parseList","childNodes","parseUnknown","getAttribute","text","parseScalar","isXmlAttribute","attributes","xmlChild","DOMParser","parseFromString","syntaxError","documentElement","isError","errorElement","ActiveXObject","async","loadXML","XmlNode","XmlText","XmlBuilder","addAttribute","element","addChildNode","applyNamespaces","entryKey","entryValue","serializeScalar","isRoot","xmlNamespaceUri","xmlNamespacePrefix","noEmpty","children","escapeAttribute","escapeElement","removeAttribute","hasChildren","xmlText","attributeNames","attributeName","attribute","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","encodingOrOffset","allocUnsafe","TypeError","fromArrayLike","fromArrayBuffer","isEncoding","actual","fromString","checked","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","arr","indexSize","arrLength","valLength","foundIndex","found","j","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","g","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","allocUnsafeSlow","_isBuffer","compare","y","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","isFinite","_arr","ret","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt16LE","readInt32LE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","src","dst","_maxListeners","isFunction","isObject","isUndefined","defaultMaxListeners","setMaxListeners","er","handler","newListener","warned","console","trace","once","fired","listenerCount","evlistener","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","LRU_1","maxSize","cache","LRUCache","keyString","endpointRecord","populateValue","records","Expire","identifierNames","identifierName","empty","LinkedListNode","nodeMap","sizeLimit","prependToList","node","headerNode","prev","next","tailNode","removeFromTail","prevNode","detachFromList","key_1","newNode","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","num","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","desc","applyBind","hasOwn","ctx","l","ERROR_MESSAGE","toStr","funcType","bound","binder","boundLength","boundArgs","Function","Empty","implementation","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","getProto","needsEval","TypedArray","INTRINSICS","AggregateError","iterator","Atomics","BigInt","decodeURI","encodeURI","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Map","Proxy","ReferenceError","Reflect","Set","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","URIError","WeakMap","WeakRef","WeakSet","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","rePropName","reEscapeChar","stringToPath","first","last","quote","subString","getBaseIntrinsic","alias","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","origSymbol","hasSymbolSham","getOwnPropertySymbols","sym","symObj","getOwnPropertyNames","syms","propertyIsEnumerable","toStringTag","superCtor","super_","TempCtor","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","callee","supportsStandardArguments","GeneratorFunction","fnToStr","isFnRegex","generatorFunc","getGeneratorFunc","availableTypedArrays","globalThis","typedArrays","$slice","toStrTags","gOPD","typedArray","proto","superProto","anyTrue","getter","tryTypedArrays","second","keysSeen","key2","isFalse","trimLeft","TYPE_NUMBER","TYPE_STRING","TOK_EOF","TOK_UNQUOTEDIDENTIFIER","TOK_QUOTEDIDENTIFIER","TOK_RBRACKET","TOK_RPAREN","TOK_COMMA","TOK_COLON","TOK_RBRACE","TOK_NUMBER","TOK_CURRENT","TOK_EXPREF","TOK_PIPE","TOK_OR","TOK_AND","TOK_EQ","TOK_GT","TOK_LT","TOK_GTE","TOK_LTE","TOK_NE","TOK_FLATTEN","TOK_STAR","TOK_FILTER","TOK_DOT","TOK_NOT","TOK_LBRACE","TOK_LBRACKET","TOK_LPAREN","TOK_LITERAL","basicTokens","operatorStartToken","skipChars","isNum","Lexer","tokenize","tokens","_current","_consumeUnquotedIdentifier","_consumeNumber","_consumeLBracket","_consumeQuotedIdentifier","_consumeRawStringLiteral","literal","_consumeLiteral","_consumeOperator","maxLength","current","startingChar","literalString","_looksLikeJSON","ex","bindingPower","TreeInterpreter","runtime","Runtime","interpreter","_interpreter","functionTable","_func","_functionAbs","_signature","avg","_functionAvg","_functionCeil","contains","_functionContains","_functionEndsWith","_functionFloor","_functionLength","_functionMap","_functionMax","_functionMerge","variadic","_functionMaxBy","sum","_functionSum","_functionStartsWith","_functionMin","_functionMinBy","_functionType","_functionKeys","_functionValues","_functionSort","_functionSortBy","_functionJoin","reverse","_functionReverse","_functionToArray","_functionToString","_functionToNumber","_functionNotNull","expression","_loadTokens","ast","_lookahead","_lookaheadToken","rbp","leftToken","_advance","left","nud","currentToken","led","right","Not","_parseProjectionRHS","Star","_parseMultiselectHash","Flatten","_parseIndexExpression","_projectIfSlice","_parseMultiselectList","Expref","_match","_errorToken","tokenName","Dot","_parseDotRHS","Pipe","Or","And","Filter","_parseComparator","tokenType","_parseSliceExpression","indexExpr","comparator","lookahead","expressions","keyToken","pairs","identifierTypes","visit","collected","sliceParams","computed","computeSliceParams","stop","step","objValues","filtered","finalResults","original","merged","resolvedArgs","callFunction","refNode","jmespathType","arrayLength","stepValueNegative","capSliceRange","actualValue","functionEntry","_validateArgs","pluralized","currentSpec","actualType","typeMatched","_getTypeName","_typeMatches","argValue","subtype","searchStr","originalStr","reversedStr","reversedArray","inputArray","mapped","exprefNode","maxElement","localeCompare","minElement","listToSum","joinChar","convertedValue","sortedArray","requiredType","decorated","exprA","exprB","maxRecord","resolvedArray","keyFunction","createKeyFunction","maxNumber","minRecord","minNumber","allowedTypes","compile","o","default","p","slashes","URL","resolveObject","C","U","password","Url","__nccwpck_require__","__dirname","eq","regexp","maxKeys","kstr","vstr","stringifyPrimitive","ks","isArgumentsObject","isGeneratorFunction","whichTypedArray","isTypedArray","uncurryThis","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","isArrayBuffer","working","isDataViewToString","isDataView","isPromise","then","catch","isArrayBufferView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isMap","isSet","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isBoxedPrimitive","isAnyArrayBuffer","getOwnPropertyDescriptors","descriptors","formatRegExp","isString","objects","isNull","deprecate","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","NODE_DEBUG","debugEnv","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","primitive","simple","isNumber","formatPrimitive","visibleKeys","arrayToHash","formatError","isRegExp","isDate","braces","formatProperty","formatArray","reduce","cur","numLinesEst","reduceToSingleString","ar","re","objectToString","pad","debuglog","pid","isNullOrUndefined","isSymbol","isNativeError","isPrimitive","months","timestamp","getHours","getMinutes","getSeconds","getMonth","inherits","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","newReason","promisify","promiseResolve","promiseReject","setPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","rej","v1","byteToHex","bth","getRandomValues","msCrypto","rnds8","rnds","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","foundName","possibleNames"],"sourceRoot":""}