aws-sdk-customerprofiles 1.22.0 → 1.24.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65457f6c8b50e184e428481d7e9fab32ee5595ebbe0059f217fc3b43de88762d
4
- data.tar.gz: d1b2fb4511410140a8e73a9bcf3523f898ae20fa55f22846c86ce4673b24fb84
3
+ metadata.gz: 873f685772d2b81ed1bd473376590ebb073ffdfd4337bf7fa7956b26da63307c
4
+ data.tar.gz: 10d62a0420366eefcb3ba8788ec895b7b0af66470ed54f447f9f0aff5932618e
5
5
  SHA512:
6
- metadata.gz: 8bfa23fc150f5db905a2b7727377f8675a522824ae033041617ba4974be8ae7c5a49ffd967f3c02c4b6af6077469801a82765d07c132727c79b9b97c5dedd489
7
- data.tar.gz: 9468e32571e866ae96a468fcd75bcd2bf76b6a3b8878402e0c1358653d3dd2eadfa28fc0d86f6ff38bf9f5b51a269d666134694b1d842d0e1ee59cc26d65bc33
6
+ metadata.gz: 7035a3ffe7ad88607d0a7d26290e73089d1148bc4a905d5bd12a32bf63a28bf2810f40683f631ce6cd097bcd76d8e5967f56a90ba3a32aed3cdee047a0cf2ec3
7
+ data.tar.gz: a62a75ba126b5792bedb14b5cfb849b5a361f9454f49572b365faa09f1a120331393ef380094ed048e32c8b18a480ff5b1dc05ec5d3aa29b8c2c72e56c0f424f
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.24.0 (2022-11-14)
5
+ ------------------
6
+
7
+ * Feature - This release enhances the SearchProfiles API by providing functionality to search for profiles using multiple keys and logical operators.
8
+
9
+ 1.23.0 (2022-10-25)
10
+ ------------------
11
+
12
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
13
+
4
14
  1.22.0 (2022-09-13)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.22.0
1
+ 1.24.0
@@ -30,7 +30,7 @@ require 'aws-sdk-core/plugins/http_checksum.rb'
30
30
  require 'aws-sdk-core/plugins/checksum_algorithm.rb'
31
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
32
  require 'aws-sdk-core/plugins/recursion_detection.rb'
33
- require 'aws-sdk-core/plugins/signature_v4.rb'
33
+ require 'aws-sdk-core/plugins/sign.rb'
34
34
  require 'aws-sdk-core/plugins/protocols/rest_json.rb'
35
35
 
36
36
  Aws::Plugins::GlobalConfiguration.add_identifier(:customerprofiles)
@@ -79,8 +79,9 @@ module Aws::CustomerProfiles
79
79
  add_plugin(Aws::Plugins::ChecksumAlgorithm)
80
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
81
  add_plugin(Aws::Plugins::RecursionDetection)
82
- add_plugin(Aws::Plugins::SignatureV4)
82
+ add_plugin(Aws::Plugins::Sign)
83
83
  add_plugin(Aws::Plugins::Protocols::RestJson)
84
+ add_plugin(Aws::CustomerProfiles::Plugins::Endpoints)
84
85
 
85
86
  # @overload initialize(options)
86
87
  # @param [Hash] options
@@ -287,6 +288,19 @@ module Aws::CustomerProfiles
287
288
  # ** Please note ** When response stubbing is enabled, no HTTP
288
289
  # requests are made, and retries are disabled.
289
290
  #
291
+ # @option options [Aws::TokenProvider] :token_provider
292
+ # A Bearer Token Provider. This can be an instance of any one of the
293
+ # following classes:
294
+ #
295
+ # * `Aws::StaticTokenProvider` - Used for configuring static, non-refreshing
296
+ # tokens.
297
+ #
298
+ # * `Aws::SSOTokenProvider` - Used for loading tokens from AWS SSO using an
299
+ # access token generated from `aws login`.
300
+ #
301
+ # When `:token_provider` is not configured directly, the `Aws::TokenProviderChain`
302
+ # will be used to search for tokens configured for your profile in shared configuration files.
303
+ #
290
304
  # @option options [Boolean] :use_dualstack_endpoint
