@mtgame/core 0.2.26 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/basketball-game-api.d.ts +3 -0
- package/api/feedback-api.d.ts +5 -2
- package/api/file-api.d.ts +3 -0
- package/api/football-game-api.d.ts +3 -0
- package/api/game-base-api.d.ts +3 -0
- package/api/handball-game-api.d.ts +3 -0
- package/api/hockey-game-api.d.ts +3 -0
- package/api/league-api.d.ts +3 -0
- package/api/league-news-api.d.ts +3 -0
- package/api/league-player-api.d.ts +3 -0
- package/api/media-api.d.ts +5 -2
- package/api/notification-api.d.ts +3 -0
- package/api/notification-base-api.d.ts +3 -0
- package/api/org-notification-api.d.ts +3 -0
- package/api/public-team-api.d.ts +3 -2
- package/api/public-user-api.d.ts +3 -0
- package/api/reference-api.d.ts +3 -0
- package/api/rugby-game-api.d.ts +3 -0
- package/api/team-api.d.ts +4 -1
- package/api/team-event-api.d.ts +3 -0
- package/api/tournament-api.d.ts +3 -2
- package/api/tournament-join-api.d.ts +3 -0
- package/api/tournament-round-api.d.ts +3 -0
- package/api/tournament-season-api.d.ts +3 -0
- package/api/tournament-stage-api.d.ts +3 -0
- package/api/user-api.d.ts +5 -2
- package/api/volleyball-game-api.d.ts +3 -1
- package/api/waterpolo-game-api.d.ts +3 -0
- package/esm2020/api/basketball-game-api.mjs +44 -0
- package/esm2020/api/feedback-api.mjs +29 -0
- package/esm2020/api/file-api.mjs +41 -0
- package/esm2020/api/football-game-api.mjs +49 -0
- package/esm2020/api/game-base-api.mjs +40 -0
- package/esm2020/api/handball-game-api.mjs +49 -0
- package/esm2020/api/hockey-game-api.mjs +49 -0
- package/esm2020/api/league-api.mjs +119 -0
- package/esm2020/api/league-news-api.mjs +57 -0
- package/esm2020/api/league-player-api.mjs +31 -0
- package/esm2020/api/media-api.mjs +124 -0
- package/esm2020/api/notification-api.mjs +16 -0
- package/esm2020/api/notification-base-api.mjs +62 -0
- package/esm2020/api/org-notification-api.mjs +16 -0
- package/{esm2015/api/paginated-response.interface.js → esm2020/api/paginated-response.interface.mjs} +0 -0
- package/{esm2015/api/public-api.js → esm2020/api/public-api.mjs} +0 -0
- package/esm2020/api/public-team-api.mjs +28 -0
- package/esm2020/api/public-user-api.mjs +38 -0
- package/esm2020/api/reference-api.mjs +30 -0
- package/esm2020/api/rugby-game-api.mjs +47 -0
- package/esm2020/api/team-api.mjs +302 -0
- package/esm2020/api/team-event-api.mjs +61 -0
- package/esm2020/api/tournament-api.mjs +391 -0
- package/esm2020/api/tournament-join-api.mjs +55 -0
- package/esm2020/api/tournament-round-api.mjs +57 -0
- package/esm2020/api/tournament-season-api.mjs +92 -0
- package/esm2020/api/tournament-stage-api.mjs +48 -0
- package/esm2020/api/user-api.mjs +219 -0
- package/esm2020/api/volleyball-game-api.mjs +49 -0
- package/esm2020/api/waterpolo-game-api.mjs +49 -0
- package/esm2020/http-cookie.interceptor.mjs +38 -0
- package/{esm2015/localization/basketball-game-log-types.js → esm2020/localization/basketball-game-log-types.mjs} +0 -0
- package/{esm2015/localization/basketball-game-sub-log-types.js → esm2020/localization/basketball-game-sub-log-types.mjs} +2 -5
- package/{esm2015/localization/football-game-log-types.js → esm2020/localization/football-game-log-types.mjs} +0 -0
- package/{esm2015/localization/handball-game-log-types.js → esm2020/localization/handball-game-log-types.mjs} +0 -0
- package/{esm2015/localization/hockey-game-log-types.js → esm2020/localization/hockey-game-log-types.mjs} +2 -5
- package/esm2020/localization/hockey-penalty-types.mjs +50 -0
- package/{esm2015/localization/organization-statuses.js → esm2020/localization/organization-statuses.mjs} +0 -0
- package/{esm2015/localization/overtime-types.js → esm2020/localization/overtime-types.mjs} +0 -0
- package/{esm2015/localization/public-api.js → esm2020/localization/public-api.mjs} +0 -0
- package/{esm2015/localization/rugby-foul-game-stage.js → esm2020/localization/rugby-foul-game-stage.mjs} +0 -0
- package/{esm2015/localization/rugby-foul-sanction.js → esm2020/localization/rugby-foul-sanction.mjs} +0 -0
- package/{esm2015/localization/rugby-game-log-types.js → esm2020/localization/rugby-game-log-types.mjs} +0 -0
- package/{esm2015/localization/team-event-type.js → esm2020/localization/team-event-type.mjs} +0 -0
- package/{esm2015/localization/team-user-role.js → esm2020/localization/team-user-role.mjs} +0 -0
- package/{esm2015/localization/user-profile.js → esm2020/localization/user-profile.mjs} +0 -0
- package/{esm2015/localization/volleyball-game-log-types.js → esm2020/localization/volleyball-game-log-types.mjs} +0 -0
- package/{esm2015/localization/waterpolo-game-log-types.js → esm2020/localization/waterpolo-game-log-types.mjs} +3 -3
- package/esm2020/models/achievement.mjs +18 -0
- package/esm2020/models/base-statistic.mjs +4 -0
- package/esm2020/models/basketball-game-config.mjs +18 -0
- package/esm2020/models/basketball-game-log.mjs +158 -0
- package/esm2020/models/basketball-game-statistic.mjs +47 -0
- package/esm2020/models/basketball-game-team-statistic.mjs +15 -0
- package/esm2020/models/basketball-profile.mjs +27 -0
- package/esm2020/models/basketball-statistic.mjs +62 -0
- package/esm2020/models/city.mjs +9 -0
- package/esm2020/models/feedback.mjs +14 -0
- package/esm2020/models/file.mjs +31 -0
- package/esm2020/models/football-game-config.mjs +22 -0
- package/esm2020/models/football-game-log.mjs +83 -0
- package/esm2020/models/football-game-statistic.mjs +93 -0
- package/esm2020/models/football-game-team-statistic.mjs +15 -0
- package/esm2020/models/football-profile.mjs +27 -0
- package/esm2020/models/football-statistic.mjs +76 -0
- package/esm2020/models/game-bill.mjs +30 -0
- package/esm2020/models/game-config-base.mjs +4 -0
- package/esm2020/models/game-invite.mjs +22 -0
- package/esm2020/models/game-log-base.mjs +4 -0
- package/esm2020/models/game-statistic-base.mjs +7 -0
- package/{esm2015/models/game-team-statistic-base.js → esm2020/models/game-team-statistic-base.mjs} +0 -0
- package/esm2020/models/game-timeline-stages.mjs +19 -0
- package/esm2020/models/game-user-disqualification.mjs +14 -0
- package/esm2020/models/game-user-limitation.mjs +19 -0
- package/esm2020/models/game-user.mjs +20 -0
- package/esm2020/models/game.mjs +188 -0
- package/esm2020/models/handball-game-config.mjs +16 -0
- package/esm2020/models/handball-game-log.mjs +71 -0
- package/esm2020/models/handball-game-statistic.mjs +67 -0
- package/esm2020/models/handball-game-team-statistic.mjs +15 -0
- package/esm2020/models/handball-profile.mjs +23 -0
- package/esm2020/models/handball-statistic.mjs +37 -0
- package/esm2020/models/hockey-game-config.mjs +25 -0
- package/esm2020/models/hockey-game-log.mjs +102 -0
- package/esm2020/models/hockey-game-statistic.mjs +101 -0
- package/esm2020/models/hockey-game-team-statistic.mjs +15 -0
- package/esm2020/models/hockey-penalty-types.mjs +6 -0
- package/esm2020/models/hockey-profile.mjs +25 -0
- package/esm2020/models/hockey-statistic.mjs +49 -0
- package/esm2020/models/league-banner.mjs +21 -0
- package/esm2020/models/league-court.mjs +9 -0
- package/esm2020/models/league-document.mjs +14 -0
- package/esm2020/models/league-news.mjs +25 -0
- package/esm2020/models/league-partner.mjs +14 -0
- package/esm2020/models/league-player.mjs +81 -0
- package/esm2020/models/league-playlist.mjs +14 -0
- package/esm2020/models/league-user.mjs +38 -0
- package/esm2020/models/league.mjs +38 -0
- package/esm2020/models/media-item.mjs +20 -0
- package/esm2020/models/notification-settings.mjs +20 -0
- package/esm2020/models/notification.mjs +105 -0
- package/esm2020/models/organization-bill.mjs +31 -0
- package/esm2020/models/organization-statistic.mjs +9 -0
- package/esm2020/models/organization-tariff.mjs +16 -0
- package/esm2020/models/organization.mjs +21 -0
- package/esm2020/models/playoff.mjs +56 -0
- package/esm2020/models/poll.mjs +83 -0
- package/esm2020/models/public-api.mjs +110 -0
- package/esm2020/models/rugby-foul-type.mjs +39 -0
- package/esm2020/models/rugby-game-config.mjs +23 -0
- package/esm2020/models/rugby-game-log.mjs +120 -0
- package/esm2020/models/rugby-game-statistic.mjs +29 -0
- package/esm2020/models/rugby-game-team-statistic.mjs +15 -0
- package/esm2020/models/rugby-profile.mjs +22 -0
- package/esm2020/models/rugby-statistic.mjs +37 -0
- package/esm2020/models/season-tournament.mjs +9 -0
- package/esm2020/models/sport.mjs +96 -0
- package/esm2020/models/team-access.mjs +14 -0
- package/esm2020/models/team-achievement.mjs +18 -0
- package/esm2020/models/team-event-invite.mjs +18 -0
- package/{esm2015/models/team-event-type.js → esm2020/models/team-event-type.mjs} +0 -0
- package/esm2020/models/team-event.mjs +27 -0
- package/esm2020/models/team-invite-external.mjs +9 -0
- package/esm2020/models/team-invite.mjs +18 -0
- package/esm2020/models/team-permission.mjs +23 -0
- package/esm2020/models/team-user.mjs +30 -0
- package/esm2020/models/team.mjs +46 -0
- package/esm2020/models/teams-and-users.mjs +20 -0
- package/esm2020/models/tournament-disqualification.mjs +14 -0
- package/esm2020/models/tournament-division.mjs +14 -0
- package/esm2020/models/tournament-event.mjs +28 -0
- package/esm2020/models/tournament-group.mjs +9 -0
- package/esm2020/models/tournament-invite.mjs +21 -0
- package/esm2020/models/tournament-join-team.mjs +27 -0
- package/esm2020/models/tournament-join1x1-data.mjs +15 -0
- package/esm2020/models/tournament-news.mjs +17 -0
- package/esm2020/models/tournament-round-team.mjs +40 -0
- package/esm2020/models/tournament-round.mjs +22 -0
- package/esm2020/models/tournament-season.mjs +25 -0
- package/esm2020/models/tournament-stage-team.mjs +22 -0
- package/esm2020/models/tournament-stage.mjs +20 -0
- package/esm2020/models/tournament-team-user-invite.mjs +14 -0
- package/esm2020/models/tournament-team-user.mjs +20 -0
- package/esm2020/models/tournament-team.mjs +28 -0
- package/esm2020/models/tournament.mjs +153 -0
- package/esm2020/models/user-access.mjs +9 -0
- package/esm2020/models/user-permission.mjs +23 -0
- package/esm2020/models/user-profile.mjs +9 -0
- package/esm2020/models/user.mjs +55 -0
- package/esm2020/models/util.mjs +143 -0
- package/esm2020/models/volleyball-game-config.mjs +27 -0
- package/esm2020/models/volleyball-game-log.mjs +124 -0
- package/esm2020/models/volleyball-game-statistic.mjs +34 -0
- package/esm2020/models/volleyball-game-team-statistic.mjs +15 -0
- package/esm2020/models/volleyball-profile.mjs +27 -0
- package/esm2020/models/volleyball-statistic.mjs +44 -0
- package/esm2020/models/waterpolo-game-config.mjs +25 -0
- package/esm2020/models/waterpolo-game-log.mjs +142 -0
- package/esm2020/models/waterpolo-game-statistic.mjs +472 -0
- package/esm2020/models/waterpolo-game-team-statistic.mjs +15 -0
- package/esm2020/models/waterpolo-profile.mjs +26 -0
- package/esm2020/models/waterpolo-statistic.mjs +57 -0
- package/{esm2015/mtgame-core.js → esm2020/mtgame-core.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -1
- package/esm2020/services/base.controller.mjs +19 -0
- package/esm2020/services/base.service.mjs +18 -0
- package/esm2020/services/centrifugo.service.mjs +105 -0
- package/esm2020/services/config.service.mjs +44 -0
- package/{esm2015/services/public-api.js → esm2020/services/public-api.mjs} +2 -1
- package/esm2020/storage/local-storage-engine.mjs +18 -0
- package/esm2020/storage/new.mjs +46 -0
- package/esm2020/storage/old-local-storage-engine.mjs +18 -0
- package/esm2020/storage/old-storage-engine.mjs +49 -0
- package/esm2020/storage/public-api.mjs +7 -0
- package/esm2020/storage/storage-engine.mjs +47 -0
- package/{esm2015/storage/store.js → esm2020/storage/store.mjs} +1 -1
- package/{esm2015/utils/array.js → esm2020/utils/array.mjs} +0 -0
- package/esm2020/utils/component-destroyed.mjs +27 -0
- package/{esm2015/utils/cookie.js → esm2020/utils/cookie.mjs} +0 -0
- package/esm2020/utils/data.mjs +164 -0
- package/{esm2015/utils/date.js → esm2020/utils/date.mjs} +0 -0
- package/{esm2015/utils/device.js → esm2020/utils/device.mjs} +0 -0
- package/{esm2015/utils/enum.js → esm2020/utils/enum.mjs} +0 -0
- package/{esm2015/utils/errors.js → esm2020/utils/errors.mjs} +2 -4
- package/{esm2015/utils/favicon.js → esm2020/utils/favicon.mjs} +0 -0
- package/{esm2015/utils/form.js → esm2020/utils/form.mjs} +0 -0
- package/{esm2015/utils/public-api.js → esm2020/utils/public-api.mjs} +0 -0
- package/{esm2015/utils/validators.js → esm2020/utils/validators.mjs} +0 -0
- package/esm2020/websocket/game.websocket.mjs +61 -0
- package/esm2020/websocket/public-api.mjs +2 -0
- package/fesm2015/{mtgame-core.js → mtgame-core.mjs} +1665 -4848
- package/fesm2015/mtgame-core.mjs.map +1 -0
- package/fesm2020/mtgame-core.mjs +7270 -0
- package/fesm2020/mtgame-core.mjs.map +1 -0
- package/http-cookie.interceptor.d.ts +3 -0
- package/localization/basketball-game-sub-log-types.d.ts +0 -3
- package/localization/football-game-log-types.d.ts +29 -29
- package/localization/hockey-game-log-types.d.ts +0 -3
- package/localization/hockey-penalty-types.d.ts +2 -5
- package/models/achievement.d.ts +0 -2
- package/models/base-statistic.d.ts +2 -1
- package/models/basketball-game-config.d.ts +2 -4
- package/models/basketball-game-log.d.ts +2 -9
- package/models/basketball-game-statistic.d.ts +1 -4
- package/models/basketball-game-team-statistic.d.ts +0 -2
- package/models/basketball-profile.d.ts +0 -2
- package/models/basketball-statistic.d.ts +1 -4
- package/models/city.d.ts +0 -2
- package/models/feedback.d.ts +2 -3
- package/models/file.d.ts +2 -3
- package/models/football-game-config.d.ts +2 -4
- package/models/football-game-log.d.ts +30 -33
- package/models/football-game-statistic.d.ts +1 -4
- package/models/football-game-team-statistic.d.ts +0 -2
- package/models/football-profile.d.ts +0 -2
- package/models/football-statistic.d.ts +1 -4
- package/models/game-bill.d.ts +0 -2
- package/models/game-config-base.d.ts +3 -0
- package/models/game-invite.d.ts +0 -2
- package/models/game-log-base.d.ts +3 -2
- package/models/game-statistic-base.d.ts +3 -1
- package/models/game-timeline-stages.d.ts +1 -5
- package/models/game-user-disqualification.d.ts +0 -2
- package/models/game-user-limitation.d.ts +0 -4
- package/models/game-user.d.ts +0 -2
- package/models/game.d.ts +10 -21
- package/models/handball-game-config.d.ts +2 -4
- package/models/handball-game-log.d.ts +1 -4
- package/models/handball-game-statistic.d.ts +1 -4
- package/models/handball-game-team-statistic.d.ts +0 -2
- package/models/handball-profile.d.ts +0 -2
- package/models/handball-statistic.d.ts +1 -4
- package/models/hockey-game-config.d.ts +2 -4
- package/models/hockey-game-log.d.ts +4 -15
- package/models/hockey-game-statistic.d.ts +1 -18
- package/models/hockey-game-team-statistic.d.ts +0 -2
- package/models/hockey-penalty-types.d.ts +7 -0
- package/models/hockey-profile.d.ts +0 -2
- package/models/hockey-statistic.d.ts +1 -18
- package/models/league-banner.d.ts +0 -2
- package/models/league-court.d.ts +0 -2
- package/models/league-document.d.ts +0 -2
- package/models/league-news.d.ts +0 -2
- package/models/league-partner.d.ts +0 -2
- package/models/league-player.d.ts +2 -13
- package/models/league-playlist.d.ts +0 -2
- package/models/league-user.d.ts +0 -2
- package/models/league.d.ts +1 -6
- package/models/media-item.d.ts +0 -2
- package/models/notification-settings.d.ts +0 -2
- package/models/notification.d.ts +0 -2
- package/models/organization-bill.d.ts +0 -2
- package/models/organization-statistic.d.ts +0 -2
- package/models/organization-tariff.d.ts +0 -2
- package/models/organization.d.ts +0 -2
- package/models/playoff.d.ts +0 -4
- package/models/poll.d.ts +0 -6
- package/models/public-api.d.ts +0 -6
- package/models/rugby-foul-type.d.ts +0 -2
- package/models/rugby-game-config.d.ts +2 -4
- package/models/rugby-game-log.d.ts +1 -4
- package/models/rugby-game-statistic.d.ts +7 -10
- package/models/rugby-game-team-statistic.d.ts +0 -2
- package/models/rugby-profile.d.ts +0 -2
- package/models/rugby-statistic.d.ts +1 -4
- package/models/season-tournament.d.ts +0 -2
- package/models/sport.d.ts +0 -2
- package/models/team-access.d.ts +0 -2
- package/models/team-achievement.d.ts +0 -2
- package/models/team-event-invite.d.ts +2 -3
- package/models/team-event.d.ts +0 -2
- package/models/team-invite-external.d.ts +0 -2
- package/models/team-invite.d.ts +0 -2
- package/models/team-permission.d.ts +0 -2
- package/models/team-user.d.ts +0 -2
- package/models/team.d.ts +0 -2
- package/models/teams-and-users.d.ts +0 -2
- package/models/tournament-disqualification.d.ts +0 -2
- package/models/tournament-division.d.ts +0 -2
- package/models/tournament-event.d.ts +0 -2
- package/models/tournament-group.d.ts +0 -2
- package/models/tournament-invite.d.ts +0 -2
- package/models/tournament-join-team.d.ts +0 -4
- package/models/tournament-join1x1-data.d.ts +0 -2
- package/models/tournament-news.d.ts +0 -2
- package/models/tournament-round-team.d.ts +4 -14
- package/models/tournament-round.d.ts +0 -2
- package/models/tournament-season.d.ts +0 -2
- package/models/tournament-stage-team.d.ts +0 -2
- package/models/tournament-stage.d.ts +0 -2
- package/models/tournament-team-user-invite.d.ts +0 -2
- package/models/tournament-team-user.d.ts +0 -5
- package/models/tournament-team.d.ts +0 -16
- package/models/tournament.d.ts +5 -21
- package/models/user-access.d.ts +0 -2
- package/models/user-permission.d.ts +0 -2
- package/models/user-profile.d.ts +2 -3
- package/models/user.d.ts +2 -6
- package/models/util.d.ts +22 -46
- package/models/volleyball-game-config.d.ts +2 -4
- package/models/volleyball-game-log.d.ts +1 -4
- package/models/volleyball-game-statistic.d.ts +1 -4
- package/models/volleyball-game-team-statistic.d.ts +0 -2
- package/models/volleyball-profile.d.ts +0 -2
- package/models/volleyball-statistic.d.ts +1 -4
- package/models/waterpolo-game-config.d.ts +2 -4
- package/models/waterpolo-game-log.d.ts +1 -4
- package/models/waterpolo-game-statistic.d.ts +1 -4
- package/models/waterpolo-game-team-statistic.d.ts +0 -2
- package/models/waterpolo-profile.d.ts +0 -2
- package/models/waterpolo-statistic.d.ts +1 -4
- package/mtgame-core.d.ts +1 -0
- package/package.json +23 -10
- package/public-api.d.ts +1 -0
- package/services/base.controller.d.ts +12 -0
- package/services/base.service.d.ts +3 -0
- package/services/centrifugo.service.d.ts +6 -4
- package/services/config.service.d.ts +3 -0
- package/services/public-api.d.ts +1 -0
- package/storage/local-storage-engine.d.ts +2 -2
- package/storage/new.d.ts +17 -0
- package/storage/old-local-storage-engine.d.ts +6 -0
- package/storage/old-storage-engine.d.ts +24 -0
- package/storage/public-api.d.ts +5 -2
- package/storage/storage-engine.d.ts +25 -18
- package/storage/store.d.ts +3 -3
- package/utils/component-destroyed.d.ts +1 -1
- package/utils/data.d.ts +36 -6
- package/websocket/game.websocket.d.ts +24 -0
- package/websocket/public-api.d.ts +1 -0
- package/bundles/mtgame-core.umd.js +0 -14010
- package/bundles/mtgame-core.umd.js.map +0 -1
- package/esm2015/api/basketball-game-api.js +0 -61
- package/esm2015/api/feedback-api.js +0 -38
- package/esm2015/api/file-api.js +0 -49
- package/esm2015/api/football-game-api.js +0 -65
- package/esm2015/api/game-base-api.js +0 -54
- package/esm2015/api/handball-game-api.js +0 -65
- package/esm2015/api/hockey-game-api.js +0 -65
- package/esm2015/api/league-api.js +0 -151
- package/esm2015/api/league-news-api.js +0 -71
- package/esm2015/api/league-player-api.js +0 -34
- package/esm2015/api/media-api.js +0 -131
- package/esm2015/api/notification-api.js +0 -16
- package/esm2015/api/notification-base-api.js +0 -82
- package/esm2015/api/org-notification-api.js +0 -16
- package/esm2015/api/public-team-api.js +0 -41
- package/esm2015/api/public-user-api.js +0 -41
- package/esm2015/api/reference-api.js +0 -39
- package/esm2015/api/rugby-game-api.js +0 -63
- package/esm2015/api/team-api.js +0 -393
- package/esm2015/api/team-event-api.js +0 -80
- package/esm2015/api/tournament-api.js +0 -471
- package/esm2015/api/tournament-join-api.js +0 -72
- package/esm2015/api/tournament-round-api.js +0 -71
- package/esm2015/api/tournament-season-api.js +0 -112
- package/esm2015/api/tournament-stage-api.js +0 -63
- package/esm2015/api/user-api.js +0 -283
- package/esm2015/api/volleyball-game-api.js +0 -73
- package/esm2015/api/waterpolo-game-api.js +0 -65
- package/esm2015/http-cookie.interceptor.js +0 -37
- package/esm2015/localization/hockey-penalty-types.js +0 -50
- package/esm2015/models/achievement.js +0 -33
- package/esm2015/models/base-statistic.js +0 -2
- package/esm2015/models/basketball-game-config.js +0 -41
- package/esm2015/models/basketball-game-log.js +0 -192
- package/esm2015/models/basketball-game-statistic.js +0 -81
- package/esm2015/models/basketball-game-team-statistic.js +0 -27
- package/esm2015/models/basketball-profile.js +0 -43
- package/esm2015/models/basketball-statistic.js +0 -114
- package/esm2015/models/city.js +0 -22
- package/esm2015/models/feedback.js +0 -34
- package/esm2015/models/file.js +0 -54
- package/esm2015/models/football-game-config.js +0 -44
- package/esm2015/models/football-game-log.js +0 -104
- package/esm2015/models/football-game-statistic.js +0 -137
- package/esm2015/models/football-game-team-statistic.js +0 -27
- package/esm2015/models/football-profile.js +0 -43
- package/esm2015/models/football-statistic.js +0 -150
- package/esm2015/models/game-bill.js +0 -47
- package/esm2015/models/game-invite.js +0 -37
- package/esm2015/models/game-log-base.js +0 -2
- package/esm2015/models/game-statistic-base.js +0 -2
- package/esm2015/models/game-timeline-stages.js +0 -53
- package/esm2015/models/game-user-disqualification.js +0 -28
- package/esm2015/models/game-user-limitation.js +0 -51
- package/esm2015/models/game-user.js +0 -37
- package/esm2015/models/game.js +0 -281
- package/esm2015/models/handball-game-config.js +0 -34
- package/esm2015/models/handball-game-log.js +0 -92
- package/esm2015/models/handball-game-statistic.js +0 -101
- package/esm2015/models/handball-game-team-statistic.js +0 -27
- package/esm2015/models/handball-profile.js +0 -39
- package/esm2015/models/handball-statistic.js +0 -95
- package/esm2015/models/hockey-game-config.js +0 -48
- package/esm2015/models/hockey-game-log.js +0 -128
- package/esm2015/models/hockey-game-statistic.js +0 -159
- package/esm2015/models/hockey-game-team-statistic.js +0 -27
- package/esm2015/models/hockey-profile.js +0 -41
- package/esm2015/models/hockey-statistic.js +0 -143
- package/esm2015/models/league-banner.js +0 -39
- package/esm2015/models/league-court.js +0 -25
- package/esm2015/models/league-document.js +0 -26
- package/esm2015/models/league-field-base-value.js +0 -4
- package/esm2015/models/league-field-base.js +0 -25
- package/esm2015/models/league-news.js +0 -50
- package/esm2015/models/league-partner.js +0 -29
- package/esm2015/models/league-player-field-value.js +0 -32
- package/esm2015/models/league-player-field.js +0 -30
- package/esm2015/models/league-player.js +0 -116
- package/esm2015/models/league-playlist.js +0 -28
- package/esm2015/models/league-team-field.js +0 -30
- package/esm2015/models/league-user.js +0 -52
- package/esm2015/models/league.js +0 -71
- package/esm2015/models/media-item.js +0 -41
- package/esm2015/models/notification-settings.js +0 -35
- package/esm2015/models/notification.js +0 -134
- package/esm2015/models/organization-bill.js +0 -50
- package/esm2015/models/organization-statistic.js +0 -26
- package/esm2015/models/organization-tariff.js +0 -30
- package/esm2015/models/organization.js +0 -40
- package/esm2015/models/playoff.js +0 -91
- package/esm2015/models/poll.js +0 -132
- package/esm2015/models/public-api.js +0 -116
- package/esm2015/models/rugby-foul-type.js +0 -53
- package/esm2015/models/rugby-game-config.js +0 -42
- package/esm2015/models/rugby-game-log.js +0 -144
- package/esm2015/models/rugby-game-statistic.js +0 -89
- package/esm2015/models/rugby-game-team-statistic.js +0 -27
- package/esm2015/models/rugby-profile.js +0 -37
- package/esm2015/models/rugby-statistic.js +0 -123
- package/esm2015/models/season-tournament.js +0 -22
- package/esm2015/models/sport.js +0 -115
- package/esm2015/models/team-access.js +0 -45
- package/esm2015/models/team-achievement.js +0 -34
- package/esm2015/models/team-event-invite.js +0 -32
- package/esm2015/models/team-event.js +0 -45
- package/esm2015/models/team-invite-external.js +0 -25
- package/esm2015/models/team-invite.js +0 -41
- package/esm2015/models/team-permission.js +0 -38
- package/esm2015/models/team-user.js +0 -48
- package/esm2015/models/team.js +0 -71
- package/esm2015/models/teams-and-users.js +0 -32
- package/esm2015/models/tournament-disqualification.js +0 -30
- package/esm2015/models/tournament-division.js +0 -27
- package/esm2015/models/tournament-event.js +0 -45
- package/esm2015/models/tournament-group.js +0 -26
- package/esm2015/models/tournament-invite.js +0 -39
- package/esm2015/models/tournament-join-team.js +0 -55
- package/esm2015/models/tournament-join1x1-data.js +0 -32
- package/esm2015/models/tournament-news.js +0 -33
- package/esm2015/models/tournament-round-team.js +0 -95
- package/esm2015/models/tournament-round.js +0 -36
- package/esm2015/models/tournament-season.js +0 -45
- package/esm2015/models/tournament-stage-team.js +0 -47
- package/esm2015/models/tournament-stage.js +0 -35
- package/esm2015/models/tournament-team-field-value.js +0 -32
- package/esm2015/models/tournament-team-user-invite.js +0 -29
- package/esm2015/models/tournament-team-user.js +0 -39
- package/esm2015/models/tournament-team.js +0 -103
- package/esm2015/models/tournament.js +0 -266
- package/esm2015/models/user-access.js +0 -25
- package/esm2015/models/user-permission.js +0 -38
- package/esm2015/models/user-profile.js +0 -24
- package/esm2015/models/user.js +0 -91
- package/esm2015/models/util.js +0 -237
- package/esm2015/models/volleyball-game-config.js +0 -44
- package/esm2015/models/volleyball-game-log.js +0 -145
- package/esm2015/models/volleyball-game-statistic.js +0 -64
- package/esm2015/models/volleyball-game-team-statistic.js +0 -27
- package/esm2015/models/volleyball-profile.js +0 -43
- package/esm2015/models/volleyball-statistic.js +0 -92
- package/esm2015/models/waterpolo-game-config.js +0 -45
- package/esm2015/models/waterpolo-game-log.js +0 -167
- package/esm2015/models/waterpolo-game-statistic.js +0 -641
- package/esm2015/models/waterpolo-game-team-statistic.js +0 -27
- package/esm2015/models/waterpolo-profile.js +0 -42
- package/esm2015/models/waterpolo-statistic.js +0 -336
- package/esm2015/services/base.service.js +0 -16
- package/esm2015/services/centrifugo.service.js +0 -123
- package/esm2015/services/config.service.js +0 -37
- package/esm2015/storage/local-storage-engine.js +0 -18
- package/esm2015/storage/public-api.js +0 -4
- package/esm2015/storage/storage-engine.js +0 -61
- package/esm2015/utils/component-destroyed.js +0 -26
- package/esm2015/utils/data.js +0 -75
- package/fesm2015/mtgame-core.js.map +0 -1
- package/models/league-field-base-value.d.ts +0 -7
- package/models/league-field-base.d.ts +0 -24
- package/models/league-player-field-value.d.ts +0 -8
- package/models/league-player-field.d.ts +0 -5
- package/models/league-team-field.d.ts +0 -5
- package/models/tournament-team-field-value.d.ts +0 -8
- package/mtgame-core.metadata.json +0 -1
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
4
|
-
import { Tournament } from '../models/tournament';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
6
|
-
import { TournamentNews } from '../models/tournament-news';
|
|
7
|
-
import { Game, GameStatuses } from '../models/game';
|
|
8
|
-
import { GameTimelineStages } from '../models/game-timeline-stages';
|
|
9
|
-
import { TournamentTeam } from '../models/tournament-team';
|
|
10
|
-
import { TournamentStage } from '../models/tournament-stage';
|
|
11
|
-
import { Playoff } from '../models/playoff';
|
|
12
|
-
import { BasketballStatistic } from '../models/basketball-statistic';
|
|
13
|
-
import { VolleyballStatistic } from '../models/volleyball-statistic';
|
|
14
|
-
import { TournamentTeamUser } from '../models/tournament-team-user';
|
|
15
|
-
import { TournamentStageTeam } from '../models/tournament-stage-team';
|
|
16
|
-
import { TournamentEvent, TournamentEventTypes } from '../models/tournament-event';
|
|
17
|
-
import { ConfigService } from '../services/config.service';
|
|
18
|
-
import { HockeyStatistic } from '../models/hockey-statistic';
|
|
19
|
-
import { FootballStatistic } from '../models/football-statistic';
|
|
20
|
-
import { LeagueUserPermissions } from '../models/league-user';
|
|
21
|
-
import { HandballStatistic } from '../models/handball-statistic';
|
|
22
|
-
import { RugbyStatistic } from '../models/rugby-statistic';
|
|
23
|
-
import { TournamentGroup } from '../models/tournament-group';
|
|
24
|
-
import { TeamAchievement } from '../models/team-achievement';
|
|
25
|
-
import { WaterpoloStatistic } from '../models/waterpolo-statistic';
|
|
26
|
-
import { TournamentRound } from '../models/tournament-round';
|
|
27
|
-
import { TournamentDivision } from '../models/tournament-division';
|
|
28
|
-
import * as i0 from "@angular/core";
|
|
29
|
-
import * as i1 from "@angular/common/http";
|
|
30
|
-
import * as i2 from "../services/config.service";
|
|
31
|
-
export class TournamentApi {
|
|
32
|
-
constructor(httpClient, configService) {
|
|
33
|
-
this.httpClient = httpClient;
|
|
34
|
-
this.configService = configService;
|
|
35
|
-
}
|
|
36
|
-
getById(tournamentId) {
|
|
37
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/`)
|
|
39
|
-
.pipe(map(result => Tournament.toFront(result)))
|
|
40
|
-
.toPromise();
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
getByAlias(leagueId, alias) {
|
|
44
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/league/${leagueId}/tournaments/${alias}/`)
|
|
46
|
-
.pipe(map(result => Tournament.toFront(result)))
|
|
47
|
-
.toPromise();
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
getSeasonTournaments(seasonTournamentId) {
|
|
51
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/season_tournament/${seasonTournamentId}/tournaments/`)
|
|
53
|
-
.pipe(map(result => Tournament.toFront(result)))
|
|
54
|
-
.toPromise();
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
getNews(tournamentId) {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/news/`)
|
|
60
|
-
.pipe(map(result => TournamentNews.toFront(result)))
|
|
61
|
-
.toPromise();
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
getEvents(tournamentId, page, size, filters) {
|
|
65
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
let params = new HttpParams().set('page', page.toString())
|
|
67
|
-
.set('size', size.toString());
|
|
68
|
-
if (filters) {
|
|
69
|
-
if (filters.event) {
|
|
70
|
-
params = params.set('event', TournamentEventTypes[filters.event]);
|
|
71
|
-
}
|
|
72
|
-
if (filters.search) {
|
|
73
|
-
params = params.set('search', filters.search);
|
|
74
|
-
}
|
|
75
|
-
if (filters.tournamentTour) {
|
|
76
|
-
params = params.set('tournament_tour', filters.tournamentTour.toString());
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/events/`, { params, observe: 'response' })
|
|
80
|
-
.pipe(map(result => ({
|
|
81
|
-
total: +result.headers.get('X-Page-Count'),
|
|
82
|
-
data: TournamentEvent.toFront(result.body)
|
|
83
|
-
})))
|
|
84
|
-
.toPromise();
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
getTournamentStages(tournamentId) {
|
|
88
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/stages/`).pipe(map(data => TournamentStage.toFront(data))).toPromise();
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
getTournamentRounds(tournamentId) {
|
|
93
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/rounds/`).pipe(map(data => TournamentRound.toFront(data))).toPromise();
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
getTournamentDivisions(tournamentId) {
|
|
98
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/divisions/`).pipe(map(data => TournamentDivision.toFront(data))).toPromise();
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
getPlayoff(tournamentId) {
|
|
103
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/playoff/`).pipe(map(result => Playoff.toFront(result))).toPromise();
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
getPlayoffGames(playoffId, playoffNumber) {
|
|
108
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
let params = new HttpParams();
|
|
110
|
-
if (playoffNumber) {
|
|
111
|
-
params = params.set('playoff_number', playoffNumber);
|
|
112
|
-
}
|
|
113
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_playoff/${playoffId}/games/`, { params }).pipe(map(result => Game.toFront(result))).toPromise();
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
getGamesStages(tournamentId, roundId) {
|
|
117
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
-
let params = new HttpParams();
|
|
119
|
-
if (roundId) {
|
|
120
|
-
params = params.set('tournament_round_id', roundId.toString());
|
|
121
|
-
}
|
|
122
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/games_stages/`, { params })
|
|
123
|
-
.pipe(map(data => GameTimelineStages.toFront(data)))
|
|
124
|
-
.toPromise();
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
getGames(tournamentId, page, size, filters = {}) {
|
|
128
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
let params = new HttpParams().set('page', page.toString());
|
|
130
|
-
if (size) {
|
|
131
|
-
params = params.set('size', size.toString());
|
|
132
|
-
}
|
|
133
|
-
params = applyGamesFilters(filters, params);
|
|
134
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/games/`, { params, observe: 'response' })
|
|
135
|
-
.pipe(map(result => ({
|
|
136
|
-
total: +result.headers.get('X-Page-Count'),
|
|
137
|
-
data: Game.toFront(result.body)
|
|
138
|
-
}))).toPromise();
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
getGamesDates(tournamentId) {
|
|
142
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/games_dates/`, { observe: 'response' }).pipe(map(result => ({
|
|
144
|
-
total: +result.headers.get('X-Page-Count'),
|
|
145
|
-
data: result.body
|
|
146
|
-
}))).toPromise();
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
getGroups(tournamentId) {
|
|
150
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
151
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/groups/`)
|
|
152
|
-
.pipe(map(result => TournamentGroup.toFront(result)))
|
|
153
|
-
.toPromise();
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
getTeams(tournamentId, groupId, short) {
|
|
157
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
-
let params = new HttpParams();
|
|
159
|
-
if (groupId) {
|
|
160
|
-
params = params.set('group_id', groupId.toString());
|
|
161
|
-
}
|
|
162
|
-
if (short) {
|
|
163
|
-
params = params.set('short', '1');
|
|
164
|
-
}
|
|
165
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/teams/`, { params })
|
|
166
|
-
.pipe(map(result => TournamentTeam.toFront(result)))
|
|
167
|
-
.toPromise();
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
getStageTeams(tournamentId) {
|
|
171
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/stage_teams/`)
|
|
173
|
-
.pipe(map(result => TournamentStageTeam.toFront(result)))
|
|
174
|
-
.toPromise();
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
getTeamsAchievements(tournamentId) {
|
|
178
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
179
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/achievements/`)
|
|
180
|
-
.pipe(map(result => TeamAchievement.toFront(result)))
|
|
181
|
-
.toPromise();
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
getTeamById(tournamentTeamId) {
|
|
185
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
186
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_team/${tournamentTeamId}/`)
|
|
187
|
-
.pipe(map(result => TournamentTeam.toFront(result)))
|
|
188
|
-
.toPromise();
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
getUserById(userId) {
|
|
192
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_team_user/${userId}/`)
|
|
194
|
-
.pipe(map(result => TournamentTeamUser.toFront(result)))
|
|
195
|
-
.toPromise();
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
getUserGames(tournamentUserId) {
|
|
199
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
200
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_team_user/${tournamentUserId}/games/`)
|
|
201
|
-
.pipe(map(result => Game.toFront(result)))
|
|
202
|
-
.toPromise();
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
downloadTable(tournamentId, format, isChess) {
|
|
206
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
-
let httpParams = new HttpParams().set('file_type', format);
|
|
208
|
-
if (isChess) {
|
|
209
|
-
httpParams = httpParams.set('isChess', true);
|
|
210
|
-
}
|
|
211
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/table_file/`, {
|
|
212
|
-
params: httpParams,
|
|
213
|
-
responseType: 'blob'
|
|
214
|
-
}).toPromise();
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
getBasketballStatisticLeaders(filters) {
|
|
218
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
-
let params = new HttpParams();
|
|
220
|
-
params = applyStatisticLeadersFilters(filters, params);
|
|
221
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/basketball_statistic_leaders/`, { params }).pipe(map((result) => {
|
|
222
|
-
for (const key of Object.keys(result)) {
|
|
223
|
-
result[key] = BasketballStatistic.toFront(result[key]);
|
|
224
|
-
}
|
|
225
|
-
return result;
|
|
226
|
-
})).toPromise();
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
getVolleyballStatisticLeaders(filters) {
|
|
230
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
231
|
-
let params = new HttpParams();
|
|
232
|
-
params = applyStatisticLeadersFilters(filters, params);
|
|
233
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/volleyball_statistic_leaders/`, { params }).pipe(map((result) => {
|
|
234
|
-
for (const key of Object.keys(result)) {
|
|
235
|
-
result[key] = VolleyballStatistic.toFront(result[key]);
|
|
236
|
-
}
|
|
237
|
-
return result;
|
|
238
|
-
})).toPromise();
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
getHockeyStatisticLeaders(filters) {
|
|
242
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
243
|
-
let params = new HttpParams();
|
|
244
|
-
params = applyStatisticLeadersFilters(filters, params);
|
|
245
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/hockey_statistic_leaders/`, { params }).pipe(map((result) => {
|
|
246
|
-
for (const key of Object.keys(result)) {
|
|
247
|
-
result[key] = HockeyStatistic.toFront(result[key]);
|
|
248
|
-
}
|
|
249
|
-
return result;
|
|
250
|
-
})).toPromise();
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
getFootballStatisticLeaders(filters) {
|
|
254
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
255
|
-
let params = new HttpParams();
|
|
256
|
-
params = applyStatisticLeadersFilters(filters, params);
|
|
257
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/football_statistic_leaders/`, { params }).pipe(map((result) => {
|
|
258
|
-
for (const key of Object.keys(result)) {
|
|
259
|
-
result[key] = FootballStatistic.toFront(result[key]);
|
|
260
|
-
}
|
|
261
|
-
return result;
|
|
262
|
-
})).toPromise();
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
getHandballStatisticLeaders(filters) {
|
|
266
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
-
let params = new HttpParams();
|
|
268
|
-
params = applyStatisticLeadersFilters(filters, params);
|
|
269
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/handball_statistic_leaders/`, { params }).pipe(map((result) => {
|
|
270
|
-
for (const key of Object.keys(result)) {
|
|
271
|
-
result[key] = HandballStatistic.toFront(result[key]);
|
|
272
|
-
}
|
|
273
|
-
return result;
|
|
274
|
-
})).toPromise();
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
getWaterpoloStatisticLeaders(filters) {
|
|
278
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
279
|
-
let params = new HttpParams();
|
|
280
|
-
params = applyStatisticLeadersFilters(filters, params);
|
|
281
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/waterpolo_statistic_leaders/`, { params }).pipe(map((result) => {
|
|
282
|
-
for (const key of Object.keys(result)) {
|
|
283
|
-
result[key] = WaterpoloStatistic.toFront(result[key]);
|
|
284
|
-
}
|
|
285
|
-
return result;
|
|
286
|
-
})).toPromise();
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
getBasketballStatistic(filters) {
|
|
290
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
291
|
-
let params = new HttpParams();
|
|
292
|
-
params = applyStatisticFilters(filters, params);
|
|
293
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/basketball_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
294
|
-
total: +result.headers.get('X-Page-Count'),
|
|
295
|
-
data: BasketballStatistic.toFront(result.body)
|
|
296
|
-
}))).toPromise();
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
getVolleyballStatistic(filters) {
|
|
300
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
301
|
-
let params = new HttpParams();
|
|
302
|
-
params = applyStatisticFilters(filters, params);
|
|
303
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/volleyball_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
304
|
-
total: +result.headers.get('X-Page-Count'),
|
|
305
|
-
data: VolleyballStatistic.toFront(result.body)
|
|
306
|
-
}))).toPromise();
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
getHockeyStatistic(filters) {
|
|
310
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
let params = new HttpParams();
|
|
312
|
-
params = applyStatisticFilters(filters, params);
|
|
313
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/hockey_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
314
|
-
total: +result.headers.get('X-Page-Count'),
|
|
315
|
-
data: HockeyStatistic.toFront(result.body)
|
|
316
|
-
}))).toPromise();
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
getFootballStatistic(filters) {
|
|
320
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
321
|
-
let params = new HttpParams();
|
|
322
|
-
params = applyStatisticFilters(filters, params);
|
|
323
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/football_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
324
|
-
total: +result.headers.get('X-Page-Count'),
|
|
325
|
-
data: FootballStatistic.toFront(result.body)
|
|
326
|
-
}))).toPromise();
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
getHandballStatistic(filters) {
|
|
330
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
331
|
-
let params = new HttpParams();
|
|
332
|
-
params = applyStatisticFilters(filters, params);
|
|
333
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/handball_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
334
|
-
total: +result.headers.get('X-Page-Count'),
|
|
335
|
-
data: HandballStatistic.toFront(result.body)
|
|
336
|
-
}))).toPromise();
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
getRugbyStatistic(filters) {
|
|
340
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
341
|
-
let params = new HttpParams();
|
|
342
|
-
params = applyStatisticFilters(filters, params);
|
|
343
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/rugby_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
344
|
-
total: +result.headers.get('X-Page-Count'),
|
|
345
|
-
data: RugbyStatistic.toFront(result.body)
|
|
346
|
-
}))).toPromise();
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
getWaterpoloStatistic(filters) {
|
|
350
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
351
|
-
let params = new HttpParams();
|
|
352
|
-
params = applyStatisticFilters(filters, params);
|
|
353
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/waterpolo_statistic/`, { params, observe: 'response' }).pipe(map(result => ({
|
|
354
|
-
total: +result.headers.get('X-Page-Count'),
|
|
355
|
-
data: WaterpoloStatistic.toFront(result.body)
|
|
356
|
-
}))).toPromise();
|
|
357
|
-
});
|
|
358
|
-
}
|
|
359
|
-
getTournamentTeamUsers(tournamentTeamId) {
|
|
360
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
361
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_team/${tournamentTeamId}/users/`).pipe(map(result => TournamentTeamUser.toFront(result))).toPromise();
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
myPermission(tournamentId) {
|
|
365
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
366
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament/${tournamentId}/permission/`).pipe(map((data) => (data.permissions || []).map(item => LeagueUserPermissions[item]))).toPromise();
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
getTournamentTeamTournaments(tournamentTeamId) {
|
|
370
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
371
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_team/${tournamentTeamId}/tournaments/`).pipe(map(result => Tournament.toFront(result))).toPromise();
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
getTournamentUserTournaments(tournamentTeamUserId) {
|
|
375
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
376
|
-
return this.httpClient.get(`${this.configService.get('apiUrl')}/api/v1/tournament_team_user/${tournamentTeamUserId}/tournaments/`).pipe(map(result => Tournament.toFront(result))).toPromise();
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
TournamentApi.ɵprov = i0.ɵɵdefineInjectable({ factory: function TournamentApi_Factory() { return new TournamentApi(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ConfigService)); }, token: TournamentApi, providedIn: "root" });
|
|
381
|
-
TournamentApi.decorators = [
|
|
382
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
383
|
-
];
|
|
384
|
-
TournamentApi.ctorParameters = () => [
|
|
385
|
-
{ type: HttpClient },
|
|
386
|
-
{ type: ConfigService }
|
|
387
|
-
];
|
|
388
|
-
export function applyGamesFilters(filters, params) {
|
|
389
|
-
if (filters.tournamentIds) {
|
|
390
|
-
params = params.set('tournament_ids', filters.tournamentIds.join(','));
|
|
391
|
-
}
|
|
392
|
-
if (filters.tournamentStageId) {
|
|
393
|
-
params = params.set('tournament_stage_id', filters.tournamentStageId.toString());
|
|
394
|
-
}
|
|
395
|
-
if (filters.tournamentRoundId) {
|
|
396
|
-
params = params.set('tournament_round_id', filters.tournamentRoundId.toString());
|
|
397
|
-
}
|
|
398
|
-
if (filters.divisionId) {
|
|
399
|
-
params = params.set('division_id', filters.divisionId.toString());
|
|
400
|
-
}
|
|
401
|
-
if (filters.tournamentTour) {
|
|
402
|
-
params = params.set('tournament_tour', filters.tournamentTour.toString());
|
|
403
|
-
}
|
|
404
|
-
if (filters.playoffStage) {
|
|
405
|
-
params = params.set('playoff_stage', filters.playoffStage.toString());
|
|
406
|
-
}
|
|
407
|
-
if (filters.playoffRound) {
|
|
408
|
-
params = params.set('playoff_round', filters.playoffRound.toString());
|
|
409
|
-
}
|
|
410
|
-
if (filters.teamId) {
|
|
411
|
-
params = params.set('team_id', filters.teamId.toString());
|
|
412
|
-
}
|
|
413
|
-
if (filters.status) {
|
|
414
|
-
params = params.set('status', GameStatuses[filters.status]);
|
|
415
|
-
}
|
|
416
|
-
if (filters.statuses) {
|
|
417
|
-
const statuses = filters.statuses.map(i => GameStatuses[i]);
|
|
418
|
-
params = params.set('statuses', statuses.join(','));
|
|
419
|
-
}
|
|
420
|
-
if (filters.tournamentCourtId) {
|
|
421
|
-
params = params.set('tournament_court_id', filters.tournamentCourtId.toString());
|
|
422
|
-
}
|
|
423
|
-
if (filters.leaguePlayerId) {
|
|
424
|
-
params = params.set('league_player_id', filters.leaguePlayerId.toString());
|
|
425
|
-
}
|
|
426
|
-
if (filters.userId) {
|
|
427
|
-
params = params.set('user_id', filters.userId.toString());
|
|
428
|
-
}
|
|
429
|
-
if (filters.query) {
|
|
430
|
-
params = params.set('query', filters.query);
|
|
431
|
-
}
|
|
432
|
-
if (filters.isPlayoff !== undefined && filters.isPlayoff !== null) {
|
|
433
|
-
params = params.set('is_playoff', filters.isPlayoff ? '1' : '0');
|
|
434
|
-
}
|
|
435
|
-
return params;
|
|
436
|
-
}
|
|
437
|
-
export function applyStatisticFilters(filters, params) {
|
|
438
|
-
for (const key of Object.keys(filters)) {
|
|
439
|
-
if (filters[key]) {
|
|
440
|
-
params = params.set(key, filters[key]);
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
if (filters.per_game !== undefined) {
|
|
444
|
-
params = params.set('per_game', filters.per_game ? '1' : '0');
|
|
445
|
-
}
|
|
446
|
-
if (filters.tournament_ids) {
|
|
447
|
-
params = params.set('tournament_ids', filters.tournament_ids.join(','));
|
|
448
|
-
}
|
|
449
|
-
if (filters.is_playoff !== undefined && filters.is_playoff !== null) {
|
|
450
|
-
params = params.set('is_playoff', filters.is_playoff ? '1' : '0');
|
|
451
|
-
}
|
|
452
|
-
return params;
|
|
453
|
-
}
|
|
454
|
-
export function applyStatisticLeadersFilters(filters, params) {
|
|
455
|
-
for (const key of Object.keys(filters)) {
|
|
456
|
-
if (filters[key]) {
|
|
457
|
-
params = params.set(key, filters[key]);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
if (filters.per_game !== undefined) {
|
|
461
|
-
params = params.set('per_game', filters.per_game ? '1' : '0');
|
|
462
|
-
}
|
|
463
|
-
if (filters.tournament_ids) {
|
|
464
|
-
params = params.set('tournament_ids', filters.tournament_ids.join(','));
|
|
465
|
-
}
|
|
466
|
-
if (filters.fields) {
|
|
467
|
-
params = params.set('fields', filters.fields.join(','));
|
|
468
|
-
}
|
|
469
|
-
return params;
|
|
470
|
-
}
|
|
471
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91cm5hbWVudC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9hcGkvdG91cm5hbWVudC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxN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QUMsQ0FBQztLQUN6RTtJQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNsQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVG91cm5hbWVudCB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50JztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRvdXJuYW1lbnROZXdzIH0gZnJvbSAnLi4vbW9kZWxzL3RvdXJuYW1lbnQtbmV3cyc7XG5pbXBvcnQgeyBHYW1lLCBHYW1lU3RhdHVzZXMgfSBmcm9tICcuLi9tb2RlbHMvZ2FtZSc7XG5pbXBvcnQgeyBHYW1lVGltZWxpbmVTdGFnZXMgfSBmcm9tICcuLi9tb2RlbHMvZ2FtZS10aW1lbGluZS1zdGFnZXMnO1xuaW1wb3J0IHsgVG91cm5hbWVudFRlYW0gfSBmcm9tICcuLi9tb2RlbHMvdG91cm5hbWVudC10ZWFtJztcbmltcG9ydCB7IFRvdXJuYW1lbnRTdGFnZSB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50LXN0YWdlJztcbmltcG9ydCB7IFBsYXlvZmYgfSBmcm9tICcuLi9tb2RlbHMvcGxheW9mZic7XG5pbXBvcnQgeyBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4vcGFnaW5hdGVkLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYXNrZXRiYWxsU3RhdGlzdGljIH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2tldGJhbGwtc3RhdGlzdGljJztcbmltcG9ydCB7IFZvbGxleWJhbGxTdGF0aXN0aWMgfSBmcm9tICcuLi9tb2RlbHMvdm9sbGV5YmFsbC1zdGF0aXN0aWMnO1xuaW1wb3J0IHsgVG91cm5hbWVudFRlYW1Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RvdXJuYW1lbnQtdGVhbS11c2VyJztcbmltcG9ydCB7IFRvdXJuYW1lbnRTdGFnZVRlYW0gfSBmcm9tICcuLi9tb2RlbHMvdG91cm5hbWVudC1zdGFnZS10ZWFtJztcbmltcG9ydCB7IFRvdXJuYW1lbnRFdmVudCwgVG91cm5hbWVudEV2ZW50VHlwZXMgfSBmcm9tICcuLi9tb2RlbHMvdG91cm5hbWVudC1ldmVudCc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG9ja2V5U3RhdGlzdGljIH0gZnJvbSAnLi4vbW9kZWxzL2hvY2tleS1zdGF0aXN0aWMnO1xuaW1wb3J0IHsgRm9vdGJhbGxTdGF0aXN0aWMgfSBmcm9tICcuLi9tb2RlbHMvZm9vdGJhbGwtc3RhdGlzdGljJztcbmltcG9ydCB7IExlYWd1ZVVzZXJQZXJtaXNzaW9ucyB9IGZyb20gJy4uL21vZGVscy9sZWFndWUtdXNlcic7XG5pbXBvcnQgeyBIYW5kYmFsbFN0YXRpc3RpYyB9IGZyb20gJy4uL21vZGVscy9oYW5kYmFsbC1zdGF0aXN0aWMnO1xuaW1wb3J0IHsgUnVnYnlTdGF0aXN0aWMgfSBmcm9tICcuLi9tb2RlbHMvcnVnYnktc3RhdGlzdGljJztcbmltcG9ydCB7IFRvdXJuYW1lbnRHcm91cCB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50LWdyb3VwJztcbmltcG9ydCB7IFRlYW1BY2hpZXZlbWVudCB9IGZyb20gJy4uL21vZGVscy90ZWFtLWFjaGlldmVtZW50JztcbmltcG9ydCB7IFdhdGVycG9sb1N0YXRpc3RpYyB9IGZyb20gJy4uL21vZGVscy93YXRlcnBvbG8tc3RhdGlzdGljJztcbmltcG9ydCB7IFRvdXJuYW1lbnRSb3VuZCB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50LXJvdW5kJztcbmltcG9ydCB7IFRvdXJuYW1lbnREaXZpc2lvbiB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50LWRpdmlzaW9uJztcbmltcG9ydCB7IFVzZXJHZW5kZXIgfSBmcm9tICcuLi9tb2RlbHMvdXNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG91cm5hbWVudEdhbWVzRmlsdGVycyB7XG4gIHRvdXJuYW1lbnRJZHM/OiBudW1iZXJbXTtcbiAgdG91cm5hbWVudFNlYXNvbklkPzogbnVtYmVyO1xuICB0b3VybmFtZW50U3RhZ2VJZD86IG51bWJlcjtcbiAgdG91cm5hbWVudFJvdW5kSWQ/OiBudW1iZXI7XG4gIGRpdmlzaW9uSWQ/OiBudW1iZXI7XG4gIHRvdXJuYW1lbnRUb3VyPzogbnVtYmVyO1xuICB0ZWFtSWQ/OiBudW1iZXI7XG4gIHBsYXlvZmZTdGFnZT86IG51bWJlcjtcbiAgcGxheW9mZlJvdW5kPzogbnVtYmVyO1xuICBwbGF5b2ZmSWQ/OiBudW1iZXI7XG4gIGlzUGxheW9mZj86IGJvb2xlYW47XG4gIHN0YXR1cz86IEdhbWVTdGF0dXNlcztcbiAgc3RhdHVzZXM/OiBHYW1lU3RhdHVzZXNbXTtcbiAgdG91cm5hbWVudENvdXJ0SWQ/OiBudW1iZXI7XG4gIGxlYWd1ZVBsYXllcklkPzogbnVtYmVyO1xuICB1c2VySWQ/OiBudW1iZXI7XG4gIHF1ZXJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdGF0aXN0aWNHcm91cEJ5VHlwZXMgPSAndGVhbScgfCAndXNlcicgfCAndGVhbV91c2VyJyB8ICd0b3VybmFtZW50X3RlYW0nIHwgJ2xlYWd1ZV9wbGF5ZXInIHwgJ3RvdXJuYW1lbnRfdGVhbV91c2VyJ1xuICB8ICdtb250aCcgfCAnd2luX2xvc2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aXN0aWNGaWx0ZXJzIHtcbiAgbGVhZ3VlX2lkPzogbnVtYmVyO1xuICB0b3VybmFtZW50X2lkPzogbnVtYmVyO1xuICB0b3VybmFtZW50X2lkcz86IG51bWJlcltdO1xuICB0b3VybmFtZW50X3NlYXNvbl9pZD86IG51bWJlcjtcbiAgdG91cm5hbWVudF90ZWFtX2lkPzogbnVtYmVyO1xuICBsZWFndWVfcGxheWVyX2lkPzogbnVtYmVyO1xuICB0b3VybmFtZW50X3RlYW1fdXNlcl9pZD86IG51bWJlcjtcbiAgdGVhbV9pZD86IG51bWJlcjtcbiAgdGVhbV91c2VyX2lkPzogbnVtYmVyO1xuICB1c2VyX2lkPzogbnVtYmVyO1xuICB0b3VybmFtZW50X3N0YWdlX2lkPzogbnVtYmVyO1xuICB0b3VybmFtZW50X3JvdW5kX2lkPzogbnVtYmVyO1xuICBkaXZpc2lvbl9pZD86IG51bWJlcjtcbiAgdG91cm5hbWVudF9ncm91cF9pZD86IG51bWJlcjtcbiAgdG91cm5hbWVudF90b3VyPzogbnVtYmVyO1xuICBwbGF5b2ZmX3N0YWdlPzogbnVtYmVyO1xuICBwbGF5b2ZmX3JvdW5kPzogbnVtYmVyO1xuICBwbGF5b2ZmX2lkPzogbnVtYmVyO1xuICBpc19wbGF5b2ZmPzogYm9vbGVhbjtcbiAgZGF0ZV9mcm9tPzogc3RyaW5nO1xuICBkYXRlX3RvPzogc3RyaW5nO1xuICBxdWVyeT86IHN0cmluZztcbiAgZ2VuZGVyPzogVXNlckdlbmRlcjtcbiAgcGVyX2dhbWU/OiBib29sZWFuO1xuICBncm91cF9ieTogU3RhdGlzdGljR3JvdXBCeVR5cGVzO1xuICBvcmRlcl9ieT86IHN0cmluZztcbiAgcGFnZT86IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aXN0aWNMZWFkZXJzRmlsdGVycyB7XG4gIHRvdXJuYW1lbnRfaWQ/OiBudW1iZXI7XG4gIHRvdXJuYW1lbnRfaWRzPzogbnVtYmVyW107XG4gIHRvdXJuYW1lbnRfc2Vhc29uX2lkPzogbnVtYmVyO1xuICB0b3VybmFtZW50X3RlYW1faWQ/OiBudW1iZXI7XG4gIHRlYW1faWQ/OiBudW1iZXI7XG4gIHRvdXJuYW1lbnRfc3RhZ2VfaWQ/OiBudW1iZXI7XG4gIHRvdXJuYW1lbnRfdG91cj86IG51bWJlcjtcbiAgcGxheW9mZl9zdGFnZT86IG51bWJlcjtcbiAgcGxheW9mZl9pZD86IG51bWJlcjtcbiAgZGF0ZV9mcm9tPzogc3RyaW5nO1xuICBkYXRlX3RvPzogc3RyaW5nO1xuICBwZXJfZ2FtZT86IGJvb2xlYW47XG4gIGdyb3VwX2J5OiBTdGF0aXN0aWNHcm91cEJ5VHlwZXM7XG4gIHNpemU/OiBudW1iZXI7XG4gIGZpZWxkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG91cm5hbWVudEV2ZW50c0xpc3RGaWx0ZXIge1xuICBldmVudD86IFRvdXJuYW1lbnRFdmVudFR5cGVzO1xuICBzZWFyY2g/OiBzdHJpbmc7XG4gIHRvdXJuYW1lbnRUb3VyPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBUb3VybmFtZW50QXBpIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBhc3luYyBnZXRCeUlkKHRvdXJuYW1lbnRJZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS9gKVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiBUb3VybmFtZW50LnRvRnJvbnQocmVzdWx0KSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRCeUFsaWFzKGxlYWd1ZUlkOiBudW1iZXIsIGFsaWFzOiBzdHJpbmcpOiBQcm9taXNlPFRvdXJuYW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2xlYWd1ZS8ke2xlYWd1ZUlkfS90b3VybmFtZW50cy8ke2FsaWFzfS9gKVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiBUb3VybmFtZW50LnRvRnJvbnQocmVzdWx0KSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRTZWFzb25Ub3VybmFtZW50cyhzZWFzb25Ub3VybmFtZW50SWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9zZWFzb25fdG91cm5hbWVudC8ke3NlYXNvblRvdXJuYW1lbnRJZH0vdG91cm5hbWVudHMvYClcbiAgICAgIC5waXBlKG1hcChyZXN1bHQgPT4gVG91cm5hbWVudC50b0Zyb250KHJlc3VsdCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV3cyh0b3VybmFtZW50SWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudE5ld3NbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudC8ke3RvdXJuYW1lbnRJZH0vbmV3cy9gKVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiBUb3VybmFtZW50TmV3cy50b0Zyb250KHJlc3VsdCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RXZlbnRzKHRvdXJuYW1lbnRJZDogbnVtYmVyLCBwYWdlOiBudW1iZXIsIHNpemU6IG51bWJlciwgZmlsdGVycz86IFRvdXJuYW1lbnRFdmVudHNMaXN0RmlsdGVyKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxUb3VybmFtZW50RXZlbnRbXT4+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3BhZ2UnLCBwYWdlLnRvU3RyaW5nKCkpXG4gICAgICAuc2V0KCdzaXplJywgc2l6ZS50b1N0cmluZygpKTtcbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgaWYgKGZpbHRlcnMuZXZlbnQpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZXZlbnQnLCBUb3VybmFtZW50RXZlbnRUeXBlc1tmaWx0ZXJzLmV2ZW50XSk7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc2VhcmNoJywgZmlsdGVycy5zZWFyY2gpO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlcnMudG91cm5hbWVudFRvdXIpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndG91cm5hbWVudF90b3VyJywgZmlsdGVycy50b3VybmFtZW50VG91ci50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS9ldmVudHMvYCwge3BhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pXG4gICAgICAucGlwZShtYXAocmVzdWx0ID0+ICh7XG4gICAgICAgIHRvdGFsOiArcmVzdWx0LmhlYWRlcnMuZ2V0KCdYLVBhZ2UtQ291bnQnKSxcbiAgICAgICAgZGF0YTogVG91cm5hbWVudEV2ZW50LnRvRnJvbnQocmVzdWx0LmJvZHkpXG4gICAgICB9KSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50U3RhZ2VzKHRvdXJuYW1lbnRJZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50U3RhZ2VbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudC8ke3RvdXJuYW1lbnRJZH0vc3RhZ2VzL2ApLnBpcGUoXG4gICAgICBtYXAoZGF0YSA9PiBUb3VybmFtZW50U3RhZ2UudG9Gcm9udChkYXRhKSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG91cm5hbWVudFJvdW5kcyh0b3VybmFtZW50SWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudFJvdW5kW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RvdXJuYW1lbnQvJHt0b3VybmFtZW50SWR9L3JvdW5kcy9gKS5waXBlKFxuICAgICAgbWFwKGRhdGEgPT4gVG91cm5hbWVudFJvdW5kLnRvRnJvbnQoZGF0YSkpLFxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50RGl2aXNpb25zKHRvdXJuYW1lbnRJZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50RGl2aXNpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudC8ke3RvdXJuYW1lbnRJZH0vZGl2aXNpb25zL2ApLnBpcGUoXG4gICAgICBtYXAoZGF0YSA9PiBUb3VybmFtZW50RGl2aXNpb24udG9Gcm9udChkYXRhKSksXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBsYXlvZmYodG91cm5hbWVudElkOiBudW1iZXIpOiBQcm9taXNlPFBsYXlvZmZbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudC8ke3RvdXJuYW1lbnRJZH0vcGxheW9mZi9gKS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiBQbGF5b2ZmLnRvRnJvbnQocmVzdWx0KSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UGxheW9mZkdhbWVzKHBsYXlvZmZJZDogbnVtYmVyLCBwbGF5b2ZmTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxHYW1lW10+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocGxheW9mZk51bWJlcikge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGxheW9mZl9udW1iZXInLCBwbGF5b2ZmTnVtYmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50X3BsYXlvZmYvJHtwbGF5b2ZmSWR9L2dhbWVzL2AsXG4gICAgICB7cGFyYW1zfVxuICAgICkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4gR2FtZS50b0Zyb250KHJlc3VsdCkpXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEdhbWVzU3RhZ2VzKHRvdXJuYW1lbnRJZDogbnVtYmVyLCByb3VuZElkPzogbnVtYmVyKTogUHJvbWlzZTxHYW1lVGltZWxpbmVTdGFnZXM+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocm91bmRJZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndG91cm5hbWVudF9yb3VuZF9pZCcsIHJvdW5kSWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxuICAgICAgYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS9nYW1lc19zdGFnZXMvYCxcbiAgICAgIHtwYXJhbXN9XG4gICAgKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gR2FtZVRpbWVsaW5lU3RhZ2VzLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0R2FtZXModG91cm5hbWVudElkOiBudW1iZXIsIHBhZ2U6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBmaWx0ZXJzOiBUb3VybmFtZW50R2FtZXNGaWx0ZXJzID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPEdhbWVbXT4+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3BhZ2UnLCBwYWdlLnRvU3RyaW5nKCkpO1xuICAgIGlmIChzaXplKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdzaXplJywgc2l6ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcGFyYW1zID0gYXBwbHlHYW1lc0ZpbHRlcnMoZmlsdGVycywgcGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RvdXJuYW1lbnQvJHt0b3VybmFtZW50SWR9L2dhbWVzL2AsIHtwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZSd9KVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICB0b3RhbDogK3Jlc3VsdC5oZWFkZXJzLmdldCgnWC1QYWdlLUNvdW50JyksXG4gICAgICAgIGRhdGE6IEdhbWUudG9Gcm9udChyZXN1bHQuYm9keSlcbiAgICAgIH0pKSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRHYW1lc0RhdGVzKHRvdXJuYW1lbnRJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgIGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudC8ke3RvdXJuYW1lbnRJZH0vZ2FtZXNfZGF0ZXMvYCxcbiAgICAgIHtvYnNlcnZlOiAncmVzcG9uc2UnfVxuICAgICkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4gKHtcbiAgICAgICAgdG90YWw6ICtyZXN1bHQuaGVhZGVycy5nZXQoJ1gtUGFnZS1Db3VudCcpLFxuICAgICAgICBkYXRhOiByZXN1bHQuYm9keVxuICAgICAgfSkpXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEdyb3Vwcyh0b3VybmFtZW50SWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudEdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RvdXJuYW1lbnQvJHt0b3VybmFtZW50SWR9L2dyb3Vwcy9gKVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiBUb3VybmFtZW50R3JvdXAudG9Gcm9udChyZXN1bHQpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRlYW1zKHRvdXJuYW1lbnRJZDogbnVtYmVyLCBncm91cElkPzogbnVtYmVyLCBzaG9ydD86IGJvb2xlYW4pOiBQcm9taXNlPFRvdXJuYW1lbnRUZWFtW10+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAoZ3JvdXBJZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZ3JvdXBfaWQnLCBncm91cElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAoc2hvcnQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3Nob3J0JywgJzEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS90ZWFtcy9gLCB7cGFyYW1zfSlcbiAgICAgIC5waXBlKG1hcChyZXN1bHQgPT4gVG91cm5hbWVudFRlYW0udG9Gcm9udChyZXN1bHQpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YWdlVGVhbXModG91cm5hbWVudElkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRTdGFnZVRlYW1bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudC8ke3RvdXJuYW1lbnRJZH0vc3RhZ2VfdGVhbXMvYClcbiAgICAgIC5waXBlKG1hcChyZXN1bHQgPT4gVG91cm5hbWVudFN0YWdlVGVhbS50b0Zyb250KHJlc3VsdCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGVhbXNBY2hpZXZlbWVudHModG91cm5hbWVudElkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1BY2hpZXZlbWVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS9hY2hpZXZlbWVudHMvYClcbiAgICAgIC5waXBlKG1hcChyZXN1bHQgPT4gVGVhbUFjaGlldmVtZW50LnRvRnJvbnQocmVzdWx0KSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUZWFtQnlJZCh0b3VybmFtZW50VGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRUZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50X3RlYW0vJHt0b3VybmFtZW50VGVhbUlkfS9gKVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiBUb3VybmFtZW50VGVhbS50b0Zyb250KHJlc3VsdCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlckJ5SWQodXNlcklkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRUZWFtVXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudF90ZWFtX3VzZXIvJHt1c2VySWR9L2ApXG4gICAgICAucGlwZShtYXAocmVzdWx0ID0+IFRvdXJuYW1lbnRUZWFtVXNlci50b0Zyb250KHJlc3VsdCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlckdhbWVzKHRvdXJuYW1lbnRVc2VySWQ6IG51bWJlcik6IFByb21pc2U8R2FtZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50X3RlYW1fdXNlci8ke3RvdXJuYW1lbnRVc2VySWR9L2dhbWVzL2ApXG4gICAgICAucGlwZShtYXAocmVzdWx0ID0+IEdhbWUudG9Gcm9udChyZXN1bHQpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkVGFibGUodG91cm5hbWVudElkOiBudW1iZXIsIGZvcm1hdDogJ3BkZicgfCAneGxzeCcsIGlzQ2hlc3M/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdmaWxlX3R5cGUnLCBmb3JtYXQpO1xuICAgIGlmIChpc0NoZXNzKSB7XG4gICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5zZXQoJ2lzQ2hlc3MnLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS90YWJsZV9maWxlL2AsIHtcbiAgICAgIHBhcmFtczogaHR0cFBhcmFtcyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRCYXNrZXRiYWxsU3RhdGlzdGljTGVhZGVycyhmaWx0ZXJzOiBTdGF0aXN0aWNMZWFkZXJzRmlsdGVycyk6IFByb21pc2U8e1trZXk6IHN0cmluZ106IEJhc2tldGJhbGxTdGF0aXN0aWNbXX0+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBwYXJhbXMgPSBhcHBseVN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9iYXNrZXRiYWxsX3N0YXRpc3RpY19sZWFkZXJzL2AsIHtwYXJhbXN9KS5waXBlKFxuICAgICAgbWFwKChyZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnlbXX0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gQmFza2V0YmFsbFN0YXRpc3RpYy50b0Zyb250KHJlc3VsdFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Vm9sbGV5YmFsbFN0YXRpc3RpY0xlYWRlcnMoZmlsdGVyczogU3RhdGlzdGljTGVhZGVyc0ZpbHRlcnMpOiBQcm9taXNlPHtba2V5OiBzdHJpbmddOiBWb2xsZXliYWxsU3RhdGlzdGljW119PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNMZWFkZXJzRmlsdGVycyhmaWx0ZXJzLCBwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdm9sbGV5YmFsbF9zdGF0aXN0aWNfbGVhZGVycy9gLCB7cGFyYW1zfSkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55W119KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFZvbGxleWJhbGxTdGF0aXN0aWMudG9Gcm9udChyZXN1bHRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEhvY2tleVN0YXRpc3RpY0xlYWRlcnMoZmlsdGVyczogU3RhdGlzdGljTGVhZGVyc0ZpbHRlcnMpOiBQcm9taXNlPHtba2V5OiBzdHJpbmddOiBIb2NrZXlTdGF0aXN0aWNbXX0+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBwYXJhbXMgPSBhcHBseVN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9ob2NrZXlfc3RhdGlzdGljX2xlYWRlcnMvYCwge3BhcmFtc30pLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueVtdfSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBIb2NrZXlTdGF0aXN0aWMudG9Gcm9udChyZXN1bHRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZvb3RiYWxsU3RhdGlzdGljTGVhZGVycyhmaWx0ZXJzOiBTdGF0aXN0aWNMZWFkZXJzRmlsdGVycyk6IFByb21pc2U8e1trZXk6IHN0cmluZ106IEZvb3RiYWxsU3RhdGlzdGljW119PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNMZWFkZXJzRmlsdGVycyhmaWx0ZXJzLCBwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvZm9vdGJhbGxfc3RhdGlzdGljX2xlYWRlcnMvYCwge3BhcmFtc30pLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueVtdfSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBGb290YmFsbFN0YXRpc3RpYy50b0Zyb250KHJlc3VsdFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SGFuZGJhbGxTdGF0aXN0aWNMZWFkZXJzKGZpbHRlcnM6IFN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzKTogUHJvbWlzZTx7W2tleTogc3RyaW5nXTogSGFuZGJhbGxTdGF0aXN0aWNbXX0+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBwYXJhbXMgPSBhcHBseVN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9oYW5kYmFsbF9zdGF0aXN0aWNfbGVhZGVycy9gLCB7cGFyYW1zfSkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55W119KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IEhhbmRiYWxsU3RhdGlzdGljLnRvRnJvbnQocmVzdWx0W2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRXYXRlcnBvbG9TdGF0aXN0aWNMZWFkZXJzKGZpbHRlcnM6IFN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzKTogUHJvbWlzZTx7W2tleTogc3RyaW5nXTogV2F0ZXJwb2xvU3RhdGlzdGljW119PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNMZWFkZXJzRmlsdGVycyhmaWx0ZXJzLCBwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvd2F0ZXJwb2xvX3N0YXRpc3RpY19sZWFkZXJzL2AsIHtwYXJhbXN9KS5waXBlKFxuICAgICAgbWFwKChyZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnlbXX0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gV2F0ZXJwb2xvU3RhdGlzdGljLnRvRnJvbnQocmVzdWx0W2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRCYXNrZXRiYWxsU3RhdGlzdGljKGZpbHRlcnM/OiBTdGF0aXN0aWNGaWx0ZXJzKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxCYXNrZXRiYWxsU3RhdGlzdGljW10+PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2Jhc2tldGJhbGxfc3RhdGlzdGljL2AsIHtwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZSd9KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICB0b3RhbDogK3Jlc3VsdC5oZWFkZXJzLmdldCgnWC1QYWdlLUNvdW50JyksXG4gICAgICAgIGRhdGE6IEJhc2tldGJhbGxTdGF0aXN0aWMudG9Gcm9udChyZXN1bHQuYm9keSlcbiAgICAgIH0pKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRWb2xsZXliYWxsU3RhdGlzdGljKGZpbHRlcnM/OiBTdGF0aXN0aWNGaWx0ZXJzKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxWb2xsZXliYWxsU3RhdGlzdGljW10+PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3ZvbGxleWJhbGxfc3RhdGlzdGljL2AsIHtwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZSd9KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICB0b3RhbDogK3Jlc3VsdC5oZWFkZXJzLmdldCgnWC1QYWdlLUNvdW50JyksXG4gICAgICAgIGRhdGE6IFZvbGxleWJhbGxTdGF0aXN0aWMudG9Gcm9udChyZXN1bHQuYm9keSlcbiAgICAgIH0pKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRIb2NrZXlTdGF0aXN0aWMoZmlsdGVycz86IFN0YXRpc3RpY0ZpbHRlcnMpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPEhvY2tleVN0YXRpc3RpY1tdPj4ge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIHBhcmFtcyA9IGFwcGx5U3RhdGlzdGljRmlsdGVycyhmaWx0ZXJzLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9ob2NrZXlfc3RhdGlzdGljL2AsIHtwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZSd9KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICB0b3RhbDogK3Jlc3VsdC5oZWFkZXJzLmdldCgnWC1QYWdlLUNvdW50JyksXG4gICAgICAgIGRhdGE6IEhvY2tleVN0YXRpc3RpYy50b0Zyb250KHJlc3VsdC5ib2R5KVxuICAgICAgfSkpXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZvb3RiYWxsU3RhdGlzdGljKGZpbHRlcnM/OiBTdGF0aXN0aWNGaWx0ZXJzKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxGb290YmFsbFN0YXRpc3RpY1tdPj4ge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIHBhcmFtcyA9IGFwcGx5U3RhdGlzdGljRmlsdGVycyhmaWx0ZXJzLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9mb290YmFsbF9zdGF0aXN0aWMvYCwge3BhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pLnBpcGUoXG4gICAgICBtYXAocmVzdWx0ID0+ICh7XG4gICAgICAgIHRvdGFsOiArcmVzdWx0LmhlYWRlcnMuZ2V0KCdYLVBhZ2UtQ291bnQnKSxcbiAgICAgICAgZGF0YTogRm9vdGJhbGxTdGF0aXN0aWMudG9Gcm9udChyZXN1bHQuYm9keSlcbiAgICAgIH0pKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRIYW5kYmFsbFN0YXRpc3RpYyhmaWx0ZXJzPzogU3RhdGlzdGljRmlsdGVycyk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8SGFuZGJhbGxTdGF0aXN0aWNbXT4+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBwYXJhbXMgPSBhcHBseVN0YXRpc3RpY0ZpbHRlcnMoZmlsdGVycywgcGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvaGFuZGJhbGxfc3RhdGlzdGljL2AsIHtwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZSd9KS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICB0b3RhbDogK3Jlc3VsdC5oZWFkZXJzLmdldCgnWC1QYWdlLUNvdW50JyksXG4gICAgICAgIGRhdGE6IEhhbmRiYWxsU3RhdGlzdGljLnRvRnJvbnQocmVzdWx0LmJvZHkpXG4gICAgICB9KSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UnVnYnlTdGF0aXN0aWMoZmlsdGVycz86IFN0YXRpc3RpY0ZpbHRlcnMpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFJ1Z2J5U3RhdGlzdGljW10+PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3J1Z2J5X3N0YXRpc3RpYy9gLCB7cGFyYW1zLCBvYnNlcnZlOiAncmVzcG9uc2UnfSkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4gKHtcbiAgICAgICAgdG90YWw6ICtyZXN1bHQuaGVhZGVycy5nZXQoJ1gtUGFnZS1Db3VudCcpLFxuICAgICAgICBkYXRhOiBSdWdieVN0YXRpc3RpYy50b0Zyb250KHJlc3VsdC5ib2R5KVxuICAgICAgfSkpXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFdhdGVycG9sb1N0YXRpc3RpYyhmaWx0ZXJzPzogU3RhdGlzdGljRmlsdGVycyk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8V2F0ZXJwb2xvU3RhdGlzdGljW10+PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gYXBwbHlTdGF0aXN0aWNGaWx0ZXJzKGZpbHRlcnMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3dhdGVycG9sb19zdGF0aXN0aWMvYCwge3BhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pLnBpcGUoXG4gICAgICBtYXAocmVzdWx0ID0+ICh7XG4gICAgICAgIHRvdGFsOiArcmVzdWx0LmhlYWRlcnMuZ2V0KCdYLVBhZ2UtQ291bnQnKSxcbiAgICAgICAgZGF0YTogV2F0ZXJwb2xvU3RhdGlzdGljLnRvRnJvbnQocmVzdWx0LmJvZHkpXG4gICAgICB9KSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG91cm5hbWVudFRlYW1Vc2Vycyh0b3VybmFtZW50VGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRUZWFtVXNlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50X3RlYW0vJHt0b3VybmFtZW50VGVhbUlkfS91c2Vycy9gKS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiBUb3VybmFtZW50VGVhbVVzZXIudG9Gcm9udChyZXN1bHQpKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBteVBlcm1pc3Npb24odG91cm5hbWVudElkOiBudW1iZXIpOiBQcm9taXNlPExlYWd1ZVVzZXJQZXJtaXNzaW9uc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90b3VybmFtZW50LyR7dG91cm5hbWVudElkfS9wZXJtaXNzaW9uL2ApLnBpcGUoXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4gKGRhdGEucGVybWlzc2lvbnMgfHwgW10pLm1hcChpdGVtID0+IExlYWd1ZVVzZXJQZXJtaXNzaW9uc1tpdGVtXSkpXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRvdXJuYW1lbnRUZWFtVG91cm5hbWVudHModG91cm5hbWVudFRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RvdXJuYW1lbnRfdGVhbS8ke3RvdXJuYW1lbnRUZWFtSWR9L3RvdXJuYW1lbnRzL2ApLnBpcGUoXG4gICAgICBtYXAocmVzdWx0ID0+IFRvdXJuYW1lbnQudG9Gcm9udChyZXN1bHQpKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50VXNlclRvdXJuYW1lbnRzKHRvdXJuYW1lbnRUZWFtVXNlcklkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudF90ZWFtX3VzZXIvJHt0b3VybmFtZW50VGVhbVVzZXJJZH0vdG91cm5hbWVudHMvYCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4gVG91cm5hbWVudC50b0Zyb250KHJlc3VsdCkpXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlHYW1lc0ZpbHRlcnMoZmlsdGVyczogVG91cm5hbWVudEdhbWVzRmlsdGVycywgcGFyYW1zOiBIdHRwUGFyYW1zKTogSHR0cFBhcmFtcyB7XG4gIGlmIChmaWx0ZXJzLnRvdXJuYW1lbnRJZHMpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b3VybmFtZW50X2lkcycsIGZpbHRlcnMudG91cm5hbWVudElkcy5qb2luKCcsJykpO1xuICB9XG4gIGlmIChmaWx0ZXJzLnRvdXJuYW1lbnRTdGFnZUlkKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgndG91cm5hbWVudF9zdGFnZV9pZCcsIGZpbHRlcnMudG91cm5hbWVudFN0YWdlSWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMudG91cm5hbWVudFJvdW5kSWQpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b3VybmFtZW50X3JvdW5kX2lkJywgZmlsdGVycy50b3VybmFtZW50Um91bmRJZC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAoZmlsdGVycy5kaXZpc2lvbklkKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZGl2aXNpb25faWQnLCBmaWx0ZXJzLmRpdmlzaW9uSWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMudG91cm5hbWVudFRvdXIpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b3VybmFtZW50X3RvdXInLCBmaWx0ZXJzLnRvdXJuYW1lbnRUb3VyLnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChmaWx0ZXJzLnBsYXlvZmZTdGFnZSkge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3BsYXlvZmZfc3RhZ2UnLCBmaWx0ZXJzLnBsYXlvZmZTdGFnZS50b1N0cmluZygpKTtcbiAgfVxuICBpZiAoZmlsdGVycy5wbGF5b2ZmUm91bmQpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwbGF5b2ZmX3JvdW5kJywgZmlsdGVycy5wbGF5b2ZmUm91bmQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMudGVhbUlkKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgndGVhbV9pZCcsIGZpbHRlcnMudGVhbUlkLnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChmaWx0ZXJzLnN0YXR1cykge1xuICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3N0YXR1cycsIEdhbWVTdGF0dXNlc1tmaWx0ZXJzLnN0YXR1c10pO1xuICB9XG4gIGlmIChmaWx0ZXJzLnN0YXR1c2VzKSB7XG4gICAgY29uc3Qgc3RhdHVzZXMgPSBmaWx0ZXJzLnN0YXR1c2VzLm1hcChpID0+IEdhbWVTdGF0dXNlc1tpXSk7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc3RhdHVzZXMnLCBzdGF0dXNlcy5qb2luKCcsJykpO1xuICB9XG4gIGlmIChmaWx0ZXJzLnRvdXJuYW1lbnRDb3VydElkKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgndG91cm5hbWVudF9jb3VydF9pZCcsIGZpbHRlcnMudG91cm5hbWVudENvdXJ0SWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMubGVhZ3VlUGxheWVySWQpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdsZWFndWVfcGxheWVyX2lkJywgZmlsdGVycy5sZWFndWVQbGF5ZXJJZC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAoZmlsdGVycy51c2VySWQpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd1c2VyX2lkJywgZmlsdGVycy51c2VySWQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMucXVlcnkpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdxdWVyeScsIGZpbHRlcnMucXVlcnkpO1xuICB9XG4gIGlmIChmaWx0ZXJzLmlzUGxheW9mZiAhPT0gdW5kZWZpbmVkICYmIGZpbHRlcnMuaXNQbGF5b2ZmICE9PSBudWxsKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnaXNfcGxheW9mZicsIGZpbHRlcnMuaXNQbGF5b2ZmID8gJzEnIDogJzAnKTtcbiAgfVxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTdGF0aXN0aWNGaWx0ZXJzKGZpbHRlcnM6IFN0YXRpc3RpY0ZpbHRlcnMsIHBhcmFtczogSHR0cFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJzKSkge1xuICAgIGlmIChmaWx0ZXJzW2tleV0pIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoa2V5LCBmaWx0ZXJzW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmaWx0ZXJzLnBlcl9nYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwZXJfZ2FtZScsIGZpbHRlcnMucGVyX2dhbWUgPyAnMScgOiAnMCcpO1xuICB9XG5cbiAgaWYgKGZpbHRlcnMudG91cm5hbWVudF9pZHMpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b3VybmFtZW50X2lkcycsIGZpbHRlcnMudG91cm5hbWVudF9pZHMuam9pbignLCcpKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXJzLmlzX3BsYXlvZmYgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJzLmlzX3BsYXlvZmYgIT09IG51bGwpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdpc19wbGF5b2ZmJywgZmlsdGVycy5pc19wbGF5b2ZmID8gJzEnIDogJzAnKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzKGZpbHRlcnM6IFN0YXRpc3RpY0xlYWRlcnNGaWx0ZXJzLCBwYXJhbXM6IEh0dHBQYXJhbXMpOiBIdHRwUGFyYW1zIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVycykpIHtcbiAgICBpZiAoZmlsdGVyc1trZXldKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgZmlsdGVyc1trZXldKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZmlsdGVycy5wZXJfZ2FtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGVyX2dhbWUnLCBmaWx0ZXJzLnBlcl9nYW1lID8gJzEnIDogJzAnKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXJzLnRvdXJuYW1lbnRfaWRzKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgndG91cm5hbWVudF9pZHMnLCBmaWx0ZXJzLnRvdXJuYW1lbnRfaWRzLmpvaW4oJywnKSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMuZmllbGRzKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZmllbGRzJywgZmlsdGVycy5maWVsZHMuam9pbignLCcpKTtcbiAgfVxuICByZXR1cm4gcGFyYW1zO1xufVxuIl19
|