valtech-components 2.0.1034 → 4.0.0
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/esm2022/lib/components/atoms/box/box.component.mjs +6 -8
- package/esm2022/lib/components/atoms/button/factory.mjs +24 -217
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +2 -4
- package/esm2022/lib/components/atoms/href/href.component.mjs +1 -2
- package/esm2022/lib/components/atoms/image/image.component.mjs +36 -3
- package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +4 -9
- package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +4 -4
- package/esm2022/lib/components/molecules/card/card.component.mjs +53 -10
- package/esm2022/lib/components/molecules/checkbox-radio-input/checkbox-radio-input.component.mjs +27 -36
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +44 -6
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +32 -7
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +28 -12
- package/esm2022/lib/components/molecules/cta-card/cta-card.component.mjs +4 -9
- package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +240 -0
- package/esm2022/lib/components/molecules/date-picker/date-picker.i18n.mjs +6 -0
- package/esm2022/lib/components/molecules/date-picker/types.mjs +2 -0
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +7 -7
- package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +159 -71
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +7 -3
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +30 -5
- package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +75 -19
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +42 -9
- package/esm2022/lib/components/molecules/permission-selector/types.mjs +1 -1
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +88 -12
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +15 -7
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +93 -7
- package/esm2022/lib/components/organisms/change-email-modal/change-email-modal.component.mjs +5 -5
- package/esm2022/lib/components/organisms/change-password-modal/change-password-modal.component.mjs +4 -4
- package/esm2022/lib/components/organisms/form/form.component.mjs +62 -20
- package/esm2022/lib/components/organisms/login/login.component.mjs +8 -8
- package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +3 -3
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/services/presets/default-presets.mjs +45 -0
- package/esm2022/lib/services/presets/index.mjs +3 -1
- package/esm2022/lib/services/presets/preset.service.mjs +17 -4
- package/esm2022/lib/services/requests/request-form-builder.service.mjs +8 -3
- package/esm2022/lib/shared/utils/ionic-color.mjs +36 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -8
- package/fesm2022/valtech-components.mjs +1381 -1027
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/box/box.component.d.ts +2 -5
- package/lib/components/atoms/button/factory.d.ts +15 -69
- package/lib/components/atoms/divider/divider.component.d.ts +1 -4
- package/lib/components/atoms/href/href.component.d.ts +2 -3
- package/lib/components/atoms/image/image.component.d.ts +5 -0
- package/lib/components/molecules/action-card/action-card.component.d.ts +1 -1
- package/lib/components/molecules/card/card.component.d.ts +2 -1
- package/lib/components/molecules/checkbox-radio-input/checkbox-radio-input.component.d.ts +2 -3
- package/lib/components/molecules/chip-group/chip-group.component.d.ts +5 -0
- package/lib/components/molecules/command-display/command-display.component.d.ts +4 -0
- package/lib/components/molecules/comment/comment.component.d.ts +3 -0
- package/lib/components/molecules/cta-card/cta-card.component.d.ts +0 -1
- package/lib/components/molecules/date-picker/date-picker.component.d.ts +50 -0
- package/lib/components/molecules/date-picker/date-picker.i18n.d.ts +3 -0
- package/lib/components/molecules/date-picker/types.d.ts +30 -0
- package/lib/components/molecules/hint/hint.component.d.ts +11 -1
- package/lib/components/molecules/pagination/pagination.component.d.ts +5 -0
- package/lib/components/molecules/password-input/password-input.component.d.ts +4 -2
- package/lib/components/molecules/permission-selector/types.d.ts +1 -0
- package/lib/components/molecules/rating/rating.component.d.ts +11 -0
- package/lib/components/molecules/text-input/text-input.component.d.ts +21 -0
- package/lib/components/organisms/form/form.component.d.ts +19 -0
- package/lib/components/types.d.ts +21 -1
- package/lib/services/presets/default-presets.d.ts +22 -0
- package/lib/services/presets/index.d.ts +1 -0
- package/lib/services/presets/preset.service.d.ts +4 -0
- package/lib/shared/utils/ionic-color.d.ts +20 -0
- package/lib/version.d.ts +1 -1
- package/package.json +3 -2
- package/public-api.d.ts +3 -7
- package/src/lib/components/styles/mixins.scss +16 -0
- package/esm2022/lib/components/molecules/content-card/content-card.component.mjs +0 -86
- package/esm2022/lib/components/molecules/content-card/types.mjs +0 -11
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +0 -68
- package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +0 -28
- package/esm2022/lib/components/molecules/info-card/info-card.component.mjs +0 -126
- package/esm2022/lib/components/molecules/info-card/types.mjs +0 -11
- package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +0 -34
- package/lib/components/molecules/content-card/content-card.component.d.ts +0 -26
- package/lib/components/molecules/content-card/types.d.ts +0 -30
- package/lib/components/molecules/email-input/email-input.component.d.ts +0 -34
- package/lib/components/molecules/hour-input/hour-input.component.d.ts +0 -15
- package/lib/components/molecules/info-card/info-card.component.d.ts +0 -37
- package/lib/components/molecules/info-card/types.d.ts +0 -44
- package/lib/components/molecules/number-input/number-input.component.d.ts +0 -16
|
@@ -11,7 +11,7 @@ import { LegalLinkService } from '../../../services/legal-link/legal-link.servic
|
|
|
11
11
|
import { FormComponent } from '../form/form.component';
|
|
12
12
|
import { ImageComponent } from '../../atoms/image/image.component';
|
|
13
13
|
import { InputType, ComponentStates } from '../../types';
|
|
14
|
-
import {
|
|
14
|
+
import { button } from '../../atoms/button/factory';
|
|
15
15
|
import { LOGIN_DEFAULTS } from './types';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
export class LoginComponent {
|
|
@@ -98,7 +98,7 @@ export class LoginComponent {
|
|
|
98
98
|
},
|
|
99
99
|
],
|
|
100
100
|
actions: {
|
|
101
|
-
...
|
|
101
|
+
...button({ text: '', type: 'submit', fill: 'solid', expand: 'block' }),
|
|
102
102
|
token: 'login-submit',
|
|
103
103
|
textKey: 'loginSubmit',
|
|
104
104
|
},
|
|
@@ -164,7 +164,7 @@ export class LoginComponent {
|
|
|
164
164
|
},
|
|
165
165
|
],
|
|
166
166
|
actions: {
|
|
167
|
-
...
|
|
167
|
+
...button({ text: '', type: 'submit', fill: 'solid', expand: 'block' }),
|
|
168
168
|
token: 'register-submit',
|
|
169
169
|
textKey: 'registerSubmit',
|
|
170
170
|
},
|
|
@@ -205,7 +205,7 @@ export class LoginComponent {
|
|
|
205
205
|
},
|
|
206
206
|
],
|
|
207
207
|
actions: {
|
|
208
|
-
...
|
|
208
|
+
...button({ text: '', type: 'submit', fill: 'solid', expand: 'block' }),
|
|
209
209
|
token: 'verify-submit',
|
|
210
210
|
textKey: 'verifySubmit',
|
|
211
211
|
},
|
|
@@ -248,7 +248,7 @@ export class LoginComponent {
|
|
|
248
248
|
},
|
|
249
249
|
],
|
|
250
250
|
actions: {
|
|
251
|
-
...
|
|
251
|
+
...button({ text: '', type: 'submit', fill: 'solid', expand: 'block' }),
|
|
252
252
|
token: 'mfa-verify-submit',
|
|
253
253
|
textKey: 'verifySubmit',
|
|
254
254
|
},
|
|
@@ -285,7 +285,7 @@ export class LoginComponent {
|
|
|
285
285
|
},
|
|
286
286
|
],
|
|
287
287
|
actions: {
|
|
288
|
-
...
|
|
288
|
+
...button({ text: '', type: 'submit', fill: 'solid', expand: 'block' }),
|
|
289
289
|
token: 'forgot-submit',
|
|
290
290
|
textKey: 'forgotSubmit',
|
|
291
291
|
},
|
|
@@ -341,7 +341,7 @@ export class LoginComponent {
|
|
|
341
341
|
},
|
|
342
342
|
],
|
|
343
343
|
actions: {
|
|
344
|
-
...
|
|
344
|
+
...button({ text: '', type: 'submit', fill: 'solid', expand: 'block' }),
|
|
345
345
|
token: 'reset-submit',
|
|
346
346
|
textKey: 'resetSubmit',
|
|
347
347
|
},
|
|
@@ -751,4 +751,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
751
751
|
}], onMFARequired: [{
|
|
752
752
|
type: Output
|
|
753
753
|
}] } });
|
|
754
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMs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Z0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0E3eUJVLGNBQWM7bUdBQWQsY0FBYywwTEM3QzNCLGd1UEF3T0EsczRDRDFNSSxZQUFZLCtCQUNaLFNBQVMsb1BBQ1QsVUFBVSw4RUFDVixVQUFVLHdLQUNWLFNBQVMsb0dBQ1QsT0FBTywySkFDUCxRQUFRLHNEQUNSLE9BQU8sZ0ZBQ1AsVUFBVSxtRkFDVixhQUFhLDhIQUNiLGNBQWM7OzRGQUtMLGNBQWM7a0JBbkIxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixjQUFjO3FCQUNmOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBhdXRoUGFzc3dvcmRWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25CdXR0b25zLFxuICBJb25Db250ZW50LFxuICBJb25IZWFkZXIsXG4gIElvbkljb24sXG4gIElvbk1vZGFsLFxuICBJb25UZXh0LFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIElucHV0STE4bkhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTGVnYWxMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xlZ2FsLWxpbmsvbGVnYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1NZXRhZGF0YSwgRm9ybVN1Ym1pdCwgSW5wdXRUeXBlLCBDb21wb25lbnRTdGF0ZXMsIENvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU29saWREZWZhdWx0QmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vZmFjdG9yeSc7XG5pbXBvcnQgeyBMb2dpbk1ldGFkYXRhLCBMb2dpblN1Y2Nlc3NFdmVudCwgTG9naW5FcnJvckV2ZW50LCBNRkFSZXF1aXJlZEV2ZW50LCBMT0dJTl9ERUZBVUxUUyB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbG9naW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uSGVhZGVyLFxuICAgIElvbkljb24sXG4gICAgSW9uTW9kYWwsXG4gICAgSW9uVGV4dCxcbiAgICBJb25Ub29sYmFyLFxuICAgIEZvcm1Db21wb25lbnQsXG4gICAgSW1hZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xvZ2luLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHJvcHM6IExvZ2luTWV0YWRhdGEgPSB7fTtcblxuICBAT3V0cHV0KCkgb25TdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxMb2dpblN1Y2Nlc3NFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luRXJyb3JFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uTUZBUmVxdWlyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1GQVJlcXVpcmVkRXZlbnQ+KCk7XG5cbiAgLy8gU2VydmljZXNcbiAgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG5IZWxwZXIgPSBpbmplY3QoSW5wdXRJMThuSGVscGVyKTtcbiAgcHJpdmF0ZSBsZWdhbExpbmsgPSBpbmplY3QoTGVnYWxMaW5rU2VydmljZSk7XG5cbiAgLyoqIFVSTCBkZWwgc2l0aW8gcHJpbmNpcGFsIHJlc3VlbHRhIHBvciBhbWJpZW50ZSDigJQgZmFsbGJhY2sgY3VhbmRvIGVsIGNvbnN1bWVyIG5vIHBhc2EgY29tcGFueUxpbmsuICovXG4gIGdldCByZXNvbHZlZENvbXBhbnlMaW5rKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubGVnYWw/LmNvbXBhbnlMaW5rID8/IHRoaXMubGVnYWxMaW5rLmJhc2VVcmwgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIHRyYW5zbGF0aW5nIGF1dGgtcmVsYXRlZCBzdHJpbmdzLlxuICAgKiBFeHBvc2VkIHRvIHRlbXBsYXRlIGZvciBkeW5hbWljIHRleHQuXG4gICAqL1xuICB0KGtleTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ19hdXRoJywgZGF0YSk7XG4gIH1cblxuICAvLyBUaW1lcnNcbiAgcHJpdmF0ZSByZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVzZXRSZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcbiAgaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc01GQVZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIF9tZmFTdWNjZXNzUGVuZGluZyA9IGZhbHNlO1xuXG4gIHBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9ICcnO1xuICBwZW5kaW5nUmVzZXRFbWFpbCA9ICcnO1xuICByZXNlbmRDb29sZG93biA9IDA7XG4gIHJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuXG4gIC8vIFJlc29sdmVkIHByb3BzIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGNvbmZpZygpOiBSZXF1aXJlZDxPbWl0PExvZ2luTWV0YWRhdGEsICdsb2dvJyB8ICdsZWdhbCcgfCAncmVkaXJlY3RPblN1Y2Nlc3MnPj4gJiBMb2dpbk1ldGFkYXRhIHtcbiAgICByZXR1cm4geyAuLi5MT0dJTl9ERUZBVUxUUywgLi4udGhpcy5wcm9wcyB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUk0gU1RBVEUgU0lHTkFMU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIF9sb2dpbkZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZWdpc3RlckZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF92ZXJpZnlGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lID0gc2lnbmFsKCcnKTtcbiAgcHJpdmF0ZSBfbWZhVmVyaWZ5Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX21mYU1ldGhvZCA9IHNpZ25hbDwnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUyc+KCdUT1RQJyk7XG4gIHByaXZhdGUgX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVzZXRGb3JtU2VjdGlvbk5hbWUgPSBzaWduYWwoJycpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMT0dJTiBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgbG9naW5Gb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdsb2dpblRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5FTUFJTCxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdsb2dpbi1lbWFpbCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICAgICAgICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdsb2dpbi1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJycsICdzdWJtaXQnKSxcbiAgICAgICAgdG9rZW46ICdsb2dpbi1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAnbG9naW5TdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9sb2dpbkZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFR0lTVEVSIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSByZWdpc3RlckZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3JlZ2lzdGVyVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1uYW1lJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnZnVsbE5hbWUnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ25hbWVQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnbmFtZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICduYW1lTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5FTUFJTCxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1lbWFpbCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICAgICAgICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBhdXRoUGFzc3dvcmQ6ICdwYXNzd29yZFN0cmVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGF1dGhQYXNzd29yZFZhbGlkYXRvcigpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAncmVnaXN0ZXItc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3JlZ2lzdGVyU3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IHZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lKCkgfHwgdGhpcy50KCd2ZXJpZnlEZXNjcmlwdGlvbicpO1xuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3ZlcmlmeVRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAndmVyaWZ5LXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ3ZlcmlmeS1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAndmVyaWZ5U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgVkVSSUZZIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBtZmFWZXJpZnlGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLl9tZmFNZXRob2QoKTtcbiAgICBjb25zdCBzZWN0aW9uTmFtZSA9XG4gICAgICBtZXRob2QgPT09ICdUT1RQJyA/IHRoaXMudCgnbWZhVE9UUCcpIDogbWV0aG9kID09PSAnRU1BSUwnID8gdGhpcy50KCdtZmFFbWFpbCcpIDogdGhpcy50KCdtZmFTTVMnKTtcblxuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ21mYVRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAnbWZhLXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ21mYS12ZXJpZnktc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3ZlcmlmeVN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2ZvcmdvdFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdmb3Jnb3REZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdmb3Jnb3QtZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnZm9yZ290LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdmb3Jnb3RTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSByZXNldFBhc3N3b3JkRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLl9yZXNldEZvcm1TZWN0aW9uTmFtZSgpIHx8IHRoaXMudCgncmVzZXREZXNjcmlwdGlvbicpO1xuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3Jlc2V0VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZXNldC1waW4nLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2NvZGVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBBU1NXT1JELFxuICAgICAgICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3Jlc2V0LW5ldy1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50S2V5OiAnbmV3UGFzc3dvcmRIaW50JyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBhdXRoUGFzc3dvcmQ6ICdwYXNzd29yZFN0cmVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGF1dGhQYXNzd29yZFZhbGlkYXRvcigpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAncmVzZXQtc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3Jlc2V0U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbG9naW5IYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgZW1haWwgPSBldmVudC5maWVsZHNbJ2VtYWlsJ107XG4gICAgY29uc3QgcGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ3Bhc3N3b3JkJ107XG5cbiAgICBpZiAoIWVtYWlsIHx8ICFwYXNzd29yZCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb21wbGV0ZUFsbEZpZWxkcycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dpbkZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW4oeyBlbWFpbCwgcGFzc3dvcmQgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEJykge1xuICAgICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ25pbicpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyOiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0Jyk6IHZvaWQge1xuICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW5XaXRoT0F1dGgocHJvdmlkZXIpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHByb3ZpZGVyKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnUE9QVVBfQ0xPU0VEJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnb2F1dGgnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVHSVNURVIgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlZ2lzdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHJlZ2lzdGVySGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSBldmVudC5maWVsZHNbJ25hbWUnXTtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGV2ZW50LmZpZWxkc1sncGFzc3dvcmQnXTtcblxuICAgIGlmICghbmFtZSB8fCAhZW1haWwgfHwgIXBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvbXBsZXRlQWxsRmllbGRzJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ251cCh7IG5hbWUsIGVtYWlsLCBwYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmNsb3NlUmVnaXN0ZXJNb2RhbCgpO1xuICAgICAgICB0aGlzLm9wZW5WZXJpZnlNb2RhbChlbWFpbCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnc2lnbnVwJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuVmVyaWZ5TW9kYWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gZW1haWw7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lLnNldChgJHt0aGlzLnQoJ3ZlcmlmeURlc2NyaXB0aW9uJykucmVwbGFjZSgnLicsICcnKX0gKCR7ZW1haWx9KWApO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgICB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgdmVyaWZ5SGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcblxuICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLnZlcmlmeUVtYWlsKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsLFxuICAgICAgICBjb2RlLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdlbWFpbFZlcmlmaWVkJykpO1xuICAgICAgICAgIHRoaXMuY2xvc2VWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgdHlwZTogJ0VNQUlMX1ZFUklGWScsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3ZlcmlmeScpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5NRkFWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5tZXRob2QgYXMgJ1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnO1xuICAgIHRoaXMuX21mYU1ldGhvZC5zZXQobWV0aG9kKTtcbiAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzTUZBVmVyaWZ5TW9kYWxPcGVuID0gdHJ1ZTtcblxuICAgIHRoaXMub25NRkFSZXF1aXJlZC5lbWl0KHsgbWV0aG9kIH0pO1xuICB9XG5cbiAgY2xvc2VNRkFWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTUZBVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICB2ZXJpZnlNRkFIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuXG4gICAgdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnZlcmlmeU1GQShjb2RlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgLy8gRGlmZXJpbW9zIGhhbmRsZUxvZ2luU3VjY2VzcyBoYXN0YSBxdWUgaW9uLW1vZGFsIGNvbXBsZXRlIHN1XG4gICAgICAgIC8vIGFuaW1hY2nDs24gZGUgY2llcnJlIChkaWREaXNtaXNzKS4gU2luIGVzdG8sIGByb3V0ZXIubmF2aWdhdGVgIGRlbFxuICAgICAgICAvLyBwYWRyZSBkZXN0cnV5ZSBhbCBob3N0IGRlbCBtb2RhbCBhbnRlcyBkZSBxdWUgSW9uaWMgcHJvY2VzZSBlbFxuICAgICAgICAvLyBkaXNtaXNzLCB5IGVsIG1vZGFsIHF1ZWRhIHZpc2libGUgZW5jaW1hIGRlIGxhIHDDoWdpbmEgZGVzdGlub1xuICAgICAgICAvLyAoaU9TIFBXQSkuXG4gICAgICAgIHRoaXMuX21mYVN1Y2Nlc3NQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbG9zZU1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ21mYScpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTUZBVmVyaWZ5RGlzbWlzc2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZmFTdWNjZXNzUGVuZGluZykge1xuICAgICAgdGhpcy5fbWZhU3VjY2Vzc1BlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUkdPVCBQQVNTV09SRCBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuRm9yZ290UGFzc3dvcmRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgZm9yZ290UGFzc3dvcmRIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgZW1haWwgPSBldmVudC5maWVsZHNbJ2VtYWlsJ107XG5cbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2VudGVyRW1haWwnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZm9yZ290UGFzc3dvcmQoeyBlbWFpbCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpO1xuICAgICAgICB0aGlzLm9wZW5SZXNldFBhc3N3b3JkTW9kYWwoZW1haWwpO1xuICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ2ZvcmdvdCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVNFVCBQQVNTV09SRCBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuUmVzZXRQYXNzd29yZE1vZGFsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gZW1haWw7XG4gICAgdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUuc2V0KGAke3RoaXMudCgncmVzZXREZXNjcmlwdGlvbicpLnJlcGxhY2UoJy4nLCAnJyl9ICgke2VtYWlsfSlgKTtcbiAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICBjbG9zZVJlc2V0UGFzc3dvcmRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1Jlc2V0RW1haWwgPSAnJztcbiAgICB0aGlzLl9yZXNldEZvcm1TZWN0aW9uTmFtZS5zZXQoJycpO1xuICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIHJlc2V0UGFzc3dvcmRIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuICAgIGNvbnN0IG5ld1Bhc3N3b3JkID0gZXZlbnQuZmllbGRzWyduZXdQYXNzd29yZCddO1xuXG4gICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLnJlc2V0UGFzc3dvcmQoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCxcbiAgICAgICAgY29kZSxcbiAgICAgICAgbmV3UGFzc3dvcmQsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdwYXNzd29yZFVwZGF0ZWQnKSk7XG4gICAgICAgICAgdGhpcy5jbG9zZVJlc2V0UGFzc3dvcmRNb2RhbCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICByZXNlbmRSZXNldENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA+IDApIHJldHVybjtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNlbmRDb2RlKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIHR5cGU6ICdQQVNTV09SRF9SRVNFVCcsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAncmVzZXQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEhFTFBFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBoYW5kbGVMb2dpblN1Y2Nlc3Mob2F1dGhQcm92aWRlcj86ICdnb29nbGUnIHwgJ2FwcGxlJyB8ICdtaWNyb3NvZnQnLCBtZmFDb21wbGV0ZWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCd3ZWxjb21lJykpO1xuXG4gICAgdGhpcy5vblN1Y2Nlc3MuZW1pdCh7XG4gICAgICB1c2VyOiB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIoKSxcbiAgICAgIG1mYUNvbXBsZXRlZCxcbiAgICAgIG9hdXRoUHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzcykge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucHJvcHMucmVkaXJlY3RPblN1Y2Nlc3NdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogdW5rbm93biwgb3BlcmF0aW9uOiBMb2dpbkVycm9yRXZlbnRbJ29wZXJhdGlvbiddKTogdm9pZCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycik7XG4gICAgdGhpcy5zaG93VG9hc3QobWVzc2FnZSk7XG5cbiAgICB0aGlzLm9uRXJyb3IuZW1pdCh7XG4gICAgICBjb2RlOiAoZXJyIGFzIHsgY29kZT86IHN0cmluZyB9KT8uY29kZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvcGVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dUb2FzdChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnIgYXMge1xuICAgICAgZXJyb3I/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfTtcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIE1hcCBlcnJvciBjb2RlcyB0byBpMThuIGtleXNcbiAgICBjb25zdCBlcnJvcktleU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC8vIFNpZ25pblxuICAgICAgQVVUSFYyX0lOVkFMSURfQ1JFREVOVElBTFM6ICdlcnJvckludmFsaWRDcmVkZW50aWFscycsXG4gICAgICBBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEOiAnZXJyb3JFbWFpbE5vdFZlcmlmaWVkJyxcbiAgICAgIEFVVEhWMl9BQ0NPVU5UX1NVU1BFTkRFRDogJ2Vycm9yQWNjb3VudFN1c3BlbmRlZCcsXG5cbiAgICAgIC8vIFNpZ251cFxuICAgICAgQVVUSFYyX0VNQUlMX0VYSVNUUzogJ2Vycm9yRW1haWxFeGlzdHMnLFxuICAgICAgQVVUSFYyX1dFQUtfUEFTU1dPUkQ6ICdlcnJvcldlYWtQYXNzd29yZCcsXG5cbiAgICAgIC8vIFZlcmlmaWNhdGlvbiBjb2Rlc1xuICAgICAgQVVUSFYyX0lOVkFMSURfQ09ERTogJ2Vycm9ySW52YWxpZENvZGUnLFxuICAgICAgQVVUSFYyX0VYUElSRURfQ09ERTogJ2Vycm9yRXhwaXJlZENvZGUnLFxuICAgICAgQVVUSFYyX0NPREVfRVhQSVJFRDogJ2Vycm9yRXhwaXJlZENvZGUnLFxuICAgICAgQVVUSFYyX1RPT19NQU5ZX0FUVEVNUFRTOiAnZXJyb3JUb29NYW55QXR0ZW1wdHMnLFxuXG4gICAgICAvLyBNRkFcbiAgICAgIEFVVEhWMl9NRkFfSU5WQUxJRF9DT0RFOiAnZXJyb3JNRkFJbnZhbGlkQ29kZScsXG5cbiAgICAgIC8vIE9BdXRoXG4gICAgICBQT1BVUF9CTE9DS0VEOiAnZXJyb3JQb3B1cEJsb2NrZWQnLFxuICAgICAgT0FVVEhfRkFJTEVEOiAnZXJyb3JPQXV0aEZhaWxlZCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yQ29kZSA9IGVycm9yPy5lcnJvcj8uY29kZSB8fCBlcnJvcj8uY29kZTtcbiAgICBpZiAoZXJyb3JDb2RlICYmIGVycm9yS2V5TWFwW2Vycm9yQ29kZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnQoZXJyb3JLZXlNYXBbZXJyb3JDb2RlXSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudCgnZXJyb3JHZW5lcmljJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09PTERPV04gVElNRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgc3RhcnRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMzA7XG4gICAgdGhpcy5yZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kQ29vbGRvd24tLTtcbiAgICAgIGlmICh0aGlzLnJlc2VuZENvb2xkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2VuZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNlbmRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVzZW5kQ29vbGRvd24gPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMzA7XG4gICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNldFJlc2VuZENvb2xkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVzZXRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNldFJlc2VuZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZXRSZXNlbmRUaW1lcik7XG4gICAgICB0aGlzLnJlc2V0UmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2YWwtbG9naW5cIiBbY2xhc3MudmFsLWxvZ2luLS1jYXJkXT1cImNvbmZpZy5zaG93Q2FyZFwiPlxuICA8IS0tIExvZ28gLS0+XG4gIEBpZiAocHJvcHMubG9nbykge1xuICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgPC9kaXY+XG4gIH1cblxuICA8IS0tIExvZ2luIEZvcm0gLS0+XG4gIDx2YWwtZm9ybSBbcHJvcHNdPVwibG9naW5Gb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJsb2dpbkhhbmRsZXIoJGV2ZW50KVwiIC8+XG5cbiAgPCEtLSBPQXV0aCBTZWN0aW9uIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93T0F1dGggJiYgY29uZmlnLm9hdXRoUHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgPGRpdiBjbGFzcz1cIm9hdXRoLXNlcGFyYXRvclwiPlxuICAgIDxzcGFuPnt7IHQoJ29yQ29udGludWVXaXRoJykgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvYXV0aC1idXR0b25zXCI+XG4gICAgQGZvciAocHJvdmlkZXIgb2YgY29uZmlnLm9hdXRoUHJvdmlkZXJzOyB0cmFjayBwcm92aWRlcikge1xuICAgIDxpb24tYnV0dG9uXG4gICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICBjb2xvcj1cImRhcmtcIlxuICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNPQXV0aExvYWRpbmdcIlxuICAgID5cbiAgICAgIEBzd2l0Y2ggKHByb3ZpZGVyKSB7IEBjYXNlICgnZ29vZ2xlJykge1xuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLWdvb2dsZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aEdvb2dsZScpIH19IH0gQGNhc2UgKCdhcHBsZScpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1hcHBsZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aEFwcGxlJykgfX0gfSBAY2FzZSAoJ21pY3Jvc29mdCcpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1taWNyb3NvZnRcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhNaWNyb3NvZnQnKSB9fSB9IH1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gUmVnaXN0ZXIgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd1JlZ2lzdGVyKSB7XG4gIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmtcIj5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICB7eyB0KCdub0FjY291bnQnKSB9fVxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5SZWdpc3Rlck1vZGFsKClcIj57eyB0KCdyZWdpc3RlcicpIH19PC9hPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd0ZvcmdvdFBhc3N3b3JkKSB7XG4gIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmsgZm9yZ290LXBhc3N3b3JkXCI+XG4gICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAge3sgdCgnZm9yZ290TGluaycpIH19XG4gICAgICA8YSAoY2xpY2spPVwib3BlbkZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPnt7IHQoJ3JlY292ZXJQYXNzd29yZCcpIH19PC9hPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBMZWdhbCBOb3RpY2UgLS0+XG4gIEBpZiAocHJvcHMubGVnYWwpIHtcbiAgPGRpdiBjbGFzcz1cImxlZ2FsLW5vdGljZVwiPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgIDxwPlxuICAgICAgICB7eyB0KCdsZWdhbFByZWZpeCcpIH19IEBpZiAocmVzb2x2ZWRDb21wYW55TGluaykge1xuICAgICAgICA8YSBbaHJlZl09XCJyZXNvbHZlZENvbXBhbnlMaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgPjxzdHJvbmc+e3sgcHJvcHMubGVnYWwuY29tcGFueU5hbWUgfX08L3N0cm9uZz48L2FcbiAgICAgICAgPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICB9IHt7IHQoJ2xlZ2FsU3VmZml4JykgfX0gQGlmIChwcm9wcy5sZWdhbC50ZXJtc0xpbmspIHtcbiAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwudGVybXNMaW5rXCI+e3sgdCgndGVybXNBbmRDb25kaXRpb25zJykgfX08L2E+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3Bhbj57eyB0KCd0ZXJtc0FuZENvbmRpdGlvbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgfSB7eyB0KCdhbmQnKSB9fSBAaWYgKHByb3BzLmxlZ2FsLnByaXZhY3lMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLnByaXZhY3lMaW5rXCI+e3sgdCgncHJpdmFjeVBvbGljeScpIH19PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4+e3sgdCgncHJpdmFjeVBvbGljeScpIH19PC9zcGFuPlxuICAgICAgICB9LlxuICAgICAgPC9wPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPCEtLSBSZWdpc3RlciBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1JlZ2lzdGVyTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlZ2lzdGVyRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVnaXN0ZXJIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnaGFzQWNjb3VudCcpIH19XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj57eyB0KCdzaWduSW4nKSB9fTwvYT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gVmVyaWZ5IEVtYWlsIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX0gQGlmIChyZXNlbmRDb29sZG93biA+IDApIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29vbGRvd25cIj57eyB0KCdyZXNlbmRJbicsIHsgc2Vjb25kczogcmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJlc2VuZENvZGUoKVwiPnt7IHQoJ3Jlc2VuZCcpIH19PC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlblwiIChkaWREaXNtaXNzKT1cImNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cImZvcmdvdFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gUmVzZXQgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJyZXNldFBhc3N3b3JkRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVzZXRQYXNzd29yZEhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX0gQGlmIChyZXNldFJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb29sZG93blwiPnt7IHQoJ3Jlc2VuZEluJywgeyBzZWNvbmRzOiByZXNldFJlc2VuZENvb2xkb3duLnRvU3RyaW5nKCkgfSkgfX08L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhIChjbGljayk9XCJyZXNlbmRSZXNldENvZGUoKVwiPnt7IHQoJ3Jlc2VuZCcpIH19PC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBNRkEgVmVyaWZ5IE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzTUZBVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiIChkaWREaXNtaXNzKT1cIm9uTUZBVmVyaWZ5RGlzbWlzc2VkKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZU1GQVZlcmlmeU1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJtZmFWZXJpZnlGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJ2ZXJpZnlNRkFIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cbiJdfQ==
|
|
754
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMs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Q2IsY0FBYztxQkFDZjs4QkFLUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYXV0aFBhc3N3b3JkVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uSGVhZGVyLFxuICBJb25JY29uLFxuICBJb25Nb2RhbCxcbiAgSW9uVGV4dCxcbiAgSW9uVG9vbGJhcixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aCc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlLCBJbnB1dEkxOG5IZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IExlZ2FsTGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sZWdhbC1saW5rL2xlZ2FsLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0VHlwZSwgQ29tcG9uZW50U3RhdGVzLCBDb21wb25lbnRTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGJ1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9mYWN0b3J5JztcbmltcG9ydCB7IExvZ2luTWV0YWRhdGEsIExvZ2luU3VjY2Vzc0V2ZW50LCBMb2dpbkVycm9yRXZlbnQsIE1GQVJlcXVpcmVkRXZlbnQsIExPR0lOX0RFRkFVTFRTIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1sb2dpbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uSWNvbixcbiAgICBJb25Nb2RhbCxcbiAgICBJb25UZXh0LFxuICAgIElvblRvb2xiYXIsXG4gICAgRm9ybUNvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogTG9naW5NZXRhZGF0YSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBvblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luU3VjY2Vzc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5FcnJvckV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25NRkFSZXF1aXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TUZBUmVxdWlyZWRFdmVudD4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgaTE4bkhlbHBlciA9IGluamVjdChJbnB1dEkxOG5IZWxwZXIpO1xuICBwcml2YXRlIGxlZ2FsTGluayA9IGluamVjdChMZWdhbExpbmtTZXJ2aWNlKTtcblxuICAvKiogVVJMIGRlbCBzaXRpbyBwcmluY2lwYWwgcmVzdWVsdGEgcG9yIGFtYmllbnRlIOKAlCBmYWxsYmFjayBjdWFuZG8gZWwgY29uc3VtZXIgbm8gcGFzYSBjb21wYW55TGluay4gKi9cbiAgZ2V0IHJlc29sdmVkQ29tcGFueUxpbmsoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sZWdhbD8uY29tcGFueUxpbmsgPz8gdGhpcy5sZWdhbExpbmsuYmFzZVVybCA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgdHJhbnNsYXRpbmcgYXV0aC1yZWxhdGVkIHN0cmluZ3MuXG4gICAqIEV4cG9zZWQgdG8gdGVtcGxhdGUgZm9yIGR5bmFtaWMgdGV4dC5cbiAgICovXG4gIHQoa2V5OiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnX2F1dGgnLCBkYXRhKTtcbiAgfVxuXG4gIC8vIFRpbWVyc1xuICBwcml2YXRlIHJlc2VuZFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZXNldFJlc2VuZFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcblxuICAvLyBTdGF0ZVxuICBpc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuICBpc1JlZ2lzdGVyTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzTUZBVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgX21mYVN1Y2Nlc3NQZW5kaW5nID0gZmFsc2U7XG5cbiAgcGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gJyc7XG4gIHBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gIHJlc2VuZENvb2xkb3duID0gMDtcbiAgcmVzZXRSZXNlbmRDb29sZG93biA9IDA7XG5cbiAgLy8gUmVzb2x2ZWQgcHJvcHMgd2l0aCBkZWZhdWx0c1xuICBnZXQgY29uZmlnKCk6IFJlcXVpcmVkPE9taXQ8TG9naW5NZXRhZGF0YSwgJ2xvZ28nIHwgJ2xlZ2FsJyB8ICdyZWRpcmVjdE9uU3VjY2Vzcyc+PiAmIExvZ2luTWV0YWRhdGEge1xuICAgIHJldHVybiB7IC4uLkxPR0lOX0RFRkFVTFRTLCAuLi50aGlzLnByb3BzIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9STSBTVEFURSBTSUdOQUxTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgX2xvZ2luRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3JlZ2lzdGVyRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3ZlcmlmeUZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF92ZXJpZnlGb3JtU2VjdGlvbk5hbWUgPSBzaWduYWwoJycpO1xuICBwcml2YXRlIF9tZmFWZXJpZnlGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfbWZhTWV0aG9kID0gc2lnbmFsPCdUT1RQJyB8ICdFTUFJTCcgfCAnU01TJz4oJ1RPVFAnKTtcbiAgcHJpdmF0ZSBfZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVzZXRQYXNzd29yZEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZXNldEZvcm1TZWN0aW9uTmFtZSA9IHNpZ25hbCgnJyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExPR0lOIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBsb2dpbkZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2xvZ2luVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgICAgICAgICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgICAgICAgICB0b2tlbjogJ2xvZ2luLWVtYWlsJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnZW1haWwnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ2VtYWlsUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2VtYWlsUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnZW1haWxJbnZhbGlkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBBU1NXT1JELFxuICAgICAgICAgICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ2xvZ2luLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ3Bhc3N3b3JkUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ3Bhc3N3b3JkUmVxdWlyZWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdsb2dpbi1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAnbG9naW5TdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9sb2dpbkZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFR0lTVEVSIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSByZWdpc3RlckZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3JlZ2lzdGVyVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1uYW1lJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnZnVsbE5hbWUnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ25hbWVQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnbmFtZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICduYW1lTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5FTUFJTCxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1lbWFpbCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICAgICAgICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBhdXRoUGFzc3dvcmQ6ICdwYXNzd29yZFN0cmVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGF1dGhQYXNzd29yZFZhbGlkYXRvcigpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ3JlZ2lzdGVyLXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdyZWdpc3RlclN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVkVSSUZZIEVNQUlMIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSB2ZXJpZnlGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBzZWN0aW9uTmFtZSA9IHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZSgpIHx8IHRoaXMudCgndmVyaWZ5RGVzY3JpcHRpb24nKTtcbiAgICByZXR1cm4gdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICd2ZXJpZnlUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHNlY3Rpb25OYW1lLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3ZlcmlmeS1waW4nLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2NvZGVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uYnV0dG9uKHsgdGV4dDogJycsIHR5cGU6ICdzdWJtaXQnLCBmaWxsOiAnc29saWQnLCBleHBhbmQ6ICdibG9jaycgfSksXG4gICAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICd2ZXJpZnlTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl92ZXJpZnlGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IG1mYVZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuX21mYU1ldGhvZCgpO1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID1cbiAgICAgIG1ldGhvZCA9PT0gJ1RPVFAnID8gdGhpcy50KCdtZmFUT1RQJykgOiBtZXRob2QgPT09ICdFTUFJTCcgPyB0aGlzLnQoJ21mYUVtYWlsJykgOiB0aGlzLnQoJ21mYVNNUycpO1xuXG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbWZhVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdtZmEtcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ21mYS12ZXJpZnktc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3ZlcmlmeVN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2ZvcmdvdFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdmb3Jnb3REZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdmb3Jnb3QtZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ2ZvcmdvdC1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAnZm9yZ290U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVNFVCBQQVNTV09SRCBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgcmVzZXRQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUoKSB8fCB0aGlzLnQoJ3Jlc2V0RGVzY3JpcHRpb24nKTtcbiAgICByZXR1cm4gdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdyZXNldFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVzZXQtcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICAgICAgICAgICAgbmFtZTogJ25ld1Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZXNldC1uZXctcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ25ld1Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgaGludEtleTogJ25ld1Bhc3N3b3JkSGludCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgYXV0aFBhc3N3b3JkOiAncGFzc3dvcmRTdHJlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBhdXRoUGFzc3dvcmRWYWxpZGF0b3IoKV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdyZXNldC1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAncmVzZXRTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBsb2dpbkhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGV2ZW50LmZpZWxkc1sncGFzc3dvcmQnXTtcblxuICAgIGlmICghZW1haWwgfHwgIXBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvbXBsZXRlQWxsRmllbGRzJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25pbih7IGVtYWlsLCBwYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2dpbkZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMub3Blbk1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcblxuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSAoZXJyIGFzIHsgY29kZT86IHN0cmluZyB9KT8uY29kZTtcbiAgICAgICAgaWYgKGVycm9yQ29kZSA9PT0gJ0FVVEhWMl9FTUFJTF9OT1RfVkVSSUZJRUQnKSB7XG4gICAgICAgICAgdGhpcy5vcGVuVmVyaWZ5TW9kYWwoZW1haWwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnc2lnbmluJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbG9naW5XaXRoT0F1dGgocHJvdmlkZXI6ICdnb29nbGUnIHwgJ2FwcGxlJyB8ICdtaWNyb3NvZnQnKTogdm9pZCB7XG4gICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25pbldpdGhPQXV0aChwcm92aWRlcikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMub3Blbk1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MocHJvdmlkZXIpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdQT1BVUF9DTE9TRUQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdvYXV0aCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VSZWdpc3Rlck1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcmVnaXN0ZXJIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LmZpZWxkc1snbmFtZSddO1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFuYW1lIHx8ICFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29tcGxldGVBbGxGaWVsZHMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbnVwKHsgbmFtZSwgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdzaWdudXAnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVkVSSUZZIEVNQUlMIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5WZXJpZnlNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSBlbWFpbDtcbiAgICB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUuc2V0KGAke3RoaXMudCgndmVyaWZ5RGVzY3JpcHRpb24nKS5yZXBsYWNlKCcuJywgJycpfSAoJHtlbWFpbH0pYCk7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgdGhpcy5pc1ZlcmlmeU1vZGFsT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zdGFydFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICBjbG9zZVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9ICcnO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZS5zZXQoJycpO1xuICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICB2ZXJpZnlIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuXG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAudmVyaWZ5RW1haWwoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2VtYWlsVmVyaWZpZWQnKSk7XG4gICAgICAgICAgdGhpcy5jbG9zZVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICd2ZXJpZnknKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzZW5kQ29kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNlbmRDb29sZG93biA+IDApIHJldHVybjtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNlbmRDb2RlKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsLFxuICAgICAgICB0eXBlOiAnRU1BSUxfVkVSSUZZJyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICAgICAgdGhpcy5zdGFydFJlc2VuZENvb2xkb3duKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3Blbk1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLm1ldGhvZCBhcyAnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUyc7XG4gICAgdGhpcy5fbWZhTWV0aG9kLnNldChtZXRob2QpO1xuICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5vbk1GQVJlcXVpcmVkLmVtaXQoeyBtZXRob2QgfSk7XG4gIH1cblxuICBjbG9zZU1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHZlcmlmeU1GQUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2UudmVyaWZ5TUZBKGNvZGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAvLyBEaWZlcmltb3MgaGFuZGxlTG9naW5TdWNjZXNzIGhhc3RhIHF1ZSBpb24tbW9kYWwgY29tcGxldGUgc3VcbiAgICAgICAgLy8gYW5pbWFjacOzbiBkZSBjaWVycmUgKGRpZERpc21pc3MpLiBTaW4gZXN0bywgYHJvdXRlci5uYXZpZ2F0ZWAgZGVsXG4gICAgICAgIC8vIHBhZHJlIGRlc3RydXllIGFsIGhvc3QgZGVsIG1vZGFsIGFudGVzIGRlIHF1ZSBJb25pYyBwcm9jZXNlIGVsXG4gICAgICAgIC8vIGRpc21pc3MsIHkgZWwgbW9kYWwgcXVlZGEgdmlzaWJsZSBlbmNpbWEgZGUgbGEgcMOhZ2luYSBkZXN0aW5vXG4gICAgICAgIC8vIChpT1MgUFdBKS5cbiAgICAgICAgdGhpcy5fbWZhU3VjY2Vzc1BlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnbWZhJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25NRkFWZXJpZnlEaXNtaXNzZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21mYVN1Y2Nlc3NQZW5kaW5nKSB7XG4gICAgICB0aGlzLl9tZmFTdWNjZXNzUGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3ModW5kZWZpbmVkLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcblxuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW50ZXJFbWFpbCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5mb3Jnb3RQYXNzd29yZCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnZm9yZ290Jyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5SZXNldFBhc3N3b3JkTW9kYWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1Jlc2V0RW1haWwgPSBlbWFpbDtcbiAgICB0aGlzLl9yZXNldEZvcm1TZWN0aW9uTmFtZS5zZXQoYCR7dGhpcy50KCdyZXNldERlc2NyaXB0aW9uJykucmVwbGFjZSgnLicsICcnKX0gKCR7ZW1haWx9KWApO1xuICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIGNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9ICcnO1xuICAgIHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lLnNldCgnJyk7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgcmVzZXRQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ25ld1Bhc3N3b3JkJ107XG5cbiAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZXRQYXNzd29yZCh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdSZXNldEVtYWlsLFxuICAgICAgICBjb2RlLFxuICAgICAgICBuZXdQYXNzd29yZCxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ3Bhc3N3b3JkVXBkYXRlZCcpKTtcbiAgICAgICAgICB0aGlzLmNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3Jlc2V0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZFJlc2V0Q29kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNldFJlc2VuZENvb2xkb3duID4gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLnJlc2VuZENvZGUoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCxcbiAgICAgICAgdHlwZTogJ1BBU1NXT1JEX1JFU0VUJyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICAgICAgdGhpcy5zdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEVMUEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGhhbmRsZUxvZ2luU3VjY2VzcyhvYXV0aFByb3ZpZGVyPzogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcsIG1mYUNvbXBsZXRlZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ3dlbGNvbWUnKSk7XG5cbiAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHtcbiAgICAgIHVzZXI6IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpLFxuICAgICAgbWZhQ29tcGxldGVkLFxuICAgICAgb2F1dGhQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzc10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiB1bmtub3duLCBvcGVyYXRpb246IExvZ2luRXJyb3JFdmVudFsnb3BlcmF0aW9uJ10pOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICB0aGlzLnNob3dUb2FzdChtZXNzYWdlKTtcblxuICAgIHRoaXMub25FcnJvci5lbWl0KHtcbiAgICAgIGNvZGU6IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvciA9IGVyciBhcyB7XG4gICAgICBlcnJvcj86IHsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IHN0cmluZyB9O1xuICAgICAgY29kZT86IHN0cmluZztcbiAgICB9O1xuXG4gICAgLy8gTWFwIGVycm9yIGNvZGVzIHRvIGkxOG4ga2V5c1xuICAgIGNvbnN0IGVycm9yS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLy8gU2lnbmluXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DUkVERU5USUFMUzogJ2Vycm9ySW52YWxpZENyZWRlbnRpYWxzJyxcbiAgICAgIEFVVEhWMl9FTUFJTF9OT1RfVkVSSUZJRUQ6ICdlcnJvckVtYWlsTm90VmVyaWZpZWQnLFxuICAgICAgQVVUSFYyX0FDQ09VTlRfU1VTUEVOREVEOiAnZXJyb3JBY2NvdW50U3VzcGVuZGVkJyxcblxuICAgICAgLy8gU2lnbnVwXG4gICAgICBBVVRIVjJfRU1BSUxfRVhJU1RTOiAnZXJyb3JFbWFpbEV4aXN0cycsXG4gICAgICBBVVRIVjJfV0VBS19QQVNTV09SRDogJ2Vycm9yV2Vha1Bhc3N3b3JkJyxcblxuICAgICAgLy8gVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DT0RFOiAnZXJyb3JJbnZhbGlkQ29kZScsXG4gICAgICBBVVRIVjJfRVhQSVJFRF9DT0RFOiAnZXJyb3JFeHBpcmVkQ29kZScsXG4gICAgICBBVVRIVjJfQ09ERV9FWFBJUkVEOiAnZXJyb3JFeHBpcmVkQ29kZScsXG4gICAgICBBVVRIVjJfVE9PX01BTllfQVRURU1QVFM6ICdlcnJvclRvb01hbnlBdHRlbXB0cycsXG5cbiAgICAgIC8vIE1GQVxuICAgICAgQVVUSFYyX01GQV9JTlZBTElEX0NPREU6ICdlcnJvck1GQUludmFsaWRDb2RlJyxcblxuICAgICAgLy8gT0F1dGhcbiAgICAgIFBPUFVQX0JMT0NLRUQ6ICdlcnJvclBvcHVwQmxvY2tlZCcsXG4gICAgICBPQVVUSF9GQUlMRUQ6ICdlcnJvck9BdXRoRmFpbGVkJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3JDb2RlID0gZXJyb3I/LmVycm9yPy5jb2RlIHx8IGVycm9yPy5jb2RlO1xuICAgIGlmIChlcnJvckNvZGUgJiYgZXJyb3JLZXlNYXBbZXJyb3JDb2RlXSkge1xuICAgICAgcmV0dXJuIHRoaXMudChlcnJvcktleU1hcFtlcnJvckNvZGVdKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3I/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50KCdlcnJvckdlbmVyaWMnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT09MRE9XTiBUSU1FUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBzdGFydFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZW5kQ29vbGRvd24gPSAzMDtcbiAgICB0aGlzLnJlc2VuZFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNlbmRDb29sZG93bi0tO1xuICAgICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPD0gMCkge1xuICAgICAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNlbmRUaW1lcik7XG4gICAgICB0aGlzLnJlc2VuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZXNlbmRDb29sZG93biA9IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPSAzMDtcbiAgICB0aGlzLnJlc2V0UmVzZW5kVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24tLTtcbiAgICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPD0gMCkge1xuICAgICAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNldFJlc2VuZFRpbWVyKTtcbiAgICAgIHRoaXMucmVzZXRSZXNlbmRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA9IDA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInZhbC1sb2dpblwiIFtjbGFzcy52YWwtbG9naW4tLWNhcmRdPVwiY29uZmlnLnNob3dDYXJkXCI+XG4gIDwhLS0gTG9nbyAtLT5cbiAgQGlmIChwcm9wcy5sb2dvKSB7XG4gIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gTG9naW4gRm9ybSAtLT5cbiAgPHZhbC1mb3JtIFtwcm9wc109XCJsb2dpbkZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cImxvZ2luSGFuZGxlcigkZXZlbnQpXCIgLz5cblxuICA8IS0tIE9BdXRoIFNlY3Rpb24gLS0+XG4gIEBpZiAoY29uZmlnLnNob3dPQXV0aCAmJiBjb25maWcub2F1dGhQcm92aWRlcnMubGVuZ3RoID4gMCkge1xuICA8ZGl2IGNsYXNzPVwib2F1dGgtc2VwYXJhdG9yXCI+XG4gICAgPHNwYW4+e3sgdCgnb3JDb250aW51ZVdpdGgnKSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm9hdXRoLWJ1dHRvbnNcIj5cbiAgICBAZm9yIChwcm92aWRlciBvZiBjb25maWcub2F1dGhQcm92aWRlcnM7IHRyYWNrIHByb3ZpZGVyKSB7XG4gICAgPGlvbi1idXR0b25cbiAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAoY2xpY2spPVwibG9naW5XaXRoT0F1dGgocHJvdmlkZXIpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc09BdXRoTG9hZGluZ1wiXG4gICAgPlxuICAgICAgQHN3aXRjaCAocHJvdmlkZXIpIHsgQGNhc2UgKCdnb29nbGUnKSB7XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tZ29vZ2xlXCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gdCgnY29ubmVjdGluZycpIDogdCgnY29udGludWVXaXRoR29vZ2xlJykgfX0gfSBAY2FzZSAoJ2FwcGxlJykge1xuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLWFwcGxlXCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gdCgnY29ubmVjdGluZycpIDogdCgnY29udGludWVXaXRoQXBwbGUnKSB9fSB9IEBjYXNlICgnbWljcm9zb2Z0Jykge1xuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLW1pY3Jvc29mdFwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aE1pY3Jvc29mdCcpIH19IH0gfVxuICAgIDwvaW9uLWJ1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBSZWdpc3RlciBMaW5rIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93UmVnaXN0ZXIpIHtcbiAgPGRpdiBjbGFzcz1cImF1dGgtbGlua1wiPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgIHt7IHQoJ25vQWNjb3VudCcpIH19XG4gICAgICA8YSAoY2xpY2spPVwib3BlblJlZ2lzdGVyTW9kYWwoKVwiPnt7IHQoJ3JlZ2lzdGVyJykgfX08L2E+XG4gICAgPC9pb24tdGV4dD5cbiAgPC9kaXY+XG4gIH1cblxuICA8IS0tIEZvcmdvdCBQYXNzd29yZCBMaW5rIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93Rm9yZ290UGFzc3dvcmQpIHtcbiAgPGRpdiBjbGFzcz1cImF1dGgtbGluayBmb3Jnb3QtcGFzc3dvcmRcIj5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICB7eyB0KCdmb3Jnb3RMaW5rJykgfX1cbiAgICAgIDxhIChjbGljayk9XCJvcGVuRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+e3sgdCgncmVjb3ZlclBhc3N3b3JkJykgfX08L2E+XG4gICAgPC9pb24tdGV4dD5cbiAgPC9kaXY+XG4gIH1cblxuICA8IS0tIExlZ2FsIE5vdGljZSAtLT5cbiAgQGlmIChwcm9wcy5sZWdhbCkge1xuICA8ZGl2IGNsYXNzPVwibGVnYWwtbm90aWNlXCI+XG4gICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgPHA+XG4gICAgICAgIHt7IHQoJ2xlZ2FsUHJlZml4JykgfX0gQGlmIChyZXNvbHZlZENvbXBhbnlMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInJlc29sdmVkQ29tcGFueUxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICA+PHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPjwvYVxuICAgICAgICA+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3Ryb25nPnt7IHByb3BzLmxlZ2FsLmNvbXBhbnlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgIH0ge3sgdCgnbGVnYWxTdWZmaXgnKSB9fSBAaWYgKHByb3BzLmxlZ2FsLnRlcm1zTGluaykge1xuICAgICAgICA8YSBbaHJlZl09XCJwcm9wcy5sZWdhbC50ZXJtc0xpbmtcIj57eyB0KCd0ZXJtc0FuZENvbmRpdGlvbnMnKSB9fTwvYT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxzcGFuPnt7IHQoJ3Rlcm1zQW5kQ29uZGl0aW9ucycpIH19PC9zcGFuPlxuICAgICAgICB9IHt7IHQoJ2FuZCcpIH19IEBpZiAocHJvcHMubGVnYWwucHJpdmFjeUxpbmspIHtcbiAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwucHJpdmFjeUxpbmtcIj57eyB0KCdwcml2YWN5UG9saWN5JykgfX08L2E+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3Bhbj57eyB0KCdwcml2YWN5UG9saWN5JykgfX08L3NwYW4+XG4gICAgICAgIH0uXG4gICAgICA8L3A+XG4gICAgPC9pb24tdGV4dD5cbiAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48IS0tIFJlZ2lzdGVyIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzUmVnaXN0ZXJNb2RhbE9wZW5cIiAoZGlkRGlzbWlzcyk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlUmVnaXN0ZXJNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwicmVnaXN0ZXJGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJyZWdpc3RlckhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICB7eyB0KCdoYXNBY2NvdW50JykgfX1cbiAgICAgICAgICAgIDxhIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPnt7IHQoJ3NpZ25JbicpIH19PC9hPlxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBWZXJpZnkgRW1haWwgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNWZXJpZnlNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VWZXJpZnlNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwidmVyaWZ5Rm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwidmVyaWZ5SGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnbm9Db2RlUmVjZWl2ZWQnKSB9fSBAaWYgKHJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb29sZG93blwiPnt7IHQoJ3Jlc2VuZEluJywgeyBzZWNvbmRzOiByZXNlbmRDb29sZG93bi50b1N0cmluZygpIH0pIH19PC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kQ29kZSgpXCI+e3sgdCgncmVzZW5kJykgfX08L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIEZvcmdvdCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cImZvcmdvdFBhc3N3b3JkRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwiZm9yZ290UGFzc3dvcmRIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlc2V0UGFzc3dvcmRGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJyZXNldFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnbm9Db2RlUmVjZWl2ZWQnKSB9fSBAaWYgKHJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvb2xkb3duXCI+e3sgdCgncmVzZW5kSW4nLCB7IHNlY29uZHM6IHJlc2V0UmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJlc2VuZFJlc2V0Q29kZSgpXCI+e3sgdCgncmVzZW5kJykgfX08L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIE1GQSBWZXJpZnkgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNNRkFWZXJpZnlNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCIgKGRpZERpc21pc3MpPVwib25NRkFWZXJpZnlEaXNtaXNzZWQoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlTUZBVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cIm1mYVZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeU1GQUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuIl19
|