291
305
  # When set to `true`, dualstack enabled endpoints (with `.aws` TLD)
292
306
  # will be used if available.
@@ -300,6 +314,9 @@ module Aws::CustomerProfiles
300
314
  # When `true`, request parameters are validated before
301
315
  # sending the request.
302
316
  #
317
+ # @option options [Aws::CustomerProfiles::EndpointProvider] :endpoint_provider
318
+ # The endpoint provider used to resolve endpoints. Any object that responds to `#resolve_endpoint(parameters)` where `parameters` is a Struct similar to `Aws::CustomerProfiles::EndpointParameters`
319
+ #
303
320
  # @option options [URI::HTTP,String] :http_proxy A proxy to send
304
321
  # requests through. Formatted like 'http://proxy.com:123'.
305
322
  #
@@ -2515,8 +2532,14 @@ module Aws::CustomerProfiles
2515
2532
  req.send_request(options)
2516
2533
  end
2517
2534
 
2518
- # Searches for profiles within a specific domain name using name, phone
2519
- # number, email address, account number, or a custom defined index.
2535
+ # Searches for profiles within a specific domain using one or more
2536
+ # predefined search keys (e.g., \_fullName, \_phone, \_email, \_account,
2537
+ # etc.) and/or custom-defined search keys. A search key is a data type
2538
+ # pair that consists of a `KeyName` and `Values` list.
2539
+ #
2540
+ # This operation supports searching for profiles with a minimum of 1
2541
+ # key-value(s) pair and up to 5 key-value(s) pairs using either `AND` or
2542
+ # `OR` logic.
2520
2543
  #
2521
2544
  # @option params [String] :next_token
2522
2545
  # The pagination token from the previous SearchProfiles API call.
@@ -2524,6 +2547,8 @@ module Aws::CustomerProfiles
2524
2547
  # @option params [Integer] :max_results
2525
2548
  # The maximum number of objects returned per page.
2526
2549
  #
2550
+ # The default is 20 if this parameter is not included in the request.
2551
+ #
2527
2552
  # @option params [required, String] :domain_name
2528
2553
  # The unique name of the domain.
2529
2554
  #
@@ -2539,6 +2564,33 @@ module Aws::CustomerProfiles
2539
2564
  # @option params [required, Array<String>] :values
2540
2565
  # A list of key values.
2541
2566
  #
2567
+ # @option params [Array<Types::AdditionalSearchKey>] :additional_search_keys
2568
+ # A list of `AdditionalSearchKey` objects that are each searchable
2569
+ # identifiers of a profile. Each `AdditionalSearchKey` object contains a
2570
+ # `KeyName` and a list of `Values` associated with that specific key
2571
+ # (i.e., a key-value(s) pair). These additional search keys will be used
2572
+ # in conjunction with the `LogicalOperator` and the required `KeyName`
2573
+ # and `Values` parameters to search for profiles that satisfy the search
2574
+ # criteria.
2575
+ #
2576
+ # @option params [String] :logical_operator
2577
+ # Relationship between all specified search keys that will be used to
2578
+ # search for profiles. This includes the required `KeyName` and `Values`
2579
+ # parameters as well as any key-value(s) pairs specified in the
2580
+ # `AdditionalSearchKeys` list.
2581
+ #
2582
+ # This parameter influences which profiles will be returned in the
2583
+ # response in the following manner:
2584
+ #
2585
+ # * `AND` - The response only includes profiles that match all of the
2586
+ # search keys.
2587
+ #
2588
+ # * `OR` - The response includes profiles that match at least one of the
2589
+ # search keys.
2590
+ #
2591
+ # The `OR` relationship is the default behavior if this parameter is not
2592
+ # included in the request.
2593
+ #
2542
2594
  # @return [Types::SearchProfilesResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
2543
2595
  #
2544
2596
  # * {Types::SearchProfilesResponse#items #items} => Array&lt;Types::Profile&gt;
@@ -2552,6 +2604,13 @@ module Aws::CustomerProfiles
2552
2604
  # domain_name: "name", # required
2553
2605
  # key_name: "name", # required
2554
2606
  # values: ["string1To255"], # required
