stream-chat-angular 6.0.0-beta.5 → 6.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/assets/i18n/en.d.ts +0 -1
- package/assets/version.d.ts +1 -1
- package/{esm2022 → esm2020}/assets/i18n/en.mjs +1 -2
- package/{esm2022 → esm2020}/assets/version.mjs +2 -2
- package/esm2020/lib/attachment-configuration.service.mjs +182 -0
- package/esm2020/lib/attachment-list/attachment-list.component.mjs +232 -0
- package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +55 -0
- package/esm2020/lib/attachment.service.mjs +481 -0
- package/esm2020/lib/avatar/avatar.component.mjs +160 -0
- package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +66 -0
- package/esm2020/lib/channel/channel.component.mjs +45 -0
- package/esm2020/lib/channel-header/channel-header.component.mjs +72 -0
- package/esm2020/lib/channel-list/channel-list.component.mjs +47 -0
- package/esm2020/lib/channel-preview/channel-preview.component.mjs +155 -0
- package/esm2020/lib/channel-query.mjs +77 -0
- package/esm2020/lib/channel.service.mjs +1561 -0
- package/esm2020/lib/chat-client.service.mjs +233 -0
- package/esm2020/lib/custom-templates.service.mjs +244 -0
- package/{esm2022 → esm2020}/lib/date-parser.service.mjs +5 -5
- package/esm2020/lib/file-utils.mjs +35 -0
- package/{esm2022 → esm2020}/lib/get-channel-display-text.mjs +1 -1
- package/esm2020/lib/get-message-translation.mjs +12 -0
- package/esm2020/lib/icon/icon-placeholder/icon-placeholder.component.mjs +28 -0
- package/{esm2022 → esm2020}/lib/icon/icon.component.mjs +5 -5
- package/{esm2022 → esm2020}/lib/icon/icon.module.mjs +11 -11
- package/{esm2022 → esm2020}/lib/icon/loading-indicator/loading-indicator.component.mjs +5 -5
- package/esm2020/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +20 -0
- package/{esm2022 → esm2020}/lib/list-users.mjs +1 -1
- package/esm2020/lib/message/message.component.mjs +486 -0
- package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +123 -0
- package/esm2020/lib/message-actions.service.mjs +187 -0
- package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +71 -0
- package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +333 -0
- package/{esm2022 → esm2020}/lib/message-input/emoji-input.service.mjs +7 -7
- package/esm2020/lib/message-input/message-input-config.service.mjs +50 -0
- package/esm2020/lib/message-input/message-input.component.mjs +507 -0
- package/{esm2022 → esm2020}/lib/message-input/textarea/textarea.component.mjs +6 -6
- package/{esm2022 → esm2020}/lib/message-input/textarea.directive.mjs +5 -5
- package/{esm2022 → esm2020}/lib/message-input/voice-recorder.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/message-list/group-styles.mjs +1 -1
- package/esm2020/lib/message-list/message-list.component.mjs +717 -0
- package/esm2020/lib/message-preview.mjs +21 -0
- package/esm2020/lib/message-reactions/message-reactions.component.mjs +168 -0
- package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +61 -0
- package/{esm2022 → esm2020}/lib/message-reactions.service.mjs +6 -6
- package/esm2020/lib/message-text/message-text.component.mjs +143 -0
- package/esm2020/lib/message.service.mjs +43 -0
- package/{esm2022 → esm2020}/lib/modal/modal.component.mjs +6 -6
- package/esm2020/lib/notification/notification.component.mjs +20 -0
- package/esm2020/lib/notification-list/notification-list.component.mjs +36 -0
- package/{esm2022 → esm2020}/lib/notification.service.mjs +6 -6
- package/esm2020/lib/paginated-list/paginated-list.component.mjs +94 -0
- package/{esm2022 → esm2020}/lib/parse-date.mjs +1 -1
- package/esm2020/lib/read-by.mjs +12 -0
- package/esm2020/lib/stream-autocomplete-textarea.module.mjs +33 -0
- package/{esm2022 → esm2020}/lib/stream-avatar.module.mjs +5 -5
- package/{esm2022 → esm2020}/lib/stream-chat.module.mjs +59 -59
- package/{esm2022 → esm2020}/lib/stream-i18n.service.mjs +6 -6
- package/esm2020/lib/stream-textarea.module.mjs +31 -0
- package/{esm2022 → esm2020}/lib/theme.service.mjs +6 -6
- package/esm2020/lib/thread/thread.component.mjs +51 -0
- package/{esm2022 → esm2020}/lib/transliteration.service.mjs +5 -5
- package/esm2020/lib/types-custom.mjs +2 -0
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/user-list/user-list.component.mjs +47 -0
- package/esm2020/lib/virtualized-list.service.mjs +271 -0
- package/{esm2022 → esm2020}/lib/virtualized-message-list.service.mjs +1 -1
- package/{esm2022 → esm2020}/lib/voice-recorder/amplitude-recorder.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/voice-recorder/audio-recorder.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/voice-recorder/media-recorder.mjs +1 -1
- package/esm2020/lib/voice-recorder/mp3-transcoder.mjs +61 -0
- package/esm2020/lib/voice-recorder/transcoder.service.mjs +121 -0
- package/esm2020/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +35 -0
- package/esm2020/lib/voice-recorder/voice-recorder.component.mjs +80 -0
- package/{esm2022 → esm2020}/lib/voice-recorder/voice-recorder.module.mjs +9 -9
- package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +112 -0
- package/esm2020/lib/voice-recording/voice-recording.component.mjs +91 -0
- package/{esm2022 → esm2020}/lib/voice-recording/voice-recording.module.mjs +5 -5
- package/{esm2022 → esm2020}/lib/wave-form-sampler.mjs +1 -1
- package/esm2020/public-api.mjs +86 -0
- package/esm2020/stream-chat.mjs +2 -0
- package/fesm2015/stream-chat-angular.mjs +9171 -0
- package/fesm2015/stream-chat-angular.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/stream-chat-angular.mjs +1251 -961
- package/fesm2020/stream-chat-angular.mjs.map +1 -0
- package/lib/attachment-configuration.service.d.ts +12 -12
- package/lib/attachment-list/attachment-list.component.d.ts +15 -10
- package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +1 -1
- package/lib/attachment.service.d.ts +12 -10
- package/lib/avatar/avatar.component.d.ts +7 -7
- package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +5 -5
- package/lib/channel/channel.component.d.ts +1 -1
- package/lib/channel-header/channel-header.component.d.ts +2 -2
- package/lib/channel-list/channel-list.component.d.ts +3 -4
- package/lib/channel-preview/channel-preview.component.d.ts +6 -6
- package/lib/channel-query.d.ts +26 -0
- package/lib/channel.service.d.ts +146 -154
- package/lib/chat-client.service.d.ts +17 -15
- package/lib/custom-templates.service.d.ts +50 -50
- package/lib/get-channel-display-text.d.ts +1 -2
- package/lib/get-message-translation.d.ts +3 -3
- package/lib/icon/icon-placeholder/icon-placeholder.component.d.ts +2 -2
- package/lib/icon/icon.component.d.ts +2 -2
- package/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -1
- package/lib/message/message.component.d.ts +6 -6
- package/lib/message-actions-box/message-actions-box.component.d.ts +5 -4
- package/lib/message-actions.service.d.ts +10 -10
- package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +1 -1
- package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +5 -5
- package/lib/message-input/emoji-input.service.d.ts +2 -2
- package/lib/message-input/message-input-config.service.d.ts +3 -3
- package/lib/message-input/message-input.component.d.ts +10 -33
- package/lib/message-input/textarea/textarea.component.d.ts +3 -3
- package/lib/message-input/textarea.directive.d.ts +1 -1
- package/lib/message-list/group-styles.d.ts +1 -1
- package/lib/message-list/message-list.component.d.ts +3 -2
- package/lib/message-preview.d.ts +2 -3
- package/lib/message-reactions/message-reactions.component.d.ts +9 -8
- package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +6 -5
- package/lib/message-reactions.service.d.ts +4 -4
- package/lib/message-text/message-text.component.d.ts +5 -5
- package/lib/message.service.d.ts +6 -7
- package/lib/modal/modal.component.d.ts +1 -1
- package/lib/notification/notification.component.d.ts +2 -2
- package/lib/notification-list/notification-list.component.d.ts +1 -0
- package/lib/notification.service.d.ts +1 -1
- package/lib/paginated-list/paginated-list.component.d.ts +2 -5
- package/lib/read-by.d.ts +1 -2
- package/lib/stream-i18n.service.d.ts +1 -1
- package/lib/theme.service.d.ts +1 -1
- package/lib/thread/thread.component.d.ts +3 -3
- package/lib/types-custom.d.ts +15 -0
- package/lib/types.d.ts +116 -155
- package/lib/user-list/user-list.component.d.ts +2 -3
- package/lib/virtualized-message-list.service.d.ts +1 -1
- package/lib/voice-recorder/amplitude-recorder.service.d.ts +2 -2
- package/lib/voice-recorder/media-recorder.d.ts +2 -2
- package/lib/voice-recorder/transcoder.service.d.ts +4 -4
- package/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.d.ts +1 -0
- package/lib/voice-recorder/voice-recorder.component.d.ts +2 -2
- package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +3 -3
- package/lib/voice-recording/voice-recording.component.d.ts +2 -3
- package/package.json +21 -15
- package/public-api.d.ts +3 -0
- package/src/assets/i18n/en.ts +0 -1
- package/src/assets/version.ts +1 -1
- package/esm2022/lib/attachment-configuration.service.mjs +0 -185
- package/esm2022/lib/attachment-list/attachment-list.component.mjs +0 -212
- package/esm2022/lib/attachment-preview-list/attachment-preview-list.component.mjs +0 -55
- package/esm2022/lib/attachment.service.mjs +0 -479
- package/esm2022/lib/avatar/avatar.component.mjs +0 -157
- package/esm2022/lib/avatar-placeholder/avatar-placeholder.component.mjs +0 -66
- package/esm2022/lib/channel/channel.component.mjs +0 -45
- package/esm2022/lib/channel-header/channel-header.component.mjs +0 -72
- package/esm2022/lib/channel-list/channel-list.component.mjs +0 -50
- package/esm2022/lib/channel-preview/channel-preview.component.mjs +0 -150
- package/esm2022/lib/channel.service.mjs +0 -1393
- package/esm2022/lib/chat-client.service.mjs +0 -227
- package/esm2022/lib/custom-templates.service.mjs +0 -244
- package/esm2022/lib/file-utils.mjs +0 -35
- package/esm2022/lib/get-message-translation.mjs +0 -12
- package/esm2022/lib/icon/icon-placeholder/icon-placeholder.component.mjs +0 -28
- package/esm2022/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +0 -20
- package/esm2022/lib/message/message.component.mjs +0 -486
- package/esm2022/lib/message-actions-box/message-actions-box.component.mjs +0 -120
- package/esm2022/lib/message-actions.service.mjs +0 -187
- package/esm2022/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +0 -71
- package/esm2022/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +0 -333
- package/esm2022/lib/message-input/message-input-config.service.mjs +0 -50
- package/esm2022/lib/message-input/message-input.component.mjs +0 -507
- package/esm2022/lib/message-list/message-list.component.mjs +0 -715
- package/esm2022/lib/message-preview.mjs +0 -21
- package/esm2022/lib/message-reactions/message-reactions.component.mjs +0 -165
- package/esm2022/lib/message-reactions-selector/message-reactions-selector.component.mjs +0 -57
- package/esm2022/lib/message-text/message-text.component.mjs +0 -143
- package/esm2022/lib/message.service.mjs +0 -43
- package/esm2022/lib/notification/notification.component.mjs +0 -20
- package/esm2022/lib/notification-list/notification-list.component.mjs +0 -33
- package/esm2022/lib/paginated-list/paginated-list.component.mjs +0 -94
- package/esm2022/lib/read-by.mjs +0 -12
- package/esm2022/lib/stream-autocomplete-textarea.module.mjs +0 -33
- package/esm2022/lib/stream-textarea.module.mjs +0 -31
- package/esm2022/lib/thread/thread.component.mjs +0 -51
- package/esm2022/lib/types.mjs +0 -2
- package/esm2022/lib/user-list/user-list.component.mjs +0 -47
- package/esm2022/lib/virtualized-list.service.mjs +0 -273
- package/esm2022/lib/voice-recorder/mp3-transcoder.mjs +0 -61
- package/esm2022/lib/voice-recorder/transcoder.service.mjs +0 -121
- package/esm2022/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +0 -32
- package/esm2022/lib/voice-recorder/voice-recorder.component.mjs +0 -80
- package/esm2022/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +0 -112
- package/esm2022/lib/voice-recording/voice-recording.component.mjs +0 -91
- package/esm2022/public-api.mjs +0 -82
- package/fesm2022/stream-chat-angular.mjs.map +0 -1
- /package/{esm2022 → esm2020}/lib/format-duration.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/injection-tokens.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/is-image-attachment.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/is-on-separate-date.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/is-safari.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/message-input/textarea.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/stream-chat-angular.mjs +0 -0
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- [Register](https://getstream.io/chat/trial/) to get an API key for Stream Chat
|
|
12
12
|
- [Angular Chat Tutorial](https://getstream.io/chat/angular/tutorial/)
|
|
13
13
|
- [Demo Apps](https://getstream.io/chat/demos/)
|
|
14
|
-
- [Docs](https://getstream.io/chat/docs/sdk/angular/)
|
|
14
|
+
- [Docs](https://getstream.io/chat/docs/sdk/angular/v6-rc/)
|
|
15
15
|
- [Chat UI Kit](https://getstream.io/chat/ui-kit/)
|
|
16
16
|
|
|
17
17
|
With our component library, you can build a variety of chat use cases, including:
|
|
@@ -32,7 +32,7 @@ For complete pricing and details visit our [Chat Pricing Page](https://getstream
|
|
|
32
32
|
|
|
33
33
|
## Docs
|
|
34
34
|
|
|
35
|
-
The [docs](https://getstream.io/chat/docs/sdk/angular/) provide a brief description about the components and services in the library.
|
|
35
|
+
The [docs](https://getstream.io/chat/docs/sdk/angular/v6-rc/) provide a brief description about the components and services in the library.
|
|
36
36
|
|
|
37
37
|
The Angular library is created using the [stream-chat-js](https://github.com/getstream/stream-chat-js) library. For the most common use cases our services should give a nice abstraction over this library, however you might need it for more advanced customization, the [documentation](https://getstream.io/chat/docs/js/) is on our website.
|
|
38
38
|
|
package/assets/i18n/en.d.ts
CHANGED
package/assets/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "6.0.0-
|
|
1
|
+
export declare const version = "6.0.0-rc.2";
|
|
@@ -109,7 +109,6 @@ export const en = {
|
|
|
109
109
|
"You can't uplod more than {{max}} attachments": "You can't uplod more than {{max}} attachments",
|
|
110
110
|
'You currently have {{count}} attachments, the maximum is {{max}}': 'You currently have {{count}} attachments, the maximum is {{max}}',
|
|
111
111
|
'and others': 'and others',
|
|
112
|
-
'Reload channels': 'Reload channels',
|
|
113
112
|
},
|
|
114
113
|
};
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9hc3NldHMvaTE4bi9lbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFO1FBQ1YsU0FBUyxFQUFFLFNBQVM7UUFDcEIsY0FBYyxFQUFFLGNBQWM7UUFDOUIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLEtBQUssRUFBRSxPQUFPO1FBQ2Qsb0JBQW9CLEVBQUUsb0JBQW9CO1FBQzFDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUN4Qyx5Q0FBeUMsRUFDdkMseUNBQXlDO1FBQzNDLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLGNBQWMsRUFBRSxjQUFjO1FBQzlCLDZCQUE2QixFQUFFLDZCQUE2QjtRQUM1RCxnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUN4QywwREFBMEQsRUFDeEQseURBQXlEO1FBQzNELHdCQUF3QixFQUFFLHdCQUF3QjtRQUNsRCx5QkFBeUIsRUFBRSx5QkFBeUI7UUFDcEQseUJBQXlCLEVBQUUseUJBQXlCO1FBQ3BELHVCQUF1QixFQUFFLHVCQUF1QjtRQUNoRCw0QkFBNEIsRUFBRSw0QkFBNEI7UUFDMUQsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELHNCQUFzQixFQUFFLG1DQUFtQztRQUMzRCxrREFBa0QsRUFDaEQsc0VBQXNFO1FBQ3hFLCtDQUErQyxFQUM3Qyw0REFBNEQ7UUFDOUQsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QywyQkFBMkIsRUFBRSwyQkFBMkI7UUFDeEQsSUFBSSxFQUFFLE1BQU07UUFDWixnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsK0JBQStCLEVBQUUsOEJBQThCO1FBQy9ELHFDQUFxQyxFQUNuQyw4Q0FBOEM7UUFDaEQsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLHVDQUF1QyxFQUNyQyx1Q0FBdUM7UUFDekMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtRQUN0QyxJQUFJLEVBQUUsTUFBTTtRQUNaLEdBQUcsRUFBRSxLQUFLO1FBQ1YsZUFBZSxFQUFFLGVBQWU7UUFDaEMsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNsQyxxQkFBcUIsRUFBRSxxQkFBcUI7UUFDNUMsbUJBQW1CLEVBQUUsbUJBQW1CO1FBQ3hDLGlCQUFpQixFQUFFLGlCQUFpQjtRQUNwQyxpQkFBaUIsRUFBRSxpQkFBaUI7UUFDcEMsR0FBRyxFQUFFLEtBQUs7UUFDVixXQUFXLEVBQUUsV0FBVztRQUN4QixLQUFLLEVBQUUsYUFBYTtRQUNwQixrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsY0FBYyxFQUFFLGNBQWM7UUFDOUIsSUFBSSxFQUFFLE1BQU07UUFDWiw2QkFBNkIsRUFBRSw2QkFBNkI7UUFDNUQsWUFBWSxFQUFFLFlBQVk7UUFDMUIsY0FBYyxFQUFFLGNBQWM7UUFDOUIsdUJBQXVCLEVBQUUsdUJBQXVCO1FBQ2hELDZCQUE2QixFQUFFLDZCQUE2QjtRQUM1RCxNQUFNLEVBQUUsY0FBYztRQUN0QixtQkFBbUIsRUFBRSxtQkFBbUI7UUFDeEMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsS0FBSyxFQUFFLE9BQU87UUFDZCwwQ0FBMEMsRUFDeEMsMENBQTBDO1FBQzVDLGdDQUFnQyxFQUFFLGdDQUFnQztRQUNsRSw0Q0FBNEMsRUFDMUMsNENBQTRDO1FBQzlDLElBQUksRUFBRSxNQUFNO1FBQ1oscUNBQXFDLEVBQ25DLHFDQUFxQztRQUN2QyxvREFBb0QsRUFDbEQsb0RBQW9EO1FBQ3RELCtDQUErQyxFQUM3QywrQ0FBK0M7UUFDakQsc0NBQXNDLEVBQ3BDLHNDQUFzQztRQUN4Qyx1QkFBdUIsRUFBRSx1QkFBdUI7UUFDaEQsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELDBCQUEwQixFQUFFLDBCQUEwQjtRQUN0RCwyQkFBMkIsRUFBRSwyQkFBMkI7UUFDeEQsNkJBQTZCLEVBQUUsNkJBQTZCO1FBQzVELDJCQUEyQixFQUFFLDJCQUEyQjtRQUN4RCxrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxPQUFPO1FBQ2QsSUFBSSxFQUFFLFNBQVM7UUFDZixtREFBbUQsRUFDakQsbURBQW1EO1FBQ3JELHlDQUF5QyxFQUN2Qyx5Q0FBeUM7UUFDM0MsK0NBQStDLEVBQzdDLCtDQUErQztRQUNqRCxtQkFBbUIsRUFBRSxtQkFBbUI7UUFDeEMsb0JBQW9CLEVBQUUsb0JBQW9CO1FBQzFDLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxrQkFBa0IsRUFBRSx3QkFBd0I7UUFDNUMsd0JBQXdCLEVBQUUsd0JBQXdCO1FBQ2xELHlDQUF5QyxFQUN2Qyx5Q0FBeUM7UUFDM0MsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNsQyxpQ0FBaUMsRUFBRSxpQ0FBaUM7UUFDcEUsaUVBQWlFLEVBQy9ELGlFQUFpRTtRQUNuRSxpQkFBaUIsRUFBRSxpQkFBaUI7UUFDcEMsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELDBCQUEwQixFQUFFLDBCQUEwQjtRQUN0RCxrREFBa0QsRUFDaEQsa0RBQWtEO1FBQ3BELGFBQWEsRUFBRSxhQUFhO1FBQzVCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLHFCQUFxQixFQUFFLHFCQUFxQjtRQUM1QyxXQUFXLEVBQUUsV0FBVztRQUN4QiwyQ0FBMkMsRUFDekMsMkNBQTJDO1FBQzdDLDBCQUEwQixFQUFFLDBCQUEwQjtRQUN0RCx3Q0FBd0MsRUFDdEMsd0NBQXdDO1FBQzFDLCtCQUErQixFQUFFLCtCQUErQjtRQUNoRSwrQ0FBK0MsRUFDN0MsK0NBQStDO1FBQ2pELGtFQUFrRSxFQUNoRSxrRUFBa0U7UUFDcEUsWUFBWSxFQUFFLFlBQVk7UUFDMUIsaUJBQWlCLEVBQUUsaUJBQWlCO0tBQ3JDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbiA9IHtcbiAgc3RyZWFtQ2hhdDoge1xuICAgICcxIHJlcGx5JzogJzEgcmVwbHknLFxuICAgICdBdHRhY2ggZmlsZXMnOiAnQXR0YWNoIGZpbGVzJyxcbiAgICBDYW5jZWw6ICdDYW5jZWwnLFxuICAgICdDaGFubmVsIE1pc3NpbmcnOiAnQ2hhbm5lbCBNaXNzaW5nJyxcbiAgICBDbG9zZTogJ0Nsb3NlJyxcbiAgICAnQ2xvc2UgZW1vamkgcGlja2VyJzogJ0Nsb3NlIGVtb2ppIHBpY2tlcicsXG4gICAgJ0NvbW1hbmRzIG1hdGNoaW5nJzogJ0NvbW1hbmRzIG1hdGNoaW5nJyxcbiAgICAnQ29ubmVjdGlvbiBmYWlsdXJlLCByZWNvbm5lY3Rpbmcgbm93Li4uJzpcbiAgICAgICdDb25uZWN0aW9uIGZhaWx1cmUsIHJlY29ubmVjdGluZyBub3cuLi4nLFxuICAgIERlbGV0ZTogJ0RlbGV0ZScsXG4gICAgRGVsaXZlcmVkOiAnRGVsaXZlcmVkJyxcbiAgICAnRWRpdCBNZXNzYWdlJzogJ0VkaXQgTWVzc2FnZScsXG4gICAgJ0VkaXQgbWVzc2FnZSByZXF1ZXN0IGZhaWxlZCc6ICdFZGl0IG1lc3NhZ2UgcmVxdWVzdCBmYWlsZWQnLFxuICAgICdFbW9qaSBtYXRjaGluZyc6ICdFbW9qaSBtYXRjaGluZycsXG4gICAgJ0VtcHR5IG1lc3NhZ2UuLi4nOiAnRW1wdHkgbWVzc2FnZS4uLicsXG4gICAgJ0Vycm9yIGFkZGluZyBmbGFnJzogJ0Vycm9yIGFkZGluZyBmbGFnJyxcbiAgICAnRXJyb3IgY29ubmVjdGluZyB0byBjaGF0LCByZWZyZXNoIHRoZSBwYWdlIHRvIHRyeSBhZ2Fpbi4nOlxuICAgICAgJ0Vycm9yIGNvbm5lY3RpbmcgdG8gY2hhdCwgcmVmcmVzaCB0aGUgcGFnZSB0byB0cnkgYWdhaW4nLFxuICAgICdFcnJvciBkZWxldGluZyBtZXNzYWdlJzogJ0Vycm9yIGRlbGV0aW5nIG1lc3NhZ2UnLFxuICAgICdFcnJvciBsb2FkaW5nIHJlYWN0aW9ucyc6ICdFcnJvciBsb2FkaW5nIHJlYWN0aW9ucycsXG4gICAgJ0Vycm9yIG11dGluZyBhIHVzZXIgLi4uJzogJ0Vycm9yIG11dGluZyBhIHVzZXIgLi4uJyxcbiAgICAnRXJyb3IgcGlubmluZyBtZXNzYWdlJzogJ0Vycm9yIHBpbm5pbmcgbWVzc2FnZScsXG4gICAgJ0Vycm9yIHJlbW92aW5nIG1lc3NhZ2UgcGluJzogJ0Vycm9yIHJlbW92aW5nIG1lc3NhZ2UgcGluJyxcbiAgICAnRXJyb3IgdW5tdXRpbmcgYSB1c2VyIC4uLic6ICdFcnJvciB1bm11dGluZyBhIHVzZXIgLi4uJyxcbiAgICAnRXJyb3IgdXBsb2FkaW5nIGZpbGUnOiAnRXJyb3IgdXBsb2FkaW5nIGZpbGUgXCJ7eyBuYW1lIH19XCInLFxuICAgICdFcnJvciB1cGxvYWRpbmcgZmlsZSwgbWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQnOlxuICAgICAgJ0Vycm9yIHVwbG9hZGluZyBcInt7IG5hbWUgfX1cIiwgbWF4aW11bSBmaWxlIHNpemUge3sgbGltaXQgfX0gZXhjZWVkZWQnLFxuICAgICdFcnJvciB1cGxvYWRpbmcgZmlsZSwgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQnOlxuICAgICAgJ0Vycm9yIHVwbG9hZGluZyBcInt7IG5hbWUgfX1cIiwgdHlwZSB7eyBleHQgfX0gbm90IHN1cHBvcnRlZCcsXG4gICAgJ0Vycm9yIGRlbGV0aW5nIGF0dGFjaG1lbnQnOiAnRXJyb3IgZGVsZXRpbmcgYXR0YWNobWVudCcsXG4gICAgJ0Vycm9yIMK3IFVuc2VudCc6IFwiTWVzc2FnZSBjb3VsZG4ndCBiZSBzZW50XCIsXG4gICAgJ0Vycm9yOiB7eyBlcnJvck1lc3NhZ2UgfX0nOiAnRXJyb3I6IHt7IGVycm9yTWVzc2FnZSB9fScsXG4gICAgRmxhZzogJ0ZsYWcnLFxuICAgICdNZXNzYWdlIEZhaWxlZCc6ICdNZXNzYWdlIEZhaWxlZCcsXG4gICAgJ01lc3NhZ2UgRmFpbGVkIMK3IFVuYXV0aG9yaXplZCc6ICdVbmF1dGhvcml6ZWQgdG8gc2VuZCBtZXNzYWdlJyxcbiAgICAnTWVzc2FnZSBGYWlsZWQgwrcgQ2xpY2sgdG8gdHJ5IGFnYWluJzpcbiAgICAgIFwiTWVzc2FnZSBjb3VsZG4ndCBiZSBzZW50LCBjbGljayB0byB0cnkgYWdhaW5cIixcbiAgICAnTWVzc2FnZSBkZWxldGVkJzogJ01lc3NhZ2UgZGVsZXRlZCcsXG4gICAgJ01lc3NhZ2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGZsYWdnZWQnOlxuICAgICAgJ01lc3NhZ2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGZsYWdnZWQnLFxuICAgICdNZXNzYWdlIHBpbm5lZCc6ICdNZXNzYWdlIHBpbm5lZCcsXG4gICAgJ01lc3NhZ2UgdW5waW5uZWQnOiAnTWVzc2FnZSB1bnBpbm5lZCcsXG4gICAgTXV0ZTogJ011dGUnLFxuICAgIE5ldzogJ05ldycsXG4gICAgJ05ldyBNZXNzYWdlcyEnOiAnTmV3IE1lc3NhZ2VzIScsXG4gICAgJ05vIHJlc3VsdHMgZm91bmQnOiAnTm8gcmVzdWx0cyBmb3VuZCcsXG4gICAgJ05vdGhpbmcgeWV0Li4uJzogJ05vdGhpbmcgeWV0Li4uJyxcbiAgICAnT25seSB2aXNpYmxlIHRvIHlvdSc6ICdPbmx5IHZpc2libGUgdG8geW91JyxcbiAgICAnT3BlbiBlbW9qaSBwaWNrZXInOiAnT3BlbiBlbW9qaSBwaWNrZXInLFxuICAgICdQZW9wbGUgbWF0Y2hpbmcnOiAnUGVvcGxlIG1hdGNoaW5nJyxcbiAgICAnUGljayB5b3VyIGVtb2ppJzogJ1BpY2sgeW91ciBlbW9qaScsXG4gICAgUGluOiAnUGluJyxcbiAgICAnUGlubmVkIGJ5JzogJ1Bpbm5lZCBieScsXG4gICAgUmVwbHk6ICdRdW90ZSBSZXBseScsXG4gICAgJ1JlcGx5IHRvIE1lc3NhZ2UnOiAnUmVwbHkgdG8gTWVzc2FnZScsXG4gICAgU2VhcmNoOiAnU2VhcmNoJyxcbiAgICAnU2VhcmNoaW5nLi4uJzogJ1NlYXJjaGluZy4uLicsXG4gICAgU2VuZDogJ1NlbmQnLFxuICAgICdTZW5kIG1lc3NhZ2UgcmVxdWVzdCBmYWlsZWQnOiAnU2VuZCBtZXNzYWdlIHJlcXVlc3QgZmFpbGVkJyxcbiAgICAnU2VuZGluZy4uLic6ICdTZW5kaW5nLi4uJyxcbiAgICAnU2xvdyBNb2RlIE9OJzogJ1Nsb3cgTW9kZSBPTicsXG4gICAgJ1N0YXJ0IG9mIGEgbmV3IHRocmVhZCc6ICdTdGFydCBvZiBhIG5ldyB0aHJlYWQnLFxuICAgICdUaGlzIG1lc3NhZ2Ugd2FzIGRlbGV0ZWQuLi4nOiAnVGhpcyBtZXNzYWdlIHdhcyBkZWxldGVkLi4uJyxcbiAgICBUaHJlYWQ6ICdUaHJlYWQgcmVwbHknLFxuICAgICdUeXBlIHlvdXIgbWVzc2FnZSc6ICdUeXBlIHlvdXIgbWVzc2FnZScsXG4gICAgVW5tdXRlOiAnVW5tdXRlJyxcbiAgICBVbnBpbjogJ1VucGluJyxcbiAgICAnV2FpdCB1bnRpbCBhbGwgYXR0YWNobWVudHMgaGF2ZSB1cGxvYWRlZCc6XG4gICAgICAnV2FpdCB1bnRpbCBhbGwgYXR0YWNobWVudHMgaGF2ZSB1cGxvYWRlZCcsXG4gICAgJ1lvdSBoYXZlIG5vIGNoYW5uZWxzIGN1cnJlbnRseSc6ICdZb3UgaGF2ZSBubyBjaGFubmVscyBjdXJyZW50bHknLFxuICAgIFwiWW91J3ZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzXCI6XG4gICAgICBcIllvdSd2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlc1wiLFxuICAgIGxpdmU6ICdsaXZlJyxcbiAgICAndGhpcyBjb250ZW50IGNvdWxkIG5vdCBiZSBkaXNwbGF5ZWQnOlxuICAgICAgJ3RoaXMgY29udGVudCBjb3VsZCBub3QgYmUgZGlzcGxheWVkJyxcbiAgICAne3sgY29tbWFTZXBhcmF0ZWRVc2VycyB9fSBhbmQge3sgbW9yZUNvdW50IH19IG1vcmUnOlxuICAgICAgJ3t7IGNvbW1hU2VwYXJhdGVkVXNlcnMgfX0gYW5kIHt7IG1vcmVDb3VudCB9fSBtb3JlJyxcbiAgICAne3sgY29tbWFTZXBhcmF0ZWRVc2VycyB9fSwgYW5kIHt7IGxhc3RVc2VyIH19JzpcbiAgICAgICd7eyBjb21tYVNlcGFyYXRlZFVzZXJzIH19LCBhbmQge3sgbGFzdFVzZXIgfX0nLFxuICAgICd7eyBmaXJzdFVzZXIgfX0gYW5kIHt7IHNlY29uZFVzZXIgfX0nOlxuICAgICAgJ3t7IGZpcnN0VXNlciB9fSBhbmQge3sgc2Vjb25kVXNlciB9fScsXG4gICAgJ3t7IGltYWdlQ291bnQgfX0gbW9yZSc6ICd7eyBpbWFnZUNvdW50IH19IG1vcmUnLFxuICAgICd7eyBtZW1iZXJDb3VudCB9fSBtZW1iZXJzJzogJ3t7IG1lbWJlckNvdW50IH19IG1lbWJlcnMnLFxuICAgICd7eyByZXBseUNvdW50IH19IHJlcGxpZXMnOiAne3sgcmVwbHlDb3VudCB9fSByZXBsaWVzJyxcbiAgICAne3sgdXNlciB9fSBoYXMgYmVlbiBtdXRlZCc6ICd7eyB1c2VyIH19IGhhcyBiZWVuIG11dGVkJyxcbiAgICAne3sgdXNlciB9fSBoYXMgYmVlbiB1bm11dGVkJzogJ3t7IHVzZXIgfX0gaGFzIGJlZW4gdW5tdXRlZCcsXG4gICAgJ3t7IHdhdGNoZXJDb3VudCB9fSBvbmxpbmUnOiAne3sgd2F0Y2hlckNvdW50IH19IG9ubGluZScsXG4gICAgJ/Cfj5kgQXR0YWNobWVudC4uLic6ICfwn4+ZIEF0dGFjaG1lbnQuLi4nLFxuICAgICdDb25uZWN0aW9uIGVycm9yJzogJ0Nvbm5lY3Rpb24gZXJyb3InLFxuICAgICdMb2FkIG1vcmUnOiAnTG9hZCBtb3JlJyxcbiAgICBmYWlsZWQ6ICdmYWlsZWQnLFxuICAgIHJldHJ5OiAncmV0cnknLFxuICAgIHRlc3Q6ICdzdWNjZXNzJyxcbiAgICAnU2VuZGluZyBsaW5rcyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnZlcnNhdGlvbic6XG4gICAgICAnU2VuZGluZyBsaW5rcyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnZlcnNhdGlvbicsXG4gICAgXCJZb3UgY2FuJ3Qgc2VuZCBtZXNzYWdlcyBpbiB0aGlzIGNoYW5uZWxcIjpcbiAgICAgIFwiWW91IGNhbid0IHNlbmQgbWVzc2FnZXMgaW4gdGhpcyBjaGFubmVsXCIsXG4gICAgXCJZb3UgY2FuJ3Qgc2VuZCB0aHJlYWQgcmVwbGllcyBpbiB0aGlzIGNoYW5uZWxcIjpcbiAgICAgIFwiWW91IGNhbid0IHNlbmQgdGhyZWFkIHJlcGxpZXMgaW4gdGhpcyBjaGFubmVsXCIsXG4gICAgJ01lc3NhZ2Ugbm90IGZvdW5kJzogJ01lc3NhZ2Ugbm90IGZvdW5kJyxcbiAgICAnTm8gY2hhdHMgaGVyZSB5ZXTigKYnOiAnTm8gY2hhdHMgaGVyZSB5ZXTigKYnLFxuICAgICd1c2VyIGlzIHR5cGluZyc6ICd7eyB1c2VyIH19IGlzIHR5cGluZycsXG4gICAgJ3VzZXJzIGFyZSB0eXBpbmcnOiAne3sgdXNlcnMgfX0gYXJlIHR5cGluZycsXG4gICAgJ0Vycm9yIGxvYWRpbmcgY2hhbm5lbHMnOiAnRXJyb3IgbG9hZGluZyBjaGFubmVscycsXG4gICAgJ1NlZSBvcmlnaW5hbCAoYXV0b21hdGljYWxseSB0cmFuc2xhdGVkKSc6XG4gICAgICAnU2VlIG9yaWdpbmFsIChhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQpJyxcbiAgICAnU2VlIHRyYW5zbGF0aW9uJzogJ1NlZSB0cmFuc2xhdGlvbicsXG4gICAgJ01hcmsgYXMgdW5yZWFkJzogJ01hcmsgYXMgdW5yZWFkJyxcbiAgICAnRXJyb3IgbWFya2luZyBtZXNzYWdlIGFzIHVucmVhZCc6ICdFcnJvciBtYXJraW5nIG1lc3NhZ2UgYXMgdW5yZWFkJyxcbiAgICAnRXJyb3IsIG9ubHkgdGhlIGZpcnN0IHt7Y291bnR9fSBtZXNzYWdlIGNhbiBiZSBtYXJrZWQgYXMgdW5yZWFkJzpcbiAgICAgICdFcnJvciwgb25seSB0aGUgZmlyc3Qge3tjb3VudH19IG1lc3NhZ2UgY2FuIGJlIG1hcmtlZCBhcyB1bnJlYWQnLFxuICAgICdVbnJlYWQgbWVzc2FnZXMnOiAnVW5yZWFkIG1lc3NhZ2VzJyxcbiAgICAne3tjb3VudH19IHVucmVhZCBtZXNzYWdlcyc6ICd7e2NvdW50fX0gdW5yZWFkIG1lc3NhZ2VzJyxcbiAgICAne3tjb3VudH19IHVucmVhZCBtZXNzYWdlJzogJ3t7Y291bnR9fSB1bnJlYWQgbWVzc2FnZScsXG4gICAgJ1RoaXMgbWVzc2FnZSBkaWQgbm90IG1lZXQgb3VyIGNvbnRlbnQgZ3VpZGVsaW5lcyc6XG4gICAgICAnVGhpcyBtZXNzYWdlIGRpZCBub3QgbWVldCBvdXIgY29udGVudCBndWlkZWxpbmVzJyxcbiAgICAnU2VuZCBBbnl3YXknOiAnU2VuZCBBbnl3YXknLFxuICAgIEVkaXRlZDogJ0VkaXRlZCcsXG4gICAgJ0Vycm9yIHBsYXlpbmcgYXVkaW8nOiAnRXJyb3IgcGxheWluZyBhdWRpbycsXG4gICAgJ0NvcHkgdGV4dCc6ICdDb3B5IHRleHQnLFxuICAgICdQbGVhc2UgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgbWljcm9ocG9uZSc6XG4gICAgICAnUGxlYXNlIGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIG1pY3JvaHBvbmUnLFxuICAgICdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnOiAnRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJyxcbiAgICAnQW4gZXJyb3IgaGFzIG9jY3VycmVkIGR1cmluZyByZWNvcmRpbmcnOlxuICAgICAgJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCBkdXJpbmcgcmVjb3JkaW5nJyxcbiAgICAnTWVkaWEgcmVjb3JkaW5nIG5vdCBzdXBwb3J0ZWQnOiAnTWVkaWEgcmVjb3JkaW5nIG5vdCBzdXBwb3J0ZWQnLFxuICAgIFwiWW91IGNhbid0IHVwbG9kIG1vcmUgdGhhbiB7e21heH19IGF0dGFjaG1lbnRzXCI6XG4gICAgICBcIllvdSBjYW4ndCB1cGxvZCBtb3JlIHRoYW4ge3ttYXh9fSBhdHRhY2htZW50c1wiLFxuICAgICdZb3UgY3VycmVudGx5IGhhdmUge3tjb3VudH19IGF0dGFjaG1lbnRzLCB0aGUgbWF4aW11bSBpcyB7e21heH19JzpcbiAgICAgICdZb3UgY3VycmVudGx5IGhhdmUge3tjb3VudH19IGF0dGFjaG1lbnRzLCB0aGUgbWF4aW11bSBpcyB7e21heH19JyxcbiAgICAnYW5kIG90aGVycyc6ICdhbmQgb3RoZXJzJyxcbiAgICAnUmVsb2FkIGNoYW5uZWxzJzogJ1JlbG9hZCBjaGFubmVscycsXG4gIH0sXG59O1xuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9hc3NldHMvaTE4bi9lbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFO1FBQ1YsU0FBUyxFQUFFLFNBQVM7UUFDcEIsY0FBYyxFQUFFLGNBQWM7UUFDOUIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLEtBQUssRUFBRSxPQUFPO1FBQ2Qsb0JBQW9CLEVBQUUsb0JBQW9CO1FBQzFDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUN4Qyx5Q0FBeUMsRUFDdkMseUNBQXlDO1FBQzNDLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLGNBQWMsRUFBRSxjQUFjO1FBQzlCLDZCQUE2QixFQUFFLDZCQUE2QjtRQUM1RCxnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUN4QywwREFBMEQsRUFDeEQseURBQXlEO1FBQzNELHdCQUF3QixFQUFFLHdCQUF3QjtRQUNsRCx5QkFBeUIsRUFBRSx5QkFBeUI7UUFDcEQseUJBQXlCLEVBQUUseUJBQXlCO1FBQ3BELHVCQUF1QixFQUFFLHVCQUF1QjtRQUNoRCw0QkFBNEIsRUFBRSw0QkFBNEI7UUFDMUQsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELHNCQUFzQixFQUFFLG1DQUFtQztRQUMzRCxrREFBa0QsRUFDaEQsc0VBQXNFO1FBQ3hFLCtDQUErQyxFQUM3Qyw0REFBNEQ7UUFDOUQsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QywyQkFBMkIsRUFBRSwyQkFBMkI7UUFDeEQsSUFBSSxFQUFFLE1BQU07UUFDWixnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsK0JBQStCLEVBQUUsOEJBQThCO1FBQy9ELHFDQUFxQyxFQUNuQyw4Q0FBOEM7UUFDaEQsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLHVDQUF1QyxFQUNyQyx1Q0FBdUM7UUFDekMsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtRQUN0QyxJQUFJLEVBQUUsTUFBTTtRQUNaLEdBQUcsRUFBRSxLQUFLO1FBQ1YsZUFBZSxFQUFFLGVBQWU7UUFDaEMsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNsQyxxQkFBcUIsRUFBRSxxQkFBcUI7UUFDNUMsbUJBQW1CLEVBQUUsbUJBQW1CO1FBQ3hDLGlCQUFpQixFQUFFLGlCQUFpQjtRQUNwQyxpQkFBaUIsRUFBRSxpQkFBaUI7UUFDcEMsR0FBRyxFQUFFLEtBQUs7UUFDVixXQUFXLEVBQUUsV0FBVztRQUN4QixLQUFLLEVBQUUsYUFBYTtRQUNwQixrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsY0FBYyxFQUFFLGNBQWM7UUFDOUIsSUFBSSxFQUFFLE1BQU07UUFDWiw2QkFBNkIsRUFBRSw2QkFBNkI7UUFDNUQsWUFBWSxFQUFFLFlBQVk7UUFDMUIsY0FBYyxFQUFFLGNBQWM7UUFDOUIsdUJBQXVCLEVBQUUsdUJBQXVCO1FBQ2hELDZCQUE2QixFQUFFLDZCQUE2QjtRQUM1RCxNQUFNLEVBQUUsY0FBYztRQUN0QixtQkFBbUIsRUFBRSxtQkFBbUI7UUFDeEMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsS0FBSyxFQUFFLE9BQU87UUFDZCwwQ0FBMEMsRUFDeEMsMENBQTBDO1FBQzVDLGdDQUFnQyxFQUFFLGdDQUFnQztRQUNsRSw0Q0FBNEMsRUFDMUMsNENBQTRDO1FBQzlDLElBQUksRUFBRSxNQUFNO1FBQ1oscUNBQXFDLEVBQ25DLHFDQUFxQztRQUN2QyxvREFBb0QsRUFDbEQsb0RBQW9EO1FBQ3RELCtDQUErQyxFQUM3QywrQ0FBK0M7UUFDakQsc0NBQXNDLEVBQ3BDLHNDQUFzQztRQUN4Qyx1QkFBdUIsRUFBRSx1QkFBdUI7UUFDaEQsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELDBCQUEwQixFQUFFLDBCQUEwQjtRQUN0RCwyQkFBMkIsRUFBRSwyQkFBMkI7UUFDeEQsNkJBQTZCLEVBQUUsNkJBQTZCO1FBQzVELDJCQUEyQixFQUFFLDJCQUEyQjtRQUN4RCxrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxPQUFPO1FBQ2QsSUFBSSxFQUFFLFNBQVM7UUFDZixtREFBbUQsRUFDakQsbURBQW1EO1FBQ3JELHlDQUF5QyxFQUN2Qyx5Q0FBeUM7UUFDM0MsK0NBQStDLEVBQzdDLCtDQUErQztRQUNqRCxtQkFBbUIsRUFBRSxtQkFBbUI7UUFDeEMsb0JBQW9CLEVBQUUsb0JBQW9CO1FBQzFDLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxrQkFBa0IsRUFBRSx3QkFBd0I7UUFDNUMsd0JBQXdCLEVBQUUsd0JBQXdCO1FBQ2xELHlDQUF5QyxFQUN2Qyx5Q0FBeUM7UUFDM0MsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNsQyxpQ0FBaUMsRUFBRSxpQ0FBaUM7UUFDcEUsaUVBQWlFLEVBQy9ELGlFQUFpRTtRQUNuRSxpQkFBaUIsRUFBRSxpQkFBaUI7UUFDcEMsMkJBQTJCLEVBQUUsMkJBQTJCO1FBQ3hELDBCQUEwQixFQUFFLDBCQUEwQjtRQUN0RCxrREFBa0QsRUFDaEQsa0RBQWtEO1FBQ3BELGFBQWEsRUFBRSxhQUFhO1FBQzVCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLHFCQUFxQixFQUFFLHFCQUFxQjtRQUM1QyxXQUFXLEVBQUUsV0FBVztRQUN4QiwyQ0FBMkMsRUFDekMsMkNBQTJDO1FBQzdDLDBCQUEwQixFQUFFLDBCQUEwQjtRQUN0RCx3Q0FBd0MsRUFDdEMsd0NBQXdDO1FBQzFDLCtCQUErQixFQUFFLCtCQUErQjtRQUNoRSwrQ0FBK0MsRUFDN0MsK0NBQStDO1FBQ2pELGtFQUFrRSxFQUNoRSxrRUFBa0U7UUFDcEUsWUFBWSxFQUFFLFlBQVk7S0FDM0I7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVuID0ge1xuICBzdHJlYW1DaGF0OiB7XG4gICAgJzEgcmVwbHknOiAnMSByZXBseScsXG4gICAgJ0F0dGFjaCBmaWxlcyc6ICdBdHRhY2ggZmlsZXMnLFxuICAgIENhbmNlbDogJ0NhbmNlbCcsXG4gICAgJ0NoYW5uZWwgTWlzc2luZyc6ICdDaGFubmVsIE1pc3NpbmcnLFxuICAgIENsb3NlOiAnQ2xvc2UnLFxuICAgICdDbG9zZSBlbW9qaSBwaWNrZXInOiAnQ2xvc2UgZW1vamkgcGlja2VyJyxcbiAgICAnQ29tbWFuZHMgbWF0Y2hpbmcnOiAnQ29tbWFuZHMgbWF0Y2hpbmcnLFxuICAgICdDb25uZWN0aW9uIGZhaWx1cmUsIHJlY29ubmVjdGluZyBub3cuLi4nOlxuICAgICAgJ0Nvbm5lY3Rpb24gZmFpbHVyZSwgcmVjb25uZWN0aW5nIG5vdy4uLicsXG4gICAgRGVsZXRlOiAnRGVsZXRlJyxcbiAgICBEZWxpdmVyZWQ6ICdEZWxpdmVyZWQnLFxuICAgICdFZGl0IE1lc3NhZ2UnOiAnRWRpdCBNZXNzYWdlJyxcbiAgICAnRWRpdCBtZXNzYWdlIHJlcXVlc3QgZmFpbGVkJzogJ0VkaXQgbWVzc2FnZSByZXF1ZXN0IGZhaWxlZCcsXG4gICAgJ0Vtb2ppIG1hdGNoaW5nJzogJ0Vtb2ppIG1hdGNoaW5nJyxcbiAgICAnRW1wdHkgbWVzc2FnZS4uLic6ICdFbXB0eSBtZXNzYWdlLi4uJyxcbiAgICAnRXJyb3IgYWRkaW5nIGZsYWcnOiAnRXJyb3IgYWRkaW5nIGZsYWcnLFxuICAgICdFcnJvciBjb25uZWN0aW5nIHRvIGNoYXQsIHJlZnJlc2ggdGhlIHBhZ2UgdG8gdHJ5IGFnYWluLic6XG4gICAgICAnRXJyb3IgY29ubmVjdGluZyB0byBjaGF0LCByZWZyZXNoIHRoZSBwYWdlIHRvIHRyeSBhZ2FpbicsXG4gICAgJ0Vycm9yIGRlbGV0aW5nIG1lc3NhZ2UnOiAnRXJyb3IgZGVsZXRpbmcgbWVzc2FnZScsXG4gICAgJ0Vycm9yIGxvYWRpbmcgcmVhY3Rpb25zJzogJ0Vycm9yIGxvYWRpbmcgcmVhY3Rpb25zJyxcbiAgICAnRXJyb3IgbXV0aW5nIGEgdXNlciAuLi4nOiAnRXJyb3IgbXV0aW5nIGEgdXNlciAuLi4nLFxuICAgICdFcnJvciBwaW5uaW5nIG1lc3NhZ2UnOiAnRXJyb3IgcGlubmluZyBtZXNzYWdlJyxcbiAgICAnRXJyb3IgcmVtb3ZpbmcgbWVzc2FnZSBwaW4nOiAnRXJyb3IgcmVtb3ZpbmcgbWVzc2FnZSBwaW4nLFxuICAgICdFcnJvciB1bm11dGluZyBhIHVzZXIgLi4uJzogJ0Vycm9yIHVubXV0aW5nIGEgdXNlciAuLi4nLFxuICAgICdFcnJvciB1cGxvYWRpbmcgZmlsZSc6ICdFcnJvciB1cGxvYWRpbmcgZmlsZSBcInt7IG5hbWUgfX1cIicsXG4gICAgJ0Vycm9yIHVwbG9hZGluZyBmaWxlLCBtYXhpbXVtIGZpbGUgc2l6ZSBleGNlZWRlZCc6XG4gICAgICAnRXJyb3IgdXBsb2FkaW5nIFwie3sgbmFtZSB9fVwiLCBtYXhpbXVtIGZpbGUgc2l6ZSB7eyBsaW1pdCB9fSBleGNlZWRlZCcsXG4gICAgJ0Vycm9yIHVwbG9hZGluZyBmaWxlLCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCc6XG4gICAgICAnRXJyb3IgdXBsb2FkaW5nIFwie3sgbmFtZSB9fVwiLCB0eXBlIHt7IGV4dCB9fSBub3Qgc3VwcG9ydGVkJyxcbiAgICAnRXJyb3IgZGVsZXRpbmcgYXR0YWNobWVudCc6ICdFcnJvciBkZWxldGluZyBhdHRhY2htZW50JyxcbiAgICAnRXJyb3IgwrcgVW5zZW50JzogXCJNZXNzYWdlIGNvdWxkbid0IGJlIHNlbnRcIixcbiAgICAnRXJyb3I6IHt7IGVycm9yTWVzc2FnZSB9fSc6ICdFcnJvcjoge3sgZXJyb3JNZXNzYWdlIH19JyxcbiAgICBGbGFnOiAnRmxhZycsXG4gICAgJ01lc3NhZ2UgRmFpbGVkJzogJ01lc3NhZ2UgRmFpbGVkJyxcbiAgICAnTWVzc2FnZSBGYWlsZWQgwrcgVW5hdXRob3JpemVkJzogJ1VuYXV0aG9yaXplZCB0byBzZW5kIG1lc3NhZ2UnLFxuICAgICdNZXNzYWdlIEZhaWxlZCDCtyBDbGljayB0byB0cnkgYWdhaW4nOlxuICAgICAgXCJNZXNzYWdlIGNvdWxkbid0IGJlIHNlbnQsIGNsaWNrIHRvIHRyeSBhZ2FpblwiLFxuICAgICdNZXNzYWdlIGRlbGV0ZWQnOiAnTWVzc2FnZSBkZWxldGVkJyxcbiAgICAnTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCc6XG4gICAgICAnTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgJ01lc3NhZ2UgcGlubmVkJzogJ01lc3NhZ2UgcGlubmVkJyxcbiAgICAnTWVzc2FnZSB1bnBpbm5lZCc6ICdNZXNzYWdlIHVucGlubmVkJyxcbiAgICBNdXRlOiAnTXV0ZScsXG4gICAgTmV3OiAnTmV3JyxcbiAgICAnTmV3IE1lc3NhZ2VzISc6ICdOZXcgTWVzc2FnZXMhJyxcbiAgICAnTm8gcmVzdWx0cyBmb3VuZCc6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICAnTm90aGluZyB5ZXQuLi4nOiAnTm90aGluZyB5ZXQuLi4nLFxuICAgICdPbmx5IHZpc2libGUgdG8geW91JzogJ09ubHkgdmlzaWJsZSB0byB5b3UnLFxuICAgICdPcGVuIGVtb2ppIHBpY2tlcic6ICdPcGVuIGVtb2ppIHBpY2tlcicsXG4gICAgJ1Blb3BsZSBtYXRjaGluZyc6ICdQZW9wbGUgbWF0Y2hpbmcnLFxuICAgICdQaWNrIHlvdXIgZW1vamknOiAnUGljayB5b3VyIGVtb2ppJyxcbiAgICBQaW46ICdQaW4nLFxuICAgICdQaW5uZWQgYnknOiAnUGlubmVkIGJ5JyxcbiAgICBSZXBseTogJ1F1b3RlIFJlcGx5JyxcbiAgICAnUmVwbHkgdG8gTWVzc2FnZSc6ICdSZXBseSB0byBNZXNzYWdlJyxcbiAgICBTZWFyY2g6ICdTZWFyY2gnLFxuICAgICdTZWFyY2hpbmcuLi4nOiAnU2VhcmNoaW5nLi4uJyxcbiAgICBTZW5kOiAnU2VuZCcsXG4gICAgJ1NlbmQgbWVzc2FnZSByZXF1ZXN0IGZhaWxlZCc6ICdTZW5kIG1lc3NhZ2UgcmVxdWVzdCBmYWlsZWQnLFxuICAgICdTZW5kaW5nLi4uJzogJ1NlbmRpbmcuLi4nLFxuICAgICdTbG93IE1vZGUgT04nOiAnU2xvdyBNb2RlIE9OJyxcbiAgICAnU3RhcnQgb2YgYSBuZXcgdGhyZWFkJzogJ1N0YXJ0IG9mIGEgbmV3IHRocmVhZCcsXG4gICAgJ1RoaXMgbWVzc2FnZSB3YXMgZGVsZXRlZC4uLic6ICdUaGlzIG1lc3NhZ2Ugd2FzIGRlbGV0ZWQuLi4nLFxuICAgIFRocmVhZDogJ1RocmVhZCByZXBseScsXG4gICAgJ1R5cGUgeW91ciBtZXNzYWdlJzogJ1R5cGUgeW91ciBtZXNzYWdlJyxcbiAgICBVbm11dGU6ICdVbm11dGUnLFxuICAgIFVucGluOiAnVW5waW4nLFxuICAgICdXYWl0IHVudGlsIGFsbCBhdHRhY2htZW50cyBoYXZlIHVwbG9hZGVkJzpcbiAgICAgICdXYWl0IHVudGlsIGFsbCBhdHRhY2htZW50cyBoYXZlIHVwbG9hZGVkJyxcbiAgICAnWW91IGhhdmUgbm8gY2hhbm5lbHMgY3VycmVudGx5JzogJ1lvdSBoYXZlIG5vIGNoYW5uZWxzIGN1cnJlbnRseScsXG4gICAgXCJZb3UndmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZXNcIjpcbiAgICAgIFwiWW91J3ZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzXCIsXG4gICAgbGl2ZTogJ2xpdmUnLFxuICAgICd0aGlzIGNvbnRlbnQgY291bGQgbm90IGJlIGRpc3BsYXllZCc6XG4gICAgICAndGhpcyBjb250ZW50IGNvdWxkIG5vdCBiZSBkaXNwbGF5ZWQnLFxuICAgICd7eyBjb21tYVNlcGFyYXRlZFVzZXJzIH19IGFuZCB7eyBtb3JlQ291bnQgfX0gbW9yZSc6XG4gICAgICAne3sgY29tbWFTZXBhcmF0ZWRVc2VycyB9fSBhbmQge3sgbW9yZUNvdW50IH19IG1vcmUnLFxuICAgICd7eyBjb21tYVNlcGFyYXRlZFVzZXJzIH19LCBhbmQge3sgbGFzdFVzZXIgfX0nOlxuICAgICAgJ3t7IGNvbW1hU2VwYXJhdGVkVXNlcnMgfX0sIGFuZCB7eyBsYXN0VXNlciB9fScsXG4gICAgJ3t7IGZpcnN0VXNlciB9fSBhbmQge3sgc2Vjb25kVXNlciB9fSc6XG4gICAgICAne3sgZmlyc3RVc2VyIH19IGFuZCB7eyBzZWNvbmRVc2VyIH19JyxcbiAgICAne3sgaW1hZ2VDb3VudCB9fSBtb3JlJzogJ3t7IGltYWdlQ291bnQgfX0gbW9yZScsXG4gICAgJ3t7IG1lbWJlckNvdW50IH19IG1lbWJlcnMnOiAne3sgbWVtYmVyQ291bnQgfX0gbWVtYmVycycsXG4gICAgJ3t7IHJlcGx5Q291bnQgfX0gcmVwbGllcyc6ICd7eyByZXBseUNvdW50IH19IHJlcGxpZXMnLFxuICAgICd7eyB1c2VyIH19IGhhcyBiZWVuIG11dGVkJzogJ3t7IHVzZXIgfX0gaGFzIGJlZW4gbXV0ZWQnLFxuICAgICd7eyB1c2VyIH19IGhhcyBiZWVuIHVubXV0ZWQnOiAne3sgdXNlciB9fSBoYXMgYmVlbiB1bm11dGVkJyxcbiAgICAne3sgd2F0Y2hlckNvdW50IH19IG9ubGluZSc6ICd7eyB3YXRjaGVyQ291bnQgfX0gb25saW5lJyxcbiAgICAn8J+PmSBBdHRhY2htZW50Li4uJzogJ/Cfj5kgQXR0YWNobWVudC4uLicsXG4gICAgJ0Nvbm5lY3Rpb24gZXJyb3InOiAnQ29ubmVjdGlvbiBlcnJvcicsXG4gICAgJ0xvYWQgbW9yZSc6ICdMb2FkIG1vcmUnLFxuICAgIGZhaWxlZDogJ2ZhaWxlZCcsXG4gICAgcmV0cnk6ICdyZXRyeScsXG4gICAgdGVzdDogJ3N1Y2Nlc3MnLFxuICAgICdTZW5kaW5nIGxpbmtzIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udmVyc2F0aW9uJzpcbiAgICAgICdTZW5kaW5nIGxpbmtzIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udmVyc2F0aW9uJyxcbiAgICBcIllvdSBjYW4ndCBzZW5kIG1lc3NhZ2VzIGluIHRoaXMgY2hhbm5lbFwiOlxuICAgICAgXCJZb3UgY2FuJ3Qgc2VuZCBtZXNzYWdlcyBpbiB0aGlzIGNoYW5uZWxcIixcbiAgICBcIllvdSBjYW4ndCBzZW5kIHRocmVhZCByZXBsaWVzIGluIHRoaXMgY2hhbm5lbFwiOlxuICAgICAgXCJZb3UgY2FuJ3Qgc2VuZCB0aHJlYWQgcmVwbGllcyBpbiB0aGlzIGNoYW5uZWxcIixcbiAgICAnTWVzc2FnZSBub3QgZm91bmQnOiAnTWVzc2FnZSBub3QgZm91bmQnLFxuICAgICdObyBjaGF0cyBoZXJlIHlldOKApic6ICdObyBjaGF0cyBoZXJlIHlldOKApicsXG4gICAgJ3VzZXIgaXMgdHlwaW5nJzogJ3t7IHVzZXIgfX0gaXMgdHlwaW5nJyxcbiAgICAndXNlcnMgYXJlIHR5cGluZyc6ICd7eyB1c2VycyB9fSBhcmUgdHlwaW5nJyxcbiAgICAnRXJyb3IgbG9hZGluZyBjaGFubmVscyc6ICdFcnJvciBsb2FkaW5nIGNoYW5uZWxzJyxcbiAgICAnU2VlIG9yaWdpbmFsIChhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQpJzpcbiAgICAgICdTZWUgb3JpZ2luYWwgKGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZCknLFxuICAgICdTZWUgdHJhbnNsYXRpb24nOiAnU2VlIHRyYW5zbGF0aW9uJyxcbiAgICAnTWFyayBhcyB1bnJlYWQnOiAnTWFyayBhcyB1bnJlYWQnLFxuICAgICdFcnJvciBtYXJraW5nIG1lc3NhZ2UgYXMgdW5yZWFkJzogJ0Vycm9yIG1hcmtpbmcgbWVzc2FnZSBhcyB1bnJlYWQnLFxuICAgICdFcnJvciwgb25seSB0aGUgZmlyc3Qge3tjb3VudH19IG1lc3NhZ2UgY2FuIGJlIG1hcmtlZCBhcyB1bnJlYWQnOlxuICAgICAgJ0Vycm9yLCBvbmx5IHRoZSBmaXJzdCB7e2NvdW50fX0gbWVzc2FnZSBjYW4gYmUgbWFya2VkIGFzIHVucmVhZCcsXG4gICAgJ1VucmVhZCBtZXNzYWdlcyc6ICdVbnJlYWQgbWVzc2FnZXMnLFxuICAgICd7e2NvdW50fX0gdW5yZWFkIG1lc3NhZ2VzJzogJ3t7Y291bnR9fSB1bnJlYWQgbWVzc2FnZXMnLFxuICAgICd7e2NvdW50fX0gdW5yZWFkIG1lc3NhZ2UnOiAne3tjb3VudH19IHVucmVhZCBtZXNzYWdlJyxcbiAgICAnVGhpcyBtZXNzYWdlIGRpZCBub3QgbWVldCBvdXIgY29udGVudCBndWlkZWxpbmVzJzpcbiAgICAgICdUaGlzIG1lc3NhZ2UgZGlkIG5vdCBtZWV0IG91ciBjb250ZW50IGd1aWRlbGluZXMnLFxuICAgICdTZW5kIEFueXdheSc6ICdTZW5kIEFueXdheScsXG4gICAgRWRpdGVkOiAnRWRpdGVkJyxcbiAgICAnRXJyb3IgcGxheWluZyBhdWRpbyc6ICdFcnJvciBwbGF5aW5nIGF1ZGlvJyxcbiAgICAnQ29weSB0ZXh0JzogJ0NvcHkgdGV4dCcsXG4gICAgJ1BsZWFzZSBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBtaWNyb2hwb25lJzpcbiAgICAgICdQbGVhc2UgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgbWljcm9ocG9uZScsXG4gICAgJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZyc6ICdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLFxuICAgICdBbiBlcnJvciBoYXMgb2NjdXJyZWQgZHVyaW5nIHJlY29yZGluZyc6XG4gICAgICAnQW4gZXJyb3IgaGFzIG9jY3VycmVkIGR1cmluZyByZWNvcmRpbmcnLFxuICAgICdNZWRpYSByZWNvcmRpbmcgbm90IHN1cHBvcnRlZCc6ICdNZWRpYSByZWNvcmRpbmcgbm90IHN1cHBvcnRlZCcsXG4gICAgXCJZb3UgY2FuJ3QgdXBsb2QgbW9yZSB0aGFuIHt7bWF4fX0gYXR0YWNobWVudHNcIjpcbiAgICAgIFwiWW91IGNhbid0IHVwbG9kIG1vcmUgdGhhbiB7e21heH19IGF0dGFjaG1lbnRzXCIsXG4gICAgJ1lvdSBjdXJyZW50bHkgaGF2ZSB7e2NvdW50fX0gYXR0YWNobWVudHMsIHRoZSBtYXhpbXVtIGlzIHt7bWF4fX0nOlxuICAgICAgJ1lvdSBjdXJyZW50bHkgaGF2ZSB7e2NvdW50fX0gYXR0YWNobWVudHMsIHRoZSBtYXhpbXVtIGlzIHt7bWF4fX0nLFxuICAgICdhbmQgb3RoZXJzJzogJ2FuZCBvdGhlcnMnLFxuICB9LFxufTtcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '6.0.0-
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const version = '6.0.0-rc.2';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc2LjAuMC1yYy4yJztcbiJdfQ==
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* The `AttachmentConfigurationService` provides customization for certain attributes of attachments displayed inside the message component. If you're using your own CDN, you can integrate resizing features of it by providing your own handlers.
|
|
5
|
+
*/
|
|
6
|
+
export class AttachmentConfigurationService {
|
|
7
|
+
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* You can turn on/off thumbnail generation for video attachments
|
|
10
|
+
*/
|
|
11
|
+
this.shouldGenerateVideoThumbnail = true;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Handles the configuration for image attachments, it's possible to provide your own function to override the default logic
|
|
15
|
+
* @param attachment The attachment to configure
|
|
16
|
+
* @param location Specifies where the image is being displayed
|
|
17
|
+
* @param element The default resizing logics reads the height/max-height and max-width propperties of this element and reduces file size based on the given values. File size reduction is done by Stream's CDN.
|
|
18
|
+
*/
|
|
19
|
+
getImageAttachmentConfiguration(attachment, location, element) {
|
|
20
|
+
if (this.customImageAttachmentConfigurationHandler) {
|
|
21
|
+
return this.customImageAttachmentConfigurationHandler(attachment, location, element);
|
|
22
|
+
}
|
|
23
|
+
const defaultOriginalDimension = 1000000;
|
|
24
|
+
const urlString = attachment.img_url || attachment.thumb_url || attachment.image_url || '';
|
|
25
|
+
let url;
|
|
26
|
+
try {
|
|
27
|
+
url = new URL(urlString);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return {
|
|
31
|
+
url: urlString,
|
|
32
|
+
width: '',
|
|
33
|
+
height: '',
|
|
34
|
+
originalHeight: defaultOriginalDimension,
|
|
35
|
+
originalWidth: defaultOriginalDimension,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const originalHeight = Number(url.searchParams.get('oh')) > 1
|
|
39
|
+
? Number(url.searchParams.get('oh'))
|
|
40
|
+
: defaultOriginalDimension;
|
|
41
|
+
const originalWidth = Number(url.searchParams.get('ow')) > 1
|
|
42
|
+
? Number(url.searchParams.get('ow'))
|
|
43
|
+
: defaultOriginalDimension;
|
|
44
|
+
const displayWarning = location === 'gallery' || location === 'single';
|
|
45
|
+
const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
|
|
46
|
+
if (sizeRestriction) {
|
|
47
|
+
// Apply 2x for retina displays
|
|
48
|
+
sizeRestriction.height *= 2;
|
|
49
|
+
sizeRestriction.width *= 2;
|
|
50
|
+
this.addResizingParamsToUrl(sizeRestriction, url);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
url: url.href,
|
|
54
|
+
width: '',
|
|
55
|
+
height: '',
|
|
56
|
+
originalHeight,
|
|
57
|
+
originalWidth,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Handles the configuration for video attachments, it's possible to provide your own function to override the default logic
|
|
62
|
+
* @param attachment The attachment to configure
|
|
63
|
+
* @param element The default resizing logics reads the height/max-height and max-width propperties of this element and reduces file size based on the given values. File size reduction is done by Stream's CDN.
|
|
64
|
+
*/
|
|
65
|
+
getVideoAttachmentConfiguration(attachment, element) {
|
|
66
|
+
if (this.customVideoAttachmentConfigurationHandler) {
|
|
67
|
+
return this.customVideoAttachmentConfigurationHandler(attachment, element);
|
|
68
|
+
}
|
|
69
|
+
let thumbUrl = undefined;
|
|
70
|
+
let originalHeight = 1000000;
|
|
71
|
+
let originalWidth = 1000000;
|
|
72
|
+
if (attachment.thumb_url && this.shouldGenerateVideoThumbnail) {
|
|
73
|
+
let url;
|
|
74
|
+
try {
|
|
75
|
+
url = new URL(attachment.thumb_url);
|
|
76
|
+
originalHeight =
|
|
77
|
+
Number(url.searchParams.get('oh')) > 1
|
|
78
|
+
? Number(url.searchParams.get('oh'))
|
|
79
|
+
: originalHeight;
|
|
80
|
+
originalWidth =
|
|
81
|
+
Number(url.searchParams.get('ow')) > 1
|
|
82
|
+
? Number(url.searchParams.get('ow'))
|
|
83
|
+
: originalWidth;
|
|
84
|
+
const displayWarning = true;
|
|
85
|
+
const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
|
|
86
|
+
if (sizeRestriction) {
|
|
87
|
+
sizeRestriction.height *= 2;
|
|
88
|
+
sizeRestriction.width *= 2;
|
|
89
|
+
this.addResizingParamsToUrl(sizeRestriction, url);
|
|
90
|
+
}
|
|
91
|
+
thumbUrl = url.href;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
thumbUrl = attachment.thumb_url;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
url: attachment.asset_url || '',
|
|
99
|
+
width: '',
|
|
100
|
+
height: '',
|
|
101
|
+
thumbUrl: thumbUrl,
|
|
102
|
+
originalHeight,
|
|
103
|
+
originalWidth,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Handles the configuration for giphy attachments, it's possible to provide your own function to override the default logic
|
|
108
|
+
* @param attachment The attachment to configure
|
|
109
|
+
*/
|
|
110
|
+
getGiphyAttachmentConfiguration(attachment) {
|
|
111
|
+
if (this.customGiphyAttachmentConfigurationHandler) {
|
|
112
|
+
return this.customGiphyAttachmentConfigurationHandler(attachment);
|
|
113
|
+
}
|
|
114
|
+
const giphy = attachment.giphy?.fixed_height_downsampled;
|
|
115
|
+
return {
|
|
116
|
+
url: giphy?.url || attachment.image_url || attachment.thumb_url || '',
|
|
117
|
+
height: giphy?.height ? `${giphy?.height}px` : '300px',
|
|
118
|
+
width: giphy?.width ? `${giphy?.width}px` : '',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Handles the configuration for scraped image attachments, it's possible to provide your own function to override the default logic
|
|
123
|
+
* @param attachment The attachment to configure
|
|
124
|
+
*/
|
|
125
|
+
getScrapedImageAttachmentConfiguration(attachment) {
|
|
126
|
+
if (this.customScrapedImageAttachmentConfigurationHandler) {
|
|
127
|
+
return this.customScrapedImageAttachmentConfigurationHandler(attachment);
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
url: attachment.image_url || attachment.thumb_url || '',
|
|
131
|
+
width: '',
|
|
132
|
+
height: '', // Set from CSS
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
addResizingParamsToUrl(sizeRestriction, url) {
|
|
136
|
+
url.searchParams.set('h', sizeRestriction.height.toString());
|
|
137
|
+
url.searchParams.set('w', sizeRestriction.width.toString());
|
|
138
|
+
}
|
|
139
|
+
getSizingRestrictions(url, htmlElement, displayWarning = false) {
|
|
140
|
+
const urlParams = url.searchParams;
|
|
141
|
+
const originalHeight = Number(urlParams.get('oh')) || 1;
|
|
142
|
+
const originalWidth = Number(urlParams.get('ow')) || 1;
|
|
143
|
+
const cssSizeRestriction = this.getCSSSizeRestriction(htmlElement);
|
|
144
|
+
let sizeRestriction;
|
|
145
|
+
if ((cssSizeRestriction.maxHeight || cssSizeRestriction.height) &&
|
|
146
|
+
cssSizeRestriction.maxWidth) {
|
|
147
|
+
sizeRestriction = this.getSizeRestrictions(originalHeight, originalWidth, (cssSizeRestriction.maxHeight || cssSizeRestriction.height), cssSizeRestriction.maxWidth);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
sizeRestriction = undefined;
|
|
151
|
+
if (displayWarning) {
|
|
152
|
+
console.warn(`Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/angular/v6-rc/components/AttachmentListComponent/#image-and-video-sizing, attachment URL: ${url.toString()}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return sizeRestriction;
|
|
156
|
+
}
|
|
157
|
+
getSizeRestrictions(originalHeight, originalWidth, maxHeight, maxWidth) {
|
|
158
|
+
return {
|
|
159
|
+
height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),
|
|
160
|
+
width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
getCSSSizeRestriction(htmlElement) {
|
|
164
|
+
const computedStylesheet = getComputedStyle(htmlElement);
|
|
165
|
+
const height = this.getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('height'));
|
|
166
|
+
const maxHeight = this.getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-height'));
|
|
167
|
+
const maxWidth = this.getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-width'));
|
|
168
|
+
return { height, maxHeight, maxWidth };
|
|
169
|
+
}
|
|
170
|
+
getValueRepresentationOfCSSProperty(property) {
|
|
171
|
+
return Number(property.replace('px', '')) || undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
AttachmentConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
175
|
+
AttachmentConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentConfigurationService, providedIn: 'root' });
|
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentConfigurationService, decorators: [{
|
|
177
|
+
type: Injectable,
|
|
178
|
+
args: [{
|
|
179
|
+
providedIn: 'root',
|
|
180
|
+
}]
|
|
181
|
+
}] });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFRM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBSDNDO1FBK0JFOztXQUVHO1FBQ0gsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO0tBOE9yQztJQTVPQzs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixVQUFzQixFQUN0QixRQUEyQyxFQUMzQyxPQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FDbkQsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQ2IsVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQzNFLElBQUksR0FBUSxDQUFDO1FBQ2IsSUFBSTtZQUNGLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxQjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTztnQkFDTCxHQUFHLEVBQUUsU0FBUztnQkFDZCxLQUFLLEVBQUUsRUFBRTtnQkFDVCxNQUFNLEVBQUUsRUFBRTtnQkFDVixjQUFjLEVBQUUsd0JBQXdCO2dCQUN4QyxhQUFhLEVBQUUsd0JBQXdCO2FBQ3hDLENBQUM7U0FDSDtRQUNELE1BQU0sY0FBYyxHQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1FBQy9CLE1BQU0sYUFBYSxHQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1FBQy9CLE1BQU0sY0FBYyxHQUFHLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ2hELEdBQUcsRUFDSCxPQUFPLEVBQ1AsY0FBYyxDQUNmLENBQUM7UUFFRixJQUFJLGVBQWUsRUFBRTtZQUNuQiwrQkFBK0I7WUFDL0IsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDNUIsZUFBZSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU87WUFDTCxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDYixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1lBQ1YsY0FBYztZQUNkLGFBQWE7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwrQkFBK0IsQ0FDN0IsVUFBc0IsRUFDdEIsT0FBb0I7UUFFcEIsSUFBSSxJQUFJLENBQUMseUNBQXlDLEVBQUU7WUFDbEQsT0FBTyxJQUFJLENBQUMseUNBQXlDLENBQ25ELFVBQVUsRUFDVixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsSUFBSSxRQUFRLEdBQXVCLFNBQVMsQ0FBQztRQUM3QyxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzVCLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDN0QsSUFBSSxHQUFRLENBQUM7WUFDYixJQUFJO2dCQUNGLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXBDLGNBQWM7b0JBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztnQkFDckIsYUFBYTtvQkFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUNwQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDaEQsR0FBRyxFQUNILE9BQU8sRUFDUCxjQUFjLENBQ2YsQ0FBQztnQkFDRixJQUFJLGVBQWUsRUFBRTtvQkFDbkIsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQzVCLGVBQWUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNuRDtnQkFDRCxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzthQUNyQjtZQUFDLE1BQU07Z0JBQ04sUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7YUFDakM7U0FDRjtRQUNELE9BQU87WUFDTCxHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVMsSUFBSSxFQUFFO1lBQy9CLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsUUFBUTtZQUNsQixjQUFjO1lBQ2QsYUFBYTtTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsK0JBQStCLENBQzdCLFVBQXNCO1FBRXRCLElBQUksSUFBSSxDQUFDLHlDQUF5QyxFQUFFO1lBQ2xELE9BQU8sSUFBSSxDQUFDLHlDQUF5QyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQztRQUV6RCxPQUFPO1lBQ0wsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDckUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3RELEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILHNDQUFzQyxDQUNwQyxVQUFzQjtRQUV0QixJQUFJLElBQUksQ0FBQyxnREFBZ0QsRUFBRTtZQUN6RCxPQUFPLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMxRTtRQUVELE9BQU87WUFDTCxHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDdkQsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsRUFBRSxFQUFFLGVBQWU7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsZUFBa0QsRUFDbEQsR0FBUTtRQUVSLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0QsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8scUJBQXFCLENBQzNCLEdBQVEsRUFDUixXQUF3QixFQUN4QixjQUFjLEdBQUcsS0FBSztRQUV0QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQ25DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLElBQUksZUFBOEQsQ0FBQztRQUVuRSxJQUNFLENBQUMsa0JBQWtCLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUMzRCxrQkFBa0IsQ0FBQyxRQUFRLEVBQzNCO1lBQ0EsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDeEMsY0FBYyxFQUNkLGFBQWEsRUFDYixDQUFDLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUUsRUFDNUQsa0JBQWtCLENBQUMsUUFBUSxDQUM1QixDQUFDO1NBQ0g7YUFBTTtZQUNMLGVBQWUsR0FBRyxTQUFTLENBQUM7WUFDNUIsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsOFFBQThRLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMvUixDQUFDO2FBQ0g7U0FDRjtRQUVELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsY0FBc0IsRUFDdEIsYUFBcUIsRUFDckIsU0FBaUIsRUFDakIsUUFBZ0I7UUFFaEIsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FDakU7WUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FDakU7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUFDLFdBQXdCO1FBQ3BELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUNyRCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FDeEQsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQ2xELENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQ3ZELGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUNqRCxDQUFDO1FBRUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLFFBQWdCO1FBQzFELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3pELENBQUM7OzJIQTVRVSw4QkFBOEI7K0hBQTlCLDhCQUE4QixjQUY3QixNQUFNOzJGQUVQLDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdHRhY2htZW50IH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudENvbmZpZ3JhdGlvbixcbiAgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2VgIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gZm9yIGNlcnRhaW4gYXR0cmlidXRlcyBvZiBhdHRhY2htZW50cyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBtZXNzYWdlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nIHlvdXIgb3duIENETiwgeW91IGNhbiBpbnRlZ3JhdGUgcmVzaXppbmcgZmVhdHVyZXMgb2YgaXQgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGhhbmRsZXJzLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyB1cGxvYWRlZCBmcm9tIGZpbGVzKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBpbWFnZSBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIGltYWdlIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBpbWFnZSBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudCxcbiAgICB0eXBlOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSA9PiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmlkZW8gYXR0YWNobWVudCAodmlkZW9zIHVwbG9hZGVkIGZyb20gZmlsZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgdmlkZW8gaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50LFxuICAgIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkgPT4gVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdpcGh5IGF0dGFjaG1lbnQgKEdJRnMgc2VudCB3aXRoIHRoZSAvZ2lwaHkgY29tbWFuZCkgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSB0aGUgR0lGIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudFxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyBmb3VuZCBpbiBsaW5rcyBpbnNpZGUgbWVzc2FnZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgaW1hZ2UgaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21TY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudFxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBZb3UgY2FuIHR1cm4gb24vb2ZmIHRodW1ibmFpbCBnZW5lcmF0aW9uIGZvciB2aWRlbyBhdHRhY2htZW50c1xuICAgKi9cbiAgc2hvdWxkR2VuZXJhdGVWaWRlb1RodW1ibmFpbCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBTcGVjaWZpZXMgd2hlcmUgdGhlIGltYWdlIGlzIGJlaW5nIGRpc3BsYXllZFxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZGVmYXVsdCByZXNpemluZyBsb2dpY3MgcmVhZHMgdGhlIGhlaWdodC9tYXgtaGVpZ2h0IGFuZCBtYXgtd2lkdGggcHJvcHBlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFuZCByZWR1Y2VzIGZpbGUgc2l6ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmFsdWVzLiBGaWxlIHNpemUgcmVkdWN0aW9uIGlzIGRvbmUgYnkgU3RyZWFtJ3MgQ0ROLlxuICAgKi9cbiAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50LFxuICAgIGxvY2F0aW9uOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb24gPSAxMDAwMDAwO1xuICAgIGNvbnN0IHVybFN0cmluZyA9XG4gICAgICBhdHRhY2htZW50LmltZ191cmwgfHwgYXR0YWNobWVudC50aHVtYl91cmwgfHwgYXR0YWNobWVudC5pbWFnZV91cmwgfHwgJyc7XG4gICAgbGV0IHVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogdXJsU3RyaW5nLFxuICAgICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgICBvcmlnaW5hbEhlaWdodDogZGVmYXVsdE9yaWdpbmFsRGltZW5zaW9uLFxuICAgICAgICBvcmlnaW5hbFdpZHRoOiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb24sXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSlcbiAgICAgICAgOiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb247XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSlcbiAgICAgICAgOiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb247XG4gICAgY29uc3QgZGlzcGxheVdhcm5pbmcgPSBsb2NhdGlvbiA9PT0gJ2dhbGxlcnknIHx8IGxvY2F0aW9uID09PSAnc2luZ2xlJztcbiAgICBjb25zdCBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICAgIHVybCxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBkaXNwbGF5V2FybmluZ1xuICAgICk7XG5cbiAgICBpZiAoc2l6ZVJlc3RyaWN0aW9uKSB7XG4gICAgICAvLyBBcHBseSAyeCBmb3IgcmV0aW5hIGRpc3BsYXlzXG4gICAgICBzaXplUmVzdHJpY3Rpb24uaGVpZ2h0ICo9IDI7XG4gICAgICBzaXplUmVzdHJpY3Rpb24ud2lkdGggKj0gMjtcbiAgICAgIHRoaXMuYWRkUmVzaXppbmdQYXJhbXNUb1VybChzaXplUmVzdHJpY3Rpb24sIHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogdXJsLmhyZWYsXG4gICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHZpZGVvIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBkZWZhdWx0IHJlc2l6aW5nIGxvZ2ljcyByZWFkcyB0aGUgaGVpZ2h0L21heC1oZWlnaHQgYW5kIG1heC13aWR0aCBwcm9wcGVydGllcyBvZiB0aGlzIGVsZW1lbnQgYW5kIHJlZHVjZXMgZmlsZSBzaXplIGJhc2VkIG9uIHRoZSBnaXZlbiB2YWx1ZXMuIEZpbGUgc2l6ZSByZWR1Y3Rpb24gaXMgZG9uZSBieSBTdHJlYW0ncyBDRE4uXG4gICAqL1xuICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB0aHVtYlVybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcmlnaW5hbEhlaWdodCA9IDEwMDAwMDA7XG4gICAgbGV0IG9yaWdpbmFsV2lkdGggPSAxMDAwMDAwO1xuICAgIGlmIChhdHRhY2htZW50LnRodW1iX3VybCAmJiB0aGlzLnNob3VsZEdlbmVyYXRlVmlkZW9UaHVtYm5haWwpIHtcbiAgICAgIGxldCB1cmw6IFVSTDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHVybCA9IG5ldyBVUkwoYXR0YWNobWVudC50aHVtYl91cmwpO1xuXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0ID1cbiAgICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpXG4gICAgICAgICAgICA6IG9yaWdpbmFsSGVpZ2h0O1xuICAgICAgICBvcmlnaW5hbFdpZHRoID1cbiAgICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpID4gMVxuICAgICAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpXG4gICAgICAgICAgICA6IG9yaWdpbmFsV2lkdGg7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZVJlc3RyaWN0aW9uID0gdGhpcy5nZXRTaXppbmdSZXN0cmljdGlvbnMoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZGlzcGxheVdhcm5pbmdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNpemVSZXN0cmljdGlvbikge1xuICAgICAgICAgIHNpemVSZXN0cmljdGlvbi5oZWlnaHQgKj0gMjtcbiAgICAgICAgICBzaXplUmVzdHJpY3Rpb24ud2lkdGggKj0gMjtcbiAgICAgICAgICB0aGlzLmFkZFJlc2l6aW5nUGFyYW1zVG9Vcmwoc2l6ZVJlc3RyaWN0aW9uLCB1cmwpO1xuICAgICAgICB9XG4gICAgICAgIHRodW1iVXJsID0gdXJsLmhyZWY7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGh1bWJVcmwgPSBhdHRhY2htZW50LnRodW1iX3VybDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwgfHwgJycsXG4gICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICAgIHRodW1iVXJsOiB0aHVtYlVybCxcbiAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGdpcGh5IGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRHaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRcbiAgKTogQXR0YWNobWVudENvbmZpZ3JhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGdpcGh5ID0gYXR0YWNobWVudC5naXBoeT8uZml4ZWRfaGVpZ2h0X2Rvd25zYW1wbGVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogZ2lwaHk/LnVybCB8fCBhdHRhY2htZW50LmltYWdlX3VybCB8fCBhdHRhY2htZW50LnRodW1iX3VybCB8fCAnJyxcbiAgICAgIGhlaWdodDogZ2lwaHk/LmhlaWdodCA/IGAke2dpcGh5Py5oZWlnaHR9cHhgIDogJzMwMHB4JyxcbiAgICAgIHdpZHRoOiBnaXBoeT8ud2lkdGggPyBgJHtnaXBoeT8ud2lkdGh9cHhgIDogJycsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRTY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50XG4gICk6IEF0dGFjaG1lbnRDb25maWdyYXRpb24ge1xuICAgIGlmICh0aGlzLmN1c3RvbVNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8IGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8ICcnLFxuICAgICAgd2lkdGg6ICcnLFxuICAgICAgaGVpZ2h0OiAnJywgLy8gU2V0IGZyb20gQ1NTXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVzaXppbmdQYXJhbXNUb1VybChcbiAgICBzaXplUmVzdHJpY3Rpb246IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICB1cmw6IFVSTFxuICApIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaCcsIHNpemVSZXN0cmljdGlvbi5oZWlnaHQudG9TdHJpbmcoKSk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3cnLCBzaXplUmVzdHJpY3Rpb24ud2lkdGgudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICB1cmw6IFVSTCxcbiAgICBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZGlzcGxheVdhcm5pbmcgPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCB1cmxQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICAgIGNvbnN0IG9yaWdpbmFsSGVpZ2h0ID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ29oJykpIHx8IDE7XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9IE51bWJlcih1cmxQYXJhbXMuZ2V0KCdvdycpKSB8fCAxO1xuICAgIGNvbnN0IGNzc1NpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0Q1NTU2l6ZVJlc3RyaWN0aW9uKGh0bWxFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3RyaWN0aW9uOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSAmJlxuICAgICAgY3NzU2l6ZVJlc3RyaWN0aW9uLm1heFdpZHRoXG4gICAgKSB7XG4gICAgICBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemVSZXN0cmljdGlvbnMoXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgICBvcmlnaW5hbFdpZHRoLFxuICAgICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSEsXG4gICAgICAgIGNzc1NpemVSZXN0cmljdGlvbi5tYXhXaWR0aFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2l6ZVJlc3RyaWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGRpc3BsYXlXYXJuaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSW52YWxpZCB2YWx1ZSBzZXQgZm9yIGhlaWdodC9tYXgtaGVpZ2h0IGFuZC9vciBtYXgtd2lkdGggZm9yIEhUTUwgZWxlbWVudCwgdGhpcyBjYW4gY2F1c2Ugc2Nyb2xsaW5nIGlzc3VlcyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCwgbW9yZSBpbmZvIGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci92Ni1yYy9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50LyNpbWFnZS1hbmQtdmlkZW8tc2l6aW5nLCBhdHRhY2htZW50IFVSTDogJHt1cmwudG9TdHJpbmcoKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVSZXN0cmljdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICBvcmlnaW5hbEhlaWdodDogbnVtYmVyLFxuICAgIG9yaWdpbmFsV2lkdGg6IG51bWJlcixcbiAgICBtYXhIZWlnaHQ6IG51bWJlcixcbiAgICBtYXhXaWR0aDogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoXG4gICAgICAgIE1hdGgubWF4KG1heEhlaWdodCwgKG1heFdpZHRoIC8gb3JpZ2luYWxXaWR0aCkgKiBvcmlnaW5hbEhlaWdodClcbiAgICAgICksXG4gICAgICB3aWR0aDogTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5tYXgobWF4SGVpZ2h0LCAobWF4V2lkdGggLyBvcmlnaW5hbEhlaWdodCkgKiBvcmlnaW5hbFdpZHRoKVxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXNoZWV0ID0gZ2V0Q29tcHV0ZWRTdHlsZShodG1sRWxlbWVudCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKVxuICAgICk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtaGVpZ2h0JylcbiAgICApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtd2lkdGgnKVxuICAgICk7XG5cbiAgICByZXR1cm4geyBoZWlnaHQsIG1heEhlaWdodCwgbWF4V2lkdGggfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVSZXByZXNlbnRhdGlvbk9mQ1NTUHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBOdW1iZXIocHJvcGVydHkucmVwbGFjZSgncHgnLCAnJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|