valtech-components 4.0.944 → 4.0.945
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/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/components/atoms/box/box.component.mjs +3 -3
- package/esm2022/lib/components/atoms/button/button.component.mjs +15 -5
- package/esm2022/lib/components/atoms/container/container.component.mjs +2 -2
- package/esm2022/lib/components/atoms/display/display.component.mjs +3 -3
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +3 -3
- package/esm2022/lib/components/atoms/href/href.component.mjs +3 -3
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +3 -3
- package/esm2022/lib/components/atoms/image/image.component.mjs +3 -3
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +3 -3
- package/esm2022/lib/components/atoms/text/text.component.mjs +3 -3
- package/esm2022/lib/components/atoms/title/title.component.mjs +3 -3
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +3 -3
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +3 -3
- package/esm2022/lib/components/molecules/card/card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +3 -3
- package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +3 -3
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +3 -3
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +3 -3
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +3 -3
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +3 -3
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/link/link.component.mjs +3 -3
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +3 -3
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/pill/pill.component.mjs +3 -3
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +3 -3
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +3 -3
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +3 -3
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +3 -3
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +3 -3
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +3 -3
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +3 -3
- package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +209 -195
- package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +315 -309
- package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +105 -99
- package/esm2022/lib/components/organisms/article/article.component.mjs +3 -3
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +3 -3
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +3 -3
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +3 -3
- package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
- package/esm2022/lib/components/organisms/header/header.component.mjs +3 -3
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +3 -3
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +3 -3
- package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +217 -204
- package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +277 -271
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +497 -483
- package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +269 -263
- package/esm2022/lib/components/organisms/preferences-view/preferences-view.component.mjs +135 -130
- package/esm2022/lib/components/organisms/profile-view/profile-content.component.mjs +111 -105
- package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +241 -235
- package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +53 -48
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +3 -3
- package/esm2022/lib/components/templates/simple/simple.component.mjs +3 -3
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +2524 -2438
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/button/button.component.d.ts +6 -0
- package/lib/components/organisms/article/article.component.d.ts +1 -1
- package/lib/components/types.d.ts +12 -2
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/components/styles/variables.scss +5 -0
|
@@ -7,6 +7,7 @@ import { warningOutline, swapHorizontalOutline } from 'ionicons/icons';
|
|
|
7
7
|
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
8
8
|
import { CtaCardComponent } from '../../molecules/cta-card/cta-card.component';
|
|
9
9
|
import { DangerSectionComponent } from '../../molecules/danger-section/danger-section.component';
|
|
10
|
+
import { ContainerComponent } from '../../atoms/container/container.component';
|
|
10
11
|
import { DisplayComponent } from '../../atoms/display/display.component';
|
|
11
12
|
import { TextComponent } from '../../atoms/text/text.component';
|
|
12
13
|
import { TitleComponent } from '../../atoms/title/title.component';
|
|
@@ -724,295 +725,301 @@ export class OrganizationViewComponent {
|
|
|
724
725
|
}
|
|
725
726
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrganizationViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
726
727
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: OrganizationViewComponent, isStandalone: true, selector: "val-organization-view", inputs: { config: "config" }, ngImport: i0, template: `
|
|
727
|
-
<
|
|
728
|
-
<
|
|
729
|
-
<
|
|
730
|
-
|
|
728
|
+
<val-container [props]="{ size: 'md', padding: 'none' }">
|
|
729
|
+
<div class="page">
|
|
730
|
+
<header class="page-header">
|
|
731
|
+
<val-section-header [props]="switchOrgSectionProps()" (actionClick)="onHeaderAction($event)" />
|
|
732
|
+
</header>
|
|
731
733
|
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
734
|
+
@if (resolvedConfig().showInfo) {
|
|
735
|
+
<!-- Org Info -->
|
|
736
|
+
<section class="settings-section">
|
|
737
|
+
<div class="section-header-row">
|
|
738
|
+
<val-title
|
|
739
|
+
[props]="{
|
|
740
|
+
size: 'medium',
|
|
741
|
+
color: 'dark',
|
|
742
|
+
bold: true,
|
|
743
|
+
content: tt('infoTitle'),
|
|
744
|
+
}"
|
|
745
|
+
/>
|
|
746
|
+
@if (canEditOrg()) {
|
|
747
|
+
<val-button [props]="editButtonProps()" (click)="onEdit()" />
|
|
748
|
+
}
|
|
749
|
+
</div>
|
|
750
|
+
|
|
751
|
+
<div class="section-body">
|
|
752
|
+
@if (loading()) {
|
|
753
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 4 }" />
|
|
754
|
+
} @else if (orgErrorState()) {
|
|
755
|
+
<val-empty-state [props]="orgErrorState()!" />
|
|
756
|
+
} @else {
|
|
757
|
+
@if (org(); as o) {
|
|
758
|
+
<div class="org-info-card">
|
|
759
|
+
@if (o.logoUrl && !logoFailed()) {
|
|
760
|
+
<div class="org-info-logo">
|
|
761
|
+
<img class="org-logo-img" [src]="o.logoUrl" [alt]="o.name" (error)="logoFailed.set(true)" />
|
|
762
|
+
</div>
|
|
763
|
+
}
|
|
764
|
+
<div class="org-info-field">
|
|
765
|
+
<span class="org-info-label">{{ tt('infoName') }}</span>
|
|
766
|
+
<span class="org-info-value">{{ o.name }}</span>
|
|
767
|
+
</div>
|
|
768
|
+
<div class="org-info-field">
|
|
769
|
+
<span class="org-info-label">{{ tt('infoDescription') }}</span>
|
|
770
|
+
<span class="org-info-value org-info-value--muted">{{ o.description || '—' }}</span>
|
|
771
|
+
</div>
|
|
772
|
+
<div class="org-info-field">
|
|
773
|
+
<span class="org-info-label">{{ tt('infoPlan') }}</span>
|
|
774
|
+
<span class="plan-badge plan-badge--{{ o.plan }}">{{ planLabel() }}</span>
|
|
775
|
+
</div>
|
|
776
|
+
<div class="org-info-field">
|
|
777
|
+
<span class="org-info-label">{{ tt('infoType') }}</span>
|
|
778
|
+
<span class="org-info-value">{{ o.type }}</span>
|
|
779
|
+
</div>
|
|
780
|
+
</div>
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
</div>
|
|
784
|
+
</section>
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
@if (resolvedConfig().showMembers) {
|
|
788
|
+
<!-- Members -->
|
|
789
|
+
<section class="settings-section">
|
|
736
790
|
<val-title
|
|
737
791
|
[props]="{
|
|
738
792
|
size: 'medium',
|
|
739
793
|
color: 'dark',
|
|
740
794
|
bold: true,
|
|
741
|
-
content: tt('
|
|
795
|
+
content: tt('membersTitle'),
|
|
742
796
|
}"
|
|
743
797
|
/>
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
798
|
+
<div class="section-body">
|
|
799
|
+
@if (membersLoading()) {
|
|
800
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
801
|
+
} @else if (membersErrorState()) {
|
|
802
|
+
<val-empty-state [props]="membersErrorState()!" />
|
|
803
|
+
} @else if (members().length === 0) {
|
|
804
|
+
<val-text
|
|
805
|
+
[props]="{
|
|
806
|
+
content: tt('membersEmpty'),
|
|
807
|
+
size: 'medium',
|
|
808
|
+
color: 'dark',
|
|
809
|
+
bold: false,
|
|
810
|
+
}"
|
|
811
|
+
/>
|
|
812
|
+
} @else {
|
|
813
|
+
<div class="members-list">
|
|
814
|
+
@for (m of visibleMembers(); track m.userId) {
|
|
815
|
+
<val-member-card
|
|
816
|
+
[attr.data-testid]="'org-member-' + m.userId"
|
|
817
|
+
[props]="{
|
|
818
|
+
id: m.userId,
|
|
819
|
+
name: m.name,
|
|
820
|
+
handle: m.handle,
|
|
821
|
+
email: m.email,
|
|
822
|
+
avatarUrl: m.avatar,
|
|
823
|
+
roleLabel: m.roles[0] ? roleLabel(m.roles[0]) : '',
|
|
824
|
+
actionAriaLabel: tt('viewMemberCta'),
|
|
825
|
+
}"
|
|
826
|
+
(onAction)="onViewMember(m)"
|
|
827
|
+
/>
|
|
761
828
|
}
|
|
762
|
-
<div class="org-info-field">
|
|
763
|
-
<span class="org-info-label">{{ tt('infoName') }}</span>
|
|
764
|
-
<span class="org-info-value">{{ o.name }}</span>
|
|
765
|
-
</div>
|
|
766
|
-
<div class="org-info-field">
|
|
767
|
-
<span class="org-info-label">{{ tt('infoDescription') }}</span>
|
|
768
|
-
<span class="org-info-value org-info-value--muted">{{ o.description || '—' }}</span>
|
|
769
|
-
</div>
|
|
770
|
-
<div class="org-info-field">
|
|
771
|
-
<span class="org-info-label">{{ tt('infoPlan') }}</span>
|
|
772
|
-
<span class="plan-badge plan-badge--{{ o.plan }}">{{ planLabel() }}</span>
|
|
773
|
-
</div>
|
|
774
|
-
<div class="org-info-field">
|
|
775
|
-
<span class="org-info-label">{{ tt('infoType') }}</span>
|
|
776
|
-
<span class="org-info-value">{{ o.type }}</span>
|
|
777
|
-
</div>
|
|
778
829
|
</div>
|
|
830
|
+
@if (!showAllMembers() && members().length > 3) {
|
|
831
|
+
<button class="members-show-more" (click)="showAllMembers.set(true)">
|
|
832
|
+
{{ tt('membersShowMore') }} ({{ members().length - 3 }})
|
|
833
|
+
</button>
|
|
834
|
+
}
|
|
835
|
+
@if (showAllMembers() && membersNextToken()) {
|
|
836
|
+
<button class="members-show-more" [disabled]="loadingMoreMembers()" (click)="loadMoreMembers()">
|
|
837
|
+
{{ loadingMoreMembers() ? '…' : tt('membersShowMore') }}
|
|
838
|
+
</button>
|
|
839
|
+
}
|
|
779
840
|
}
|
|
780
|
-
|
|
781
|
-
</
|
|
782
|
-
|
|
783
|
-
}
|
|
841
|
+
</div>
|
|
842
|
+
</section>
|
|
843
|
+
}
|
|
784
844
|
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
@if (membersLoading()) {
|
|
798
|
-
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
799
|
-
} @else if (membersErrorState()) {
|
|
800
|
-
<val-empty-state [props]="membersErrorState()!" />
|
|
801
|
-
} @else if (members().length === 0) {
|
|
845
|
+
@if (resolvedConfig().showRoles) {
|
|
846
|
+
<!-- Roles y permisos: seccion explicativa, detalle en la ruta de permisos -->
|
|
847
|
+
<section class="settings-section">
|
|
848
|
+
<val-title
|
|
849
|
+
[props]="{
|
|
850
|
+
size: 'medium',
|
|
851
|
+
color: 'dark',
|
|
852
|
+
bold: true,
|
|
853
|
+
content: tt('rolesSectionTitle'),
|
|
854
|
+
}"
|
|
855
|
+
/>
|
|
856
|
+
<div class="section-body">
|
|
802
857
|
<val-text
|
|
803
858
|
[props]="{
|
|
804
|
-
content: tt('
|
|
859
|
+
content: tt('rolesHint'),
|
|
805
860
|
size: 'medium',
|
|
806
861
|
color: 'dark',
|
|
807
862
|
bold: false,
|
|
808
863
|
}"
|
|
809
864
|
/>
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
@for (m of visibleMembers(); track m.userId) {
|
|
813
|
-
<val-member-card
|
|
814
|
-
[attr.data-testid]="'org-member-' + m.userId"
|
|
815
|
-
[props]="{
|
|
816
|
-
id: m.userId,
|
|
817
|
-
name: m.name,
|
|
818
|
-
handle: m.handle,
|
|
819
|
-
email: m.email,
|
|
820
|
-
avatarUrl: m.avatar,
|
|
821
|
-
roleLabel: m.roles[0] ? roleLabel(m.roles[0]) : '',
|
|
822
|
-
actionAriaLabel: tt('viewMemberCta'),
|
|
823
|
-
}"
|
|
824
|
-
(onAction)="onViewMember(m)"
|
|
825
|
-
/>
|
|
826
|
-
}
|
|
865
|
+
<div class="row-actions">
|
|
866
|
+
<val-button [props]="viewPermissionsButtonProps()" (click)="onViewPermissions()" />
|
|
827
867
|
</div>
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
868
|
+
</div>
|
|
869
|
+
</section>
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
@if (resolvedConfig().showNewOrgCta) {
|
|
873
|
+
<!-- Nueva org CTA -->
|
|
874
|
+
<section class="settings-section">
|
|
875
|
+
<val-cta-card [props]="newOrgCtaProps()" (onAction)="onNewOrg()" />
|
|
876
|
+
</section>
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
@if (resolvedConfig().showInvite) {
|
|
880
|
+
<!-- Invite: solo admin+ (gating RBAC interno) -->
|
|
881
|
+
<section *valHasPermission="'users:*'" class="settings-section" data-testid="org-invite-section">
|
|
882
|
+
<div class="invite-cta">
|
|
883
|
+
<div class="invite-cta__text">
|
|
884
|
+
<val-title
|
|
885
|
+
[props]="{
|
|
886
|
+
size: 'medium',
|
|
887
|
+
color: 'dark',
|
|
888
|
+
bold: true,
|
|
889
|
+
content: tt('inviteCtaTitle'),
|
|
890
|
+
}"
|
|
891
|
+
/>
|
|
892
|
+
<val-text
|
|
893
|
+
[props]="{
|
|
894
|
+
size: 'medium',
|
|
895
|
+
color: 'dark',
|
|
896
|
+
bold: false,
|
|
897
|
+
content: tt('inviteCtaHint'),
|
|
898
|
+
}"
|
|
899
|
+
/>
|
|
900
|
+
</div>
|
|
901
|
+
<div class="invite-cta__actions">
|
|
902
|
+
<val-button [props]="openInviteButtonProps()" (click)="onOpenInvite()" />
|
|
903
|
+
<val-button [props]="openImportButtonProps()" (click)="onOpenImport()" />
|
|
904
|
+
</div>
|
|
905
|
+
</div>
|
|
906
|
+
</section>
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
@if (resolvedConfig().showApiKeys) {
|
|
910
|
+
<!-- API Keys: sección propia. Integraciones M2M (import de miembros, etc.). -->
|
|
911
|
+
<section *valHasPermission="'api-keys:read'" class="settings-section" data-testid="org-apikeys-section">
|
|
912
|
+
<div class="invite-cta">
|
|
913
|
+
<div class="invite-cta__text">
|
|
914
|
+
<val-title
|
|
915
|
+
[props]="{ size: 'medium', color: 'dark', bold: true, content: tt('apiKeysSectionTitle') }"
|
|
916
|
+
/>
|
|
917
|
+
<val-text [props]="{ size: 'medium', color: 'dark', bold: false, content: tt('apiKeysSectionHint') }" />
|
|
918
|
+
<button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
|
|
919
|
+
{{ tt('apiKeysMoreInfo') }}
|
|
836
920
|
</button>
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
921
|
+
</div>
|
|
922
|
+
<div class="invite-cta__actions">
|
|
923
|
+
<val-button [props]="openApiKeysButtonProps()" (click)="onOpenApiKeys()" />
|
|
924
|
+
</div>
|
|
925
|
+
</div>
|
|
926
|
+
</section>
|
|
927
|
+
}
|
|
842
928
|
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
<val-title
|
|
847
|
-
[props]="{
|
|
848
|
-
size: 'medium',
|
|
849
|
-
color: 'dark',
|
|
850
|
-
bold: true,
|
|
851
|
-
content: tt('rolesSectionTitle'),
|
|
852
|
-
}"
|
|
853
|
-
/>
|
|
854
|
-
<div class="section-body">
|
|
929
|
+
@if (resolvedConfig().showTransferOwnership && isOwner()) {
|
|
930
|
+
<!-- Transfer ownership: solo owner (gating RBAC interno) -->
|
|
931
|
+
<val-danger-section [props]="{ title: tt('transferTitle') }" data-testid="org-transfer-section">
|
|
855
932
|
<val-text
|
|
856
933
|
[props]="{
|
|
857
|
-
content: tt('
|
|
934
|
+
content: tt('transferHint'),
|
|
858
935
|
size: 'medium',
|
|
859
936
|
color: 'dark',
|
|
860
937
|
bold: false,
|
|
861
938
|
}"
|
|
862
939
|
/>
|
|
863
|
-
|
|
864
|
-
<
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
@if (resolvedConfig().showNewOrgCta) {
|
|
871
|
-
<!-- Nueva org CTA -->
|
|
872
|
-
<section class="settings-section">
|
|
873
|
-
<val-cta-card [props]="newOrgCtaProps()" (onAction)="onNewOrg()" />
|
|
874
|
-
</section>
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
@if (resolvedConfig().showInvite) {
|
|
878
|
-
<!-- Invite: solo admin+ (gating RBAC interno) -->
|
|
879
|
-
<section *valHasPermission="'users:*'" class="settings-section" data-testid="org-invite-section">
|
|
880
|
-
<div class="invite-cta">
|
|
881
|
-
<div class="invite-cta__text">
|
|
882
|
-
<val-title
|
|
883
|
-
[props]="{
|
|
884
|
-
size: 'medium',
|
|
885
|
-
color: 'dark',
|
|
886
|
-
bold: true,
|
|
887
|
-
content: tt('inviteCtaTitle'),
|
|
888
|
-
}"
|
|
889
|
-
/>
|
|
940
|
+
@if (transferableMembers().length > 0) {
|
|
941
|
+
<div class="row-actions">
|
|
942
|
+
<val-button [props]="transferButtonProps()" (click)="onOpenTransfer()" />
|
|
943
|
+
</div>
|
|
944
|
+
} @else {
|
|
890
945
|
<val-text
|
|
891
946
|
[props]="{
|
|
947
|
+
content: tt('membersEmpty'),
|
|
892
948
|
size: 'medium',
|
|
893
949
|
color: 'dark',
|
|
894
950
|
bold: false,
|
|
895
|
-
content: tt('inviteCtaHint'),
|
|
896
951
|
}"
|
|
897
952
|
/>
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
<val-button [props]="openImportButtonProps()" (click)="onOpenImport()" />
|
|
902
|
-
</div>
|
|
903
|
-
</div>
|
|
904
|
-
</section>
|
|
905
|
-
}
|
|
906
|
-
|
|
907
|
-
@if (resolvedConfig().showApiKeys) {
|
|
908
|
-
<!-- API Keys: sección propia. Integraciones M2M (import de miembros, etc.). -->
|
|
909
|
-
<section *valHasPermission="'api-keys:read'" class="settings-section" data-testid="org-apikeys-section">
|
|
910
|
-
<div class="invite-cta">
|
|
911
|
-
<div class="invite-cta__text">
|
|
912
|
-
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('apiKeysSectionTitle') }" />
|
|
913
|
-
<val-text [props]="{ size: 'medium', color: 'dark', bold: false, content: tt('apiKeysSectionHint') }" />
|
|
914
|
-
<button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
|
|
915
|
-
{{ tt('apiKeysMoreInfo') }}
|
|
916
|
-
</button>
|
|
917
|
-
</div>
|
|
918
|
-
<div class="invite-cta__actions">
|
|
919
|
-
<val-button [props]="openApiKeysButtonProps()" (click)="onOpenApiKeys()" />
|
|
920
|
-
</div>
|
|
921
|
-
</div>
|
|
922
|
-
</section>
|
|
923
|
-
}
|
|
953
|
+
}
|
|
954
|
+
</val-danger-section>
|
|
955
|
+
}
|
|
924
956
|
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
<val-text
|
|
929
|
-
[props]="{
|
|
930
|
-
content: tt('transferHint'),
|
|
931
|
-
size: 'medium',
|
|
932
|
-
color: 'dark',
|
|
933
|
-
bold: false,
|
|
934
|
-
}"
|
|
935
|
-
/>
|
|
936
|
-
@if (transferableMembers().length > 0) {
|
|
937
|
-
<div class="row-actions">
|
|
938
|
-
<val-button [props]="transferButtonProps()" (click)="onOpenTransfer()" />
|
|
939
|
-
</div>
|
|
940
|
-
} @else {
|
|
957
|
+
@if (resolvedConfig().showLeave) {
|
|
958
|
+
<!-- Leave org -->
|
|
959
|
+
<val-danger-section [props]="{ title: tt('leaveTitle') }">
|
|
941
960
|
<val-text
|
|
942
961
|
[props]="{
|
|
943
|
-
content: tt('
|
|
962
|
+
content: isOwner() ? tt('leaveOwnerHint') : tt('leaveHint'),
|
|
944
963
|
size: 'medium',
|
|
945
964
|
color: 'dark',
|
|
946
965
|
bold: false,
|
|
947
966
|
}"
|
|
948
967
|
/>
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
<!-- Leave org -->
|
|
955
|
-
<val-danger-section [props]="{ title: tt('leaveTitle') }">
|
|
956
|
-
<val-text
|
|
957
|
-
[props]="{
|
|
958
|
-
content: isOwner() ? tt('leaveOwnerHint') : tt('leaveHint'),
|
|
959
|
-
size: 'medium',
|
|
960
|
-
color: 'dark',
|
|
961
|
-
bold: false,
|
|
962
|
-
}"
|
|
963
|
-
/>
|
|
964
|
-
<div class="row-actions">
|
|
965
|
-
<val-button [props]="leaveButtonProps()" (click)="onLeave()" />
|
|
966
|
-
</div>
|
|
967
|
-
</val-danger-section>
|
|
968
|
-
}
|
|
968
|
+
<div class="row-actions">
|
|
969
|
+
<val-button [props]="leaveButtonProps()" (click)="onLeave()" />
|
|
970
|
+
</div>
|
|
971
|
+
</val-danger-section>
|
|
972
|
+
}
|
|
969
973
|
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
974
|
+
@if (resolvedConfig().showDeleteOrg && isOwner()) {
|
|
975
|
+
<!-- Delete org: solo owner, acción más destructiva -->
|
|
976
|
+
<val-danger-section [props]="{ title: tt('deleteTitle') }" data-testid="org-delete-section">
|
|
977
|
+
<val-text [props]="{ content: tt('deleteHint'), size: 'medium', color: 'dark', bold: false }" />
|
|
978
|
+
<div class="row-actions">
|
|
979
|
+
<val-button [props]="deleteButtonProps()" (click)="onDelete()" />
|
|
980
|
+
</div>
|
|
981
|
+
</val-danger-section>
|
|
982
|
+
}
|
|
979
983
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
</div>
|
|
992
|
-
<div class="rbac-debug__body">
|
|
993
|
-
<div class="rbac-debug__row">
|
|
994
|
-
<span class="rbac-debug__label">Roles</span>
|
|
995
|
-
<span class="rbac-debug__value">{{ auth.roles().join(', ') || '—' }}</span>
|
|
984
|
+
@if (isDebug) {
|
|
985
|
+
<section class="settings-section rbac-debug">
|
|
986
|
+
<div class="section-header-row">
|
|
987
|
+
<val-title
|
|
988
|
+
[props]="{
|
|
989
|
+
content: 'RBAC (live)',
|
|
990
|
+
size: 'small',
|
|
991
|
+
color: 'medium',
|
|
992
|
+
bold: false,
|
|
993
|
+
}"
|
|
994
|
+
/>
|
|
996
995
|
</div>
|
|
997
|
-
<div class="rbac-
|
|
998
|
-
<
|
|
999
|
-
|
|
996
|
+
<div class="rbac-debug__body">
|
|
997
|
+
<div class="rbac-debug__row">
|
|
998
|
+
<span class="rbac-debug__label">Roles</span>
|
|
999
|
+
<span class="rbac-debug__value">{{ auth.roles().join(', ') || '—' }}</span>
|
|
1000
|
+
</div>
|
|
1001
|
+
<div class="rbac-debug__row">
|
|
1002
|
+
<span class="rbac-debug__label">Permisos</span>
|
|
1003
|
+
<span class="rbac-debug__value rbac-debug__value--perms">{{
|
|
1004
|
+
auth.permissions().join(', ') || '—'
|
|
1005
|
+
}}</span>
|
|
1006
|
+
</div>
|
|
1000
1007
|
</div>
|
|
1001
|
-
</
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
</
|
|
1015
|
-
`, isInline: true, styles: [".page{padding:16px 0
|
|
1008
|
+
</section>
|
|
1009
|
+
}
|
|
1010
|
+
<val-permissions-modal
|
|
1011
|
+
[isOpen]="permissionsOpen()"
|
|
1012
|
+
[config]="{ i18nNamespace: resolvedConfig().i18nNamespace }"
|
|
1013
|
+
(dismissed)="permissionsOpen.set(false)"
|
|
1014
|
+
/>
|
|
1015
|
+
<val-create-org-modal
|
|
1016
|
+
[isOpen]="createOrgModalOpen()"
|
|
1017
|
+
(dismissed)="createOrgModalOpen.set(false)"
|
|
1018
|
+
(created)="onOrgCreated($event)"
|
|
1019
|
+
/>
|
|
1020
|
+
</div>
|
|
1021
|
+
</val-container>
|
|
1022
|
+
`, isInline: true, styles: [".page{padding:16px 0}.org-more-info-link{background:none;border:none;padding:4px 0;margin-top:4px;font-size:13px;font-weight:600;color:var(--ion-color-primary, #7026df);cursor:pointer;text-align:left}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;gap:8px}.invite-cta{display:flex;flex-direction:column;gap:16px}.invite-cta__text{display:flex;flex-direction:column;gap:4px}.invite-cta__actions{display:flex;gap:12px;flex-wrap:wrap}.org-info-card{border-radius:14px;background:var(--ion-color-light, #f4f5f8);overflow:hidden}.org-info-logo{display:flex;justify-content:center;padding:8px 0 16px}.org-logo-img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:2px solid var(--ion-color-light)}:host-context(body.dark) .org-info-card,:host-context(html.ion-palette-dark) .org-info-card,:host-context([data-theme=\"dark\"]) .org-info-card{background:#ffffff0d}.org-info-field{padding:12px 16px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--val-border-color, rgba(0, 0, 0, .06))}.org-info-field:last-child{border-bottom:none}.org-info-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.org-info-value{font-size:.95rem;font-weight:500;color:var(--ion-color-dark)}.org-info-value--muted{color:var(--ion-color-medium);font-weight:400}.plan-badge{display:inline-block;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:20px;width:fit-content}.plan-badge--free{background:var(--ion-color-light-shade, #d7d8da);color:var(--ion-color-dark)}.plan-badge--pro{background:var(--ion-color-primary);color:#fff}.plan-badge--enterprise{background:#f5c542;color:#222}.members-list{display:flex;flex-direction:column;gap:8px}.members-show-more{background:none;border:none;color:var(--ion-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 0}.rbac-debug{opacity:.7}.rbac-debug__body{display:flex;flex-direction:column;gap:6px;font-family:monospace;font-size:.78rem}.rbac-debug__row{display:flex;gap:8px;align-items:flex-start}.rbac-debug__label{color:var(--ion-color-medium);min-width:72px;flex-shrink:0}.rbac-debug__value{color:var(--ion-color-dark);word-break:break-all}.rbac-debug__value--perms{color:var(--ion-color-medium)}val-danger-section{margin:0 -4px}.settings-section+val-danger-section,val-danger-section+val-danger-section,val-danger-section+.settings-section{margin-top:12px}\n"], dependencies: [{ kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: DangerSectionComponent, selector: "val-danger-section", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "directive", type: HasPermissionDirective, selector: "[valHasPermission]", inputs: ["valHasPermission"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: MemberCardComponent, selector: "val-member-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: PermissionsModalComponent, selector: "val-permissions-modal", inputs: ["isOpen", "config"], outputs: ["dismissed"] }, { kind: "component", type: SectionHeaderComponent, selector: "val-section-header", inputs: ["props"], outputs: ["actionClick"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }] }); }
|
|
1016
1023
|
}
|
|
1017
1024
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrganizationViewComponent, decorators: [{
|
|
1018
1025
|
type: Component,
|
|
@@ -1034,297 +1041,304 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1034
1041
|
OrgInfoSheetComponent,
|
|
1035
1042
|
SectionHeaderComponent,
|
|
1036
1043
|
SwitchOrgModalComponent,
|
|
1044
|
+
ContainerComponent,
|
|
1037
1045
|
], template: `
|
|
1038
|
-
<
|
|
1039
|
-
<
|
|
1040
|
-
<
|
|
1041
|
-
|
|
1046
|
+
<val-container [props]="{ size: 'md', padding: 'none' }">
|
|
1047
|
+
<div class="page">
|
|
1048
|
+
<header class="page-header">
|
|
1049
|
+
<val-section-header [props]="switchOrgSectionProps()" (actionClick)="onHeaderAction($event)" />
|
|
1050
|
+
</header>
|
|
1042
1051
|
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1052
|
+
@if (resolvedConfig().showInfo) {
|
|
1053
|
+
<!-- Org Info -->
|
|
1054
|
+
<section class="settings-section">
|
|
1055
|
+
<div class="section-header-row">
|
|
1056
|
+
<val-title
|
|
1057
|
+
[props]="{
|
|
1058
|
+
size: 'medium',
|
|
1059
|
+
color: 'dark',
|
|
1060
|
+
bold: true,
|
|
1061
|
+
content: tt('infoTitle'),
|
|
1062
|
+
}"
|
|
1063
|
+
/>
|
|
1064
|
+
@if (canEditOrg()) {
|
|
1065
|
+
<val-button [props]="editButtonProps()" (click)="onEdit()" />
|
|
1066
|
+
}
|
|
1067
|
+
</div>
|
|
1068
|
+
|
|
1069
|
+
<div class="section-body">
|
|
1070
|
+
@if (loading()) {
|
|
1071
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 4 }" />
|
|
1072
|
+
} @else if (orgErrorState()) {
|
|
1073
|
+
<val-empty-state [props]="orgErrorState()!" />
|
|
1074
|
+
} @else {
|
|
1075
|
+
@if (org(); as o) {
|
|
1076
|
+
<div class="org-info-card">
|
|
1077
|
+
@if (o.logoUrl && !logoFailed()) {
|
|
1078
|
+
<div class="org-info-logo">
|
|
1079
|
+
<img class="org-logo-img" [src]="o.logoUrl" [alt]="o.name" (error)="logoFailed.set(true)" />
|
|
1080
|
+
</div>
|
|
1081
|
+
}
|
|
1082
|
+
<div class="org-info-field">
|
|
1083
|
+
<span class="org-info-label">{{ tt('infoName') }}</span>
|
|
1084
|
+
<span class="org-info-value">{{ o.name }}</span>
|
|
1085
|
+
</div>
|
|
1086
|
+
<div class="org-info-field">
|
|
1087
|
+
<span class="org-info-label">{{ tt('infoDescription') }}</span>
|
|
1088
|
+
<span class="org-info-value org-info-value--muted">{{ o.description || '—' }}</span>
|
|
1089
|
+
</div>
|
|
1090
|
+
<div class="org-info-field">
|
|
1091
|
+
<span class="org-info-label">{{ tt('infoPlan') }}</span>
|
|
1092
|
+
<span class="plan-badge plan-badge--{{ o.plan }}">{{ planLabel() }}</span>
|
|
1093
|
+
</div>
|
|
1094
|
+
<div class="org-info-field">
|
|
1095
|
+
<span class="org-info-label">{{ tt('infoType') }}</span>
|
|
1096
|
+
<span class="org-info-value">{{ o.type }}</span>
|
|
1097
|
+
</div>
|
|
1098
|
+
</div>
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
</div>
|
|
1102
|
+
</section>
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
@if (resolvedConfig().showMembers) {
|
|
1106
|
+
<!-- Members -->
|
|
1107
|
+
<section class="settings-section">
|
|
1047
1108
|
<val-title
|
|
1048
1109
|
[props]="{
|
|
1049
1110
|
size: 'medium',
|
|
1050
1111
|
color: 'dark',
|
|
1051
1112
|
bold: true,
|
|
1052
|
-
content: tt('
|
|
1113
|
+
content: tt('membersTitle'),
|
|
1053
1114
|
}"
|
|
1054
1115
|
/>
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1116
|
+
<div class="section-body">
|
|
1117
|
+
@if (membersLoading()) {
|
|
1118
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
1119
|
+
} @else if (membersErrorState()) {
|
|
1120
|
+
<val-empty-state [props]="membersErrorState()!" />
|
|
1121
|
+
} @else if (members().length === 0) {
|
|
1122
|
+
<val-text
|
|
1123
|
+
[props]="{
|
|
1124
|
+
content: tt('membersEmpty'),
|
|
1125
|
+
size: 'medium',
|
|
1126
|
+
color: 'dark',
|
|
1127
|
+
bold: false,
|
|
1128
|
+
}"
|
|
1129
|
+
/>
|
|
1130
|
+
} @else {
|
|
1131
|
+
<div class="members-list">
|
|
1132
|
+
@for (m of visibleMembers(); track m.userId) {
|
|
1133
|
+
<val-member-card
|
|
1134
|
+
[attr.data-testid]="'org-member-' + m.userId"
|
|
1135
|
+
[props]="{
|
|
1136
|
+
id: m.userId,
|
|
1137
|
+
name: m.name,
|
|
1138
|
+
handle: m.handle,
|
|
1139
|
+
email: m.email,
|
|
1140
|
+
avatarUrl: m.avatar,
|
|
1141
|
+
roleLabel: m.roles[0] ? roleLabel(m.roles[0]) : '',
|
|
1142
|
+
actionAriaLabel: tt('viewMemberCta'),
|
|
1143
|
+
}"
|
|
1144
|
+
(onAction)="onViewMember(m)"
|
|
1145
|
+
/>
|
|
1072
1146
|
}
|
|
1073
|
-
<div class="org-info-field">
|
|
1074
|
-
<span class="org-info-label">{{ tt('infoName') }}</span>
|
|
1075
|
-
<span class="org-info-value">{{ o.name }}</span>
|
|
1076
|
-
</div>
|
|
1077
|
-
<div class="org-info-field">
|
|
1078
|
-
<span class="org-info-label">{{ tt('infoDescription') }}</span>
|
|
1079
|
-
<span class="org-info-value org-info-value--muted">{{ o.description || '—' }}</span>
|
|
1080
|
-
</div>
|
|
1081
|
-
<div class="org-info-field">
|
|
1082
|
-
<span class="org-info-label">{{ tt('infoPlan') }}</span>
|
|
1083
|
-
<span class="plan-badge plan-badge--{{ o.plan }}">{{ planLabel() }}</span>
|
|
1084
|
-
</div>
|
|
1085
|
-
<div class="org-info-field">
|
|
1086
|
-
<span class="org-info-label">{{ tt('infoType') }}</span>
|
|
1087
|
-
<span class="org-info-value">{{ o.type }}</span>
|
|
1088
|
-
</div>
|
|
1089
1147
|
</div>
|
|
1148
|
+
@if (!showAllMembers() && members().length > 3) {
|
|
1149
|
+
<button class="members-show-more" (click)="showAllMembers.set(true)">
|
|
1150
|
+
{{ tt('membersShowMore') }} ({{ members().length - 3 }})
|
|
1151
|
+
</button>
|
|
1152
|
+
}
|
|
1153
|
+
@if (showAllMembers() && membersNextToken()) {
|
|
1154
|
+
<button class="members-show-more" [disabled]="loadingMoreMembers()" (click)="loadMoreMembers()">
|
|
1155
|
+
{{ loadingMoreMembers() ? '…' : tt('membersShowMore') }}
|
|
1156
|
+
</button>
|
|
1157
|
+
}
|
|
1090
1158
|
}
|
|
1091
|
-
|
|
1092
|
-
</
|
|
1093
|
-
|
|
1094
|
-
}
|
|
1159
|
+
</div>
|
|
1160
|
+
</section>
|
|
1161
|
+
}
|
|
1095
1162
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
@if (membersLoading()) {
|
|
1109
|
-
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
1110
|
-
} @else if (membersErrorState()) {
|
|
1111
|
-
<val-empty-state [props]="membersErrorState()!" />
|
|
1112
|
-
} @else if (members().length === 0) {
|
|
1163
|
+
@if (resolvedConfig().showRoles) {
|
|
1164
|
+
<!-- Roles y permisos: seccion explicativa, detalle en la ruta de permisos -->
|
|
1165
|
+
<section class="settings-section">
|
|
1166
|
+
<val-title
|
|
1167
|
+
[props]="{
|
|
1168
|
+
size: 'medium',
|
|
1169
|
+
color: 'dark',
|
|
1170
|
+
bold: true,
|
|
1171
|
+
content: tt('rolesSectionTitle'),
|
|
1172
|
+
}"
|
|
1173
|
+
/>
|
|
1174
|
+
<div class="section-body">
|
|
1113
1175
|
<val-text
|
|
1114
1176
|
[props]="{
|
|
1115
|
-
content: tt('
|
|
1177
|
+
content: tt('rolesHint'),
|
|
1116
1178
|
size: 'medium',
|
|
1117
1179
|
color: 'dark',
|
|
1118
1180
|
bold: false,
|
|
1119
1181
|
}"
|
|
1120
1182
|
/>
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
@for (m of visibleMembers(); track m.userId) {
|
|
1124
|
-
<val-member-card
|
|
1125
|
-
[attr.data-testid]="'org-member-' + m.userId"
|
|
1126
|
-
[props]="{
|
|
1127
|
-
id: m.userId,
|
|
1128
|
-
name: m.name,
|
|
1129
|
-
handle: m.handle,
|
|
1130
|
-
email: m.email,
|
|
1131
|
-
avatarUrl: m.avatar,
|
|
1132
|
-
roleLabel: m.roles[0] ? roleLabel(m.roles[0]) : '',
|
|
1133
|
-
actionAriaLabel: tt('viewMemberCta'),
|
|
1134
|
-
}"
|
|
1135
|
-
(onAction)="onViewMember(m)"
|
|
1136
|
-
/>
|
|
1137
|
-
}
|
|
1183
|
+
<div class="row-actions">
|
|
1184
|
+
<val-button [props]="viewPermissionsButtonProps()" (click)="onViewPermissions()" />
|
|
1138
1185
|
</div>
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1186
|
+
</div>
|
|
1187
|
+
</section>
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
@if (resolvedConfig().showNewOrgCta) {
|
|
1191
|
+
<!-- Nueva org CTA -->
|
|
1192
|
+
<section class="settings-section">
|
|
1193
|
+
<val-cta-card [props]="newOrgCtaProps()" (onAction)="onNewOrg()" />
|
|
1194
|
+
</section>
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
@if (resolvedConfig().showInvite) {
|
|
1198
|
+
<!-- Invite: solo admin+ (gating RBAC interno) -->
|
|
1199
|
+
<section *valHasPermission="'users:*'" class="settings-section" data-testid="org-invite-section">
|
|
1200
|
+
<div class="invite-cta">
|
|
1201
|
+
<div class="invite-cta__text">
|
|
1202
|
+
<val-title
|
|
1203
|
+
[props]="{
|
|
1204
|
+
size: 'medium',
|
|
1205
|
+
color: 'dark',
|
|
1206
|
+
bold: true,
|
|
1207
|
+
content: tt('inviteCtaTitle'),
|
|
1208
|
+
}"
|
|
1209
|
+
/>
|
|
1210
|
+
<val-text
|
|
1211
|
+
[props]="{
|
|
1212
|
+
size: 'medium',
|
|
1213
|
+
color: 'dark',
|
|
1214
|
+
bold: false,
|
|
1215
|
+
content: tt('inviteCtaHint'),
|
|
1216
|
+
}"
|
|
1217
|
+
/>
|
|
1218
|
+
</div>
|
|
1219
|
+
<div class="invite-cta__actions">
|
|
1220
|
+
<val-button [props]="openInviteButtonProps()" (click)="onOpenInvite()" />
|
|
1221
|
+
<val-button [props]="openImportButtonProps()" (click)="onOpenImport()" />
|
|
1222
|
+
</div>
|
|
1223
|
+
</div>
|
|
1224
|
+
</section>
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
@if (resolvedConfig().showApiKeys) {
|
|
1228
|
+
<!-- API Keys: sección propia. Integraciones M2M (import de miembros, etc.). -->
|
|
1229
|
+
<section *valHasPermission="'api-keys:read'" class="settings-section" data-testid="org-apikeys-section">
|
|
1230
|
+
<div class="invite-cta">
|
|
1231
|
+
<div class="invite-cta__text">
|
|
1232
|
+
<val-title
|
|
1233
|
+
[props]="{ size: 'medium', color: 'dark', bold: true, content: tt('apiKeysSectionTitle') }"
|
|
1234
|
+
/>
|
|
1235
|
+
<val-text [props]="{ size: 'medium', color: 'dark', bold: false, content: tt('apiKeysSectionHint') }" />
|
|
1236
|
+
<button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
|
|
1237
|
+
{{ tt('apiKeysMoreInfo') }}
|
|
1147
1238
|
</button>
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1239
|
+
</div>
|
|
1240
|
+
<div class="invite-cta__actions">
|
|
1241
|
+
<val-button [props]="openApiKeysButtonProps()" (click)="onOpenApiKeys()" />
|
|
1242
|
+
</div>
|
|
1243
|
+
</div>
|
|
1244
|
+
</section>
|
|
1245
|
+
}
|
|
1153
1246
|
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
<val-title
|
|
1158
|
-
[props]="{
|
|
1159
|
-
size: 'medium',
|
|
1160
|
-
color: 'dark',
|
|
1161
|
-
bold: true,
|
|
1162
|
-
content: tt('rolesSectionTitle'),
|
|
1163
|
-
}"
|
|
1164
|
-
/>
|
|
1165
|
-
<div class="section-body">
|
|
1247
|
+
@if (resolvedConfig().showTransferOwnership && isOwner()) {
|
|
1248
|
+
<!-- Transfer ownership: solo owner (gating RBAC interno) -->
|
|
1249
|
+
<val-danger-section [props]="{ title: tt('transferTitle') }" data-testid="org-transfer-section">
|
|
1166
1250
|
<val-text
|
|
1167
1251
|
[props]="{
|
|
1168
|
-
content: tt('
|
|
1252
|
+
content: tt('transferHint'),
|
|
1169
1253
|
size: 'medium',
|
|
1170
1254
|
color: 'dark',
|
|
1171
1255
|
bold: false,
|
|
1172
1256
|
}"
|
|
1173
1257
|
/>
|
|
1174
|
-
|
|
1175
|
-
<
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
@if (resolvedConfig().showNewOrgCta) {
|
|
1182
|
-
<!-- Nueva org CTA -->
|
|
1183
|
-
<section class="settings-section">
|
|
1184
|
-
<val-cta-card [props]="newOrgCtaProps()" (onAction)="onNewOrg()" />
|
|
1185
|
-
</section>
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
@if (resolvedConfig().showInvite) {
|
|
1189
|
-
<!-- Invite: solo admin+ (gating RBAC interno) -->
|
|
1190
|
-
<section *valHasPermission="'users:*'" class="settings-section" data-testid="org-invite-section">
|
|
1191
|
-
<div class="invite-cta">
|
|
1192
|
-
<div class="invite-cta__text">
|
|
1193
|
-
<val-title
|
|
1194
|
-
[props]="{
|
|
1195
|
-
size: 'medium',
|
|
1196
|
-
color: 'dark',
|
|
1197
|
-
bold: true,
|
|
1198
|
-
content: tt('inviteCtaTitle'),
|
|
1199
|
-
}"
|
|
1200
|
-
/>
|
|
1258
|
+
@if (transferableMembers().length > 0) {
|
|
1259
|
+
<div class="row-actions">
|
|
1260
|
+
<val-button [props]="transferButtonProps()" (click)="onOpenTransfer()" />
|
|
1261
|
+
</div>
|
|
1262
|
+
} @else {
|
|
1201
1263
|
<val-text
|
|
1202
1264
|
[props]="{
|
|
1265
|
+
content: tt('membersEmpty'),
|
|
1203
1266
|
size: 'medium',
|
|
1204
1267
|
color: 'dark',
|
|
1205
1268
|
bold: false,
|
|
1206
|
-
content: tt('inviteCtaHint'),
|
|
1207
1269
|
}"
|
|
1208
1270
|
/>
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
<val-button [props]="openImportButtonProps()" (click)="onOpenImport()" />
|
|
1213
|
-
</div>
|
|
1214
|
-
</div>
|
|
1215
|
-
</section>
|
|
1216
|
-
}
|
|
1217
|
-
|
|
1218
|
-
@if (resolvedConfig().showApiKeys) {
|
|
1219
|
-
<!-- API Keys: sección propia. Integraciones M2M (import de miembros, etc.). -->
|
|
1220
|
-
<section *valHasPermission="'api-keys:read'" class="settings-section" data-testid="org-apikeys-section">
|
|
1221
|
-
<div class="invite-cta">
|
|
1222
|
-
<div class="invite-cta__text">
|
|
1223
|
-
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('apiKeysSectionTitle') }" />
|
|
1224
|
-
<val-text [props]="{ size: 'medium', color: 'dark', bold: false, content: tt('apiKeysSectionHint') }" />
|
|
1225
|
-
<button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
|
|
1226
|
-
{{ tt('apiKeysMoreInfo') }}
|
|
1227
|
-
</button>
|
|
1228
|
-
</div>
|
|
1229
|
-
<div class="invite-cta__actions">
|
|
1230
|
-
<val-button [props]="openApiKeysButtonProps()" (click)="onOpenApiKeys()" />
|
|
1231
|
-
</div>
|
|
1232
|
-
</div>
|
|
1233
|
-
</section>
|
|
1234
|
-
}
|
|
1271
|
+
}
|
|
1272
|
+
</val-danger-section>
|
|
1273
|
+
}
|
|
1235
1274
|
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
<val-text
|
|
1240
|
-
[props]="{
|
|
1241
|
-
content: tt('transferHint'),
|
|
1242
|
-
size: 'medium',
|
|
1243
|
-
color: 'dark',
|
|
1244
|
-
bold: false,
|
|
1245
|
-
}"
|
|
1246
|
-
/>
|
|
1247
|
-
@if (transferableMembers().length > 0) {
|
|
1248
|
-
<div class="row-actions">
|
|
1249
|
-
<val-button [props]="transferButtonProps()" (click)="onOpenTransfer()" />
|
|
1250
|
-
</div>
|
|
1251
|
-
} @else {
|
|
1275
|
+
@if (resolvedConfig().showLeave) {
|
|
1276
|
+
<!-- Leave org -->
|
|
1277
|
+
<val-danger-section [props]="{ title: tt('leaveTitle') }">
|
|
1252
1278
|
<val-text
|
|
1253
1279
|
[props]="{
|
|
1254
|
-
content: tt('
|
|
1280
|
+
content: isOwner() ? tt('leaveOwnerHint') : tt('leaveHint'),
|
|
1255
1281
|
size: 'medium',
|
|
1256
1282
|
color: 'dark',
|
|
1257
1283
|
bold: false,
|
|
1258
1284
|
}"
|
|
1259
1285
|
/>
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
<!-- Leave org -->
|
|
1266
|
-
<val-danger-section [props]="{ title: tt('leaveTitle') }">
|
|
1267
|
-
<val-text
|
|
1268
|
-
[props]="{
|
|
1269
|
-
content: isOwner() ? tt('leaveOwnerHint') : tt('leaveHint'),
|
|
1270
|
-
size: 'medium',
|
|
1271
|
-
color: 'dark',
|
|
1272
|
-
bold: false,
|
|
1273
|
-
}"
|
|
1274
|
-
/>
|
|
1275
|
-
<div class="row-actions">
|
|
1276
|
-
<val-button [props]="leaveButtonProps()" (click)="onLeave()" />
|
|
1277
|
-
</div>
|
|
1278
|
-
</val-danger-section>
|
|
1279
|
-
}
|
|
1286
|
+
<div class="row-actions">
|
|
1287
|
+
<val-button [props]="leaveButtonProps()" (click)="onLeave()" />
|
|
1288
|
+
</div>
|
|
1289
|
+
</val-danger-section>
|
|
1290
|
+
}
|
|
1280
1291
|
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1292
|
+
@if (resolvedConfig().showDeleteOrg && isOwner()) {
|
|
1293
|
+
<!-- Delete org: solo owner, acción más destructiva -->
|
|
1294
|
+
<val-danger-section [props]="{ title: tt('deleteTitle') }" data-testid="org-delete-section">
|
|
1295
|
+
<val-text [props]="{ content: tt('deleteHint'), size: 'medium', color: 'dark', bold: false }" />
|
|
1296
|
+
<div class="row-actions">
|
|
1297
|
+
<val-button [props]="deleteButtonProps()" (click)="onDelete()" />
|
|
1298
|
+
</div>
|
|
1299
|
+
</val-danger-section>
|
|
1300
|
+
}
|
|
1290
1301
|
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
</div>
|
|
1303
|
-
<div class="rbac-debug__body">
|
|
1304
|
-
<div class="rbac-debug__row">
|
|
1305
|
-
<span class="rbac-debug__label">Roles</span>
|
|
1306
|
-
<span class="rbac-debug__value">{{ auth.roles().join(', ') || '—' }}</span>
|
|
1302
|
+
@if (isDebug) {
|
|
1303
|
+
<section class="settings-section rbac-debug">
|
|
1304
|
+
<div class="section-header-row">
|
|
1305
|
+
<val-title
|
|
1306
|
+
[props]="{
|
|
1307
|
+
content: 'RBAC (live)',
|
|
1308
|
+
size: 'small',
|
|
1309
|
+
color: 'medium',
|
|
1310
|
+
bold: false,
|
|
1311
|
+
}"
|
|
1312
|
+
/>
|
|
1307
1313
|
</div>
|
|
1308
|
-
<div class="rbac-
|
|
1309
|
-
<
|
|
1310
|
-
|
|
1314
|
+
<div class="rbac-debug__body">
|
|
1315
|
+
<div class="rbac-debug__row">
|
|
1316
|
+
<span class="rbac-debug__label">Roles</span>
|
|
1317
|
+
<span class="rbac-debug__value">{{ auth.roles().join(', ') || '—' }}</span>
|
|
1318
|
+
</div>
|
|
1319
|
+
<div class="rbac-debug__row">
|
|
1320
|
+
<span class="rbac-debug__label">Permisos</span>
|
|
1321
|
+
<span class="rbac-debug__value rbac-debug__value--perms">{{
|
|
1322
|
+
auth.permissions().join(', ') || '—'
|
|
1323
|
+
}}</span>
|
|
1324
|
+
</div>
|
|
1311
1325
|
</div>
|
|
1312
|
-
</
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
</
|
|
1326
|
-
`, styles: [".page{padding:16px 0
|
|
1326
|
+
</section>
|
|
1327
|
+
}
|
|
1328
|
+
<val-permissions-modal
|
|
1329
|
+
[isOpen]="permissionsOpen()"
|
|
1330
|
+
[config]="{ i18nNamespace: resolvedConfig().i18nNamespace }"
|
|
1331
|
+
(dismissed)="permissionsOpen.set(false)"
|
|
1332
|
+
/>
|
|
1333
|
+
<val-create-org-modal
|
|
1334
|
+
[isOpen]="createOrgModalOpen()"
|
|
1335
|
+
(dismissed)="createOrgModalOpen.set(false)"
|
|
1336
|
+
(created)="onOrgCreated($event)"
|
|
1337
|
+
/>
|
|
1338
|
+
</div>
|
|
1339
|
+
</val-container>
|
|
1340
|
+
`, styles: [".page{padding:16px 0}.org-more-info-link{background:none;border:none;padding:4px 0;margin-top:4px;font-size:13px;font-weight:600;color:var(--ion-color-primary, #7026df);cursor:pointer;text-align:left}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;gap:8px}.invite-cta{display:flex;flex-direction:column;gap:16px}.invite-cta__text{display:flex;flex-direction:column;gap:4px}.invite-cta__actions{display:flex;gap:12px;flex-wrap:wrap}.org-info-card{border-radius:14px;background:var(--ion-color-light, #f4f5f8);overflow:hidden}.org-info-logo{display:flex;justify-content:center;padding:8px 0 16px}.org-logo-img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:2px solid var(--ion-color-light)}:host-context(body.dark) .org-info-card,:host-context(html.ion-palette-dark) .org-info-card,:host-context([data-theme=\"dark\"]) .org-info-card{background:#ffffff0d}.org-info-field{padding:12px 16px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--val-border-color, rgba(0, 0, 0, .06))}.org-info-field:last-child{border-bottom:none}.org-info-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.org-info-value{font-size:.95rem;font-weight:500;color:var(--ion-color-dark)}.org-info-value--muted{color:var(--ion-color-medium);font-weight:400}.plan-badge{display:inline-block;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:20px;width:fit-content}.plan-badge--free{background:var(--ion-color-light-shade, #d7d8da);color:var(--ion-color-dark)}.plan-badge--pro{background:var(--ion-color-primary);color:#fff}.plan-badge--enterprise{background:#f5c542;color:#222}.members-list{display:flex;flex-direction:column;gap:8px}.members-show-more{background:none;border:none;color:var(--ion-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 0}.rbac-debug{opacity:.7}.rbac-debug__body{display:flex;flex-direction:column;gap:6px;font-family:monospace;font-size:.78rem}.rbac-debug__row{display:flex;gap:8px;align-items:flex-start}.rbac-debug__label{color:var(--ion-color-medium);min-width:72px;flex-shrink:0}.rbac-debug__value{color:var(--ion-color-dark);word-break:break-all}.rbac-debug__value--perms{color:var(--ion-color-medium)}val-danger-section{margin:0 -4px}.settings-section+val-danger-section,val-danger-section+val-danger-section,val-danger-section+.settings-section{margin-top:12px}\n"] }]
|
|
1327
1341
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
1328
1342
|
type: Input
|
|
1329
1343
|
}] } });
|
|
1330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmdhbml6YXRpb24tdmlldy9vcmdhbml6YXRpb24tdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUV4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FB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QUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaVNUO3dEQXNOUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5wdXQsIGlzRGV2TW9kZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmlyZXN0b3JlLCBkb2MsIGdldERvYyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgd2FybmluZ091dGxpbmUsIHN3YXBIb3Jpem9udGFsT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3RhQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jdGEtY2FyZC9jdGEtY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFuZ2VyU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYW5nZXItc2VjdGlvbi9kYW5nZXItc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yU3RhdGVQcm9wcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9mYWN0b3J5JztcbmltcG9ydCB7IE1lbWJlckNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbWVtYmVyLWNhcmQvbWVtYmVyLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFNrZWxldG9uTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2tlbGV0b24tbGF5b3V0L3NrZWxldG9uLWxheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNlY3Rpb25IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VjdGlvbi1oZWFkZXIvc2VjdGlvbi1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNlY3Rpb25IZWFkZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWN0aW9uLWhlYWRlci90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2J1dHRvbi1ncm91cC90eXBlcyc7XG5cbmltcG9ydCB7IEhhc1Blcm1pc3Npb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2hhcy1wZXJtaXNzaW9uLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnU3dpdGNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvb3JnLXN3aXRjaC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBpbnRlcnByZXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy9pbnRlcnByZXQtZXJyb3InO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvb3JnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgT3JnTWVtYmVyLFxuICBPcmdSb2xlLFxuICBPcmdhbml6YXRpb24sXG4gIHJlc29sdmVSb2xlTGFiZWxGcm9tTGlzdCxcbiAgU1lTVEVNX1JPTEVfREVGQVVMVFMsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5pbXBvcnQgeyBjb25uZWN0UGFnZVJlZnJlc2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDcmVhdGVPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1vcmctbW9kYWwvY3JlYXRlLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdE9yZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vZWRpdC1vcmctbW9kYWwvZWRpdC1vcmctbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEludml0ZU1lbWJlck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vaW52aXRlLW1lbWJlci1tb2RhbC9pbnZpdGUtbWVtYmVyLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW1iZXJEZXRhaWxNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21lbWJlci1kZXRhaWwtbW9kYWwvbWVtYmVyLWRldGFpbC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVtYmVyRGV0YWlsIH0gZnJvbSAnLi4vbWVtYmVyLWRldGFpbC1tb2RhbC90eXBlcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vcGVybWlzc2lvbnMtdmlldy9wZXJtaXNzaW9ucy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVtYmVyLWltcG9ydC1tb2RhbC9tZW1iZXItaW1wb3J0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdJbmZvU2hlZXRDb21wb25lbnQgfSBmcm9tICcuLi9vcmctaW5mby1zaGVldC9vcmctaW5mby1zaGVldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3dpdGNoT3JnTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zd2l0Y2gtb3JnLW1vZGFsL3N3aXRjaC1vcmctbW9kYWwuY29tcG9uZW50JztcblxuaW1wb3J0IHsgT3JnYW5pemF0aW9uVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgT1JHQU5JWkFUSU9OX1ZJRVdfSTE4TiB9IGZyb20gJy4vb3JnYW5pemF0aW9uLXZpZXcuaTE4bic7XG5cbmFkZEljb25zKHsgd2FybmluZ091dGxpbmUsIHN3YXBIb3Jpem9udGFsT3V0bGluZSB9KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuT3JnYW5pemF0aW9uJztcbmNvbnN0IERFRkFVTFRfVklFV19QRVJNSVNTSU9OU19ST1VURSA9ICcvYXBwL3NldHRpbmdzL3Blcm1pc3Npb25zJztcbmNvbnN0IERFRkFVTFRfQVBJX0tFWVNfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9hcGkta2V5cyc7XG5jb25zdCBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFID0gJy9hcHAvc2V0dGluZ3MvYWNjb3VudCc7XG5cbi8qKlxuICogYHZhbC1vcmdhbml6YXRpb24tdmlld2Ag4oCUIHZpc3RhIEdlc3Rpw7NuIGRlIG9yZ2FuaXphY2nDs24gZnVsbC1mZWF0dXJlXG4gKiBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZVxuICogQURSLTAyMS4gUmXDum5lOlxuICogIC0gKipJbmZvcm1hY2nDs24qKiDigJQgbm9tYnJlLCBkZXNjcmlwY2nDs24sIHBsYW4geSB0aXBvIGRlIGxhIG9yZyBhY3RpdmE7IGVkaXRhclxuICogICAgdsOtYSBtb2RhbCBgdmFsLWVkaXQtb3JnLW1vZGFsYCAoc29sbyBzaSBgY2FuRWRpdE9yZygpYCkuXG4gKiAgLSAqKk1pZW1icm9zKiog4oCUIGxpc3RhIHBhZ2luYWRhIChgdmFsLW1lbWJlci1jYXJkYCkgZW5yaXF1ZWNpZGEgY29uIHBlcmZpbGVzXG4gKiAgICBww7pibGljb3MgKEZpcmVzdG9yZSk7IHZlciBkZXRhbGxlIHbDrWEgYHZhbC1tZW1iZXItZGV0YWlsLW1vZGFsYC5cbiAqICAtICoqUm9sZXMgeSBwZXJtaXNvcyoqIOKAlCBzZWNjacOzbiBleHBsaWNhdGl2YSBjb24gQ1RBIGEgbGEgcnV0YSBkZSBwZXJtaXNvcy5cbiAqICAtICoqSW52aXRhcioqIOKAlCBDVEEgcXVlIGFicmUgYHZhbC1pbnZpdGUtbWVtYmVyLW1vZGFsYCAoZ2F0ZWFkYSBwb3IgYHVzZXJzOipgKS5cbiAqICAtICoqVHJhbnNmZXJpciBwcm9waWVkYWQqKiDigJQgYHZhbC10cmFuc2Zlci1vd25lcnNoaXAtbW9kYWxgIChzb2xvIG93bmVyKS5cbiAqICAtICoqU2FsaXIgZGUgbGEgb3JnYW5pemFjacOzbioqIOKAlCBgT3JnU2VydmljZS5sZWF2ZU9yZ2AgY29uIGNvbmZpcm1hY2nDs25cbiAqICAgIGRlc3RydWN0aXZhLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGRlY2lzacOzbiBDVE8sIEFEUi0wMjEpOiBlbCBnYXRpbmcgZmlubyBzZSByZXN1ZWx2ZSBkZW50cm8gZGVcbiAqIGxhIHZpc3RhIHbDrWEgYEF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24oKWAgKyBgKnZhbEhhc1Blcm1pc3Npb25gICsgY29tcHV0ZWRzXG4gKiBgaXNPd25lcigpYC9gY2FuTWFuYWdlTWVtYmVycygpYC9gY2FuRWRpdE9yZygpYC4gTk8gc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqICoqQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaCoqOiB1biBgZWZmZWN0YCByZWFjdGlvbmEgYSBgYWN0aXZlT3JnSWQoKWAgeSByZWNhcmdhXG4gKiBvcmcgKyBtaWVtYnJvcyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGFcbiAqIGVzdMOhIG1vbnRhZGEuIEVsIGVmZmVjdCBjdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIChzaW4gZG9ibGUgY2FyZ2EpLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCBzb2xvIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZyAobm8tb3BcbiAqIGVtYmViaWRvKS4gQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsXG4gKiBuYW1lc3BhY2UgKGRlZmF1bHQgYFNldHRpbmdzLk9yZ2FuaXphdGlvbmApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtb3JnYW5pemF0aW9uLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ3JlYXRlT3JnTW9kYWxDb21wb25lbnQsXG4gICAgQ3RhQ2FyZENvbXBvbmVudCxcbiAgICBEYW5nZXJTZWN0aW9uQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBIYXNQZXJtaXNzaW9uRGlyZWN0aXZlLFxuICAgIFNrZWxldG9uTGF5b3V0Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIE1lbWJlckNhcmRDb21wb25lbnQsXG4gICAgUGVybWlzc2lvbnNNb2RhbENvbXBvbmVudCxcbiAgICBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgIE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgIE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICBTZWN0aW9uSGVhZGVyQ29tcG9uZW50LFxuICAgIFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICAgICAgPHZhbC1zZWN0aW9uLWhlYWRlciBbcHJvcHNdPVwic3dpdGNoT3JnU2VjdGlvblByb3BzKClcIiAoYWN0aW9uQ2xpY2spPVwib25IZWFkZXJBY3Rpb24oJGV2ZW50KVwiIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dJbmZvKSB7XG4gICAgICAgIDwhLS0gT3JnIEluZm8gLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2luZm9UaXRsZScpLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKGNhbkVkaXRPcmcoKSkge1xuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwiZWRpdEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25FZGl0KClcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDQgfVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChvcmdFcnJvclN0YXRlKCkpIHtcbiAgICAgICAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwib3JnRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChvcmcoKTsgYXMgbykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKG8ubG9nb1VybCAmJiAhbG9nb0ZhaWxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1sb2dvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZy1sb2dvLWltZ1wiIFtzcmNdPVwiby5sb2dvVXJsXCIgW2FsdF09XCJvLm5hbWVcIiAoZXJyb3IpPVwibG9nb0ZhaWxlZC5zZXQodHJ1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9OYW1lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tdmFsdWVcIj57eyBvLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9EZXNjcmlwdGlvbicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlIG9yZy1pbmZvLXZhbHVlLS1tdXRlZFwiPnt7IG8uZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9QbGFuJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhbi1iYWRnZSBwbGFuLWJhZGdlLS17eyBvLnBsYW4gfX1cIj57eyBwbGFuTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb1R5cGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby12YWx1ZVwiPnt7IG8udHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dNZW1iZXJzKSB7XG4gICAgICAgIDwhLS0gTWVtYmVycyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzVGl0bGUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChtZW1iZXJzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiAzIH1cIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVtYmVyc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJtZW1iZXJzRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChtZW1iZXJzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbWVtYmVyc0VtcHR5JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVtYmVycy1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAobSBvZiB2aXNpYmxlTWVtYmVycygpOyB0cmFjayBtLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgPHZhbC1tZW1iZXItY2FyZFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInb3JnLW1lbWJlci0nICsgbS51c2VySWRcIlxuICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBtLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBtLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogbS5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6IG0uYXZhdGFyLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGVMYWJlbDogbS5yb2xlc1swXSA/IHJvbGVMYWJlbChtLnJvbGVzWzBdKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkFyaWFMYWJlbDogdHQoJ3ZpZXdNZW1iZXJDdGEnKSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkFjdGlvbik9XCJvblZpZXdNZW1iZXIobSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKCFzaG93QWxsTWVtYmVycygpICYmIG1lbWJlcnMoKS5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgKGNsaWNrKT1cInNob3dBbGxNZW1iZXJzLnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAge3sgdHQoJ21lbWJlcnNTaG93TW9yZScpIH19ICh7eyBtZW1iZXJzKCkubGVuZ3RoIC0gMyB9fSlcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dBbGxNZW1iZXJzKCkgJiYgbWVtYmVyc05leHRUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdNb3JlTWVtYmVycygpXCIgKGNsaWNrKT1cImxvYWRNb3JlTWVtYmVycygpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsb2FkaW5nTW9yZU1lbWJlcnMoKSA/ICfigKYnIDogdHQoJ21lbWJlcnNTaG93TW9yZScpIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1JvbGVzKSB7XG4gICAgICAgIDwhLS0gUm9sZXMgeSBwZXJtaXNvczogc2VjY2lvbiBleHBsaWNhdGl2YSwgZGV0YWxsZSBlbiBsYSBydXRhIGRlIHBlcm1pc29zIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ3JvbGVzU2VjdGlvblRpdGxlJyksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdyb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInZpZXdQZXJtaXNzaW9uc0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25WaWV3UGVybWlzc2lvbnMoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd05ld09yZ0N0YSkge1xuICAgICAgICA8IS0tIE51ZXZhIG9yZyBDVEEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtY3RhLWNhcmQgW3Byb3BzXT1cIm5ld09yZ0N0YVByb3BzKClcIiAob25BY3Rpb24pPVwib25OZXdPcmcoKVwiIC8+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dJbnZpdGUpIHtcbiAgICAgICAgPCEtLSBJbnZpdGU6IHNvbG8gYWRtaW4rIChnYXRpbmcgUkJBQyBpbnRlcm5vKSAtLT5cbiAgICAgICAgPHNlY3Rpb24gKnZhbEhhc1Blcm1pc3Npb249XCIndXNlcnM6KidcIiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIiBkYXRhLXRlc3RpZD1cIm9yZy1pbnZpdGUtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fdGV4dFwiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW52aXRlQ3RhVGl0bGUnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2ludml0ZUN0YUhpbnQnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5JbnZpdGVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3Blbkludml0ZSgpXCIgLz5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5JbXBvcnRCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkltcG9ydCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93QXBpS2V5cykge1xuICAgICAgICA8IS0tIEFQSSBLZXlzOiBzZWNjacOzbiBwcm9waWEuIEludGVncmFjaW9uZXMgTTJNIChpbXBvcnQgZGUgbWllbWJyb3MsIGV0Yy4pLiAtLT5cbiAgICAgICAgPHNlY3Rpb24gKnZhbEhhc1Blcm1pc3Npb249XCInYXBpLWtleXM6cmVhZCdcIiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIiBkYXRhLXRlc3RpZD1cIm9yZy1hcGlrZXlzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX3RleHRcIj5cbiAgICAgICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uVGl0bGUnKSB9XCIgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uSGludCcpIH1cIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3JnLW1vcmUtaW5mby1saW5rXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFwaUtleXNJbmZvKClcIj5cbiAgICAgICAgICAgICAgICB7eyB0dCgnYXBpS2V5c01vcmVJbmZvJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJvcGVuQXBpS2V5c0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuQXBpS2V5cygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93VHJhbnNmZXJPd25lcnNoaXAgJiYgaXNPd25lcigpKSB7XG4gICAgICAgIDwhLS0gVHJhbnNmZXIgb3duZXJzaGlwOiBzb2xvIG93bmVyIChnYXRpbmcgUkJBQyBpbnRlcm5vKSAtLT5cbiAgICAgICAgPHZhbC1kYW5nZXItc2VjdGlvbiBbcHJvcHNdPVwieyB0aXRsZTogdHQoJ3RyYW5zZmVyVGl0bGUnKSB9XCIgZGF0YS10ZXN0aWQ9XCJvcmctdHJhbnNmZXItc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ3RyYW5zZmVySGludCcpLFxuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZiAodHJhbnNmZXJhYmxlTWVtYmVycygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwidHJhbnNmZXJCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlblRyYW5zZmVyKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbWVtYmVyc0VtcHR5JyksXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC92YWwtZGFuZ2VyLXNlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93TGVhdmUpIHtcbiAgICAgICAgPCEtLSBMZWF2ZSBvcmcgLS0+XG4gICAgICAgIDx2YWwtZGFuZ2VyLXNlY3Rpb24gW3Byb3BzXT1cInsgdGl0bGU6IHR0KCdsZWF2ZVRpdGxlJykgfVwiPlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogaXNPd25lcigpID8gdHQoJ2xlYXZlT3duZXJIaW50JykgOiB0dCgnbGVhdmVIaW50JyksXG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwibGVhdmVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uTGVhdmUoKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmFsLWRhbmdlci1zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0RlbGV0ZU9yZyAmJiBpc093bmVyKCkpIHtcbiAgICAgICAgPCEtLSBEZWxldGUgb3JnOiBzb2xvIG93bmVyLCBhY2Npw7NuIG3DoXMgZGVzdHJ1Y3RpdmEgLS0+XG4gICAgICAgIDx2YWwtZGFuZ2VyLXNlY3Rpb24gW3Byb3BzXT1cInsgdGl0bGU6IHR0KCdkZWxldGVUaXRsZScpIH1cIiBkYXRhLXRlc3RpZD1cIm9yZy1kZWxldGUtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwieyBjb250ZW50OiB0dCgnZGVsZXRlSGludCcpLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UgfVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwiZGVsZXRlQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbkRlbGV0ZSgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92YWwtZGFuZ2VyLXNlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaXNEZWJ1Zykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb24gcmJhYy1kZWJ1Z1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnUkJBQyAobGl2ZSknLFxuICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJiYWMtZGVidWdfX2JvZHlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19yb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX19sYWJlbFwiPlJvbGVzPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX3ZhbHVlXCI+e3sgYXV0aC5yb2xlcygpLmpvaW4oJywgJykgfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19yb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX19sYWJlbFwiPlBlcm1pc29zPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX3ZhbHVlIHJiYWMtZGVidWdfX3ZhbHVlLS1wZXJtc1wiPnt7IGF1dGgucGVybWlzc2lvbnMoKS5qb2luKCcsICcpIHx8ICfigJQnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICAgIDx2YWwtcGVybWlzc2lvbnMtbW9kYWxcbiAgICAgICAgW2lzT3Blbl09XCJwZXJtaXNzaW9uc09wZW4oKVwiXG4gICAgICAgIFtjb25maWddPVwieyBpMThuTmFtZXNwYWNlOiByZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2UgfVwiXG4gICAgICAgIChkaXNtaXNzZWQpPVwicGVybWlzc2lvbnNPcGVuLnNldChmYWxzZSlcIlxuICAgICAgLz5cbiAgICAgIDx2YWwtY3JlYXRlLW9yZy1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cImNyZWF0ZU9yZ01vZGFsT3BlbigpXCJcbiAgICAgICAgKGRpc21pc3NlZCk9XCJjcmVhdGVPcmdNb2RhbE9wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAgIChjcmVhdGVkKT1cIm9uT3JnQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cblxuICAgICAgLyogU2VndW5kbyBhbmNobywgZGVza3RvcCBjb24gZWwgcmFpbCByZXRyYcOtZG8uIFZlciBzZXR0aW5ncy1odWIgcGFyYSBsYVxuICAgICAgICAgZXhwbGljYWNpw7NuIGNvbXBsZXRhIGRlbCBtZWNhbmlzbW8uICovXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLW1lbnU9J2NvbGxhcHNlZCddKSAucGFnZSB7XG4gICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAub3JnLW1vcmUtaW5mby1saW5rIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA0cHggMDtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzcwMjZkZik7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cbiAgICAgIC5wYWdlLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uICsgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1oZWFkZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24tYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMtLWdhcCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLmludml0ZS1jdGEge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YV9fdGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgfVxuICAgICAgLmludml0ZS1jdGFfX2FjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1jYXJkIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTRweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1sb2dvIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDhweCAwIDE2cHg7XG4gICAgICB9XG4gICAgICAub3JnLWxvZ28taW1nIHtcbiAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgIGhlaWdodDogODBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgIH1cbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAub3JnLWluZm8tY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAub3JnLWluZm8tY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLm9yZy1pbmZvLWNhcmQge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWZpZWxkIHtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWZpZWxkOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tdmFsdWUge1xuICAgICAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tdmFsdWUtLW11dGVkIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2Uge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgcGFkZGluZzogM3B4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgIH1cbiAgICAgIC5wbGFuLWJhZGdlLS1mcmVlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LXNoYWRlLCAjZDdkOGRhKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5wbGFuLWJhZGdlLS1wcm8ge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLWVudGVycHJpc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjVjNTQyO1xuICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgIH1cbiAgICAgIC5tZW1iZXJzLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5tZW1iZXJzLXNob3ctbW9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDhweCAwO1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWcge1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX2xhYmVsIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBtaW4td2lkdGg6IDcycHg7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX3ZhbHVlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX3ZhbHVlLS1wZXJtcyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC8qIExhcyB0cmVzIHpvbmFzIGRlIHBlbGlncm8gKHRyYW5zZmVyaXIsIHNhbGlyLCBlbGltaW5hcikgdml2ZW4gZW5cbiAgICAgICAgIHZhbC1kYW5nZXItc2VjdGlvbiDigJQgc3VzIGVzdGlsb3MgeWEgbm8gc2UgcmVwaXRlbiBhY8OhLiBTb2xvIGVsXG4gICAgICAgICBlc3BhY2lhZG8gZW50cmUgZWxsYXMgeSBjb24gbGEgc2VjY2nDs24gbm9ybWFsIHByZXZpYSBlcyBwcm9waW8gZGVcbiAgICAgICAgIGVzdGEgdmlzdGEsIHBvcnF1ZSBhY8OhIHZhbiB2YXJpYXMgc2VndWlkYXMuICovXG4gICAgICB2YWwtZGFuZ2VyLXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW46IDAgLTRweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uICsgdmFsLWRhbmdlci1zZWN0aW9uLFxuICAgICAgdmFsLWRhbmdlci1zZWN0aW9uICsgdmFsLWRhbmdlci1zZWN0aW9uLFxuICAgICAgdmFsLWRhbmdlci1zZWN0aW9uICsgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvblZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHJlYWRvbmx5IGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIG9yZ1N3aXRjaCA9IGluamVjdChPcmdTd2l0Y2hTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIGNvbmZpcm1EaWFsb2cgPSBpbmplY3QoQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcmVhZG9ubHkgaXNEZWJ1ZyA9IGlzRGV2TW9kZSgpO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBvcmdhbml6YXRpb25Db25maWdgIChwb2JsYWRvIHBvciBgcHJvdmlkZVZhbHRlY2hPcmdhbml6YXRpb25Sb3V0ZXNgKS5cbiAgICogYHJlc29sdmVkQ29uZmlnYCBtZXJnZWEgY29uIGxvcyBkZWZhdWx0cyDigJQgYEBJbnB1dGAgZ2FuYSBzb2JyZSByb3V0ZSBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnPzogT3JnYW5pemF0aW9uVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPFxuICAgICAgT21pdDxcbiAgICAgICAgT3JnYW5pemF0aW9uVmlld0NvbmZpZyxcbiAgICAgICAgJ29uT3JnRWRpdGVkJyB8ICdvbk1lbWJlckludml0ZWQnIHwgJ29uT3duZXJzaGlwVHJhbnNmZXJyZWQnIHwgJ29uTGVmdE9yZycgfCAnb25PcmdEZWxldGVkJyB8ICdvbk9yZ0NyZWF0ZWQnXG4gICAgICA+XG4gICAgPiAmXG4gICAgICBQaWNrPFxuICAgICAgICBPcmdhbml6YXRpb25WaWV3Q29uZmlnLFxuICAgICAgICAnb25PcmdFZGl0ZWQnIHwgJ29uTWVtYmVySW52aXRlZCcgfCAnb25Pd25lcnNoaXBUcmFuc2ZlcnJlZCcgfCAnb25MZWZ0T3JnJyB8ICdvbk9yZ0RlbGV0ZWQnIHwgJ29uT3JnQ3JlYXRlZCdcbiAgICAgID5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ29yZ2FuaXphdGlvbkNvbmZpZyddID8/IHt9KSBhcyBPcmdhbml6YXRpb25WaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogT3JnYW5pemF0aW9uVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dJbmZvOiBtZXJnZWQuc2hvd0luZm8gPz8gdHJ1ZSxcbiAgICAgIHNob3dNZW1iZXJzOiBtZXJnZWQuc2hvd01lbWJlcnMgPz8gdHJ1ZSxcbiAgICAgIHNob3dSb2xlczogbWVyZ2VkLnNob3dSb2xlcyA/PyB0cnVlLFxuICAgICAgc2hvd0ludml0ZTogbWVyZ2VkLnNob3dJbnZpdGUgPz8gdHJ1ZSxcbiAgICAgIHNob3dOZXdPcmdDdGE6IG1lcmdlZC5zaG93TmV3T3JnQ3RhID8/IHRydWUsXG4gICAgICBzaG93VHJhbnNmZXJPd25lcnNoaXA6IG1lcmdlZC5zaG93VHJhbnNmZXJPd25lcnNoaXAgPz8gdHJ1ZSxcbiAgICAgIHNob3dMZWF2ZTogbWVyZ2VkLnNob3dMZWF2ZSA/PyB0cnVlLFxuICAgICAgc2hvd0RlbGV0ZU9yZzogbWVyZ2VkLnNob3dEZWxldGVPcmcgPz8gdHJ1ZSxcbiAgICAgIHNob3dBcGlLZXlzOiBtZXJnZWQuc2hvd0FwaUtleXMgPz8gdHJ1ZSxcbiAgICAgIGkxOG5OYW1lc3BhY2U6IG1lcmdlZC5pMThuTmFtZXNwYWNlID8/IERFRkFVTFRfTkFNRVNQQUNFLFxuICAgICAgdmlld1Blcm1pc3Npb25zUm91dGU6IG1lcmdlZC52aWV3UGVybWlzc2lvbnNSb3V0ZSA/PyBERUZBVUxUX1ZJRVdfUEVSTUlTU0lPTlNfUk9VVEUsXG4gICAgICBhcGlLZXlzUm91dGU6IG1lcmdlZC5hcGlLZXlzUm91dGUgPz8gREVGQVVMVF9BUElfS0VZU19ST1VURSxcbiAgICAgIGxlYXZlUmVkaXJlY3RSb3V0ZTogbWVyZ2VkLmxlYXZlUmVkaXJlY3RSb3V0ZSA/PyBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFLFxuICAgICAgb25PcmdFZGl0ZWQ6IG1lcmdlZC5vbk9yZ0VkaXRlZCxcbiAgICAgIG9uTWVtYmVySW52aXRlZDogbWVyZ2VkLm9uTWVtYmVySW52aXRlZCxcbiAgICAgIG9uT3duZXJzaGlwVHJhbnNmZXJyZWQ6IG1lcmdlZC5vbk93bmVyc2hpcFRyYW5zZmVycmVkLFxuICAgICAgb25MZWZ0T3JnOiBtZXJnZWQub25MZWZ0T3JnLFxuICAgICAgb25PcmdEZWxldGVkOiBtZXJnZWQub25PcmdEZWxldGVkLFxuICAgICAgb25PcmdDcmVhdGVkOiBtZXJnZWQub25PcmdDcmVhdGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICByZWFkb25seSBvcmcgPSBzaWduYWw8T3JnYW5pemF0aW9uIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBMb2dvIGRlIG9yZyBxdWUgZmFsbMOzIGFsIGNhcmdhciDihpIgb2N1bHRhIGVsIGJsb3F1ZSAoY2FlIGEgbGEgY2FyZCBzaW4gbG9nbykuICovXG4gIHJlYWRvbmx5IGxvZ29GYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbGVhdmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNyZWF0ZU9yZ01vZGFsT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JnTG9hZEVycm9yID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuXG4gIHJlYWRvbmx5IG9yZ0Vycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLm9yZ0xvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE9yZygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubG9hZGluZygpLFxuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSBtZW1iZXJzID0gc2lnbmFsPE1lbWJlckRldGFpbFtdPihbXSk7XG4gIHJlYWRvbmx5IG1lbWJlcnNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZW1iZXJzTG9hZEVycm9yID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuXG4gIHJlYWRvbmx5IG1lbWJlcnNFcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5tZW1iZXJzTG9hZEVycm9yKCk7XG4gICAgaWYgKCFlcnIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gICAgICB0aXRsZTogeyBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lVGl0bGUnKSwgZXJyb3I6IHRoaXMudHQoJ2Vycm9yVGl0bGUnKSB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZUhpbnQnKSxcbiAgICAgICAgZXJyb3I6IGludGVycHJldEVycm9yKGVycikubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICByZXRyeUxhYmVsOiB0aGlzLnR0KCdyZXRyeScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5sb2FkTWVtYmVycygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubWVtYmVyc0xvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVtYmVyc05leHRUb2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZ01vcmVNZW1iZXJzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0FsbE1lbWJlcnMgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSB2aXNpYmxlTWVtYmVycyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNob3dBbGxNZW1iZXJzKCkgPyB0aGlzLm1lbWJlcnMoKSA6IHRoaXMubWVtYmVycygpLnNsaWNlKDAsIDMpKSk7XG4gIHJlYWRvbmx5IHRyYW5zZmVycmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRlbGV0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlUm9sZXMgPSBzaWduYWw8T3JnUm9sZVtdPihTWVNURU1fUk9MRV9ERUZBVUxUUyk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC51c2VyKCkgYXMge1xuICAgICAgYWN0aXZlT3JnSWQ/OiBzdHJpbmc7XG4gICAgICBhY3RpdmVPcmc/OiBzdHJpbmc7XG4gICAgfSB8IG51bGw7XG4gICAgcmV0dXJuIHU/LmFjdGl2ZU9yZ0lkID8/IHU/LmFjdGl2ZU9yZyA/PyAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdXNlcklkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkID8/ICcnKTtcblxuICByZWFkb25seSBpc093bmVyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG8gPSB0aGlzLm9yZygpO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMudXNlcklkKCk7XG4gICAgcmV0dXJuICEhbyAmJiAhIXVpZCAmJiBvLm93bmVySWQgPT09IHVpZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY2FuRWRpdE9yZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNPd25lcigpIHx8IHRoaXMuYXV0aC5oYXNQZXJtaXNzaW9uKCdvcmc6bWFuYWdlJykpO1xuXG4gIHJlYWRvbmx5IGNhbk1hbmFnZU1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNPd25lcigpKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCB1aWQgPSB0aGlzLnVzZXJJZCgpO1xuICAgIGNvbnN0IG1lID0gdGhpcy5tZW1iZXJzKCkuZmluZChtID0+IG0udXNlcklkID09PSB1aWQpO1xuICAgIGlmICghbWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbWUucm9sZXMuc29tZShyID0+IHIgPT09ICdhZG1pbicgfHwgciA9PT0gJ3N1cGVyX2FkbWluJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIHJlYWRvbmx5IHBsYW5MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwbGFuID0gdGhpcy5vcmcoKT8ucGxhbjtcbiAgICBpZiAocGxhbiA9PT0gJ3BybycpIHJldHVybiB0aGlzLnR0KCdwbGFuUHJvJyk7XG4gICAgaWYgKHBsYW4gPT09ICdlbnRlcnByaXNlJykgcmV0dXJuIHRoaXMudHQoJ3BsYW5FbnRlcnByaXNlJyk7XG4gICAgcmV0dXJuIHRoaXMudHQoJ3BsYW5GcmVlJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN3aXRjaE9yZ1NlY3Rpb25Qcm9wcyA9IGNvbXB1dGVkPFNlY3Rpb25IZWFkZXJNZXRhZGF0YT4oKCkgPT4gKHtcbiAgICB0aXRsZTogdGhpcy5wYWdlVGl0bGUoKSxcbiAgICB0aXRsZVNpemU6ICdwYWdlJyxcbiAgICBhY3Rpb246IHtcbiAgICAgIHRleHQ6IHRoaXMudHQoJ3N3aXRjaE9yZ0N0YScpLFxuICAgICAgaWNvbjogeyBuYW1lOiAnc3dhcC1ob3Jpem9udGFsLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0b2tlbjogJ29yZy1zd2l0Y2gnLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH0sXG4gICAgaW5mb0xpbms6IHsgbGFiZWw6IHRoaXMudHQoJ29yZ3NNb3JlSW5mbycpLCB0b2tlbjogJ29yZy1tb3JlLWluZm8nIH0sXG4gIH0pKTtcblxuICByZWFkb25seSBlZGl0QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdlZGl0Q3RhJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGxlYXZlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdsZWF2ZUN0YScpLFxuICAgIHRva2VuOiAnb3JnLWxlYXZlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuaXNPd25lcigpIHx8IHRoaXMubGVhdmluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0cmFuc2ZlcmFibGVNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tZW1iZXJzKCkuZmlsdGVyKG0gPT4gbS51c2VySWQgIT09IHRoaXMudXNlcklkKCkpKTtcblxuICByZWFkb25seSB2aWV3UGVybWlzc2lvbnNCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3JvbGVzVmlld1Blcm1zJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnb3JnLXZpZXctcGVybWlzc2lvbnMnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3RyYW5zZmVyQ3RhJyksXG4gICAgdG9rZW46ICdvcmctdHJhbnNmZXItc3VibWl0JyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMudHJhbnNmZXJyaW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5JbnZpdGVCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2ludml0ZU9wZW4nKSxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgb3BlbkltcG9ydEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnaW1wb3J0T3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5BcGlLZXlzQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzT3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGRlbGV0ZUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnZGVsZXRlQ3RhJyksXG4gICAgdG9rZW46ICdvcmctZGVsZXRlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuZGVsZXRpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgbmV3T3JnQ3RhUHJvcHMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzTmV3UXVlc3Rpb24nKSxcbiAgICBkZXNjcmlwdGlvbjogdGhpcy50dCgnb3Jnc05ld0hpbnQnKSxcbiAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTRweCcsXG4gICAgYWN0aW9uczoge1xuICAgICAgcG9zaXRpb246ICdyaWdodCcsXG4gICAgICBjb2x1bW5lZDogZmFsc2UsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzTmV3Q3RhJyksXG4gICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgIHRva2VuOiAnb3JnLW5ldycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgQnV0dG9uR3JvdXBNZXRhZGF0YSxcbiAgfSkpO1xuXG4gIC8qKiBHdWFyZGEgcGFyYSBkZXRlY3RhciBlbCBwcmltZXIgZGlzcGFybyBkZWwgZWZmZWN0IChldml0YSBkb2JsZSBjYXJnYSkuICovXG4gIHByaXZhdGUgbGFzdExvYWRlZE9yZ0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIE9SR0FOSVpBVElPTl9WSUVXX0kxOE4pO1xuICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIG5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuXG4gICAgLy8gQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaDogcmVhY2Npb25hIGEgYWN0aXZlT3JnSWQoKSB5IHJlY2FyZ2Egb3JnICsgbWllbWJyb3NcbiAgICAvLyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGEgZXN0w6FcbiAgICAvLyBtb250YWRhLiBDdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIOKAlCBgbGFzdExvYWRlZE9yZ0lkYCBldml0YSByZWNhcmdhclxuICAgIC8vIGRvcyB2ZWNlcyBlbCBtaXNtbyBpZCAocC5lai4gc2kgZWwgZWZmZWN0IHJlLWNvcnJlIHBvciBvdHJhIGRlcGVuZGVuY2lhKS5cbiAgICAvLyBgYWxsb3dTaWduYWxXcml0ZXNgIHBvcnF1ZSBsYXMgbG9hZCBmbnMgZXNjcmliZW4gc2lnbmFscyBzw61uY3JvbmFtZW50ZVxuICAgIC8vIChsb2FkaW5nL2Vycm9yL3Rva2VuKSDigJQgQW5ndWxhciAxOCBibG9xdWVhIHdyaXRlcyBlbiBlZmZlY3Qgc2luIGVsIGZsYWcuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICAgICAgaWYgKG9yZ0lkID09PSB0aGlzLmxhc3RMb2FkZWRPcmdJZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmxhc3RMb2FkZWRPcmdJZCA9IG9yZ0lkO1xuICAgICAgICB0aGlzLmxvYWRPcmcoKTtcbiAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICB0aGlzLmxvYWRSb2xlcygpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBjb25uZWN0UGFnZVJlZnJlc2goYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZE9yZygpLCB0aGlzLmxvYWRNZW1iZXJzKCldKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRWRpdCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IEVkaXRPcmdNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZzogdGhpcy5vcmcoKSxcbiAgICAgICAgb25TdWNjZXNzOiAodXBkYXRlZDogT3JnYW5pemF0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmcuc2V0KHVwZGF0ZWQpO1xuICAgICAgICAgIHRoaXMub3JnU3dpdGNoLm5vdGlmeU9yZ0RhdGFVcGRhdGVkKHVwZGF0ZWQpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk9yZ0VkaXRlZD8uKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25MZWF2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc093bmVyKCkgfHwgdGhpcy5sZWF2aW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnR0KCdsZWF2ZVRpdGxlJyksXG4gICAgICBtZXNzYWdlOiB0aGlzLnR0KCdsZWF2ZUNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgnbGVhdmVDdGEnKSB9LFxuICAgICAgY2FuY2VsQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2NhbmNlbEN0YScpIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQuY29uZmlybWVkKSByZXR1cm47XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMubGVhdmluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnU2VydmljZS5sZWF2ZU9yZyhvcmdJZCkpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnbGVhdmVTdWNjZXNzJyksXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCk7XG4gICAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKGNmZy5sZWF2ZVJlZGlyZWN0Um91dGUpO1xuICAgICAgY2ZnLm9uTGVmdE9yZz8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24ubGVhdmUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2xlYXZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubGVhdmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc093bmVyKCkgfHwgdGhpcy5kZWxldGluZygpKSByZXR1cm47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtRGlhbG9nLmNvbmZpcm1EZXN0cnVjdGl2ZSh7XG4gICAgICB0aXRsZTogdGhpcy50dCgnZGVsZXRlVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2RlbGV0ZUNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgnZGVsZXRlQ3RhJykgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmRlbGV0aW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZyhvcmdJZCkpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHsgbWVzc2FnZTogdGhpcy50dCgnZGVsZXRlU3VjY2VzcycpLCBjb2xvcjogJ2RhcmsnLCBkdXJhdGlvbjogMzUwMCB9KTtcbiAgICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWcoKTtcbiAgICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwoY2ZnLmxlYXZlUmVkaXJlY3RSb3V0ZSk7XG4gICAgICBjZmcub25PcmdEZWxldGVkPy4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ29yZ2FuaXphdGlvbi5kZWxldGUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2RlbGV0ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRlbGV0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25OZXdPcmcoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVPcmdNb2RhbE9wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcmdDcmVhdGVkKG5ld09yZzogT3JnYW5pemF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVPcmdNb2RhbE9wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25PcmdDcmVhdGVkPy4obmV3T3JnKTtcbiAgfVxuXG4gIG9uT3Blbkludml0ZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IEludml0ZU1lbWJlck1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgZXhpc3RpbmdNZW1iZXJJZHM6IHRoaXMubWVtYmVycygpLm1hcChtID0+IG0udXNlcklkKSxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk1lbWJlckludml0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3BlbkltcG9ydCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgYXZhaWxhYmxlUm9sZXM6IHRoaXMuYXZhaWxhYmxlUm9sZXMoKSxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk1lbWJlckludml0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3BlbkFwaUtleXMoKTogdm9pZCB7XG4gICAgLy8gTGFzIEFQSSBLZXlzIGFob3JhIHZpdmVuIGVuIHN1IHByb3BpYSB2aXN0YSAoYHZhbC1hcGkta2V5cy12aWV3YCk6IGNyZWFyXG4gICAgLy8gYXJyaWJhLCBsaXN0YSBhYmFqbyBjb24gY3JlYWRvci9mZWNoYS4gTmF2ZWdhbW9zIGVuIHZleiBkZSBhYnJpciB1biBtb2RhbC5cbiAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmVzb2x2ZWRDb25maWcoKS5hcGlLZXlzUm91dGUpO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIHNvYnJlIG9yZ2FuaXphY2lvbmVzIOKAlCBtaXNtbyBzaGVldCBleHBsaWNhdGl2byBxdWUgbXVlc3RyYVxuICBvbkhlYWRlckFjdGlvbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRva2VuID09PSAnb3JnLXN3aXRjaCcpIHRoaXMub25Td2l0Y2hPcmcoKTtcbiAgICBlbHNlIGlmICh0b2tlbiA9PT0gJ29yZy1tb3JlLWluZm8nKSB0aGlzLm9uT3JnSW5mbygpO1xuICB9XG5cbiAgLy8gYWNjb3VudC12aWV3IHNpbiBvcmcsIHBlcm8gZGlzcG9uaWJsZSBzaWVtcHJlICh0b2RvIHVzZXIgdGllbmUgb3JnIHBvciBkZWZlY3RvKS5cbiAgb25Td2l0Y2hPcmcoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogU3dpdGNoT3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBpMThuTmFtZXNwYWNlOiAnU2V0dGluZ3MuU3dpdGNoT3JnJyxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuODVdLCBpbml0aWFsQnJlYWtwb2ludDogMC44NSwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PcmdJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ29yZ3NJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIGRlIGxhIHNlY2Npw7NuIEludGVncmFjaW9uZXMg4oCUIGFicmUgdW4gc2hlZXQgRVhQTElDQVRJVk9cbiAgLy8gKGFydGljbGUtc3R5bGUsIHNpbiBsYXMgZmVhdHVyZS1jYXJkcyBkZSBvcmcpLCBOTyBlbCBtb2RhbCBkZSBnZXN0acOzbiBkZSBBUElcbiAgLy8ga2V5cy4gTGEgZ2VzdGnDs24gc2UgYWJyZSBjb24gZWwgYm90w7NuIFwiR2VzdGlvbmFyXCIgKG9uT3BlbkFwaUtleXMpLlxuICBvbkFwaUtleXNJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHNob3dGZWF0dXJlczogZmFsc2UsXG4gICAgICAgIGZlYXR1cmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2NvZGUtc2xhc2gtb3V0bGluZScsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50dCgnYXBpS2V5c0ZlYXR1cmVBdXRvVGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlQXV0b0Rlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdzaGllbGQtY2hlY2ttYXJrLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlUGVybXNUaXRsZScpLFxuICAgICAgICAgICAgZGVzYzogdGhpcy50dCgnYXBpS2V5c0ZlYXR1cmVQZXJtc0Rlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlU2VjcmV0VGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlU2VjcmV0RGVzYycpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ2FwaUtleXNJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25WaWV3UGVybWlzc2lvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJtaXNzaW9uc09wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcGVuVHJhbnNmZXIoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgbWVtYmVyczogdGhpcy50cmFuc2ZlcmFibGVNZW1iZXJzKCksXG4gICAgICAgIG9uQ29uZmlybTogKG5ld093bmVySWQ6IHN0cmluZykgPT4gdm9pZCB0aGlzLm9uVHJhbnNmZXIobmV3T3duZXJJZCksXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25UcmFuc2ZlcihuZXdPd25lcklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5ld093bmVySWQgfHwgdGhpcy50cmFuc2ZlcnJpbmcoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ3RyYW5zZmVyVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyQ29uZmlybScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCd0cmFuc2ZlckN0YScpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50dCgnY2FuY2VsQ3RhJykgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdC5jb25maXJtZWQpIHJldHVybjtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy50cmFuc2ZlcnJpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UudHJhbnNmZXJPd25lcnNoaXAob3JnSWQsIG5ld093bmVySWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkT3JnKCk7XG4gICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Pd25lcnNoaXBUcmFuc2ZlcnJlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24udHJhbnNmZXInLFxuICAgICAgICBmYWxsYmFja0tleTogJ3RyYW5zZmVyRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNmZXJyaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnTG9hZEVycm9yLnNldChudWxsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnKG9yZ0lkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBvcmcgPT4ge1xuICAgICAgICAgIHRoaXMubG9nb0ZhaWxlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMub3JnLnNldChvcmcpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdMb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTWVtYmVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0FsbE1lbWJlcnMuc2V0KGZhbHNlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnTWVtYmVycyhvcmdJZCwgeyBsaW1pdDogMjAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnMuc2V0KGNhcmRzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgICAgaWYgKHJlcy5yb2xlRGlzcGxheU5hbWVzKSB0aGlzLm1lcmdlUm9sZURpc3BsYXlOYW1lcyhyZXMucm9sZURpc3BsYXlOYW1lcyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRNb3JlTWVtYmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVtYmVyc05leHRUb2tlbigpO1xuICAgIGlmICghb3JnSWQgfHwgIXRva2VuIHx8IHRoaXMubG9hZGluZ01vcmVNZW1iZXJzKCkpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZ01lbWJlcnMob3JnSWQsIHsgbGltaXQ6IDIwLCBuZXh0VG9rZW46IHRva2VuIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyByZXMgPT4ge1xuICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy5tZW1iZXJzLnVwZGF0ZShwcmV2ID0+IFsuLi5wcmV2LCAuLi5jYXJkc10pO1xuICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgIHRoaXMubG9hZGluZ01vcmVNZW1iZXJzLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLmxvYWRNb3JlTWVtYmVycycsXG4gICAgICAgICAgZmFsbGJhY2tLZXk6ICdtZW1iZXJzRXJyb3InLFxuICAgICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5yaWNoV2l0aFByb2ZpbGVzKG1lbWJlcnM6IE9yZ01lbWJlcltdKTogUHJvbWlzZTxNZW1iZXJEZXRhaWxbXT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBtZW1iZXJzLm1hcChhc3luYyBtID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gYXdhaXQgZ2V0RG9jKGRvYyh0aGlzLmZpcmVzdG9yZSwgYHByb2ZpbGVzLyR7bS51c2VySWR9YCkpO1xuICAgICAgICAgIGNvbnN0IHAgPSBzbmFwLmV4aXN0cygpID8gc25hcC5kYXRhKCkgOiB7fTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGhhbmRsZTogcFsnaGFuZGxlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXZhdGFyOiAocFsnYXZhdGFyVXJsJ10gPz8gcFsnYXZhdGFyJ10pIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5hbWU6IChwWyduYW1lJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBtLm5hbWUsXG4gICAgICAgICAgfSBhcyBNZW1iZXJEZXRhaWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBtIGFzIE1lbWJlckRldGFpbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLm1hcChyID0+IChyLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgPyByLnZhbHVlIDogKHt9IGFzIE1lbWJlckRldGFpbCkpKTtcbiAgfVxuXG4gIGxvYWRSb2xlcygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvbGVzID0+IHtcbiAgICAgICAgaWYgKHJvbGVzLmxlbmd0aCkgdGhpcy5hdmFpbGFibGVSb2xlcy5zZXQocm9sZXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJvbGVMYWJlbChyb2xlSWRPck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVSb2xlTGFiZWxGcm9tTGlzdChyb2xlSWRPck5hbWUsIHRoaXMuYXZhaWxhYmxlUm9sZXMoKSwgdGhpcy5pMThuLmxhbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUm9sZURpc3BsYXlOYW1lcyhkaXNwbGF5TmFtZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KTogdm9pZCB7XG4gICAgdGhpcy5hdmFpbGFibGVSb2xlcy51cGRhdGUocm9sZXMgPT4ge1xuICAgICAgY29uc3QgYnlOYW1lID0gbmV3IE1hcChyb2xlcy5tYXAociA9PiBbci5uYW1lLCByXSkpO1xuICAgICAgZm9yIChjb25zdCBbcm9sZU5hbWUsIGxhYmVsc10gb2YgT2JqZWN0LmVudHJpZXMoZGlzcGxheU5hbWVzKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGJ5TmFtZS5nZXQocm9sZU5hbWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICBpZiAoIWV4aXN0aW5nLmRpc3BsYXlOYW1lKSBieU5hbWUuc2V0KHJvbGVOYW1lLCB7IC4uLmV4aXN0aW5nLCBkaXNwbGF5TmFtZTogbGFiZWxzIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5TmFtZS5zZXQocm9sZU5hbWUsIHsgaWQ6IHJvbGVOYW1lLCBuYW1lOiByb2xlTmFtZSwgZGlzcGxheU5hbWU6IGxhYmVscyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oYnlOYW1lLnZhbHVlcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uVmlld01lbWJlcihtZW1iZXI6IE1lbWJlckRldGFpbCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBtZW1iZXIsXG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGF2YWlsYWJsZVJvbGVzOiB0aGlzLmF2YWlsYWJsZVJvbGVzKCksXG4gICAgICAgIGNhbk1hbmFnZTogdGhpcy5jYW5NYW5hZ2VNZW1iZXJzKCkgJiYgbWVtYmVyLnVzZXJJZCAhPT0gdGhpcy51c2VySWQoKSxcbiAgICAgICAgaXNTZWxmOiBtZW1iZXIudXNlcklkID09PSB0aGlzLnVzZXJJZCgpLFxuICAgICAgICBvbkNoYW5nZWQ6ICgpID0+IHRoaXMubG9hZE1lbWJlcnMoKSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=
|
|
1344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmdhbml6YXRpb24tdmlldy9vcmdhbml6YXRpb24tdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUV4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUlqRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFJTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRWxHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBR3pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUVsRSxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBRXBELE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7QUFDbEQsTUFBTSw4QkFBOEIsR0FBRywyQkFBMkIsQ0FBQztBQUNuRSxNQUFNLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO0FBQ3hELE1BQU0sNEJBQTRCLEdBQUcsdUJBQXVCLENBQUM7QUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBeWZILE1BQU0sT0FBTyx5QkFBeUI7SUEyRHBDLHNFQUFzRTtJQUN0RSxJQUFZLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDN0MsQ0FBQztJQXVORDtRQXBSUSxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQixTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsV0FBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNsRCxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWxELFlBQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztRQVN0QixtQkFBYyxHQUFHLFFBQVEsQ0FXaEMsR0FBRyxFQUFFO1lBQ0wsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQTJCLENBQUM7WUFDcEcsTUFBTSxNQUFNLEdBQTJCLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoRixPQUFPO2dCQUNMLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUk7Z0JBQ2pDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3ZDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUk7Z0JBQ25DLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3JDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUk7Z0JBQzNDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxJQUFJO2dCQUMzRCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJO2dCQUNuQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSxJQUFJO2dCQUMzQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO2dCQUN2QyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSxpQkFBaUI7Z0JBQ3hELG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSw4QkFBOEI7Z0JBQ25GLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxJQUFJLHNCQUFzQjtnQkFDM0Qsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixJQUFJLDRCQUE0QjtnQkFDN0UsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7Z0JBQ3ZDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7Z0JBQ3JELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7YUFDbEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBT00sUUFBRyxHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLENBQUM7UUFDakQsbUZBQW1GO1FBQzFFLGVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixpQkFBWSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUU3QyxrQkFBYSxHQUFHLFFBQVEsQ0FBNEIsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3RCLE9BQU8scUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUNoQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDekUsV0FBVyxFQUFFO29CQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDL0IsS0FBSyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO2lCQUNuQztnQkFDRCxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTthQUN6QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVNLFlBQU8sR0FBRyxNQUFNLENBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUVqRCxzQkFBaUIsR0FBRyxRQUFRLENBQTRCLEdBQUcsRUFBRTtZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3RCLE9BQU8scUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUNoQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDekUsV0FBVyxFQUFFO29CQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDL0IsS0FBSyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO2lCQUNuQztnQkFDRCxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTthQUNoQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVNLHFCQUFnQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDL0MsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLG1CQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsTUFBTSxDQUFZLG9CQUFvQixDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUdoQixDQUFDO1lBQ1QsT0FBTyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRU0sV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4RCxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRU0sZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUVyRixxQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDdEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRU0sY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDakQsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFN0QsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztZQUM5QixJQUFJLElBQUksS0FBSyxLQUFLO2dCQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxJQUFJLElBQUksS0FBSyxZQUFZO2dCQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVNLDBCQUFxQixHQUFHLFFBQVEsQ0FBd0IsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN0RSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN2QixTQUFTLEVBQUUsTUFBTTtZQUNqQixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUM3QixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDeEQsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTzthQUMvQjtZQUNELFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7U0FDckUsQ0FBQyxDQUFDLENBQUM7UUFFSyxvQkFBZSxHQUFHLFFBQVEsQ0FBMEIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDeEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQUMsQ0FBQztRQUVLLHFCQUFnQixHQUFHLFFBQVEsQ0FBMEIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDekIsS0FBSyxFQUFFLFdBQVc7WUFDbEIsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTztTQUM3RixDQUFDLENBQUMsQ0FBQztRQUVLLHdCQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTdGLCtCQUEwQixHQUFHLFFBQVEsQ0FBMEIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3RSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxzQkFBc0I7U0FDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSyx3QkFBbUIsR0FBRyxRQUFRLENBQTBCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQzVCLEtBQUssRUFBRSxxQkFBcUI7WUFDNUIsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPO1NBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBRUssMEJBQXFCLEdBQUcsUUFBUSxDQUEwQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQztZQUMzQixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUssMEJBQXFCLEdBQUcsUUFBUSxDQUEwQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQztZQUMzQixLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSywyQkFBc0IsR0FBRyxRQUFRLENBQTBCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDekUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQzVCLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQUMsQ0FBQztRQUVLLHNCQUFpQixHQUFHLFFBQVEsQ0FBMEIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDMUIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPO1NBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUssbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDbkMsT0FBTyxFQUFFLE1BQU07WUFDZixZQUFZLEVBQUUsTUFBTTtZQUNwQixPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUM7d0JBQzNCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixJQUFJLEVBQUUsT0FBTzt3QkFDYixLQUFLLEVBQUUsT0FBTzt3QkFDZCxJQUFJLEVBQUUsU0FBUzt3QkFDZixJQUFJLEVBQUUsUUFBUTt3QkFDZCxLQUFLLEVBQUUsU0FBUzt3QkFDaEIsS0FBSyxFQUFFLFNBQVM7cUJBQ2pCO2lCQUNGO2FBQ3FCO1NBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUosNkVBQTZFO1FBQ3JFLG9CQUFlLEdBQWtCLElBQUksQ0FBQztRQUc1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVELGdGQUFnRjtRQUNoRix5RUFBeUU7UUFDekUsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLE1BQU0sQ0FDSixHQUFHLEVBQUU7WUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWU7Z0JBQUUsT0FBTztZQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO1FBRUYsa0JBQWtCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDbEMsU0FBUyxFQUFFLHFCQUFxQjtZQUNoQyxjQUFjLEVBQUU7Z0JBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsU0FBUyxFQUFFLENBQUMsT0FBcUIsRUFBRSxFQUFFO29CQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3hDLENBQUM7YUFDRjtZQUNELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztZQUN6RCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ2hDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1NBQzdDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUFFLE9BQU87UUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDaEMsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDL0MsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ3RCLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUU7YUFDdkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDakMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDN0MsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7U0FDN0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMvQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsV0FBVyxFQUFFLGFBQWE7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRTthQUN2QixDQUFDLENBQUM7UUFDTCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBb0I7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFlBQVk7UUFDVixLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ2xDLFNBQVMsRUFBRSwwQkFBMEI7WUFDckMsY0FBYyxFQUFFO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDcEQsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxDQUFDO2FBQ0Y7WUFDRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDbEMsU0FBUyxFQUFFLDBCQUEwQjtZQUNyQyxjQUFjLEVBQUU7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQyxTQUFTLEVBQUUsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7Z0JBQzVDLENBQUM7YUFDRjtZQUNELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsMkVBQTJFO1FBQzNFLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLEtBQUssS0FBSyxZQUFZO1lBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQzFDLElBQUksS0FBSyxLQUFLLGVBQWU7WUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELG1GQUFtRjtJQUNuRixXQUFXO1FBQ1QsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQixTQUFTLEVBQUUsdUJBQXVCO1lBQ2xDLGNBQWMsRUFBRTtnQkFDZCxhQUFhLEVBQUUsb0JBQW9CO2FBQ3BDO1lBQ0QsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQ2xGLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ1AsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQixTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLGNBQWMsRUFBRTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNyQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUNwQyxVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUM5QixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsTUFBTTtvQkFDYixJQUFJLEVBQUUsU0FBUztvQkFDZixNQUFNLEVBQUUsT0FBTztvQkFDZixJQUFJLEVBQUUsUUFBUTtpQkFDZjthQUNGO1lBQ0QsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQ2xGLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxhQUFhO1FBQ1gsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQixTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLGNBQWMsRUFBRTtnQkFDZCxZQUFZLEVBQUUsS0FBSztnQkFDbkIsUUFBUSxFQUFFO29CQUNSO3dCQUNFLElBQUksRUFBRSxvQkFBb0I7d0JBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO3dCQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztxQkFDeEM7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjt3QkFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUM7d0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO3FCQUN6QztvQkFDRDt3QkFDRSxJQUFJLEVBQUUsaUJBQWlCO3dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzt3QkFDM0MsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUM7cUJBQzFDO2lCQUNGO2dCQUNELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNsQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDeEMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUN2QyxVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUM7b0JBQ2pDLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxNQUFNO29CQUNiLElBQUksRUFBRSxTQUFTO29CQUNmLE1BQU0sRUFBRSxPQUFPO29CQUNmLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxPQUFPO2lCQUNmO2FBQ0Y7WUFDRCxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7WUFDbEYsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO1FBQ1osS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUNsQyxTQUFTLEVBQUUsK0JBQStCO1lBQzFDLGNBQWMsRUFBRTtnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUNuQyxTQUFTLEVBQUUsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO2FBQ3BFO1lBQ0QsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBa0I7UUFDakMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQUUsT0FBTztRQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUM7WUFDekQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ25DLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQy9DLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1NBQzdDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUFFLE9BQU87UUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNuQyxLQUFLLEVBQUUsTUFBTTtnQkFDYixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUN0QixPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxXQUFXLEVBQUUsZUFBZTtnQkFDNUIsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFO2FBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sT0FBTztRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxPQUFPLENBQU8sT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUN0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBRTtvQkFDaEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUNqRCxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0I7d0JBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUMzRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsT0FBTztRQUMxRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlFLElBQUksRUFBRSxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUN0QixPQUFPLEVBQUUsOEJBQThCO29CQUN2QyxXQUFXLEVBQUUsY0FBYztvQkFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFO2lCQUN2QixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFvQjtRQUNuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE9BQU87b0JBQ0wsR0FBRyxDQUFDO29CQUNKLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUF1QjtvQkFDekMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBdUI7b0JBQzdELElBQUksRUFBRyxDQUFDLENBQUMsTUFBTSxDQUF3QixJQUFJLENBQUMsQ0FBQyxJQUFJO2lCQUNsQyxDQUFDO1lBQ3BCLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxDQUFpQixDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsRUFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1osSUFBSSxLQUFLLENBQUMsTUFBTTtvQkFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUFvQjtRQUM1QixPQUFPLHdCQUF3QixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxZQUFvRDtRQUNoRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVzt3QkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzlFLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFvQjtRQUMvQixLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ2xDLFNBQVMsRUFBRSwwQkFBMEI7WUFDckMsY0FBYyxFQUFFO2dCQUNkLE1BQU07Z0JBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNyRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN2QyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTthQUNwQztZQUNELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxFQUFFLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQzsrR0F4ckJVLHlCQUF5QjttR0FBekIseUJBQXlCLCtHQWplMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1U1QsNHdGQTFUQyx1QkFBdUIseUlBQ3ZCLGdCQUFnQixtR0FDaEIsc0JBQXNCLGtGQUV0QixtQkFBbUIsK0VBQ25CLHNCQUFzQiw2RkFDdEIsdUJBQXVCLG1GQUN2QixjQUFjLHlFQUNkLGFBQWEsd0VBQ2IsZUFBZSwwR0FDZixtQkFBbUIsc0dBQ25CLHlCQUF5Qix3SEFJekIsc0JBQXNCLDRHQUV0QixrQkFBa0I7OzRGQW1lVCx5QkFBeUI7a0JBeGZyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLHNCQUFzQjt3QkFDdEIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHlCQUF5Qjt3QkFDekIsK0JBQStCO3dCQUMvQiwwQkFBMEI7d0JBQzFCLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0Qix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjtxQkFDbkIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVTVDt3REE4TVEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBpc0Rldk1vZGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpcmVzdG9yZSwgZG9jLCBnZXREb2MgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IHdhcm5pbmdPdXRsaW5lLCBzd2FwSG9yaXpvbnRhbE91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEN0YUNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY3RhLWNhcmQvY3RhLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IERhbmdlclNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGFuZ2VyLXNlY3Rpb24vZGFuZ2VyLXNlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2NvbnRhaW5lci9jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVFcnJvclN0YXRlUHJvcHMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeSc7XG5pbXBvcnQgeyBNZW1iZXJDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL21lbWJlci1jYXJkL21lbWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTZWN0aW9uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlY3Rpb24taGVhZGVyL3NlY3Rpb24taGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWN0aW9uSGVhZGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VjdGlvbi1oZWFkZXIvdHlwZXMnO1xuaW1wb3J0IHsgQnV0dG9uR3JvdXBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvdHlwZXMnO1xuXG5pbXBvcnQgeyBIYXNQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9oYXMtcGVybWlzc2lvbi5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ1N3aXRjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL29yZy1zd2l0Y2guc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgaW50ZXJwcmV0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvaW50ZXJwcmV0LWVycm9yJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE9yZ01lbWJlcixcbiAgT3JnUm9sZSxcbiAgT3JnYW5pemF0aW9uLFxuICByZXNvbHZlUm9sZUxhYmVsRnJvbUxpc3QsXG4gIFNZU1RFTV9ST0xFX0RFRkFVTFRTLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvdHlwZXMnO1xuaW1wb3J0IHsgY29ubmVjdFBhZ2VSZWZyZXNoIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1yZWZyZXNoL3BhZ2UtcmVmcmVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5zZXJ2aWNlJztcblxuaW1wb3J0IHsgQ3JlYXRlT3JnTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtb3JnLW1vZGFsL2NyZWF0ZS1vcmctbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2VkaXQtb3JnLW1vZGFsL2VkaXQtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnZpdGVNZW1iZXJNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2ludml0ZS1tZW1iZXItbW9kYWwvaW52aXRlLW1lbWJlci1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9tZW1iZXItZGV0YWlsLW1vZGFsL21lbWJlci1kZXRhaWwtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckRldGFpbCB9IGZyb20gJy4uL21lbWJlci1kZXRhaWwtbW9kYWwvdHlwZXMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3Blcm1pc3Npb25zLXZpZXcvcGVybWlzc2lvbnMtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zZmVyT3duZXJzaGlwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwvdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW1iZXJJbXBvcnRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21lbWJlci1pbXBvcnQtbW9kYWwvbWVtYmVyLWltcG9ydC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JnSW5mb1NoZWV0Q29tcG9uZW50IH0gZnJvbSAnLi4vb3JnLWluZm8tc2hlZXQvb3JnLWluZm8tc2hlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc3dpdGNoLW9yZy1tb2RhbC9zd2l0Y2gtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE9yZ2FuaXphdGlvblZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE9SR0FOSVpBVElPTl9WSUVXX0kxOE4gfSBmcm9tICcuL29yZ2FuaXphdGlvbi12aWV3LmkxOG4nO1xuXG5hZGRJY29ucyh7IHdhcm5pbmdPdXRsaW5lLCBzd2FwSG9yaXpvbnRhbE91dGxpbmUgfSk7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLk9yZ2FuaXphdGlvbic7XG5jb25zdCBERUZBVUxUX1ZJRVdfUEVSTUlTU0lPTlNfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9wZXJtaXNzaW9ucyc7XG5jb25zdCBERUZBVUxUX0FQSV9LRVlTX1JPVVRFID0gJy9hcHAvc2V0dGluZ3MvYXBpLWtleXMnO1xuY29uc3QgREVGQVVMVF9MRUFWRV9SRURJUkVDVF9ST1VURSA9ICcvYXBwL3NldHRpbmdzL2FjY291bnQnO1xuXG4vKipcbiAqIGB2YWwtb3JnYW5pemF0aW9uLXZpZXdgIOKAlCB2aXN0YSBHZXN0acOzbiBkZSBvcmdhbml6YWNpw7NuIGZ1bGwtZmVhdHVyZVxuICogYXV0b2NvbnRlbmlkYSAob3JnYW5pc20pLiBQcm9tb3ZpZGEgZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGVcbiAqIEFEUi0wMjEuIFJlw7puZTpcbiAqICAtICoqSW5mb3JtYWNpw7NuKiog4oCUIG5vbWJyZSwgZGVzY3JpcGNpw7NuLCBwbGFuIHkgdGlwbyBkZSBsYSBvcmcgYWN0aXZhOyBlZGl0YXJcbiAqICAgIHbDrWEgbW9kYWwgYHZhbC1lZGl0LW9yZy1tb2RhbGAgKHNvbG8gc2kgYGNhbkVkaXRPcmcoKWApLlxuICogIC0gKipNaWVtYnJvcyoqIOKAlCBsaXN0YSBwYWdpbmFkYSAoYHZhbC1tZW1iZXItY2FyZGApIGVucmlxdWVjaWRhIGNvbiBwZXJmaWxlc1xuICogICAgcMO6YmxpY29zIChGaXJlc3RvcmUpOyB2ZXIgZGV0YWxsZSB2w61hIGB2YWwtbWVtYmVyLWRldGFpbC1tb2RhbGAuXG4gKiAgLSAqKlJvbGVzIHkgcGVybWlzb3MqKiDigJQgc2VjY2nDs24gZXhwbGljYXRpdmEgY29uIENUQSBhIGxhIHJ1dGEgZGUgcGVybWlzb3MuXG4gKiAgLSAqKkludml0YXIqKiDigJQgQ1RBIHF1ZSBhYnJlIGB2YWwtaW52aXRlLW1lbWJlci1tb2RhbGAgKGdhdGVhZGEgcG9yIGB1c2VyczoqYCkuXG4gKiAgLSAqKlRyYW5zZmVyaXIgcHJvcGllZGFkKiog4oCUIGB2YWwtdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsYCAoc29sbyBvd25lcikuXG4gKiAgLSAqKlNhbGlyIGRlIGxhIG9yZ2FuaXphY2nDs24qKiDigJQgYE9yZ1NlcnZpY2UubGVhdmVPcmdgIGNvbiBjb25maXJtYWNpw7NuXG4gKiAgICBkZXN0cnVjdGl2YS5cbiAqXG4gKiAqKlJCQUMgaW50ZXJubyoqIChkZWNpc2nDs24gQ1RPLCBBRFItMDIxKTogZWwgZ2F0aW5nIGZpbm8gc2UgcmVzdWVsdmUgZGVudHJvIGRlXG4gKiBsYSB2aXN0YSB2w61hIGBBdXRoU2VydmljZS5oYXNQZXJtaXNzaW9uKClgICsgYCp2YWxIYXNQZXJtaXNzaW9uYCArIGNvbXB1dGVkc1xuICogYGlzT3duZXIoKWAvYGNhbk1hbmFnZU1lbWJlcnMoKWAvYGNhbkVkaXRPcmcoKWAuIE5PIHNlIGV4cG9uZSBjb21vIGNvbmZpZy5cbiAqXG4gKiAqKkF1dG8tcmVsb2FkIGVuIG9yZy1zd2l0Y2gqKjogdW4gYGVmZmVjdGAgcmVhY3Rpb25hIGEgYGFjdGl2ZU9yZ0lkKClgIHkgcmVjYXJnYVxuICogb3JnICsgbWllbWJyb3MgY3VhbmRvIGVsIHVzdWFyaW8gY2FtYmlhIGRlIG9yZ2FuaXphY2nDs24gYWN0aXZhIG1pZW50cmFzIGxhIHZpc3RhXG4gKiBlc3TDoSBtb250YWRhLiBFbCBlZmZlY3QgY3VicmUgdGFtYmnDqW4gbGEgY2FyZ2EgaW5pY2lhbCAoc2luIGRvYmxlIGNhcmdhKS5cbiAqXG4gKiBOTyByZW5kZXJpemEgaW9uLWNvbnRlbnQg4oCUIHZpdmUgZGVudHJvIGRlIHZhbC1wYWdlLXdyYXBwZXIuIGBBY3RpdmF0ZWRSb3V0ZWAgc2VcbiAqIGlueWVjdGEgYHsgb3B0aW9uYWw6IHRydWUgfWAgc29sbyBwYXJhIGxlZXIgZWwgcm91dGUgZGF0YSBkZSBjb25maWcgKG5vLW9wXG4gKiBlbWJlYmlkbykuIEF1dG8tcmVnaXN0cmEgc3VzIGRlZmF1bHRzIGkxOG4gKGVzL2VuKSBzaSBlbCBjb25zdW1lciBubyBwcm92ZXnDsyBlbFxuICogbmFtZXNwYWNlIChkZWZhdWx0IGBTZXR0aW5ncy5Pcmdhbml6YXRpb25gKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW9yZ2FuaXphdGlvbi12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENyZWF0ZU9yZ01vZGFsQ29tcG9uZW50LFxuICAgIEN0YUNhcmRDb21wb25lbnQsXG4gICAgRGFuZ2VyU2VjdGlvbkNvbXBvbmVudCxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgSGFzUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBTa2VsZXRvbkxheW91dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBUZXh0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBNZW1iZXJDYXJkQ29tcG9uZW50LFxuICAgIFBlcm1pc3Npb25zTW9kYWxDb21wb25lbnQsXG4gICAgVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCxcbiAgICBNZW1iZXJJbXBvcnRNb2RhbENvbXBvbmVudCxcbiAgICBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgU2VjdGlvbkhlYWRlckNvbXBvbmVudCxcbiAgICBTd2l0Y2hPcmdNb2RhbENvbXBvbmVudCxcbiAgICBDb250YWluZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHZhbC1jb250YWluZXIgW3Byb3BzXT1cInsgc2l6ZTogJ21kJywgcGFkZGluZzogJ25vbmUnIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICAgIDx2YWwtc2VjdGlvbi1oZWFkZXIgW3Byb3BzXT1cInN3aXRjaE9yZ1NlY3Rpb25Qcm9wcygpXCIgKGFjdGlvbkNsaWNrKT1cIm9uSGVhZGVyQWN0aW9uKCRldmVudClcIiAvPlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0luZm8pIHtcbiAgICAgICAgICA8IS0tIE9yZyBJbmZvIC0tPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW5mb1RpdGxlJyksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIEBpZiAoY2FuRWRpdE9yZygpKSB7XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImVkaXRCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uRWRpdCgpXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNCB9XCIgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAob3JnRXJyb3JTdGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwib3JnRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAob3JnKCk7IGFzIG8pIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoby5sb2dvVXJsICYmICFsb2dvRmFpbGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWluZm8tbG9nb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZy1sb2dvLWltZ1wiIFtzcmNdPVwiby5sb2dvVXJsXCIgW2FsdF09XCJvLm5hbWVcIiAoZXJyb3IpPVwibG9nb0ZhaWxlZC5zZXQodHJ1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb05hbWUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlXCI+e3sgby5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby1sYWJlbFwiPnt7IHR0KCdpbmZvRGVzY3JpcHRpb24nKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlIG9yZy1pbmZvLXZhbHVlLS1tdXRlZFwiPnt7IG8uZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWluZm8tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9QbGFuJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFuLWJhZGdlIHBsYW4tYmFkZ2UtLXt7IG8ucGxhbiB9fVwiPnt7IHBsYW5MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby1sYWJlbFwiPnt7IHR0KCdpbmZvVHlwZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tdmFsdWVcIj57eyBvLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd01lbWJlcnMpIHtcbiAgICAgICAgICA8IS0tIE1lbWJlcnMgLS0+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzVGl0bGUnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICBAaWYgKG1lbWJlcnNMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogMyB9XCIgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVtYmVyc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cIm1lbWJlcnNFcnJvclN0YXRlKCkhXCIgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVtYmVycygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ21lbWJlcnNFbXB0eScpLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVtYmVycy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChtIG9mIHZpc2libGVNZW1iZXJzKCk7IHRyYWNrIG0udXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtbWVtYmVyLWNhcmRcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInb3JnLW1lbWJlci0nICsgbS51c2VySWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbS51c2VySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IG0uaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6IG0uZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6IG0uYXZhdGFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZUxhYmVsOiBtLnJvbGVzWzBdID8gcm9sZUxhYmVsKG0ucm9sZXNbMF0pIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25BcmlhTGFiZWw6IHR0KCd2aWV3TWVtYmVyQ3RhJyksXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aW9uKT1cIm9uVmlld01lbWJlcihtKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmICghc2hvd0FsbE1lbWJlcnMoKSAmJiBtZW1iZXJzKCkubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgKGNsaWNrKT1cInNob3dBbGxNZW1iZXJzLnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB0dCgnbWVtYmVyc1Nob3dNb3JlJykgfX0gKHt7IG1lbWJlcnMoKS5sZW5ndGggLSAzIH19KVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd0FsbE1lbWJlcnMoKSAmJiBtZW1iZXJzTmV4dFRva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtZW1iZXJzLXNob3ctbW9yZVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nTW9yZU1lbWJlcnMoKVwiIChjbGljayk9XCJsb2FkTW9yZU1lbWJlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBsb2FkaW5nTW9yZU1lbWJlcnMoKSA/ICfigKYnIDogdHQoJ21lbWJlcnNTaG93TW9yZScpIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93Um9sZXMpIHtcbiAgICAgICAgICA8IS0tIFJvbGVzIHkgcGVybWlzb3M6IHNlY2Npb24gZXhwbGljYXRpdmEsIGRldGFsbGUgZW4gbGEgcnV0YSBkZSBwZXJtaXNvcyAtLT5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3JvbGVzU2VjdGlvblRpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdyb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwidmlld1Blcm1pc3Npb25zQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblZpZXdQZXJtaXNzaW9ucygpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd05ld09yZ0N0YSkge1xuICAgICAgICAgIDwhLS0gTnVldmEgb3JnIENUQSAtLT5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx2YWwtY3RhLWNhcmQgW3Byb3BzXT1cIm5ld09yZ0N0YVByb3BzKClcIiAob25BY3Rpb24pPVwib25OZXdPcmcoKVwiIC8+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dJbnZpdGUpIHtcbiAgICAgICAgICA8IS0tIEludml0ZTogc29sbyBhZG1pbisgKGdhdGluZyBSQkFDIGludGVybm8pIC0tPlxuICAgICAgICAgIDxzZWN0aW9uICp2YWxIYXNQZXJtaXNzaW9uPVwiJ3VzZXJzOionXCIgY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCIgZGF0YS10ZXN0aWQ9XCJvcmctaW52aXRlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdpbnZpdGVDdGFUaXRsZScpLFxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2ludml0ZUN0YUhpbnQnKSxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJvcGVuSW52aXRlQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbk9wZW5JbnZpdGUoKVwiIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5JbXBvcnRCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkltcG9ydCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0FwaUtleXMpIHtcbiAgICAgICAgICA8IS0tIEFQSSBLZXlzOiBzZWNjacOzbiBwcm9waWEuIEludGVncmFjaW9uZXMgTTJNIChpbXBvcnQgZGUgbWllbWJyb3MsIGV0Yy4pLiAtLT5cbiAgICAgICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIidhcGkta2V5czpyZWFkJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWFwaWtleXMtc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX3RleHRcIj5cbiAgICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwieyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uVGl0bGUnKSB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwieyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UsIGNvbnRlbnQ6IHR0KCdhcGlLZXlzU2VjdGlvbkhpbnQnKSB9XCIgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3JnLW1vcmUtaW5mby1saW5rXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFwaUtleXNJbmZvKClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHR0KCdhcGlLZXlzTW9yZUluZm8nKSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3BlbkFwaUtleXNCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkFwaUtleXMoKVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dUcmFuc2Zlck93bmVyc2hpcCAmJiBpc093bmVyKCkpIHtcbiAgICAgICAgICA8IS0tIFRyYW5zZmVyIG93bmVyc2hpcDogc29sbyBvd25lciAoZ2F0aW5nIFJCQUMgaW50ZXJubykgLS0+XG4gICAgICAgICAgPHZhbC1kYW5nZXItc2VjdGlvbiBbcHJvcHNdPVwieyB0aXRsZTogdHQoJ3RyYW5zZmVyVGl0bGUnKSB9XCIgZGF0YS10ZXN0aWQ9XCJvcmctdHJhbnNmZXItc2VjdGlvblwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3RyYW5zZmVySGludCcpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAodHJhbnNmZXJhYmxlTWVtYmVycygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInRyYW5zZmVyQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbk9wZW5UcmFuc2ZlcigpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzRW1wdHknKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdmFsLWRhbmdlci1zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dMZWF2ZSkge1xuICAgICAgICAgIDwhLS0gTGVhdmUgb3JnIC0tPlxuICAgICAgICAgIDx2YWwtZGFuZ2VyLXNlY3Rpb24gW3Byb3BzXT1cInsgdGl0bGU6IHR0KCdsZWF2ZVRpdGxlJykgfVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogaXNPd25lcigpID8gdHQoJ2xlYXZlT3duZXJIaW50JykgOiB0dCgnbGVhdmVIaW50JyksXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJsZWF2ZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25MZWF2ZSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdmFsLWRhbmdlci1zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dEZWxldGVPcmcgJiYgaXNPd25lcigpKSB7XG4gICAgICAgICAgPCEtLSBEZWxldGUgb3JnOiBzb2xvIG93bmVyLCBhY2Npw7NuIG3DoXMgZGVzdHJ1Y3RpdmEgLS0+XG4gICAgICAgICAgPHZhbC1kYW5nZXItc2VjdGlvbiBbcHJvcHNdPVwieyB0aXRsZTogdHQoJ2RlbGV0ZVRpdGxlJykgfVwiIGRhdGEtdGVzdGlkPVwib3JnLWRlbGV0ZS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cInsgY29udGVudDogdHQoJ2RlbGV0ZUhpbnQnKSwgc2l6ZTogJ21lZGl1bScsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJkZWxldGVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uRGVsZXRlKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC92YWwtZGFuZ2VyLXNlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGlzRGVidWcpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb24gcmJhYy1kZWJ1Z1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdSQkFDIChsaXZlKScsXG4gICAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19ib2R5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX2xhYmVsXCI+Um9sZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX192YWx1ZVwiPnt7IGF1dGgucm9sZXMoKS5qb2luKCcsICcpIHx8ICfigJQnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJiYWMtZGVidWdfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fbGFiZWxcIj5QZXJtaXNvczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX3ZhbHVlIHJiYWMtZGVidWdfX3ZhbHVlLS1wZXJtc1wiPnt7XG4gICAgICAgICAgICAgICAgICBhdXRoLnBlcm1pc3Npb25zKCkuam9pbignLCAnKSB8fCAn4oCUJ1xuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLXBlcm1pc3Npb25zLW1vZGFsXG4gICAgICAgICAgW2lzT3Blbl09XCJwZXJtaXNzaW9uc09wZW4oKVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7IGkxOG5OYW1lc3BhY2U6IHJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZSB9XCJcbiAgICAgICAgICAoZGlzbWlzc2VkKT1cInBlcm1pc3Npb25zT3Blbi5zZXQoZmFsc2UpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHZhbC1jcmVhdGUtb3JnLW1vZGFsXG4gICAgICAgICAgW2lzT3Blbl09XCJjcmVhdGVPcmdNb2RhbE9wZW4oKVwiXG4gICAgICAgICAgKGRpc21pc3NlZCk9XCJjcmVhdGVPcmdNb2RhbE9wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAgICAgKGNyZWF0ZWQpPVwib25PcmdDcmVhdGVkKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC92YWwtY29udGFpbmVyPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAvKiBBbmNobyB5IGNyZWNpbWllbnRvIGNvbiBlbCByYWlsIGNvbGFwc2FkbyBsb3MgZGEgdmFsLWNvbnRhaW5lciAoc2l6ZVxuICAgICAgICAgJ21kJyksIG5vIENTUyBsb2NhbDogdmVyIGNvbnRhaW5lci5jb21wb25lbnQuc2Nzcy4gKi9cbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLm9yZy1tb3JlLWluZm8tbGluayB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogNHB4IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24taGVhZGVyLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWJvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zLS1nYXAge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgfVxuICAgICAgLmludml0ZS1jdGFfX3RleHQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhX19hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tY2FyZCB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tbG9nbyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiA4cHggMCAxNnB4O1xuICAgICAgfVxuICAgICAgLm9yZy1sb2dvLWltZyB7XG4gICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICB9XG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLm9yZy1pbmZvLWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLm9yZy1pbmZvLWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5vcmctaW5mby1jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1maWVsZCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1maWVsZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLXZhbHVlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLXZhbHVlLS1tdXRlZCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIH1cbiAgICAgIC5wbGFuLWJhZGdlIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIHBhZGRpbmc6IDNweCAxMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tZnJlZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgI2Q3ZDhkYSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tcHJvIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH1cbiAgICAgIC5wbGFuLWJhZGdlLS1lbnRlcnByaXNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y1YzU0MjtcbiAgICAgICAgY29sb3I6ICMyMjI7XG4gICAgICB9XG4gICAgICAubWVtYmVycy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAubWVtYmVycy1zaG93LW1vcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBwYWRkaW5nOiA4cHggMDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnIHtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19sYWJlbCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgICAgbWluLXdpZHRoOiA3MnB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX192YWx1ZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX192YWx1ZS0tcGVybXMge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAvKiBMYXMgdHJlcyB6b25hcyBkZSBwZWxpZ3JvICh0cmFuc2ZlcmlyLCBzYWxpciwgZWxpbWluYXIpIHZpdmVuIGVuXG4gICAgICAgICB2YWwtZGFuZ2VyLXNlY3Rpb24g4oCUIHN1cyBlc3RpbG9zIHlhIG5vIHNlIHJlcGl0ZW4gYWPDoS4gU29sbyBlbFxuICAgICAgICAgZXNwYWNpYWRvIGVudHJlIGVsbGFzIHkgY29uIGxhIHNlY2Npw7NuIG5vcm1hbCBwcmV2aWEgZXMgcHJvcGlvIGRlXG4gICAgICAgICBlc3RhIHZpc3RhLCBwb3JxdWUgYWPDoSB2YW4gdmFyaWFzIHNlZ3VpZGFzLiAqL1xuICAgICAgdmFsLWRhbmdlci1zZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luOiAwIC00cHg7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIHZhbC1kYW5nZXItc2VjdGlvbixcbiAgICAgIHZhbC1kYW5nZXItc2VjdGlvbiArIHZhbC1kYW5nZXItc2VjdGlvbixcbiAgICAgIHZhbC1kYW5nZXItc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBPcmdhbml6YXRpb25WaWV3Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICByZWFkb25seSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTd2l0Y2ggPSBpbmplY3QoT3JnU3dpdGNoU2VydmljZSk7XG4gIHByaXZhdGUgb3JnU2VydmljZSA9IGluamVjdChPcmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtb2RhbFNlcnZpY2UgPSBpbmplY3QoTW9kYWxTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlKTtcbiAgcHJpdmF0ZSBjb25maXJtRGlhbG9nID0gaW5qZWN0KENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGlzRGVidWcgPSBpc0Rldk1vZGUoKTtcblxuICAvKipcbiAgICogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpLiBTaSBubyBzZSBwYXNhLCBzZSBjYWUgYWwgcm91dGUgZGF0YVxuICAgKiBgb3JnYW5pemF0aW9uQ29uZmlnYCAocG9ibGFkbyBwb3IgYHByb3ZpZGVWYWx0ZWNoT3JnYW5pemF0aW9uUm91dGVzYCkuXG4gICAqIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvbiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IE9yZ2FuaXphdGlvblZpZXdDb25maWc7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxcbiAgICBSZXF1aXJlZDxcbiAgICAgIE9taXQ8XG4gICAgICAgIE9yZ2FuaXphdGlvblZpZXdDb25maWcsXG4gICAgICAgICdvbk9yZ0VkaXRlZCcgfCAnb25NZW1iZXJJbnZpdGVkJyB8ICdvbk93bmVyc2hpcFRyYW5zZmVycmVkJyB8ICdvbkxlZnRPcmcnIHwgJ29uT3JnRGVsZXRlZCcgfCAnb25PcmdDcmVhdGVkJ1xuICAgICAgPlxuICAgID4gJlxuICAgICAgUGljazxcbiAgICAgICAgT3JnYW5pemF0aW9uVmlld0NvbmZpZyxcbiAgICAgICAgJ29uT3JnRWRpdGVkJyB8ICdvbk1lbWJlckludml0ZWQnIHwgJ29uT3duZXJzaGlwVHJhbnNmZXJyZWQnIHwgJ29uTGVmdE9yZycgfCAnb25PcmdEZWxldGVkJyB8ICdvbk9yZ0NyZWF0ZWQnXG4gICAgICA+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydvcmdhbml6YXRpb25Db25maWcnXSA/PyB7fSkgYXMgT3JnYW5pemF0aW9uVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IE9yZ2FuaXphdGlvblZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93SW5mbzogbWVyZ2VkLnNob3dJbmZvID8/IHRydWUsXG4gICAgICBzaG93TWVtYmVyczogbWVyZ2VkLnNob3dNZW1iZXJzID8/IHRydWUsXG4gICAgICBzaG93Um9sZXM6IG1lcmdlZC5zaG93Um9sZXMgPz8gdHJ1ZSxcbiAgICAgIHNob3dJbnZpdGU6IG1lcmdlZC5zaG93SW52aXRlID8/IHRydWUsXG4gICAgICBzaG93TmV3T3JnQ3RhOiBtZXJnZWQuc2hvd05ld09yZ0N0YSA/PyB0cnVlLFxuICAgICAgc2hvd1RyYW5zZmVyT3duZXJzaGlwOiBtZXJnZWQuc2hvd1RyYW5zZmVyT3duZXJzaGlwID8/IHRydWUsXG4gICAgICBzaG93TGVhdmU6IG1lcmdlZC5zaG93TGVhdmUgPz8gdHJ1ZSxcbiAgICAgIHNob3dEZWxldGVPcmc6IG1lcmdlZC5zaG93RGVsZXRlT3JnID8/IHRydWUsXG4gICAgICBzaG93QXBpS2V5czogbWVyZ2VkLnNob3dBcGlLZXlzID8/IHRydWUsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICAgIHZpZXdQZXJtaXNzaW9uc1JvdXRlOiBtZXJnZWQudmlld1Blcm1pc3Npb25zUm91dGUgPz8gREVGQVVMVF9WSUVXX1BFUk1JU1NJT05TX1JPVVRFLFxuICAgICAgYXBpS2V5c1JvdXRlOiBtZXJnZWQuYXBpS2V5c1JvdXRlID8/IERFRkFVTFRfQVBJX0tFWVNfUk9VVEUsXG4gICAgICBsZWF2ZVJlZGlyZWN0Um91dGU6IG1lcmdlZC5sZWF2ZVJlZGlyZWN0Um91dGUgPz8gREVGQVVMVF9MRUFWRV9SRURJUkVDVF9ST1VURSxcbiAgICAgIG9uT3JnRWRpdGVkOiBtZXJnZWQub25PcmdFZGl0ZWQsXG4gICAgICBvbk1lbWJlckludml0ZWQ6IG1lcmdlZC5vbk1lbWJlckludml0ZWQsXG4gICAgICBvbk93bmVyc2hpcFRyYW5zZmVycmVkOiBtZXJnZWQub25Pd25lcnNoaXBUcmFuc2ZlcnJlZCxcbiAgICAgIG9uTGVmdE9yZzogbWVyZ2VkLm9uTGVmdE9yZyxcbiAgICAgIG9uT3JnRGVsZXRlZDogbWVyZ2VkLm9uT3JnRGVsZXRlZCxcbiAgICAgIG9uT3JnQ3JlYXRlZDogbWVyZ2VkLm9uT3JnQ3JlYXRlZCxcbiAgICB9O1xuICB9KTtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4gcmVzdWVsdG8gKGNhcHR1cmFkbyBwYXJhIGxsYW1hZGFzIG5vLXJlYWN0aXZhcykuICovXG4gIHByaXZhdGUgZ2V0IG5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5pMThuTmFtZXNwYWNlO1xuICB9XG5cbiAgcmVhZG9ubHkgb3JnID0gc2lnbmFsPE9yZ2FuaXphdGlvbiB8IG51bGw+KG51bGwpO1xuICAvKiogTG9nbyBkZSBvcmcgcXVlIGZhbGzDsyBhbCBjYXJnYXIg4oaSIG9jdWx0YSBlbCBibG9xdWUgKGNhZSBhIGxhIGNhcmQgc2luIGxvZ28pLiAqL1xuICByZWFkb25seSBsb2dvRmFpbGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxlYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBwZXJtaXNzaW9uc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBjcmVhdGVPcmdNb2RhbE9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0xvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBvcmdFcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5vcmdMb2FkRXJyb3IoKTtcbiAgICBpZiAoIWVycikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAgICAgIHRpdGxlOiB7IG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVUaXRsZScpLCBlcnJvcjogdGhpcy50dCgnZXJyb3JUaXRsZScpIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lSGludCcpLFxuICAgICAgICBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHJldHJ5TGFiZWw6IHRoaXMudHQoJ3JldHJ5JyksXG4gICAgICBvblJldHJ5OiAoKSA9PiB0aGlzLmxvYWRPcmcoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLmxvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVtYmVycyA9IHNpZ25hbDxNZW1iZXJEZXRhaWxbXT4oW10pO1xuICByZWFkb25seSBtZW1iZXJzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVtYmVyc0xvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBtZW1iZXJzRXJyb3JTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YSB8IG51bGw+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGVyciA9IHRoaXMubWVtYmVyc0xvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE1lbWJlcnMoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLm1lbWJlcnNMb2FkaW5nKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG1lbWJlcnNOZXh0VG9rZW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGxvYWRpbmdNb3JlTWVtYmVycyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dBbGxNZW1iZXJzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgdmlzaWJsZU1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5zaG93QWxsTWVtYmVycygpID8gdGhpcy5tZW1iZXJzKCkgOiB0aGlzLm1lbWJlcnMoKS5zbGljZSgwLCAzKSkpO1xuICByZWFkb25seSB0cmFuc2ZlcnJpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBkZWxldGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGF2YWlsYWJsZVJvbGVzID0gc2lnbmFsPE9yZ1JvbGVbXT4oU1lTVEVNX1JPTEVfREVGQVVMVFMpO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ0lkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLmF1dGgudXNlcigpIGFzIHtcbiAgICAgIGFjdGl2ZU9yZ0lkPzogc3RyaW5nO1xuICAgICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICAgIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHVzZXJJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXV0aC51c2VyKCk/LnVzZXJJZCA/PyAnJyk7XG5cbiAgcmVhZG9ubHkgaXNPd25lciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvID0gdGhpcy5vcmcoKTtcbiAgICBjb25zdCB1aWQgPSB0aGlzLnVzZXJJZCgpO1xuICAgIHJldHVybiAhIW8gJiYgISF1aWQgJiYgby5vd25lcklkID09PSB1aWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNhbkVkaXRPcmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzT3duZXIoKSB8fCB0aGlzLmF1dGguaGFzUGVybWlzc2lvbignb3JnOm1hbmFnZScpKTtcblxuICByZWFkb25seSBjYW5NYW5hZ2VNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzT3duZXIoKSkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgdWlkID0gdGhpcy51c2VySWQoKTtcbiAgICBjb25zdCBtZSA9IHRoaXMubWVtYmVycygpLmZpbmQobSA9PiBtLnVzZXJJZCA9PT0gdWlkKTtcbiAgICBpZiAoIW1lKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG1lLnJvbGVzLnNvbWUociA9PiByID09PSAnYWRtaW4nIHx8IHIgPT09ICdzdXBlcl9hZG1pbicpO1xuICB9KTtcblxuICByZWFkb25seSBwYWdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IHBhZ2VEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VEZXNjcmlwdGlvbicpKTtcblxuICByZWFkb25seSBwbGFuTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcGxhbiA9IHRoaXMub3JnKCk/LnBsYW47XG4gICAgaWYgKHBsYW4gPT09ICdwcm8nKSByZXR1cm4gdGhpcy50dCgncGxhblBybycpO1xuICAgIGlmIChwbGFuID09PSAnZW50ZXJwcmlzZScpIHJldHVybiB0aGlzLnR0KCdwbGFuRW50ZXJwcmlzZScpO1xuICAgIHJldHVybiB0aGlzLnR0KCdwbGFuRnJlZScpO1xuICB9KTtcblxuICByZWFkb25seSBzd2l0Y2hPcmdTZWN0aW9uUHJvcHMgPSBjb21wdXRlZDxTZWN0aW9uSGVhZGVyTWV0YWRhdGE+KCgpID0+ICh7XG4gICAgdGl0bGU6IHRoaXMucGFnZVRpdGxlKCksXG4gICAgdGl0bGVTaXplOiAncGFnZScsXG4gICAgYWN0aW9uOiB7XG4gICAgICB0ZXh0OiB0aGlzLnR0KCdzd2l0Y2hPcmdDdGEnKSxcbiAgICAgIGljb246IHsgbmFtZTogJ3N3YXAtaG9yaXpvbnRhbC1vdXRsaW5lJywgc2xvdDogJ3N0YXJ0JyB9LFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdG9rZW46ICdvcmctc3dpdGNoJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9LFxuICAgIGluZm9MaW5rOiB7IGxhYmVsOiB0aGlzLnR0KCdvcmdzTW9yZUluZm8nKSwgdG9rZW46ICdvcmctbW9yZS1pbmZvJyB9LFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgZWRpdEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnZWRpdEN0YScpLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdzbWFsbCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gIH0pKTtcblxuICByZWFkb25seSBsZWF2ZUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnbGVhdmVDdGEnKSxcbiAgICB0b2tlbjogJ29yZy1sZWF2ZScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLmlzT3duZXIoKSB8fCB0aGlzLmxlYXZpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJhYmxlTWVtYmVycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWVtYmVycygpLmZpbHRlcihtID0+IG0udXNlcklkICE9PSB0aGlzLnVzZXJJZCgpKSk7XG5cbiAgcmVhZG9ubHkgdmlld1Blcm1pc3Npb25zQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyb2xlc1ZpZXdQZXJtcycpLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICB0b2tlbjogJ29yZy12aWV3LXBlcm1pc3Npb25zJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHRyYW5zZmVyQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCd0cmFuc2ZlckN0YScpLFxuICAgIHRva2VuOiAnb3JnLXRyYW5zZmVyLXN1Ym1pdCcsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLnRyYW5zZmVycmluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSBvcGVuSW52aXRlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdpbnZpdGVPcGVuJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnc29saWQnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5JbXBvcnRCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2ltcG9ydE9wZW4nKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gIH0pKTtcblxuICByZWFkb25seSBvcGVuQXBpS2V5c0J1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnYXBpS2V5c09wZW4nKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gIH0pKTtcblxuICByZWFkb25seSBkZWxldGVCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2RlbGV0ZUN0YScpLFxuICAgIHRva2VuOiAnb3JnLWRlbGV0ZScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLmRlbGV0aW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG5ld09yZ0N0YVByb3BzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICB0aXRsZTogdGhpcy50dCgnb3Jnc05ld1F1ZXN0aW9uJyksXG4gICAgZGVzY3JpcHRpb246IHRoaXMudHQoJ29yZ3NOZXdIaW50JyksXG4gICAgcGFkZGluZzogJzE2cHgnLFxuICAgIGJvcmRlclJhZGl1czogJzE0cHgnLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHBvc2l0aW9uOiAncmlnaHQnLFxuICAgICAgY29sdW1uZWQ6IGZhbHNlLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnb3Jnc05ld0N0YScpLFxuICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICB0b2tlbjogJ29yZy1uZXcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIEJ1dHRvbkdyb3VwTWV0YWRhdGEsXG4gIH0pKTtcblxuICAvKiogR3VhcmRhIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGRpc3Bhcm8gZGVsIGVmZmVjdCAoZXZpdGEgZG9ibGUgY2FyZ2EpLiAqL1xuICBwcml2YXRlIGxhc3RMb2FkZWRPcmdJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbnMgPSB0aGlzLm5zO1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKG5zLCBPUkdBTklaQVRJT05fVklFV19JMThOKTtcbiAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCBucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcblxuICAgIC8vIEF1dG8tcmVsb2FkIGVuIG9yZy1zd2l0Y2g6IHJlYWNjaW9uYSBhIGFjdGl2ZU9yZ0lkKCkgeSByZWNhcmdhIG9yZyArIG1pZW1icm9zXG4gICAgLy8gY3VhbmRvIGVsIHVzdWFyaW8gY2FtYmlhIGRlIG9yZ2FuaXphY2nDs24gYWN0aXZhIG1pZW50cmFzIGxhIHZpc3RhIGVzdMOhXG4gICAgLy8gbW9udGFkYS4gQ3VicmUgdGFtYmnDqW4gbGEgY2FyZ2EgaW5pY2lhbCDigJQgYGxhc3RMb2FkZWRPcmdJZGAgZXZpdGEgcmVjYXJnYXJcbiAgICAvLyBkb3MgdmVjZXMgZWwgbWlzbW8gaWQgKHAuZWouIHNpIGVsIGVmZmVjdCByZS1jb3JyZSBwb3Igb3RyYSBkZXBlbmRlbmNpYSkuXG4gICAgLy8gYGFsbG93U2lnbmFsV3JpdGVzYCBwb3JxdWUgbGFzIGxvYWQgZm5zIGVzY3JpYmVuIHNpZ25hbHMgc8OtbmNyb25hbWVudGVcbiAgICAvLyAobG9hZGluZy9lcnJvci90b2tlbikg4oCUIEFuZ3VsYXIgMTggYmxvcXVlYSB3cml0ZXMgZW4gZWZmZWN0IHNpbiBlbCBmbGFnLlxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgICAgIGlmIChvcmdJZCA9PT0gdGhpcy5sYXN0TG9hZGVkT3JnSWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXN0TG9hZGVkT3JnSWQgPSBvcmdJZDtcbiAgICAgICAgdGhpcy5sb2FkT3JnKCk7XG4gICAgICAgIHRoaXMubG9hZE1lbWJlcnMoKTtcbiAgICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgY29ubmVjdFBhZ2VSZWZyZXNoKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmxvYWRPcmcoKSwgdGhpcy5sb2FkTWVtYmVycygpXSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkVkaXQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBFZGl0T3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBvcmc6IHRoaXMub3JnKCksXG4gICAgICAgIG9uU3VjY2VzczogKHVwZGF0ZWQ6IE9yZ2FuaXphdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMub3JnLnNldCh1cGRhdGVkKTtcbiAgICAgICAgICB0aGlzLm9yZ1N3aXRjaC5ub3RpZnlPcmdEYXRhVXBkYXRlZCh1cGRhdGVkKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25PcmdFZGl0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uTGVhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNPd25lcigpIHx8IHRoaXMubGVhdmluZygpKSByZXR1cm47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtRGlhbG9nLmNvbmZpcm1EZXN0cnVjdGl2ZSh7XG4gICAgICB0aXRsZTogdGhpcy50dCgnbGVhdmVUaXRsZScpLFxuICAgICAgbWVzc2FnZTogdGhpcy50dCgnbGVhdmVDb25maXJtJyksXG4gICAgICBjb25maXJtQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2xlYXZlQ3RhJykgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmxlYXZpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UubGVhdmVPcmcob3JnSWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2xlYXZlU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2ZnID0gdGhpcy5yZXNvbHZlZENvbmZpZygpO1xuICAgICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybChjZmcubGVhdmVSZWRpcmVjdFJvdXRlKTtcbiAgICAgIGNmZy5vbkxlZnRPcmc/LigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLmxlYXZlJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdsZWF2ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxlYXZpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNPd25lcigpIHx8IHRoaXMuZGVsZXRpbmcoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ2RlbGV0ZVRpdGxlJyksXG4gICAgICBtZXNzYWdlOiB0aGlzLnR0KCdkZWxldGVDb25maXJtJyksXG4gICAgICBjb25maXJtQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2RlbGV0ZUN0YScpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50dCgnY2FuY2VsQ3RhJykgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdC5jb25maXJtZWQpIHJldHVybjtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5kZWxldGluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnU2VydmljZS5kZWxldGVPcmcob3JnSWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7IG1lc3NhZ2U6IHRoaXMudHQoJ2RlbGV0ZVN1Y2Nlc3MnKSwgY29sb3I6ICdkYXJrJywgZHVyYXRpb246IDM1MDAgfSk7XG4gICAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCk7XG4gICAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKGNmZy5sZWF2ZVJlZGlyZWN0Um91dGUpO1xuICAgICAgY2ZnLm9uT3JnRGVsZXRlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24uZGVsZXRlJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdkZWxldGVFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kZWxldGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG9uTmV3T3JnKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlT3JnTW9kYWxPcGVuLnNldCh0cnVlKTtcbiAgfVxuXG4gIG9uT3JnQ3JlYXRlZChuZXdPcmc6IE9yZ2FuaXphdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlT3JnTW9kYWxPcGVuLnNldChmYWxzZSk7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uT3JnQ3JlYXRlZD8uKG5ld09yZyk7XG4gIH1cblxuICBvbk9wZW5JbnZpdGUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBJbnZpdGVNZW1iZXJNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGV4aXN0aW5nTWVtYmVySWRzOiB0aGlzLm1lbWJlcnMoKS5tYXAobSA9PiBtLnVzZXJJZCksXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZE1lbWJlcnMoKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25NZW1iZXJJbnZpdGVkPy4oKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbk9wZW5JbXBvcnQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBNZW1iZXJJbXBvcnRNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGF2YWlsYWJsZVJvbGVzOiB0aGlzLmF2YWlsYWJsZVJvbGVzKCksXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZE1lbWJlcnMoKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25NZW1iZXJJbnZpdGVkPy4oKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbk9wZW5BcGlLZXlzKCk6IHZvaWQge1xuICAgIC8vIExhcyBBUEkgS2V5cyBhaG9yYSB2aXZlbiBlbiBzdSBwcm9waWEgdmlzdGEgKGB2YWwtYXBpLWtleXMtdmlld2ApOiBjcmVhclxuICAgIC8vIGFycmliYSwgbGlzdGEgYWJham8gY29uIGNyZWFkb3IvZmVjaGEuIE5hdmVnYW1vcyBlbiB2ZXogZGUgYWJyaXIgdW4gbW9kYWwuXG4gICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybCh0aGlzLnJlc29sdmVkQ29uZmlnKCkuYXBpS2V5c1JvdXRlKTtcbiAgfVxuXG4gIC8vIFwiTcOhcyBpbmZvcm1hY2nDs25cIiBzb2JyZSBvcmdhbml6YWNpb25lcyDigJQgbWlzbW8gc2hlZXQgZXhwbGljYXRpdm8gcXVlIG11ZXN0cmFcbiAgb25IZWFkZXJBY3Rpb24odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0b2tlbiA9PT0gJ29yZy1zd2l0Y2gnKSB0aGlzLm9uU3dpdGNoT3JnKCk7XG4gICAgZWxzZSBpZiAodG9rZW4gPT09ICdvcmctbW9yZS1pbmZvJykgdGhpcy5vbk9yZ0luZm8oKTtcbiAgfVxuXG4gIC8vIGFjY291bnQtdmlldyBzaW4gb3JnLCBwZXJvIGRpc3BvbmlibGUgc2llbXByZSAodG9kbyB1c2VyIHRpZW5lIG9yZyBwb3IgZGVmZWN0bykuXG4gIG9uU3dpdGNoT3JnKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogJ1NldHRpbmdzLlN3aXRjaE9yZycsXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHsgYnJlYWtwb2ludHM6IFswLCAwLjg1XSwgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuODUsIHNob3dIYW5kbGU6IHRydWUgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3JnSW5mbygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xuICAgICAgY29tcG9uZW50OiBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICB0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9UaXRsZScpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9TdWJ0aXRsZScpLFxuICAgICAgICBib2R5OiB0aGlzLnR0KCdvcmdzSW5mb0NvbnRlbnQnKSxcbiAgICAgICAgY2xvc2VMYWJlbDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICBjbG9zZVByb3BzOiB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHsgYnJlYWtwb2ludHM6IFswLCAwLjkyXSwgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuOTIsIHNob3dIYW5kbGU6IHRydWUgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFwiTcOhcyBpbmZvcm1hY2nDs25cIiBkZSBsYSBzZWNjacOzbiBJbnRlZ3JhY2lvbmVzIOKAlCBhYnJlIHVuIHNoZWV0IEVYUExJQ0FUSVZPXG4gIC8vIChhcnRpY2xlLXN0eWxlLCBzaW4gbGFzIGZlYXR1cmUtY2FyZHMgZGUgb3JnKSwgTk8gZWwgbW9kYWwgZGUgZ2VzdGnDs24gZGUgQVBJXG4gIC8vIGtleXMuIExhIGdlc3Rpw7NuIHNlIGFicmUgY29uIGVsIGJvdMOzbiBcIkdlc3Rpb25hclwiIChvbk9wZW5BcGlLZXlzKS5cbiAgb25BcGlLZXlzSW5mbygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xuICAgICAgY29tcG9uZW50OiBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBzaG93RmVhdHVyZXM6IGZhbHNlLFxuICAgICAgICBmZWF0dXJlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdjb2RlLXNsYXNoLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlQXV0b1RpdGxlJyksXG4gICAgICAgICAgICBkZXNjOiB0aGlzLnR0KCdhcGlLZXlzRmVhdHVyZUF1dG9EZXNjJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnc2hpZWxkLWNoZWNrbWFyay1vdXRsaW5lJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzRmVhdHVyZVBlcm1zVGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlUGVybXNEZXNjJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnd2FybmluZy1vdXRsaW5lJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzRmVhdHVyZVNlY3JldFRpdGxlJyksXG4gICAgICAgICAgICBkZXNjOiB0aGlzLnR0KCdhcGlLZXlzRmVhdHVyZVNlY3JldERlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0aXRsZTogdGhpcy50dCgnYXBpS2V5c0luZm9UaXRsZScpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy50dCgnYXBpS2V5c0luZm9TdWJ0aXRsZScpLFxuICAgICAgICBib2R5OiB0aGlzLnR0KCdhcGlLZXlzSW5mb0NvbnRlbnQnKSxcbiAgICAgICAgY2xvc2VMYWJlbDogdGhpcy50dCgnYXBpS2V5c0luZm9DbG9zZScpLFxuICAgICAgICBjbG9zZVByb3BzOiB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnYXBpS2V5c0luZm9DbG9zZScpLFxuICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHsgYnJlYWtwb2ludHM6IFswLCAwLjkyXSwgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuOTIsIHNob3dIYW5kbGU6IHRydWUgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uVmlld1Blcm1pc3Npb25zKCk6IHZvaWQge1xuICAgIHRoaXMucGVybWlzc2lvbnNPcGVuLnNldCh0cnVlKTtcbiAgfVxuXG4gIG9uT3BlblRyYW5zZmVyKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG1lbWJlcnM6IHRoaXMudHJhbnNmZXJhYmxlTWVtYmVycygpLFxuICAgICAgICBvbkNvbmZpcm06IChuZXdPd25lcklkOiBzdHJpbmcpID0+IHZvaWQgdGhpcy5vblRyYW5zZmVyKG5ld093bmVySWQpLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uVHJhbnNmZXIobmV3T3duZXJJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuZXdPd25lcklkIHx8IHRoaXMudHJhbnNmZXJyaW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnR0KCd0cmFuc2ZlclRpdGxlJyksXG4gICAgICBtZXNzYWdlOiB0aGlzLnR0KCd0cmFuc2ZlckNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgndHJhbnNmZXJDdGEnKSB9LFxuICAgICAgY2FuY2VsQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2NhbmNlbEN0YScpIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQuY29uZmlybWVkKSByZXR1cm47XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMudHJhbnNmZXJyaW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5vcmdTZXJ2aWNlLnRyYW5zZmVyT3duZXJzaGlwKG9yZ0lkLCBuZXdPd25lcklkKSk7XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCd0cmFuc2ZlclN1Y2Nlc3MnKSxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZHVyYXRpb246IDM1MDAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9hZE9yZygpO1xuICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uT3duZXJzaGlwVHJhbnNmZXJyZWQ/LigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLnRyYW5zZmVyJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICd0cmFuc2ZlckVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRyYW5zZmVycmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9yZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm9yZ0xvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZyhvcmdJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogb3JnID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ29GYWlsZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLm9yZy5zZXQob3JnKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMub3JnTG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbG9hZE1lbWJlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMubWVtYmVyc0xvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5tZW1iZXJzTmV4dFRva2VuLnNldChudWxsKTtcbiAgICB0aGlzLnNob3dBbGxNZW1iZXJzLnNldChmYWxzZSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZ01lbWJlcnMob3JnSWQsIHsgbGltaXQ6IDIwIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgY2FyZHMgPSBhd2FpdCB0aGlzLmVucmljaFdpdGhQcm9maWxlcyhyZXMubWVtYmVycyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzLnNldChjYXJkcyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTmV4dFRva2VuLnNldChyZXMubmV4dFRva2VuID8/IG51bGwpO1xuICAgICAgICAgIGlmIChyZXMucm9sZURpc3BsYXlOYW1lcykgdGhpcy5tZXJnZVJvbGVEaXNwbGF5TmFtZXMocmVzLnJvbGVEaXNwbGF5TmFtZXMpO1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRFcnJvci5zZXQoZXJyKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTW9yZU1lbWJlcnMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLm1lbWJlcnNOZXh0VG9rZW4oKTtcbiAgICBpZiAoIW9yZ0lkIHx8ICF0b2tlbiB8fCB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycygpKSByZXR1cm47XG4gICAgdGhpcy5sb2FkaW5nTW9yZU1lbWJlcnMuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnU2VydmljZS5nZXRPcmdNZW1iZXJzKG9yZ0lkLCB7IGxpbWl0OiAyMCwgbmV4dFRva2VuOiB0b2tlbiB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgcmVzID0+IHtcbiAgICAgICAgY29uc3QgY2FyZHMgPSBhd2FpdCB0aGlzLmVucmljaFdpdGhQcm9maWxlcyhyZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMubWVtYmVycy51cGRhdGUocHJldiA9PiBbLi4ucHJldiwgLi4uY2FyZHNdKTtcbiAgICAgICAgdGhpcy5tZW1iZXJzTmV4dFRva2VuLnNldChyZXMubmV4dFRva2VuID8/IG51bGwpO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgICAgY29udGV4dDogJ29yZ2FuaXphdGlvbi5sb2FkTW9yZU1lbWJlcnMnLFxuICAgICAgICAgIGZhbGxiYWNrS2V5OiAnbWVtYmVyc0Vycm9yJyxcbiAgICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9yZU1lbWJlcnMuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVucmljaFdpdGhQcm9maWxlcyhtZW1iZXJzOiBPcmdNZW1iZXJbXSk6IFByb21pc2U8TWVtYmVyRGV0YWlsW10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgbWVtYmVycy5tYXAoYXN5bmMgbSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IGF3YWl0IGdldERvYyhkb2ModGhpcy5maXJlc3RvcmUsIGBwcm9maWxlcy8ke20udXNlcklkfWApKTtcbiAgICAgICAgICBjb25zdCBwID0gc25hcC5leGlzdHMoKSA/IHNuYXAuZGF0YSgpIDoge307XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBoYW5kbGU6IHBbJ2hhbmRsZSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF2YXRhcjogKHBbJ2F2YXRhclVybCddID8/IHBbJ2F2YXRhciddKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYW1lOiAocFsnbmFtZSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgfHwgbS5uYW1lLFxuICAgICAgICAgIH0gYXMgTWVtYmVyRGV0YWlsO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbSBhcyBNZW1iZXJEZXRhaWw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAociA9PiAoci5zdGF0dXMgPT09ICdmdWxmaWxsZWQnID8gci52YWx1ZSA6ICh7fSBhcyBNZW1iZXJEZXRhaWwpKSk7XG4gIH1cblxuICBsb2FkUm9sZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMub3JnU2VydmljZS5saXN0T3JnUm9sZXMob3JnSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByb2xlcyA9PiB7XG4gICAgICAgIGlmIChyb2xlcy5sZW5ndGgpIHRoaXMuYXZhaWxhYmxlUm9sZXMuc2V0KHJvbGVzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByb2xlTGFiZWwocm9sZUlkT3JOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlUm9sZUxhYmVsRnJvbUxpc3Qocm9sZUlkT3JOYW1lLCB0aGlzLmF2YWlsYWJsZVJvbGVzKCksIHRoaXMuaTE4bi5sYW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVJvbGVEaXNwbGF5TmFtZXMoZGlzcGxheU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pik6IHZvaWQge1xuICAgIHRoaXMuYXZhaWxhYmxlUm9sZXMudXBkYXRlKHJvbGVzID0+IHtcbiAgICAgIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAocm9sZXMubWFwKHIgPT4gW3IubmFtZSwgcl0pKTtcbiAgICAgIGZvciAoY29uc3QgW3JvbGVOYW1lLCBsYWJlbHNdIG9mIE9iamVjdC5lbnRyaWVzKGRpc3BsYXlOYW1lcykpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBieU5hbWUuZ2V0KHJvbGVOYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgaWYgKCFleGlzdGluZy5kaXNwbGF5TmFtZSkgYnlOYW1lLnNldChyb2xlTmFtZSwgeyAuLi5leGlzdGluZywgZGlzcGxheU5hbWU6IGxhYmVscyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBieU5hbWUuc2V0KHJvbGVOYW1lLCB7IGlkOiByb2xlTmFtZSwgbmFtZTogcm9sZU5hbWUsIGRpc3BsYXlOYW1lOiBsYWJlbHMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBBcnJheS5mcm9tKGJ5TmFtZS52YWx1ZXMoKSk7XG4gICAgfSk7XG4gIH1cblxuICBvblZpZXdNZW1iZXIobWVtYmVyOiBNZW1iZXJEZXRhaWwpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IE1lbWJlckRldGFpbE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgbWVtYmVyLFxuICAgICAgICBvcmdJZDogdGhpcy5hY3RpdmVPcmdJZCgpLFxuICAgICAgICBhdmFpbGFibGVSb2xlczogdGhpcy5hdmFpbGFibGVSb2xlcygpLFxuICAgICAgICBjYW5NYW5hZ2U6IHRoaXMuY2FuTWFuYWdlTWVtYmVycygpICYmIG1lbWJlci51c2VySWQgIT09IHRoaXMudXNlcklkKCksXG4gICAgICAgIGlzU2VsZjogbWVtYmVyLnVzZXJJZCA9PT0gdGhpcy51c2VySWQoKSxcbiAgICAgICAgb25DaGFuZ2VkOiAoKSA9PiB0aGlzLmxvYWRNZW1iZXJzKCksXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19
|