@vendure/admin-ui 2.0.0-next.26 → 2.0.0-next.27

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.
@@ -1 +1 @@
1
- export declare const ADMIN_UI_VERSION = "2.0.0-next.26";
1
+ export declare const ADMIN_UI_VERSION = "2.0.0-next.27";
@@ -498,4 +498,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
498
498
  type: Component,
499
499
  args: [{ selector: 'vdr-product-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-flex-row\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['product', 'enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </div>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine || !variantsToCreateAreValid()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid || detailForm.pristine) && !assetsChanged() && !variantAssetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"product$ | async as product\">\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <clr-tabs>\r\n <clr-tab>\r\n <button clrTabLink (click)=\"navigateToTab('details')\">\r\n {{ 'catalog.product-details' | translate }}\r\n </button>\r\n <clr-tab-content *clrIfActive=\"(activeTab$ | async) === 'details'\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <section class=\"form-block\" formGroupName=\"product\">\r\n <ng-container *ngIf=\"!(isNew$ | async)\">\r\n <ng-container *vdrIfMultichannel>\r\n <vdr-form-item\r\n [label]=\"'common.channels' | translate\"\r\n *vdrIfDefaultChannelActive\r\n >\r\n <div class=\"flex channel-assignment\">\r\n <ng-container *ngFor=\"let channel of productChannels$ | async\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n (iconClick)=\"removeFromChannel(channel.id)\"\r\n >\r\n <vdr-channel-badge\r\n [channelCode]=\"channel.code\"\r\n ></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n <button class=\"btn btn-sm\" (click)=\"assignToChannel()\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </vdr-form-item>\r\n </ng-container>\r\n </ng-container>\r\n <vdr-form-field [label]=\"'catalog.product-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <div\r\n class=\"auto-rename-wrapper\"\r\n [class.visible]=\"\r\n (isNew$ | async) === false && detailForm.get(['product', 'name'])?.dirty\r\n \"\r\n >\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n formControlName=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{\r\n 'catalog.auto-update-product-variant-name' | translate\r\n }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Product\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['product', 'customFields'])\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </section>\r\n </div>\r\n <div class=\"clr-col-md-auto\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || product.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || product.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"['UpdateCatalog', 'UpdateProduct'] | hasPermission\"\r\n (remove)=\"removeProductFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <button\r\n class=\"btn btn-sm btn-secondary\"\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n (click)=\"selectProductFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isNew$ | async\">\r\n <h4>{{ 'catalog.product-variants' | translate }}</h4>\r\n <vdr-generate-product-variants\r\n (variantsChange)=\"createVariantsConfig = $event\"\r\n ></vdr-generate-product-variants>\r\n </div>\r\n </clr-tab-content>\r\n </clr-tab>\r\n <clr-tab *ngIf=\"!(isNew$ | async)\">\r\n <button clrTabLink (click)=\"navigateToTab('variants')\">\r\n {{ 'catalog.product-variants' | translate }}\r\n </button>\r\n <clr-tab-content *clrIfActive=\"(activeTab$ | async) === 'variants'\">\r\n <section class=\"form-block\">\r\n <div class=\"view-mode\">\r\n <div class=\"btn-group\">\r\n <button\r\n class=\"btn btn-secondary-outline\"\r\n (click)=\"variantDisplayMode = 'card'\"\r\n [class.btn-primary]=\"variantDisplayMode === 'card'\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n <span class=\"full-label\">{{ 'catalog.display-variant-cards' | translate }}</span>\r\n </button>\r\n <button\r\n class=\"btn\"\r\n (click)=\"variantDisplayMode = 'table'\"\r\n [class.btn-primary]=\"variantDisplayMode === 'table'\"\r\n >\r\n <clr-icon shape=\"table\"></clr-icon>\r\n <span class=\"full-label\">{{ 'catalog.display-variant-table' | translate }}</span>\r\n </button>\r\n </div>\r\n <div class=\"variant-filter\">\r\n <input\r\n [formControl]=\"filterInput\"\r\n [placeholder]=\"'catalog.filter-by-name-or-sku' | translate\"\r\n />\r\n <button class=\"icon-button\" (click)=\"filterInput.setValue('')\">\r\n <clr-icon shape=\"times\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <a\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n [routerLink]=\"['./', 'manage-variants']\"\r\n class=\"btn btn-secondary edit-variants-btn mb0 mr0\"\r\n >\r\n <clr-icon shape=\"add-text\"></clr-icon>\r\n {{ 'catalog.manage-variants' | translate }}\r\n </a>\r\n </div>\r\n\r\n <div class=\"pagination-row mt4\" *ngIf=\"10 < (paginationConfig$ | async)?.totalItems\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n\r\n <vdr-pagination-controls\r\n [id]=\"(paginationConfig$ | async)?.id\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (pageChange)=\"setPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n\r\n <vdr-product-variants-table\r\n *ngIf=\"variantDisplayMode === 'table'\"\r\n [variants]=\"variants$ | async\"\r\n [paginationConfig]=\"paginationConfig$ | async\"\r\n [optionGroups]=\"product.optionGroups\"\r\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [productVariantsFormArray]=\"detailForm.get('variants')\"\r\n [pendingAssetChanges]=\"variantAssetChanges\"\r\n ></vdr-product-variants-table>\r\n <vdr-product-variants-list\r\n *ngIf=\"variantDisplayMode === 'card'\"\r\n [variants]=\"variants$ | async\"\r\n [paginationConfig]=\"paginationConfig$ | async\"\r\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [pendingFacetValueChanges]=\"variantFacetValueChanges\"\r\n [optionGroups]=\"product.optionGroups\"\r\n [productVariantsFormArray]=\"detailForm.get('variants')\"\r\n [taxCategories]=\"taxCategories$ | async\"\r\n [customFields]=\"customVariantFields\"\r\n [customOptionFields]=\"customOptionFields\"\r\n [activeLanguage]=\"languageCode$ | async\"\r\n [pendingAssetChanges]=\"variantAssetChanges\"\r\n (assignToChannel)=\"assignVariantToChannel($event)\"\r\n (removeFromChannel)=\"removeVariantFromChannel($event)\"\r\n (assetChange)=\"variantAssetChange($event)\"\r\n (updateProductOption)=\"updateProductOption($event)\"\r\n (selectionChange)=\"selectedVariantIds = $event\"\r\n ></vdr-product-variants-list>\r\n </section>\r\n <div class=\"pagination-row mt4\" *ngIf=\"10 < (paginationConfig$ | async)?.totalItems\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n\r\n <vdr-pagination-controls\r\n [id]=\"(paginationConfig$ | async)?.id\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (pageChange)=\"setPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n </clr-tab-content>\r\n </clr-tab>\r\n </clr-tabs>\r\n</form>\r\n", styles: [":host ::ng-deep trix-toolbar{top:24px}.facets{margin-top:12px;display:flex;flex-wrap:wrap;align-items:center}@media screen and (min-width: 768px){.facets{max-width:340px}}vdr-action-bar clr-toggle-wrapper{margin-top:12px}.variant-filter{flex:1;display:flex}.variant-filter input{flex:1;max-width:initial;border-radius:3px 0 0 3px!important}.variant-filter .icon-button{border:1px solid var(--color-component-border-300);background-color:var(--color-component-bg-100);border-radius:0 3px 3px 0;border-left:none}.group-name{padding-right:6px}.view-mode{display:flex;flex-direction:column;justify-content:space-between}@media screen and (min-width: 768px){.view-mode{flex-direction:row}}.edit-variants-btn{margin-top:0}.channel-assignment{flex-wrap:wrap;max-height:144px;overflow-y:auto}.auto-rename-wrapper{overflow:hidden;max-height:0;padding-left:9.5rem;margin-bottom:0;transition:max-height .2s,margin-bottom .2s}.auto-rename-wrapper.visible{max-height:24px;margin-bottom:12px}.pagination-row{display:flex;align-items:baseline;justify-content:space-between}\n"] }]
