{"version":3,"sources":["../../.yarn/cache/browser-pack-npm-6.1.0-67557e011b-9e5993d3ee.zip/node_modules/browser-pack/_prelude.js","../../.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip/node_modules/he/he.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/decode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/encode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/index.js","../../.yarn/cache/underscore-npm-1.13.6-3ebe9d92fb-d5cedd14a9.zip/node_modules/underscore/underscore-umd.js","business-objects/GeneratedCollectionDetails.js","lib/getOptimizedCover-ts.js","lib/utility/macmillanMessage.js","models/dao/MediaParameters.js","public/ecmascript/components/collection_campaign_page/CollectionDefinition.js","public/ecmascript/components/common/HashManager.js","public/ecmascript/components/common/modal.js","public/ecmascript/components/common/templates/modal.html.js","public/ecmascript/components/details_cover_image/main.js","public/ecmascript/components/details_cover_image/views/details_cover_image.js","public/ecmascript/components/details_related_titles/DetailsRelatedTitlesTemplate.html.js","public/ecmascript/components/details_related_titles/DetailsRelatedTitlesView.js","public/ecmascript/components/holdInformation/templates/HoldInformation.html.js","public/ecmascript/components/holdInformation/views/HoldInformation.js","public/ecmascript/components/holdInformation/views/HoldInformationModal.js","public/ecmascript/components/holdInformationV2/HoldInformationModalV2.js","public/ecmascript/components/holdInformationV2/HoldInformationV2.html.js","public/ecmascript/components/holdInformationV2/HoldInformationV2.js","public/ecmascript/components/media/ContextMenu.js","public/ecmascript/components/media/Cover.js","public/ecmascript/components/media/MediaInterface.js","public/ecmascript/components/media/ReadingHistoryButton.js","public/ecmascript/components/media/TitleActionButton.js","public/ecmascript/components/media/TitleCard.js","public/ecmascript/components/media/TitleCollectionView.js","public/ecmascript/components/media/TitleHeaderBar.js","public/ecmascript/components/media/WishListButton.js","public/ecmascript/components/media/models/Title.js","public/ecmascript/components/media/models/TitleCollection.js","public/ecmascript/components/media/templates/ContextMenu.html.js","public/ecmascript/components/media/templates/CopiesAvailable.html.js","public/ecmascript/components/media/templates/Cover.html.js","public/ecmascript/components/media/templates/NoCover.html.js","public/ecmascript/components/media/templates/ReadingHistoryButton.html.js","public/ecmascript/components/media/templates/StarViewTemplate.html.js","public/ecmascript/components/media/templates/TitleAuthor.html.js","public/ecmascript/components/media/templates/TitleCard.html.js","public/ecmascript/components/media/templates/TitleFormatBadge.html.js","public/ecmascript/components/media/templates/TitleName.html.js","public/ecmascript/components/media/templates/WishListButton.html.js","public/ecmascript/components/media/views/TitleInfo.js","public/ecmascript/components/media/views/TitleInfo/CopiesAvailable.js","public/ecmascript/components/media/views/TitleInfo/LuckyDayHolds.js","public/ecmascript/components/media/views/TitleInfo/StarRating.js","public/ecmascript/components/media/views/TitleInfo/StarView.js","public/ecmascript/components/media/views/TitleInfo/TitleAuthor.js","public/ecmascript/components/media/views/TitleInfo/TitleEdition.js","public/ecmascript/components/media/views/TitleInfo/TitleFormatBadge.js","public/ecmascript/components/media/views/TitleInfo/TitleName.js","public/ecmascript/components/media/views/TitleInfo/TitleSeries.js","public/ecmascript/components/not_compatible_format/not-compatible-format-view.html.js","public/ecmascript/components/not_compatible_format/not-compatible-format-view.js","public/ecmascript/components/premium_reviews/main.js","public/ecmascript/components/premium_reviews/models/premium_review.js","public/ecmascript/components/premium_reviews/templates/reviews_desktop.html.js","public/ecmascript/components/premium_reviews/templates/reviews_mobile.html.js","public/ecmascript/components/premium_reviews/views/premium_reviews.js","public/ecmascript/components/recent_issues_drawer/RecentIssuesDrawer.js","public/ecmascript/models/PatronTitleStatus.js","public/ecmascript/models/base.js","public/ecmascript/models/patron_media_items.js","public/ecmascript/pages/details_page.js","public/ecmascript/templates/loader.html.js","public/ecmascript/title-actions/TitleActions.js","public/ecmascript/title-actions/TitleState.js","public/ecmascript/util/keycodes.js","public/ecmascript/util/title-actions/processForwardedAction.js","public/ecmascript/views/base.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC1/DA,IAAM,IAAI,QAAQ,YAAR,CAAV;;AAEA;AACA,OAAO,OAAP;AACI,0CAAc;AAAA;;AACV,aAAK,SAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,EAA1B;AACA,aAAK,iBAAL,GAA0B,IAA1B,CAHU,CAGsB;AAChC,aAAK,cAAL,GAA0B,EAA1B,CAJU,CAIoB;AAC9B,aAAK,QAAL,GAA0B,EAA1B,CALU,CAKoB;AAC9B,aAAK,UAAL,GAA0B,EAA1B;;AAEA,aAAK,MAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,SAA1B,CATU,CAS2B;;AAErC,eAAO,MAA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","file":"details_page.bundle.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '"',\n\t\t'&': '&',\n\t\t'\\'': ''',\n\t\t'<': '<',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '>',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '`'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t\t.replace(/<\\u20D2/g, '<⃒')\n\t\t\t\t\t.replace(/fj/g, 'fj');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t.replace(/<\\u20D2/g, '<⃒');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `𝌆`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `𝌆`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.13.6\n // https://underscorejs.org\n // (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.13.6';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath(path) {\n return _$1.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n // In order to prevent third-party code injection through\n // `_.templateSettings.variable`, we test it against the following regular\n // expression. It is intentionally a bit more liberal than just matching valid\n // identifiers, but still prevents possible loopholes through defaults or\n // destructuring assignment.\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _$1, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _ = mixin(allExports);\n // Legacy Node.js API.\n _._ = _;\n\n return _;\n\n})));\n//# sourceMappingURL=underscore-umd.js.map\n","const _ = require('underscore');\n\n// ref: OverDrive.Thunder.Models.DataModels.GeneratedCollectionDetails\nmodule.exports = class GeneratedCollectionDetails {\n constructor() {\n this.mediaType = '';\n this.language = '';\n this.publisherEntityId = null; // int\n this.maturityLevels = []; // string\n this.subjects = []; // string\n this.bisacCodes = [];\n\n this.sortBy = '';\n this.maxItems = undefined; // int\n\n Object.assign(this, ...arguments);\n }\n\n // Translates GeneratedCollectionDetails model to parameters that align with the MediaParameters model for executing a \"search\"\n serializeForSearch() {\n let model = _.extend({}, this);\n\n // language is an array in MediaParameters\n model.language = _(_.flatten([model.language])).reject((val) => _.isEmpty(val));\n\n // maturityLevels is called maturityLevel\n model.maturityLevel = _(_.flatten([model.maturityLevels])).reject((val) => _.isEmpty(val));\n delete model.maturityLevels;\n\n // subjects is called subject\n model.subject = _(_.flatten([model.subjects])).reject((val) => _.isEmpty(val));\n delete model.subjects;\n\n if (window.featureManager.isEnabled('bisac-collection-filtering')) {\n model.bisacCode = _(_.flatten([model.bisacCodes])).reject((val) => _.isEmpty(val));\n }\n\n if (model.mediaTypes) {\n if (window.featureManager.isEnabled('media-types-collection-param')) {\n delete model.mediaType;\n } else{\n delete model.mediaTypes;\n }\n }\n\n if (model.mediaTypes) {\n model.mediaTypes = model.mediaTypes.join(',');\n } else if (window.featureManager.isEnabled('filter-out-ntc')) {\n model.mediaTypes = window.OverDrive.whitelistedMediaTypes;\n }\n\n delete model.bisacCodes; // we need to remove this property regardless because the correct query param is `bisacCode`. The mismatch between the thunder query params and the property names in the generated collection definitions is...fun.\n\n return model;\n }\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOptimizedCovers = void 0;\nvar _ = __importStar(require(\"underscore\"));\nfunction getOptimizedCovers(covers, desiredSize) {\n // coversBySize is now an array of covers, from smallest to largest\n var coversBySize = _.sortBy(covers, 'width');\n // Start with the biggest cover\n // Copy object with Object.assign() so we dont damage reference\n var optimizedCover = Object.assign({}, _.last(coversBySize));\n if (optimizedCover && optimizedCover.href) {\n var legacyToOptimizedImageHostsMap = {\n 'https://img1.od-cdn.com/': 'https://ic.od-cdn.com/resize',\n 'https://images.overdrivechina.cn/': 'https://images.overdrivechina.cn/resize'\n };\n var hostMapKey = _.find(Object.keys(legacyToOptimizedImageHostsMap), function (legacy) { return optimizedCover.href.startsWith(legacy); });\n if (hostMapKey) {\n // look up the corresponding optimized root, e.g. https://img1.od-cdn.com/ -> https://ic.od-cdn.com/resize\n var optimizedImageHost = legacyToOptimizedImageHostsMap[hostMapKey];\n var optimizations = 'type=auto'; // format = auto -> use webp if the device supports it\n var path = '';\n if (typeof document === 'undefined') {\n // node.js usage should be fine with the URL api\n var url = new URL(optimizedCover.href);\n path = url.pathname;\n }\n else {\n // hack to get url pathname since IE doesn't support the URL api. I didn't want to add a polyfill\n var a = document.createElement('a');\n a.href = optimizedCover.href;\n path = a.pathname;\n if (!path.startsWith('/')) { // browsers are inconsistent about whether the pathname includes a leading slash, but the cachefly api requires exactly one on the url param\n path = \"/\".concat(path);\n }\n }\n var encodedSrcUrl = encodeURIComponent(path);\n var coverHrefWithoutSize = \"\".concat(optimizedImageHost, \"?\").concat(optimizations, \"&url=\").concat(encodedSrcUrl, \"&stripmeta=true\");\n optimizedCover.href = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize);\n optimizedCover.srcset = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 2), \" 2x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 1.5), \" 1.5x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize, \" 1x\");\n return optimizedCover;\n }\n }\n return _.find(coversBySize, function (cover) { return cover.width >= desiredSize; }) ||\n _.last(coversBySize); // finds the first cover that is big enough\n}\nexports.getOptimizedCovers = getOptimizedCovers;\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n","// Original: https://jira.hq.overdrive.com/browse/LHTNG-3809 Relocation: https://jira.hq.overdrive.com/browse/LHTNG-3862\n\nconst MacmillanMessage = function(model) {\n let badPublisher = parseInt(model.get(\"publisherAccount\").id, 10) === 6222;\n let today = new Date();\n let releaseDate = new Date(model.get(\"estimatedReleaseDate\"));\n let macmillanLicensingChangeInEffect = releaseDate >= new Date(2019, 10, 1);\n let releaseDatePlus8Weeks = new Date(releaseDate);\n releaseDatePlus8Weeks.setDate(releaseDate.getDate() + (8 * 7));\n let releaseDateWithinEightWeeks = (releaseDate < today) && (today < releaseDatePlus8Weeks);\n\n return window.featureManager.isEnabled('macmillanMessaging')\n && macmillanLicensingChangeInEffect\n && badPublisher\n && (releaseDateWithinEightWeeks || (macmillanLicensingChangeInEffect && model.get(\"isPrereleaseTitle\")))\n ? html('macmillanMessage', {date : releaseDatePlus8Weeks })\n : '';\n}\n\nexport default MacmillanMessage;\n","const _ = require('underscore');\n\n/**\n * Defines all the available input parameters for the media endpoint\n * @class MediaParameters\n * ref: https://thunder.api.test.overdrive.com/docs/ui/index#!/Media/V2Media_IndexMedia\n */\nmodule.exports = class MediaParameters {\n\n constructor() {\n this.query = '';\n this.mediaType = '';\n this.mediaTypes = '';\n this.title = '';\n this.series = '';\n this.publisherId = '';\n this.publisherEntityId = null;\n this.imprintId = '';\n this.identifier = '';\n this.creator = '';\n this.creatorId = null;\n this.addedDate = '';\n this.availableFirst = null;\n this.showOnlyAvailable = false;\n this.showOnlyPrerelease = false;\n this.showOnlyLuckyDayAvailable = false;\n this.hasAudioSynchronizedText = null;\n this.collectionId = 0;\n\n // All of the following arrays are string arrays\n this.format = [];\n this.subject = [];\n this.bisacCode = [];\n this.maturityLevel = [];\n this.language = [];\n this.atosLevel = [];\n this.lexileScore = [];\n this.interestLevel = [];\n this.gradeLevel = [];\n this.includedFacets = [];\n\n this.sortBy = 'relevance';\n this.show = 'owned';\n this.page = 1;\n this.perPage = 24;\n this.includeFacets = true;\n this.includeNoFormatTitles = false;\n this.filterCpcTitles = false;\n this.maxItems = 0;\n\n Object.assign(this, ...arguments);\n }\n\n applyRoomFiltersAndUserPrefs(roomFilters, userPreferences) {\n if (roomFilters) {\n // Note that the names don't match up so we can't just extend\n if (roomFilters.maturityLevels) {\n this.maturityLevel = roomFilters.maturityLevels;\n }\n if (roomFilters.subjects) {\n this.subject = roomFilters.subjects;\n }\n if (roomFilters.language) {\n this.language = roomFilters.language;\n }\n if (roomFilters.mediaType) {\n this.mediaType = roomFilters.mediaType;\n this.mediaTypes = roomFilters.mediaType;\n }\n }\n\n if (userPreferences) {\n // There may be more user prefs to apply besides audience-settings but this\n // was the immediate need. We can add more as they come up.\n if (userPreferences['audience-setting'] && this.maturityLevel.length === 0) {\n let audience = userPreferences['audience-setting'];\n let maturityLevels = [];\n _.each(_.keys(audience), function(key) {\n if (audience[key] && key !== 'all') {\n maturityLevels.push(key);\n }\n });\n if (maturityLevels.length > 0) {\n this.maturityLevel = maturityLevels;\n }\n }\n }\n }\n\n serialize() {\n let response = _.extend({}, this);\n\n // Remove all properties that do not have a value set\n Object.keys(response).forEach((key) => {\n !this._hasValue(response[key]) && delete response[key];\n });\n\n return response;\n }\n\n _hasValue(value) {\n return !((_(value).isObject() && _(value).isEmpty()) || !value) || value === false;\n }\n};\n","import MediaInterface from '../media/MediaInterface';\n\nimport GeneratedCollectionDetails from '../../../../business-objects/GeneratedCollectionDetails';\n\n// ref: Thunder.Models.ResponseModels.CollectionDefinition\nexport default class CollectionDefinition extends Backbone.Model {\n\n get idAttribute() { return 'id'; }\n\n get collectionOptions() {\n let options = {\n includeFacets: false,\n perPage: this.pageSize || 6,\n shuffle: this.shuffle || this.isLuckyDay\n };\n if (this.get('sortByAvailability') || this.get('availabilityOption') === 'available-first') {\n options.availableFirst = true;\n }\n if (this.get('showOnlyAvailable') || this.get('availabilityOption') === 'available-only') {\n options.showOnlyAvailable = true;\n }\n if (this.get('showOnlyPrerelease')) {\n options.showOnlyPrerelease = true;\n }\n if (this.useListOrder){\n options.sortBy = 'listorder';\n }\n\n return options;\n }\n\n defaults() {\n return {\n id : '0',\n name : '',\n description : '',\n availabilityOption : '',\n showOnlyAvailable : false,\n showOnlyPrerelease : false,\n sortByAvailability : false,\n curatedCollectionDetails : null,\n generatedCollectionDetails : null,\n lastModified : null,\n order : 0,\n\n // Computed property\n totalItems : 0\n };\n }\n\n get isLuckyDay(){\n return this.get('availabilityOption') === 'available-luckyday';\n }\n\n get isGenerated() {\n return !_(this.get('generatedCollectionDetails')).isEmpty();\n }\n\n get isCurated() {\n return !_(this.get('curatedCollectionDetails')).isEmpty();\n }\n\n get useListOrder(){\n return this.isCurated && this.get('curatedCollectionDetails').isOrdered;\n }\n\n /**\n * @prop {TitleCollection} collection\n * @memberof CollectionDefinition\n */\n constructor() {\n super(...arguments);\n\n this._mediaInterface = new MediaInterface();\n\n this.titleCollection = this._mediaInterface.items;\n\n this.listenTo(this.titleCollection, 'all', () => {\n this.set('totalItems', this.titleCollection.length);\n });\n }\n\n fetchCollectionTitles({ patronSettings, room}) {\n // Parse the current room's maturityLevels if there is a room, and a maturityLevels filter has been set\n let roomHasMaturityLevelFilter = !_.isEmpty(room && room.filters && room.filters.maturityLevels);\n\n let patronMaturityLevelPreferences = this._parsePatronAudienceSettings(patronSettings);\n\n if (this.isGenerated) {\n let genColDetails = this.get('generatedCollectionDetails');\n if (this.attributes.sortBy) {\n genColDetails.sortBy = this.attributes.sortBy;\n }\n if (!!this.get('showOnlyLuckyDayAvailable')){\n genColDetails.showOnlyLuckyDayAvailable = true;\n }\n let details = new GeneratedCollectionDetails(genColDetails);\n let params = details.serializeForSearch();\n\n if (!!patronSettings.showOnlyAvailable) {\n params.showOnlyAvailable = true;\n }\n\n // If we are in a room with maturity filters applied, the filters will be apart of the collection definition and we can simply query for the collection\n // User preferences should NOT override a room's maturity filter\n if (roomHasMaturityLevelFilter) {\n return this._mediaInterface.fetchCollectionByParameters(params, this.collectionOptions);\n }\n // Otherwise determine if the User's maturity filter settings cover the collection's maturityLevel settings\n else {\n let generatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!_(patronMaturityLevelPreferences).isEmpty() && _(params.maturityLevel).isEmpty()) {\n Object.assign(generatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n // Fake an empty response if all the auto generated collection's filters are not covered by the user's maturity level settings\n return this._patronFiltersPermitCollection(params.maturityLevel, patronMaturityLevelPreferences)\n ? this._mediaInterface.fetchCollectionByParameters(params, generatedCollectionOptions)\n : this._mediaInterface.fetchEmptyResponse();\n }\n }\n // else if \"isCurated\"\n else {\n let curatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!!patronSettings.showOnlyAvailable) {\n curatedCollectionOptions.showOnlyAvailable = true;\n }\n\n if (window.featureManager.isEnabled('sort-curated-list-carousels') && this.attributes.sortBy) {\n curatedCollectionOptions.sortBy = this.attributes.sortBy;\n }\n\n // If we are NOT in a room, apply a user's maturity settings if present to the collection request\n // The expectation is that if none of the content satisfies the user's filter its acceptable that no results are returned\n if (_(room).isEmpty()) {\n Object.assign(curatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n return this._mediaInterface.fetchCollectionById(this.id, curatedCollectionOptions);\n }\n }\n\n // Convert the patron audience settings model into an array of filter terms that MediaInterface understands, ex:\n // \"audience-setting\": {\n // \"all\" : false,\n // \"juvenile\" : false,\n // \"youngadult\" : true,\n // \"generalcontent\" : true,\n // \"adultonly\" : true\n // }\n // to: [\"youngadult\", \"generalcontent\", \"adultonly\"]\n /** @returns {string[]} */\n _parsePatronAudienceSettings(patronSettings) {\n let patronAudienceSetting = patronSettings && patronSettings['audience-setting'] || {};\n\n if (_(patronAudienceSetting).isEmpty() || patronAudienceSetting.all) {\n return [];\n }\n\n let audienceFilters = [];\n _(patronAudienceSetting).each((isApplied, key) => {\n if (isApplied && key !== \"all\") {\n audienceFilters.push(key);\n }\n });\n\n return audienceFilters;\n }\n\n _patronFiltersPermitCollection(collectionMaturityFilters = [], userMaturityFilters = []) {\n if (userMaturityFilters.length === 0) {\n return true;\n }\n\n const collectionLower = collectionMaturityFilters.map((filter) => filter.toLowerCase());\n const userLower = userMaturityFilters.map((filter) => filter.toLowerCase());\n\n return _(collectionLower).difference(userLower).length === 0;\n }\n}\n","import QueryString from 'querystring';\n\nexport default class HashManager {\n\n static parse() {\n let hashObject = QueryString.parse(location.hash.substr(1));\n\n _.keys(hashObject).forEach((key) => {\n hashObject[key] = _.flatten([hashObject[key] || []]);\n });\n\n return hashObject;\n }\n\n static update(object) {\n let newHash = QueryString.stringify(object);\n if (newHash !== '&'){\n location.hash = newHash;\n }\n }\n\n static get(key) {\n let response = this.parse();\n\n if (_.isString(key)) {\n return response[key];\n }\n\n return response;\n }\n\n static set(key, value) {\n let hash = this.parse();\n\n hash[key] = _.flatten([value]);\n\n this.update(hash);\n }\n\n static push(key, value) {\n let hash = this.parse();\n\n hash[key] = hash[key] || [];\n hash[key].push(value);\n\n this.update(hash);\n }\n\n static remove(key) {\n let hash = this.parse();\n\n hash[key] && delete hash[key];\n\n this.update(hash);\n }\n}\n","import keys from '../../util/keycodes';\nimport ModalTemplate from './templates/modal.html';\n\nclass Modal extends Backbone.View {\n get defaults() {\n // When the flag is enabled, closeOnEsc must always be FALSE\n // to ensure that the ESC key behavior defined in _bindEvents() executes properly.\n // Do not modify this value when calling a new modal.\n var closeModalOnEsc = window.featureManager.isEnabled(\n 'close-dropdowns-on-esc'\n )\n ? false\n : true;\n\n return {\n autoShow: true,\n autoRender: true,\n closeOnEsc: closeModalOnEsc,\n closeOnBlur: true,\n\n id: '',\n classes: ['small'],\n buttonAlign: 'right',\n title: 'Title',\n hiddenTitle: false,\n content: 'Some Content',\n submitText: html('ok'),\n cancelText: html('cancel'),\n attachToDocument: true,\n defaultButtonBehaviour: true,\n showCloseButton: true,\n };\n }\n\n initialize(options) {\n _.extend(this, this.defaults, options);\n\n this.tpl = ModalTemplate;\n this.setElement(this.tpl(this));\n\n if (this.id.length) {\n this.$el.attr('id', this.id);\n }\n\n this.$content = this.$el.find('.modal-container');\n\n this.$content.empty().append(this.content);\n\n this.$el.addClass(this.classes.join(' '));\n\n this.$title = this.$el.find('.modal-title');\n\n if (this.hiddenTitle) {\n this.$title.css('display', 'none');\n this.$title.attr('aria-hidden', 'true');\n }\n\n if (this.autoRender) {\n this._render();\n }\n\n this._bindEvents();\n }\n\n _render() {\n if (this.attachToDocument) {\n // For Foundation to work as expected we need to have the element attached to the DOM before calling .foundation('reveal', 'open')\n $('body').append(this.el);\n }\n\n if (this.autoShow) {\n this.show();\n }\n\n return this;\n }\n\n isSelectEvent = (e) =>\n (e.type === 'click' || e.which === 13 || e.which === 32) &&\n (e.preventDefault() || true);\n\n // We dont actually want to use the Foundation modal events since they get weird fast...\n // lets use our own so consumers dont have to know its foundation\n _bindEvents() {\n this.$el.on('click keydown', '.js-close', (e) => {\n this.isSelectEvent(e) && this.trigger('cancel', this);\n });\n\n if (this.defaultButtonBehaviour) {\n this.on('close cancel', () => {\n this.close();\n });\n }\n\n this.$el.on('keypress', '*', (e) => {\n if (e.which === keys.TAB) {\n this._keepFocus(e);\n }\n });\n\n if (window.featureManager.isEnabled('close-dropdowns-on-esc')) {\n // Prevent ESC from closing modal when \n \n`;\n","export default ({ text, href, label }) => `\n${text}\n`;\n","export default ({ geoIdcClass }) => `\n
\n
\n\n
\n\n
\n
\n\n
\n\n
\n
\n\n
\n
`;\n","export default ({typeId}) => `\n${typeId ? `\n ${window.html(typeId)}\n` : '' }\n`;\n","export default ({ titleId, title, href, ariaLabel }) => `

\n \n ${ title }\n \n

`;\n","export default ({ga, contrastClass, ariaLabel, iconClass, text, iconAnimationClasses}) => `\n`;\n","import ContextMenu from '../ContextMenu';\nimport TitleAuthor from './TitleInfo/TitleAuthor';\nimport TitleEdition from './TitleInfo/TitleEdition';\nimport TitleName from './TitleInfo/TitleName';\nimport TitleFormatBadge from './TitleInfo/TitleFormatBadge';\n\nexport default class TitleInfo extends Backbone.View {\n get className() {\n return 'title-info';\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n\n this.render();\n }\n\n _reset() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n }\n\n remove() {\n this._reset();\n super.remove();\n }\n\n render() {\n this._reset();\n\n this._views.push(\n (this.titleName = new TitleName({ model: this.model }))\n );\n\n if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.contextMenu = new ContextMenu({ model: this.model }))\n );\n this.contextMenu.$el.addClass('text-right');\n }\n if (this.model.isMagazine) {\n this._views.push(\n (this.titleEdition = new TitleEdition({ model: this.model }))\n );\n } else if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.titleAuthor = new TitleAuthor({ model: this.model }))\n );\n }\n\n this._views.push(\n (this.titleFormatBadge = new TitleFormatBadge({\n typeId: this.model.get('type').id,\n }))\n );\n\n this.$el.empty();\n this.$el.append(...this._views.map((view) => view.$el));\n }\n}\n","import HoldInformationModal from '../../../holdInformation/views/HoldInformationModal';\nimport HoldInformationModalV2 from '../../../holdInformationV2/HoldInformationModalV2';\nimport HoldInformationV2 from '../../../holdInformationV2/HoldInformationV2';\n\nimport CopiesAvailableTemplate from '../../templates/CopiesAvailable.html';\n\nexport default class CopiesAvailable extends Backbone.View {\n constructor({withIcons}) {\n super(...arguments);\n this.title = this.model.toJSON();\n this.withIcons = withIcons;\n this.listenTo(this.model, 'change:titleState', this._maybeRender);\n this.render();\n }\n\n events() {\n return {\n 'click .js-holds-ratio-help-icon': '_renderModal'\n };\n }\n\n render() {\n this.$el.empty();\n if(this.model.allCopiesAreLuckyDay){\n return this;\n }\n\n if (this.title.titleState === 'unavailable') {\n this._renderNormal();\n return this;\n } else if (this.title.isPreReleaseTitle) {\n this._renderNormal();\n return this;\n }\n\n switch (this.title.availabilityType) {\n case 'normal':\n this._renderNormal();\n break;\n case 'always':\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText: window.text('cover.alwaysAvailable')\n }));\n break;\n case 'limited' && !this.title.isAvailable:\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText: window.text('cover.limitedAvailability')\n }));\n break;\n }\n\n return this;\n }\n\n _maybeRender() {\n if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')\n || (window.featureManager.isEnabled('betterPatronState') ? this.model.get('isBorrowed') : this.model.get('titleState') === 'borrowed')) {\n this.render();\n }\n\n if(this.model.allCopiesAreLuckyDay){\n this.render();\n }\n }\n\n _renderNormal() {\n let availabilityText, waitingText, helpButtonHTML;\n\n const notHeldClass = (window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold') ? '' : 'js-holds-ratio-not-held';\n\n if (this.title.type.id === 'periodicals' && this.title.availableCopies < 1 && !this.title.isAvailable) {\n availabilityText = window.html('cover.limitedAvailability');\n helpButtonHTML = `\n \n \n `;\n } else {\n \n let copyVariables = {\n availableCopies: window.featureManager.isEnabled('LuckyDay') ? this.title.availableCopies + this.title.luckyDayAvailableCopies : this.title.availableCopies,\n ownedCopies: window.featureManager.isEnabled('LuckyDay') ? this.title.ownedCopies + this.title.luckyDayOwnedCopies : this.title.ownedCopies\n };\n availabilityText = window.html('cover.copiesAvailable', copyVariables);\n\n if(this.model.allCopiesAreLuckyDay && this.title.titleState === 'unavailable'){\n availabilityText = window.html('cover.copiesAvailable', {availableCopies: 0, ownedCopies: this.title.luckyDayOwnedCopies});\n }\n \n if (!this.title.isAvailable && !this.model.hasAvailableLuckyDayCopies) {\n if(!this.model.allCopiesAreLuckyDay){\n if (window.featureManager.isEnabled('LHTNG-2863')){\n if(this.title.isOwned){\n waitingText = new HoldInformationV2({model: this.model, isVisitor: window.OverDrive.isVisitor}).waitTimeHtml;\n }\n }\n else if (!this.model.get('isFastlane')) {\n if (this.title.holdsRatio) {\n waitingText = window.html('cover.waitingPerCopy', {holdsRatio: this.title.holdsRatio});\n } else if (this.title.holdsCount === 0) {\n waitingText = window.html('cover.noHolds');\n }\n }\n }\n helpButtonHTML = window.featureManager.isEnabled('LHTNG-2863') && !this.title.isOwned\n ? ''\n : ` \n \n `;\n }\n }\n\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText,\n waitingText,\n helpButtonHTML\n }));\n }\n\n _renderModal() {\n if (window.featureManager.isEnabled('LHTNG-2863')){\n if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')) {\n window.ajax.getHold(this.model.get('id')).done((holdData) => { // should be confirming that this is on hold\n this.model.set({\n holdsRatio: holdData.holdsRatio,\n holdsCount: holdData.holdsCount,\n holdListPosition: holdData.holdListPosition\n });\n this.modal = new HoldInformationModalV2({model: this.model, el: this.el});\n });\n }\n else {\n this.modal = new HoldInformationModalV2({model: this.model, el: this.el, hideHoldsLink: true});\n }\n }\n else {\n const isFastlane = this.model.get('isFastlane');\n const titleState = this.model.get('titleState');\n if (!!isFastlane) {\n this.modal = new HoldInformationModal({model: this.model, type: 'basic', el: this.el});\n }\n else if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')) {\n window.ajax.getHold(this.model.get('id')).done((holdData) => { // should be confirming that this is on hold\n this.model.set({\n holdsRatio: holdData.holdsRatio,\n holdsCount: holdData.holdsCount,\n holdListPosition: holdData.holdListPosition\n });\n this.modal = new HoldInformationModal({model: this.model, type: 'successPosition', el: this.el});\n });\n }\n else {\n this.modal = new HoldInformationModal({model: this.model, type: 'ratio', el: this.el});\n }\n }\n }\n}\n","export default class LuckyDayHolds extends Backbone.View {\n constructor() {\n super(...arguments);\n this.listenTo(this.model, 'change:titleState', this._maybeRender);\n this.render();\n }\n\n render() {\n this.$el.empty();\n let template = `

${window.text('luckyDay.cantPlaceHold')}

`;\n this.$el.append(template);\n }\n\n _maybeRender() {\n if (this.model.get('titleState') === 'unavailable') {\n this.render();\n }else{\n this.$el.empty();\n }\n }\n}\n","import StarView from './StarView';\nconst { featureManager } = window;\n\nexport default class StarRating extends Backbone.View {\n events() {\n return {\n 'mouseleave': 'stopHoverRating'\n };\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n\n get isEnabled() {\n return !this.model.get('isPreReleaseTitle');\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n this.hoverRating = 0;\n this.$el.addClass('star-ratings-container StarRatings');\n\n this.rid = Math.random().toString(36).substring(7);\n\n // Update star rating when patron status is received\n this.listenTo(this.model, 'change:userStarRating', (model) => {\n this.update();\n });\n }\n\n render() {\n if(!this.isEnabled) {\n return this;\n }\n\n let globalRating = this.model.get('starRating') || 0;\n this.$el.attr('data-global-rating', this.model.get('starRating'));\n this.$el.attr('data-media-id', this.model.id);\n\n this._views.forEach((view) => view.remove());\n this._views.length = 0;\n\n let ctx = this;\n _.each([1, 2, 3, 4, 5, 0], (index) => {\n let viewData = {\n index: index,\n globalRating: globalRating,\n rid: this.rid\n };\n let starView = new StarView(viewData);\n \n if (!featureManager.isEnabled('sampleOnlyMode')){\n starView.on('rate', (starValue) => {\n ctx.handleRating(starValue);\n });\n starView.on('hover', (starValue) => {\n ctx.onHoverRating(starValue);\n });\n }\n \n this._views.push(starView);\n });\n\n this.$el.empty();\n this._views.forEach((view) => {\n view.render();\n this.$el.append(view.$el);\n });\n this.update();\n\n return this;\n }\n\n isHalfStar (globalRating) {\n return globalRating % 1 >= 0.25 && globalRating % 1 < 0.75; \n }\n\n update() {\n if (!this.isEnabled) {\n return this;\n }\n\n let isUserRating = (this.model.get('userStarRating') > 0 || this.hoverRating) > 0;\n this.$el.toggleClass('user-rating', isUserRating);\n let globalRating = this.model.get('starRating') || 0;\n\n _.each(this._views, (starView) => {\n\n if (isUserRating){\n starView.setFilled(starView.index <= (this.hoverRating || this.model.get('userStarRating')));\n } else if (starView.index < globalRating) {\n starView.setFilled(true);\n } else if (starView.index - 1 > globalRating) {\n starView.setFilled(false);\n } else {\n starView.setFilled(starView.index - 0.75 < globalRating, this.isHalfStar(globalRating));\n }\n starView.$el.children('.starRadio').prop('checked', starView.index === this.model.get('userStarRating'));\n });\n\n return this;\n }\n\n handleRating(starValue) {\n let currentRating = this.model.get('userStarRating');\n if (starValue === currentRating) {\n this.model.set('userStarRating', 0);\n this.stopHoverRating();\n }\n else {\n this.model.set('userStarRating', starValue);\n }\n this.model.trigger('title:action', { action: 'rating', model: this.model });\n }\n\n onHoverRating(starValue) {\n this.hoverRating = starValue;\n this.update();\n }\n\n stopHoverRating() {\n this.hoverRating = 0;\n this.update();\n }\n}\n","import StarRatingsTemplate from '../../templates/StarViewTemplate.html';\n\nexport default class StarView extends Backbone.View {\n template = StarRatingsTemplate;\n\n constructor({index, isFilled = false, globalRating, rid}) {\n super(...arguments);\n\n this.index = index;\n this.isFilled = isFilled;\n this.isHalfFilled = false;\n this.label = window.html('starRating.userRatedLabel', {currentRating: this.index});\n this.globalRating = globalRating;\n this.rid = rid;\n this.$el.addClass('star-container');\n }\n\n events() {\n return {\n 'change': 'onSelected',\n 'mouseover .icon-star': 'onHover',\n 'click .icon-star': 'onSelected',\n 'focusin .noRate' : 'pseudoFocus',\n 'focusout .noRate' : 'pseudoFocus'\n };\n }\n\n setFilled(isFilled, halfFilled = false) {\n if (halfFilled){\n this.$el.find('.icon-star').removeClass('filled');\n this.isFilled = false;\n\n this.isHalfFilled = isFilled;\n this.$el.find('.icon-star').toggleClass('halfFilled', isFilled);\n } else {\n this.$el.find('.icon-star').removeClass('halfFilled');\n this.isHalfFilled = false;\n \n this.isFilled = isFilled;\n this.$el.find('.icon-star').toggleClass('filled', isFilled);\n }\n }\n\n onSelected() {\n this.trigger('rate', this.index);\n return false;\n }\n\n onHover() {\n this.trigger('hover', this.index);\n }\n\n //Used for the 0th 'no rating' star. When focused, make the container appear to have focus\n pseudoFocus() {\n this.$el.parent().toggleClass('pseudoFocus');\n }\n\n render() {\n if (this.index > 0) {\n this.$el.empty().append(this.template(this));\n }\n else {\n let noRateTemplate =\n ``;\n this.$el.empty().append(noRateTemplate);\n }\n }\n}\n","const Backbone = window.Backbone;\nconst featureManager = window.featureManager;\n\nimport TitleAuthorTemplate from '../../templates/TitleAuthor.html';\n\nconst TitleAuthor = Backbone.View.extend({\n template: TitleAuthorTemplate,\n\n className: 'title-author',\n\n tagName: 'p',\n\n initialize() {\n if (this.model.get('type').id !== 'periodicals') {\n this.render();\n }\n },\n\n render() {\n let title = this.model.toJSON();\n\n if (\n title.firstCreatorName != null &&\n !_.isEmpty(title.firstCreatorName)\n ) {\n let creatorName = featureManager.isEnabled('fixHtmlTagsInCopy')\n ? title.firstCreatorName\n : _.escape(title.firstCreatorName);\n\n const viewData = {\n href: window.url(window.routes.searchByType, {\n type: 'creatorId',\n query: title.firstCreatorId,\n sortBy: 'newlyadded',\n }),\n label: window.text('cover.searchByAuthor', {\n author: creatorName,\n }),\n text: creatorName,\n };\n\n this.$el.html(\n window.text('byLine', { creator: this.template(viewData) })\n );\n } else {\n if (!featureManager.isEnabled('no-author-fix')) {\n this.$el.html(window.html('cover.noAuthorAvailable'));\n }\n }\n },\n});\n\nexport default TitleAuthor;\n","\nexport default class TitleEdition extends Backbone.View {\n constructor() {\n super(...arguments);\n this.render();\n }\n\n render() {\n let node = $(`
${this.model.get('edition')}
`);\n this.setElement(node);\n }\n}\n","import TitleFormatBadgeTemplate from '../../templates/TitleFormatBadge.html';\n\nconst TitleFormatBadge = Backbone.View.extend({\n initialize({typeId}) {\n this.typeId = typeId;\n this.render();\n },\n\n render() {\n this.setElement($(TitleFormatBadgeTemplate({typeId: this.typeId})));\n }\n});\n\nexport default TitleFormatBadge;\n","import TitleNameTemplate from '../../templates/TitleName.html';\n\nexport default class TitleName extends Backbone.View {\n constructor() {\n super(...arguments);\n\n this.template = TitleNameTemplate;\n this.render();\n }\n\n _assembleLabel() {\n let labelParts = [];\n\n labelParts.push(this.model.get('title'));\n\n if (!!this.model.get('firstCreatorName')) {\n labelParts.push(window.html('byLine', {creator: this.model.isMagazine ? this.model.get('publisher').name : this.model.get('firstCreatorName')}));\n }\n\n labelParts.push(this.model.availabilityText());\n\n labelParts.push(this.model.get('type').name);\n\n return labelParts.join(' ');\n }\n\n render() {\n const viewData = {\n titleId : this.model.id,\n href : this.model.titleDetailsUrl,\n ariaLabel : _.escape(this._assembleLabel()),\n title : this.model.get('title')\n };\n \n this.setElement($(this.template(viewData)));\n }\n}\n\n","const Backbone = window.Backbone;\nconst url = window.url;\nconst routes = window.routes;\nconst windowText = window.text;\nconst featureManager = window.featureManager;\n\nconst TitleSeries = Backbone.View.extend({\n initialize({ hideSubtitle }) {\n this.useEnhancedSeries =\n featureManager.isEnabled('enhancedSeries') &&\n typeof this.model.get('detailedSeries') !== 'undefined';\n this.hideSubtitle = hideSubtitle;\n\n this.listenTo(this.model, 'update', this.render);\n this.render();\n },\n\n render() {\n let searchParams = this.useEnhancedSeries\n ? {\n type: 'seriesId',\n query: this.model.get('detailedSeries').seriesId,\n sortBy: 'readingOrder',\n }\n : {\n type: 'series',\n query: this.model.get('series'),\n sortBy: 'newlyadded',\n };\n\n let subtitleContainsSeries =\n this.model.get('subtitle') &&\n this.model.get('subtitle').indexOf(this.model.get('series')) > -1;\n\n let seriesText = '';\n let rankText = '';\n\n if (this.useEnhancedSeries) {\n let detailedSeries = this.model.get('detailedSeries');\n\n const readingOrder = detailedSeries.readingOrder;\n if (readingOrder) {\n seriesText = isNaN(readingOrder)\n ? window.text('enhancedSeriesLinkText', { readingOrder })\n : window.text('enhancedSeriesLinkNumber', { readingOrder });\n }\n\n const rank = detailedSeries.rank;\n if (rank) {\n rankText = window.text('rankText', { rank });\n }\n } else {\n seriesText = subtitleContainsSeries\n ? this.model.get('subtitle')\n : this.model.get('series') || '';\n rankText = subtitleContainsSeries\n ? this.model.get('subtitle')\n : this.model.get('rank') || '';\n }\n\n if (this.model.get('type').id === 'magazine') {\n searchParams.mediaType = 'magazine';\n }\n\n let viewModel = {\n id: this.model.get('id'),\n title: this.model.get('title'),\n series: seriesText,\n rank: rankText,\n subtitle: this.model.get('subtitle') || '',\n searchUrl: url(routes.searchByType, searchParams),\n language: _.first(this.model.get('languages') || ['']),\n noCreators: _.isEmpty(this.model.get('creators')),\n };\n\n let $temp = $(document.createDocumentFragment());\n\n if (\n !this.hideSubtitle &&\n !subtitleContainsSeries &&\n !_.isEmpty(viewModel.subtitle)\n ) {\n let $subtitle = this._buildSubtitle(\n viewModel.subtitle,\n viewModel.language\n );\n $temp.append($subtitle);\n }\n\n if (!_.isEmpty(viewModel.series)) {\n if (\n this.model.isMagazine &&\n featureManager.isEnabled('magazine-rollup')\n ) {\n let $series = this._buildSeriesText(\n viewModel.noCreators,\n viewModel.series\n );\n $temp.append($series);\n } else {\n let $series = this._buildSeriesLink(\n viewModel.searchUrl,\n viewModel.noCreators,\n viewModel.series\n );\n $temp.append($series);\n }\n }\n\n if (\n !_.isEmpty(viewModel.rank) &&\n featureManager.isEnabled('display-title-rank')\n ) {\n const $rank = this._buildRankText(\n viewModel.noCreators,\n viewModel.rank\n );\n $temp.append($rank);\n }\n\n this.$el.html($temp);\n },\n\n _buildRankText(noCreators, text) {\n return $('

', {\n class: `series ${(noCreators ? 'no-author' : '', text)}`,\n text,\n });\n },\n\n _buildSeriesText(noCreators, text) {\n let $elm = $('

', {\n class: `series ${(noCreators ? 'no-author' : '', text)}`,\n });\n return $elm;\n },\n\n _buildSeriesLink(searchUrl, noCreators, text) {\n let $elm = $('

', {\n class: `series ${noCreators ? 'no-author' : ''}`,\n });\n\n let $link = $('', {\n 'aria-label': windowText('cover.searchBySeries', { series: text }),\n class: this.useEnhancedSeries\n ? 'series-link-enhanced secondary-color'\n : 'series-link secondary-underline',\n href: searchUrl,\n title: text,\n text,\n });\n\n $elm.append($link);\n\n return $elm;\n },\n\n _buildSubtitle(subtitle, language) {\n if (featureManager.isEnabled('fixHtmlTagsInCopy')) {\n return $(`

${subtitle}

`);\n } else {\n return $('

', {\n class: 'subtitle',\n text: subtitle,\n lang: language,\n });\n }\n },\n});\n\nmodule.exports = TitleSeries;\n","const { html } = window;\n\nexport default () => `\n

\n
\n \n
\n
\n

${html(\"notCompatibleTitle.warningText\")}

\n
\n
\n`;","import template from './not-compatible-format-view.html';\nexport default class NotCompatibleFormat extends Backbone.View {\n constructor({model, el}) {\n super(...arguments);\n this.model = model;\n this.$el = $(el);\n\n this.render();\n }\n\n render() {\n this.$el.css(\"display\", \"block\");\n this.$el.append(template());\n\n this.$el.find(\".close-btn\").on(\"click\", () => {\n this.$el.css(\"display\", \"none\");\n this.$el.empty();\n });\n }\n}\n","import PremiumReviewsView from './views/premium_reviews';\nimport PremiumReviewModel from './models/premium_review';\n\nconst createComponent = ({el}) => {\n const model = new PremiumReviewModel();\n const view = new PremiumReviewsView({el, model}); // eslint-disable-line no-unused-vars\n};\n\nexport default createComponent;\n","import BaseModel from '../../../models/base';\n\nconst PremiumReviewModel = BaseModel.extend({\n urlRoot: ''\n});\n\nexport default PremiumReviewModel;\n","const { html } = window;\n\nexport default ({ reviews }) => `\n${reviews && reviews.map((review, index) =>\n `
\n
 ${review.source}
\n
${review.content}
\n ... \n
${html('cover.readMore')}\n \n
\n
`\n).join('')\n}`;\n","export default ({ reviews }) => `\n${reviews && reviews.map((review, index) => `\n
\n
 ${review.source}
\n
${review.content}
\n
\n ${(index < reviews.length - 1) ? '
' : ''}`\n).join('')\n}`;\n","import BaseView from '../../../views/base';\nimport DesktopReviewsContainerTemplate from '../templates/reviews_desktop.html';\nimport MobileReviewsContainerTemplate from '../templates/reviews_mobile.html';\n\nconst PremiumReviewsView = BaseView.extend({\n desktopTemplate: DesktopReviewsContainerTemplate,\n mobileTemplate: MobileReviewsContainerTemplate,\n events: {\n 'click .js-toggleReview': 'toggleReview',\n 'tap .js-toggleReview': 'toggleReview',\n 'click .js-reviews-tab': 'renderReviews',\n 'tap .js-reviews-tab': 'renderReviews',\n 'click .js-reviews-panel': 'renderReviews',\n 'tap .js-reviews-panel': 'renderReviews',\n },\n initialize({ el, model }) {\n this.el = el;\n this.model = model;\n this.mediaId = _.keys(window.OverDrive.mediaItems)[0];\n },\n render(reviews) {\n this.$('.js-reviews-desktop-container').html(\n this.desktopTemplate({ reviews: reviews.items })\n );\n this.$('.js-reviews-mobile-container').html(\n this.mobileTemplate({ reviews: reviews.items })\n );\n return this;\n },\n renderReviews(e) {\n if (\n this.$(\n '.js-reviews-desktop-container, .js-reviews-mobile-container'\n ).attr('data-loaded') !== 'true'\n ) {\n this.model.urlRoot = window.url(window.routes.reviews, {\n mediaId: this.mediaId,\n });\n this.model.fetch().then((response) => {\n if (response) {\n // Don't show desktop reviews unless the reviews tab is clicked\n // Otherwise they will display under other tabs\n if (this.$(e.target).hasClass('js-reviews-tab')) {\n this.$('.js-reviews-desktop-container').removeClass(\n 'u-hideMe'\n );\n }\n this.$('.js-reviews-mobile-container').removeClass(\n 'u-hideMe'\n );\n this.$(\n '.js-reviews-desktop-container, .js-reviews-mobile-container'\n ).attr('data-loaded', true);\n this.render(response);\n } else {\n this.$('.js-review-loader').addClass('u-hideMe');\n this.$(\n '.js-reviews-desktop-container, .js-reviews-mobile-container'\n ).attr('data-loaded', true);\n }\n });\n }\n },\n toggleReview(e) {\n // Prevent foundation scrolling away from the review\n e.preventDefault();\n e.stopPropagation();\n const reviewNum = $(e.target).attr('data-review');\n const readMoreContainer = $(`.js-readMoreContainer-${reviewNum}`);\n const review = $(`.js-reviewContent-${reviewNum}`);\n\n if (readMoreContainer.hasClass('is-collapsed')) {\n review.css({ height: 'initial', overflow: 'visible' });\n readMoreContainer\n .removeClass('is-collapsed')\n .addClass('is-expanded');\n readMoreContainer\n .find('.js-toggleReview')\n .text(window.text('cover.readLess'));\n // Account for

tag embedded in review\n if (review.has('p').length === 0) {\n readMoreContainer.css('margin-top', '1.25rem');\n }\n } else {\n // is-expanded\n let height = '100px';\n if ($('body').hasClass('is-dyslexic')) {\n height = '90px';\n }\n review.css({ height, overflow: 'hidden' });\n readMoreContainer\n .removeClass('is-expanded')\n .addClass('is-collapsed')\n .css('margin-top', 0);\n readMoreContainer\n .find('.js-toggleReview')\n .text(window.text('cover.readMore'));\n }\n },\n});\n\nexport default PremiumReviewsView;\n","const { text, url } = window;\nimport Title from '../media/models/Title';\n\nexport default class RecentIssuesDrawer extends Backbone.View{\n\n constructor({el, titleModel}) {\n super(...arguments);\n this.pageNum = 1;\n this.items = [];\n this.titleModel = titleModel;\n this.setElement(el);\n\n $('.load-button').click((e) => {\n e.stopPropagation();\n this.loadNextPage();\n });\n }\n\n loadNextPage() {\n this.pageNum = this.pageNum + 1;\n\n this.getRecentIssues().then((res) => {\n if (res && typeof res.body !== 'undefined') {\n res.body.items.forEach((item) => {\n var model = new Title(item);\n this.$el.append(`\n

  • \n \n \"${item.title}\" ${item.edition}\n \n
  • \n `);\n });\n\n $('.load-button').text(text('magazineBackIssues.loadMore'));\n\n if(res.body.links.next == null) {\n $('.load-button').remove();\n }\n }\n }).catch((error) => {\n window.Logger.log('error', 'Failed to show previous issues', {message: error.statusText || error});\n $('.load-button').text(text('magazineBackIssues.tryAgain'));\n });\n }\n\n getRecentIssues() {\n return new Promise((resolve, reject) =>\n $.ajax({\n method: 'GET',\n url: window.url(window.routes.rest.media.recentIssues, {id: this.titleModel.attributes.parentMagazineTitleId}),\n data: {\n pageNumber: this.pageNum\n },\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((xhr, status, err) => reject(err)));\n }\n}\n","import Title from '../components/media/models/Title';\nimport TitleCollection from '../components/media/models/TitleCollection';\n\n// This is a replacement for PatronMediaItemsModel (ecmascript\\models\\patron_media_items.js)\n// We should gradually transition to using this as time permits and we can take the time to validate funtionality\nexport default class PatronTitleStatus extends Backbone.Model {\n get url() {\n return window.url(window.routes.mediaInfo);\n }\n\n fetchTitleStatus(titleCollection, statusTypes = null) {\n let titleArray = titleCollection.models || titleCollection || [];\n\n if (titleArray.length === 0) {\n return Promise.resolve();\n }\n\n let titleIds = _.map(_(titleArray).pluck('id'), Number);\n\n this.request = this.fetch({\n data: JSON.stringify({ titleIds, statusTypes }),\n type: 'POST',\n contentType: 'application/json',\n });\n\n return this.request;\n }\n\n /** @param {Title} title */\n updateTitleState(title) {\n title.updatePatronState(this.attributes);\n }\n\n get titleIds() {\n return _.union(\n this.get('onReadingHistory'),\n _.keys(this.get('starRatings')),\n this.get('onCheckouts'),\n this.get('onHolds'),\n this.get('onWishlist')\n );\n }\n\n /** @param {TitleCollection} titleCollection */\n updateTitleCollectionState(titleCollection) {\n // we provide an empty array for any status attributes that were not fetched\n // in order to avoid breaking anything downstream\n this.stubAttributes();\n this.titleIds.forEach((titleId) => {\n const model = titleCollection.findWhere({ id: titleId });\n\n if (model) {\n this.updateTitleState(model);\n }\n });\n }\n\n stubAttributes() {\n if (!this.get('onReadingHistory')) {\n this.set('onReadingHistory', []);\n }\n if (!this.get('starRatings')) {\n this.set('starRatings', []);\n }\n if (!this.get('onCheckouts')) {\n this.set('onCheckouts', []);\n }\n if (!this.get('onHolds')) {\n this.set('onHolds', []);\n }\n if (!this.get('onWishlist')) {\n this.set('onWishlist', []);\n }\n }\n}\n","// import when we move more to modules\nexport default window.Backbone.Model;\n","import BaseModel from '../models/base';\n\nconst PatronMediaItemsModel = BaseModel.extend({\n url() {\n return window.url(window.routes.mediaInfo);\n },\n\n initialize({titles}) {\n this.mediaItems = titles || window.OverDrive.titleCollection || {};\n this.itemsOnPage = _.map(_.pluck(this.mediaItems, 'id'), Number);\n },\n\n initialFetch() {\n return this.mediaItems.length\n ? this.fetch({\n data: JSON.stringify({titleIds: this.itemsOnPage}),\n type: 'POST', contentType: 'application/json',\n headers: {'csrf-token': $('#csrf').val() || OverDrive._csrf}})\n : Promise.resolve({});\n }\n});\n\nexport default PatronMediaItemsModel;\n","import createComponent from '../components/premium_reviews/main.js';\nimport createDetailsCoverImageComponent from '../components/details_cover_image/main.js';\nimport DetailsRelatedTitlesView from '../components/details_related_titles/DetailsRelatedTitlesView';\nimport HashManager from '../components/common/HashManager';\nimport PatronMediaItemsModel from '../models/patron_media_items';\nimport ProcessForwardedAction from '../util/title-actions/processForwardedAction';\nimport StarRating from '../components/media/views/TitleInfo/StarRating';\nimport TitleSeries from '../components/media/views/TitleInfo/TitleSeries';\nimport TitleActionButton from '../components/media/TitleActionButton';\nimport TitleActions from '../title-actions/TitleActions';\nimport Title from '../components/media/models/Title';\nimport WishListButton from '../components/media/WishListButton';\nimport ReadingHistoryButton from '../components/media/ReadingHistoryButton';\nimport CopiesAvailable from '../components/media/views/TitleInfo/CopiesAvailable';\nimport LuckyDayHolds from '../components/media/views/TitleInfo/LuckyDayHolds';\nimport CollectionDefinition from '../components/collection_campaign_page/CollectionDefinition';\nimport RecentIssuesDrawer from '../components/recent_issues_drawer/RecentIssuesDrawer';\nimport NotCompatibleFormat from '../components/not_compatible_format/not-compatible-format-view.js';\n\nconst fetchCollectionById = (collectionId) =>\n new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.collections.getById, {\n id: collectionId,\n }),\n dataType: 'json',\n timeout: 10000,\n })\n .done((response) => resolve(new CollectionDefinition(response)))\n .fail((jqHXR, textStatus, errorThrown) => resolve()); // LHTNG-3018 Yes, we are hiding errors here, we dont care if a trash ID is passed\n });\n\nlet isUnsupportedTolinoFormat = (format) => {\n if (format === undefined) {\n return true;\n }\n let formatParts = format.split('-');\n return format.indexOf('ebook') > -1 && formatParts.length >= 2\n ? ['kobo', 'media', 'kindle'].includes(formatParts[1])\n : true;\n};\n\n$(() => {\n let collectionFetch = Promise.resolve();\n\n const { collectionId } = window.OverDrive;\n if (collectionId) {\n collectionFetch = fetchCollectionById(collectionId);\n }\n\n collectionFetch.then((collectionDefinition) => {\n let titles = window.OverDrive.titleCollection;\n\n const mediaModel = new Title(window.OverDrive.titleCollection);\n window.title = mediaModel;\n\n let streamingVideoFormats = _.find(\n mediaModel.get('formats'),\n (format) => format.id === 'video-streaming'\n );\n\n let isDRM = false;\n\n _.each(mediaModel.get('formats'), (format) => {\n if (\n _.find(\n format.rights,\n (right) => right.drmType.toLowerCase() === 'heavy'\n )\n ) {\n isDRM = true;\n }\n });\n\n if (streamingVideoFormats !== undefined && isDRM) {\n let isChromebook = !!window.navigator.userAgent.match(/CrOS/);\n let inApp = window.OverDrive.inApp;\n if (isChromebook && inApp) {\n if (toaster) {\n toaster.push(\n window.text('accountLoans.unsupportedFormatVideoHtml'),\n 'message'\n );\n }\n }\n }\n\n let stateUpdatePromise = Promise.resolve();\n\n // TODO: Determine if the patron email can be stored in a cookie or something\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards\n ) {\n const patronMedia = new PatronMediaItemsModel({\n titles: [mediaModel.attributes],\n });\n\n stateUpdatePromise = patronMedia\n .initialFetch()\n .then((patronData) => {\n _.each(_.flatten(_.values(patronData)), () => {\n if (mediaModel) {\n mediaModel.updatePatronState(patronData);\n }\n });\n });\n }\n\n stateUpdatePromise.then(() => {\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n HashManager.get('action')\n ) {\n let forwardedAction = new ProcessForwardedAction(\n titles,\n window.globalEvents,\n mediaModel\n );\n forwardedAction.executeAction();\n window.forwardAction = forwardedAction;\n }\n });\n\n let titleActions = new TitleActions({\n bus: window.globalEvents,\n context: {\n collectionDefinition,\n },\n });\n\n const titleActionButton = new TitleActionButton({\n model: mediaModel,\n el: '.TitleAction',\n type: 'button',\n });\n\n let hideExtraInfo =\n window.featureManager.isEnabled('magazine-rollup') &&\n mediaModel.isMagazine;\n\n if (\n !window.featureManager.isEnabled('sampleOnlyMode') &&\n !hideExtraInfo &&\n !window.featureManager.isEnabled('disableWishlist')\n ) {\n const wishListButton = new WishListButton({\n model: mediaModel,\n el: '.wishlist-container',\n type: 'with-text',\n contrast: 'alternate',\n }).render();\n }\n\n if (\n window.featureManager.isEnabled('sampleOnlyMode') &&\n window.featureManager.isEnabled('details-page-libby-button') &&\n window.featureManager.isEnabled('promoteLibby')\n ) {\n let libbyLink =\n 'https://www.overdrive.com/apps/libby?utm_origin=lightning&utm_page_genre=sample_mode&utm_list=get_libby&utm_medium=lightning_banner&utm_source=lightning&utm_campaign=sample_mode&utm_content=getlibby';\n if (\n window.OverDrive.deviceType &&\n window.OverDrive.deviceType.toLowerCase() === 'ios'\n ) {\n libbyLink =\n 'https://itunes.apple.com/us/app/libby-by-overdrive-labs/id1076402606?pt=211483&ct=lightning&mt=8&utm_medium=lightning_banner&utm_source=lightning&utm_campaign=sample_mode&utm_content=getlibby';\n } else if (\n window.OverDrive.deviceType &&\n window.OverDrive.deviceType.toLowerCase() === 'android'\n ) {\n libbyLink =\n 'https://play.google.com/store/apps/details?id=com.overdrive.mobile.android.libby&referrer=utm_source%3Dlightning&utm_medium=lightning_banner&utm_source=lightning&utm_campaign=sample_mode&utm_content=getlibby';\n }\n\n $('.GetLibby-buttonContainer').append(`\n 1\n ? 'multiple-magazines'\n : ''\n } GetLibbyLink TitleActionButton button radius is-button secondary\"\n target=\"_blank\"\n rel=\"noreferrer\"> ${window.text('getLibby')} `);\n }\n\n if (!hideExtraInfo) {\n let starRating = new StarRating({\n model: mediaModel,\n type: 'editable',\n }).render();\n\n if (\n !mediaModel.get('isPreReleaseTitle') &&\n window.featureManager.isEnabled('show-star-ratings')\n ) {\n $('.js-starRatingsContainer').append(starRating.$el);\n } else {\n $('.prerelease-date')\n .first()\n .html(\n window.text('accountHolds.prereleaseExpected', {\n date: mediaModel.get('estimatedReleaseDate'),\n })\n );\n }\n }\n\n const readingHistoryButton = new ReadingHistoryButton({\n model: mediaModel,\n el: '.ReadingHistoryButton-container',\n }).render();\n\n let series = new TitleSeries({\n model: mediaModel,\n el: '.TitleSeries',\n }).render();\n\n if (\n !window.featureManager.isEnabled('geo-idc') ||\n window.featureManager.isEnabled('content-holds')\n ) {\n let elForCopiesAvailable = '.js-copiesAvailableContainer';\n\n if (\n mediaModel.allCopiesAreLuckyDay &&\n mediaModel.get('titleState') === 'unavailable'\n ) {\n let copiesAvailableLuckyDay = new CopiesAvailable({\n model: mediaModel,\n el: '.js-copiesAvailableContainer-LuckyDay',\n withIcons: true,\n });\n\n let luckyDayHoldsBlob = new LuckyDayHolds({\n model: mediaModel,\n el: '.LuckyDayCantPlaceHoldContainer',\n });\n\n elForCopiesAvailable =\n '.js-copiesAvailableContainer.show-for-600-up';\n }\n\n let copiesAvailable = new CopiesAvailable({\n model: mediaModel,\n el: elForCopiesAvailable,\n withIcons: true,\n });\n }\n\n let formats = mediaModel.get('formats');\n let tolinoAcceptedFormats = formats.filter(\n (item) => !isUnsupportedTolinoFormat(item.id)\n );\n let hasAcceptedTolinoFormat = tolinoAcceptedFormats.length > 0;\n\n if (window.OverDrive.isTolinoDevice && !hasAcceptedTolinoFormat) {\n let notCompatibleFormat = new NotCompatibleFormat({\n model: mediaModel,\n el: '.toast-placeholder',\n });\n }\n\n if (mediaModel.get('awards')) {\n let sortedAwards = mediaModel\n .get('awards')\n .sort((a, b) =>\n a.description > b.description\n ? 1\n : a.description < b.description\n ? -1\n : 0\n );\n let awardLinks = '';\n sortedAwards.forEach((award) => {\n awardLinks += `${award.description}`;\n });\n $('.TitleDetailsDescription-awardsBlock').append(awardLinks);\n }\n // Listen for media button action\n mediaModel.on('title:action', (data) => {\n titleActions.perform(data.action, data.model);\n });\n\n // TODO: Rename this for premium reviews\n const el = $('.container');\n createComponent({ el });\n\n const coverImage = $('.js-details-cover-image')[0];\n createDetailsCoverImageComponent({ el: coverImage });\n\n const relatedTitlesContainer = $('.js-relatedTitlesContainer');\n new DetailsRelatedTitlesView({\n el: relatedTitlesContainer,\n bus: window.globalEvents,\n titleModel: mediaModel,\n });\n\n window.OverDrive.gaEventLogger.pushEvent(\n { titleModel: mediaModel },\n 'detailsPage'\n );\n\n if (\n window.featureManager.isEnabled('magazine-rollup') &&\n mediaModel.isMagazine\n ) {\n new RecentIssuesDrawer({\n el: $('.issue-list'),\n titleModel: mediaModel,\n });\n }\n });\n});\n","const { html } = window;\n\nexport default () => `\n
    \n

    \n ${html('loading')}\n
    \n`;\n","export default class TitleActions {\n constructor({ bus, context }) {\n this.bus = bus;\n\n this.context = {\n room: undefined,\n collectionDefinition: undefined,\n };\n\n _.extend(this.context, context);\n }\n\n perform(action, titleModel) {\n if (typeof this[`_${action}`] === 'function') {\n this[`_${action}`](titleModel);\n }\n }\n\n _borrow(titleModel) {\n this.bus.trigger('title:borrow', titleModel, this.context);\n }\n\n _hold(titleModel) {\n this.bus.trigger('title:hold', titleModel, this.context);\n }\n\n _wish(titleModel) {\n this.bus.trigger('title:wishlist', titleModel, this.context);\n }\n\n _nook(titleModel) {\n this.bus.trigger('title:nook', titleModel, this.context);\n }\n\n _rating(titleModel) {\n this.bus.trigger('title:rating', titleModel, this.context);\n }\n\n _history(titleModel) {\n this.bus.trigger('title:history', titleModel, this.context);\n }\n\n _download(titleModel) {\n this.bus.trigger('title:download', titleModel, this.context);\n }\n\n _preview(titleModel) {\n this.bus.trigger('title:preview', titleModel, this.context);\n }\n\n _renew(titleModel) {\n this.bus.trigger('title:renew', titleModel, this.context);\n }\n\n _requestAgain(titleModel) {\n this.bus.trigger('title:requestAgain', titleModel, this.context);\n }\n\n setContextRoom(room) {\n if (_(room).isEmpty()) {\n delete this.context.room;\n } else {\n this.context.room = room;\n }\n\n return this;\n }\n\n setContextCollection(titleCollection) {\n if (_(titleCollection).isEmpty()) {\n delete this.context.titleCollection;\n } else {\n this.context.titleCollection = titleCollection;\n }\n\n return this;\n }\n}\n","class TitleState {\n static getState(media, patronItems) {\n const featureManager = window.featureManager;\n\n if (featureManager.isEnabled('sampleOnlyMode')) {\n return 'preview';\n }\n\n let mediaId = media.id;\n\n let isOnHold = patronItems && patronItems.onHolds.indexOf(mediaId) > -1;\n let isOnCheckouts =\n patronItems && patronItems.onCheckouts.indexOf(mediaId) > -1;\n let isAvailable =\n media.isAvailable ||\n (featureManager.isEnabled('LuckyDay') &&\n media.luckyDayAvailableCopies > 0);\n\n if (\n /account\\/loans/.test(window.location.href) &&\n media.isRenewable &&\n featureManager.isEnabled('content-holds')\n ) {\n if (isOnHold) {\n return 'requested';\n } else if (\n media.holdsCount <= 0 &&\n media.ownedCopies >= 0 &&\n !(\n featureManager.isEnabled('LuckyDay') &&\n media.isLuckyDayCheckout\n )\n ) {\n return 'renew';\n }\n return 'requestAgain';\n }\n\n if (isOnCheckouts) {\n return 'borrowed';\n }\n\n if (isOnHold && !isAvailable) {\n return 'onHold';\n }\n\n if (isAvailable) {\n if (media.type.id === 'periodicals') {\n return 'nook';\n }\n\n return 'borrow';\n }\n\n if (media.isHoldable && featureManager.isEnabled('content-holds')) {\n return 'hold';\n }\n\n return 'unavailable';\n }\n\n static isOnWishlist(media, patronItems) {\n return patronItems && patronItems.onWishlist.indexOf(media.id) > -1;\n }\n\n static isOnReadingHistory(media, patronItems) {\n return (\n patronItems && patronItems.onReadingHistory.indexOf(media.id) > -1\n );\n }\n\n static starRating(media, patronItems) {\n // Returns 0 if not rated\n return (\n (patronItems &&\n patronItems.starRatings &&\n patronItems.starRatings[media.id]) ||\n 0\n );\n }\n}\n\nexport default TitleState;\n","const keys = Object.freeze({\n TAB: 9,\n ENTER: 13,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n SPACE: 32,\n ESC: 27\n});\nexport default keys;\n","import HashManager from '../../components/common/HashManager';\nimport Title from '../../components/media/models/Title';\nimport TitleActions from '../../title-actions/TitleActions';\n\nexport default class ProcessForwardedAction {\n constructor(collection, bus, model) {\n let hash = HashManager.get('action')[0];\n this.actionArr = hash ? hash.split('~') : [];\n this.action = this.actionArr[0] || null;\n this.mediaId = this.actionArr[1] || null;\n this.rating = this.actionArr[2] || 0;\n this.model = model || null;\n this.collection = collection.models;\n this.bus = bus;\n }\n\n // Execute user forwarded action\n executeAction() {\n if (!this.action || !this.mediaId) {\n return;\n }\n\n if (\n !this.model ||\n (this.model && this.model.get('id') !== this.mediaId)\n ) {\n this.model = _.find(\n this.collection,\n (model) => model.id === this.mediaId\n );\n }\n\n let titleActions = new TitleActions({ bus: this.bus });\n\n if (this.model) {\n // Title model is on page\n HashManager.remove('action');\n this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, this.model);\n } else {\n // Title model is not on page, fetch async\n let title = new Title();\n let promise = new Promise((resolve, reject) => {\n title.getTitleAsync(this.mediaId, resolve, reject);\n });\n\n promise.then(() => {\n this.model && this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, title);\n HashManager.remove('action');\n });\n }\n }\n}\n","// import when we move more to modules\nconst Backbone = window.Backbone;\nimport LoaderTemplate from '../templates/loader.html';\n\nconst BaseView = Backbone.View.extend({\n close() {\n this.trigger('close');\n this.remove();\n this.unbind();\n this.stopListening();\n // Views should define this in their extend declaration\n this.onClose && this.onClose();\n return this;\n },\n\n getHtml({ templateData } = {}) {\n const globals = {\n html: window.html,\n text: window.text,\n };\n const data = templateData || this.getTemplateData();\n return this.template(_.extend({}, data, globals));\n },\n\n buildElement(options) {\n return this.$el.html(this.getHtml(options));\n },\n\n doRender(options) {\n this.buildElement(options);\n if (this.target && !this.attached) {\n this.beforeAttach && this.beforeAttach();\n this.attach();\n this.attached = true;\n }\n },\n\n attach() {\n if (!(this.$target instanceof Backbone.$)) {\n this.$target = Backbone.$(this.target);\n }\n this.$target.append(this.$el);\n },\n\n render(options) {\n this.clearLoader();\n\n if (this.beforeRender) {\n this.beforeRender();\n }\n this.doRender(options);\n if (this.afterRender) {\n this.afterRender();\n }\n return this;\n },\n\n getTemplateData() {\n return (this.model && this.model.toJSON()) || {};\n },\n\n renderLoader() {\n const elem = $(this.target).length ? $(this.target) : this.$el;\n elem.empty().append(LoaderTemplate({ html: window.html }));\n },\n\n clearLoader() {\n // Clear loader if it exists\n const $loader = $('.js-es6loader');\n if ($loader.length) {\n $loader.remove();\n }\n },\n});\n\nexport default BaseView;\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvaGUtbnBtLTEuMi4wLTNiNzNhMmZmMDctM2Q0ZDZiYWJjYy56aXAvbm9kZV9tb2R1bGVzL2hlL2hlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCIuLi8uLi8ueWFybi9jYWNoZS91bmRlcnNjb3JlLW5wbS0xLjEzLjYtM2ViZTlkOTJmYi1kNWNlZGQxNGE5LnppcC9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLXVtZC5qcyIsImJ1c2luZXNzLW9iamVjdHMvR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMuanMiLCJsaWIvZ2V0T3B0aW1pemVkQ292ZXItdHMuanMiLCJsaWIvdXRpbGl0eS9tYWNtaWxsYW5NZXNzYWdlLmpzIiwibW9kZWxzL2Rhby9NZWRpYVBhcmFtZXRlcnMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9Db2xsZWN0aW9uRGVmaW5pdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29tbW9uL0hhc2hNYW5hZ2VyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb21tb24vbW9kYWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbW1vbi90ZW1wbGF0ZXMvbW9kYWwuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvZGV0YWlsc19jb3Zlcl9pbWFnZS9tYWluLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9kZXRhaWxzX2NvdmVyX2ltYWdlL3ZpZXdzL2RldGFpbHNfY292ZXJfaW1hZ2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2RldGFpbHNfcmVsYXRlZF90aXRsZXMvRGV0YWlsc1JlbGF0ZWRUaXRsZXNUZW1wbGF0ZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9kZXRhaWxzX3JlbGF0ZWRfdGl0bGVzL0RldGFpbHNSZWxhdGVkVGl0bGVzVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3RlbXBsYXRlcy9Ib2xkSW5mb3JtYXRpb24uaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbk1vZGFsLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25Nb2RhbFYyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMi5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvQ29udGV4dE1lbnUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL0NvdmVyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9NZWRpYUludGVyZmFjZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvUmVhZGluZ0hpc3RvcnlCdXR0b24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQWN0aW9uQnV0dG9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9UaXRsZUNhcmQuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQ29sbGVjdGlvblZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlSGVhZGVyQmFyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9XaXNoTGlzdEJ1dHRvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGVDb2xsZWN0aW9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvQ29udGV4dE1lbnUuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL0NvcGllc0F2YWlsYWJsZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL05vQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1JlYWRpbmdIaXN0b3J5QnV0dG9uLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9TdGFyVmlld1RlbXBsYXRlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUF1dGhvci5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvVGl0bGVDYXJkLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUZvcm1hdEJhZGdlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZU5hbWUuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1dpc2hMaXN0QnV0dG9uLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL0NvcGllc0F2YWlsYWJsZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL0x1Y2t5RGF5SG9sZHMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9TdGFyUmF0aW5nLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vU3RhclZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZUF1dGhvci5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlRWRpdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlRm9ybWF0QmFkZ2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZU5hbWUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZVNlcmllcy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbm90X2NvbXBhdGlibGVfZm9ybWF0L25vdC1jb21wYXRpYmxlLWZvcm1hdC12aWV3Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL25vdF9jb21wYXRpYmxlX2Zvcm1hdC9ub3QtY29tcGF0aWJsZS1mb3JtYXQtdmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvcHJlbWl1bV9yZXZpZXdzL21haW4uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL3ByZW1pdW1fcmV2aWV3cy9tb2RlbHMvcHJlbWl1bV9yZXZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL3ByZW1pdW1fcmV2aWV3cy90ZW1wbGF0ZXMvcmV2aWV3c19kZXNrdG9wLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL3ByZW1pdW1fcmV2aWV3cy90ZW1wbGF0ZXMvcmV2aWV3c19tb2JpbGUuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvcHJlbWl1bV9yZXZpZXdzL3ZpZXdzL3ByZW1pdW1fcmV2aWV3cy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvcmVjZW50X2lzc3Vlc19kcmF3ZXIvUmVjZW50SXNzdWVzRHJhd2VyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvbW9kZWxzL1BhdHJvblRpdGxlU3RhdHVzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvbW9kZWxzL2Jhc2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9tb2RlbHMvcGF0cm9uX21lZGlhX2l0ZW1zLmpzIiwicHVibGljL2VjbWFzY3JpcHQvcGFnZXMvZGV0YWlsc19wYWdlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdGVtcGxhdGVzL2xvYWRlci5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdGl0bGUtYWN0aW9ucy9UaXRsZUFjdGlvbnMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC90aXRsZS1hY3Rpb25zL1RpdGxlU3RhdGUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC91dGlsL2tleWNvZGVzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC92aWV3cy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDelZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QVA7QUFDSCxLQW5EaUM7QUFxRGxDLG1CQXJEa0MsNkJBcURoQjtBQUNkLGVBQVEsS0FBSyxLQUFMLElBQWMsS0FBSyxLQUFMLENBQVcsTUFBWCxFQUFmLElBQXVDLEVBQTlDO0FBQ0gsS0F2RGlDO0FBeURsQyxnQkF6RGtDLDBCQXlEbkI7QUFDWCxZQUFNLE9BQU8sRUFBRSxLQUFLLE1BQVAsRUFBZSxNQUFmLEdBQXdCLEVBQUUsS0FBSyxNQUFQLENBQXhCLEdBQXlDLEtBQUssR0FBM0Q7QUFDQSxhQUFLLEtBQUwsR0FBYSxNQUFiLENBQW9CLHlCQUFlLEVBQUUsTUFBTSxPQUFPLElBQWYsRUFBZixDQUFwQjtBQUNILEtBNURpQztBQThEbEMsZUE5RGtDLHlCQThEcEI7QUFDVjtBQUNBLFlBQU0sVUFBVSxFQUFFLGVBQUYsQ0FBaEI7QUFDQSxZQUFJLFFBQVEsTUFBWixFQUFvQjtBQUNoQixvQkFBUSxNQUFSO0FBQ0g7QUFDSjtBQXBFaUMsQ0FBckIsQ0FBakI7O3FCQXVFZSxRIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyohIGh0dHBzOi8vbXRocy5iZS9oZSB2MS4yLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGVzIGBleHBvcnRzYC5cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLFxuXHQvLyBhbmQgdXNlIGl0IGFzIGByb290YC5cblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvLyBBbGwgYXN0cmFsIHN5bWJvbHMuXG5cdHZhciByZWdleEFzdHJhbFN5bWJvbHMgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nO1xuXHQvLyBBbGwgQVNDSUkgc3ltYm9scyAobm90IGp1c3QgcHJpbnRhYmxlIEFTQ0lJKSBleGNlcHQgdGhvc2UgbGlzdGVkIGluIHRoZVxuXHQvLyBmaXJzdCBjb2x1bW4gb2YgdGhlIG92ZXJyaWRlcyB0YWJsZS5cblx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjdGFibGUtY2hhcnJlZi1vdmVycmlkZXNcblx0dmFyIHJlZ2V4QXNjaWlXaGl0ZWxpc3QgPSAvW1xceDAxLVxceDdGXS9nO1xuXHQvLyBBbGwgQk1QIHN5bWJvbHMgdGhhdCBhcmUgbm90IEFTQ0lJIG5ld2xpbmVzLCBwcmludGFibGUgQVNDSUkgc3ltYm9scywgb3Jcblx0Ly8gY29kZSBwb2ludHMgbGlzdGVkIGluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIG92ZXJyaWRlcyB0YWJsZSBvblxuXHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCN0YWJsZS1jaGFycmVmLW92ZXJyaWRlcy5cblx0dmFyIHJlZ2V4Qm1wV2hpdGVsaXN0ID0gL1tcXHgwMS1cXHRcXHgwQlxcZlxceDBFLVxceDFGXFx4N0ZcXHg4MVxceDhEXFx4OEZcXHg5MFxceDlEXFx4QTAtXFx1RkZGRl0vZztcblxuXHR2YXIgcmVnZXhFbmNvZGVOb25Bc2NpaSA9IC88XFx1MjBEMnw9XFx1MjBFNXw+XFx1MjBEMnxcXHUyMDVGXFx1MjAwQXxcXHUyMTlEXFx1MDMzOHxcXHUyMjAyXFx1MDMzOHxcXHUyMjIwXFx1MjBEMnxcXHUyMjI5XFx1RkUwMHxcXHUyMjJBXFx1RkUwMHxcXHUyMjNDXFx1MjBEMnxcXHUyMjNEXFx1MDMzMXxcXHUyMjNFXFx1MDMzM3xcXHUyMjQyXFx1MDMzOHxcXHUyMjRCXFx1MDMzOHxcXHUyMjREXFx1MjBEMnxcXHUyMjRFXFx1MDMzOHxcXHUyMjRGXFx1MDMzOHxcXHUyMjUwXFx1MDMzOHxcXHUyMjYxXFx1MjBFNXxcXHUyMjY0XFx1MjBEMnxcXHUyMjY1XFx1MjBEMnxcXHUyMjY2XFx1MDMzOHxcXHUyMjY3XFx1MDMzOHxcXHUyMjY4XFx1RkUwMHxcXHUyMjY5XFx1RkUwMHxcXHUyMjZBXFx1MDMzOHxcXHUyMjZBXFx1MjBEMnxcXHUyMjZCXFx1MDMzOHxcXHUyMjZCXFx1MjBEMnxcXHUyMjdGXFx1MDMzOHxcXHUyMjgyXFx1MjBEMnxcXHUyMjgzXFx1MjBEMnxcXHUyMjhBXFx1RkUwMHxcXHUyMjhCXFx1RkUwMHxcXHUyMjhGXFx1MDMzOHxcXHUyMjkwXFx1MDMzOHxcXHUyMjkzXFx1RkUwMHxcXHUyMjk0XFx1RkUwMHxcXHUyMkI0XFx1MjBEMnxcXHUyMkI1XFx1MjBEMnxcXHUyMkQ4XFx1MDMzOHxcXHUyMkQ5XFx1MDMzOHxcXHUyMkRBXFx1RkUwMHxcXHUyMkRCXFx1RkUwMHxcXHUyMkY1XFx1MDMzOHxcXHUyMkY5XFx1MDMzOHxcXHUyOTMzXFx1MDMzOHxcXHUyOUNGXFx1MDMzOHxcXHUyOUQwXFx1MDMzOHxcXHUyQTZEXFx1MDMzOHxcXHUyQTcwXFx1MDMzOHxcXHUyQTdEXFx1MDMzOHxcXHUyQTdFXFx1MDMzOHxcXHUyQUExXFx1MDMzOHxcXHUyQUEyXFx1MDMzOHxcXHUyQUFDXFx1RkUwMHxcXHUyQUFEXFx1RkUwMHxcXHUyQUFGXFx1MDMzOHxcXHUyQUIwXFx1MDMzOHxcXHUyQUM1XFx1MDMzOHxcXHUyQUM2XFx1MDMzOHxcXHUyQUNCXFx1RkUwMHxcXHUyQUNDXFx1RkUwMHxcXHUyQUZEXFx1MjBFNXxbXFx4QTAtXFx1MDExM1xcdTAxMTYtXFx1MDEyMlxcdTAxMjQtXFx1MDEyQlxcdTAxMkUtXFx1MDE0RFxcdTAxNTAtXFx1MDE3RVxcdTAxOTJcXHUwMUI1XFx1MDFGNVxcdTAyMzdcXHUwMkM2XFx1MDJDN1xcdTAyRDgtXFx1MDJERFxcdTAzMTFcXHUwMzkxLVxcdTAzQTFcXHUwM0EzLVxcdTAzQTlcXHUwM0IxLVxcdTAzQzlcXHUwM0QxXFx1MDNEMlxcdTAzRDVcXHUwM0Q2XFx1MDNEQ1xcdTAzRERcXHUwM0YwXFx1MDNGMVxcdTAzRjVcXHUwM0Y2XFx1MDQwMS1cXHUwNDBDXFx1MDQwRS1cXHUwNDRGXFx1MDQ1MS1cXHUwNDVDXFx1MDQ1RVxcdTA0NUZcXHUyMDAyLVxcdTIwMDVcXHUyMDA3LVxcdTIwMTBcXHUyMDEzLVxcdTIwMTZcXHUyMDE4LVxcdTIwMUFcXHUyMDFDLVxcdTIwMUVcXHUyMDIwLVxcdTIwMjJcXHUyMDI1XFx1MjAyNlxcdTIwMzAtXFx1MjAzNVxcdTIwMzlcXHUyMDNBXFx1MjAzRVxcdTIwNDFcXHUyMDQzXFx1MjA0NFxcdTIwNEZcXHUyMDU3XFx1MjA1Ri1cXHUyMDYzXFx1MjBBQ1xcdTIwREJcXHUyMERDXFx1MjEwMlxcdTIxMDVcXHUyMTBBLVxcdTIxMTNcXHUyMTE1LVxcdTIxMUVcXHUyMTIyXFx1MjEyNFxcdTIxMjctXFx1MjEyOVxcdTIxMkNcXHUyMTJEXFx1MjEyRi1cXHUyMTMxXFx1MjEzMy1cXHUyMTM4XFx1MjE0NS1cXHUyMTQ4XFx1MjE1My1cXHUyMTVFXFx1MjE5MC1cXHUyMTlCXFx1MjE5RC1cXHUyMUE3XFx1MjFBOS1cXHUyMUFFXFx1MjFCMC1cXHUyMUIzXFx1MjFCNS1cXHUyMUI3XFx1MjFCQS1cXHUyMURCXFx1MjFERFxcdTIxRTRcXHUyMUU1XFx1MjFGNVxcdTIxRkQtXFx1MjIwNVxcdTIyMDctXFx1MjIwOVxcdTIyMEJcXHUyMjBDXFx1MjIwRi1cXHUyMjE0XFx1MjIxNi1cXHUyMjE4XFx1MjIxQVxcdTIyMUQtXFx1MjIzOFxcdTIyM0EtXFx1MjI1N1xcdTIyNTlcXHUyMjVBXFx1MjI1Q1xcdTIyNUYtXFx1MjI2MlxcdTIyNjQtXFx1MjI4QlxcdTIyOEQtXFx1MjI5QlxcdTIyOUQtXFx1MjJBNVxcdTIyQTctXFx1MjJCMFxcdTIyQjItXFx1MjJCQlxcdTIyQkQtXFx1MjJEQlxcdTIyREUtXFx1MjJFM1xcdTIyRTYtXFx1MjJGN1xcdTIyRjktXFx1MjJGRVxcdTIzMDVcXHUyMzA2XFx1MjMwOC1cXHUyMzEwXFx1MjMxMlxcdTIzMTNcXHUyMzE1XFx1MjMxNlxcdTIzMUMtXFx1MjMxRlxcdTIzMjJcXHUyMzIzXFx1MjMyRFxcdTIzMkVcXHUyMzM2XFx1MjMzRFxcdTIzM0ZcXHUyMzdDXFx1MjNCMFxcdTIzQjFcXHUyM0I0LVxcdTIzQjZcXHUyM0RDLVxcdTIzREZcXHUyM0UyXFx1MjNFN1xcdTI0MjNcXHUyNEM4XFx1MjUwMFxcdTI1MDJcXHUyNTBDXFx1MjUxMFxcdTI1MTRcXHUyNTE4XFx1MjUxQ1xcdTI1MjRcXHUyNTJDXFx1MjUzNFxcdTI1M0NcXHUyNTUwLVxcdTI1NkNcXHUyNTgwXFx1MjU4NFxcdTI1ODhcXHUyNTkxLVxcdTI1OTNcXHUyNUExXFx1MjVBQVxcdTI1QUJcXHUyNUFEXFx1MjVBRVxcdTI1QjFcXHUyNUIzLVxcdTI1QjVcXHUyNUI4XFx1MjVCOVxcdTI1QkQtXFx1MjVCRlxcdTI1QzJcXHUyNUMzXFx1MjVDQVxcdTI1Q0JcXHUyNUVDXFx1MjVFRlxcdTI1RjgtXFx1MjVGQ1xcdTI2MDVcXHUyNjA2XFx1MjYwRVxcdTI2NDBcXHUyNjQyXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NkFcXHUyNjZELVxcdTI2NkZcXHUyNzEzXFx1MjcxN1xcdTI3MjBcXHUyNzM2XFx1Mjc1OFxcdTI3NzJcXHUyNzczXFx1MjdDOFxcdTI3QzlcXHUyN0U2LVxcdTI3RURcXHUyN0Y1LVxcdTI3RkFcXHUyN0ZDXFx1MjdGRlxcdTI5MDItXFx1MjkwNVxcdTI5MEMtXFx1MjkxM1xcdTI5MTZcXHUyOTE5LVxcdTI5MjBcXHUyOTIzLVxcdTI5MkFcXHUyOTMzXFx1MjkzNS1cXHUyOTM5XFx1MjkzQ1xcdTI5M0RcXHUyOTQ1XFx1Mjk0OC1cXHUyOTRCXFx1Mjk0RS1cXHUyOTc2XFx1Mjk3OFxcdTI5NzlcXHUyOTdCLVxcdTI5N0ZcXHUyOTg1XFx1Mjk4NlxcdTI5OEItXFx1Mjk5NlxcdTI5OUFcXHUyOTlDXFx1Mjk5RFxcdTI5QTQtXFx1MjlCN1xcdTI5QjlcXHUyOUJCXFx1MjlCQ1xcdTI5QkUtXFx1MjlDNVxcdTI5QzlcXHUyOUNELVxcdTI5RDBcXHUyOURDLVxcdTI5REVcXHUyOUUzLVxcdTI5RTVcXHUyOUVCXFx1MjlGNFxcdTI5RjZcXHUyQTAwLVxcdTJBMDJcXHUyQTA0XFx1MkEwNlxcdTJBMENcXHUyQTBEXFx1MkExMC1cXHUyQTE3XFx1MkEyMi1cXHUyQTI3XFx1MkEyOVxcdTJBMkFcXHUyQTJELVxcdTJBMzFcXHUyQTMzLVxcdTJBM0NcXHUyQTNGXFx1MkE0MFxcdTJBNDItXFx1MkE0RFxcdTJBNTBcXHUyQTUzLVxcdTJBNThcXHUyQTVBLVxcdTJBNURcXHUyQTVGXFx1MkE2NlxcdTJBNkFcXHUyQTZELVxcdTJBNzVcXHUyQTc3LVxcdTJBOUFcXHUyQTlELVxcdTJBQTJcXHUyQUE0LVxcdTJBQjBcXHUyQUIzLVxcdTJBQzhcXHUyQUNCXFx1MkFDQ1xcdTJBQ0YtXFx1MkFEQlxcdTJBRTRcXHUyQUU2LVxcdTJBRTlcXHUyQUVCLVxcdTJBRjNcXHUyQUZEXFx1RkIwMC1cXHVGQjA0XXxcXHVEODM1W1xcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdURDQ0ZcXHVERDA0XFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURENkJdL2c7XG5cdHZhciBlbmNvZGVNYXAgPSB7J1xceEFEJzonc2h5JywnXFx1MjAwQyc6J3p3bmonLCdcXHUyMDBEJzonendqJywnXFx1MjAwRSc6J2xybScsJ1xcdTIwNjMnOidpYycsJ1xcdTIwNjInOidpdCcsJ1xcdTIwNjEnOidhZicsJ1xcdTIwMEYnOidybG0nLCdcXHUyMDBCJzonWmVyb1dpZHRoU3BhY2UnLCdcXHUyMDYwJzonTm9CcmVhaycsJ1xcdTAzMTEnOidEb3duQnJldmUnLCdcXHUyMERCJzondGRvdCcsJ1xcdTIwREMnOidEb3REb3QnLCdcXHQnOidUYWInLCdcXG4nOidOZXdMaW5lJywnXFx1MjAwOCc6J3B1bmNzcCcsJ1xcdTIwNUYnOidNZWRpdW1TcGFjZScsJ1xcdTIwMDknOid0aGluc3AnLCdcXHUyMDBBJzonaGFpcnNwJywnXFx1MjAwNCc6J2Vtc3AxMycsJ1xcdTIwMDInOidlbnNwJywnXFx1MjAwNSc6J2Vtc3AxNCcsJ1xcdTIwMDMnOidlbXNwJywnXFx1MjAwNyc6J251bXNwJywnXFx4QTAnOiduYnNwJywnXFx1MjA1RlxcdTIwMEEnOidUaGlja1NwYWNlJywnXFx1MjAzRSc6J29saW5lJywnXyc6J2xvd2JhcicsJ1xcdTIwMTAnOidkYXNoJywnXFx1MjAxMyc6J25kYXNoJywnXFx1MjAxNCc6J21kYXNoJywnXFx1MjAxNSc6J2hvcmJhcicsJywnOidjb21tYScsJzsnOidzZW1pJywnXFx1MjA0Ric6J2JzZW1pJywnOic6J2NvbG9uJywnXFx1MkE3NCc6J0NvbG9uZScsJyEnOidleGNsJywnXFx4QTEnOidpZXhjbCcsJz8nOidxdWVzdCcsJ1xceEJGJzonaXF1ZXN0JywnLic6J3BlcmlvZCcsJ1xcdTIwMjUnOidubGRyJywnXFx1MjAyNic6J21sZHInLCdcXHhCNyc6J21pZGRvdCcsJ1xcJyc6J2Fwb3MnLCdcXHUyMDE4JzonbHNxdW8nLCdcXHUyMDE5JzoncnNxdW8nLCdcXHUyMDFBJzonc2JxdW8nLCdcXHUyMDM5JzonbHNhcXVvJywnXFx1MjAzQSc6J3JzYXF1bycsJ1wiJzoncXVvdCcsJ1xcdTIwMUMnOidsZHF1bycsJ1xcdTIwMUQnOidyZHF1bycsJ1xcdTIwMUUnOidiZHF1bycsJ1xceEFCJzonbGFxdW8nLCdcXHhCQic6J3JhcXVvJywnKCc6J2xwYXInLCcpJzoncnBhcicsJ1snOidsc3FiJywnXSc6J3JzcWInLCd7JzonbGN1YicsJ30nOidyY3ViJywnXFx1MjMwOCc6J2xjZWlsJywnXFx1MjMwOSc6J3JjZWlsJywnXFx1MjMwQSc6J2xmbG9vcicsJ1xcdTIzMEInOidyZmxvb3InLCdcXHUyOTg1JzonbG9wYXInLCdcXHUyOTg2Jzoncm9wYXInLCdcXHUyOThCJzonbGJya2UnLCdcXHUyOThDJzoncmJya2UnLCdcXHUyOThEJzonbGJya3NsdScsJ1xcdTI5OEUnOidyYnJrc2xkJywnXFx1Mjk4Ric6J2xicmtzbGQnLCdcXHUyOTkwJzoncmJya3NsdScsJ1xcdTI5OTEnOidsYW5nZCcsJ1xcdTI5OTInOidyYW5nZCcsJ1xcdTI5OTMnOidscGFybHQnLCdcXHUyOTk0JzoncnBhcmd0JywnXFx1Mjk5NSc6J2d0bFBhcicsJ1xcdTI5OTYnOidsdHJQYXInLCdcXHUyN0U2JzonbG9icmsnLCdcXHUyN0U3Jzoncm9icmsnLCdcXHUyN0U4JzonbGFuZycsJ1xcdTI3RTknOidyYW5nJywnXFx1MjdFQSc6J0xhbmcnLCdcXHUyN0VCJzonUmFuZycsJ1xcdTI3RUMnOidsb2FuZycsJ1xcdTI3RUQnOidyb2FuZycsJ1xcdTI3NzInOidsYmJyaycsJ1xcdTI3NzMnOidyYmJyaycsJ1xcdTIwMTYnOidWZXJ0JywnXFx4QTcnOidzZWN0JywnXFx4QjYnOidwYXJhJywnQCc6J2NvbW1hdCcsJyonOidhc3QnLCcvJzonc29sJywndW5kZWZpbmVkJzpudWxsLCcmJzonYW1wJywnIyc6J251bScsJyUnOidwZXJjbnQnLCdcXHUyMDMwJzoncGVybWlsJywnXFx1MjAzMSc6J3BlcnRlbmsnLCdcXHUyMDIwJzonZGFnZ2VyJywnXFx1MjAyMSc6J0RhZ2dlcicsJ1xcdTIwMjInOididWxsJywnXFx1MjA0Myc6J2h5YnVsbCcsJ1xcdTIwMzInOidwcmltZScsJ1xcdTIwMzMnOidQcmltZScsJ1xcdTIwMzQnOid0cHJpbWUnLCdcXHUyMDU3JzoncXByaW1lJywnXFx1MjAzNSc6J2JwcmltZScsJ1xcdTIwNDEnOidjYXJldCcsJ2AnOidncmF2ZScsJ1xceEI0JzonYWN1dGUnLCdcXHUwMkRDJzondGlsZGUnLCdeJzonSGF0JywnXFx4QUYnOidtYWNyJywnXFx1MDJEOCc6J2JyZXZlJywnXFx1MDJEOSc6J2RvdCcsJ1xceEE4JzonZGllJywnXFx1MDJEQSc6J3JpbmcnLCdcXHUwMkREJzonZGJsYWMnLCdcXHhCOCc6J2NlZGlsJywnXFx1MDJEQic6J29nb24nLCdcXHUwMkM2JzonY2lyYycsJ1xcdTAyQzcnOidjYXJvbicsJ1xceEIwJzonZGVnJywnXFx4QTknOidjb3B5JywnXFx4QUUnOidyZWcnLCdcXHUyMTE3JzonY29weXNyJywnXFx1MjExOCc6J3dwJywnXFx1MjExRSc6J3J4JywnXFx1MjEyNyc6J21obycsJ1xcdTIxMjknOidpaW90YScsJ1xcdTIxOTAnOidsYXJyJywnXFx1MjE5QSc6J25sYXJyJywnXFx1MjE5Mic6J3JhcnInLCdcXHUyMTlCJzonbnJhcnInLCdcXHUyMTkxJzondWFycicsJ1xcdTIxOTMnOidkYXJyJywnXFx1MjE5NCc6J2hhcnInLCdcXHUyMUFFJzonbmhhcnInLCdcXHUyMTk1JzondmFycicsJ1xcdTIxOTYnOidud2FycicsJ1xcdTIxOTcnOiduZWFycicsJ1xcdTIxOTgnOidzZWFycicsJ1xcdTIxOTknOidzd2FycicsJ1xcdTIxOUQnOidyYXJydycsJ1xcdTIxOURcXHUwMzM4JzonbnJhcnJ3JywnXFx1MjE5RSc6J0xhcnInLCdcXHUyMTlGJzonVWFycicsJ1xcdTIxQTAnOidSYXJyJywnXFx1MjFBMSc6J0RhcnInLCdcXHUyMUEyJzonbGFycnRsJywnXFx1MjFBMyc6J3JhcnJ0bCcsJ1xcdTIxQTQnOidtYXBzdG9sZWZ0JywnXFx1MjFBNSc6J21hcHN0b3VwJywnXFx1MjFBNic6J21hcCcsJ1xcdTIxQTcnOidtYXBzdG9kb3duJywnXFx1MjFBOSc6J2xhcnJoaycsJ1xcdTIxQUEnOidyYXJyaGsnLCdcXHUyMUFCJzonbGFycmxwJywnXFx1MjFBQyc6J3JhcnJscCcsJ1xcdTIxQUQnOidoYXJydycsJ1xcdTIxQjAnOidsc2gnLCdcXHUyMUIxJzoncnNoJywnXFx1MjFCMic6J2xkc2gnLCdcXHUyMUIzJzoncmRzaCcsJ1xcdTIxQjUnOidjcmFycicsJ1xcdTIxQjYnOidjdWxhcnInLCdcXHUyMUI3JzonY3VyYXJyJywnXFx1MjFCQSc6J29sYXJyJywnXFx1MjFCQic6J29yYXJyJywnXFx1MjFCQyc6J2xoYXJ1JywnXFx1MjFCRCc6J2xoYXJkJywnXFx1MjFCRSc6J3VoYXJyJywnXFx1MjFCRic6J3VoYXJsJywnXFx1MjFDMCc6J3JoYXJ1JywnXFx1MjFDMSc6J3JoYXJkJywnXFx1MjFDMic6J2RoYXJyJywnXFx1MjFDMyc6J2RoYXJsJywnXFx1MjFDNCc6J3JsYXJyJywnXFx1MjFDNSc6J3VkYXJyJywnXFx1MjFDNic6J2xyYXJyJywnXFx1MjFDNyc6J2xsYXJyJywnXFx1MjFDOCc6J3V1YXJyJywnXFx1MjFDOSc6J3JyYXJyJywnXFx1MjFDQSc6J2RkYXJyJywnXFx1MjFDQic6J2xyaGFyJywnXFx1MjFDQyc6J3JsaGFyJywnXFx1MjFEMCc6J2xBcnInLCdcXHUyMUNEJzonbmxBcnInLCdcXHUyMUQxJzondUFycicsJ1xcdTIxRDInOidyQXJyJywnXFx1MjFDRic6J25yQXJyJywnXFx1MjFEMyc6J2RBcnInLCdcXHUyMUQ0JzonaWZmJywnXFx1MjFDRSc6J25oQXJyJywnXFx1MjFENSc6J3ZBcnInLCdcXHUyMUQ2JzonbndBcnInLCdcXHUyMUQ3JzonbmVBcnInLCdcXHUyMUQ4Jzonc2VBcnInLCdcXHUyMUQ5Jzonc3dBcnInLCdcXHUyMURBJzonbEFhcnInLCdcXHUyMURCJzonckFhcnInLCdcXHUyMUREJzonemlncmFycicsJ1xcdTIxRTQnOidsYXJyYicsJ1xcdTIxRTUnOidyYXJyYicsJ1xcdTIxRjUnOidkdWFycicsJ1xcdTIxRkQnOidsb2FycicsJ1xcdTIxRkUnOidyb2FycicsJ1xcdTIxRkYnOidob2FycicsJ1xcdTIyMDAnOidmb3JhbGwnLCdcXHUyMjAxJzonY29tcCcsJ1xcdTIyMDInOidwYXJ0JywnXFx1MjIwMlxcdTAzMzgnOiducGFydCcsJ1xcdTIyMDMnOidleGlzdCcsJ1xcdTIyMDQnOiduZXhpc3QnLCdcXHUyMjA1JzonZW1wdHknLCdcXHUyMjA3JzonRGVsJywnXFx1MjIwOCc6J2luJywnXFx1MjIwOSc6J25vdGluJywnXFx1MjIwQic6J25pJywnXFx1MjIwQyc6J25vdG5pJywnXFx1MDNGNic6J2JlcHNpJywnXFx1MjIwRic6J3Byb2QnLCdcXHUyMjEwJzonY29wcm9kJywnXFx1MjIxMSc6J3N1bScsJysnOidwbHVzJywnXFx4QjEnOidwbScsJ1xceEY3JzonZGl2JywnXFx4RDcnOid0aW1lcycsJzwnOidsdCcsJ1xcdTIyNkUnOidubHQnLCc8XFx1MjBEMic6J252bHQnLCc9JzonZXF1YWxzJywnXFx1MjI2MCc6J25lJywnPVxcdTIwRTUnOidibmUnLCdcXHUyQTc1JzonRXF1YWwnLCc+JzonZ3QnLCdcXHUyMjZGJzonbmd0JywnPlxcdTIwRDInOidudmd0JywnXFx4QUMnOidub3QnLCd8JzondmVydCcsJ1xceEE2JzonYnJ2YmFyJywnXFx1MjIxMic6J21pbnVzJywnXFx1MjIxMyc6J21wJywnXFx1MjIxNCc6J3BsdXNkbycsJ1xcdTIwNDQnOidmcmFzbCcsJ1xcdTIyMTYnOidzZXRtbicsJ1xcdTIyMTcnOidsb3dhc3QnLCdcXHUyMjE4JzonY29tcGZuJywnXFx1MjIxQSc6J1NxcnQnLCdcXHUyMjFEJzoncHJvcCcsJ1xcdTIyMUUnOidpbmZpbicsJ1xcdTIyMUYnOidhbmdydCcsJ1xcdTIyMjAnOidhbmcnLCdcXHUyMjIwXFx1MjBEMic6J25hbmcnLCdcXHUyMjIxJzonYW5nbXNkJywnXFx1MjIyMic6J2FuZ3NwaCcsJ1xcdTIyMjMnOidtaWQnLCdcXHUyMjI0Jzonbm1pZCcsJ1xcdTIyMjUnOidwYXInLCdcXHUyMjI2JzonbnBhcicsJ1xcdTIyMjcnOidhbmQnLCdcXHUyMjI4Jzonb3InLCdcXHUyMjI5JzonY2FwJywnXFx1MjIyOVxcdUZFMDAnOidjYXBzJywnXFx1MjIyQSc6J2N1cCcsJ1xcdTIyMkFcXHVGRTAwJzonY3VwcycsJ1xcdTIyMkInOidpbnQnLCdcXHUyMjJDJzonSW50JywnXFx1MjIyRCc6J3RpbnQnLCdcXHUyQTBDJzoncWludCcsJ1xcdTIyMkUnOidvaW50JywnXFx1MjIyRic6J0NvbmludCcsJ1xcdTIyMzAnOidDY29uaW50JywnXFx1MjIzMSc6J2N3aW50JywnXFx1MjIzMic6J2N3Y29uaW50JywnXFx1MjIzMyc6J2F3Y29uaW50JywnXFx1MjIzNCc6J3RoZXJlNCcsJ1xcdTIyMzUnOidiZWNhdXMnLCdcXHUyMjM2JzoncmF0aW8nLCdcXHUyMjM3JzonQ29sb24nLCdcXHUyMjM4JzonbWludXNkJywnXFx1MjIzQSc6J21ERG90JywnXFx1MjIzQic6J2hvbXRodCcsJ1xcdTIyM0MnOidzaW0nLCdcXHUyMjQxJzonbnNpbScsJ1xcdTIyM0NcXHUyMEQyJzonbnZzaW0nLCdcXHUyMjNEJzonYnNpbScsJ1xcdTIyM0RcXHUwMzMxJzoncmFjZScsJ1xcdTIyM0UnOidhYycsJ1xcdTIyM0VcXHUwMzMzJzonYWNFJywnXFx1MjIzRic6J2FjZCcsJ1xcdTIyNDAnOid3cicsJ1xcdTIyNDInOidlc2ltJywnXFx1MjI0MlxcdTAzMzgnOiduZXNpbScsJ1xcdTIyNDMnOidzaW1lJywnXFx1MjI0NCc6J25zaW1lJywnXFx1MjI0NSc6J2NvbmcnLCdcXHUyMjQ3JzonbmNvbmcnLCdcXHUyMjQ2Jzonc2ltbmUnLCdcXHUyMjQ4JzonYXAnLCdcXHUyMjQ5JzonbmFwJywnXFx1MjI0QSc6J2FwZScsJ1xcdTIyNEInOidhcGlkJywnXFx1MjI0QlxcdTAzMzgnOiduYXBpZCcsJ1xcdTIyNEMnOidiY29uZycsJ1xcdTIyNEQnOidDdXBDYXAnLCdcXHUyMjZEJzonTm90Q3VwQ2FwJywnXFx1MjI0RFxcdTIwRDInOidudmFwJywnXFx1MjI0RSc6J2J1bXAnLCdcXHUyMjRFXFx1MDMzOCc6J25idW1wJywnXFx1MjI0Ric6J2J1bXBlJywnXFx1MjI0RlxcdTAzMzgnOiduYnVtcGUnLCdcXHUyMjUwJzonZG90ZXEnLCdcXHUyMjUwXFx1MDMzOCc6J25lZG90JywnXFx1MjI1MSc6J2VEb3QnLCdcXHUyMjUyJzonZWZEb3QnLCdcXHUyMjUzJzonZXJEb3QnLCdcXHUyMjU0JzonY29sb25lJywnXFx1MjI1NSc6J2Vjb2xvbicsJ1xcdTIyNTYnOidlY2lyJywnXFx1MjI1Nyc6J2NpcmUnLCdcXHUyMjU5Jzond2VkZ2VxJywnXFx1MjI1QSc6J3ZlZWVxJywnXFx1MjI1Qyc6J3RyaWUnLCdcXHUyMjVGJzonZXF1ZXN0JywnXFx1MjI2MSc6J2VxdWl2JywnXFx1MjI2Mic6J25lcXVpdicsJ1xcdTIyNjFcXHUyMEU1JzonYm5lcXVpdicsJ1xcdTIyNjQnOidsZScsJ1xcdTIyNzAnOidubGUnLCdcXHUyMjY0XFx1MjBEMic6J252bGUnLCdcXHUyMjY1JzonZ2UnLCdcXHUyMjcxJzonbmdlJywnXFx1MjI2NVxcdTIwRDInOidudmdlJywnXFx1MjI2Nic6J2xFJywnXFx1MjI2NlxcdTAzMzgnOidubEUnLCdcXHUyMjY3JzonZ0UnLCdcXHUyMjY3XFx1MDMzOCc6J25nRScsJ1xcdTIyNjhcXHVGRTAwJzonbHZuRScsJ1xcdTIyNjgnOidsbkUnLCdcXHUyMjY5JzonZ25FJywnXFx1MjI2OVxcdUZFMDAnOidndm5FJywnXFx1MjI2QSc6J2xsJywnXFx1MjI2QVxcdTAzMzgnOiduTHR2JywnXFx1MjI2QVxcdTIwRDInOiduTHQnLCdcXHUyMjZCJzonZ2cnLCdcXHUyMjZCXFx1MDMzOCc6J25HdHYnLCdcXHUyMjZCXFx1MjBEMic6J25HdCcsJ1xcdTIyNkMnOid0d2l4dCcsJ1xcdTIyNzInOidsc2ltJywnXFx1MjI3NCc6J25sc2ltJywnXFx1MjI3Myc6J2dzaW0nLCdcXHUyMjc1JzonbmdzaW0nLCdcXHUyMjc2JzonbGcnLCdcXHUyMjc4JzonbnRsZycsJ1xcdTIyNzcnOidnbCcsJ1xcdTIyNzknOidudGdsJywnXFx1MjI3QSc6J3ByJywnXFx1MjI4MCc6J25wcicsJ1xcdTIyN0InOidzYycsJ1xcdTIyODEnOiduc2MnLCdcXHUyMjdDJzoncHJjdWUnLCdcXHUyMkUwJzonbnByY3VlJywnXFx1MjI3RCc6J3NjY3VlJywnXFx1MjJFMSc6J25zY2N1ZScsJ1xcdTIyN0UnOidwcnNpbScsJ1xcdTIyN0YnOidzY3NpbScsJ1xcdTIyN0ZcXHUwMzM4JzonTm90U3VjY2VlZHNUaWxkZScsJ1xcdTIyODInOidzdWInLCdcXHUyMjg0JzonbnN1YicsJ1xcdTIyODJcXHUyMEQyJzondm5zdWInLCdcXHUyMjgzJzonc3VwJywnXFx1MjI4NSc6J25zdXAnLCdcXHUyMjgzXFx1MjBEMic6J3Zuc3VwJywnXFx1MjI4Nic6J3N1YmUnLCdcXHUyMjg4JzonbnN1YmUnLCdcXHUyMjg3Jzonc3VwZScsJ1xcdTIyODknOiduc3VwZScsJ1xcdTIyOEFcXHVGRTAwJzondnN1Ym5lJywnXFx1MjI4QSc6J3N1Ym5lJywnXFx1MjI4QlxcdUZFMDAnOid2c3VwbmUnLCdcXHUyMjhCJzonc3VwbmUnLCdcXHUyMjhEJzonY3VwZG90JywnXFx1MjI4RSc6J3VwbHVzJywnXFx1MjI4Ric6J3Nxc3ViJywnXFx1MjI4RlxcdTAzMzgnOidOb3RTcXVhcmVTdWJzZXQnLCdcXHUyMjkwJzonc3FzdXAnLCdcXHUyMjkwXFx1MDMzOCc6J05vdFNxdWFyZVN1cGVyc2V0JywnXFx1MjI5MSc6J3Nxc3ViZScsJ1xcdTIyRTInOiduc3FzdWJlJywnXFx1MjI5Mic6J3Nxc3VwZScsJ1xcdTIyRTMnOiduc3FzdXBlJywnXFx1MjI5Myc6J3NxY2FwJywnXFx1MjI5M1xcdUZFMDAnOidzcWNhcHMnLCdcXHUyMjk0Jzonc3FjdXAnLCdcXHUyMjk0XFx1RkUwMCc6J3NxY3VwcycsJ1xcdTIyOTUnOidvcGx1cycsJ1xcdTIyOTYnOidvbWludXMnLCdcXHUyMjk3Jzonb3RpbWVzJywnXFx1MjI5OCc6J29zb2wnLCdcXHUyMjk5Jzonb2RvdCcsJ1xcdTIyOUEnOidvY2lyJywnXFx1MjI5Qic6J29hc3QnLCdcXHUyMjlEJzonb2Rhc2gnLCdcXHUyMjlFJzoncGx1c2InLCdcXHUyMjlGJzonbWludXNiJywnXFx1MjJBMCc6J3RpbWVzYicsJ1xcdTIyQTEnOidzZG90YicsJ1xcdTIyQTInOid2ZGFzaCcsJ1xcdTIyQUMnOidudmRhc2gnLCdcXHUyMkEzJzonZGFzaHYnLCdcXHUyMkE0JzondG9wJywnXFx1MjJBNSc6J2JvdCcsJ1xcdTIyQTcnOidtb2RlbHMnLCdcXHUyMkE4JzondkRhc2gnLCdcXHUyMkFEJzonbnZEYXNoJywnXFx1MjJBOSc6J1ZkYXNoJywnXFx1MjJBRSc6J25WZGFzaCcsJ1xcdTIyQUEnOidWdmRhc2gnLCdcXHUyMkFCJzonVkRhc2gnLCdcXHUyMkFGJzonblZEYXNoJywnXFx1MjJCMCc6J3BydXJlbCcsJ1xcdTIyQjInOid2bHRyaScsJ1xcdTIyRUEnOidubHRyaScsJ1xcdTIyQjMnOid2cnRyaScsJ1xcdTIyRUInOiducnRyaScsJ1xcdTIyQjQnOidsdHJpZScsJ1xcdTIyRUMnOidubHRyaWUnLCdcXHUyMkI0XFx1MjBEMic6J252bHRyaWUnLCdcXHUyMkI1JzoncnRyaWUnLCdcXHUyMkVEJzonbnJ0cmllJywnXFx1MjJCNVxcdTIwRDInOidudnJ0cmllJywnXFx1MjJCNic6J29yaWdvZicsJ1xcdTIyQjcnOidpbW9mJywnXFx1MjJCOCc6J211bWFwJywnXFx1MjJCOSc6J2hlcmNvbicsJ1xcdTIyQkEnOidpbnRjYWwnLCdcXHUyMkJCJzondmVlYmFyJywnXFx1MjJCRCc6J2JhcnZlZScsJ1xcdTIyQkUnOidhbmdydHZiJywnXFx1MjJCRic6J2xydHJpJywnXFx1MjJDMCc6J1dlZGdlJywnXFx1MjJDMSc6J1ZlZScsJ1xcdTIyQzInOid4Y2FwJywnXFx1MjJDMyc6J3hjdXAnLCdcXHUyMkM0JzonZGlhbScsJ1xcdTIyQzUnOidzZG90JywnXFx1MjJDNic6J1N0YXInLCdcXHUyMkM3JzonZGl2b254JywnXFx1MjJDOCc6J2Jvd3RpZScsJ1xcdTIyQzknOidsdGltZXMnLCdcXHUyMkNBJzoncnRpbWVzJywnXFx1MjJDQic6J2x0aHJlZScsJ1xcdTIyQ0MnOidydGhyZWUnLCdcXHUyMkNEJzonYnNpbWUnLCdcXHUyMkNFJzonY3V2ZWUnLCdcXHUyMkNGJzonY3V3ZWQnLCdcXHUyMkQwJzonU3ViJywnXFx1MjJEMSc6J1N1cCcsJ1xcdTIyRDInOidDYXAnLCdcXHUyMkQzJzonQ3VwJywnXFx1MjJENCc6J2ZvcmsnLCdcXHUyMkQ1JzonZXBhcicsJ1xcdTIyRDYnOidsdGRvdCcsJ1xcdTIyRDcnOidndGRvdCcsJ1xcdTIyRDgnOidMbCcsJ1xcdTIyRDhcXHUwMzM4JzonbkxsJywnXFx1MjJEOSc6J0dnJywnXFx1MjJEOVxcdTAzMzgnOiduR2cnLCdcXHUyMkRBXFx1RkUwMCc6J2xlc2cnLCdcXHUyMkRBJzonbGVnJywnXFx1MjJEQic6J2dlbCcsJ1xcdTIyREJcXHVGRTAwJzonZ2VzbCcsJ1xcdTIyREUnOidjdWVwcicsJ1xcdTIyREYnOidjdWVzYycsJ1xcdTIyRTYnOidsbnNpbScsJ1xcdTIyRTcnOidnbnNpbScsJ1xcdTIyRTgnOidwcm5zaW0nLCdcXHUyMkU5Jzonc2Nuc2ltJywnXFx1MjJFRSc6J3ZlbGxpcCcsJ1xcdTIyRUYnOidjdGRvdCcsJ1xcdTIyRjAnOid1dGRvdCcsJ1xcdTIyRjEnOidkdGRvdCcsJ1xcdTIyRjInOidkaXNpbicsJ1xcdTIyRjMnOidpc2luc3YnLCdcXHUyMkY0JzonaXNpbnMnLCdcXHUyMkY1JzonaXNpbmRvdCcsJ1xcdTIyRjVcXHUwMzM4Jzonbm90aW5kb3QnLCdcXHUyMkY2Jzonbm90aW52YycsJ1xcdTIyRjcnOidub3RpbnZiJywnXFx1MjJGOSc6J2lzaW5FJywnXFx1MjJGOVxcdTAzMzgnOidub3RpbkUnLCdcXHUyMkZBJzonbmlzZCcsJ1xcdTIyRkInOid4bmlzJywnXFx1MjJGQyc6J25pcycsJ1xcdTIyRkQnOidub3RuaXZjJywnXFx1MjJGRSc6J25vdG5pdmInLCdcXHUyMzA1JzonYmFyd2VkJywnXFx1MjMwNic6J0JhcndlZCcsJ1xcdTIzMEMnOidkcmNyb3AnLCdcXHUyMzBEJzonZGxjcm9wJywnXFx1MjMwRSc6J3VyY3JvcCcsJ1xcdTIzMEYnOid1bGNyb3AnLCdcXHUyMzEwJzonYm5vdCcsJ1xcdTIzMTInOidwcm9mbGluZScsJ1xcdTIzMTMnOidwcm9mc3VyZicsJ1xcdTIzMTUnOid0ZWxyZWMnLCdcXHUyMzE2JzondGFyZ2V0JywnXFx1MjMxQyc6J3VsY29ybicsJ1xcdTIzMUQnOid1cmNvcm4nLCdcXHUyMzFFJzonZGxjb3JuJywnXFx1MjMxRic6J2RyY29ybicsJ1xcdTIzMjInOidmcm93bicsJ1xcdTIzMjMnOidzbWlsZScsJ1xcdTIzMkQnOidjeWxjdHknLCdcXHUyMzJFJzoncHJvZmFsYXInLCdcXHUyMzM2JzondG9wYm90JywnXFx1MjMzRCc6J292YmFyJywnXFx1MjMzRic6J3NvbGJhcicsJ1xcdTIzN0MnOidhbmd6YXJyJywnXFx1MjNCMCc6J2xtb3VzdCcsJ1xcdTIzQjEnOidybW91c3QnLCdcXHUyM0I0JzondGJyaycsJ1xcdTIzQjUnOidiYnJrJywnXFx1MjNCNic6J2Jicmt0YnJrJywnXFx1MjNEQyc6J092ZXJQYXJlbnRoZXNpcycsJ1xcdTIzREQnOidVbmRlclBhcmVudGhlc2lzJywnXFx1MjNERSc6J092ZXJCcmFjZScsJ1xcdTIzREYnOidVbmRlckJyYWNlJywnXFx1MjNFMic6J3RycGV6aXVtJywnXFx1MjNFNyc6J2VsaW50ZXJzJywnXFx1MjQyMyc6J2JsYW5rJywnXFx1MjUwMCc6J2JveGgnLCdcXHUyNTAyJzonYm94dicsJ1xcdTI1MEMnOidib3hkcicsJ1xcdTI1MTAnOidib3hkbCcsJ1xcdTI1MTQnOidib3h1cicsJ1xcdTI1MTgnOidib3h1bCcsJ1xcdTI1MUMnOidib3h2cicsJ1xcdTI1MjQnOidib3h2bCcsJ1xcdTI1MkMnOidib3hoZCcsJ1xcdTI1MzQnOidib3hodScsJ1xcdTI1M0MnOidib3h2aCcsJ1xcdTI1NTAnOidib3hIJywnXFx1MjU1MSc6J2JveFYnLCdcXHUyNTUyJzonYm94ZFInLCdcXHUyNTUzJzonYm94RHInLCdcXHUyNTU0JzonYm94RFInLCdcXHUyNTU1JzonYm94ZEwnLCdcXHUyNTU2JzonYm94RGwnLCdcXHUyNTU3JzonYm94REwnLCdcXHUyNTU4JzonYm94dVInLCdcXHUyNTU5JzonYm94VXInLCdcXHUyNTVBJzonYm94VVInLCdcXHUyNTVCJzonYm94dUwnLCdcXHUyNTVDJzonYm94VWwnLCdcXHUyNTVEJzonYm94VUwnLCdcXHUyNTVFJzonYm94dlInLCdcXHUyNTVGJzonYm94VnInLCdcXHUyNTYwJzonYm94VlInLCdcXHUyNTYxJzonYm94dkwnLCdcXHUyNTYyJzonYm94VmwnLCdcXHUyNTYzJzonYm94VkwnLCdcXHUyNTY0JzonYm94SGQnLCdcXHUyNTY1JzonYm94aEQnLCdcXHUyNTY2JzonYm94SEQnLCdcXHUyNTY3JzonYm94SHUnLCdcXHUyNTY4JzonYm94aFUnLCdcXHUyNTY5JzonYm94SFUnLCdcXHUyNTZBJzonYm94dkgnLCdcXHUyNTZCJzonYm94VmgnLCdcXHUyNTZDJzonYm94VkgnLCdcXHUyNTgwJzondWhibGsnLCdcXHUyNTg0JzonbGhibGsnLCdcXHUyNTg4JzonYmxvY2snLCdcXHUyNTkxJzonYmxrMTQnLCdcXHUyNTkyJzonYmxrMTInLCdcXHUyNTkzJzonYmxrMzQnLCdcXHUyNUExJzonc3F1JywnXFx1MjVBQSc6J3NxdWYnLCdcXHUyNUFCJzonRW1wdHlWZXJ5U21hbGxTcXVhcmUnLCdcXHUyNUFEJzoncmVjdCcsJ1xcdTI1QUUnOidtYXJrZXInLCdcXHUyNUIxJzonZmx0bnMnLCdcXHUyNUIzJzoneHV0cmknLCdcXHUyNUI0JzondXRyaWYnLCdcXHUyNUI1JzondXRyaScsJ1xcdTI1QjgnOidydHJpZicsJ1xcdTI1QjknOidydHJpJywnXFx1MjVCRCc6J3hkdHJpJywnXFx1MjVCRSc6J2R0cmlmJywnXFx1MjVCRic6J2R0cmknLCdcXHUyNUMyJzonbHRyaWYnLCdcXHUyNUMzJzonbHRyaScsJ1xcdTI1Q0EnOidsb3onLCdcXHUyNUNCJzonY2lyJywnXFx1MjVFQyc6J3RyaWRvdCcsJ1xcdTI1RUYnOid4Y2lyYycsJ1xcdTI1RjgnOid1bHRyaScsJ1xcdTI1RjknOid1cnRyaScsJ1xcdTI1RkEnOidsbHRyaScsJ1xcdTI1RkInOidFbXB0eVNtYWxsU3F1YXJlJywnXFx1MjVGQyc6J0ZpbGxlZFNtYWxsU3F1YXJlJywnXFx1MjYwNSc6J3N0YXJmJywnXFx1MjYwNic6J3N0YXInLCdcXHUyNjBFJzoncGhvbmUnLCdcXHUyNjQwJzonZmVtYWxlJywnXFx1MjY0Mic6J21hbGUnLCdcXHUyNjYwJzonc3BhZGVzJywnXFx1MjY2Myc6J2NsdWJzJywnXFx1MjY2NSc6J2hlYXJ0cycsJ1xcdTI2NjYnOidkaWFtcycsJ1xcdTI2NkEnOidzdW5nJywnXFx1MjcxMyc6J2NoZWNrJywnXFx1MjcxNyc6J2Nyb3NzJywnXFx1MjcyMCc6J21hbHQnLCdcXHUyNzM2Jzonc2V4dCcsJ1xcdTI3NTgnOidWZXJ0aWNhbFNlcGFyYXRvcicsJ1xcdTI3QzgnOidic29saHN1YicsJ1xcdTI3QzknOidzdXBoc29sJywnXFx1MjdGNSc6J3hsYXJyJywnXFx1MjdGNic6J3hyYXJyJywnXFx1MjdGNyc6J3hoYXJyJywnXFx1MjdGOCc6J3hsQXJyJywnXFx1MjdGOSc6J3hyQXJyJywnXFx1MjdGQSc6J3hoQXJyJywnXFx1MjdGQyc6J3htYXAnLCdcXHUyN0ZGJzonZHppZ3JhcnInLCdcXHUyOTAyJzonbnZsQXJyJywnXFx1MjkwMyc6J252ckFycicsJ1xcdTI5MDQnOidudkhhcnInLCdcXHUyOTA1JzonTWFwJywnXFx1MjkwQyc6J2xiYXJyJywnXFx1MjkwRCc6J3JiYXJyJywnXFx1MjkwRSc6J2xCYXJyJywnXFx1MjkwRic6J3JCYXJyJywnXFx1MjkxMCc6J1JCYXJyJywnXFx1MjkxMSc6J0REb3RyYWhkJywnXFx1MjkxMic6J1VwQXJyb3dCYXInLCdcXHUyOTEzJzonRG93bkFycm93QmFyJywnXFx1MjkxNic6J1JhcnJ0bCcsJ1xcdTI5MTknOidsYXRhaWwnLCdcXHUyOTFBJzoncmF0YWlsJywnXFx1MjkxQic6J2xBdGFpbCcsJ1xcdTI5MUMnOidyQXRhaWwnLCdcXHUyOTFEJzonbGFycmZzJywnXFx1MjkxRSc6J3JhcnJmcycsJ1xcdTI5MUYnOidsYXJyYmZzJywnXFx1MjkyMCc6J3JhcnJiZnMnLCdcXHUyOTIzJzonbndhcmhrJywnXFx1MjkyNCc6J25lYXJoaycsJ1xcdTI5MjUnOidzZWFyaGsnLCdcXHUyOTI2Jzonc3dhcmhrJywnXFx1MjkyNyc6J253bmVhcicsJ1xcdTI5MjgnOid0b2VhJywnXFx1MjkyOSc6J3Rvc2EnLCdcXHUyOTJBJzonc3dud2FyJywnXFx1MjkzMyc6J3JhcnJjJywnXFx1MjkzM1xcdTAzMzgnOiducmFycmMnLCdcXHUyOTM1JzonY3VkYXJycicsJ1xcdTI5MzYnOidsZGNhJywnXFx1MjkzNyc6J3JkY2EnLCdcXHUyOTM4JzonY3VkYXJybCcsJ1xcdTI5MzknOidsYXJycGwnLCdcXHUyOTNDJzonY3VyYXJybScsJ1xcdTI5M0QnOidjdWxhcnJwJywnXFx1Mjk0NSc6J3JhcnJwbCcsJ1xcdTI5NDgnOidoYXJyY2lyJywnXFx1Mjk0OSc6J1VhcnJvY2lyJywnXFx1Mjk0QSc6J2x1cmRzaGFyJywnXFx1Mjk0Qic6J2xkcnVzaGFyJywnXFx1Mjk0RSc6J0xlZnRSaWdodFZlY3RvcicsJ1xcdTI5NEYnOidSaWdodFVwRG93blZlY3RvcicsJ1xcdTI5NTAnOidEb3duTGVmdFJpZ2h0VmVjdG9yJywnXFx1Mjk1MSc6J0xlZnRVcERvd25WZWN0b3InLCdcXHUyOTUyJzonTGVmdFZlY3RvckJhcicsJ1xcdTI5NTMnOidSaWdodFZlY3RvckJhcicsJ1xcdTI5NTQnOidSaWdodFVwVmVjdG9yQmFyJywnXFx1Mjk1NSc6J1JpZ2h0RG93blZlY3RvckJhcicsJ1xcdTI5NTYnOidEb3duTGVmdFZlY3RvckJhcicsJ1xcdTI5NTcnOidEb3duUmlnaHRWZWN0b3JCYXInLCdcXHUyOTU4JzonTGVmdFVwVmVjdG9yQmFyJywnXFx1Mjk1OSc6J0xlZnREb3duVmVjdG9yQmFyJywnXFx1Mjk1QSc6J0xlZnRUZWVWZWN0b3InLCdcXHUyOTVCJzonUmlnaHRUZWVWZWN0b3InLCdcXHUyOTVDJzonUmlnaHRVcFRlZVZlY3RvcicsJ1xcdTI5NUQnOidSaWdodERvd25UZWVWZWN0b3InLCdcXHUyOTVFJzonRG93bkxlZnRUZWVWZWN0b3InLCdcXHUyOTVGJzonRG93blJpZ2h0VGVlVmVjdG9yJywnXFx1Mjk2MCc6J0xlZnRVcFRlZVZlY3RvcicsJ1xcdTI5NjEnOidMZWZ0RG93blRlZVZlY3RvcicsJ1xcdTI5NjInOidsSGFyJywnXFx1Mjk2Myc6J3VIYXInLCdcXHUyOTY0JzonckhhcicsJ1xcdTI5NjUnOidkSGFyJywnXFx1Mjk2Nic6J2x1cnVoYXInLCdcXHUyOTY3JzonbGRyZGhhcicsJ1xcdTI5NjgnOidydWx1aGFyJywnXFx1Mjk2OSc6J3JkbGRoYXInLCdcXHUyOTZBJzonbGhhcnVsJywnXFx1Mjk2Qic6J2xsaGFyZCcsJ1xcdTI5NkMnOidyaGFydWwnLCdcXHUyOTZEJzonbHJoYXJkJywnXFx1Mjk2RSc6J3VkaGFyJywnXFx1Mjk2Ric6J2R1aGFyJywnXFx1Mjk3MCc6J1JvdW5kSW1wbGllcycsJ1xcdTI5NzEnOidlcmFycicsJ1xcdTI5NzInOidzaW1yYXJyJywnXFx1Mjk3Myc6J2xhcnJzaW0nLCdcXHUyOTc0JzoncmFycnNpbScsJ1xcdTI5NzUnOidyYXJyYXAnLCdcXHUyOTc2JzonbHRsYXJyJywnXFx1Mjk3OCc6J2d0cmFycicsJ1xcdTI5NzknOidzdWJyYXJyJywnXFx1Mjk3Qic6J3N1cGxhcnInLCdcXHUyOTdDJzonbGZpc2h0JywnXFx1Mjk3RCc6J3JmaXNodCcsJ1xcdTI5N0UnOid1ZmlzaHQnLCdcXHUyOTdGJzonZGZpc2h0JywnXFx1Mjk5QSc6J3Z6aWd6YWcnLCdcXHUyOTlDJzondmFuZ3J0JywnXFx1Mjk5RCc6J2FuZ3J0dmJkJywnXFx1MjlBNCc6J2FuZ2UnLCdcXHUyOUE1JzoncmFuZ2UnLCdcXHUyOUE2JzonZHdhbmdsZScsJ1xcdTI5QTcnOid1d2FuZ2xlJywnXFx1MjlBOCc6J2FuZ21zZGFhJywnXFx1MjlBOSc6J2FuZ21zZGFiJywnXFx1MjlBQSc6J2FuZ21zZGFjJywnXFx1MjlBQic6J2FuZ21zZGFkJywnXFx1MjlBQyc6J2FuZ21zZGFlJywnXFx1MjlBRCc6J2FuZ21zZGFmJywnXFx1MjlBRSc6J2FuZ21zZGFnJywnXFx1MjlBRic6J2FuZ21zZGFoJywnXFx1MjlCMCc6J2JlbXB0eXYnLCdcXHUyOUIxJzonZGVtcHR5dicsJ1xcdTI5QjInOidjZW1wdHl2JywnXFx1MjlCMyc6J3JhZW1wdHl2JywnXFx1MjlCNCc6J2xhZW1wdHl2JywnXFx1MjlCNSc6J29oYmFyJywnXFx1MjlCNic6J29taWQnLCdcXHUyOUI3Jzonb3BhcicsJ1xcdTI5QjknOidvcGVycCcsJ1xcdTI5QkInOidvbGNyb3NzJywnXFx1MjlCQyc6J29kc29sZCcsJ1xcdTI5QkUnOidvbGNpcicsJ1xcdTI5QkYnOidvZmNpcicsJ1xcdTI5QzAnOidvbHQnLCdcXHUyOUMxJzonb2d0JywnXFx1MjlDMic6J2NpcnNjaXInLCdcXHUyOUMzJzonY2lyRScsJ1xcdTI5QzQnOidzb2xiJywnXFx1MjlDNSc6J2Jzb2xiJywnXFx1MjlDOSc6J2JveGJveCcsJ1xcdTI5Q0QnOid0cmlzYicsJ1xcdTI5Q0UnOidydHJpbHRyaScsJ1xcdTI5Q0YnOidMZWZ0VHJpYW5nbGVCYXInLCdcXHUyOUNGXFx1MDMzOCc6J05vdExlZnRUcmlhbmdsZUJhcicsJ1xcdTI5RDAnOidSaWdodFRyaWFuZ2xlQmFyJywnXFx1MjlEMFxcdTAzMzgnOidOb3RSaWdodFRyaWFuZ2xlQmFyJywnXFx1MjlEQyc6J2lpbmZpbicsJ1xcdTI5REQnOidpbmZpbnRpZScsJ1xcdTI5REUnOidudmluZmluJywnXFx1MjlFMyc6J2VwYXJzbCcsJ1xcdTI5RTQnOidzbWVwYXJzbCcsJ1xcdTI5RTUnOidlcXZwYXJzbCcsJ1xcdTI5RUInOidsb3pmJywnXFx1MjlGNCc6J1J1bGVEZWxheWVkJywnXFx1MjlGNic6J2Rzb2wnLCdcXHUyQTAwJzoneG9kb3QnLCdcXHUyQTAxJzoneG9wbHVzJywnXFx1MkEwMic6J3hvdGltZScsJ1xcdTJBMDQnOid4dXBsdXMnLCdcXHUyQTA2JzoneHNxY3VwJywnXFx1MkEwRCc6J2ZwYXJ0aW50JywnXFx1MkExMCc6J2NpcmZuaW50JywnXFx1MkExMSc6J2F3aW50JywnXFx1MkExMic6J3JwcG9saW50JywnXFx1MkExMyc6J3NjcG9saW50JywnXFx1MkExNCc6J25wb2xpbnQnLCdcXHUyQTE1JzoncG9pbnRpbnQnLCdcXHUyQTE2JzoncXVhdGludCcsJ1xcdTJBMTcnOidpbnRsYXJoaycsJ1xcdTJBMjInOidwbHVzY2lyJywnXFx1MkEyMyc6J3BsdXNhY2lyJywnXFx1MkEyNCc6J3NpbXBsdXMnLCdcXHUyQTI1JzoncGx1c2R1JywnXFx1MkEyNic6J3BsdXNzaW0nLCdcXHUyQTI3JzoncGx1c3R3bycsJ1xcdTJBMjknOidtY29tbWEnLCdcXHUyQTJBJzonbWludXNkdScsJ1xcdTJBMkQnOidsb3BsdXMnLCdcXHUyQTJFJzoncm9wbHVzJywnXFx1MkEyRic6J0Nyb3NzJywnXFx1MkEzMCc6J3RpbWVzZCcsJ1xcdTJBMzEnOid0aW1lc2JhcicsJ1xcdTJBMzMnOidzbWFzaHAnLCdcXHUyQTM0JzonbG90aW1lcycsJ1xcdTJBMzUnOidyb3RpbWVzJywnXFx1MkEzNic6J290aW1lc2FzJywnXFx1MkEzNyc6J090aW1lcycsJ1xcdTJBMzgnOidvZGl2JywnXFx1MkEzOSc6J3RyaXBsdXMnLCdcXHUyQTNBJzondHJpbWludXMnLCdcXHUyQTNCJzondHJpdGltZScsJ1xcdTJBM0MnOidpcHJvZCcsJ1xcdTJBM0YnOidhbWFsZycsJ1xcdTJBNDAnOidjYXBkb3QnLCdcXHUyQTQyJzonbmN1cCcsJ1xcdTJBNDMnOiduY2FwJywnXFx1MkE0NCc6J2NhcGFuZCcsJ1xcdTJBNDUnOidjdXBvcicsJ1xcdTJBNDYnOidjdXBjYXAnLCdcXHUyQTQ3JzonY2FwY3VwJywnXFx1MkE0OCc6J2N1cGJyY2FwJywnXFx1MkE0OSc6J2NhcGJyY3VwJywnXFx1MkE0QSc6J2N1cGN1cCcsJ1xcdTJBNEInOidjYXBjYXAnLCdcXHUyQTRDJzonY2N1cHMnLCdcXHUyQTREJzonY2NhcHMnLCdcXHUyQTUwJzonY2N1cHNzbScsJ1xcdTJBNTMnOidBbmQnLCdcXHUyQTU0JzonT3InLCdcXHUyQTU1JzonYW5kYW5kJywnXFx1MkE1Nic6J29yb3InLCdcXHUyQTU3Jzonb3JzbG9wZScsJ1xcdTJBNTgnOidhbmRzbG9wZScsJ1xcdTJBNUEnOidhbmR2JywnXFx1MkE1Qic6J29ydicsJ1xcdTJBNUMnOidhbmRkJywnXFx1MkE1RCc6J29yZCcsJ1xcdTJBNUYnOid3ZWRiYXInLCdcXHUyQTY2Jzonc2RvdGUnLCdcXHUyQTZBJzonc2ltZG90JywnXFx1MkE2RCc6J2Nvbmdkb3QnLCdcXHUyQTZEXFx1MDMzOCc6J25jb25nZG90JywnXFx1MkE2RSc6J2Vhc3RlcicsJ1xcdTJBNkYnOidhcGFjaXInLCdcXHUyQTcwJzonYXBFJywnXFx1MkE3MFxcdTAzMzgnOiduYXBFJywnXFx1MkE3MSc6J2VwbHVzJywnXFx1MkE3Mic6J3BsdXNlJywnXFx1MkE3Myc6J0VzaW0nLCdcXHUyQTc3JzonZUREb3QnLCdcXHUyQTc4JzonZXF1aXZERCcsJ1xcdTJBNzknOidsdGNpcicsJ1xcdTJBN0EnOidndGNpcicsJ1xcdTJBN0InOidsdHF1ZXN0JywnXFx1MkE3Qyc6J2d0cXVlc3QnLCdcXHUyQTdEJzonbGVzJywnXFx1MkE3RFxcdTAzMzgnOidubGVzJywnXFx1MkE3RSc6J2dlcycsJ1xcdTJBN0VcXHUwMzM4JzonbmdlcycsJ1xcdTJBN0YnOidsZXNkb3QnLCdcXHUyQTgwJzonZ2VzZG90JywnXFx1MkE4MSc6J2xlc2RvdG8nLCdcXHUyQTgyJzonZ2VzZG90bycsJ1xcdTJBODMnOidsZXNkb3RvcicsJ1xcdTJBODQnOidnZXNkb3RvbCcsJ1xcdTJBODUnOidsYXAnLCdcXHUyQTg2JzonZ2FwJywnXFx1MkE4Nyc6J2xuZScsJ1xcdTJBODgnOidnbmUnLCdcXHUyQTg5JzonbG5hcCcsJ1xcdTJBOEEnOidnbmFwJywnXFx1MkE4Qic6J2xFZycsJ1xcdTJBOEMnOidnRWwnLCdcXHUyQThEJzonbHNpbWUnLCdcXHUyQThFJzonZ3NpbWUnLCdcXHUyQThGJzonbHNpbWcnLCdcXHUyQTkwJzonZ3NpbWwnLCdcXHUyQTkxJzonbGdFJywnXFx1MkE5Mic6J2dsRScsJ1xcdTJBOTMnOidsZXNnZXMnLCdcXHUyQTk0JzonZ2VzbGVzJywnXFx1MkE5NSc6J2VscycsJ1xcdTJBOTYnOidlZ3MnLCdcXHUyQTk3JzonZWxzZG90JywnXFx1MkE5OCc6J2Vnc2RvdCcsJ1xcdTJBOTknOidlbCcsJ1xcdTJBOUEnOidlZycsJ1xcdTJBOUQnOidzaW1sJywnXFx1MkE5RSc6J3NpbWcnLCdcXHUyQTlGJzonc2ltbEUnLCdcXHUyQUEwJzonc2ltZ0UnLCdcXHUyQUExJzonTGVzc0xlc3MnLCdcXHUyQUExXFx1MDMzOCc6J05vdE5lc3RlZExlc3NMZXNzJywnXFx1MkFBMic6J0dyZWF0ZXJHcmVhdGVyJywnXFx1MkFBMlxcdTAzMzgnOidOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcicsJ1xcdTJBQTQnOidnbGonLCdcXHUyQUE1JzonZ2xhJywnXFx1MkFBNic6J2x0Y2MnLCdcXHUyQUE3JzonZ3RjYycsJ1xcdTJBQTgnOidsZXNjYycsJ1xcdTJBQTknOidnZXNjYycsJ1xcdTJBQUEnOidzbXQnLCdcXHUyQUFCJzonbGF0JywnXFx1MkFBQyc6J3NtdGUnLCdcXHUyQUFDXFx1RkUwMCc6J3NtdGVzJywnXFx1MkFBRCc6J2xhdGUnLCdcXHUyQUFEXFx1RkUwMCc6J2xhdGVzJywnXFx1MkFBRSc6J2J1bXBFJywnXFx1MkFBRic6J3ByZScsJ1xcdTJBQUZcXHUwMzM4JzonbnByZScsJ1xcdTJBQjAnOidzY2UnLCdcXHUyQUIwXFx1MDMzOCc6J25zY2UnLCdcXHUyQUIzJzoncHJFJywnXFx1MkFCNCc6J3NjRScsJ1xcdTJBQjUnOidwcm5FJywnXFx1MkFCNic6J3NjbkUnLCdcXHUyQUI3JzoncHJhcCcsJ1xcdTJBQjgnOidzY2FwJywnXFx1MkFCOSc6J3BybmFwJywnXFx1MkFCQSc6J3NjbmFwJywnXFx1MkFCQic6J1ByJywnXFx1MkFCQyc6J1NjJywnXFx1MkFCRCc6J3N1YmRvdCcsJ1xcdTJBQkUnOidzdXBkb3QnLCdcXHUyQUJGJzonc3VicGx1cycsJ1xcdTJBQzAnOidzdXBwbHVzJywnXFx1MkFDMSc6J3N1Ym11bHQnLCdcXHUyQUMyJzonc3VwbXVsdCcsJ1xcdTJBQzMnOidzdWJlZG90JywnXFx1MkFDNCc6J3N1cGVkb3QnLCdcXHUyQUM1Jzonc3ViRScsJ1xcdTJBQzVcXHUwMzM4JzonbnN1YkUnLCdcXHUyQUM2Jzonc3VwRScsJ1xcdTJBQzZcXHUwMzM4JzonbnN1cEUnLCdcXHUyQUM3Jzonc3Vic2ltJywnXFx1MkFDOCc6J3N1cHNpbScsJ1xcdTJBQ0JcXHVGRTAwJzondnN1Ym5FJywnXFx1MkFDQic6J3N1Ym5FJywnXFx1MkFDQ1xcdUZFMDAnOid2c3VwbkUnLCdcXHUyQUNDJzonc3VwbkUnLCdcXHUyQUNGJzonY3N1YicsJ1xcdTJBRDAnOidjc3VwJywnXFx1MkFEMSc6J2NzdWJlJywnXFx1MkFEMic6J2NzdXBlJywnXFx1MkFEMyc6J3N1YnN1cCcsJ1xcdTJBRDQnOidzdXBzdWInLCdcXHUyQUQ1Jzonc3Vic3ViJywnXFx1MkFENic6J3N1cHN1cCcsJ1xcdTJBRDcnOidzdXBoc3ViJywnXFx1MkFEOCc6J3N1cGRzdWInLCdcXHUyQUQ5JzonZm9ya3YnLCdcXHUyQURBJzondG9wZm9yaycsJ1xcdTJBREInOidtbGNwJywnXFx1MkFFNCc6J0Rhc2h2JywnXFx1MkFFNic6J1ZkYXNobCcsJ1xcdTJBRTcnOidCYXJ2JywnXFx1MkFFOCc6J3ZCYXInLCdcXHUyQUU5JzondkJhcnYnLCdcXHUyQUVCJzonVmJhcicsJ1xcdTJBRUMnOidOb3QnLCdcXHUyQUVEJzonYk5vdCcsJ1xcdTJBRUUnOidybm1pZCcsJ1xcdTJBRUYnOidjaXJtaWQnLCdcXHUyQUYwJzonbWlkY2lyJywnXFx1MkFGMSc6J3RvcGNpcicsJ1xcdTJBRjInOiduaHBhcicsJ1xcdTJBRjMnOidwYXJzaW0nLCdcXHUyQUZEJzoncGFyc2wnLCdcXHUyQUZEXFx1MjBFNSc6J25wYXJzbCcsJ1xcdTI2NkQnOidmbGF0JywnXFx1MjY2RSc6J25hdHVyJywnXFx1MjY2Ric6J3NoYXJwJywnXFx4QTQnOidjdXJyZW4nLCdcXHhBMic6J2NlbnQnLCckJzonZG9sbGFyJywnXFx4QTMnOidwb3VuZCcsJ1xceEE1JzoneWVuJywnXFx1MjBBQyc6J2V1cm8nLCdcXHhCOSc6J3N1cDEnLCdcXHhCRCc6J2hhbGYnLCdcXHUyMTUzJzonZnJhYzEzJywnXFx4QkMnOidmcmFjMTQnLCdcXHUyMTU1JzonZnJhYzE1JywnXFx1MjE1OSc6J2ZyYWMxNicsJ1xcdTIxNUInOidmcmFjMTgnLCdcXHhCMic6J3N1cDInLCdcXHUyMTU0JzonZnJhYzIzJywnXFx1MjE1Nic6J2ZyYWMyNScsJ1xceEIzJzonc3VwMycsJ1xceEJFJzonZnJhYzM0JywnXFx1MjE1Nyc6J2ZyYWMzNScsJ1xcdTIxNUMnOidmcmFjMzgnLCdcXHUyMTU4JzonZnJhYzQ1JywnXFx1MjE1QSc6J2ZyYWM1NicsJ1xcdTIxNUQnOidmcmFjNTgnLCdcXHUyMTVFJzonZnJhYzc4JywnXFx1RDgzNVxcdURDQjYnOidhc2NyJywnXFx1RDgzNVxcdURENTInOidhb3BmJywnXFx1RDgzNVxcdUREMUUnOidhZnInLCdcXHVEODM1XFx1REQzOCc6J0FvcGYnLCdcXHVEODM1XFx1REQwNCc6J0FmcicsJ1xcdUQ4MzVcXHVEQzlDJzonQXNjcicsJ1xceEFBJzonb3JkZicsJ1xceEUxJzonYWFjdXRlJywnXFx4QzEnOidBYWN1dGUnLCdcXHhFMCc6J2FncmF2ZScsJ1xceEMwJzonQWdyYXZlJywnXFx1MDEwMyc6J2FicmV2ZScsJ1xcdTAxMDInOidBYnJldmUnLCdcXHhFMic6J2FjaXJjJywnXFx4QzInOidBY2lyYycsJ1xceEU1JzonYXJpbmcnLCdcXHhDNSc6J2FuZ3N0JywnXFx4RTQnOidhdW1sJywnXFx4QzQnOidBdW1sJywnXFx4RTMnOidhdGlsZGUnLCdcXHhDMyc6J0F0aWxkZScsJ1xcdTAxMDUnOidhb2dvbicsJ1xcdTAxMDQnOidBb2dvbicsJ1xcdTAxMDEnOidhbWFjcicsJ1xcdTAxMDAnOidBbWFjcicsJ1xceEU2JzonYWVsaWcnLCdcXHhDNic6J0FFbGlnJywnXFx1RDgzNVxcdURDQjcnOidic2NyJywnXFx1RDgzNVxcdURENTMnOidib3BmJywnXFx1RDgzNVxcdUREMUYnOidiZnInLCdcXHVEODM1XFx1REQzOSc6J0JvcGYnLCdcXHUyMTJDJzonQnNjcicsJ1xcdUQ4MzVcXHVERDA1JzonQmZyJywnXFx1RDgzNVxcdUREMjAnOidjZnInLCdcXHVEODM1XFx1RENCOCc6J2NzY3InLCdcXHVEODM1XFx1REQ1NCc6J2NvcGYnLCdcXHUyMTJEJzonQ2ZyJywnXFx1RDgzNVxcdURDOUUnOidDc2NyJywnXFx1MjEwMic6J0NvcGYnLCdcXHUwMTA3JzonY2FjdXRlJywnXFx1MDEwNic6J0NhY3V0ZScsJ1xcdTAxMDknOidjY2lyYycsJ1xcdTAxMDgnOidDY2lyYycsJ1xcdTAxMEQnOidjY2Fyb24nLCdcXHUwMTBDJzonQ2Nhcm9uJywnXFx1MDEwQic6J2Nkb3QnLCdcXHUwMTBBJzonQ2RvdCcsJ1xceEU3JzonY2NlZGlsJywnXFx4QzcnOidDY2VkaWwnLCdcXHUyMTA1JzonaW5jYXJlJywnXFx1RDgzNVxcdUREMjEnOidkZnInLCdcXHUyMTQ2JzonZGQnLCdcXHVEODM1XFx1REQ1NSc6J2RvcGYnLCdcXHVEODM1XFx1RENCOSc6J2RzY3InLCdcXHVEODM1XFx1REM5Ric6J0RzY3InLCdcXHVEODM1XFx1REQwNyc6J0RmcicsJ1xcdTIxNDUnOidERCcsJ1xcdUQ4MzVcXHVERDNCJzonRG9wZicsJ1xcdTAxMEYnOidkY2Fyb24nLCdcXHUwMTBFJzonRGNhcm9uJywnXFx1MDExMSc6J2RzdHJvaycsJ1xcdTAxMTAnOidEc3Ryb2snLCdcXHhGMCc6J2V0aCcsJ1xceEQwJzonRVRIJywnXFx1MjE0Nyc6J2VlJywnXFx1MjEyRic6J2VzY3InLCdcXHVEODM1XFx1REQyMic6J2VmcicsJ1xcdUQ4MzVcXHVERDU2JzonZW9wZicsJ1xcdTIxMzAnOidFc2NyJywnXFx1RDgzNVxcdUREMDgnOidFZnInLCdcXHVEODM1XFx1REQzQyc6J0VvcGYnLCdcXHhFOSc6J2VhY3V0ZScsJ1xceEM5JzonRWFjdXRlJywnXFx4RTgnOidlZ3JhdmUnLCdcXHhDOCc6J0VncmF2ZScsJ1xceEVBJzonZWNpcmMnLCdcXHhDQSc6J0VjaXJjJywnXFx1MDExQic6J2VjYXJvbicsJ1xcdTAxMUEnOidFY2Fyb24nLCdcXHhFQic6J2V1bWwnLCdcXHhDQic6J0V1bWwnLCdcXHUwMTE3JzonZWRvdCcsJ1xcdTAxMTYnOidFZG90JywnXFx1MDExOSc6J2VvZ29uJywnXFx1MDExOCc6J0VvZ29uJywnXFx1MDExMyc6J2VtYWNyJywnXFx1MDExMic6J0VtYWNyJywnXFx1RDgzNVxcdUREMjMnOidmZnInLCdcXHVEODM1XFx1REQ1Nyc6J2ZvcGYnLCdcXHVEODM1XFx1RENCQic6J2ZzY3InLCdcXHVEODM1XFx1REQwOSc6J0ZmcicsJ1xcdUQ4MzVcXHVERDNEJzonRm9wZicsJ1xcdTIxMzEnOidGc2NyJywnXFx1RkIwMCc6J2ZmbGlnJywnXFx1RkIwMyc6J2ZmaWxpZycsJ1xcdUZCMDQnOidmZmxsaWcnLCdcXHVGQjAxJzonZmlsaWcnLCdmaic6J2ZqbGlnJywnXFx1RkIwMic6J2ZsbGlnJywnXFx1MDE5Mic6J2Zub2YnLCdcXHUyMTBBJzonZ3NjcicsJ1xcdUQ4MzVcXHVERDU4JzonZ29wZicsJ1xcdUQ4MzVcXHVERDI0JzonZ2ZyJywnXFx1RDgzNVxcdURDQTInOidHc2NyJywnXFx1RDgzNVxcdUREM0UnOidHb3BmJywnXFx1RDgzNVxcdUREMEEnOidHZnInLCdcXHUwMUY1JzonZ2FjdXRlJywnXFx1MDExRic6J2dicmV2ZScsJ1xcdTAxMUUnOidHYnJldmUnLCdcXHUwMTFEJzonZ2NpcmMnLCdcXHUwMTFDJzonR2NpcmMnLCdcXHUwMTIxJzonZ2RvdCcsJ1xcdTAxMjAnOidHZG90JywnXFx1MDEyMic6J0djZWRpbCcsJ1xcdUQ4MzVcXHVERDI1JzonaGZyJywnXFx1MjEwRSc6J3BsYW5ja2gnLCdcXHVEODM1XFx1RENCRCc6J2hzY3InLCdcXHVEODM1XFx1REQ1OSc6J2hvcGYnLCdcXHUyMTBCJzonSHNjcicsJ1xcdTIxMEMnOidIZnInLCdcXHUyMTBEJzonSG9wZicsJ1xcdTAxMjUnOidoY2lyYycsJ1xcdTAxMjQnOidIY2lyYycsJ1xcdTIxMEYnOidoYmFyJywnXFx1MDEyNyc6J2hzdHJvaycsJ1xcdTAxMjYnOidIc3Ryb2snLCdcXHVEODM1XFx1REQ1QSc6J2lvcGYnLCdcXHVEODM1XFx1REQyNic6J2lmcicsJ1xcdUQ4MzVcXHVEQ0JFJzonaXNjcicsJ1xcdTIxNDgnOidpaScsJ1xcdUQ4MzVcXHVERDQwJzonSW9wZicsJ1xcdTIxMTAnOidJc2NyJywnXFx1MjExMSc6J0ltJywnXFx4RUQnOidpYWN1dGUnLCdcXHhDRCc6J0lhY3V0ZScsJ1xceEVDJzonaWdyYXZlJywnXFx4Q0MnOidJZ3JhdmUnLCdcXHhFRSc6J2ljaXJjJywnXFx4Q0UnOidJY2lyYycsJ1xceEVGJzonaXVtbCcsJ1xceENGJzonSXVtbCcsJ1xcdTAxMjknOidpdGlsZGUnLCdcXHUwMTI4JzonSXRpbGRlJywnXFx1MDEzMCc6J0lkb3QnLCdcXHUwMTJGJzonaW9nb24nLCdcXHUwMTJFJzonSW9nb24nLCdcXHUwMTJCJzonaW1hY3InLCdcXHUwMTJBJzonSW1hY3InLCdcXHUwMTMzJzonaWpsaWcnLCdcXHUwMTMyJzonSUpsaWcnLCdcXHUwMTMxJzonaW1hdGgnLCdcXHVEODM1XFx1RENCRic6J2pzY3InLCdcXHVEODM1XFx1REQ1Qic6J2pvcGYnLCdcXHVEODM1XFx1REQyNyc6J2pmcicsJ1xcdUQ4MzVcXHVEQ0E1JzonSnNjcicsJ1xcdUQ4MzVcXHVERDBEJzonSmZyJywnXFx1RDgzNVxcdURENDEnOidKb3BmJywnXFx1MDEzNSc6J2pjaXJjJywnXFx1MDEzNCc6J0pjaXJjJywnXFx1MDIzNyc6J2ptYXRoJywnXFx1RDgzNVxcdURENUMnOidrb3BmJywnXFx1RDgzNVxcdURDQzAnOidrc2NyJywnXFx1RDgzNVxcdUREMjgnOidrZnInLCdcXHVEODM1XFx1RENBNic6J0tzY3InLCdcXHVEODM1XFx1REQ0Mic6J0tvcGYnLCdcXHVEODM1XFx1REQwRSc6J0tmcicsJ1xcdTAxMzcnOidrY2VkaWwnLCdcXHUwMTM2JzonS2NlZGlsJywnXFx1RDgzNVxcdUREMjknOidsZnInLCdcXHVEODM1XFx1RENDMSc6J2xzY3InLCdcXHUyMTEzJzonZWxsJywnXFx1RDgzNVxcdURENUQnOidsb3BmJywnXFx1MjExMic6J0xzY3InLCdcXHVEODM1XFx1REQwRic6J0xmcicsJ1xcdUQ4MzVcXHVERDQzJzonTG9wZicsJ1xcdTAxM0EnOidsYWN1dGUnLCdcXHUwMTM5JzonTGFjdXRlJywnXFx1MDEzRSc6J2xjYXJvbicsJ1xcdTAxM0QnOidMY2Fyb24nLCdcXHUwMTNDJzonbGNlZGlsJywnXFx1MDEzQic6J0xjZWRpbCcsJ1xcdTAxNDInOidsc3Ryb2snLCdcXHUwMTQxJzonTHN0cm9rJywnXFx1MDE0MCc6J2xtaWRvdCcsJ1xcdTAxM0YnOidMbWlkb3QnLCdcXHVEODM1XFx1REQyQSc6J21mcicsJ1xcdUQ4MzVcXHVERDVFJzonbW9wZicsJ1xcdUQ4MzVcXHVEQ0MyJzonbXNjcicsJ1xcdUQ4MzVcXHVERDEwJzonTWZyJywnXFx1RDgzNVxcdURENDQnOidNb3BmJywnXFx1MjEzMyc6J01zY3InLCdcXHVEODM1XFx1REQyQic6J25mcicsJ1xcdUQ4MzVcXHVERDVGJzonbm9wZicsJ1xcdUQ4MzVcXHVEQ0MzJzonbnNjcicsJ1xcdTIxMTUnOidOb3BmJywnXFx1RDgzNVxcdURDQTknOidOc2NyJywnXFx1RDgzNVxcdUREMTEnOidOZnInLCdcXHUwMTQ0JzonbmFjdXRlJywnXFx1MDE0Myc6J05hY3V0ZScsJ1xcdTAxNDgnOiduY2Fyb24nLCdcXHUwMTQ3JzonTmNhcm9uJywnXFx4RjEnOidudGlsZGUnLCdcXHhEMSc6J050aWxkZScsJ1xcdTAxNDYnOiduY2VkaWwnLCdcXHUwMTQ1JzonTmNlZGlsJywnXFx1MjExNic6J251bWVybycsJ1xcdTAxNEInOidlbmcnLCdcXHUwMTRBJzonRU5HJywnXFx1RDgzNVxcdURENjAnOidvb3BmJywnXFx1RDgzNVxcdUREMkMnOidvZnInLCdcXHUyMTM0Jzonb3NjcicsJ1xcdUQ4MzVcXHVEQ0FBJzonT3NjcicsJ1xcdUQ4MzVcXHVERDEyJzonT2ZyJywnXFx1RDgzNVxcdURENDYnOidPb3BmJywnXFx4QkEnOidvcmRtJywnXFx4RjMnOidvYWN1dGUnLCdcXHhEMyc6J09hY3V0ZScsJ1xceEYyJzonb2dyYXZlJywnXFx4RDInOidPZ3JhdmUnLCdcXHhGNCc6J29jaXJjJywnXFx4RDQnOidPY2lyYycsJ1xceEY2Jzonb3VtbCcsJ1xceEQ2JzonT3VtbCcsJ1xcdTAxNTEnOidvZGJsYWMnLCdcXHUwMTUwJzonT2RibGFjJywnXFx4RjUnOidvdGlsZGUnLCdcXHhENSc6J090aWxkZScsJ1xceEY4Jzonb3NsYXNoJywnXFx4RDgnOidPc2xhc2gnLCdcXHUwMTREJzonb21hY3InLCdcXHUwMTRDJzonT21hY3InLCdcXHUwMTUzJzonb2VsaWcnLCdcXHUwMTUyJzonT0VsaWcnLCdcXHVEODM1XFx1REQyRCc6J3BmcicsJ1xcdUQ4MzVcXHVEQ0M1JzoncHNjcicsJ1xcdUQ4MzVcXHVERDYxJzoncG9wZicsJ1xcdTIxMTknOidQb3BmJywnXFx1RDgzNVxcdUREMTMnOidQZnInLCdcXHVEODM1XFx1RENBQic6J1BzY3InLCdcXHVEODM1XFx1REQ2Mic6J3FvcGYnLCdcXHVEODM1XFx1REQyRSc6J3FmcicsJ1xcdUQ4MzVcXHVEQ0M2JzoncXNjcicsJ1xcdUQ4MzVcXHVEQ0FDJzonUXNjcicsJ1xcdUQ4MzVcXHVERDE0JzonUWZyJywnXFx1MjExQSc6J1FvcGYnLCdcXHUwMTM4Jzona2dyZWVuJywnXFx1RDgzNVxcdUREMkYnOidyZnInLCdcXHVEODM1XFx1REQ2Myc6J3JvcGYnLCdcXHVEODM1XFx1RENDNyc6J3JzY3InLCdcXHUyMTFCJzonUnNjcicsJ1xcdTIxMUMnOidSZScsJ1xcdTIxMUQnOidSb3BmJywnXFx1MDE1NSc6J3JhY3V0ZScsJ1xcdTAxNTQnOidSYWN1dGUnLCdcXHUwMTU5JzoncmNhcm9uJywnXFx1MDE1OCc6J1JjYXJvbicsJ1xcdTAxNTcnOidyY2VkaWwnLCdcXHUwMTU2JzonUmNlZGlsJywnXFx1RDgzNVxcdURENjQnOidzb3BmJywnXFx1RDgzNVxcdURDQzgnOidzc2NyJywnXFx1RDgzNVxcdUREMzAnOidzZnInLCdcXHVEODM1XFx1REQ0QSc6J1NvcGYnLCdcXHVEODM1XFx1REQxNic6J1NmcicsJ1xcdUQ4MzVcXHVEQ0FFJzonU3NjcicsJ1xcdTI0QzgnOidvUycsJ1xcdTAxNUInOidzYWN1dGUnLCdcXHUwMTVBJzonU2FjdXRlJywnXFx1MDE1RCc6J3NjaXJjJywnXFx1MDE1Qyc6J1NjaXJjJywnXFx1MDE2MSc6J3NjYXJvbicsJ1xcdTAxNjAnOidTY2Fyb24nLCdcXHUwMTVGJzonc2NlZGlsJywnXFx1MDE1RSc6J1NjZWRpbCcsJ1xceERGJzonc3psaWcnLCdcXHVEODM1XFx1REQzMSc6J3RmcicsJ1xcdUQ4MzVcXHVEQ0M5JzondHNjcicsJ1xcdUQ4MzVcXHVERDY1JzondG9wZicsJ1xcdUQ4MzVcXHVEQ0FGJzonVHNjcicsJ1xcdUQ4MzVcXHVERDE3JzonVGZyJywnXFx1RDgzNVxcdURENEInOidUb3BmJywnXFx1MDE2NSc6J3RjYXJvbicsJ1xcdTAxNjQnOidUY2Fyb24nLCdcXHUwMTYzJzondGNlZGlsJywnXFx1MDE2Mic6J1RjZWRpbCcsJ1xcdTIxMjInOid0cmFkZScsJ1xcdTAxNjcnOid0c3Ryb2snLCdcXHUwMTY2JzonVHN0cm9rJywnXFx1RDgzNVxcdURDQ0EnOid1c2NyJywnXFx1RDgzNVxcdURENjYnOid1b3BmJywnXFx1RDgzNVxcdUREMzInOid1ZnInLCdcXHVEODM1XFx1REQ0Qyc6J1VvcGYnLCdcXHVEODM1XFx1REQxOCc6J1VmcicsJ1xcdUQ4MzVcXHVEQ0IwJzonVXNjcicsJ1xceEZBJzondWFjdXRlJywnXFx4REEnOidVYWN1dGUnLCdcXHhGOSc6J3VncmF2ZScsJ1xceEQ5JzonVWdyYXZlJywnXFx1MDE2RCc6J3VicmV2ZScsJ1xcdTAxNkMnOidVYnJldmUnLCdcXHhGQic6J3VjaXJjJywnXFx4REInOidVY2lyYycsJ1xcdTAxNkYnOid1cmluZycsJ1xcdTAxNkUnOidVcmluZycsJ1xceEZDJzondXVtbCcsJ1xceERDJzonVXVtbCcsJ1xcdTAxNzEnOid1ZGJsYWMnLCdcXHUwMTcwJzonVWRibGFjJywnXFx1MDE2OSc6J3V0aWxkZScsJ1xcdTAxNjgnOidVdGlsZGUnLCdcXHUwMTczJzondW9nb24nLCdcXHUwMTcyJzonVW9nb24nLCdcXHUwMTZCJzondW1hY3InLCdcXHUwMTZBJzonVW1hY3InLCdcXHVEODM1XFx1REQzMyc6J3ZmcicsJ1xcdUQ4MzVcXHVERDY3Jzondm9wZicsJ1xcdUQ4MzVcXHVEQ0NCJzondnNjcicsJ1xcdUQ4MzVcXHVERDE5JzonVmZyJywnXFx1RDgzNVxcdURENEQnOidWb3BmJywnXFx1RDgzNVxcdURDQjEnOidWc2NyJywnXFx1RDgzNVxcdURENjgnOid3b3BmJywnXFx1RDgzNVxcdURDQ0MnOid3c2NyJywnXFx1RDgzNVxcdUREMzQnOid3ZnInLCdcXHVEODM1XFx1RENCMic6J1dzY3InLCdcXHVEODM1XFx1REQ0RSc6J1dvcGYnLCdcXHVEODM1XFx1REQxQSc6J1dmcicsJ1xcdTAxNzUnOid3Y2lyYycsJ1xcdTAxNzQnOidXY2lyYycsJ1xcdUQ4MzVcXHVERDM1JzoneGZyJywnXFx1RDgzNVxcdURDQ0QnOid4c2NyJywnXFx1RDgzNVxcdURENjknOid4b3BmJywnXFx1RDgzNVxcdURENEYnOidYb3BmJywnXFx1RDgzNVxcdUREMUInOidYZnInLCdcXHVEODM1XFx1RENCMyc6J1hzY3InLCdcXHVEODM1XFx1REQzNic6J3lmcicsJ1xcdUQ4MzVcXHVEQ0NFJzoneXNjcicsJ1xcdUQ4MzVcXHVERDZBJzoneW9wZicsJ1xcdUQ4MzVcXHVEQ0I0JzonWXNjcicsJ1xcdUQ4MzVcXHVERDFDJzonWWZyJywnXFx1RDgzNVxcdURENTAnOidZb3BmJywnXFx4RkQnOid5YWN1dGUnLCdcXHhERCc6J1lhY3V0ZScsJ1xcdTAxNzcnOid5Y2lyYycsJ1xcdTAxNzYnOidZY2lyYycsJ1xceEZGJzoneXVtbCcsJ1xcdTAxNzgnOidZdW1sJywnXFx1RDgzNVxcdURDQ0YnOid6c2NyJywnXFx1RDgzNVxcdUREMzcnOid6ZnInLCdcXHVEODM1XFx1REQ2Qic6J3pvcGYnLCdcXHUyMTI4JzonWmZyJywnXFx1MjEyNCc6J1pvcGYnLCdcXHVEODM1XFx1RENCNSc6J1pzY3InLCdcXHUwMTdBJzonemFjdXRlJywnXFx1MDE3OSc6J1phY3V0ZScsJ1xcdTAxN0UnOid6Y2Fyb24nLCdcXHUwMTdEJzonWmNhcm9uJywnXFx1MDE3Qyc6J3pkb3QnLCdcXHUwMTdCJzonWmRvdCcsJ1xcdTAxQjUnOidpbXBlZCcsJ1xceEZFJzondGhvcm4nLCdcXHhERSc6J1RIT1JOJywnXFx1MDE0OSc6J25hcG9zJywnXFx1MDNCMSc6J2FscGhhJywnXFx1MDM5MSc6J0FscGhhJywnXFx1MDNCMic6J2JldGEnLCdcXHUwMzkyJzonQmV0YScsJ1xcdTAzQjMnOidnYW1tYScsJ1xcdTAzOTMnOidHYW1tYScsJ1xcdTAzQjQnOidkZWx0YScsJ1xcdTAzOTQnOidEZWx0YScsJ1xcdTAzQjUnOidlcHNpJywnXFx1MDNGNSc6J2Vwc2l2JywnXFx1MDM5NSc6J0Vwc2lsb24nLCdcXHUwM0REJzonZ2FtbWFkJywnXFx1MDNEQyc6J0dhbW1hZCcsJ1xcdTAzQjYnOid6ZXRhJywnXFx1MDM5Nic6J1pldGEnLCdcXHUwM0I3JzonZXRhJywnXFx1MDM5Nyc6J0V0YScsJ1xcdTAzQjgnOid0aGV0YScsJ1xcdTAzRDEnOid0aGV0YXYnLCdcXHUwMzk4JzonVGhldGEnLCdcXHUwM0I5JzonaW90YScsJ1xcdTAzOTknOidJb3RhJywnXFx1MDNCQSc6J2thcHBhJywnXFx1MDNGMCc6J2thcHBhdicsJ1xcdTAzOUEnOidLYXBwYScsJ1xcdTAzQkInOidsYW1iZGEnLCdcXHUwMzlCJzonTGFtYmRhJywnXFx1MDNCQyc6J211JywnXFx4QjUnOidtaWNybycsJ1xcdTAzOUMnOidNdScsJ1xcdTAzQkQnOidudScsJ1xcdTAzOUQnOidOdScsJ1xcdTAzQkUnOid4aScsJ1xcdTAzOUUnOidYaScsJ1xcdTAzQkYnOidvbWljcm9uJywnXFx1MDM5Ric6J09taWNyb24nLCdcXHUwM0MwJzoncGknLCdcXHUwM0Q2JzoncGl2JywnXFx1MDNBMCc6J1BpJywnXFx1MDNDMSc6J3JobycsJ1xcdTAzRjEnOidyaG92JywnXFx1MDNBMSc6J1JobycsJ1xcdTAzQzMnOidzaWdtYScsJ1xcdTAzQTMnOidTaWdtYScsJ1xcdTAzQzInOidzaWdtYWYnLCdcXHUwM0M0JzondGF1JywnXFx1MDNBNCc6J1RhdScsJ1xcdTAzQzUnOid1cHNpJywnXFx1MDNBNSc6J1Vwc2lsb24nLCdcXHUwM0QyJzonVXBzaScsJ1xcdTAzQzYnOidwaGknLCdcXHUwM0Q1JzoncGhpdicsJ1xcdTAzQTYnOidQaGknLCdcXHUwM0M3JzonY2hpJywnXFx1MDNBNyc6J0NoaScsJ1xcdTAzQzgnOidwc2knLCdcXHUwM0E4JzonUHNpJywnXFx1MDNDOSc6J29tZWdhJywnXFx1MDNBOSc6J29obScsJ1xcdTA0MzAnOidhY3knLCdcXHUwNDEwJzonQWN5JywnXFx1MDQzMSc6J2JjeScsJ1xcdTA0MTEnOidCY3knLCdcXHUwNDMyJzondmN5JywnXFx1MDQxMic6J1ZjeScsJ1xcdTA0MzMnOidnY3knLCdcXHUwNDEzJzonR2N5JywnXFx1MDQ1Myc6J2dqY3knLCdcXHUwNDAzJzonR0pjeScsJ1xcdTA0MzQnOidkY3knLCdcXHUwNDE0JzonRGN5JywnXFx1MDQ1Mic6J2RqY3knLCdcXHUwNDAyJzonREpjeScsJ1xcdTA0MzUnOidpZWN5JywnXFx1MDQxNSc6J0lFY3knLCdcXHUwNDUxJzonaW9jeScsJ1xcdTA0MDEnOidJT2N5JywnXFx1MDQ1NCc6J2p1a2N5JywnXFx1MDQwNCc6J0p1a2N5JywnXFx1MDQzNic6J3poY3knLCdcXHUwNDE2JzonWkhjeScsJ1xcdTA0MzcnOid6Y3knLCdcXHUwNDE3JzonWmN5JywnXFx1MDQ1NSc6J2RzY3knLCdcXHUwNDA1JzonRFNjeScsJ1xcdTA0MzgnOidpY3knLCdcXHUwNDE4JzonSWN5JywnXFx1MDQ1Nic6J2l1a2N5JywnXFx1MDQwNic6J0l1a2N5JywnXFx1MDQ1Nyc6J3lpY3knLCdcXHUwNDA3JzonWUljeScsJ1xcdTA0MzknOidqY3knLCdcXHUwNDE5JzonSmN5JywnXFx1MDQ1OCc6J2pzZXJjeScsJ1xcdTA0MDgnOidKc2VyY3knLCdcXHUwNDNBJzona2N5JywnXFx1MDQxQSc6J0tjeScsJ1xcdTA0NUMnOidramN5JywnXFx1MDQwQyc6J0tKY3knLCdcXHUwNDNCJzonbGN5JywnXFx1MDQxQic6J0xjeScsJ1xcdTA0NTknOidsamN5JywnXFx1MDQwOSc6J0xKY3knLCdcXHUwNDNDJzonbWN5JywnXFx1MDQxQyc6J01jeScsJ1xcdTA0M0QnOiduY3knLCdcXHUwNDFEJzonTmN5JywnXFx1MDQ1QSc6J25qY3knLCdcXHUwNDBBJzonTkpjeScsJ1xcdTA0M0UnOidvY3knLCdcXHUwNDFFJzonT2N5JywnXFx1MDQzRic6J3BjeScsJ1xcdTA0MUYnOidQY3knLCdcXHUwNDQwJzoncmN5JywnXFx1MDQyMCc6J1JjeScsJ1xcdTA0NDEnOidzY3knLCdcXHUwNDIxJzonU2N5JywnXFx1MDQ0Mic6J3RjeScsJ1xcdTA0MjInOidUY3knLCdcXHUwNDVCJzondHNoY3knLCdcXHUwNDBCJzonVFNIY3knLCdcXHUwNDQzJzondWN5JywnXFx1MDQyMyc6J1VjeScsJ1xcdTA0NUUnOid1YnJjeScsJ1xcdTA0MEUnOidVYnJjeScsJ1xcdTA0NDQnOidmY3knLCdcXHUwNDI0JzonRmN5JywnXFx1MDQ0NSc6J2toY3knLCdcXHUwNDI1JzonS0hjeScsJ1xcdTA0NDYnOid0c2N5JywnXFx1MDQyNic6J1RTY3knLCdcXHUwNDQ3JzonY2hjeScsJ1xcdTA0MjcnOidDSGN5JywnXFx1MDQ1Ric6J2R6Y3knLCdcXHUwNDBGJzonRFpjeScsJ1xcdTA0NDgnOidzaGN5JywnXFx1MDQyOCc6J1NIY3knLCdcXHUwNDQ5Jzonc2hjaGN5JywnXFx1MDQyOSc6J1NIQ0hjeScsJ1xcdTA0NEEnOidoYXJkY3knLCdcXHUwNDJBJzonSEFSRGN5JywnXFx1MDQ0Qic6J3ljeScsJ1xcdTA0MkInOidZY3knLCdcXHUwNDRDJzonc29mdGN5JywnXFx1MDQyQyc6J1NPRlRjeScsJ1xcdTA0NEQnOidlY3knLCdcXHUwNDJEJzonRWN5JywnXFx1MDQ0RSc6J3l1Y3knLCdcXHUwNDJFJzonWVVjeScsJ1xcdTA0NEYnOid5YWN5JywnXFx1MDQyRic6J1lBY3knLCdcXHUyMTM1JzonYWxlcGgnLCdcXHUyMTM2JzonYmV0aCcsJ1xcdTIxMzcnOidnaW1lbCcsJ1xcdTIxMzgnOidkYWxldGgnfTtcblxuXHR2YXIgcmVnZXhFc2NhcGUgPSAvW1wiJic8PmBdL2c7XG5cdHZhciBlc2NhcGVNYXAgPSB7XG5cdFx0J1wiJzogJyZxdW90OycsXG5cdFx0JyYnOiAnJmFtcDsnLFxuXHRcdCdcXCcnOiAnJiN4Mjc7Jyxcblx0XHQnPCc6ICcmbHQ7Jyxcblx0XHQvLyBTZWUgaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzOiBpbiBIVE1MLCB0aGVcblx0XHQvLyBmb2xsb3dpbmcgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB1bmxlc3MgaXTigJlzIHBhcnQgb2YgYSB0YWcgb3IgYW5cblx0XHQvLyB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFdl4oCZcmUgb25seSBlc2NhcGluZyBpdCB0byBzdXBwb3J0IHRob3NlXG5cdFx0Ly8gc2l0dWF0aW9ucywgYW5kIGZvciBYTUwgc3VwcG9ydC5cblx0XHQnPic6ICcmZ3Q7Jyxcblx0XHQvLyBJbiBJbnRlcm5ldCBFeHBsb3JlciDiiaQgOCwgdGhlIGJhY2t0aWNrIGNoYXJhY3RlciBjYW4gYmUgdXNlZFxuXHRcdC8vIHRvIGJyZWFrIG91dCBvZiAodW4pcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZXMgb3IgSFRNTCBjb21tZW50cy5cblx0XHQvLyBTZWUgaHR0cDovL2h0bWw1c2VjLm9yZy8jMTAyLCBodHRwOi8vaHRtbDVzZWMub3JnLyMxMDgsIGFuZFxuXHRcdC8vIGh0dHA6Ly9odG1sNXNlYy5vcmcvIzEzMy5cblx0XHQnYCc6ICcmI3g2MDsnXG5cdH07XG5cblx0dmFyIHJlZ2V4SW52YWxpZEVudGl0eSA9IC8mIyg/Olt4WF1bXmEtZkEtRjAtOV18W14wLTl4WF0pLztcblx0dmFyIHJlZ2V4SW52YWxpZFJhd0NvZGVQb2ludCA9IC9bXFwwLVxceDA4XFx4MEJcXHgwRS1cXHgxRlxceDdGLVxceDlGXFx1RkREMC1cXHVGREVGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODNGXFx1RDg3RlxcdUQ4QkZcXHVEOEZGXFx1RDkzRlxcdUQ5N0ZcXHVEOUJGXFx1RDlGRlxcdURBM0ZcXHVEQTdGXFx1REFCRlxcdURBRkZcXHVEQjNGXFx1REI3RlxcdURCQkZcXHVEQkZGXVtcXHVERkZFXFx1REZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuXHR2YXIgcmVnZXhEZWNvZGUgPSAvJihDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsfERvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvd3xDbG9ja3dpc2VDb250b3VySW50ZWdyYWx8Tm90TmVzdGVkR3JlYXRlckdyZWF0ZXJ8Tm90U3F1YXJlU3VwZXJzZXRFcXVhbHxEaWFjcml0aWNhbERvdWJsZUFjdXRlfE5vdFJpZ2h0VHJpYW5nbGVFcXVhbHxOb3RTdWNjZWVkc1NsYW50RXF1YWx8Tm90UHJlY2VkZXNTbGFudEVxdWFsfENsb3NlQ3VybHlEb3VibGVRdW90ZXxOZWdhdGl2ZVZlcnlUaGluU3BhY2V8RG91YmxlQ29udG91ckludGVncmFsfEZpbGxlZFZlcnlTbWFsbFNxdWFyZXxDYXBpdGFsRGlmZmVyZW50aWFsRHxPcGVuQ3VybHlEb3VibGVRdW90ZXxFbXB0eVZlcnlTbWFsbFNxdWFyZXxOZXN0ZWRHcmVhdGVyR3JlYXRlcnxEb3VibGVMb25nUmlnaHRBcnJvd3xOb3RMZWZ0VHJpYW5nbGVFcXVhbHxOb3RHcmVhdGVyU2xhbnRFcXVhbHxSZXZlcnNlVXBFcXVpbGlicml1bXxEb3VibGVMZWZ0UmlnaHRBcnJvd3xOb3RTcXVhcmVTdWJzZXRFcXVhbHxOb3REb3VibGVWZXJ0aWNhbEJhcnxSaWdodEFycm93TGVmdEFycm93fE5vdEdyZWF0ZXJGdWxsRXF1YWx8Tm90UmlnaHRUcmlhbmdsZUJhcnxTcXVhcmVTdXBlcnNldEVxdWFsfERvd25MZWZ0UmlnaHRWZWN0b3J8RG91YmxlTG9uZ0xlZnRBcnJvd3xsZWZ0cmlnaHRzcXVpZ2Fycm93fExlZnRBcnJvd1JpZ2h0QXJyb3d8TmVnYXRpdmVNZWRpdW1TcGFjZXxibGFja3RyaWFuZ2xlcmlnaHR8UmlnaHREb3duVmVjdG9yQmFyfFByZWNlZGVzU2xhbnRFcXVhbHxSaWdodERvdWJsZUJyYWNrZXR8U3VjY2VlZHNTbGFudEVxdWFsfE5vdExlZnRUcmlhbmdsZUJhcnxSaWdodFRyaWFuZ2xlRXF1YWx8U3F1YXJlSW50ZXJzZWN0aW9ufFJpZ2h0RG93blRlZVZlY3RvcnxSZXZlcnNlRXF1aWxpYnJpdW18TmVnYXRpdmVUaGlja1NwYWNlfGxvbmdsZWZ0cmlnaHRhcnJvd3xMb25nbGVmdHJpZ2h0YXJyb3d8TG9uZ0xlZnRSaWdodEFycm93fERvd25SaWdodFRlZVZlY3RvcnxEb3duUmlnaHRWZWN0b3JCYXJ8R3JlYXRlclNsYW50RXF1YWx8U3F1YXJlU3Vic2V0RXF1YWx8TGVmdERvd25WZWN0b3JCYXJ8TGVmdERvdWJsZUJyYWNrZXR8VmVydGljYWxTZXBhcmF0b3J8cmlnaHRsZWZ0aGFycG9vbnN8Tm90R3JlYXRlckdyZWF0ZXJ8Tm90U3F1YXJlU3VwZXJzZXR8YmxhY2t0cmlhbmdsZWxlZnR8YmxhY2t0cmlhbmdsZWRvd258TmVnYXRpdmVUaGluU3BhY2V8TGVmdERvd25UZWVWZWN0b3J8Tm90TGVzc1NsYW50RXF1YWx8bGVmdHJpZ2h0aGFycG9vbnN8RG91YmxlVXBEb3duQXJyb3d8RG91YmxlVmVydGljYWxCYXJ8TGVmdFRyaWFuZ2xlRXF1YWx8RmlsbGVkU21hbGxTcXVhcmV8dHdvaGVhZHJpZ2h0YXJyb3d8Tm90TmVzdGVkTGVzc0xlc3N8RG93bkxlZnRUZWVWZWN0b3J8RG93bkxlZnRWZWN0b3JCYXJ8UmlnaHRBbmdsZUJyYWNrZXR8Tm90VGlsZGVGdWxsRXF1YWx8Tm90UmV2ZXJzZUVsZW1lbnR8UmlnaHRVcERvd25WZWN0b3J8RGlhY3JpdGljYWxUaWxkZXxOb3RTdWNjZWVkc1RpbGRlfGNpcmNsZWFycm93cmlnaHR8Tm90UHJlY2VkZXNFcXVhbHxyaWdodGhhcnBvb25kb3dufERvdWJsZVJpZ2h0QXJyb3d8Tm90U3VjY2VlZHNFcXVhbHxOb25CcmVha2luZ1NwYWNlfE5vdFJpZ2h0VHJpYW5nbGV8TGVzc0VxdWFsR3JlYXRlcnxSaWdodFVwVGVlVmVjdG9yfExlZnRBbmdsZUJyYWNrZXR8R3JlYXRlckZ1bGxFcXVhbHxEb3duQXJyb3dVcEFycm93fFJpZ2h0VXBWZWN0b3JCYXJ8dHdvaGVhZGxlZnRhcnJvd3xHcmVhdGVyRXF1YWxMZXNzfGRvd25oYXJwb29ucmlnaHR8UmlnaHRUcmlhbmdsZUJhcnxudHJpYW5nbGVyaWdodGVxfE5vdFN1cGVyc2V0RXF1YWx8TGVmdFVwRG93blZlY3RvcnxEaWFjcml0aWNhbEFjdXRlfHJpZ2h0cmlnaHRhcnJvd3N8dmFydHJpYW5nbGVyaWdodHxVcEFycm93RG93bkFycm93fERpYWNyaXRpY2FsR3JhdmV8VW5kZXJQYXJlbnRoZXNpc3xFbXB0eVNtYWxsU3F1YXJlfExlZnRVcFZlY3RvckJhcnxsZWZ0cmlnaHRhcnJvd3N8RG93blJpZ2h0VmVjdG9yfGRvd25oYXJwb29ubGVmdHx0cmlhbmdsZXJpZ2h0ZXF8U2hvcnRSaWdodEFycm93fE92ZXJQYXJlbnRoZXNpc3xEb3VibGVMZWZ0QXJyb3d8RG91YmxlRG93bkFycm93fE5vdFNxdWFyZVN1YnNldHxiaWd0cmlhbmdsZWRvd258bnRyaWFuZ2xlbGVmdGVxfFVwcGVyUmlnaHRBcnJvd3xjdXJ2ZWFycm93cmlnaHR8dmFydHJpYW5nbGVsZWZ0fE5vdExlZnRUcmlhbmdsZXxubGVmdHJpZ2h0YXJyb3d8TG93ZXJSaWdodEFycm93fE5vdEh1bXBEb3duSHVtcHxOb3RHcmVhdGVyVGlsZGV8cmlnaHR0aHJlZXRpbWVzfExlZnRVcFRlZVZlY3RvcnxOb3RHcmVhdGVyRXF1YWx8c3RyYWlnaHRlcHNpbG9ufExlZnRUcmlhbmdsZUJhcnxyaWdodHNxdWlnYXJyb3d8Q29udG91ckludGVncmFsfHJpZ2h0bGVmdGFycm93c3xDbG9zZUN1cmx5UXVvdGV8UmlnaHREb3duVmVjdG9yfExlZnRSaWdodFZlY3RvcnxuTGVmdHJpZ2h0YXJyb3d8bGVmdGhhcnBvb25kb3dufGNpcmNsZWFycm93bGVmdHxTcXVhcmVTdXBlcnNldHxPcGVuQ3VybHlRdW90ZXxob29rcmlnaHRhcnJvd3xIb3Jpem9udGFsTGluZXxEaWFjcml0aWNhbERvdHxOb3RMZXNzR3JlYXRlcnxudHJpYW5nbGVyaWdodHxEb3VibGVSaWdodFRlZXxJbnZpc2libGVDb21tYXxJbnZpc2libGVUaW1lc3xMb3dlckxlZnRBcnJvd3xEb3duTGVmdFZlY3RvcnxOb3RTdWJzZXRFcXVhbHxjdXJ2ZWFycm93bGVmdHx0cmlhbmdsZWxlZnRlcXxOb3RWZXJ0aWNhbEJhcnxUaWxkZUZ1bGxFcXVhbHxkb3duZG93bmFycm93c3xOb3RHcmVhdGVyTGVzc3xSaWdodFRlZVZlY3RvcnxaZXJvV2lkdGhTcGFjZXxsb29wYXJyb3dyaWdodHxMb25nUmlnaHRBcnJvd3xkb3VibGViYXJ3ZWRnZXxTaG9ydExlZnRBcnJvd3xTaG9ydERvd25BcnJvd3xSaWdodFZlY3RvckJhcnxHcmVhdGVyR3JlYXRlcnxSZXZlcnNlRWxlbWVudHxyaWdodGhhcnBvb251cHxMZXNzU2xhbnRFcXVhbHxsZWZ0dGhyZWV0aW1lc3x1cGhhcnBvb25yaWdodHxyaWdodGFycm93dGFpbHxMZWZ0RG93blZlY3RvcnxMb25ncmlnaHRhcnJvd3xOZXN0ZWRMZXNzTGVzc3xVcHBlckxlZnRBcnJvd3xuc2hvcnRwYXJhbGxlbHxsZWZ0bGVmdGFycm93c3xsZWZ0cmlnaHRhcnJvd3xMZWZ0cmlnaHRhcnJvd3xMZWZ0UmlnaHRBcnJvd3xsb25ncmlnaHRhcnJvd3x1cGhhcnBvb25sZWZ0fFJpZ2h0QXJyb3dCYXJ8QXBwbHlGdW5jdGlvbnxMZWZ0VGVlVmVjdG9yfGxlZnRhcnJvd3RhaWx8Tm90RXF1YWxUaWxkZXx2YXJzdWJzZXRuZXFxfHZhcnN1cHNldG5lcXF8UmlnaHRUZWVBcnJvd3xTdWNjZWVkc0VxdWFsfFN1Y2NlZWRzVGlsZGV8TGVmdFZlY3RvckJhcnxTdXBlcnNldEVxdWFsfGhvb2tsZWZ0YXJyb3d8RGlmZmVyZW50aWFsRHxWZXJ0aWNhbFRpbGRlfFZlcnlUaGluU3BhY2V8YmxhY2t0cmlhbmdsZXxiaWd0cmlhbmdsZXVwfExlc3NGdWxsRXF1YWx8ZGl2aWRlb250aW1lc3xsZWZ0aGFycG9vbnVwfFVwRXF1aWxpYnJpdW18bnRyaWFuZ2xlbGVmdHxSaWdodFRyaWFuZ2xlfG1lYXN1cmVkYW5nbGV8c2hvcnRwYXJhbGxlbHxsb25nbGVmdGFycm93fExvbmdsZWZ0YXJyb3d8TG9uZ0xlZnRBcnJvd3xEb3VibGVMZWZ0VGVlfFBvaW5jYXJlcGxhbmV8UHJlY2VkZXNFcXVhbHx0cmlhbmdsZXJpZ2h0fERvdWJsZVVwQXJyb3d8UmlnaHRVcFZlY3RvcnxmYWxsaW5nZG90c2VxfGxvb3BhcnJvd2xlZnR8UHJlY2VkZXNUaWxkZXxOb3RUaWxkZUVxdWFsfE5vdFRpbGRlVGlsZGV8c21hbGxzZXRtaW51c3xQcm9wb3J0aW9uYWx8dHJpYW5nbGVsZWZ0fHRyaWFuZ2xlZG93bnxVbmRlckJyYWNrZXR8Tm90SHVtcEVxdWFsfGV4cG9uZW50aWFsZXxFeHBvbmVudGlhbEV8Tm90TGVzc1RpbGRlfEhpbGJlcnRTcGFjZXxSaWdodENlaWxpbmd8YmxhY2tsb3plbmdlfHZhcnN1cHNldG5lcXxIdW1wRG93bkh1bXB8R3JlYXRlckVxdWFsfFZlcnRpY2FsTGluZXxMZWZ0VGVlQXJyb3d8Tm90TGVzc0VxdWFsfERvd25UZWVBcnJvd3xMZWZ0VHJpYW5nbGV8dmFyc3Vic2V0bmVxfEludGVyc2VjdGlvbnxOb3RDb25ncnVlbnR8RG93bkFycm93QmFyfExlZnRVcFZlY3RvcnxMZWZ0QXJyb3dCYXJ8cmlzaW5nZG90c2VxfEdyZWF0ZXJUaWxkZXxSb3VuZEltcGxpZXN8U3F1YXJlU3Vic2V0fFNob3J0VXBBcnJvd3xOb3RTdXBlcnNldHxxdWF0ZXJuaW9uc3xwcmVjbmFwcHJveHxiYWNrZXBzaWxvbnxwcmVjY3VybHllcXxPdmVyQnJhY2tldHxibGFja3NxdWFyZXxNZWRpdW1TcGFjZXxWZXJ0aWNhbEJhcnxjaXJjbGVkY2lyY3xjaXJjbGVkZGFzaHxDaXJjbGVNaW51c3xDaXJjbGVUaW1lc3xMZXNzR3JlYXRlcnxjdXJseWVxcHJlY3xjdXJseWVxc3VjY3xkaWFtb25kc3VpdHxVcERvd25BcnJvd3xVcGRvd25hcnJvd3xSdWxlRGVsYXllZHxScmlnaHRhcnJvd3x1cGRvd25hcnJvd3xSaWdodFZlY3RvcnxuUmlnaHRhcnJvd3xucmlnaHRhcnJvd3xlcXNsYW50bGVzc3xMZWZ0Q2VpbGluZ3xFcXVpbGlicml1bXxTbWFsbENpcmNsZXxleHBlY3RhdGlvbnxOb3RTdWNjZWVkc3x0aGlja2FwcHJveHxHcmVhdGVyTGVzc3xTcXVhcmVVbmlvbnxOb3RQcmVjZWRlc3xOb3RMZXNzTGVzc3xzdHJhaWdodHBoaXxzdWNjbmFwcHJveHxzdWNjY3VybHllcXxTdWJzZXRFcXVhbHxzcXN1cHNldGVxfFByb3BvcnRpb258TGFwbGFjZXRyZnxJbWFnaW5hcnlJfHN1cHNldG5lcXF8Tm90R3JlYXRlcnxndHJlcXFsZXNzfE5vdEVsZW1lbnR8VGhpY2tTcGFjZXxUaWxkZUVxdWFsfFRpbGRlVGlsZGV8Rm91cmllcnRyZnxybW91c3RhY2hlfEVxdWFsVGlsZGV8ZXFzbGFudGd0cnxVbmRlckJyYWNlfExlZnRWZWN0b3J8VXBBcnJvd0JhcnxuTGVmdGFycm93fG5zdWJzZXRlcXF8c3Vic2V0bmVxcXxuc3Vwc2V0ZXFxfG5sZWZ0YXJyb3d8c3VjY2FwcHJveHxsZXNzYXBwcm94fFVwVGVlQXJyb3d8dXB1cGFycm93c3xjdXJseXdlZGdlfGxlc3NlcXFndHJ8dmFyZXBzaWxvbnx2YXJub3RoaW5nfFJpZ2h0Rmxvb3J8Y29tcGxlbWVudHxDaXJjbGVQbHVzfHNxc3Vic2V0ZXF8TGxlZnRhcnJvd3xjaXJjbGVkYXN0fFJpZ2h0QXJyb3d8UmlnaHRhcnJvd3xyaWdodGFycm93fGxtb3VzdGFjaGV8QmVybm91bGxpc3xwcmVjYXBwcm94fG1hcHN0b2xlZnR8bWFwc3RvZG93bnxsb25nbWFwc3RvfGRvdHNxdWFyZXxkb3duYXJyb3d8RG91YmxlRG90fG5zdWJzZXRlcXxzdXBzZXRuZXF8bGVmdGFycm93fG5zdXBzZXRlcXxzdWJzZXRuZXF8VGhpblNwYWNlfG5nZXFzbGFudHxzdWJzZXRlcXF8SHVtcEVxdWFsfE5vdFN1YnNldHx0cmlhbmdsZXF8Tm90Q3VwQ2FwfGxlc3NlcWd0cnxoZWFydHN1aXR8VHJpcGxlRG90fExlZnRhcnJvd3xDb3Byb2R1Y3R8Q29uZ3J1ZW50fHZhcnByb3B0b3xjb21wbGV4ZXN8Z3ZlcnRuZXFxfExlZnRBcnJvd3xMZXNzVGlsZGV8c3Vwc2V0ZXFxfE1pbnVzUGx1c3xDaXJjbGVEb3R8bmxlcXNsYW50fE5vdEV4aXN0c3xndHJlcWxlc3N8bnBhcmFsbGVsfFVuaW9uUGx1c3xMZWZ0Rmxvb3J8Y2hlY2ttYXJrfENlbnRlckRvdHxjZW50ZXJkb3R8TWVsbGludHJmfGd0cmFwcHJveHxiaWdvdGltZXN8T3ZlckJyYWNlfHNwYWRlc3VpdHx0aGVyZWZvcmV8cGl0Y2hmb3JrfHJhdGlvbmFsc3xQbHVzTWludXN8QmFja3NsYXNofFRoZXJlZm9yZXxEb3duQnJldmV8YmFja3NpbWVxfGJhY2twcmltZXxEb3duQXJyb3d8bnNob3J0bWlkfERvd25hcnJvd3xsdmVydG5lcXF8ZXF2cGFyc2x8aW1hZ2xpbmV8aW1hZ3BhcnR8aW5maW50aWV8aW50ZWdlcnN8SW50ZWdyYWx8aW50ZXJjYWx8TGVzc0xlc3N8VWFycm9jaXJ8aW50bGFyaGt8c3FzdXBzZXR8YW5nbXNkYWZ8c3FzdWJzZXR8bGxjb3JuZXJ8dmFydGhldGF8Y3VwYnJjYXB8bG5hcHByb3h8U3VwZXJzZXR8U3VjaFRoYXR8c3VjY25zaW18c3VjY25lcXF8YW5nbXNkYWd8YmlndXBsdXN8Y3VybHl2ZWV8dHJwZXppdW18U3VjY2VlZHN8Tm90VGlsZGV8Ymlnd2VkZ2V8YW5nbXNkYWh8YW5ncnR2YmR8dHJpbWludXN8Y3djb25pbnR8ZnBhcnRpbnR8bHJjb3JuZXJ8c21lcGFyc2x8c3Vic2V0ZXF8dXJjb3JuZXJ8bHVyZHNoYXJ8bGFlbXB0eXZ8RERvdHJhaGR8YXBwcm94ZXF8bGRydXNoYXJ8YXdjb25pbnR8bWFwc3RvdXB8YmFja2Nvbmd8c2hvcnRtaWR8dHJpYW5nbGV8Z2Vxc2xhbnR8Z2VzZG90b2x8dGltZXNiYXJ8Y2lyY2xlZFJ8Y2lyY2xlZFN8c2V0bWludXN8bXVsdGltYXB8bmF0dXJhbHN8c2Nwb2xpbnR8bmNvbmdkb3R8UmlnaHRUZWV8Ym94bWludXN8Z25hcHByb3h8Ym94dGltZXN8YW5kc2xvcGV8dGhpY2tzaW18YW5nbXNkYWF8dmFyc2lnbWF8Y2lyZm5pbnR8cnRyaWx0cml8YW5nbXNkYWJ8cnBwb2xpbnR8YW5nbXNkYWN8YmFyd2VkZ2V8ZHJia2Fyb3d8Y2x1YnN1aXR8dGhldGFzeW18YnNvbGhzdWJ8Y2FwYnJjdXB8ZHppZ3JhcnJ8ZG90ZXFkb3R8RG90RXF1YWx8ZG90bWludXN8VW5kZXJCYXJ8Tm90RXF1YWx8cmVhbHBhcnR8b3RpbWVzYXN8dWxjb3JuZXJ8aGtzZWFyb3d8aGtzd2Fyb3d8cGFyYWxsZWx8UGFydGlhbER8ZWxpbnRlcnN8ZW1wdHlzZXR8cGx1c2FjaXJ8YmJya3Ricmt8YW5nbXNkYWR8cG9pbnRpbnR8Ymlnb3BsdXN8YW5nbXNkYWV8UHJlY2VkZXN8Ymlnc3FjdXB8dmFya2FwcGF8bm90aW5kb3R8c3Vwc2V0ZXF8cHJlY25lcXF8cHJlY25zaW18cHJvZmFsYXJ8cHJvZmxpbmV8cHJvZnN1cmZ8bGVxc2xhbnR8bGVzZG90b3J8cmFlbXB0eXZ8c3VicGx1c3xub3RuaXZifG5vdG5pdmN8c3VicmFycnx6aWdyYXJyfHZ6aWd6YWd8c3VibXVsdHxzdWJlZG90fEVsZW1lbnR8YmV0d2VlbnxjaXJzY2lyfGxhcnJiZnN8bGFycnNpbXxsb3RpbWVzfGxicmtzbGR8bGJya3NsdXxsb3plbmdlfGxkcmRoYXJ8ZGJrYXJvd3xiaWdjaXJjfGVwc2lsb258c2ltcmFycnxzaW1wbHVzfGx0cXVlc3R8RXBzaWxvbnxsdXJ1aGFyfGd0cXVlc3R8bWFsdGVzZXxucG9saW50fGVxY29sb258bnByZWNlcXxiaWdvZG90fGRkYWdnZXJ8Z3RybGVzc3xibmVxdWl2fGhhcnJjaXJ8ZGRvdHNlcXxlcXVpdkREfGJhY2tzaW18ZGVtcHR5dnxuc3FzdWJlfG5zcXN1cGV8VXBzaWxvbnxuc3Vic2V0fHVwc2lsb258bWludXNkdXxuc3VjY2VxfHN3YXJyb3d8bnN1cHNldHxjb2xvbmVxfHNlYXJyb3d8Ym94cGx1c3xuYXBwcm94fG5hdHVyYWx8YXN5bXBlcXxhbGVmc3ltfGNvbmdkb3R8bmVhcnJvd3xiaWdzdGFyfGRpYW1vbmR8c3VwcGx1c3x0cml0aW1lfExlZnRUZWV8bnZpbmZpbnx0cmlwbHVzfE5ld0xpbmV8bnZsdHJpZXxudnJ0cmllfG53YXJyb3d8bmV4aXN0c3xEaWFtb25kfHJ1bHVoYXJ8SW1wbGllc3xzdXBtdWx0fGFuZ3phcnJ8c3VwbGFycnxzdXBoc3VifHF1ZXN0ZXF8YmVjYXVzZXxkaWdhbW1hfEJlY2F1c2V8b2xjcm9zc3xiZW1wdHl2fG9taWNyb258T21pY3Jvbnxyb3RpbWVzfE5vQnJlYWt8aW50cHJvZHxhbmdydHZifG9yZGVyb2Z8dXdhbmdsZXxzdXBoc29sfGxlc2RvdG98b3JzbG9wZXxEb3duVGVlfHJlYWxpbmV8Y3VkYXJybHxyZGxkaGFyfE92ZXJCYXJ8c3VwZWRvdHxsZXNzZG90fHN1cGRzdWJ8dG9wZm9ya3xzdWNjc2ltfHJicmtzbHV8cmJya3NsZHxwZXJ0ZW5rfGN1ZGFycnJ8aXNpbmRvdHxwbGFuY2tofGxlc3NndHJ8cGx1c2NpcnxnZXNkb3RvfHBsdXNzaW18cGx1c3R3b3xsZXNzc2ltfGN1bGFycnB8cmFycnNpbXxDYXlsZXlzfG5vdGludmF8bm90aW52Ynxub3RpbnZjfFVwQXJyb3d8VXBhcnJvd3x1cGFycm93fE5vdExlc3N8ZHdhbmdsZXxwcmVjc2ltfFByb2R1Y3R8Y3VyYXJybXxDY29uaW50fGRvdHBsdXN8cmFycmJmc3xjY3Vwc3NtfENlZGlsbGF8Y2VtcHR5dnxub3RuaXZhfHF1YXRpbnR8ZnJhYzM1fGZyYWMzOHxmcmFjNDV8ZnJhYzU2fGZyYWM1OHxmcmFjNzh8dHJpZG90fHhvcGx1c3xnYWN1dGV8Z2FtbWFkfEdhbW1hZHxsZmlzaHR8bGZsb29yfGJpZ2N1cHxzcXN1cGV8Z2JyZXZlfEdicmV2ZXxsaGFydWx8c3FzdWJlfHNxY3Vwc3xHY2VkaWx8YXBhY2lyfGxsaGFyZHxsbWlkb3R8TG1pZG90fGxtb3VzdHxhbmRhbmR8c3FjYXBzfGFwcHJveHxBYnJldmV8c3BhZGVzfGNpcmNlcXx0cHJpbWV8ZGl2aWRlfHRvcGNpcnxBc3NpZ258dG9wYm90fGdlc2RvdHxkaXZvbnh8eHVwbHVzfHRpbWVzZHxnZXNsZXN8YXRpbGRlfHNvbGJhcnxTT0ZUY3l8bG9wbHVzfHRpbWVzYnxsb3dhc3R8bG93YmFyfGRsY29ybnxkbGNyb3B8c29mdGN5fGRvbGxhcnxscGFybHR8dGhrc2ltfGxyaGFyZHxBdGlsZGV8bHNhcXVvfHNtYXNocHxiaWd2ZWV8dGhpbnNwfHdyZWF0aHxia2Fyb3d8bHNxdW9yfGxzdHJva3xMc3Ryb2t8bHRocmVlfGx0aW1lc3xsdGxhcnJ8RG90RG90fHNpbWRvdHxsdHJQYXJ8d2VpZXJwfHhzcWN1cHxhbmdtc2R8c2lnbWF2fHNpZ21hZnx6ZWV0cmZ8WmNhcm9ufHpjYXJvbnxtYXBzdG98dnN1cG5lfHRoZXRhdnxjaXJtaWR8bWFya2VyfG1jb21tYXxaYWN1dGV8dnN1Ym5FfHRoZXJlNHxndGxQYXJ8dnN1Ym5lfGJvdHRvbXxndHJhcnJ8U0hDSGN5fHNoY2hjeXxtaWRhc3R8bWlkY2lyfG1pZGRvdHxtaW51c2J8bWludXNkfGd0cmRvdHxib3d0aWV8c2Zyb3dufG1ucGx1c3xtb2RlbHN8Y29sb25lfHNlc3dhcnxDb2xvbmV8bXN0cG9zfHNlYXJoa3xndHJzaW18bmFjdXRlfE5hY3V0ZXxib3hib3h8dGVscmVjfGhhaXJzcHxUY2VkaWx8bmJ1bXBlfHNjbnNpbXxuY2Fyb258TmNhcm9ufG5jZWRpbHxOY2VkaWx8aGFtaWx0fFNjZWRpbHxuZWFyaGt8aGFyZGN5fEhBUkRjeXx0Y2VkaWx8VGNhcm9ufGNvbW1hdHxuZXF1aXZ8bmVzZWFyfHRjYXJvbnx0YXJnZXR8aGVhcnRzfG5leGlzdHx2YXJyaG98c2NlZGlsfFNjYXJvbnxzY2Fyb258aGVsbGlwfFNhY3V0ZXxzYWN1dGV8aGVyY29ufHN3bndhcnxjb21wZm58cnRpbWVzfHJ0aHJlZXxyc3F1b3J8cnNhcXVvfHphY3V0ZXx3ZWRnZXF8aG9tdGh0fGJhcnZlZXxiYXJ3ZWR8QmFyd2VkfHJwYXJndHxob3JiYXJ8Y29uaW50fHN3YXJoa3xyb3BsdXN8bmx0cmllfGhzbGFzaHxoc3Ryb2t8SHN0cm9rfHJtb3VzdHxDb25pbnR8YnByaW1lfGh5YnVsbHxoeXBoZW58aWFjdXRlfElhY3V0ZXxzdXBzdXB8c3Vwc3VifHN1cHNpbXx2YXJwaGl8Y29wcm9kfGJydmJhcnxhZ3JhdmV8U3Vwc2V0fHN1cHNldHxpZ3JhdmV8SWdyYXZlfG5vdGluRXxBZ3JhdmV8aWlpaW50fGlpbmZpbnxjb3B5c3J8d2VkYmFyfFZlcmJhcnx2YW5ncnR8YmVjYXVzfGluY2FyZXx2ZXJiYXJ8aW5vZG90fGJ1bGxldHxkcmNvcm58aW50Y2FsfGRyY3JvcHxjdWxhcnJ8dmVsbGlwfFV0aWxkZXxidW1wZXF8Y3VwY2FwfGRzdHJva3xEc3Ryb2t8Q3VwQ2FwfGN1cGN1cHxjdXBkb3R8ZWFjdXRlfEVhY3V0ZXxzdXBkb3R8aXF1ZXN0fGVhc3RlcnxlY2Fyb258RWNhcm9ufGVjb2xvbnxpc2luc3Z8dXRpbGRlfGl0aWxkZXxJdGlsZGV8Y3VyYXJyfHN1Y2NlcXxCdW1wZXF8Y2FjdXRlfHVsY3JvcHxucGFyc2x8Q2FjdXRlfG5wcmN1ZXxlZ3JhdmV8RWdyYXZlfG5yYXJyY3xucmFycnd8c3Vic3VwfHN1YnN1YnxucnRyaWV8anNlcmN5fG5zY2N1ZXxKc2VyY3l8a2FwcGF2fGtjZWRpbHxLY2VkaWx8c3Vic2ltfHVsY29ybnxuc2ltZXF8ZWdzZG90fHZlZWJhcnxrZ3JlZW58Y2FwYW5kfGVsc2RvdHxTdWJzZXR8c3Vic2V0fGN1cnJlbnxhYWN1dGV8bGFjdXRlfExhY3V0ZXxlbXB0eXZ8bnRpbGRlfE50aWxkZXxsYWdyYW58bGFtYmRhfExhbWJkYXxjYXBjYXB8VWdyYXZlfGxhbmdsZXxzdWJkb3R8ZW1zcDEzfG51bWVyb3xlbXNwMTR8bnZkYXNofG52RGFzaHxuVmRhc2h8blZEYXNofHVncmF2ZXx1ZmlzaHR8bnZIYXJyfGxhcnJmc3xudmxBcnJ8bGFycmhrfGxhcnJscHxsYXJycGx8bnZyQXJyfFVkYmxhY3xud2FyaGt8bGFycnRsfG53bmVhcnxvYWN1dGV8T2FjdXRlfGxhdGFpbHxsQXRhaWx8c3N0YXJmfGxicmFjZXxvZGJsYWN8T2RibGFjfGxicmFja3x1ZGJsYWN8b2Rzb2xkfGVwYXJzbHxsY2Fyb258TGNhcm9ufG9ncmF2ZXxPZ3JhdmV8bGNlZGlsfExjZWRpbHxBYWN1dGV8c3NtaWxlfHNzZXRtbnxzcXVhcmZ8bGRxdW9yfGNhcGN1cHxvbWludXN8Y3lsY3R5fHJoYXJ1bHxlcWNpcmN8ZGFnZ2VyfHJmbG9vcnxyZmlzaHR8RGFnZ2VyfGRhbGV0aHxlcXVhbHN8b3JpZ29mfGNhcGRvdHxlcXVlc3R8ZGNhcm9ufERjYXJvbnxyZHF1b3J8b3NsYXNofE9zbGFzaHxvdGlsZGV8T3RpbGRlfG90aW1lc3xPdGltZXN8dXJjcm9wfFVicmV2ZXx1YnJldmV8WWFjdXRlfFVhY3V0ZXx1YWN1dGV8UmNlZGlsfHJjZWRpbHx1cmNvcm58cGFyc2ltfFJjYXJvbnxWZGFzaGx8cmNhcm9ufFRzdHJva3xwZXJjbnR8cGVyaW9kfHBlcm1pbHxFeGlzdHN8eWFjdXRlfHJicmFja3xyYnJhY2V8cGhtbWF0fGNjYXJvbnxDY2Fyb258cGxhbmNrfGNjZWRpbHxwbGFua3Z8dHN0cm9rfGZlbWFsZXxwbHVzZG98cGx1c2R1fGZmaWxpZ3xwbHVzbW58ZmZsbGlnfENjZWRpbHxyQXRhaWx8ZGZpc2h0fGJlcm5vdXxyYXRhaWx8UmFycnRsfHJhcnJ0bHxhbmdzcGh8cmFycnBsfHJhcnJscHxyYXJyaGt8eHdlZGdlfHhvdGltZXxmb3JhbGx8Rm9yQWxsfFZ2ZGFzaHx2c3VwbkV8cHJlY2VxfGJpZ2NhcHxmcmFjMTJ8ZnJhYzEzfGZyYWMxNHxwcmltZXN8cmFycmZzfHBybnNpbXxmcmFjMTV8U3F1YXJlfGZyYWMxNnxzcXVhcmV8bGVzZG90fGZyYWMxOHxmcmFjMjN8cHJvcHRvfHBydXJlbHxyYXJyYXB8cmFuZ2xlfHB1bmNzcHxmcmFjMjV8UmFjdXRlfHFwcmltZXxyYWN1dGV8bGVzZ2VzfGZyYWMzNHxhYnJldmV8QUVsaWd8ZXFzaW18dXRkb3R8c2V0bW58dXJ0cml8RXF1YWx8VXJpbmd8c2VBcnJ8dXJpbmd8c2VhcnJ8ZGFzaHZ8RGFzaHZ8bXVtYXB8bmFibGF8aW9nb258SW9nb258c2RvdGV8c2RvdGJ8c2NzaW18bmFwaWR8bmFwb3N8ZXF1aXZ8bmF0dXJ8QWNpcmN8ZGJsYWN8ZXJhcnJ8bmJ1bXB8aXByb2R8ZXJEb3R8dWNpcmN8YXdpbnR8ZXNkb3R8YW5ncnR8bmNvbmd8aXNpbkV8c2NuYXB8U2NpcmN8c2NpcmN8bmRhc2h8aXNpbnN8VWJyY3l8bmVhcnJ8bmVBcnJ8aXNpbnZ8bmVkb3R8dWJyY3l8YWN1dGV8WWNpcmN8aXVrY3l8SXVrY3l8eHV0cml8bmVzaW18Y2FyZXR8amNpcmN8SmNpcmN8Y2Fyb258dHdpeHR8ZGRhcnJ8c2NjdWV8ZXhpc3R8am1hdGh8c2JxdW98bmdlcXF8YW5nc3R8Y2NhcHN8bGNlaWx8bmdzaW18VXBUZWV8ZGVsdGF8RGVsdGF8cnRyaWZ8bmhhcnJ8bmhBcnJ8bmhwYXJ8cnRyaWV8anVrY3l8SnVrY3l8a2FwcGF8cnNxdW98S2FwcGF8bmxhcnJ8bmxBcnJ8VFNIY3l8cnJhcnJ8YW9nb258QW9nb258ZmZsaWd8eHJhcnJ8dHNoY3l8Y2NpcmN8bmxlcXF8ZmlsaWd8dXBzaWh8bmxlc3N8ZGhhcmx8bmxzaW18ZmpsaWd8cm9wYXJ8bmx0cml8ZGhhcnJ8cm9icmt8cm9hcnJ8ZmxsaWd8Zmx0bnN8cm9hbmd8cm5taWR8c3VibkV8c3VibmV8bEFhcnJ8dHJpc2J8Q2NpcmN8YWNpcmN8Y2N1cHN8Ymxhbmt8VkRhc2h8Zm9ya3Z8VmRhc2h8bGFuZ2R8Y2VkaWx8YmxrMTJ8YmxrMTR8bGFxdW98c3RybnN8ZGlhbXN8bm90aW58dkRhc2h8bGFycmJ8YmxrMzR8YmxvY2t8ZGlzaW58dXBsdXN8dmRhc2h8dkJhcnZ8YWVsaWd8c3RhcmZ8V2VkZ2V8Y2hlY2t8eHJBcnJ8bGF0ZXN8bGJhcnJ8bEJhcnJ8bm90bml8bGJicmt8YmNvbmd8ZnJhc2x8bGJya2V8ZnJvd258dnJ0cml8dnByb3B8dm5zdXB8Z2FtbWF8R2FtbWF8d2VkZ2V8eG9kb3R8YmRxdW98c3JhcnJ8ZG90ZXF8bGRxdW98Ym94ZGx8Ym94ZEx8Z2NpcmN8R2NpcmN8Ym94RGx8Ym94REx8Ym94ZHJ8Ym94ZFJ8Ym94RHJ8VFJBREV8dHJhZGV8cmxoYXJ8Ym94RFJ8dm5zdWJ8bnBhcnR8dmx0cml8cmxhcnJ8Ym94aGR8Ym94aER8bnByZWN8Z2VzY2N8bnJhcnJ8bnJBcnJ8Ym94SGR8Ym94SER8Ym94aHV8Ym94aFV8bnJ0cml8Ym94SHV8Y2x1YnN8Ym94SFV8dGltZXN8Y29sb258Q29sb258Z2ltZWx8eGxBcnJ8VGlsZGV8bnNpbWV8dGlsZGV8bnNtaWR8bnNwYXJ8VEhPUk58dGhvcm58eGxhcnJ8bnN1YmV8bnN1YkV8dGhrYXB8eGhBcnJ8Y29tbWF8bnN1Y2N8Ym94dWx8Ym94dUx8bnN1cGV8bnN1cEV8Z25lcXF8Z25zaW18Ym94VWx8Ym94VUx8Z3JhdmV8Ym94dXJ8Ym94dVJ8Ym94VXJ8Ym94VVJ8bGVzY2N8YW5nbGV8YmVwc2l8Ym94dmh8dmFycGl8Ym94dkh8bnVtc3B8VGhldGF8Z3NpbWV8Z3NpbWx8dGhldGF8Ym94Vmh8Ym94Vkh8Ym94dmx8Z3RjaXJ8Z3Rkb3R8Ym94dkx8Ym94Vmx8Ym94Vkx8Y3JhcnJ8Y3Jvc3N8Q3Jvc3N8bnZzaW18Ym94dnJ8bndhcnJ8bndBcnJ8c3FzdXB8ZHRkb3R8VW9nb258bGhhcmR8bGhhcnV8ZHRyaWZ8b2NpcmN8T2NpcmN8bGhibGt8ZHVhcnJ8b2Rhc2h8c3FzdWJ8SGFjZWt8c3FjdXB8bGxhcnJ8ZHVoYXJ8b2VsaWd8T0VsaWd8b2ZjaXJ8Ym94dlJ8dW9nb258bGx0cml8Ym94VnJ8Y3N1YmV8dXVhcnJ8b2hiYXJ8Y3N1cGV8Y3Rkb3R8b2xhcnJ8b2xjaXJ8aGFycnd8b2xpbmV8c3FjYXB8b21hY3J8T21hY3J8b21lZ2F8T21lZ2F8Ym94VlJ8YWxlcGh8bG5lcXF8bG5zaW18bG9hbmd8bG9hcnJ8cmhhcnV8bG9icmt8aGNpcmN8b3BlcnB8b3BsdXN8cmhhcmR8SGNpcmN8b3JhcnJ8VW5pb258b3JkZXJ8ZWNpcmN8RWNpcmN8Y3VlcHJ8c3psaWd8Y3Vlc2N8YnJldmV8cmVhbHN8ZUREb3R8QnJldmV8aG9hcnJ8bG9wYXJ8dXRyaWZ8cmRxdW98VW1hY3J8dW1hY3J8ZWZEb3R8c3dBcnJ8dWx0cml8YWxwaGF8cmNlaWx8b3ZiYXJ8c3dhcnJ8V2NpcmN8d2NpcmN8c210ZXN8c21pbGV8YnNlbWl8bHJhcnJ8YXJpbmd8cGFyc2x8bHJoYXJ8YnNpbWV8dWhibGt8bHJ0cml8Y3Vwb3J8QXJpbmd8dWhhcnJ8dWhhcmx8c2xhcnJ8cmJya2V8YnNvbGJ8bHNpbWV8cmJicmt8UkJhcnJ8bHNpbWd8cGhvbmV8ckJhcnJ8cmJhcnJ8aWNpcmN8bHNxdW98SWNpcmN8ZW1hY3J8RW1hY3J8cmF0aW98c2ltbmV8cGx1c2J8c2ltbEV8c2ltZ0V8c2ltZXF8cGx1c2V8bHRjaXJ8bHRkb3R8ZW1wdHl8eGhhcnJ8eGR0cml8aWV4Y2x8QWxwaGF8bHRyaWV8cmFycnd8cG91bmR8bHRyaWZ8eGNpcmN8YnVtcGV8cHJjdWV8YnVtcEV8YXN5bXB8YW1hY3J8Y3V2ZWV8U2lnbWF8c2lnbWF8aWlpbnR8dWRoYXJ8aWlvdGF8aWpsaWd8SUpsaWd8c3VwbkV8aW1hY3J8SW1hY3J8cHJpbWV8UHJpbWV8aW1hZ2V8cHJuYXB8ZW9nb258RW9nb258cmFycmN8bWRhc2h8bUREb3R8Y3V3ZWR8aW1hdGh8c3VwbmV8aW1wZWR8QW1hY3J8dWRhcnJ8cHJzaW18bWljcm98cmFycmJ8Y3dpbnR8cmFxdW98aW5maW58ZXBsdXN8cmFuZ2V8cmFuZ2R8VWNpcmN8cmFkaWN8bWludXN8YW1hbGd8dmVlZXF8ckFhcnJ8ZXBzaXZ8eWNpcmN8cXVlc3R8c2hhcnB8cXVvdHx6d25qfFFzY3J8cmFjZXxxc2NyfFFvcGZ8cW9wZnxxaW50fHJhbmd8UmFuZ3xac2NyfHpzY3J8Wm9wZnx6b3BmfHJhcnJ8ckFycnxSYXJyfFBzY3J8cHNjcnxwcm9wfHByb2R8cHJuRXxwcmVjfFpIY3l8emhjeXxwcmFwfFpldGF8emV0YXxQb3BmfHBvcGZ8WmRvdHxwbHVzfHpkb3R8WXVtbHx5dW1sfHBoaXZ8WVVjeXx5dWN5fFlzY3J8eXNjcnxwZXJwfFlvcGZ8eW9wZnxwYXJ0fHBhcmF8WUljeXxPdW1sfHJjdWJ8eWljeXxZQWN5fHJkY2F8b3VtbHxvc29sfE9zY3J8cmRzaHx5YWN5fHJlYWx8b3Njcnx4dmVlfGFuZGR8cmVjdHxhbmR2fFhzY3J8b3JvcnxvcmRtfG9yZGZ8eHNjcnxhbmdlfGFvcGZ8QW9wZnxySGFyfFhvcGZ8b3BhcnxPb3BmfHhvcGZ8eG5pc3xyaG92fG9vcGZ8b21pZHx4bWFwfG9pbnR8YXBpZHxhcG9zfG9nb258YXNjcnxBc2NyfG9kb3R8b2Rpdnx4Y3VwfHhjYXB8b2NpcnxvYXN0fG52bHR8bnZsZXxudmd0fG52Z2V8bnZhcHxXc2NyfHdzY3J8YXVtbHxudGxnfG50Z2x8bnN1cHxuc3VifG5zaW18TnNjcnxuc2NyfG5zY2V8V29wZnxyaW5nfG5wcmV8d29wZnxucGFyfEF1bWx8QmFydnxiYnJrfE5vcGZ8bm9wZnxubWlkfG5MdHZ8YmV0YXxyb3BmfFJvcGZ8QmV0YXxiZXRofG5sZXN8cnBhcnxubGVxfGJub3R8Yk5vdHxubGRyfE5KY3l8cnNjcnxSc2NyfFZzY3J8dnNjcnxyc3FifG5qY3l8Ym9wZnxuaXNkfEJvcGZ8cnRyaXxWb3BmfG5HdHZ8bmd0cnx2b3BmfGJveGh8Ym94SHxib3h2fG5nZXN8bmdlcXxib3hWfGJzY3J8c2NhcHxCc2NyfGJzaW18VmVydHx2ZXJ0fGJzb2x8YnVsbHxidW1wfGNhcHN8Y2RvdHxuY3VwfHNjbkV8bmNhcHxuYnNwfG5hcEV8Q2RvdHxjZW50fHNkb3R8VmJhcnxuYW5nfHZCYXJ8Y2hjeXxNc2NyfG1zY3J8c2VjdHxzZW1pfENIY3l8TW9wZnxtb3BmfHNleHR8Y2lyY3xjaXJlfG1sZHJ8bWxjcHxjaXJFfGNvbXB8c2hjeXxTSGN5fHZBcnJ8dmFycnxjb25nfGNvcGZ8Q29wZnxjb3B5fENPUFl8bWFsdHxtYWxlfG1hY3J8bHZuRXxjc2NyfGx0cml8c2ltZXxsdGNjfHNpbWd8Q3NjcnxzaW1sfGNzdWJ8VXVtbHxsc3FifGxzaW18dXVtbHxjc3VwfExzY3J8bHNjcnx1dHJpfHNtaWR8bHBhcnxjdXBzfHNtdGV8bG96ZnxkYXJyfExvcGZ8VXNjcnxzb2xifGxvcGZ8c29wZnxTb3BmfGxuZXF8dXNjcnxzcGFyfGRBcnJ8bG5hcHxEYXJyfGRhc2h8U3FydHxMSmN5fGxqY3l8bEhhcnxkSGFyfFVwc2l8dXBzaXxkaWFtfGxlc2d8ZGpjeXxESmN5fGxlcXF8ZG9wZnxEb3BmfGRzY3J8RHNjcnxkc2N5fGxkc2h8bGRjYXxzcXVmfERTY3l8c3NjcnxTc2NyfGRzb2x8bGN1YnxsYXRlfHN0YXJ8U3RhcnxVb3BmfExhcnJ8bEFycnxsYXJyfHVvcGZ8ZHRyaXxkemN5fHN1YmV8c3ViRXxMYW5nfGxhbmd8S3Njcnxrc2NyfEtvcGZ8a29wZnxLSmN5fGtqY3l8S0hjeXxraGN5fERaY3l8ZWNpcnxlZG90fGVEb3R8SnNjcnxqc2NyfHN1Y2N8Sm9wZnxqb3BmfEVkb3R8dUhhcnxlbXNwfGVuc3B8SXVtbHxpdW1sfGVvcGZ8aXNpbnxJc2NyfGlzY3J8RW9wZnxlcGFyfHN1bmd8ZXBzaXxlc2NyfHN1cDF8c3VwMnxzdXAzfElvdGF8aW90YXxzdXBlfHN1cEV8SW9wZnxpb3BmfElPY3l8aW9jeXxFc2NyfGVzaW18RXNpbXxpbW9mfFVhcnJ8UVVPVHx1QXJyfHVhcnJ8ZXVtbHxJRWN5fGllY3l8SWRvdHxFdW1sfGV1cm98ZXhjbHxIc2NyfGhzY3J8SG9wZnxob3BmfFRTY3l8dHNjeXxUc2NyfGhiYXJ8dHNjcnxmbGF0fHRicmt8Zm5vZnxoQXJyfGhhcnJ8aGFsZnxmb3BmfEZvcGZ8dGRvdHxndm5FfGZvcmt8dHJpZXxndGNjfGZzY3J8RnNjcnxnZG90fGdzaW18R3Njcnxnc2NyfEdvcGZ8Z29wZnxnbmVxfEdkb3R8dG9zYXxnbmFwfFRvcGZ8dG9wZnxnZXFxfHRvZWF8R0pjeXxnamN5fHRpbnR8Z2VzbHxtaWR8U2ZyfGdnZ3x0b3B8Z2VzfGdsYXxnbEV8Z2xqfGdlcXxnbmV8Z0VsfGdlbHxnbkV8R2N5fGdjeXxnYXB8VGZyfHRmcnxUY3l8dGN5fEhhdHxUYXV8RmZyfHRhdXxUYWJ8aGZyfEhmcnxmZnJ8RmN5fGZjeXxpY3l8SWN5fGlmZnxFVEh8ZXRofGlmcnxJZnJ8RXRhfGV0YXxpbnR8SW50fFN1cHxzdXB8dWN5fFVjeXxTdW18c3VtfGpjeXxFTkd8dWZyfFVmcnxlbmd8SmN5fGpmcnxlbHN8ZWxsfGVnc3xFZnJ8ZWZyfEpmcnx1bWx8a2N5fEtjeXxFY3l8ZWN5fGtmcnxLZnJ8bGFwfFN1YnxzdWJ8bGF0fGxjeXxMY3l8bGVnfERvdHxkb3R8bEVnfGxlcXxsZXN8c3F1fGRpdnxkaWV8bGZyfExmcnxsZ0V8RGZyfGRmcnxEZWx8ZGVnfERjeXxkY3l8bG5lfGxuRXxzb2x8bG96fHNtdHxDdXB8bHJtfGN1cHxsc2h8THNofHNpbXxzaHl8bWFwfE1hcHxtY3l8TWN5fG1mcnxNZnJ8bWhvfGdmcnxHZnJ8c2ZyfGNpcnxDaGl8Y2hpfG5hcHxDZnJ8dmN5fFZjeXxjZnJ8U2N5fHNjeXxuY3l8TmN5fHZlZXxWZWV8Q2FwfGNhcHxuZnJ8c2NFfHNjZXxOZnJ8bmdlfG5nRXxuR2d8dmZyfFZmcnxuZ3R8Ym90fG5HdHxuaXN8bml2fFJzaHxyc2h8bmxlfG5sRXxibmV8QmZyfGJmcnxuTGx8bmx0fG5MdHxCY3l8YmN5fG5vdHxOb3R8cmxtfHdmcnxXZnJ8bnByfG5zY3xudW18b2N5fGFzdHxPY3l8b2ZyfHhmcnxYZnJ8T2ZyfG9ndHxvaG18YXBFfG9sdHxSaG98YXBlfHJob3xSZnJ8cmZyfG9yZHxSRUd8YW5nfHJlZ3xvcnZ8QW5kfGFuZHxBTVB8UmN5fGFtcHxBZnJ8eWN5fFljeXx5ZW58eWZyfFlmcnxyY3l8cGFyfHBjeXxQY3l8cGZyfFBmcnxwaGl8UGhpfGFmcnxBY3l8YWN5fHpjeXxaY3l8cGl2fGFjRXxhY2R8emZyfFpmcnxwcmV8cHJFfHBzaXxQc2l8cWZyfFFmcnx6d2p8T3J8Z2V8R2d8Z3R8Z2d8ZWx8b1N8bHR8THR8TFR8UmV8bGd8Z2x8ZWd8bmV8SW18aXR8bGV8RER8d3B8d3J8bnV8TnV8ZGR8bEV8U2N8c2N8cGl8UGl8ZWV8YWZ8bGx8TGx8cnh8Z0V8eGl8cG18WGl8aWN8cHJ8UHJ8aW58bml8bXB8bXV8YWN8TXV8b3J8YXB8R3R8R1R8aWkpO3wmKEFhY3V0ZXxBZ3JhdmV8QXRpbGRlfENjZWRpbHxFYWN1dGV8RWdyYXZlfElhY3V0ZXxJZ3JhdmV8TnRpbGRlfE9hY3V0ZXxPZ3JhdmV8T3NsYXNofE90aWxkZXxVYWN1dGV8VWdyYXZlfFlhY3V0ZXxhYWN1dGV8YWdyYXZlfGF0aWxkZXxicnZiYXJ8Y2NlZGlsfGN1cnJlbnxkaXZpZGV8ZWFjdXRlfGVncmF2ZXxmcmFjMTJ8ZnJhYzE0fGZyYWMzNHxpYWN1dGV8aWdyYXZlfGlxdWVzdHxtaWRkb3R8bnRpbGRlfG9hY3V0ZXxvZ3JhdmV8b3NsYXNofG90aWxkZXxwbHVzbW58dWFjdXRlfHVncmF2ZXx5YWN1dGV8QUVsaWd8QWNpcmN8QXJpbmd8RWNpcmN8SWNpcmN8T2NpcmN8VEhPUk58VWNpcmN8YWNpcmN8YWN1dGV8YWVsaWd8YXJpbmd8Y2VkaWx8ZWNpcmN8aWNpcmN8aWV4Y2x8bGFxdW98bWljcm98b2NpcmN8cG91bmR8cmFxdW98c3psaWd8dGhvcm58dGltZXN8dWNpcmN8QXVtbHxDT1BZfEV1bWx8SXVtbHxPdW1sfFFVT1R8VXVtbHxhdW1sfGNlbnR8Y29weXxldW1sfGl1bWx8bWFjcnxuYnNwfG9yZGZ8b3JkbXxvdW1sfHBhcmF8cXVvdHxzZWN0fHN1cDF8c3VwMnxzdXAzfHV1bWx8eXVtbHxBTVB8RVRIfFJFR3xhbXB8ZGVnfGV0aHxub3R8cmVnfHNoeXx1bWx8eWVufEdUfExUfGd0fGx0KSg/ITspKFs9YS16QS1aMC05XT8pfCYjKFswLTldKykoOz8pfCYjW3hYXShbYS1mQS1GMC05XSspKDs/KXwmKFswLTlhLXpBLVpdKykvZztcblx0dmFyIGRlY29kZU1hcCA9IHsnYWFjdXRlJzonXFx4RTEnLCdBYWN1dGUnOidcXHhDMScsJ2FicmV2ZSc6J1xcdTAxMDMnLCdBYnJldmUnOidcXHUwMTAyJywnYWMnOidcXHUyMjNFJywnYWNkJzonXFx1MjIzRicsJ2FjRSc6J1xcdTIyM0VcXHUwMzMzJywnYWNpcmMnOidcXHhFMicsJ0FjaXJjJzonXFx4QzInLCdhY3V0ZSc6J1xceEI0JywnYWN5JzonXFx1MDQzMCcsJ0FjeSc6J1xcdTA0MTAnLCdhZWxpZyc6J1xceEU2JywnQUVsaWcnOidcXHhDNicsJ2FmJzonXFx1MjA2MScsJ2Fmcic6J1xcdUQ4MzVcXHVERDFFJywnQWZyJzonXFx1RDgzNVxcdUREMDQnLCdhZ3JhdmUnOidcXHhFMCcsJ0FncmF2ZSc6J1xceEMwJywnYWxlZnN5bSc6J1xcdTIxMzUnLCdhbGVwaCc6J1xcdTIxMzUnLCdhbHBoYSc6J1xcdTAzQjEnLCdBbHBoYSc6J1xcdTAzOTEnLCdhbWFjcic6J1xcdTAxMDEnLCdBbWFjcic6J1xcdTAxMDAnLCdhbWFsZyc6J1xcdTJBM0YnLCdhbXAnOicmJywnQU1QJzonJicsJ2FuZCc6J1xcdTIyMjcnLCdBbmQnOidcXHUyQTUzJywnYW5kYW5kJzonXFx1MkE1NScsJ2FuZGQnOidcXHUyQTVDJywnYW5kc2xvcGUnOidcXHUyQTU4JywnYW5kdic6J1xcdTJBNUEnLCdhbmcnOidcXHUyMjIwJywnYW5nZSc6J1xcdTI5QTQnLCdhbmdsZSc6J1xcdTIyMjAnLCdhbmdtc2QnOidcXHUyMjIxJywnYW5nbXNkYWEnOidcXHUyOUE4JywnYW5nbXNkYWInOidcXHUyOUE5JywnYW5nbXNkYWMnOidcXHUyOUFBJywnYW5nbXNkYWQnOidcXHUyOUFCJywnYW5nbXNkYWUnOidcXHUyOUFDJywnYW5nbXNkYWYnOidcXHUyOUFEJywnYW5nbXNkYWcnOidcXHUyOUFFJywnYW5nbXNkYWgnOidcXHUyOUFGJywnYW5ncnQnOidcXHUyMjFGJywnYW5ncnR2Yic6J1xcdTIyQkUnLCdhbmdydHZiZCc6J1xcdTI5OUQnLCdhbmdzcGgnOidcXHUyMjIyJywnYW5nc3QnOidcXHhDNScsJ2FuZ3phcnInOidcXHUyMzdDJywnYW9nb24nOidcXHUwMTA1JywnQW9nb24nOidcXHUwMTA0JywnYW9wZic6J1xcdUQ4MzVcXHVERDUyJywnQW9wZic6J1xcdUQ4MzVcXHVERDM4JywnYXAnOidcXHUyMjQ4JywnYXBhY2lyJzonXFx1MkE2RicsJ2FwZSc6J1xcdTIyNEEnLCdhcEUnOidcXHUyQTcwJywnYXBpZCc6J1xcdTIyNEInLCdhcG9zJzonXFwnJywnQXBwbHlGdW5jdGlvbic6J1xcdTIwNjEnLCdhcHByb3gnOidcXHUyMjQ4JywnYXBwcm94ZXEnOidcXHUyMjRBJywnYXJpbmcnOidcXHhFNScsJ0FyaW5nJzonXFx4QzUnLCdhc2NyJzonXFx1RDgzNVxcdURDQjYnLCdBc2NyJzonXFx1RDgzNVxcdURDOUMnLCdBc3NpZ24nOidcXHUyMjU0JywnYXN0JzonKicsJ2FzeW1wJzonXFx1MjI0OCcsJ2FzeW1wZXEnOidcXHUyMjREJywnYXRpbGRlJzonXFx4RTMnLCdBdGlsZGUnOidcXHhDMycsJ2F1bWwnOidcXHhFNCcsJ0F1bWwnOidcXHhDNCcsJ2F3Y29uaW50JzonXFx1MjIzMycsJ2F3aW50JzonXFx1MkExMScsJ2JhY2tjb25nJzonXFx1MjI0QycsJ2JhY2tlcHNpbG9uJzonXFx1MDNGNicsJ2JhY2twcmltZSc6J1xcdTIwMzUnLCdiYWNrc2ltJzonXFx1MjIzRCcsJ2JhY2tzaW1lcSc6J1xcdTIyQ0QnLCdCYWNrc2xhc2gnOidcXHUyMjE2JywnQmFydic6J1xcdTJBRTcnLCdiYXJ2ZWUnOidcXHUyMkJEJywnYmFyd2VkJzonXFx1MjMwNScsJ0JhcndlZCc6J1xcdTIzMDYnLCdiYXJ3ZWRnZSc6J1xcdTIzMDUnLCdiYnJrJzonXFx1MjNCNScsJ2Jicmt0YnJrJzonXFx1MjNCNicsJ2Jjb25nJzonXFx1MjI0QycsJ2JjeSc6J1xcdTA0MzEnLCdCY3knOidcXHUwNDExJywnYmRxdW8nOidcXHUyMDFFJywnYmVjYXVzJzonXFx1MjIzNScsJ2JlY2F1c2UnOidcXHUyMjM1JywnQmVjYXVzZSc6J1xcdTIyMzUnLCdiZW1wdHl2JzonXFx1MjlCMCcsJ2JlcHNpJzonXFx1MDNGNicsJ2Jlcm5vdSc6J1xcdTIxMkMnLCdCZXJub3VsbGlzJzonXFx1MjEyQycsJ2JldGEnOidcXHUwM0IyJywnQmV0YSc6J1xcdTAzOTInLCdiZXRoJzonXFx1MjEzNicsJ2JldHdlZW4nOidcXHUyMjZDJywnYmZyJzonXFx1RDgzNVxcdUREMUYnLCdCZnInOidcXHVEODM1XFx1REQwNScsJ2JpZ2NhcCc6J1xcdTIyQzInLCdiaWdjaXJjJzonXFx1MjVFRicsJ2JpZ2N1cCc6J1xcdTIyQzMnLCdiaWdvZG90JzonXFx1MkEwMCcsJ2JpZ29wbHVzJzonXFx1MkEwMScsJ2JpZ290aW1lcyc6J1xcdTJBMDInLCdiaWdzcWN1cCc6J1xcdTJBMDYnLCdiaWdzdGFyJzonXFx1MjYwNScsJ2JpZ3RyaWFuZ2xlZG93bic6J1xcdTI1QkQnLCdiaWd0cmlhbmdsZXVwJzonXFx1MjVCMycsJ2JpZ3VwbHVzJzonXFx1MkEwNCcsJ2JpZ3ZlZSc6J1xcdTIyQzEnLCdiaWd3ZWRnZSc6J1xcdTIyQzAnLCdia2Fyb3cnOidcXHUyOTBEJywnYmxhY2tsb3plbmdlJzonXFx1MjlFQicsJ2JsYWNrc3F1YXJlJzonXFx1MjVBQScsJ2JsYWNrdHJpYW5nbGUnOidcXHUyNUI0JywnYmxhY2t0cmlhbmdsZWRvd24nOidcXHUyNUJFJywnYmxhY2t0cmlhbmdsZWxlZnQnOidcXHUyNUMyJywnYmxhY2t0cmlhbmdsZXJpZ2h0JzonXFx1MjVCOCcsJ2JsYW5rJzonXFx1MjQyMycsJ2JsazEyJzonXFx1MjU5MicsJ2JsazE0JzonXFx1MjU5MScsJ2JsazM0JzonXFx1MjU5MycsJ2Jsb2NrJzonXFx1MjU4OCcsJ2JuZSc6Jz1cXHUyMEU1JywnYm5lcXVpdic6J1xcdTIyNjFcXHUyMEU1JywnYm5vdCc6J1xcdTIzMTAnLCdiTm90JzonXFx1MkFFRCcsJ2JvcGYnOidcXHVEODM1XFx1REQ1MycsJ0JvcGYnOidcXHVEODM1XFx1REQzOScsJ2JvdCc6J1xcdTIyQTUnLCdib3R0b20nOidcXHUyMkE1JywnYm93dGllJzonXFx1MjJDOCcsJ2JveGJveCc6J1xcdTI5QzknLCdib3hkbCc6J1xcdTI1MTAnLCdib3hkTCc6J1xcdTI1NTUnLCdib3hEbCc6J1xcdTI1NTYnLCdib3hETCc6J1xcdTI1NTcnLCdib3hkcic6J1xcdTI1MEMnLCdib3hkUic6J1xcdTI1NTInLCdib3hEcic6J1xcdTI1NTMnLCdib3hEUic6J1xcdTI1NTQnLCdib3hoJzonXFx1MjUwMCcsJ2JveEgnOidcXHUyNTUwJywnYm94aGQnOidcXHUyNTJDJywnYm94aEQnOidcXHUyNTY1JywnYm94SGQnOidcXHUyNTY0JywnYm94SEQnOidcXHUyNTY2JywnYm94aHUnOidcXHUyNTM0JywnYm94aFUnOidcXHUyNTY4JywnYm94SHUnOidcXHUyNTY3JywnYm94SFUnOidcXHUyNTY5JywnYm94bWludXMnOidcXHUyMjlGJywnYm94cGx1cyc6J1xcdTIyOUUnLCdib3h0aW1lcyc6J1xcdTIyQTAnLCdib3h1bCc6J1xcdTI1MTgnLCdib3h1TCc6J1xcdTI1NUInLCdib3hVbCc6J1xcdTI1NUMnLCdib3hVTCc6J1xcdTI1NUQnLCdib3h1cic6J1xcdTI1MTQnLCdib3h1Uic6J1xcdTI1NTgnLCdib3hVcic6J1xcdTI1NTknLCdib3hVUic6J1xcdTI1NUEnLCdib3h2JzonXFx1MjUwMicsJ2JveFYnOidcXHUyNTUxJywnYm94dmgnOidcXHUyNTNDJywnYm94dkgnOidcXHUyNTZBJywnYm94VmgnOidcXHUyNTZCJywnYm94VkgnOidcXHUyNTZDJywnYm94dmwnOidcXHUyNTI0JywnYm94dkwnOidcXHUyNTYxJywnYm94VmwnOidcXHUyNTYyJywnYm94VkwnOidcXHUyNTYzJywnYm94dnInOidcXHUyNTFDJywnYm94dlInOidcXHUyNTVFJywnYm94VnInOidcXHUyNTVGJywnYm94VlInOidcXHUyNTYwJywnYnByaW1lJzonXFx1MjAzNScsJ2JyZXZlJzonXFx1MDJEOCcsJ0JyZXZlJzonXFx1MDJEOCcsJ2JydmJhcic6J1xceEE2JywnYnNjcic6J1xcdUQ4MzVcXHVEQ0I3JywnQnNjcic6J1xcdTIxMkMnLCdic2VtaSc6J1xcdTIwNEYnLCdic2ltJzonXFx1MjIzRCcsJ2JzaW1lJzonXFx1MjJDRCcsJ2Jzb2wnOidcXFxcJywnYnNvbGInOidcXHUyOUM1JywnYnNvbGhzdWInOidcXHUyN0M4JywnYnVsbCc6J1xcdTIwMjInLCdidWxsZXQnOidcXHUyMDIyJywnYnVtcCc6J1xcdTIyNEUnLCdidW1wZSc6J1xcdTIyNEYnLCdidW1wRSc6J1xcdTJBQUUnLCdidW1wZXEnOidcXHUyMjRGJywnQnVtcGVxJzonXFx1MjI0RScsJ2NhY3V0ZSc6J1xcdTAxMDcnLCdDYWN1dGUnOidcXHUwMTA2JywnY2FwJzonXFx1MjIyOScsJ0NhcCc6J1xcdTIyRDInLCdjYXBhbmQnOidcXHUyQTQ0JywnY2FwYnJjdXAnOidcXHUyQTQ5JywnY2FwY2FwJzonXFx1MkE0QicsJ2NhcGN1cCc6J1xcdTJBNDcnLCdjYXBkb3QnOidcXHUyQTQwJywnQ2FwaXRhbERpZmZlcmVudGlhbEQnOidcXHUyMTQ1JywnY2Fwcyc6J1xcdTIyMjlcXHVGRTAwJywnY2FyZXQnOidcXHUyMDQxJywnY2Fyb24nOidcXHUwMkM3JywnQ2F5bGV5cyc6J1xcdTIxMkQnLCdjY2Fwcyc6J1xcdTJBNEQnLCdjY2Fyb24nOidcXHUwMTBEJywnQ2Nhcm9uJzonXFx1MDEwQycsJ2NjZWRpbCc6J1xceEU3JywnQ2NlZGlsJzonXFx4QzcnLCdjY2lyYyc6J1xcdTAxMDknLCdDY2lyYyc6J1xcdTAxMDgnLCdDY29uaW50JzonXFx1MjIzMCcsJ2NjdXBzJzonXFx1MkE0QycsJ2NjdXBzc20nOidcXHUyQTUwJywnY2RvdCc6J1xcdTAxMEInLCdDZG90JzonXFx1MDEwQScsJ2NlZGlsJzonXFx4QjgnLCdDZWRpbGxhJzonXFx4QjgnLCdjZW1wdHl2JzonXFx1MjlCMicsJ2NlbnQnOidcXHhBMicsJ2NlbnRlcmRvdCc6J1xceEI3JywnQ2VudGVyRG90JzonXFx4QjcnLCdjZnInOidcXHVEODM1XFx1REQyMCcsJ0Nmcic6J1xcdTIxMkQnLCdjaGN5JzonXFx1MDQ0NycsJ0NIY3knOidcXHUwNDI3JywnY2hlY2snOidcXHUyNzEzJywnY2hlY2ttYXJrJzonXFx1MjcxMycsJ2NoaSc6J1xcdTAzQzcnLCdDaGknOidcXHUwM0E3JywnY2lyJzonXFx1MjVDQicsJ2NpcmMnOidcXHUwMkM2JywnY2lyY2VxJzonXFx1MjI1NycsJ2NpcmNsZWFycm93bGVmdCc6J1xcdTIxQkEnLCdjaXJjbGVhcnJvd3JpZ2h0JzonXFx1MjFCQicsJ2NpcmNsZWRhc3QnOidcXHUyMjlCJywnY2lyY2xlZGNpcmMnOidcXHUyMjlBJywnY2lyY2xlZGRhc2gnOidcXHUyMjlEJywnQ2lyY2xlRG90JzonXFx1MjI5OScsJ2NpcmNsZWRSJzonXFx4QUUnLCdjaXJjbGVkUyc6J1xcdTI0QzgnLCdDaXJjbGVNaW51cyc6J1xcdTIyOTYnLCdDaXJjbGVQbHVzJzonXFx1MjI5NScsJ0NpcmNsZVRpbWVzJzonXFx1MjI5NycsJ2NpcmUnOidcXHUyMjU3JywnY2lyRSc6J1xcdTI5QzMnLCdjaXJmbmludCc6J1xcdTJBMTAnLCdjaXJtaWQnOidcXHUyQUVGJywnY2lyc2Npcic6J1xcdTI5QzInLCdDbG9ja3dpc2VDb250b3VySW50ZWdyYWwnOidcXHUyMjMyJywnQ2xvc2VDdXJseURvdWJsZVF1b3RlJzonXFx1MjAxRCcsJ0Nsb3NlQ3VybHlRdW90ZSc6J1xcdTIwMTknLCdjbHVicyc6J1xcdTI2NjMnLCdjbHVic3VpdCc6J1xcdTI2NjMnLCdjb2xvbic6JzonLCdDb2xvbic6J1xcdTIyMzcnLCdjb2xvbmUnOidcXHUyMjU0JywnQ29sb25lJzonXFx1MkE3NCcsJ2NvbG9uZXEnOidcXHUyMjU0JywnY29tbWEnOicsJywnY29tbWF0JzonQCcsJ2NvbXAnOidcXHUyMjAxJywnY29tcGZuJzonXFx1MjIxOCcsJ2NvbXBsZW1lbnQnOidcXHUyMjAxJywnY29tcGxleGVzJzonXFx1MjEwMicsJ2NvbmcnOidcXHUyMjQ1JywnY29uZ2RvdCc6J1xcdTJBNkQnLCdDb25ncnVlbnQnOidcXHUyMjYxJywnY29uaW50JzonXFx1MjIyRScsJ0NvbmludCc6J1xcdTIyMkYnLCdDb250b3VySW50ZWdyYWwnOidcXHUyMjJFJywnY29wZic6J1xcdUQ4MzVcXHVERDU0JywnQ29wZic6J1xcdTIxMDInLCdjb3Byb2QnOidcXHUyMjEwJywnQ29wcm9kdWN0JzonXFx1MjIxMCcsJ2NvcHknOidcXHhBOScsJ0NPUFknOidcXHhBOScsJ2NvcHlzcic6J1xcdTIxMTcnLCdDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsJzonXFx1MjIzMycsJ2NyYXJyJzonXFx1MjFCNScsJ2Nyb3NzJzonXFx1MjcxNycsJ0Nyb3NzJzonXFx1MkEyRicsJ2NzY3InOidcXHVEODM1XFx1RENCOCcsJ0NzY3InOidcXHVEODM1XFx1REM5RScsJ2NzdWInOidcXHUyQUNGJywnY3N1YmUnOidcXHUyQUQxJywnY3N1cCc6J1xcdTJBRDAnLCdjc3VwZSc6J1xcdTJBRDInLCdjdGRvdCc6J1xcdTIyRUYnLCdjdWRhcnJsJzonXFx1MjkzOCcsJ2N1ZGFycnInOidcXHUyOTM1JywnY3VlcHInOidcXHUyMkRFJywnY3Vlc2MnOidcXHUyMkRGJywnY3VsYXJyJzonXFx1MjFCNicsJ2N1bGFycnAnOidcXHUyOTNEJywnY3VwJzonXFx1MjIyQScsJ0N1cCc6J1xcdTIyRDMnLCdjdXBicmNhcCc6J1xcdTJBNDgnLCdjdXBjYXAnOidcXHUyQTQ2JywnQ3VwQ2FwJzonXFx1MjI0RCcsJ2N1cGN1cCc6J1xcdTJBNEEnLCdjdXBkb3QnOidcXHUyMjhEJywnY3Vwb3InOidcXHUyQTQ1JywnY3Vwcyc6J1xcdTIyMkFcXHVGRTAwJywnY3VyYXJyJzonXFx1MjFCNycsJ2N1cmFycm0nOidcXHUyOTNDJywnY3VybHllcXByZWMnOidcXHUyMkRFJywnY3VybHllcXN1Y2MnOidcXHUyMkRGJywnY3VybHl2ZWUnOidcXHUyMkNFJywnY3VybHl3ZWRnZSc6J1xcdTIyQ0YnLCdjdXJyZW4nOidcXHhBNCcsJ2N1cnZlYXJyb3dsZWZ0JzonXFx1MjFCNicsJ2N1cnZlYXJyb3dyaWdodCc6J1xcdTIxQjcnLCdjdXZlZSc6J1xcdTIyQ0UnLCdjdXdlZCc6J1xcdTIyQ0YnLCdjd2NvbmludCc6J1xcdTIyMzInLCdjd2ludCc6J1xcdTIyMzEnLCdjeWxjdHknOidcXHUyMzJEJywnZGFnZ2VyJzonXFx1MjAyMCcsJ0RhZ2dlcic6J1xcdTIwMjEnLCdkYWxldGgnOidcXHUyMTM4JywnZGFycic6J1xcdTIxOTMnLCdkQXJyJzonXFx1MjFEMycsJ0RhcnInOidcXHUyMUExJywnZGFzaCc6J1xcdTIwMTAnLCdkYXNodic6J1xcdTIyQTMnLCdEYXNodic6J1xcdTJBRTQnLCdkYmthcm93JzonXFx1MjkwRicsJ2RibGFjJzonXFx1MDJERCcsJ2RjYXJvbic6J1xcdTAxMEYnLCdEY2Fyb24nOidcXHUwMTBFJywnZGN5JzonXFx1MDQzNCcsJ0RjeSc6J1xcdTA0MTQnLCdkZCc6J1xcdTIxNDYnLCdERCc6J1xcdTIxNDUnLCdkZGFnZ2VyJzonXFx1MjAyMScsJ2RkYXJyJzonXFx1MjFDQScsJ0REb3RyYWhkJzonXFx1MjkxMScsJ2Rkb3RzZXEnOidcXHUyQTc3JywnZGVnJzonXFx4QjAnLCdEZWwnOidcXHUyMjA3JywnZGVsdGEnOidcXHUwM0I0JywnRGVsdGEnOidcXHUwMzk0JywnZGVtcHR5dic6J1xcdTI5QjEnLCdkZmlzaHQnOidcXHUyOTdGJywnZGZyJzonXFx1RDgzNVxcdUREMjEnLCdEZnInOidcXHVEODM1XFx1REQwNycsJ2RIYXInOidcXHUyOTY1JywnZGhhcmwnOidcXHUyMUMzJywnZGhhcnInOidcXHUyMUMyJywnRGlhY3JpdGljYWxBY3V0ZSc6J1xceEI0JywnRGlhY3JpdGljYWxEb3QnOidcXHUwMkQ5JywnRGlhY3JpdGljYWxEb3VibGVBY3V0ZSc6J1xcdTAyREQnLCdEaWFjcml0aWNhbEdyYXZlJzonYCcsJ0RpYWNyaXRpY2FsVGlsZGUnOidcXHUwMkRDJywnZGlhbSc6J1xcdTIyQzQnLCdkaWFtb25kJzonXFx1MjJDNCcsJ0RpYW1vbmQnOidcXHUyMkM0JywnZGlhbW9uZHN1aXQnOidcXHUyNjY2JywnZGlhbXMnOidcXHUyNjY2JywnZGllJzonXFx4QTgnLCdEaWZmZXJlbnRpYWxEJzonXFx1MjE0NicsJ2RpZ2FtbWEnOidcXHUwM0REJywnZGlzaW4nOidcXHUyMkYyJywnZGl2JzonXFx4RjcnLCdkaXZpZGUnOidcXHhGNycsJ2RpdmlkZW9udGltZXMnOidcXHUyMkM3JywnZGl2b254JzonXFx1MjJDNycsJ2RqY3knOidcXHUwNDUyJywnREpjeSc6J1xcdTA0MDInLCdkbGNvcm4nOidcXHUyMzFFJywnZGxjcm9wJzonXFx1MjMwRCcsJ2RvbGxhcic6JyQnLCdkb3BmJzonXFx1RDgzNVxcdURENTUnLCdEb3BmJzonXFx1RDgzNVxcdUREM0InLCdkb3QnOidcXHUwMkQ5JywnRG90JzonXFx4QTgnLCdEb3REb3QnOidcXHUyMERDJywnZG90ZXEnOidcXHUyMjUwJywnZG90ZXFkb3QnOidcXHUyMjUxJywnRG90RXF1YWwnOidcXHUyMjUwJywnZG90bWludXMnOidcXHUyMjM4JywnZG90cGx1cyc6J1xcdTIyMTQnLCdkb3RzcXVhcmUnOidcXHUyMkExJywnZG91YmxlYmFyd2VkZ2UnOidcXHUyMzA2JywnRG91YmxlQ29udG91ckludGVncmFsJzonXFx1MjIyRicsJ0RvdWJsZURvdCc6J1xceEE4JywnRG91YmxlRG93bkFycm93JzonXFx1MjFEMycsJ0RvdWJsZUxlZnRBcnJvdyc6J1xcdTIxRDAnLCdEb3VibGVMZWZ0UmlnaHRBcnJvdyc6J1xcdTIxRDQnLCdEb3VibGVMZWZ0VGVlJzonXFx1MkFFNCcsJ0RvdWJsZUxvbmdMZWZ0QXJyb3cnOidcXHUyN0Y4JywnRG91YmxlTG9uZ0xlZnRSaWdodEFycm93JzonXFx1MjdGQScsJ0RvdWJsZUxvbmdSaWdodEFycm93JzonXFx1MjdGOScsJ0RvdWJsZVJpZ2h0QXJyb3cnOidcXHUyMUQyJywnRG91YmxlUmlnaHRUZWUnOidcXHUyMkE4JywnRG91YmxlVXBBcnJvdyc6J1xcdTIxRDEnLCdEb3VibGVVcERvd25BcnJvdyc6J1xcdTIxRDUnLCdEb3VibGVWZXJ0aWNhbEJhcic6J1xcdTIyMjUnLCdkb3duYXJyb3cnOidcXHUyMTkzJywnRG93bmFycm93JzonXFx1MjFEMycsJ0Rvd25BcnJvdyc6J1xcdTIxOTMnLCdEb3duQXJyb3dCYXInOidcXHUyOTEzJywnRG93bkFycm93VXBBcnJvdyc6J1xcdTIxRjUnLCdEb3duQnJldmUnOidcXHUwMzExJywnZG93bmRvd25hcnJvd3MnOidcXHUyMUNBJywnZG93bmhhcnBvb25sZWZ0JzonXFx1MjFDMycsJ2Rvd25oYXJwb29ucmlnaHQnOidcXHUyMUMyJywnRG93bkxlZnRSaWdodFZlY3Rvcic6J1xcdTI5NTAnLCdEb3duTGVmdFRlZVZlY3Rvcic6J1xcdTI5NUUnLCdEb3duTGVmdFZlY3Rvcic6J1xcdTIxQkQnLCdEb3duTGVmdFZlY3RvckJhcic6J1xcdTI5NTYnLCdEb3duUmlnaHRUZWVWZWN0b3InOidcXHUyOTVGJywnRG93blJpZ2h0VmVjdG9yJzonXFx1MjFDMScsJ0Rvd25SaWdodFZlY3RvckJhcic6J1xcdTI5NTcnLCdEb3duVGVlJzonXFx1MjJBNCcsJ0Rvd25UZWVBcnJvdyc6J1xcdTIxQTcnLCdkcmJrYXJvdyc6J1xcdTI5MTAnLCdkcmNvcm4nOidcXHUyMzFGJywnZHJjcm9wJzonXFx1MjMwQycsJ2RzY3InOidcXHVEODM1XFx1RENCOScsJ0RzY3InOidcXHVEODM1XFx1REM5RicsJ2RzY3knOidcXHUwNDU1JywnRFNjeSc6J1xcdTA0MDUnLCdkc29sJzonXFx1MjlGNicsJ2RzdHJvayc6J1xcdTAxMTEnLCdEc3Ryb2snOidcXHUwMTEwJywnZHRkb3QnOidcXHUyMkYxJywnZHRyaSc6J1xcdTI1QkYnLCdkdHJpZic6J1xcdTI1QkUnLCdkdWFycic6J1xcdTIxRjUnLCdkdWhhcic6J1xcdTI5NkYnLCdkd2FuZ2xlJzonXFx1MjlBNicsJ2R6Y3knOidcXHUwNDVGJywnRFpjeSc6J1xcdTA0MEYnLCdkemlncmFycic6J1xcdTI3RkYnLCdlYWN1dGUnOidcXHhFOScsJ0VhY3V0ZSc6J1xceEM5JywnZWFzdGVyJzonXFx1MkE2RScsJ2VjYXJvbic6J1xcdTAxMUInLCdFY2Fyb24nOidcXHUwMTFBJywnZWNpcic6J1xcdTIyNTYnLCdlY2lyYyc6J1xceEVBJywnRWNpcmMnOidcXHhDQScsJ2Vjb2xvbic6J1xcdTIyNTUnLCdlY3knOidcXHUwNDREJywnRWN5JzonXFx1MDQyRCcsJ2VERG90JzonXFx1MkE3NycsJ2Vkb3QnOidcXHUwMTE3JywnZURvdCc6J1xcdTIyNTEnLCdFZG90JzonXFx1MDExNicsJ2VlJzonXFx1MjE0NycsJ2VmRG90JzonXFx1MjI1MicsJ2Vmcic6J1xcdUQ4MzVcXHVERDIyJywnRWZyJzonXFx1RDgzNVxcdUREMDgnLCdlZyc6J1xcdTJBOUEnLCdlZ3JhdmUnOidcXHhFOCcsJ0VncmF2ZSc6J1xceEM4JywnZWdzJzonXFx1MkE5NicsJ2Vnc2RvdCc6J1xcdTJBOTgnLCdlbCc6J1xcdTJBOTknLCdFbGVtZW50JzonXFx1MjIwOCcsJ2VsaW50ZXJzJzonXFx1MjNFNycsJ2VsbCc6J1xcdTIxMTMnLCdlbHMnOidcXHUyQTk1JywnZWxzZG90JzonXFx1MkE5NycsJ2VtYWNyJzonXFx1MDExMycsJ0VtYWNyJzonXFx1MDExMicsJ2VtcHR5JzonXFx1MjIwNScsJ2VtcHR5c2V0JzonXFx1MjIwNScsJ0VtcHR5U21hbGxTcXVhcmUnOidcXHUyNUZCJywnZW1wdHl2JzonXFx1MjIwNScsJ0VtcHR5VmVyeVNtYWxsU3F1YXJlJzonXFx1MjVBQicsJ2Vtc3AnOidcXHUyMDAzJywnZW1zcDEzJzonXFx1MjAwNCcsJ2Vtc3AxNCc6J1xcdTIwMDUnLCdlbmcnOidcXHUwMTRCJywnRU5HJzonXFx1MDE0QScsJ2Vuc3AnOidcXHUyMDAyJywnZW9nb24nOidcXHUwMTE5JywnRW9nb24nOidcXHUwMTE4JywnZW9wZic6J1xcdUQ4MzVcXHVERDU2JywnRW9wZic6J1xcdUQ4MzVcXHVERDNDJywnZXBhcic6J1xcdTIyRDUnLCdlcGFyc2wnOidcXHUyOUUzJywnZXBsdXMnOidcXHUyQTcxJywnZXBzaSc6J1xcdTAzQjUnLCdlcHNpbG9uJzonXFx1MDNCNScsJ0Vwc2lsb24nOidcXHUwMzk1JywnZXBzaXYnOidcXHUwM0Y1JywnZXFjaXJjJzonXFx1MjI1NicsJ2VxY29sb24nOidcXHUyMjU1JywnZXFzaW0nOidcXHUyMjQyJywnZXFzbGFudGd0cic6J1xcdTJBOTYnLCdlcXNsYW50bGVzcyc6J1xcdTJBOTUnLCdFcXVhbCc6J1xcdTJBNzUnLCdlcXVhbHMnOic9JywnRXF1YWxUaWxkZSc6J1xcdTIyNDInLCdlcXVlc3QnOidcXHUyMjVGJywnRXF1aWxpYnJpdW0nOidcXHUyMUNDJywnZXF1aXYnOidcXHUyMjYxJywnZXF1aXZERCc6J1xcdTJBNzgnLCdlcXZwYXJzbCc6J1xcdTI5RTUnLCdlcmFycic6J1xcdTI5NzEnLCdlckRvdCc6J1xcdTIyNTMnLCdlc2NyJzonXFx1MjEyRicsJ0VzY3InOidcXHUyMTMwJywnZXNkb3QnOidcXHUyMjUwJywnZXNpbSc6J1xcdTIyNDInLCdFc2ltJzonXFx1MkE3MycsJ2V0YSc6J1xcdTAzQjcnLCdFdGEnOidcXHUwMzk3JywnZXRoJzonXFx4RjAnLCdFVEgnOidcXHhEMCcsJ2V1bWwnOidcXHhFQicsJ0V1bWwnOidcXHhDQicsJ2V1cm8nOidcXHUyMEFDJywnZXhjbCc6JyEnLCdleGlzdCc6J1xcdTIyMDMnLCdFeGlzdHMnOidcXHUyMjAzJywnZXhwZWN0YXRpb24nOidcXHUyMTMwJywnZXhwb25lbnRpYWxlJzonXFx1MjE0NycsJ0V4cG9uZW50aWFsRSc6J1xcdTIxNDcnLCdmYWxsaW5nZG90c2VxJzonXFx1MjI1MicsJ2ZjeSc6J1xcdTA0NDQnLCdGY3knOidcXHUwNDI0JywnZmVtYWxlJzonXFx1MjY0MCcsJ2ZmaWxpZyc6J1xcdUZCMDMnLCdmZmxpZyc6J1xcdUZCMDAnLCdmZmxsaWcnOidcXHVGQjA0JywnZmZyJzonXFx1RDgzNVxcdUREMjMnLCdGZnInOidcXHVEODM1XFx1REQwOScsJ2ZpbGlnJzonXFx1RkIwMScsJ0ZpbGxlZFNtYWxsU3F1YXJlJzonXFx1MjVGQycsJ0ZpbGxlZFZlcnlTbWFsbFNxdWFyZSc6J1xcdTI1QUEnLCdmamxpZyc6J2ZqJywnZmxhdCc6J1xcdTI2NkQnLCdmbGxpZyc6J1xcdUZCMDInLCdmbHRucyc6J1xcdTI1QjEnLCdmbm9mJzonXFx1MDE5MicsJ2ZvcGYnOidcXHVEODM1XFx1REQ1NycsJ0ZvcGYnOidcXHVEODM1XFx1REQzRCcsJ2ZvcmFsbCc6J1xcdTIyMDAnLCdGb3JBbGwnOidcXHUyMjAwJywnZm9yayc6J1xcdTIyRDQnLCdmb3Jrdic6J1xcdTJBRDknLCdGb3VyaWVydHJmJzonXFx1MjEzMScsJ2ZwYXJ0aW50JzonXFx1MkEwRCcsJ2ZyYWMxMic6J1xceEJEJywnZnJhYzEzJzonXFx1MjE1MycsJ2ZyYWMxNCc6J1xceEJDJywnZnJhYzE1JzonXFx1MjE1NScsJ2ZyYWMxNic6J1xcdTIxNTknLCdmcmFjMTgnOidcXHUyMTVCJywnZnJhYzIzJzonXFx1MjE1NCcsJ2ZyYWMyNSc6J1xcdTIxNTYnLCdmcmFjMzQnOidcXHhCRScsJ2ZyYWMzNSc6J1xcdTIxNTcnLCdmcmFjMzgnOidcXHUyMTVDJywnZnJhYzQ1JzonXFx1MjE1OCcsJ2ZyYWM1Nic6J1xcdTIxNUEnLCdmcmFjNTgnOidcXHUyMTVEJywnZnJhYzc4JzonXFx1MjE1RScsJ2ZyYXNsJzonXFx1MjA0NCcsJ2Zyb3duJzonXFx1MjMyMicsJ2ZzY3InOidcXHVEODM1XFx1RENCQicsJ0ZzY3InOidcXHUyMTMxJywnZ2FjdXRlJzonXFx1MDFGNScsJ2dhbW1hJzonXFx1MDNCMycsJ0dhbW1hJzonXFx1MDM5MycsJ2dhbW1hZCc6J1xcdTAzREQnLCdHYW1tYWQnOidcXHUwM0RDJywnZ2FwJzonXFx1MkE4NicsJ2dicmV2ZSc6J1xcdTAxMUYnLCdHYnJldmUnOidcXHUwMTFFJywnR2NlZGlsJzonXFx1MDEyMicsJ2djaXJjJzonXFx1MDExRCcsJ0djaXJjJzonXFx1MDExQycsJ2djeSc6J1xcdTA0MzMnLCdHY3knOidcXHUwNDEzJywnZ2RvdCc6J1xcdTAxMjEnLCdHZG90JzonXFx1MDEyMCcsJ2dlJzonXFx1MjI2NScsJ2dFJzonXFx1MjI2NycsJ2dlbCc6J1xcdTIyREInLCdnRWwnOidcXHUyQThDJywnZ2VxJzonXFx1MjI2NScsJ2dlcXEnOidcXHUyMjY3JywnZ2Vxc2xhbnQnOidcXHUyQTdFJywnZ2VzJzonXFx1MkE3RScsJ2dlc2NjJzonXFx1MkFBOScsJ2dlc2RvdCc6J1xcdTJBODAnLCdnZXNkb3RvJzonXFx1MkE4MicsJ2dlc2RvdG9sJzonXFx1MkE4NCcsJ2dlc2wnOidcXHUyMkRCXFx1RkUwMCcsJ2dlc2xlcyc6J1xcdTJBOTQnLCdnZnInOidcXHVEODM1XFx1REQyNCcsJ0dmcic6J1xcdUQ4MzVcXHVERDBBJywnZ2cnOidcXHUyMjZCJywnR2cnOidcXHUyMkQ5JywnZ2dnJzonXFx1MjJEOScsJ2dpbWVsJzonXFx1MjEzNycsJ2dqY3knOidcXHUwNDUzJywnR0pjeSc6J1xcdTA0MDMnLCdnbCc6J1xcdTIyNzcnLCdnbGEnOidcXHUyQUE1JywnZ2xFJzonXFx1MkE5MicsJ2dsaic6J1xcdTJBQTQnLCdnbmFwJzonXFx1MkE4QScsJ2duYXBwcm94JzonXFx1MkE4QScsJ2duZSc6J1xcdTJBODgnLCdnbkUnOidcXHUyMjY5JywnZ25lcSc6J1xcdTJBODgnLCdnbmVxcSc6J1xcdTIyNjknLCdnbnNpbSc6J1xcdTIyRTcnLCdnb3BmJzonXFx1RDgzNVxcdURENTgnLCdHb3BmJzonXFx1RDgzNVxcdUREM0UnLCdncmF2ZSc6J2AnLCdHcmVhdGVyRXF1YWwnOidcXHUyMjY1JywnR3JlYXRlckVxdWFsTGVzcyc6J1xcdTIyREInLCdHcmVhdGVyRnVsbEVxdWFsJzonXFx1MjI2NycsJ0dyZWF0ZXJHcmVhdGVyJzonXFx1MkFBMicsJ0dyZWF0ZXJMZXNzJzonXFx1MjI3NycsJ0dyZWF0ZXJTbGFudEVxdWFsJzonXFx1MkE3RScsJ0dyZWF0ZXJUaWxkZSc6J1xcdTIyNzMnLCdnc2NyJzonXFx1MjEwQScsJ0dzY3InOidcXHVEODM1XFx1RENBMicsJ2dzaW0nOidcXHUyMjczJywnZ3NpbWUnOidcXHUyQThFJywnZ3NpbWwnOidcXHUyQTkwJywnZ3QnOic+JywnR3QnOidcXHUyMjZCJywnR1QnOic+JywnZ3RjYyc6J1xcdTJBQTcnLCdndGNpcic6J1xcdTJBN0EnLCdndGRvdCc6J1xcdTIyRDcnLCdndGxQYXInOidcXHUyOTk1JywnZ3RxdWVzdCc6J1xcdTJBN0MnLCdndHJhcHByb3gnOidcXHUyQTg2JywnZ3RyYXJyJzonXFx1Mjk3OCcsJ2d0cmRvdCc6J1xcdTIyRDcnLCdndHJlcWxlc3MnOidcXHUyMkRCJywnZ3RyZXFxbGVzcyc6J1xcdTJBOEMnLCdndHJsZXNzJzonXFx1MjI3NycsJ2d0cnNpbSc6J1xcdTIyNzMnLCdndmVydG5lcXEnOidcXHUyMjY5XFx1RkUwMCcsJ2d2bkUnOidcXHUyMjY5XFx1RkUwMCcsJ0hhY2VrJzonXFx1MDJDNycsJ2hhaXJzcCc6J1xcdTIwMEEnLCdoYWxmJzonXFx4QkQnLCdoYW1pbHQnOidcXHUyMTBCJywnaGFyZGN5JzonXFx1MDQ0QScsJ0hBUkRjeSc6J1xcdTA0MkEnLCdoYXJyJzonXFx1MjE5NCcsJ2hBcnInOidcXHUyMUQ0JywnaGFycmNpcic6J1xcdTI5NDgnLCdoYXJydyc6J1xcdTIxQUQnLCdIYXQnOideJywnaGJhcic6J1xcdTIxMEYnLCdoY2lyYyc6J1xcdTAxMjUnLCdIY2lyYyc6J1xcdTAxMjQnLCdoZWFydHMnOidcXHUyNjY1JywnaGVhcnRzdWl0JzonXFx1MjY2NScsJ2hlbGxpcCc6J1xcdTIwMjYnLCdoZXJjb24nOidcXHUyMkI5JywnaGZyJzonXFx1RDgzNVxcdUREMjUnLCdIZnInOidcXHUyMTBDJywnSGlsYmVydFNwYWNlJzonXFx1MjEwQicsJ2hrc2Vhcm93JzonXFx1MjkyNScsJ2hrc3dhcm93JzonXFx1MjkyNicsJ2hvYXJyJzonXFx1MjFGRicsJ2hvbXRodCc6J1xcdTIyM0InLCdob29rbGVmdGFycm93JzonXFx1MjFBOScsJ2hvb2tyaWdodGFycm93JzonXFx1MjFBQScsJ2hvcGYnOidcXHVEODM1XFx1REQ1OScsJ0hvcGYnOidcXHUyMTBEJywnaG9yYmFyJzonXFx1MjAxNScsJ0hvcml6b250YWxMaW5lJzonXFx1MjUwMCcsJ2hzY3InOidcXHVEODM1XFx1RENCRCcsJ0hzY3InOidcXHUyMTBCJywnaHNsYXNoJzonXFx1MjEwRicsJ2hzdHJvayc6J1xcdTAxMjcnLCdIc3Ryb2snOidcXHUwMTI2JywnSHVtcERvd25IdW1wJzonXFx1MjI0RScsJ0h1bXBFcXVhbCc6J1xcdTIyNEYnLCdoeWJ1bGwnOidcXHUyMDQzJywnaHlwaGVuJzonXFx1MjAxMCcsJ2lhY3V0ZSc6J1xceEVEJywnSWFjdXRlJzonXFx4Q0QnLCdpYyc6J1xcdTIwNjMnLCdpY2lyYyc6J1xceEVFJywnSWNpcmMnOidcXHhDRScsJ2ljeSc6J1xcdTA0MzgnLCdJY3knOidcXHUwNDE4JywnSWRvdCc6J1xcdTAxMzAnLCdpZWN5JzonXFx1MDQzNScsJ0lFY3knOidcXHUwNDE1JywnaWV4Y2wnOidcXHhBMScsJ2lmZic6J1xcdTIxRDQnLCdpZnInOidcXHVEODM1XFx1REQyNicsJ0lmcic6J1xcdTIxMTEnLCdpZ3JhdmUnOidcXHhFQycsJ0lncmF2ZSc6J1xceENDJywnaWknOidcXHUyMTQ4JywnaWlpaW50JzonXFx1MkEwQycsJ2lpaW50JzonXFx1MjIyRCcsJ2lpbmZpbic6J1xcdTI5REMnLCdpaW90YSc6J1xcdTIxMjknLCdpamxpZyc6J1xcdTAxMzMnLCdJSmxpZyc6J1xcdTAxMzInLCdJbSc6J1xcdTIxMTEnLCdpbWFjcic6J1xcdTAxMkInLCdJbWFjcic6J1xcdTAxMkEnLCdpbWFnZSc6J1xcdTIxMTEnLCdJbWFnaW5hcnlJJzonXFx1MjE0OCcsJ2ltYWdsaW5lJzonXFx1MjExMCcsJ2ltYWdwYXJ0JzonXFx1MjExMScsJ2ltYXRoJzonXFx1MDEzMScsJ2ltb2YnOidcXHUyMkI3JywnaW1wZWQnOidcXHUwMUI1JywnSW1wbGllcyc6J1xcdTIxRDInLCdpbic6J1xcdTIyMDgnLCdpbmNhcmUnOidcXHUyMTA1JywnaW5maW4nOidcXHUyMjFFJywnaW5maW50aWUnOidcXHUyOUREJywnaW5vZG90JzonXFx1MDEzMScsJ2ludCc6J1xcdTIyMkInLCdJbnQnOidcXHUyMjJDJywnaW50Y2FsJzonXFx1MjJCQScsJ2ludGVnZXJzJzonXFx1MjEyNCcsJ0ludGVncmFsJzonXFx1MjIyQicsJ2ludGVyY2FsJzonXFx1MjJCQScsJ0ludGVyc2VjdGlvbic6J1xcdTIyQzInLCdpbnRsYXJoayc6J1xcdTJBMTcnLCdpbnRwcm9kJzonXFx1MkEzQycsJ0ludmlzaWJsZUNvbW1hJzonXFx1MjA2MycsJ0ludmlzaWJsZVRpbWVzJzonXFx1MjA2MicsJ2lvY3knOidcXHUwNDUxJywnSU9jeSc6J1xcdTA0MDEnLCdpb2dvbic6J1xcdTAxMkYnLCdJb2dvbic6J1xcdTAxMkUnLCdpb3BmJzonXFx1RDgzNVxcdURENUEnLCdJb3BmJzonXFx1RDgzNVxcdURENDAnLCdpb3RhJzonXFx1MDNCOScsJ0lvdGEnOidcXHUwMzk5JywnaXByb2QnOidcXHUyQTNDJywnaXF1ZXN0JzonXFx4QkYnLCdpc2NyJzonXFx1RDgzNVxcdURDQkUnLCdJc2NyJzonXFx1MjExMCcsJ2lzaW4nOidcXHUyMjA4JywnaXNpbmRvdCc6J1xcdTIyRjUnLCdpc2luRSc6J1xcdTIyRjknLCdpc2lucyc6J1xcdTIyRjQnLCdpc2luc3YnOidcXHUyMkYzJywnaXNpbnYnOidcXHUyMjA4JywnaXQnOidcXHUyMDYyJywnaXRpbGRlJzonXFx1MDEyOScsJ0l0aWxkZSc6J1xcdTAxMjgnLCdpdWtjeSc6J1xcdTA0NTYnLCdJdWtjeSc6J1xcdTA0MDYnLCdpdW1sJzonXFx4RUYnLCdJdW1sJzonXFx4Q0YnLCdqY2lyYyc6J1xcdTAxMzUnLCdKY2lyYyc6J1xcdTAxMzQnLCdqY3knOidcXHUwNDM5JywnSmN5JzonXFx1MDQxOScsJ2pmcic6J1xcdUQ4MzVcXHVERDI3JywnSmZyJzonXFx1RDgzNVxcdUREMEQnLCdqbWF0aCc6J1xcdTAyMzcnLCdqb3BmJzonXFx1RDgzNVxcdURENUInLCdKb3BmJzonXFx1RDgzNVxcdURENDEnLCdqc2NyJzonXFx1RDgzNVxcdURDQkYnLCdKc2NyJzonXFx1RDgzNVxcdURDQTUnLCdqc2VyY3knOidcXHUwNDU4JywnSnNlcmN5JzonXFx1MDQwOCcsJ2p1a2N5JzonXFx1MDQ1NCcsJ0p1a2N5JzonXFx1MDQwNCcsJ2thcHBhJzonXFx1MDNCQScsJ0thcHBhJzonXFx1MDM5QScsJ2thcHBhdic6J1xcdTAzRjAnLCdrY2VkaWwnOidcXHUwMTM3JywnS2NlZGlsJzonXFx1MDEzNicsJ2tjeSc6J1xcdTA0M0EnLCdLY3knOidcXHUwNDFBJywna2ZyJzonXFx1RDgzNVxcdUREMjgnLCdLZnInOidcXHVEODM1XFx1REQwRScsJ2tncmVlbic6J1xcdTAxMzgnLCdraGN5JzonXFx1MDQ0NScsJ0tIY3knOidcXHUwNDI1Jywna2pjeSc6J1xcdTA0NUMnLCdLSmN5JzonXFx1MDQwQycsJ2tvcGYnOidcXHVEODM1XFx1REQ1QycsJ0tvcGYnOidcXHVEODM1XFx1REQ0MicsJ2tzY3InOidcXHVEODM1XFx1RENDMCcsJ0tzY3InOidcXHVEODM1XFx1RENBNicsJ2xBYXJyJzonXFx1MjFEQScsJ2xhY3V0ZSc6J1xcdTAxM0EnLCdMYWN1dGUnOidcXHUwMTM5JywnbGFlbXB0eXYnOidcXHUyOUI0JywnbGFncmFuJzonXFx1MjExMicsJ2xhbWJkYSc6J1xcdTAzQkInLCdMYW1iZGEnOidcXHUwMzlCJywnbGFuZyc6J1xcdTI3RTgnLCdMYW5nJzonXFx1MjdFQScsJ2xhbmdkJzonXFx1Mjk5MScsJ2xhbmdsZSc6J1xcdTI3RTgnLCdsYXAnOidcXHUyQTg1JywnTGFwbGFjZXRyZic6J1xcdTIxMTInLCdsYXF1byc6J1xceEFCJywnbGFycic6J1xcdTIxOTAnLCdsQXJyJzonXFx1MjFEMCcsJ0xhcnInOidcXHUyMTlFJywnbGFycmInOidcXHUyMUU0JywnbGFycmJmcyc6J1xcdTI5MUYnLCdsYXJyZnMnOidcXHUyOTFEJywnbGFycmhrJzonXFx1MjFBOScsJ2xhcnJscCc6J1xcdTIxQUInLCdsYXJycGwnOidcXHUyOTM5JywnbGFycnNpbSc6J1xcdTI5NzMnLCdsYXJydGwnOidcXHUyMUEyJywnbGF0JzonXFx1MkFBQicsJ2xhdGFpbCc6J1xcdTI5MTknLCdsQXRhaWwnOidcXHUyOTFCJywnbGF0ZSc6J1xcdTJBQUQnLCdsYXRlcyc6J1xcdTJBQURcXHVGRTAwJywnbGJhcnInOidcXHUyOTBDJywnbEJhcnInOidcXHUyOTBFJywnbGJicmsnOidcXHUyNzcyJywnbGJyYWNlJzoneycsJ2xicmFjayc6J1snLCdsYnJrZSc6J1xcdTI5OEInLCdsYnJrc2xkJzonXFx1Mjk4RicsJ2xicmtzbHUnOidcXHUyOThEJywnbGNhcm9uJzonXFx1MDEzRScsJ0xjYXJvbic6J1xcdTAxM0QnLCdsY2VkaWwnOidcXHUwMTNDJywnTGNlZGlsJzonXFx1MDEzQicsJ2xjZWlsJzonXFx1MjMwOCcsJ2xjdWInOid7JywnbGN5JzonXFx1MDQzQicsJ0xjeSc6J1xcdTA0MUInLCdsZGNhJzonXFx1MjkzNicsJ2xkcXVvJzonXFx1MjAxQycsJ2xkcXVvcic6J1xcdTIwMUUnLCdsZHJkaGFyJzonXFx1Mjk2NycsJ2xkcnVzaGFyJzonXFx1Mjk0QicsJ2xkc2gnOidcXHUyMUIyJywnbGUnOidcXHUyMjY0JywnbEUnOidcXHUyMjY2JywnTGVmdEFuZ2xlQnJhY2tldCc6J1xcdTI3RTgnLCdsZWZ0YXJyb3cnOidcXHUyMTkwJywnTGVmdGFycm93JzonXFx1MjFEMCcsJ0xlZnRBcnJvdyc6J1xcdTIxOTAnLCdMZWZ0QXJyb3dCYXInOidcXHUyMUU0JywnTGVmdEFycm93UmlnaHRBcnJvdyc6J1xcdTIxQzYnLCdsZWZ0YXJyb3d0YWlsJzonXFx1MjFBMicsJ0xlZnRDZWlsaW5nJzonXFx1MjMwOCcsJ0xlZnREb3VibGVCcmFja2V0JzonXFx1MjdFNicsJ0xlZnREb3duVGVlVmVjdG9yJzonXFx1Mjk2MScsJ0xlZnREb3duVmVjdG9yJzonXFx1MjFDMycsJ0xlZnREb3duVmVjdG9yQmFyJzonXFx1Mjk1OScsJ0xlZnRGbG9vcic6J1xcdTIzMEEnLCdsZWZ0aGFycG9vbmRvd24nOidcXHUyMUJEJywnbGVmdGhhcnBvb251cCc6J1xcdTIxQkMnLCdsZWZ0bGVmdGFycm93cyc6J1xcdTIxQzcnLCdsZWZ0cmlnaHRhcnJvdyc6J1xcdTIxOTQnLCdMZWZ0cmlnaHRhcnJvdyc6J1xcdTIxRDQnLCdMZWZ0UmlnaHRBcnJvdyc6J1xcdTIxOTQnLCdsZWZ0cmlnaHRhcnJvd3MnOidcXHUyMUM2JywnbGVmdHJpZ2h0aGFycG9vbnMnOidcXHUyMUNCJywnbGVmdHJpZ2h0c3F1aWdhcnJvdyc6J1xcdTIxQUQnLCdMZWZ0UmlnaHRWZWN0b3InOidcXHUyOTRFJywnTGVmdFRlZSc6J1xcdTIyQTMnLCdMZWZ0VGVlQXJyb3cnOidcXHUyMUE0JywnTGVmdFRlZVZlY3Rvcic6J1xcdTI5NUEnLCdsZWZ0dGhyZWV0aW1lcyc6J1xcdTIyQ0InLCdMZWZ0VHJpYW5nbGUnOidcXHUyMkIyJywnTGVmdFRyaWFuZ2xlQmFyJzonXFx1MjlDRicsJ0xlZnRUcmlhbmdsZUVxdWFsJzonXFx1MjJCNCcsJ0xlZnRVcERvd25WZWN0b3InOidcXHUyOTUxJywnTGVmdFVwVGVlVmVjdG9yJzonXFx1Mjk2MCcsJ0xlZnRVcFZlY3Rvcic6J1xcdTIxQkYnLCdMZWZ0VXBWZWN0b3JCYXInOidcXHUyOTU4JywnTGVmdFZlY3Rvcic6J1xcdTIxQkMnLCdMZWZ0VmVjdG9yQmFyJzonXFx1Mjk1MicsJ2xlZyc6J1xcdTIyREEnLCdsRWcnOidcXHUyQThCJywnbGVxJzonXFx1MjI2NCcsJ2xlcXEnOidcXHUyMjY2JywnbGVxc2xhbnQnOidcXHUyQTdEJywnbGVzJzonXFx1MkE3RCcsJ2xlc2NjJzonXFx1MkFBOCcsJ2xlc2RvdCc6J1xcdTJBN0YnLCdsZXNkb3RvJzonXFx1MkE4MScsJ2xlc2RvdG9yJzonXFx1MkE4MycsJ2xlc2cnOidcXHUyMkRBXFx1RkUwMCcsJ2xlc2dlcyc6J1xcdTJBOTMnLCdsZXNzYXBwcm94JzonXFx1MkE4NScsJ2xlc3Nkb3QnOidcXHUyMkQ2JywnbGVzc2VxZ3RyJzonXFx1MjJEQScsJ2xlc3NlcXFndHInOidcXHUyQThCJywnTGVzc0VxdWFsR3JlYXRlcic6J1xcdTIyREEnLCdMZXNzRnVsbEVxdWFsJzonXFx1MjI2NicsJ0xlc3NHcmVhdGVyJzonXFx1MjI3NicsJ2xlc3NndHInOidcXHUyMjc2JywnTGVzc0xlc3MnOidcXHUyQUExJywnbGVzc3NpbSc6J1xcdTIyNzInLCdMZXNzU2xhbnRFcXVhbCc6J1xcdTJBN0QnLCdMZXNzVGlsZGUnOidcXHUyMjcyJywnbGZpc2h0JzonXFx1Mjk3QycsJ2xmbG9vcic6J1xcdTIzMEEnLCdsZnInOidcXHVEODM1XFx1REQyOScsJ0xmcic6J1xcdUQ4MzVcXHVERDBGJywnbGcnOidcXHUyMjc2JywnbGdFJzonXFx1MkE5MScsJ2xIYXInOidcXHUyOTYyJywnbGhhcmQnOidcXHUyMUJEJywnbGhhcnUnOidcXHUyMUJDJywnbGhhcnVsJzonXFx1Mjk2QScsJ2xoYmxrJzonXFx1MjU4NCcsJ2xqY3knOidcXHUwNDU5JywnTEpjeSc6J1xcdTA0MDknLCdsbCc6J1xcdTIyNkEnLCdMbCc6J1xcdTIyRDgnLCdsbGFycic6J1xcdTIxQzcnLCdsbGNvcm5lcic6J1xcdTIzMUUnLCdMbGVmdGFycm93JzonXFx1MjFEQScsJ2xsaGFyZCc6J1xcdTI5NkInLCdsbHRyaSc6J1xcdTI1RkEnLCdsbWlkb3QnOidcXHUwMTQwJywnTG1pZG90JzonXFx1MDEzRicsJ2xtb3VzdCc6J1xcdTIzQjAnLCdsbW91c3RhY2hlJzonXFx1MjNCMCcsJ2xuYXAnOidcXHUyQTg5JywnbG5hcHByb3gnOidcXHUyQTg5JywnbG5lJzonXFx1MkE4NycsJ2xuRSc6J1xcdTIyNjgnLCdsbmVxJzonXFx1MkE4NycsJ2xuZXFxJzonXFx1MjI2OCcsJ2xuc2ltJzonXFx1MjJFNicsJ2xvYW5nJzonXFx1MjdFQycsJ2xvYXJyJzonXFx1MjFGRCcsJ2xvYnJrJzonXFx1MjdFNicsJ2xvbmdsZWZ0YXJyb3cnOidcXHUyN0Y1JywnTG9uZ2xlZnRhcnJvdyc6J1xcdTI3RjgnLCdMb25nTGVmdEFycm93JzonXFx1MjdGNScsJ2xvbmdsZWZ0cmlnaHRhcnJvdyc6J1xcdTI3RjcnLCdMb25nbGVmdHJpZ2h0YXJyb3cnOidcXHUyN0ZBJywnTG9uZ0xlZnRSaWdodEFycm93JzonXFx1MjdGNycsJ2xvbmdtYXBzdG8nOidcXHUyN0ZDJywnbG9uZ3JpZ2h0YXJyb3cnOidcXHUyN0Y2JywnTG9uZ3JpZ2h0YXJyb3cnOidcXHUyN0Y5JywnTG9uZ1JpZ2h0QXJyb3cnOidcXHUyN0Y2JywnbG9vcGFycm93bGVmdCc6J1xcdTIxQUInLCdsb29wYXJyb3dyaWdodCc6J1xcdTIxQUMnLCdsb3Bhcic6J1xcdTI5ODUnLCdsb3BmJzonXFx1RDgzNVxcdURENUQnLCdMb3BmJzonXFx1RDgzNVxcdURENDMnLCdsb3BsdXMnOidcXHUyQTJEJywnbG90aW1lcyc6J1xcdTJBMzQnLCdsb3dhc3QnOidcXHUyMjE3JywnbG93YmFyJzonXycsJ0xvd2VyTGVmdEFycm93JzonXFx1MjE5OScsJ0xvd2VyUmlnaHRBcnJvdyc6J1xcdTIxOTgnLCdsb3onOidcXHUyNUNBJywnbG96ZW5nZSc6J1xcdTI1Q0EnLCdsb3pmJzonXFx1MjlFQicsJ2xwYXInOicoJywnbHBhcmx0JzonXFx1Mjk5MycsJ2xyYXJyJzonXFx1MjFDNicsJ2xyY29ybmVyJzonXFx1MjMxRicsJ2xyaGFyJzonXFx1MjFDQicsJ2xyaGFyZCc6J1xcdTI5NkQnLCdscm0nOidcXHUyMDBFJywnbHJ0cmknOidcXHUyMkJGJywnbHNhcXVvJzonXFx1MjAzOScsJ2xzY3InOidcXHVEODM1XFx1RENDMScsJ0xzY3InOidcXHUyMTEyJywnbHNoJzonXFx1MjFCMCcsJ0xzaCc6J1xcdTIxQjAnLCdsc2ltJzonXFx1MjI3MicsJ2xzaW1lJzonXFx1MkE4RCcsJ2xzaW1nJzonXFx1MkE4RicsJ2xzcWInOidbJywnbHNxdW8nOidcXHUyMDE4JywnbHNxdW9yJzonXFx1MjAxQScsJ2xzdHJvayc6J1xcdTAxNDInLCdMc3Ryb2snOidcXHUwMTQxJywnbHQnOic8JywnTHQnOidcXHUyMjZBJywnTFQnOic8JywnbHRjYyc6J1xcdTJBQTYnLCdsdGNpcic6J1xcdTJBNzknLCdsdGRvdCc6J1xcdTIyRDYnLCdsdGhyZWUnOidcXHUyMkNCJywnbHRpbWVzJzonXFx1MjJDOScsJ2x0bGFycic6J1xcdTI5NzYnLCdsdHF1ZXN0JzonXFx1MkE3QicsJ2x0cmknOidcXHUyNUMzJywnbHRyaWUnOidcXHUyMkI0JywnbHRyaWYnOidcXHUyNUMyJywnbHRyUGFyJzonXFx1Mjk5NicsJ2x1cmRzaGFyJzonXFx1Mjk0QScsJ2x1cnVoYXInOidcXHUyOTY2JywnbHZlcnRuZXFxJzonXFx1MjI2OFxcdUZFMDAnLCdsdm5FJzonXFx1MjI2OFxcdUZFMDAnLCdtYWNyJzonXFx4QUYnLCdtYWxlJzonXFx1MjY0MicsJ21hbHQnOidcXHUyNzIwJywnbWFsdGVzZSc6J1xcdTI3MjAnLCdtYXAnOidcXHUyMUE2JywnTWFwJzonXFx1MjkwNScsJ21hcHN0byc6J1xcdTIxQTYnLCdtYXBzdG9kb3duJzonXFx1MjFBNycsJ21hcHN0b2xlZnQnOidcXHUyMUE0JywnbWFwc3RvdXAnOidcXHUyMUE1JywnbWFya2VyJzonXFx1MjVBRScsJ21jb21tYSc6J1xcdTJBMjknLCdtY3knOidcXHUwNDNDJywnTWN5JzonXFx1MDQxQycsJ21kYXNoJzonXFx1MjAxNCcsJ21ERG90JzonXFx1MjIzQScsJ21lYXN1cmVkYW5nbGUnOidcXHUyMjIxJywnTWVkaXVtU3BhY2UnOidcXHUyMDVGJywnTWVsbGludHJmJzonXFx1MjEzMycsJ21mcic6J1xcdUQ4MzVcXHVERDJBJywnTWZyJzonXFx1RDgzNVxcdUREMTAnLCdtaG8nOidcXHUyMTI3JywnbWljcm8nOidcXHhCNScsJ21pZCc6J1xcdTIyMjMnLCdtaWRhc3QnOicqJywnbWlkY2lyJzonXFx1MkFGMCcsJ21pZGRvdCc6J1xceEI3JywnbWludXMnOidcXHUyMjEyJywnbWludXNiJzonXFx1MjI5RicsJ21pbnVzZCc6J1xcdTIyMzgnLCdtaW51c2R1JzonXFx1MkEyQScsJ01pbnVzUGx1cyc6J1xcdTIyMTMnLCdtbGNwJzonXFx1MkFEQicsJ21sZHInOidcXHUyMDI2JywnbW5wbHVzJzonXFx1MjIxMycsJ21vZGVscyc6J1xcdTIyQTcnLCdtb3BmJzonXFx1RDgzNVxcdURENUUnLCdNb3BmJzonXFx1RDgzNVxcdURENDQnLCdtcCc6J1xcdTIyMTMnLCdtc2NyJzonXFx1RDgzNVxcdURDQzInLCdNc2NyJzonXFx1MjEzMycsJ21zdHBvcyc6J1xcdTIyM0UnLCdtdSc6J1xcdTAzQkMnLCdNdSc6J1xcdTAzOUMnLCdtdWx0aW1hcCc6J1xcdTIyQjgnLCdtdW1hcCc6J1xcdTIyQjgnLCduYWJsYSc6J1xcdTIyMDcnLCduYWN1dGUnOidcXHUwMTQ0JywnTmFjdXRlJzonXFx1MDE0MycsJ25hbmcnOidcXHUyMjIwXFx1MjBEMicsJ25hcCc6J1xcdTIyNDknLCduYXBFJzonXFx1MkE3MFxcdTAzMzgnLCduYXBpZCc6J1xcdTIyNEJcXHUwMzM4JywnbmFwb3MnOidcXHUwMTQ5JywnbmFwcHJveCc6J1xcdTIyNDknLCduYXR1cic6J1xcdTI2NkUnLCduYXR1cmFsJzonXFx1MjY2RScsJ25hdHVyYWxzJzonXFx1MjExNScsJ25ic3AnOidcXHhBMCcsJ25idW1wJzonXFx1MjI0RVxcdTAzMzgnLCduYnVtcGUnOidcXHUyMjRGXFx1MDMzOCcsJ25jYXAnOidcXHUyQTQzJywnbmNhcm9uJzonXFx1MDE0OCcsJ05jYXJvbic6J1xcdTAxNDcnLCduY2VkaWwnOidcXHUwMTQ2JywnTmNlZGlsJzonXFx1MDE0NScsJ25jb25nJzonXFx1MjI0NycsJ25jb25nZG90JzonXFx1MkE2RFxcdTAzMzgnLCduY3VwJzonXFx1MkE0MicsJ25jeSc6J1xcdTA0M0QnLCdOY3knOidcXHUwNDFEJywnbmRhc2gnOidcXHUyMDEzJywnbmUnOidcXHUyMjYwJywnbmVhcmhrJzonXFx1MjkyNCcsJ25lYXJyJzonXFx1MjE5NycsJ25lQXJyJzonXFx1MjFENycsJ25lYXJyb3cnOidcXHUyMTk3JywnbmVkb3QnOidcXHUyMjUwXFx1MDMzOCcsJ05lZ2F0aXZlTWVkaXVtU3BhY2UnOidcXHUyMDBCJywnTmVnYXRpdmVUaGlja1NwYWNlJzonXFx1MjAwQicsJ05lZ2F0aXZlVGhpblNwYWNlJzonXFx1MjAwQicsJ05lZ2F0aXZlVmVyeVRoaW5TcGFjZSc6J1xcdTIwMEInLCduZXF1aXYnOidcXHUyMjYyJywnbmVzZWFyJzonXFx1MjkyOCcsJ25lc2ltJzonXFx1MjI0MlxcdTAzMzgnLCdOZXN0ZWRHcmVhdGVyR3JlYXRlcic6J1xcdTIyNkInLCdOZXN0ZWRMZXNzTGVzcyc6J1xcdTIyNkEnLCdOZXdMaW5lJzonXFxuJywnbmV4aXN0JzonXFx1MjIwNCcsJ25leGlzdHMnOidcXHUyMjA0JywnbmZyJzonXFx1RDgzNVxcdUREMkInLCdOZnInOidcXHVEODM1XFx1REQxMScsJ25nZSc6J1xcdTIyNzEnLCduZ0UnOidcXHUyMjY3XFx1MDMzOCcsJ25nZXEnOidcXHUyMjcxJywnbmdlcXEnOidcXHUyMjY3XFx1MDMzOCcsJ25nZXFzbGFudCc6J1xcdTJBN0VcXHUwMzM4Jywnbmdlcyc6J1xcdTJBN0VcXHUwMzM4JywnbkdnJzonXFx1MjJEOVxcdTAzMzgnLCduZ3NpbSc6J1xcdTIyNzUnLCduZ3QnOidcXHUyMjZGJywnbkd0JzonXFx1MjI2QlxcdTIwRDInLCduZ3RyJzonXFx1MjI2RicsJ25HdHYnOidcXHUyMjZCXFx1MDMzOCcsJ25oYXJyJzonXFx1MjFBRScsJ25oQXJyJzonXFx1MjFDRScsJ25ocGFyJzonXFx1MkFGMicsJ25pJzonXFx1MjIwQicsJ25pcyc6J1xcdTIyRkMnLCduaXNkJzonXFx1MjJGQScsJ25pdic6J1xcdTIyMEInLCduamN5JzonXFx1MDQ1QScsJ05KY3knOidcXHUwNDBBJywnbmxhcnInOidcXHUyMTlBJywnbmxBcnInOidcXHUyMUNEJywnbmxkcic6J1xcdTIwMjUnLCdubGUnOidcXHUyMjcwJywnbmxFJzonXFx1MjI2NlxcdTAzMzgnLCdubGVmdGFycm93JzonXFx1MjE5QScsJ25MZWZ0YXJyb3cnOidcXHUyMUNEJywnbmxlZnRyaWdodGFycm93JzonXFx1MjFBRScsJ25MZWZ0cmlnaHRhcnJvdyc6J1xcdTIxQ0UnLCdubGVxJzonXFx1MjI3MCcsJ25sZXFxJzonXFx1MjI2NlxcdTAzMzgnLCdubGVxc2xhbnQnOidcXHUyQTdEXFx1MDMzOCcsJ25sZXMnOidcXHUyQTdEXFx1MDMzOCcsJ25sZXNzJzonXFx1MjI2RScsJ25MbCc6J1xcdTIyRDhcXHUwMzM4JywnbmxzaW0nOidcXHUyMjc0Jywnbmx0JzonXFx1MjI2RScsJ25MdCc6J1xcdTIyNkFcXHUyMEQyJywnbmx0cmknOidcXHUyMkVBJywnbmx0cmllJzonXFx1MjJFQycsJ25MdHYnOidcXHUyMjZBXFx1MDMzOCcsJ25taWQnOidcXHUyMjI0JywnTm9CcmVhayc6J1xcdTIwNjAnLCdOb25CcmVha2luZ1NwYWNlJzonXFx4QTAnLCdub3BmJzonXFx1RDgzNVxcdURENUYnLCdOb3BmJzonXFx1MjExNScsJ25vdCc6J1xceEFDJywnTm90JzonXFx1MkFFQycsJ05vdENvbmdydWVudCc6J1xcdTIyNjInLCdOb3RDdXBDYXAnOidcXHUyMjZEJywnTm90RG91YmxlVmVydGljYWxCYXInOidcXHUyMjI2JywnTm90RWxlbWVudCc6J1xcdTIyMDknLCdOb3RFcXVhbCc6J1xcdTIyNjAnLCdOb3RFcXVhbFRpbGRlJzonXFx1MjI0MlxcdTAzMzgnLCdOb3RFeGlzdHMnOidcXHUyMjA0JywnTm90R3JlYXRlcic6J1xcdTIyNkYnLCdOb3RHcmVhdGVyRXF1YWwnOidcXHUyMjcxJywnTm90R3JlYXRlckZ1bGxFcXVhbCc6J1xcdTIyNjdcXHUwMzM4JywnTm90R3JlYXRlckdyZWF0ZXInOidcXHUyMjZCXFx1MDMzOCcsJ05vdEdyZWF0ZXJMZXNzJzonXFx1MjI3OScsJ05vdEdyZWF0ZXJTbGFudEVxdWFsJzonXFx1MkE3RVxcdTAzMzgnLCdOb3RHcmVhdGVyVGlsZGUnOidcXHUyMjc1JywnTm90SHVtcERvd25IdW1wJzonXFx1MjI0RVxcdTAzMzgnLCdOb3RIdW1wRXF1YWwnOidcXHUyMjRGXFx1MDMzOCcsJ25vdGluJzonXFx1MjIwOScsJ25vdGluZG90JzonXFx1MjJGNVxcdTAzMzgnLCdub3RpbkUnOidcXHUyMkY5XFx1MDMzOCcsJ25vdGludmEnOidcXHUyMjA5Jywnbm90aW52Yic6J1xcdTIyRjcnLCdub3RpbnZjJzonXFx1MjJGNicsJ05vdExlZnRUcmlhbmdsZSc6J1xcdTIyRUEnLCdOb3RMZWZ0VHJpYW5nbGVCYXInOidcXHUyOUNGXFx1MDMzOCcsJ05vdExlZnRUcmlhbmdsZUVxdWFsJzonXFx1MjJFQycsJ05vdExlc3MnOidcXHUyMjZFJywnTm90TGVzc0VxdWFsJzonXFx1MjI3MCcsJ05vdExlc3NHcmVhdGVyJzonXFx1MjI3OCcsJ05vdExlc3NMZXNzJzonXFx1MjI2QVxcdTAzMzgnLCdOb3RMZXNzU2xhbnRFcXVhbCc6J1xcdTJBN0RcXHUwMzM4JywnTm90TGVzc1RpbGRlJzonXFx1MjI3NCcsJ05vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyJzonXFx1MkFBMlxcdTAzMzgnLCdOb3ROZXN0ZWRMZXNzTGVzcyc6J1xcdTJBQTFcXHUwMzM4Jywnbm90bmknOidcXHUyMjBDJywnbm90bml2YSc6J1xcdTIyMEMnLCdub3RuaXZiJzonXFx1MjJGRScsJ25vdG5pdmMnOidcXHUyMkZEJywnTm90UHJlY2VkZXMnOidcXHUyMjgwJywnTm90UHJlY2VkZXNFcXVhbCc6J1xcdTJBQUZcXHUwMzM4JywnTm90UHJlY2VkZXNTbGFudEVxdWFsJzonXFx1MjJFMCcsJ05vdFJldmVyc2VFbGVtZW50JzonXFx1MjIwQycsJ05vdFJpZ2h0VHJpYW5nbGUnOidcXHUyMkVCJywnTm90UmlnaHRUcmlhbmdsZUJhcic6J1xcdTI5RDBcXHUwMzM4JywnTm90UmlnaHRUcmlhbmdsZUVxdWFsJzonXFx1MjJFRCcsJ05vdFNxdWFyZVN1YnNldCc6J1xcdTIyOEZcXHUwMzM4JywnTm90U3F1YXJlU3Vic2V0RXF1YWwnOidcXHUyMkUyJywnTm90U3F1YXJlU3VwZXJzZXQnOidcXHUyMjkwXFx1MDMzOCcsJ05vdFNxdWFyZVN1cGVyc2V0RXF1YWwnOidcXHUyMkUzJywnTm90U3Vic2V0JzonXFx1MjI4MlxcdTIwRDInLCdOb3RTdWJzZXRFcXVhbCc6J1xcdTIyODgnLCdOb3RTdWNjZWVkcyc6J1xcdTIyODEnLCdOb3RTdWNjZWVkc0VxdWFsJzonXFx1MkFCMFxcdTAzMzgnLCdOb3RTdWNjZWVkc1NsYW50RXF1YWwnOidcXHUyMkUxJywnTm90U3VjY2VlZHNUaWxkZSc6J1xcdTIyN0ZcXHUwMzM4JywnTm90U3VwZXJzZXQnOidcXHUyMjgzXFx1MjBEMicsJ05vdFN1cGVyc2V0RXF1YWwnOidcXHUyMjg5JywnTm90VGlsZGUnOidcXHUyMjQxJywnTm90VGlsZGVFcXVhbCc6J1xcdTIyNDQnLCdOb3RUaWxkZUZ1bGxFcXVhbCc6J1xcdTIyNDcnLCdOb3RUaWxkZVRpbGRlJzonXFx1MjI0OScsJ05vdFZlcnRpY2FsQmFyJzonXFx1MjIyNCcsJ25wYXInOidcXHUyMjI2JywnbnBhcmFsbGVsJzonXFx1MjIyNicsJ25wYXJzbCc6J1xcdTJBRkRcXHUyMEU1JywnbnBhcnQnOidcXHUyMjAyXFx1MDMzOCcsJ25wb2xpbnQnOidcXHUyQTE0JywnbnByJzonXFx1MjI4MCcsJ25wcmN1ZSc6J1xcdTIyRTAnLCducHJlJzonXFx1MkFBRlxcdTAzMzgnLCducHJlYyc6J1xcdTIyODAnLCducHJlY2VxJzonXFx1MkFBRlxcdTAzMzgnLCducmFycic6J1xcdTIxOUInLCduckFycic6J1xcdTIxQ0YnLCducmFycmMnOidcXHUyOTMzXFx1MDMzOCcsJ25yYXJydyc6J1xcdTIxOURcXHUwMzM4JywnbnJpZ2h0YXJyb3cnOidcXHUyMTlCJywnblJpZ2h0YXJyb3cnOidcXHUyMUNGJywnbnJ0cmknOidcXHUyMkVCJywnbnJ0cmllJzonXFx1MjJFRCcsJ25zYyc6J1xcdTIyODEnLCduc2NjdWUnOidcXHUyMkUxJywnbnNjZSc6J1xcdTJBQjBcXHUwMzM4JywnbnNjcic6J1xcdUQ4MzVcXHVEQ0MzJywnTnNjcic6J1xcdUQ4MzVcXHVEQ0E5JywnbnNob3J0bWlkJzonXFx1MjIyNCcsJ25zaG9ydHBhcmFsbGVsJzonXFx1MjIyNicsJ25zaW0nOidcXHUyMjQxJywnbnNpbWUnOidcXHUyMjQ0JywnbnNpbWVxJzonXFx1MjI0NCcsJ25zbWlkJzonXFx1MjIyNCcsJ25zcGFyJzonXFx1MjIyNicsJ25zcXN1YmUnOidcXHUyMkUyJywnbnNxc3VwZSc6J1xcdTIyRTMnLCduc3ViJzonXFx1MjI4NCcsJ25zdWJlJzonXFx1MjI4OCcsJ25zdWJFJzonXFx1MkFDNVxcdTAzMzgnLCduc3Vic2V0JzonXFx1MjI4MlxcdTIwRDInLCduc3Vic2V0ZXEnOidcXHUyMjg4JywnbnN1YnNldGVxcSc6J1xcdTJBQzVcXHUwMzM4JywnbnN1Y2MnOidcXHUyMjgxJywnbnN1Y2NlcSc6J1xcdTJBQjBcXHUwMzM4JywnbnN1cCc6J1xcdTIyODUnLCduc3VwZSc6J1xcdTIyODknLCduc3VwRSc6J1xcdTJBQzZcXHUwMzM4JywnbnN1cHNldCc6J1xcdTIyODNcXHUyMEQyJywnbnN1cHNldGVxJzonXFx1MjI4OScsJ25zdXBzZXRlcXEnOidcXHUyQUM2XFx1MDMzOCcsJ250Z2wnOidcXHUyMjc5JywnbnRpbGRlJzonXFx4RjEnLCdOdGlsZGUnOidcXHhEMScsJ250bGcnOidcXHUyMjc4JywnbnRyaWFuZ2xlbGVmdCc6J1xcdTIyRUEnLCdudHJpYW5nbGVsZWZ0ZXEnOidcXHUyMkVDJywnbnRyaWFuZ2xlcmlnaHQnOidcXHUyMkVCJywnbnRyaWFuZ2xlcmlnaHRlcSc6J1xcdTIyRUQnLCdudSc6J1xcdTAzQkQnLCdOdSc6J1xcdTAzOUQnLCdudW0nOicjJywnbnVtZXJvJzonXFx1MjExNicsJ251bXNwJzonXFx1MjAwNycsJ252YXAnOidcXHUyMjREXFx1MjBEMicsJ252ZGFzaCc6J1xcdTIyQUMnLCdudkRhc2gnOidcXHUyMkFEJywnblZkYXNoJzonXFx1MjJBRScsJ25WRGFzaCc6J1xcdTIyQUYnLCdudmdlJzonXFx1MjI2NVxcdTIwRDInLCdudmd0JzonPlxcdTIwRDInLCdudkhhcnInOidcXHUyOTA0JywnbnZpbmZpbic6J1xcdTI5REUnLCdudmxBcnInOidcXHUyOTAyJywnbnZsZSc6J1xcdTIyNjRcXHUyMEQyJywnbnZsdCc6JzxcXHUyMEQyJywnbnZsdHJpZSc6J1xcdTIyQjRcXHUyMEQyJywnbnZyQXJyJzonXFx1MjkwMycsJ252cnRyaWUnOidcXHUyMkI1XFx1MjBEMicsJ252c2ltJzonXFx1MjIzQ1xcdTIwRDInLCdud2FyaGsnOidcXHUyOTIzJywnbndhcnInOidcXHUyMTk2JywnbndBcnInOidcXHUyMUQ2JywnbndhcnJvdyc6J1xcdTIxOTYnLCdud25lYXInOidcXHUyOTI3Jywnb2FjdXRlJzonXFx4RjMnLCdPYWN1dGUnOidcXHhEMycsJ29hc3QnOidcXHUyMjlCJywnb2Npcic6J1xcdTIyOUEnLCdvY2lyYyc6J1xceEY0JywnT2NpcmMnOidcXHhENCcsJ29jeSc6J1xcdTA0M0UnLCdPY3knOidcXHUwNDFFJywnb2Rhc2gnOidcXHUyMjlEJywnb2RibGFjJzonXFx1MDE1MScsJ09kYmxhYyc6J1xcdTAxNTAnLCdvZGl2JzonXFx1MkEzOCcsJ29kb3QnOidcXHUyMjk5Jywnb2Rzb2xkJzonXFx1MjlCQycsJ29lbGlnJzonXFx1MDE1MycsJ09FbGlnJzonXFx1MDE1MicsJ29mY2lyJzonXFx1MjlCRicsJ29mcic6J1xcdUQ4MzVcXHVERDJDJywnT2ZyJzonXFx1RDgzNVxcdUREMTInLCdvZ29uJzonXFx1MDJEQicsJ29ncmF2ZSc6J1xceEYyJywnT2dyYXZlJzonXFx4RDInLCdvZ3QnOidcXHUyOUMxJywnb2hiYXInOidcXHUyOUI1Jywnb2htJzonXFx1MDNBOScsJ29pbnQnOidcXHUyMjJFJywnb2xhcnInOidcXHUyMUJBJywnb2xjaXInOidcXHUyOUJFJywnb2xjcm9zcyc6J1xcdTI5QkInLCdvbGluZSc6J1xcdTIwM0UnLCdvbHQnOidcXHUyOUMwJywnb21hY3InOidcXHUwMTREJywnT21hY3InOidcXHUwMTRDJywnb21lZ2EnOidcXHUwM0M5JywnT21lZ2EnOidcXHUwM0E5Jywnb21pY3Jvbic6J1xcdTAzQkYnLCdPbWljcm9uJzonXFx1MDM5RicsJ29taWQnOidcXHUyOUI2Jywnb21pbnVzJzonXFx1MjI5NicsJ29vcGYnOidcXHVEODM1XFx1REQ2MCcsJ09vcGYnOidcXHVEODM1XFx1REQ0NicsJ29wYXInOidcXHUyOUI3JywnT3BlbkN1cmx5RG91YmxlUXVvdGUnOidcXHUyMDFDJywnT3BlbkN1cmx5UXVvdGUnOidcXHUyMDE4Jywnb3BlcnAnOidcXHUyOUI5Jywnb3BsdXMnOidcXHUyMjk1Jywnb3InOidcXHUyMjI4JywnT3InOidcXHUyQTU0Jywnb3JhcnInOidcXHUyMUJCJywnb3JkJzonXFx1MkE1RCcsJ29yZGVyJzonXFx1MjEzNCcsJ29yZGVyb2YnOidcXHUyMTM0Jywnb3JkZic6J1xceEFBJywnb3JkbSc6J1xceEJBJywnb3JpZ29mJzonXFx1MjJCNicsJ29yb3InOidcXHUyQTU2Jywnb3JzbG9wZSc6J1xcdTJBNTcnLCdvcnYnOidcXHUyQTVCJywnb1MnOidcXHUyNEM4Jywnb3Njcic6J1xcdTIxMzQnLCdPc2NyJzonXFx1RDgzNVxcdURDQUEnLCdvc2xhc2gnOidcXHhGOCcsJ09zbGFzaCc6J1xceEQ4Jywnb3NvbCc6J1xcdTIyOTgnLCdvdGlsZGUnOidcXHhGNScsJ090aWxkZSc6J1xceEQ1Jywnb3RpbWVzJzonXFx1MjI5NycsJ090aW1lcyc6J1xcdTJBMzcnLCdvdGltZXNhcyc6J1xcdTJBMzYnLCdvdW1sJzonXFx4RjYnLCdPdW1sJzonXFx4RDYnLCdvdmJhcic6J1xcdTIzM0QnLCdPdmVyQmFyJzonXFx1MjAzRScsJ092ZXJCcmFjZSc6J1xcdTIzREUnLCdPdmVyQnJhY2tldCc6J1xcdTIzQjQnLCdPdmVyUGFyZW50aGVzaXMnOidcXHUyM0RDJywncGFyJzonXFx1MjIyNScsJ3BhcmEnOidcXHhCNicsJ3BhcmFsbGVsJzonXFx1MjIyNScsJ3BhcnNpbSc6J1xcdTJBRjMnLCdwYXJzbCc6J1xcdTJBRkQnLCdwYXJ0JzonXFx1MjIwMicsJ1BhcnRpYWxEJzonXFx1MjIwMicsJ3BjeSc6J1xcdTA0M0YnLCdQY3knOidcXHUwNDFGJywncGVyY250JzonJScsJ3BlcmlvZCc6Jy4nLCdwZXJtaWwnOidcXHUyMDMwJywncGVycCc6J1xcdTIyQTUnLCdwZXJ0ZW5rJzonXFx1MjAzMScsJ3Bmcic6J1xcdUQ4MzVcXHVERDJEJywnUGZyJzonXFx1RDgzNVxcdUREMTMnLCdwaGknOidcXHUwM0M2JywnUGhpJzonXFx1MDNBNicsJ3BoaXYnOidcXHUwM0Q1JywncGhtbWF0JzonXFx1MjEzMycsJ3Bob25lJzonXFx1MjYwRScsJ3BpJzonXFx1MDNDMCcsJ1BpJzonXFx1MDNBMCcsJ3BpdGNoZm9yayc6J1xcdTIyRDQnLCdwaXYnOidcXHUwM0Q2JywncGxhbmNrJzonXFx1MjEwRicsJ3BsYW5ja2gnOidcXHUyMTBFJywncGxhbmt2JzonXFx1MjEwRicsJ3BsdXMnOicrJywncGx1c2FjaXInOidcXHUyQTIzJywncGx1c2InOidcXHUyMjlFJywncGx1c2Npcic6J1xcdTJBMjInLCdwbHVzZG8nOidcXHUyMjE0JywncGx1c2R1JzonXFx1MkEyNScsJ3BsdXNlJzonXFx1MkE3MicsJ1BsdXNNaW51cyc6J1xceEIxJywncGx1c21uJzonXFx4QjEnLCdwbHVzc2ltJzonXFx1MkEyNicsJ3BsdXN0d28nOidcXHUyQTI3JywncG0nOidcXHhCMScsJ1BvaW5jYXJlcGxhbmUnOidcXHUyMTBDJywncG9pbnRpbnQnOidcXHUyQTE1JywncG9wZic6J1xcdUQ4MzVcXHVERDYxJywnUG9wZic6J1xcdTIxMTknLCdwb3VuZCc6J1xceEEzJywncHInOidcXHUyMjdBJywnUHInOidcXHUyQUJCJywncHJhcCc6J1xcdTJBQjcnLCdwcmN1ZSc6J1xcdTIyN0MnLCdwcmUnOidcXHUyQUFGJywncHJFJzonXFx1MkFCMycsJ3ByZWMnOidcXHUyMjdBJywncHJlY2FwcHJveCc6J1xcdTJBQjcnLCdwcmVjY3VybHllcSc6J1xcdTIyN0MnLCdQcmVjZWRlcyc6J1xcdTIyN0EnLCdQcmVjZWRlc0VxdWFsJzonXFx1MkFBRicsJ1ByZWNlZGVzU2xhbnRFcXVhbCc6J1xcdTIyN0MnLCdQcmVjZWRlc1RpbGRlJzonXFx1MjI3RScsJ3ByZWNlcSc6J1xcdTJBQUYnLCdwcmVjbmFwcHJveCc6J1xcdTJBQjknLCdwcmVjbmVxcSc6J1xcdTJBQjUnLCdwcmVjbnNpbSc6J1xcdTIyRTgnLCdwcmVjc2ltJzonXFx1MjI3RScsJ3ByaW1lJzonXFx1MjAzMicsJ1ByaW1lJzonXFx1MjAzMycsJ3ByaW1lcyc6J1xcdTIxMTknLCdwcm5hcCc6J1xcdTJBQjknLCdwcm5FJzonXFx1MkFCNScsJ3BybnNpbSc6J1xcdTIyRTgnLCdwcm9kJzonXFx1MjIwRicsJ1Byb2R1Y3QnOidcXHUyMjBGJywncHJvZmFsYXInOidcXHUyMzJFJywncHJvZmxpbmUnOidcXHUyMzEyJywncHJvZnN1cmYnOidcXHUyMzEzJywncHJvcCc6J1xcdTIyMUQnLCdQcm9wb3J0aW9uJzonXFx1MjIzNycsJ1Byb3BvcnRpb25hbCc6J1xcdTIyMUQnLCdwcm9wdG8nOidcXHUyMjFEJywncHJzaW0nOidcXHUyMjdFJywncHJ1cmVsJzonXFx1MjJCMCcsJ3BzY3InOidcXHVEODM1XFx1RENDNScsJ1BzY3InOidcXHVEODM1XFx1RENBQicsJ3BzaSc6J1xcdTAzQzgnLCdQc2knOidcXHUwM0E4JywncHVuY3NwJzonXFx1MjAwOCcsJ3Fmcic6J1xcdUQ4MzVcXHVERDJFJywnUWZyJzonXFx1RDgzNVxcdUREMTQnLCdxaW50JzonXFx1MkEwQycsJ3FvcGYnOidcXHVEODM1XFx1REQ2MicsJ1FvcGYnOidcXHUyMTFBJywncXByaW1lJzonXFx1MjA1NycsJ3FzY3InOidcXHVEODM1XFx1RENDNicsJ1FzY3InOidcXHVEODM1XFx1RENBQycsJ3F1YXRlcm5pb25zJzonXFx1MjEwRCcsJ3F1YXRpbnQnOidcXHUyQTE2JywncXVlc3QnOic/JywncXVlc3RlcSc6J1xcdTIyNUYnLCdxdW90JzonXCInLCdRVU9UJzonXCInLCdyQWFycic6J1xcdTIxREInLCdyYWNlJzonXFx1MjIzRFxcdTAzMzEnLCdyYWN1dGUnOidcXHUwMTU1JywnUmFjdXRlJzonXFx1MDE1NCcsJ3JhZGljJzonXFx1MjIxQScsJ3JhZW1wdHl2JzonXFx1MjlCMycsJ3JhbmcnOidcXHUyN0U5JywnUmFuZyc6J1xcdTI3RUInLCdyYW5nZCc6J1xcdTI5OTInLCdyYW5nZSc6J1xcdTI5QTUnLCdyYW5nbGUnOidcXHUyN0U5JywncmFxdW8nOidcXHhCQicsJ3JhcnInOidcXHUyMTkyJywnckFycic6J1xcdTIxRDInLCdSYXJyJzonXFx1MjFBMCcsJ3JhcnJhcCc6J1xcdTI5NzUnLCdyYXJyYic6J1xcdTIxRTUnLCdyYXJyYmZzJzonXFx1MjkyMCcsJ3JhcnJjJzonXFx1MjkzMycsJ3JhcnJmcyc6J1xcdTI5MUUnLCdyYXJyaGsnOidcXHUyMUFBJywncmFycmxwJzonXFx1MjFBQycsJ3JhcnJwbCc6J1xcdTI5NDUnLCdyYXJyc2ltJzonXFx1Mjk3NCcsJ3JhcnJ0bCc6J1xcdTIxQTMnLCdSYXJydGwnOidcXHUyOTE2JywncmFycncnOidcXHUyMTlEJywncmF0YWlsJzonXFx1MjkxQScsJ3JBdGFpbCc6J1xcdTI5MUMnLCdyYXRpbyc6J1xcdTIyMzYnLCdyYXRpb25hbHMnOidcXHUyMTFBJywncmJhcnInOidcXHUyOTBEJywnckJhcnInOidcXHUyOTBGJywnUkJhcnInOidcXHUyOTEwJywncmJicmsnOidcXHUyNzczJywncmJyYWNlJzonfScsJ3JicmFjayc6J10nLCdyYnJrZSc6J1xcdTI5OEMnLCdyYnJrc2xkJzonXFx1Mjk4RScsJ3JicmtzbHUnOidcXHUyOTkwJywncmNhcm9uJzonXFx1MDE1OScsJ1JjYXJvbic6J1xcdTAxNTgnLCdyY2VkaWwnOidcXHUwMTU3JywnUmNlZGlsJzonXFx1MDE1NicsJ3JjZWlsJzonXFx1MjMwOScsJ3JjdWInOid9JywncmN5JzonXFx1MDQ0MCcsJ1JjeSc6J1xcdTA0MjAnLCdyZGNhJzonXFx1MjkzNycsJ3JkbGRoYXInOidcXHUyOTY5JywncmRxdW8nOidcXHUyMDFEJywncmRxdW9yJzonXFx1MjAxRCcsJ3Jkc2gnOidcXHUyMUIzJywnUmUnOidcXHUyMTFDJywncmVhbCc6J1xcdTIxMUMnLCdyZWFsaW5lJzonXFx1MjExQicsJ3JlYWxwYXJ0JzonXFx1MjExQycsJ3JlYWxzJzonXFx1MjExRCcsJ3JlY3QnOidcXHUyNUFEJywncmVnJzonXFx4QUUnLCdSRUcnOidcXHhBRScsJ1JldmVyc2VFbGVtZW50JzonXFx1MjIwQicsJ1JldmVyc2VFcXVpbGlicml1bSc6J1xcdTIxQ0InLCdSZXZlcnNlVXBFcXVpbGlicml1bSc6J1xcdTI5NkYnLCdyZmlzaHQnOidcXHUyOTdEJywncmZsb29yJzonXFx1MjMwQicsJ3Jmcic6J1xcdUQ4MzVcXHVERDJGJywnUmZyJzonXFx1MjExQycsJ3JIYXInOidcXHUyOTY0JywncmhhcmQnOidcXHUyMUMxJywncmhhcnUnOidcXHUyMUMwJywncmhhcnVsJzonXFx1Mjk2QycsJ3Jobyc6J1xcdTAzQzEnLCdSaG8nOidcXHUwM0ExJywncmhvdic6J1xcdTAzRjEnLCdSaWdodEFuZ2xlQnJhY2tldCc6J1xcdTI3RTknLCdyaWdodGFycm93JzonXFx1MjE5MicsJ1JpZ2h0YXJyb3cnOidcXHUyMUQyJywnUmlnaHRBcnJvdyc6J1xcdTIxOTInLCdSaWdodEFycm93QmFyJzonXFx1MjFFNScsJ1JpZ2h0QXJyb3dMZWZ0QXJyb3cnOidcXHUyMUM0JywncmlnaHRhcnJvd3RhaWwnOidcXHUyMUEzJywnUmlnaHRDZWlsaW5nJzonXFx1MjMwOScsJ1JpZ2h0RG91YmxlQnJhY2tldCc6J1xcdTI3RTcnLCdSaWdodERvd25UZWVWZWN0b3InOidcXHUyOTVEJywnUmlnaHREb3duVmVjdG9yJzonXFx1MjFDMicsJ1JpZ2h0RG93blZlY3RvckJhcic6J1xcdTI5NTUnLCdSaWdodEZsb29yJzonXFx1MjMwQicsJ3JpZ2h0aGFycG9vbmRvd24nOidcXHUyMUMxJywncmlnaHRoYXJwb29udXAnOidcXHUyMUMwJywncmlnaHRsZWZ0YXJyb3dzJzonXFx1MjFDNCcsJ3JpZ2h0bGVmdGhhcnBvb25zJzonXFx1MjFDQycsJ3JpZ2h0cmlnaHRhcnJvd3MnOidcXHUyMUM5JywncmlnaHRzcXVpZ2Fycm93JzonXFx1MjE5RCcsJ1JpZ2h0VGVlJzonXFx1MjJBMicsJ1JpZ2h0VGVlQXJyb3cnOidcXHUyMUE2JywnUmlnaHRUZWVWZWN0b3InOidcXHUyOTVCJywncmlnaHR0aHJlZXRpbWVzJzonXFx1MjJDQycsJ1JpZ2h0VHJpYW5nbGUnOidcXHUyMkIzJywnUmlnaHRUcmlhbmdsZUJhcic6J1xcdTI5RDAnLCdSaWdodFRyaWFuZ2xlRXF1YWwnOidcXHUyMkI1JywnUmlnaHRVcERvd25WZWN0b3InOidcXHUyOTRGJywnUmlnaHRVcFRlZVZlY3Rvcic6J1xcdTI5NUMnLCdSaWdodFVwVmVjdG9yJzonXFx1MjFCRScsJ1JpZ2h0VXBWZWN0b3JCYXInOidcXHUyOTU0JywnUmlnaHRWZWN0b3InOidcXHUyMUMwJywnUmlnaHRWZWN0b3JCYXInOidcXHUyOTUzJywncmluZyc6J1xcdTAyREEnLCdyaXNpbmdkb3RzZXEnOidcXHUyMjUzJywncmxhcnInOidcXHUyMUM0JywncmxoYXInOidcXHUyMUNDJywncmxtJzonXFx1MjAwRicsJ3Jtb3VzdCc6J1xcdTIzQjEnLCdybW91c3RhY2hlJzonXFx1MjNCMScsJ3JubWlkJzonXFx1MkFFRScsJ3JvYW5nJzonXFx1MjdFRCcsJ3JvYXJyJzonXFx1MjFGRScsJ3JvYnJrJzonXFx1MjdFNycsJ3JvcGFyJzonXFx1Mjk4NicsJ3JvcGYnOidcXHVEODM1XFx1REQ2MycsJ1JvcGYnOidcXHUyMTFEJywncm9wbHVzJzonXFx1MkEyRScsJ3JvdGltZXMnOidcXHUyQTM1JywnUm91bmRJbXBsaWVzJzonXFx1Mjk3MCcsJ3JwYXInOicpJywncnBhcmd0JzonXFx1Mjk5NCcsJ3JwcG9saW50JzonXFx1MkExMicsJ3JyYXJyJzonXFx1MjFDOScsJ1JyaWdodGFycm93JzonXFx1MjFEQicsJ3JzYXF1byc6J1xcdTIwM0EnLCdyc2NyJzonXFx1RDgzNVxcdURDQzcnLCdSc2NyJzonXFx1MjExQicsJ3JzaCc6J1xcdTIxQjEnLCdSc2gnOidcXHUyMUIxJywncnNxYic6J10nLCdyc3F1byc6J1xcdTIwMTknLCdyc3F1b3InOidcXHUyMDE5JywncnRocmVlJzonXFx1MjJDQycsJ3J0aW1lcyc6J1xcdTIyQ0EnLCdydHJpJzonXFx1MjVCOScsJ3J0cmllJzonXFx1MjJCNScsJ3J0cmlmJzonXFx1MjVCOCcsJ3J0cmlsdHJpJzonXFx1MjlDRScsJ1J1bGVEZWxheWVkJzonXFx1MjlGNCcsJ3J1bHVoYXInOidcXHUyOTY4JywncngnOidcXHUyMTFFJywnc2FjdXRlJzonXFx1MDE1QicsJ1NhY3V0ZSc6J1xcdTAxNUEnLCdzYnF1byc6J1xcdTIwMUEnLCdzYyc6J1xcdTIyN0InLCdTYyc6J1xcdTJBQkMnLCdzY2FwJzonXFx1MkFCOCcsJ3NjYXJvbic6J1xcdTAxNjEnLCdTY2Fyb24nOidcXHUwMTYwJywnc2NjdWUnOidcXHUyMjdEJywnc2NlJzonXFx1MkFCMCcsJ3NjRSc6J1xcdTJBQjQnLCdzY2VkaWwnOidcXHUwMTVGJywnU2NlZGlsJzonXFx1MDE1RScsJ3NjaXJjJzonXFx1MDE1RCcsJ1NjaXJjJzonXFx1MDE1QycsJ3NjbmFwJzonXFx1MkFCQScsJ3NjbkUnOidcXHUyQUI2Jywnc2Nuc2ltJzonXFx1MjJFOScsJ3NjcG9saW50JzonXFx1MkExMycsJ3Njc2ltJzonXFx1MjI3RicsJ3NjeSc6J1xcdTA0NDEnLCdTY3knOidcXHUwNDIxJywnc2RvdCc6J1xcdTIyQzUnLCdzZG90Yic6J1xcdTIyQTEnLCdzZG90ZSc6J1xcdTJBNjYnLCdzZWFyaGsnOidcXHUyOTI1Jywnc2VhcnInOidcXHUyMTk4Jywnc2VBcnInOidcXHUyMUQ4Jywnc2VhcnJvdyc6J1xcdTIxOTgnLCdzZWN0JzonXFx4QTcnLCdzZW1pJzonOycsJ3Nlc3dhcic6J1xcdTI5MjknLCdzZXRtaW51cyc6J1xcdTIyMTYnLCdzZXRtbic6J1xcdTIyMTYnLCdzZXh0JzonXFx1MjczNicsJ3Nmcic6J1xcdUQ4MzVcXHVERDMwJywnU2ZyJzonXFx1RDgzNVxcdUREMTYnLCdzZnJvd24nOidcXHUyMzIyJywnc2hhcnAnOidcXHUyNjZGJywnc2hjaGN5JzonXFx1MDQ0OScsJ1NIQ0hjeSc6J1xcdTA0MjknLCdzaGN5JzonXFx1MDQ0OCcsJ1NIY3knOidcXHUwNDI4JywnU2hvcnREb3duQXJyb3cnOidcXHUyMTkzJywnU2hvcnRMZWZ0QXJyb3cnOidcXHUyMTkwJywnc2hvcnRtaWQnOidcXHUyMjIzJywnc2hvcnRwYXJhbGxlbCc6J1xcdTIyMjUnLCdTaG9ydFJpZ2h0QXJyb3cnOidcXHUyMTkyJywnU2hvcnRVcEFycm93JzonXFx1MjE5MScsJ3NoeSc6J1xceEFEJywnc2lnbWEnOidcXHUwM0MzJywnU2lnbWEnOidcXHUwM0EzJywnc2lnbWFmJzonXFx1MDNDMicsJ3NpZ21hdic6J1xcdTAzQzInLCdzaW0nOidcXHUyMjNDJywnc2ltZG90JzonXFx1MkE2QScsJ3NpbWUnOidcXHUyMjQzJywnc2ltZXEnOidcXHUyMjQzJywnc2ltZyc6J1xcdTJBOUUnLCdzaW1nRSc6J1xcdTJBQTAnLCdzaW1sJzonXFx1MkE5RCcsJ3NpbWxFJzonXFx1MkE5RicsJ3NpbW5lJzonXFx1MjI0NicsJ3NpbXBsdXMnOidcXHUyQTI0Jywnc2ltcmFycic6J1xcdTI5NzInLCdzbGFycic6J1xcdTIxOTAnLCdTbWFsbENpcmNsZSc6J1xcdTIyMTgnLCdzbWFsbHNldG1pbnVzJzonXFx1MjIxNicsJ3NtYXNocCc6J1xcdTJBMzMnLCdzbWVwYXJzbCc6J1xcdTI5RTQnLCdzbWlkJzonXFx1MjIyMycsJ3NtaWxlJzonXFx1MjMyMycsJ3NtdCc6J1xcdTJBQUEnLCdzbXRlJzonXFx1MkFBQycsJ3NtdGVzJzonXFx1MkFBQ1xcdUZFMDAnLCdzb2Z0Y3knOidcXHUwNDRDJywnU09GVGN5JzonXFx1MDQyQycsJ3NvbCc6Jy8nLCdzb2xiJzonXFx1MjlDNCcsJ3NvbGJhcic6J1xcdTIzM0YnLCdzb3BmJzonXFx1RDgzNVxcdURENjQnLCdTb3BmJzonXFx1RDgzNVxcdURENEEnLCdzcGFkZXMnOidcXHUyNjYwJywnc3BhZGVzdWl0JzonXFx1MjY2MCcsJ3NwYXInOidcXHUyMjI1Jywnc3FjYXAnOidcXHUyMjkzJywnc3FjYXBzJzonXFx1MjI5M1xcdUZFMDAnLCdzcWN1cCc6J1xcdTIyOTQnLCdzcWN1cHMnOidcXHUyMjk0XFx1RkUwMCcsJ1NxcnQnOidcXHUyMjFBJywnc3FzdWInOidcXHUyMjhGJywnc3FzdWJlJzonXFx1MjI5MScsJ3Nxc3Vic2V0JzonXFx1MjI4RicsJ3Nxc3Vic2V0ZXEnOidcXHUyMjkxJywnc3FzdXAnOidcXHUyMjkwJywnc3FzdXBlJzonXFx1MjI5MicsJ3Nxc3Vwc2V0JzonXFx1MjI5MCcsJ3Nxc3Vwc2V0ZXEnOidcXHUyMjkyJywnc3F1JzonXFx1MjVBMScsJ3NxdWFyZSc6J1xcdTI1QTEnLCdTcXVhcmUnOidcXHUyNUExJywnU3F1YXJlSW50ZXJzZWN0aW9uJzonXFx1MjI5MycsJ1NxdWFyZVN1YnNldCc6J1xcdTIyOEYnLCdTcXVhcmVTdWJzZXRFcXVhbCc6J1xcdTIyOTEnLCdTcXVhcmVTdXBlcnNldCc6J1xcdTIyOTAnLCdTcXVhcmVTdXBlcnNldEVxdWFsJzonXFx1MjI5MicsJ1NxdWFyZVVuaW9uJzonXFx1MjI5NCcsJ3NxdWFyZic6J1xcdTI1QUEnLCdzcXVmJzonXFx1MjVBQScsJ3NyYXJyJzonXFx1MjE5MicsJ3NzY3InOidcXHVEODM1XFx1RENDOCcsJ1NzY3InOidcXHVEODM1XFx1RENBRScsJ3NzZXRtbic6J1xcdTIyMTYnLCdzc21pbGUnOidcXHUyMzIzJywnc3N0YXJmJzonXFx1MjJDNicsJ3N0YXInOidcXHUyNjA2JywnU3Rhcic6J1xcdTIyQzYnLCdzdGFyZic6J1xcdTI2MDUnLCdzdHJhaWdodGVwc2lsb24nOidcXHUwM0Y1Jywnc3RyYWlnaHRwaGknOidcXHUwM0Q1Jywnc3RybnMnOidcXHhBRicsJ3N1Yic6J1xcdTIyODInLCdTdWInOidcXHUyMkQwJywnc3ViZG90JzonXFx1MkFCRCcsJ3N1YmUnOidcXHUyMjg2Jywnc3ViRSc6J1xcdTJBQzUnLCdzdWJlZG90JzonXFx1MkFDMycsJ3N1Ym11bHQnOidcXHUyQUMxJywnc3VibmUnOidcXHUyMjhBJywnc3VibkUnOidcXHUyQUNCJywnc3VicGx1cyc6J1xcdTJBQkYnLCdzdWJyYXJyJzonXFx1Mjk3OScsJ3N1YnNldCc6J1xcdTIyODInLCdTdWJzZXQnOidcXHUyMkQwJywnc3Vic2V0ZXEnOidcXHUyMjg2Jywnc3Vic2V0ZXFxJzonXFx1MkFDNScsJ1N1YnNldEVxdWFsJzonXFx1MjI4NicsJ3N1YnNldG5lcSc6J1xcdTIyOEEnLCdzdWJzZXRuZXFxJzonXFx1MkFDQicsJ3N1YnNpbSc6J1xcdTJBQzcnLCdzdWJzdWInOidcXHUyQUQ1Jywnc3Vic3VwJzonXFx1MkFEMycsJ3N1Y2MnOidcXHUyMjdCJywnc3VjY2FwcHJveCc6J1xcdTJBQjgnLCdzdWNjY3VybHllcSc6J1xcdTIyN0QnLCdTdWNjZWVkcyc6J1xcdTIyN0InLCdTdWNjZWVkc0VxdWFsJzonXFx1MkFCMCcsJ1N1Y2NlZWRzU2xhbnRFcXVhbCc6J1xcdTIyN0QnLCdTdWNjZWVkc1RpbGRlJzonXFx1MjI3RicsJ3N1Y2NlcSc6J1xcdTJBQjAnLCdzdWNjbmFwcHJveCc6J1xcdTJBQkEnLCdzdWNjbmVxcSc6J1xcdTJBQjYnLCdzdWNjbnNpbSc6J1xcdTIyRTknLCdzdWNjc2ltJzonXFx1MjI3RicsJ1N1Y2hUaGF0JzonXFx1MjIwQicsJ3N1bSc6J1xcdTIyMTEnLCdTdW0nOidcXHUyMjExJywnc3VuZyc6J1xcdTI2NkEnLCdzdXAnOidcXHUyMjgzJywnU3VwJzonXFx1MjJEMScsJ3N1cDEnOidcXHhCOScsJ3N1cDInOidcXHhCMicsJ3N1cDMnOidcXHhCMycsJ3N1cGRvdCc6J1xcdTJBQkUnLCdzdXBkc3ViJzonXFx1MkFEOCcsJ3N1cGUnOidcXHUyMjg3Jywnc3VwRSc6J1xcdTJBQzYnLCdzdXBlZG90JzonXFx1MkFDNCcsJ1N1cGVyc2V0JzonXFx1MjI4MycsJ1N1cGVyc2V0RXF1YWwnOidcXHUyMjg3Jywnc3VwaHNvbCc6J1xcdTI3QzknLCdzdXBoc3ViJzonXFx1MkFENycsJ3N1cGxhcnInOidcXHUyOTdCJywnc3VwbXVsdCc6J1xcdTJBQzInLCdzdXBuZSc6J1xcdTIyOEInLCdzdXBuRSc6J1xcdTJBQ0MnLCdzdXBwbHVzJzonXFx1MkFDMCcsJ3N1cHNldCc6J1xcdTIyODMnLCdTdXBzZXQnOidcXHUyMkQxJywnc3Vwc2V0ZXEnOidcXHUyMjg3Jywnc3Vwc2V0ZXFxJzonXFx1MkFDNicsJ3N1cHNldG5lcSc6J1xcdTIyOEInLCdzdXBzZXRuZXFxJzonXFx1MkFDQycsJ3N1cHNpbSc6J1xcdTJBQzgnLCdzdXBzdWInOidcXHUyQUQ0Jywnc3Vwc3VwJzonXFx1MkFENicsJ3N3YXJoayc6J1xcdTI5MjYnLCdzd2Fycic6J1xcdTIxOTknLCdzd0Fycic6J1xcdTIxRDknLCdzd2Fycm93JzonXFx1MjE5OScsJ3N3bndhcic6J1xcdTI5MkEnLCdzemxpZyc6J1xceERGJywnVGFiJzonXFx0JywndGFyZ2V0JzonXFx1MjMxNicsJ3RhdSc6J1xcdTAzQzQnLCdUYXUnOidcXHUwM0E0JywndGJyayc6J1xcdTIzQjQnLCd0Y2Fyb24nOidcXHUwMTY1JywnVGNhcm9uJzonXFx1MDE2NCcsJ3RjZWRpbCc6J1xcdTAxNjMnLCdUY2VkaWwnOidcXHUwMTYyJywndGN5JzonXFx1MDQ0MicsJ1RjeSc6J1xcdTA0MjInLCd0ZG90JzonXFx1MjBEQicsJ3RlbHJlYyc6J1xcdTIzMTUnLCd0ZnInOidcXHVEODM1XFx1REQzMScsJ1Rmcic6J1xcdUQ4MzVcXHVERDE3JywndGhlcmU0JzonXFx1MjIzNCcsJ3RoZXJlZm9yZSc6J1xcdTIyMzQnLCdUaGVyZWZvcmUnOidcXHUyMjM0JywndGhldGEnOidcXHUwM0I4JywnVGhldGEnOidcXHUwMzk4JywndGhldGFzeW0nOidcXHUwM0QxJywndGhldGF2JzonXFx1MDNEMScsJ3RoaWNrYXBwcm94JzonXFx1MjI0OCcsJ3RoaWNrc2ltJzonXFx1MjIzQycsJ1RoaWNrU3BhY2UnOidcXHUyMDVGXFx1MjAwQScsJ3RoaW5zcCc6J1xcdTIwMDknLCdUaGluU3BhY2UnOidcXHUyMDA5JywndGhrYXAnOidcXHUyMjQ4JywndGhrc2ltJzonXFx1MjIzQycsJ3Rob3JuJzonXFx4RkUnLCdUSE9STic6J1xceERFJywndGlsZGUnOidcXHUwMkRDJywnVGlsZGUnOidcXHUyMjNDJywnVGlsZGVFcXVhbCc6J1xcdTIyNDMnLCdUaWxkZUZ1bGxFcXVhbCc6J1xcdTIyNDUnLCdUaWxkZVRpbGRlJzonXFx1MjI0OCcsJ3RpbWVzJzonXFx4RDcnLCd0aW1lc2InOidcXHUyMkEwJywndGltZXNiYXInOidcXHUyQTMxJywndGltZXNkJzonXFx1MkEzMCcsJ3RpbnQnOidcXHUyMjJEJywndG9lYSc6J1xcdTI5MjgnLCd0b3AnOidcXHUyMkE0JywndG9wYm90JzonXFx1MjMzNicsJ3RvcGNpcic6J1xcdTJBRjEnLCd0b3BmJzonXFx1RDgzNVxcdURENjUnLCdUb3BmJzonXFx1RDgzNVxcdURENEInLCd0b3Bmb3JrJzonXFx1MkFEQScsJ3Rvc2EnOidcXHUyOTI5JywndHByaW1lJzonXFx1MjAzNCcsJ3RyYWRlJzonXFx1MjEyMicsJ1RSQURFJzonXFx1MjEyMicsJ3RyaWFuZ2xlJzonXFx1MjVCNScsJ3RyaWFuZ2xlZG93bic6J1xcdTI1QkYnLCd0cmlhbmdsZWxlZnQnOidcXHUyNUMzJywndHJpYW5nbGVsZWZ0ZXEnOidcXHUyMkI0JywndHJpYW5nbGVxJzonXFx1MjI1QycsJ3RyaWFuZ2xlcmlnaHQnOidcXHUyNUI5JywndHJpYW5nbGVyaWdodGVxJzonXFx1MjJCNScsJ3RyaWRvdCc6J1xcdTI1RUMnLCd0cmllJzonXFx1MjI1QycsJ3RyaW1pbnVzJzonXFx1MkEzQScsJ1RyaXBsZURvdCc6J1xcdTIwREInLCd0cmlwbHVzJzonXFx1MkEzOScsJ3RyaXNiJzonXFx1MjlDRCcsJ3RyaXRpbWUnOidcXHUyQTNCJywndHJwZXppdW0nOidcXHUyM0UyJywndHNjcic6J1xcdUQ4MzVcXHVEQ0M5JywnVHNjcic6J1xcdUQ4MzVcXHVEQ0FGJywndHNjeSc6J1xcdTA0NDYnLCdUU2N5JzonXFx1MDQyNicsJ3RzaGN5JzonXFx1MDQ1QicsJ1RTSGN5JzonXFx1MDQwQicsJ3RzdHJvayc6J1xcdTAxNjcnLCdUc3Ryb2snOidcXHUwMTY2JywndHdpeHQnOidcXHUyMjZDJywndHdvaGVhZGxlZnRhcnJvdyc6J1xcdTIxOUUnLCd0d29oZWFkcmlnaHRhcnJvdyc6J1xcdTIxQTAnLCd1YWN1dGUnOidcXHhGQScsJ1VhY3V0ZSc6J1xceERBJywndWFycic6J1xcdTIxOTEnLCd1QXJyJzonXFx1MjFEMScsJ1VhcnInOidcXHUyMTlGJywnVWFycm9jaXInOidcXHUyOTQ5JywndWJyY3knOidcXHUwNDVFJywnVWJyY3knOidcXHUwNDBFJywndWJyZXZlJzonXFx1MDE2RCcsJ1VicmV2ZSc6J1xcdTAxNkMnLCd1Y2lyYyc6J1xceEZCJywnVWNpcmMnOidcXHhEQicsJ3VjeSc6J1xcdTA0NDMnLCdVY3knOidcXHUwNDIzJywndWRhcnInOidcXHUyMUM1JywndWRibGFjJzonXFx1MDE3MScsJ1VkYmxhYyc6J1xcdTAxNzAnLCd1ZGhhcic6J1xcdTI5NkUnLCd1ZmlzaHQnOidcXHUyOTdFJywndWZyJzonXFx1RDgzNVxcdUREMzInLCdVZnInOidcXHVEODM1XFx1REQxOCcsJ3VncmF2ZSc6J1xceEY5JywnVWdyYXZlJzonXFx4RDknLCd1SGFyJzonXFx1Mjk2MycsJ3VoYXJsJzonXFx1MjFCRicsJ3VoYXJyJzonXFx1MjFCRScsJ3VoYmxrJzonXFx1MjU4MCcsJ3VsY29ybic6J1xcdTIzMUMnLCd1bGNvcm5lcic6J1xcdTIzMUMnLCd1bGNyb3AnOidcXHUyMzBGJywndWx0cmknOidcXHUyNUY4JywndW1hY3InOidcXHUwMTZCJywnVW1hY3InOidcXHUwMTZBJywndW1sJzonXFx4QTgnLCdVbmRlckJhcic6J18nLCdVbmRlckJyYWNlJzonXFx1MjNERicsJ1VuZGVyQnJhY2tldCc6J1xcdTIzQjUnLCdVbmRlclBhcmVudGhlc2lzJzonXFx1MjNERCcsJ1VuaW9uJzonXFx1MjJDMycsJ1VuaW9uUGx1cyc6J1xcdTIyOEUnLCd1b2dvbic6J1xcdTAxNzMnLCdVb2dvbic6J1xcdTAxNzInLCd1b3BmJzonXFx1RDgzNVxcdURENjYnLCdVb3BmJzonXFx1RDgzNVxcdURENEMnLCd1cGFycm93JzonXFx1MjE5MScsJ1VwYXJyb3cnOidcXHUyMUQxJywnVXBBcnJvdyc6J1xcdTIxOTEnLCdVcEFycm93QmFyJzonXFx1MjkxMicsJ1VwQXJyb3dEb3duQXJyb3cnOidcXHUyMUM1JywndXBkb3duYXJyb3cnOidcXHUyMTk1JywnVXBkb3duYXJyb3cnOidcXHUyMUQ1JywnVXBEb3duQXJyb3cnOidcXHUyMTk1JywnVXBFcXVpbGlicml1bSc6J1xcdTI5NkUnLCd1cGhhcnBvb25sZWZ0JzonXFx1MjFCRicsJ3VwaGFycG9vbnJpZ2h0JzonXFx1MjFCRScsJ3VwbHVzJzonXFx1MjI4RScsJ1VwcGVyTGVmdEFycm93JzonXFx1MjE5NicsJ1VwcGVyUmlnaHRBcnJvdyc6J1xcdTIxOTcnLCd1cHNpJzonXFx1MDNDNScsJ1Vwc2knOidcXHUwM0QyJywndXBzaWgnOidcXHUwM0QyJywndXBzaWxvbic6J1xcdTAzQzUnLCdVcHNpbG9uJzonXFx1MDNBNScsJ1VwVGVlJzonXFx1MjJBNScsJ1VwVGVlQXJyb3cnOidcXHUyMUE1JywndXB1cGFycm93cyc6J1xcdTIxQzgnLCd1cmNvcm4nOidcXHUyMzFEJywndXJjb3JuZXInOidcXHUyMzFEJywndXJjcm9wJzonXFx1MjMwRScsJ3VyaW5nJzonXFx1MDE2RicsJ1VyaW5nJzonXFx1MDE2RScsJ3VydHJpJzonXFx1MjVGOScsJ3VzY3InOidcXHVEODM1XFx1RENDQScsJ1VzY3InOidcXHVEODM1XFx1RENCMCcsJ3V0ZG90JzonXFx1MjJGMCcsJ3V0aWxkZSc6J1xcdTAxNjknLCdVdGlsZGUnOidcXHUwMTY4JywndXRyaSc6J1xcdTI1QjUnLCd1dHJpZic6J1xcdTI1QjQnLCd1dWFycic6J1xcdTIxQzgnLCd1dW1sJzonXFx4RkMnLCdVdW1sJzonXFx4REMnLCd1d2FuZ2xlJzonXFx1MjlBNycsJ3ZhbmdydCc6J1xcdTI5OUMnLCd2YXJlcHNpbG9uJzonXFx1MDNGNScsJ3ZhcmthcHBhJzonXFx1MDNGMCcsJ3Zhcm5vdGhpbmcnOidcXHUyMjA1JywndmFycGhpJzonXFx1MDNENScsJ3ZhcnBpJzonXFx1MDNENicsJ3ZhcnByb3B0byc6J1xcdTIyMUQnLCd2YXJyJzonXFx1MjE5NScsJ3ZBcnInOidcXHUyMUQ1JywndmFycmhvJzonXFx1MDNGMScsJ3ZhcnNpZ21hJzonXFx1MDNDMicsJ3ZhcnN1YnNldG5lcSc6J1xcdTIyOEFcXHVGRTAwJywndmFyc3Vic2V0bmVxcSc6J1xcdTJBQ0JcXHVGRTAwJywndmFyc3Vwc2V0bmVxJzonXFx1MjI4QlxcdUZFMDAnLCd2YXJzdXBzZXRuZXFxJzonXFx1MkFDQ1xcdUZFMDAnLCd2YXJ0aGV0YSc6J1xcdTAzRDEnLCd2YXJ0cmlhbmdsZWxlZnQnOidcXHUyMkIyJywndmFydHJpYW5nbGVyaWdodCc6J1xcdTIyQjMnLCd2QmFyJzonXFx1MkFFOCcsJ1ZiYXInOidcXHUyQUVCJywndkJhcnYnOidcXHUyQUU5JywndmN5JzonXFx1MDQzMicsJ1ZjeSc6J1xcdTA0MTInLCd2ZGFzaCc6J1xcdTIyQTInLCd2RGFzaCc6J1xcdTIyQTgnLCdWZGFzaCc6J1xcdTIyQTknLCdWRGFzaCc6J1xcdTIyQUInLCdWZGFzaGwnOidcXHUyQUU2JywndmVlJzonXFx1MjIyOCcsJ1ZlZSc6J1xcdTIyQzEnLCd2ZWViYXInOidcXHUyMkJCJywndmVlZXEnOidcXHUyMjVBJywndmVsbGlwJzonXFx1MjJFRScsJ3ZlcmJhcic6J3wnLCdWZXJiYXInOidcXHUyMDE2JywndmVydCc6J3wnLCdWZXJ0JzonXFx1MjAxNicsJ1ZlcnRpY2FsQmFyJzonXFx1MjIyMycsJ1ZlcnRpY2FsTGluZSc6J3wnLCdWZXJ0aWNhbFNlcGFyYXRvcic6J1xcdTI3NTgnLCdWZXJ0aWNhbFRpbGRlJzonXFx1MjI0MCcsJ1ZlcnlUaGluU3BhY2UnOidcXHUyMDBBJywndmZyJzonXFx1RDgzNVxcdUREMzMnLCdWZnInOidcXHVEODM1XFx1REQxOScsJ3ZsdHJpJzonXFx1MjJCMicsJ3Zuc3ViJzonXFx1MjI4MlxcdTIwRDInLCd2bnN1cCc6J1xcdTIyODNcXHUyMEQyJywndm9wZic6J1xcdUQ4MzVcXHVERDY3JywnVm9wZic6J1xcdUQ4MzVcXHVERDREJywndnByb3AnOidcXHUyMjFEJywndnJ0cmknOidcXHUyMkIzJywndnNjcic6J1xcdUQ4MzVcXHVEQ0NCJywnVnNjcic6J1xcdUQ4MzVcXHVEQ0IxJywndnN1Ym5lJzonXFx1MjI4QVxcdUZFMDAnLCd2c3VibkUnOidcXHUyQUNCXFx1RkUwMCcsJ3ZzdXBuZSc6J1xcdTIyOEJcXHVGRTAwJywndnN1cG5FJzonXFx1MkFDQ1xcdUZFMDAnLCdWdmRhc2gnOidcXHUyMkFBJywndnppZ3phZyc6J1xcdTI5OUEnLCd3Y2lyYyc6J1xcdTAxNzUnLCdXY2lyYyc6J1xcdTAxNzQnLCd3ZWRiYXInOidcXHUyQTVGJywnd2VkZ2UnOidcXHUyMjI3JywnV2VkZ2UnOidcXHUyMkMwJywnd2VkZ2VxJzonXFx1MjI1OScsJ3dlaWVycCc6J1xcdTIxMTgnLCd3ZnInOidcXHVEODM1XFx1REQzNCcsJ1dmcic6J1xcdUQ4MzVcXHVERDFBJywnd29wZic6J1xcdUQ4MzVcXHVERDY4JywnV29wZic6J1xcdUQ4MzVcXHVERDRFJywnd3AnOidcXHUyMTE4Jywnd3InOidcXHUyMjQwJywnd3JlYXRoJzonXFx1MjI0MCcsJ3dzY3InOidcXHVEODM1XFx1RENDQycsJ1dzY3InOidcXHVEODM1XFx1RENCMicsJ3hjYXAnOidcXHUyMkMyJywneGNpcmMnOidcXHUyNUVGJywneGN1cCc6J1xcdTIyQzMnLCd4ZHRyaSc6J1xcdTI1QkQnLCd4ZnInOidcXHVEODM1XFx1REQzNScsJ1hmcic6J1xcdUQ4MzVcXHVERDFCJywneGhhcnInOidcXHUyN0Y3JywneGhBcnInOidcXHUyN0ZBJywneGknOidcXHUwM0JFJywnWGknOidcXHUwMzlFJywneGxhcnInOidcXHUyN0Y1JywneGxBcnInOidcXHUyN0Y4JywneG1hcCc6J1xcdTI3RkMnLCd4bmlzJzonXFx1MjJGQicsJ3hvZG90JzonXFx1MkEwMCcsJ3hvcGYnOidcXHVEODM1XFx1REQ2OScsJ1hvcGYnOidcXHVEODM1XFx1REQ0RicsJ3hvcGx1cyc6J1xcdTJBMDEnLCd4b3RpbWUnOidcXHUyQTAyJywneHJhcnInOidcXHUyN0Y2JywneHJBcnInOidcXHUyN0Y5JywneHNjcic6J1xcdUQ4MzVcXHVEQ0NEJywnWHNjcic6J1xcdUQ4MzVcXHVEQ0IzJywneHNxY3VwJzonXFx1MkEwNicsJ3h1cGx1cyc6J1xcdTJBMDQnLCd4dXRyaSc6J1xcdTI1QjMnLCd4dmVlJzonXFx1MjJDMScsJ3h3ZWRnZSc6J1xcdTIyQzAnLCd5YWN1dGUnOidcXHhGRCcsJ1lhY3V0ZSc6J1xceEREJywneWFjeSc6J1xcdTA0NEYnLCdZQWN5JzonXFx1MDQyRicsJ3ljaXJjJzonXFx1MDE3NycsJ1ljaXJjJzonXFx1MDE3NicsJ3ljeSc6J1xcdTA0NEInLCdZY3knOidcXHUwNDJCJywneWVuJzonXFx4QTUnLCd5ZnInOidcXHVEODM1XFx1REQzNicsJ1lmcic6J1xcdUQ4MzVcXHVERDFDJywneWljeSc6J1xcdTA0NTcnLCdZSWN5JzonXFx1MDQwNycsJ3lvcGYnOidcXHVEODM1XFx1REQ2QScsJ1lvcGYnOidcXHVEODM1XFx1REQ1MCcsJ3lzY3InOidcXHVEODM1XFx1RENDRScsJ1lzY3InOidcXHVEODM1XFx1RENCNCcsJ3l1Y3knOidcXHUwNDRFJywnWVVjeSc6J1xcdTA0MkUnLCd5dW1sJzonXFx4RkYnLCdZdW1sJzonXFx1MDE3OCcsJ3phY3V0ZSc6J1xcdTAxN0EnLCdaYWN1dGUnOidcXHUwMTc5JywnemNhcm9uJzonXFx1MDE3RScsJ1pjYXJvbic6J1xcdTAxN0QnLCd6Y3knOidcXHUwNDM3JywnWmN5JzonXFx1MDQxNycsJ3pkb3QnOidcXHUwMTdDJywnWmRvdCc6J1xcdTAxN0InLCd6ZWV0cmYnOidcXHUyMTI4JywnWmVyb1dpZHRoU3BhY2UnOidcXHUyMDBCJywnemV0YSc6J1xcdTAzQjYnLCdaZXRhJzonXFx1MDM5NicsJ3pmcic6J1xcdUQ4MzVcXHVERDM3JywnWmZyJzonXFx1MjEyOCcsJ3poY3knOidcXHUwNDM2JywnWkhjeSc6J1xcdTA0MTYnLCd6aWdyYXJyJzonXFx1MjFERCcsJ3pvcGYnOidcXHVEODM1XFx1REQ2QicsJ1pvcGYnOidcXHUyMTI0JywnenNjcic6J1xcdUQ4MzVcXHVEQ0NGJywnWnNjcic6J1xcdUQ4MzVcXHVEQ0I1JywnendqJzonXFx1MjAwRCcsJ3p3bmonOidcXHUyMDBDJ307XG5cdHZhciBkZWNvZGVNYXBMZWdhY3kgPSB7J2FhY3V0ZSc6J1xceEUxJywnQWFjdXRlJzonXFx4QzEnLCdhY2lyYyc6J1xceEUyJywnQWNpcmMnOidcXHhDMicsJ2FjdXRlJzonXFx4QjQnLCdhZWxpZyc6J1xceEU2JywnQUVsaWcnOidcXHhDNicsJ2FncmF2ZSc6J1xceEUwJywnQWdyYXZlJzonXFx4QzAnLCdhbXAnOicmJywnQU1QJzonJicsJ2FyaW5nJzonXFx4RTUnLCdBcmluZyc6J1xceEM1JywnYXRpbGRlJzonXFx4RTMnLCdBdGlsZGUnOidcXHhDMycsJ2F1bWwnOidcXHhFNCcsJ0F1bWwnOidcXHhDNCcsJ2JydmJhcic6J1xceEE2JywnY2NlZGlsJzonXFx4RTcnLCdDY2VkaWwnOidcXHhDNycsJ2NlZGlsJzonXFx4QjgnLCdjZW50JzonXFx4QTInLCdjb3B5JzonXFx4QTknLCdDT1BZJzonXFx4QTknLCdjdXJyZW4nOidcXHhBNCcsJ2RlZyc6J1xceEIwJywnZGl2aWRlJzonXFx4RjcnLCdlYWN1dGUnOidcXHhFOScsJ0VhY3V0ZSc6J1xceEM5JywnZWNpcmMnOidcXHhFQScsJ0VjaXJjJzonXFx4Q0EnLCdlZ3JhdmUnOidcXHhFOCcsJ0VncmF2ZSc6J1xceEM4JywnZXRoJzonXFx4RjAnLCdFVEgnOidcXHhEMCcsJ2V1bWwnOidcXHhFQicsJ0V1bWwnOidcXHhDQicsJ2ZyYWMxMic6J1xceEJEJywnZnJhYzE0JzonXFx4QkMnLCdmcmFjMzQnOidcXHhCRScsJ2d0JzonPicsJ0dUJzonPicsJ2lhY3V0ZSc6J1xceEVEJywnSWFjdXRlJzonXFx4Q0QnLCdpY2lyYyc6J1xceEVFJywnSWNpcmMnOidcXHhDRScsJ2lleGNsJzonXFx4QTEnLCdpZ3JhdmUnOidcXHhFQycsJ0lncmF2ZSc6J1xceENDJywnaXF1ZXN0JzonXFx4QkYnLCdpdW1sJzonXFx4RUYnLCdJdW1sJzonXFx4Q0YnLCdsYXF1byc6J1xceEFCJywnbHQnOic8JywnTFQnOic8JywnbWFjcic6J1xceEFGJywnbWljcm8nOidcXHhCNScsJ21pZGRvdCc6J1xceEI3JywnbmJzcCc6J1xceEEwJywnbm90JzonXFx4QUMnLCdudGlsZGUnOidcXHhGMScsJ050aWxkZSc6J1xceEQxJywnb2FjdXRlJzonXFx4RjMnLCdPYWN1dGUnOidcXHhEMycsJ29jaXJjJzonXFx4RjQnLCdPY2lyYyc6J1xceEQ0Jywnb2dyYXZlJzonXFx4RjInLCdPZ3JhdmUnOidcXHhEMicsJ29yZGYnOidcXHhBQScsJ29yZG0nOidcXHhCQScsJ29zbGFzaCc6J1xceEY4JywnT3NsYXNoJzonXFx4RDgnLCdvdGlsZGUnOidcXHhGNScsJ090aWxkZSc6J1xceEQ1Jywnb3VtbCc6J1xceEY2JywnT3VtbCc6J1xceEQ2JywncGFyYSc6J1xceEI2JywncGx1c21uJzonXFx4QjEnLCdwb3VuZCc6J1xceEEzJywncXVvdCc6J1wiJywnUVVPVCc6J1wiJywncmFxdW8nOidcXHhCQicsJ3JlZyc6J1xceEFFJywnUkVHJzonXFx4QUUnLCdzZWN0JzonXFx4QTcnLCdzaHknOidcXHhBRCcsJ3N1cDEnOidcXHhCOScsJ3N1cDInOidcXHhCMicsJ3N1cDMnOidcXHhCMycsJ3N6bGlnJzonXFx4REYnLCd0aG9ybic6J1xceEZFJywnVEhPUk4nOidcXHhERScsJ3RpbWVzJzonXFx4RDcnLCd1YWN1dGUnOidcXHhGQScsJ1VhY3V0ZSc6J1xceERBJywndWNpcmMnOidcXHhGQicsJ1VjaXJjJzonXFx4REInLCd1Z3JhdmUnOidcXHhGOScsJ1VncmF2ZSc6J1xceEQ5JywndW1sJzonXFx4QTgnLCd1dW1sJzonXFx4RkMnLCdVdW1sJzonXFx4REMnLCd5YWN1dGUnOidcXHhGRCcsJ1lhY3V0ZSc6J1xceEREJywneWVuJzonXFx4QTUnLCd5dW1sJzonXFx4RkYnfTtcblx0dmFyIGRlY29kZU1hcE51bWVyaWMgPSB7JzAnOidcXHVGRkZEJywnMTI4JzonXFx1MjBBQycsJzEzMCc6J1xcdTIwMUEnLCcxMzEnOidcXHUwMTkyJywnMTMyJzonXFx1MjAxRScsJzEzMyc6J1xcdTIwMjYnLCcxMzQnOidcXHUyMDIwJywnMTM1JzonXFx1MjAyMScsJzEzNic6J1xcdTAyQzYnLCcxMzcnOidcXHUyMDMwJywnMTM4JzonXFx1MDE2MCcsJzEzOSc6J1xcdTIwMzknLCcxNDAnOidcXHUwMTUyJywnMTQyJzonXFx1MDE3RCcsJzE0NSc6J1xcdTIwMTgnLCcxNDYnOidcXHUyMDE5JywnMTQ3JzonXFx1MjAxQycsJzE0OCc6J1xcdTIwMUQnLCcxNDknOidcXHUyMDIyJywnMTUwJzonXFx1MjAxMycsJzE1MSc6J1xcdTIwMTQnLCcxNTInOidcXHUwMkRDJywnMTUzJzonXFx1MjEyMicsJzE1NCc6J1xcdTAxNjEnLCcxNTUnOidcXHUyMDNBJywnMTU2JzonXFx1MDE1MycsJzE1OCc6J1xcdTAxN0UnLCcxNTknOidcXHUwMTc4J307XG5cdHZhciBpbnZhbGlkUmVmZXJlbmNlQ29kZVBvaW50cyA9IFsxLDIsMyw0LDUsNiw3LDgsMTEsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksNjQ5NzYsNjQ5NzcsNjQ5NzgsNjQ5NzksNjQ5ODAsNjQ5ODEsNjQ5ODIsNjQ5ODMsNjQ5ODQsNjQ5ODUsNjQ5ODYsNjQ5ODcsNjQ5ODgsNjQ5ODksNjQ5OTAsNjQ5OTEsNjQ5OTIsNjQ5OTMsNjQ5OTQsNjQ5OTUsNjQ5OTYsNjQ5OTcsNjQ5OTgsNjQ5OTksNjUwMDAsNjUwMDEsNjUwMDIsNjUwMDMsNjUwMDQsNjUwMDUsNjUwMDYsNjUwMDcsNjU1MzQsNjU1MzUsMTMxMDcwLDEzMTA3MSwxOTY2MDYsMTk2NjA3LDI2MjE0MiwyNjIxNDMsMzI3Njc4LDMyNzY3OSwzOTMyMTQsMzkzMjE1LDQ1ODc1MCw0NTg3NTEsNTI0Mjg2LDUyNDI4Nyw1ODk4MjIsNTg5ODIzLDY1NTM1OCw2NTUzNTksNzIwODk0LDcyMDg5NSw3ODY0MzAsNzg2NDMxLDg1MTk2Niw4NTE5NjcsOTE3NTAyLDkxNzUwMyw5ODMwMzgsOTgzMDM5LDEwNDg1NzQsMTA0ODU3NSwxMTE0MTEwLDExMTQxMTFdO1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG5cdHZhciBvYmplY3QgPSB7fTtcblx0dmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0Lmhhc093blByb3BlcnR5O1xuXHR2YXIgaGFzID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eU5hbWUpIHtcblx0XHRyZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdH07XG5cblx0dmFyIGNvbnRhaW5zID0gZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7XG5cdFx0dmFyIGluZGV4ID0gLTE7XG5cdFx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0aWYgKGFycmF5W2luZGV4XSA9PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdHZhciBtZXJnZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG5cdFx0aWYgKCFvcHRpb25zKSB7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdHM7XG5cdFx0fVxuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHR2YXIga2V5O1xuXHRcdGZvciAoa2V5IGluIGRlZmF1bHRzKSB7XG5cdFx0XHQvLyBBIGBoYXNPd25Qcm9wZXJ0eWAgY2hlY2sgaXMgbm90IG5lZWRlZCBoZXJlLCBzaW5jZSBvbmx5IHJlY29nbml6ZWRcblx0XHRcdC8vIG9wdGlvbiBuYW1lcyBhcmUgdXNlZCBhbnl3YXkuIEFueSBvdGhlcnMgYXJlIGlnbm9yZWQuXG5cdFx0XHRyZXN1bHRba2V5XSA9IGhhcyhvcHRpb25zLCBrZXkpID8gb3B0aW9uc1trZXldIDogZGVmYXVsdHNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyBNb2RpZmllZCB2ZXJzaW9uIG9mIGB1Y3MyZW5jb2RlYDsgc2VlIGh0dHBzOi8vbXRocy5iZS9wdW55Y29kZS5cblx0dmFyIGNvZGVQb2ludFRvU3ltYm9sID0gZnVuY3Rpb24oY29kZVBvaW50LCBzdHJpY3QpIHtcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0aWYgKChjb2RlUG9pbnQgPj0gMHhEODAwICYmIGNvZGVQb2ludCA8PSAweERGRkYpIHx8IGNvZGVQb2ludCA+IDB4MTBGRkZGKSB7XG5cdFx0XHQvLyBTZWUgaXNzdWUgIzQ6XG5cdFx0XHQvLyDigJxPdGhlcndpc2UsIGlmIHRoZSBudW1iZXIgaXMgaW4gdGhlIHJhbmdlIDB4RDgwMCB0byAweERGRkYgb3IgaXNcblx0XHRcdC8vIGdyZWF0ZXIgdGhhbiAweDEwRkZGRiwgdGhlbiB0aGlzIGlzIGEgcGFyc2UgZXJyb3IuIFJldHVybiBhIFUrRkZGRFxuXHRcdFx0Ly8gUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLuKAnVxuXHRcdFx0aWYgKHN0cmljdCkge1xuXHRcdFx0XHRwYXJzZUVycm9yKCdjaGFyYWN0ZXIgcmVmZXJlbmNlIG91dHNpZGUgdGhlIHBlcm1pc3NpYmxlIFVuaWNvZGUgcmFuZ2UnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAnXFx1RkZGRCc7XG5cdFx0fVxuXHRcdGlmIChoYXMoZGVjb2RlTWFwTnVtZXJpYywgY29kZVBvaW50KSkge1xuXHRcdFx0aWYgKHN0cmljdCkge1xuXHRcdFx0XHRwYXJzZUVycm9yKCdkaXNhbGxvd2VkIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkZWNvZGVNYXBOdW1lcmljW2NvZGVQb2ludF07XG5cdFx0fVxuXHRcdGlmIChzdHJpY3QgJiYgY29udGFpbnMoaW52YWxpZFJlZmVyZW5jZUNvZGVQb2ludHMsIGNvZGVQb2ludCkpIHtcblx0XHRcdHBhcnNlRXJyb3IoJ2Rpc2FsbG93ZWQgY2hhcmFjdGVyIHJlZmVyZW5jZScpO1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG5cdFx0XHRjb2RlUG9pbnQgLT0gMHgxMDAwMDtcblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUoY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGO1xuXHRcdH1cblx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHR2YXIgaGV4RXNjYXBlID0gZnVuY3Rpb24oY29kZVBvaW50KSB7XG5cdFx0cmV0dXJuICcmI3gnICsgY29kZVBvaW50LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgJzsnO1xuXHR9O1xuXG5cdHZhciBkZWNFc2NhcGUgPSBmdW5jdGlvbihjb2RlUG9pbnQpIHtcblx0XHRyZXR1cm4gJyYjJyArIGNvZGVQb2ludCArICc7Jztcblx0fTtcblxuXHR2YXIgcGFyc2VFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHR0aHJvdyBFcnJvcignUGFyc2UgZXJyb3I6ICcgKyBtZXNzYWdlKTtcblx0fTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyA9IG1lcmdlKG9wdGlvbnMsIGVuY29kZS5vcHRpb25zKTtcblx0XHR2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG5cdFx0aWYgKHN0cmljdCAmJiByZWdleEludmFsaWRSYXdDb2RlUG9pbnQudGVzdChzdHJpbmcpKSB7XG5cdFx0XHRwYXJzZUVycm9yKCdmb3JiaWRkZW4gY29kZSBwb2ludCcpO1xuXHRcdH1cblx0XHR2YXIgZW5jb2RlRXZlcnl0aGluZyA9IG9wdGlvbnMuZW5jb2RlRXZlcnl0aGluZztcblx0XHR2YXIgdXNlTmFtZWRSZWZlcmVuY2VzID0gb3B0aW9ucy51c2VOYW1lZFJlZmVyZW5jZXM7XG5cdFx0dmFyIGFsbG93VW5zYWZlU3ltYm9scyA9IG9wdGlvbnMuYWxsb3dVbnNhZmVTeW1ib2xzO1xuXHRcdHZhciBlc2NhcGVDb2RlUG9pbnQgPSBvcHRpb25zLmRlY2ltYWwgPyBkZWNFc2NhcGUgOiBoZXhFc2NhcGU7XG5cblx0XHR2YXIgZXNjYXBlQm1wU3ltYm9sID0gZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gZXNjYXBlQ29kZVBvaW50KHN5bWJvbC5jaGFyQ29kZUF0KDApKTtcblx0XHR9O1xuXG5cdFx0aWYgKGVuY29kZUV2ZXJ5dGhpbmcpIHtcblx0XHRcdC8vIEVuY29kZSBBU0NJSSBzeW1ib2xzLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhBc2NpaVdoaXRlbGlzdCwgZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRcdC8vIFVzZSBuYW1lZCByZWZlcmVuY2VzIGlmIHJlcXVlc3RlZCAmIHBvc3NpYmxlLlxuXHRcdFx0XHRpZiAodXNlTmFtZWRSZWZlcmVuY2VzICYmIGhhcyhlbmNvZGVNYXAsIHN5bWJvbCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N5bWJvbF0gKyAnOyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGVzY2FwZUJtcFN5bWJvbChzeW1ib2wpO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyBTaG9ydGVuIGEgZmV3IGVzY2FwZXMgdGhhdCByZXByZXNlbnQgdHdvIHN5bWJvbHMsIG9mIHdoaWNoIGF0IGxlYXN0IG9uZVxuXHRcdFx0Ly8gaXMgd2l0aGluIHRoZSBBU0NJSSByYW5nZS5cblx0XHRcdGlmICh1c2VOYW1lZFJlZmVyZW5jZXMpIHtcblx0XHRcdFx0c3RyaW5nID0gc3RyaW5nXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyZndDtcXHUyMEQyL2csICcmbnZndDsnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mbHQ7XFx1MjBEMi9nLCAnJm52bHQ7Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiN4NjY7JiN4NkE7L2csICcmZmpsaWc7Jyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbmNvZGUgbm9uLUFTQ0lJIHN5bWJvbHMuXG5cdFx0XHRpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHRcdC8vIEVuY29kZSBub24tQVNDSUkgc3ltYm9scyB0aGF0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbmFtZWQgcmVmZXJlbmNlLlxuXHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEVuY29kZU5vbkFzY2lpLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZW5jb2RlTWFwLCBzdHJpbmcpYCBoZXJlLlxuXHRcdFx0XHRcdHJldHVybiAnJicgKyBlbmNvZGVNYXBbc3RyaW5nXSArICc7Jztcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBOb3RlOiBhbnkgcmVtYWluaW5nIG5vbi1BU0NJSSBzeW1ib2xzIGFyZSBoYW5kbGVkIG91dHNpZGUgb2YgdGhlIGBpZmAuXG5cdFx0fSBlbHNlIGlmICh1c2VOYW1lZFJlZmVyZW5jZXMpIHtcblx0XHRcdC8vIEFwcGx5IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzLlxuXHRcdFx0Ly8gRW5jb2RlIGA8PlwiJyZgIHVzaW5nIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzLlxuXHRcdFx0aWYgKCFhbGxvd1Vuc2FmZVN5bWJvbHMpIHtcblx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFc2NhcGUsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiAnJicgKyBlbmNvZGVNYXBbc3RyaW5nXSArICc7JzsgLy8gbm8gbmVlZCB0byBjaGVjayBgaGFzKClgIGhlcmVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBTaG9ydGVuIGVzY2FwZXMgdGhhdCByZXByZXNlbnQgdHdvIHN5bWJvbHMsIG9mIHdoaWNoIGF0IGxlYXN0IG9uZSBpc1xuXHRcdFx0Ly8gYDw+XCInJmAuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmdcblx0XHRcdFx0LnJlcGxhY2UoLyZndDtcXHUyMEQyL2csICcmbnZndDsnKVxuXHRcdFx0XHQucmVwbGFjZSgvJmx0O1xcdTIwRDIvZywgJyZudmx0OycpO1xuXHRcdFx0Ly8gRW5jb2RlIG5vbi1BU0NJSSBzeW1ib2xzIHRoYXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBuYW1lZCByZWZlcmVuY2UuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEVuY29kZU5vbkFzY2lpLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGVuY29kZU1hcCwgc3RyaW5nKWAgaGVyZS5cblx0XHRcdFx0cmV0dXJuICcmJyArIGVuY29kZU1hcFtzdHJpbmddICsgJzsnO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICghYWxsb3dVbnNhZmVTeW1ib2xzKSB7XG5cdFx0XHQvLyBFbmNvZGUgYDw+XCInJmAgdXNpbmcgaGV4YWRlY2ltYWwgZXNjYXBlcywgbm93IHRoYXQgdGhleeKAmXJlIG5vdCBoYW5kbGVkXG5cdFx0XHQvLyB1c2luZyBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4RXNjYXBlLCBlc2NhcGVCbXBTeW1ib2wpO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyaW5nXG5cdFx0XHQvLyBFbmNvZGUgYXN0cmFsIHN5bWJvbHMuXG5cdFx0XHQucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsIGZ1bmN0aW9uKCQwKSB7XG5cdFx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0XHR2YXIgaGlnaCA9ICQwLmNoYXJDb2RlQXQoMCk7XG5cdFx0XHRcdHZhciBsb3cgPSAkMC5jaGFyQ29kZUF0KDEpO1xuXHRcdFx0XHR2YXIgY29kZVBvaW50ID0gKGhpZ2ggLSAweEQ4MDApICogMHg0MDAgKyBsb3cgLSAweERDMDAgKyAweDEwMDAwO1xuXHRcdFx0XHRyZXR1cm4gZXNjYXBlQ29kZVBvaW50KGNvZGVQb2ludCk7XG5cdFx0XHR9KVxuXHRcdFx0Ly8gRW5jb2RlIGFueSByZW1haW5pbmcgQk1QIHN5bWJvbHMgdGhhdCBhcmUgbm90IHByaW50YWJsZSBBU0NJSSBzeW1ib2xzXG5cdFx0XHQvLyB1c2luZyBhIGhleGFkZWNpbWFsIGVzY2FwZS5cblx0XHRcdC5yZXBsYWNlKHJlZ2V4Qm1wV2hpdGVsaXN0LCBlc2NhcGVCbXBTeW1ib2wpO1xuXHR9O1xuXHQvLyBFeHBvc2UgZGVmYXVsdCBvcHRpb25zIChzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGdsb2JhbGx5KS5cblx0ZW5jb2RlLm9wdGlvbnMgPSB7XG5cdFx0J2FsbG93VW5zYWZlU3ltYm9scyc6IGZhbHNlLFxuXHRcdCdlbmNvZGVFdmVyeXRoaW5nJzogZmFsc2UsXG5cdFx0J3N0cmljdCc6IGZhbHNlLFxuXHRcdCd1c2VOYW1lZFJlZmVyZW5jZXMnOiBmYWxzZSxcblx0XHQnZGVjaW1hbCcgOiBmYWxzZVxuXHR9O1xuXG5cdHZhciBkZWNvZGUgPSBmdW5jdGlvbihodG1sLCBvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyA9IG1lcmdlKG9wdGlvbnMsIGRlY29kZS5vcHRpb25zKTtcblx0XHR2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG5cdFx0aWYgKHN0cmljdCAmJiByZWdleEludmFsaWRFbnRpdHkudGVzdChodG1sKSkge1xuXHRcdFx0cGFyc2VFcnJvcignbWFsZm9ybWVkIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHR9XG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZShyZWdleERlY29kZSwgZnVuY3Rpb24oJDAsICQxLCAkMiwgJDMsICQ0LCAkNSwgJDYsICQ3LCAkOCkge1xuXHRcdFx0dmFyIGNvZGVQb2ludDtcblx0XHRcdHZhciBzZW1pY29sb247XG5cdFx0XHR2YXIgZGVjRGlnaXRzO1xuXHRcdFx0dmFyIGhleERpZ2l0cztcblx0XHRcdHZhciByZWZlcmVuY2U7XG5cdFx0XHR2YXIgbmV4dDtcblxuXHRcdFx0aWYgKCQxKSB7XG5cdFx0XHRcdHJlZmVyZW5jZSA9ICQxO1xuXHRcdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZGVjb2RlTWFwLCByZWZlcmVuY2UpYC5cblx0XHRcdFx0cmV0dXJuIGRlY29kZU1hcFtyZWZlcmVuY2VdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDIpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIHdpdGhvdXQgdHJhaWxpbmcgYDtgLCBlLmcuIGAmYW1wYC5cblx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGEgcGFyc2UgZXJyb3IgaWYgaXQgZ2V0cyBjb252ZXJ0ZWQgdG8gYCZgLCBvciBpZiBpdCBpc1xuXHRcdFx0XHQvLyBmb2xsb3dlZCBieSBgPWAgaW4gYW4gYXR0cmlidXRlIGNvbnRleHQuXG5cdFx0XHRcdHJlZmVyZW5jZSA9ICQyO1xuXHRcdFx0XHRuZXh0ID0gJDM7XG5cdFx0XHRcdGlmIChuZXh0ICYmIG9wdGlvbnMuaXNBdHRyaWJ1dGVWYWx1ZSkge1xuXHRcdFx0XHRcdGlmIChzdHJpY3QgJiYgbmV4dCA9PSAnPScpIHtcblx0XHRcdFx0XHRcdHBhcnNlRXJyb3IoJ2AmYCBkaWQgbm90IHN0YXJ0IGEgY2hhcmFjdGVyIHJlZmVyZW5jZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gJDA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHN0cmljdCkge1xuXHRcdFx0XHRcdFx0cGFyc2VFcnJvcihcblx0XHRcdFx0XHRcdFx0J25hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uJ1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGRlY29kZU1hcExlZ2FjeSwgcmVmZXJlbmNlKWAuXG5cdFx0XHRcdFx0cmV0dXJuIGRlY29kZU1hcExlZ2FjeVtyZWZlcmVuY2VdICsgKG5leHQgfHwgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICgkNCkge1xuXHRcdFx0XHQvLyBEZWNvZGUgZGVjaW1hbCBlc2NhcGVzLCBlLmcuIGAmIzExOTU1ODtgLlxuXHRcdFx0XHRkZWNEaWdpdHMgPSAkNDtcblx0XHRcdFx0c2VtaWNvbG9uID0gJDU7XG5cdFx0XHRcdGlmIChzdHJpY3QgJiYgIXNlbWljb2xvbikge1xuXHRcdFx0XHRcdHBhcnNlRXJyb3IoJ2NoYXJhY3RlciByZWZlcmVuY2Ugd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29kZVBvaW50ID0gcGFyc2VJbnQoZGVjRGlnaXRzLCAxMCk7XG5cdFx0XHRcdHJldHVybiBjb2RlUG9pbnRUb1N5bWJvbChjb2RlUG9pbnQsIHN0cmljdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgkNikge1xuXHRcdFx0XHQvLyBEZWNvZGUgaGV4YWRlY2ltYWwgZXNjYXBlcywgZS5nLiBgJiN4MUQzMDY7YC5cblx0XHRcdFx0aGV4RGlnaXRzID0gJDY7XG5cdFx0XHRcdHNlbWljb2xvbiA9ICQ3O1xuXHRcdFx0XHRpZiAoc3RyaWN0ICYmICFzZW1pY29sb24pIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKCdjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvZGVQb2ludCA9IHBhcnNlSW50KGhleERpZ2l0cywgMTYpO1xuXHRcdFx0XHRyZXR1cm4gY29kZVBvaW50VG9TeW1ib2woY29kZVBvaW50LCBzdHJpY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB3ZeKAmXJlIHN0aWxsIGhlcmUsIGBpZiAoJDcpYCBpcyBpbXBsaWVkOyBpdOKAmXMgYW4gYW1iaWd1b3VzXG5cdFx0XHQvLyBhbXBlcnNhbmQgZm9yIHN1cmUuIGh0dHBzOi8vbXRocy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kc1xuXHRcdFx0aWYgKHN0cmljdCkge1xuXHRcdFx0XHRwYXJzZUVycm9yKFxuXHRcdFx0XHRcdCduYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbidcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAkMDtcblx0XHR9KTtcblx0fTtcblx0Ly8gRXhwb3NlIGRlZmF1bHQgb3B0aW9ucyAoc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSkuXG5cdGRlY29kZS5vcHRpb25zID0ge1xuXHRcdCdpc0F0dHJpYnV0ZVZhbHVlJzogZmFsc2UsXG5cdFx0J3N0cmljdCc6IGZhbHNlXG5cdH07XG5cblx0dmFyIGVzY2FwZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleEVzY2FwZSwgZnVuY3Rpb24oJDApIHtcblx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhlc2NhcGVNYXAsICQwKWAgaGVyZS5cblx0XHRcdHJldHVybiBlc2NhcGVNYXBbJDBdO1xuXHRcdH0pO1xuXHR9O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBoZSA9IHtcblx0XHQndmVyc2lvbic6ICcxLjIuMCcsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0J3VuZXNjYXBlJzogZGVjb2RlXG5cdH07XG5cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gaGU7XG5cdFx0fSk7XG5cdH1cdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IGhlO1xuXHRcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaGUpIHtcblx0XHRcdFx0aGFzKGhlLCBrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gaGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5oZSA9IGhlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZSgndW5kZXJzY29yZScsIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IGdsb2JhbC5fO1xuICAgIHZhciBleHBvcnRzID0gZ2xvYmFsLl8gPSBmYWN0b3J5KCk7XG4gICAgZXhwb3J0cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeyBnbG9iYWwuXyA9IGN1cnJlbnQ7IHJldHVybiBleHBvcnRzOyB9O1xuICB9KCkpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHtcbiAgLy8gICAgIFVuZGVyc2NvcmUuanMgMS4xMy42XG4gIC8vICAgICBodHRwczovL3VuZGVyc2NvcmVqcy5vcmdcbiAgLy8gICAgIChjKSAyMDA5LTIwMjIgSmVyZW15IEFzaGtlbmFzLCBKdWxpYW4gR29uZ2dyaWpwLCBhbmQgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gIC8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cbiAgdmFyIFZFUlNJT04gPSAnMS4xMy42JztcblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9ICh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZikgfHxcbiAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpIHx8XG4gICAgICAgICAgICB7fTtcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgU3ltYm9sUHJvdG8gPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbC5wcm90b3R5cGUgOiBudWxsO1xuXG4gIC8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuICB2YXIgcHVzaCA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSxcbiAgICAgIHRvU3RyaW5nID0gT2JqUHJvdG8udG9TdHJpbmcsXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9ialByb3RvLmhhc093blByb3BlcnR5O1xuXG4gIC8vIE1vZGVybiBmZWF0dXJlIGRldGVjdGlvbi5cbiAgdmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnLFxuICAgICAgc3VwcG9ydHNEYXRhVmlldyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KyoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZVxuICAvLyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAgdmFyIG5hdGl2ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5LFxuICAgICAgbmF0aXZlS2V5cyA9IE9iamVjdC5rZXlzLFxuICAgICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICAgIG5hdGl2ZUlzVmlldyA9IHN1cHBvcnRzQXJyYXlCdWZmZXIgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xuXG4gIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIHRoZXNlIGJ1aWx0aW4gZnVuY3Rpb25zIGJlY2F1c2Ugd2Ugb3ZlcnJpZGUgdGhlbS5cbiAgdmFyIF9pc05hTiA9IGlzTmFOLFxuICAgICAgX2lzRmluaXRlID0gaXNGaW5pdGU7XG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICAvLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuXG4gIHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIGZ1bmN0aW9uIHJlc3RBcmd1bWVudHMoZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmopO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBmdW5jdGlvbiBpc051bGwob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj9cbiAgZnVuY3Rpb24gaXNCb29sZWFuKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbiAgZnVuY3Rpb24gaXNFbGVtZW50KG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSB0ZXN0ZXIuXG4gIGZ1bmN0aW9uIHRhZ1Rlc3RlcihuYW1lKSB7XG4gICAgdmFyIHRhZyA9ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09IHRhZztcbiAgICB9O1xuICB9XG5cbiAgdmFyIGlzU3RyaW5nID0gdGFnVGVzdGVyKCdTdHJpbmcnKTtcblxuICB2YXIgaXNOdW1iZXIgPSB0YWdUZXN0ZXIoJ051bWJlcicpO1xuXG4gIHZhciBpc0RhdGUgPSB0YWdUZXN0ZXIoJ0RhdGUnKTtcblxuICB2YXIgaXNSZWdFeHAgPSB0YWdUZXN0ZXIoJ1JlZ0V4cCcpO1xuXG4gIHZhciBpc0Vycm9yID0gdGFnVGVzdGVyKCdFcnJvcicpO1xuXG4gIHZhciBpc1N5bWJvbCA9IHRhZ1Rlc3RlcignU3ltYm9sJyk7XG5cbiAgdmFyIGlzQXJyYXlCdWZmZXIgPSB0YWdUZXN0ZXIoJ0FycmF5QnVmZmVyJyk7XG5cbiAgdmFyIGlzRnVuY3Rpb24gPSB0YWdUZXN0ZXIoJ0Z1bmN0aW9uJyk7XG5cbiAgLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIGB0eXBlb2ZgIGJ1Z3MgaW4gb2xkXG4gIC8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuXG4gIHZhciBub2RlbGlzdCA9IHJvb3QuZG9jdW1lbnQgJiYgcm9vdC5kb2N1bWVudC5jaGlsZE5vZGVzO1xuICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcgJiYgdHlwZW9mIG5vZGVsaXN0ICE9ICdmdW5jdGlvbicpIHtcbiAgICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlO1xuICAgIH07XG4gIH1cblxuICB2YXIgaXNGdW5jdGlvbiQxID0gaXNGdW5jdGlvbjtcblxuICB2YXIgaGFzT2JqZWN0VGFnID0gdGFnVGVzdGVyKCdPYmplY3QnKTtcblxuICAvLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIGBEYXRhVmlld2AgaGFzIHN0cmluZyB0YWcgYCdbb2JqZWN0IE9iamVjdF0nYC5cbiAgLy8gSW4gSUUgMTEsIHRoZSBtb3N0IGNvbW1vbiBhbW9uZyB0aGVtLCB0aGlzIHByb2JsZW0gYWxzbyBhcHBsaWVzIHRvXG4gIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgLlxuICB2YXIgaGFzU3RyaW5nVGFnQnVnID0gKFxuICAgICAgICBzdXBwb3J0c0RhdGFWaWV3ICYmIGhhc09iamVjdFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKSlcbiAgICAgICksXG4gICAgICBpc0lFMTEgPSAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaGFzT2JqZWN0VGFnKG5ldyBNYXApKTtcblxuICB2YXIgaXNEYXRhVmlldyA9IHRhZ1Rlc3RlcignRGF0YVZpZXcnKTtcblxuICAvLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIHdlIG5lZWQgYSBkaWZmZXJlbnQgaGV1cmlzdGljXG4gIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGBEYXRhVmlld2AuXG4gIGZ1bmN0aW9uIGllMTBJc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBpc0Z1bmN0aW9uJDEob2JqLmdldEludDgpICYmIGlzQXJyYXlCdWZmZXIob2JqLmJ1ZmZlcik7XG4gIH1cblxuICB2YXIgaXNEYXRhVmlldyQxID0gKGhhc1N0cmluZ1RhZ0J1ZyA/IGllMTBJc0RhdGFWaWV3IDogaXNEYXRhVmlldyk7XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT9cbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIGBBcnJheS5pc0FycmF5YC5cbiAgdmFyIGlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IHRhZ1Rlc3RlcignQXJyYXknKTtcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGBrZXlgIGlzIGFuIG93biBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuICBmdW5jdGlvbiBoYXMkMShvYmosIGtleSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfVxuXG4gIHZhciBpc0FyZ3VtZW50cyA9IHRhZ1Rlc3RlcignQXJndW1lbnRzJyk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICAoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFpc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgICBpc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gaGFzJDEob2JqLCAnY2FsbGVlJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSgpKTtcblxuICB2YXIgaXNBcmd1bWVudHMkMSA9IGlzQXJndW1lbnRzO1xuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgZnVuY3Rpb24gaXNGaW5pdGUkMShvYmopIHtcbiAgICByZXR1cm4gIWlzU3ltYm9sKG9iaikgJiYgX2lzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XG4gIH1cblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIGZ1bmN0aW9uIGlzTmFOJDEob2JqKSB7XG4gICAgcmV0dXJuIGlzTnVtYmVyKG9iaikgJiYgX2lzTmFOKG9iaik7XG4gIH1cblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbi4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIC8vIENvbW1vbiBpbnRlcm5hbCBsb2dpYyBmb3IgYGlzQXJyYXlMaWtlYCBhbmQgYGlzQnVmZmVyTGlrZWAuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldFNpemVQcm9wZXJ0eSkge1xuICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgc2l6ZVByb3BlcnR5ID0gZ2V0U2l6ZVByb3BlcnR5KGNvbGxlY3Rpb24pO1xuICAgICAgcmV0dXJuIHR5cGVvZiBzaXplUHJvcGVydHkgPT0gJ251bWJlcicgJiYgc2l6ZVByb3BlcnR5ID49IDAgJiYgc2l6ZVByb3BlcnR5IDw9IE1BWF9BUlJBWV9JTkRFWDtcbiAgICB9XG4gIH1cblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBvYnRhaW4gcHJvcGVydHkgYGtleWAgZnJvbSBgb2JqYC5cbiAgZnVuY3Rpb24gc2hhbGxvd1Byb3BlcnR5KGtleSkge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgYnl0ZUxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuICB2YXIgZ2V0Qnl0ZUxlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnYnl0ZUxlbmd0aCcpO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BlbmQgZXh0ZW5zaXZlIGNoZWNrcyBhZ2FpbnN0XG4gIC8vIGBBcnJheUJ1ZmZlcmAgZXQgYWwuXG4gIHZhciBpc0J1ZmZlckxpa2UgPSBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRCeXRlTGVuZ3RoKTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgdHlwZWQgYXJyYXk/XG4gIHZhciB0eXBlZEFycmF5UGF0dGVybiA9IC9cXFtvYmplY3QgKChJfFVpKW50KDh8MTZ8MzIpfEZsb2F0KDMyfDY0KXxVaW50OENsYW1wZWR8QmlnKEl8VWkpbnQ2NClBcnJheVxcXS87XG4gIGZ1bmN0aW9uIGlzVHlwZWRBcnJheShvYmopIHtcbiAgICAvLyBgQXJyYXlCdWZmZXIuaXNWaWV3YCBpcyB0aGUgbW9zdCBmdXR1cmUtcHJvb2YsIHNvIHVzZSBpdCB3aGVuIGF2YWlsYWJsZS5cbiAgICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayBvbiB0aGUgYWJvdmUgcmVndWxhciBleHByZXNzaW9uLlxuICAgIHJldHVybiBuYXRpdmVJc1ZpZXcgPyAobmF0aXZlSXNWaWV3KG9iaikgJiYgIWlzRGF0YVZpZXckMShvYmopKSA6XG4gICAgICAgICAgICAgICAgICBpc0J1ZmZlckxpa2Uob2JqKSAmJiB0eXBlZEFycmF5UGF0dGVybi50ZXN0KHRvU3RyaW5nLmNhbGwob2JqKSk7XG4gIH1cblxuICB2YXIgaXNUeXBlZEFycmF5JDEgPSBzdXBwb3J0c0FycmF5QnVmZmVyID8gaXNUeXBlZEFycmF5IDogY29uc3RhbnQoZmFsc2UpO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBvYnRhaW4gdGhlIGBsZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHNpbXBsZSBsb29rdXAgc3RydWN0dXJlLlxuICAvLyBgY29sbGVjdE5vbkVudW1Qcm9wc2AgdXNlZCB0byBkZXBlbmQgb24gYF8uY29udGFpbnNgLCBidXQgdGhpcyBsZWQgdG9cbiAgLy8gY2lyY3VsYXIgaW1wb3J0cy4gYGVtdWxhdGVkU2V0YCBpcyBhIG9uZS1vZmYgc29sdXRpb24gdGhhdCBvbmx5IHdvcmtzIGZvclxuICAvLyBhcnJheXMgb2Ygc3RyaW5ncy5cbiAgZnVuY3Rpb24gZW11bGF0ZWRTZXQoa2V5cykge1xuICAgIHZhciBoYXNoID0ge307XG4gICAgZm9yICh2YXIgbCA9IGtleXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7ICsraSkgaGFzaFtrZXlzW2ldXSA9IHRydWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGhhc2hba2V5XSA9PT0gdHJ1ZTsgfSxcbiAgICAgIHB1c2g6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBoYXNoW2tleV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4ga2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlci4gQ2hlY2tzIGBrZXlzYCBmb3IgdGhlIHByZXNlbmNlIG9mIGtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3RcbiAgLy8gYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuIEV4dGVuZHMgYGtleXNgIGluIHBsYWNlIGlmXG4gIC8vIG5lZWRlZC5cbiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZW11bGF0ZWRTZXQoa2V5cyk7XG4gICAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgcHJvdG8gPSAoaXNGdW5jdGlvbiQxKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChoYXMkMShvYmosIHByb3ApICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIWtleXMuY29udGFpbnMocHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYC5cbiAgZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChoYXMkMShvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuXG4gIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTa2lwIHRoZSBtb3JlIGV4cGVuc2l2ZSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgY2hlY2tzIGlmIGBvYmpgIGhhcyBub1xuICAgIC8vIGAubGVuZ3RoYC5cbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9iaik7XG4gICAgaWYgKHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgKFxuICAgICAgaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikgfHwgaXNBcmd1bWVudHMkMShvYmopXG4gICAgKSkgcmV0dXJuIGxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7XG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhhdHRycyksIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gX2tleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0IGNhblxuICAvLyBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIGFkZGVkXG4gIC8vIHRocm91Z2ggYF8ubWl4aW5gLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG4gIGZ1bmN0aW9uIF8kMShvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXyQxKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfJDEpKSByZXR1cm4gbmV3IF8kMShvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH1cblxuICBfJDEuVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8kMS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveGllcyBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXyQxLnByb3RvdHlwZS52YWx1ZU9mID0gXyQxLnByb3RvdHlwZS50b0pTT04gPSBfJDEucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8kMS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLFxuICAvLyB0eXBlZCBhcnJheSBvciBEYXRhVmlldyB0byBhIG5ldyB2aWV3LCByZXVzaW5nIHRoZSBidWZmZXIuXG4gIGZ1bmN0aW9uIHRvQnVmZmVyVmlldyhidWZmZXJTb3VyY2UpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBidWZmZXJTb3VyY2UuYnVmZmVyIHx8IGJ1ZmZlclNvdXJjZSxcbiAgICAgIGJ1ZmZlclNvdXJjZS5ieXRlT2Zmc2V0IHx8IDAsXG4gICAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSlcbiAgICApO1xuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgc3RyaW5nIHR3aWNlLCBzbyBnaXZlIGl0IGEgbmFtZSBmb3IgbWluaWZpY2F0aW9uLlxuICB2YXIgdGFnRGF0YVZpZXcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbiAgZnVuY3Rpb24gZXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHBzOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gYG51bGxgIG9yIGB1bmRlZmluZWRgIG9ubHkgZXF1YWwgdG8gaXRzZWxmIChzdHJpY3QgY29tcGFyaXNvbikuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgIGlmIChhICE9PSBhKSByZXR1cm4gYiAhPT0gYjtcbiAgICAvLyBFeGhhdXN0IHByaW1pdGl2ZSBjaGVja3NcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICAgIGlmICh0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjayk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYF8uaXNFcXVhbGAuXG4gIGZ1bmN0aW9uIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXyQxKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8kMSkgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gV29yayBhcm91bmQgYSBidWcgaW4gSUUgMTAgLSBFZGdlIDEzLlxuICAgIGlmIChoYXNTdHJpbmdUYWdCdWcgJiYgY2xhc3NOYW1lID09ICdbb2JqZWN0IE9iamVjdF0nICYmIGlzRGF0YVZpZXckMShhKSkge1xuICAgICAgaWYgKCFpc0RhdGFWaWV3JDEoYikpIHJldHVybiBmYWxzZTtcbiAgICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3O1xuICAgIH1cbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBTeW1ib2xdJzpcbiAgICAgICAgcmV0dXJuIFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGIpO1xuICAgICAgY2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuICAgICAgY2FzZSB0YWdEYXRhVmlldzpcbiAgICAgICAgLy8gQ29lcmNlIHRvIHR5cGVkIGFycmF5IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guXG4gICAgICAgIHJldHVybiBkZWVwRXEodG9CdWZmZXJWaWV3KGEpLCB0b0J1ZmZlclZpZXcoYiksIGFTdGFjaywgYlN0YWNrKTtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzICYmIGlzVHlwZWRBcnJheSQxKGEpKSB7XG4gICAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTtcbiAgICAgICAgaWYgKGJ5dGVMZW5ndGggIT09IGdldEJ5dGVMZW5ndGgoYikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGEuYnVmZmVyID09PSBiLmJ1ZmZlciAmJiBhLmJ5dGVPZmZzZXQgPT09IGIuYnl0ZU9mZnNldCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGFyZUFycmF5cyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKGlzRnVuY3Rpb24kMShhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24kMShiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgdmFyIF9rZXlzID0ga2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYgKGtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0gX2tleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoaGFzJDEoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfVxuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIGFsbEtleXMob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIC8vIFNpbmNlIHRoZSByZWd1bGFyIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0eXBlIHRlc3RzIGRvbid0IHdvcmsgZm9yXG4gIC8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZFxuICAvLyBvbiB0aGUgbWV0aG9kcy4gSXQncyBub3QgZ3JlYXQsIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGdvdC5cbiAgLy8gVGhlIGZpbmdlcnByaW50IG1ldGhvZCBsaXN0cyBhcmUgZGVmaW5lZCBiZWxvdy5cbiAgZnVuY3Rpb24gaWUxMWZpbmdlcnByaW50KG1ldGhvZHMpIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG1ldGhvZHMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgaGF2ZSBubyBlbnVtZXJhYmxlIGtleXMuXG4gICAgICB2YXIga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICAgIGlmIChnZXRMZW5ndGgoa2V5cykpIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uJDEob2JqW21ldGhvZHNbaV1dKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSWYgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdCBgV2Vha01hcGAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAgIC8vIGBvYmpgIGRvZXNuJ3QgaGF2ZSBhIGBmb3JFYWNoYCBtZXRob2QgaW4gb3JkZXIgdG8gZGlzdGluZ3Vpc2hcbiAgICAgIC8vIGl0IGZyb20gYSByZWd1bGFyIGBNYXBgLlxuICAgICAgcmV0dXJuIG1ldGhvZHMgIT09IHdlYWtNYXBNZXRob2RzIHx8ICFpc0Z1bmN0aW9uJDEob2JqW2ZvckVhY2hOYW1lXSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEluIHRoZSBpbnRlcmVzdCBvZiBjb21wYWN0IG1pbmlmaWNhdGlvbiwgd2Ugd3JpdGVcbiAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGZpbmdlcnByaW50cyBvbmx5IG9uY2UuXG4gIHZhciBmb3JFYWNoTmFtZSA9ICdmb3JFYWNoJyxcbiAgICAgIGhhc05hbWUgPSAnaGFzJyxcbiAgICAgIGNvbW1vbkluaXQgPSBbJ2NsZWFyJywgJ2RlbGV0ZSddLFxuICAgICAgbWFwVGFpbCA9IFsnZ2V0JywgaGFzTmFtZSwgJ3NldCddO1xuXG4gIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGVhY2ggaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnRcbiAgLy8gY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBzdWJsaXN0cy5cbiAgdmFyIG1hcE1ldGhvZHMgPSBjb21tb25Jbml0LmNvbmNhdChmb3JFYWNoTmFtZSwgbWFwVGFpbCksXG4gICAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLFxuICAgICAgc2V0TWV0aG9kcyA9IFsnYWRkJ10uY29uY2F0KGNvbW1vbkluaXQsIGZvckVhY2hOYW1lLCBoYXNOYW1lKTtcblxuICB2YXIgaXNNYXAgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpO1xuXG4gIHZhciBpc1dlYWtNYXAgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQod2Vha01hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdXZWFrTWFwJyk7XG5cbiAgdmFyIGlzU2V0ID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHNldE1ldGhvZHMpIDogdGFnVGVzdGVyKCdTZXQnKTtcblxuICB2YXIgaXNXZWFrU2V0ID0gdGFnVGVzdGVyKCdXZWFrU2V0Jyk7XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW19rZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICAvLyBUaGUgb3Bwb3NpdGUgb2YgYF8ub2JqZWN0YCB3aXRoIG9uZSBhcmd1bWVudC5cbiAgZnVuY3Rpb24gcGFpcnMob2JqKSB7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtfa2V5c1tpXSwgb2JqW19rZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgZnVuY3Rpb24gaW52ZXJ0KG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uJDEob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICB2YXIgZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pblxuICAvLyBvYmplY3QocykuXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICB2YXIgZXh0ZW5kT3duID0gY3JlYXRlQXNzaWduZXIoa2V5cyk7XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgdmFyIGRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlIGEgbmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICBmdW5jdGlvbiBjdG9yKCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpe307XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICBmdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvdHlwZSkge1xuICAgIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICB2YXIgQ3RvciA9IGN0b3IoKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBleHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTtcbiAgfVxuXG4gIC8vIEludm9rZXMgYGludGVyY2VwdG9yYCB3aXRoIHRoZSBgb2JqYCBhbmQgdGhlbiByZXR1cm5zIGBvYmpgLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIGZ1bmN0aW9uIHRhcChvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIGEgKGRlZXApIHByb3BlcnR5IGBwYXRoYCB0byBhcnJheS5cbiAgLy8gTGlrZSBgXy5pdGVyYXRlZWAsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGN1c3RvbWl6ZWQuXG4gIGZ1bmN0aW9uIHRvUGF0aCQxKHBhdGgpIHtcbiAgICByZXR1cm4gaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF07XG4gIH1cbiAgXyQxLnRvUGF0aCA9IHRvUGF0aCQxO1xuXG4gIC8vIEludGVybmFsIHdyYXBwZXIgZm9yIGBfLnRvUGF0aGAgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbi5cbiAgLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuXG4gIGZ1bmN0aW9uIHRvUGF0aChwYXRoKSB7XG4gICAgcmV0dXJuIF8kMS50b1BhdGgocGF0aCk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBvYnRhaW4gYSBuZXN0ZWQgcHJvcGVydHkgaW4gYG9iamAgYWxvbmcgYHBhdGhgLlxuICBmdW5jdGlvbiBkZWVwR2V0KG9iaiwgcGF0aCkge1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICBvYmogPSBvYmpbcGF0aFtpXV07XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGggPyBvYmogOiB2b2lkIDA7XG4gIH1cblxuICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSAoZGVlcCkgcHJvcGVydHkgb24gYHBhdGhgIGZyb20gYG9iamVjdGAuXG4gIC8vIElmIGFueSBwcm9wZXJ0eSBpbiBgcGF0aGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIHZhbHVlIGlzXG4gIC8vIGB1bmRlZmluZWRgLCByZXR1cm4gYGRlZmF1bHRWYWx1ZWAgaW5zdGVhZC5cbiAgLy8gVGhlIGBwYXRoYCBpcyBub3JtYWxpemVkIHRocm91Z2ggYF8udG9QYXRoYC5cbiAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIHZhbHVlID0gZGVlcEdldChvYmplY3QsIHRvUGF0aChwYXRoKSk7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuICB9XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvblxuICAvLyBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLiBVbmxpa2UgdGhlIGludGVybmFsIGBoYXNgXG4gIC8vIGZ1bmN0aW9uLCB0aGlzIHB1YmxpYyB2ZXJzaW9uIGNhbiBhbHNvIHRyYXZlcnNlIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAoIWhhcyQxKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgb2JqID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiAhIWxlbmd0aDtcbiAgfVxuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBleHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gcGFzc2VkIGFuIG9iamVjdCwgd2lsbCB0cmF2ZXJzZSB0aGF0IG9iamVjdOKAmXNcbiAgLy8gcHJvcGVydGllcyBkb3duIHRoZSBnaXZlbiBgcGF0aGAsIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZiBrZXlzIG9yIGluZGljZXMuXG4gIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBvcHRpbWl6ZUNiKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICAvLyBUaGUgMi1hcmd1bWVudCBjYXNlIGlzIG9taXR0ZWQgYmVjYXVzZSB3ZeKAmXJlIG5vdCB1c2luZyBpdC5cbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gZWFjaFxuICAvLyBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyIGBfLmlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIGZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICAgIGlmIChpc0Z1bmN0aW9uJDEodmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpKSByZXR1cm4gbWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIC8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemVcbiAgLy8gYF8uaXRlcmF0ZWVgIGlmIHRoZXkgd2FudCBhZGRpdGlvbmFsIHByZWRpY2F0ZS9pdGVyYXRlZSBzaG9ydGhhbmQgc3R5bGVzLlxuICAvLyBUaGlzIGFic3RyYWN0aW9uIGhpZGVzIHRoZSBpbnRlcm5hbC1vbmx5IGBhcmdDb3VudGAgYXJndW1lbnQuXG4gIGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9XG4gIF8kMS5pdGVyYXRlZSA9IGl0ZXJhdGVlO1xuXG4gIC8vIFRoZSBmdW5jdGlvbiB3ZSBjYWxsIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgYSBjYWxsYmFjay4gSXQgaW52b2tlc1xuICAvLyBgXy5pdGVyYXRlZWAgaWYgb3ZlcnJpZGRlbiwgb3RoZXJ3aXNlIGBiYXNlSXRlcmF0ZWVgLlxuICBmdW5jdGlvbiBjYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoXyQxLml0ZXJhdGVlICE9PSBpdGVyYXRlZSkgcmV0dXJuIF8kMS5pdGVyYXRlZSh2YWx1ZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGVsZW1lbnQgb2YgYG9iamAuXG4gIC8vIEluIGNvbnRyYXN0IHRvIGBfLm1hcGAgaXQgcmV0dXJucyBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIG1hcE9iamVjdChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzW2luZGV4XTtcbiAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIGZ1bmN0aW9uIG5vb3AoKXt9XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG5vb3A7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIGZ1bmN0aW9uIHRpbWVzKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAgKGluY2x1c2l2ZSkuXG4gIGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH1cblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIHZhciBub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5nc1xuICAvLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgZnVuY3Rpb24gY3JlYXRlRXNjYXBlcihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZC5cbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIGZvciBlc2NhcGluZyBzdHJpbmdzIHRvIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIF9lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG5cbiAgLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciB1bmVzY2FwaW5nLlxuICB2YXIgdW5lc2NhcGVNYXAgPSBpbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbiBmb3IgdW5lc2NhcGluZyBzdHJpbmdzIGZyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgX3VuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiBDaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgdmFyIHRlbXBsYXRlU2V0dGluZ3MgPSBfJDEudGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZTogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYF8udGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6IFwiJ1wiLFxuICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICdcXHInOiAncicsXG4gICAgJ1xcbic6ICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZVJlZ0V4cCA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICBmdW5jdGlvbiBlc2NhcGVDaGFyKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9XG5cbiAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbiB0aHJvdWdoXG4gIC8vIGBfLnRlbXBsYXRlU2V0dGluZ3MudmFyaWFibGVgLCB3ZSB0ZXN0IGl0IGFnYWluc3QgdGhlIGZvbGxvd2luZyByZWd1bGFyXG4gIC8vIGV4cHJlc3Npb24uIEl0IGlzIGludGVudGlvbmFsbHkgYSBiaXQgbW9yZSBsaWJlcmFsIHRoYW4ganVzdCBtYXRjaGluZyB2YWxpZFxuICAvLyBpZGVudGlmaWVycywgYnV0IHN0aWxsIHByZXZlbnRzIHBvc3NpYmxlIGxvb3Bob2xlcyB0aHJvdWdoIGRlZmF1bHRzIG9yXG4gIC8vIGRlc3RydWN0dXJpbmcgYXNzaWdubWVudC5cbiAgdmFyIGJhcmVJZGVudGlmaWVyID0gL15cXHMqKFxcd3xcXCQpK1xccyokLztcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBkZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8kMS50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCwgZXNjYXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTtcbiAgICBpZiAoYXJndW1lbnQpIHtcbiAgICAgIC8vIEluc3VyZSBhZ2FpbnN0IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uLiAoQ1ZFLTIwMjEtMjMzNTgpXG4gICAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd2YXJpYWJsZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXI6ICcgKyBhcmd1bWVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG4gICAgICBhcmd1bWVudCA9ICdvYmonO1xuICAgIH1cblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKGFyZ3VtZW50LCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfJDEpO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICAvLyBUcmF2ZXJzZXMgdGhlIGNoaWxkcmVuIG9mIGBvYmpgIGFsb25nIGBwYXRoYC4gSWYgYSBjaGlsZCBpcyBhIGZ1bmN0aW9uLCBpdFxuICAvLyBpcyBpbnZva2VkIHdpdGggaXRzIHBhcmVudCBhcyBjb250ZXh0LiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmluYWxcbiAgLy8gY2hpbGQsIG9yIGBmYWxsYmFja2AgaWYgYW55IGNoaWxkIGlzIHVuZGVmaW5lZC5cbiAgZnVuY3Rpb24gcmVzdWx0KG9iaiwgcGF0aCwgZmFsbGJhY2spIHtcbiAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIGlzRnVuY3Rpb24kMShmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gaXNGdW5jdGlvbiQxKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH1cblxuICAvLyBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGNoYWluKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8kMShvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWxcbiAgLy8gYGFyZ3NgLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3Igb3IgYXMgYVxuICAvLyBub3JtYWwgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChpc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gYF9gIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciBieSBkZWZhdWx0LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlXG4gIC8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuXG4gIHZhciBwYXJ0aWFsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBib3VuZEFyZ3MpIHtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBwYXJ0aWFsLnBsYWNlaG9sZGVyO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gcGxhY2Vob2xkZXIgPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICBwYXJ0aWFsLnBsYWNlaG9sZGVyID0gXyQxO1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS5cbiAgdmFyIGJpbmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24kMShmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGJvdW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihjYWxsQXJncykge1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoY2FsbEFyZ3MpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH0pO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIGlzQXJyYXlMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIGZsYXR0ZW4kMShpbnB1dCwgZGVwdGgsIHN0cmljdCwgb3V0cHV0KSB7XG4gICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuICAgIGlmICghZGVwdGggJiYgZGVwdGggIT09IDApIHtcbiAgICAgIGRlcHRoID0gSW5maW5pdHk7XG4gICAgfSBlbHNlIGlmIChkZXB0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gb3V0cHV0LmNvbmNhdChpbnB1dCk7XG4gICAgfVxuICAgIHZhciBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHMkMSh2YWx1ZSkpKSB7XG4gICAgICAgIC8vIEZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0LlxuICAgICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgICAgZmxhdHRlbiQxKHZhbHVlLCBkZXB0aCAtIDEsIHN0cmljdCwgb3V0cHV0KTtcbiAgICAgICAgICBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChqIDwgbGVuKSBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICB2YXIgYmluZEFsbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAga2V5cyA9IGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IGJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghaGFzJDEoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfVxuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICB2YXIgZGVsYXkgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICB9KTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgdmFyIGRlZmVyID0gcGFydGlhbChkZWxheSwgXyQxLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGltZW91dCwgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgX25vdyA9IG5vdygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IF9ub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBfbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB0aHJvdHRsZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBwcmV2aW91cyA9IDA7XG4gICAgICB0aW1lb3V0ID0gY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhyb3R0bGVkO1xuICB9XG5cbiAgLy8gV2hlbiBhIHNlcXVlbmNlIG9mIGNhbGxzIG9mIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBlbmRzLCB0aGUgYXJndW1lbnRcbiAgLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgXG4gIC8vIHBhcmFtZXRlci4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0aGUgYXJndW1lbnQgZnVuY3Rpb24gd2lsbCBiZVxuICAvLyB0cmlnZ2VyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UgaW5zdGVhZCBvZiBhdCB0aGUgZW5kLlxuICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgcHJldmlvdXMsIGFyZ3MsIHJlc3VsdCwgY29udGV4dDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBhc3NlZCA9IG5vdygpIC0gcHJldmlvdXM7XG4gICAgICBpZiAod2FpdCA+IHBhc3NlZCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGZ1bmNgIGNhbiByZWN1cnNpdmVseSBpbnZva2UgYGRlYm91bmNlZGAuXG4gICAgICAgIGlmICghdGltZW91dCkgYXJncyA9IGNvbnRleHQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZGVib3VuY2VkID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihfYXJncykge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gX2FyZ3M7XG4gICAgICBwcmV2aW91cyA9IG5vdygpO1xuICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gYXJncyA9IGNvbnRleHQgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVib3VuY2VkO1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgZnVuY3Rpb24gd3JhcChmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgZnVuY3Rpb24gYWZ0ZXIodGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlXG4gIC8vIE50aCBjYWxsLlxuICBmdW5jdGlvbiBiZWZvcmUodGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgdmFyIG9uY2UgPSBwYXJ0aWFsKGJlZm9yZSwgMik7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gX2tleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICB2YXIgZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG5cbiAgLy8gUmV0dXJucyB0aGUgbGFzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgdmFyIGZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIGZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBgXy5pbmRleE9mYCBhbmQgYF8ubGFzdEluZGV4T2ZgIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgaXNOYU4kMSk7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIHZhciBpbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgZmluZEluZGV4LCBzb3J0ZWRJbmRleCk7XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIHZhciBsYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IGZpbmRJbmRleCA6IGZpbmRLZXk7XG4gICAgdmFyIGtleSA9IGtleUZpbmRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAgfVxuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0XG4gIC8vIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiBmaW5kV2hlcmUob2JqLCBhdHRycykge1xuICAgIHJldHVybiBmaW5kKG9iaiwgbWF0Y2hlcihhdHRycykpO1xuICB9XG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lIGZvciBjb2xsZWN0aW9uIGZ1bmN0aW9ucywgYW4gYGVhY2hgXG4gIC8vIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW19rZXlzW2ldXSwgX2tleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIFdyYXAgY29kZSB0aGF0IHJlYXNzaWducyBhcmd1bWVudCB2YXJpYWJsZXMgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGFuXG4gICAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpXG4gICAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBpbml0aWFsKSB7XG4gICAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMztcbiAgICAgIHJldHVybiByZWR1Y2VyKG9iaiwgb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCksIG1lbW8sIGluaXRpYWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIHZhciByZWR1Y2UgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIHZhciByZWR1Y2VSaWdodCA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIGZ1bmN0aW9uIHJlamVjdChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBmaWx0ZXIob2JqLCBuZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIHNvbWUob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4gIH1cblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgdmFyIGludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChpc0Z1bmN0aW9uJDEocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgICAgY29udGV4dFBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcbiAgICAgIHBhdGggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBtYXAob2JqLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICB2YXIgbWV0aG9kID0gZnVuYztcbiAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgIGlmIChjb250ZXh0UGF0aCAmJiBjb250ZXh0UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICBjb250ZXh0ID0gZGVlcEdldChjb250ZXh0LCBjb250ZXh0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgbWV0aG9kID0gY29udGV4dFtwYXRoXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRob2QgPT0gbnVsbCA/IG1ldGhvZCA6IG1ldGhvZC5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5tYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBmdW5jdGlvbiBwbHVjayhvYmosIGtleSkge1xuICAgIHJldHVybiBtYXAob2JqLCBwcm9wZXJ0eShrZXkpKTtcbiAgfVxuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmlsdGVyYDogc2VsZWN0aW5nIG9ubHlcbiAgLy8gb2JqZWN0cyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiB3aGVyZShvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIGZpbHRlcihvYmosIG1hdGNoZXIoYXR0cnMpKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgZnVuY3Rpb24gbWF4KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIGZ1bmN0aW9uIG1pbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChpc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAgIC8vIEtlZXAgc3Vycm9nYXRlIHBhaXIgY2hhcmFjdGVycyB0b2dldGhlci5cbiAgICAgIHJldHVybiBvYmoubWF0Y2gocmVTdHJTeW1ib2wpO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIG1hcChvYmosIGlkZW50aXR5KTtcbiAgICByZXR1cm4gdmFsdWVzKG9iaik7XG4gIH1cblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4gIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgZnVuY3Rpb24gc2FtcGxlKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtyYW5kb20ob2JqLmxlbmd0aCAtIDEpXTtcbiAgICB9XG4gICAgdmFyIHNhbXBsZSA9IHRvQXJyYXkob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKHNhbXBsZSk7XG4gICAgbiA9IE1hdGgubWF4KE1hdGgubWluKG4sIGxlbmd0aCksIDApO1xuICAgIHZhciBsYXN0ID0gbGVuZ3RoIC0gMTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbjsgaW5kZXgrKykge1xuICAgICAgdmFyIHJhbmQgPSByYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH1cblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbi5cbiAgZnVuY3Rpb24gc2h1ZmZsZShvYmopIHtcbiAgICByZXR1cm4gc2FtcGxlKG9iaiwgSW5maW5pdHkpO1xuICB9XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBmdW5jdGlvbiBzb3J0Qnkob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHBsdWNrKG1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgaW5kZXg6IGluZGV4KyssXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBsaXN0KVxuICAgICAgfTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gICAgfSksICd2YWx1ZScpO1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICBmdW5jdGlvbiBncm91cChiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIHZhciBncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICB9KTtcblxuICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYF8uZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICB2YXIgaW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICB2YXIgY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMkMShyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICAvLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHBhc3MgdGhlIGdpdmVuXG4gIC8vIHRydXRoIHRlc3QsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBwYXNzIHRoZSB0cnV0aCB0ZXN0LlxuICB2YXIgcGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGNvbGxlY3Rpb24uXG4gIGZ1bmN0aW9uIHNpemUob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBrZXlzKG9iaikubGVuZ3RoO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgYF8ucGlja2AgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGBrZXlgIGlzIGFuIGVudW1lcmFibGVcbiAgLy8gcHJvcGVydHkgbmFtZSBvZiBgb2JqYC5cbiAgZnVuY3Rpb24ga2V5SW5PYmoodmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH1cblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSBhbGxvd2VkIHByb3BlcnRpZXMuXG4gIHZhciBwaWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKGlzRnVuY3Rpb24kMShpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gYWxsS2V5cyhvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGtleUluT2JqO1xuICAgICAga2V5cyA9IGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBkaXNhbGxvd2VkIHByb3BlcnRpZXMuXG4gIHZhciBvbWl0ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgaXRlcmF0ZWUgPSBrZXlzWzBdLCBjb250ZXh0O1xuICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IG5lZ2F0ZShpdGVyYXRlZSk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBjb250ZXh0ID0ga2V5c1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IG1hcChmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIWNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uXG4gIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG4gIH1cblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYGFycmF5YC4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVybiB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGVcbiAgLy8gYGFycmF5YC5cbiAgZnVuY3Rpb24gcmVzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGxhc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBmdW5jdGlvbiBsYXN0KGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTtcbiAgfVxuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgIHJldHVybiBmaWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIHVwIHRvIGBkZXB0aGAuXG4gIC8vIFBhc3NpbmcgYHRydWVgIG9yIGBmYWxzZWAgYXMgYGRlcHRoYCBtZWFucyBgMWAgb3IgYEluZmluaXR5YCwgcmVzcGVjdGl2ZWx5LlxuICBmdW5jdGlvbiBmbGF0dGVuKGFycmF5LCBkZXB0aCkge1xuICAgIHJldHVybiBmbGF0dGVuJDEoYXJyYXksIGRlcHRoLCBmYWxzZSk7XG4gIH1cblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIHZhciBkaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuJDEocmVzdCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFjb250YWlucyhyZXN0LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuICB2YXIgd2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIGRpZmZlcmVuY2UoYXJyYXksIG90aGVyQXJyYXlzKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBUaGUgZmFzdGVyIGFsZ29yaXRobSB3aWxsIG5vdCB3b3JrIHdpdGggYW4gaXRlcmF0ZWUgaWYgdGhlIGl0ZXJhdGVlXG4gIC8vIGlzIG5vdCBhIG9uZS10by1vbmUgZnVuY3Rpb24sIHNvIHByb3ZpZGluZyBhbiBpdGVyYXRlZSB3aWxsIGRpc2FibGVcbiAgLy8gdGhlIGZhc3RlciBhbGdvcml0aG0uXG4gIGZ1bmN0aW9uIHVuaXEoYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmICghaXNCb29sZWFuKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpXSxcbiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgICAgaWYgKGlzU29ydGVkICYmICFpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBpZiAoIWNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFjb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIHZhciB1bmlvbiA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgcmV0dXJuIHVuaXEoZmxhdHRlbiQxKGFycmF5cywgdHJ1ZSwgdHJ1ZSkpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIGZ1bmN0aW9uIGludGVyc2VjdGlvbihhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChjb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIHZhciBqO1xuICAgICAgZm9yIChqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIWNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ29tcGxlbWVudCBvZiB6aXAuIFVuemlwIGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIGFuZCBncm91cHNcbiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzLlxuICBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSAoYXJyYXkgJiYgbWF4KGFycmF5LCBnZXRMZW5ndGgpLmxlbmd0aCkgfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBwbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgdmFyIHppcCA9IHJlc3RBcmd1bWVudHModW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBgXy5wYWlyc2AuXG4gIGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7XG4gICAgfVxuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgZnVuY3Rpb24gY2h1bmsoYXJyYXksIGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPCAxKSByZXR1cm4gW107XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIGZ1bmN0aW9uIGNoYWluUmVzdWx0KGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyQxKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfVxuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gICAgZWFjaChmdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfJDFbbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8kMSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gXyQxO1xuICB9XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBlYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgb2JqWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBlYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gTmFtZWQgRXhwb3J0c1xuXG4gIHZhciBhbGxFeHBvcnRzID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBWRVJTSU9OOiBWRVJTSU9OLFxuICAgIHJlc3RBcmd1bWVudHM6IHJlc3RBcmd1bWVudHMsXG4gICAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICAgIGlzTnVsbDogaXNOdWxsLFxuICAgIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgICBpc0Jvb2xlYW46IGlzQm9vbGVhbixcbiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgICBpc1N0cmluZzogaXNTdHJpbmcsXG4gICAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICAgIGlzRGF0ZTogaXNEYXRlLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBpc0Vycm9yOiBpc0Vycm9yLFxuICAgIGlzU3ltYm9sOiBpc1N5bWJvbCxcbiAgICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICAgIGlzRGF0YVZpZXc6IGlzRGF0YVZpZXckMSxcbiAgICBpc0FycmF5OiBpc0FycmF5LFxuICAgIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24kMSxcbiAgICBpc0FyZ3VtZW50czogaXNBcmd1bWVudHMkMSxcbiAgICBpc0Zpbml0ZTogaXNGaW5pdGUkMSxcbiAgICBpc05hTjogaXNOYU4kMSxcbiAgICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSQxLFxuICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgaXNNYXRjaDogaXNNYXRjaCxcbiAgICBpc0VxdWFsOiBpc0VxdWFsLFxuICAgIGlzTWFwOiBpc01hcCxcbiAgICBpc1dlYWtNYXA6IGlzV2Vha01hcCxcbiAgICBpc1NldDogaXNTZXQsXG4gICAgaXNXZWFrU2V0OiBpc1dlYWtTZXQsXG4gICAga2V5czoga2V5cyxcbiAgICBhbGxLZXlzOiBhbGxLZXlzLFxuICAgIHZhbHVlczogdmFsdWVzLFxuICAgIHBhaXJzOiBwYWlycyxcbiAgICBpbnZlcnQ6IGludmVydCxcbiAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucyxcbiAgICBtZXRob2RzOiBmdW5jdGlvbnMsXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgZXh0ZW5kT3duOiBleHRlbmRPd24sXG4gICAgYXNzaWduOiBleHRlbmRPd24sXG4gICAgZGVmYXVsdHM6IGRlZmF1bHRzLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGNsb25lOiBjbG9uZSxcbiAgICB0YXA6IHRhcCxcbiAgICBnZXQ6IGdldCxcbiAgICBoYXM6IGhhcyxcbiAgICBtYXBPYmplY3Q6IG1hcE9iamVjdCxcbiAgICBpZGVudGl0eTogaWRlbnRpdHksXG4gICAgY29uc3RhbnQ6IGNvbnN0YW50LFxuICAgIG5vb3A6IG5vb3AsXG4gICAgdG9QYXRoOiB0b1BhdGgkMSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgcHJvcGVydHlPZjogcHJvcGVydHlPZixcbiAgICBtYXRjaGVyOiBtYXRjaGVyLFxuICAgIG1hdGNoZXM6IG1hdGNoZXIsXG4gICAgdGltZXM6IHRpbWVzLFxuICAgIHJhbmRvbTogcmFuZG9tLFxuICAgIG5vdzogbm93LFxuICAgIGVzY2FwZTogX2VzY2FwZSxcbiAgICB1bmVzY2FwZTogX3VuZXNjYXBlLFxuICAgIHRlbXBsYXRlU2V0dGluZ3M6IHRlbXBsYXRlU2V0dGluZ3MsXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgIHJlc3VsdDogcmVzdWx0LFxuICAgIHVuaXF1ZUlkOiB1bmlxdWVJZCxcbiAgICBjaGFpbjogY2hhaW4sXG4gICAgaXRlcmF0ZWU6IGl0ZXJhdGVlLFxuICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgYmluZDogYmluZCxcbiAgICBiaW5kQWxsOiBiaW5kQWxsLFxuICAgIG1lbW9pemU6IG1lbW9pemUsXG4gICAgZGVsYXk6IGRlbGF5LFxuICAgIGRlZmVyOiBkZWZlcixcbiAgICB0aHJvdHRsZTogdGhyb3R0bGUsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlLFxuICAgIHdyYXA6IHdyYXAsXG4gICAgbmVnYXRlOiBuZWdhdGUsXG4gICAgY29tcG9zZTogY29tcG9zZSxcbiAgICBhZnRlcjogYWZ0ZXIsXG4gICAgYmVmb3JlOiBiZWZvcmUsXG4gICAgb25jZTogb25jZSxcbiAgICBmaW5kS2V5OiBmaW5kS2V5LFxuICAgIGZpbmRJbmRleDogZmluZEluZGV4LFxuICAgIGZpbmRMYXN0SW5kZXg6IGZpbmRMYXN0SW5kZXgsXG4gICAgc29ydGVkSW5kZXg6IHNvcnRlZEluZGV4LFxuICAgIGluZGV4T2Y6IGluZGV4T2YsXG4gICAgbGFzdEluZGV4T2Y6IGxhc3RJbmRleE9mLFxuICAgIGZpbmQ6IGZpbmQsXG4gICAgZGV0ZWN0OiBmaW5kLFxuICAgIGZpbmRXaGVyZTogZmluZFdoZXJlLFxuICAgIGVhY2g6IGVhY2gsXG4gICAgZm9yRWFjaDogZWFjaCxcbiAgICBtYXA6IG1hcCxcbiAgICBjb2xsZWN0OiBtYXAsXG4gICAgcmVkdWNlOiByZWR1Y2UsXG4gICAgZm9sZGw6IHJlZHVjZSxcbiAgICBpbmplY3Q6IHJlZHVjZSxcbiAgICByZWR1Y2VSaWdodDogcmVkdWNlUmlnaHQsXG4gICAgZm9sZHI6IHJlZHVjZVJpZ2h0LFxuICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIHNlbGVjdDogZmlsdGVyLFxuICAgIHJlamVjdDogcmVqZWN0LFxuICAgIGV2ZXJ5OiBldmVyeSxcbiAgICBhbGw6IGV2ZXJ5LFxuICAgIHNvbWU6IHNvbWUsXG4gICAgYW55OiBzb21lLFxuICAgIGNvbnRhaW5zOiBjb250YWlucyxcbiAgICBpbmNsdWRlczogY29udGFpbnMsXG4gICAgaW5jbHVkZTogY29udGFpbnMsXG4gICAgaW52b2tlOiBpbnZva2UsXG4gICAgcGx1Y2s6IHBsdWNrLFxuICAgIHdoZXJlOiB3aGVyZSxcbiAgICBtYXg6IG1heCxcbiAgICBtaW46IG1pbixcbiAgICBzaHVmZmxlOiBzaHVmZmxlLFxuICAgIHNhbXBsZTogc2FtcGxlLFxuICAgIHNvcnRCeTogc29ydEJ5LFxuICAgIGdyb3VwQnk6IGdyb3VwQnksXG4gICAgaW5kZXhCeTogaW5kZXhCeSxcbiAgICBjb3VudEJ5OiBjb3VudEJ5LFxuICAgIHBhcnRpdGlvbjogcGFydGl0aW9uLFxuICAgIHRvQXJyYXk6IHRvQXJyYXksXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBwaWNrOiBwaWNrLFxuICAgIG9taXQ6IG9taXQsXG4gICAgZmlyc3Q6IGZpcnN0LFxuICAgIGhlYWQ6IGZpcnN0LFxuICAgIHRha2U6IGZpcnN0LFxuICAgIGluaXRpYWw6IGluaXRpYWwsXG4gICAgbGFzdDogbGFzdCxcbiAgICByZXN0OiByZXN0LFxuICAgIHRhaWw6IHJlc3QsXG4gICAgZHJvcDogcmVzdCxcbiAgICBjb21wYWN0OiBjb21wYWN0LFxuICAgIGZsYXR0ZW46IGZsYXR0ZW4sXG4gICAgd2l0aG91dDogd2l0aG91dCxcbiAgICB1bmlxOiB1bmlxLFxuICAgIHVuaXF1ZTogdW5pcSxcbiAgICB1bmlvbjogdW5pb24sXG4gICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb24sXG4gICAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZSxcbiAgICB1bnppcDogdW56aXAsXG4gICAgdHJhbnNwb3NlOiB1bnppcCxcbiAgICB6aXA6IHppcCxcbiAgICBvYmplY3Q6IG9iamVjdCxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgY2h1bms6IGNodW5rLFxuICAgIG1peGluOiBtaXhpbixcbiAgICAnZGVmYXVsdCc6IF8kMVxuICB9O1xuXG4gIC8vIERlZmF1bHQgRXhwb3J0XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICB2YXIgXyA9IG1peGluKGFsbEV4cG9ydHMpO1xuICAvLyBMZWdhY3kgTm9kZS5qcyBBUEkuXG4gIF8uXyA9IF87XG5cbiAgcmV0dXJuIF87XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmRlcnNjb3JlLXVtZC5qcy5tYXBcbiIsImNvbnN0IF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbi8vIHJlZjogT3ZlckRyaXZlLlRodW5kZXIuTW9kZWxzLkRhdGFNb2RlbHMuR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHNcbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1lZGlhVHlwZSAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLmxhbmd1YWdlICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnB1Ymxpc2hlckVudGl0eUlkICA9IG51bGw7IC8vIGludFxuICAgICAgICB0aGlzLm1hdHVyaXR5TGV2ZWxzICAgICA9IFtdOyAvLyBzdHJpbmdcbiAgICAgICAgdGhpcy5zdWJqZWN0cyAgICAgICAgICAgPSBbXTsgLy8gc3RyaW5nXG4gICAgICAgIHRoaXMuYmlzYWNDb2RlcyAgICAgICAgID0gW107XG5cbiAgICAgICAgdGhpcy5zb3J0QnkgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5tYXhJdGVtcyAgICAgICAgICAgPSB1bmRlZmluZWQ7IC8vIGludFxuXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgLi4uYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2xhdGVzIEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIG1vZGVsIHRvIHBhcmFtZXRlcnMgdGhhdCBhbGlnbiB3aXRoIHRoZSBNZWRpYVBhcmFtZXRlcnMgbW9kZWwgZm9yIGV4ZWN1dGluZyBhIFwic2VhcmNoXCJcbiAgICBzZXJpYWxpemVGb3JTZWFyY2goKSB7XG4gICAgICAgIGxldCBtb2RlbCA9IF8uZXh0ZW5kKHt9LCB0aGlzKTtcblxuICAgICAgICAvLyBsYW5ndWFnZSBpcyBhbiBhcnJheSBpbiBNZWRpYVBhcmFtZXRlcnNcbiAgICAgICAgbW9kZWwubGFuZ3VhZ2UgPSBfKF8uZmxhdHRlbihbbW9kZWwubGFuZ3VhZ2VdKSkucmVqZWN0KCh2YWwpID0+IF8uaXNFbXB0eSh2YWwpKTtcblxuICAgICAgICAvLyBtYXR1cml0eUxldmVscyBpcyBjYWxsZWQgbWF0dXJpdHlMZXZlbFxuICAgICAgICBtb2RlbC5tYXR1cml0eUxldmVsID0gXyhfLmZsYXR0ZW4oW21vZGVsLm1hdHVyaXR5TGV2ZWxzXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG4gICAgICAgIGRlbGV0ZSBtb2RlbC5tYXR1cml0eUxldmVscztcblxuICAgICAgICAvLyBzdWJqZWN0cyBpcyBjYWxsZWQgc3ViamVjdFxuICAgICAgICBtb2RlbC5zdWJqZWN0ID0gXyhfLmZsYXR0ZW4oW21vZGVsLnN1YmplY3RzXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG4gICAgICAgIGRlbGV0ZSBtb2RlbC5zdWJqZWN0cztcblxuICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnYmlzYWMtY29sbGVjdGlvbi1maWx0ZXJpbmcnKSkge1xuICAgICAgICAgICAgbW9kZWwuYmlzYWNDb2RlID0gXyhfLmZsYXR0ZW4oW21vZGVsLmJpc2FjQ29kZXNdKSkucmVqZWN0KCh2YWwpID0+IF8uaXNFbXB0eSh2YWwpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlbC5tZWRpYVR5cGVzKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbWVkaWEtdHlwZXMtY29sbGVjdGlvbi1wYXJhbScpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1vZGVsLm1lZGlhVHlwZTtcbiAgICAgICAgICAgIH0gZWxzZXtcbiAgICAgICAgICAgICAgICBkZWxldGUgbW9kZWwubWVkaWFUeXBlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlbC5tZWRpYVR5cGVzKSB7XG4gICAgICAgICAgICBtb2RlbC5tZWRpYVR5cGVzID0gIG1vZGVsLm1lZGlhVHlwZXMuam9pbignLCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2ZpbHRlci1vdXQtbnRjJykpIHtcbiAgICAgICAgICAgIG1vZGVsLm1lZGlhVHlwZXMgPSB3aW5kb3cuT3ZlckRyaXZlLndoaXRlbGlzdGVkTWVkaWFUeXBlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBtb2RlbC5iaXNhY0NvZGVzOyAgLy8gd2UgbmVlZCB0byByZW1vdmUgdGhpcyBwcm9wZXJ0eSByZWdhcmRsZXNzIGJlY2F1c2UgdGhlIGNvcnJlY3QgcXVlcnkgcGFyYW0gaXMgYGJpc2FjQ29kZWAuICBUaGUgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgdGh1bmRlciBxdWVyeSBwYXJhbXMgYW5kIHRoZSBwcm9wZXJ0eSBuYW1lcyBpbiB0aGUgZ2VuZXJhdGVkIGNvbGxlY3Rpb24gZGVmaW5pdGlvbnMgaXMuLi5mdW4uXG5cbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPcHRpbWl6ZWRDb3ZlcnMgPSB2b2lkIDA7XG52YXIgXyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidW5kZXJzY29yZVwiKSk7XG5mdW5jdGlvbiBnZXRPcHRpbWl6ZWRDb3ZlcnMoY292ZXJzLCBkZXNpcmVkU2l6ZSkge1xuICAgIC8vIGNvdmVyc0J5U2l6ZSBpcyBub3cgYW4gYXJyYXkgb2YgY292ZXJzLCBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3RcbiAgICB2YXIgY292ZXJzQnlTaXplID0gXy5zb3J0QnkoY292ZXJzLCAnd2lkdGgnKTtcbiAgICAvLyBTdGFydCB3aXRoIHRoZSBiaWdnZXN0IGNvdmVyXG4gICAgLy8gQ29weSBvYmplY3Qgd2l0aCBPYmplY3QuYXNzaWduKCkgc28gd2UgZG9udCBkYW1hZ2UgcmVmZXJlbmNlXG4gICAgdmFyIG9wdGltaXplZENvdmVyID0gT2JqZWN0LmFzc2lnbih7fSwgXy5sYXN0KGNvdmVyc0J5U2l6ZSkpO1xuICAgIGlmIChvcHRpbWl6ZWRDb3ZlciAmJiBvcHRpbWl6ZWRDb3Zlci5ocmVmKSB7XG4gICAgICAgIHZhciBsZWdhY3lUb09wdGltaXplZEltYWdlSG9zdHNNYXAgPSB7XG4gICAgICAgICAgICAnaHR0cHM6Ly9pbWcxLm9kLWNkbi5jb20vJzogJ2h0dHBzOi8vaWMub2QtY2RuLmNvbS9yZXNpemUnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vaW1hZ2VzLm92ZXJkcml2ZWNoaW5hLmNuLyc6ICdodHRwczovL2ltYWdlcy5vdmVyZHJpdmVjaGluYS5jbi9yZXNpemUnXG4gICAgICAgIH07XG4gICAgICAgIHZhciBob3N0TWFwS2V5ID0gXy5maW5kKE9iamVjdC5rZXlzKGxlZ2FjeVRvT3B0aW1pemVkSW1hZ2VIb3N0c01hcCksIGZ1bmN0aW9uIChsZWdhY3kpIHsgcmV0dXJuIG9wdGltaXplZENvdmVyLmhyZWYuc3RhcnRzV2l0aChsZWdhY3kpOyB9KTtcbiAgICAgICAgaWYgKGhvc3RNYXBLZXkpIHtcbiAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW1pemVkIHJvb3QsIGUuZy4gaHR0cHM6Ly9pbWcxLm9kLWNkbi5jb20vIC0+IGh0dHBzOi8vaWMub2QtY2RuLmNvbS9yZXNpemVcbiAgICAgICAgICAgIHZhciBvcHRpbWl6ZWRJbWFnZUhvc3QgPSBsZWdhY3lUb09wdGltaXplZEltYWdlSG9zdHNNYXBbaG9zdE1hcEtleV07XG4gICAgICAgICAgICB2YXIgb3B0aW1pemF0aW9ucyA9ICd0eXBlPWF1dG8nOyAvLyBmb3JtYXQgPSBhdXRvIC0+IHVzZSB3ZWJwIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXRcbiAgICAgICAgICAgIHZhciBwYXRoID0gJyc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIG5vZGUuanMgdXNhZ2Ugc2hvdWxkIGJlIGZpbmUgd2l0aCB0aGUgVVJMIGFwaVxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKG9wdGltaXplZENvdmVyLmhyZWYpO1xuICAgICAgICAgICAgICAgIHBhdGggPSB1cmwucGF0aG5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBoYWNrIHRvIGdldCB1cmwgcGF0aG5hbWUgc2luY2UgSUUgZG9lc24ndCBzdXBwb3J0IHRoZSBVUkwgYXBpLiAgSSBkaWRuJ3Qgd2FudCB0byBhZGQgYSBwb2x5ZmlsbFxuICAgICAgICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIGEuaHJlZiA9IG9wdGltaXplZENvdmVyLmhyZWY7XG4gICAgICAgICAgICAgICAgcGF0aCA9IGEucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgeyAvLyBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50IGFib3V0IHdoZXRoZXIgdGhlIHBhdGhuYW1lIGluY2x1ZGVzIGEgbGVhZGluZyBzbGFzaCwgYnV0IHRoZSBjYWNoZWZseSBhcGkgcmVxdWlyZXMgZXhhY3RseSBvbmUgb24gdGhlIHVybCBwYXJhbVxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gXCIvXCIuY29uY2F0KHBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBlbmNvZGVkU3JjVXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpO1xuICAgICAgICAgICAgdmFyIGNvdmVySHJlZldpdGhvdXRTaXplID0gXCJcIi5jb25jYXQob3B0aW1pemVkSW1hZ2VIb3N0LCBcIj9cIikuY29uY2F0KG9wdGltaXphdGlvbnMsIFwiJnVybD1cIikuY29uY2F0KGVuY29kZWRTcmNVcmwsIFwiJnN0cmlwbWV0YT10cnVlXCIpO1xuICAgICAgICAgICAgb3B0aW1pemVkQ292ZXIuaHJlZiA9IFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KGRlc2lyZWRTaXplKTtcbiAgICAgICAgICAgIG9wdGltaXplZENvdmVyLnNyY3NldCA9IFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KE1hdGguZmxvb3IoZGVzaXJlZFNpemUgKiAyKSwgXCIgMngsIFwiKSArXG4gICAgICAgICAgICAgICAgXCJcIi5jb25jYXQoY292ZXJIcmVmV2l0aG91dFNpemUsIFwiJndpZHRoPVwiKS5jb25jYXQoTWF0aC5mbG9vcihkZXNpcmVkU2l6ZSAqIDEuNSksIFwiIDEuNXgsIFwiKSArXG4gICAgICAgICAgICAgICAgXCJcIi5jb25jYXQoY292ZXJIcmVmV2l0aG91dFNpemUsIFwiJndpZHRoPVwiKS5jb25jYXQoZGVzaXJlZFNpemUsIFwiIDF4XCIpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGltaXplZENvdmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfLmZpbmQoY292ZXJzQnlTaXplLCBmdW5jdGlvbiAoY292ZXIpIHsgcmV0dXJuIGNvdmVyLndpZHRoID49IGRlc2lyZWRTaXplOyB9KSB8fFxuICAgICAgICBfLmxhc3QoY292ZXJzQnlTaXplKTsgLy8gZmluZHMgdGhlIGZpcnN0IGNvdmVyIHRoYXQgaXMgYmlnIGVub3VnaFxufVxuZXhwb3J0cy5nZXRPcHRpbWl6ZWRDb3ZlcnMgPSBnZXRPcHRpbWl6ZWRDb3ZlcnM7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE9wdGltaXplZENvdmVyLXRzLmpzLm1hcFxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRPcHRpbWl6ZWRDb3Zlci10cy5qcy5tYXBcbiIsIi8vIE9yaWdpbmFsOiBodHRwczovL2ppcmEuaHEub3ZlcmRyaXZlLmNvbS9icm93c2UvTEhUTkctMzgwOSBSZWxvY2F0aW9uOiBodHRwczovL2ppcmEuaHEub3ZlcmRyaXZlLmNvbS9icm93c2UvTEhUTkctMzg2MlxuXG5jb25zdCBNYWNtaWxsYW5NZXNzYWdlID0gZnVuY3Rpb24obW9kZWwpIHtcbiAgICBsZXQgYmFkUHVibGlzaGVyID0gcGFyc2VJbnQobW9kZWwuZ2V0KFwicHVibGlzaGVyQWNjb3VudFwiKS5pZCwgMTApID09PSA2MjIyO1xuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IHJlbGVhc2VEYXRlID0gbmV3IERhdGUobW9kZWwuZ2V0KFwiZXN0aW1hdGVkUmVsZWFzZURhdGVcIikpO1xuICAgIGxldCBtYWNtaWxsYW5MaWNlbnNpbmdDaGFuZ2VJbkVmZmVjdCA9IHJlbGVhc2VEYXRlID49IG5ldyBEYXRlKDIwMTksIDEwLCAxKTtcbiAgICBsZXQgcmVsZWFzZURhdGVQbHVzOFdlZWtzID0gbmV3IERhdGUocmVsZWFzZURhdGUpO1xuICAgIHJlbGVhc2VEYXRlUGx1czhXZWVrcy5zZXREYXRlKHJlbGVhc2VEYXRlLmdldERhdGUoKSArICg4ICogNykpO1xuICAgIGxldCByZWxlYXNlRGF0ZVdpdGhpbkVpZ2h0V2Vla3MgPSAocmVsZWFzZURhdGUgPCB0b2RheSkgJiYgKHRvZGF5IDwgcmVsZWFzZURhdGVQbHVzOFdlZWtzKTtcblxuICAgIHJldHVybiB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtYWNtaWxsYW5NZXNzYWdpbmcnKVxuICAgICAgICAgICAgJiYgbWFjbWlsbGFuTGljZW5zaW5nQ2hhbmdlSW5FZmZlY3RcbiAgICAgICAgICAgICYmIGJhZFB1Ymxpc2hlclxuICAgICAgICAgICAgJiYgKHJlbGVhc2VEYXRlV2l0aGluRWlnaHRXZWVrcyB8fCAobWFjbWlsbGFuTGljZW5zaW5nQ2hhbmdlSW5FZmZlY3QgJiYgbW9kZWwuZ2V0KFwiaXNQcmVyZWxlYXNlVGl0bGVcIikpKVxuICAgICAgICA/IGh0bWwoJ21hY21pbGxhbk1lc3NhZ2UnLCB7ZGF0ZSA6IHJlbGVhc2VEYXRlUGx1czhXZWVrcyB9KVxuICAgICAgICA6ICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYWNtaWxsYW5NZXNzYWdlO1xuIiwiY29uc3QgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxuLyoqXG4gKiBEZWZpbmVzIGFsbCB0aGUgYXZhaWxhYmxlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBtZWRpYSBlbmRwb2ludFxuICogQGNsYXNzIE1lZGlhUGFyYW1ldGVyc1xuICogcmVmOiBodHRwczovL3RodW5kZXIuYXBpLnRlc3Qub3ZlcmRyaXZlLmNvbS9kb2NzL3VpL2luZGV4IyEvTWVkaWEvVjJNZWRpYV9JbmRleE1lZGlhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTWVkaWFQYXJhbWV0ZXJzIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWVkaWFUeXBlICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5tZWRpYVR5cGVzICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnRpdGxlICAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuc2VyaWVzICAgICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJJZCAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnB1Ymxpc2hlckVudGl0eUlkICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbXByaW50SWQgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuY3JlYXRvciAgICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5jcmVhdG9ySWQgICAgICAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYWRkZWREYXRlICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5hdmFpbGFibGVGaXJzdCAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuc2hvd09ubHlBdmFpbGFibGUgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93T25seVByZXJlbGVhc2UgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dPbmx5THVja3lEYXlBdmFpbGFibGUgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQXVkaW9TeW5jaHJvbml6ZWRUZXh0ICAgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb25JZCAgICAgICAgICAgICAgID0gMDtcblxuICAgICAgICAvLyBBbGwgb2YgdGhlIGZvbGxvd2luZyBhcnJheXMgYXJlIHN0cmluZyBhcnJheXNcbiAgICAgICAgdGhpcy5mb3JtYXQgICAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnN1YmplY3QgICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYmlzYWNDb2RlICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5tYXR1cml0eUxldmVsICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmxhbmd1YWdlICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYXRvc0xldmVsICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5sZXhpbGVTY29yZSAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmludGVyZXN0TGV2ZWwgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuZ3JhZGVMZXZlbCAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5pbmNsdWRlZEZhY2V0cyAgICAgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuc29ydEJ5ICAgICAgICAgICAgICAgICAgICAgPSAncmVsZXZhbmNlJztcbiAgICAgICAgdGhpcy5zaG93ICAgICAgICAgICAgICAgICAgICAgICA9ICdvd25lZCc7XG4gICAgICAgIHRoaXMucGFnZSAgICAgICAgICAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnBlclBhZ2UgICAgICAgICAgICAgICAgICAgID0gMjQ7XG4gICAgICAgIHRoaXMuaW5jbHVkZUZhY2V0cyAgICAgICAgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLmluY2x1ZGVOb0Zvcm1hdFRpdGxlcyAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyQ3BjVGl0bGVzICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXhJdGVtcyAgICAgICAgICAgICAgICAgICA9IDA7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGFwcGx5Um9vbUZpbHRlcnNBbmRVc2VyUHJlZnMocm9vbUZpbHRlcnMsIHVzZXJQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAocm9vbUZpbHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2ggdXAgc28gd2UgY2FuJ3QganVzdCBleHRlbmRcbiAgICAgICAgICAgIGlmIChyb29tRmlsdGVycy5tYXR1cml0eUxldmVscykge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0dXJpdHlMZXZlbCA9IHJvb21GaWx0ZXJzLm1hdHVyaXR5TGV2ZWxzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLnN1YmplY3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0ID0gcm9vbUZpbHRlcnMuc3ViamVjdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gcm9vbUZpbHRlcnMubGFuZ3VhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubWVkaWFUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVR5cGUgPSByb29tRmlsdGVycy5tZWRpYVR5cGU7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVR5cGVzID0gcm9vbUZpbHRlcnMubWVkaWFUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZXJQcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG1vcmUgdXNlciBwcmVmcyB0byBhcHBseSBiZXNpZGVzIGF1ZGllbmNlLXNldHRpbmdzIGJ1dCB0aGlzXG4gICAgICAgICAgICAvLyB3YXMgdGhlIGltbWVkaWF0ZSBuZWVkLiAgV2UgY2FuIGFkZCBtb3JlIGFzIHRoZXkgY29tZSB1cC5cbiAgICAgICAgICAgIGlmICh1c2VyUHJlZmVyZW5jZXNbJ2F1ZGllbmNlLXNldHRpbmcnXSAmJiB0aGlzLm1hdHVyaXR5TGV2ZWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gdXNlclByZWZlcmVuY2VzWydhdWRpZW5jZS1zZXR0aW5nJ107XG4gICAgICAgICAgICAgICAgbGV0IG1hdHVyaXR5TGV2ZWxzID0gW107XG4gICAgICAgICAgICAgICAgXy5lYWNoKF8ua2V5cyhhdWRpZW5jZSksIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaWVuY2Vba2V5XSAmJiBrZXkgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXR1cml0eUxldmVscy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0dXJpdHlMZXZlbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHVyaXR5TGV2ZWwgPSBtYXR1cml0eUxldmVscztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IF8uZXh0ZW5kKHt9LCB0aGlzKTtcblxuICAgICAgICAvLyBSZW1vdmUgYWxsIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgaGF2ZSBhIHZhbHVlIHNldFxuICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAhdGhpcy5faGFzVmFsdWUocmVzcG9uc2Vba2V5XSkgJiYgZGVsZXRlIHJlc3BvbnNlW2tleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBfaGFzVmFsdWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICEoKF8odmFsdWUpLmlzT2JqZWN0KCkgJiYgXyh2YWx1ZSkuaXNFbXB0eSgpKSB8fCAhdmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IE1lZGlhSW50ZXJmYWNlIGZyb20gJy4uL21lZGlhL01lZGlhSW50ZXJmYWNlJztcblxuaW1wb3J0IEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIGZyb20gJy4uLy4uLy4uLy4uL2J1c2luZXNzLW9iamVjdHMvR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnO1xuXG4vLyByZWY6IFRodW5kZXIuTW9kZWxzLlJlc3BvbnNlTW9kZWxzLkNvbGxlY3Rpb25EZWZpbml0aW9uXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uRGVmaW5pdGlvbiBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcblxuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHsgcmV0dXJuICdpZCc7IH1cblxuICAgIGdldCBjb2xsZWN0aW9uT3B0aW9ucygpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpbmNsdWRlRmFjZXRzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlclBhZ2U6ICAgICAgIHRoaXMucGFnZVNpemUgfHwgNixcbiAgICAgICAgICAgIHNodWZmbGU6ICAgICAgIHRoaXMuc2h1ZmZsZSB8fCB0aGlzLmlzTHVja3lEYXlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzb3J0QnlBdmFpbGFiaWxpdHknKSB8fCB0aGlzLmdldCgnYXZhaWxhYmlsaXR5T3B0aW9uJykgPT09ICdhdmFpbGFibGUtZmlyc3QnKSB7XG4gICAgICAgICAgICBvcHRpb25zLmF2YWlsYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dPbmx5QXZhaWxhYmxlJykgfHwgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eU9wdGlvbicpID09PSAnYXZhaWxhYmxlLW9ubHknKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNob3dPbmx5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dPbmx5UHJlcmVsZWFzZScpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNob3dPbmx5UHJlcmVsZWFzZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXNlTGlzdE9yZGVyKXtcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydEJ5ID0gJ2xpc3RvcmRlcic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBkZWZhdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJyxcbiAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlPcHRpb24gICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIHNob3dPbmx5QXZhaWxhYmxlICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd09ubHlQcmVyZWxlYXNlICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBzb3J0QnlBdmFpbGFiaWxpdHkgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscyAgICA6IG51bGwsXG4gICAgICAgICAgICBnZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyAgOiBudWxsLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG9yZGVyICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG5cbiAgICAgICAgICAgIC8vIENvbXB1dGVkIHByb3BlcnR5XG4gICAgICAgICAgICB0b3RhbEl0ZW1zICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGlzTHVja3lEYXkoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlPcHRpb24nKSA9PT0gJ2F2YWlsYWJsZS1sdWNreWRheSc7XG4gICAgfVxuXG4gICAgZ2V0IGlzR2VuZXJhdGVkKCkge1xuICAgICAgICByZXR1cm4gIV8odGhpcy5nZXQoJ2dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJykpLmlzRW1wdHkoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNDdXJhdGVkKCkge1xuICAgICAgICByZXR1cm4gIV8odGhpcy5nZXQoJ2N1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpKS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgZ2V0IHVzZUxpc3RPcmRlcigpe1xuICAgICAgICByZXR1cm4gdGhpcy5pc0N1cmF0ZWQgJiYgdGhpcy5nZXQoJ2N1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpLmlzT3JkZXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJvcCB7VGl0bGVDb2xsZWN0aW9ufSBjb2xsZWN0aW9uXG4gICAgICogQG1lbWJlcm9mIENvbGxlY3Rpb25EZWZpbml0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fbWVkaWFJbnRlcmZhY2UgPSBuZXcgTWVkaWFJbnRlcmZhY2UoKTtcblxuICAgICAgICB0aGlzLnRpdGxlQ29sbGVjdGlvbiA9IHRoaXMuX21lZGlhSW50ZXJmYWNlLml0ZW1zO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy50aXRsZUNvbGxlY3Rpb24sICdhbGwnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldCgndG90YWxJdGVtcycsIHRoaXMudGl0bGVDb2xsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvblRpdGxlcyh7IHBhdHJvblNldHRpbmdzLCByb29tfSkge1xuICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCByb29tJ3MgbWF0dXJpdHlMZXZlbHMgaWYgdGhlcmUgaXMgYSByb29tLCBhbmQgYSBtYXR1cml0eUxldmVscyBmaWx0ZXIgaGFzIGJlZW4gc2V0XG4gICAgICAgIGxldCByb29tSGFzTWF0dXJpdHlMZXZlbEZpbHRlciA9ICFfLmlzRW1wdHkocm9vbSAmJiByb29tLmZpbHRlcnMgJiYgcm9vbS5maWx0ZXJzLm1hdHVyaXR5TGV2ZWxzKTtcblxuICAgICAgICBsZXQgcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzID0gdGhpcy5fcGFyc2VQYXRyb25BdWRpZW5jZVNldHRpbmdzKHBhdHJvblNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgbGV0IGdlbkNvbERldGFpbHMgPSB0aGlzLmdldCgnZ2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgZ2VuQ29sRGV0YWlscy5zb3J0QnkgPSB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhdGhpcy5nZXQoJ3Nob3dPbmx5THVja3lEYXlBdmFpbGFibGUnKSl7XG4gICAgICAgICAgICAgICAgZ2VuQ29sRGV0YWlscy5zaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkZXRhaWxzID0gbmV3IEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzKGdlbkNvbERldGFpbHMpO1xuICAgICAgICAgICAgbGV0IHBhcmFtcyAgPSBkZXRhaWxzLnNlcmlhbGl6ZUZvclNlYXJjaCgpO1xuXG4gICAgICAgICAgICBpZiAoISFwYXRyb25TZXR0aW5ncy5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBhIHJvb20gd2l0aCBtYXR1cml0eSBmaWx0ZXJzIGFwcGxpZWQsIHRoZSBmaWx0ZXJzIHdpbGwgYmUgYXBhcnQgb2YgdGhlIGNvbGxlY3Rpb24gZGVmaW5pdGlvbiBhbmQgd2UgY2FuIHNpbXBseSBxdWVyeSBmb3IgdGhlIGNvbGxlY3Rpb25cbiAgICAgICAgICAgIC8vIFVzZXIgcHJlZmVyZW5jZXMgc2hvdWxkIE5PVCBvdmVycmlkZSBhIHJvb20ncyBtYXR1cml0eSBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChyb29tSGFzTWF0dXJpdHlMZXZlbEZpbHRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZS5mZXRjaENvbGxlY3Rpb25CeVBhcmFtZXRlcnMocGFyYW1zLCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBkZXRlcm1pbmUgaWYgdGhlIFVzZXIncyBtYXR1cml0eSBmaWx0ZXIgc2V0dGluZ3MgY292ZXIgdGhlIGNvbGxlY3Rpb24ncyBtYXR1cml0eUxldmVsIHNldHRpbmdzXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmICghXyhwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMpLmlzRW1wdHkoKSAmJiBfKHBhcmFtcy5tYXR1cml0eUxldmVsKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihnZW5lcmF0ZWRDb2xsZWN0aW9uT3B0aW9ucywgeyBtYXR1cml0eUxldmVsOiBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRmFrZSBhbiBlbXB0eSByZXNwb25zZSBpZiBhbGwgdGhlIGF1dG8gZ2VuZXJhdGVkIGNvbGxlY3Rpb24ncyBmaWx0ZXJzIGFyZSBub3QgY292ZXJlZCBieSB0aGUgdXNlcidzIG1hdHVyaXR5IGxldmVsIHNldHRpbmdzXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHJvbkZpbHRlcnNQZXJtaXRDb2xsZWN0aW9uKHBhcmFtcy5tYXR1cml0eUxldmVsLCBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKHBhcmFtcywgZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hFbXB0eVJlc3BvbnNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiBcImlzQ3VyYXRlZFwiXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29sbGVjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoISFwYXRyb25TZXR0aW5ncy5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzb3J0LWN1cmF0ZWQtbGlzdC1jYXJvdXNlbHMnKSAmJiB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zLnNvcnRCeSA9IHRoaXMuYXR0cmlidXRlcy5zb3J0Qnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBOT1QgaW4gYSByb29tLCBhcHBseSBhIHVzZXIncyBtYXR1cml0eSBzZXR0aW5ncyBpZiBwcmVzZW50IHRvIHRoZSBjb2xsZWN0aW9uIHJlcXVlc3RcbiAgICAgICAgICAgIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGlmIG5vbmUgb2YgdGhlIGNvbnRlbnQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgZmlsdGVyIGl0cyBhY2NlcHRhYmxlIHRoYXQgbm8gcmVzdWx0cyBhcmUgcmV0dXJuZWRcbiAgICAgICAgICAgIGlmIChfKHJvb20pLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zLCB7IG1hdHVyaXR5TGV2ZWw6IHBhdHJvbk1hdHVyaXR5TGV2ZWxQcmVmZXJlbmNlcyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoQ29sbGVjdGlvbkJ5SWQodGhpcy5pZCwgY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdGhlIHBhdHJvbiBhdWRpZW5jZSBzZXR0aW5ncyBtb2RlbCBpbnRvIGFuIGFycmF5IG9mIGZpbHRlciB0ZXJtcyB0aGF0IE1lZGlhSW50ZXJmYWNlIHVuZGVyc3RhbmRzLCBleDpcbiAgICAvLyBcImF1ZGllbmNlLXNldHRpbmdcIjoge1xuICAgIC8vICAgICBcImFsbFwiICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAvLyAgICAgXCJqdXZlbmlsZVwiICAgICAgIDogZmFsc2UsXG4gICAgLy8gICAgIFwieW91bmdhZHVsdFwiICAgICA6IHRydWUsXG4gICAgLy8gICAgIFwiZ2VuZXJhbGNvbnRlbnRcIiA6IHRydWUsXG4gICAgLy8gICAgIFwiYWR1bHRvbmx5XCIgICAgICA6IHRydWVcbiAgICAvLyB9XG4gICAgLy8gdG86IFtcInlvdW5nYWR1bHRcIiwgXCJnZW5lcmFsY29udGVudFwiLCBcImFkdWx0b25seVwiXVxuICAgIC8qKiBAcmV0dXJucyB7c3RyaW5nW119ICovXG4gICAgX3BhcnNlUGF0cm9uQXVkaWVuY2VTZXR0aW5ncyhwYXRyb25TZXR0aW5ncykge1xuICAgICAgICBsZXQgcGF0cm9uQXVkaWVuY2VTZXR0aW5nID0gcGF0cm9uU2V0dGluZ3MgJiYgcGF0cm9uU2V0dGluZ3NbJ2F1ZGllbmNlLXNldHRpbmcnXSB8fCB7fTtcblxuICAgICAgICBpZiAoXyhwYXRyb25BdWRpZW5jZVNldHRpbmcpLmlzRW1wdHkoKSB8fCBwYXRyb25BdWRpZW5jZVNldHRpbmcuYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXVkaWVuY2VGaWx0ZXJzID0gW107XG4gICAgICAgIF8ocGF0cm9uQXVkaWVuY2VTZXR0aW5nKS5lYWNoKChpc0FwcGxpZWQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQXBwbGllZCAmJiBrZXkgIT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgICAgICBhdWRpZW5jZUZpbHRlcnMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXVkaWVuY2VGaWx0ZXJzO1xuICAgIH1cblxuICAgIF9wYXRyb25GaWx0ZXJzUGVybWl0Q29sbGVjdGlvbihjb2xsZWN0aW9uTWF0dXJpdHlGaWx0ZXJzID0gW10sIHVzZXJNYXR1cml0eUZpbHRlcnMgPSBbXSkge1xuICAgICAgICBpZiAodXNlck1hdHVyaXR5RmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkxvd2VyID0gY29sbGVjdGlvbk1hdHVyaXR5RmlsdGVycy5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCB1c2VyTG93ZXIgPSB1c2VyTWF0dXJpdHlGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiBmaWx0ZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgcmV0dXJuIF8oY29sbGVjdGlvbkxvd2VyKS5kaWZmZXJlbmNlKHVzZXJMb3dlcikubGVuZ3RoID09PSAwO1xuICAgIH1cbn1cbiIsImltcG9ydCBRdWVyeVN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc2hNYW5hZ2VyIHtcblxuICAgIHN0YXRpYyBwYXJzZSgpIHtcbiAgICAgICAgbGV0IGhhc2hPYmplY3QgPSBRdWVyeVN0cmluZy5wYXJzZShsb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG5cbiAgICAgICAgXy5rZXlzKGhhc2hPYmplY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaGFzaE9iamVjdFtrZXldID0gXy5mbGF0dGVuKFtoYXNoT2JqZWN0W2tleV0gfHwgW11dKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGhhc2hPYmplY3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIHVwZGF0ZShvYmplY3QpIHtcbiAgICAgICAgbGV0IG5ld0hhc2ggPSBRdWVyeVN0cmluZy5zdHJpbmdpZnkob2JqZWN0KTtcbiAgICAgICAgaWYgKG5ld0hhc2ggIT09ICcmJyl7XG4gICAgICAgICAgICBsb2NhdGlvbi5oYXNoID0gbmV3SGFzaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQoa2V5KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXMucGFyc2UoKTtcblxuICAgICAgICBpZiAoXy5pc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldID0gXy5mbGF0dGVuKFt2YWx1ZV0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGtleSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldID0gaGFzaFtrZXldIHx8IFtdO1xuICAgICAgICBoYXNoW2tleV0ucHVzaCh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUoaGFzaCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZShrZXkpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldICYmIGRlbGV0ZSBoYXNoW2tleV07XG5cbiAgICAgICAgdGhpcy51cGRhdGUoaGFzaCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi4vLi4vdXRpbC9rZXljb2Rlcyc7XG5pbXBvcnQgTW9kYWxUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9tb2RhbC5odG1sJztcblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGZsYWcgaXMgZW5hYmxlZCwgY2xvc2VPbkVzYyBtdXN0IGFsd2F5cyBiZSBGQUxTRVxuICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgRVNDIGtleSBiZWhhdmlvciBkZWZpbmVkIGluIF9iaW5kRXZlbnRzKCkgZXhlY3V0ZXMgcHJvcGVybHkuXG4gICAgICAgIC8vIERvIG5vdCBtb2RpZnkgdGhpcyB2YWx1ZSB3aGVuIGNhbGxpbmcgYSBuZXcgbW9kYWwuXG4gICAgICAgIHZhciBjbG9zZU1vZGFsT25Fc2MgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKFxuICAgICAgICAgICAgJ2Nsb3NlLWRyb3Bkb3ducy1vbi1lc2MnXG4gICAgICAgIClcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogdHJ1ZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXV0b1Nob3c6IHRydWUsXG4gICAgICAgICAgICBhdXRvUmVuZGVyOiB0cnVlLFxuICAgICAgICAgICAgY2xvc2VPbkVzYzogY2xvc2VNb2RhbE9uRXNjLFxuICAgICAgICAgICAgY2xvc2VPbkJsdXI6IHRydWUsXG5cbiAgICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsnc21hbGwnXSxcbiAgICAgICAgICAgIGJ1dHRvbkFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgdGl0bGU6ICdUaXRsZScsXG4gICAgICAgICAgICBoaWRkZW5UaXRsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiAnU29tZSBDb250ZW50JyxcbiAgICAgICAgICAgIHN1Ym1pdFRleHQ6IGh0bWwoJ29rJyksXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBodG1sKCdjYW5jZWwnKSxcbiAgICAgICAgICAgIGF0dGFjaFRvRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBkZWZhdWx0QnV0dG9uQmVoYXZpb3VyOiB0cnVlLFxuICAgICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGluaXRpYWxpemUob3B0aW9ucykge1xuICAgICAgICBfLmV4dGVuZCh0aGlzLCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnRwbCA9IE1vZGFsVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudCh0aGlzLnRwbCh0aGlzKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5hdHRyKCdpZCcsIHRoaXMuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kY29udGVudCA9IHRoaXMuJGVsLmZpbmQoJy5tb2RhbC1jb250YWluZXInKTtcblxuICAgICAgICB0aGlzLiRjb250ZW50LmVtcHR5KCkuYXBwZW5kKHRoaXMuY29udGVudCk7XG5cbiAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmpvaW4oJyAnKSk7XG5cbiAgICAgICAgdGhpcy4kdGl0bGUgPSB0aGlzLiRlbC5maW5kKCcubW9kYWwtdGl0bGUnKTtcblxuICAgICAgICBpZiAodGhpcy5oaWRkZW5UaXRsZSkge1xuICAgICAgICAgICAgdGhpcy4kdGl0bGUuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgIHRoaXMuJHRpdGxlLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIH1cblxuICAgIF9yZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaFRvRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEZvciBGb3VuZGF0aW9uIHRvIHdvcmsgYXMgZXhwZWN0ZWQgd2UgbmVlZCB0byBoYXZlIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSBET00gYmVmb3JlIGNhbGxpbmcgLmZvdW5kYXRpb24oJ3JldmVhbCcsICdvcGVuJylcbiAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQodGhpcy5lbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hdXRvU2hvdykge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc1NlbGVjdEV2ZW50ID0gKGUpID0+XG4gICAgICAgIChlLnR5cGUgPT09ICdjbGljaycgfHwgZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpICYmXG4gICAgICAgIChlLnByZXZlbnREZWZhdWx0KCkgfHwgdHJ1ZSk7XG5cbiAgICAvLyBXZSBkb250IGFjdHVhbGx5IHdhbnQgdG8gdXNlIHRoZSBGb3VuZGF0aW9uIG1vZGFsIGV2ZW50cyBzaW5jZSB0aGV5IGdldCB3ZWlyZCBmYXN0Li4uXG4gICAgLy8gbGV0cyB1c2Ugb3VyIG93biBzbyBjb25zdW1lcnMgZG9udCBoYXZlIHRvIGtub3cgaXRzIGZvdW5kYXRpb25cbiAgICBfYmluZEV2ZW50cygpIHtcbiAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrIGtleWRvd24nLCAnLmpzLWNsb3NlJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RFdmVudChlKSAmJiB0aGlzLnRyaWdnZXIoJ2NhbmNlbCcsIHRoaXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QnV0dG9uQmVoYXZpb3VyKSB7XG4gICAgICAgICAgICB0aGlzLm9uKCdjbG9zZSBjYW5jZWwnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5vbigna2V5cHJlc3MnLCAnKicsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS53aGljaCA9PT0ga2V5cy5UQUIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZWVwRm9jdXMoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbG9zZS1kcm9wZG93bnMtb24tZXNjJykpIHtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgRVNDIGZyb20gY2xvc2luZyBtb2RhbCB3aGVuIDxzZWxlY3Q+IGVsZW1lbnRzIGFyZSBvcGVuXG4gICAgICAgICAgICB0aGlzLiRlbC5vbignY2xpY2sga2V5ZG93biBrZXl1cCcsICdzZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0RXZlbnRUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgZS50eXBlID09PSAnY2xpY2snIHx8XG4gICAgICAgICAgICAgICAgICAgIGUud2hpY2ggPT09IGtleXMuRU5URVIgfHxcbiAgICAgICAgICAgICAgICAgICAgZS53aGljaCA9PT0ga2V5cy5FU0M7XG4gICAgICAgICAgICAgICAgaWYgKCFjb3JyZWN0RXZlbnRUeXBlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0T3BlbiA9ICQodGhpcykuYXR0cignZGF0YS1vcGVuJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0T3BlbiA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0T3BlbiA9PT0gJ2ZhbHNlJyB8fCBzZWxlY3RPcGVuID09IG51bGwpICYmXG4gICAgICAgICAgICAgICAgICAgIGUud2hpY2ggIT09IGtleXMuRVNDXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy4kZWwub24oJ2JsdXInLCAnc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ2xvc2UgbW9kYWxzIHdpdGggRVNDXG4gICAgICAgICAgICB0aGlzLiRlbC5vbigna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RJc05vdE9wZW4gPVxuICAgICAgICAgICAgICAgICAgICAhJCgnc2VsZWN0JykuaXMoJzpmb2N1cycpIHx8XG4gICAgICAgICAgICAgICAgICAgICQoJzpmb2N1cycpLmF0dHIoJ2RhdGEtb3BlbicpICE9PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlLndoaWNoID09PSBrZXlzLkVTQyAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RJc05vdE9wZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgJCgnLmYtb3Blbi1kcm9wZG93bicpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NhbmNlbCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvdygpIHtcbiAgICAgICAgdGhpcy5fYmVmb3JlU2hvdygpO1xuICAgICAgICB0aGlzLiRlbC5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnb3BlbicpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3Nob3cnLCB0aGlzKTtcblxuICAgICAgICB0aGlzLiRlbC5vbigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZWVwRm9jdXMoZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgY29kZSBhZnRlciB0aGUgbW9kYWwgaXMgZGlzcGxheWVkXG4gICAgICAgIHRoaXMuJGVsLm9uKCdvcGVuZWQuZm5kdG4ucmV2ZWFsJywgKCkgPT4gdGhpcy5fYWZ0ZXJTaG93KCkpO1xuXG4gICAgICAgIC8vIFRyYXBzIGZvdW5kYXRpb24gYnVnIHRoYXQgY2xvc2VzIG1vZGFsIG9uIGRyb3Bkb3duIFwiY2xvc2VkXCIsIG5vdCBhbiBpc3N1ZSBpbiA1LjUuMytcbiAgICAgICAgdGhpcy4kZWwub2ZmKCdjbG9zZWQnKTtcblxuICAgICAgICAvLyBIYW5kbGUgZm91bmRhdGlvbiAgY2xvc2UgZXZlbnRzIGZyb20gRVNDIGFuZCBCRyBjbGlja3NcbiAgICAgICAgdGhpcy4kZWwub24oJ2Nsb3NlLmZuZHRuLnJldmVhbCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuJGVsLm9mZignY2xvc2UuZm5kdG4ucmV2ZWFsJyk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Nsb3NlJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9iZWZvcmVTaG93KCkge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIF9hZnRlclNob3coKSB7XG4gICAgICAgIHRoaXMuJGVsLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpO1xuICAgICAgICAkKCcuY29udGFpbmVyJykuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAkKCcucm93LmZvb3RlcicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgJCgnLm5hdi1jb250YWluZXInKS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAgICAgdGhpcy4kZWwuZmluZCgnOmZvY3VzYWJsZTp2aXNpYmxlJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICB0aGlzLl9zZXRTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBfc2V0U2Nyb2xsKCkge1xuICAgICAgICBsZXQgb2Zmc2V0ID1cbiAgICAgICAgICAgIHdpbmRvdy5wYWdlWU9mZnNldCAtIHBhcnNlSW50KHRoaXMuJGVsLmNzcygndG9wJykuc2xpY2UoMCwgLTIpLCAxMCk7IC8vIHRoZSAndG9wJyBzdHlsaW5nIGlzIGJha2VkIGluIGJ5IGZvdW5kYXRpb25cbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lckhlaWdodCA8IHRoaXMuZWwub2Zmc2V0SGVpZ2h0IC0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyBzY3JvbGwgdGFsbCBtb2RhbHMgaW50byB2aWV3IGFzIG11Y2ggYXMgZml0c1xuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5vZmZzZXRIZWlnaHQgLSB3aW5kb3cuaW5uZXJIZWlnaHQgKyAxMCxcbiAgICAgICAgICAgICAgICAtNVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDY0MSkge1xuICAgICAgICAgICAgLy8gbW9iaWxlIHZpZXcgcGFkZGluZ1xuICAgICAgICAgICAgb2Zmc2V0IC09IDU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbC5zY3JvbGxJbnRvVmlldygpOyAvLyBzZXRzIHNjcm9sbCB0byB0b3Agb2YgbW9kYWxcbiAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIG9mZnNldCk7IC8vIGFkanVzdHMgc2Nyb2xsIGFjY29yZGluZyB0byBjYWxjdWxhdGVkIG9mZnNldFxuICAgIH1cblxuICAgIF9rZWVwRm9jdXMoZSkge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtID0gJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSB0aGlzLiRlbC5maW5kKCc6Zm9jdXNhYmxlOnZpc2libGUnKS5maXJzdCgpO1xuICAgICAgICBjb25zdCBsYXN0Rm9jdXNhYmxlID0gdGhpcy4kZWwuZmluZCgnOmZvY3VzYWJsZTp2aXNpYmxlJykubGFzdCgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdGl2ZUVsZW0uaXMoZmlyc3RGb2N1c2FibGUpICYmXG4gICAgICAgICAgICBlLndoaWNoID09PSBrZXlzLlRBQiAmJlxuICAgICAgICAgICAgZS5zaGlmdEtleVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxhc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICQoYWN0aXZlRWxlbSkuaXMobGFzdEZvY3VzYWJsZSkgJiZcbiAgICAgICAgICAgIGUud2hpY2ggPT09IGtleXMuVEFCICYmXG4gICAgICAgICAgICAhZS5zaGlmdEtleVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLiRlbC5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdoaWRlJywgdGhpcyk7XG4gICAgICAgICQoJy5jb250YWluZXInKS5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xuICAgICAgICAkKCcucm93LmZvb3RlcicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgICQoJy5uYXYtY29udGFpbmVyJykuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTW9kYWwgfTtcbiIsImV4cG9ydCBkZWZhdWx0ICh7dGl0bGUsIGNsb3NlT25Fc2MsIGNsb3NlT25CbHVyLCBzaG93Q2xvc2VCdXR0b259KSA9PlxuYDxkaXZcbiAgICBjbGFzcz1cInJldmVhbC1tb2RhbFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBhcmlhLWxhYmVsPVwiJHt0aXRsZX1cIlxuICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgIGRhdGEtcmV2ZWFsXG4gICAgZGF0YS1vcHRpb25zPVwiY2xvc2Vfb25fZXNjOiR7IGNsb3NlT25Fc2MgfTtjbG9zZV9vbl9iYWNrZ3JvdW5kX2NsaWNrOiR7IGNsb3NlT25CbHVyIH07XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cIm1vZGFsLXRpdGxlIHByaW1hcnktY29sb3JcIj4keyB0aXRsZSB9PC9oMj5cbiAgICAgICAgJHtzaG93Q2xvc2VCdXR0b24gPyBgPGEgY2xhc3M9XCJjbG9zZS1yZXZlYWwtbW9kYWwganMtY2xvc2VcIiByb2xlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIiR7IHdpbmRvdy5odG1sKCdjbG9zZScpIH1cIiB0YWJpbmRleD1cIjBcIj4mIzIxNTs8L2E+YCA6ICcnfVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiPjwvZGl2PlxuPC9kaXY+YDtcbiIsImltcG9ydCBEZXRhaWxzQ292ZXJJbWFnZVZpZXcgZnJvbSAnLi92aWV3cy9kZXRhaWxzX2NvdmVyX2ltYWdlJztcblxuY29uc3QgY3JlYXRlRGV0YWlsc0NvdmVySW1hZ2VDb21wb25lbnQgPSAoe2VsfSkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGV0YWlsc0NvdmVySW1hZ2VWaWV3KHtlbH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVEZXRhaWxzQ292ZXJJbWFnZUNvbXBvbmVudDtcbiIsImltcG9ydCBCYXNlVmlldyBmcm9tICcuLi8uLi8uLi92aWV3cy9iYXNlJztcblxuY29uc3QgRGV0YWlsc0NvdmVySW1hZ2VWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcbiAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6ICdkaXNwbGF5Tm9TYW1wbGUnLFxuICAgICAgICB0YXA6ICdkaXNwbGF5Tm9TYW1wbGUnXG4gICAgfSxcbiAgICBpbml0aWFsaXplKHtlbH0pIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgIH0sXG4gICAgZGlzcGxheU5vU2FtcGxlKGUpIHtcbiAgICAgICAgLy8gRGVib3VuY2VcbiAgICAgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKCdpcy1hbmltYXRpbmcnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKCdpcy1ub1NhbXBsZScpKSB7XG4gICAgICAgICAgICBjb25zdCBub1NhbXBsZUJhbm5lciA9ICQoJy5qcy1uby1zYW1wbGUtYmFubmVyJyk7XG4gICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcygnaXMtYW5pbWF0aW5nJyk7XG4gICAgICAgICAgICBub1NhbXBsZUJhbm5lci5yZW1vdmVDbGFzcygnZmFkZU91dCcpLmFkZENsYXNzKCdmYWRlSW4nKS5jc3MoJ3otaW5kZXgnLCAxKS5zaG93KCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5yZW1vdmVDbGFzcygnaXMtYW5pbWF0aW5nJyk7XG4gICAgICAgICAgICAgICAgbm9TYW1wbGVCYW5uZXIucmVtb3ZlQ2xhc3MoJ2ZhZGVJbicpLmFkZENsYXNzKCdmYWRlT3V0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhbm5lciBibG9ja3MgcGFydCBvZiB0aGUgaW1hZ2UgY2xpY2sgYXJlYSwgcHV0IGl0IGJlaGluZCB0aGUgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgbm9TYW1wbGVCYW5uZXIuY3NzKCd6LWluZGV4JywgLTEpO1xuICAgICAgICAgICAgICAgIH0sIDc1MCk7IC8vIFRpbWUgaXMgc2xpZ2h0bHkgbG9uZ2VyIHRoYW4gZmFkZW91dCB0aW1lXG4gICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBEZXRhaWxzQ292ZXJJbWFnZVZpZXc7XG4iLCJjb25zdCB7IGh0bWwgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgKHsgcm9vbVRoZW1lLCByZWxhdGVkVXJsIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGFyZ2UtMTIgY29sdW1uc1wiPlxuICAgICAgICA8aDIgY2xhc3M9XCJ0aXRsZVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwibW9yZVRpdGxlc0xpbmsgJHtyb29tVGhlbWV9XCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIiBocmVmPVwiJHtyZWxhdGVkVXJsfVwiPlxuICAgICAgICAgICAgICAgICR7aHRtbCgneW91TWF5QWxzb0xpa2UnKX1cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1vcmVUaXRsZXNBcnJvd0ljb24gaWNvbi1mb3J3YXJkLWFycm93IHNlY29uZGFyeS1jb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIke3JlbGF0ZWRVcmx9XCIgcm9sZT1cImxpbmtcIiBhcmlhLWxhYmVsPVwiJHtodG1sKFxuICAgICAgICAgICAgICAgICdjYXJvdXNlbC5zZWVBbGxUaXRsZXMnLFxuICAgICAgICAgICAgICAgIHsgY29sbGVjdGlvbk5hbWU6IGh0bWwoJ3lvdU1heUFsc29MaWtlJykgfVxuICAgICAgICAgICAgKX1cIiBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlZUFsbEJ1dHRvbiBidXR0b24gbm8tb3V0bGluZSByYWRpdXMgcmlnaHQgdS1hbGxDYXBzXCI+XG4gICAgICAgICAgICAgICAgJHtodG1sKCdzZWVBbGwnKX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9oMj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGFyZ2UtMTIgY29sdW1uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVDb250YWluZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiIsImltcG9ydCBQYXRyb25UaXRsZVN0YXR1cyBmcm9tICcuLi8uLi9tb2RlbHMvUGF0cm9uVGl0bGVTdGF0dXMnO1xuXG5pbXBvcnQgVGl0bGVDYXJkIGZyb20gJy4uL21lZGlhL1RpdGxlQ2FyZCc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4uL21lZGlhL21vZGVscy9UaXRsZUNvbGxlY3Rpb24nO1xuaW1wb3J0IFRpdGxlQ29sbGVjdGlvblZpZXcgZnJvbSAnLi4vbWVkaWEvVGl0bGVDb2xsZWN0aW9uVmlldyc7XG5cbmltcG9ydCBEZXRhaWxzUmVsYXRlZFRpdGxlc1RlbXBsYXRlIGZyb20gJy4vRGV0YWlsc1JlbGF0ZWRUaXRsZXNUZW1wbGF0ZS5odG1sJztcbmltcG9ydCBMb2FkZXJUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvbG9hZGVyLmh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXRhaWxzUmVsYXRlZFRpdGxlc1ZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IERldGFpbHNSZWxhdGVkVGl0bGVzVGVtcGxhdGU7XG4gICAgbG9hZGVyVGVtcGxhdGUgPSBMb2FkZXJUZW1wbGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHsgZWwsIGJ1cywgdGl0bGVNb2RlbCB9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy50aXRsZU1vZGVsID0gdGl0bGVNb2RlbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gbmV3IFRpdGxlQ29sbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24udXJsID0gYCR7d2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QubWVkaWEucmVsYXRlZCwge1xuICAgICAgICAgICAgaWQ6IHRpdGxlTW9kZWwuaWQsXG4gICAgICAgIH0pfT9tYXg9NiZtYXR1cml0eUxldmVsPSR7XG4gICAgICAgICAgICB0aXRsZU1vZGVsLmF0dHJpYnV0ZXMucmF0aW5ncy5tYXR1cml0eUxldmVsLmlkXG4gICAgICAgIH1gO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24ucGFyc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uVGl0bGVzID0gcmVzcG9uc2UudGl0bGVzO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ29ubHktc2hvdy1vd25lZC1jb250ZW50JykgJiZcbiAgICAgICAgICAgICAgICByZXNwb25zZS50aXRsZXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25UaXRsZXMgPSByZXNwb25zZS50aXRsZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoeCkgPT4geC5pc093bmVkID09PSB0cnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfLnZhbHVlcyhjb2xsZWN0aW9uVGl0bGVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG5cbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGVsKTtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5odG1sKHRoaXMubG9hZGVyVGVtcGxhdGUoKSk7XG5cbiAgICAgICAgY29uc3Qgd2F5cG9pbnQgPSBuZXcgd2luZG93LldheXBvaW50Lkludmlldyh7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLiRlbCxcbiAgICAgICAgICAgIGVudGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2F5cG9pbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdGlvblxuICAgICAgICAgICAgLmZldGNoKClcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXyhyZXMudGl0bGVzKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcGF0cm9uVGl0bGVTdGF0dXMgPSBuZXcgUGF0cm9uVGl0bGVTdGF0dXMoKTtcblxuICAgICAgICAgICAgICAgIHBhdHJvblRpdGxlU3RhdHVzLmZldGNoVGl0bGVTdGF0dXModGhpcy5jb2xsZWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0cm9uVGl0bGVTdGF0dXMudXBkYXRlVGl0bGVDb2xsZWN0aW9uU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgY3VycmVudFJvb20gPSB3aW5kb3cuT3ZlckRyaXZlLmN1cnJlbnRSb29tO1xuICAgICAgICBsZXQgcmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHJlbGF0ZWRVcmw6IGAke3dpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYVJlbGF0ZWRJZCwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnRpdGxlTW9kZWwuaWQsXG4gICAgICAgICAgICB9KX0/bWF0dXJpdHlMZXZlbD0ke1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGVNb2RlbC5hdHRyaWJ1dGVzLnJhdGluZ3MubWF0dXJpdHlMZXZlbC5pZFxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICByb29tVGhlbWU6IGN1cnJlbnRSb29tID8gYGlzLSR7Y3VycmVudFJvb20udGhlbWVOYW1lfWAgOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5odG1sKHRoaXMudGVtcGxhdGUocmVuZGVyQ29udGV4dCkpO1xuXG4gICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldyA9IG5ldyBUaXRsZUNvbGxlY3Rpb25WaWV3KHtcbiAgICAgICAgICAgIGVsOiB0aGlzLiQoJy50aXRsZUNvbnRhaW5lcicpLFxuICAgICAgICAgICAgYnVzOiB0aGlzLmJ1cyxcbiAgICAgICAgICAgIFZpZXc6IFRpdGxlQ2FyZCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBjbGFzczogJ3RpdGxlQ29udGFpbmVyIHNtYWxsLWJsb2NrLWdyaWQtMiBtZWRpdW0tYmxvY2stZ3JpZC0zIGxhcmdlLWJsb2NrLWdyaWQtNicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgY292ZXJXaWR0aHM6IHsgbW9iaWxlOiAyMTUsIHRhYmxldDogMjIwLCBkZXNrdG9wOiAyMjAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgKHsgZXhwaXJhdGlvbldhcm5pbmcsIGRlc2NyaXB0aW9uLCBkZXRhaWxzLCBub3RlIH0pID0+IGBcbiAgICAke2V4cGlyYXRpb25XYXJuaW5nLmxlbmd0aCA+IDAgPyBgPHAgY2xhc3M9J2V4cGlyYXRpb24td2FybmluZyc+JHtleHBpcmF0aW9uV2FybmluZ308L3A+YCA6ICcnfVxuICAgICR7ZGVzY3JpcHRpb24ubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz0nZGVzY3JpcHRpb24nPiR7ZGVzY3JpcHRpb259PC9wPmAgOiAnJ31cbiAgICAke2RldGFpbHMubWFwKChkZXRhaWwpID0+IGA8cCBjbGFzcz0nZGV0YWlsJz4ke2RldGFpbH08L3A+YCkuam9pbignJyl9XG4gICAgJHtub3RlLmxlbmd0aCA+IDAgPyBgPHAgY2xhc3M9J25vdGUnPiR7bm90ZX08L3A+YCA6ICcnfVxuYDtcbiIsImltcG9ydCBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSAgICAgICAgICAgICAgZnJvbSAnLi4vdGVtcGxhdGVzL0hvbGRJbmZvcm1hdGlvbi5odG1sJztcblxuY29uc3QgeyBodG1sLCB1cmwsIHJvdXRlcyB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb2xkSW5mb3JtYXRpb24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgZXhwaXJhdGlvbldhcm5pbmcoKSB7XG4gICAgICAgIGNvbnN0IGlzRXhwaXJlZENvbnRlbnQgPSB0aGlzLm1vZGVsLmdldCgnaXNPd25lZCcpICYmICF0aGlzLm1vZGVsLmdldCgnb3duZWRDb3BpZXMnKTtcbiAgICAgICAgaWYgKGlzRXhwaXJlZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzdWNjZXNzUG9zaXRpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2h0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubm9Db3BpZXNPblBsYWNlSG9sZCcpfSA8YSBjbGFzcz0nSG9sZFN1Y2Nlc3NNb2RhbC1saW5rJyBocmVmPScke3VybChyb3V0ZXMuYWNjb3VudEhvbGRzKX0nPiR7aHRtbCgnaG9sZFN1Y2Nlc3NNb2RhbC5tYW5hZ2VIb2xkcycpfTwvYT5gO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzT25Ib2xkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzVGV4dEhlbGQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzVGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGNvbnN0IGhvbGRzUmF0aW8gPSB0aGlzLm1vZGVsLmdldCgnaG9sZHNSYXRpbycpO1xuICAgICAgICBjb25zdCBob2xkTGlzdFBvc2l0aW9uID0gdGhpcy5tb2RlbC5nZXQoJ2hvbGRMaXN0UG9zaXRpb24nKSB8fCAwO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSAmJiBob2xkTGlzdFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncHJlUmVsZWFzZU1vZGFsLmJvcnJvd1Vwb25SZWxlYXNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncmF0aW8nOlxuICAgICAgICAgICAgICAgIGlmIChob2xkc1JhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob2xkc1JhdGlvID49IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5saXN0UG9zaXRpb25IdG1sJywgeyBob2xkc1JhdGlvOiB0aGlzLm1vZGVsLmdldCgnaG9sZHNSYXRpbycpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubmV4dEF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICBjYXNlICdiYXNpY1Bvc2l0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3NQb3NpdGlvbic6XG4gICAgICAgICAgICBjYXNlICdiYXNpYyc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkZXRhaWxzKCkge1xuICAgICAgICBjb25zdCBob2xkc0NvdW50ID0gdGhpcy5tb2RlbC5nZXQoJ2hvbGRzQ291bnQnKSB8fCAwO1xuICAgICAgICBjb25zdCBvd25lZENvcGllcyA9IHRoaXMubW9kZWwuZ2V0KCdvd25lZENvcGllcycpIHx8IDA7XG4gICAgICAgIGNvbnN0IGhvbGRMaXN0UG9zaXRpb24gPSB0aGlzLm1vZGVsLmdldCgnaG9sZExpc3RQb3NpdGlvbicpIHx8IDA7XG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdiYXNpY1Bvc2l0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3NQb3NpdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC55b3VySG9sZHNQb3NpdGlvbkh0bWwnLCB7IGhvbGRMaXN0UG9zaXRpb24sIGhvbGRzQ291bnQgfSksXG4gICAgICAgICAgICAgICAgICAgIGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubGlicmFyeUNvcGllcycsIHsgb3duZWRDb3BpZXMgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgY2FzZSAncmF0aW8nOlxuICAgICAgICAgICAgY2FzZSAnYmFzaWMnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLnRvdGFsSG9sZHNIdG1sJywgeyBob2xkc0NvdW50IH0pLFxuICAgICAgICAgICAgICAgICAgICBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLmxpYnJhcnlDb3BpZXMnLCB7IG93bmVkQ29waWVzIH0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBub3RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ2lzRmFzdGxhbmUnKSA/IGh0bWwoJ2FkdmFudGFnZUZhc3RQYXNzSHRtbCcpIDogJyc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoeyB0eXBlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5lbCA9IHRoaXMuZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuZWwuY2xhc3NOYW1lID0gYCR7dGhpcy5lbC5jbGFzc05hbWV9IEhvbGRJbmZvcm1hdGlvbmA7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ2Jhc2ljJztcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSh7XG4gICAgICAgICAgICBleHBpcmF0aW9uV2FybmluZzogdGhpcy5leHBpcmF0aW9uV2FybmluZyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5kZXRhaWxzLFxuICAgICAgICAgICAgbm90ZTogdGhpcy5ub3RlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh2aWV3KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBNb2RhbCB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RhbCc7XG5pbXBvcnQgSG9sZEluZm9ybWF0aW9uIGZyb20gJy4vSG9sZEluZm9ybWF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9sZEluZm9ybWF0aW9uTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gICAgY29uc3RydWN0b3IoeyBtb2RlbCwgdHlwZSB9KSB7XG4gICAgICAgIGNvbnN0IGluZm9ybWF0aW9uID0gbmV3IEhvbGRJbmZvcm1hdGlvbih7IG1vZGVsLCB0eXBlIH0pLnJlbmRlcigpO1xuICAgICAgICBjb25zdCBtb2RhbENvbnRlbnRzID0ge1xuICAgICAgICAgICAgY2xhc3NlczogWydIb2xkSW5mb3JtYXRpb25Nb2RhbCddLFxuICAgICAgICAgICAgdGl0bGU6IHdpbmRvdy5odG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLmhlYWRpbmcnKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGluZm9ybWF0aW9uLmVsXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKG1vZGFsQ29udGVudHMpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE1vZGFsIH0gZnJvbSAnLi4vY29tbW9uL21vZGFsJztcbmltcG9ydCBIb2xkSW5mb3JtYXRpb25WMiBmcm9tICcuL0hvbGRJbmZvcm1hdGlvblYyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9sZEluZm9ybWF0aW9uTW9kYWxWMiBleHRlbmRzIE1vZGFsIHtcbiAgICBjb25zdHJ1Y3Rvcih7IG1vZGVsLCBoaWRlSG9sZHNMaW5rID0gZmFsc2V9KSB7XG4gICAgICAgIGNvbnN0IGluZm9ybWF0aW9uID0gbmV3IEhvbGRJbmZvcm1hdGlvblYyKHttb2RlbCwgaGlkZUhvbGRzTGluaywgaXNWaXNpdG9yOiB3aW5kb3cuT3ZlckRyaXZlLmlzVmlzaXRvcn0pLnJlbmRlcigpO1xuICAgICAgICBjb25zdCBtb2RhbENvbnRlbnRzID0ge1xuICAgICAgICAgICAgY2xhc3NlczogWydIb2xkSW5mb3JtYXRpb25Nb2RhbFYyJ10sXG4gICAgICAgICAgICB0aXRsZTogd2luZG93Lmh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwuaGVhZGluZycpLFxuICAgICAgICAgICAgY29udGVudDogaW5mb3JtYXRpb24uZWxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIobW9kYWxDb250ZW50cyk7XG4gICAgfVxufVxuIiwiY29uc3QgeyBodG1sLCB0ZXh0IH0gPSB3aW5kb3c7XG5leHBvcnQgZGVmYXVsdCAoeyBkZXNjcmlwdGlvbiwgZGV0YWlscywgbm90ZSwgTWFjbWlsbGFuTWVzc2FnZSB9KSA9PiBgXG4gICAgJHtkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbi5sZW5ndGggPiAwID8gYDxwIGNsYXNzPSdkZXNjcmlwdGlvbic+JHtkZXNjcmlwdGlvbn08L3A+YCA6ICcnfVxuICAgICR7ZGV0YWlscyAmJiBkZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiBgPHAgY2xhc3M9J2RldGFpbCc+PHNwYW4gY2xhc3M9J2hvbGRJbmZvTGFiZWwnPiR7ZGV0YWlsLmxhYmVsfTogPC9zcGFuPjxzcGFuPiR7ZGV0YWlsLnZhbHVlfTwvc3Bhbj48L3A+YCkuam9pbignJyl9XG4gICAgJHtub3RlICYmIG5vdGUubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz0nbm90ZSc+JHtub3RlfTwvcD5gIDogJyd9XG4gICAgJHtNYWNtaWxsYW5NZXNzYWdlICYmIE1hY21pbGxhbk1lc3NhZ2UubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz1cIm1hY21pbGxhbk1lc3NhZ2VcIj4ke01hY21pbGxhbk1lc3NhZ2V9PC9wPmAgOiAnJ31cbmA7XG4iLCJpbXBvcnQgSG9sZEluZm9ybWF0aW9uVGVtcGxhdGUgZnJvbSAnLi9Ib2xkSW5mb3JtYXRpb25WMi5odG1sJztcbmltcG9ydCBNYWNtaWxsYW5NZXNzYWdlIGZyb20gJy4uLy4uLy4uLy4uL2xpYi91dGlsaXR5L21hY21pbGxhbk1lc3NhZ2UnO1xuY29uc3QgeyB0ZXh0IH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbGRJbmZvcm1hdGlvblYyIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoeyBoaWRlSG9sZHNMaW5rID0gZmFsc2UsIGlzVmlzaXRvciA9IGZhbHNlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5lbCA9IHRoaXMuZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuaGlkZUhvbGRzTGluayA9IGhpZGVIb2xkc0xpbms7XG4gICAgICAgIHRoaXMuaXNWaXNpdG9yID0gaXNWaXNpdG9yO1xuICAgICAgICB0aGlzLk1BWF9XQUlUX01PTlRIU19UT19TSE9XID0gNjtcbiAgICAgICAgdGhpcy5NQVhfV0FJVF9XRUVLU19UT19TSE9XID0gMjY7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp0aXRsZVN0YXRlJywgdGhpcy5yZW1vdmVXYWl0VGltZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gSG9sZEluZm9ybWF0aW9uVGVtcGxhdGUoe1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmRldGFpbHMsXG4gICAgICAgICAgICBub3RlOiB0aGlzLm5vdGUsXG4gICAgICAgICAgICBNYWNtaWxsYW5NZXNzYWdlOiB0aGlzLk1hY21pbGxhbk1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh2aWV3KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZW1vdmVXYWl0VGltZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUHJlcmVsZWFzZVRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wcmVyZWxlYXNlTm9XYWl0VGltZScpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBpcmVkVGl0bGUpIHtcbiAgICAgICAgICAgIGxldCB0aGVUZXh0ID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcpIHtcbiAgICAgICAgICAgICAgICB0aGVUZXh0ID0gdGV4dCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5ub0NvcGllc09uUGxhY2VIb2xkJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoZVRleHQgPSB0ZXh0KCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzVGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlkZUhvbGRzTGlua1xuICAgICAgICAgICAgICAgID8gdGhlVGV4dFxuICAgICAgICAgICAgICAgIDogYDxzcGFuPiR7dGhlVGV4dH08YSBjbGFzcz1cIm1hbmFnZUhvbGRzTGlua1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vcmVmZXJyZXJcIiBocmVmPVwiL2FjY291bnQvaG9sZHNcIj4ke3RleHQoXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvbGRTdWNjZXNzTW9kYWwubWFuYWdlSG9sZHMnXG4gICAgICAgICAgICAgICAgICApfTwvYT48L3NwYW4+YDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkgJiZcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGRldGFpbHNVcmwgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFJZCwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGRldGFpbHNMaW5rID0gYDxhIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcIiBocmVmPVwiJHtkZXRhaWxzVXJsfVwiPiR7dGV4dChcbiAgICAgICAgICAgICAgICAnbHVja3lEYXkuYWxsTHVja3lEYXlIb2xkc0luZm9MaW5rVGV4dCdcbiAgICAgICAgICAgICl9PC9hPmA7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnbHVja3lEYXkuYWxsTHVja3lEYXlIb2xkc0luZm8nLCB7IGxpbms6IGRldGFpbHNMaW5rIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGYXN0TGFuZVRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5hZHZhbnRhZ2VDYXZlYXQnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVmlzaXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUucmxhQ2F2ZWF0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGdldCBkZXRhaWxzKCkge1xuICAgICAgICBsZXQgZGV0YWlscyA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1dhaXRUaW1lVW5hdmFpbGFibGUgJiYgIXRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLndhaXRUaW1lJyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMud2FpdFRpbWVUZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ2hvbGRMaXN0UG9zaXRpb24nKSkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wbGFjZUluTGluZScpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLm1vZGVsLmdldCgnaG9sZExpc3RQb3NpdGlvbicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3duZWRDb3BpZXMgPSB0aGlzLm1vZGVsLmdldCgnb3duZWRDb3BpZXMnKSB8fCAwO1xuICAgICAgICBsZXQgdG90YWxIb2xkcyA9IHRoaXMubW9kZWwuZ2V0KCdob2xkc0NvdW50JykgfHwgMDtcblxuICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUubGlicmFyeUNvcGllcycpLFxuICAgICAgICAgICAgdmFsdWU6IG93bmVkQ29waWVzLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3duZWRDb3BpZXMgPiAxKSB7XG4gICAgICAgICAgICBsZXQgaG9sZHNSYXRpbyA9XG4gICAgICAgICAgICAgICAgb3duZWRDb3BpZXMgJiYgdG90YWxIb2xkcyA/IHRvdGFsSG9sZHMgLyBvd25lZENvcGllcyA6IDA7XG4gICAgICAgICAgICBsZXQgcmF0aW9EaXNwbGF5VmFsdWUgPVxuICAgICAgICAgICAgICAgIGhvbGRzUmF0aW8gPiAwICYmIGhvbGRzUmF0aW8gPCAxXG4gICAgICAgICAgICAgICAgICAgID8gJzwgMSdcbiAgICAgICAgICAgICAgICAgICAgOiBNYXRoLnJvdW5kKGhvbGRzUmF0aW8pO1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wZW9wbGVXYWl0aW5nVG90YWwnKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdG90YWxIb2xkcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wb2VwbGVXYWl0aW5nUGVyQ29weScpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByYXRpb0Rpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wZW9wbGVXYWl0aW5nJyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRvdGFsSG9sZHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGV0YWlscztcbiAgICB9XG5cbiAgICBnZXQgd2FpdFRpbWVIdG1sKCkge1xuICAgICAgICB2YXIgaHRtbCA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICBodG1sID0gYDxzcGFuIGNsYXNzPSd3YWl0aW5nVGV4dCc+JHt3aW5kb3cudGV4dChcbiAgICAgICAgICAgICAgICAnZXhwZWN0ZWRXYWl0VGltZS53YWl0VGltZSdcbiAgICAgICAgICAgICl9OiAke3RoaXMud2FpdFRpbWVUZXh0fTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgIH1cblxuICAgIGdldCB3YWl0VGltZVRleHQoKSB7XG4gICAgICAgIGxldCB3YWl0VGltZVRleHQgPSAnJztcblxuICAgICAgICBpZiAoIXRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93V2FpdFRpbWVVbmF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUubm90QXZhaWxhYmxlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBlc3RpbWF0ZWRXYWl0RGF5cyA9IE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ2VzdGltYXRlZFdhaXREYXlzJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlc3RpbWF0ZWRXYWl0RGF5cyA8PSA3KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUuYXZhaWxhYmxlU29vbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFdhaXREYXlzIDxcbiAgICAgICAgICAgICAgICAgICAgNyAqIHRoaXMuTUFYX1dBSVRfV0VFS1NfVE9fU0hPV1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB3YWl0VGltZVRleHQgPSB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLmFib3V0WFdlZWtzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2Vla3M6IE1hdGguY2VpbChlc3RpbWF0ZWRXYWl0RGF5cyAvIDcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IG1heCBvdXQgYXQgXCJhdCBsZWFzdCA2IG1vbnRoc1wiXG4gICAgICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUuYXRMZWFzdFlNb250aHMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aHM6IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChlc3RpbWF0ZWRXYWl0RGF5cyAvIDMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk1BWF9XQUlUX01PTlRIU19UT19TSE9XXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2FpdFRpbWVUZXh0O1xuICAgIH1cblxuICAgIGdldCBzaG93V2FpdFRpbWVVbmF2YWlsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdlc3RpbWF0ZWRXYWl0RGF5cycpID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdlc3RpbWF0ZWRXYWl0RGF5cycpID09PSBudWxsIHx8XG4gICAgICAgICAgICB0aGlzLmlzUHJlcmVsZWFzZVRpdGxlIHx8XG4gICAgICAgICAgICB0aGlzLmlzVmlzaXRvciB8fFxuICAgICAgICAgICAgdGhpcy5pc0V4cGlyZWRUaXRsZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBoaWRlV2FpdFRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzRmFzdExhbmVUaXRsZSB8fFxuICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmdldCgnaXNCb3Jyb3dlZCcpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnYm9ycm93ZWQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0V4cGlyZWRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2RvbnQtbWFyay1zdS1hcy1leHBpcmVkJylcbiAgICAgICAgICAgID8gdGhpcy5tb2RlbC5pc0V4cGlyZWRcbiAgICAgICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ2lzT3duZWQnKSAmJlxuICAgICAgICAgICAgICAgICAgIXRoaXMubW9kZWwuZ2V0KCdvd25lZENvcGllcycpICYmXG4gICAgICAgICAgICAgICAgICAhdGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheTtcbiAgICB9XG5cbiAgICBnZXQgaXNGYXN0TGFuZVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ2lzRmFzdGxhbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgaXNQcmVyZWxlYXNlVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKTtcbiAgICB9XG5cbiAgICBnZXQgbm90ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGdldCBNYWNtaWxsYW5NZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gTWFjbWlsbGFuTWVzc2FnZSh0aGlzLm1vZGVsKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgQ29udGV4dE1lbnVUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9Db250ZXh0TWVudS5odG1sJztcbmNvbnN0IHsgZmVhdHVyZU1hbmFnZXIsIHVybCwgcm91dGVzLCBPdmVyRHJpdmUsIHRleHQsIGh0bWwgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dE1lbnUgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IENvbnRleHRNZW51VGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLnJpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6aXNJbkhpc3RvcnknLCAoKSA9PiB0aGlzLnJlbmRlcigpKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgbGV0IGV2ZW50cyA9IHtcbiAgICAgICAgICAgICdjbGljayAuanMtaGlzdG9yeUFjdGlvbic6ICdfaGFuZGxlQ2xpY2snLFxuICAgICAgICAgICAgJ2tleWRvd24gLmpzLWhpc3RvcnlBY3Rpb24nOiAnX2hhbmRsZUtleUhpc3RvcnknLFxuICAgICAgICAgICAgJ2tleWRvd24gLmpzLWNvbnRleHQtYnV0dG9uJzogJ3RvZ2dsZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xlYW51cENvbnRleHRNZW51VG9nZ2xlJykpIHtcbiAgICAgICAgICAgIGV2ZW50c1sna2V5dXAgLmpzLWNvbnRleHQtZHJvcCddID0gJ19oYW5kbGVLZXlVcENvbnRhaW5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICB9XG5cbiAgICBfaGFuZGxlS2V5VXBDb250YWluZXIoZSkge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNyAvKkVTQyovKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywge1xuICAgICAgICAgICAgYWN0aW9uOiAnaGlzdG9yeScsXG4gICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUtleUhpc3RvcnkoZSkge1xuICAgICAgICBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NsZWFudXBDb250ZXh0TWVudVRvZ2dsZScpKSB7XG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgfHwgZS5rZXlDb2RlID09PSAzMikge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NsZWFudXBDb250ZXh0TWVudVRvZ2dsZScpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdmlld01vZGVsKCkge1xuICAgICAgICBsZXQgc2VyaWVzU2VhcmNoVXJsID0gJyc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pc01hZ2F6aW5lICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtYWdhemluZS1yb2xsdXAnKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2VuaGFuY2VkU2VyaWVzJykgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgnZGV0YWlsZWRTZXJpZXMnKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2VyaWVzU2VhcmNoVXJsID0gdXJsKHJvdXRlcy5zZWFyY2hCeVR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nlcmllc0lkJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpLnNlcmllc0lkLFxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICdyZWFkaW5nT3JkZXInLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsLmdldCgnc2VyaWVzJykpIHtcbiAgICAgICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwgPSB1cmwocm91dGVzLnNlYXJjaEJ5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VyaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnbmV3bHlhZGRlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFzTWVkaWFEb0Zvcm1hdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1vZGVsLmdldCgnZm9ybWF0cycpLmZvckVhY2goKGZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1hdC5pZCA9PT0gJ2Vib29rLW1lZGlhLWRvJykge1xuICAgICAgICAgICAgICAgIGhhc01lZGlhRG9Gb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbWF0dXJpdHlMZXZlbCA9IHRoaXMubW9kZWwuYXR0cmlidXRlcy5yYXRpbmdzLm1hdHVyaXR5TGV2ZWwuaWQ7XG5cbiAgICAgICAgY29uc3QgcmVsYXRlZFRpdGxlc1BhZ2VVcmwgPSBgJHt3aW5kb3cudXJsKFxuICAgICAgICAgICAgd2luZG93LnJvdXRlcy5tZWRpYVJlbGF0ZWRJZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5nZXQoJ2lkJyksXG4gICAgICAgICAgICB9XG4gICAgICAgICl9JHttYXR1cml0eUxldmVsID8gYD9tYXR1cml0eUxldmVsPSR7bWF0dXJpdHlMZXZlbH1gIDogJyd9YDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNPd25lZDogdGhpcy5tb2RlbC5nZXQoJ2lzT3duZWQnKSxcbiAgICAgICAgICAgIHJlbGF0ZWRUaXRsZXNQYWdlVXJsLFxuICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICByaWQ6IHRoaXMucmlkLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpLFxuICAgICAgICAgICAgdHlwZUlkOiB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkLFxuICAgICAgICAgICAgc2FtcGxlSHJlZjogdGhpcy5tb2RlbC5nZXQoJ3NhbXBsZScpLmhyZWYgfHwgJycsXG4gICAgICAgICAgICBzYW1wbGVUZXh0OiB0aGlzLl9nZXRTYW1wbGVUZXh0KCksXG4gICAgICAgICAgICBhbGlnbm1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgICAgaGlzdG9yeUFjdGlvbkxhYmVsOiB0aGlzLl9nZXRIaXN0b3J5QWN0aW9uTGFiZWwoKSxcbiAgICAgICAgICAgIGhpc3RvcnlBY3Rpb25UZXh0OiB0aGlzLl9nZXRIaXN0b3J5QWN0aW9uVGV4dCgpLFxuICAgICAgICAgICAgaGlzdG9yeUVuYWJsZWQ6XG4gICAgICAgICAgICAgICAgT3ZlckRyaXZlLnNob3dIaXN0b3J5RmVhdHVyZSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSxcbiAgICAgICAgICAgIGdhSGlzdG9yeUFjdGlvbjogdGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5JylcbiAgICAgICAgICAgICAgICA/ICdoaXN0b3J5LXJlbW92ZSdcbiAgICAgICAgICAgICAgICA6ICdoaXN0b3J5LWFkZCcsXG4gICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwsXG4gICAgICAgICAgICBoYXNNZWRpYURvRm9ybWF0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9nZXRTYW1wbGVUZXh0KCkge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZDtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvYm9vaycgfHwgdHlwZSA9PT0gJ211c2ljJykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQoJ3NhbXBsZUxpc3RlbicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0KCdzYW1wbGVXYXRjaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQoJ3NhbXBsZVJlYWQnKTtcbiAgICB9XG5cbiAgICBfZ2V0SGlzdG9yeUFjdGlvbkxhYmVsKCkge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpO1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5yZW1vdmVUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncmVhZGluZ0hpc3RvcnkuYWRkVGl0bGUnLCB7IHRpdGxlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldEhpc3RvcnlBY3Rpb25UZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5yZW1vdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5hZGQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQodGhpcy50ZW1wbGF0ZSh0aGlzLnZpZXdNb2RlbCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzS2V5Ym9hcmRTZWxlY3RFdmVudCA9IChlKSA9PlxuICAgICAgICAoZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpICYmIChlLnByZXZlbnREZWZhdWx0KCkgfHwgdHJ1ZSk7XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgd2luZG93LkZvdW5kYXRpb24ubGlicy5kcm9wZG93bi5jbG9zZShcbiAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQoJy5qcy1jb250ZXh0LWRyb3AnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHRvZ2dsZShlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRTZWxlY3RFdmVudChlKSkge1xuICAgICAgICAgICAgd2luZG93LkZvdW5kYXRpb24ubGlicy5kcm9wZG93bi50b2dnbGUoXG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmpzLWNvbnRleHQtYnV0dG9uJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgQ292ZXJUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9Db3Zlci5odG1sJztcbmltcG9ydCBOb0NvdmVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvTm9Db3Zlci5odG1sJztcbmltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ292ZXIgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7IGNvdmVyV2lkdGhzLCBpc0luSGVybywgaXNUaXRsZUhpc3RvcnkgPSBmYWxzZSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5jb3ZlcldpZHRocyA9IF8uZXh0ZW5kKFxuICAgICAgICAgICAgeyBtb2JpbGU6IDE0NSwgdGFibGV0OiAxNjAsIGRlc2t0b3A6IDE5MCB9LFxuICAgICAgICAgICAgY292ZXJXaWR0aHNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc0luSGVybyA9IGlzSW5IZXJvO1xuICAgICAgICB0aGlzLmlzVGl0bGVIaXN0b3J5ID0gaXNUaXRsZUhpc3Rvcnk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy5fcmVuZGVyKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICAkKHdpbmRvdykub2ZmKGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWApO1xuICAgIH1cblxuICAgIF9yZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhID0gdGhpcy5tb2RlbC50b0pTT04oKTtcbiAgICAgICAgY29uc3QgY292ZXJXaWR0aCA9IGJvd3Nlci5tb2JpbGVcbiAgICAgICAgICAgID8gdGhpcy5jb3ZlcldpZHRocy5tb2JpbGVcbiAgICAgICAgICAgIDogYm93c2VyLnRhYmxldFxuICAgICAgICAgICAgPyB0aGlzLmNvdmVyV2lkdGhzLnRhYmxldFxuICAgICAgICAgICAgOiB0aGlzLmNvdmVyV2lkdGhzLmRlc2t0b3A7XG4gICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy5tb2RlbC5nZXRDb3Zlcihjb3ZlcldpZHRoKTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBsZXQgJGNvdmVyID0gYDxkaXYgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKCRjb3Zlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoY292ZXIgJiYgY292ZXIuaHJlZikge1xuICAgICAgICAgICAgbGV0ICRjb3ZlciA9ICQoXG4gICAgICAgICAgICAgICAgQ292ZXJUZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLFxuICAgICAgICAgICAgICAgICAgICBjb3ZlckNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvdmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIucHJpbWFyeUNvbG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIucHJpbWFyeUNvbG9yLmhleCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0JyxcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBjb3ZlciAmJiBjb3Zlci5ocmVmLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHdpbmRvdy50ZXh0KCdjb3Zlci5jb3ZlckltYWdlTGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbWVkaWEudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBtZWRpYS5maXJzdENyZWF0b3JOYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbm9TYW1wbGVDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLnNhbXBsZS5ocmVmID09IG51bGwgPyAnaXMtbm9TYW1wbGUnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHNyY3NldDogY292ZXIgJiYgY292ZXIuc3Jjc2V0LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMSFRORy0yMTA1OiBJbiB0aGUgZXZlbnQgdGhhdCBhbiBpbWFnZSBmYWlscyB0byBsb2FkLCB3aXBlIG91dCB0aGUgaHJlZidzIGFuZCB1cGRhdGUgdGhlIG1vZGVsIHRvIHRyaWdnZXIgYSByZW5kZXIoKVxuICAgICAgICAgICAgJGNvdmVyLmZpbmQoJ2ltZycpLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzUmVtb3ZlZCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwuYXR0cmlidXRlcy5jb3ZlcnMpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIF8oaW1hZ2VzUmVtb3ZlZCkuZWFjaCgoaW1hZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGltYWdlLmhyZWY7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNldCh7IGNvdmVyczogaW1hZ2VzUmVtb3ZlZCB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCgkY292ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNUaXRsZUhpc3RvcnkpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgIGA8YSBocmVmPVwiJHt0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCIke3dpbmRvdy5odG1sKCdjb3ZlckltYWdlRm9yVGl0bGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbWVkaWEudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVwiIGNsYXNzPVwiaGlzdG9yeS1ub0NvdmVyXCIgc3JjPVwiJHt0b1N0YXRpY1VybChcbiAgICAgICAgICAgICAgICAgICAgJ2ltZy9uby1jb3Zlcl9lbl9VUy5qcGcnXG4gICAgICAgICAgICAgICAgKX1cIj5cbiAgICAgICAgICAgICAgICA8L2E+YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjcmVhdG9yVGV4dCA9IHRoaXMubW9kZWwuaXNNYWdhemluZVxuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5nZXQoJ2VkaXRpb24nKVxuICAgICAgICAgICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ2ZpcnN0Q3JlYXRvck5hbWUnKTtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgIE5vQ292ZXJUZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgICAgICAgICAgaXNJbkhlcm86IHRoaXMuaXNJbkhlcm8sXG4gICAgICAgICAgICAgICAgICAgIGNvdmVyV2lkdGg6IGNvdmVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGNvdmVySGVpZ2h0OiAoY292ZXJXaWR0aCAqIDI5MykgLyAyMjAsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JUZXh0OiBjcmVhdG9yVGV4dCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihcbiAgICAgICAgICAgICAgICBgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gLFxuICAgICAgICAgICAgICAgIF8uYmluZChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlT3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICcuQ292ZXJJbWFnZUNvbnRhaW5lciAubm9Db3ZlckF2YWlsYWJsZSAudGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgndGl0bGUnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oXG4gICAgICAgICAgICAgICAgYHJlc2l6ZS4ke3RoaXMubW9kZWwuaWR9YCxcbiAgICAgICAgICAgICAgICBfLmJpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLmF1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JUZXh0XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihcbiAgICAgICAgICAgICAgICBgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gLFxuICAgICAgICAgICAgICAgIF8uYmluZCh0aGlzLl9yZXNpemVDbGVhckltYWdlLCB0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gdGltZW91dCBnaXZlcyBicm93c2VyIGNoYW5jZSB0byBkcmF3IGFuZCBzZXQgaW5uZXJIVE1MIHZhbHVlcyB1c2VkXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyhcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC50aXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyhcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC5hdXRob3InLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdG9yVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplQ2xlYXJJbWFnZSgpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfcmVzaXplQ2xlYXJJbWFnZSgpIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICQoaW1hZ2UpLmhlaWdodCgoJChpbWFnZSkucGFyZW50KCkud2lkdGgoKSAqIDI5MykgLyAyMjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9tYW5hZ2VPdmVyZmxvdyhzZWxlY3RvciwgcmVzZXRUZXh0KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSByZXNldFRleHQ7XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3IuaW5kZXhPZignLnRpdGxlJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA8IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE0cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxMjUgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDEwMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE2cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxNTAgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDEyNVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE4cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA+PSAxNTApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcyMHB4Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pbmRleE9mKCcuYXV0aG9yJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA8IDExMCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzEwcHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxMzUgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDExMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzEycHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxNjAgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDEzNVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE0cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA+PSAxNjApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxNnB4Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGAke3RleHQucmVwbGFjZSgvXFxXKyQvZywgJycpfS4uLmA7IC8vIHJlbW92ZSB0cmFpbGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIGFkZCBlbGxpcHNpc1xuICAgICAgICAgICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICAgICAgICAgdGV4dCAhPT0gJy4uLicgJiZcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFcqXFx3XFxXKihcXC57M30pJC9nLCAnJDEnKTsgLy8gcmVtb3ZlIGEgbm9uLWVsbGlwc2lzIGNoYXJhY3RlciBhbmQgdW53YW50ZWQgY2hhcmFjdGVycyBhcm91bmQgaXTOqVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHRvZG86IHB1dCBhIG1pbiB3aWR0aCBhbiBoZWlnaHQgb24gdGhpcyEgV2Uga25vdyB3aGF0IHRoZSBoZWlnaHRzIGFyZSBmb3IgcGFydGljdWxhciBzY3JlZW4gd2lkdGhzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgTWVkaWFQYXJhbWV0ZXJzIGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9kYW8vTWVkaWFQYXJhbWV0ZXJzJztcbmltcG9ydCBUaXRsZUNvbGxlY3Rpb24gZnJvbSAnLi9tb2RlbHMvVGl0bGVDb2xsZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWFJbnRlcmZhY2Uge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIF8uZXh0ZW5kKHRoaXMsIEJhY2tib25lLkV2ZW50cyk7XG5cbiAgICAgICAgdGhpcy5pdGVtcyAgICAgICAgICA9IG5ldyBUaXRsZUNvbGxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5mYWNldHMgICAgICAgICA9IHt9O1xuICAgICAgICB0aGlzLnNvcnRPcHRpb25zICAgID0gW107XG4gICAgfVxuXG4gICAgcXVpY2tTZWFyY2godGVybSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIHsgcXVlcnk6IHRlcm0gfSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHNlYXJjaChwYXJhbWV0ZXJzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgcGFyYW1ldGVycywgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvbkJ5SWQoaWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoKF8uZXh0ZW5kKHt9LCB7IGNvbGxlY3Rpb25JZDogaWQgfSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvbkJ5UGFyYW1ldGVycyhjb2xsZWN0aW9uRmlsdGVycywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIGNvbGxlY3Rpb25GaWx0ZXJzLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgLyoqIFV0aWxpdHkgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYSBkYXRhIGNhbGwsIGJ1dCBkZWxpYmVyYXRsZXkgcmV0dXJuIGFuIGVtcHR5IHJlc3VsdCBzZXQgKi9cbiAgICBmZXRjaEVtcHR5UmVzcG9uc2UoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpzdGFydCcsIHRoaXMsIHsgbWVkaWFQYXJhbWV0ZXJzOiBudWxsIH0pO1xuXG4gICAgICAgIGxldCBlbXB0eVJlc3BvbnNlID0ge1xuICAgICAgICAgICAgaXRlbXMgICAgICAgOiBbXSxcbiAgICAgICAgICAgIGZhY2V0cyAgICAgIDoge30sXG4gICAgICAgICAgICBzb3J0T3B0aW9ucyA6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZmV0Y2hEb25lKGVtcHR5UmVzcG9uc2UsICdzeW50aGV0aWMnKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6ZW5kJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbXB0eVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge01lZGlhUGFyYW1ldGVyc30gcGFyYW1ldGVyc1xuICAgICAqIEBtZW1iZXJvZiBNZWRpYUludGVyZmFjZVxuICAgICAqL1xuICAgIF9mZXRjaChwYXJhbWV0ZXJzKSB7XG5cbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGEgdGl0bGUgaWQgaXMgc3BlY2lmaWNlZCB0aGVuIG5vIGZhY2V0cyB3aWxsIGJlIGNhbGN1bGF0ZWQgcmVnYXJkbGVzcyBvZiB0aGUgcGFyYW1zIHNlbnQuXG4gICAgICAgIGlmICghcGFyYW1ldGVycy5pbmNsdWRlZEZhY2V0cyAmJiAhcGFyYW1ldGVycy50aXRsZUlkKXtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5jbHVkZWRGYWNldHMgPSB3aW5kb3cuT3ZlckRyaXZlLnN1cHBvcnRlZEZhY2V0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmIHBhcmFtZXRlcnMuc2h1ZmZsZSl7XG4gICAgICAgICAgICBjb25zdCBzb3J0cyA9IFsnbW9zdHBvcHVsYXInLCAncmVsZWFzZWRhdGUnLCAndGl0bGUnLCAnYXV0aG9yJywgJ25ld2x5YWRkZWQnLCAnbG93Y2lyY3VsYXRpbmcnLCAnbW9zdHBvcHVsYXItc2l0ZSddO1xuICAgICAgICAgICAgcGFyYW1ldGVycy5zb3J0QnkgPSBzb3J0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzb3J0cy5sZW5ndGgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYVBhcmFtZXRlcnMgPSBuZXcgTWVkaWFQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGlmICghIXdpbmRvdy5PdmVyRHJpdmUuc2hvd09ubHlBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIG1lZGlhUGFyYW1ldGVycy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6c3RhcnQnLCB0aGlzLCB7IG1lZGlhUGFyYW1ldGVycyB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXN0Lm1lZGlhLmluZGV4KSxcbiAgICAgICAgICAgICAgICBtZXRob2QgIDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgICAgICAgICBkYXRhICAgIDogSlNPTi5zdHJpbmdpZnkobWVkaWFQYXJhbWV0ZXJzLnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMDAwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKChkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmIHBhcmFtZXRlcnMuc2h1ZmZsZSl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuaXRlbXMgPSBkYXRhLml0ZW1zICYmIF8uc2h1ZmZsZShkYXRhLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ29ubHktc2hvdy1vd25lZC1jb250ZW50JykgJiYgZGF0YS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLml0ZW1zID0gZGF0YS5pdGVtcy5maWx0ZXIoKHgpID0+IHguaXNPd25lZCA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZldGNoRG9uZShkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUik7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmVuZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZldGNoRmFpbChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignc3luYzplbmQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZWplY3QoanFYSFIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9mZXRjaERvbmUoZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5yZXNldChkYXRhLml0ZW1zKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOnN1Y2Nlc3MnLCB0aGlzLCB7IGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSIH0pO1xuICAgIH1cblxuICAgIF9mZXRjaEZhaWwoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpmYWlsJywgdGhpcywgeyBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gfSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWRpbmdIaXN0b3J5QnV0dG9uVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvUmVhZGluZ0hpc3RvcnlCdXR0b24uaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRpbmdIaXN0b3J5QnV0dG9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTppc0luSGlzdG9yeScsIHRoaXMucmVuZGVyKTtcbiAgICB9XG5cbiAgICBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiB7ICdjbGljayc6ICdfaGFuZGxlQ2xpY2snIH07XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWwgfHwgdGhpcy4kZWwubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyB3ZSBoYXZlIG5vIHRhcmdldCB0byByZW5kZXIgYW55dGhpbmcgaW50b1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYW5pbWF0ZSgpO1xuICAgICAgICBpZiAod2luZG93Lk92ZXJEcml2ZS5zaG93SGlzdG9yeUZlYXR1cmUgJiYgIXRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpKSB7XG4gICAgICAgICAgICAvLyByZXRhaW4gZm9jdXMgb24gcmVyZW5kZXJcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzUmVmb2N1cyA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLlJlYWRpbmdIaXN0b3J5QnV0dG9uJykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzSW5IaXN0b3J5ID0gdGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5Jyk7XG4gICAgICAgICAgICBsZXQgdmlld01vZGVsO1xuICAgICAgICAgICAgaWYgKGlzSW5IaXN0b3J5KSB7XG4gICAgICAgICAgICAgICAgdmlld01vZGVsID0ge1xuICAgICAgICAgICAgICAgICAgICBtZWRpYUlkICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ2lkJyksXG4gICAgICAgICAgICAgICAgICAgIGdhQWN0aW9uICAgICAgOiAnaGlzdG9yeS1yZW1vdmUnLFxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWwgICAgIDogd2luZG93Lmh0bWwoJ3JlYWRpbmdIaXN0b3J5LnJlbW92ZVRpdGxlJywge3RpdGxlOiB0aGlzLm1vZGVsLmdldCgndGl0bGUnKX0pLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzZXMgIDogJ3NlY29uZGFyeS1jb2xvci1ob3ZlcmFibGUgaW4taGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAgIHRleHQgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVhZGluZ0hpc3RvcnkucmVtb3ZlJylcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2aWV3TW9kZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQgICAgICAgOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgZ2FBY3Rpb24gICAgICA6ICdoaXN0b3J5LWFkZCcsXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbCAgICAgOiB3aW5kb3cuaHRtbCgncmVhZGluZ0hpc3RvcnkuYWRkVGl0bGUnLCB7dGl0bGU6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpfSksXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3NlcyAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZWFkaW5nSGlzdG9yeS5hZGQnKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBidXR0b25Ob2RlID0gJChSZWFkaW5nSGlzdG9yeUJ1dHRvblRlbXBsYXRlKHZpZXdNb2RlbCkpWzBdO1xuXG4gICAgICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKGJ1dHRvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobmVlZHNSZWZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuUmVhZGluZ0hpc3RvcnlCdXR0b24nKS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNsaWNrKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHsgYWN0aW9uOiAnaGlzdG9yeScsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICAgIH1cblxuICAgIF9hbmltYXRlKCkge1xuICAgICAgICB0aGlzLiRlbC5maW5kKCdpJykucmVtb3ZlQ2xhc3MoJ2FuaW1hdGVkIGJvdW5jZUluIGJvdW5jZU91dCcpLmFkZENsYXNzKCdhbmltYXRlZCBib3VuY2VPdXQnKTtcbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUFjdGlvbkJ1dHRvbiBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHsgdHlwZSA9ICdsaW5rJywgYWN0aW9uLCBzdHlsZSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgICB0aGlzLmhhc0N1c3RvbUFjdGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoISFhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5oYXNDdXN0b21BY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuXG4gICAgICAgIHRoaXMuJGJ1dHRvbiA9ICQoJzxhIC8+Jyk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnRpdGxlU3RhdGUnLCB0aGlzLnJlbmRlcik7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQodGhpcy4kYnV0dG9uKTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNCdXR0b24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdidXR0b24nO1xuICAgIH1cblxuICAgIGdldCBpc0xpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsaW5rJztcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kYnV0dG9uLm9mZigpO1xuICAgICAgICB0aGlzLiRlbC5vZmYoKTtcblxuICAgICAgICBjb25zdCBidXR0b25Qcm9wcyA9IHRoaXMuZ2V0QnV0dG9uUHJvcHMoKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGJ1dHRvblByb3BzLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmIChfKGF0dHJpYnV0ZXMuaHJlZikuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnJvbGUgPSAnYnV0dG9uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucm9sZSA9ICdsaW5rJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGJ1dHRvbi5hdHRyKGF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLiRidXR0b24uaHRtbChidXR0b25Qcm9wcy5odG1sKTtcblxuICAgICAgICAvLyBBdHRhY2ggZXZlbnQgaGFuZGxlcnMgaWYgZWl0aGVyIGlzIHRydWVcbiAgICAgICAgLy8gLSBCdXR0b24gaXMgbm90IGEgbGlua1xuICAgICAgICAvLyAtIEN1c3RvbSBhY3Rpb24gaGFzIGJlZW4gcHJvdmlkZWRcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMucm9sZSAhPT0gJ2xpbmsnIHx8IHRoaXMuaGFzQ3VzdG9tQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9hdHRhY2hFdmVudEhhbmRsZXJzKHRoaXMuJGJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3YWl0aW5nKGlzV2FpdGluZyA9IHRydWUpIHtcbiAgICAgICAgaWYgKGlzV2FpdGluZykge1xuICAgICAgICAgICAgdGhpcy4kYnV0dG9uXG4gICAgICAgICAgICAgICAgLm9mZignLnRpdGxlQWN0aW9uQnV0dG9uJylcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3dhaXRpbmcnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdkaXNhYmxlZCcsIGlzV2FpdGluZylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKCc8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kYnV0dG9uXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCd3YWl0aW5nJylcbiAgICAgICAgICAgICAgICAuYXR0cignZGlzYWJsZWQnLCBpc1dhaXRpbmcpXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5zcGlubmVyJylcbiAgICAgICAgICAgICAgICAucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50SGFuZGxlcnModGhpcy4kYnV0dG9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzU2VsZWN0RXZlbnQgPSAoZSkgPT5cbiAgICAgICAgKGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikgJiZcbiAgICAgICAgKGUucHJldmVudERlZmF1bHQoKSB8fCB0cnVlKTtcblxuICAgIF9hdHRhY2hFdmVudEhhbmRsZXJzKCRlbCkge1xuICAgICAgICAkZWwub2ZmKCcudGl0bGVBY3Rpb25CdXR0b24nKTtcblxuICAgICAgICAkZWwub24oJ2NsaWNrLnRpdGxlQWN0aW9uQnV0dG9uJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RFdmVudChlKSAmJiB0aGlzLmFjdGlvbihlKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRlbC5vbigna2V5ZG93bi50aXRsZUFjdGlvbkJ1dHRvbicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0RXZlbnQoZSkgJiYgdGhpcy5hY3Rpb24oZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFjdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0RXZlbnQoZXZlbnQpICYmIHRoaXMuX3RyaWdnZXJUaXRsZUFjdGlvbigpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyVGl0bGVBY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywge1xuICAgICAgICAgICAgYWN0aW9uOiB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9nZXRCb3Jyb3dCdXR0b25UZXh0KCkge1xuICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQgPT09ICdhdWRpb2Jvb2snXG4gICAgICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnbGlzdGVuJylcbiAgICAgICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZWFkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpbmRvdy5odG1sKCdib3Jyb3cnKTtcbiAgICB9XG5cbiAgICBfZ2V0Qm9ycm93QnV0dG9uQXJpYUxhYmVsKHRpdGxlKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCA9PT0gJ2F1ZGlvYm9vaydcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5odG1sKCdsaXN0ZW5Ub1RpdGxlJywgeyB0aXRsZSB9KVxuICAgICAgICAgICAgICAgIDogd2luZG93Lmh0bWwoJ3JlYWRUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpbmRvdy5odG1sKCdib3Jyb3dUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgfVxuXG4gICAgZ2V0QnV0dG9uUHJvcHMoKSB7XG4gICAgICAgIGxldCBidXR0b25BdHRycyA9IHtcbiAgICAgICAgICAgICdkYXRhLW1lZGlhLWlkJzogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgICdkYXRhLXR5cGUnOiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCxcbiAgICAgICAgICAgICdkYXRhLXR5cGUtbmFtZSc6XG4gICAgICAgICAgICAgICAgKHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkICYmXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5odG1sKHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkKSkgfHxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHRhYmluZGV4OiAwLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgaHRtbCA9ICh0aGlzLiRidXR0b24uaHRtbCAmJiB0aGlzLiRidXR0b24uaHRtbCgpKSB8fCAnJztcblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudGl0bGU7XG5cbiAgICAgICAgbGV0IGNsYXNzZXMgPSBbJ1RpdGxlQWN0aW9uQnV0dG9uJywgJ3UtYWxsQ2FwcyddO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQnV0dG9uKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goLi4uWydidXR0b24nLCAncmFkaXVzJywgJ2lzLWJ1dHRvbicsICdzZWNvbmRhcnknXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSA9PT0gJ2ZpbGwnKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2ZpbGwnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAndW5hdmFpbGFibGUnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtdW5hdmFpbGFibGUganMtdW5hdmFpbGFibGUgZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgndmlzaWJsZS11bmF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVVuYXZhaWxhYmxlJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub29rJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLW5vb2sganMtbm9vaycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnc2VuZFRvTm9vaycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHJldmlldyc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2Vjb25kYXJ5LWNvbG9yJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1wcmV2aWV3IGpzLXByZXZpZXcgc2Vjb25kYXJ5Jyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdkZW1vTW9kZS5wcmV2aWV3Jyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnNbJ2FyaWEtbGFiZWwnXSA9IHdpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnZGVtb01vZGUucHJldmlld1RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgeyB0aXRsZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvdyc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2Vjb25kYXJ5LWNvbG9yJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1ib3Jyb3cganMtYm9ycm93IHNlY29uZGFyeScpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt0aGlzLl9nZXRCb3Jyb3dCdXR0b25UZXh0KCl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnNbJ2FyaWEtbGFiZWwnXSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldEJvcnJvd0J1dHRvbkFyaWFMYWJlbCh0aXRsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3Jyb3dlZCc6XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLW9wZW5Cb29rIGJpZycpO1xuICAgICAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ29wZW5Cb29rJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmhyZWYgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFEb3dubG9hZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMuZm9ybWF0c1swXS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRyc1snYXJpYS1sYWJlbCddID0gd2luZG93Lmh0bWwoJ29wZW5Cb29rTGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZU5hbWU6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnJlbCA9ICdub3JlZmVycmVyJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWJvcnJvd2VkIGpzLWJvcnJvd2VkJyk7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnZ29Ub0xvYW5zJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmhyZWYgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuYWNjb3VudExvYW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob2xkJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzZWNvbmRhcnktY29sb3ItaG92ZXInKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWhvbGQganMtaG9sZCcpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgncGxhY2VBSG9sZCcpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzWydhcmlhLWxhYmVsJ10gPSB3aW5kb3cuaHRtbCgncGxhY2VBSG9sZE9uVGl0bGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25Ib2xkJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0J1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3ByaW1hcnknKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLW9uSG9sZCBqcy1vbkhvbGQnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2dvVG9Ib2xkcycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmhyZWYgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuYWNjb3VudEhvbGRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlbmV3JzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXJlbmV3IHJlbmV3YWxCdXR0b24nKTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMgIT09ICd1LWFsbENhcHMnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPjxpIGNsYXNzPVwiaWNvbiBpY29uLXJlbmV3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdyZW5ld2FsLnJlbmV3VGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICB7IHRpdGxlOiAnJyB9XG4gICAgICAgICAgICAgICAgKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVlc3RBZ2Fpbic6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZXF1ZXN0QWdhaW4gcmVuZXdhbEJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcigoYykgPT4gYyAhPT0gJ3UtYWxsQ2FwcycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+PGkgY2xhc3M9XCJpY29uIGljb24tcmVuZXdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JHt3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2FjY291bnRMb2Fucy5yZXF1ZXN0QWdhaW4nXG4gICAgICAgICAgICAgICAgKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVlc3RlZCc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZXF1ZXN0ZWQgcmVuZXdhbEJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcigoYykgPT4gYyAhPT0gJ3UtYWxsQ2FwcycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+PGkgY2xhc3M9XCJpY29uIGljb24tcmVuZXdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JHt3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2FjY291bnRMb2Fucy5yZXF1ZXN0ZWQnXG4gICAgICAgICAgICAgICAgKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlbmV3ZWQnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVuZXdlZCByZW5ld2FsQnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKChjKSA9PiBjICE9PSAndS1hbGxDYXBzJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj48aSBjbGFzcz1cImljb24gaWNvbi1yZW5ld1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnYWNjb3VudExvYW5zLnJlbmV3ZWQnXG4gICAgICAgICAgICAgICAgKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpc3Rlbk5vdyc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1saXN0ZW5Ob3cnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2xpc3Rlbk5vdycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmhyZWYgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFEb3dubG9hZCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdhdWRpb2Jvb2stb3ZlcmRyaXZlJyxcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5yZWwgPSAnbm9yZWZlcnJlcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZWFkTm93JzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXJlYWROb3cnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ3JlYWROb3cnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhRG93bmxvYWQsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnZWJvb2stb3ZlcmRyaXZlJyxcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5yZWwgPSAnbm9yZWZlcnJlcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZGRUb0FwcCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2Vjb25kYXJ5LWNvbG9yLWhvdmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1hZGRUb0FwcCcpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnYWRkVG9BcHAnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhRG93bmxvYWQsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiB0aGlzLm1vZGVsLmdldCgnYWRkVG9BcHBGb3JtYXQnKSxcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dhaXRpbmcnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZG90U3Bpbm5lciA9ICQod2luZG93LnByaW1hcnlBY3Rpb25Mb2FkaW5nR2lmKTtcbiAgICAgICAgICAgICAgICAgICAgZG90U3Bpbm5lci5jc3MoJ3dpZHRoJywgJ2luaGVyaXQnKTtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGRvdFNwaW5uZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnd2FpdGluZyBzZWNvbmRhcnknKTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaHRtbCA9ICc8c3Bhbj53b3JraW5nPC9zcGFuPjxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbkF0dHJzLmNsYXNzID0gY2xhc3Nlcy5qb2luKCcgJyk7XG5cbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlczogYnV0dG9uQXR0cnMsIGh0bWwgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgVGl0bGVDYXJkVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvVGl0bGVDYXJkLmh0bWwnO1xuXG5pbXBvcnQgVGl0bGVJbmZvIGZyb20gJy4vdmlld3MvVGl0bGVJbmZvJztcbmltcG9ydCBUaXRsZUFjdGlvbkJ1dHRvbiBmcm9tICcuL1RpdGxlQWN0aW9uQnV0dG9uJztcbmltcG9ydCBXaXNoTGlzdEJ1dHRvbiBmcm9tICcuL1dpc2hMaXN0QnV0dG9uJztcbmltcG9ydCBUaXRsZUhlYWRlckJhciBmcm9tICcuL1RpdGxlSGVhZGVyQmFyJztcbmltcG9ydCBDb3ZlciBmcm9tICcuL0NvdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVDYXJkIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICd0aXRsZS1jb250YWluZXIgdGl0bGUnO1xuICAgIH1cblxuICAgIHRlbXBsYXRlID0gVGl0bGVDYXJkVGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3Rvcih7IGNvdmVyV2lkdGhzLCBpc0luSGVybyA9IGZhbHNlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcblxuICAgICAgICB0aGlzLmNvdmVyV2lkdGhzID0gY292ZXJXaWR0aHM7XG4gICAgICAgIHRoaXMuaXNJbkhlcm8gPSBpc0luSGVybztcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgY292ZXJXaWR0aHMsIGlzSW5IZXJvIH0gPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgY29uc3QgJHRtcCA9ICQoXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICBnZW9JZGNDbGFzczogd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpXG4gICAgICAgICAgICAgICAgICAgID8gJ2dlb0lkYydcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIG5vdCB3b3JrICB3aXRoIENTUyB0cmFuc2l0aW9uIGFuaW1hdGlvbnNcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaXNQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ3BsYWNlaG9sZGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy50aXRsZUhlYWRlckJhciA9IG5ldyBUaXRsZUhlYWRlckJhcih7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuVGl0bGVIZWFkZXJCYXInKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMuY292ZXIgPSBuZXcgQ292ZXIoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5Db3ZlckltYWdlJyksXG4gICAgICAgICAgICAgICAgY292ZXJXaWR0aHMsXG4gICAgICAgICAgICAgICAgaXNJbkhlcm8sXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMudGl0bGVJbmZvID0gbmV3IFRpdGxlSW5mbyh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLlRpdGxlSW5mbycpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlQWN0aW9uQnV0dG9uID0gbmV3IFRpdGxlQWN0aW9uQnV0dG9uKHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuVGl0bGVBY3Rpb24nKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzYW1wbGVPbmx5TW9kZScpICYmXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pc01hZ2F6aW5lXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZGlzYWJsZVdpc2hsaXN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLndpc2hsaXN0QnV0dG9uID0gbmV3IFdpc2hMaXN0QnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZVdpc2hsaXN0JyksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpY29uLW9ubHknLFxuICAgICAgICAgICAgICAgIH0pLnJlbmRlcigpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZCgkdG1wKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICBzdXBlci5yZW1vdmUoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUHJvY2Vzc0ZvcndhcmRlZEFjdGlvbiAgICAgICBmcm9tICcuLi8uLi91dGlsL3RpdGxlLWFjdGlvbnMvcHJvY2Vzc0ZvcndhcmRlZEFjdGlvbic7XG5pbXBvcnQgSGFzaE1hbmFnZXIgICAgICAgICAgICAgICAgICBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5cbmltcG9ydCBUaXRsZUNhcmQgICAgZnJvbSAnLi9UaXRsZUNhcmQnO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5jb25zdCBoZSA9IHJlcXVpcmUoJ2hlJyk7XG4vLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGluZyBjb2RlIHBhc3NlcyBhIEJhY2tib25lLkNvbGxlY3Rpb24gd2l0aCBhIG1vZGVsIHR5cGUgb2YgVGl0bGVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQ29sbGVjdGlvblZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcblxuICAgIGNvbnN0cnVjdG9yKHsgYnVzLCBwYXRyb25NZWRpYUl0ZW1zTW9kZWwsIFZpZXcsIGF0dHJpYnV0ZXMsIGNvdmVyV2lkdGhzLCBpc0luSGVybywgY29udGV4dCB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuYnVzICAgICAgICAgICAgPSBidXM7XG4gICAgICAgIHRoaXMuVmlldyAgICAgICAgICAgPSBWaWV3IHx8IFRpdGxlQ2FyZDtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzICAgICA9IF8uZXh0ZW5kKHt9LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5jb3ZlcldpZHRocyAgICA9IGNvdmVyV2lkdGhzO1xuICAgICAgICB0aGlzLmlzSW5IZXJvICAgICAgID0gaXNJbkhlcm87XG4gICAgICAgIHRoaXMuY29udGV4dCAgICAgICAgPSBjb250ZXh0O1xuXG4gICAgICAgIHRoaXMudGl0bGVBY3Rpb25zICAgPSBuZXcgVGl0bGVBY3Rpb25zKHsgYnVzOiB0aGlzLmJ1cywgY29udGV4dCB9KTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3RpdGxlOmFjdGlvbicsIHRoaXMuX2hhbmRsZVRpdGxlQWN0aW9uKTtcblxuICAgICAgICAvLyBUT0RPOiA+Pj4gUmVtb3ZlIHRoaXMgY2FsbCBhbmQgX3VwZGF0ZU1lZGlhU3RhdGVzKCkgbG9naWMgYW5kIHVwZGF0ZSBkZXBlbmRhbnQgY29uc3VtZXJzIHRvIHVzZSBQYXRyb25UaXRsZVN0YXR1c1xuICAgICAgICAvLyBGZXRjaCBwYXRyb24gZGF0YSBhbmQgdHJpZ2dlciBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAvLyBPbmx5IGZldGNoIHBhdHJvbiBkYXRhIGlmIGF1dGhlZCBhbmQgaGFzIGxpbmtlZCBjYXJkcy5cbiAgICAgICAgaWYgKHBhdHJvbk1lZGlhSXRlbXNNb2RlbCAmJiB3aW5kb3cuT3ZlckRyaXZlLmlzQXV0aGVudGljYXRlZCAmJiB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzKSB7XG4gICAgICAgICAgICBwYXRyb25NZWRpYUl0ZW1zTW9kZWxcbiAgICAgICAgICAgICAgICAuaW5pdGlhbEZldGNoKClcbiAgICAgICAgICAgICAgICAudGhlbigocGF0cm9uRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVNZWRpYVN0YXRlcyhwYXRyb25EYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIGdldCB0YWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3VsJztcbiAgICB9XG5cbiAgICBfaGFuZGxlVGl0bGVBY3Rpb24oeyBhY3Rpb24sIG1vZGVsIH0pIHtcbiAgICAgICAgdGhpcy50aXRsZUFjdGlvbnMucGVyZm9ybShhY3Rpb24sIG1vZGVsKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWVkaWFTdGF0ZXMocGF0cm9uRGF0YSkge1xuICAgICAgICBsZXQgaWRzID0gW107XG4gICAgICAgIF8oXy52YWx1ZXMocGF0cm9uRGF0YSkpLmVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBpZHMucHVzaCguLi5pdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKC4uLl8ua2V5cyhpdGVtKS5tYXAoTnVtYmVyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWRzID0gXy51bmlxKGlkcyk7XG5cbiAgICAgICAgaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuY29sbGVjdGlvbi5nZXQoaWQpO1xuXG4gICAgICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgICAgICBtb2RlbC51cGRhdGVQYXRyb25TdGF0ZShwYXRyb25EYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcGVyZm9ybUZvcndhcmRlZEFjdGlvbigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHRpdGxlKSA9PiB7XG5cbiAgICAgICAgICAgIHRpdGxlLnNldCgndGl0bGUnLCBoZS5kZWNvZGUodGl0bGUuZ2V0KCd0aXRsZScpKSk7XG5cbiAgICAgICAgICAgIHRpdGxlLnNldENvbnRleHQodGhpcy5jb250ZXh0KTtcblxuICAgICAgICAgICAgbGV0IHZpZXcgPSBuZXcgdGhpcy5WaWV3KHtcbiAgICAgICAgICAgICAgICBtb2RlbCAgICAgICA6IHRpdGxlLFxuICAgICAgICAgICAgICAgIGJ1cyAgICAgICAgIDogdGhpcy5idXMsXG4gICAgICAgICAgICAgICAgY292ZXJXaWR0aHMgOiB0aGlzLmNvdmVyV2lkdGhzLFxuICAgICAgICAgICAgICAgIGlzSW5IZXJvICAgIDogdGhpcy5pc0luSGVyb1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogJ2pzLXRpdGxlQ2FyZCBJdGVtJ1xuICAgICAgICAgICAgICAgIH0pLmFwcGVuZCh2aWV3LiRlbClbMF1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc3RvcFN0ZWFsaW5nQ29sbGVjdGlvblRpdGxlJykpe1xuICAgICAgICAgICAgLy8gSSB0aGluayB3ZSBuZXZlciBub3RpY2VkIHRoaXMgb2RkIGxvZ2ljIGJlY2F1c2UgaW4gbW9zdCBjYXNlcyB3aGVyZSB0aGlzIHZpZXcgaXMgdXNlZCB0aGUgc2VsZWN0b3JcbiAgICAgICAgICAgIC8vIGJlbG93IGRvZXNuJ3QgbWF0Y2ggYW55dGhpbmcgb24gdGhlIHBhZ2UuXG4gICAgICAgICAgICBjb25zdCAkY29sbGVjdGlvblRpdGxlID0gJCgnLmNvbGxlY3Rpb24tdGl0bGUtY29udGFpbmVyJyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5hdHRyKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCgkY29sbGVjdGlvblRpdGxlKS5hcHBlbmQoZnJhZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5hdHRyKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChmcmFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIF9wZXJmb3JtRm9yd2FyZGVkQWN0aW9uKCkge1xuICAgICAgICBpZiAod2luZG93Lk92ZXJEcml2ZS5pc0F1dGhlbnRpY2F0ZWQgJiYgd2luZG93Lk92ZXJEcml2ZS5oYXNMaW5rZWRDYXJkcyAmJiBIYXNoTWFuYWdlci5nZXQoJ2FjdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCBmb3J3YXJkZWRBY3Rpb24gPSBuZXcgUHJvY2Vzc0ZvcndhcmRlZEFjdGlvbih0aGlzLmNvbGxlY3Rpb24sIHRoaXMuYnVzKTtcbiAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICB3aW5kb3cuZm9yd2FyZGVkQWN0aW9uID0gZm9yd2FyZGVkQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiY29uc3QgQmFja2JvbmUgPSB3aW5kb3cuQmFja2JvbmU7XG5cbmNvbnN0IFRpdGxlSGVhZGVyQmFyID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZScsIHRoaXMucmVuZGVyKTtcblxuICAgICAgICB0aGlzLiR0aXRsZUhlYWRlckJhciA9ICQoJzxkaXYgLz4nKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLnJldHVyblN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy4kdGl0bGVIZWFkZXJCYXIgPSAkKCc8ZGl2IC8+JywgYS5jb250YWluZXIpLmFwcGVuZChcbiAgICAgICAgICAgICQoJzxhIC8+JywgYS5saW5rKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLiRlbC5odG1sKHRoaXMuJHRpdGxlSGVhZGVyQmFyKTtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICByZXR1cm5TdGF0ZSgpIHtcbiAgICAgICAgbGV0IGJhbm5lciA9IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjoge1xuICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndGl0bGUtaGVhZGVyLWJhcicsICd1LWFsbENhcHMnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgaHJlZjogdGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmwsXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg6IC0xLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFjdGlvbiA9IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAndW5hdmFpbGFibGUnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAnaXMtdW5hdmFpbGFibGUgdW5hdmFpbGFibGUtdGl0bGUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub29rJzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2lzLW5vb2sgYXZhaWxhYmxlLXRpdGxlIHNlY29uZGFyeS1iYWNrZ3JvdW5kJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvdyc6XG4gICAgICAgICAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICdhdmFpbGFibGUtdGl0bGUgc2Vjb25kYXJ5LWJhY2tncm91bmQgaXMtYm9ycm93J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvd2VkJzpcbiAgICAgICAgICAgIGNhc2UgJ2FkZFRvQXBwJzpcbiAgICAgICAgICAgIGNhc2UgJ2xpc3Rlbk5vdyc6XG4gICAgICAgICAgICBjYXNlICdyZWFkTm93JzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2lzLWJvcnJvd2VkIGF2YWlsYWJsZS10aXRsZSBzZWNvbmRhcnktYmFja2dyb3VuZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB3aW5kb3cuaHRtbCgnYm9ycm93ZWQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbGQnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKCdpcy1ob2xkIHVuYXZhaWxhYmxlLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpXG4gICAgICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUNvbWluZ1Nvb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy50ZXh0KCdhdmFpbGFiaWxpdHlXYWl0TGlzdCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25Ib2xkJzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaCgnaXMtb25Ib2xkIHVuYXZhaWxhYmxlLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdvbkhvbGQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dhaXRpbmcnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3NlcyA9IHRoaXMuJHRpdGxlSGVhZGVyQmFyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB0aGlzLiR0aXRsZUhlYWRlckJhci5maW5kKCdhOmZpcnN0JykudGV4dCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzcyA9IGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5qb2luKCcgJyk7XG5cbiAgICAgICAgcmV0dXJuIGJhbm5lcjtcbiAgICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlSGVhZGVyQmFyO1xuIiwiaW1wb3J0IFdpc2hMaXN0QnV0dG9uVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvV2lzaExpc3RCdXR0b24uaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpc2hMaXN0QnV0dG9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZ2V0IGNvbnRyYXN0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyYXN0ID09PSAnZGVmYXVsdCcgPyAnJyA6ICdjb250cmFzdC1hbHRlcm5hdGUnO1xuICAgIH1cblxuICAgIGdldCBhcmlhTGFiZWwoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYWRkVGl0bGVUb1dpc2hMaXN0JywgeyB0aXRsZSB9KVxuICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVtb3ZlVGl0bGVGcm9tV2lzaExpc3QnLCB7IHRpdGxlIH0pO1xuICAgIH1cblxuICAgIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnd2lzaGxpc3RTdGF0ZScpID09PSAnd2lzaGxpc3RBZGQnXG4gICAgICAgICAgICA/ICdpY29uLXdpc2gtbGlzdCdcbiAgICAgICAgICAgIDogJ2ljb24td2lzaC1saXN0LWFkZGVkJztcbiAgICB9XG5cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2ljb24tb25seScpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYWRkVG9XaXNoTGlzdCcpXG4gICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZW1vdmVGcm9tV2lzaExpc3QnKTtcbiAgICB9XG5cbiAgICBnZXQgZ2EoKSB7XG4gICAgICAgIGNvbnN0IGlzQWRkID0gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJztcbiAgICAgICAgaWYgKGlzQWRkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuYXR0cmlidXRlcy5pZCxcbiAgICAgICAgICAgICAgICBmb3JtYXRUeXBlOiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoeyB0eXBlLCBjb250cmFzdCB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ2ljb24tb25seSc7XG4gICAgICAgIHRoaXMuY29udHJhc3QgPSBjb250cmFzdCB8fCAnZGVmYXVsdCc7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOndpc2hsaXN0U3RhdGUnLCB0aGlzLnJlbmRlcik7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ2ljb24tb25seSc7XG4gICAgfVxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4geyBjbGljazogJ19oYW5kbGVDbGljaycgfTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCB8fCB0aGlzLiRlbC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIHdlIGhhdmUgbm8gdGFyZ2V0IHRvIHJlbmRlciBhbnl0aGluZyBpbnRvXG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXRhaW4gZm9jdXMgb24gcmVyZW5kZXJcbiAgICAgICAgY29uc3QgbmVlZHNSZWZvY3VzID1cbiAgICAgICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLldpc2hMaXN0QnV0dG9uJykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcblxuICAgICAgICBjb25zdCBidXR0b25IdG1sID0gV2lzaExpc3RCdXR0b25UZW1wbGF0ZSh7XG4gICAgICAgICAgICBnYTogdGhpcy5nYSxcbiAgICAgICAgICAgIGNvbnRyYXN0Q2xhc3M6IHRoaXMuY29udHJhc3RDbGFzcyxcbiAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hcmlhTGFiZWwsXG4gICAgICAgICAgICBpY29uQ2xhc3M6IHRoaXMuaWNvbkNsYXNzLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgaWNvbkFuaW1hdGlvbkNsYXNzZXM6IHdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2VcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiAnYW5pbWF0ZWQgYm91bmNlSW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoYnV0dG9uSHRtbCk7XG5cbiAgICAgICAgaWYgKG5lZWRzUmVmb2N1cykge1xuICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuV2lzaExpc3RCdXR0b24nKS5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNsaWNrKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3dpc2gnLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hbmltYXRlKCkge1xuICAgICAgICB0aGlzLiRlbFxuICAgICAgICAgICAgLmZpbmQoJ2knKVxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdhbmltYXRlZCBib3VuY2VJbiBib3VuY2VPdXQnKVxuICAgICAgICAgICAgLmFkZENsYXNzKCdhbmltYXRlZCBib3VuY2VPdXQnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgVGl0bGVTdGF0ZSBmcm9tICcuLi8uLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlU3RhdGUnO1xuaW1wb3J0IE1lZGlhSW50ZXJmYWNlIGZyb20gJy4uL01lZGlhSW50ZXJmYWNlJztcbmltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcbmltcG9ydCB7IGdldE9wdGltaXplZENvdmVycyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYi9nZXRPcHRpbWl6ZWRDb3Zlci10cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlIGV4dGVuZHMgQmFja2JvbmUuTW9kZWwge1xuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuICdpZCc7XG4gICAgfVxuXG4gICAgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgIGZpcnN0Q3JlYXRvck5hbWU6IG51bGwsXG4gICAgICAgICAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICAgICAgICAgIGZpcnN0Q3JlYXRvcklkOiAwLFxuICAgICAgICAgICAgZm9ybWF0czogW10sXG4gICAgICAgICAgICBpc093bmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzSG9sZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgaXNQcmVSZWxlYXNlVGl0bGU6IGZhbHNlLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgc3RhclJhdGluZzogMC4wLFxuICAgICAgICAgICAgdXNlclN0YXJSYXRpbmc6IDAsXG4gICAgICAgICAgICBzdGFyUmF0aW5nQ291bnQ6IDAsXG4gICAgICAgICAgICBob2xkc1JhdGlvOiAwLFxuICAgICAgICAgICAgaG9sZHNDb3VudDogMCxcbiAgICAgICAgICAgIG93bmVkQ29waWVzOiAwLFxuICAgICAgICAgICAgYXZhaWxhYmxlQ29waWVzOiAwLFxuICAgICAgICAgICAgbHVja3lEYXlPd25lZENvcGllczogMCxcbiAgICAgICAgICAgIGx1Y2t5RGF5QXZhaWxhYmxlQ29waWVzOiAwLFxuICAgICAgICAgICAgZXN0aW1hdGVkUmVsZWFzZURhdGU6ICcnLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5VHlwZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICBzYW1wbGU6IHt9LCAvLyBTYW1wbGVcbiAgICAgICAgICAgIHB1Ymxpc2hlcjoge30sIC8vIFB1Ymxpc2hlclxuICAgICAgICAgICAgdHlwZTogeyBpZDogJ2Vib29rJyB9LCAvLyBUeXBlXG4gICAgICAgICAgICBjb3ZlcnM6IHt9LCAvLyBDb3ZlcnNcbiAgICAgICAgICAgIHBhcmVudE1hZ2F6aW5lVGl0bGVJZDogMCxcbiAgICAgICAgICAgIHJhdGluZ3M6IHtcbiAgICAgICAgICAgICAgICBtYXR1cml0eUxldmVsOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBDdXN0b20gTGlnaHRuaW5nIFByb3BlcnRpZXNcbiAgICAgICAgICAgIHRpdGxlU3RhdGU6ICd3YWl0aW5nJyxcbiAgICAgICAgICAgIHdpc2hsaXN0U3RhdGU6ICd3aXNobGlzdEFkZCcsXG4gICAgICAgICAgICBpc0luSGlzdG9yeTogZmFsc2UsXG4gICAgICAgICAgICBhZGRUb0FwcEZvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIGlzT25Ib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUmVsZWFzZWRIb2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQm9ycm93ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNNb3N0UmVjZW50TWFnYXppbmU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBpc1BsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3BsYWNlaG9sZGVyJyk7XG4gICAgfVxuXG4gICAgc2V0Q29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IobW9kZWwsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHsgcGF0cm9uSXRlbXMgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgc3VwZXIobW9kZWwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuc2V0Q29udGV4dChjb250ZXh0KTtcblxuICAgICAgICB0aGlzLnNldChcbiAgICAgICAgICAgIF8uZXh0ZW5kKHt9LCBtb2RlbCwgeyB0aXRsZVN0YXRlOiB0aGlzLl9nZXRTdGF0ZShwYXRyb25JdGVtcykgfSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMubGluayh3aW5kb3cuZ2xvYmFsRXZlbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpbmsoYnVzKSB7XG4gICAgICAgIC8vIFVubGluayB0aGUgb2xkIGJ1cyBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgaWYgKHRoaXMuYnVzKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcodGhpcy5idXMsICd0aXRsZTp1cGRhdGUnKTtcbiAgICAgICAgICAgIHRoaXMuYnVzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF0dGFjaCBuZXcgYnVzIGlmIHBhc3NlZFxuICAgICAgICBpZiAoYnVzKSB7XG4gICAgICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5idXMsICd0aXRsZTp1cGRhdGUnLCAodGl0bGVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VXBkYXRlcyh0aXRsZU1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2FwcGx5VXBkYXRlcyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIGlmICh0aXRsZU1vZGVsICE9PSB0aGlzICYmIHRpdGxlTW9kZWwuaWQgPT09IHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHN1cGVyLnNldCh0aXRsZU1vZGVsLmNoYW5nZWRBdHRyaWJ1dGVzKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0KCkge1xuICAgICAgICBzdXBlci5zZXQoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5idXMgJiYgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6dXBkYXRlJywgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gQW4gZXhhbXBsZSBvZiB0aGlzIGNhbiBiZSBzZWVuIGluIENvbGxlY3Rpb25IaWdodGxpZ2h0LmpzOjYxICh3aGVyZSBUaXRsZUNvbGxlY3Rpb25WaWV3IGdldHMgbmV3J2VkIHVwKVxuICAgIGdldCBjb250ZXh0Q29sbGVjdGlvbklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5jb2xsZWN0aW9uRGVmaW5pdGlvblxuICAgICAgICAgICAgPyB0aGlzLmNvbnRleHQuY29sbGVjdGlvbkRlZmluaXRpb24uaWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCB0aXRsZURldGFpbHNVcmwoKSB7XG4gICAgICAgIC8vIExIVE5HLTMwMTggUmVmZXJlbmNlIG9wdGlvbmFsIGNvbnRleHRDb2xsZWN0aW9uSWQgdmFsdWUgd2hlbiBjcmVhdGluZyBhIHRpdGxlIGRldGFpbHMgbGlua1xuICAgICAgICBsZXQgcHJvcHMgPSB7IGlkOiB0aGlzLmlkIH07XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dENvbGxlY3Rpb25JZCkge1xuICAgICAgICAgICAgcHJvcHMuY2lkID0gdGhpcy5jb250ZXh0Q29sbGVjdGlvbklkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUlkLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0x1Y2t5RGF5Q29waWVzKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJlxuICAgICAgICAgICAgdGhpcy5nZXQoJ2x1Y2t5RGF5T3duZWRDb3BpZXMnKSA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgYWxsQ29waWVzQXJlTHVja3lEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0x1Y2t5RGF5Q29waWVzICYmIHRoaXMuZ2V0KCdvd25lZENvcGllcycpID09PSAwO1xuICAgIH1cblxuICAgIGdldCBpc0x1Y2t5RGF5Q2hlY2tvdXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmhhc0F2YWlsYWJsZUx1Y2t5RGF5Q29waWVzICYmXG4gICAgICAgICAgICB0aGlzLmdldCgnYXZhaWxhYmxlQ29waWVzJykgPT09IDAgJiZcbiAgICAgICAgICAgICF0aGlzLmdldCgnaXNSZWxlYXNlZEhvbGQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBjYW5QbGFjZUhvbGQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldCgnaXNIb2xkYWJsZScpICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ2lzT25Ib2xkJykgJiZcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NvbnRlbnQtaG9sZHMnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0F2YWlsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdpc0F2YWlsYWJsZScpIHx8IHRoaXMuaGFzQXZhaWxhYmxlTHVja3lEYXlDb3BpZXM7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0F2YWlsYWJsZUx1Y2t5RGF5Q29waWVzKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5oYXNMdWNreURheUNvcGllcyAmJiB0aGlzLmdldCgnbHVja3lEYXlBdmFpbGFibGVDb3BpZXMnKSA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaXNFeHBpcmVkKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5nZXQoJ2lzT3duZWQnKSAmJlxuICAgICAgICAgICAgKHRoaXMuaXNFeHBpcmVkU3VUaXRsZSB8fCB0aGlzLmlzRXhwaXJlZE5vblN1VGl0bGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRXhwaXJlZFN1VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldCgnYXZhaWxhYmlsaXR5VHlwZScpID09PSAnYWx3YXlzJyAmJlxuICAgICAgICAgICAgIXRoaXMuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ2lzQXZhaWxhYmxlJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaXNFeHBpcmVkTm9uU3VUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlUeXBlJykgIT09ICdhbHdheXMnICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ293bmVkQ29waWVzJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYXRyb25TdGF0ZShwYXRyb25JdGVtcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2V0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlU3RhdGU6IHRoaXMuX2dldFN0YXRlKHBhdHJvbkl0ZW1zKSxcbiAgICAgICAgICAgICAgICB3aXNobGlzdFN0YXRlOiBUaXRsZVN0YXRlLmlzT25XaXNobGlzdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBwYXRyb25JdGVtc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgPyAnd2lzaGxpc3RSZW1vdmUnXG4gICAgICAgICAgICAgICAgICAgIDogJ3dpc2hsaXN0QWRkJyxcbiAgICAgICAgICAgICAgICB1c2VyU3RhclJhdGluZzogVGl0bGVTdGF0ZS5zdGFyUmF0aW5nKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zXG4gICAgICAgICAgICAgICAgKSwgLy8gMCBpZiBub3QgcmF0ZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlYWRpbmdIaXN0b3J5U3RhdGUgPSBUaXRsZVN0YXRlLmlzT25SZWFkaW5nSGlzdG9yeShcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0KCdpc0luSGlzdG9yeScsIHJlYWRpbmdIaXN0b3J5U3RhdGUsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgICAgIGNvbnN0IHVzZXJTdGFyUmF0aW5nID0gVGl0bGVTdGF0ZS5zdGFyUmF0aW5nKFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcGF0cm9uSXRlbXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXQoJ3VzZXJTdGFyUmF0aW5nJywgdXNlclN0YXJSYXRpbmcsIG9wdGlvbnMgfHwge30pOyAvLyAwIGlmIG5vdCByYXRlZFxuICAgIH1cblxuICAgIGdldENvdmVyKGRlc2lyZWRTaXplKSB7XG4gICAgICAgIGNvbnN0IGNvdmVycyA9IF8ubWFwKHRoaXMuZ2V0KCdjb3ZlcnMnKSwgKGNvdmVyKSA9PiBjb3Zlcik7IC8vIG1hcHMgdG8gY29sbGVjdGlvbiBvZiBjb3ZlcnNcbiAgICAgICAgcmV0dXJuIGdldE9wdGltaXplZENvdmVycyhjb3ZlcnMsIGRlc2lyZWRTaXplKTtcbiAgICB9XG5cbiAgICBnZXRDb3ZlclNyYyhkZXNpcmVkU2l6ZSkge1xuICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMuZ2V0Q292ZXIoZGVzaXJlZFNpemUpO1xuICAgICAgICByZXR1cm4gKGNvdmVyICYmIGNvdmVyLmhyZWYpIHx8IHRvU3RhdGljVXJsKCdpbWcvbm8tY292ZXJfZW5fVVMuanBnJyk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEF2YWlsYWJpbGl0eSgpIHtcbiAgICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUF2YWlsYWJpbGl0eUlkLCB7IGlkOiB0aGlzLmlkIH0pLFxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICB0aW1lb3V0OiAwLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRNaXNzaW5nQXR0cmlidXRlKGF0dHJpYnV0ZSkge1xuICAgICAgICBpZiAoIXRoaXMuX21lZGlhSW50ZXJmYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tZWRpYUludGVyZmFjZSA9IG5ldyBNZWRpYUludGVyZmFjZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZVxuICAgICAgICAgICAgLnNlYXJjaCh7IHRpdGxlSWQ6IHRoaXMuZ2V0KCdpZCcpIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChhdHRyaWJ1dGUsIHJlc3BvbnNlW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGF2YWlsYWJpbGl0eVRleHQoKSB7XG4gICAgICAgIGxldCBhY3Rpb24gPSB0aGlzLmdldCgndGl0bGVTdGF0ZScpO1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5VGV4dCA9ICcnO1xuXG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlICd1bmF2YWlsYWJsZSc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlVbmF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9vayc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvdycgfHwgJ3ByZXZpZXcnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5QXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3Jyb3dlZCc6XG4gICAgICAgICAgICBjYXNlICdhZGRUb0FwcCc6XG4gICAgICAgICAgICBjYXNlICdsaXN0ZW5Ob3cnOlxuICAgICAgICAgICAgY2FzZSAncmVhZE5vdyc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdib3Jyb3dlZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9sZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5Q29taW5nU29vbicpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gdGhpcy5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5Q29taW5nU29vbicpXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVdhaXRMaXN0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbkhvbGQnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnb25Ib2xkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3YWl0aW5nJzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdmFpbGFiaWxpdHlUZXh0O1xuICAgIH1cblxuICAgIF9nZXRTdGF0ZShwYXRyb25JdGVtcykge1xuICAgICAgICB0aGlzLnNldFBhdHJvblN0YXRlKHBhdHJvbkl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIFRpdGxlU3RhdGUuZ2V0U3RhdGUodGhpcy5hdHRyaWJ1dGVzLCBwYXRyb25JdGVtcyk7XG4gICAgfVxuXG4gICAgc2V0UGF0cm9uU3RhdGUocGF0cm9uSXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgaXNPbkhvbGQ6IHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uSG9sZHMuaW5kZXhPZih0aGlzLmlkKSA+IC0xLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgaXNCb3Jyb3dlZDpcbiAgICAgICAgICAgICAgICBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vbkNoZWNrb3V0cy5pbmRleE9mKHRoaXMuaWQpID4gLTEsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhbml0aXplZERlc2MoKSB7XG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5nZXQoJ2Rlc2NyaXB0aW9uJykucmVwbGFjZShcbiAgICAgICAgICAgIC8oPGJyXFxzKltcXC9dPz4pfChcXHI/XFxufFxccikvZ2ltLFxuICAgICAgICAgICAgJyAnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiAkKGA8ZGl2PiR7ZGVzY308L2Rpdj5gKS50ZXh0KCk7XG4gICAgfVxuXG4gICAgZ2V0VGl0bGVBc3luYyhtZWRpYUlkLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhSW5mb0lkLCB7IGlkOiBtZWRpYUlkIH0pLFxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3RpdGxlU3RhdGUnLCB0aGlzLl9nZXRTdGF0ZShudWxsKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBpc01hZ2F6aW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3R5cGUnKS5pZCA9PT0gJ21hZ2F6aW5lJztcbiAgICB9XG59XG4iLCJcbmltcG9ydCBUaXRsZSBmcm9tICcuL1RpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVDb2xsZWN0aW9uIGV4dGVuZHMgQmFja2JvbmUuQ29sbGVjdGlvbiB7XG4gICAgZ2V0IG1vZGVsKCkgeyByZXR1cm4gVGl0bGU7IH1cbn1cblxuIiwiY29uc3QgeyBmZWF0dXJlTWFuYWdlciwgaHRtbCwgdXJsLCByb3V0ZXMgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgICBpc093bmVkLFxuICAgIHJlbGF0ZWRUaXRsZXNQYWdlVXJsLFxuICAgIGlkLFxuICAgIHJpZCxcbiAgICB0eXBlSWQsXG4gICAgdGl0bGUsXG4gICAgYWxpZ25tZW50LFxuICAgIHNhbXBsZUhyZWYsXG4gICAgc2FtcGxlVGV4dCxcbiAgICBoaXN0b3J5QWN0aW9uTGFiZWwsXG4gICAgaGlzdG9yeUFjdGlvblRleHQsXG4gICAgaGlzdG9yeUVuYWJsZWQsXG4gICAgZ2FIaXN0b3J5QWN0aW9uLFxuICAgIHNlcmllc1NlYXJjaFVybCxcbiAgICBoYXNNZWRpYURvRm9ybWF0LFxufSkgPT4gYFxuPGRpdiBjbGFzcz1cIkNvbnRleHRNZW51XCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cIkNvbnRleHRNZW51LWJ1dHRvbiBqcy1jb250ZXh0LWJ1dHRvblwiIGRhdGEtbWVkaWEtaWQ9XCIke2lkfVwiXG4gICAgICAgICBkYXRhLXRpdGxlPVwiJHt0aXRsZX1cIlxuICAgICAgICAgZGF0YS1kcm9wZG93bj1cImNvbnRleHQtbWVudS0ke2lkfS0ke3JpZH1cIlxuICAgICAgICAgZGF0YS1vcHRpb25zPVwiYWxpZ246JHthbGlnbm1lbnR9XCJcbiAgICAgICAgIGFyaWEtY29udHJvbHM9XCJtb3JlLWFjdGlvbnMtZHJvcC0ke2lkfVwiXG4gICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgYXJpYS1sYWJlbD1cIiR7aHRtbCgnY292ZXIudGl0bGVJbmZvJywgeyB0aXRsZSB9KX1cIlxuICAgICAgICAgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb24gaWNvbi1tb3JlXCIgdGFiaW5kZXg9XCItMVwiPjwvaT5cbiAgICA8L2Rpdj5cblxuICAgIDx1bCBpZD1cImNvbnRleHQtbWVudS0ke2lkfS0ke3JpZH1cIiBjbGFzcz1cIkNvbnRleHRNZW51LWRyb3AganMtY29udGV4dC1kcm9wIGYtZHJvcGRvd24gdGV4dC1sZWZ0XCIgZGF0YS1kcm9wZG93bi1jb250ZW50IGFyaWEtaGlkZGVuPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImxpc3RcIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiPlxuICAgICAgICAke1xuICAgICAgICAgICAgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdoaWRlLXVub3duZWQtc2FtcGxlcycpIHx8XG4gICAgICAgICAgICAgICAgaXNPd25lZCkgJiZcbiAgICAgICAgICAgIHNhbXBsZUhyZWYgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJyZWFkLXNhbXBsZSBDb250ZXh0TWVudS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGEgZGF0YS1ocmVmPVwiJHtzYW1wbGVIcmVmfVwiIGRhdGEtbWVkaWEtaWQ9XCIke2lkfVwiIGRhdGEtdGl0bGU9XCIke3RpdGxlfVwiXG4gICAgICAgICAgICAgICAgZGF0YS1vZi1kcm9wZG93bj1cIm1vcmUtYWN0aW9ucy1kcm9wLSR7aWR9XCIgZGF0YS10eXBlPVwiJHt0eXBlSWR9XCIgbWVkaWEtZG8tZm9ybWF0PVwiJHtoYXNNZWRpYURvRm9ybWF0fVwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBhcmlhLWxhYmVsPVwiJHtodG1sKFxuICAgICAgICAgICAgICAgICAgICAnY292ZXIuc2FtcGxlTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICB7IHNhbXBsZTogc2FtcGxlVGV4dCwgdGl0bGUgfVxuICAgICAgICAgICAgICAgICl9XCI+XG4gICAgICAgICAgICAgICAgICAgICR7c2FtcGxlVGV4dH1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xpPmBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbVwiPlxuICAgICAgICAgICAgPGEgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCIke3VybChyb3V0ZXMubWVkaWFJZCwge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgfSl9XCIgYXJpYS1sYWJlbD1cIiR7aHRtbCgndmlld0RldGFpbHNBYm91dFRpdGxlJywge1xuICAgIHRpdGxlLFxufSl9XCI+JHtodG1sKCd2aWV3RGV0YWlscycpfTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgJHtcbiAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCAmJiBzZXJpZXNTZWFyY2hVcmwgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJDb250ZXh0TWVudS1pdGVtXCI+PGEgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCIke3Nlcmllc1NlYXJjaFVybH1cIj4ke2h0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgJ3ZpZXdTZXJpZXMnXG4gICAgICAgICAgICAgICAgICApfTwvYT48L2xpPmBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtcbiAgICAgICAgICAgIGhpc3RvcnlFbmFibGVkXG4gICAgICAgICAgICAgICAgPyBgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbSBqcy1oaXN0b3J5QWN0aW9uXCIgZGF0YS1nYS1hY3Rpb249XCIke2dhSGlzdG9yeUFjdGlvbn1cIiBkYXRhLW1lZGlhLWlkPVwiJHtpZH1cIj48YSB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCIke2hpc3RvcnlBY3Rpb25MYWJlbH1cIj4ke2hpc3RvcnlBY3Rpb25UZXh0fTwvYT48L2xpPmBcbiAgICAgICAgICAgICAgICA6IGBgXG4gICAgICAgIH1cbiAgICAgICAgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbVwiPjxhIHRhYmluZGV4PVwiLTFcIiBocmVmPVwiJHtyZWxhdGVkVGl0bGVzUGFnZVVybH1cIiBhcmlhLWxhYmVsPVwiJHtodG1sKFxuICAgICd2aWV3UmVsYXRlZFRvVGl0bGUnLFxuICAgIHsgdGl0bGUgfVxuKX1cIj4ke2h0bWwoJ3lvdU1heUFsc29MaWtlJyl9PC9hPjwvbGk+XG4gICAgPC91bD5cbjwvZGl2PmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe3dpdGhJY29ucywgYXZhaWxhYmlsaXR5VGV4dCwgd2FpdGluZ1RleHQsIGhlbHBCdXR0b25IVE1MfSkgPT4gYFxuPGRpdiBjbGFzcz0nQ29waWVzQXZhaWxhYmxlJz5cbiAgICAke2F2YWlsYWJpbGl0eVRleHQgPyBgXG4gICAgICAgIDxkaXYgY2xhc3M9J2F2YWlsYWJpbGl0eSc+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz0nYXZhaWxhYmlsaXR5VGV4dCc+XG4gICAgICAgICAgICAgICAgJHt3aXRoSWNvbnMgPyAnPGkgY2xhc3M9XCJpY29uLWNvcGllc1wiPjwvaT4nIDogJycgfVxuICAgICAgICAgICAgICAgICR7YXZhaWxhYmlsaXR5VGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICR7IXdhaXRpbmdUZXh0ICYmIGhlbHBCdXR0b25IVE1MID8gYFxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAke2hlbHBCdXR0b25IVE1MfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIGAgOiAnJ31cbiAgICAgICAgPC9kaXY+XG4gICAgYCA6ICcnfVxuICAgICR7d2FpdGluZ1RleHQgPyBgXG4gICAgICAgIDxkaXYgY2xhc3M9J3dhaXRpbmcnPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgJHt3aXRoSWNvbnMgPyAnPGkgY2xhc3M9XCJpY29uLWhvbGRzXCI+PC9pPicgOiAnJyB9XG4gICAgICAgICAgICAgICAgJHt3YWl0aW5nVGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICR7aGVscEJ1dHRvbkhUTUwgPyBgXG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICR7aGVscEJ1dHRvbkhUTUx9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgYCA6ICcnfVxuICAgICAgICA8L2Rpdj5cbiAgICBgIDogJyd9XG48L2Rpdj5cbmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyBtZWRpYSwgc3JjLCBocmVmLCBjb3ZlckNvbG9yLCBub1NhbXBsZUNsYXNzLCBzcmNzZXQgfSkgPT4gYFxuPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7Y292ZXJDb2xvcn1cIj5cbiAgICA8YSBocmVmPVwiJHtocmVmfVwiXG4gICAgICAgICAgIGRhdGEtaHJlZiAgICA9XCIke2hyZWZ9XCJcbiAgICAgICAgICAgZGF0YS1tZWRpYS1pZD1cIiR7bWVkaWEuaWR9XCJcbiAgICAgICAgICAgZGF0YS10aXRsZSAgID1cIiR7bWVkaWEudGl0bGV9XCJcbiAgICAgICAgICAgZGF0YS10eXBlICAgID1cIiR7bWVkaWEudHlwZS5pZH1cIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJsYXJnZS10aXRsZSBqcy1kZXRhaWxzLWNvdmVyLWltYWdlICR7bm9TYW1wbGVDbGFzc30gXCJcbiAgICAgICAgICAgIHNyYz1cIiR7c3JjfVwiXG4gICAgICAgICAgICAke3NyY3NldCAmJiBgc3Jjc2V0PVwiJHtzcmNzZXR9XCJgfVxuICAgICAgICAgICAgYWx0PVwiJHttZWRpYS50aXRsZX0gLSAke2h0bWwobWVkaWEudHlwZS5pZCl9XCJcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJHtjb3ZlckNvbG9yfTsgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50O1wiLz5cbiAgICA8L2E+XG48L2Rpdj5gO1xuIiwiaW1wb3J0IHsgdG9TdGF0aWNVcmwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9saWIvYXNzZXRNYXBwZXInO1xuXG5leHBvcnQgZGVmYXVsdCAoeyBtZWRpYSwgaHJlZiwgaXNJbkhlcm8sIGNvdmVyV2lkdGgsIGNvdmVySGVpZ2h0LCBjcmVhdG9yVGV4dCB9KSA9PiBgXG48ZGl2IGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lclwiPlxuPGEgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyIG5vQ292ZXJBdmFpbGFibGUgJHsgaXNJbkhlcm8gPyAnc2Vjb25kYXJ5LWJhY2tncm91bmQnIDogJ3ByaW1hcnktYmFja2dyb3VuZCcgfVwiXG4gICAgaHJlZj1cIiR7IGhyZWYgfVwiXG4gICAgZGF0YS1ocmVmICAgID1cIiR7IGhyZWYgfVwiXG4gICAgZGF0YS1tZWRpYS1pZD1cIiR7IG1lZGlhLmlkIH1cIlxuICAgIGRhdGEtdGl0bGUgICA9XCIkeyBtZWRpYS50aXRsZSB9XCJcbiAgICBkYXRhLXR5cGUgICAgPVwiJHsgbWVkaWEudHlwZS5pZCB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZSAkeyBpc0luSGVybyA/ICdzZWNvbmRhcnktZm9udC1oaWdobGlnaHQtYm94JyA6ICdwcmltYXJ5LWZvbnQgcHJpbWFyeS1mb250LWhpZ2hsaWdodC1ib3gnIH1cIj4keyBtZWRpYS50aXRsZSB9PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRob3IgJHsgaXNJbkhlcm8gPyAnJyA6ICdwcmltYXJ5LWZvbnQnIH1cIj4keyBjcmVhdG9yVGV4dCB9PC9kaXY+XG5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJsYXJnZS10aXRsZSBqcy1kZXRhaWxzLWNvdmVyLWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIiR7IHRvU3RhdGljVXJsKCdpbWcvY2xlYXIuZ2lmJykgfVwiXG4gICAgICAgICAgICBhbHQ9XCIkeyBtZWRpYS50aXRsZSB9IC0gJHsgaHRtbChtZWRpYS50eXBlLmlkKSB9XCJcbiAgICAgICAgICAgIC8+XG5cbjwvYT5cbjwvZGl2PlxuXG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHttZWRpYUlkLCBnYUFjdGlvbiwgYXJpYUxhYmVsLCBzdHlsZUNsYXNzZXMsIHRleHR9KSA9PiBgXG4gICAgPGJ1dHRvbiBjbGFzcz0nUmVhZGluZ0hpc3RvcnlCdXR0b24gJHtzdHlsZUNsYXNzZXN9JyBkYXRhLW1lZGlhSWQ9JyR7bWVkaWFJZH0nIGRhdGEtZ2EtYWN0aW9uPScke2dhQWN0aW9ufScgYXJpYS1sYWJlbD0nJHthcmlhTGFiZWx9Jz5cbiAgICAgICAgPGkgY2xhc3M9J2ljb24taGlzdG9yeSBhbmltYXRlZCBib3VuY2VJbic+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz0nUmVhZGluZ0hpc3RvcnlCdXR0b24tdGV4dCB1LWFsbENhcHMnPiR7dGV4dH08L3NwYW4+XG4gICAgPC9idXR0b24+XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHtpbmRleCwgaXNGaWxsZWQsIGlzSGFsZkZpbGxlZCwgbGFiZWwsIHJpZH0pID0+IGBcbiAgICA8aW5wdXQgaWQ9J3N0YXIke2luZGV4fS0ke3JpZH0nIGNsYXNzPSdzdGFyUmFkaW8nIHR5cGU9J3JhZGlvJyB2YWx1ZT0nJHtpbmRleH0nIGFyaWEtbGFiZWw9JyR7bGFiZWx9JyBuYW1lPScke3JpZH0nLz5cbiAgICA8c3BhbiBmb3I9J3N0YXIke2luZGV4fS0ke3JpZH0nPjxpIGRhdGEtaW5kZXg9JyR7aW5kZXh9JyBjbGFzcz0naWNvbiBpY29uLXN0YXIgY29udHJhc3QgU3RhclJhdGluZ3Mtc3RhciAke2lzSGFsZkZpbGxlZCA/ICdoYWxmRmlsbGVkJyA6ICcnfSAkeyEhaXNGaWxsZWQgPyAnZmlsbGVkJyA6ICcnfSc+PC9pPjwvc3Bhbj5cbmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyB0ZXh0LCBocmVmLCBsYWJlbCB9KSA9PiBgXG48YSB0aXRsZT1cIiR7dGV4dH1cIiBjbGFzcz1cInNlY29uZGFyeS11bmRlcmxpbmVcIiBocmVmPVwiJHtocmVmfVwiIGFyaWEtbGFiZWw9XCIke2xhYmVsfVwiPiR7dGV4dH08L2E+XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgZ2VvSWRjQ2xhc3MgfSkgPT4gYFxuPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRlbnRzIGNhcmQgVGl0bGVDYXJkICR7Z2VvSWRjQ2xhc3N9XCI+XG4gICAgPGRpdiBjbGFzcz1cIlRpdGxlSGVhZGVyQmFyXCI+PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiQ292ZXJJbWFnZVwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIkluZm9QYW5lbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVJbmZvXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlQWN0aW9uIGlzLWdyaWRcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVXaXNobGlzdCBpcy1ncmlkXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJcIiAvPlxuPC9kaXY+YDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7dHlwZUlkfSkgPT4gYFxuJHt0eXBlSWQgPyBgXG4gICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1mb3JtYXQtYmFkZ2UgY29udHJhc3QgdS1hbGxDYXBzXCI+PGkgY2xhc3M9XCJpY29uLSR7dHlwZUlkfVwiPjwvaT4ke3dpbmRvdy5odG1sKHR5cGVJZCl9PC9zcGFuPlxuYCA6ICcnIH1cbmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyB0aXRsZUlkLCB0aXRsZSwgaHJlZiwgYXJpYUxhYmVsIH0pID0+IGA8aDMgdGl0bGU9XCIkeyB0aXRsZSB9XCIgY2xhc3M9XCJ0aXRsZS1uYW1lXCIgZGF0YS1tZWRpYS1pZD1cIiR7IHRpdGxlSWQgfVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8YSB0YWJpbmRleD1cIjBcIiBocmVmPVwiJHsgaHJlZiB9XCIgcm9sZT1cImxpbmtcIiBhcmlhLWxhYmVsPVwiJHsgYXJpYUxhYmVsIH1cIj5cbiAgICAgICAgJHsgdGl0bGUgfVxuICAgIDwvYT5cbjwvaDM+YDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7Z2EsIGNvbnRyYXN0Q2xhc3MsIGFyaWFMYWJlbCwgaWNvbkNsYXNzLCB0ZXh0LCBpY29uQW5pbWF0aW9uQ2xhc3Nlc30pID0+IGBcbjxidXR0b24gJHtnYSA/IGBkYXRhLWdhLXRyYWNrPVwid2lzaGxpc3RcIiBkYXRhLWdhLW1lZGlhSUQ9XCIke2dhLm1lZGlhSWR9XCIgZGF0YS1nYS10eXBlPSR7Z2EuZm9ybWF0VHlwZX1gIDogJyd9XG5jbGFzcz1cIldpc2hMaXN0QnV0dG9uICR7Y29udHJhc3RDbGFzc31cIiBcbnR5cGU9XCJidXR0b25cIiBcbmFyaWEtbGFiZWw9XCIke2FyaWFMYWJlbH1cIj5cbiAgICA8aSBjbGFzcz1cIiR7aWNvbkNsYXNzfSBpY29uICR7aWNvbkFuaW1hdGlvbkNsYXNzZXN9XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICR7dGV4dCA/IGA8c3BhbiBjbGFzcz1cInUtYWxsQ2FwcyBXaXNoTGlzdEJ1dHRvbi10ZXh0XCI+JHt0ZXh0fTwvc3Bhbj5gIDogJyd9XG48L2J1dHRvbj5gO1xuIiwiaW1wb3J0IENvbnRleHRNZW51IGZyb20gJy4uL0NvbnRleHRNZW51JztcbmltcG9ydCBUaXRsZUF1dGhvciBmcm9tICcuL1RpdGxlSW5mby9UaXRsZUF1dGhvcic7XG5pbXBvcnQgVGl0bGVFZGl0aW9uIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlRWRpdGlvbic7XG5pbXBvcnQgVGl0bGVOYW1lIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlTmFtZSc7XG5pbXBvcnQgVGl0bGVGb3JtYXRCYWRnZSBmcm9tICcuL1RpdGxlSW5mby9UaXRsZUZvcm1hdEJhZGdlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVJbmZvIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICd0aXRsZS1pbmZvJztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIF9yZXNldCgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgICBzdXBlci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlTmFtZSA9IG5ldyBUaXRsZU5hbWUoeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy5jb250ZXh0TWVudSA9IG5ldyBDb250ZXh0TWVudSh7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnUuJGVsLmFkZENsYXNzKCd0ZXh0LXJpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaXNNYWdhemluZSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy50aXRsZUVkaXRpb24gPSBuZXcgVGl0bGVFZGl0aW9uKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMudGl0bGVBdXRob3IgPSBuZXcgVGl0bGVBdXRob3IoeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMudGl0bGVGb3JtYXRCYWRnZSA9IG5ldyBUaXRsZUZvcm1hdEJhZGdlKHtcbiAgICAgICAgICAgICAgICB0eXBlSWQ6IHRoaXMubW9kZWwuZ2V0KCd0eXBlJykuaWQsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoLi4udGhpcy5fdmlld3MubWFwKCh2aWV3KSA9PiB2aWV3LiRlbCkpO1xuICAgIH1cbn1cbiIsImltcG9ydCBIb2xkSW5mb3JtYXRpb25Nb2RhbCBmcm9tICcuLi8uLi8uLi9ob2xkSW5mb3JtYXRpb24vdmlld3MvSG9sZEluZm9ybWF0aW9uTW9kYWwnO1xuaW1wb3J0IEhvbGRJbmZvcm1hdGlvbk1vZGFsVjIgZnJvbSAnLi4vLi4vLi4vaG9sZEluZm9ybWF0aW9uVjIvSG9sZEluZm9ybWF0aW9uTW9kYWxWMic7XG5pbXBvcnQgSG9sZEluZm9ybWF0aW9uVjIgZnJvbSAnLi4vLi4vLi4vaG9sZEluZm9ybWF0aW9uVjIvSG9sZEluZm9ybWF0aW9uVjInO1xuXG5pbXBvcnQgQ29waWVzQXZhaWxhYmxlVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL0NvcGllc0F2YWlsYWJsZS5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29waWVzQXZhaWxhYmxlIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3Ioe3dpdGhJY29uc30pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMubW9kZWwudG9KU09OKCk7XG4gICAgICAgIHRoaXMud2l0aEljb25zID0gd2l0aEljb25zO1xuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6dGl0bGVTdGF0ZScsIHRoaXMuX21heWJlUmVuZGVyKTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY2xpY2sgLmpzLWhvbGRzLXJhdGlvLWhlbHAtaWNvbic6ICdfcmVuZGVyTW9kYWwnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICBpZih0aGlzLm1vZGVsLmFsbENvcGllc0FyZUx1Y2t5RGF5KXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGl0bGUudGl0bGVTdGF0ZSA9PT0gJ3VuYXZhaWxhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyTm9ybWFsKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRpdGxlLmlzUHJlUmVsZWFzZVRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3JtYWwoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnRpdGxlLmF2YWlsYWJpbGl0eVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyTm9ybWFsKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZChDb3BpZXNBdmFpbGFibGVUZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhJY29uczogdGhpcy53aXRoSWNvbnMsXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQ6IHdpbmRvdy50ZXh0KCdjb3Zlci5hbHdheXNBdmFpbGFibGUnKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpbWl0ZWQnICYmICF0aGlzLnRpdGxlLmlzQXZhaWxhYmxlOlxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZChDb3BpZXNBdmFpbGFibGVUZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhJY29uczogdGhpcy53aXRoSWNvbnMsXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQ6IHdpbmRvdy50ZXh0KCdjb3Zlci5saW1pdGVkQXZhaWxhYmlsaXR5JylcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfbWF5YmVSZW5kZXIoKSB7XG4gICAgICAgIGlmICgod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnYmV0dGVyUGF0cm9uU3RhdGUnKSA/IHRoaXMubW9kZWwuZ2V0KCdpc09uSG9sZCcpIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcpXG4gICAgICAgICAgICB8fCAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnYmV0dGVyUGF0cm9uU3RhdGUnKSA/IHRoaXMubW9kZWwuZ2V0KCdpc0JvcnJvd2VkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnYm9ycm93ZWQnKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMubW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkpe1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9yZW5kZXJOb3JtYWwoKSB7XG4gICAgICAgIGxldCBhdmFpbGFiaWxpdHlUZXh0LCB3YWl0aW5nVGV4dCwgaGVscEJ1dHRvbkhUTUw7XG5cbiAgICAgICAgY29uc3Qgbm90SGVsZENsYXNzID0gKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJykgPyB0aGlzLm1vZGVsLmdldCgnaXNPbkhvbGQnKSA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnKSA/ICcnIDogJ2pzLWhvbGRzLXJhdGlvLW5vdC1oZWxkJztcblxuICAgICAgICBpZiAodGhpcy50aXRsZS50eXBlLmlkID09PSAncGVyaW9kaWNhbHMnICYmIHRoaXMudGl0bGUuYXZhaWxhYmxlQ29waWVzIDwgMSAmJiAhdGhpcy50aXRsZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdjb3Zlci5saW1pdGVkQXZhaWxhYmlsaXR5Jyk7XG4gICAgICAgICAgICBoZWxwQnV0dG9uSFRNTCA9IGBcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIiR7d2luZG93Lmh0bWwoJ2NvdmVyLndoeUxpbWl0ZWRBdmFpbGFiaWxpdHknKX1cIlxuICAgICAgICAgICAgICAgIGRhdGEtcmV2ZWFsLWlkPVwibGltaXRlZC1wZXJpb2RpY2FsLWF2YWlsYWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWxwLXRpcCBzZWNvbmRhcnktYmFja2dyb3VuZFwiPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb3B5VmFyaWFibGVzID0ge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUNvcGllczogd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSA/IHRoaXMudGl0bGUuYXZhaWxhYmxlQ29waWVzICsgdGhpcy50aXRsZS5sdWNreURheUF2YWlsYWJsZUNvcGllcyA6IHRoaXMudGl0bGUuYXZhaWxhYmxlQ29waWVzLFxuICAgICAgICAgICAgICAgIG93bmVkQ29waWVzOiB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpID8gdGhpcy50aXRsZS5vd25lZENvcGllcyArIHRoaXMudGl0bGUubHVja3lEYXlPd25lZENvcGllcyA6IHRoaXMudGl0bGUub3duZWRDb3BpZXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2NvdmVyLmNvcGllc0F2YWlsYWJsZScsIGNvcHlWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICBpZih0aGlzLm1vZGVsLmFsbENvcGllc0FyZUx1Y2t5RGF5ICYmIHRoaXMudGl0bGUudGl0bGVTdGF0ZSA9PT0gJ3VuYXZhaWxhYmxlJyl7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdjb3Zlci5jb3BpZXNBdmFpbGFibGUnLCB7YXZhaWxhYmxlQ29waWVzOiAwLCBvd25lZENvcGllczogdGhpcy50aXRsZS5sdWNreURheU93bmVkQ29waWVzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghdGhpcy50aXRsZS5pc0F2YWlsYWJsZSAmJiAhdGhpcy5tb2RlbC5oYXNBdmFpbGFibGVMdWNreURheUNvcGllcykge1xuICAgICAgICAgICAgICAgIGlmKCF0aGlzLm1vZGVsLmFsbENvcGllc0FyZUx1Y2t5RGF5KXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0xIVE5HLTI4NjMnKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnRpdGxlLmlzT3duZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmdUZXh0ID0gbmV3IEhvbGRJbmZvcm1hdGlvblYyKHttb2RlbDogdGhpcy5tb2RlbCwgaXNWaXNpdG9yOiB3aW5kb3cuT3ZlckRyaXZlLmlzVmlzaXRvcn0pLndhaXRUaW1lSHRtbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5tb2RlbC5nZXQoJ2lzRmFzdGxhbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGl0bGUuaG9sZHNSYXRpbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmdUZXh0ID0gd2luZG93Lmh0bWwoJ2NvdmVyLndhaXRpbmdQZXJDb3B5Jywge2hvbGRzUmF0aW86IHRoaXMudGl0bGUuaG9sZHNSYXRpb30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRpdGxlLmhvbGRzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nVGV4dCA9IHdpbmRvdy5odG1sKCdjb3Zlci5ub0hvbGRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGVscEJ1dHRvbkhUTUwgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMSFRORy0yODYzJykgJiYgIXRoaXMudGl0bGUuaXNPd25lZFxuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IGAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1lZGlhLWlkPVwiJHt0aGlzLnRpdGxlLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCIke3dpbmRvdy5odG1sKCdjb3Zlci5ob2xkc1JhdGlvRXhwbGFuYXRpb24nKX1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhlbHAtdGlwIHNlY29uZGFyeS1iYWNrZ3JvdW5kIGpzLWhvbGRzLXJhdGlvLWhlbHAtaWNvbiAke25vdEhlbGRDbGFzc31cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoQ29waWVzQXZhaWxhYmxlVGVtcGxhdGUoe1xuICAgICAgICAgICAgd2l0aEljb25zOiB0aGlzLndpdGhJY29ucyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQsXG4gICAgICAgICAgICB3YWl0aW5nVGV4dCxcbiAgICAgICAgICAgIGhlbHBCdXR0b25IVE1MXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyTW9kYWwoKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMSFRORy0yODYzJykpe1xuICAgICAgICAgICAgaWYgKCh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzT25Ib2xkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJykpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWpheC5nZXRIb2xkKHRoaXMubW9kZWwuZ2V0KCdpZCcpKS5kb25lKChob2xkRGF0YSkgPT4geyAvLyBzaG91bGQgYmUgY29uZmlybWluZyB0aGF0IHRoaXMgaXMgb24gaG9sZFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBob2xkc1JhdGlvOiBob2xkRGF0YS5ob2xkc1JhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHNDb3VudDogaG9sZERhdGEuaG9sZHNDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRMaXN0UG9zaXRpb246IGhvbGREYXRhLmhvbGRMaXN0UG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWwgPSBuZXcgIEhvbGRJbmZvcm1hdGlvbk1vZGFsVjIoe21vZGVsOiB0aGlzLm1vZGVsLCBlbDogdGhpcy5lbH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbCA9IG5ldyBIb2xkSW5mb3JtYXRpb25Nb2RhbFYyKHttb2RlbDogdGhpcy5tb2RlbCwgZWw6IHRoaXMuZWwsIGhpZGVIb2xkc0xpbms6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlzRmFzdGxhbmUgPSB0aGlzLm1vZGVsLmdldCgnaXNGYXN0bGFuZScpO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVTdGF0ZSA9IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG4gICAgICAgICAgICBpZiAoISFpc0Zhc3RsYW5lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbCA9IG5ldyBIb2xkSW5mb3JtYXRpb25Nb2RhbCh7bW9kZWw6IHRoaXMubW9kZWwsIHR5cGU6ICdiYXNpYycsIGVsOiB0aGlzLmVsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnYmV0dGVyUGF0cm9uU3RhdGUnKSA/IHRoaXMubW9kZWwuZ2V0KCdpc09uSG9sZCcpIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcpKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmFqYXguZ2V0SG9sZCh0aGlzLm1vZGVsLmdldCgnaWQnKSkuZG9uZSgoaG9sZERhdGEpID0+IHsgLy8gc2hvdWxkIGJlIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGlzIG9uIGhvbGRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHNSYXRpbzogaG9sZERhdGEuaG9sZHNSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRzQ291bnQ6IGhvbGREYXRhLmhvbGRzQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBob2xkTGlzdFBvc2l0aW9uOiBob2xkRGF0YS5ob2xkTGlzdFBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gbmV3IEhvbGRJbmZvcm1hdGlvbk1vZGFsKHttb2RlbDogdGhpcy5tb2RlbCwgdHlwZTogJ3N1Y2Nlc3NQb3NpdGlvbicsIGVsOiB0aGlzLmVsfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gbmV3IEhvbGRJbmZvcm1hdGlvbk1vZGFsKHttb2RlbDogdGhpcy5tb2RlbCwgdHlwZTogJ3JhdGlvJywgZWw6IHRoaXMuZWx9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEx1Y2t5RGF5SG9sZHMgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnRpdGxlU3RhdGUnLCB0aGlzLl9tYXliZVJlbmRlcik7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSBgPGRpdiBjbGFzcz1cIkx1Y2t5RGF5Q2FudFBsYWNlSG9sZFwiPjxwPjxpPiR7d2luZG93LnRleHQoJ2x1Y2t5RGF5LmNhbnRQbGFjZUhvbGQnKX08L2k+PC9wPjwvZGl2PmA7XG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgX21heWJlUmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ3VuYXZhaWxhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IFN0YXJWaWV3IGZyb20gJy4vU3RhclZpZXcnO1xuY29uc3QgeyBmZWF0dXJlTWFuYWdlciB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFyUmF0aW5nIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21vdXNlbGVhdmUnOiAnc3RvcEhvdmVyUmF0aW5nJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGdldCBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG4gICAgICAgIHRoaXMuaG92ZXJSYXRpbmcgPSAwO1xuICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcygnc3Rhci1yYXRpbmdzLWNvbnRhaW5lciBTdGFyUmF0aW5ncycpO1xuXG4gICAgICAgIHRoaXMucmlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdGFyIHJhdGluZyB3aGVuIHBhdHJvbiBzdGF0dXMgaXMgcmVjZWl2ZWRcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnVzZXJTdGFyUmF0aW5nJywgKG1vZGVsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmKCF0aGlzLmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ2xvYmFsUmF0aW5nID0gdGhpcy5tb2RlbC5nZXQoJ3N0YXJSYXRpbmcnKSB8fCAwO1xuICAgICAgICB0aGlzLiRlbC5hdHRyKCdkYXRhLWdsb2JhbC1yYXRpbmcnLCB0aGlzLm1vZGVsLmdldCgnc3RhclJhdGluZycpKTtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignZGF0YS1tZWRpYS1pZCcsIHRoaXMubW9kZWwuaWQpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGxldCBjdHggPSB0aGlzO1xuICAgICAgICBfLmVhY2goWzEsIDIsIDMsIDQsIDUsIDBdLCAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgZ2xvYmFsUmF0aW5nOiBnbG9iYWxSYXRpbmcsXG4gICAgICAgICAgICAgICAgcmlkOiB0aGlzLnJpZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBzdGFyVmlldyA9IG5ldyBTdGFyVmlldyh2aWV3RGF0YSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzYW1wbGVPbmx5TW9kZScpKXtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5vbigncmF0ZScsIChzdGFyVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmhhbmRsZVJhdGluZyhzdGFyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXJWaWV3Lm9uKCdob3ZlcicsIChzdGFyVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lm9uSG92ZXJSYXRpbmcoc3RhclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChzdGFyVmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcbiAgICAgICAgICAgIHZpZXcucmVuZGVyKCk7XG4gICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQodmlldy4kZWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0hhbGZTdGFyIChnbG9iYWxSYXRpbmcpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFJhdGluZyAlIDEgPj0gMC4yNSAmJiBnbG9iYWxSYXRpbmcgJSAxIDwgMC43NTsgXG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc1VzZXJSYXRpbmcgPSAodGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJykgPiAwIHx8IHRoaXMuaG92ZXJSYXRpbmcpID4gMDtcbiAgICAgICAgdGhpcy4kZWwudG9nZ2xlQ2xhc3MoJ3VzZXItcmF0aW5nJywgaXNVc2VyUmF0aW5nKTtcbiAgICAgICAgbGV0IGdsb2JhbFJhdGluZyA9IHRoaXMubW9kZWwuZ2V0KCdzdGFyUmF0aW5nJykgfHwgMDtcblxuICAgICAgICBfLmVhY2godGhpcy5fdmlld3MsIChzdGFyVmlldykgPT4ge1xuXG4gICAgICAgICAgICBpZiAoaXNVc2VyUmF0aW5nKXtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5zZXRGaWxsZWQoc3RhclZpZXcuaW5kZXggPD0gKHRoaXMuaG92ZXJSYXRpbmcgfHwgdGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJykpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhclZpZXcuaW5kZXggPCBnbG9iYWxSYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5zZXRGaWxsZWQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJWaWV3LmluZGV4IC0gMSA+IGdsb2JhbFJhdGluZykge1xuICAgICAgICAgICAgICAgIHN0YXJWaWV3LnNldEZpbGxlZChmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJWaWV3LnNldEZpbGxlZChzdGFyVmlldy5pbmRleCAtIDAuNzUgPCBnbG9iYWxSYXRpbmcsIHRoaXMuaXNIYWxmU3RhcihnbG9iYWxSYXRpbmcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJWaWV3LiRlbC5jaGlsZHJlbignLnN0YXJSYWRpbycpLnByb3AoJ2NoZWNrZWQnLCBzdGFyVmlldy5pbmRleCA9PT0gdGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJykpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBoYW5kbGVSYXRpbmcoc3RhclZhbHVlKSB7XG4gICAgICAgIGxldCBjdXJyZW50UmF0aW5nID0gdGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJyk7XG4gICAgICAgIGlmIChzdGFyVmFsdWUgPT09IGN1cnJlbnRSYXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIDApO1xuICAgICAgICAgICAgdGhpcy5zdG9wSG92ZXJSYXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHN0YXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7IGFjdGlvbjogJ3JhdGluZycsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICAgIH1cblxuICAgIG9uSG92ZXJSYXRpbmcoc3RhclZhbHVlKSB7XG4gICAgICAgIHRoaXMuaG92ZXJSYXRpbmcgPSBzdGFyVmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgc3RvcEhvdmVyUmF0aW5nKCkge1xuICAgICAgICB0aGlzLmhvdmVyUmF0aW5nID0gMDtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgU3RhclJhdGluZ3NUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvU3RhclZpZXdUZW1wbGF0ZS5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhclZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IFN0YXJSYXRpbmdzVGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3Rvcih7aW5kZXgsIGlzRmlsbGVkID0gZmFsc2UsIGdsb2JhbFJhdGluZywgcmlkfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGlzRmlsbGVkO1xuICAgICAgICB0aGlzLmlzSGFsZkZpbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhYmVsID0gd2luZG93Lmh0bWwoJ3N0YXJSYXRpbmcudXNlclJhdGVkTGFiZWwnLCB7Y3VycmVudFJhdGluZzogdGhpcy5pbmRleH0pO1xuICAgICAgICB0aGlzLmdsb2JhbFJhdGluZyA9IGdsb2JhbFJhdGluZztcbiAgICAgICAgdGhpcy5yaWQgPSByaWQ7XG4gICAgICAgIHRoaXMuJGVsLmFkZENsYXNzKCdzdGFyLWNvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjaGFuZ2UnOiAnb25TZWxlY3RlZCcsXG4gICAgICAgICAgICAnbW91c2VvdmVyIC5pY29uLXN0YXInOiAnb25Ib3ZlcicsXG4gICAgICAgICAgICAnY2xpY2sgLmljb24tc3Rhcic6ICdvblNlbGVjdGVkJyxcbiAgICAgICAgICAgICdmb2N1c2luIC5ub1JhdGUnIDogJ3BzZXVkb0ZvY3VzJyxcbiAgICAgICAgICAgICdmb2N1c291dCAubm9SYXRlJyA6ICdwc2V1ZG9Gb2N1cydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzZXRGaWxsZWQoaXNGaWxsZWQsIGhhbGZGaWxsZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoaGFsZkZpbGxlZCl7XG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuaWNvbi1zdGFyJykucmVtb3ZlQ2xhc3MoJ2ZpbGxlZCcpO1xuICAgICAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLmlzSGFsZkZpbGxlZCA9IGlzRmlsbGVkO1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tc3RhcicpLnRvZ2dsZUNsYXNzKCdoYWxmRmlsbGVkJywgaXNGaWxsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tc3RhcicpLnJlbW92ZUNsYXNzKCdoYWxmRmlsbGVkJyk7XG4gICAgICAgICAgICB0aGlzLmlzSGFsZkZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmlzRmlsbGVkID0gaXNGaWxsZWQ7XG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuaWNvbi1zdGFyJykudG9nZ2xlQ2xhc3MoJ2ZpbGxlZCcsIGlzRmlsbGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcigncmF0ZScsIHRoaXMuaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Ib3ZlcigpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdob3ZlcicsIHRoaXMuaW5kZXgpO1xuICAgIH1cblxuICAgIC8vVXNlZCBmb3IgdGhlIDB0aCAnbm8gcmF0aW5nJyBzdGFyLiBXaGVuIGZvY3VzZWQsIG1ha2UgdGhlIGNvbnRhaW5lciBhcHBlYXIgdG8gaGF2ZSBmb2N1c1xuICAgIHBzZXVkb0ZvY3VzKCkge1xuICAgICAgICB0aGlzLiRlbC5wYXJlbnQoKS50b2dnbGVDbGFzcygncHNldWRvRm9jdXMnKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQodGhpcy50ZW1wbGF0ZSh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9SYXRlVGVtcGxhdGUgPVxuICAgICAgICAgICAgICAgIGA8aW5wdXQgaWQ9J25vUmF0ZS0ke3RoaXMucmlkfScgY2xhc3M9J3N0YXJSYWRpbyBub1JhdGUnIHR5cGU9J3JhZGlvJyB2YWx1ZT0nMCcgbmFtZT0nJHt0aGlzLnJpZH0nIGFyaWEtbGFiZWw9JyR7d2luZG93Lmh0bWwoJ3N0YXJSYXRpbmcucmF0ZWRMYWJlbCcsIHtyYXRpbmc6IHRoaXMuZ2xvYmFsUmF0aW5nfSl9Jy8+YDtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKG5vUmF0ZVRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImNvbnN0IEJhY2tib25lID0gd2luZG93LkJhY2tib25lO1xuY29uc3QgZmVhdHVyZU1hbmFnZXIgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXI7XG5cbmltcG9ydCBUaXRsZUF1dGhvclRlbXBsYXRlIGZyb20gJy4uLy4uL3RlbXBsYXRlcy9UaXRsZUF1dGhvci5odG1sJztcblxuY29uc3QgVGl0bGVBdXRob3IgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7XG4gICAgdGVtcGxhdGU6IFRpdGxlQXV0aG9yVGVtcGxhdGUsXG5cbiAgICBjbGFzc05hbWU6ICd0aXRsZS1hdXRob3InLFxuXG4gICAgdGFnTmFtZTogJ3AnLFxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCd0eXBlJykuaWQgIT09ICdwZXJpb2RpY2FscycpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLm1vZGVsLnRvSlNPTigpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRpdGxlLmZpcnN0Q3JlYXRvck5hbWUgIT0gbnVsbCAmJlxuICAgICAgICAgICAgIV8uaXNFbXB0eSh0aXRsZS5maXJzdENyZWF0b3JOYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBjcmVhdG9yTmFtZSA9IGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZml4SHRtbFRhZ3NJbkNvcHknKVxuICAgICAgICAgICAgICAgID8gdGl0bGUuZmlyc3RDcmVhdG9yTmFtZVxuICAgICAgICAgICAgICAgIDogXy5lc2NhcGUodGl0bGUuZmlyc3RDcmVhdG9yTmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0ge1xuICAgICAgICAgICAgICAgIGhyZWY6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5zZWFyY2hCeVR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NyZWF0b3JJZCcsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aXRsZS5maXJzdENyZWF0b3JJZCxcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnbmV3bHlhZGRlZCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHdpbmRvdy50ZXh0KCdjb3Zlci5zZWFyY2hCeUF1dGhvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yOiBjcmVhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjcmVhdG9yTmFtZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwoXG4gICAgICAgICAgICAgICAgd2luZG93LnRleHQoJ2J5TGluZScsIHsgY3JlYXRvcjogdGhpcy50ZW1wbGF0ZSh2aWV3RGF0YSkgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbm8tYXV0aG9yLWZpeCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCh3aW5kb3cuaHRtbCgnY292ZXIubm9BdXRob3JBdmFpbGFibGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQXV0aG9yO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUVkaXRpb24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBub2RlID0gJChgPGRpdiBjbGFzcz1cInRpdGxlLWVkaXRpb25cIj4ke3RoaXMubW9kZWwuZ2V0KCdlZGl0aW9uJyl9PC9kaXY+YCk7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudChub2RlKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgVGl0bGVGb3JtYXRCYWRnZVRlbXBsYXRlIGZyb20gJy4uLy4uL3RlbXBsYXRlcy9UaXRsZUZvcm1hdEJhZGdlLmh0bWwnO1xuXG5jb25zdCBUaXRsZUZvcm1hdEJhZGdlID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGluaXRpYWxpemUoe3R5cGVJZH0pIHtcbiAgICAgICAgdGhpcy50eXBlSWQgPSB0eXBlSWQ7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSxcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KCQoVGl0bGVGb3JtYXRCYWRnZVRlbXBsYXRlKHt0eXBlSWQ6IHRoaXMudHlwZUlkfSkpKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVGb3JtYXRCYWRnZTtcbiIsImltcG9ydCBUaXRsZU5hbWVUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVOYW1lLmh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZU5hbWUgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlID0gVGl0bGVOYW1lVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgX2Fzc2VtYmxlTGFiZWwoKSB7XG4gICAgICAgIGxldCBsYWJlbFBhcnRzID0gW107XG5cbiAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpKTtcblxuICAgICAgICBpZiAoISF0aGlzLm1vZGVsLmdldCgnZmlyc3RDcmVhdG9yTmFtZScpKSB7XG4gICAgICAgICAgICBsYWJlbFBhcnRzLnB1c2god2luZG93Lmh0bWwoJ2J5TGluZScsIHtjcmVhdG9yOiB0aGlzLm1vZGVsLmlzTWFnYXppbmUgPyB0aGlzLm1vZGVsLmdldCgncHVibGlzaGVyJykubmFtZSA6IHRoaXMubW9kZWwuZ2V0KCdmaXJzdENyZWF0b3JOYW1lJyl9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYWJlbFBhcnRzLnB1c2godGhpcy5tb2RlbC5hdmFpbGFiaWxpdHlUZXh0KCkpO1xuXG4gICAgICAgIGxhYmVsUGFydHMucHVzaCh0aGlzLm1vZGVsLmdldCgndHlwZScpLm5hbWUpO1xuXG4gICAgICAgIHJldHVybiBsYWJlbFBhcnRzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRhID0ge1xuICAgICAgICAgICAgdGl0bGVJZCAgIDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgIGhyZWYgICAgICA6IHRoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsLFxuICAgICAgICAgICAgYXJpYUxhYmVsIDogXy5lc2NhcGUodGhpcy5fYXNzZW1ibGVMYWJlbCgpKSxcbiAgICAgICAgICAgIHRpdGxlICAgICA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNldEVsZW1lbnQoJCh0aGlzLnRlbXBsYXRlKHZpZXdEYXRhKSkpO1xuICAgIH1cbn1cblxuIiwiY29uc3QgQmFja2JvbmUgPSB3aW5kb3cuQmFja2JvbmU7XG5jb25zdCB1cmwgPSB3aW5kb3cudXJsO1xuY29uc3Qgcm91dGVzID0gd2luZG93LnJvdXRlcztcbmNvbnN0IHdpbmRvd1RleHQgPSB3aW5kb3cudGV4dDtcbmNvbnN0IGZlYXR1cmVNYW5hZ2VyID0gd2luZG93LmZlYXR1cmVNYW5hZ2VyO1xuXG5jb25zdCBUaXRsZVNlcmllcyA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtcbiAgICBpbml0aWFsaXplKHsgaGlkZVN1YnRpdGxlIH0pIHtcbiAgICAgICAgdGhpcy51c2VFbmhhbmNlZFNlcmllcyA9XG4gICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2VuaGFuY2VkU2VyaWVzJykgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLm1vZGVsLmdldCgnZGV0YWlsZWRTZXJpZXMnKSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgIHRoaXMuaGlkZVN1YnRpdGxlID0gaGlkZVN1YnRpdGxlO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ3VwZGF0ZScsIHRoaXMucmVuZGVyKTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgc2VhcmNoUGFyYW1zID0gdGhpcy51c2VFbmhhbmNlZFNlcmllc1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc2VyaWVzSWQnLFxuICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpLnNlcmllc0lkLFxuICAgICAgICAgICAgICAgICAgc29ydEJ5OiAncmVhZGluZ09yZGVyJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc2VyaWVzJyxcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLm1vZGVsLmdldCgnc2VyaWVzJyksXG4gICAgICAgICAgICAgICAgICBzb3J0Qnk6ICduZXdseWFkZGVkJyxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICBsZXQgc3VidGl0bGVDb250YWluc1NlcmllcyA9XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKSAmJlxuICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3N1YnRpdGxlJykuaW5kZXhPZih0aGlzLm1vZGVsLmdldCgnc2VyaWVzJykpID4gLTE7XG5cbiAgICAgICAgbGV0IHNlcmllc1RleHQgPSAnJztcbiAgICAgICAgbGV0IHJhbmtUZXh0ID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlRW5oYW5jZWRTZXJpZXMpIHtcbiAgICAgICAgICAgIGxldCBkZXRhaWxlZFNlcmllcyA9IHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpO1xuXG4gICAgICAgICAgICBjb25zdCByZWFkaW5nT3JkZXIgPSBkZXRhaWxlZFNlcmllcy5yZWFkaW5nT3JkZXI7XG4gICAgICAgICAgICBpZiAocmVhZGluZ09yZGVyKSB7XG4gICAgICAgICAgICAgICAgc2VyaWVzVGV4dCA9IGlzTmFOKHJlYWRpbmdPcmRlcilcbiAgICAgICAgICAgICAgICAgICAgPyB3aW5kb3cudGV4dCgnZW5oYW5jZWRTZXJpZXNMaW5rVGV4dCcsIHsgcmVhZGluZ09yZGVyIH0pXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93LnRleHQoJ2VuaGFuY2VkU2VyaWVzTGlua051bWJlcicsIHsgcmVhZGluZ09yZGVyIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5rID0gZGV0YWlsZWRTZXJpZXMucmFuaztcbiAgICAgICAgICAgIGlmIChyYW5rKSB7XG4gICAgICAgICAgICAgICAgcmFua1RleHQgPSB3aW5kb3cudGV4dCgncmFua1RleHQnLCB7IHJhbmsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJpZXNUZXh0ID0gc3VidGl0bGVDb250YWluc1Nlcmllc1xuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5nZXQoJ3N1YnRpdGxlJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSB8fCAnJztcbiAgICAgICAgICAgIHJhbmtUZXh0ID0gc3VidGl0bGVDb250YWluc1Nlcmllc1xuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5nZXQoJ3N1YnRpdGxlJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuZ2V0KCdyYW5rJykgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZCA9PT0gJ21hZ2F6aW5lJykge1xuICAgICAgICAgICAgc2VhcmNoUGFyYW1zLm1lZGlhVHlwZSA9ICdtYWdhemluZSc7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmlld01vZGVsID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuZ2V0KCdpZCcpLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpLFxuICAgICAgICAgICAgc2VyaWVzOiBzZXJpZXNUZXh0LFxuICAgICAgICAgICAgcmFuazogcmFua1RleHQsXG4gICAgICAgICAgICBzdWJ0aXRsZTogdGhpcy5tb2RlbC5nZXQoJ3N1YnRpdGxlJykgfHwgJycsXG4gICAgICAgICAgICBzZWFyY2hVcmw6IHVybChyb3V0ZXMuc2VhcmNoQnlUeXBlLCBzZWFyY2hQYXJhbXMpLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IF8uZmlyc3QodGhpcy5tb2RlbC5nZXQoJ2xhbmd1YWdlcycpIHx8IFsnJ10pLFxuICAgICAgICAgICAgbm9DcmVhdG9yczogXy5pc0VtcHR5KHRoaXMubW9kZWwuZ2V0KCdjcmVhdG9ycycpKSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgJHRlbXAgPSAkKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGlkZVN1YnRpdGxlICYmXG4gICAgICAgICAgICAhc3VidGl0bGVDb250YWluc1NlcmllcyAmJlxuICAgICAgICAgICAgIV8uaXNFbXB0eSh2aWV3TW9kZWwuc3VidGl0bGUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0ICRzdWJ0aXRsZSA9IHRoaXMuX2J1aWxkU3VidGl0bGUoXG4gICAgICAgICAgICAgICAgdmlld01vZGVsLnN1YnRpdGxlLFxuICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5sYW5ndWFnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICR0ZW1wLmFwcGVuZCgkc3VidGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfLmlzRW1wdHkodmlld01vZGVsLnNlcmllcykpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmlzTWFnYXppbmUgJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgJHNlcmllcyA9IHRoaXMuX2J1aWxkU2VyaWVzVGV4dChcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsLm5vQ3JlYXRvcnMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5zZXJpZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICR0ZW1wLmFwcGVuZCgkc2VyaWVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0ICRzZXJpZXMgPSB0aGlzLl9idWlsZFNlcmllc0xpbmsoXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5zZWFyY2hVcmwsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5ub0NyZWF0b3JzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWwuc2VyaWVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAkdGVtcC5hcHBlbmQoJHNlcmllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhXy5pc0VtcHR5KHZpZXdNb2RlbC5yYW5rKSAmJlxuICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdkaXNwbGF5LXRpdGxlLXJhbmsnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0ICRyYW5rID0gdGhpcy5fYnVpbGRSYW5rVGV4dChcbiAgICAgICAgICAgICAgICB2aWV3TW9kZWwubm9DcmVhdG9ycyxcbiAgICAgICAgICAgICAgICB2aWV3TW9kZWwucmFua1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICR0ZW1wLmFwcGVuZCgkcmFuayk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5odG1sKCR0ZW1wKTtcbiAgICB9LFxuXG4gICAgX2J1aWxkUmFua1RleHQobm9DcmVhdG9ycywgdGV4dCkge1xuICAgICAgICByZXR1cm4gJCgnPHAgLz4nLCB7XG4gICAgICAgICAgICBjbGFzczogYHNlcmllcyAkeyhub0NyZWF0b3JzID8gJ25vLWF1dGhvcicgOiAnJywgdGV4dCl9YCxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfYnVpbGRTZXJpZXNUZXh0KG5vQ3JlYXRvcnMsIHRleHQpIHtcbiAgICAgICAgbGV0ICRlbG0gPSAkKCc8cCAvPicsIHtcbiAgICAgICAgICAgIGNsYXNzOiBgc2VyaWVzICR7KG5vQ3JlYXRvcnMgPyAnbm8tYXV0aG9yJyA6ICcnLCB0ZXh0KX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICRlbG07XG4gICAgfSxcblxuICAgIF9idWlsZFNlcmllc0xpbmsoc2VhcmNoVXJsLCBub0NyZWF0b3JzLCB0ZXh0KSB7XG4gICAgICAgIGxldCAkZWxtID0gJCgnPHAgLz4nLCB7XG4gICAgICAgICAgICBjbGFzczogYHNlcmllcyAke25vQ3JlYXRvcnMgPyAnbm8tYXV0aG9yJyA6ICcnfWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCAkbGluayA9ICQoJzxhIC8+Jywge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB3aW5kb3dUZXh0KCdjb3Zlci5zZWFyY2hCeVNlcmllcycsIHsgc2VyaWVzOiB0ZXh0IH0pLFxuICAgICAgICAgICAgY2xhc3M6IHRoaXMudXNlRW5oYW5jZWRTZXJpZXNcbiAgICAgICAgICAgICAgICA/ICdzZXJpZXMtbGluay1lbmhhbmNlZCBzZWNvbmRhcnktY29sb3InXG4gICAgICAgICAgICAgICAgOiAnc2VyaWVzLWxpbmsgc2Vjb25kYXJ5LXVuZGVybGluZScsXG4gICAgICAgICAgICBocmVmOiBzZWFyY2hVcmwsXG4gICAgICAgICAgICB0aXRsZTogdGV4dCxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgICRlbG0uYXBwZW5kKCRsaW5rKTtcblxuICAgICAgICByZXR1cm4gJGVsbTtcbiAgICB9LFxuXG4gICAgX2J1aWxkU3VidGl0bGUoc3VidGl0bGUsIGxhbmd1YWdlKSB7XG4gICAgICAgIGlmIChmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2ZpeEh0bWxUYWdzSW5Db3B5JykpIHtcbiAgICAgICAgICAgIHJldHVybiAkKGA8cCBjbGFzcz1cInN1YnRpdGxlXCIgbGFuZz1cIiR7bGFuZ3VhZ2V9XCI+JHtzdWJ0aXRsZX08L3A+YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJCgnPHAgLz4nLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6ICdzdWJ0aXRsZScsXG4gICAgICAgICAgICAgICAgdGV4dDogc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgbGFuZzogbGFuZ3VhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaXRsZVNlcmllcztcbiIsImNvbnN0IHsgaHRtbCB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiBgXG48ZGl2IGNsYXNzPVwiTm90Q29tcGF0aWJsZUZvcm1hdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIj7DlzwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHA+JHtodG1sKFwibm90Q29tcGF0aWJsZVRpdGxlLndhcm5pbmdUZXh0XCIpfTwvcD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDsiLCJpbXBvcnQgdGVtcGxhdGUgZnJvbSAnLi9ub3QtY29tcGF0aWJsZS1mb3JtYXQtdmlldy5odG1sJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vdENvbXBhdGlibGVGb3JtYXQgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7bW9kZWwsIGVsfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuJGVsID0gJChlbCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuJGVsLmNzcyhcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kKHRlbXBsYXRlKCkpO1xuXG4gICAgICAgIHRoaXMuJGVsLmZpbmQoXCIuY2xvc2UtYnRuXCIpLm9uKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZWwuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUHJlbWl1bVJldmlld3NWaWV3IGZyb20gJy4vdmlld3MvcHJlbWl1bV9yZXZpZXdzJztcbmltcG9ydCBQcmVtaXVtUmV2aWV3TW9kZWwgZnJvbSAnLi9tb2RlbHMvcHJlbWl1bV9yZXZpZXcnO1xuXG5jb25zdCBjcmVhdGVDb21wb25lbnQgPSAoe2VsfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsID0gbmV3IFByZW1pdW1SZXZpZXdNb2RlbCgpO1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgUHJlbWl1bVJldmlld3NWaWV3KHtlbCwgbW9kZWx9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9uZW50O1xuIiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZSc7XG5cbmNvbnN0IFByZW1pdW1SZXZpZXdNb2RlbCA9IEJhc2VNb2RlbC5leHRlbmQoe1xuICAgIHVybFJvb3Q6ICcnXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUHJlbWl1bVJldmlld01vZGVsO1xuIiwiY29uc3QgeyBodG1sIH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0ICh7IHJldmlld3MgfSkgPT4gYFxuJHtyZXZpZXdzICYmIHJldmlld3MubWFwKChyZXZpZXcsIGluZGV4KSA9PlxuICAgIGA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVEZXRhaWxzRGVzY3JpcHRpb24tcmV2aWV3U291cmNlXCI+Jm5ic3A7JHtyZXZpZXcuc291cmNlfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVEZXRhaWxzRGVzY3JpcHRpb24tcmV2aWV3IGpzLXJldmlld0NvbnRlbnQtJHtpbmRleH1cIiBkYXRhLXJldmlldz1cIiR7aW5kZXh9XCI+JHtyZXZpZXcuY29udGVudH08L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJUaXRsZURldGFpbHNEZXNjcmlwdGlvbi1yZWFkTW9yZUNvbnRhaW5lciBqcy1yZWFkTW9yZUNvbnRhaW5lci0ke2luZGV4fSBpcy1jb2xsYXBzZWQgaXMtZGVza3RvcFwiPi4uLiZuYnNwO1xuICAgICAgICAgICAgPGEgY2xhc3M9XCJUaXRsZURldGFpbHNEZXNjcmlwdGlvbi1yZXZpZXdSZWFkTW9yZSBqcy10b2dnbGVSZXZpZXdcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgZGF0YS1yZXZpZXc9XCIke2luZGV4fVwiPiR7aHRtbCgnY292ZXIucmVhZE1vcmUnKX08L2E+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8aHIvPmBcbikuam9pbignJylcbn1gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgcmV2aWV3cyB9KSA9PiBgXG4ke3Jldmlld3MgJiYgcmV2aWV3cy5tYXAoKHJldmlldywgaW5kZXgpID0+IGBcbiAgICA8ZGl2IGlkPVwicmV2aWV3LSR7aW5kZXh9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZURldGFpbHNBY2NvcmRpb24tcmV2aWV3U291cmNlXCI+Jm5ic3A7JHtyZXZpZXcuc291cmNlfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVEZXRhaWxzQWNjb3JkaW9uLXJldmlld1wiPiR7cmV2aWV3LmNvbnRlbnR9PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgJHsoaW5kZXggPCByZXZpZXdzLmxlbmd0aCAtIDEpID8gJzxociBjbGFzcz1cIlRpdGxlRGV0YWlsc0FjY29yZGlvbi1yZXZpZXdEaXZpZGVyXCIvPicgOiAnJ31gXG4pLmpvaW4oJycpXG59YDtcbiIsImltcG9ydCBCYXNlVmlldyBmcm9tICcuLi8uLi8uLi92aWV3cy9iYXNlJztcbmltcG9ydCBEZXNrdG9wUmV2aWV3c0NvbnRhaW5lclRlbXBsYXRlIGZyb20gJy4uL3RlbXBsYXRlcy9yZXZpZXdzX2Rlc2t0b3AuaHRtbCc7XG5pbXBvcnQgTW9iaWxlUmV2aWV3c0NvbnRhaW5lclRlbXBsYXRlIGZyb20gJy4uL3RlbXBsYXRlcy9yZXZpZXdzX21vYmlsZS5odG1sJztcblxuY29uc3QgUHJlbWl1bVJldmlld3NWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcbiAgICBkZXNrdG9wVGVtcGxhdGU6IERlc2t0b3BSZXZpZXdzQ29udGFpbmVyVGVtcGxhdGUsXG4gICAgbW9iaWxlVGVtcGxhdGU6IE1vYmlsZVJldmlld3NDb250YWluZXJUZW1wbGF0ZSxcbiAgICBldmVudHM6IHtcbiAgICAgICAgJ2NsaWNrIC5qcy10b2dnbGVSZXZpZXcnOiAndG9nZ2xlUmV2aWV3JyxcbiAgICAgICAgJ3RhcCAuanMtdG9nZ2xlUmV2aWV3JzogJ3RvZ2dsZVJldmlldycsXG4gICAgICAgICdjbGljayAuanMtcmV2aWV3cy10YWInOiAncmVuZGVyUmV2aWV3cycsXG4gICAgICAgICd0YXAgLmpzLXJldmlld3MtdGFiJzogJ3JlbmRlclJldmlld3MnLFxuICAgICAgICAnY2xpY2sgLmpzLXJldmlld3MtcGFuZWwnOiAncmVuZGVyUmV2aWV3cycsXG4gICAgICAgICd0YXAgLmpzLXJldmlld3MtcGFuZWwnOiAncmVuZGVyUmV2aWV3cycsXG4gICAgfSxcbiAgICBpbml0aWFsaXplKHsgZWwsIG1vZGVsIH0pIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMubWVkaWFJZCA9IF8ua2V5cyh3aW5kb3cuT3ZlckRyaXZlLm1lZGlhSXRlbXMpWzBdO1xuICAgIH0sXG4gICAgcmVuZGVyKHJldmlld3MpIHtcbiAgICAgICAgdGhpcy4kKCcuanMtcmV2aWV3cy1kZXNrdG9wLWNvbnRhaW5lcicpLmh0bWwoXG4gICAgICAgICAgICB0aGlzLmRlc2t0b3BUZW1wbGF0ZSh7IHJldmlld3M6IHJldmlld3MuaXRlbXMgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy4kKCcuanMtcmV2aWV3cy1tb2JpbGUtY29udGFpbmVyJykuaHRtbChcbiAgICAgICAgICAgIHRoaXMubW9iaWxlVGVtcGxhdGUoeyByZXZpZXdzOiByZXZpZXdzLml0ZW1zIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgcmVuZGVyUmV2aWV3cyhlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAnLmpzLXJldmlld3MtZGVza3RvcC1jb250YWluZXIsIC5qcy1yZXZpZXdzLW1vYmlsZS1jb250YWluZXInXG4gICAgICAgICAgICApLmF0dHIoJ2RhdGEtbG9hZGVkJykgIT09ICd0cnVlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwudXJsUm9vdCA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXZpZXdzLCB7XG4gICAgICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tZWRpYUlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmZldGNoKCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2hvdyBkZXNrdG9wIHJldmlld3MgdW5sZXNzIHRoZSByZXZpZXdzIHRhYiBpcyBjbGlja2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHdpbGwgZGlzcGxheSB1bmRlciBvdGhlciB0YWJzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiQoZS50YXJnZXQpLmhhc0NsYXNzKCdqcy1yZXZpZXdzLXRhYicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoJy5qcy1yZXZpZXdzLWRlc2t0b3AtY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3UtaGlkZU1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoJy5qcy1yZXZpZXdzLW1vYmlsZS1jb250YWluZXInKS5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICd1LWhpZGVNZSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJy5qcy1yZXZpZXdzLWRlc2t0b3AtY29udGFpbmVyLCAuanMtcmV2aWV3cy1tb2JpbGUtY29udGFpbmVyJ1xuICAgICAgICAgICAgICAgICAgICApLmF0dHIoJ2RhdGEtbG9hZGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoJy5qcy1yZXZpZXctbG9hZGVyJykuYWRkQ2xhc3MoJ3UtaGlkZU1lJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICcuanMtcmV2aWV3cy1kZXNrdG9wLWNvbnRhaW5lciwgLmpzLXJldmlld3MtbW9iaWxlLWNvbnRhaW5lcidcbiAgICAgICAgICAgICAgICAgICAgKS5hdHRyKCdkYXRhLWxvYWRlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0b2dnbGVSZXZpZXcoZSkge1xuICAgICAgICAvLyBQcmV2ZW50IGZvdW5kYXRpb24gc2Nyb2xsaW5nIGF3YXkgZnJvbSB0aGUgcmV2aWV3XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3QgcmV2aWV3TnVtID0gJChlLnRhcmdldCkuYXR0cignZGF0YS1yZXZpZXcnKTtcbiAgICAgICAgY29uc3QgcmVhZE1vcmVDb250YWluZXIgPSAkKGAuanMtcmVhZE1vcmVDb250YWluZXItJHtyZXZpZXdOdW19YCk7XG4gICAgICAgIGNvbnN0IHJldmlldyA9ICQoYC5qcy1yZXZpZXdDb250ZW50LSR7cmV2aWV3TnVtfWApO1xuXG4gICAgICAgIGlmIChyZWFkTW9yZUNvbnRhaW5lci5oYXNDbGFzcygnaXMtY29sbGFwc2VkJykpIHtcbiAgICAgICAgICAgIHJldmlldy5jc3MoeyBoZWlnaHQ6ICdpbml0aWFsJywgb3ZlcmZsb3c6ICd2aXNpYmxlJyB9KTtcbiAgICAgICAgICAgIHJlYWRNb3JlQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdpcy1jb2xsYXBzZWQnKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnaXMtZXhwYW5kZWQnKTtcbiAgICAgICAgICAgIHJlYWRNb3JlQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5qcy10b2dnbGVSZXZpZXcnKVxuICAgICAgICAgICAgICAgIC50ZXh0KHdpbmRvdy50ZXh0KCdjb3Zlci5yZWFkTGVzcycpKTtcbiAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIDxwPiB0YWcgZW1iZWRkZWQgaW4gcmV2aWV3XG4gICAgICAgICAgICBpZiAocmV2aWV3LmhhcygncCcpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlYWRNb3JlQ29udGFpbmVyLmNzcygnbWFyZ2luLXRvcCcsICcxLjI1cmVtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpcy1leHBhbmRlZFxuICAgICAgICAgICAgbGV0IGhlaWdodCA9ICcxMDBweCc7XG4gICAgICAgICAgICBpZiAoJCgnYm9keScpLmhhc0NsYXNzKCdpcy1keXNsZXhpYycpKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gJzkwcHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV2aWV3LmNzcyh7IGhlaWdodCwgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pO1xuICAgICAgICAgICAgcmVhZE1vcmVDb250YWluZXJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2lzLWV4cGFuZGVkJylcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpXG4gICAgICAgICAgICAgICAgLmNzcygnbWFyZ2luLXRvcCcsIDApO1xuICAgICAgICAgICAgcmVhZE1vcmVDb250YWluZXJcbiAgICAgICAgICAgICAgICAuZmluZCgnLmpzLXRvZ2dsZVJldmlldycpXG4gICAgICAgICAgICAgICAgLnRleHQod2luZG93LnRleHQoJ2NvdmVyLnJlYWRNb3JlJykpO1xuICAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcmVtaXVtUmV2aWV3c1ZpZXc7XG4iLCJjb25zdCB7IHRleHQsIHVybCB9ID0gd2luZG93O1xuaW1wb3J0IFRpdGxlIGZyb20gJy4uL21lZGlhL21vZGVscy9UaXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlY2VudElzc3Vlc0RyYXdlciBleHRlbmRzIEJhY2tib25lLlZpZXd7XG5cbiAgICBjb25zdHJ1Y3Rvcih7ZWwsIHRpdGxlTW9kZWx9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucGFnZU51bSA9IDE7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy50aXRsZU1vZGVsID0gdGl0bGVNb2RlbDtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGVsKTtcblxuICAgICAgICAkKCcubG9hZC1idXR0b24nKS5jbGljaygoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRQYWdlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWROZXh0UGFnZSgpIHtcbiAgICAgICAgdGhpcy5wYWdlTnVtID0gdGhpcy5wYWdlTnVtICsgMTtcblxuICAgICAgICB0aGlzLmdldFJlY2VudElzc3VlcygpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzLmJvZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVzLmJvZHkuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBuZXcgVGl0bGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZChgXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiR7dXJsKHJvdXRlcy5tZWRpYUlkLCB7aWQ6IGl0ZW0uaWR9KX1cIiBhcmlhLWxhYmVsPVwiJHt0ZXh0KFwidmlld0RldGFpbHNBYm91dFRpdGxlXCIsIHt0aXRsZTogaXRlbS50aXRsZX0pfVwiIGRhdGEtbWVkaWEtaWQ9XCIke2l0ZW0uaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PVwiJHtpdGVtLnRpdGxlfVwiIHNyYz1cIiR7bW9kZWwuZ2V0Q292ZXIoMTUwKS5ocmVmfVwiPiAke2l0ZW0uZWRpdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICBgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJy5sb2FkLWJ1dHRvbicpLnRleHQodGV4dCgnbWFnYXppbmVCYWNrSXNzdWVzLmxvYWRNb3JlJykpO1xuXG4gICAgICAgICAgICAgICAgaWYocmVzLmJvZHkubGlua3MubmV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5sb2FkLWJ1dHRvbicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuTG9nZ2VyLmxvZygnZXJyb3InLCAnRmFpbGVkIHRvIHNob3cgcHJldmlvdXMgaXNzdWVzJywge21lc3NhZ2U6IGVycm9yLnN0YXR1c1RleHQgfHwgZXJyb3J9KTtcbiAgICAgICAgICAgICQoJy5sb2FkLWJ1dHRvbicpLnRleHQodGV4dCgnbWFnYXppbmVCYWNrSXNzdWVzLnRyeUFnYWluJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRSZWNlbnRJc3N1ZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QubWVkaWEucmVjZW50SXNzdWVzLCB7aWQ6IHRoaXMudGl0bGVNb2RlbC5hdHRyaWJ1dGVzLnBhcmVudE1hZ2F6aW5lVGl0bGVJZH0pLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHBhZ2VOdW1iZXI6IHRoaXMucGFnZU51bVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgIH0pXG4gICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpXG4gICAgICAgIC5mYWlsKCh4aHIsIHN0YXR1cywgZXJyKSA9PiByZWplY3QoZXJyKSkpO1xuICAgIH1cbn1cbiIsImltcG9ydCBUaXRsZSBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZSc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlQ29sbGVjdGlvbic7XG5cbi8vIFRoaXMgaXMgYSByZXBsYWNlbWVudCBmb3IgUGF0cm9uTWVkaWFJdGVtc01vZGVsIChlY21hc2NyaXB0XFxtb2RlbHNcXHBhdHJvbl9tZWRpYV9pdGVtcy5qcylcbi8vIFdlIHNob3VsZCBncmFkdWFsbHkgdHJhbnNpdGlvbiB0byB1c2luZyB0aGlzIGFzIHRpbWUgcGVybWl0cyBhbmQgd2UgY2FuIHRha2UgdGhlIHRpbWUgdG8gdmFsaWRhdGUgZnVudGlvbmFsaXR5XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRyb25UaXRsZVN0YXR1cyBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcbiAgICBnZXQgdXJsKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhSW5mbyk7XG4gICAgfVxuXG4gICAgZmV0Y2hUaXRsZVN0YXR1cyh0aXRsZUNvbGxlY3Rpb24sIHN0YXR1c1R5cGVzID0gbnVsbCkge1xuICAgICAgICBsZXQgdGl0bGVBcnJheSA9IHRpdGxlQ29sbGVjdGlvbi5tb2RlbHMgfHwgdGl0bGVDb2xsZWN0aW9uIHx8IFtdO1xuXG4gICAgICAgIGlmICh0aXRsZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlSWRzID0gXy5tYXAoXyh0aXRsZUFycmF5KS5wbHVjaygnaWQnKSwgTnVtYmVyKTtcblxuICAgICAgICB0aGlzLnJlcXVlc3QgPSB0aGlzLmZldGNoKHtcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdGl0bGVJZHMsIHN0YXR1c1R5cGVzIH0pLFxuICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdDtcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtUaXRsZX0gdGl0bGUgKi9cbiAgICB1cGRhdGVUaXRsZVN0YXRlKHRpdGxlKSB7XG4gICAgICAgIHRpdGxlLnVwZGF0ZVBhdHJvblN0YXRlKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlSWRzKCkge1xuICAgICAgICByZXR1cm4gXy51bmlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdvblJlYWRpbmdIaXN0b3J5JyksXG4gICAgICAgICAgICBfLmtleXModGhpcy5nZXQoJ3N0YXJSYXRpbmdzJykpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uQ2hlY2tvdXRzJyksXG4gICAgICAgICAgICB0aGlzLmdldCgnb25Ib2xkcycpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uV2lzaGxpc3QnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0ge1RpdGxlQ29sbGVjdGlvbn0gdGl0bGVDb2xsZWN0aW9uICovXG4gICAgdXBkYXRlVGl0bGVDb2xsZWN0aW9uU3RhdGUodGl0bGVDb2xsZWN0aW9uKSB7XG4gICAgICAgIC8vIHdlIHByb3ZpZGUgYW4gZW1wdHkgYXJyYXkgZm9yIGFueSBzdGF0dXMgYXR0cmlidXRlcyB0aGF0IHdlcmUgbm90IGZldGNoZWRcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgYW55dGhpbmcgZG93bnN0cmVhbVxuICAgICAgICB0aGlzLnN0dWJBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMudGl0bGVJZHMuZm9yRWFjaCgodGl0bGVJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aXRsZUNvbGxlY3Rpb24uZmluZFdoZXJlKHsgaWQ6IHRpdGxlSWQgfSk7XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGl0bGVTdGF0ZShtb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0dWJBdHRyaWJ1dGVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvblJlYWRpbmdIaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdvblJlYWRpbmdIaXN0b3J5JywgW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXQoJ3N0YXJSYXRpbmdzJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdzdGFyUmF0aW5ncycsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvbkNoZWNrb3V0cycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25DaGVja291dHMnLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldCgnb25Ib2xkcycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25Ib2xkcycsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvbldpc2hsaXN0JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdvbldpc2hsaXN0JywgW10pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gaW1wb3J0IHdoZW4gd2UgbW92ZSBtb3JlIHRvIG1vZHVsZXNcbmV4cG9ydCBkZWZhdWx0IHdpbmRvdy5CYWNrYm9uZS5Nb2RlbDtcbiIsImltcG9ydCBCYXNlTW9kZWwgZnJvbSAnLi4vbW9kZWxzL2Jhc2UnO1xuXG5jb25zdCBQYXRyb25NZWRpYUl0ZW1zTW9kZWwgPSBCYXNlTW9kZWwuZXh0ZW5kKHtcbiAgICB1cmwoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFJbmZvKTtcbiAgICB9LFxuXG4gICAgaW5pdGlhbGl6ZSh7dGl0bGVzfSkge1xuICAgICAgICB0aGlzLm1lZGlhSXRlbXMgPSB0aXRsZXMgfHwgd2luZG93Lk92ZXJEcml2ZS50aXRsZUNvbGxlY3Rpb24gfHwge307XG4gICAgICAgIHRoaXMuaXRlbXNPblBhZ2UgPSBfLm1hcChfLnBsdWNrKHRoaXMubWVkaWFJdGVtcywgJ2lkJyksIE51bWJlcik7XG4gICAgfSxcblxuICAgIGluaXRpYWxGZXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFJdGVtcy5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5mZXRjaCh7XG4gICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe3RpdGxlSWRzOiB0aGlzLml0ZW1zT25QYWdlfSksXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLCBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsnY3NyZi10b2tlbic6ICQoJyNjc3JmJykudmFsKCkgfHwgT3ZlckRyaXZlLl9jc3JmfX0pXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFBhdHJvbk1lZGlhSXRlbXNNb2RlbDtcbiIsImltcG9ydCBjcmVhdGVDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50cy9wcmVtaXVtX3Jldmlld3MvbWFpbi5qcyc7XG5pbXBvcnQgY3JlYXRlRGV0YWlsc0NvdmVySW1hZ2VDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50cy9kZXRhaWxzX2NvdmVyX2ltYWdlL21haW4uanMnO1xuaW1wb3J0IERldGFpbHNSZWxhdGVkVGl0bGVzVmlldyBmcm9tICcuLi9jb21wb25lbnRzL2RldGFpbHNfcmVsYXRlZF90aXRsZXMvRGV0YWlsc1JlbGF0ZWRUaXRsZXNWaWV3JztcbmltcG9ydCBIYXNoTWFuYWdlciBmcm9tICcuLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5pbXBvcnQgUGF0cm9uTWVkaWFJdGVtc01vZGVsIGZyb20gJy4uL21vZGVscy9wYXRyb25fbWVkaWFfaXRlbXMnO1xuaW1wb3J0IFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24gZnJvbSAnLi4vdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24nO1xuaW1wb3J0IFN0YXJSYXRpbmcgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vU3RhclJhdGluZyc7XG5pbXBvcnQgVGl0bGVTZXJpZXMgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVTZXJpZXMnO1xuaW1wb3J0IFRpdGxlQWN0aW9uQnV0dG9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvVGl0bGVBY3Rpb25CdXR0b24nO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5pbXBvcnQgVGl0bGUgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUnO1xuaW1wb3J0IFdpc2hMaXN0QnV0dG9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvV2lzaExpc3RCdXR0b24nO1xuaW1wb3J0IFJlYWRpbmdIaXN0b3J5QnV0dG9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvUmVhZGluZ0hpc3RvcnlCdXR0b24nO1xuaW1wb3J0IENvcGllc0F2YWlsYWJsZSBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9Db3BpZXNBdmFpbGFibGUnO1xuaW1wb3J0IEx1Y2t5RGF5SG9sZHMgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vTHVja3lEYXlIb2xkcyc7XG5pbXBvcnQgQ29sbGVjdGlvbkRlZmluaXRpb24gZnJvbSAnLi4vY29tcG9uZW50cy9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvQ29sbGVjdGlvbkRlZmluaXRpb24nO1xuaW1wb3J0IFJlY2VudElzc3Vlc0RyYXdlciBmcm9tICcuLi9jb21wb25lbnRzL3JlY2VudF9pc3N1ZXNfZHJhd2VyL1JlY2VudElzc3Vlc0RyYXdlcic7XG5pbXBvcnQgTm90Q29tcGF0aWJsZUZvcm1hdCBmcm9tICcuLi9jb21wb25lbnRzL25vdF9jb21wYXRpYmxlX2Zvcm1hdC9ub3QtY29tcGF0aWJsZS1mb3JtYXQtdmlldy5qcyc7XG5cbmNvbnN0IGZldGNoQ29sbGVjdGlvbkJ5SWQgPSAoY29sbGVjdGlvbklkKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QuY29sbGVjdGlvbnMuZ2V0QnlJZCwge1xuICAgICAgICAgICAgICAgIGlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShuZXcgQ29sbGVjdGlvbkRlZmluaXRpb24ocmVzcG9uc2UpKSlcbiAgICAgICAgICAgIC5mYWlsKChqcUhYUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHJlc29sdmUoKSk7IC8vIExIVE5HLTMwMTggWWVzLCB3ZSBhcmUgaGlkaW5nIGVycm9ycyBoZXJlLCB3ZSBkb250IGNhcmUgaWYgYSB0cmFzaCBJRCBpcyBwYXNzZWRcbiAgICB9KTtcblxubGV0IGlzVW5zdXBwb3J0ZWRUb2xpbm9Gb3JtYXQgPSAoZm9ybWF0KSA9PiB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0UGFydHMgPSBmb3JtYXQuc3BsaXQoJy0nKTtcbiAgICByZXR1cm4gZm9ybWF0LmluZGV4T2YoJ2Vib29rJykgPiAtMSAmJiBmb3JtYXRQYXJ0cy5sZW5ndGggPj0gMlxuICAgICAgICA/IFsna29ibycsICdtZWRpYScsICdraW5kbGUnXS5pbmNsdWRlcyhmb3JtYXRQYXJ0c1sxXSlcbiAgICAgICAgOiB0cnVlO1xufTtcblxuJCgoKSA9PiB7XG4gICAgbGV0IGNvbGxlY3Rpb25GZXRjaCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3QgeyBjb2xsZWN0aW9uSWQgfSA9IHdpbmRvdy5PdmVyRHJpdmU7XG4gICAgaWYgKGNvbGxlY3Rpb25JZCkge1xuICAgICAgICBjb2xsZWN0aW9uRmV0Y2ggPSBmZXRjaENvbGxlY3Rpb25CeUlkKGNvbGxlY3Rpb25JZCk7XG4gICAgfVxuXG4gICAgY29sbGVjdGlvbkZldGNoLnRoZW4oKGNvbGxlY3Rpb25EZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGxldCB0aXRsZXMgPSB3aW5kb3cuT3ZlckRyaXZlLnRpdGxlQ29sbGVjdGlvbjtcblxuICAgICAgICBjb25zdCBtZWRpYU1vZGVsID0gbmV3IFRpdGxlKHdpbmRvdy5PdmVyRHJpdmUudGl0bGVDb2xsZWN0aW9uKTtcbiAgICAgICAgd2luZG93LnRpdGxlID0gbWVkaWFNb2RlbDtcblxuICAgICAgICBsZXQgc3RyZWFtaW5nVmlkZW9Gb3JtYXRzID0gXy5maW5kKFxuICAgICAgICAgICAgbWVkaWFNb2RlbC5nZXQoJ2Zvcm1hdHMnKSxcbiAgICAgICAgICAgIChmb3JtYXQpID0+IGZvcm1hdC5pZCA9PT0gJ3ZpZGVvLXN0cmVhbWluZydcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgaXNEUk0gPSBmYWxzZTtcblxuICAgICAgICBfLmVhY2gobWVkaWFNb2RlbC5nZXQoJ2Zvcm1hdHMnKSwgKGZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIF8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0LnJpZ2h0cyxcbiAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSA9PiByaWdodC5kcm1UeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdoZWF2eSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpc0RSTSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdHJlYW1pbmdWaWRlb0Zvcm1hdHMgIT09IHVuZGVmaW5lZCAmJiBpc0RSTSkge1xuICAgICAgICAgICAgbGV0IGlzQ2hyb21lYm9vayA9ICEhd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0NyT1MvKTtcbiAgICAgICAgICAgIGxldCBpbkFwcCA9IHdpbmRvdy5PdmVyRHJpdmUuaW5BcHA7XG4gICAgICAgICAgICBpZiAoaXNDaHJvbWVib29rICYmIGluQXBwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRvYXN0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3Rlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnRleHQoJ2FjY291bnRMb2Fucy51bnN1cHBvcnRlZEZvcm1hdFZpZGVvSHRtbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXRlVXBkYXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIC8vIFRPRE86IERldGVybWluZSBpZiB0aGUgcGF0cm9uIGVtYWlsIGNhbiBiZSBzdG9yZWQgaW4gYSBjb29raWUgb3Igc29tZXRoaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuaXNBdXRoZW50aWNhdGVkICYmXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcGF0cm9uTWVkaWEgPSBuZXcgUGF0cm9uTWVkaWFJdGVtc01vZGVsKHtcbiAgICAgICAgICAgICAgICB0aXRsZXM6IFttZWRpYU1vZGVsLmF0dHJpYnV0ZXNdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHN0YXRlVXBkYXRlUHJvbWlzZSA9IHBhdHJvbk1lZGlhXG4gICAgICAgICAgICAgICAgLmluaXRpYWxGZXRjaCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHBhdHJvbkRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXy5lYWNoKF8uZmxhdHRlbihfLnZhbHVlcyhwYXRyb25EYXRhKSksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFNb2RlbC51cGRhdGVQYXRyb25TdGF0ZShwYXRyb25EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZVVwZGF0ZVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5pc0F1dGhlbnRpY2F0ZWQgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzICYmXG4gICAgICAgICAgICAgICAgSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcndhcmRlZEFjdGlvbiA9IG5ldyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aXRsZXMsXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5nbG9iYWxFdmVudHMsXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhTW9kZWxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmZvcndhcmRBY3Rpb24gPSBmb3J3YXJkZWRBY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB0aXRsZUFjdGlvbnMgPSBuZXcgVGl0bGVBY3Rpb25zKHtcbiAgICAgICAgICAgIGJ1czogd2luZG93Lmdsb2JhbEV2ZW50cyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRpdGxlQWN0aW9uQnV0dG9uID0gbmV3IFRpdGxlQWN0aW9uQnV0dG9uKHtcbiAgICAgICAgICAgIG1vZGVsOiBtZWRpYU1vZGVsLFxuICAgICAgICAgICAgZWw6ICcuVGl0bGVBY3Rpb24nLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBoaWRlRXh0cmFJbmZvID1cbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpICYmXG4gICAgICAgICAgICBtZWRpYU1vZGVsLmlzTWFnYXppbmU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3NhbXBsZU9ubHlNb2RlJykgJiZcbiAgICAgICAgICAgICFoaWRlRXh0cmFJbmZvICYmXG4gICAgICAgICAgICAhd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZGlzYWJsZVdpc2hsaXN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB3aXNoTGlzdEJ1dHRvbiA9IG5ldyBXaXNoTGlzdEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICcud2lzaGxpc3QtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnd2l0aC10ZXh0JyxcbiAgICAgICAgICAgICAgICBjb250cmFzdDogJ2FsdGVybmF0ZScsXG4gICAgICAgICAgICB9KS5yZW5kZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3NhbXBsZU9ubHlNb2RlJykgJiZcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2RldGFpbHMtcGFnZS1saWJieS1idXR0b24nKSAmJlxuICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgncHJvbW90ZUxpYmJ5JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbGliYnlMaW5rID1cbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly93d3cub3ZlcmRyaXZlLmNvbS9hcHBzL2xpYmJ5P3V0bV9vcmlnaW49bGlnaHRuaW5nJnV0bV9wYWdlX2dlbnJlPXNhbXBsZV9tb2RlJnV0bV9saXN0PWdldF9saWJieSZ1dG1fbWVkaXVtPWxpZ2h0bmluZ19iYW5uZXImdXRtX3NvdXJjZT1saWdodG5pbmcmdXRtX2NhbXBhaWduPXNhbXBsZV9tb2RlJnV0bV9jb250ZW50PWdldGxpYmJ5JztcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmRldmljZVR5cGUgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmRldmljZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2lvcydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpYmJ5TGluayA9XG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL2l0dW5lcy5hcHBsZS5jb20vdXMvYXBwL2xpYmJ5LWJ5LW92ZXJkcml2ZS1sYWJzL2lkMTA3NjQwMjYwNj9wdD0yMTE0ODMmY3Q9bGlnaHRuaW5nJm10PTgmdXRtX21lZGl1bT1saWdodG5pbmdfYmFubmVyJnV0bV9zb3VyY2U9bGlnaHRuaW5nJnV0bV9jYW1wYWlnbj1zYW1wbGVfbW9kZSZ1dG1fY29udGVudD1nZXRsaWJieSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuZGV2aWNlVHlwZSAmJlxuICAgICAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuZGV2aWNlVHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYW5kcm9pZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpYmJ5TGluayA9XG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9Y29tLm92ZXJkcml2ZS5tb2JpbGUuYW5kcm9pZC5saWJieSZyZWZlcnJlcj11dG1fc291cmNlJTNEbGlnaHRuaW5nJnV0bV9tZWRpdW09bGlnaHRuaW5nX2Jhbm5lciZ1dG1fc291cmNlPWxpZ2h0bmluZyZ1dG1fY2FtcGFpZ249c2FtcGxlX21vZGUmdXRtX2NvbnRlbnQ9Z2V0bGliYnknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkKCcuR2V0TGliYnktYnV0dG9uQ29udGFpbmVyJykuYXBwZW5kKGBcbiAgICAgICAgICAgICAgICA8YSBpZD1cIkdldExpYmJ5TGlua1wiXG4gICAgICAgICAgICAgICAgICAgaHJlZj1cIiR7bGliYnlMaW5rfVwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU1vZGVsLmlzTWFnYXppbmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFNb2RlbC5nZXQoJ3JlY2VudElzc3VlcycpLnRvdGFsSXRlbXMgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdtdWx0aXBsZS1tYWdhemluZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgfSBHZXRMaWJieUxpbmsgVGl0bGVBY3Rpb25CdXR0b24gYnV0dG9uIHJhZGl1cyBpcy1idXR0b24gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIj4gJHt3aW5kb3cudGV4dCgnZ2V0TGliYnknKX0gPC9hPmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoaWRlRXh0cmFJbmZvKSB7XG4gICAgICAgICAgICBsZXQgc3RhclJhdGluZyA9IG5ldyBTdGFyUmF0aW5nKHtcbiAgICAgICAgICAgICAgICBtb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZWRpdGFibGUnLFxuICAgICAgICAgICAgfSkucmVuZGVyKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhbWVkaWFNb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJykgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzaG93LXN0YXItcmF0aW5ncycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAkKCcuanMtc3RhclJhdGluZ3NDb250YWluZXInKS5hcHBlbmQoc3RhclJhdGluZy4kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcucHJlcmVsZWFzZS1kYXRlJylcbiAgICAgICAgICAgICAgICAgICAgLmZpcnN0KClcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cudGV4dCgnYWNjb3VudEhvbGRzLnByZXJlbGVhc2VFeHBlY3RlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBtZWRpYU1vZGVsLmdldCgnZXN0aW1hdGVkUmVsZWFzZURhdGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWFkaW5nSGlzdG9yeUJ1dHRvbiA9IG5ldyBSZWFkaW5nSGlzdG9yeUJ1dHRvbih7XG4gICAgICAgICAgICBtb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgIGVsOiAnLlJlYWRpbmdIaXN0b3J5QnV0dG9uLWNvbnRhaW5lcicsXG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgIGxldCBzZXJpZXMgPSBuZXcgVGl0bGVTZXJpZXMoe1xuICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICBlbDogJy5UaXRsZVNlcmllcycsXG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykgfHxcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NvbnRlbnQtaG9sZHMnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBlbEZvckNvcGllc0F2YWlsYWJsZSA9ICcuanMtY29waWVzQXZhaWxhYmxlQ29udGFpbmVyJztcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lZGlhTW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkgJiZcbiAgICAgICAgICAgICAgICBtZWRpYU1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAndW5hdmFpbGFibGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgY29waWVzQXZhaWxhYmxlTHVja3lEYXkgPSBuZXcgQ29waWVzQXZhaWxhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAnLmpzLWNvcGllc0F2YWlsYWJsZUNvbnRhaW5lci1MdWNreURheScsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhJY29uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBsdWNreURheUhvbGRzQmxvYiA9IG5ldyBMdWNreURheUhvbGRzKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAnLkx1Y2t5RGF5Q2FudFBsYWNlSG9sZENvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBlbEZvckNvcGllc0F2YWlsYWJsZSA9XG4gICAgICAgICAgICAgICAgICAgICcuanMtY29waWVzQXZhaWxhYmxlQ29udGFpbmVyLnNob3ctZm9yLTYwMC11cCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb3BpZXNBdmFpbGFibGUgPSBuZXcgQ29waWVzQXZhaWxhYmxlKHtcbiAgICAgICAgICAgICAgICBtb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgICAgICBlbDogZWxGb3JDb3BpZXNBdmFpbGFibGUsXG4gICAgICAgICAgICAgICAgd2l0aEljb25zOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm9ybWF0cyA9IG1lZGlhTW9kZWwuZ2V0KCdmb3JtYXRzJyk7XG4gICAgICAgIGxldCB0b2xpbm9BY2NlcHRlZEZvcm1hdHMgPSBmb3JtYXRzLmZpbHRlcihcbiAgICAgICAgICAgIChpdGVtKSA9PiAhaXNVbnN1cHBvcnRlZFRvbGlub0Zvcm1hdChpdGVtLmlkKVxuICAgICAgICApO1xuICAgICAgICBsZXQgaGFzQWNjZXB0ZWRUb2xpbm9Gb3JtYXQgPSB0b2xpbm9BY2NlcHRlZEZvcm1hdHMubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAod2luZG93Lk92ZXJEcml2ZS5pc1RvbGlub0RldmljZSAmJiAhaGFzQWNjZXB0ZWRUb2xpbm9Gb3JtYXQpIHtcbiAgICAgICAgICAgIGxldCBub3RDb21wYXRpYmxlRm9ybWF0ID0gbmV3IE5vdENvbXBhdGlibGVGb3JtYXQoe1xuICAgICAgICAgICAgICAgIG1vZGVsOiBtZWRpYU1vZGVsLFxuICAgICAgICAgICAgICAgIGVsOiAnLnRvYXN0LXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lZGlhTW9kZWwuZ2V0KCdhd2FyZHMnKSkge1xuICAgICAgICAgICAgbGV0IHNvcnRlZEF3YXJkcyA9IG1lZGlhTW9kZWxcbiAgICAgICAgICAgICAgICAuZ2V0KCdhd2FyZHMnKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICBhLmRlc2NyaXB0aW9uID4gYi5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGEuZGVzY3JpcHRpb24gPCBiLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IGF3YXJkTGlua3MgPSAnJztcbiAgICAgICAgICAgIHNvcnRlZEF3YXJkcy5mb3JFYWNoKChhd2FyZCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YXJkTGlua3MgKz0gYDxhIGhyZWY9XCIvc2VhcmNoL3RpdGxlP2F3YXJkcz0ke2F3YXJkLmlkfSZzb3J0Qnk9bmV3bHlhZGRlZFwiIGNsYXNzPVwic2Vjb25kYXJ5LWNvbG9yXCI+JHthd2FyZC5kZXNjcmlwdGlvbn08L2E+YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJCgnLlRpdGxlRGV0YWlsc0Rlc2NyaXB0aW9uLWF3YXJkc0Jsb2NrJykuYXBwZW5kKGF3YXJkTGlua3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIExpc3RlbiBmb3IgbWVkaWEgYnV0dG9uIGFjdGlvblxuICAgICAgICBtZWRpYU1vZGVsLm9uKCd0aXRsZTphY3Rpb24nLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGl0bGVBY3Rpb25zLnBlcmZvcm0oZGF0YS5hY3Rpb24sIGRhdGEubW9kZWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBSZW5hbWUgdGhpcyBmb3IgcHJlbWl1bSByZXZpZXdzXG4gICAgICAgIGNvbnN0IGVsID0gJCgnLmNvbnRhaW5lcicpO1xuICAgICAgICBjcmVhdGVDb21wb25lbnQoeyBlbCB9KTtcblxuICAgICAgICBjb25zdCBjb3ZlckltYWdlID0gJCgnLmpzLWRldGFpbHMtY292ZXItaW1hZ2UnKVswXTtcbiAgICAgICAgY3JlYXRlRGV0YWlsc0NvdmVySW1hZ2VDb21wb25lbnQoeyBlbDogY292ZXJJbWFnZSB9KTtcblxuICAgICAgICBjb25zdCByZWxhdGVkVGl0bGVzQ29udGFpbmVyID0gJCgnLmpzLXJlbGF0ZWRUaXRsZXNDb250YWluZXInKTtcbiAgICAgICAgbmV3IERldGFpbHNSZWxhdGVkVGl0bGVzVmlldyh7XG4gICAgICAgICAgICBlbDogcmVsYXRlZFRpdGxlc0NvbnRhaW5lcixcbiAgICAgICAgICAgIGJ1czogd2luZG93Lmdsb2JhbEV2ZW50cyxcbiAgICAgICAgICAgIHRpdGxlTW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuZ2FFdmVudExvZ2dlci5wdXNoRXZlbnQoXG4gICAgICAgICAgICB7IHRpdGxlTW9kZWw6IG1lZGlhTW9kZWwgfSxcbiAgICAgICAgICAgICdkZXRhaWxzUGFnZSdcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtYWdhemluZS1yb2xsdXAnKSAmJlxuICAgICAgICAgICAgbWVkaWFNb2RlbC5pc01hZ2F6aW5lXG4gICAgICAgICkge1xuICAgICAgICAgICAgbmV3IFJlY2VudElzc3Vlc0RyYXdlcih7XG4gICAgICAgICAgICAgICAgZWw6ICQoJy5pc3N1ZS1saXN0JyksXG4gICAgICAgICAgICAgICAgdGl0bGVNb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcbiIsImNvbnN0IHsgaHRtbCB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiBgXG48ZGl2IGNsYXNzPVwiTG9hZGVyIGpzLWVzNmxvYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJMb2FkZXItZGlzcGxheVwiPjwvZGl2Pjxicj5cbiAgICA8c3BhbiBjbGFzcz1cIkxvYWRlci10ZXh0XCI+JHtodG1sKCdsb2FkaW5nJyl9PC9zcGFuPlxuPC9kaXY+XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVBY3Rpb25zIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGJ1cywgY29udGV4dCB9KSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgICAgIHJvb206IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgXy5leHRlbmQodGhpcy5jb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwZXJmb3JtKGFjdGlvbiwgdGl0bGVNb2RlbCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXNbYF8ke2FjdGlvbn1gXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpc1tgXyR7YWN0aW9ufWBdKHRpdGxlTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2JvcnJvdyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOmJvcnJvdycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2hvbGQodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpob2xkJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfd2lzaCh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOndpc2hsaXN0JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfbm9vayh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOm5vb2snLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yYXRpbmcodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyYXRpbmcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9oaXN0b3J5KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6aGlzdG9yeScsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2Rvd25sb2FkKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6ZG93bmxvYWQnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9wcmV2aWV3KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cHJldmlldycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3JlbmV3KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cmVuZXcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yZXF1ZXN0QWdhaW4odGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyZXF1ZXN0QWdhaW4nLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHNldENvbnRleHRSb29tKHJvb20pIHtcbiAgICAgICAgaWYgKF8ocm9vbSkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LnJvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucm9vbSA9IHJvb207XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0Q29sbGVjdGlvbih0aXRsZUNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKF8odGl0bGVDb2xsZWN0aW9uKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHQudGl0bGVDb2xsZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnRpdGxlQ29sbGVjdGlvbiA9IHRpdGxlQ29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImNsYXNzIFRpdGxlU3RhdGUge1xuICAgIHN0YXRpYyBnZXRTdGF0ZShtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZU1hbmFnZXIgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXI7XG5cbiAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc2FtcGxlT25seU1vZGUnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdwcmV2aWV3JztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYUlkID0gbWVkaWEuaWQ7XG5cbiAgICAgICAgbGV0IGlzT25Ib2xkID0gcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25Ib2xkcy5pbmRleE9mKG1lZGlhSWQpID4gLTE7XG4gICAgICAgIGxldCBpc09uQ2hlY2tvdXRzID1cbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uQ2hlY2tvdXRzLmluZGV4T2YobWVkaWFJZCkgPiAtMTtcbiAgICAgICAgbGV0IGlzQXZhaWxhYmxlID1cbiAgICAgICAgICAgIG1lZGlhLmlzQXZhaWxhYmxlIHx8XG4gICAgICAgICAgICAoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICAgICAgbWVkaWEubHVja3lEYXlBdmFpbGFibGVDb3BpZXMgPiAwKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAvYWNjb3VudFxcL2xvYW5zLy50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSAmJlxuICAgICAgICAgICAgbWVkaWEuaXNSZW5ld2FibGUgJiZcbiAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGlzT25Ib2xkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZXF1ZXN0ZWQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtZWRpYS5ob2xkc0NvdW50IDw9IDAgJiZcbiAgICAgICAgICAgICAgICBtZWRpYS5vd25lZENvcGllcyA+PSAwICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLmlzTHVja3lEYXlDaGVja291dFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmVuZXcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdyZXF1ZXN0QWdhaW4nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT25DaGVja291dHMpIHtcbiAgICAgICAgICAgIHJldHVybiAnYm9ycm93ZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT25Ib2xkICYmICFpc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuICdvbkhvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBpZiAobWVkaWEudHlwZS5pZCA9PT0gJ3BlcmlvZGljYWxzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbm9vayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAnYm9ycm93JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZWRpYS5pc0hvbGRhYmxlICYmIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT25XaXNobGlzdChtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uV2lzaGxpc3QuaW5kZXhPZihtZWRpYS5pZCkgPiAtMTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPblJlYWRpbmdIaXN0b3J5KG1lZGlhLCBwYXRyb25JdGVtcykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25SZWFkaW5nSGlzdG9yeS5pbmRleE9mKG1lZGlhLmlkKSA+IC0xXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGljIHN0YXJSYXRpbmcobWVkaWEsIHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIC8vIFJldHVybnMgMCBpZiBub3QgcmF0ZWRcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwYXRyb25JdGVtcyAmJlxuICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zLnN0YXJSYXRpbmdzICYmXG4gICAgICAgICAgICAgICAgcGF0cm9uSXRlbXMuc3RhclJhdGluZ3NbbWVkaWEuaWRdKSB8fFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVTdGF0ZTtcbiIsImNvbnN0IGtleXMgPSBPYmplY3QuZnJlZXplKHtcbiAgICBUQUI6IDksXG4gICAgRU5URVI6IDEzLFxuICAgIExFRlQ6IDM3LFxuICAgIFVQOiAzOCxcbiAgICBSSUdIVDogMzksXG4gICAgRE9XTjogNDAsXG4gICAgU1BBQ0U6IDMyLFxuICAgIEVTQzogMjdcbn0pO1xuZXhwb3J0IGRlZmF1bHQga2V5cztcbiIsImltcG9ydCBIYXNoTWFuYWdlciBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5pbXBvcnQgVGl0bGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUnO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKGNvbGxlY3Rpb24sIGJ1cywgbW9kZWwpIHtcbiAgICAgICAgbGV0IGhhc2ggPSBIYXNoTWFuYWdlci5nZXQoJ2FjdGlvbicpWzBdO1xuICAgICAgICB0aGlzLmFjdGlvbkFyciA9IGhhc2ggPyBoYXNoLnNwbGl0KCd+JykgOiBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSB0aGlzLmFjdGlvbkFyclswXSB8fCBudWxsO1xuICAgICAgICB0aGlzLm1lZGlhSWQgPSB0aGlzLmFjdGlvbkFyclsxXSB8fCBudWxsO1xuICAgICAgICB0aGlzLnJhdGluZyA9IHRoaXMuYWN0aW9uQXJyWzJdIHx8IDA7XG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbCB8fCBudWxsO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLm1vZGVscztcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB1c2VyIGZvcndhcmRlZCBhY3Rpb25cbiAgICBleGVjdXRlQWN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aW9uIHx8ICF0aGlzLm1lZGlhSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLm1vZGVsIHx8XG4gICAgICAgICAgICAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLmdldCgnaWQnKSAhPT0gdGhpcy5tZWRpYUlkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBfLmZpbmQoXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIChtb2RlbCkgPT4gbW9kZWwuaWQgPT09IHRoaXMubWVkaWFJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aXRsZUFjdGlvbnMgPSBuZXcgVGl0bGVBY3Rpb25zKHsgYnVzOiB0aGlzLmJ1cyB9KTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgLy8gVGl0bGUgbW9kZWwgaXMgb24gcGFnZVxuICAgICAgICAgICAgSGFzaE1hbmFnZXIucmVtb3ZlKCdhY3Rpb24nKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHRoaXMucmF0aW5nKTtcbiAgICAgICAgICAgIHRpdGxlQWN0aW9ucy5wZXJmb3JtKHRoaXMuYWN0aW9uLCB0aGlzLm1vZGVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRpdGxlIG1vZGVsIGlzIG5vdCBvbiBwYWdlLCBmZXRjaCBhc3luY1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gbmV3IFRpdGxlKCk7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aXRsZS5nZXRUaXRsZUFzeW5jKHRoaXMubWVkaWFJZCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5zZXQoJ3VzZXJTdGFyUmF0aW5nJywgdGhpcy5yYXRpbmcpO1xuICAgICAgICAgICAgICAgIHRpdGxlQWN0aW9ucy5wZXJmb3JtKHRoaXMuYWN0aW9uLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgSGFzaE1hbmFnZXIucmVtb3ZlKCdhY3Rpb24nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gaW1wb3J0IHdoZW4gd2UgbW92ZSBtb3JlIHRvIG1vZHVsZXNcbmNvbnN0IEJhY2tib25lID0gd2luZG93LkJhY2tib25lO1xuaW1wb3J0IExvYWRlclRlbXBsYXRlIGZyb20gJy4uL3RlbXBsYXRlcy9sb2FkZXIuaHRtbCc7XG5cbmNvbnN0IEJhc2VWaWV3ID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2Nsb3NlJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudW5iaW5kKCk7XG4gICAgICAgIHRoaXMuc3RvcExpc3RlbmluZygpO1xuICAgICAgICAvLyBWaWV3cyBzaG91bGQgZGVmaW5lIHRoaXMgaW4gdGhlaXIgZXh0ZW5kIGRlY2xhcmF0aW9uXG4gICAgICAgIHRoaXMub25DbG9zZSAmJiB0aGlzLm9uQ2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGdldEh0bWwoeyB0ZW1wbGF0ZURhdGEgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbHMgPSB7XG4gICAgICAgICAgICBodG1sOiB3aW5kb3cuaHRtbCxcbiAgICAgICAgICAgIHRleHQ6IHdpbmRvdy50ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhID0gdGVtcGxhdGVEYXRhIHx8IHRoaXMuZ2V0VGVtcGxhdGVEYXRhKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlKF8uZXh0ZW5kKHt9LCBkYXRhLCBnbG9iYWxzKSk7XG4gICAgfSxcblxuICAgIGJ1aWxkRWxlbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRlbC5odG1sKHRoaXMuZ2V0SHRtbChvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGRvUmVuZGVyKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5idWlsZEVsZW1lbnQob3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiAhdGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgdGhpcy5iZWZvcmVBdHRhY2ggJiYgdGhpcy5iZWZvcmVBdHRhY2goKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRhY2goKSB7XG4gICAgICAgIGlmICghKHRoaXMuJHRhcmdldCBpbnN0YW5jZW9mIEJhY2tib25lLiQpKSB7XG4gICAgICAgICAgICB0aGlzLiR0YXJnZXQgPSBCYWNrYm9uZS4kKHRoaXMudGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiR0YXJnZXQuYXBwZW5kKHRoaXMuJGVsKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jbGVhckxvYWRlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLmJlZm9yZVJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvUmVuZGVyKG9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5hZnRlclJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5hZnRlclJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBnZXRUZW1wbGF0ZURhdGEoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLnRvSlNPTigpKSB8fCB7fTtcbiAgICB9LFxuXG4gICAgcmVuZGVyTG9hZGVyKCkge1xuICAgICAgICBjb25zdCBlbGVtID0gJCh0aGlzLnRhcmdldCkubGVuZ3RoID8gJCh0aGlzLnRhcmdldCkgOiB0aGlzLiRlbDtcbiAgICAgICAgZWxlbS5lbXB0eSgpLmFwcGVuZChMb2FkZXJUZW1wbGF0ZSh7IGh0bWw6IHdpbmRvdy5odG1sIH0pKTtcbiAgICB9LFxuXG4gICAgY2xlYXJMb2FkZXIoKSB7XG4gICAgICAgIC8vIENsZWFyIGxvYWRlciBpZiBpdCBleGlzdHNcbiAgICAgICAgY29uc3QgJGxvYWRlciA9ICQoJy5qcy1lczZsb2FkZXInKTtcbiAgICAgICAgaWYgKCRsb2FkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAkbG9hZGVyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBCYXNlVmlldztcbiJdfQ=="}