@libs-ui/services-grid-layout 0.2.357-23 → 0.2.357-24

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.
@@ -131,7 +131,10 @@ export const findHoveredGroup = (elements, canvasContainer, root) => {
131
131
  /**
132
132
  * Calculates snapped spatial coordinates and pixel dimensions for drop ghost preview box.
133
133
  */
134
- export const calculateDropGhost = (event, canvasContainer, root, payload, totalCols = 24) => {
134
+ export const calculateDropGhost = (event, canvasContainer, root, payload, totalCols = 24,
135
+ // 🔴 Chiều cao một hàng lưới, tính bằng pixel. Trước đây đóng cứng 68 nên khung xem trước vẽ sai cỡ
136
+ // ở mặt phẳng có hàng thấp, nơi dùng phải ẩn khung của thư viện rồi tự vẽ lại.
137
+ rowStep = 68) => {
135
138
  if (typeof document === 'undefined' || !canvasContainer) {
136
139
  return undefined;
137
140
  }
@@ -227,7 +230,6 @@ export const calculateDropGhost = (event, canvasContainer, root, payload, totalC
227
230
  };
228
231
  }
229
232
  const margin = 12;
230
- const rowStep = 68;
231
233
  const gridsterWidth = unscaledWidth || gridsterEl.clientWidth || 1200;
232
234
  const colStep = Math.max(20, (gridsterWidth - margin) / totalCols);
233
235
  const gridsterStageLeft = (gridsterRect.left - stageRect.left) / zoom;
@@ -326,4 +328,4 @@ export const isNodeNestedInside = (root, nodeId) => {
326
328
  export const canToggleTypeNode = (root, node) => isContainerNode(node) || !isNodeNestedInside(root, node.id);
327
329
  /** Có được thêm khối vào BÊN TRONG khối này không. */
328
330
  export const canAddInsideNode = (root, node) => isContainerNode(node) && !isNodeNestedInside(root, node.id);
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGlzaW9uLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLFFBQWtDLEVBQ2xDLENBQVMsRUFDVCxDQUFTLEVBQ1QsSUFBWSxFQUNaLElBQVksRUFDWixTQUFrQixFQUNULEVBQUU7SUFDWCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVyRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxRQUFrQyxFQUNsQyxNQUFjLEVBQ2QsTUFBYyxFQUNkLFNBQWlC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dGVudCI6WyJpbXBvcnQge1xuICBUX2dyaWRMYXlvdXRfZHJvcEdob3N0LFxuICBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCxcbiAgVF9ncmlkTGF5b3V0X25ld05vZGUsXG4gIFRfZ3JpZExheW91dF9ub2RlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSByZWN0YW5ndWxhciByZWdpb24gW3gsIHggKyBjb2xzKSB4IFt5LCB5ICsgcm93cylcbiAqIGlzIGNvbXBsZXRlbHkgdmFjYW50IGFtb25nIGV4aXN0aW5nIGl0ZW1zLlxuICovXG5leHBvcnQgY29uc3QgaXNSZWdpb25GcmVlID0gKFxuICBjaGlsZHJlbjogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+LFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgY29sczogbnVtYmVyLFxuICByb3dzOiBudW1iZXIsXG4gIGlnbm9yZWRJZD86IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgaWYgKGlnbm9yZWRJZCAmJiBjaGlsZC5pZCA9PT0gaWdub3JlZElkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaE92ZXJsYXAgPSAhKGNoaWxkLnggKyBjaGlsZC5jb2xzIDw9IHggfHwgY2hpbGQueCA+PSB4ICsgY29scyk7XG4gICAgY29uc3Qgdk92ZXJsYXAgPSAhKGNoaWxkLnkgKyBjaGlsZC5yb3dzIDw9IHkgfHwgY2hpbGQueSA+PSB5ICsgcm93cyk7XG5cbiAgICBpZiAoaE92ZXJsYXAgJiYgdk92ZXJsYXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgb3B0aW1hbCAoY29sLCByb3cpIGluc2lkZSBhIGdyb3VwIGNvbnRhaW5lci5cbiAqIFNuYXBzIGZsdXNoIHRvIGFkamFjZW50IGNhcmQgcmlnaHQgZWRnZSBpZiBzbG90IGlzIHZhY2FudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRTbmFwUG9zaXRpb25JbnNpZGVHcm91cCA9IChcbiAgY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPixcbiAgcmF3Q29sOiBudW1iZXIsXG4gIHJhd1JvdzogbnVtYmVyLFxuICBpbm5lckNvbHM6IG51bWJlcixcbiAgaW5uZXJSb3dzOiBudW1iZXIsXG4gIHRvdGFsQ29scyA9IDI0LFxuKTogeyBjb2w6IG51bWJlcjsgcm93OiBudW1iZXIgfSA9PiB7XG4gIGxldCBiZXN0Q2FuZGlkYXRlOiB7IGNvbDogbnVtYmVyOyByb3c6IG51bWJlcjsgZGlzdDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGNvbnN0IHJpZ2h0RWRnZSA9IGNoaWxkLnggKyBjaGlsZC5jb2xzO1xuICAgIGNvbnN0IGNhbkZpdCA9IHJpZ2h0RWRnZSArIGlubmVyQ29scyA8PSB0b3RhbENvbHM7XG4gICAgY29uc3QgaXNGcmVlID0gY2FuRml0ICYmIGlzUmVnaW9uRnJlZShjaGlsZHJlbiwgcmlnaHRFZGdlLCBjaGlsZC55LCBpbm5lckNvbHMsIGlubmVyUm93cyk7XG5cbiAgICBpZiAoIWlzRnJlZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmVhclggPSBNYXRoLmFicyhyYXdDb2wgLSByaWdodEVkZ2UpIDw9IDIgfHwgKHJhd0NvbCA+PSBjaGlsZC54ICsgTWF0aC5mbG9vcihjaGlsZC5jb2xzIC8gMikgJiYgcmF3Q29sIDw9IHJpZ2h0RWRnZSArIDEpO1xuICAgIGNvbnN0IG5lYXJZID0gTWF0aC5hYnMocmF3Um93IC0gY2hpbGQueSkgPD0gMjtcblxuICAgIGlmIChuZWFyWCAmJiBuZWFyWSkge1xuICAgICAgY29uc3QgZGlzdCA9IE1hdGguYWJzKHJhd0NvbCAtIHJpZ2h0RWRnZSkgKyBNYXRoLmFicyhyYXdSb3cgLSBjaGlsZC55KTtcblxuICAgICAgaWYgKCFiZXN0Q2FuZGlkYXRlIHx8IGRpc3QgPCBiZXN0Q2FuZGlkYXRlLmRpc3QpIHtcbiAgICAgICAgYmVzdENhbmRpZGF0ZSA9IHsgY29sOiByaWdodEVkZ2UsIHJvdzogY2hpbGQueSwgZGlzdCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChiZXN0Q2FuZGlkYXRlKSB7XG4gICAgcmV0dXJuIHsgY29sOiBiZXN0Q2FuZGlkYXRlLmNvbCwgcm93OiBiZXN0Q2FuZGlkYXRlLnJvdyB9O1xuICB9XG5cbiAgY29uc3QgY2xhbXBlZENvbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRvdGFsQ29scyAtIGlubmVyQ29scywgcmF3Q29sKSk7XG4gIGNvbnN0IGNsYW1wZWRSb3cgPSBNYXRoLm1heCgwLCByYXdSb3cpO1xuXG4gIHJldHVybiB7IGNvbDogY2xhbXBlZENvbCwgcm93OiBjbGFtcGVkUm93IH07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgcG9zaXRpb24gb2YgcGFpciBpZiBob3Jpem9udGFsIG92ZXJsYXAgb2NjdXJzLlxuICovXG5jb25zdCBhZGp1c3RJdGVtUGFpciA9IChhOiBUX2dyaWRMYXlvdXRfbm9kZSwgYjogVF9ncmlkTGF5b3V0X25vZGUpOiBib29sZWFuID0+IHtcbiAgY29uc3QgaE92ZXJsYXAgPSAhKGEueCArIGEuY29scyA8PSBiLnggfHwgYS54ID49IGIueCArIGIuY29scyk7XG5cbiAgaWYgKGhPdmVybGFwICYmIGIueSA8IGEueSArIGEucm93cykge1xuICAgIGIueSA9IGEueSArIGEucm93cztcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB2ZXJ0aWNhbCBjb2xsaXNpb25zIHdoZW4gaW5zZXJ0aW5nIGEgbmV3IGNhcmQgYXQgKG5ld05vZGUueCwgbmV3Tm9kZS55KS5cbiAqIEFueSBleGlzdGluZyBjYXJkIHRoYXQgaG9yaXpvbnRhbGx5IG92ZXJsYXBzIGFuZCB3aG9zZSB2ZXJ0aWNhbCBzcGFuIG92ZXJsYXBzXG4gKiBvciBpcyBiZWxvdyB0aGUgaW5zZXJ0aW9uIHBvaW50IGlzIHB1c2hlZCBkb3duIHNvIHRoZXJlIGlzIG5vIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydCA9IChcbiAgY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPixcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25vZGUsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgaXRlbXMgPSBbLi4uY2hpbGRyZW5dO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGhPdmVybGFwID0gIShpdGVtLnggKyBpdGVtLmNvbHMgPD0gbmV3Tm9kZS54IHx8IGl0ZW0ueCA+PSBuZXdOb2RlLnggKyBuZXdOb2RlLmNvbHMpO1xuICAgIGNvbnN0IHZPdmVybGFwID0gIShpdGVtLnkgKyBpdGVtLnJvd3MgPD0gbmV3Tm9kZS55IHx8IGl0ZW0ueSA+PSBuZXdOb2RlLnkgKyBuZXdOb2RlLnJvd3MpO1xuXG4gICAgaWYgKGhPdmVybGFwICYmIHZPdmVybGFwKSB7XG4gICAgICBpdGVtLnkgPSBuZXdOb2RlLnkgKyBuZXdOb2RlLnJvd3M7XG4gICAgfVxuICB9XG5cbiAgaXRlbXMuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgbGV0IGNoYW5nZWQgPSB0cnVlO1xuXG4gIHdoaWxlIChjaGFuZ2VkKSB7XG4gICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGl0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoYW5nZWQgPSBhZGp1c3RJdGVtUGFpcihpdGVtc1tpXSwgaXRlbXNbal0pIHx8IGNoYW5nZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURyb3BQYXlsb2FkPFQ+KGFjdGl2ZVBheWxvYWQ6IFQgfCB1bmRlZmluZWQsIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyIHwgbnVsbCk6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoYWN0aXZlUGF5bG9hZCkge1xuICAgIHJldHVybiBhY3RpdmVQYXlsb2FkO1xuICB9XG4gIGlmIChkYXRhVHJhbnNmZXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gZGF0YVRyYW5zZmVyLmdldERhdGEoJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgaWYgKHJhdykge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBJX2hvdmVyZWRHcm91cCB7XG4gIGdyb3VwTm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIGdyb3VwR3JpZHN0ZXI6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgZmluZEhvdmVyZWRHcm91cCA9IChcbiAgZWxlbWVudHM6IEVsZW1lbnRbXSxcbiAgY2FudmFzQ29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgcm9vdDogVF9ncmlkTGF5b3V0X25vZGUsXG4pOiBJX2hvdmVyZWRHcm91cCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHJvb3RHcmlkc3RlciA9IGNhbnZhc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdncmlkc3RlcicpO1xuXG4gIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBncmlkc3RlckVsID0gKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2dyaWRzdGVyJyA/IGVsIDogZWwuY2xvc2VzdCgnZ3JpZHN0ZXInKSkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKGdyaWRzdGVyRWwgJiYgZ3JpZHN0ZXJFbCAhPT0gcm9vdEdyaWRzdGVyKSB7XG4gICAgICBjb25zdCBvdXRlckl0ZW0gPSBncmlkc3RlckVsLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcbiAgICAgIGNvbnN0IHJvb3RJdGVtcyA9IHJvb3RHcmlkc3RlciA/IEFycmF5LmZyb20ocm9vdEdyaWRzdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJzpzY29wZSA+IGdyaWRzdGVyLWl0ZW0nKSkgOiBbXTtcbiAgICAgIGNvbnN0IGlkeCA9IG91dGVySXRlbSA/IHJvb3RJdGVtcy5pbmRleE9mKG91dGVySXRlbSkgOiAtMTtcblxuICAgICAgaWYgKGlkeCA+PSAwICYmIHJvb3QuY2hpbGRyZW4/LltpZHhdKSB7XG4gICAgICAgIHJldHVybiB7IGdyb3VwTm9kZTogcm9vdC5jaGlsZHJlbltpZHhdLCBncm91cEdyaWRzdGVyOiBncmlkc3RlckVsIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGl0ZW1FbCA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2dyaWRzdGVyLWl0ZW0nID8gZWwgOiBlbC5jbG9zZXN0KCdncmlkc3Rlci1pdGVtJyk7XG4gICAgaWYgKCFpdGVtRWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByb290SXRlbXMgPSByb290R3JpZHN0ZXIgPyBBcnJheS5mcm9tKHJvb3RHcmlkc3Rlci5xdWVyeVNlbGVjdG9yQWxsKCc6c2NvcGUgPiBncmlkc3Rlci1pdGVtJykpIDogW107XG4gICAgY29uc3QgaWR4ID0gcm9vdEl0ZW1zLmluZGV4T2YoaXRlbUVsKTtcbiAgICBpZiAoaWR4ID49IDAgJiYgcm9vdC5jaGlsZHJlbj8uW2lkeF0pIHtcbiAgICAgIGNvbnN0IG5vZGUgPSByb290LmNoaWxkcmVuW2lkeF07XG4gICAgICBpZiAoKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHsgZ3JvdXBOb2RlOiBub2RlLCBncm91cEdyaWRzdGVyOiAoaXRlbUVsLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyAoaXRlbUVsIGFzIEhUTUxFbGVtZW50KSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgc25hcHBlZCBzcGF0aWFsIGNvb3JkaW5hdGVzIGFuZCBwaXhlbCBkaW1lbnNpb25zIGZvciBkcm9wIGdob3N0IHByZXZpZXcgYm94LlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlRHJvcEdob3N0ID0gKFxuICBldmVudDogRHJhZ0V2ZW50LFxuICBjYW52YXNDb250YWluZXI6IEhUTUxFbGVtZW50LFxuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgcGF5bG9hZDogVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQsXG4gIHRvdGFsQ29scyA9IDI0LFxuKTogVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICFjYW52YXNDb250YWluZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgY2FyZFRpdGxlID0gcGF5bG9hZC50aXRsZSB8fCAnVGjhursnO1xuICBjb25zdCBjYXJkSWNvbkNsYXNzID0gcGF5bG9hZC5pY29uQ2xhc3M7XG4gIGNvbnN0IGNhcmRJY29uVGV4dCA9IHBheWxvYWQuaWNvblRleHQ7XG4gIGNvbnN0IHBheWxvYWRBbnkgPSBwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBsZXQgZGVmYXVsdENvbHMgPSB0eXBlb2YgcGF5bG9hZC5jb2xzID09PSAnbnVtYmVyJ1xuICAgID8gcGF5bG9hZC5jb2xzXG4gICAgOiAodHlwZW9mIHBheWxvYWRBbnlbJ2RlZmF1bHRDb2xzJ10gPT09ICdudW1iZXInID8gKHBheWxvYWRBbnlbJ2RlZmF1bHRDb2xzJ10gYXMgbnVtYmVyKSA6ICh0b3RhbENvbHMgPj0gMjQgPyAxMiA6IDYpKTtcbiAgbGV0IGRlZmF1bHRSb3dzID0gdHlwZW9mIHBheWxvYWQucm93cyA9PT0gJ251bWJlcidcbiAgICA/IHBheWxvYWQucm93c1xuICAgIDogKHR5cGVvZiBwYXlsb2FkQW55WydkZWZhdWx0Um93cyddID09PSAnbnVtYmVyJyA/IChwYXlsb2FkQW55WydkZWZhdWx0Um93cyddIGFzIG51bWJlcikgOiA0KTtcblxuICBpZiAodHlwZW9mIHBheWxvYWRBbnlbJ3Jlc29sdmVOb2RlJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FtcGxlID0gKHBheWxvYWRBbnlbJ3Jlc29sdmVOb2RlJ10gYXMgKGluc2lkZTogYm9vbGVhbikgPT4gVF9ncmlkTGF5b3V0X25ld05vZGUgfCB1bmRlZmluZWQpKGZhbHNlKTtcbiAgICAgIGlmIChzYW1wbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzYW1wbGUuY29scyA9PT0gJ251bWJlcicpIHsgZGVmYXVsdENvbHMgPSBzYW1wbGUuY29sczsgfVxuICAgICAgICBpZiAodHlwZW9mIHNhbXBsZS5yb3dzID09PSAnbnVtYmVyJykgeyBkZWZhdWx0Um93cyA9IHNhbXBsZS5yb3dzOyB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBmYWxsYmFjayB0byBkZWZhdWx0IGNvbHMgYW5kIHJvd3NcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGFnZUVsID0gKGNhbnZhc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjYmktY2FudmFzLXN0YWdlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyBjYW52YXNDb250YWluZXI7XG4gIGNvbnN0IHN0YWdlUmVjdCA9IHN0YWdlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgcm9vdEdyaWRzdGVyID0gc3RhZ2VFbC5xdWVyeVNlbGVjdG9yKCdncmlkc3RlcicpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgY29uc3QgZ3JpZHN0ZXJFbCA9IHJvb3RHcmlkc3RlciA/PyBzdGFnZUVsO1xuICBjb25zdCBncmlkc3RlclJlY3QgPSBncmlkc3RlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1bnNjYWxlZFdpZHRoID0gZ3JpZHN0ZXJFbC5vZmZzZXRXaWR0aCB8fCBncmlkc3RlckVsLmNsaWVudFdpZHRoIHx8IDA7XG4gIGNvbnN0IHpvb20gPSAoZ3JpZHN0ZXJSZWN0LndpZHRoICYmIHVuc2NhbGVkV2lkdGggPiAwKVxuICAgID8gTWF0aC5tYXgoMC4yLCBNYXRoLm1pbigzLCBncmlkc3RlclJlY3Qud2lkdGggLyB1bnNjYWxlZFdpZHRoKSlcbiAgICA6IDE7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0eXBlb2YgZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQgPT09ICdmdW5jdGlvbidcbiAgICA/IGRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgOiBbXTtcbiAgY29uc3QgaG92ZXJlZCA9IGZpbmRIb3ZlcmVkR3JvdXAoZWxlbWVudHMsIGNhbnZhc0NvbnRhaW5lciwgcm9vdCk7XG5cbiAgY29uc3Qgc3RhZ2VNb3VzZVggPSAoZXZlbnQuY2xpZW50WCAtIHN0YWdlUmVjdC5sZWZ0KSAvIHpvb207XG4gIGNvbnN0IHN0YWdlTW91c2VZID0gKGV2ZW50LmNsaWVudFkgLSBzdGFnZVJlY3QudG9wKSAvIHpvb207XG5cbiAgaWYgKGhvdmVyZWQpIHtcbiAgICBjb25zdCB7IGdyb3VwTm9kZSwgZ3JvdXBHcmlkc3RlciB9ID0gaG92ZXJlZDtcbiAgICBjb25zdCBncm91cEdyaWRzdGVyUmVjdCA9IGdyb3VwR3JpZHN0ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZ3JvdXBTdGFnZUxlZnQgPSAoZ3JvdXBHcmlkc3RlclJlY3QubGVmdCAtIHN0YWdlUmVjdC5sZWZ0KSAvIHpvb207XG4gICAgY29uc3QgZ3JvdXBTdGFnZVRvcCA9IChncm91cEdyaWRzdGVyUmVjdC50b3AgLSBzdGFnZVJlY3QudG9wKSAvIHpvb207XG5cbiAgICBsZXQgaW5uZXJDb2xzID0gZGVmYXVsdENvbHM7XG4gICAgbGV0IGlubmVyUm93cyA9IGRlZmF1bHRSb3dzO1xuICAgIGlmICh0eXBlb2YgcGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2FtcGxlSW5zaWRlID0gKHBheWxvYWRBbnlbJ3Jlc29sdmVOb2RlJ10gYXMgKGluc2lkZTogYm9vbGVhbikgPT4gVF9ncmlkTGF5b3V0X25ld05vZGUgfCB1bmRlZmluZWQpKHRydWUpO1xuICAgICAgICBpZiAoc2FtcGxlSW5zaWRlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzYW1wbGVJbnNpZGUuY29scyA9PT0gJ251bWJlcicpIHsgaW5uZXJDb2xzID0gc2FtcGxlSW5zaWRlLmNvbHM7IH1cbiAgICAgICAgICBpZiAodHlwZW9mIHNhbXBsZUluc2lkZS5yb3dzID09PSAnbnVtYmVyJykgeyBpbm5lclJvd3MgPSBzYW1wbGVJbnNpZGUucm93czsgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gZGVmYXVsdCBjb2xzIGFuZCByb3dzXG4gICAgICB9XG4gICAgfVxuICAgIGlubmVyQ29scyA9IE1hdGgubWluKGlubmVyQ29scywgdG90YWxDb2xzKTtcblxuICAgIGNvbnN0IGdyb3VwV2lkdGggPSBncm91cEdyaWRzdGVyLmNsaWVudFdpZHRoIHx8IChncm91cEdyaWRzdGVyUmVjdC53aWR0aCAvIHpvb20pIHx8IDQwMDtcbiAgICBjb25zdCBjb2xTdGVwID0gKGdyb3VwV2lkdGggKyAyKSAvIHRvdGFsQ29scztcbiAgICBjb25zdCByb3dTdGVwID0gMTg7XG4gICAgY29uc3QgcmVsWCA9IChldmVudC5jbGllbnRYIC0gZ3JvdXBHcmlkc3RlclJlY3QubGVmdCkgLyB6b29tICsgZ3JvdXBHcmlkc3Rlci5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHJlbFkgPSAoZXZlbnQuY2xpZW50WSAtIGdyb3VwR3JpZHN0ZXJSZWN0LnRvcCkgLyB6b29tICsgZ3JvdXBHcmlkc3Rlci5zY3JvbGxUb3A7XG4gICAgY29uc3QgcmF3Q29sID0gTWF0aC5mbG9vcihyZWxYIC8gY29sU3RlcCk7XG4gICAgY29uc3QgcmF3Um93ID0gTWF0aC5mbG9vcihyZWxZIC8gcm93U3RlcCk7XG4gICAgY29uc3Qgc25hcCA9IGZpbmRTbmFwUG9zaXRpb25JbnNpZGVHcm91cChcbiAgICAgIGdyb3VwTm9kZS5jaGlsZHJlbiA/PyBbXSxcbiAgICAgIHJhd0NvbCxcbiAgICAgIHJhd1JvdyxcbiAgICAgIGlubmVyQ29scyxcbiAgICAgIGlubmVyUm93cyxcbiAgICAgIHRvdGFsQ29scyxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbDogc25hcC5jb2wsXG4gICAgICByb3c6IHNuYXAucm93LFxuICAgICAgY29sczogaW5uZXJDb2xzLFxuICAgICAgcm93czogaW5uZXJSb3dzLFxuICAgICAgcGl4ZWxMZWZ0OiBncm91cFN0YWdlTGVmdCArIHNuYXAuY29sICogY29sU3RlcCxcbiAgICAgIHBpeGVsVG9wOiBncm91cFN0YWdlVG9wICsgc25hcC5yb3cgKiByb3dTdGVwLFxuICAgICAgcGl4ZWxXaWR0aDogTWF0aC5tYXgoMzAsIGlubmVyQ29scyAqIGNvbFN0ZXAgLSAyKSxcbiAgICAgIHBpeGVsSGVpZ2h0OiBNYXRoLm1heCgyMCwgaW5uZXJSb3dzICogcm93U3RlcCAtIDIpLFxuICAgICAgaXNJbnNpZGVHcm91cDogdHJ1ZSxcbiAgICAgIHRhcmdldFBhcmVudElkOiBncm91cE5vZGUuaWQsXG4gICAgICBncm91cFRpdGxlOiAnS2jhu5FpIGdow6lwJyxcbiAgICAgIGNhcmRUaXRsZSxcbiAgICAgIGNhcmRJY29uQ2xhc3MsXG4gICAgICBjYXJkSWNvblRleHQsXG4gICAgICBob3ZlcmVkR3JpZHN0ZXI6IGdyb3VwR3JpZHN0ZXIgYXMgSFRNTEVsZW1lbnQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG1hcmdpbiA9IDEyO1xuICBjb25zdCByb3dTdGVwID0gNjg7XG4gIGNvbnN0IGdyaWRzdGVyV2lkdGggPSB1bnNjYWxlZFdpZHRoIHx8IGdyaWRzdGVyRWwuY2xpZW50V2lkdGggfHwgMTIwMDtcbiAgY29uc3QgY29sU3RlcCA9IE1hdGgubWF4KDIwLCAoZ3JpZHN0ZXJXaWR0aCAtIG1hcmdpbikgLyB0b3RhbENvbHMpO1xuICBjb25zdCBncmlkc3RlclN0YWdlTGVmdCA9IChncmlkc3RlclJlY3QubGVmdCAtIHN0YWdlUmVjdC5sZWZ0KSAvIHpvb207XG4gIGNvbnN0IGdyaWRzdGVyU3RhZ2VUb3AgPSAoZ3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcbiAgY29uc3QgcmVsWCA9IHN0YWdlTW91c2VYIC0gZ3JpZHN0ZXJTdGFnZUxlZnQgKyBncmlkc3RlckVsLnNjcm9sbExlZnQgLSBtYXJnaW47XG4gIGNvbnN0IHJlbFkgPSBzdGFnZU1vdXNlWSAtIGdyaWRzdGVyU3RhZ2VUb3AgKyBncmlkc3RlckVsLnNjcm9sbFRvcCAtIG1hcmdpbjtcbiAgY29uc3QgaXRlbUNvbHMgPSBNYXRoLm1pbihkZWZhdWx0Q29scywgdG90YWxDb2xzKTtcbiAgY29uc3QgY29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG90YWxDb2xzIC0gaXRlbUNvbHMsIE1hdGguZmxvb3IocmVsWCAvIGNvbFN0ZXApKSk7XG4gIGNvbnN0IHJvdyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmVsWSAvIHJvd1N0ZXApKTtcblxuICByZXR1cm4ge1xuICAgIGNvbCxcbiAgICByb3csXG4gICAgY29sczogaXRlbUNvbHMsXG4gICAgcm93czogZGVmYXVsdFJvd3MsXG4gICAgcGl4ZWxMZWZ0OiBncmlkc3RlclN0YWdlTGVmdCArIG1hcmdpbiArIGNvbCAqIGNvbFN0ZXAsXG4gICAgcGl4ZWxUb3A6IGdyaWRzdGVyU3RhZ2VUb3AgKyBtYXJnaW4gKyByb3cgKiByb3dTdGVwLFxuICAgIHBpeGVsV2lkdGg6IGl0ZW1Db2xzICogY29sU3RlcCAtIG1hcmdpbixcbiAgICBwaXhlbEhlaWdodDogZGVmYXVsdFJvd3MgKiByb3dTdGVwIC0gbWFyZ2luLFxuICAgIGlzSW5zaWRlR3JvdXA6IGZhbHNlLFxuICAgIGNhcmRUaXRsZSxcbiAgICBjYXJkSWNvbkNsYXNzLFxuICAgIGNhcmRJY29uVGV4dCxcbiAgICBob3ZlcmVkR3JpZHN0ZXI6IChyb290R3JpZHN0ZXIgYXMgSFRNTEVsZW1lbnQpID8/IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cblxuLyoqIFTDrG0ga2jhu5FpIHRoZW8gaWQgdHJvbmcgY8OieSwgxJFpIHPDonUgdsOgbyBt4buNaSBjb250YWluZXIuICovXG5leHBvcnQgY29uc3QgZmluZE5vZGVSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChyb290LmlkID09PSBpZCkge1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuID8/IFtdKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTm9kZVJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBUw6xtIGto4buRaSBDSEEgdHLhu7FjIHRp4bq/cCBj4bunYSBt4buZdCBraOG7kWksIMSRaSBzw6J1IHbDoG8gbeG7jWkgY29udGFpbmVyLiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnRSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygcm9vdC5jaGlsZHJlbiA/PyBbXSkge1xuICAgIGlmIChjaGlsZC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kID0gZmluZFBhcmVudFJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogVGjhuqMga2jhu5FpIHbDoG8gxJHDum5nIMO0IG3DoCBnaG9zdCDEkWFuZyBjaOG7iSwgxJHhuql5IGPDoWMga2jhu5FpIHZhIGNo4bqhbSB4deG7kW5nIGTGsOG7m2kuXG4gKlxuICogR2hvc3QgxJFhbmcgbuG6sW0gdHJvbmcgbeG7mXQgY29udGFpbmVyIChgaXNJbnNpZGVHcm91cGApIHRow6wgdGjhuqMgdsOgbyBydeG7mXQgY29udGFpbmVyIMSRw7M7IGtow7RuZyB0w6xtIHRo4bqleVxuICogY29udGFpbmVyIHRow6wgdHLhuqMgYGZhbHNlYCBjaOG7qSBLSMOUTkcgcsahaSB24buBIGzGsOG7m2kgZ+G7kWMg4oCUIHRo4bqjIG5o4bqnbSBj4bqlcCBraMOzIG5o4bqtbiByYSBoxqFuIGzDoCBraMO0bmcgdGjhuqMuXG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wTm9kZUF0Q29vcmRpbmF0ZXMgPSAoXG4gIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLFxuICBnaG9zdDogVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCxcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25ld05vZGVcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub2RlVG9BZGQ6IFRfZ3JpZExheW91dF9ub2RlID0ge1xuICAgIC4uLm5ld05vZGUsXG4gICAgaWQ6IG5ld05vZGUuaWQgPz8gdXVpZCgpLFxuICAgIHg6IGdob3N0LmNvbCxcbiAgICB5OiBnaG9zdC5yb3csXG4gICAgY29sczogZ2hvc3QuY29scyxcbiAgICByb3dzOiBnaG9zdC5yb3dzLFxuICB9O1xuXG4gIGlmIChnaG9zdC5pc0luc2lkZUdyb3VwICYmIGdob3N0LnRhcmdldFBhcmVudElkKSB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGZpbmROb2RlUmVjdXJzaXZlKHJvb3QsIGdob3N0LnRhcmdldFBhcmVudElkKTtcblxuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuID0gcGFyZW50Tm9kZS5jaGlsZHJlbiA/PyBbXTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydChwYXJlbnROb2RlLmNoaWxkcmVuLCBub2RlVG9BZGQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByb290LmNoaWxkcmVuID0gcm9vdC5jaGlsZHJlbiA/PyBbXTtcbiAgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQocm9vdC5jaGlsZHJlbiwgbm9kZVRvQWRkKTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqIEto4buRaSBjw7MgcGjhuqNpIENPTlRBSU5FUiBraMO0bmcg4oCUIHThu6ljIGPDsyBraOG7kWkgY29uIGLDqm4gdHJvbmcuICovXG5leHBvcnQgY29uc3QgaXNDb250YWluZXJOb2RlID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMDtcblxuLyoqIEto4buRaSBjw7MgbuG6sW0gTOG7kk5HIGLDqm4gdHJvbmcgbeG7mXQgY29udGFpbmVyIGtow7RuZyAoa2jDtG5nIHBo4bqjaSBjb24gdHLhu7FjIHRp4bq/cCBj4bunYSBn4buRYykuICovXG5leHBvcnQgY29uc3QgaXNOb2RlTmVzdGVkSW5zaWRlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXJvb3Q/LmNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICFyb290LmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gbm9kZUlkKTtcbn07XG5cbi8qKlxuICogQ8OzIMSRxrDhu6NjIMSR4buVaSBraOG7kWkgxJHGoW4g4oaUIGNvbnRhaW5lciBraMO0bmcuXG4gKlxuICog8J+UtCBCYSBow6BtIGPhu50gbsOgeSBQSOG6okkgbMOgIG5ndeG7k24gZHV5IG5o4bqldCBjaG8gY+G6oyB0aGFuaCBjw7RuZyBj4bulIGPhu6dhIHRoxrAgdmnhu4duIGzhuqtuIG1lbnUgZG8gbsahaSBkw7luZyB04buxXG4gKiBk4buxbmcuIFRyxrDhu5tjIMSRw6J5IG7GoWkgZMO5bmcgcGjhuqNpIGNow6lwIGzhuqFpIHF1eSB04bqvYyDEkeG7gyBk4buxbmcgbWVudSB0csaw4bubYyBsw7pjIHJlbmRlciwgdsOgIGhhaSBi4bqjbiBs4buHY2ggbmhhdVxuICogbeG7l2kga2hpIHRoxrAgdmnhu4duIMSR4buVaSB0cuG6p24gbOG7k25nIGPhuqVwIG3DoCBraMO0bmcgY8OzIGfDrCBiw6FvLlxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlVHlwZU5vZGUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQsIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PlxuICBpc0NvbnRhaW5lck5vZGUobm9kZSkgfHwgIWlzTm9kZU5lc3RlZEluc2lkZShyb290LCBub2RlLmlkKTtcblxuLyoqIEPDsyDEkcaw4bujYyB0aMOqbSBraOG7kWkgdsOgbyBCw4pOIFRST05HIGto4buRaSBuw6B5IGtow7RuZy4gKi9cbmV4cG9ydCBjb25zdCBjYW5BZGRJbnNpZGVOb2RlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IGJvb2xlYW4gPT5cbiAgaXNDb250YWluZXJOb2RlKG5vZGUpICYmICFpc05vZGVOZXN0ZWRJbnNpZGUocm9vdCwgbm9kZS5pZCk7XG4iXX0=
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGlzaW9uLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLFFBQWtDLEVBQ2xDLENBQVMsRUFDVCxDQUFTLEVBQ1QsSUFBWSxFQUNaLElBQVksRUFDWixTQUFrQixFQUNULEVBQUU7SUFDWCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVyRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxRQUFrQyxFQUNsQyxNQUFjLEVBQ2QsTUFBYyxFQUNkLFNBQWlC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QUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBUX2dyaWRMYXlvdXRfZHJvcEdob3N0LFxuICBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCxcbiAgVF9ncmlkTGF5b3V0X25ld05vZGUsXG4gIFRfZ3JpZExheW91dF9ub2RlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSByZWN0YW5ndWxhciByZWdpb24gW3gsIHggKyBjb2xzKSB4IFt5LCB5ICsgcm93cylcbiAqIGlzIGNvbXBsZXRlbHkgdmFjYW50IGFtb25nIGV4aXN0aW5nIGl0ZW1zLlxuICovXG5leHBvcnQgY29uc3QgaXNSZWdpb25GcmVlID0gKFxuICBjaGlsZHJlbjogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+LFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgY29sczogbnVtYmVyLFxuICByb3dzOiBudW1iZXIsXG4gIGlnbm9yZWRJZD86IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgaWYgKGlnbm9yZWRJZCAmJiBjaGlsZC5pZCA9PT0gaWdub3JlZElkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaE92ZXJsYXAgPSAhKGNoaWxkLnggKyBjaGlsZC5jb2xzIDw9IHggfHwgY2hpbGQueCA+PSB4ICsgY29scyk7XG4gICAgY29uc3Qgdk92ZXJsYXAgPSAhKGNoaWxkLnkgKyBjaGlsZC5yb3dzIDw9IHkgfHwgY2hpbGQueSA+PSB5ICsgcm93cyk7XG5cbiAgICBpZiAoaE92ZXJsYXAgJiYgdk92ZXJsYXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgb3B0aW1hbCAoY29sLCByb3cpIGluc2lkZSBhIGdyb3VwIGNvbnRhaW5lci5cbiAqIFNuYXBzIGZsdXNoIHRvIGFkamFjZW50IGNhcmQgcmlnaHQgZWRnZSBpZiBzbG90IGlzIHZhY2FudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRTbmFwUG9zaXRpb25JbnNpZGVHcm91cCA9IChcbiAgY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPixcbiAgcmF3Q29sOiBudW1iZXIsXG4gIHJhd1JvdzogbnVtYmVyLFxuICBpbm5lckNvbHM6IG51bWJlcixcbiAgaW5uZXJSb3dzOiBudW1iZXIsXG4gIHRvdGFsQ29scyA9IDI0LFxuKTogeyBjb2w6IG51bWJlcjsgcm93OiBudW1iZXIgfSA9PiB7XG4gIGxldCBiZXN0Q2FuZGlkYXRlOiB7IGNvbDogbnVtYmVyOyByb3c6IG51bWJlcjsgZGlzdDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGNvbnN0IHJpZ2h0RWRnZSA9IGNoaWxkLnggKyBjaGlsZC5jb2xzO1xuICAgIGNvbnN0IGNhbkZpdCA9IHJpZ2h0RWRnZSArIGlubmVyQ29scyA8PSB0b3RhbENvbHM7XG4gICAgY29uc3QgaXNGcmVlID0gY2FuRml0ICYmIGlzUmVnaW9uRnJlZShjaGlsZHJlbiwgcmlnaHRFZGdlLCBjaGlsZC55LCBpbm5lckNvbHMsIGlubmVyUm93cyk7XG5cbiAgICBpZiAoIWlzRnJlZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmVhclggPSBNYXRoLmFicyhyYXdDb2wgLSByaWdodEVkZ2UpIDw9IDIgfHwgKHJhd0NvbCA+PSBjaGlsZC54ICsgTWF0aC5mbG9vcihjaGlsZC5jb2xzIC8gMikgJiYgcmF3Q29sIDw9IHJpZ2h0RWRnZSArIDEpO1xuICAgIGNvbnN0IG5lYXJZID0gTWF0aC5hYnMocmF3Um93IC0gY2hpbGQueSkgPD0gMjtcblxuICAgIGlmIChuZWFyWCAmJiBuZWFyWSkge1xuICAgICAgY29uc3QgZGlzdCA9IE1hdGguYWJzKHJhd0NvbCAtIHJpZ2h0RWRnZSkgKyBNYXRoLmFicyhyYXdSb3cgLSBjaGlsZC55KTtcblxuICAgICAgaWYgKCFiZXN0Q2FuZGlkYXRlIHx8IGRpc3QgPCBiZXN0Q2FuZGlkYXRlLmRpc3QpIHtcbiAgICAgICAgYmVzdENhbmRpZGF0ZSA9IHsgY29sOiByaWdodEVkZ2UsIHJvdzogY2hpbGQueSwgZGlzdCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChiZXN0Q2FuZGlkYXRlKSB7XG4gICAgcmV0dXJuIHsgY29sOiBiZXN0Q2FuZGlkYXRlLmNvbCwgcm93OiBiZXN0Q2FuZGlkYXRlLnJvdyB9O1xuICB9XG5cbiAgY29uc3QgY2xhbXBlZENvbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRvdGFsQ29scyAtIGlubmVyQ29scywgcmF3Q29sKSk7XG4gIGNvbnN0IGNsYW1wZWRSb3cgPSBNYXRoLm1heCgwLCByYXdSb3cpO1xuXG4gIHJldHVybiB7IGNvbDogY2xhbXBlZENvbCwgcm93OiBjbGFtcGVkUm93IH07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgcG9zaXRpb24gb2YgcGFpciBpZiBob3Jpem9udGFsIG92ZXJsYXAgb2NjdXJzLlxuICovXG5jb25zdCBhZGp1c3RJdGVtUGFpciA9IChhOiBUX2dyaWRMYXlvdXRfbm9kZSwgYjogVF9ncmlkTGF5b3V0X25vZGUpOiBib29sZWFuID0+IHtcbiAgY29uc3QgaE92ZXJsYXAgPSAhKGEueCArIGEuY29scyA8PSBiLnggfHwgYS54ID49IGIueCArIGIuY29scyk7XG5cbiAgaWYgKGhPdmVybGFwICYmIGIueSA8IGEueSArIGEucm93cykge1xuICAgIGIueSA9IGEueSArIGEucm93cztcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB2ZXJ0aWNhbCBjb2xsaXNpb25zIHdoZW4gaW5zZXJ0aW5nIGEgbmV3IGNhcmQgYXQgKG5ld05vZGUueCwgbmV3Tm9kZS55KS5cbiAqIEFueSBleGlzdGluZyBjYXJkIHRoYXQgaG9yaXpvbnRhbGx5IG92ZXJsYXBzIGFuZCB3aG9zZSB2ZXJ0aWNhbCBzcGFuIG92ZXJsYXBzXG4gKiBvciBpcyBiZWxvdyB0aGUgaW5zZXJ0aW9uIHBvaW50IGlzIHB1c2hlZCBkb3duIHNvIHRoZXJlIGlzIG5vIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydCA9IChcbiAgY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPixcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25vZGUsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgaXRlbXMgPSBbLi4uY2hpbGRyZW5dO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGhPdmVybGFwID0gIShpdGVtLnggKyBpdGVtLmNvbHMgPD0gbmV3Tm9kZS54IHx8IGl0ZW0ueCA+PSBuZXdOb2RlLnggKyBuZXdOb2RlLmNvbHMpO1xuICAgIGNvbnN0IHZPdmVybGFwID0gIShpdGVtLnkgKyBpdGVtLnJvd3MgPD0gbmV3Tm9kZS55IHx8IGl0ZW0ueSA+PSBuZXdOb2RlLnkgKyBuZXdOb2RlLnJvd3MpO1xuXG4gICAgaWYgKGhPdmVybGFwICYmIHZPdmVybGFwKSB7XG4gICAgICBpdGVtLnkgPSBuZXdOb2RlLnkgKyBuZXdOb2RlLnJvd3M7XG4gICAgfVxuICB9XG5cbiAgaXRlbXMuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgbGV0IGNoYW5nZWQgPSB0cnVlO1xuXG4gIHdoaWxlIChjaGFuZ2VkKSB7XG4gICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGl0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoYW5nZWQgPSBhZGp1c3RJdGVtUGFpcihpdGVtc1tpXSwgaXRlbXNbal0pIHx8IGNoYW5nZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURyb3BQYXlsb2FkPFQ+KGFjdGl2ZVBheWxvYWQ6IFQgfCB1bmRlZmluZWQsIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyIHwgbnVsbCk6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoYWN0aXZlUGF5bG9hZCkge1xuICAgIHJldHVybiBhY3RpdmVQYXlsb2FkO1xuICB9XG4gIGlmIChkYXRhVHJhbnNmZXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gZGF0YVRyYW5zZmVyLmdldERhdGEoJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgaWYgKHJhdykge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBJX2hvdmVyZWRHcm91cCB7XG4gIGdyb3VwTm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIGdyb3VwR3JpZHN0ZXI6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgZmluZEhvdmVyZWRHcm91cCA9IChcbiAgZWxlbWVudHM6IEVsZW1lbnRbXSxcbiAgY2FudmFzQ29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgcm9vdDogVF9ncmlkTGF5b3V0X25vZGUsXG4pOiBJX2hvdmVyZWRHcm91cCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHJvb3RHcmlkc3RlciA9IGNhbnZhc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdncmlkc3RlcicpO1xuXG4gIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBncmlkc3RlckVsID0gKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2dyaWRzdGVyJyA/IGVsIDogZWwuY2xvc2VzdCgnZ3JpZHN0ZXInKSkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKGdyaWRzdGVyRWwgJiYgZ3JpZHN0ZXJFbCAhPT0gcm9vdEdyaWRzdGVyKSB7XG4gICAgICBjb25zdCBvdXRlckl0ZW0gPSBncmlkc3RlckVsLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcbiAgICAgIGNvbnN0IHJvb3RJdGVtcyA9IHJvb3RHcmlkc3RlciA/IEFycmF5LmZyb20ocm9vdEdyaWRzdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJzpzY29wZSA+IGdyaWRzdGVyLWl0ZW0nKSkgOiBbXTtcbiAgICAgIGNvbnN0IGlkeCA9IG91dGVySXRlbSA/IHJvb3RJdGVtcy5pbmRleE9mKG91dGVySXRlbSkgOiAtMTtcblxuICAgICAgaWYgKGlkeCA+PSAwICYmIHJvb3QuY2hpbGRyZW4/LltpZHhdKSB7XG4gICAgICAgIHJldHVybiB7IGdyb3VwTm9kZTogcm9vdC5jaGlsZHJlbltpZHhdLCBncm91cEdyaWRzdGVyOiBncmlkc3RlckVsIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGl0ZW1FbCA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2dyaWRzdGVyLWl0ZW0nID8gZWwgOiBlbC5jbG9zZXN0KCdncmlkc3Rlci1pdGVtJyk7XG4gICAgaWYgKCFpdGVtRWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByb290SXRlbXMgPSByb290R3JpZHN0ZXIgPyBBcnJheS5mcm9tKHJvb3RHcmlkc3Rlci5xdWVyeVNlbGVjdG9yQWxsKCc6c2NvcGUgPiBncmlkc3Rlci1pdGVtJykpIDogW107XG4gICAgY29uc3QgaWR4ID0gcm9vdEl0ZW1zLmluZGV4T2YoaXRlbUVsKTtcbiAgICBpZiAoaWR4ID49IDAgJiYgcm9vdC5jaGlsZHJlbj8uW2lkeF0pIHtcbiAgICAgIGNvbnN0IG5vZGUgPSByb290LmNoaWxkcmVuW2lkeF07XG4gICAgICBpZiAoKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHsgZ3JvdXBOb2RlOiBub2RlLCBncm91cEdyaWRzdGVyOiAoaXRlbUVsLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyAoaXRlbUVsIGFzIEhUTUxFbGVtZW50KSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgc25hcHBlZCBzcGF0aWFsIGNvb3JkaW5hdGVzIGFuZCBwaXhlbCBkaW1lbnNpb25zIGZvciBkcm9wIGdob3N0IHByZXZpZXcgYm94LlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlRHJvcEdob3N0ID0gKFxuICBldmVudDogRHJhZ0V2ZW50LFxuICBjYW52YXNDb250YWluZXI6IEhUTUxFbGVtZW50LFxuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgcGF5bG9hZDogVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQsXG4gIHRvdGFsQ29scyA9IDI0LFxuICAvLyDwn5S0IENoaeG7gXUgY2FvIG3hu5l0IGjDoG5nIGzGsOG7m2ksIHTDrW5oIGLhurFuZyBwaXhlbC4gVHLGsOG7m2MgxJHDonkgxJHDs25nIGPhu6luZyA2OCBuw6puIGtodW5nIHhlbSB0csaw4bubYyB24bq9IHNhaSBj4buhXG4gIC8vIOG7nyBt4bq3dCBwaOG6s25nIGPDsyBow6BuZyB0aOG6pXAsIG7GoWkgZMO5bmcgcGjhuqNpIOG6qW4ga2h1bmcgY+G7p2EgdGjGsCB2aeG7h24gcuG7k2kgdOG7sSB24bq9IGzhuqFpLlxuICByb3dTdGVwID0gNjgsXG4pOiBUX2dyaWRMYXlvdXRfZHJvcEdob3N0IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWNhbnZhc0NvbnRhaW5lcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYXJkVGl0bGUgPSBwYXlsb2FkLnRpdGxlIHx8ICdUaOG6uyc7XG4gIGNvbnN0IGNhcmRJY29uQ2xhc3MgPSBwYXlsb2FkLmljb25DbGFzcztcbiAgY29uc3QgY2FyZEljb25UZXh0ID0gcGF5bG9hZC5pY29uVGV4dDtcbiAgY29uc3QgcGF5bG9hZEFueSA9IHBheWxvYWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxldCBkZWZhdWx0Q29scyA9IHR5cGVvZiBwYXlsb2FkLmNvbHMgPT09ICdudW1iZXInXG4gICAgPyBwYXlsb2FkLmNvbHNcbiAgICA6ICh0eXBlb2YgcGF5bG9hZEFueVsnZGVmYXVsdENvbHMnXSA9PT0gJ251bWJlcicgPyAocGF5bG9hZEFueVsnZGVmYXVsdENvbHMnXSBhcyBudW1iZXIpIDogKHRvdGFsQ29scyA+PSAyNCA/IDEyIDogNikpO1xuICBsZXQgZGVmYXVsdFJvd3MgPSB0eXBlb2YgcGF5bG9hZC5yb3dzID09PSAnbnVtYmVyJ1xuICAgID8gcGF5bG9hZC5yb3dzXG4gICAgOiAodHlwZW9mIHBheWxvYWRBbnlbJ2RlZmF1bHRSb3dzJ10gPT09ICdudW1iZXInID8gKHBheWxvYWRBbnlbJ2RlZmF1bHRSb3dzJ10gYXMgbnVtYmVyKSA6IDQpO1xuXG4gIGlmICh0eXBlb2YgcGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW1wbGUgPSAocGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSBhcyAoaW5zaWRlOiBib29sZWFuKSA9PiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSB8IHVuZGVmaW5lZCkoZmFsc2UpO1xuICAgICAgaWYgKHNhbXBsZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNhbXBsZS5jb2xzID09PSAnbnVtYmVyJykgeyBkZWZhdWx0Q29scyA9IHNhbXBsZS5jb2xzOyB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlLnJvd3MgPT09ICdudW1iZXInKSB7IGRlZmF1bHRSb3dzID0gc2FtcGxlLnJvd3M7IH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgY29scyBhbmQgcm93c1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YWdlRWwgPSAoY2FudmFzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNiaS1jYW52YXMtc3RhZ2UnKSBhcyBIVE1MRWxlbWVudCB8IG51bGwpID8/IGNhbnZhc0NvbnRhaW5lcjtcbiAgY29uc3Qgc3RhZ2VSZWN0ID0gc3RhZ2VFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCByb290R3JpZHN0ZXIgPSBzdGFnZUVsLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBncmlkc3RlckVsID0gcm9vdEdyaWRzdGVyID8/IHN0YWdlRWw7XG4gIGNvbnN0IGdyaWRzdGVyUmVjdCA9IGdyaWRzdGVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVuc2NhbGVkV2lkdGggPSBncmlkc3RlckVsLm9mZnNldFdpZHRoIHx8IGdyaWRzdGVyRWwuY2xpZW50V2lkdGggfHwgMDtcbiAgY29uc3Qgem9vbSA9IChncmlkc3RlclJlY3Qud2lkdGggJiYgdW5zY2FsZWRXaWR0aCA+IDApXG4gICAgPyBNYXRoLm1heCgwLjIsIE1hdGgubWluKDMsIGdyaWRzdGVyUmVjdC53aWR0aCAvIHVuc2NhbGVkV2lkdGgpKVxuICAgIDogMTtcblxuICBjb25zdCBlbGVtZW50cyA9IHR5cGVvZiBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcbiAgICA6IFtdO1xuICBjb25zdCBob3ZlcmVkID0gZmluZEhvdmVyZWRHcm91cChlbGVtZW50cywgY2FudmFzQ29udGFpbmVyLCByb290KTtcblxuICBjb25zdCBzdGFnZU1vdXNlWCA9IChldmVudC5jbGllbnRYIC0gc3RhZ2VSZWN0LmxlZnQpIC8gem9vbTtcbiAgY29uc3Qgc3RhZ2VNb3VzZVkgPSAoZXZlbnQuY2xpZW50WSAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcblxuICBpZiAoaG92ZXJlZCkge1xuICAgIGNvbnN0IHsgZ3JvdXBOb2RlLCBncm91cEdyaWRzdGVyIH0gPSBob3ZlcmVkO1xuICAgIGNvbnN0IGdyb3VwR3JpZHN0ZXJSZWN0ID0gZ3JvdXBHcmlkc3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBncm91cFN0YWdlTGVmdCA9IChncm91cEdyaWRzdGVyUmVjdC5sZWZ0IC0gc3RhZ2VSZWN0LmxlZnQpIC8gem9vbTtcbiAgICBjb25zdCBncm91cFN0YWdlVG9wID0gKGdyb3VwR3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcblxuICAgIGxldCBpbm5lckNvbHMgPSBkZWZhdWx0Q29scztcbiAgICBsZXQgaW5uZXJSb3dzID0gZGVmYXVsdFJvd3M7XG4gICAgaWYgKHR5cGVvZiBwYXlsb2FkQW55WydyZXNvbHZlTm9kZSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzYW1wbGVJbnNpZGUgPSAocGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSBhcyAoaW5zaWRlOiBib29sZWFuKSA9PiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSB8IHVuZGVmaW5lZCkodHJ1ZSk7XG4gICAgICAgIGlmIChzYW1wbGVJbnNpZGUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhbXBsZUluc2lkZS5jb2xzID09PSAnbnVtYmVyJykgeyBpbm5lckNvbHMgPSBzYW1wbGVJbnNpZGUuY29sczsgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlSW5zaWRlLnJvd3MgPT09ICdudW1iZXInKSB7IGlubmVyUm93cyA9IHNhbXBsZUluc2lkZS5yb3dzOyB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBkZWZhdWx0IGNvbHMgYW5kIHJvd3NcbiAgICAgIH1cbiAgICB9XG4gICAgaW5uZXJDb2xzID0gTWF0aC5taW4oaW5uZXJDb2xzLCB0b3RhbENvbHMpO1xuXG4gICAgY29uc3QgZ3JvdXBXaWR0aCA9IGdyb3VwR3JpZHN0ZXIuY2xpZW50V2lkdGggfHwgKGdyb3VwR3JpZHN0ZXJSZWN0LndpZHRoIC8gem9vbSkgfHwgNDAwO1xuICAgIGNvbnN0IGNvbFN0ZXAgPSAoZ3JvdXBXaWR0aCArIDIpIC8gdG90YWxDb2xzO1xuICAgIGNvbnN0IHJvd1N0ZXAgPSAxODtcbiAgICBjb25zdCByZWxYID0gKGV2ZW50LmNsaWVudFggLSBncm91cEdyaWRzdGVyUmVjdC5sZWZ0KSAvIHpvb20gKyBncm91cEdyaWRzdGVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVsWSA9IChldmVudC5jbGllbnRZIC0gZ3JvdXBHcmlkc3RlclJlY3QudG9wKSAvIHpvb20gKyBncm91cEdyaWRzdGVyLnNjcm9sbFRvcDtcbiAgICBjb25zdCByYXdDb2wgPSBNYXRoLmZsb29yKHJlbFggLyBjb2xTdGVwKTtcbiAgICBjb25zdCByYXdSb3cgPSBNYXRoLmZsb29yKHJlbFkgLyByb3dTdGVwKTtcbiAgICBjb25zdCBzbmFwID0gZmluZFNuYXBQb3NpdGlvbkluc2lkZUdyb3VwKFxuICAgICAgZ3JvdXBOb2RlLmNoaWxkcmVuID8/IFtdLFxuICAgICAgcmF3Q29sLFxuICAgICAgcmF3Um93LFxuICAgICAgaW5uZXJDb2xzLFxuICAgICAgaW5uZXJSb3dzLFxuICAgICAgdG90YWxDb2xzLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sOiBzbmFwLmNvbCxcbiAgICAgIHJvdzogc25hcC5yb3csXG4gICAgICBjb2xzOiBpbm5lckNvbHMsXG4gICAgICByb3dzOiBpbm5lclJvd3MsXG4gICAgICBwaXhlbExlZnQ6IGdyb3VwU3RhZ2VMZWZ0ICsgc25hcC5jb2wgKiBjb2xTdGVwLFxuICAgICAgcGl4ZWxUb3A6IGdyb3VwU3RhZ2VUb3AgKyBzbmFwLnJvdyAqIHJvd1N0ZXAsXG4gICAgICBwaXhlbFdpZHRoOiBNYXRoLm1heCgzMCwgaW5uZXJDb2xzICogY29sU3RlcCAtIDIpLFxuICAgICAgcGl4ZWxIZWlnaHQ6IE1hdGgubWF4KDIwLCBpbm5lclJvd3MgKiByb3dTdGVwIC0gMiksXG4gICAgICBpc0luc2lkZUdyb3VwOiB0cnVlLFxuICAgICAgdGFyZ2V0UGFyZW50SWQ6IGdyb3VwTm9kZS5pZCxcbiAgICAgIGdyb3VwVGl0bGU6ICdLaOG7kWkgZ2jDqXAnLFxuICAgICAgY2FyZFRpdGxlLFxuICAgICAgY2FyZEljb25DbGFzcyxcbiAgICAgIGNhcmRJY29uVGV4dCxcbiAgICAgIGhvdmVyZWRHcmlkc3RlcjogZ3JvdXBHcmlkc3RlciBhcyBIVE1MRWxlbWVudCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWFyZ2luID0gMTI7XG4gIGNvbnN0IGdyaWRzdGVyV2lkdGggPSB1bnNjYWxlZFdpZHRoIHx8IGdyaWRzdGVyRWwuY2xpZW50V2lkdGggfHwgMTIwMDtcbiAgY29uc3QgY29sU3RlcCA9IE1hdGgubWF4KDIwLCAoZ3JpZHN0ZXJXaWR0aCAtIG1hcmdpbikgLyB0b3RhbENvbHMpO1xuICBjb25zdCBncmlkc3RlclN0YWdlTGVmdCA9IChncmlkc3RlclJlY3QubGVmdCAtIHN0YWdlUmVjdC5sZWZ0KSAvIHpvb207XG4gIGNvbnN0IGdyaWRzdGVyU3RhZ2VUb3AgPSAoZ3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcbiAgY29uc3QgcmVsWCA9IHN0YWdlTW91c2VYIC0gZ3JpZHN0ZXJTdGFnZUxlZnQgKyBncmlkc3RlckVsLnNjcm9sbExlZnQgLSBtYXJnaW47XG4gIGNvbnN0IHJlbFkgPSBzdGFnZU1vdXNlWSAtIGdyaWRzdGVyU3RhZ2VUb3AgKyBncmlkc3RlckVsLnNjcm9sbFRvcCAtIG1hcmdpbjtcbiAgY29uc3QgaXRlbUNvbHMgPSBNYXRoLm1pbihkZWZhdWx0Q29scywgdG90YWxDb2xzKTtcbiAgY29uc3QgY29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG90YWxDb2xzIC0gaXRlbUNvbHMsIE1hdGguZmxvb3IocmVsWCAvIGNvbFN0ZXApKSk7XG4gIGNvbnN0IHJvdyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmVsWSAvIHJvd1N0ZXApKTtcblxuICByZXR1cm4ge1xuICAgIGNvbCxcbiAgICByb3csXG4gICAgY29sczogaXRlbUNvbHMsXG4gICAgcm93czogZGVmYXVsdFJvd3MsXG4gICAgcGl4ZWxMZWZ0OiBncmlkc3RlclN0YWdlTGVmdCArIG1hcmdpbiArIGNvbCAqIGNvbFN0ZXAsXG4gICAgcGl4ZWxUb3A6IGdyaWRzdGVyU3RhZ2VUb3AgKyBtYXJnaW4gKyByb3cgKiByb3dTdGVwLFxuICAgIHBpeGVsV2lkdGg6IGl0ZW1Db2xzICogY29sU3RlcCAtIG1hcmdpbixcbiAgICBwaXhlbEhlaWdodDogZGVmYXVsdFJvd3MgKiByb3dTdGVwIC0gbWFyZ2luLFxuICAgIGlzSW5zaWRlR3JvdXA6IGZhbHNlLFxuICAgIGNhcmRUaXRsZSxcbiAgICBjYXJkSWNvbkNsYXNzLFxuICAgIGNhcmRJY29uVGV4dCxcbiAgICBob3ZlcmVkR3JpZHN0ZXI6IChyb290R3JpZHN0ZXIgYXMgSFRNTEVsZW1lbnQpID8/IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cblxuLyoqIFTDrG0ga2jhu5FpIHRoZW8gaWQgdHJvbmcgY8OieSwgxJFpIHPDonUgdsOgbyBt4buNaSBjb250YWluZXIuICovXG5leHBvcnQgY29uc3QgZmluZE5vZGVSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChyb290LmlkID09PSBpZCkge1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuID8/IFtdKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTm9kZVJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBUw6xtIGto4buRaSBDSEEgdHLhu7FjIHRp4bq/cCBj4bunYSBt4buZdCBraOG7kWksIMSRaSBzw6J1IHbDoG8gbeG7jWkgY29udGFpbmVyLiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnRSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygcm9vdC5jaGlsZHJlbiA/PyBbXSkge1xuICAgIGlmIChjaGlsZC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kID0gZmluZFBhcmVudFJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogVGjhuqMga2jhu5FpIHbDoG8gxJHDum5nIMO0IG3DoCBnaG9zdCDEkWFuZyBjaOG7iSwgxJHhuql5IGPDoWMga2jhu5FpIHZhIGNo4bqhbSB4deG7kW5nIGTGsOG7m2kuXG4gKlxuICogR2hvc3QgxJFhbmcgbuG6sW0gdHJvbmcgbeG7mXQgY29udGFpbmVyIChgaXNJbnNpZGVHcm91cGApIHRow6wgdGjhuqMgdsOgbyBydeG7mXQgY29udGFpbmVyIMSRw7M7IGtow7RuZyB0w6xtIHRo4bqleVxuICogY29udGFpbmVyIHRow6wgdHLhuqMgYGZhbHNlYCBjaOG7qSBLSMOUTkcgcsahaSB24buBIGzGsOG7m2kgZ+G7kWMg4oCUIHRo4bqjIG5o4bqnbSBj4bqlcCBraMOzIG5o4bqtbiByYSBoxqFuIGzDoCBraMO0bmcgdGjhuqMuXG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wTm9kZUF0Q29vcmRpbmF0ZXMgPSAoXG4gIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLFxuICBnaG9zdDogVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCxcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25ld05vZGVcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub2RlVG9BZGQ6IFRfZ3JpZExheW91dF9ub2RlID0ge1xuICAgIC4uLm5ld05vZGUsXG4gICAgaWQ6IG5ld05vZGUuaWQgPz8gdXVpZCgpLFxuICAgIHg6IGdob3N0LmNvbCxcbiAgICB5OiBnaG9zdC5yb3csXG4gICAgY29sczogZ2hvc3QuY29scyxcbiAgICByb3dzOiBnaG9zdC5yb3dzLFxuICB9O1xuXG4gIGlmIChnaG9zdC5pc0luc2lkZUdyb3VwICYmIGdob3N0LnRhcmdldFBhcmVudElkKSB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGZpbmROb2RlUmVjdXJzaXZlKHJvb3QsIGdob3N0LnRhcmdldFBhcmVudElkKTtcblxuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuID0gcGFyZW50Tm9kZS5jaGlsZHJlbiA/PyBbXTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydChwYXJlbnROb2RlLmNoaWxkcmVuLCBub2RlVG9BZGQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByb290LmNoaWxkcmVuID0gcm9vdC5jaGlsZHJlbiA/PyBbXTtcbiAgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQocm9vdC5jaGlsZHJlbiwgbm9kZVRvQWRkKTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqIEto4buRaSBjw7MgcGjhuqNpIENPTlRBSU5FUiBraMO0bmcg4oCUIHThu6ljIGPDsyBraOG7kWkgY29uIGLDqm4gdHJvbmcuICovXG5leHBvcnQgY29uc3QgaXNDb250YWluZXJOb2RlID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMDtcblxuLyoqIEto4buRaSBjw7MgbuG6sW0gTOG7kk5HIGLDqm4gdHJvbmcgbeG7mXQgY29udGFpbmVyIGtow7RuZyAoa2jDtG5nIHBo4bqjaSBjb24gdHLhu7FjIHRp4bq/cCBj4bunYSBn4buRYykuICovXG5leHBvcnQgY29uc3QgaXNOb2RlTmVzdGVkSW5zaWRlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXJvb3Q/LmNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICFyb290LmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gbm9kZUlkKTtcbn07XG5cbi8qKlxuICogQ8OzIMSRxrDhu6NjIMSR4buVaSBraOG7kWkgxJHGoW4g4oaUIGNvbnRhaW5lciBraMO0bmcuXG4gKlxuICog8J+UtCBCYSBow6BtIGPhu50gbsOgeSBQSOG6okkgbMOgIG5ndeG7k24gZHV5IG5o4bqldCBjaG8gY+G6oyB0aGFuaCBjw7RuZyBj4bulIGPhu6dhIHRoxrAgdmnhu4duIGzhuqtuIG1lbnUgZG8gbsahaSBkw7luZyB04buxXG4gKiBk4buxbmcuIFRyxrDhu5tjIMSRw6J5IG7GoWkgZMO5bmcgcGjhuqNpIGNow6lwIGzhuqFpIHF1eSB04bqvYyDEkeG7gyBk4buxbmcgbWVudSB0csaw4bubYyBsw7pjIHJlbmRlciwgdsOgIGhhaSBi4bqjbiBs4buHY2ggbmhhdVxuICogbeG7l2kga2hpIHRoxrAgdmnhu4duIMSR4buVaSB0cuG6p24gbOG7k25nIGPhuqVwIG3DoCBraMO0bmcgY8OzIGfDrCBiw6FvLlxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlVHlwZU5vZGUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQsIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PlxuICBpc0NvbnRhaW5lck5vZGUobm9kZSkgfHwgIWlzTm9kZU5lc3RlZEluc2lkZShyb290LCBub2RlLmlkKTtcblxuLyoqIEPDsyDEkcaw4bujYyB0aMOqbSBraOG7kWkgdsOgbyBCw4pOIFRST05HIGto4buRaSBuw6B5IGtow7RuZy4gKi9cbmV4cG9ydCBjb25zdCBjYW5BZGRJbnNpZGVOb2RlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IGJvb2xlYW4gPT5cbiAgaXNDb250YWluZXJOb2RlKG5vZGUpICYmICFpc05vZGVOZXN0ZWRJbnNpZGUocm9vdCwgbm9kZS5pZCk7XG4iXX0=
@@ -52,7 +52,9 @@ export class LibsUiGridLayoutDragController {
52
52
  * Gọi ở `dragover` của khung chứa mặt phẳng. Trả ghost để nơi dùng vẽ khung xem trước, đồng thời
53
53
  * tự bật ô li của lưới đang được kéo tới.
54
54
  */
55
- onDragOver(event, container, root, totalCols) {
55
+ onDragOver(event, container, root, totalCols,
56
+ // Chiều cao một hàng lưới (pixel) để khung xem trước đúng cỡ; không truyền thì giữ mặc định cũ.
57
+ rowStep) {
56
58
  event.preventDefault();
57
59
  if (event.dataTransfer) {
58
60
  event.dataTransfer.dropEffect = 'copy';
@@ -61,7 +63,7 @@ export class LibsUiGridLayoutDragController {
61
63
  return undefined;
62
64
  }
63
65
  this.showRootGrid(container);
64
- const ghost = calculateDropGhost(event, container, root, this.payload, totalCols);
66
+ const ghost = calculateDropGhost(event, container, root, this.payload, totalCols, rowStep);
65
67
  if (!ghost?.isInsideGroup || !ghost.hoveredGridster) {
66
68
  this.cleanupHoveredGroup();
67
69
  return ghost;
@@ -86,4 +88,4 @@ export class LibsUiGridLayoutDragController {
86
88
  this.rootGridsterElement = rootGridster;
87
89
  }
88
90
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvZHJhZy1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLDRFQUE0RTtBQUM1RSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFFckM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sOEJBQThCO0lBQ2pDLE9BQU8sQ0FBb0M7SUFDM0MsY0FBYyxDQUFlO0lBQzdCLG1CQUFtQixDQUFlO0lBRTFDLDZFQUE2RTtJQUM3RSxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELCtDQUErQztJQUMvQyxXQUFXLENBQUMsT0FBeUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxTQUFTLENBQUMsU0FBdUI7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsZUFBZSxDQUFDLFNBQXVCO1FBQ3JDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFlBQVksYUFBYSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUVELGlDQUFpQztJQUNqQyxVQUFVLENBQUMsU0FBdUI7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUNSLEtBQWdCLEVBQ2hCLFNBQWtDLEVBQ2xDLElBQW1DLEVBQ25DLFNBQWtCO1FBRWxCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0IsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVsRixJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUUzQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDBGQUEwRjtJQUNsRixZQUFZLENBQUMsU0FBc0I7UUFDekMsTUFBTSxZQUFZLEdBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQXdCLElBQUksU0FBUyxDQUFDO1FBRTlGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBUX2dyaWRMYXlvdXRfZHJvcEdob3N0LFxuICBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCxcbiAgVF9ncmlkTGF5b3V0X25vZGUsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRHJvcEdob3N0IH0gZnJvbSAnLi9kZWZpbmVzL2NvbGxpc2lvbi5kZWZpbmUnO1xuXG4vKiogTOG7m3AgQ1NTIGLhuq10IMO0IGxpIGPhu6dhIG3hu5l0IGzGsOG7m2kgdHJvbmcgbMO6YyBuZ8aw4budaSBkw7luZyDEkWFuZyBrw6lvIGto4buRaSB2w6BvLiAqL1xuY29uc3QgTE9QX0hJRU5fT19MSSA9ICdkaXNwbGF5LWdyaWQnO1xuXG4vKipcbiAqIEdp4buvIHRy4bqhbmcgdGjDoWkgbeG7mXQgbMaw4bujdCBrw6lvIGto4buRaSB04burIHBhbGV0dGUgYsOqbiBuZ2/DoGkgdsOgbyBt4bq3dCBwaOG6s25nLlxuICpcbiAqIFZp4buHYyBuw7MgbG86IGLhuq10IMO0IGxpIGPhu6dhIGzGsOG7m2kgxJFhbmcgxJHGsOG7o2Mga8OpbyB04bubaSAobMaw4bubaSBn4buRYywgdsOgIGzGsOG7m2kgY+G7p2EgY29udGFpbmVyIGtoaSBjb24gdHLhu48gxJFpXG4gKiB2w6BvIHRyb25nKSwgdOG6r3QgxJHDum5nIGzDumMsIHbDoCB0cuG6oyB24buBIGdob3N0IMSR4buDIG7GoWkgZMO5bmcgduG6vSBraHVuZyB4ZW0gdHLGsOG7m2MuXG4gKlxuICog8J+UtCBU4buxIGLhuq10L3Thuq90IMO0IGxpIGLhurFuZyB0YXkg4bufIG7GoWkgZMO5bmcgbMOgIGNo4buXIHLhuqV0IGThu4Ugc8OzdDoga8OpbyByYSBraOG7j2kgY29udGFpbmVyIHLhu5NpIG3DoCBxdcOqbiB04bqvdFxuICogdGjDrCDDtCBsaSBj4bunYSBuw7MgbuG6sW0gbOG6oWkgdHLDqm4gbcOgbiwga8OpbyBzYW5nIGzGsOG7m2kga2jDoWMgbOG6oWkgY2jhu5NuZyB0aMOqbSBt4buZdCBs4bubcCBu4buvYS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpYnNVaUdyaWRMYXlvdXREcmFnQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcGF5bG9hZD86IFRfZ3JpZExheW91dF9leHRlcm5hbERyYWdQYXlsb2FkO1xuICBwcml2YXRlIGhvdmVyZWRFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgcm9vdEdyaWRzdGVyRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBQYXlsb2FkIGPhu6dhIGto4buRaSDEkWFuZyDEkcaw4bujYyBrw6lvOyBgdW5kZWZpbmVkYCBraGkga2jDtG5nIGPDsyBsxrDhu6N0IGvDqW8gbsOgby4gKi9cbiAgZ2V0IEFjdGl2ZVBheWxvYWQoKTogVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBheWxvYWQ7XG4gIH1cblxuICAvKiogR+G7jWkg4bufIGBkcmFnc3RhcnRgIGPhu6dhIHRo4bq7IHRyb25nIHBhbGV0dGUuICovXG4gIG9uRHJhZ1N0YXJ0KHBheWxvYWQ6IFRfZ3JpZExheW91dF9leHRlcm5hbERyYWdQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcbiAgfVxuXG4gIC8qKiBH4buNaSDhu58gYGRyYWdlbmRgIOKAlCBk4buNbiBz4bqhY2ggbeG7jWkgw7QgbGkgxJFhbmcgYuG6rXQuICovXG4gIG9uRHJhZ0VuZChjb250YWluZXI/OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMucGF5bG9hZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsZWFudXBBbGwoY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKiBU4bqvdCDDtCBsaSBj4bunYSBjb250YWluZXIgxJFhbmcgaG92ZXIuICovXG4gIGNsZWFudXBIb3ZlcmVkR3JvdXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhvdmVyZWRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG92ZXJlZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShMT1BfSElFTl9PX0xJKTtcbiAgICB0aGlzLmhvdmVyZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFThuq90IMO0IGxpIGPhu6dhIGzGsOG7m2kgZ+G7kWMsIHbDoCBxdcOpdCBz4bqhY2ggbOG7m3AgY8OybiBzw7N0IHRyb25nIGtodW5nIGNo4bupYS4gKi9cbiAgY2xlYW51cFJvb3RHcmlkKGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucm9vdEdyaWRzdGVyRWxlbWVudCkge1xuICAgICAgdGhpcy5yb290R3JpZHN0ZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoTE9QX0hJRU5fT19MSSk7XG4gICAgICB0aGlzLnJvb3RHcmlkc3RlckVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbChgZ3JpZHN0ZXIuJHtMT1BfSElFTl9PX0xJfWApLmZvckVhY2goKGVsKSA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKExPUF9ISUVOX09fTEkpKTtcbiAgfVxuXG4gIC8qKiBU4bqvdCB0b8OgbiBi4buZIMO0IGxpIMSRYW5nIGLhuq10LiAqL1xuICBjbGVhbnVwQWxsKGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwSG92ZXJlZEdyb3VwKCk7XG4gICAgdGhpcy5jbGVhbnVwUm9vdEdyaWQoY29udGFpbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBH4buNaSDhu58gYGRyYWdvdmVyYCBj4bunYSBraHVuZyBjaOG7qWEgbeG6t3QgcGjhurNuZy4gVHLhuqMgZ2hvc3QgxJHhu4MgbsahaSBkw7luZyB24bq9IGtodW5nIHhlbSB0csaw4bubYywgxJHhu5NuZyB0aOG7nWlcbiAgICogdOG7sSBi4bqtdCDDtCBsaSBj4bunYSBsxrDhu5tpIMSRYW5nIMSRxrDhu6NjIGvDqW8gdOG7m2kuXG4gICAqL1xuICBvbkRyYWdPdmVyKFxuICAgIGV2ZW50OiBEcmFnRXZlbnQsXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCxcbiAgICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCxcbiAgICB0b3RhbENvbHM/OiBudW1iZXJcbiAgKTogVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCB8IHVuZGVmaW5lZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICB9XG4gICAgaWYgKCFjb250YWluZXIgfHwgIXJvb3QgfHwgIXRoaXMucGF5bG9hZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5zaG93Um9vdEdyaWQoY29udGFpbmVyKTtcblxuICAgIGNvbnN0IGdob3N0ID0gY2FsY3VsYXRlRHJvcEdob3N0KGV2ZW50LCBjb250YWluZXIsIHJvb3QsIHRoaXMucGF5bG9hZCwgdG90YWxDb2xzKTtcblxuICAgIGlmICghZ2hvc3Q/LmlzSW5zaWRlR3JvdXAgfHwgIWdob3N0LmhvdmVyZWRHcmlkc3Rlcikge1xuICAgICAgdGhpcy5jbGVhbnVwSG92ZXJlZEdyb3VwKCk7XG5cbiAgICAgIHJldHVybiBnaG9zdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3ZlcmVkRWxlbWVudCAhPT0gZ2hvc3QuaG92ZXJlZEdyaWRzdGVyKSB7XG4gICAgICB0aGlzLmNsZWFudXBIb3ZlcmVkR3JvdXAoKTtcbiAgICAgIGdob3N0LmhvdmVyZWRHcmlkc3Rlci5jbGFzc0xpc3QuYWRkKExPUF9ISUVOX09fTEkpO1xuICAgICAgdGhpcy5ob3ZlcmVkRWxlbWVudCA9IGdob3N0LmhvdmVyZWRHcmlkc3RlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2hvc3Q7XG4gIH1cblxuICAvKiogQuG6rXQgw7QgbGkgY+G7p2EgbMaw4bubaSBD4bqkUCBUUkFORyB0cm9uZyBzdeG7kXQgbMaw4bujdCBrw6lvLCB04bqvdCBsxrDhu5tpIGPFqSBu4bq/dSBraHVuZyBjaOG7qWEgxJHDoyDEkeG7lWkuICovXG4gIHByaXZhdGUgc2hvd1Jvb3RHcmlkKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCByb290R3JpZHN0ZXIgPSAoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXJvb3RHcmlkc3Rlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvb3RHcmlkc3RlckVsZW1lbnQgJiYgdGhpcy5yb290R3JpZHN0ZXJFbGVtZW50ICE9PSByb290R3JpZHN0ZXIpIHtcbiAgICAgIHRoaXMucm9vdEdyaWRzdGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKExPUF9ISUVOX09fTEkpO1xuICAgIH1cbiAgICByb290R3JpZHN0ZXIuY2xhc3NMaXN0LmFkZChMT1BfSElFTl9PX0xJKTtcbiAgICB0aGlzLnJvb3RHcmlkc3RlckVsZW1lbnQgPSByb290R3JpZHN0ZXI7XG4gIH1cbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvZHJhZy1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLDRFQUE0RTtBQUM1RSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFFckM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sOEJBQThCO0lBQ2pDLE9BQU8sQ0FBb0M7SUFDM0MsY0FBYyxDQUFlO0lBQzdCLG1CQUFtQixDQUFlO0lBRTFDLDZFQUE2RTtJQUM3RSxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELCtDQUErQztJQUMvQyxXQUFXLENBQUMsT0FBeUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxTQUFTLENBQUMsU0FBdUI7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsZUFBZSxDQUFDLFNBQXVCO1FBQ3JDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFlBQVksYUFBYSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUVELGlDQUFpQztJQUNqQyxVQUFVLENBQUMsU0FBdUI7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUNSLEtBQWdCLEVBQ2hCLFNBQWtDLEVBQ2xDLElBQW1DLEVBQ25DLFNBQWtCO0lBQ2xCLGdHQUFnRztJQUNoRyxPQUFnQjtRQUVoQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdCLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTNGLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRTNCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsMEZBQTBGO0lBQ2xGLFlBQVksQ0FBQyxTQUFzQjtRQUN6QyxNQUFNLFlBQVksR0FBSSxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBd0IsSUFBSSxTQUFTLENBQUM7UUFFOUYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFRfZ3JpZExheW91dF9kcm9wR2hvc3QsXG4gIFRfZ3JpZExheW91dF9leHRlcm5hbERyYWdQYXlsb2FkLFxuICBUX2dyaWRMYXlvdXRfbm9kZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBjYWxjdWxhdGVEcm9wR2hvc3QgfSBmcm9tICcuL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZSc7XG5cbi8qKiBM4bubcCBDU1MgYuG6rXQgw7QgbGkgY+G7p2EgbeG7mXQgbMaw4bubaSB0cm9uZyBsw7pjIG5nxrDhu51pIGTDuW5nIMSRYW5nIGvDqW8ga2jhu5FpIHbDoG8uICovXG5jb25zdCBMT1BfSElFTl9PX0xJID0gJ2Rpc3BsYXktZ3JpZCc7XG5cbi8qKlxuICogR2nhu68gdHLhuqFuZyB0aMOhaSBt4buZdCBsxrDhu6N0IGvDqW8ga2jhu5FpIHThu6sgcGFsZXR0ZSBiw6puIG5nb8OgaSB2w6BvIG3hurd0IHBo4bqzbmcuXG4gKlxuICogVmnhu4djIG7DsyBsbzogYuG6rXQgw7QgbGkgY+G7p2EgbMaw4bubaSDEkWFuZyDEkcaw4bujYyBrw6lvIHThu5tpIChsxrDhu5tpIGfhu5FjLCB2w6AgbMaw4bubaSBj4bunYSBjb250YWluZXIga2hpIGNvbiB0cuG7jyDEkWlcbiAqIHbDoG8gdHJvbmcpLCB04bqvdCDEkcO6bmcgbMO6YywgdsOgIHRy4bqjIHbhu4EgZ2hvc3QgxJHhu4MgbsahaSBkw7luZyB24bq9IGtodW5nIHhlbSB0csaw4bubYy5cbiAqXG4gKiDwn5S0IFThu7EgYuG6rXQvdOG6r3Qgw7QgbGkgYuG6sW5nIHRheSDhu58gbsahaSBkw7luZyBsw6AgY2jhu5cgcuG6pXQgZOG7hSBzw7N0OiBrw6lvIHJhIGto4buPaSBjb250YWluZXIgcuG7k2kgbcOgIHF1w6puIHThuq90XG4gKiB0aMOsIMO0IGxpIGPhu6dhIG7DsyBu4bqxbSBs4bqhaSB0csOqbiBtw6BuLCBrw6lvIHNhbmcgbMaw4bubaSBraMOhYyBs4bqhaSBjaOG7k25nIHRow6ptIG3hu5l0IGzhu5twIG7hu69hLlxuICovXG5leHBvcnQgY2xhc3MgTGlic1VpR3JpZExheW91dERyYWdDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBwYXlsb2FkPzogVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQ7XG4gIHByaXZhdGUgaG92ZXJlZEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSByb290R3JpZHN0ZXJFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqIFBheWxvYWQgY+G7p2Ega2jhu5FpIMSRYW5nIMSRxrDhu6NjIGvDqW87IGB1bmRlZmluZWRgIGtoaSBraMO0bmcgY8OzIGzGsOG7o3Qga8OpbyBuw6BvLiAqL1xuICBnZXQgQWN0aXZlUGF5bG9hZCgpOiBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGF5bG9hZDtcbiAgfVxuXG4gIC8qKiBH4buNaSDhu58gYGRyYWdzdGFydGAgY+G7p2EgdGjhursgdHJvbmcgcGFsZXR0ZS4gKi9cbiAgb25EcmFnU3RhcnQocGF5bG9hZDogVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xuICB9XG5cbiAgLyoqIEfhu41pIOG7nyBgZHJhZ2VuZGAg4oCUIGThu41uIHPhuqFjaCBt4buNaSDDtCBsaSDEkWFuZyBi4bqtdC4gKi9cbiAgb25EcmFnRW5kKGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5wYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYW51cEFsbChjb250YWluZXIpO1xuICB9XG5cbiAgLyoqIFThuq90IMO0IGxpIGPhu6dhIGNvbnRhaW5lciDEkWFuZyBob3Zlci4gKi9cbiAgY2xlYW51cEhvdmVyZWRHcm91cCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaG92ZXJlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ob3ZlcmVkRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKExPUF9ISUVOX09fTEkpO1xuICAgIHRoaXMuaG92ZXJlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVOG6r3Qgw7QgbGkgY+G7p2EgbMaw4bubaSBn4buRYywgdsOgIHF1w6l0IHPhuqFjaCBs4bubcCBjw7JuIHPDs3QgdHJvbmcga2h1bmcgY2jhu6lhLiAqL1xuICBjbGVhbnVwUm9vdEdyaWQoY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb290R3JpZHN0ZXJFbGVtZW50KSB7XG4gICAgICB0aGlzLnJvb3RHcmlkc3RlckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShMT1BfSElFTl9PX0xJKTtcbiAgICAgIHRoaXMucm9vdEdyaWRzdGVyRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yQWxsKGBncmlkc3Rlci4ke0xPUF9ISUVOX09fTEl9YCkuZm9yRWFjaCgoZWwpID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoTE9QX0hJRU5fT19MSSkpO1xuICB9XG5cbiAgLyoqIFThuq90IHRvw6BuIGLhu5kgw7QgbGkgxJFhbmcgYuG6rXQuICovXG4gIGNsZWFudXBBbGwoY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBIb3ZlcmVkR3JvdXAoKTtcbiAgICB0aGlzLmNsZWFudXBSb290R3JpZChjb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEfhu41pIOG7nyBgZHJhZ292ZXJgIGPhu6dhIGtodW5nIGNo4bupYSBt4bq3dCBwaOG6s25nLiBUcuG6oyBnaG9zdCDEkeG7gyBuxqFpIGTDuW5nIHbhur0ga2h1bmcgeGVtIHRyxrDhu5tjLCDEkeG7k25nIHRo4budaVxuICAgKiB04buxIGLhuq10IMO0IGxpIGPhu6dhIGzGsOG7m2kgxJFhbmcgxJHGsOG7o2Mga8OpbyB04bubaS5cbiAgICovXG4gIG9uRHJhZ092ZXIoXG4gICAgZXZlbnQ6IERyYWdFdmVudCxcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkLFxuICAgIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLFxuICAgIHRvdGFsQ29scz86IG51bWJlcixcbiAgICAvLyBDaGnhu4F1IGNhbyBt4buZdCBow6BuZyBsxrDhu5tpIChwaXhlbCkgxJHhu4Mga2h1bmcgeGVtIHRyxrDhu5tjIMSRw7puZyBj4buhOyBraMO0bmcgdHJ1eeG7gW4gdGjDrCBnaeG7ryBt4bq3YyDEkeG7i25oIGPFqS5cbiAgICByb3dTdGVwPzogbnVtYmVyXG4gICk6IFRfZ3JpZExheW91dF9kcm9wR2hvc3QgfCB1bmRlZmluZWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgfVxuICAgIGlmICghY29udGFpbmVyIHx8ICFyb290IHx8ICF0aGlzLnBheWxvYWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuc2hvd1Jvb3RHcmlkKGNvbnRhaW5lcik7XG5cbiAgICBjb25zdCBnaG9zdCA9IGNhbGN1bGF0ZURyb3BHaG9zdChldmVudCwgY29udGFpbmVyLCByb290LCB0aGlzLnBheWxvYWQsIHRvdGFsQ29scywgcm93U3RlcCk7XG5cbiAgICBpZiAoIWdob3N0Py5pc0luc2lkZUdyb3VwIHx8ICFnaG9zdC5ob3ZlcmVkR3JpZHN0ZXIpIHtcbiAgICAgIHRoaXMuY2xlYW51cEhvdmVyZWRHcm91cCgpO1xuXG4gICAgICByZXR1cm4gZ2hvc3Q7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG92ZXJlZEVsZW1lbnQgIT09IGdob3N0LmhvdmVyZWRHcmlkc3Rlcikge1xuICAgICAgdGhpcy5jbGVhbnVwSG92ZXJlZEdyb3VwKCk7XG4gICAgICBnaG9zdC5ob3ZlcmVkR3JpZHN0ZXIuY2xhc3NMaXN0LmFkZChMT1BfSElFTl9PX0xJKTtcbiAgICAgIHRoaXMuaG92ZXJlZEVsZW1lbnQgPSBnaG9zdC5ob3ZlcmVkR3JpZHN0ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdob3N0O1xuICB9XG5cbiAgLyoqIELhuq10IMO0IGxpIGPhu6dhIGzGsOG7m2kgQ+G6pFAgVFJBTkcgdHJvbmcgc3Xhu5F0IGzGsOG7o3Qga8OpbywgdOG6r3QgbMaw4bubaSBjxakgbuG6v3Uga2h1bmcgY2jhu6lhIMSRw6MgxJHhu5VpLiAqL1xuICBwcml2YXRlIHNob3dSb290R3JpZChjb250YWluZXI6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdEdyaWRzdGVyID0gKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdncmlkc3RlcicpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFyb290R3JpZHN0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb290R3JpZHN0ZXJFbGVtZW50ICYmIHRoaXMucm9vdEdyaWRzdGVyRWxlbWVudCAhPT0gcm9vdEdyaWRzdGVyKSB7XG4gICAgICB0aGlzLnJvb3RHcmlkc3RlckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShMT1BfSElFTl9PX0xJKTtcbiAgICB9XG4gICAgcm9vdEdyaWRzdGVyLmNsYXNzTGlzdC5hZGQoTE9QX0hJRU5fT19MSSk7XG4gICAgdGhpcy5yb290R3JpZHN0ZXJFbGVtZW50ID0gcm9vdEdyaWRzdGVyO1xuICB9XG59XG4iXX0=