500
500
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }, { type: i3.ProductDetailService }, { type: i4.FormBuilder }, { type: i2.ModalService }, { type: i2.NotificationService }, { type: i2.DataService }, { type: i5.Location }, { type: i0.ChangeDetectorRef }]; } });
501
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUEwQixXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQ0gsbUJBQW1CLEVBRW5CLHlCQUF5QixFQUd6QixlQUFlLEVBQ2YsNEJBQTRCLEVBRzVCLGVBQWUsRUFHZixVQUFVLEVBS1YsdUJBQXVCLEdBTTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUNILFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFB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QyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDOUU7SUFDTCxDQUFDOzttSEF2b0JRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGlGQ2pFbkMsaTBnQkE2UkE7MkZENU5hLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xuaW1wb3J0IHtcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxuICAgIENyZWF0ZVByb2R1Y3RJbnB1dCxcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxuICAgIEN1c3RvbUZpZWxkQ29uZmlnLFxuICAgIERhdGFTZXJ2aWNlLFxuICAgIGZpbmRUcmFuc2xhdGlvbixcbiAgICBnZXRDaGFubmVsQ29kZUZyb21Vc2VyU3RhdHVzLFxuICAgIEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeSxcbiAgICBMYW5ndWFnZUNvZGUsXG4gICAgTG9naWNhbE9wZXJhdG9yLFxuICAgIE1vZGFsU2VydmljZSxcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIFBlcm1pc3Npb24sXG4gICAgUHJvZHVjdERldGFpbEZyYWdtZW50LFxuICAgIFByb2R1Y3RWYXJpYW50RnJhZ21lbnQsXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcbiAgICBUYXhDYXRlZ29yeUZyYWdtZW50LFxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxuICAgIFVwZGF0ZVByb2R1Y3RJbnB1dCxcbiAgICBVcGRhdGVQcm9kdWN0TXV0YXRpb24sXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0LFxuICAgIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24sXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9ub3JtYWxpemUtc3RyaW5nJztcbmltcG9ydCB7IERFRkFVTFRfQ0hBTk5FTF9DT0RFIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtY29uc3RhbnRzJztcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvdW5pcXVlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgY29uY2F0LCBFTVBUWSwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBtZXJnZU1hcCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBza2lwLFxuICAgIHNraXBVbnRpbCxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHN3aXRjaE1hcFRvLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBc3NpZ25Qcm9kdWN0c1RvQ2hhbm5lbERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2Fzc2lnbi1wcm9kdWN0cy10by1jaGFubmVsLWRpYWxvZy9hc3NpZ24tcHJvZHVjdHMtdG8tY2hhbm5lbC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0ZVByb2R1Y3RWYXJpYW50c0NvbmZpZyB9IGZyb20gJy4uL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMvZ2VuZXJhdGUtcHJvZHVjdC12YXJpYW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmFyaWFudEFzc2V0Q2hhbmdlIH0gZnJvbSAnLi4vcHJvZHVjdC12YXJpYW50cy1saXN0L3Byb2R1Y3QtdmFyaWFudHMtbGlzdC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29uZmlnLCBTZWxlY3RlZEFzc2V0cywgVGFiTmFtZSwgVmFyaWFudEZvcm1WYWx1ZSB9IGZyb20gJy4vcHJvZHVjdC1kZXRhaWwudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LWRldGFpbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBCYXNlRGV0YWlsQ29tcG9uZW50PE5vbk51bGxhYmxlPEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeVsncHJvZHVjdCddPj5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgYWN0aXZlVGFiJDogT2JzZXJ2YWJsZTxUYWJOYW1lPjtcbiAgICBwcm9kdWN0JDogT2JzZXJ2YWJsZTxOb25OdWxsYWJsZTxHZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlbJ3Byb2R1Y3QnXT4+O1xuICAgIHZhcmlhbnRzJDogT2JzZXJ2YWJsZTxQcm9kdWN0VmFyaWFudEZyYWdtZW50W10+O1xuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPFRheENhdGVnb3J5RnJhZ21lbnRbXT47XG4gICAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xuICAgIGN1c3RvbVZhcmlhbnRGaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XG4gICAgY3VzdG9tT3B0aW9uR3JvdXBGaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XG4gICAgY3VzdG9tT3B0aW9uRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xuICAgIGRldGFpbEZvcm06IEZvcm1Hcm91cDtcbiAgICBmaWx0ZXJJbnB1dCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gICAgYXNzZXRDaGFuZ2VzOiBTZWxlY3RlZEFzc2V0cyA9IHt9O1xuICAgIHZhcmlhbnRBc3NldENoYW5nZXM6IHsgW3ZhcmlhbnRJZDogc3RyaW5nXTogU2VsZWN0ZWRBc3NldHMgfSA9IHt9O1xuICAgIHZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlczogeyBbdmFyaWFudElkOiBzdHJpbmddOiBQcm9kdWN0VmFyaWFudEZyYWdtZW50WydmYWNldFZhbHVlcyddIH0gPSB7fTtcbiAgICBwcm9kdWN0Q2hhbm5lbHMkOiBPYnNlcnZhYmxlPFByb2R1Y3REZXRhaWxGcmFnbWVudFsnY2hhbm5lbHMnXT47XG4gICAgZmFjZXRWYWx1ZXMkOiBPYnNlcnZhYmxlPFByb2R1Y3REZXRhaWxGcmFnbWVudFsnZmFjZXRWYWx1ZXMnXT47XG4gICAgdG90YWxJdGVtcyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDEpO1xuICAgIGl0ZW1zUGVyUGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDEwKTtcbiAgICBwYWdpbmF0aW9uQ29uZmlnJDogT2JzZXJ2YWJsZTxQYWdpbmF0aW9uQ29uZmlnPjtcbiAgICBzZWxlY3RlZFZhcmlhbnRJZHM6IHN0cmluZ1tdID0gW107XG4gICAgdmFyaWFudERpc3BsYXlNb2RlOiAnY2FyZCcgfCAndGFibGUnID0gJ2NhcmQnO1xuICAgIGNyZWF0ZVZhcmlhbnRzQ29uZmlnOiBDcmVhdGVQcm9kdWN0VmFyaWFudHNDb25maWcgPSB7IGdyb3VwczogW10sIHZhcmlhbnRzOiBbXSB9O1xuICAgIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICAvLyBVc2VkIHRvIHN0b3JlIGFsbCBQcm9kdWN0VmFyaWFudHMgd2hpY2ggaGF2ZSBiZWVuIGxvYWRlZC5cbiAgICAvLyBJdCBpcyBuZWVkZWQgd2hlbiBzYXZpbmcgY2hhbmdlcyB0byB2YXJpYW50cy5cbiAgICBwcml2YXRlIHByb2R1Y3RWYXJpYW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIFByb2R1Y3RWYXJpYW50RnJhZ21lbnQ+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb25zID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVQcm9kdWN0XTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge1xuICAgICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSk7XG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdCcpO1xuICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0VmFyaWFudCcpO1xuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbkdyb3VwRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbkdyb3VwJyk7XG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9uRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbicpO1xuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgICBhdXRvVXBkYXRlVmFyaWFudE5hbWVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNsdWc6IFsnJywgdW5pY29kZVBhdHRlcm5WYWxpZGF0b3IoL15bXFxwe0xldHRlcn0wLTlfLV0rJC8pXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogW1tdXSxcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YXJpYW50czogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0JCA9IHRoaXMuZW50aXR5JDtcbiAgICAgICAgY29uc3QgZmlsdGVyVGVybSQgPSB0aGlzLmZpbHRlcklucHV0LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmN1cnJlbnRQYWdlJC5uZXh0KDEpKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhcmlhbnRzJCA9IHRoaXMucHJvZHVjdCQucGlwZShtYXAocCA9PiBwLnZhcmlhbnRMaXN0Lml0ZW1zKSk7XG4gICAgICAgIGNvbnN0IHZhcmlhbnRzTGlzdCQgPSBjb21iaW5lTGF0ZXN0KGZpbHRlclRlcm0kLCB0aGlzLmN1cnJlbnRQYWdlJCwgdGhpcy5pdGVtc1BlclBhZ2UkKS5waXBlKFxuICAgICAgICAgICAgc2tpcFVudGlsKGluaXRpYWxWYXJpYW50cyQpLFxuICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChbdGVybSwgY3VycmVudFBhZ2UsIGl0ZW1zUGVyUGFnZV0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XG4gICAgICAgICAgICAgICAgICAgIC5nZXRQcm9kdWN0VmFyaWFudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogKGN1cnJlbnRQYWdlIC0gMSkgKiBpdGVtc1BlclBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogaXRlbXNQZXJQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0ZXJtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBmaWx0ZXI6IHsgbmFtZTogeyBjb250YWluczogdGVybSB9LCBza3U6IHsgY29udGFpbnM6IHRlcm0gfSB9IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3I6IExvZ2ljYWxPcGVyYXRvci5PUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTdHJlYW0oKHsgcHJvZHVjdFZhcmlhbnRzIH0pID0+IHByb2R1Y3RWYXJpYW50cyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWYXJpYW50cyQgPSB2YXJpYW50c0xpc3QkLnBpcGUobWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbXMpKTtcbiAgICAgICAgdGhpcy52YXJpYW50cyQgPSBtZXJnZShpbml0aWFsVmFyaWFudHMkLCB1cGRhdGVkVmFyaWFudHMkKS5waXBlKFxuICAgICAgICAgICAgdGFwKHZhcmlhbnRzID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0VmFyaWFudE1hcC5zZXQodmFyaWFudC5pZCwgdmFyaWFudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudG90YWxJdGVtcyQgPSBtZXJnZShcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdCQucGlwZShtYXAocHJvZHVjdCA9PiBwcm9kdWN0LnZhcmlhbnRMaXN0LnRvdGFsSXRlbXMpKSxcbiAgICAgICAgICAgIHZhcmlhbnRzTGlzdCQucGlwZShtYXAocmVzdWx0ID0+IHJlc3VsdC50b3RhbEl0ZW1zKSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZyQgPSBjb21iaW5lTGF0ZXN0KHRoaXMudG90YWxJdGVtcyQsIHRoaXMuaXRlbXNQZXJQYWdlJCwgdGhpcy5jdXJyZW50UGFnZSQpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFt0b3RhbEl0ZW1zLCBpdGVtc1BlclBhZ2UsIGN1cnJlbnRQYWdlXSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zLFxuICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50YXhDYXRlZ29yaWVzJCA9IHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UuZ2V0VGF4Q2F0ZWdvcmllcygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKG1hcChxcG0gPT4gcXBtLmdldCgndGFiJykgYXMgYW55KSk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdCh1cGRhdGVkVmFyaWFudHMkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbdmFyaWFudHMsIGxhbmd1YWdlQ29kZV0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVmFyaWFudEZvcm1BcnJheSh2YXJpYW50cywgbGFuZ3VhZ2VDb2RlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByb2R1Y3RGYWNldFZhbHVlcyQgPSB0aGlzLnByb2R1Y3QkLnBpcGUobWFwKHByb2R1Y3QgPT4gcHJvZHVjdC5mYWNldFZhbHVlcykpO1xuICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmdldFByb2R1Y3RGb3JtR3JvdXAoKTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBjb25zdCBmb3JtRmFjZXRWYWx1ZUlkQ2hhbmdlcyQgPSBwcm9kdWN0R3JvdXAuZ2V0KCdmYWNldFZhbHVlSWRzJykhLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaWRzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxuICAgICAgICAgICAgICAgICAgICAuZ2V0RmFjZXRWYWx1ZXMoeyBmaWx0ZXI6IHsgaWQ6IHsgaW46IGlkcyB9IH0gfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBmYWNldFZhbHVlcyB9KSA9PiBmYWNldFZhbHVlcy5pdGVtcyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gY29uY2F0KFxuICAgICAgICAgICAgcHJvZHVjdEZhY2V0VmFsdWVzJC5waXBlKHRha2UoMSkpLFxuICAgICAgICAgICAgcHJvZHVjdEZhY2V0VmFsdWVzJC5waXBlKHN3aXRjaE1hcFRvKGZvcm1GYWNldFZhbHVlSWRDaGFuZ2VzJCkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByb2R1Y3RDaGFubmVscyQgPSB0aGlzLnByb2R1Y3QkLnBpcGUobWFwKHAgPT4gcC5jaGFubmVscykpO1xuICAgICAgICB0aGlzLmNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JCA9IHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcbiAgICAgICAgICAgIC5nZXRBY3RpdmVDaGFubmVsKCdjYWNoZS1maXJzdCcpXG4gICAgICAgICAgICAucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpXG4gICAgICAgICAgICAubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5hY3RpdmVDaGFubmVsLnByaWNlc0luY2x1ZGVUYXgpXG4gICAgICAgICAgICAucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9UYWIodGFiTmFtZTogVGFiTmFtZSkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcbiAgICAgICAgICAgIHRoaXMucm91dGVyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZVVybFRyZWUoWycuLycsIHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMsIHRhYjogdGFiTmFtZSB9XSwge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNEZWZhdWx0Q2hhbm5lbChjaGFubmVsQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFubmVsQ29kZSA9PT0gREVGQVVMVF9DSEFOTkVMX0NPREU7XG4gICAgfVxuXG4gICAgc2V0UGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChwYWdlKTtcbiAgICB9XG5cbiAgICBzZXRJdGVtc1BlclBhZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSQubmV4dCgrdmFsdWUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlJC5uZXh0KDEpO1xuICAgIH1cblxuICAgIGFzc2lnblRvQ2hhbm5lbCgpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0Q2hhbm5lbHMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjaGFubmVscyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAnbGcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkczogW3RoaXMuaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFubmVsSWRzOiBjaGFubmVscy5tYXAoYyA9PiBjLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZUZyb21DaGFubmVsKGNoYW5uZWxJZDogc3RyaW5nKSB7XG4gICAgICAgIGZyb20oZ2V0Q2hhbm5lbENvZGVGcm9tVXNlclN0YXR1cyh0aGlzLmRhdGFTZXJ2aWNlLCBjaGFubmVsSWQpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGNoYW5uZWxDb2RlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmRpYWxvZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5yZW1vdmUtcHJvZHVjdC1mcm9tLWNoYW5uZWwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF8oJ2NhdGFsb2cucmVtb3ZlLWZyb20tY2hhbm5lbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblZhcnM6IHsgY2hhbm5lbENvZGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QucmVtb3ZlUHJvZHVjdHNGcm9tQ2hhbm5lbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRzOiBbdGhpcy5pZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXByb2R1Y3QtZnJvbS1jaGFubmVsLXN1Y2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXByb2R1Y3QtZnJvbS1jaGFubmVsLWVycm9yJykpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFzc2lnblZhcmlhbnRUb0NoYW5uZWwodmFyaWFudDogUHJvZHVjdFZhcmlhbnRGcmFnbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ2xnJyxcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkczogW3RoaXMuaWRdLFxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0VmFyaWFudElkczogW3ZhcmlhbnQuaWRdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbElkczogdmFyaWFudC5jaGFubmVscy5tYXAoYyA9PiBjLmlkKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZW1vdmVWYXJpYW50RnJvbUNoYW5uZWwoeyBjaGFubmVsSWQsIHZhcmlhbnQgfTogeyBjaGFubmVsSWQ6IHN0cmluZzsgdmFyaWFudDogUHJvZHVjdFZhcmlhbnRGcmFnbWVudCB9KSB7XG4gICAgICAgIGZyb20oZ2V0Q2hhbm5lbENvZGVGcm9tVXNlclN0YXR1cyh0aGlzLmRhdGFTZXJ2aWNlLCBjaGFubmVsSWQpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGNoYW5uZWxDb2RlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmRpYWxvZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5yZW1vdmUtcHJvZHVjdC12YXJpYW50LWZyb20tY2hhbm5lbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXygnY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uVmFyczogeyBjaGFubmVsQ29kZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5yZW1vdmVWYXJpYW50c0Zyb21DaGFubmVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RWYXJpYW50SWRzOiBbdmFyaWFudC5pZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXZhcmlhbnQtZnJvbS1jaGFubmVsLXN1Y2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXZhcmlhbnQtZnJvbS1jaGFubmVsLWVycm9yJykpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFzc2V0c0NoYW5nZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIU9iamVjdC52YWx1ZXModGhpcy5hc3NldENoYW5nZXMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXJpYW50QXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhT2JqZWN0LmtleXModGhpcy52YXJpYW50QXNzZXRDaGFuZ2VzKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyaWFudEFzc2V0Q2hhbmdlKGV2ZW50OiBWYXJpYW50QXNzZXRDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy52YXJpYW50QXNzZXRDaGFuZ2VzW2V2ZW50LnZhcmlhbnRJZF0gPSBldmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBwcm9kdWN0LCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBwcm9kdWN0IG5hbWUuXG4gICAgICovXG4gICAgdXBkYXRlU2x1ZyhuYW1lVmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtlbnRpdHksIGxhbmd1YWdlQ29kZV0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ3NsdWcnXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGVudGl0eSwgbGFuZ3VhZ2VDb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2x1Z0lzRW1wdHkgPSAhY3VycmVudFRyYW5zbGF0aW9uIHx8ICFjdXJyZW50VHJhbnNsYXRpb24uc2x1ZztcbiAgICAgICAgICAgICAgICBpZiAoc2x1Z0NvbnRyb2wgJiYgc2x1Z0NvbnRyb2wucHJpc3RpbmUgJiYgY3VycmVudFNsdWdJc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHNsdWdDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhgJHtuYW1lVmFsdWV9YCwgJy0nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VsZWN0UHJvZHVjdEZhY2V0VmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUZhY2V0VmFsdWVNb2RhbCgpLnN1YnNjcmliZShmYWNldFZhbHVlSWRzID0+IHtcbiAgICAgICAgICAgIGlmIChmYWNldFZhbHVlSWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5nZXRQcm9kdWN0Rm9ybUdyb3VwKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZhY2V0VmFsdWVJZHMgPSBwcm9kdWN0R3JvdXAudmFsdWUuZmFjZXRWYWx1ZUlkcztcbiAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHVuaXF1ZShbLi4uY3VycmVudEZhY2V0VmFsdWVJZHMsIC4uLmZhY2V0VmFsdWVJZHNdKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvZHVjdE9wdGlvbihpbnB1dDogVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0ICYgeyBhdXRvVXBkYXRlOiBib29sZWFuIH0pIHtcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnByb2R1Y3QkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0T3B0aW9uKGlucHV0LCBwcm9kdWN0LCBsYW5ndWFnZUNvZGUpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZVByb2R1Y3RGYWNldFZhbHVlKGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZ2V0UHJvZHVjdEZvcm1Hcm91cCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHByb2R1Y3RHcm91cC52YWx1ZS5mYWNldFZhbHVlSWRzO1xuICAgICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBjdXJyZW50RmFjZXRWYWx1ZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGZhY2V0VmFsdWVJZCksXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9kdWN0R3JvdXAubWFya0FzRGlydHkoKTtcbiAgICB9XG5cbiAgICB2YXJpYW50c1RvQ3JlYXRlQXJlVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAwIDwgdGhpcy5jcmVhdGVWYXJpYW50c0NvbmZpZy52YXJpYW50cy5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFyaWFudHNDb25maWcudmFyaWFudHMuZXZlcnkodiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYuc2t1ICE9PSAnJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNwbGF5RmFjZXRWYWx1ZU1vZGFsKCk6IE9ic2VydmFibGU8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShtYXAoZmFjZXRWYWx1ZXMgPT4gZmFjZXRWYWx1ZXMgJiYgZmFjZXRWYWx1ZXMubWFwKHYgPT4gdi5pZCkpKTtcbiAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZ2V0UHJvZHVjdEZvcm1Hcm91cCgpO1xuICAgICAgICBpZiAoIXByb2R1Y3RHcm91cC5kaXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5wcm9kdWN0JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3Byb2R1Y3QsIGxhbmd1YWdlQ29kZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvZHVjdCA9IHRoaXMuZ2V0VXBkYXRlZFByb2R1Y3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEdyb3VwIGFzIEZvcm1Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBDcmVhdGVQcm9kdWN0SW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3REZXRhaWxTZXJ2aWNlLmNyZWF0ZVByb2R1Y3RXaXRoVmFyaWFudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYXJpYW50c0NvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHsgY3JlYXRlUHJvZHVjdFZhcmlhbnRzLCBwcm9kdWN0SWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYW50QXNzZXRDaGFuZ2VzID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIHByb2R1Y3RJZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzYXZlKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMucHJvZHVjdCQsIHRoaXMubGFuZ3VhZ2VDb2RlJCwgdGhpcy5jaGFubmVsUHJpY2VJbmNsdWRlc1RheCQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlLCBwcmljZUluY2x1ZGVzVGF4XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmdldFByb2R1Y3RGb3JtR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb2R1Y3RJbnB1dDogVXBkYXRlUHJvZHVjdElucHV0IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFyaWFudHNJbnB1dDogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0R3JvdXAuZGlydHkgfHwgdGhpcy5hc3NldHNDaGFuZ2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZFByb2R1Y3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAgYXMgRm9ybUdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlUHJvZHVjdElucHV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhcmlhbnRzQXJyYXkgJiYgdmFyaWFudHNBcnJheS5kaXJ0eSkgfHwgdGhpcy52YXJpYW50QXNzZXRzQ2hhbmdlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50c0lucHV0ID0gdGhpcy5nZXRVcGRhdGVkUHJvZHVjdFZhcmlhbnRzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNBcnJheSBhcyBGb3JtQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlSW5jbHVkZXNUYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UudXBkYXRlUHJvZHVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1VwZGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KFsncHJvZHVjdCcsICdhdXRvVXBkYXRlVmFyaWFudE5hbWVzJ10pPy52YWx1ZSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzSW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNsdWdBZnRlclNhdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFudEFzc2V0Q2hhbmdlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNhbkRlYWN0aXZhdGUoKSAmJiAhdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiB0aGUgZm9ybSBvbiBjaGFuZ2VzIHRvIHRoZSBwcm9kdWN0IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoXG4gICAgICAgIHByb2R1Y3Q6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeVsncHJvZHVjdCddPixcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihwcm9kdWN0LCBsYW5ndWFnZUNvZGUpO1xuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogcHJvZHVjdC5lbmFibGVkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogcHJvZHVjdC5mYWNldFZhbHVlcy5tYXAoZnYgPT4gZnYuaWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnY3VzdG9tRmllbGRzJ10pLFxuICAgICAgICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkVmFyaWFudEZvcm1BcnJheShwcm9kdWN0LnZhcmlhbnRMaXN0Lml0ZW1zLCBsYW5ndWFnZUNvZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRWYXJpYW50Rm9ybUFycmF5KHZhcmlhbnRzOiBQcm9kdWN0VmFyaWFudEZyYWdtZW50W10sIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhbnRzRm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFyaWFudHMnKSBhcyBGb3JtQXJyYXk7XG4gICAgICAgIHZhcmlhbnRzLmZvckVhY2goKHZhcmlhbnQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbih2YXJpYW50LCBsYW5ndWFnZUNvZGUpO1xuICAgICAgICAgICAgY29uc3QgcGVuZGluZ0ZhY2V0VmFsdWVDaGFuZ2VzID0gdGhpcy52YXJpYW50RmFjZXRWYWx1ZUNoYW5nZXNbdmFyaWFudC5pZF07XG4gICAgICAgICAgICBjb25zdCBmYWNldFZhbHVlSWRzID0gcGVuZGluZ0ZhY2V0VmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgPyBwZW5kaW5nRmFjZXRWYWx1ZUNoYW5nZXMubWFwKGZ2ID0+IGZ2LmlkKVxuICAgICAgICAgICAgICAgIDogdmFyaWFudC5mYWNldFZhbHVlcy5tYXAoZnYgPT4gZnYuaWQpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXA6IFZhcmlhbnRGb3JtVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHZhcmlhbnQuaWQsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdmFyaWFudC5lbmFibGVkLFxuICAgICAgICAgICAgICAgIHNrdTogdmFyaWFudC5za3UsXG4gICAgICAgICAgICAgICAgbmFtZTogdmFyaWFudFRyYW5zbGF0aW9uID8gdmFyaWFudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcbiAgICAgICAgICAgICAgICBwcmljZTogdmFyaWFudC5wcmljZSxcbiAgICAgICAgICAgICAgICBwcmljZVdpdGhUYXg6IHZhcmlhbnQucHJpY2VXaXRoVGF4LFxuICAgICAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnQudGF4Q2F0ZWdvcnkuaWQsXG4gICAgICAgICAgICAgICAgc3RvY2tPbkhhbmQ6IHZhcmlhbnQuc3RvY2tPbkhhbmQsXG4gICAgICAgICAgICAgICAgdXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZDogdmFyaWFudC51c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZCxcbiAgICAgICAgICAgICAgICB0cmFja0ludmVudG9yeTogdmFyaWFudC50cmFja0ludmVudG9yeSxcbiAgICAgICAgICAgICAgICBmYWNldFZhbHVlSWRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IHZhcmlhbnRGb3JtR3JvdXAgPSB2YXJpYW50c0Zvcm1BcnJheS5jb250cm9scy5maW5kKGMgPT4gYy52YWx1ZS5pZCA9PT0gdmFyaWFudC5pZCkgYXNcbiAgICAgICAgICAgICAgICB8IEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHZhcmlhbnRGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudEZvcm1Hcm91cC5wcmlzdGluZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Rm9ybUdyb3VwLnBhdGNoVmFsdWUoZ3JvdXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyaWFudEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGZhY2V0VmFsdWVJZHMpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHZhcmlhbnRzRm9ybUFycmF5Lmluc2VydChpLCB2YXJpYW50Rm9ybUdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1c3RvbUZpZWxkc0dyb3VwID0gdmFyaWFudEZvcm1Hcm91cC5nZXQoWydjdXN0b21GaWVsZHMnXSkgYXMgRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjdXN0b21GaWVsZHNHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHNHcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Rm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbUZpZWxkc0dyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tVmFyaWFudEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRUcmFuc2xhdGlvbixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHByb2R1Y3QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIHByb2R1Y3Qgd2hpY2hcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFVwZGF0ZWRQcm9kdWN0KFxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlbJ3Byb2R1Y3QnXT4sXG4gICAgICAgIHByb2R1Y3RGb3JtR3JvdXA6IEZvcm1Hcm91cCxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXG4gICAgKTogVXBkYXRlUHJvZHVjdElucHV0IHwgQ3JlYXRlUHJvZHVjdElucHV0IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3QgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogcHJvZHVjdCxcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IHByb2R1Y3RGb3JtR3JvdXAudmFsdWUsXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgIHNsdWc6IHByb2R1Y3Quc2x1ZyB8fCAnJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXG4gICAgICAgICAgICBhc3NldElkczogdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKSxcbiAgICAgICAgICAgIGZlYXR1cmVkQXNzZXRJZDogdGhpcy5hc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldD8uaWQsXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBwcm9kdWN0Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXG4gICAgICAgIH0gYXMgVXBkYXRlUHJvZHVjdElucHV0IHwgQ3JlYXRlUHJvZHVjdElucHV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGFuIGFycmF5IG9mIHByb2R1Y3QgdmFyaWFudHMgYW5kIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBuZXcgYXJyYXlcbiAgICAgKiB3aGljaCBjYW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkUHJvZHVjdFZhcmlhbnRzKFxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlbJ3Byb2R1Y3QnXT4sXG4gICAgICAgIHZhcmlhbnRzRm9ybUFycmF5OiBGb3JtQXJyYXksXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxuICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiBib29sZWFuLFxuICAgICk6IFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXRbXSB7XG4gICAgICAgIGNvbnN0IGRpcnR5Rm9ybUNvbnRyb2xzID0gdmFyaWFudHNGb3JtQXJyYXkuY29udHJvbHMuZmlsdGVyKGMgPT4gYy5kaXJ0eSk7XG4gICAgICAgIGNvbnN0IGRpcnR5VmFyaWFudHMgPSBkaXJ0eUZvcm1Db250cm9sc1xuICAgICAgICAgICAgLm1hcChjID0+IHRoaXMucHJvZHVjdFZhcmlhbnRNYXAuZ2V0KGMudmFsdWUuaWQpKVxuICAgICAgICAgICAgLmZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpO1xuICAgICAgICBjb25zdCBkaXJ0eVZhcmlhbnRWYWx1ZXMgPSBkaXJ0eUZvcm1Db250cm9scy5tYXAoYyA9PiBjLnZhbHVlKTtcblxuICAgICAgICBpZiAoZGlydHlWYXJpYW50cy5sZW5ndGggIT09IGRpcnR5VmFyaWFudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfKGBlcnJvci5wcm9kdWN0LXZhcmlhbnQtZm9ybS12YWx1ZXMtZG8tbm90LW1hdGNoYCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJ0eVZhcmlhbnRzXG4gICAgICAgICAgICAubWFwKCh2YXJpYW50LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlOiBWYXJpYW50Rm9ybVZhbHVlID0gZGlydHlWYXJpYW50VmFsdWVzLmZpbmQodmFsdWUgPT4gdmFsdWUuaWQgPT09IHZhcmlhbnQuaWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCA9IGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGFibGU6IHZhcmlhbnQsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IGZvcm1WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tVmFyaWFudEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC50YXhDYXRlZ29yeUlkID0gZm9ybVZhbHVlLnRheENhdGVnb3J5SWQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmZhY2V0VmFsdWVJZHMgPSBmb3JtVmFsdWUuZmFjZXRWYWx1ZUlkcztcbiAgICAgICAgICAgICAgICByZXN1bHQucHJpY2UgPSBwcmljZUluY2x1ZGVzVGF4ID8gZm9ybVZhbHVlLnByaWNlV2l0aFRheCA6IGZvcm1WYWx1ZS5wcmljZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NldENoYW5nZXMgPSB0aGlzLnZhcmlhbnRBc3NldENoYW5nZXNbdmFyaWFudC5pZF07XG4gICAgICAgICAgICAgICAgaWYgKGFzc2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmVhdHVyZWRBc3NldElkID0gYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzZXRJZHMgPSBhc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9kdWN0Rm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbEZvcm0uZ2V0KCdwcm9kdWN0JykgYXMgRm9ybUdyb3VwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzZXJ2ZXIgbWF5IGFsdGVyIHRoZSBzbHVnIHZhbHVlIGluIG9yZGVyIHRvIG5vcm1hbGl6ZSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3MgdXBvbiBzYXZpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVTbHVnQWZ0ZXJTYXZlKHJlc3VsdHM6IEFycmF5PFVwZGF0ZVByb2R1Y3RNdXRhdGlvbiB8IFVwZGF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uPikge1xuICAgICAgICBjb25zdCBmaXJzdFJlc3VsdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGNvbnN0IHNsdWdDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnc2x1ZyddKTtcblxuICAgICAgICBmdW5jdGlvbiBpc1VwZGF0ZU11dGF0aW9uKGlucHV0OiBhbnkpOiBpbnB1dCBpcyBVcGRhdGVQcm9kdWN0TXV0YXRpb24ge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmhhc093blByb3BlcnR5KCd1cGRhdGVQcm9kdWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2x1Z0NvbnRyb2wgJiYgaXNVcGRhdGVNdXRhdGlvbihmaXJzdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHNsdWdDb250cm9sLnNldFZhbHVlKGZpcnN0UmVzdWx0LnVwZGF0ZVByb2R1Y3Quc2x1ZywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNsci1mbGV4LXJvd1wiPlxyXG4gICAgICAgICAgICA8dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZW50aXR5JCB8IGFzeW5jXCI+PC92ZHItZW50aXR5LWluZm8+XHJcbiAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXIgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ2VuYWJsZWQnXSlcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cInByb2R1Y3QtZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlKClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmUgfHwgIXZhcmlhbnRzVG9DcmVhdGVBcmVWYWxpZCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J11cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lKSAmJiAhYXNzZXRzQ2hhbmdlZCgpICYmICF2YXJpYW50QXNzZXRzQ2hhbmdlZCgpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLnVwZGF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG48L3Zkci1hY3Rpb24tYmFyPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCIgKm5nSWY9XCJwcm9kdWN0JCB8IGFzeW5jIGFzIHByb2R1Y3RcIj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGhpZGRlbiB4LWRhdGE9XCJwcmV2ZW50cyBlbnRlciBrZXkgZnJvbSB0cmlnZ2VyaW5nIG90aGVyIGJ1dHRvbnNcIj48L2J1dHRvbj5cclxuICAgIDxjbHItdGFicz5cclxuICAgICAgICA8Y2xyLXRhYj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbHJUYWJMaW5rIChjbGljayk9XCJuYXZpZ2F0ZVRvVGFiKCdkZXRhaWxzJylcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnByb2R1Y3QtZGV0YWlscycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxjbHItdGFiLWNvbnRlbnQgKmNscklmQWN0aXZlPVwiKGFjdGl2ZVRhYiQgfCBhc3luYykgPT09ICdkZXRhaWxzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xyLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImZvcm0tYmxvY2tcIiBmb3JtR3JvdXBOYW1lPVwicHJvZHVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXNOZXckIHwgYXN5bmMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqdmRySWZNdWx0aWNoYW5uZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvbW1vbi5jaGFubmVscycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmRGVmYXVsdENoYW5uZWxBY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2hhbm5lbC1hc3NpZ25tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hhbm5lbCBvZiBwcm9kdWN0Q2hhbm5lbHMkIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWwuY29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInRpbWVzLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWNvbkNsaWNrKT1cInJlbW92ZUZyb21DaGFubmVsKGNoYW5uZWwuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGFubmVsLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoYW5uZWxDb2RlXT1cImNoYW5uZWwuY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY2hhbm5lbC1iYWRnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoYW5uZWwuY29kZSB8IGNoYW5uZWxDb2RlVG9MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgKGNsaWNrKT1cImFzc2lnblRvQ2hhbm5lbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImxheWVyc1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFzc2lnbi10by1jaGFubmVsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0taXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy5wcm9kdWN0LW5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlU2x1ZygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLXJlbmFtZS13cmFwcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudmlzaWJsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzTmV3JCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ25hbWUnXSk/LmRpcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLmF1dG8tdXBkYXRlLXByb2R1Y3QtdmFyaWFudC1uYW1lJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXRhbG9nLnNsdWcnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JzXT1cInsgcGF0dGVybjogJ2NhdGFsb2cuc2x1Zy1wYXR0ZXJuLWVycm9yJyB8IHRyYW5zbGF0ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEoWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXSB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcmljaC10ZXh0LWVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29tbW9uLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcmljaC10ZXh0LWVkaXRvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ2N1c3RvbUZpZWxkcyddKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKFsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J10gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtZGV0YWlsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsRm9ybV09XCJkZXRhaWxGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsci1jb2wtbWQtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Fzc2V0c109XCJhc3NldENoYW5nZXMuYXNzZXRzIHx8IHByb2R1Y3QuYXNzZXRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZWF0dXJlZEFzc2V0XT1cImFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0IHx8IHByb2R1Y3QuZmVhdHVyZWRBc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXBkYXRlUGVybWlzc2lvbnNdPVwidXBkYXRlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhc3NldENoYW5nZXMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItYXNzZXRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFjZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZhY2V0LXZhbHVlLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXRWYWx1ZSBvZiBmYWNldFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZhY2V0VmFsdWVdPVwiZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVQcm9kdWN0RmFjZXRWYWx1ZShmYWNldFZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZmFjZXQtdmFsdWUtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvZHVjdEZhY2V0VmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYWRkLWZhY2V0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc05ldyQgfCBhc3luY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoND57eyAnY2F0YWxvZy5wcm9kdWN0LXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YXJpYW50c0NoYW5nZSk9XCJjcmVhdGVWYXJpYW50c0NvbmZpZyA9ICRldmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWdlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9jbHItdGFiLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9jbHItdGFiPlxyXG4gICAgICAgIDxjbHItdGFiICpuZ0lmPVwiIShpc05ldyQgfCBhc3luYylcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbHJUYWJMaW5rIChjbGljayk9XCJuYXZpZ2F0ZVRvVGFiKCd2YXJpYW50cycpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5wcm9kdWN0LXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGNsci10YWItY29udGVudCAqY2xySWZBY3RpdmU9XCIoYWN0aXZlVGFiJCB8IGFzeW5jKSA9PT0gJ3ZhcmlhbnRzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJmb3JtLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctbW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmFyaWFudERpc3BsYXlNb2RlID0gJ2NhcmQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXByaW1hcnldPVwidmFyaWFudERpc3BsYXlNb2RlID09PSAnY2FyZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImxpc3RcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnVsbC1sYWJlbFwiPnt7ICdjYXRhbG9nLmRpc3BsYXktdmFyaWFudC1jYXJkcycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZhcmlhbnREaXNwbGF5TW9kZSA9ICd0YWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tcHJpbWFyeV09XCJ2YXJpYW50RGlzcGxheU1vZGUgPT09ICd0YWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRhYmxlXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ1bGwtbGFiZWxcIj57eyAnY2F0YWxvZy5kaXNwbGF5LXZhcmlhbnQtdGFibGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFyaWFudC1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidjYXRhbG9nLmZpbHRlci1ieS1uYW1lLW9yLXNrdScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIChjbGljayk9XCJmaWx0ZXJJbnB1dC5zZXRWYWx1ZSgnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ0aW1lc1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCAnbWFuYWdlLXZhcmlhbnRzJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBlZGl0LXZhcmlhbnRzLWJ0biBtYjAgbXIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiYWRkLXRleHRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubWFuYWdlLXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLXJvdyBtdDRcIiAqbmdJZj1cIjEwIDwgKHBhZ2luYXRpb25Db25maWckIHwgYXN5bmMpPy50b3RhbEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHM+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIocGFnaW5hdGlvbkNvbmZpZyQgfCBhc3luYyk/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJzZXRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcGFnaW5hdGlvbi1jb250cm9scz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnRzLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmFyaWFudERpc3BsYXlNb2RlID09PSAndGFibGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRzXT1cInZhcmlhbnRzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25Db25maWddPVwicGFnaW5hdGlvbkNvbmZpZyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Hcm91cHNdPVwicHJvZHVjdC5vcHRpb25Hcm91cHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhdPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdFZhcmlhbnRzRm9ybUFycmF5XT1cImRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BlbmRpbmdBc3NldENoYW5nZXNdPVwidmFyaWFudEFzc2V0Q2hhbmdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXByb2R1Y3QtdmFyaWFudHMtdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnRzLWxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2YXJpYW50RGlzcGxheU1vZGUgPT09ICdjYXJkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YXJpYW50c109XCJ2YXJpYW50cyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uQ29uZmlnXT1cInBhZ2luYXRpb25Db25maWckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhdPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGVuZGluZ0ZhY2V0VmFsdWVDaGFuZ2VzXT1cInZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Hcm91cHNdPVwicHJvZHVjdC5vcHRpb25Hcm91cHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdFZhcmlhbnRzRm9ybUFycmF5XT1cImRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RheENhdGVnb3JpZXNdPVwidGF4Q2F0ZWdvcmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiY3VzdG9tVmFyaWFudEZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21PcHRpb25GaWVsZHNdPVwiY3VzdG9tT3B0aW9uRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUxhbmd1YWdlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nQXNzZXRDaGFuZ2VzXT1cInZhcmlhbnRBc3NldENoYW5nZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXNzaWduVG9DaGFubmVsKT1cImFzc2lnblZhcmlhbnRUb0NoYW5uZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVGcm9tQ2hhbm5lbCk9XCJyZW1vdmVWYXJpYW50RnJvbUNoYW5uZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhc3NldENoYW5nZSk9XCJ2YXJpYW50QXNzZXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cGRhdGVQcm9kdWN0T3B0aW9uKT1cInVwZGF0ZVByb2R1Y3RPcHRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0ZWRWYXJpYW50SWRzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItcHJvZHVjdC12YXJpYW50cy1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tcm93IG10NFwiICpuZ0lmPVwiMTAgPCAocGFnaW5hdGlvbkNvbmZpZyQgfCBhc3luYyk/LnRvdGFsSXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJzZXRJdGVtc1BlclBhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLXBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIihwYWdpbmF0aW9uQ29uZmlnJCB8IGFzeW5jKT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXBhZ2luYXRpb24tY29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9jbHItdGFiLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9jbHItdGFiPlxyXG4gICAgPC9jbHItdGFicz5cclxuPC9mb3JtPlxyXG4iXX0=
501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUEwQixXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQ0gsbUJBQW1CLEVBRW5CLHlCQUF5QixFQUd6QixlQUFlLEVBQ2YsNEJBQTRCLEVBRzVCLGVBQWUsRUFHZixVQUFVLEVBS1YsdUJBQXVCLEdBTTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUNILFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFB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QyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDOUU7SUFDTCxDQUFDOzttSEF2b0JRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGlGQ2pFbkMsaTBnQkE2UkE7MkZENU5hLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ3JlYXRlUHJvZHVjdElucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIEN1c3RvbUZpZWxkQ29uZmlnLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDaGFubmVsQ29kZUZyb21Vc2VyU3RhdHVzLFxyXG4gICAgR2V0UHJvZHVjdFdpdGhWYXJpYW50c1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTG9naWNhbE9wZXJhdG9yLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQcm9kdWN0RGV0YWlsRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0VmFyaWFudEZyYWdtZW50LFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgIFRheENhdGVnb3J5RnJhZ21lbnQsXHJcbiAgICB1bmljb2RlUGF0dGVyblZhbGlkYXRvcixcclxuICAgIFVwZGF0ZVByb2R1Y3RJbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RNdXRhdGlvbixcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbixcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9ub3JtYWxpemUtc3RyaW5nJztcclxuaW1wb3J0IHsgREVGQVVMVF9DSEFOTkVMX0NPREUgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvdW5pcXVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBjb25jYXQsIEVNUFRZLCBmcm9tLCBtZXJnZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgZGVib3VuY2VUaW1lLFxyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgICBtYXAsXHJcbiAgICBtZXJnZU1hcCxcclxuICAgIHNoYXJlUmVwbGF5LFxyXG4gICAgc2tpcCxcclxuICAgIHNraXBVbnRpbCxcclxuICAgIHN0YXJ0V2l0aCxcclxuICAgIHN3aXRjaE1hcCxcclxuICAgIHN3aXRjaE1hcFRvLFxyXG4gICAgdGFrZSxcclxuICAgIHRha2VVbnRpbCxcclxuICAgIHRhcCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwbHlGYWNldERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FwcGx5LWZhY2V0LWRpYWxvZy9hcHBseS1mYWNldC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hc3NpZ24tcHJvZHVjdHMtdG8tY2hhbm5lbC1kaWFsb2cvYXNzaWduLXByb2R1Y3RzLXRvLWNoYW5uZWwtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENyZWF0ZVByb2R1Y3RWYXJpYW50c0NvbmZpZyB9IGZyb20gJy4uL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMvZ2VuZXJhdGUtcHJvZHVjdC12YXJpYW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWYXJpYW50QXNzZXRDaGFuZ2UgfSBmcm9tICcuLi9wcm9kdWN0LXZhcmlhbnRzLWxpc3QvcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29uZmlnLCBTZWxlY3RlZEFzc2V0cywgVGFiTmFtZSwgVmFyaWFudEZvcm1WYWx1ZSB9IGZyb20gJy4vcHJvZHVjdC1kZXRhaWwudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdERldGFpbENvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBCYXNlRGV0YWlsQ29tcG9uZW50PE5vbk51bGxhYmxlPEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeVsncHJvZHVjdCddPj5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgYWN0aXZlVGFiJDogT2JzZXJ2YWJsZTxUYWJOYW1lPjtcclxuICAgIHByb2R1Y3QkOiBPYnNlcnZhYmxlPE5vbk51bGxhYmxlPEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeVsncHJvZHVjdCddPj47XHJcbiAgICB2YXJpYW50cyQ6IE9ic2VydmFibGU8UHJvZHVjdFZhcmlhbnRGcmFnbWVudFtdPjtcclxuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPFRheENhdGVnb3J5RnJhZ21lbnRbXT47XHJcbiAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBjdXN0b21WYXJpYW50RmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgY3VzdG9tT3B0aW9uR3JvdXBGaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBjdXN0b21PcHRpb25GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBkZXRhaWxGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBmaWx0ZXJJbnB1dCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgICBhc3NldENoYW5nZXM6IFNlbGVjdGVkQXNzZXRzID0ge307XHJcbiAgICB2YXJpYW50QXNzZXRDaGFuZ2VzOiB7IFt2YXJpYW50SWQ6IHN0cmluZ106IFNlbGVjdGVkQXNzZXRzIH0gPSB7fTtcclxuICAgIHZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlczogeyBbdmFyaWFudElkOiBzdHJpbmddOiBQcm9kdWN0VmFyaWFudEZyYWdtZW50WydmYWNldFZhbHVlcyddIH0gPSB7fTtcclxuICAgIHByb2R1Y3RDaGFubmVscyQ6IE9ic2VydmFibGU8UHJvZHVjdERldGFpbEZyYWdtZW50WydjaGFubmVscyddPjtcclxuICAgIGZhY2V0VmFsdWVzJDogT2JzZXJ2YWJsZTxQcm9kdWN0RGV0YWlsRnJhZ21lbnRbJ2ZhY2V0VmFsdWVzJ10+O1xyXG4gICAgdG90YWxJdGVtcyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIGN1cnJlbnRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMSk7XHJcbiAgICBpdGVtc1BlclBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgxMCk7XHJcbiAgICBwYWdpbmF0aW9uQ29uZmlnJDogT2JzZXJ2YWJsZTxQYWdpbmF0aW9uQ29uZmlnPjtcclxuICAgIHNlbGVjdGVkVmFyaWFudElkczogc3RyaW5nW10gPSBbXTtcclxuICAgIHZhcmlhbnREaXNwbGF5TW9kZTogJ2NhcmQnIHwgJ3RhYmxlJyA9ICdjYXJkJztcclxuICAgIGNyZWF0ZVZhcmlhbnRzQ29uZmlnOiBDcmVhdGVQcm9kdWN0VmFyaWFudHNDb25maWcgPSB7IGdyb3VwczogW10sIHZhcmlhbnRzOiBbXSB9O1xyXG4gICAgY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgLy8gVXNlZCB0byBzdG9yZSBhbGwgUHJvZHVjdFZhcmlhbnRzIHdoaWNoIGhhdmUgYmVlbiBsb2FkZWQuXHJcbiAgICAvLyBJdCBpcyBuZWVkZWQgd2hlbiBzYXZpbmcgY2hhbmdlcyB0byB2YXJpYW50cy5cclxuICAgIHByaXZhdGUgcHJvZHVjdFZhcmlhbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgUHJvZHVjdFZhcmlhbnRGcmFnbWVudD4oKTtcclxuICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9ucyA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlUHJvZHVjdF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3QnKTtcclxuICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0VmFyaWFudCcpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9uR3JvdXBGaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uR3JvdXAnKTtcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbkZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgcHJvZHVjdDogdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgICAgIGF1dG9VcGRhdGVWYXJpYW50TmFtZXM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzbHVnOiBbJycsIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yKC9eW1xccHtMZXR0ZXJ9MC05Xy1dKyQvKV0sXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBbW11dLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB2YXJpYW50czogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0JCA9IHRoaXMuZW50aXR5JDtcclxuICAgICAgICBjb25zdCBmaWx0ZXJUZXJtJCA9IHRoaXMuZmlsdGVySW5wdXQudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpLFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jdXJyZW50UGFnZSQubmV4dCgxKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpbml0aWFsVmFyaWFudHMkID0gdGhpcy5wcm9kdWN0JC5waXBlKG1hcChwID0+IHAudmFyaWFudExpc3QuaXRlbXMpKTtcclxuICAgICAgICBjb25zdCB2YXJpYW50c0xpc3QkID0gY29tYmluZUxhdGVzdChmaWx0ZXJUZXJtJCwgdGhpcy5jdXJyZW50UGFnZSQsIHRoaXMuaXRlbXNQZXJQYWdlJCkucGlwZShcclxuICAgICAgICAgICAgc2tpcFVudGlsKGluaXRpYWxWYXJpYW50cyQpLFxyXG4gICAgICAgICAgICBza2lwKDEpLFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKChbdGVybSwgY3VycmVudFBhZ2UsIGl0ZW1zUGVyUGFnZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvZHVjdFZhcmlhbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwOiAoY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IGl0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0ZXJtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGZpbHRlcjogeyBuYW1lOiB7IGNvbnRhaW5zOiB0ZXJtIH0sIHNrdTogeyBjb250YWluczogdGVybSB9IH0gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3I6IExvZ2ljYWxPcGVyYXRvci5PUixcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pZCxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcFN0cmVhbSgoeyBwcm9kdWN0VmFyaWFudHMgfSkgPT4gcHJvZHVjdFZhcmlhbnRzKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB1cGRhdGVkVmFyaWFudHMkID0gdmFyaWFudHNMaXN0JC5waXBlKG1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy52YXJpYW50cyQgPSBtZXJnZShpbml0aWFsVmFyaWFudHMkLCB1cGRhdGVkVmFyaWFudHMkKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAodmFyaWFudHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0VmFyaWFudE1hcC5zZXQodmFyaWFudC5pZCwgdmFyaWFudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zJCA9IG1lcmdlKFxyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3QkLnBpcGUobWFwKHByb2R1Y3QgPT4gcHJvZHVjdC52YXJpYW50TGlzdC50b3RhbEl0ZW1zKSksXHJcbiAgICAgICAgICAgIHZhcmlhbnRzTGlzdCQucGlwZShtYXAocmVzdWx0ID0+IHJlc3VsdC50b3RhbEl0ZW1zKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25Db25maWckID0gY29tYmluZUxhdGVzdCh0aGlzLnRvdGFsSXRlbXMkLCB0aGlzLml0ZW1zUGVyUGFnZSQsIHRoaXMuY3VycmVudFBhZ2UkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFt0b3RhbEl0ZW1zLCBpdGVtc1BlclBhZ2UsIGN1cnJlbnRQYWdlXSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIHRvdGFsSXRlbXMsXHJcbiAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy50YXhDYXRlZ29yaWVzJCA9IHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UuZ2V0VGF4Q2F0ZWdvcmllcygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiQgPSB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUobWFwKHFwbSA9PiBxcG0uZ2V0KCd0YWInKSBhcyBhbnkpKTtcclxuXHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh1cGRhdGVkVmFyaWFudHMkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3ZhcmlhbnRzLCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVmFyaWFudEZvcm1BcnJheSh2YXJpYW50cywgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RGYWNldFZhbHVlcyQgPSB0aGlzLnByb2R1Y3QkLnBpcGUobWFwKHByb2R1Y3QgPT4gcHJvZHVjdC5mYWNldFZhbHVlcykpO1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZ2V0UHJvZHVjdEZvcm1Hcm91cCgpO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBjb25zdCBmb3JtRmFjZXRWYWx1ZUlkQ2hhbmdlcyQgPSBwcm9kdWN0R3JvdXAuZ2V0KCdmYWNldFZhbHVlSWRzJykhLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICBza2lwKDEpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaWRzID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0XHJcbiAgICAgICAgICAgICAgICAgICAgLmdldEZhY2V0VmFsdWVzKHsgZmlsdGVyOiB7IGlkOiB7IGluOiBpZHMgfSB9IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBmYWNldFZhbHVlcyB9KSA9PiBmYWNldFZhbHVlcy5pdGVtcyksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5mYWNldFZhbHVlcyQgPSBjb25jYXQoXHJcbiAgICAgICAgICAgIHByb2R1Y3RGYWNldFZhbHVlcyQucGlwZSh0YWtlKDEpKSxcclxuICAgICAgICAgICAgcHJvZHVjdEZhY2V0VmFsdWVzJC5waXBlKHN3aXRjaE1hcFRvKGZvcm1GYWNldFZhbHVlSWRDaGFuZ2VzJCkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0Q2hhbm5lbHMkID0gdGhpcy5wcm9kdWN0JC5waXBlKG1hcChwID0+IHAuY2hhbm5lbHMpKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JCA9IHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcclxuICAgICAgICAgICAgLmdldEFjdGl2ZUNoYW5uZWwoJ2NhY2hlLWZpcnN0JylcclxuICAgICAgICAgICAgLnJlZmV0Y2hPbkNoYW5uZWxDaGFuZ2UoKVxyXG4gICAgICAgICAgICAubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5hY3RpdmVDaGFubmVsLnByaWNlc0luY2x1ZGVUYXgpXHJcbiAgICAgICAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZVRvVGFiKHRhYk5hbWU6IFRhYk5hbWUpIHtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXJcclxuICAgICAgICAgICAgICAgIC5jcmVhdGVVcmxUcmVlKFsnLi8nLCB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLCB0YWI6IHRhYk5hbWUgfV0sIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWxDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gY2hhbm5lbENvZGUgPT09IERFRkFVTFRfQ0hBTk5FTF9DT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChwYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtc1BlclBhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlJC5uZXh0KCt2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NpZ25Ub0NoYW5uZWwoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0Q2hhbm5lbHMkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjaGFubmVscyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRzOiBbdGhpcy5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbElkczogY2hhbm5lbHMubWFwKGMgPT4gYy5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUNoYW5uZWwoY2hhbm5lbElkOiBzdHJpbmcpIHtcclxuICAgICAgICBmcm9tKGdldENoYW5uZWxDb2RlRnJvbVVzZXJTdGF0dXModGhpcy5kYXRhU2VydmljZSwgY2hhbm5lbElkKSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgY2hhbm5lbENvZGUgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5kaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5yZW1vdmUtcHJvZHVjdC1mcm9tLWNoYW5uZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdjYXRhbG9nLnJlbW92ZS1mcm9tLWNoYW5uZWwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblZhcnM6IHsgY2hhbm5lbENvZGUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZHM6IFt0aGlzLmlkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbC1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbC1lcnJvcicpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduVmFyaWFudFRvQ2hhbm5lbCh2YXJpYW50OiBQcm9kdWN0VmFyaWFudEZyYWdtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkczogW3RoaXMuaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RWYXJpYW50SWRzOiBbdmFyaWFudC5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYW5uZWxJZHM6IHZhcmlhbnQuY2hhbm5lbHMubWFwKGMgPT4gYy5pZCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVmFyaWFudEZyb21DaGFubmVsKHsgY2hhbm5lbElkLCB2YXJpYW50IH06IHsgY2hhbm5lbElkOiBzdHJpbmc7IHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQgfSkge1xyXG4gICAgICAgIGZyb20oZ2V0Q2hhbm5lbENvZGVGcm9tVXNlclN0YXR1cyh0aGlzLmRhdGFTZXJ2aWNlLCBjaGFubmVsSWQpKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBjaGFubmVsQ29kZSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLnJlbW92ZS1wcm9kdWN0LXZhcmlhbnQtZnJvbS1jaGFubmVsJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXygnY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25WYXJzOiB7IGNoYW5uZWxDb2RlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5yZW1vdmVWYXJpYW50c0Zyb21DaGFubmVsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0VmFyaWFudElkczogW3ZhcmlhbnQuaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogRU1QVFksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXZhcmlhbnQtZnJvbS1jaGFubmVsLXN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY2F0YWxvZy5ub3RpZnktcmVtb3ZlLXZhcmlhbnQtZnJvbS1jaGFubmVsLWVycm9yJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NldHNDaGFuZ2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIU9iamVjdC52YWx1ZXModGhpcy5hc3NldENoYW5nZXMpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB2YXJpYW50QXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3Qua2V5cyh0aGlzLnZhcmlhbnRBc3NldENoYW5nZXMpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB2YXJpYW50QXNzZXRDaGFuZ2UoZXZlbnQ6IFZhcmlhbnRBc3NldENoYW5nZSkge1xyXG4gICAgICAgIHRoaXMudmFyaWFudEFzc2V0Q2hhbmdlc1tldmVudC52YXJpYW50SWRdID0gZXZlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBwcm9kdWN0LCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBwcm9kdWN0IG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNsdWcobmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbZW50aXR5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ3NsdWcnXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24oZW50aXR5LCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNsdWdJc0VtcHR5ID0gIWN1cnJlbnRUcmFuc2xhdGlvbiB8fCAhY3VycmVudFRyYW5zbGF0aW9uLnNsdWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2x1Z0NvbnRyb2wgJiYgc2x1Z0NvbnRyb2wucHJpc3RpbmUgJiYgY3VycmVudFNsdWdJc0VtcHR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2x1Z0NvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplU3RyaW5nKGAke25hbWVWYWx1ZX1gLCAnLScpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0UHJvZHVjdEZhY2V0VmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5RmFjZXRWYWx1ZU1vZGFsKCkuc3Vic2NyaWJlKGZhY2V0VmFsdWVJZHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmFjZXRWYWx1ZUlkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5nZXRQcm9kdWN0Rm9ybUdyb3VwKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHByb2R1Y3RHcm91cC52YWx1ZS5mYWNldFZhbHVlSWRzO1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHVuaXF1ZShbLi4uY3VycmVudEZhY2V0VmFsdWVJZHMsIC4uLmZhY2V0VmFsdWVJZHNdKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdEdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcm9kdWN0T3B0aW9uKGlucHV0OiBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQgJiB7IGF1dG9VcGRhdGU6IGJvb2xlYW4gfSkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5wcm9kdWN0JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3Byb2R1Y3QsIGxhbmd1YWdlQ29kZV0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0T3B0aW9uKGlucHV0LCBwcm9kdWN0LCBsYW5ndWFnZUNvZGUpLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RPcHRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVQcm9kdWN0RmFjZXRWYWx1ZShmYWNldFZhbHVlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZ2V0UHJvZHVjdEZvcm1Hcm91cCgpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGYWNldFZhbHVlSWRzID0gcHJvZHVjdEdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHM7XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBjdXJyZW50RmFjZXRWYWx1ZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGZhY2V0VmFsdWVJZCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyaWFudHNUb0NyZWF0ZUFyZVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDAgPCB0aGlzLmNyZWF0ZVZhcmlhbnRzQ29uZmlnLnZhcmlhbnRzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVZhcmlhbnRzQ29uZmlnLnZhcmlhbnRzLmV2ZXJ5KHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHYuc2t1ICE9PSAnJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGlzcGxheUZhY2V0VmFsdWVNb2RhbCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICdtZCcsXHJcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUobWFwKGZhY2V0VmFsdWVzID0+IGZhY2V0VmFsdWVzICYmIGZhY2V0VmFsdWVzLm1hcCh2ID0+IHYuaWQpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZ2V0UHJvZHVjdEZvcm1Hcm91cCgpO1xyXG4gICAgICAgIGlmICghcHJvZHVjdEdyb3VwLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnByb2R1Y3QkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Byb2R1Y3QgPSB0aGlzLmdldFVwZGF0ZWRQcm9kdWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAgYXMgRm9ybUdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBDcmVhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UuY3JlYXRlUHJvZHVjdFdpdGhWYXJpYW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYXJpYW50c0NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHsgY3JlYXRlUHJvZHVjdFZhcmlhbnRzLCBwcm9kdWN0SWQgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFudEFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgcHJvZHVjdElkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnByb2R1Y3QkLCB0aGlzLmxhbmd1YWdlQ29kZSQsIHRoaXMuY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3Byb2R1Y3QsIGxhbmd1YWdlQ29kZSwgcHJpY2VJbmNsdWRlc1RheF0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmdldFByb2R1Y3RGb3JtR3JvdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdElucHV0OiBVcGRhdGVQcm9kdWN0SW5wdXQgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhcmlhbnRzSW5wdXQ6IFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXRbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RHcm91cC5kaXJ0eSB8fCB0aGlzLmFzc2V0c0NoYW5nZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRQcm9kdWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RHcm91cCBhcyBGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlUHJvZHVjdElucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50c0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFyaWFudHMnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhcmlhbnRzQXJyYXkgJiYgdmFyaWFudHNBcnJheS5kaXJ0eSkgfHwgdGhpcy52YXJpYW50QXNzZXRzQ2hhbmdlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzSW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRQcm9kdWN0VmFyaWFudHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNBcnJheSBhcyBGb3JtQXJyYXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZUluY2x1ZGVzVGF4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UudXBkYXRlUHJvZHVjdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1VwZGF0ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ2F1dG9VcGRhdGVWYXJpYW50TmFtZXMnXSk/LnZhbHVlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzSW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNsdWdBZnRlclNhdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFudEFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFudEZhY2V0VmFsdWVDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuY2FuRGVhY3RpdmF0ZSgpICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHMgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gb24gY2hhbmdlcyB0byB0aGUgcHJvZHVjdCBvciBjdXJyZW50IGxhbmd1YWdlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhcclxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlbJ3Byb2R1Y3QnXT4sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24ocHJvZHVjdCwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIHByb2R1Y3Q6IHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHByb2R1Y3QuZW5hYmxlZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgICAgICBzbHVnOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24uc2x1ZyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogcHJvZHVjdC5mYWNldFZhbHVlcy5tYXAoZnYgPT4gZnYuaWQpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KFsncHJvZHVjdCcsICdjdXN0b21GaWVsZHMnXSksXHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1aWxkVmFyaWFudEZvcm1BcnJheShwcm9kdWN0LnZhcmlhbnRMaXN0Lml0ZW1zLCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRWYXJpYW50Rm9ybUFycmF5KHZhcmlhbnRzOiBQcm9kdWN0VmFyaWFudEZyYWdtZW50W10sIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudHNGb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB2YXJpYW50cy5mb3JFYWNoKCh2YXJpYW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbih2YXJpYW50LCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRmFjZXRWYWx1ZUNoYW5nZXMgPSB0aGlzLnZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlc1t2YXJpYW50LmlkXTtcclxuICAgICAgICAgICAgY29uc3QgZmFjZXRWYWx1ZUlkcyA9IHBlbmRpbmdGYWNldFZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgPyBwZW5kaW5nRmFjZXRWYWx1ZUNoYW5nZXMubWFwKGZ2ID0+IGZ2LmlkKVxyXG4gICAgICAgICAgICAgICAgOiB2YXJpYW50LmZhY2V0VmFsdWVzLm1hcChmdiA9PiBmdi5pZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBWYXJpYW50Rm9ybVZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHZhcmlhbnQuaWQsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB2YXJpYW50LmVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBza3U6IHZhcmlhbnQuc2t1LFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdmFyaWFudFRyYW5zbGF0aW9uID8gdmFyaWFudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByaWNlOiB2YXJpYW50LnByaWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2VXaXRoVGF4OiB2YXJpYW50LnByaWNlV2l0aFRheCxcclxuICAgICAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnQudGF4Q2F0ZWdvcnkuaWQsXHJcbiAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogdmFyaWFudC5zdG9ja09uSGFuZCxcclxuICAgICAgICAgICAgICAgIHVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQudXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgICAgIHRyYWNrSW52ZW50b3J5OiB2YXJpYW50LnRyYWNrSW52ZW50b3J5LFxyXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkcyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2YXJpYW50Rm9ybUdyb3VwID0gdmFyaWFudHNGb3JtQXJyYXkuY29udHJvbHMuZmluZChjID0+IGMudmFsdWUuaWQgPT09IHZhcmlhbnQuaWQpIGFzXHJcbiAgICAgICAgICAgICAgICB8IEZvcm1Hcm91cFxyXG4gICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYW50Rm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudEZvcm1Hcm91cC5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRGb3JtR3JvdXAucGF0Y2hWYWx1ZShncm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Rm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGZhY2V0VmFsdWVJZHMpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50c0Zvcm1BcnJheS5pbnNlcnQoaSwgdmFyaWFudEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFyaWFudEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXN0b21GaWVsZHNHcm91cCA9IHZhcmlhbnRGb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pIGFzIEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUZpZWxkc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudEZvcm1Hcm91cC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBjdXN0b21GaWVsZHNHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50VHJhbnNsYXRpb24sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHByb2R1Y3QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIHByb2R1Y3Qgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRQcm9kdWN0KFxyXG4gICAgICAgIHByb2R1Y3Q6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeVsncHJvZHVjdCddPixcclxuICAgICAgICBwcm9kdWN0Rm9ybUdyb3VwOiBGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0SW5wdXQgfCBDcmVhdGVQcm9kdWN0SW5wdXQge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9kdWN0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogcHJvZHVjdCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogcHJvZHVjdEZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogcHJvZHVjdC5zbHVnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBwcm9kdWN0Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgfSBhcyBVcGRhdGVQcm9kdWN0SW5wdXQgfCBDcmVhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBvZiBwcm9kdWN0IHZhcmlhbnRzIGFuZCB0aGUgdmFsdWVzIGZyb20gdGhlIGRldGFpbEZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gbmV3IGFycmF5XHJcbiAgICAgKiB3aGljaCBjYW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZFByb2R1Y3RWYXJpYW50cyhcclxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0V2l0aFZhcmlhbnRzUXVlcnlbJ3Byb2R1Y3QnXT4sXHJcbiAgICAgICAgdmFyaWFudHNGb3JtQXJyYXk6IEZvcm1BcnJheSxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiBib29sZWFuLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdIHtcclxuICAgICAgICBjb25zdCBkaXJ0eUZvcm1Db250cm9scyA9IHZhcmlhbnRzRm9ybUFycmF5LmNvbnRyb2xzLmZpbHRlcihjID0+IGMuZGlydHkpO1xyXG4gICAgICAgIGNvbnN0IGRpcnR5VmFyaWFudHMgPSBkaXJ0eUZvcm1Db250cm9sc1xyXG4gICAgICAgICAgICAubWFwKGMgPT4gdGhpcy5wcm9kdWN0VmFyaWFudE1hcC5nZXQoYy52YWx1ZS5pZCkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgICAgICBjb25zdCBkaXJ0eVZhcmlhbnRWYWx1ZXMgPSBkaXJ0eUZvcm1Db250cm9scy5tYXAoYyA9PiBjLnZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKGRpcnR5VmFyaWFudHMubGVuZ3RoICE9PSBkaXJ0eVZhcmlhbnRWYWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfKGBlcnJvci5wcm9kdWN0LXZhcmlhbnQtZm9ybS12YWx1ZXMtZG8tbm90LW1hdGNoYCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlydHlWYXJpYW50c1xyXG4gICAgICAgICAgICAubWFwKCh2YXJpYW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWU6IFZhcmlhbnRGb3JtVmFsdWUgPSBkaXJ0eVZhcmlhbnRWYWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gdmFyaWFudC5pZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGFibGU6IHZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZm9ybVZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC50YXhDYXRlZ29yeUlkID0gZm9ybVZhbHVlLnRheENhdGVnb3J5SWQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZmFjZXRWYWx1ZUlkcyA9IGZvcm1WYWx1ZS5mYWNldFZhbHVlSWRzO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByaWNlID0gcHJpY2VJbmNsdWRlc1RheCA/IGZvcm1WYWx1ZS5wcmljZVdpdGhUYXggOiBmb3JtVmFsdWUucHJpY2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NldENoYW5nZXMgPSB0aGlzLnZhcmlhbnRBc3NldENoYW5nZXNbdmFyaWFudC5pZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzZXRDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZlYXR1cmVkQXNzZXRJZCA9IGFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0Py5pZDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzZXRJZHMgPSBhc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFByb2R1Y3RGb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxGb3JtLmdldCgncHJvZHVjdCcpIGFzIEZvcm1Hcm91cDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZXJ2ZXIgbWF5IGFsdGVyIHRoZSBzbHVnIHZhbHVlIGluIG9yZGVyIHRvIG5vcm1hbGl6ZSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3MgdXBvbiBzYXZpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlU2x1Z0FmdGVyU2F2ZShyZXN1bHRzOiBBcnJheTxVcGRhdGVQcm9kdWN0TXV0YXRpb24gfCBVcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbj4pIHtcclxuICAgICAgICBjb25zdCBmaXJzdFJlc3VsdCA9IHJlc3VsdHNbMF07XHJcbiAgICAgICAgY29uc3Qgc2x1Z0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsncHJvZHVjdCcsICdzbHVnJ10pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc1VwZGF0ZU11dGF0aW9uKGlucHV0OiBhbnkpOiBpbnB1dCBpcyBVcGRhdGVQcm9kdWN0TXV0YXRpb24ge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuaGFzT3duUHJvcGVydHkoJ3VwZGF0ZVByb2R1Y3QnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzbHVnQ29udHJvbCAmJiBpc1VwZGF0ZU11dGF0aW9uKGZpcnN0UmVzdWx0KSkge1xyXG4gICAgICAgICAgICBzbHVnQ29udHJvbC5zZXRWYWx1ZShmaXJzdFJlc3VsdC51cGRhdGVQcm9kdWN0LnNsdWcsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNsci1mbGV4LXJvd1wiPlxyXG4gICAgICAgICAgICA8dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZW50aXR5JCB8IGFzeW5jXCI+PC92ZHItZW50aXR5LWluZm8+XHJcbiAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXIgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ2VuYWJsZWQnXSlcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cInByb2R1Y3QtZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlKClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmUgfHwgIXZhcmlhbnRzVG9DcmVhdGVBcmVWYWxpZCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J11cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lKSAmJiAhYXNzZXRzQ2hhbmdlZCgpICYmICF2YXJpYW50QXNzZXRzQ2hhbmdlZCgpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLnVwZGF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG48L3Zkci1hY3Rpb24tYmFyPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCIgKm5nSWY9XCJwcm9kdWN0JCB8IGFzeW5jIGFzIHByb2R1Y3RcIj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGhpZGRlbiB4LWRhdGE9XCJwcmV2ZW50cyBlbnRlciBrZXkgZnJvbSB0cmlnZ2VyaW5nIG90aGVyIGJ1dHRvbnNcIj48L2J1dHRvbj5cclxuICAgIDxjbHItdGFicz5cclxuICAgICAgICA8Y2xyLXRhYj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbHJUYWJMaW5rIChjbGljayk9XCJuYXZpZ2F0ZVRvVGFiKCdkZXRhaWxzJylcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnByb2R1Y3QtZGV0YWlscycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxjbHItdGFiLWNvbnRlbnQgKmNscklmQWN0aXZlPVwiKGFjdGl2ZVRhYiQgfCBhc3luYykgPT09ICdkZXRhaWxzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xyLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImZvcm0tYmxvY2tcIiBmb3JtR3JvdXBOYW1lPVwicHJvZHVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXNOZXckIHwgYXN5bmMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqdmRySWZNdWx0aWNoYW5uZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvbW1vbi5jaGFubmVscycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmRGVmYXVsdENoYW5uZWxBY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2hhbm5lbC1hc3NpZ25tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hhbm5lbCBvZiBwcm9kdWN0Q2hhbm5lbHMkIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWwuY29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInRpbWVzLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWNvbkNsaWNrKT1cInJlbW92ZUZyb21DaGFubmVsKGNoYW5uZWwuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGFubmVsLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoYW5uZWxDb2RlXT1cImNoYW5uZWwuY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY2hhbm5lbC1iYWRnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoYW5uZWwuY29kZSB8IGNoYW5uZWxDb2RlVG9MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgKGNsaWNrKT1cImFzc2lnblRvQ2hhbm5lbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImxheWVyc1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFzc2lnbi10by1jaGFubmVsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0taXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy5wcm9kdWN0LW5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlU2x1ZygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLXJlbmFtZS13cmFwcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudmlzaWJsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzTmV3JCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ25hbWUnXSk/LmRpcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLmF1dG8tdXBkYXRlLXByb2R1Y3QtdmFyaWFudC1uYW1lJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXRhbG9nLnNsdWcnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JzXT1cInsgcGF0dGVybjogJ2NhdGFsb2cuc2x1Zy1wYXR0ZXJuLWVycm9yJyB8IHRyYW5zbGF0ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEoWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXSB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcmljaC10ZXh0LWVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29tbW9uLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcmljaC10ZXh0LWVkaXRvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoWydwcm9kdWN0JywgJ2N1c3RvbUZpZWxkcyddKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKFsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J10gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtZGV0YWlsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsRm9ybV09XCJkZXRhaWxGb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsci1jb2wtbWQtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Fzc2V0c109XCJhc3NldENoYW5nZXMuYXNzZXRzIHx8IHByb2R1Y3QuYXNzZXRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZWF0dXJlZEFzc2V0XT1cImFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0IHx8IHByb2R1Y3QuZmVhdHVyZWRBc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXBkYXRlUGVybWlzc2lvbnNdPVwidXBkYXRlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhc3NldENoYW5nZXMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItYXNzZXRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFjZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZhY2V0LXZhbHVlLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXRWYWx1ZSBvZiBmYWNldFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZhY2V0VmFsdWVdPVwiZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVQcm9kdWN0RmFjZXRWYWx1ZShmYWNldFZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZmFjZXQtdmFsdWUtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvZHVjdEZhY2V0VmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYWRkLWZhY2V0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc05ldyQgfCBhc3luY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoND57eyAnY2F0YWxvZy5wcm9kdWN0LXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YXJpYW50c0NoYW5nZSk9XCJjcmVhdGVWYXJpYW50c0NvbmZpZyA9ICRldmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWdlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9jbHItdGFiLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9jbHItdGFiPlxyXG4gICAgICAgIDxjbHItdGFiICpuZ0lmPVwiIShpc05ldyQgfCBhc3luYylcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbHJUYWJMaW5rIChjbGljayk9XCJuYXZpZ2F0ZVRvVGFiKCd2YXJpYW50cycpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5wcm9kdWN0LXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGNsci10YWItY29udGVudCAqY2xySWZBY3RpdmU9XCIoYWN0aXZlVGFiJCB8IGFzeW5jKSA9PT0gJ3ZhcmlhbnRzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJmb3JtLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctbW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmFyaWFudERpc3BsYXlNb2RlID0gJ2NhcmQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXByaW1hcnldPVwidmFyaWFudERpc3BsYXlNb2RlID09PSAnY2FyZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImxpc3RcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnVsbC1sYWJlbFwiPnt7ICdjYXRhbG9nLmRpc3BsYXktdmFyaWFudC1jYXJkcycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZhcmlhbnREaXNwbGF5TW9kZSA9ICd0YWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tcHJpbWFyeV09XCJ2YXJpYW50RGlzcGxheU1vZGUgPT09ICd0YWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRhYmxlXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ1bGwtbGFiZWxcIj57eyAnY2F0YWxvZy5kaXNwbGF5LXZhcmlhbnQtdGFibGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFyaWFudC1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidjYXRhbG9nLmZpbHRlci1ieS1uYW1lLW9yLXNrdScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIChjbGljayk9XCJmaWx0ZXJJbnB1dC5zZXRWYWx1ZSgnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ0aW1lc1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCAnbWFuYWdlLXZhcmlhbnRzJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBlZGl0LXZhcmlhbnRzLWJ0biBtYjAgbXIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiYWRkLXRleHRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cubWFuYWdlLXZhcmlhbnRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLXJvdyBtdDRcIiAqbmdJZj1cIjEwIDwgKHBhZ2luYXRpb25Db25maWckIHwgYXN5bmMpPy50b3RhbEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHM+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIocGFnaW5hdGlvbkNvbmZpZyQgfCBhc3luYyk/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJzZXRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcGFnaW5hdGlvbi1jb250cm9scz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnRzLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmFyaWFudERpc3BsYXlNb2RlID09PSAndGFibGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRzXT1cInZhcmlhbnRzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25Db25maWddPVwicGFnaW5hdGlvbkNvbmZpZyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Hcm91cHNdPVwicHJvZHVjdC5vcHRpb25Hcm91cHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhdPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdFZhcmlhbnRzRm9ybUFycmF5XT1cImRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BlbmRpbmdBc3NldENoYW5nZXNdPVwidmFyaWFudEFzc2V0Q2hhbmdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXByb2R1Y3QtdmFyaWFudHMtdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnRzLWxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2YXJpYW50RGlzcGxheU1vZGUgPT09ICdjYXJkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YXJpYW50c109XCJ2YXJpYW50cyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uQ29uZmlnXT1cInBhZ2luYXRpb25Db25maWckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhdPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGVuZGluZ0ZhY2V0VmFsdWVDaGFuZ2VzXT1cInZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Hcm91cHNdPVwicHJvZHVjdC5vcHRpb25Hcm91cHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdFZhcmlhbnRzRm9ybUFycmF5XT1cImRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RheENhdGVnb3JpZXNdPVwidGF4Q2F0ZWdvcmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiY3VzdG9tVmFyaWFudEZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21PcHRpb25GaWVsZHNdPVwiY3VzdG9tT3B0aW9uRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUxhbmd1YWdlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nQXNzZXRDaGFuZ2VzXT1cInZhcmlhbnRBc3NldENoYW5nZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXNzaWduVG9DaGFubmVsKT1cImFzc2lnblZhcmlhbnRUb0NoYW5uZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVGcm9tQ2hhbm5lbCk9XCJyZW1vdmVWYXJpYW50RnJvbUNoYW5uZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhc3NldENoYW5nZSk9XCJ2YXJpYW50QXNzZXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cGRhdGVQcm9kdWN0T3B0aW9uKT1cInVwZGF0ZVByb2R1Y3RPcHRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0ZWRWYXJpYW50SWRzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItcHJvZHVjdC12YXJpYW50cy1saXN0PlxyXG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tcm93IG10NFwiICpuZ0lmPVwiMTAgPCAocGFnaW5hdGlvbkNvbmZpZyQgfCBhc3luYyk/LnRvdGFsSXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJzZXRJdGVtc1BlclBhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLXBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIihwYWdpbmF0aW9uQ29uZmlnJCB8IGFzeW5jKT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXBhZ2luYXRpb24tY29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9jbHItdGFiLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9jbHItdGFiPlxyXG4gICAgPC9jbHItdGFicz5cclxuPC9mb3JtPlxyXG4iXX0=