@kepler.gl/deckgl-arrow-layers 3.1.0-alpha.1 → 3.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGRlY2suZ2wtY29tbXVuaXR5XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgKGMpIHZpcy5nbCBjb250cmlidXRvcnNcblxuaW1wb3J0IHR5cGUge0JpbmFyeUF0dHJpYnV0ZSwgQ29sb3IsIFBpY2tpbmdJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCB7VHlwZWRBcnJheX0gZnJvbSAnQG1hdGguZ2wvdHlwZXMnO1xuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcblxuLyoqXG4gKiBBbiBpbmRpdmlkdWFsIGxheWVyJ3MgZGF0YVxuICovXG5leHBvcnQgdHlwZSBHZW9BcnJvd0xheWVyRGF0YTxUPiA9IHtcbiAgZGF0YTogVDtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBUeXBlZEFycmF5IHwgQnVmZmVyIHwgQmluYXJ5QXR0cmlidXRlPjtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgdHlwZSBmb3IgbGF5ZXIgZGF0YSBoYW5kbGluZywgdXNlZCBpbiBgd3JhcEFjY2Vzc29yRnVuY3Rpb25gLlxuICovXG5leHBvcnQgdHlwZSBfR2VvQXJyb3dJbnRlcm5hbExheWVyRGF0YTxUPiA9IEdlb0Fycm93TGF5ZXJEYXRhPFQ+ICYge1xuICAvKipcbiAgICogQSBsb29rdXAgdGFibGUgZnJvbSBleHBhbmRlZCBtdWx0aS1nZW9tZXRyeSBpbmRleCB0byBvcmlnaW5hbCBpbmRleC5cbiAgICpcbiAgICogVGhpcyBpcyBvbWl0dGVkIGZyb20gdGhlIHVzZXItZmFjaW5nIHR5cGUgYmVjYXVzZSBpbiBgd3JhcEFjY2Vzc29yRnVuY3Rpb25gXG4gICAqIGluIGB1dGlscy50c2Agd2UgYXBwbHkgdGhlIGxvb2t1cCBmcm9tIFwiZXhwbG9kZWRcIiByb3cgdG8gXCJvcmlnaW5hbFwiIHJvdy5cbiAgICovXG4gIGludmVydGVkR2VvbU9mZnNldHM/OiBVaW50OEFycmF5IHwgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yQ29udGV4dDxUPiA9IHtcbiAgLyoqIFRoZSBjdXJyZW50IHJvdyBpbmRleCBvZiB0aGUgY3VycmVudCBpdGVyYXRpb24gKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgYGRhdGFgIHByb3AgKi9cbiAgZGF0YTogR2VvQXJyb3dMYXllckRhdGE8VD47XG4gIC8qKiBBIHByZS1hbGxvY2F0ZWQgYXJyYXkuIFRoZSBhY2Nlc3NvciBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSBmaWxsIGRhdGEgaW50byB0aGlzIGFycmF5IGFuZCByZXR1cm4gaXQsXG4gICAqIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZm9yIGV2ZXJ5IG9iamVjdC4gSW4gc29tZSBicm93c2VycyB0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHlcbiAgICogYnkgcmVkdWNpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiAqL1xuICB0YXJnZXQ6IG51bWJlcltdO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCB0eXBlIGZvciBsYXllciBkYXRhIGhhbmRsaW5nLCB1c2VkIGluIGB3cmFwQWNjZXNzb3JGdW5jdGlvbmAuXG4gKi9cbmV4cG9ydCB0eXBlIF9JbnRlcm5hbEFjY2Vzc29yQ29udGV4dDxUPiA9IEFjY2Vzc29yQ29udGV4dDxUPiAmIHtcbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgYGRhdGFgIHByb3AgKi9cbiAgZGF0YTogX0dlb0Fycm93SW50ZXJuYWxMYXllckRhdGE8VD47XG59O1xuXG4vKiogRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUgZm9yIGVhY2ggb2JqZWN0LiAqL1xuZXhwb3J0IHR5cGUgQWNjZXNzb3JGdW5jdGlvbjxJbiwgT3V0PiA9IChcbiAgLyoqIENvbnRleHR1YWwgaW5mb3JtYXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4gKi9cbiAgb2JqZWN0SW5mbzogQWNjZXNzb3JDb250ZXh0PEluPlxuKSA9PiBPdXQ7XG5cbi8qKiBFaXRoZXIgYSB1bmlmb3JtIHZhbHVlIGZvciBhbGwgb2JqZWN0cywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2YWx1ZSBmb3IgZWFjaCBvYmplY3QuICovXG5leHBvcnQgdHlwZSBBY2Nlc3NvcjxJbiwgT3V0PiA9IE91dCB8IEFjY2Vzc29yRnVuY3Rpb248SW4sIE91dD47XG5cbmV4cG9ydCB0eXBlIEdlb0Fycm93UGlja2luZ0luZm8gPSBQaWNraW5nSW5mbyAmIHtcbiAgb2JqZWN0PzogYXJyb3cuU3RydWN0Um93UHJveHk7XG59O1xuXG5leHBvcnQgdHlwZSBGbG9hdEFjY2Vzc29yID0gYXJyb3cuVmVjdG9yPGFycm93LkZsb2F0PiB8IEFjY2Vzc29yPGFycm93LlJlY29yZEJhdGNoLCBudW1iZXI+O1xuZXhwb3J0IHR5cGUgVGltZXN0YW1wQWNjZXNzb3IgPSBhcnJvdy5WZWN0b3I8YXJyb3cuTGlzdDxhcnJvdy5GbG9hdD4+O1xuZXhwb3J0IHR5cGUgQ29sb3JBY2Nlc3NvciA9XG4gIHwgYXJyb3cuVmVjdG9yPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuVWludDg+PlxuICB8IEFjY2Vzc29yPGFycm93LlJlY29yZEJhdGNoLCBDb2xvciB8IENvbG9yW10+O1xuZXhwb3J0IHR5cGUgTm9ybWFsQWNjZXNzb3IgPVxuICB8IGFycm93LlZlY3RvcjxhcnJvdy5GaXhlZFNpemVMaXN0PGFycm93LkZsb2F0MzI+PlxuICB8IEFjY2Vzc29yPGFycm93LlRhYmxlLCBhcnJvdy5WZWN0b3I8YXJyb3cuRml4ZWRTaXplTGlzdDxhcnJvdy5GbG9hdDMyPj4+O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25Qcm9wcyA9IHtcbiAgZ2V0RmlsdGVyZWQ/OiAoe2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXI7XG4gIGdldEZpbHRlclZhbHVlPzogKGQ6IGFueSwgb2JqZWN0SW5mbz86IHtpbmRleDogbnVtYmVyfSkgPT4gKG51bWJlciB8IG51bWJlcltdKVtdO1xufTtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,16 @@
1
+ import * as arrow from 'apache-arrow';
2
+ import { GetPickingInfoParams } from '@deck.gl/core/typed';
3
+ import { GeoArrowPickingInfo } from '../types';
4
+ export interface GeoArrowExtraPickingProps {
5
+ recordBatchIdx: number;
6
+ tableOffsets: Uint32Array;
7
+ data: {
8
+ invertedGeomOffsets?: Uint8Array | Uint16Array | Uint32Array;
9
+ };
10
+ }
11
+ export declare function getPickingInfo({ info, sourceLayer }: GetPickingInfoParams & {
12
+ sourceLayer: {
13
+ props: GeoArrowExtraPickingProps;
14
+ };
15
+ }, table: arrow.Table): GeoArrowPickingInfo;
16
+ export declare function computeChunkOffsets<T extends arrow.DataType>(chunks: ReadonlyArray<arrow.Data<T>>): Uint32Array;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.computeChunkOffsets = computeChunkOffsets;
8
+ exports.getPickingInfo = getPickingInfo;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ // SPDX-License-Identifier: MIT
13
+ // Copyright contributors to the kepler.gl project
14
+
15
+ // deck.gl-community
16
+ // SPDX-License-Identifier: MIT
17
+ // Copyright (c) vis.gl contributors
18
+
19
+ function getPickingInfo(_ref, table) {
20
+ var info = _ref.info,
21
+ sourceLayer = _ref.sourceLayer;
22
+ // Geometry index as rendered
23
+ var index = info.index;
24
+
25
+ // if a Multi- geometry dataset, map from the rendered index back to the
26
+ // feature index
27
+ if (sourceLayer.props.data.invertedGeomOffsets) {
28
+ index = sourceLayer.props.data.invertedGeomOffsets[index];
29
+ }
30
+ var recordBatchIdx = sourceLayer.props.recordBatchIdx;
31
+ var tableOffsets = sourceLayer.props.tableOffsets;
32
+ var batch = table.batches[recordBatchIdx];
33
+ var row = batch.get(index);
34
+ if (row === null) {
35
+ return info;
36
+ }
37
+ var currentBatchOffset = tableOffsets[recordBatchIdx];
38
+
39
+ // Update index to be _global_ index, not within the specific record batch
40
+ index += currentBatchOffset;
41
+ return _objectSpread(_objectSpread({}, info), {}, {
42
+ index: index,
43
+ object: row
44
+ });
45
+ }
46
+
47
+ // This is vendored from Arrow JS because it's a private API
48
+ function computeChunkOffsets(chunks) {
49
+ return chunks.reduce(function (offsets, chunk, index) {
50
+ offsets[index + 1] = offsets[index] + chunk.length;
51
+ return offsets;
52
+ }, new Uint32Array(chunks.length + 1));
53
+ }
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQaWNraW5nSW5mbyIsIl9yZWYiLCJ0YWJsZSIsImluZm8iLCJzb3VyY2VMYXllciIsImluZGV4IiwicHJvcHMiLCJkYXRhIiwiaW52ZXJ0ZWRHZW9tT2Zmc2V0cyIsInJlY29yZEJhdGNoSWR4IiwidGFibGVPZmZzZXRzIiwiYmF0Y2giLCJiYXRjaGVzIiwicm93IiwiZ2V0IiwiY3VycmVudEJhdGNoT2Zmc2V0IiwiX29iamVjdFNwcmVhZCIsIm9iamVjdCIsImNvbXB1dGVDaHVua09mZnNldHMiLCJjaHVua3MiLCJyZWR1Y2UiLCJvZmZzZXRzIiwiY2h1bmsiLCJsZW5ndGgiLCJVaW50MzJBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9waWNraW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGRlY2suZ2wtY29tbXVuaXR5XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgKGMpIHZpcy5nbCBjb250cmlidXRvcnNcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7R2V0UGlja2luZ0luZm9QYXJhbXN9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtHZW9BcnJvd1BpY2tpbmdJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wcyB7XG4gIHJlY29yZEJhdGNoSWR4OiBudW1iZXI7XG4gIHRhYmxlT2Zmc2V0czogVWludDMyQXJyYXk7XG4gIGRhdGE6IHtcbiAgICBpbnZlcnRlZEdlb21PZmZzZXRzPzogVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaWNraW5nSW5mbyhcbiAge1xuICAgIGluZm8sXG4gICAgc291cmNlTGF5ZXJcbiAgfTogR2V0UGlja2luZ0luZm9QYXJhbXMgJiB7XG4gICAgc291cmNlTGF5ZXI6IHtwcm9wczogR2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wc307XG4gIH0sXG4gIHRhYmxlOiBhcnJvdy5UYWJsZVxuKTogR2VvQXJyb3dQaWNraW5nSW5mbyB7XG4gIC8vIEdlb21ldHJ5IGluZGV4IGFzIHJlbmRlcmVkXG4gIGxldCBpbmRleCA9IGluZm8uaW5kZXg7XG5cbiAgLy8gaWYgYSBNdWx0aS0gZ2VvbWV0cnkgZGF0YXNldCwgbWFwIGZyb20gdGhlIHJlbmRlcmVkIGluZGV4IGJhY2sgdG8gdGhlXG4gIC8vIGZlYXR1cmUgaW5kZXhcbiAgaWYgKHNvdXJjZUxheWVyLnByb3BzLmRhdGEuaW52ZXJ0ZWRHZW9tT2Zmc2V0cykge1xuICAgIGluZGV4ID0gc291cmNlTGF5ZXIucHJvcHMuZGF0YS5pbnZlcnRlZEdlb21PZmZzZXRzW2luZGV4XTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZEJhdGNoSWR4ID0gc291cmNlTGF5ZXIucHJvcHMucmVjb3JkQmF0Y2hJZHg7XG4gIGNvbnN0IHRhYmxlT2Zmc2V0cyA9IHNvdXJjZUxheWVyLnByb3BzLnRhYmxlT2Zmc2V0cztcblxuICBjb25zdCBiYXRjaCA9IHRhYmxlLmJhdGNoZXNbcmVjb3JkQmF0Y2hJZHhdO1xuICBjb25zdCByb3cgPSBiYXRjaC5nZXQoaW5kZXgpO1xuICBpZiAocm93ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICBjb25zdCBjdXJyZW50QmF0Y2hPZmZzZXQgPSB0YWJsZU9mZnNldHNbcmVjb3JkQmF0Y2hJZHhdO1xuXG4gIC8vIFVwZGF0ZSBpbmRleCB0byBiZSBfZ2xvYmFsXyBpbmRleCwgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWMgcmVjb3JkIGJhdGNoXG4gIGluZGV4ICs9IGN1cnJlbnRCYXRjaE9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbmZvLFxuICAgIGluZGV4LFxuICAgIG9iamVjdDogcm93XG4gIH07XG59XG5cbi8vIFRoaXMgaXMgdmVuZG9yZWQgZnJvbSBBcnJvdyBKUyBiZWNhdXNlIGl0J3MgYSBwcml2YXRlIEFQSVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDaHVua09mZnNldHM8VCBleHRlbmRzIGFycm93LkRhdGFUeXBlPihcbiAgY2h1bmtzOiBSZWFkb25seUFycmF5PGFycm93LkRhdGE8VD4+XG4pIHtcbiAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoKG9mZnNldHMsIGNodW5rLCBpbmRleCkgPT4ge1xuICAgIG9mZnNldHNbaW5kZXggKyAxXSA9IG9mZnNldHNbaW5kZXhdICsgY2h1bmsubGVuZ3RoO1xuICAgIHJldHVybiBvZmZzZXRzO1xuICB9LCBuZXcgVWludDMyQXJyYXkoY2h1bmtzLmxlbmd0aCArIDEpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFjTyxTQUFTQSxjQUFjQSxDQUFBQyxJQUFBLEVBTzVCQyxLQUFrQixFQUNHO0VBQUEsSUFObkJDLElBQUksR0FBQUYsSUFBQSxDQUFKRSxJQUFJO0lBQ0pDLFdBQVcsR0FBQUgsSUFBQSxDQUFYRyxXQUFXO0VBTWI7RUFDQSxJQUFJQyxLQUFLLEdBQUdGLElBQUksQ0FBQ0UsS0FBSzs7RUFFdEI7RUFDQTtFQUNBLElBQUlELFdBQVcsQ0FBQ0UsS0FBSyxDQUFDQyxJQUFJLENBQUNDLG1CQUFtQixFQUFFO0lBQzlDSCxLQUFLLEdBQUdELFdBQVcsQ0FBQ0UsS0FBSyxDQUFDQyxJQUFJLENBQUNDLG1CQUFtQixDQUFDSCxLQUFLLENBQUM7RUFDM0Q7RUFFQSxJQUFNSSxjQUFjLEdBQUdMLFdBQVcsQ0FBQ0UsS0FBSyxDQUFDRyxjQUFjO0VBQ3ZELElBQU1DLFlBQVksR0FBR04sV0FBVyxDQUFDRSxLQUFLLENBQUNJLFlBQVk7RUFFbkQsSUFBTUMsS0FBSyxHQUFHVCxLQUFLLENBQUNVLE9BQU8sQ0FBQ0gsY0FBYyxDQUFDO0VBQzNDLElBQU1JLEdBQUcsR0FBR0YsS0FBSyxDQUFDRyxHQUFHLENBQUNULEtBQUssQ0FBQztFQUM1QixJQUFJUSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ2hCLE9BQU9WLElBQUk7RUFDYjtFQUVBLElBQU1ZLGtCQUFrQixHQUFHTCxZQUFZLENBQUNELGNBQWMsQ0FBQzs7RUFFdkQ7RUFDQUosS0FBSyxJQUFJVSxrQkFBa0I7RUFDM0IsT0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tiLElBQUk7SUFDUEUsS0FBSyxFQUFMQSxLQUFLO0lBQ0xZLE1BQU0sRUFBRUo7RUFBRztBQUVmOztBQUVBO0FBQ08sU0FBU0ssbUJBQW1CQSxDQUNqQ0MsTUFBb0MsRUFDcEM7RUFDQSxPQUFPQSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxVQUFDQyxPQUFPLEVBQUVDLEtBQUssRUFBRWpCLEtBQUssRUFBSztJQUM5Q2dCLE9BQU8sQ0FBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBR2dCLE9BQU8sQ0FBQ2hCLEtBQUssQ0FBQyxHQUFHaUIsS0FBSyxDQUFDQyxNQUFNO0lBQ2xELE9BQU9GLE9BQU87RUFDaEIsQ0FBQyxFQUFFLElBQUlHLFdBQVcsQ0FBQ0wsTUFBTSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,54 @@
1
+ import * as arrow from 'apache-arrow';
2
+ import * as ga from '@geoarrow/geoarrow-js';
3
+ export declare type TypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;
4
+ export declare function findGeometryColumnIndex(schema: arrow.Schema, extensionName: string, geometryColumnName?: string | null): number | null;
5
+ /**
6
+ * Returns `true` if the input is a reference to a column in the table
7
+ */
8
+ export declare function isColumnReference(input: any): input is string;
9
+ declare type AssignAccessorProps = {
10
+ /** The object on which to assign the resolved accesor */
11
+ props: Record<string, any>;
12
+ /** The name of the prop to set */
13
+ propName: string;
14
+ /** The user-supplied input to the layer. Must either be a scalar value or a reference to a column in the table. */
15
+ propInput: any;
16
+ /** Numeric index in the table */
17
+ chunkIdx: number;
18
+ /** a map from the geometry index to the coord offsets for that geometry. */
19
+ geomCoordOffsets?: Int32Array | null;
20
+ /** Absolute offset of the batch in the table/vector. Added to the sampling index. */
21
+ batchOffset?: number;
22
+ };
23
+ /**
24
+ * Resolve accessor and assign to props object
25
+ *
26
+ * This is useful as a helper function because a scalar prop is set at the top
27
+ * level while a vectorized prop is set inside data.attributes
28
+ *
29
+ */
30
+ export declare function assignAccessor(args: AssignAccessorProps): void;
31
+ /**
32
+ * Expand an array from "one element per geometry" to "one element per coordinate"
33
+ *
34
+ * @param input: the input array to expand
35
+ * @param size : the number of nested elements in the input array per geometry. So for example, for RGB data this would be 3, for RGBA this would be 4. For radius, this would be 1.
36
+ * @param geomOffsets : an offsets array mapping from the geometry to the coordinate indexes. So in the case of a LineStringArray, this is retrieved directly from the GeoArrow storage. In the case of a PolygonArray, this comes from the resolved indexes that need to be given to the SolidPolygonLayer anyways.
37
+ *
38
+ * @return {TypedArray} values expanded to be per-coordinate
39
+ */
40
+ export declare function expandArrayToCoords<T extends TypedArray>(input: T, size: number, geomOffsets: Int32Array): T;
41
+ /**
42
+ * Get a geometry vector with the specified extension type name from the table.
43
+ */
44
+ export declare function getGeometryVector(table: arrow.Table, geoarrowTypeName: string): arrow.Vector | null;
45
+ export declare function getListNestingLevels(data: arrow.Data): number;
46
+ export declare function getMultiLineStringResolvedOffsets(data: ga.data.MultiLineStringData): Int32Array;
47
+ export declare function getPolygonResolvedOffsets(data: ga.data.PolygonData): Int32Array;
48
+ export declare function getMultiPolygonResolvedOffsets(data: ga.data.MultiPolygonData): Int32Array;
49
+ /**
50
+ * Invert offsets so that lookup can go in the opposite direction
51
+ */
52
+ export declare function invertOffsets(offsets: Int32Array): Uint8Array | Uint16Array | Uint32Array;
53
+ export declare function extractAccessorsFromProps(props: Record<string, any>, excludeKeys: string[]): [Record<string, any>, Record<string, any>];
54
+ export {};
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.assignAccessor = assignAccessor;
9
+ exports.expandArrayToCoords = expandArrayToCoords;
10
+ exports.extractAccessorsFromProps = extractAccessorsFromProps;
11
+ exports.findGeometryColumnIndex = findGeometryColumnIndex;
12
+ exports.getGeometryVector = getGeometryVector;
13
+ exports.getListNestingLevels = getListNestingLevels;
14
+ exports.getMultiLineStringResolvedOffsets = getMultiLineStringResolvedOffsets;
15
+ exports.getMultiPolygonResolvedOffsets = getMultiPolygonResolvedOffsets;
16
+ exports.getPolygonResolvedOffsets = getPolygonResolvedOffsets;
17
+ exports.invertOffsets = invertOffsets;
18
+ exports.isColumnReference = isColumnReference;
19
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
20
+ var _typed = require("@deck.gl/core/typed");
21
+ var arrow = _interopRequireWildcard(require("apache-arrow"));
22
+ var ga = _interopRequireWildcard(require("@geoarrow/geoarrow-js"));
23
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
24
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
25
+ // SPDX-License-Identifier: MIT
26
+ // Copyright contributors to the kepler.gl project
27
+
28
+ // deck.gl-community
29
+ // SPDX-License-Identifier: MIT
30
+ // Copyright (c) vis.gl contributors
31
+
32
+ function findGeometryColumnIndex(schema, extensionName, geometryColumnName) {
33
+ var index = schema.fields.findIndex(function (field) {
34
+ return field.name === geometryColumnName || field.metadata.get('ARROW:extension:name') === extensionName;
35
+ });
36
+ return index !== -1 ? index : null;
37
+ }
38
+
39
+ /**
40
+ * Returns `true` if the input is a reference to a column in the table
41
+ */
42
+ function isColumnReference(input) {
43
+ return typeof input === 'string';
44
+ }
45
+ function isDataInterleavedCoords(data) {
46
+ // TODO: also check 2 or 3d? Float64?
47
+ return data.type instanceof arrow.FixedSizeList;
48
+ }
49
+ function isDataSeparatedCoords(data) {
50
+ // TODO: also check child names? Float64?
51
+ return data.type instanceof arrow.Struct;
52
+ }
53
+
54
+ /**
55
+ * Convert geoarrow Struct coordinates to FixedSizeList coords
56
+ *
57
+ * The GeoArrow spec allows for either separated or interleaved coords, but at
58
+ * this time deck.gl only supports interleaved.
59
+ */
60
+ // TODO: this hasn't been tested yet
61
+ // @ts-expect-error
62
+ function convertStructToFixedSizeList(coords) {
63
+ if (isDataInterleavedCoords(coords)) {
64
+ return coords;
65
+ } else if (isDataSeparatedCoords(coords)) {
66
+ // TODO: support 3d
67
+ var interleavedCoords = new Float64Array(coords.length * 2);
68
+ var _coords$children = (0, _slicedToArray2["default"])(coords.children, 2),
69
+ xChild = _coords$children[0],
70
+ yChild = _coords$children[1];
71
+ for (var i = 0; i < coords.length; i++) {
72
+ interleavedCoords[i * 2] = xChild.values[i];
73
+ interleavedCoords[i * 2 + 1] = yChild.values[i];
74
+ }
75
+ var childDataType = new arrow.Float64();
76
+ var dataType = new arrow.FixedSizeList(2, new arrow.Field('coords', childDataType));
77
+ var interleavedCoordsData = arrow.makeData({
78
+ type: childDataType,
79
+ length: interleavedCoords.length
80
+ });
81
+ var data = arrow.makeData({
82
+ type: dataType,
83
+ length: coords.length,
84
+ nullCount: coords.nullCount,
85
+ nullBitmap: coords.nullBitmap,
86
+ child: interleavedCoordsData
87
+ });
88
+ return data;
89
+ }
90
+ (0, _typed.assert)(false);
91
+ }
92
+ /**
93
+ * A wrapper around a user-provided accessor function
94
+ *
95
+ * For layers like Scatterplot, Path, and Polygon, we automatically handle
96
+ * "exploding" the table when multi-geometry input are provided. This means that
97
+ * the upstream `index` value passed to the user will be the correct row index
98
+ * _only_ for non-exploded data.
99
+ *
100
+ * With this function, we simplify the user usage by automatically converting
101
+ * back from "exploded" index back to the original row index.
102
+ */
103
+ function wrapAccessorFunction(objectInfo, userAccessorFunction, batchOffset) {
104
+ var index = objectInfo.index,
105
+ data = objectInfo.data;
106
+ var newIndex = index + batchOffset;
107
+ if (data.invertedGeomOffsets !== undefined) {
108
+ newIndex = data.invertedGeomOffsets[index];
109
+ }
110
+ var newObjectData = {
111
+ data: data.data,
112
+ length: data.length,
113
+ attributes: data.attributes
114
+ };
115
+ var newObjectInfo = {
116
+ index: newIndex,
117
+ data: newObjectData,
118
+ target: objectInfo.target
119
+ };
120
+ return userAccessorFunction(newObjectInfo);
121
+ }
122
+
123
+ /**
124
+ * Resolve accessor and assign to props object
125
+ *
126
+ * This is useful as a helper function because a scalar prop is set at the top
127
+ * level while a vectorized prop is set inside data.attributes
128
+ *
129
+ */
130
+ function assignAccessor(args) {
131
+ var props = args.props,
132
+ propName = args.propName,
133
+ propInput = args.propInput,
134
+ chunkIdx = args.chunkIdx,
135
+ geomCoordOffsets = args.geomCoordOffsets,
136
+ _args$batchOffset = args.batchOffset,
137
+ batchOffset = _args$batchOffset === void 0 ? 0 : _args$batchOffset;
138
+ if (propInput === undefined) {
139
+ return;
140
+ }
141
+ if (propInput instanceof arrow.Vector) {
142
+ var columnData = propInput.data[chunkIdx];
143
+ if (arrow.DataType.isFixedSizeList(columnData)) {
144
+ (0, _typed.assert)(columnData.children.length === 1);
145
+ var values = columnData.children[0].values;
146
+ if (geomCoordOffsets) {
147
+ values = expandArrayToCoords(values, columnData.type.listSize, geomCoordOffsets);
148
+ }
149
+ props.data.attributes[propName] = {
150
+ value: values,
151
+ size: columnData.type.listSize,
152
+ // Set to `true` to signify that colors are already 0-255, and deck/luma
153
+ // does not need to rescale
154
+ // https://github.com/visgl/deck.gl/blob/401d624c0529faaa62125714c376b3ba3b8f379f/docs/api-reference/core/attribute-manager.md?plain=1#L66
155
+ normalized: true
156
+ };
157
+ } else if (arrow.DataType.isFloat(columnData)) {
158
+ var _values = columnData.values;
159
+ if (geomCoordOffsets) {
160
+ _values = expandArrayToCoords(_values, 1, geomCoordOffsets);
161
+ }
162
+ props.data.attributes[propName] = {
163
+ value: _values,
164
+ size: 1
165
+ };
166
+ }
167
+ } else if (typeof propInput === 'function') {
168
+ props[propName] = function (object, objectInfo) {
169
+ // Special case that doesn't have the same parameters
170
+ if (propName === 'getPolygonOffset') {
171
+ return propInput(object, objectInfo);
172
+ }
173
+ return wrapAccessorFunction(objectInfo, propInput, batchOffset);
174
+ };
175
+ } else {
176
+ props[propName] = propInput;
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Expand an array from "one element per geometry" to "one element per coordinate"
182
+ *
183
+ * @param input: the input array to expand
184
+ * @param size : the number of nested elements in the input array per geometry. So for example, for RGB data this would be 3, for RGBA this would be 4. For radius, this would be 1.
185
+ * @param geomOffsets : an offsets array mapping from the geometry to the coordinate indexes. So in the case of a LineStringArray, this is retrieved directly from the GeoArrow storage. In the case of a PolygonArray, this comes from the resolved indexes that need to be given to the SolidPolygonLayer anyways.
186
+ *
187
+ * @return {TypedArray} values expanded to be per-coordinate
188
+ */
189
+ function expandArrayToCoords(input, size, geomOffsets) {
190
+ var numCoords = geomOffsets[geomOffsets.length - 1];
191
+ // @ts-expect-error
192
+ var outputArray = new input.constructor(numCoords * size);
193
+
194
+ // geomIdx is an index into the geomOffsets array
195
+ // geomIdx is also the geometry/table index
196
+ for (var geomIdx = 0; geomIdx < geomOffsets.length - 1; geomIdx++) {
197
+ // geomOffsets maps from the geometry index to the coord index
198
+ // So here we get the range of coords that this geometry covers
199
+ var lastCoordIdx = geomOffsets[geomIdx];
200
+ var nextCoordIdx = geomOffsets[geomIdx + 1];
201
+
202
+ // Iterate over this range of coord indices
203
+ for (var coordIdx = lastCoordIdx; coordIdx < nextCoordIdx; coordIdx++) {
204
+ // Iterate over size
205
+ for (var i = 0; i < size; i++) {
206
+ // Copy from the geometry index in `input` to the coord index in
207
+ // `output`
208
+ outputArray[coordIdx * size + i] = input[geomIdx * size + i];
209
+ }
210
+ }
211
+ }
212
+ return outputArray;
213
+ }
214
+
215
+ /**
216
+ * Get a geometry vector with the specified extension type name from the table.
217
+ */
218
+ function getGeometryVector(table, geoarrowTypeName) {
219
+ var geometryColumnIdx = findGeometryColumnIndex(table.schema, geoarrowTypeName);
220
+ if (geometryColumnIdx === null) {
221
+ return null;
222
+ // throw new Error(`No column found with extension type ${geoarrowTypeName}`);
223
+ }
224
+ return table.getChildAt(geometryColumnIdx);
225
+ }
226
+ function getListNestingLevels(data) {
227
+ var nestingLevels = 0;
228
+ if (arrow.DataType.isList(data.type)) {
229
+ nestingLevels += 1;
230
+ data = data.children[0];
231
+ }
232
+ return nestingLevels;
233
+ }
234
+ function getMultiLineStringResolvedOffsets(data) {
235
+ var geomOffsets = data.valueOffsets;
236
+ var lineStringData = ga.child.getMultiLineStringChild(data);
237
+ var ringOffsets = lineStringData.valueOffsets;
238
+ var resolvedRingOffsets = new Int32Array(geomOffsets.length);
239
+ for (var i = 0; i < resolvedRingOffsets.length; ++i) {
240
+ // Perform the lookup into the ringIndices array using the geomOffsets
241
+ // array
242
+ resolvedRingOffsets[i] = ringOffsets[geomOffsets[i]];
243
+ }
244
+ return resolvedRingOffsets;
245
+ }
246
+ function getPolygonResolvedOffsets(data) {
247
+ var geomOffsets = data.valueOffsets;
248
+ var ringData = ga.child.getPolygonChild(data);
249
+ var ringOffsets = ringData.valueOffsets;
250
+ var resolvedRingOffsets = new Int32Array(geomOffsets.length);
251
+ for (var i = 0; i < resolvedRingOffsets.length; ++i) {
252
+ // Perform the lookup into the ringIndices array using the geomOffsets
253
+ // array
254
+ resolvedRingOffsets[i] = ringOffsets[geomOffsets[i]];
255
+ }
256
+ return resolvedRingOffsets;
257
+ }
258
+ function getMultiPolygonResolvedOffsets(data) {
259
+ var polygonData = ga.child.getMultiPolygonChild(data);
260
+ var ringData = ga.child.getPolygonChild(polygonData);
261
+ var geomOffsets = data.valueOffsets;
262
+ var polygonOffsets = polygonData.valueOffsets;
263
+ var ringOffsets = ringData.valueOffsets;
264
+ var resolvedRingOffsets = new Int32Array(geomOffsets.length);
265
+ for (var i = 0; i < resolvedRingOffsets.length; ++i) {
266
+ resolvedRingOffsets[i] = ringOffsets[polygonOffsets[geomOffsets[i]]];
267
+ }
268
+ return resolvedRingOffsets;
269
+ }
270
+
271
+ /**
272
+ * Invert offsets so that lookup can go in the opposite direction
273
+ */
274
+ function invertOffsets(offsets) {
275
+ var largestOffset = offsets[offsets.length - 1];
276
+ var arrayConstructor = offsets.length < Math.pow(2, 8) ? Uint8Array : offsets.length < Math.pow(2, 16) ? Uint16Array : Uint32Array;
277
+ var invertedOffsets = new arrayConstructor(largestOffset);
278
+ for (var arrayIdx = 0; arrayIdx < offsets.length - 1; arrayIdx++) {
279
+ var thisOffset = offsets[arrayIdx];
280
+ var nextOffset = offsets[arrayIdx + 1];
281
+ for (var offset = thisOffset; offset < nextOffset; offset++) {
282
+ invertedOffsets[offset] = arrayIdx;
283
+ }
284
+ }
285
+ return invertedOffsets;
286
+ }
287
+
288
+ // TODO: better typing
289
+ function extractAccessorsFromProps(props, excludeKeys) {
290
+ var accessors = {};
291
+ var otherProps = {};
292
+ for (var _i = 0, _Object$entries = Object.entries(props); _i < _Object$entries.length; _i++) {
293
+ var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
294
+ key = _Object$entries$_i[0],
295
+ value = _Object$entries$_i[1];
296
+ if (excludeKeys.includes(key)) {
297
+ continue;
298
+ }
299
+ if (key.startsWith('get')) {
300
+ accessors[key] = value;
301
+ } else {
302
+ otherProps[key] = value;
303
+ }
304
+ }
305
+ return [accessors, otherProps];
306
+ }
307
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiYXJyb3ciLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImdhIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiZmluZEdlb21ldHJ5Q29sdW1uSW5kZXgiLCJzY2hlbWEiLCJleHRlbnNpb25OYW1lIiwiZ2VvbWV0cnlDb2x1bW5OYW1lIiwiaW5kZXgiLCJmaWVsZHMiLCJmaW5kSW5kZXgiLCJmaWVsZCIsIm5hbWUiLCJtZXRhZGF0YSIsImlzQ29sdW1uUmVmZXJlbmNlIiwiaW5wdXQiLCJpc0RhdGFJbnRlcmxlYXZlZENvb3JkcyIsImRhdGEiLCJ0eXBlIiwiRml4ZWRTaXplTGlzdCIsImlzRGF0YVNlcGFyYXRlZENvb3JkcyIsIlN0cnVjdCIsImNvbnZlcnRTdHJ1Y3RUb0ZpeGVkU2l6ZUxpc3QiLCJjb29yZHMiLCJpbnRlcmxlYXZlZENvb3JkcyIsIkZsb2F0NjRBcnJheSIsImxlbmd0aCIsIl9jb29yZHMkY2hpbGRyZW4iLCJfc2xpY2VkVG9BcnJheTIiLCJjaGlsZHJlbiIsInhDaGlsZCIsInlDaGlsZCIsInZhbHVlcyIsImNoaWxkRGF0YVR5cGUiLCJGbG9hdDY0IiwiZGF0YVR5cGUiLCJGaWVsZCIsImludGVybGVhdmVkQ29vcmRzRGF0YSIsIm1ha2VEYXRhIiwibnVsbENvdW50IiwibnVsbEJpdG1hcCIsImNoaWxkIiwiYXNzZXJ0Iiwid3JhcEFjY2Vzc29yRnVuY3Rpb24iLCJvYmplY3RJbmZvIiwidXNlckFjY2Vzc29yRnVuY3Rpb24iLCJiYXRjaE9mZnNldCIsIm5ld0luZGV4IiwiaW52ZXJ0ZWRHZW9tT2Zmc2V0cyIsInVuZGVmaW5lZCIsIm5ld09iamVjdERhdGEiLCJhdHRyaWJ1dGVzIiwibmV3T2JqZWN0SW5mbyIsInRhcmdldCIsImFzc2lnbkFjY2Vzc29yIiwiYXJncyIsInByb3BzIiwicHJvcE5hbWUiLCJwcm9wSW5wdXQiLCJjaHVua0lkeCIsImdlb21Db29yZE9mZnNldHMiLCJfYXJncyRiYXRjaE9mZnNldCIsIlZlY3RvciIsImNvbHVtbkRhdGEiLCJEYXRhVHlwZSIsImlzRml4ZWRTaXplTGlzdCIsImV4cGFuZEFycmF5VG9Db29yZHMiLCJsaXN0U2l6ZSIsInZhbHVlIiwic2l6ZSIsIm5vcm1hbGl6ZWQiLCJpc0Zsb2F0Iiwib2JqZWN0IiwiZ2VvbU9mZnNldHMiLCJudW1Db29yZHMiLCJvdXRwdXRBcnJheSIsImNvbnN0cnVjdG9yIiwiZ2VvbUlkeCIsImxhc3RDb29yZElkeCIsIm5leHRDb29yZElkeCIsImNvb3JkSWR4IiwiZ2V0R2VvbWV0cnlWZWN0b3IiLCJ0YWJsZSIsImdlb2Fycm93VHlwZU5hbWUiLCJnZW9tZXRyeUNvbHVtbklkeCIsImdldENoaWxkQXQiLCJnZXRMaXN0TmVzdGluZ0xldmVscyIsIm5lc3RpbmdMZXZlbHMiLCJpc0xpc3QiLCJnZXRNdWx0aUxpbmVTdHJpbmdSZXNvbHZlZE9mZnNldHMiLCJ2YWx1ZU9mZnNldHMiLCJsaW5lU3RyaW5nRGF0YSIsImdldE11bHRpTGluZVN0cmluZ0NoaWxkIiwicmluZ09mZnNldHMiLCJyZXNvbHZlZFJpbmdPZmZzZXRzIiwiSW50MzJBcnJheSIsImdldFBvbHlnb25SZXNvbHZlZE9mZnNldHMiLCJyaW5nRGF0YSIsImdldFBvbHlnb25DaGlsZCIsImdldE11bHRpUG9seWdvblJlc29sdmVkT2Zmc2V0cyIsInBvbHlnb25EYXRhIiwiZ2V0TXVsdGlQb2x5Z29uQ2hpbGQiLCJwb2x5Z29uT2Zmc2V0cyIsImludmVydE9mZnNldHMiLCJvZmZzZXRzIiwibGFyZ2VzdE9mZnNldCIsImFycmF5Q29uc3RydWN0b3IiLCJNYXRoIiwicG93IiwiVWludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJpbnZlcnRlZE9mZnNldHMiLCJhcnJheUlkeCIsInRoaXNPZmZzZXQiLCJuZXh0T2Zmc2V0Iiwib2Zmc2V0IiwiZXh0cmFjdEFjY2Vzc29yc0Zyb21Qcm9wcyIsImV4Y2x1ZGVLZXlzIiwiYWNjZXNzb3JzIiwib3RoZXJQcm9wcyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsImtleSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBkZWNrLmdsLWNvbW11bml0eVxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IChjKSB2aXMuZ2wgY29udHJpYnV0b3JzXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgKiBhcyBnYSBmcm9tICdAZ2VvYXJyb3cvZ2VvYXJyb3ctanMnO1xuaW1wb3J0IHtBY2Nlc3NvckNvbnRleHQsIEFjY2Vzc29yRnVuY3Rpb24sIF9JbnRlcm5hbEFjY2Vzc29yQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID1cbiAgfCBVaW50OEFycmF5XG4gIHwgVWludDhDbGFtcGVkQXJyYXlcbiAgfCBVaW50MTZBcnJheVxuICB8IFVpbnQzMkFycmF5XG4gIHwgSW50OEFycmF5XG4gIHwgSW50MTZBcnJheVxuICB8IEludDMyQXJyYXlcbiAgfCBGbG9hdDMyQXJyYXlcbiAgfCBGbG9hdDY0QXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kR2VvbWV0cnlDb2x1bW5JbmRleChcbiAgc2NoZW1hOiBhcnJvdy5TY2hlbWEsXG4gIGV4dGVuc2lvbk5hbWU6IHN0cmluZyxcbiAgZ2VvbWV0cnlDb2x1bW5OYW1lPzogc3RyaW5nIHwgbnVsbFxuKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IGluZGV4ID0gc2NoZW1hLmZpZWxkcy5maW5kSW5kZXgoXG4gICAgZmllbGQgPT5cbiAgICAgIGZpZWxkLm5hbWUgPT09IGdlb21ldHJ5Q29sdW1uTmFtZSB8fFxuICAgICAgZmllbGQubWV0YWRhdGEuZ2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScpID09PSBleHRlbnNpb25OYW1lXG4gICk7XG4gIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIHRoZSB0YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2x1bW5SZWZlcmVuY2UoaW5wdXQ6IGFueSk6IGlucHV0IGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFJbnRlcmxlYXZlZENvb3JkcyhcbiAgZGF0YTogYXJyb3cuRGF0YVxuKTogZGF0YSBpcyBhcnJvdy5EYXRhPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuRmxvYXQ2ND4+IHtcbiAgLy8gVE9ETzogYWxzbyBjaGVjayAyIG9yIDNkPyBGbG9hdDY0P1xuICByZXR1cm4gZGF0YS50eXBlIGluc3RhbmNlb2YgYXJyb3cuRml4ZWRTaXplTGlzdDtcbn1cblxuZnVuY3Rpb24gaXNEYXRhU2VwYXJhdGVkQ29vcmRzKFxuICBkYXRhOiBhcnJvdy5EYXRhXG4pOiBkYXRhIGlzIGFycm93LkRhdGE8YXJyb3cuU3RydWN0PHt4OiBhcnJvdy5GbG9hdDY0OyB5OiBhcnJvdy5GbG9hdDY0fT4+IHtcbiAgLy8gVE9ETzogYWxzbyBjaGVjayBjaGlsZCBuYW1lcz8gRmxvYXQ2ND9cbiAgcmV0dXJuIGRhdGEudHlwZSBpbnN0YW5jZW9mIGFycm93LlN0cnVjdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGdlb2Fycm93IFN0cnVjdCBjb29yZGluYXRlcyB0byBGaXhlZFNpemVMaXN0IGNvb3Jkc1xuICpcbiAqIFRoZSBHZW9BcnJvdyBzcGVjIGFsbG93cyBmb3IgZWl0aGVyIHNlcGFyYXRlZCBvciBpbnRlcmxlYXZlZCBjb29yZHMsIGJ1dCBhdFxuICogdGhpcyB0aW1lIGRlY2suZ2wgb25seSBzdXBwb3J0cyBpbnRlcmxlYXZlZC5cbiAqL1xuLy8gVE9ETzogdGhpcyBoYXNuJ3QgYmVlbiB0ZXN0ZWQgeWV0XG4vLyBAdHMtZXhwZWN0LWVycm9yXG5mdW5jdGlvbiBjb252ZXJ0U3RydWN0VG9GaXhlZFNpemVMaXN0KFxuICBjb29yZHM6XG4gICAgfCBhcnJvdy5EYXRhPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuRmxvYXQ2ND4+XG4gICAgfCBhcnJvdy5EYXRhPGFycm93LlN0cnVjdDx7eDogYXJyb3cuRmxvYXQ2NDsgeTogYXJyb3cuRmxvYXQ2NH0+PlxuKTogYXJyb3cuRGF0YTxhcnJvdy5GaXhlZFNpemVMaXN0PGFycm93LkZsb2F0NjQ+PiB7XG4gIGlmIChpc0RhdGFJbnRlcmxlYXZlZENvb3Jkcyhjb29yZHMpKSB7XG4gICAgcmV0dXJuIGNvb3JkcztcbiAgfSBlbHNlIGlmIChpc0RhdGFTZXBhcmF0ZWRDb29yZHMoY29vcmRzKSkge1xuICAgIC8vIFRPRE86IHN1cHBvcnQgM2RcbiAgICBjb25zdCBpbnRlcmxlYXZlZENvb3JkcyA9IG5ldyBGbG9hdDY0QXJyYXkoY29vcmRzLmxlbmd0aCAqIDIpO1xuICAgIGNvbnN0IFt4Q2hpbGQsIHlDaGlsZF0gPSBjb29yZHMuY2hpbGRyZW47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGludGVybGVhdmVkQ29vcmRzW2kgKiAyXSA9IHhDaGlsZC52YWx1ZXNbaV07XG4gICAgICBpbnRlcmxlYXZlZENvb3Jkc1tpICogMiArIDFdID0geUNoaWxkLnZhbHVlc1tpXTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZERhdGFUeXBlID0gbmV3IGFycm93LkZsb2F0NjQoKTtcbiAgICBjb25zdCBkYXRhVHlwZSA9IG5ldyBhcnJvdy5GaXhlZFNpemVMaXN0KDIsIG5ldyBhcnJvdy5GaWVsZCgnY29vcmRzJywgY2hpbGREYXRhVHlwZSkpO1xuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWRDb29yZHNEYXRhID0gYXJyb3cubWFrZURhdGEoe1xuICAgICAgdHlwZTogY2hpbGREYXRhVHlwZSxcbiAgICAgIGxlbmd0aDogaW50ZXJsZWF2ZWRDb29yZHMubGVuZ3RoXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gYXJyb3cubWFrZURhdGEoe1xuICAgICAgdHlwZTogZGF0YVR5cGUsXG4gICAgICBsZW5ndGg6IGNvb3Jkcy5sZW5ndGgsXG4gICAgICBudWxsQ291bnQ6IGNvb3Jkcy5udWxsQ291bnQsXG4gICAgICBudWxsQml0bWFwOiBjb29yZHMubnVsbEJpdG1hcCxcbiAgICAgIGNoaWxkOiBpbnRlcmxlYXZlZENvb3Jkc0RhdGFcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzc2VydChmYWxzZSk7XG59XG5cbnR5cGUgQXNzaWduQWNjZXNzb3JQcm9wcyA9IHtcbiAgLyoqIFRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIHRoZSByZXNvbHZlZCBhY2Nlc29yICovXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKiogVGhlIG5hbWUgb2YgdGhlIHByb3AgdG8gc2V0ICovXG4gIHByb3BOYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgdXNlci1zdXBwbGllZCBpbnB1dCB0byB0aGUgbGF5ZXIuIE11c3QgZWl0aGVyIGJlIGEgc2NhbGFyIHZhbHVlIG9yIGEgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIHRoZSB0YWJsZS4gKi9cbiAgcHJvcElucHV0OiBhbnk7XG4gIC8qKiBOdW1lcmljIGluZGV4IGluIHRoZSB0YWJsZSAqL1xuICBjaHVua0lkeDogbnVtYmVyO1xuICAvKiogYSBtYXAgZnJvbSB0aGUgZ2VvbWV0cnkgaW5kZXggdG8gdGhlIGNvb3JkIG9mZnNldHMgZm9yIHRoYXQgZ2VvbWV0cnkuICovXG4gIGdlb21Db29yZE9mZnNldHM/OiBJbnQzMkFycmF5IHwgbnVsbDtcbiAgLyoqIEFic29sdXRlIG9mZnNldCBvZiB0aGUgYmF0Y2ggaW4gdGhlIHRhYmxlL3ZlY3Rvci4gQWRkZWQgdG8gdGhlIHNhbXBsaW5nIGluZGV4LiAqL1xuICBiYXRjaE9mZnNldD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBhIHVzZXItcHJvdmlkZWQgYWNjZXNzb3IgZnVuY3Rpb25cbiAqXG4gKiBGb3IgbGF5ZXJzIGxpa2UgU2NhdHRlcnBsb3QsIFBhdGgsIGFuZCBQb2x5Z29uLCB3ZSBhdXRvbWF0aWNhbGx5IGhhbmRsZVxuICogXCJleHBsb2RpbmdcIiB0aGUgdGFibGUgd2hlbiBtdWx0aS1nZW9tZXRyeSBpbnB1dCBhcmUgcHJvdmlkZWQuIFRoaXMgbWVhbnMgdGhhdFxuICogdGhlIHVwc3RyZWFtIGBpbmRleGAgdmFsdWUgcGFzc2VkIHRvIHRoZSB1c2VyIHdpbGwgYmUgdGhlIGNvcnJlY3Qgcm93IGluZGV4XG4gKiBfb25seV8gZm9yIG5vbi1leHBsb2RlZCBkYXRhLlxuICpcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgd2Ugc2ltcGxpZnkgdGhlIHVzZXIgdXNhZ2UgYnkgYXV0b21hdGljYWxseSBjb252ZXJ0aW5nXG4gKiBiYWNrIGZyb20gXCJleHBsb2RlZFwiIGluZGV4IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJvdyBpbmRleC5cbiAqL1xuZnVuY3Rpb24gd3JhcEFjY2Vzc29yRnVuY3Rpb248SW4sIE91dD4oXG4gIG9iamVjdEluZm86IF9JbnRlcm5hbEFjY2Vzc29yQ29udGV4dDxJbj4sXG4gIHVzZXJBY2Nlc3NvckZ1bmN0aW9uOiBBY2Nlc3NvckZ1bmN0aW9uPEluLCBPdXQ+LFxuICBiYXRjaE9mZnNldDogbnVtYmVyXG4pOiBPdXQge1xuICBjb25zdCB7aW5kZXgsIGRhdGF9ID0gb2JqZWN0SW5mbztcbiAgbGV0IG5ld0luZGV4ID0gaW5kZXggKyBiYXRjaE9mZnNldDtcbiAgaWYgKGRhdGEuaW52ZXJ0ZWRHZW9tT2Zmc2V0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmV3SW5kZXggPSBkYXRhLmludmVydGVkR2VvbU9mZnNldHNbaW5kZXhdO1xuICB9XG4gIGNvbnN0IG5ld09iamVjdERhdGEgPSB7XG4gICAgZGF0YTogZGF0YS5kYXRhLFxuICAgIGxlbmd0aDogZGF0YS5sZW5ndGgsXG4gICAgYXR0cmlidXRlczogZGF0YS5hdHRyaWJ1dGVzXG4gIH07XG4gIGNvbnN0IG5ld09iamVjdEluZm8gPSB7XG4gICAgaW5kZXg6IG5ld0luZGV4LFxuICAgIGRhdGE6IG5ld09iamVjdERhdGEsXG4gICAgdGFyZ2V0OiBvYmplY3RJbmZvLnRhcmdldFxuICB9O1xuICByZXR1cm4gdXNlckFjY2Vzc29yRnVuY3Rpb24obmV3T2JqZWN0SW5mbyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhY2Nlc3NvciBhbmQgYXNzaWduIHRvIHByb3BzIG9iamVjdFxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGFzIGEgaGVscGVyIGZ1bmN0aW9uIGJlY2F1c2UgYSBzY2FsYXIgcHJvcCBpcyBzZXQgYXQgdGhlIHRvcFxuICogbGV2ZWwgd2hpbGUgYSB2ZWN0b3JpemVkIHByb3AgaXMgc2V0IGluc2lkZSBkYXRhLmF0dHJpYnV0ZXNcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25BY2Nlc3NvcihhcmdzOiBBc3NpZ25BY2Nlc3NvclByb3BzKSB7XG4gIGNvbnN0IHtwcm9wcywgcHJvcE5hbWUsIHByb3BJbnB1dCwgY2h1bmtJZHgsIGdlb21Db29yZE9mZnNldHMsIGJhdGNoT2Zmc2V0ID0gMH0gPSBhcmdzO1xuXG4gIGlmIChwcm9wSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wSW5wdXQgaW5zdGFuY2VvZiBhcnJvdy5WZWN0b3IpIHtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gcHJvcElucHV0LmRhdGFbY2h1bmtJZHhdO1xuXG4gICAgaWYgKGFycm93LkRhdGFUeXBlLmlzRml4ZWRTaXplTGlzdChjb2x1bW5EYXRhKSkge1xuICAgICAgYXNzZXJ0KGNvbHVtbkRhdGEuY2hpbGRyZW4ubGVuZ3RoID09PSAxKTtcbiAgICAgIGxldCB2YWx1ZXMgPSBjb2x1bW5EYXRhLmNoaWxkcmVuWzBdLnZhbHVlcztcblxuICAgICAgaWYgKGdlb21Db29yZE9mZnNldHMpIHtcbiAgICAgICAgdmFsdWVzID0gZXhwYW5kQXJyYXlUb0Nvb3Jkcyh2YWx1ZXMsIGNvbHVtbkRhdGEudHlwZS5saXN0U2l6ZSwgZ2VvbUNvb3JkT2Zmc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzLmRhdGEuYXR0cmlidXRlc1twcm9wTmFtZV0gPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZXMsXG4gICAgICAgIHNpemU6IGNvbHVtbkRhdGEudHlwZS5saXN0U2l6ZSxcbiAgICAgICAgLy8gU2V0IHRvIGB0cnVlYCB0byBzaWduaWZ5IHRoYXQgY29sb3JzIGFyZSBhbHJlYWR5IDAtMjU1LCBhbmQgZGVjay9sdW1hXG4gICAgICAgIC8vIGRvZXMgbm90IG5lZWQgdG8gcmVzY2FsZVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmlzZ2wvZGVjay5nbC9ibG9iLzQwMWQ2MjRjMDUyOWZhYWE2MjEyNTcxNGMzNzZiM2JhM2I4ZjM3OWYvZG9jcy9hcGktcmVmZXJlbmNlL2NvcmUvYXR0cmlidXRlLW1hbmFnZXIubWQ/cGxhaW49MSNMNjZcbiAgICAgICAgbm9ybWFsaXplZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGFycm93LkRhdGFUeXBlLmlzRmxvYXQoY29sdW1uRGF0YSkpIHtcbiAgICAgIGxldCB2YWx1ZXMgPSBjb2x1bW5EYXRhLnZhbHVlcztcblxuICAgICAgaWYgKGdlb21Db29yZE9mZnNldHMpIHtcbiAgICAgICAgdmFsdWVzID0gZXhwYW5kQXJyYXlUb0Nvb3Jkcyh2YWx1ZXMsIDEsIGdlb21Db29yZE9mZnNldHMpO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy5kYXRhLmF0dHJpYnV0ZXNbcHJvcE5hbWVdID0ge1xuICAgICAgICB2YWx1ZTogdmFsdWVzLFxuICAgICAgICBzaXplOiAxXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvcHNbcHJvcE5hbWVdID0gPEluPihvYmplY3Q6IGFueSwgb2JqZWN0SW5mbzogQWNjZXNzb3JDb250ZXh0PEluPikgPT4ge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnNcbiAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2dldFBvbHlnb25PZmZzZXQnKSB7XG4gICAgICAgIHJldHVybiBwcm9wSW5wdXQob2JqZWN0LCBvYmplY3RJbmZvKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdyYXBBY2Nlc3NvckZ1bmN0aW9uKG9iamVjdEluZm8sIHByb3BJbnB1dCwgYmF0Y2hPZmZzZXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvcHNbcHJvcE5hbWVdID0gcHJvcElucHV0O1xuICB9XG59XG5cbi8qKlxuICogRXhwYW5kIGFuIGFycmF5IGZyb20gXCJvbmUgZWxlbWVudCBwZXIgZ2VvbWV0cnlcIiB0byBcIm9uZSBlbGVtZW50IHBlciBjb29yZGluYXRlXCJcbiAqXG4gKiBAcGFyYW0gaW5wdXQ6IHRoZSBpbnB1dCBhcnJheSB0byBleHBhbmRcbiAqIEBwYXJhbSBzaXplIDogdGhlIG51bWJlciBvZiBuZXN0ZWQgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5IHBlciBnZW9tZXRyeS4gU28gZm9yIGV4YW1wbGUsIGZvciBSR0IgZGF0YSB0aGlzIHdvdWxkIGJlIDMsIGZvciBSR0JBIHRoaXMgd291bGQgYmUgNC4gRm9yIHJhZGl1cywgdGhpcyB3b3VsZCBiZSAxLlxuICogQHBhcmFtIGdlb21PZmZzZXRzIDogYW4gb2Zmc2V0cyBhcnJheSBtYXBwaW5nIGZyb20gdGhlIGdlb21ldHJ5IHRvIHRoZSBjb29yZGluYXRlIGluZGV4ZXMuIFNvIGluIHRoZSBjYXNlIG9mIGEgTGluZVN0cmluZ0FycmF5LCB0aGlzIGlzIHJldHJpZXZlZCBkaXJlY3RseSBmcm9tIHRoZSBHZW9BcnJvdyBzdG9yYWdlLiBJbiB0aGUgY2FzZSBvZiBhIFBvbHlnb25BcnJheSwgdGhpcyBjb21lcyBmcm9tIHRoZSByZXNvbHZlZCBpbmRleGVzIHRoYXQgbmVlZCB0byBiZSBnaXZlbiB0byB0aGUgU29saWRQb2x5Z29uTGF5ZXIgYW55d2F5cy5cbiAqXG4gKiBAcmV0dXJuICB7VHlwZWRBcnJheX0gdmFsdWVzIGV4cGFuZGVkIHRvIGJlIHBlci1jb29yZGluYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRBcnJheVRvQ29vcmRzPFQgZXh0ZW5kcyBUeXBlZEFycmF5PihcbiAgaW5wdXQ6IFQsXG4gIHNpemU6IG51bWJlcixcbiAgZ2VvbU9mZnNldHM6IEludDMyQXJyYXlcbik6IFQge1xuICBjb25zdCBudW1Db29yZHMgPSBnZW9tT2Zmc2V0c1tnZW9tT2Zmc2V0cy5sZW5ndGggLSAxXTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBjb25zdCBvdXRwdXRBcnJheTogVCA9IG5ldyBpbnB1dC5jb25zdHJ1Y3RvcihudW1Db29yZHMgKiBzaXplKTtcblxuICAvLyBnZW9tSWR4IGlzIGFuIGluZGV4IGludG8gdGhlIGdlb21PZmZzZXRzIGFycmF5XG4gIC8vIGdlb21JZHggaXMgYWxzbyB0aGUgZ2VvbWV0cnkvdGFibGUgaW5kZXhcbiAgZm9yIChsZXQgZ2VvbUlkeCA9IDA7IGdlb21JZHggPCBnZW9tT2Zmc2V0cy5sZW5ndGggLSAxOyBnZW9tSWR4KyspIHtcbiAgICAvLyBnZW9tT2Zmc2V0cyBtYXBzIGZyb20gdGhlIGdlb21ldHJ5IGluZGV4IHRvIHRoZSBjb29yZCBpbmRleFxuICAgIC8vIFNvIGhlcmUgd2UgZ2V0IHRoZSByYW5nZSBvZiBjb29yZHMgdGhhdCB0aGlzIGdlb21ldHJ5IGNvdmVyc1xuICAgIGNvbnN0IGxhc3RDb29yZElkeCA9IGdlb21PZmZzZXRzW2dlb21JZHhdO1xuICAgIGNvbnN0IG5leHRDb29yZElkeCA9IGdlb21PZmZzZXRzW2dlb21JZHggKyAxXTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGlzIHJhbmdlIG9mIGNvb3JkIGluZGljZXNcbiAgICBmb3IgKGxldCBjb29yZElkeCA9IGxhc3RDb29yZElkeDsgY29vcmRJZHggPCBuZXh0Q29vcmRJZHg7IGNvb3JkSWR4KyspIHtcbiAgICAgIC8vIEl0ZXJhdGUgb3ZlciBzaXplXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAvLyBDb3B5IGZyb20gdGhlIGdlb21ldHJ5IGluZGV4IGluIGBpbnB1dGAgdG8gdGhlIGNvb3JkIGluZGV4IGluXG4gICAgICAgIC8vIGBvdXRwdXRgXG4gICAgICAgIG91dHB1dEFycmF5W2Nvb3JkSWR4ICogc2l6ZSArIGldID0gaW5wdXRbZ2VvbUlkeCAqIHNpemUgKyBpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0QXJyYXk7XG59XG5cbi8qKlxuICogR2V0IGEgZ2VvbWV0cnkgdmVjdG9yIHdpdGggdGhlIHNwZWNpZmllZCBleHRlbnNpb24gdHlwZSBuYW1lIGZyb20gdGhlIHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvbWV0cnlWZWN0b3IoXG4gIHRhYmxlOiBhcnJvdy5UYWJsZSxcbiAgZ2VvYXJyb3dUeXBlTmFtZTogc3RyaW5nXG4pOiBhcnJvdy5WZWN0b3IgfCBudWxsIHtcbiAgY29uc3QgZ2VvbWV0cnlDb2x1bW5JZHggPSBmaW5kR2VvbWV0cnlDb2x1bW5JbmRleCh0YWJsZS5zY2hlbWEsIGdlb2Fycm93VHlwZU5hbWUpO1xuXG4gIGlmIChnZW9tZXRyeUNvbHVtbklkeCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihgTm8gY29sdW1uIGZvdW5kIHdpdGggZXh0ZW5zaW9uIHR5cGUgJHtnZW9hcnJvd1R5cGVOYW1lfWApO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlLmdldENoaWxkQXQoZ2VvbWV0cnlDb2x1bW5JZHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdE5lc3RpbmdMZXZlbHMoZGF0YTogYXJyb3cuRGF0YSk6IG51bWJlciB7XG4gIGxldCBuZXN0aW5nTGV2ZWxzID0gMDtcbiAgaWYgKGFycm93LkRhdGFUeXBlLmlzTGlzdChkYXRhLnR5cGUpKSB7XG4gICAgbmVzdGluZ0xldmVscyArPSAxO1xuICAgIGRhdGEgPSBkYXRhLmNoaWxkcmVuWzBdO1xuICB9XG4gIHJldHVybiBuZXN0aW5nTGV2ZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TXVsdGlMaW5lU3RyaW5nUmVzb2x2ZWRPZmZzZXRzKGRhdGE6IGdhLmRhdGEuTXVsdGlMaW5lU3RyaW5nRGF0YSk6IEludDMyQXJyYXkge1xuICBjb25zdCBnZW9tT2Zmc2V0cyA9IGRhdGEudmFsdWVPZmZzZXRzO1xuICBjb25zdCBsaW5lU3RyaW5nRGF0YSA9IGdhLmNoaWxkLmdldE11bHRpTGluZVN0cmluZ0NoaWxkKGRhdGEpO1xuICBjb25zdCByaW5nT2Zmc2V0cyA9IGxpbmVTdHJpbmdEYXRhLnZhbHVlT2Zmc2V0cztcblxuICBjb25zdCByZXNvbHZlZFJpbmdPZmZzZXRzID0gbmV3IEludDMyQXJyYXkoZ2VvbU9mZnNldHMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFJpbmdPZmZzZXRzLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gUGVyZm9ybSB0aGUgbG9va3VwIGludG8gdGhlIHJpbmdJbmRpY2VzIGFycmF5IHVzaW5nIHRoZSBnZW9tT2Zmc2V0c1xuICAgIC8vIGFycmF5XG4gICAgcmVzb2x2ZWRSaW5nT2Zmc2V0c1tpXSA9IHJpbmdPZmZzZXRzW2dlb21PZmZzZXRzW2ldXTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJpbmdPZmZzZXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9seWdvblJlc29sdmVkT2Zmc2V0cyhkYXRhOiBnYS5kYXRhLlBvbHlnb25EYXRhKTogSW50MzJBcnJheSB7XG4gIGNvbnN0IGdlb21PZmZzZXRzID0gZGF0YS52YWx1ZU9mZnNldHM7XG4gIGNvbnN0IHJpbmdEYXRhID0gZ2EuY2hpbGQuZ2V0UG9seWdvbkNoaWxkKGRhdGEpO1xuICBjb25zdCByaW5nT2Zmc2V0cyA9IHJpbmdEYXRhLnZhbHVlT2Zmc2V0cztcblxuICBjb25zdCByZXNvbHZlZFJpbmdPZmZzZXRzID0gbmV3IEludDMyQXJyYXkoZ2VvbU9mZnNldHMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFJpbmdPZmZzZXRzLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gUGVyZm9ybSB0aGUgbG9va3VwIGludG8gdGhlIHJpbmdJbmRpY2VzIGFycmF5IHVzaW5nIHRoZSBnZW9tT2Zmc2V0c1xuICAgIC8vIGFycmF5XG4gICAgcmVzb2x2ZWRSaW5nT2Zmc2V0c1tpXSA9IHJpbmdPZmZzZXRzW2dlb21PZmZzZXRzW2ldXTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJpbmdPZmZzZXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TXVsdGlQb2x5Z29uUmVzb2x2ZWRPZmZzZXRzKGRhdGE6IGdhLmRhdGEuTXVsdGlQb2x5Z29uRGF0YSk6IEludDMyQXJyYXkge1xuICBjb25zdCBwb2x5Z29uRGF0YSA9IGdhLmNoaWxkLmdldE11bHRpUG9seWdvbkNoaWxkKGRhdGEpO1xuICBjb25zdCByaW5nRGF0YSA9IGdhLmNoaWxkLmdldFBvbHlnb25DaGlsZChwb2x5Z29uRGF0YSk7XG5cbiAgY29uc3QgZ2VvbU9mZnNldHMgPSBkYXRhLnZhbHVlT2Zmc2V0cztcbiAgY29uc3QgcG9seWdvbk9mZnNldHMgPSBwb2x5Z29uRGF0YS52YWx1ZU9mZnNldHM7XG4gIGNvbnN0IHJpbmdPZmZzZXRzID0gcmluZ0RhdGEudmFsdWVPZmZzZXRzO1xuXG4gIGNvbnN0IHJlc29sdmVkUmluZ09mZnNldHMgPSBuZXcgSW50MzJBcnJheShnZW9tT2Zmc2V0cy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUmluZ09mZnNldHMubGVuZ3RoOyArK2kpIHtcbiAgICByZXNvbHZlZFJpbmdPZmZzZXRzW2ldID0gcmluZ09mZnNldHNbcG9seWdvbk9mZnNldHNbZ2VvbU9mZnNldHNbaV1dXTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJpbmdPZmZzZXRzO1xufVxuXG4vKipcbiAqIEludmVydCBvZmZzZXRzIHNvIHRoYXQgbG9va3VwIGNhbiBnbyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRPZmZzZXRzKG9mZnNldHM6IEludDMyQXJyYXkpOiBVaW50OEFycmF5IHwgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB7XG4gIGNvbnN0IGxhcmdlc3RPZmZzZXQgPSBvZmZzZXRzW29mZnNldHMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgYXJyYXlDb25zdHJ1Y3RvciA9XG4gICAgb2Zmc2V0cy5sZW5ndGggPCBNYXRoLnBvdygyLCA4KVxuICAgICAgPyBVaW50OEFycmF5XG4gICAgICA6IG9mZnNldHMubGVuZ3RoIDwgTWF0aC5wb3coMiwgMTYpXG4gICAgICA/IFVpbnQxNkFycmF5XG4gICAgICA6IFVpbnQzMkFycmF5O1xuXG4gIGNvbnN0IGludmVydGVkT2Zmc2V0cyA9IG5ldyBhcnJheUNvbnN0cnVjdG9yKGxhcmdlc3RPZmZzZXQpO1xuICBmb3IgKGxldCBhcnJheUlkeCA9IDA7IGFycmF5SWR4IDwgb2Zmc2V0cy5sZW5ndGggLSAxOyBhcnJheUlkeCsrKSB7XG4gICAgY29uc3QgdGhpc09mZnNldCA9IG9mZnNldHNbYXJyYXlJZHhdO1xuICAgIGNvbnN0IG5leHRPZmZzZXQgPSBvZmZzZXRzW2FycmF5SWR4ICsgMV07XG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gdGhpc09mZnNldDsgb2Zmc2V0IDwgbmV4dE9mZnNldDsgb2Zmc2V0KyspIHtcbiAgICAgIGludmVydGVkT2Zmc2V0c1tvZmZzZXRdID0gYXJyYXlJZHg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGludmVydGVkT2Zmc2V0cztcbn1cblxuLy8gVE9ETzogYmV0dGVyIHR5cGluZ1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBY2Nlc3NvcnNGcm9tUHJvcHMoXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBleGNsdWRlS2V5czogc3RyaW5nW11cbik6IFtSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSZWNvcmQ8c3RyaW5nLCBhbnk+XSB7XG4gIGNvbnN0IGFjY2Vzc29yczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBjb25zdCBvdGhlclByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgIGlmIChleGNsdWRlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2dldCcpKSB7XG4gICAgICBhY2Nlc3NvcnNba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlclByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2FjY2Vzc29ycywgb3RoZXJQcm9wc107XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxFQUFBLEdBQUFELHVCQUFBLENBQUFGLE9BQUE7QUFBNEMsU0FBQUkseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFILHdCQUFBRyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBVDVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQWtCTyxTQUFTVyx1QkFBdUJBLENBQ3JDQyxNQUFvQixFQUNwQkMsYUFBcUIsRUFDckJDLGtCQUFrQyxFQUNuQjtFQUNmLElBQU1DLEtBQUssR0FBR0gsTUFBTSxDQUFDSSxNQUFNLENBQUNDLFNBQVMsQ0FDbkMsVUFBQUMsS0FBSztJQUFBLE9BQ0hBLEtBQUssQ0FBQ0MsSUFBSSxLQUFLTCxrQkFBa0IsSUFDakNJLEtBQUssQ0FBQ0UsUUFBUSxDQUFDckIsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUtjLGFBQWE7RUFBQSxDQUNoRSxDQUFDO0VBQ0QsT0FBT0UsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHQSxLQUFLLEdBQUcsSUFBSTtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTSxpQkFBaUJBLENBQUNDLEtBQVUsRUFBbUI7RUFDN0QsT0FBTyxPQUFPQSxLQUFLLEtBQUssUUFBUTtBQUNsQztBQUVBLFNBQVNDLHVCQUF1QkEsQ0FDOUJDLElBQWdCLEVBQ3dDO0VBQ3hEO0VBQ0EsT0FBT0EsSUFBSSxDQUFDQyxJQUFJLFlBQVlyQyxLQUFLLENBQUNzQyxhQUFhO0FBQ2pEO0FBRUEsU0FBU0MscUJBQXFCQSxDQUM1QkgsSUFBZ0IsRUFDd0Q7RUFDeEU7RUFDQSxPQUFPQSxJQUFJLENBQUNDLElBQUksWUFBWXJDLEtBQUssQ0FBQ3dDLE1BQU07QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLDRCQUE0QkEsQ0FDbkNDLE1BRWtFLEVBQ2xCO0VBQ2hELElBQUlQLHVCQUF1QixDQUFDTyxNQUFNLENBQUMsRUFBRTtJQUNuQyxPQUFPQSxNQUFNO0VBQ2YsQ0FBQyxNQUFNLElBQUlILHFCQUFxQixDQUFDRyxNQUFNLENBQUMsRUFBRTtJQUN4QztJQUNBLElBQU1DLGlCQUFpQixHQUFHLElBQUlDLFlBQVksQ0FBQ0YsTUFBTSxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdELElBQUFDLGdCQUFBLE9BQUFDLGVBQUEsYUFBeUJMLE1BQU0sQ0FBQ00sUUFBUTtNQUFqQ0MsTUFBTSxHQUFBSCxnQkFBQTtNQUFFSSxNQUFNLEdBQUFKLGdCQUFBO0lBQ3JCLEtBQUssSUFBSXpCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3FCLE1BQU0sQ0FBQ0csTUFBTSxFQUFFeEIsQ0FBQyxFQUFFLEVBQUU7TUFDdENzQixpQkFBaUIsQ0FBQ3RCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRzRCLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDOUIsQ0FBQyxDQUFDO01BQzNDc0IsaUJBQWlCLENBQUN0QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHNkIsTUFBTSxDQUFDQyxNQUFNLENBQUM5QixDQUFDLENBQUM7SUFDakQ7SUFFQSxJQUFNK0IsYUFBYSxHQUFHLElBQUlwRCxLQUFLLENBQUNxRCxPQUFPLENBQUMsQ0FBQztJQUN6QyxJQUFNQyxRQUFRLEdBQUcsSUFBSXRELEtBQUssQ0FBQ3NDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSXRDLEtBQUssQ0FBQ3VELEtBQUssQ0FBQyxRQUFRLEVBQUVILGFBQWEsQ0FBQyxDQUFDO0lBRXJGLElBQU1JLHFCQUFxQixHQUFHeEQsS0FBSyxDQUFDeUQsUUFBUSxDQUFDO01BQzNDcEIsSUFBSSxFQUFFZSxhQUFhO01BQ25CUCxNQUFNLEVBQUVGLGlCQUFpQixDQUFDRTtJQUM1QixDQUFDLENBQUM7SUFFRixJQUFNVCxJQUFJLEdBQUdwQyxLQUFLLENBQUN5RCxRQUFRLENBQUM7TUFDMUJwQixJQUFJLEVBQUVpQixRQUFRO01BQ2RULE1BQU0sRUFBRUgsTUFBTSxDQUFDRyxNQUFNO01BQ3JCYSxTQUFTLEVBQUVoQixNQUFNLENBQUNnQixTQUFTO01BQzNCQyxVQUFVLEVBQUVqQixNQUFNLENBQUNpQixVQUFVO01BQzdCQyxLQUFLLEVBQUVKO0lBQ1QsQ0FBQyxDQUFDO0lBQ0YsT0FBT3BCLElBQUk7RUFDYjtFQUVBLElBQUF5QixhQUFNLEVBQUMsS0FBSyxDQUFDO0FBQ2Y7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLG9CQUFvQkEsQ0FDM0JDLFVBQXdDLEVBQ3hDQyxvQkFBK0MsRUFDL0NDLFdBQW1CLEVBQ2Q7RUFDTCxJQUFPdEMsS0FBSyxHQUFVb0MsVUFBVSxDQUF6QnBDLEtBQUs7SUFBRVMsSUFBSSxHQUFJMkIsVUFBVSxDQUFsQjNCLElBQUk7RUFDbEIsSUFBSThCLFFBQVEsR0FBR3ZDLEtBQUssR0FBR3NDLFdBQVc7RUFDbEMsSUFBSTdCLElBQUksQ0FBQytCLG1CQUFtQixLQUFLQyxTQUFTLEVBQUU7SUFDMUNGLFFBQVEsR0FBRzlCLElBQUksQ0FBQytCLG1CQUFtQixDQUFDeEMsS0FBSyxDQUFDO0VBQzVDO0VBQ0EsSUFBTTBDLGFBQWEsR0FBRztJQUNwQmpDLElBQUksRUFBRUEsSUFBSSxDQUFDQSxJQUFJO0lBQ2ZTLE1BQU0sRUFBRVQsSUFBSSxDQUFDUyxNQUFNO0lBQ25CeUIsVUFBVSxFQUFFbEMsSUFBSSxDQUFDa0M7RUFDbkIsQ0FBQztFQUNELElBQU1DLGFBQWEsR0FBRztJQUNwQjVDLEtBQUssRUFBRXVDLFFBQVE7SUFDZjlCLElBQUksRUFBRWlDLGFBQWE7SUFDbkJHLE1BQU0sRUFBRVQsVUFBVSxDQUFDUztFQUNyQixDQUFDO0VBQ0QsT0FBT1Isb0JBQW9CLENBQUNPLGFBQWEsQ0FBQztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGNBQWNBLENBQUNDLElBQXlCLEVBQUU7RUFDeEQsSUFBT0MsS0FBSyxHQUFzRUQsSUFBSSxDQUEvRUMsS0FBSztJQUFFQyxRQUFRLEdBQTRERixJQUFJLENBQXhFRSxRQUFRO0lBQUVDLFNBQVMsR0FBaURILElBQUksQ0FBOURHLFNBQVM7SUFBRUMsUUFBUSxHQUF1Q0osSUFBSSxDQUFuREksUUFBUTtJQUFFQyxnQkFBZ0IsR0FBcUJMLElBQUksQ0FBekNLLGdCQUFnQjtJQUFBQyxpQkFBQSxHQUFxQk4sSUFBSSxDQUF2QlQsV0FBVztJQUFYQSxXQUFXLEdBQUFlLGlCQUFBLGNBQUcsQ0FBQyxHQUFBQSxpQkFBQTtFQUU5RSxJQUFJSCxTQUFTLEtBQUtULFNBQVMsRUFBRTtJQUMzQjtFQUNGO0VBRUEsSUFBSVMsU0FBUyxZQUFZN0UsS0FBSyxDQUFDaUYsTUFBTSxFQUFFO0lBQ3JDLElBQU1DLFVBQVUsR0FBR0wsU0FBUyxDQUFDekMsSUFBSSxDQUFDMEMsUUFBUSxDQUFDO0lBRTNDLElBQUk5RSxLQUFLLENBQUNtRixRQUFRLENBQUNDLGVBQWUsQ0FBQ0YsVUFBVSxDQUFDLEVBQUU7TUFDOUMsSUFBQXJCLGFBQU0sRUFBQ3FCLFVBQVUsQ0FBQ2xDLFFBQVEsQ0FBQ0gsTUFBTSxLQUFLLENBQUMsQ0FBQztNQUN4QyxJQUFJTSxNQUFNLEdBQUcrQixVQUFVLENBQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNHLE1BQU07TUFFMUMsSUFBSTRCLGdCQUFnQixFQUFFO1FBQ3BCNUIsTUFBTSxHQUFHa0MsbUJBQW1CLENBQUNsQyxNQUFNLEVBQUUrQixVQUFVLENBQUM3QyxJQUFJLENBQUNpRCxRQUFRLEVBQUVQLGdCQUFnQixDQUFDO01BQ2xGO01BRUFKLEtBQUssQ0FBQ3ZDLElBQUksQ0FBQ2tDLFVBQVUsQ0FBQ00sUUFBUSxDQUFDLEdBQUc7UUFDaENXLEtBQUssRUFBRXBDLE1BQU07UUFDYnFDLElBQUksRUFBRU4sVUFBVSxDQUFDN0MsSUFBSSxDQUFDaUQsUUFBUTtRQUM5QjtRQUNBO1FBQ0E7UUFDQUcsVUFBVSxFQUFFO01BQ2QsQ0FBQztJQUNILENBQUMsTUFBTSxJQUFJekYsS0FBSyxDQUFDbUYsUUFBUSxDQUFDTyxPQUFPLENBQUNSLFVBQVUsQ0FBQyxFQUFFO01BQzdDLElBQUkvQixPQUFNLEdBQUcrQixVQUFVLENBQUMvQixNQUFNO01BRTlCLElBQUk0QixnQkFBZ0IsRUFBRTtRQUNwQjVCLE9BQU0sR0FBR2tDLG1CQUFtQixDQUFDbEMsT0FBTSxFQUFFLENBQUMsRUFBRTRCLGdCQUFnQixDQUFDO01BQzNEO01BRUFKLEtBQUssQ0FBQ3ZDLElBQUksQ0FBQ2tDLFVBQVUsQ0FBQ00sUUFBUSxDQUFDLEdBQUc7UUFDaENXLEtBQUssRUFBRXBDLE9BQU07UUFDYnFDLElBQUksRUFBRTtNQUNSLENBQUM7SUFDSDtFQUNGLENBQUMsTUFBTSxJQUFJLE9BQU9YLFNBQVMsS0FBSyxVQUFVLEVBQUU7SUFDMUNGLEtBQUssQ0FBQ0MsUUFBUSxDQUFDLEdBQUcsVUFBS2UsTUFBVyxFQUFFNUIsVUFBK0IsRUFBSztNQUN0RTtNQUNBLElBQUlhLFFBQVEsS0FBSyxrQkFBa0IsRUFBRTtRQUNuQyxPQUFPQyxTQUFTLENBQUNjLE1BQU0sRUFBRTVCLFVBQVUsQ0FBQztNQUN0QztNQUVBLE9BQU9ELG9CQUFvQixDQUFDQyxVQUFVLEVBQUVjLFNBQVMsRUFBRVosV0FBVyxDQUFDO0lBQ2pFLENBQUM7RUFDSCxDQUFDLE1BQU07SUFDTFUsS0FBSyxDQUFDQyxRQUFRLENBQUMsR0FBR0MsU0FBUztFQUM3QjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNRLG1CQUFtQkEsQ0FDakNuRCxLQUFRLEVBQ1JzRCxJQUFZLEVBQ1pJLFdBQXVCLEVBQ3BCO0VBQ0gsSUFBTUMsU0FBUyxHQUFHRCxXQUFXLENBQUNBLFdBQVcsQ0FBQy9DLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDckQ7RUFDQSxJQUFNaUQsV0FBYyxHQUFHLElBQUk1RCxLQUFLLENBQUM2RCxXQUFXLENBQUNGLFNBQVMsR0FBR0wsSUFBSSxDQUFDOztFQUU5RDtFQUNBO0VBQ0EsS0FBSyxJQUFJUSxPQUFPLEdBQUcsQ0FBQyxFQUFFQSxPQUFPLEdBQUdKLFdBQVcsQ0FBQy9DLE1BQU0sR0FBRyxDQUFDLEVBQUVtRCxPQUFPLEVBQUUsRUFBRTtJQUNqRTtJQUNBO0lBQ0EsSUFBTUMsWUFBWSxHQUFHTCxXQUFXLENBQUNJLE9BQU8sQ0FBQztJQUN6QyxJQUFNRSxZQUFZLEdBQUdOLFdBQVcsQ0FBQ0ksT0FBTyxHQUFHLENBQUMsQ0FBQzs7SUFFN0M7SUFDQSxLQUFLLElBQUlHLFFBQVEsR0FBR0YsWUFBWSxFQUFFRSxRQUFRLEdBQUdELFlBQVksRUFBRUMsUUFBUSxFQUFFLEVBQUU7TUFDckU7TUFDQSxLQUFLLElBQUk5RSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtRSxJQUFJLEVBQUVuRSxDQUFDLEVBQUUsRUFBRTtRQUM3QjtRQUNBO1FBQ0F5RSxXQUFXLENBQUNLLFFBQVEsR0FBR1gsSUFBSSxHQUFHbkUsQ0FBQyxDQUFDLEdBQUdhLEtBQUssQ0FBQzhELE9BQU8sR0FBR1IsSUFBSSxHQUFHbkUsQ0FBQyxDQUFDO01BQzlEO0lBQ0Y7RUFDRjtFQUVBLE9BQU95RSxXQUFXO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLGlCQUFpQkEsQ0FDL0JDLEtBQWtCLEVBQ2xCQyxnQkFBd0IsRUFDSDtFQUNyQixJQUFNQyxpQkFBaUIsR0FBR2hGLHVCQUF1QixDQUFDOEUsS0FBSyxDQUFDN0UsTUFBTSxFQUFFOEUsZ0JBQWdCLENBQUM7RUFFakYsSUFBSUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFO0lBQzlCLE9BQU8sSUFBSTtJQUNYO0VBQ0Y7RUFFQSxPQUFPRixLQUFLLENBQUNHLFVBQVUsQ0FBQ0QsaUJBQWlCLENBQUM7QUFDNUM7QUFFTyxTQUFTRSxvQkFBb0JBLENBQUNyRSxJQUFnQixFQUFVO0VBQzdELElBQUlzRSxhQUFhLEdBQUcsQ0FBQztFQUNyQixJQUFJMUcsS0FBSyxDQUFDbUYsUUFBUSxDQUFDd0IsTUFBTSxDQUFDdkUsSUFBSSxDQUFDQyxJQUFJLENBQUMsRUFBRTtJQUNwQ3FFLGFBQWEsSUFBSSxDQUFDO0lBQ2xCdEUsSUFBSSxHQUFHQSxJQUFJLENBQUNZLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDekI7RUFDQSxPQUFPMEQsYUFBYTtBQUN0QjtBQUVPLFNBQVNFLGlDQUFpQ0EsQ0FBQ3hFLElBQWlDLEVBQWM7RUFDL0YsSUFBTXdELFdBQVcsR0FBR3hELElBQUksQ0FBQ3lFLFlBQVk7RUFDckMsSUFBTUMsY0FBYyxHQUFHNUcsRUFBRSxDQUFDMEQsS0FBSyxDQUFDbUQsdUJBQXVCLENBQUMzRSxJQUFJLENBQUM7RUFDN0QsSUFBTTRFLFdBQVcsR0FBR0YsY0FBYyxDQUFDRCxZQUFZO0VBRS9DLElBQU1JLG1CQUFtQixHQUFHLElBQUlDLFVBQVUsQ0FBQ3RCLFdBQVcsQ0FBQy9DLE1BQU0sQ0FBQztFQUM5RCxLQUFLLElBQUl4QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc0RixtQkFBbUIsQ0FBQ3BFLE1BQU0sRUFBRSxFQUFFeEIsQ0FBQyxFQUFFO0lBQ25EO0lBQ0E7SUFDQTRGLG1CQUFtQixDQUFDNUYsQ0FBQyxDQUFDLEdBQUcyRixXQUFXLENBQUNwQixXQUFXLENBQUN2RSxDQUFDLENBQUMsQ0FBQztFQUN0RDtFQUVBLE9BQU80RixtQkFBbUI7QUFDNUI7QUFFTyxTQUFTRSx5QkFBeUJBLENBQUMvRSxJQUF5QixFQUFjO0VBQy9FLElBQU13RCxXQUFXLEdBQUd4RCxJQUFJLENBQUN5RSxZQUFZO0VBQ3JDLElBQU1PLFFBQVEsR0FBR2xILEVBQUUsQ0FBQzBELEtBQUssQ0FBQ3lELGVBQWUsQ0FBQ2pGLElBQUksQ0FBQztFQUMvQyxJQUFNNEUsV0FBVyxHQUFHSSxRQUFRLENBQUNQLFlBQVk7RUFFekMsSUFBTUksbUJBQW1CLEdBQUcsSUFBSUMsVUFBVSxDQUFDdEIsV0FBVyxDQUFDL0MsTUFBTSxDQUFDO0VBQzlELEtBQUssSUFBSXhCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzRGLG1CQUFtQixDQUFDcEUsTUFBTSxFQUFFLEVBQUV4QixDQUFDLEVBQUU7SUFDbkQ7SUFDQTtJQUNBNEYsbUJBQW1CLENBQUM1RixDQUFDLENBQUMsR0FBRzJGLFdBQVcsQ0FBQ3BCLFdBQVcsQ0FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0VBQ3REO0VBRUEsT0FBTzRGLG1CQUFtQjtBQUM1QjtBQUVPLFNBQVNLLDhCQUE4QkEsQ0FBQ2xGLElBQThCLEVBQWM7RUFDekYsSUFBTW1GLFdBQVcsR0FBR3JILEVBQUUsQ0FBQzBELEtBQUssQ0FBQzRELG9CQUFvQixDQUFDcEYsSUFBSSxDQUFDO0VBQ3ZELElBQU1nRixRQUFRLEdBQUdsSCxFQUFFLENBQUMwRCxLQUFLLENBQUN5RCxlQUFlLENBQUNFLFdBQVcsQ0FBQztFQUV0RCxJQUFNM0IsV0FBVyxHQUFHeEQsSUFBSSxDQUFDeUUsWUFBWTtFQUNyQyxJQUFNWSxjQUFjLEdBQUdGLFdBQVcsQ0FBQ1YsWUFBWTtFQUMvQyxJQUFNRyxXQUFXLEdBQUdJLFFBQVEsQ0FBQ1AsWUFBWTtFQUV6QyxJQUFNSSxtQkFBbUIsR0FBRyxJQUFJQyxVQUFVLENBQUN0QixXQUFXLENBQUMvQyxNQUFNLENBQUM7RUFDOUQsS0FBSyxJQUFJeEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNEYsbUJBQW1CLENBQUNwRSxNQUFNLEVBQUUsRUFBRXhCLENBQUMsRUFBRTtJQUNuRDRGLG1CQUFtQixDQUFDNUYsQ0FBQyxDQUFDLEdBQUcyRixXQUFXLENBQUNTLGNBQWMsQ0FBQzdCLFdBQVcsQ0FBQ3ZFLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEU7RUFFQSxPQUFPNEYsbUJBQW1CO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNTLGFBQWFBLENBQUNDLE9BQW1CLEVBQTBDO0VBQ3pGLElBQU1DLGFBQWEsR0FBR0QsT0FBTyxDQUFDQSxPQUFPLENBQUM5RSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWpELElBQU1nRixnQkFBZ0IsR0FDcEJGLE9BQU8sQ0FBQzlFLE1BQU0sR0FBR2lGLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDM0JDLFVBQVUsR0FDVkwsT0FBTyxDQUFDOUUsTUFBTSxHQUFHaUYsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUNoQ0UsV0FBVyxHQUNYQyxXQUFXO0VBRWpCLElBQU1DLGVBQWUsR0FBRyxJQUFJTixnQkFBZ0IsQ0FBQ0QsYUFBYSxDQUFDO0VBQzNELEtBQUssSUFBSVEsUUFBUSxHQUFHLENBQUMsRUFBRUEsUUFBUSxHQUFHVCxPQUFPLENBQUM5RSxNQUFNLEdBQUcsQ0FBQyxFQUFFdUYsUUFBUSxFQUFFLEVBQUU7SUFDaEUsSUFBTUMsVUFBVSxHQUFHVixPQUFPLENBQUNTLFFBQVEsQ0FBQztJQUNwQyxJQUFNRSxVQUFVLEdBQUdYLE9BQU8sQ0FBQ1MsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN4QyxLQUFLLElBQUlHLE1BQU0sR0FBR0YsVUFBVSxFQUFFRSxNQUFNLEdBQUdELFVBQVUsRUFBRUMsTUFBTSxFQUFFLEVBQUU7TUFDM0RKLGVBQWUsQ0FBQ0ksTUFBTSxDQUFDLEdBQUdILFFBQVE7SUFDcEM7RUFDRjtFQUVBLE9BQU9ELGVBQWU7QUFDeEI7O0FBRUE7QUFDTyxTQUFTSyx5QkFBeUJBLENBQ3ZDN0QsS0FBMEIsRUFDMUI4RCxXQUFxQixFQUN1QjtFQUM1QyxJQUFNQyxTQUE4QixHQUFHLENBQUMsQ0FBQztFQUN6QyxJQUFNQyxVQUErQixHQUFHLENBQUMsQ0FBQztFQUMxQyxTQUFBQyxFQUFBLE1BQUFDLGVBQUEsR0FBMkI5SCxNQUFNLENBQUMrSCxPQUFPLENBQUNuRSxLQUFLLENBQUMsRUFBQWlFLEVBQUEsR0FBQUMsZUFBQSxDQUFBaEcsTUFBQSxFQUFBK0YsRUFBQSxJQUFFO0lBQTdDLElBQUFHLGtCQUFBLE9BQUFoRyxlQUFBLGFBQUE4RixlQUFBLENBQUFELEVBQUE7TUFBT0ksR0FBRyxHQUFBRCxrQkFBQTtNQUFFeEQsS0FBSyxHQUFBd0Qsa0JBQUE7SUFDcEIsSUFBSU4sV0FBVyxDQUFDUSxRQUFRLENBQUNELEdBQUcsQ0FBQyxFQUFFO01BQzdCO0lBQ0Y7SUFFQSxJQUFJQSxHQUFHLENBQUNFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtNQUN6QlIsU0FBUyxDQUFDTSxHQUFHLENBQUMsR0FBR3pELEtBQUs7SUFDeEIsQ0FBQyxNQUFNO01BQ0xvRCxVQUFVLENBQUNLLEdBQUcsQ0FBQyxHQUFHekQsS0FBSztJQUN6QjtFQUNGO0VBRUEsT0FBTyxDQUFDbUQsU0FBUyxFQUFFQyxVQUFVLENBQUM7QUFDaEMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,12 @@
1
+ import * as arrow from 'apache-arrow';
2
+ export declare function validateAccessors(props: Record<string, any>, table: arrow.Table): void;
3
+ /**
4
+ * Provide validation for accessors provided
5
+ *
6
+ * - Assert that all vectors have the same number of chunks as the main table
7
+ * - Assert that all chunks in each vector have the same number of rows as the
8
+ * relevant batch in the main table.
9
+ *
10
+ */
11
+ export declare function validateVectorAccessors(table: arrow.Table, vectorAccessors: arrow.Vector[]): void;
12
+ export declare function validateColorVector(vector: arrow.Vector): void;