2607
+ # additional_search_keys: [
2608
+ # {
2609
+ # key_name: "name", # required
2610
+ # values: ["string1To255"], # required
2611
+ # },
2612
+ # ],
2613
+ # logical_operator: "AND", # accepts AND, OR
2555
2614
  # })
2556
2615
  #
2557
2616
  # @example Response structure
@@ -2616,6 +2675,10 @@ module Aws::CustomerProfiles
2616
2675
  # resp.items[0].billing_address.postal_code #=> String
2617
2676
  # resp.items[0].attributes #=> Hash
2618
2677
  # resp.items[0].attributes["string1To255"] #=> String
2678
+ # resp.items[0].found_by_items #=> Array
2679
+ # resp.items[0].found_by_items[0].key_name #=> String
2680
+ # resp.items[0].found_by_items[0].values #=> Array
2681
+ # resp.items[0].found_by_items[0].values[0] #=> String
2619
2682
  # resp.next_token #=> String
2620
2683
  #
2621
2684
  # @see http://docs.aws.amazon.com/goto/WebAPI/customer-profiles-2020-08-15/SearchProfiles AWS API Documentation
@@ -3025,7 +3088,7 @@ module Aws::CustomerProfiles
3025
3088
  params: params,
3026
3089
  config: config)
3027
3090
  context[:gem_name] = 'aws-sdk-customerprofiles'
3028
- context[:gem_version] = '1.22.0'
3091
+ context[:gem_version] = '1.24.0'
3029
3092
  Seahorse::Client::Request.new(handlers, context)
3030
3093
  end
3031
3094
 
@@ -16,6 +16,7 @@ module Aws::CustomerProfiles
16
16
  AccessDeniedException = Shapes::StructureShape.new(name: 'AccessDeniedException')
17
17
  AddProfileKeyRequest = Shapes::StructureShape.new(name: 'AddProfileKeyRequest')
18
18
  AddProfileKeyResponse = Shapes::StructureShape.new(name: 'AddProfileKeyResponse')
19
+ AdditionalSearchKey = Shapes::StructureShape.new(name: 'AdditionalSearchKey')
19
20
  Address = Shapes::StructureShape.new(name: 'Address')
20
21
  AppflowIntegration = Shapes::StructureShape.new(name: 'AppflowIntegration')
21
22
  AppflowIntegrationWorkflowAttributes = Shapes::StructureShape.new(name: 'AppflowIntegrationWorkflowAttributes')
@@ -71,6 +72,7 @@ module Aws::CustomerProfiles
71
72
  FlowDefinition = Shapes::StructureShape.new(name: 'FlowDefinition')
72
73
  FlowDescription = Shapes::StringShape.new(name: 'FlowDescription')
73
74
  FlowName = Shapes::StringShape.new(name: 'FlowName')
75
+ FoundByKeyValue = Shapes::StructureShape.new(name: 'FoundByKeyValue')
74
76
  Gender = Shapes::StringShape.new(name: 'Gender')
75
77
  GetAutoMergingPreviewRequest = Shapes::StructureShape.new(name: 'GetAutoMergingPreviewRequest')
76
78
  GetAutoMergingPreviewResponse = Shapes::StructureShape.new(name: 'GetAutoMergingPreviewResponse')
@@ -213,9 +215,12 @@ module Aws::CustomerProfiles
213
215
  WorkflowType = Shapes::StringShape.new(name: 'WorkflowType')
214
216
  ZendeskConnectorOperator = Shapes::StringShape.new(name: 'ZendeskConnectorOperator')
215
217
  ZendeskSourceProperties = Shapes::StructureShape.new(name: 'ZendeskSourceProperties')
218
+ additionalSearchKeysList = Shapes::ListShape.new(name: 'additionalSearchKeysList')
216
219
  boolean = Shapes::BooleanShape.new(name: 'boolean')
217
220
  encryptionKey = Shapes::StringShape.new(name: 'encryptionKey')
218
221
  expirationDaysInteger = Shapes::IntegerShape.new(name: 'expirationDaysInteger')
222
+ foundByList = Shapes::ListShape.new(name: 'foundByList')
223
+ logicalOperator = Shapes::StringShape.new(name: 'logicalOperator')
219
224
  long = Shapes::IntegerShape.new(name: 'long')
