@rotki/ui-library 2.7.0 → 2.8.1

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 (81) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +3 -2
  2. package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +2 -1
  3. package/dist/components/alerts/RuiAlert.vue.d.ts +4 -3
  4. package/dist/components/buttons/button/RuiButton.vue.d.ts +7 -5
  5. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
  6. package/dist/components/calendar/RuiCalendar.vue.d.ts +4 -2
  7. package/dist/components/calendar/RuiCalendarGrid.vue.d.ts +4 -2
  8. package/dist/components/calendar/RuiCalendarHeader.vue.d.ts +4 -2
  9. package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +4 -2
  10. package/dist/components/cards/RuiCard.vue.d.ts +4 -3
  11. package/dist/components/cards/RuiCardHeader.vue.d.ts +3 -2
  12. package/dist/components/chips/RuiChip.vue.d.ts +4 -3
  13. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +2 -1
  14. package/dist/components/color-picker/RuiColorDisplay.vue.d.ts +2 -1
  15. package/dist/components/color-picker/RuiColorHue.vue.d.ts +4 -3
  16. package/dist/components/color-picker/RuiColorInput.vue.d.ts +4 -3
  17. package/dist/components/color-picker/RuiColorPicker.vue.d.ts +2 -1
  18. package/dist/components/color-picker/utils.d.ts +1 -1
  19. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +10 -8
  20. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +5 -3
  21. package/dist/components/divider/RuiDivider.vue.d.ts +2 -1
  22. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +29 -28
  23. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +4 -3
  24. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +7 -6
  25. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +7 -6
  26. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +8 -6
  27. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +747 -10
  28. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +3 -2
  29. package/dist/components/forms/slider/RuiSlider.vue.d.ts +3 -2
  30. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +3 -2
  31. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +8 -6
  32. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +10 -8
  33. package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +2 -1
  34. package/dist/components/icons/RuiIcon.vue.d.ts +2 -1
  35. package/dist/components/index.d.ts +2 -1
  36. package/dist/components/index.es.js +4335 -4252
  37. package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +2 -1
  38. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +2 -1
  39. package/dist/components/logos/RuiLogo.vue.d.ts +2 -1
  40. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -4
  41. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +3 -2
  42. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +6 -5
  43. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +6 -3
  44. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +6 -5
  45. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +4 -3
  46. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +4 -3
  47. package/dist/components/progress/RuiProgress.vue.d.ts +3 -2
  48. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +2 -1
  49. package/dist/components/steppers/RuiStepper.vue.d.ts +4 -3
  50. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +2 -1
  51. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +2 -1
  52. package/dist/components/tables/RuiDataTable.vue.d.ts +13 -12
  53. package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -2
  54. package/dist/components/tables/RuiTableHead.vue.d.ts +7 -6
  55. package/dist/components/tables/RuiTablePagination.vue.d.ts +3 -2
  56. package/dist/components/tabs/tab/RuiTab.vue.d.ts +5 -4
  57. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +4 -3
  58. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +7 -6
  59. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +3 -2
  60. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +4 -2
  61. package/dist/composables/defaults/table.d.ts +1 -2
  62. package/dist/composables/dropdown-menu.d.ts +3 -2
  63. package/dist/composables/index-CC7A7CEh.js +737 -0
  64. package/dist/composables/index.es.js +1 -1
  65. package/dist/composables/popper.d.ts +2 -2
  66. package/dist/composables/sticky-header.d.ts +1 -1
  67. package/dist/consts/time-accuracy-BnKA5GyT.js +1 -1
  68. package/dist/consts/typography.d.ts +38 -4
  69. package/dist/{index-cTPqOSmm.js → index-D7l4d7N2.js} +4 -4
  70. package/dist/index.es.js +4 -4
  71. package/dist/style.css +1 -1
  72. package/dist/theme/index.es.js +30 -23
  73. package/dist/utils/form-text-detail.d.ts +1 -1
  74. package/dist/utils/index-DJ-ueLCs.js +158 -0
  75. package/dist/vendor-Hqbg5uCG.js +1931 -0
  76. package/dist/web-types.json +59 -39
  77. package/package.json +41 -48
  78. package/README.md +0 -276
  79. package/dist/composables/index-D7DVd8pO.js +0 -717
  80. package/dist/utils/index-D-sENcA8.js +0 -158
  81. package/dist/vendor-X3mXJl51.js +0 -1931
