@ctrl/ngx-emoji-mart 8.2.0 → 9.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.
Files changed (54) hide show
  1. package/README.md +39 -14
  2. package/anchors.component.d.ts +1 -1
  3. package/category.component.d.ts +1 -1
  4. package/esm2022/anchors.component.mjs +100 -0
  5. package/esm2022/category.component.mjs +409 -0
  6. package/esm2022/emoji-frequently.service.mjs +90 -0
  7. package/esm2022/emoji-search.service.mjs +178 -0
  8. package/esm2022/ngx-emoji/emoji.component.mjs +299 -0
  9. package/esm2022/ngx-emoji/emoji.module.mjs +17 -0
  10. package/esm2022/ngx-emoji/emoji.service.mjs +145 -0
  11. package/esm2022/picker.component.mjs +522 -0
  12. package/esm2022/picker.module.mjs +40 -0
  13. package/esm2022/preview.component.mjs +206 -0
  14. package/esm2022/search.component.mjs +175 -0
  15. package/esm2022/skins.component.mjs +107 -0
  16. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs +62 -54
  17. package/{fesm2015 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -1
  18. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart.mjs +320 -254
  19. package/fesm2022/ctrl-ngx-emoji-mart.mjs.map +1 -0
  20. package/ngx-emoji/emoji.component.d.ts +1 -1
  21. package/ngx-emoji/emoji.module.d.ts +1 -2
  22. package/package.json +8 -16
  23. package/picker.component.d.ts +2 -2
  24. package/picker.module.d.ts +1 -4
  25. package/preview.component.d.ts +2 -2
  26. package/search.component.d.ts +1 -1
  27. package/skins.component.d.ts +2 -2
  28. package/esm2020/anchors.component.mjs +0 -83
  29. package/esm2020/category.component.mjs +0 -386
  30. package/esm2020/emoji-frequently.service.mjs +0 -88
  31. package/esm2020/emoji-search.service.mjs +0 -177
  32. package/esm2020/ngx-emoji/emoji.component.mjs +0 -288
  33. package/esm2020/ngx-emoji/emoji.module.mjs +0 -18
  34. package/esm2020/ngx-emoji/emoji.service.mjs +0 -144
  35. package/esm2020/picker.component.mjs +0 -508
  36. package/esm2020/picker.module.mjs +0 -49
  37. package/esm2020/preview.component.mjs +0 -187
  38. package/esm2020/search.component.mjs +0 -165
  39. package/esm2020/skins.component.mjs +0 -108
  40. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -34330
  41. package/fesm2015/ctrl-ngx-emoji-mart.mjs +0 -1763
  42. package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +0 -1
  43. package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +0 -1
  44. package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +0 -1
  45. /package/{esm2020 → esm2022}/ctrl-ngx-emoji-mart.mjs +0 -0
  46. /package/{esm2020 → esm2022}/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -0
  47. /package/{esm2020 → esm2022}/ngx-emoji/data/categories.mjs +0 -0
  48. /package/{esm2020 → esm2022}/ngx-emoji/data/data.interfaces.mjs +0 -0
  49. /package/{esm2020 → esm2022}/ngx-emoji/data/emojis.mjs +0 -0
  50. /package/{esm2020 → esm2022}/ngx-emoji/data/skins.mjs +0 -0
  51. /package/{esm2020 → esm2022}/ngx-emoji/index.mjs +0 -0
  52. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  53. /package/{esm2020 → esm2022}/svgs/index.mjs +0 -0
  54. /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
@@ -0,0 +1,145 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { emojis } from './data/emojis';
3
+ import * as i0 from "@angular/core";
4
+ const COLONS_REGEX = /^(?:\:([^\:]+)\:)(?:\:skin-tone-(\d)\:)?$/;
5
+ const SKINS = ['1F3FA', '1F3FB', '1F3FC', '1F3FD', '1F3FE', '1F3FF'];
6
+ export const DEFAULT_BACKGROUNDFN = (set, sheetSize) => `https://unpkg.com/emoji-datasource-${set}@6.0.1/img/${set}/sheets-256/${sheetSize}.png`;
7
+ class EmojiService {
8
+ uncompressed = false;
9
+ names = {};
10
+ emojis = [];
11
+ constructor() {
12
+ if (!this.uncompressed) {
13
+ this.uncompress(emojis);
14
+ this.uncompressed = true;
15
+ }
16
+ }
17
+ uncompress(list) {
18
+ this.emojis = list.map(emoji => {
19
+ const data = { ...emoji };
20
+ if (!data.shortNames) {
21
+ data.shortNames = [];
22
+ }
23
+ data.shortNames.unshift(data.shortName);
24
+ data.id = data.shortName;
25
+ data.native = this.unifiedToNative(data.unified);
26
+ if (!data.skinVariations) {
27
+ data.skinVariations = [];
28
+ }
29
+ if (!data.keywords) {
30
+ data.keywords = [];
31
+ }
32
+ if (!data.emoticons) {
33
+ data.emoticons = [];
34
+ }
35
+ if (!data.hidden) {
36
+ data.hidden = [];
37
+ }
38
+ if (!data.text) {
39
+ data.text = '';
40
+ }
41
+ if (data.obsoletes) {
42
+ // get keywords from emoji that it obsoletes since that is shared
43
+ const f = list.find(x => x.unified === data.obsoletes);
44
+ if (f) {
45
+ if (f.keywords) {
46
+ data.keywords = [...data.keywords, ...f.keywords, f.shortName];
47
+ }
48
+ else {
49
+ data.keywords = [...data.keywords, f.shortName];
50
+ }
51
+ }
52
+ }
53
+ this.names[data.unified] = data;
54
+ for (const n of data.shortNames) {
55
+ this.names[n] = data;
56
+ }
57
+ return data;
58
+ });
59
+ }
60
+ getData(emoji, skin, set) {
61
+ let emojiData;
62
+ if (typeof emoji === 'string') {
63
+ const matches = emoji.match(COLONS_REGEX);
64
+ if (matches) {
65
+ emoji = matches[1];
66
+ if (matches[2]) {
67
+ skin = parseInt(matches[2], 10);
68
+ }
69
+ }
70
+ if (this.names.hasOwnProperty(emoji)) {
71
+ emojiData = this.names[emoji];
72
+ }
73
+ else {
74
+ return null;
75
+ }
76
+ }
77
+ else if (emoji.id) {
78
+ emojiData = this.names[emoji.id];
79
+ }
80
+ else if (emoji.unified) {
81
+ emojiData = this.names[emoji.unified.toUpperCase()];
82
+ }
83
+ if (!emojiData) {
84
+ emojiData = emoji;
85
+ emojiData.custom = true;
86
+ }
87
+ const hasSkinVariations = emojiData.skinVariations && emojiData.skinVariations.length;
88
+ if (hasSkinVariations && skin && skin > 1 && set) {
89
+ emojiData = { ...emojiData };
90
+ const skinKey = SKINS[skin - 1];
91
+ const variationData = emojiData.skinVariations.find((n) => n.unified.includes(skinKey));
92
+ if (!variationData.hidden || !variationData.hidden.includes(set)) {
93
+ emojiData.skinTone = skin;
94
+ emojiData = { ...emojiData, ...variationData };
95
+ }
96
+ emojiData.native = this.unifiedToNative(emojiData.unified);
97
+ }
98
+ emojiData.set = set || '';
99
+ return emojiData;
100
+ }
101
+ unifiedToNative(unified) {
102
+ const codePoints = unified.split('-').map(u => parseInt(`0x${u}`, 16));
103
+ return String.fromCodePoint(...codePoints);
104
+ }
105
+ emojiSpriteStyles(sheet, set = 'apple', size = 24, sheetSize = 64, sheetRows = 57, backgroundImageFn = DEFAULT_BACKGROUNDFN, sheetColumns = 58, url) {
106
+ const hasImageUrl = !!url;
107
+ url = url || backgroundImageFn(set, sheetSize);
108
+ return {
109
+ width: `${size}px`,
110
+ height: `${size}px`,
111
+ display: 'inline-block',
112
+ 'background-image': `url(${url})`,
113
+ 'background-size': hasImageUrl ? '100% 100%' : `${100 * sheetColumns}% ${100 * sheetRows}%`,
114
+ 'background-position': hasImageUrl ? undefined : this.getSpritePosition(sheet, sheetColumns),
115
+ };
116
+ }
117
+ getSpritePosition(sheet, sheetColumns) {
118
+ const [sheetX, sheetY] = sheet;
119
+ const multiply = 100 / (sheetColumns - 1);
120
+ return `${multiply * sheetX}% ${multiply * sheetY}%`;
121
+ }
122
+ sanitize(emoji) {
123
+ if (emoji === null) {
124
+ return null;
125
+ }
126
+ const id = emoji.id || emoji.shortNames[0];
127
+ let colons = `:${id}:`;
128
+ if (emoji.skinTone) {
129
+ colons += `:skin-tone-${emoji.skinTone}:`;
130
+ }
131
+ emoji.colons = colons;
132
+ return { ...emoji };
133
+ }
134
+ getSanitizedData(emoji, skin, set) {
135
+ return this.sanitize(this.getData(emoji, skin, set));
136
+ }
137
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EmojiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
138
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EmojiService, providedIn: 'root' });
139
+ }
140
+ export { EmojiService };
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EmojiService, decorators: [{
142
+ type: Injectable,
143
+ args: [{ providedIn: 'root' }]
144
+ }], ctorParameters: function () { return []; } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcGlja2VyL25neC1lbW9qaS9lbW9qaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHdkMsTUFBTSxZQUFZLEdBQUcsMkNBQTJDLENBQUM7QUFDakUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBVyxFQUFFLFNBQWlCLEVBQUUsRUFBRSxDQUNyRSxzQ0FBc0MsR0FBRyxjQUFjLEdBQUcsZUFBZSxTQUFTLE1BQU0sQ0FBQztBQUUzRixNQUNhLFlBQVk7SUFDdkIsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixLQUFLLEdBQWlDLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEdBQWdCLEVBQUUsQ0FBQztJQUV6QjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQTJCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO1lB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LEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sR0FBRyxRQUFRLEdBQUcsTUFBTSxLQUFLLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQztJQUN2RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQXVCO1FBQzlCLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksTUFBTSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUM7UUFDdkIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxjQUFjLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQztTQUMzQztRQUNELEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUF5QixFQUFFLElBQW9CLEVBQUUsR0FBa0I7UUFDbEYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7dUdBL0pVLFlBQVk7MkdBQVosWUFBWSxjQURDLE1BQU07O1NBQ25CLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbXByZXNzZWRFbW9qaURhdGEsIEVtb2ppRGF0YSwgRW1vamlWYXJpYXRpb24gfSBmcm9tICcuL2RhdGEvZGF0YS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IGVtb2ppcyB9IGZyb20gJy4vZGF0YS9lbW9qaXMnO1xuaW1wb3J0IHsgRW1vamkgfSBmcm9tICcuL2Vtb2ppLmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTE9OU19SRUdFWCA9IC9eKD86XFw6KFteXFw6XSspXFw6KSg/OlxcOnNraW4tdG9uZS0oXFxkKVxcOik/JC87XG5jb25zdCBTS0lOUyA9IFsnMUYzRkEnLCAnMUYzRkInLCAnMUYzRkMnLCAnMUYzRkQnLCAnMUYzRkUnLCAnMUYzRkYnXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRGTiA9IChzZXQ6IHN0cmluZywgc2hlZXRTaXplOiBudW1iZXIpID0+XG4gIGBodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLSR7c2V0fUA2LjAuMS9pbWcvJHtzZXR9L3NoZWV0cy0yNTYvJHtzaGVldFNpemV9LnBuZ2A7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRW1vamlTZXJ2aWNlIHtcbiAgdW5jb21wcmVzc2VkID0gZmFsc2U7XG4gIG5hbWVzOiB7IFtrZXk6IHN0cmluZ106IEVtb2ppRGF0YSB9ID0ge307XG4gIGVtb2ppczogRW1vamlEYXRhW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMudW5jb21wcmVzc2VkKSB7XG4gICAgICB0aGlzLnVuY29tcHJlc3MoZW1vamlzKTtcbiAgICAgIHRoaXMudW5jb21wcmVzc2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bmNvbXByZXNzKGxpc3Q6IENvbXByZXNzZWRFbW9qaURhdGFbXSkge1xuICAgIHRoaXMuZW1vamlzID0gbGlzdC5tYXAoZW1vamkgPT4ge1xuICAgICAgY29uc3QgZGF0YTogYW55ID0geyAuLi5lbW9qaSB9O1xuICAgICAgaWYgKCFkYXRhLnNob3J0TmFtZXMpIHtcbiAgICAgICAgZGF0YS5zaG9ydE5hbWVzID0gW107XG4gICAgICB9XG4gICAgICBkYXRhLnNob3J0TmFtZXMudW5zaGlmdChkYXRhLnNob3J0TmFtZSk7XG4gICAgICBkYXRhLmlkID0gZGF0YS5zaG9ydE5hbWU7XG4gICAgICBkYXRhLm5hdGl2ZSA9IHRoaXMudW5pZmllZFRvTmF0aXZlKGRhdGEudW5pZmllZCk7XG5cbiAgICAgIGlmICghZGF0YS5za2luVmFyaWF0aW9ucykge1xuICAgICAgICBkYXRhLnNraW5WYXJpYXRpb25zID0gW107XG4gICAgICB9XG5cbiAgICAgIGlmICghZGF0YS5rZXl3b3Jkcykge1xuICAgICAgICBkYXRhLmtleXdvcmRzID0gW107XG4gICAgICB9XG5cbiAgICAgIGlmICghZGF0YS5lbW90aWNvbnMpIHtcbiAgICAgICAgZGF0YS5lbW90aWNvbnMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkYXRhLmhpZGRlbikge1xuICAgICAgICBkYXRhLmhpZGRlbiA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRhdGEudGV4dCkge1xuICAgICAgICBkYXRhLnRleHQgPSAnJztcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEub2Jzb2xldGVzKSB7XG4gICAgICAgIC8vIGdldCBrZXl3b3JkcyBmcm9tIGVtb2ppIHRoYXQgaXQgb2Jzb2xldGVzIHNpbmNlIHRoYXQgaXMgc2hhcmVkXG4gICAgICAgIGNvbnN0IGYgPSBsaXN0LmZpbmQoeCA9PiB4LnVuaWZpZWQgPT09IGRhdGEub2Jzb2xldGVzKTtcbiAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICBpZiAoZi5rZXl3b3Jkcykge1xuICAgICAgICAgICAgZGF0YS5rZXl3b3JkcyA9IFsuLi5kYXRhLmtleXdvcmRzLCAuLi5mLmtleXdvcmRzLCBmLnNob3J0TmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEua2V5d29yZHMgPSBbLi4uZGF0YS5rZXl3b3JkcywgZi5zaG9ydE5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm5hbWVzW2RhdGEudW5pZmllZF0gPSBkYXRhO1xuICAgICAgZm9yIChjb25zdCBuIG9mIGRhdGEuc2hvcnROYW1lcykge1xuICAgICAgICB0aGlzLm5hbWVzW25dID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGF0YShlbW9qaTogRW1vamlEYXRhIHwgc3RyaW5nLCBza2luPzogRW1vamlbJ3NraW4nXSwgc2V0PzogRW1vamlbJ3NldCddKTogRW1vamlEYXRhIHwgbnVsbCB7XG4gICAgbGV0IGVtb2ppRGF0YTogYW55O1xuXG4gICAgaWYgKHR5cGVvZiBlbW9qaSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBlbW9qaS5tYXRjaChDT0xPTlNfUkVHRVgpO1xuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICBlbW9qaSA9IG1hdGNoZXNbMV07XG5cbiAgICAgICAgaWYgKG1hdGNoZXNbMl0pIHtcbiAgICAgICAgICBza2luID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApIGFzIEVtb2ppWydza2luJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5hbWVzLmhhc093blByb3BlcnR5KGVtb2ppKSkge1xuICAgICAgICBlbW9qaURhdGEgPSB0aGlzLm5hbWVzW2Vtb2ppXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW1vamkuaWQpIHtcbiAgICAgIGVtb2ppRGF0YSA9IHRoaXMubmFtZXNbZW1vamkuaWRdO1xuICAgIH0gZWxzZSBpZiAoZW1vamkudW5pZmllZCkge1xuICAgICAgZW1vamlEYXRhID0gdGhpcy5uYW1lc1tlbW9qaS51bmlmaWVkLnRvVXBwZXJDYXNlKCldO1xuICAgIH1cblxuICAgIGlmICghZW1vamlEYXRhKSB7XG4gICAgICBlbW9qaURhdGEgPSBlbW9qaTtcbiAgICAgIGVtb2ppRGF0YS5jdXN0b20gPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1NraW5WYXJpYXRpb25zID0gZW1vamlEYXRhLnNraW5WYXJpYXRpb25zICYmIGVtb2ppRGF0YS5za2luVmFyaWF0aW9ucy5sZW5ndGg7XG4gICAgaWYgKGhhc1NraW5WYXJpYXRpb25zICYmIHNraW4gJiYgc2tpbiA+IDEgJiYgc2V0KSB7XG4gICAgICBlbW9qaURhdGEgPSB7IC4uLmVtb2ppRGF0YSB9O1xuXG4gICAgICBjb25zdCBza2luS2V5ID0gU0tJTlNbc2tpbiAtIDFdO1xuICAgICAgY29uc3QgdmFyaWF0aW9uRGF0YSA9IGVtb2ppRGF0YS5za2luVmFyaWF0aW9ucy5maW5kKChuOiBFbW9qaVZhcmlhdGlvbikgPT5cbiAgICAgICAgbi51bmlmaWVkLmluY2x1ZGVzKHNraW5LZXkpLFxuICAgICAgKTtcblxuICAgICAgaWYgKCF2YXJpYXRpb25EYXRhLmhpZGRlbiB8fCAhdmFyaWF0aW9uRGF0YS5oaWRkZW4uaW5jbHVkZXMoc2V0KSkge1xuICAgICAgICBlbW9qaURhdGEuc2tpblRvbmUgPSBza2luO1xuICAgICAgICBlbW9qaURhdGEgPSB7IC4uLmVtb2ppRGF0YSwgLi4udmFyaWF0aW9uRGF0YSB9O1xuICAgICAgfVxuICAgICAgZW1vamlEYXRhLm5hdGl2ZSA9IHRoaXMudW5pZmllZFRvTmF0aXZlKGVtb2ppRGF0YS51bmlmaWVkKTtcbiAgICB9XG5cbiAgICBlbW9qaURhdGEuc2V0ID0gc2V0IHx8ICcnO1xuICAgIHJldHVybiBlbW9qaURhdGEgYXMgRW1vamlEYXRhO1xuICB9XG5cbiAgdW5pZmllZFRvTmF0aXZlKHVuaWZpZWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvZGVQb2ludHMgPSB1bmlmaWVkLnNwbGl0KCctJykubWFwKHUgPT4gcGFyc2VJbnQoYDB4JHt1fWAsIDE2KSk7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpO1xuICB9XG5cbiAgZW1vamlTcHJpdGVTdHlsZXMoXG4gICAgc2hlZXQ6IEVtb2ppRGF0YVsnc2hlZXQnXSxcbiAgICBzZXQ6IEVtb2ppWydzZXQnXSA9ICdhcHBsZScsXG4gICAgc2l6ZTogRW1vamlbJ3NpemUnXSA9IDI0LFxuICAgIHNoZWV0U2l6ZTogRW1vamlbJ3NoZWV0U2l6ZSddID0gNjQsXG4gICAgc2hlZXRSb3dzOiBFbW9qaVsnc2hlZXRSb3dzJ10gPSA1NyxcbiAgICBiYWNrZ3JvdW5kSW1hZ2VGbjogRW1vamlbJ2JhY2tncm91bmRJbWFnZUZuJ10gPSBERUZBVUxUX0JBQ0tHUk9VTkRGTixcbiAgICBzaGVldENvbHVtbnMgPSA1OCxcbiAgICB1cmw/OiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IGhhc0ltYWdlVXJsID0gISF1cmw7XG4gICAgdXJsID0gdXJsIHx8IGJhY2tncm91bmRJbWFnZUZuKHNldCwgc2hlZXRTaXplKTtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IGAke3NpemV9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHtzaXplfXB4YCxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiBgdXJsKCR7dXJsfSlgLFxuICAgICAgJ2JhY2tncm91bmQtc2l6ZSc6IGhhc0ltYWdlVXJsID8gJzEwMCUgMTAwJScgOiBgJHsxMDAgKiBzaGVldENvbHVtbnN9JSAkezEwMCAqIHNoZWV0Um93c30lYCxcbiAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uJzogaGFzSW1hZ2VVcmwgPyB1bmRlZmluZWQgOiB0aGlzLmdldFNwcml0ZVBvc2l0aW9uKHNoZWV0LCBzaGVldENvbHVtbnMpLFxuICAgIH07XG4gIH1cblxuICBnZXRTcHJpdGVQb3NpdGlvbihzaGVldDogRW1vamlEYXRhWydzaGVldCddLCBzaGVldENvbHVtbnM6IG51bWJlcikge1xuICAgIGNvbnN0IFtzaGVldFgsIHNoZWV0WV0gPSBzaGVldDtcbiAgICBjb25zdCBtdWx0aXBseSA9IDEwMCAvIChzaGVldENvbHVtbnMgLSAxKTtcbiAgICByZXR1cm4gYCR7bXVsdGlwbHkgKiBzaGVldFh9JSAke211bHRpcGx5ICogc2hlZXRZfSVgO1xuICB9XG5cbiAgc2FuaXRpemUoZW1vamk6IEVtb2ppRGF0YSB8IG51bGwpOiBFbW9qaURhdGEgfCBudWxsIHtcbiAgICBpZiAoZW1vamkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGVtb2ppLmlkIHx8IGVtb2ppLnNob3J0TmFtZXNbMF07XG4gICAgbGV0IGNvbG9ucyA9IGA6JHtpZH06YDtcbiAgICBpZiAoZW1vamkuc2tpblRvbmUpIHtcbiAgICAgIGNvbG9ucyArPSBgOnNraW4tdG9uZS0ke2Vtb2ppLnNraW5Ub25lfTpgO1xuICAgIH1cbiAgICBlbW9qaS5jb2xvbnMgPSBjb2xvbnM7XG4gICAgcmV0dXJuIHsgLi4uZW1vamkgfTtcbiAgfVxuXG4gIGdldFNhbml0aXplZERhdGEoZW1vamk6IHN0cmluZyB8IEVtb2ppRGF0YSwgc2tpbj86IEVtb2ppWydza2luJ10sIHNldD86IEVtb2ppWydzZXQnXSkge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplKHRoaXMuZ2V0RGF0YShlbW9qaSwgc2tpbiwgc2V0KSk7XG4gIH1cbn1cbiJdfQ==