220
225
  matchesNumber = Shapes::IntegerShape.new(name: 'matchesNumber')
221
226
  maxSize100 = Shapes::IntegerShape.new(name: 'maxSize100')
@@ -252,6 +257,10 @@ module Aws::CustomerProfiles
252
257
  AddProfileKeyResponse.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, location_name: "Values"))
253
258
  AddProfileKeyResponse.struct_class = Types::AddProfileKeyResponse
254
259
 
260
+ AdditionalSearchKey.add_member(:key_name, Shapes::ShapeRef.new(shape: name, required: true, location_name: "KeyName"))
261
+ AdditionalSearchKey.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, required: true, location_name: "Values"))
262
+ AdditionalSearchKey.struct_class = Types::AdditionalSearchKey
263
+
255
264
  Address.add_member(:address_1, Shapes::ShapeRef.new(shape: string1To255, location_name: "Address1"))
256
265
  Address.add_member(:address_2, Shapes::ShapeRef.new(shape: string1To255, location_name: "Address2"))
257
266
  Address.add_member(:address_3, Shapes::ShapeRef.new(shape: string1To255, location_name: "Address3"))
@@ -481,6 +490,10 @@ module Aws::CustomerProfiles
481
490
  FlowDefinition.add_member(:trigger_config, Shapes::ShapeRef.new(shape: TriggerConfig, required: true, location_name: "TriggerConfig"))
482
491
  FlowDefinition.struct_class = Types::FlowDefinition
483
492
 
493
+ FoundByKeyValue.add_member(:key_name, Shapes::ShapeRef.new(shape: name, location_name: "KeyName"))
494
+ FoundByKeyValue.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, location_name: "Values"))
495
+ FoundByKeyValue.struct_class = Types::FoundByKeyValue
496
+
484
497
  GetAutoMergingPreviewRequest.add_member(:domain_name, Shapes::ShapeRef.new(shape: name, required: true, location: "uri", location_name: "DomainName"))
485
498
  GetAutoMergingPreviewRequest.add_member(:consolidation, Shapes::ShapeRef.new(shape: Consolidation, required: true, location_name: "Consolidation"))
486
499
  GetAutoMergingPreviewRequest.add_member(:conflict_resolution, Shapes::ShapeRef.new(shape: ConflictResolution, required: true, location_name: "ConflictResolution"))
@@ -843,6 +856,7 @@ module Aws::CustomerProfiles
843
856
  Profile.add_member(:mailing_address, Shapes::ShapeRef.new(shape: Address, location_name: "MailingAddress"))
844
857
  Profile.add_member(:billing_address, Shapes::ShapeRef.new(shape: Address, location_name: "BillingAddress"))
845
858
  Profile.add_member(:attributes, Shapes::ShapeRef.new(shape: Attributes, location_name: "Attributes"))
859
+ Profile.add_member(:found_by_items, Shapes::ShapeRef.new(shape: foundByList, location_name: "FoundByItems"))
846
860
  Profile.struct_class = Types::Profile
847
861
 
848
862
  ProfileIdList.member = Shapes::ShapeRef.new(shape: uuid)
@@ -945,6 +959,8 @@ module Aws::CustomerProfiles
945
959
  SearchProfilesRequest.add_member(:domain_name, Shapes::ShapeRef.new(shape: name, required: true, location: "uri", location_name: "DomainName"))
946
960
  SearchProfilesRequest.add_member(:key_name, Shapes::ShapeRef.new(shape: name, required: true, location_name: "KeyName"))
947
961
  SearchProfilesRequest.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, required: true, location_name: "Values"))
962
+ SearchProfilesRequest.add_member(:additional_search_keys, Shapes::ShapeRef.new(shape: additionalSearchKeysList, location_name: "AdditionalSearchKeys"))
963
+ SearchProfilesRequest.add_member(:logical_operator, Shapes::ShapeRef.new(shape: logicalOperator, location_name: "LogicalOperator"))
948
964
  SearchProfilesRequest.struct_class = Types::SearchProfilesRequest
949
965
 