@@ -1,158 +0,0 @@
1
- import { logicOr as p } from "@vueuse/math";
2
- import { computed as m, ref as b } from "vue";
3
- import { get as g, objectPick as w, objectOmit as M, set as x } from "@vueuse/shared";
4
- import { c as A } from "../vendor-X3mXJl51.js";
5
- import { createGlobalState as C } from "@vueuse/core";
6
- class I extends Error {
7
- constructor(e) {
8
- super(e ?? "AssertionError"), this.name = "AssertionError";
9
- }
10
- }
11
- function K(t, e) {
12
- if (!t)
13
- throw new I(e);
14
- }
15
- function T(t, e) {
16
- const r = m(() => {
17
- let o = g(t);
18
- return typeof o == "string" && (o = [o]), o.filter((f) => !!f);
19
- }), s = m(() => {
20
- let o = g(e);
21
- return typeof o == "string" && (o = [o]), o.filter((f) => !!f);
22
- }), i = m(() => g(r).length > 0), c = m(() => g(s).length > 0), a = p(i, c);
23
- return {
24
- formattedErrorMessages: r,
25
- formattedSuccessMessages: s,
26
- hasError: i,
27
- hasMessages: a,
28
- hasSuccess: c
29
- };
30
- }
31
- function O(t, { fractionDigits: e = 2 }) {
32
- return new Intl.NumberFormat(void 0, {
33
- maximumFractionDigits: e,
34
- minimumFractionDigits: e
35
- }).format(Number(t));
36
- }
37
- function V(t) {
38
- return O(t, { fractionDigits: 0 });
39
- }
40
- function y(t) {
41
- return Object.keys(t).filter(
42
- (e) => e.startsWith("data-")
43
- );
44
- }
45
- function W(t, e = ["class"]) {
46
- return w(t, [...y(t), ...e]);
47
- }
48
- function q(t, e = ["class"]) {
49
- return M(t, [...y(t), ...e]);
50
- }
51
- function G(t, e) {
52
- return t && Object.keys(t).reduce((r, s) => (r[A(s)] = t[s], r), {});
53
- }
54
- function L(t) {
55
- return t ? t.toString().toLowerCase().replace(/[^\da-z]/gi, "") : "";
56
- }
57
- function P(t) {
58
- return t === void 0 || typeof t == "string" && isNaN(Number(t)) ? t : `${t}px`;
59
- }
60
- function h(t, e) {
61
- if (t === e)
62
- return !0;
63
- if (t == null || e == null)
64
- return t === e;
65
- if (typeof t != typeof e)
66
- return !1;
67
- if (Array.isArray(t)) {
68
- if (!Array.isArray(e) || t.length !== e.length)
69
- return !1;
70
- for (const [r, s] of t.entries())
71
- if (!h(s, e[r]))
72
- return !1;
73
- return !0;
74
- }
75
- if (typeof t == "object") {
76
- const r = Object.keys(t), s = Object.keys(e);
77
- if (r.length !== s.length)
78
- return !1;
79
- for (const i of r)
80
- if (!h(t[i], e[i]))
81
- return !1;
82
- return !0;
83
- }
84
- return !1;
85
- }
86
- const S = C(() => {
87
- const t = b(0);
88
- return { count: t, nextId: () => {
89
- const r = g(t) + 1;
90
- return x(t, r), r;
91
- } };
92
- });
93
- function U(t = "") {
94
- const { nextId: e } = S();
95
- return `${t}-${e()}`;
96
- }
97
- const n = new Array(4);
98
- function j(t) {
99
- for (let e = 0; e < n.length; e++) n[e] = 0;
100
- for (let e = 0; e < t.length; e++)
101
- n[e % 4] = (n[e % 4] << 5) - n[e % 4] + t.charCodeAt(e);
102
- }
103
- function u() {
104
- const t = n[0] ^ n[0] << 11;
105
- return n[0] = n[1], n[1] = n[2], n[2] = n[3], n[3] = n[3] ^ n[3] >> 19 ^ t ^ t >> 8, (n[3] >>> 0) / (1 << 31 >>> 0);
106
- }
107
- function d() {
108
- const t = Math.floor(u() * 360), e = `${u() * 60 + 40}%`, r = `${(u() + u() + u() + u()) * 25}%`;
109
- return `hsl(${t},${e},${r})`;
110
- }
111
- function k(t) {
112
- const e = t, r = t, s = Math.ceil(e / 2), i = e - s, c = [];
113
- for (let a = 0; a < r; a++) {
114
- let o = [];
115
- for (let l = 0; l < s; l++)
116
- o[l] = Math.floor(u() * 2.3);
117
- const f = o.slice(0, i);
118
- f.reverse(), o = o.concat(f);
119
- for (const l of o) c.push(l);
120
- }
121
- return c;
122
- }
123
- function E(t) {
124
- const e = {};
125
- return e.seed = t.seed || Math.floor(Math.random() * 10 ** 16).toString(16), j(e.seed), e.size = t.size || 8, e.scale = t.scale || 8, e.color = t.color || d(), e.bgcolor = t.bgcolor || d(), e.spotColor = t.spotColor || d(), e;
126
- }
127
- function $(t, e) {
128
- const r = E(t || {}), s = k(r.size), i = Math.sqrt(s.length);
129
- e.width = e.height = r.size * r.scale;
130
- const c = e.getContext("2d");
131
- if (c) {
132
- c.fillStyle = r.bgcolor, c.fillRect(0, 0, e.width, e.height), c.fillStyle = r.color;
133
- for (const [a, o] of s.entries())
134
- if (o) {
135
- const f = Math.floor(a / i), l = a % i;
136
- c.fillStyle = o === 1 ? r.color : r.spotColor, c.fillRect(l * r.scale, f * r.scale, r.scale, r.scale);
137
- }
138
- }
139
- return e;
140
- }
141
- function B(t) {
142
- const e = document.createElement("canvas");
143
- return $(t, e), e.toDataURL("image/jpeg");
144
- }
145
- export {
146
- q as a,
147
- L as b,
148
- K as c,
149
- U as d,
150
- P as e,
151
- V as f,
152
- W as g,
153
- B as h,
154
- h as i,
155
- G as t,
156
- T as u
157
- };
158
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRC1zRU5jQTguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hc3NlcnQudHMiLCIuLi8uLi9zcmMvdXRpbHMvZm9ybS10ZXh0LWRldGFpbC50cyIsIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIiwiLi4vLi4vc3JjL3V0aWxzL2lzLWVxdWFsLnRzIiwiLi4vLi4vc3JjL3V0aWxzL2dlbmVyYXRlLWlkLnRzIiwiLi4vLi4vc3JjL3V0aWxzL2Jsb2NraWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZz86IHN0cmluZykge1xuICAgIHN1cGVyKG1zZyA/PyAnQXNzZXJ0aW9uRXJyb3InKTtcbiAgICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uOiBhbnksIG1zZz86IHN0cmluZyk6IGFzc2VydHMgY29uZGl0aW9uIHtcbiAgaWYgKCFjb25kaXRpb24pXG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZyk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IE1heWJlUmVmIH0gZnJvbSAnQHZ1ZXVzZS9zaGFyZWQnO1xuaW1wb3J0IHsgbG9naWNPciB9IGZyb20gJ0B2dWV1c2UvbWF0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JtVGV4dERldGFpbChlcnJvck1lc3NhZ2VzOiBNYXliZVJlZjxzdHJpbmcgfCBzdHJpbmdbXT4sIHN1Y2Nlc3NNZXNzYWdlczogTWF5YmVSZWY8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gIGNvbnN0IGZvcm1hdHRlZEVycm9yTWVzc2FnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IGVycm9yTWVzc2FnZXNWYWwgPSBnZXQoZXJyb3JNZXNzYWdlcyk7XG4gICAgaWYgKHR5cGVvZiBlcnJvck1lc3NhZ2VzVmFsID09PSAnc3RyaW5nJylcbiAgICAgIGVycm9yTWVzc2FnZXNWYWwgPSBbZXJyb3JNZXNzYWdlc1ZhbF07XG5cbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlc1ZhbC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pO1xuICB9KTtcblxuICBjb25zdCBmb3JtYXR0ZWRTdWNjZXNzTWVzc2FnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHN1Y2Nlc3NNZXNzYWdlc1ZhbCA9IGdldChzdWNjZXNzTWVzc2FnZXMpO1xuICAgIGlmICh0eXBlb2Ygc3VjY2Vzc01lc3NhZ2VzVmFsID09PSAnc3RyaW5nJylcbiAgICAgIHN1Y2Nlc3NNZXNzYWdlc1ZhbCA9IFtzdWNjZXNzTWVzc2FnZXNWYWxdO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3NNZXNzYWdlc1ZhbC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pO1xuICB9KTtcblxuICBjb25zdCBoYXNFcnJvciA9IGNvbXB1dGVkKCgpID0+IGdldChmb3JtYXR0ZWRFcnJvck1lc3NhZ2VzKS5sZW5ndGggPiAwKTtcblxuICBjb25zdCBoYXNTdWNjZXNzID0gY29tcHV0ZWQoKCkgPT4gZ2V0KGZvcm1hdHRlZFN1Y2Nlc3NNZXNzYWdlcykubGVuZ3RoID4gMCk7XG4gIGNvbnN0IGhhc01lc3NhZ2VzID0gbG9naWNPcihoYXNFcnJvciwgaGFzU3VjY2Vzcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXR0ZWRFcnJvck1lc3NhZ2VzLFxuICAgIGZvcm1hdHRlZFN1Y2Nlc3NNZXNzYWdlcyxcbiAgICBoYXNFcnJvcixcbiAgICBoYXNNZXNzYWdlcyxcbiAgICBoYXNTdWNjZXNzLFxuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXR1cENvbnRleHQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgb2JqZWN0T21pdCwgb2JqZWN0UGljayB9IGZyb20gJ0B2dWV1c2Uvc2hhcmVkJztcbmltcG9ydCB7IGNhbWVsQ2FzZSwgc25ha2VDYXNlIH0gZnJvbSAnc2N1bGUnO1xuXG5pbnRlcmZhY2UgQ3VycmVuY3lPcHRpb25zIHtcbiAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIGxvY2FsZT86IHN0cmluZztcbiAgc3R5bGU/OiBJbnRsLk51bWJlckZvcm1hdE9wdGlvbnNTdHlsZTtcbiAgZnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG59XG5cbnR5cGUgU2V0dXBDb250ZXh0QXR0cnMgPSBTZXR1cENvbnRleHRbJ2F0dHJzJ107XG5cbnR5cGUgU2V0dXBDb250ZXh0QXR0cnNLZXlzID0gKGtleW9mIFNldHVwQ29udGV4dEF0dHJzKVtdO1xuXG4vKipcbiAqIEZvcm1hdCBudW1iZXIgdmFsdWUgdG8gc3BlY2lmaWVkIGN1cnJlbmN5IGZvcm1hdFxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxuICogQHBhcmFtIHtDdXJyZW5jeU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KGFtb3VudDogbnVtYmVyIHwgc3RyaW5nLCB7XG4gIGN1cnJlbmN5ID0gJ0VVUicsXG4gIGZyYWN0aW9uRGlnaXRzID0gMixcbiAgbG9jYWxlID0gJ2RlLURlJyxcbiAgc3R5bGUgPSAnY3VycmVuY3knLFxufTogQ3VycmVuY3lPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCB7XG4gICAgY3VycmVuY3ksXG4gICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0cyxcbiAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGZyYWN0aW9uRGlnaXRzLFxuICAgIHN0eWxlLFxuICB9KS5mb3JtYXQoTnVtYmVyKGFtb3VudCkpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBudW1iZXIgdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRcbiAqIEBwYXJhbSB7Q3VycmVuY3lPcHRpb25zfSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIoYW1vdW50OiBudW1iZXIgfCBzdHJpbmcsIHsgZnJhY3Rpb25EaWdpdHMgPSAyIH06IEN1cnJlbmN5T3B0aW9ucykge1xuICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHVuZGVmaW5lZCwge1xuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMsXG4gICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0cyxcbiAgfSkuZm9ybWF0KE51bWJlcihhbW91bnQpKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgbnVtYmVyIHZhbHVlIHdpdGhvdXQgZnJhY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEludGVnZXIoYW1vdW50OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgcmV0dXJuIGZvcm1hdE51bWJlcihhbW91bnQsIHsgZnJhY3Rpb25EaWdpdHM6IDAgfSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuZCByZXR1cm5zIHRoZSBhcnJheSBvZiByb290IGFsbG93ZWQgYXR0cmlidXRlc1xuICogQHBhcmFtIHtTZXR1cENvbnRleHRBdHRyc30gZGF0YVxuICogQHJldHVybnMge1NldHVwQ29udGV4dEF0dHJzS2V5c31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RLZXlzKGRhdGE6IFNldHVwQ29udGV4dEF0dHJzKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKS5maWx0ZXIoa2V5ID0+XG4gICAga2V5LnN0YXJ0c1dpdGgoJ2RhdGEtJyksXG4gICkgYXMgU2V0dXBDb250ZXh0QXR0cnNLZXlzO1xufVxuXG4vKipcbiAqIFBpY2tzIG9ubHkgcmVxdWlyZWQgYXR0cmlidXRlcyBmb3Igcm9vdCBlbGVtZW50XG4gKiBAcGFyYW0ge1NldHVwQ29udGV4dEF0dHJzfSBkYXRhXG4gKiBAcGFyYW0ge1NldHVwQ29udGV4dEF0dHJzS2V5c30gaW5jbHVkZVxuICogQHJldHVybnMge1BpY2s8U2V0dXBDb250ZXh0QXR0cnMsIGFueT59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290QXR0cnMoZGF0YTogU2V0dXBDb250ZXh0QXR0cnMsIGluY2x1ZGU6IFNldHVwQ29udGV4dEF0dHJzS2V5cyA9IFsnY2xhc3MnXSkge1xuICByZXR1cm4gb2JqZWN0UGljayhkYXRhLCBbLi4uZ2V0Um9vdEtleXMoZGF0YSksIC4uLmluY2x1ZGVdKTtcbn1cblxuLyoqXG4gKiBPbWl0cyByb290IGF0dHJpYnV0ZXMgZnJvbSBjb21wb25lbnQncyBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1NldHVwQ29udGV4dEF0dHJzfSBkYXRhXG4gKiBAcGFyYW0ge1NldHVwQ29udGV4dEF0dHJzS2V5c30gZXhjbHVkZVxuICogQHJldHVybnMge09taXQ8U2V0dXBDb250ZXh0QXR0cnMsIGFueT59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb25Sb290QXR0cnMoZGF0YTogU2V0dXBDb250ZXh0QXR0cnMsIGV4Y2x1ZGU6IFNldHVwQ29udGV4dEF0dHJzS2V5cyA9IFsnY2xhc3MnXSkge1xuICByZXR1cm4gb2JqZWN0T21pdChkYXRhLCBbLi4uZ2V0Um9vdEtleXMoZGF0YSksIC4uLmV4Y2x1ZGVdKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBrZXlzIG9mIGFuIG9iamVjdCB0byBlaXRoZXIgY2FtZWxDYXNlIG9yIHNuYWtlX2Nhc2VcbiAqIEBwYXJhbSB7VH0gaXRlbVxuICogQHBhcmFtIHtcImNhbWVsQ2FzZVwiIHwgXCJzbmFrZV9jYXNlXCJ9IHRvXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNhc2U8VCBleHRlbmRzIG9iamVjdD4oaXRlbTogVCwgdG86ICdjYW1lbENhc2UnIHwgJ3NuYWtlX2Nhc2UnKSB7XG4gIGlmICghaXRlbSlcbiAgICByZXR1cm4gaXRlbTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSkucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICBpZiAodG8gPT09ICdjYW1lbENhc2UnKVxuICAgICAgYWNjW2NhbWVsQ2FzZShjdXJyKV0gPSBpdGVtW2N1cnIgYXMga2V5b2YgVF07XG4gICAgZWxzZVxuICAgICAgYWNjW3NuYWtlQ2FzZShjdXJyKV0gPSBpdGVtW2N1cnIgYXMga2V5b2YgVF07XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJuIHtzdHJpbmd9IC0gU3RyaW5nIGNvbnZlcnRlZCB0byB0ZXh0IHRva2VuLCBtb3N0bHkgdXNlZCB0byBtYXRjaGluZyBrZXl3b3JkXG4gKiBAZXhhbXBsZVxuICogZ2V0VGV4dFRva2VuKCd0aGlzIGlzIGEgc2VudGVuY2UnKTsgLy8gdGhpc2lzYXNlbnRlbmNlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRUb2tlbihzdHJpbmc6IGFueSk6IHN0cmluZyB7XG4gIGlmICghc3RyaW5nKVxuICAgIHJldHVybiAnJztcblxuICByZXR1cm4gc3RyaW5nLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlxcZGEtel0vZ2ksICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVByb3BzVW5pdCh2YWx1ZT86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIGlzTmFOKE51bWJlcih2YWx1ZSkpKSlcbiAgICByZXR1cm4gdmFsdWU7XG4gIHJldHVybiBgJHt2YWx1ZX1weGA7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZTogYW55LCBvdGhlcjogYW55KSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZXMgYXJlIGlkZW50aWNhbCAoY292ZXJzIHByaW1pdGl2ZXMgYW5kIGZ1bmN0aW9ucylcbiAgaWYgKHZhbHVlID09PSBvdGhlcilcbiAgICByZXR1cm4gdHJ1ZTtcblxuICAvLyBDaGVjayBpZiB0aGUgdmFsdWVzIGFyZSBudWxsIG9yIHVuZGVmaW5lZFxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsKVxuICAgIHJldHVybiB2YWx1ZSA9PT0gb3RoZXI7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiBvdGhlcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBhcnJheXNcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG90aGVyKSB8fCB2YWx1ZS5sZW5ndGggIT09IG90aGVyLmxlbmd0aClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2ksIGVsZW1lbnRdIG9mIHZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFpc0VxdWFsKGVsZW1lbnQsIG90aGVyW2ldKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENvbXBhcmUgb2JqZWN0c1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHZhbHVlS2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICBjb25zdCBvdGhlcktleXMgPSBPYmplY3Qua2V5cyhvdGhlcik7XG5cbiAgICBpZiAodmFsdWVLZXlzLmxlbmd0aCAhPT0gb3RoZXJLZXlzLmxlbmd0aClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIHZhbHVlS2V5cykge1xuICAgICAgaWYgKCFpc0VxdWFsKHZhbHVlW2tleV0sIG90aGVyW2tleV0pKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgbmVpdGhlciBwcmltaXRpdmVzLCBhcnJheXMsIG5vciBvYmplY3RzLCByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiZXhwb3J0IGNvbnN0IHVzZUdsb2JhbElkID0gY3JlYXRlR2xvYmFsU3RhdGUoKCkgPT4ge1xuICBjb25zdCBjb3VudCA9IHJlZigwKTtcblxuICBjb25zdCBuZXh0SWQgPSAoKSA9PiB7XG4gICAgY29uc3QgY291bnRWYWwgPSBnZXQoY291bnQpICsgMTtcbiAgICBzZXQoY291bnQsIGNvdW50VmFsKTtcblxuICAgIHJldHVybiBjb3VudFZhbDtcbiAgfTtcblxuICByZXR1cm4geyBjb3VudCwgbmV4dElkIH07XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSWQocHJlZml4ID0gJycpIHtcbiAgY29uc3QgeyBuZXh0SWQgfSA9IHVzZUdsb2JhbElkKCk7XG5cbiAgcmV0dXJuIGAke3ByZWZpeH0tJHtuZXh0SWQoKX1gO1xufVxuIiwiLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW0vYmxvY2tpZXNcbi8vIFRoZSByYW5kb20gbnVtYmVyIGlzIGEganMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFhvcnNoaWZ0IFBSTkdcbmludGVyZmFjZSBCbG9ja2llT3B0aW9ucyB7XG4gIC8qKiBzZWVkIHVzZWQgdG8gZ2VuZXJhdGUgaWNvbiBkYXRhLCBkZWZhdWx0OiByYW5kb20gKi9cbiAgc2VlZDogc3RyaW5nO1xuICAvKiogdG8gbWFudWFsbHkgc3BlY2lmeSB0aGUgaWNvbiBjb2xvciwgZGVmYXVsdDogcmFuZG9tICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBjaG9vc2UgYSBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvciwgZGVmYXVsdDogcmFuZG9tICovXG4gIGJnY29sb3I6IHN0cmluZztcbiAgLyoqIHdpZHRoL2hlaWdodCBvZiB0aGUgaWNvbiBpbiBibG9ja3MsIGRlZmF1bHQ6IDggKi9cbiAgc2l6ZTogbnVtYmVyO1xuICAvKiogd2lkdGgvaGVpZ2h0IG9mIGVhY2ggYmxvY2sgaW4gcGl4ZWxzLCBkZWZhdWx0OiA0ICovXG4gIHNjYWxlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBlYWNoIHBpeGVsIGhhcyBhIDEzJSBjaGFuY2Ugb2YgYmVpbmcgb2YgYSB0aGlyZCBjb2xvciwgZGVmYXVsdDogcmFuZG9tLlxuICAgKlxuICAgKiBTZXQgdG8gLTEgdG8gZGlzYWJsZSBpdC5cbiAgICpcbiAgICogVGhlc2UgXCJzcG90c1wiIGNyZWF0ZSBzdHJ1Y3R1cmVzIHRoYXQgbG9vayBsaWtlIGV5ZXMsIG1vdXRocyBhbmQgbm9zZXMuXG4gICAqL1xuICBzcG90Q29sb3I6IHN0cmluZztcbn1cblxuY29uc3QgcmFuZFNlZWQgPSBuZXcgQXJyYXkoNCk7IC8vIFhvcnNoaWZ0OiBbeCwgeSwgeiwgd10gMzIgYml0IHZhbHVlc1xuXG5mdW5jdGlvbiBzZWVkUmFuZChzZWVkOiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kU2VlZC5sZW5ndGg7IGkrKykgcmFuZFNlZWRbaV0gPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKylcbiAgICByYW5kU2VlZFtpICUgNF0gPSAocmFuZFNlZWRbaSAlIDRdIDw8IDUpIC0gcmFuZFNlZWRbaSAlIDRdICsgc2VlZC5jaGFyQ29kZUF0KGkpO1xufVxuXG5mdW5jdGlvbiByYW5kKCk6IG51bWJlciB7XG4gIC8vIGJhc2VkIG9uIEphdmEncyBTdHJpbmcuaGFzaENvZGUoKSwgZXhwYW5kZWQgdG8gNCAzMmJpdCB2YWx1ZXNcbiAgY29uc3QgdCA9IHJhbmRTZWVkWzBdIF4gKHJhbmRTZWVkWzBdIDw8IDExKTtcblxuICByYW5kU2VlZFswXSA9IHJhbmRTZWVkWzFdO1xuICByYW5kU2VlZFsxXSA9IHJhbmRTZWVkWzJdO1xuICByYW5kU2VlZFsyXSA9IHJhbmRTZWVkWzNdO1xuICByYW5kU2VlZFszXSA9IHJhbmRTZWVkWzNdIF4gKHJhbmRTZWVkWzNdID4+IDE5KSBeIHQgXiAodCA+PiA4KTtcblxuICByZXR1cm4gKHJhbmRTZWVkWzNdID4+PiAwKSAvICgoMSA8PCAzMSkgPj4+IDApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb2xvcigpOiBzdHJpbmcge1xuICAvLyBzYXR1cmF0aW9uIGlzIHRoZSB3aG9sZSBjb2xvciBzcGVjdHJ1bVxuICBjb25zdCBoID0gTWF0aC5mbG9vcihyYW5kKCkgKiAzNjApO1xuICAvLyBzYXR1cmF0aW9uIGdvZXMgZnJvbSA0MCB0byAxMDAsIGl0IGF2b2lkcyBncmV5aXNoIGNvbG9yc1xuICBjb25zdCBzID0gYCR7cmFuZCgpICogNjAgKyA0MH0lYDtcbiAgLy8gbGlnaHRuZXNzIGNhbiBiZSBhbnl0aGluZyBmcm9tIDAgdG8gMTAwLCBidXQgcHJvYmFiaWxpdGllcyBhcmUgYSBiZWxsIGN1cnZlIGFyb3VuZCA1MCVcbiAgY29uc3QgbCA9IGAkeyhyYW5kKCkgKyByYW5kKCkgKyByYW5kKCkgKyByYW5kKCkpICogMjV9JWA7XG5cbiAgcmV0dXJuIGBoc2woJHtofSwke3N9LCR7bH0pYDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VEYXRhKHNpemU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3Qgd2lkdGggPSBzaXplOyAvLyBPbmx5IHN1cHBvcnQgc3F1YXJlIGljb25zIGZvciBub3dcbiAgY29uc3QgaGVpZ2h0ID0gc2l6ZTtcblxuICBjb25zdCBkYXRhV2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgY29uc3QgbWlycm9yV2lkdGggPSB3aWR0aCAtIGRhdGFXaWR0aDtcblxuICBjb25zdCBkYXRhID0gW107XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICBsZXQgcm93ID0gW107XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCBkYXRhV2lkdGg7IHgrKykge1xuICAgICAgLy8gdGhpcyBtYWtlcyBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGhhdmUgYSA0MyUgKDEvMi4zKSBwcm9iYWJpbGl0eVxuICAgICAgLy8gc3BvdCBjb2xvciBoYXMgMTMlIGNoYW5jZVxuICAgICAgcm93W3hdID0gTWF0aC5mbG9vcihyYW5kKCkgKiAyLjMpO1xuICAgIH1cbiAgICBjb25zdCByID0gcm93LnNsaWNlKDAsIG1pcnJvcldpZHRoKTtcbiAgICByLnJldmVyc2UoKTtcbiAgICByb3cgPSByb3cuY29uY2F0KHIpO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJvdykgZGF0YS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkT3B0cyhvcHRzOiBQYXJ0aWFsPEJsb2NraWVPcHRpb25zPik6IEJsb2NraWVPcHRpb25zIHtcbiAgY29uc3QgbmV3T3B0czogUGFydGlhbDxCbG9ja2llT3B0aW9ucz4gPSB7fTtcblxuICBuZXdPcHRzLnNlZWQgPSBvcHRzLnNlZWQgfHwgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAgKiogMTYpLnRvU3RyaW5nKDE2KTtcblxuICBzZWVkUmFuZChuZXdPcHRzLnNlZWQpO1xuXG4gIG5ld09wdHMuc2l6ZSA9IG9wdHMuc2l6ZSB8fCA4O1xuICBuZXdPcHRzLnNjYWxlID0gb3B0cy5zY2FsZSB8fCA4O1xuICBuZXdPcHRzLmNvbG9yID0gb3B0cy5jb2xvciB8fCBjcmVhdGVDb2xvcigpO1xuICBuZXdPcHRzLmJnY29sb3IgPSBvcHRzLmJnY29sb3IgfHwgY3JlYXRlQ29sb3IoKTtcbiAgbmV3T3B0cy5zcG90Q29sb3IgPSBvcHRzLnNwb3RDb2xvciB8fCBjcmVhdGVDb2xvcigpO1xuXG4gIHJldHVybiBuZXdPcHRzIGFzIEJsb2NraWVPcHRpb25zO1xufVxuXG5mdW5jdGlvbiByZW5kZXJJY29uKG9wdHM6IFBhcnRpYWw8QmxvY2tpZU9wdGlvbnM+LCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KTogSFRNTENhbnZhc0VsZW1lbnQge1xuICBjb25zdCBuZXdPcHRzOiBCbG9ja2llT3B0aW9ucyA9IGJ1aWxkT3B0cyhvcHRzIHx8IHt9KTtcbiAgY29uc3QgaW1hZ2VEYXRhID0gY3JlYXRlSW1hZ2VEYXRhKG5ld09wdHMuc2l6ZSk7XG4gIGNvbnN0IHdpZHRoID0gTWF0aC5zcXJ0KGltYWdlRGF0YS5sZW5ndGgpO1xuXG4gIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSBuZXdPcHRzLnNpemUgKiBuZXdPcHRzLnNjYWxlO1xuXG4gIGNvbnN0IGNjID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBpZiAoY2MpIHtcbiAgICBjYy5maWxsU3R5bGUgPSBuZXdPcHRzLmJnY29sb3I7XG4gICAgY2MuZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICBjYy5maWxsU3R5bGUgPSBuZXdPcHRzLmNvbG9yO1xuXG4gICAgZm9yIChjb25zdCBbaSwgaW1hZ2VEYXR1bV0gb2YgaW1hZ2VEYXRhLmVudHJpZXMoKSkge1xuICAgICAgLy8gaWYgZGF0YSBpcyAwLCBsZWF2ZSB0aGUgYmFja2dyb3VuZFxuICAgICAgaWYgKGltYWdlRGF0dW0pIHtcbiAgICAgICAgY29uc3Qgcm93ID0gTWF0aC5mbG9vcihpIC8gd2lkdGgpO1xuICAgICAgICBjb25zdCBjb2wgPSBpICUgd2lkdGg7XG5cbiAgICAgICAgLy8gaWYgZGF0YSBpcyAyLCBjaG9vc2Ugc3BvdCBjb2xvciwgaWYgMSBjaG9vc2UgZm9yZWdyb3VuZFxuICAgICAgICBjYy5maWxsU3R5bGUgPSBpbWFnZURhdHVtID09PSAxID8gbmV3T3B0cy5jb2xvciA6IG5ld09wdHMuc3BvdENvbG9yO1xuXG4gICAgICAgIGNjLmZpbGxSZWN0KGNvbCAqIG5ld09wdHMuc2NhbGUsIHJvdyAqIG5ld09wdHMuc2NhbGUsIG5ld09wdHMuc2NhbGUsIG5ld09wdHMuc2NhbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYW52YXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja2llKG9wdHM6IFBhcnRpYWw8QmxvY2tpZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgcmVuZGVySWNvbihvcHRzLCBjYW52YXMpO1xuXG4gIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XG59XG4iXSwibmFtZXMiOlsiQXNzZXJ0aW9uRXJyb3IiLCJtc2ciLCJhc3NlcnQiLCJjb25kaXRpb24iLCJ1c2VGb3JtVGV4dERldGFpbCIsImVycm9yTWVzc2FnZXMiLCJzdWNjZXNzTWVzc2FnZXMiLCJmb3JtYXR0ZWRFcnJvck1lc3NhZ2VzIiwiY29tcHV0ZWQiLCJlcnJvck1lc3NhZ2VzVmFsIiwiZ2V0IiwiaXRlbSIsImZvcm1hdHRlZFN1Y2Nlc3NNZXNzYWdlcyIsInN1Y2Nlc3NNZXNzYWdlc1ZhbCIsImhhc0Vycm9yIiwiaGFzU3VjY2VzcyIsImhhc01lc3NhZ2VzIiwibG9naWNPciIsImZvcm1hdE51bWJlciIsImFtb3VudCIsImZyYWN0aW9uRGlnaXRzIiwiZm9ybWF0SW50ZWdlciIsImdldFJvb3RLZXlzIiwiZGF0YSIsImtleSIsImdldFJvb3RBdHRycyIsImluY2x1ZGUiLCJvYmplY3RQaWNrIiwiZ2V0Tm9uUm9vdEF0dHJzIiwiZXhjbHVkZSIsIm9iamVjdE9taXQiLCJ0cmFuc2Zvcm1DYXNlIiwidG8iLCJhY2MiLCJjdXJyIiwiY2FtZWxDYXNlIiwiZ2V0VGV4dFRva2VuIiwic3RyaW5nIiwidHJhbnNmb3JtUHJvcHNVbml0IiwidmFsdWUiLCJpc0VxdWFsIiwib3RoZXIiLCJpIiwiZWxlbWVudCIsInZhbHVlS2V5cyIsIm90aGVyS2V5cyIsInVzZUdsb2JhbElkIiwiY3JlYXRlR2xvYmFsU3RhdGUiLCJjb3VudCIsInJlZiIsImNvdW50VmFsIiwic2V0IiwiZ2VuZXJhdGVJZCIsInByZWZpeCIsIm5leHRJZCIsInJhbmRTZWVkIiwic2VlZFJhbmQiLCJzZWVkIiwicmFuZCIsImNyZWF0ZUNvbG9yIiwiaCIsInMiLCJsIiwiY3JlYXRlSW1hZ2VEYXRhIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGF0YVdpZHRoIiwibWlycm9yV2lkdGgiLCJ5Iiwicm93IiwieCIsInIiLCJidWlsZE9wdHMiLCJvcHRzIiwibmV3T3B0cyIsInJlbmRlckljb24iLCJjYW52YXMiLCJpbWFnZURhdGEiLCJjYyIsImltYWdlRGF0dW0iLCJjb2wiLCJjcmVhdGVCbG9ja2llIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE1BQU1BLFVBQXVCLE1BQU07QUFBQSxFQUNqQyxZQUFZQyxHQUFjO0FBQ3hCLFVBQU1BLEtBQU8sZ0JBQWdCLEdBQzdCLEtBQUssT0FBTztBQUFBLEVBQ2Q7QUFDRjtBQUVPLFNBQVNDLEVBQU9DLEdBQWdCRixHQUFpQztBQUN0RSxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJSCxFQUFlQyxDQUFHO0FBQ2hDO0FDUE8sU0FBU0csRUFBa0JDLEdBQTRDQyxHQUE4QztBQUMxSCxRQUFNQyxJQUF5QkMsRUFBUyxNQUFNO0FBQzVDLFFBQUlDLElBQW1CQyxFQUFJTCxDQUFhO0FBQ3hDLFdBQUksT0FBT0ksS0FBcUIsYUFDOUJBLElBQW1CLENBQUNBLENBQWdCLElBRS9CQSxFQUFpQixPQUFPLENBQUFFLE1BQVEsQ0FBQyxDQUFDQSxDQUFJO0FBQUEsRUFDL0MsQ0FBQyxHQUVLQyxJQUEyQkosRUFBUyxNQUFNO0FBQzlDLFFBQUlLLElBQXFCSCxFQUFJSixDQUFlO0FBQzVDLFdBQUksT0FBT08sS0FBdUIsYUFDaENBLElBQXFCLENBQUNBLENBQWtCLElBRW5DQSxFQUFtQixPQUFPLENBQUFGLE1BQVEsQ0FBQyxDQUFDQSxDQUFJO0FBQUEsRUFDakQsQ0FBQyxHQUVLRyxJQUFXTixFQUFTLE1BQU1FLEVBQUlILENBQXNCLEVBQUUsU0FBUyxDQUFDLEdB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