950
966
  SearchProfilesResponse.add_member(:items, Shapes::ShapeRef.new(shape: ProfileList, location_name: "Items"))
@@ -1087,6 +1103,10 @@ module Aws::CustomerProfiles
1087
1103
  ZendeskSourceProperties.add_member(:object, Shapes::ShapeRef.new(shape: Object, required: true, location_name: "Object"))
1088
1104
  ZendeskSourceProperties.struct_class = Types::ZendeskSourceProperties
1089
1105
 
1106
+ additionalSearchKeysList.member = Shapes::ShapeRef.new(shape: AdditionalSearchKey)
1107
+
1108
+ foundByList.member = Shapes::ShapeRef.new(shape: FoundByKeyValue)
1109
+
1090
1110
  requestValueList.member = Shapes::ShapeRef.new(shape: string1To255)
1091
1111
 
1092
1112
 
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::CustomerProfiles
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute region
14
+ # The AWS region used to dispatch the request.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute use_dual_stack
19
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute endpoint
29
+ # Override the endpoint used to send this request
30
+ #
31
+ # @return [String]
32
+ #
33
+ EndpointParameters = Struct.new(
34
+ :region,
35
+ :use_dual_stack,
36
+ :use_fips,
37
+ :endpoint,
38
+ ) do
39
+ include Aws::Structure
40
+
41
+ # @api private
42
+ class << self
43
+ PARAM_MAP = {
44
+ 'Region' => :region,
45
+ 'UseDualStack' => :use_dual_stack,
46
+ 'UseFIPS' => :use_fips,
47
+ 'Endpoint' => :endpoint,
48
+ }.freeze
49
+ end
50
+
51
+ def initialize(options = {})
52
+ self[:region] = options[:region]
53
+ self[:use_dual_stack] = options[:use_dual_stack]
54
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
55
+ if self[:use_dual_stack].nil?
56
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
57
+ end
58
+ self[:use_fips] = options[:use_fips]
59
+ self[:use_fips] = false if self[:use_fips].nil?
60
+ if self[:use_fips].nil?
61
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
62
+ end
63
+ self[:endpoint] = options[:endpoint]
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::CustomerProfiles
11
+ class EndpointProvider
12
+ def initialize(rule_set = nil)
13
+ @@rule_set ||= begin
14
+ endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
+ Aws::Endpoints::RuleSet.new(
16
+ version: endpoint_rules['version'],
17
+ service_id: endpoint_rules['serviceId'],
18
+ parameters: endpoint_rules['parameters'],
19
+ rules: endpoint_rules['rules']
20
+ )
21
+ end
22
+ @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
+ end
24
+
25
+ def resolve_endpoint(parameters)
26
+ @provider.resolve_endpoint(parameters)
27
+ end
28
+
29
+ # @api private
30
+ RULES = <<-JSON
31
+ eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
+ bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1bWVu
33
+ dGF0aW9uIjoiVGhlIEFXUyByZWdpb24gdXNlZCB0byBkaXNwYXRjaCB0aGUg
34
+ cmVxdWVzdC4iLCJ0eXBlIjoiU3RyaW5nIn0sIlVzZUR1YWxTdGFjayI6eyJi
35
+ dWlsdEluIjoiQVdTOjpVc2VEdWFsU3RhY2siLCJyZXF1aXJlZCI6dHJ1ZSwi
36
+ ZGVmYXVsdCI6ZmFsc2UsImRvY3VtZW50YXRpb24iOiJXaGVuIHRydWUsIHVz
37
+ ZSB0aGUgZHVhbC1zdGFjayBlbmRwb2ludC4gSWYgdGhlIGNvbmZpZ3VyZWQg
38
+ ZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBkdWFsLXN0YWNrLCBkaXNwYXRj
39
+ aGluZyB0aGUgcmVxdWVzdCBNQVkgcmV0dXJuIGFuIGVycm9yLiIsInR5cGUi
40
+ OiJCb29sZWFuIn0sIlVzZUZJUFMiOnsiYnVpbHRJbiI6IkFXUzo6VXNlRklQ
41
+ UyIsInJlcXVpcmVkIjp0cnVlLCJkZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRh
42
+ dGlvbiI6IldoZW4gdHJ1ZSwgc2VuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIEZJ
43
+ UFMtY29tcGxpYW50IHJlZ2lvbmFsIGVuZHBvaW50LiBJZiB0aGUgY29uZmln
44
+ dXJlZCBlbmRwb2ludCBkb2VzIG5vdCBoYXZlIGEgRklQUyBjb21wbGlhbnQg
45
+ ZW5kcG9pbnQsIGRpc3BhdGNoaW5nIHRoZSByZXF1ZXN0IHdpbGwgcmV0dXJu
46
+ IGFuIGVycm9yLiIsInR5cGUiOiJCb29sZWFuIn0sIkVuZHBvaW50Ijp7ImJ1
47
+ aWx0SW4iOiJTREs6OkVuZHBvaW50IiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1
48
+ bWVudGF0aW9uIjoiT3ZlcnJpZGUgdGhlIGVuZHBvaW50IHVzZWQgdG8gc2Vu
49
+ ZCB0aGlzIHJlcXVlc3QiLCJ0eXBlIjoiU3RyaW5nIn19LCJydWxlcyI6W3si
50
+ Y29uZGl0aW9ucyI6W3siZm4iOiJhd3MucGFydGl0aW9uIiwiYXJndiI6W3si
51
+ cmVmIjoiUmVnaW9uIn1dLCJhc3NpZ24iOiJQYXJ0aXRpb25SZXN1bHQifV0s
52
+ InR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
53
+ aXNTZXQiLCJhcmd2IjpbeyJyZWYiOiJFbmRwb2ludCJ9XX0seyJmbiI6InBh
54
+ cnNlVVJMIiwiYXJndiI6W3sicmVmIjoiRW5kcG9pbnQifV0sImFzc2lnbiI6
55
+ InVybCJ9XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6
56
+ W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQ
57
+ UyJ9LHRydWVdfV0sImVycm9yIjoiSW52YWxpZCBDb25maWd1cmF0aW9uOiBG
58
+ SVBTIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0
59
+ eXBlIjoiZXJyb3IifSx7ImNvbmRpdGlvbnMiOltdLCJ0eXBlIjoidHJlZSIs
60
+ InJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMi
61
+ LCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3RhY2sifSx0cnVlXX1dLCJlcnJv
62
+ ciI6IkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0
63
+ b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0eXBlIjoiZXJyb3Ii
64
+ fSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOnsicmVmIjoi
65
+ RW5kcG9pbnQifSwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlw
66
+ ZSI6ImVuZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJib29s
67
+ ZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVdfSx7
68
+ ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
69
+ dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
70
+ dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
71
+ Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
72
+ In0sInN1cHBvcnRzRklQUyJdfV19LHsiZm4iOiJib29sZWFuRXF1YWxzIiwi
73
+ YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
74
+ YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5
75
+ cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
76
+ dCI6eyJ1cmwiOiJodHRwczovL3Byb2ZpbGUtZmlwcy57UmVnaW9ufS57UGFy
77
+ dGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVz
78
+ Ijp7fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsiY29u
79
+ ZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBl
80
+ bmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBv
81
+ bmUgb3IgYm90aCIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpb
82
+ eyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBT
83
+ In0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9u
84
+ cyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6
85
+ ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwi
86
+ c3VwcG9ydHNGSVBTIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJj
87
+ b25kaXRpb25zIjpbXSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0
88
+ aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vcHJvZmlsZS1m
89
+ aXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fSIsInBy
90
+ b3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9
91
+ XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgaXMgZW5hYmxl
92
+ ZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBGSVBTIiwi
93
+ dHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVh
94
+ bkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9LHRydWVd
95
+ fV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZu
96
+ IjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRy
97
+ IiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRz
98
+ RHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25k
99
+ aXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9wcm9maWxl
100
+ LntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4
101
+ fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRw
102
+ b2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3IiOiJEdWFsU3RhY2sg
103
+ aXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9y
104
+ dCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0aW9ucyI6
105
+ W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vcHJvZmlsZS57UmVnaW9u
106
+ fS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVzIjp7
107
+ fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19XX0=
108
+
109
+ JSON
110
+ end
111
+ end